diff --git a/.github/actions/triage/triage.patch b/.github/actions/triage/triage.patch deleted file mode 100644 index c130aa488f..0000000000 --- a/.github/actions/triage/triage.patch +++ /dev/null @@ -1,40597 +0,0 @@ -diff --git a/.github/ISSUE_TEMPLATE/1.bug_report_v3.yml b/.github/ISSUE_TEMPLATE/1.bug_report_v3.yml -index 3667d27d3..56584cf06 100644 ---- a/.github/ISSUE_TEMPLATE/1.bug_report_v3.yml -+++ b/.github/ISSUE_TEMPLATE/1.bug_report_v3.yml -@@ -1,6 +1,6 @@ --name: Bug Report v3 --description: Create a bug report for Payload v3 (beta) --labels: ['status: needs-triage', 'v3'] -+name: Functionality Bug -+description: '[REPRODUCTION REQUIRED] - Create a bug report' -+labels: ['status: needs-triage', 'v3', 'validate-reproduction'] - body: - - - type: textarea -@@ -14,8 +14,9 @@ body: - attributes: - label: Link to the code that reproduces this issue - description: >- -- Required: Please provide a link to your reproduction. Note, if the URL is invalid (404 or a private repository), we may close the issue. -- Either use `npx create-payload-app@beta -t blank` or follow the [reproduction-guide](https://github.com/payloadcms/payload/blob/main/.github/reproduction-guide.md) for more information. -+ _REQUIRED_: Please provide a link to your reproduction. Note, if the URL is invalid (404 or a private repository), we may close the issue. -+ -+ Either use `npx create-payload-app@beta -t blank` then push to a repo or follow the [reproduction-guide](https://github.com/payloadcms/payload/blob/main/.github/reproduction-guide.md) for more information. - validations: - required: true - -@@ -33,6 +34,7 @@ body: - options: - - 'Not sure' - - 'area: core' -+ - 'area: docs' - - 'area: templates' - - 'area: ui' - - 'db-mongodb' -diff --git a/.github/ISSUE_TEMPLATE/2.design_issue.yml b/.github/ISSUE_TEMPLATE/2.design_issue.yml -new file mode 100644 -index 000000000..7f2bc950c ---- /dev/null -+++ b/.github/ISSUE_TEMPLATE/2.design_issue.yml -@@ -0,0 +1,39 @@ -+name: Design Issue -+description: '[SCREENSHOT REQUIRED] - Create a design issue report' -+labels: ['status: needs-triage', 'v3', 'area: ui'] -+body: -+ -+ - type: textarea -+ attributes: -+ label: Describe the Bug -+ validations: -+ required: true -+ -+ - type: textarea -+ attributes: -+ label: Reproduction Steps -+ description: Steps to reproduce the behavior, please provide a clear description of how to reproduce the issue, based on the linked minimal reproduction. Screenshots can be provided in the issue body below. If using code blocks, make sure that [syntax highlighting is correct](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-and-highlighting-code-blocks#syntax-highlighting) and double check that the rendered preview is not broken. -+ validations: -+ required: true -+ -+ - type: textarea -+ attributes: -+ label: Environment Info -+ description: Paste output from `pnpm payload info` (>= beta.92) _or_ Payload, Node.js, and Next.js versions. -+ render: text -+ placeholder: | -+ Payload: -+ Node.js: -+ Next.js: -+ validations: -+ required: true -+ -+ - type: markdown -+ attributes: -+ value: Before submitting the issue, go through the steps you've written down to make sure the steps provided are detailed and clear. -+ - type: markdown -+ attributes: -+ value: Contributors should be able to follow the steps provided in order to reproduce the bug. -+ - type: markdown -+ attributes: -+ value: These steps are used to add integration tests to ensure the same issue does not happen again. Thanks in advance! -diff --git a/.github/ISSUE_TEMPLATE/2.bug_report.yml b/.github/ISSUE_TEMPLATE/3.bug_report_v2.yml -similarity index 90% -rename from .github/ISSUE_TEMPLATE/2.bug_report.yml -rename to .github/ISSUE_TEMPLATE/3.bug_report_v2.yml -index cd3e825ff..e4301e7eb 100644 ---- a/.github/ISSUE_TEMPLATE/2.bug_report.yml -+++ b/.github/ISSUE_TEMPLATE/3.bug_report_v2.yml -@@ -1,11 +1,11 @@ --name: Bug Report --description: Create a bug report for Payload -+name: v2 Bug Report -+description: Report a bug for Payload v2. ONLY CRITICAL bugs will be fixed in v2. - labels: ['status: needs-triage', 'v2'] - body: - - type: markdown - attributes: - value: | -- *Note:* Feature requests should be opened as [discussions](https://github.com/payloadcms/payload/discussions/new?category=feature-requests-ideas). -+ ONLY CRITICAL bugs will be fixed in v2. - - type: input - id: reproduction-link - attributes: -diff --git a/.github/actions/triage/.eslintrc.js b/.github/actions/triage/.eslintrc.js -new file mode 100644 -index 000000000..21d3f28b0 ---- /dev/null -+++ b/.github/actions/triage/.eslintrc.js -@@ -0,0 +1,13 @@ -+module.exports = { -+ env: { -+ es6: true, -+ node: true, -+ }, -+ extends: ['eslint:recommended', 'plugin:@typescript-eslint/eslint-recommended'], -+ parser: '@typescript-eslint/parser', -+ parserOptions: { -+ ecmaVersion: 2018, -+ sourceType: 'module', -+ }, -+ plugins: ['@typescript-eslint'], -+} -diff --git a/.github/actions/triage/.prettierrc.js b/.github/actions/triage/.prettierrc.js -new file mode 100644 -index 000000000..61df3839e ---- /dev/null -+++ b/.github/actions/triage/.prettierrc.js -@@ -0,0 +1,8 @@ -+module.exports = { -+ printWidth: 100, -+ parser: 'typescript', -+ semi: false, -+ singleQuote: true, -+ trailingComma: 'all', -+ arrowParens: 'avoid', -+} -diff --git a/.github/actions/triage/LICENSE b/.github/actions/triage/LICENSE -new file mode 100644 -index 000000000..921f36b3a ---- /dev/null -+++ b/.github/actions/triage/LICENSE -@@ -0,0 +1,22 @@ -+MIT License -+ -+Copyright (c) 2024 Payload . All modification and additions are copyright of Payload. -+ -+--- -+ -+Original license: -+ISC License -+ -+Copyright (c) 2023, Balázs Orbán -+ -+Permission to use, copy, modify, and/or distribute this software for any -+purpose with or without fee is hereby granted, provided that the above -+copyright notice and this permission notice appear in all copies. -+ -+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -diff --git a/.github/actions/triage/README.md b/.github/actions/triage/README.md -new file mode 100644 -index 000000000..4ce2fb531 ---- /dev/null -+++ b/.github/actions/triage/README.md -@@ -0,0 +1,21 @@ -+# Triage -+ -+Modified version of https://github.com/balazsorban44/nissuer -+ -+## Modifications -+ -+- Port to TypeScript -+- Remove issue locking -+- Remove reproduction blocklist -+- Uses `@vercel/ncc` for packaging -+ -+## Development -+ -+> [!IMPORTANT] -+> Whenever a modification is made to the action, the action built to `dist` must be committed to the repository. -+ -+This is done by running: -+ -+```sh -+pnpm build -+``` -diff --git a/.github/actions/triage/action.yml b/.github/actions/triage/action.yml -new file mode 100644 -index 000000000..50e8fd9e0 ---- /dev/null -+++ b/.github/actions/triage/action.yml -@@ -0,0 +1,40 @@ -+name: Triage -+description: Initial triage for issues -+ -+inputs: -+ reproduction-comment: -+ description: 'Either a string or a path to a .md file inside the repository. Example: ".github/invalid-reproduction.md"' -+ default: '.github/invalid-reproduction.md' -+ reproduction-hosts: -+ description: 'Comma-separated list of hostnames that are allowed for reproductions. Example: "github.com,codesandbox.io"' -+ default: github.com -+ reproduction-invalid-label: -+ description: 'Label to apply to issues without a valid reproduction. Example: "invalid-reproduction"' -+ default: 'invalid-reproduction' -+ reproduction-issue-labels: -+ description: 'Comma-separated list of issue labels. If configured, only verify reproduction URLs of issues with one of these labels present. Adding a comma at the end will handle non-labeled issues as invalid. Example: "bug,", will consider issues with the label "bug" or no label.' -+ default: '' -+ reproduction-link-section: -+ description: 'A regular expression string with "(.*)" matching a valid URL in the issue body. The result is trimmed. Example: "### Link to reproduction(.*)### To reproduce"' -+ default: '### Link to reproduction(.*)### To reproduce' -+ tag-only: -+ description: Log and tag only. Do not perform closing or commenting actions. -+ default: false -+ -+runs: -+ using: "composite" -+ steps: -+ - name: Checkout code -+ if: ${{ github.event_name != 'pull_request' }} -+ uses: actions/checkout@v4 -+ - name: Run action -+ run: node ${{ github.action_path }}/dist/index.js -+ shell: sh -+ # https://github.com/actions/runner/issues/665#issuecomment-676581170 -+ env: -+ "INPUT_REPRODUCTION_COMMENT": ${{inputs.reproduction-comment}} -+ "INPUT_REPRODUCTION_HOSTS": ${{inputs.reproduction-hosts}} -+ "INPUT_REPRODUCTION_INVALID_LABEL": ${{inputs.reproduction-invalid-label}} -+ "INPUT_REPRODUCTION_ISSUE_LABELS": ${{inputs.reproduction-issue-labels}} -+ "INPUT_REPRODUCTION_LINK_SECTION": ${{inputs.reproduction-link-section}} -+ "INPUT_TAG_ONLY": ${{inputs.tag-only}} -diff --git a/.github/actions/triage/dist/index.js b/.github/actions/triage/dist/index.js -new file mode 100644 -index 000000000..66f48971b ---- /dev/null -+++ b/.github/actions/triage/dist/index.js -@@ -0,0 +1,34048 @@ -+/******/ (() => { // webpackBootstrap -+/******/ var __webpack_modules__ = ({ -+ -+/***/ 5578: -+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { -+ -+"use strict"; -+ -+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -+ if (k2 === undefined) k2 = k; -+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -+}) : (function(o, m, k, k2) { -+ if (k2 === undefined) k2 = k; -+ o[k2] = m[k]; -+})); -+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -+ Object.defineProperty(o, "default", { enumerable: true, value: v }); -+}) : function(o, v) { -+ o["default"] = v; -+}); -+var __importStar = (this && this.__importStar) || function (mod) { -+ if (mod && mod.__esModule) return mod; -+ var result = {}; -+ if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -+ __setModuleDefault(result, mod); -+ return result; -+}; -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+exports.issue = exports.issueCommand = void 0; -+const os = __importStar(__nccwpck_require__(2037)); -+const utils_1 = __nccwpck_require__(9428); -+/** -+ * Commands -+ * -+ * Command Format: -+ * ::name key=value,key=value::message -+ * -+ * Examples: -+ * ::warning::This is the message -+ * ::set-env name=MY_VAR::some value -+ */ -+function issueCommand(command, properties, message) { -+ const cmd = new Command(command, properties, message); -+ process.stdout.write(cmd.toString() + os.EOL); -+} -+exports.issueCommand = issueCommand; -+function issue(name, message = '') { -+ issueCommand(name, {}, message); -+} -+exports.issue = issue; -+const CMD_STRING = '::'; -+class Command { -+ constructor(command, properties, message) { -+ if (!command) { -+ command = 'missing.command'; -+ } -+ this.command = command; -+ this.properties = properties; -+ this.message = message; -+ } -+ toString() { -+ let cmdStr = CMD_STRING + this.command; -+ if (this.properties && Object.keys(this.properties).length > 0) { -+ cmdStr += ' '; -+ let first = true; -+ for (const key in this.properties) { -+ if (this.properties.hasOwnProperty(key)) { -+ const val = this.properties[key]; -+ if (val) { -+ if (first) { -+ first = false; -+ } -+ else { -+ cmdStr += ','; -+ } -+ cmdStr += `${key}=${escapeProperty(val)}`; -+ } -+ } -+ } -+ } -+ cmdStr += `${CMD_STRING}${escapeData(this.message)}`; -+ return cmdStr; -+ } -+} -+function escapeData(s) { -+ return utils_1.toCommandValue(s) -+ .replace(/%/g, '%25') -+ .replace(/\r/g, '%0D') -+ .replace(/\n/g, '%0A'); -+} -+function escapeProperty(s) { -+ return utils_1.toCommandValue(s) -+ .replace(/%/g, '%25') -+ .replace(/\r/g, '%0D') -+ .replace(/\n/g, '%0A') -+ .replace(/:/g, '%3A') -+ .replace(/,/g, '%2C'); -+} -+//# sourceMappingURL=command.js.map -+ -+/***/ }), -+ -+/***/ 4237: -+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { -+ -+"use strict"; -+ -+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -+ if (k2 === undefined) k2 = k; -+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -+}) : (function(o, m, k, k2) { -+ if (k2 === undefined) k2 = k; -+ o[k2] = m[k]; -+})); -+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -+ Object.defineProperty(o, "default", { enumerable: true, value: v }); -+}) : function(o, v) { -+ o["default"] = v; -+}); -+var __importStar = (this && this.__importStar) || function (mod) { -+ if (mod && mod.__esModule) return mod; -+ var result = {}; -+ if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -+ __setModuleDefault(result, mod); -+ return result; -+}; -+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { -+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } -+ return new (P || (P = Promise))(function (resolve, reject) { -+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } -+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } -+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } -+ step((generator = generator.apply(thisArg, _arguments || [])).next()); -+ }); -+}; -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0; -+const command_1 = __nccwpck_require__(5578); -+const file_command_1 = __nccwpck_require__(1197); -+const utils_1 = __nccwpck_require__(9428); -+const os = __importStar(__nccwpck_require__(2037)); -+const path = __importStar(__nccwpck_require__(1017)); -+const oidc_utils_1 = __nccwpck_require__(8649); -+/** -+ * The code to exit an action -+ */ -+var ExitCode; -+(function (ExitCode) { -+ /** -+ * A code indicating that the action was successful -+ */ -+ ExitCode[ExitCode["Success"] = 0] = "Success"; -+ /** -+ * A code indicating that the action was a failure -+ */ -+ ExitCode[ExitCode["Failure"] = 1] = "Failure"; -+})(ExitCode = exports.ExitCode || (exports.ExitCode = {})); -+//----------------------------------------------------------------------- -+// Variables -+//----------------------------------------------------------------------- -+/** -+ * Sets env variable for this action and future actions in the job -+ * @param name the name of the variable to set -+ * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify -+ */ -+// eslint-disable-next-line @typescript-eslint/no-explicit-any -+function exportVariable(name, val) { -+ const convertedVal = utils_1.toCommandValue(val); -+ process.env[name] = convertedVal; -+ const filePath = process.env['GITHUB_ENV'] || ''; -+ if (filePath) { -+ return file_command_1.issueFileCommand('ENV', file_command_1.prepareKeyValueMessage(name, val)); -+ } -+ command_1.issueCommand('set-env', { name }, convertedVal); -+} -+exports.exportVariable = exportVariable; -+/** -+ * Registers a secret which will get masked from logs -+ * @param secret value of the secret -+ */ -+function setSecret(secret) { -+ command_1.issueCommand('add-mask', {}, secret); -+} -+exports.setSecret = setSecret; -+/** -+ * Prepends inputPath to the PATH (for this action and future actions) -+ * @param inputPath -+ */ -+function addPath(inputPath) { -+ const filePath = process.env['GITHUB_PATH'] || ''; -+ if (filePath) { -+ file_command_1.issueFileCommand('PATH', inputPath); -+ } -+ else { -+ command_1.issueCommand('add-path', {}, inputPath); -+ } -+ process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`; -+} -+exports.addPath = addPath; -+/** -+ * Gets the value of an input. -+ * Unless trimWhitespace is set to false in InputOptions, the value is also trimmed. -+ * Returns an empty string if the value is not defined. -+ * -+ * @param name name of the input to get -+ * @param options optional. See InputOptions. -+ * @returns string -+ */ -+function getInput(name, options) { -+ const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || ''; -+ if (options && options.required && !val) { -+ throw new Error(`Input required and not supplied: ${name}`); -+ } -+ if (options && options.trimWhitespace === false) { -+ return val; -+ } -+ return val.trim(); -+} -+exports.getInput = getInput; -+/** -+ * Gets the values of an multiline input. Each value is also trimmed. -+ * -+ * @param name name of the input to get -+ * @param options optional. See InputOptions. -+ * @returns string[] -+ * -+ */ -+function getMultilineInput(name, options) { -+ const inputs = getInput(name, options) -+ .split('\n') -+ .filter(x => x !== ''); -+ if (options && options.trimWhitespace === false) { -+ return inputs; -+ } -+ return inputs.map(input => input.trim()); -+} -+exports.getMultilineInput = getMultilineInput; -+/** -+ * Gets the input value of the boolean type in the YAML 1.2 "core schema" specification. -+ * Support boolean input list: `true | True | TRUE | false | False | FALSE` . -+ * The return value is also in boolean type. -+ * ref: https://yaml.org/spec/1.2/spec.html#id2804923 -+ * -+ * @param name name of the input to get -+ * @param options optional. See InputOptions. -+ * @returns boolean -+ */ -+function getBooleanInput(name, options) { -+ const trueValue = ['true', 'True', 'TRUE']; -+ const falseValue = ['false', 'False', 'FALSE']; -+ const val = getInput(name, options); -+ if (trueValue.includes(val)) -+ return true; -+ if (falseValue.includes(val)) -+ return false; -+ throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${name}\n` + -+ `Support boolean input list: \`true | True | TRUE | false | False | FALSE\``); -+} -+exports.getBooleanInput = getBooleanInput; -+/** -+ * Sets the value of an output. -+ * -+ * @param name name of the output to set -+ * @param value value to store. Non-string values will be converted to a string via JSON.stringify -+ */ -+// eslint-disable-next-line @typescript-eslint/no-explicit-any -+function setOutput(name, value) { -+ const filePath = process.env['GITHUB_OUTPUT'] || ''; -+ if (filePath) { -+ return file_command_1.issueFileCommand('OUTPUT', file_command_1.prepareKeyValueMessage(name, value)); -+ } -+ process.stdout.write(os.EOL); -+ command_1.issueCommand('set-output', { name }, utils_1.toCommandValue(value)); -+} -+exports.setOutput = setOutput; -+/** -+ * Enables or disables the echoing of commands into stdout for the rest of the step. -+ * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set. -+ * -+ */ -+function setCommandEcho(enabled) { -+ command_1.issue('echo', enabled ? 'on' : 'off'); -+} -+exports.setCommandEcho = setCommandEcho; -+//----------------------------------------------------------------------- -+// Results -+//----------------------------------------------------------------------- -+/** -+ * Sets the action status to failed. -+ * When the action exits it will be with an exit code of 1 -+ * @param message add error issue message -+ */ -+function setFailed(message) { -+ process.exitCode = ExitCode.Failure; -+ error(message); -+} -+exports.setFailed = setFailed; -+//----------------------------------------------------------------------- -+// Logging Commands -+//----------------------------------------------------------------------- -+/** -+ * Gets whether Actions Step Debug is on or not -+ */ -+function isDebug() { -+ return process.env['RUNNER_DEBUG'] === '1'; -+} -+exports.isDebug = isDebug; -+/** -+ * Writes debug message to user log -+ * @param message debug message -+ */ -+function debug(message) { -+ command_1.issueCommand('debug', {}, message); -+} -+exports.debug = debug; -+/** -+ * Adds an error issue -+ * @param message error issue message. Errors will be converted to string via toString() -+ * @param properties optional properties to add to the annotation. -+ */ -+function error(message, properties = {}) { -+ command_1.issueCommand('error', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); -+} -+exports.error = error; -+/** -+ * Adds a warning issue -+ * @param message warning issue message. Errors will be converted to string via toString() -+ * @param properties optional properties to add to the annotation. -+ */ -+function warning(message, properties = {}) { -+ command_1.issueCommand('warning', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); -+} -+exports.warning = warning; -+/** -+ * Adds a notice issue -+ * @param message notice issue message. Errors will be converted to string via toString() -+ * @param properties optional properties to add to the annotation. -+ */ -+function notice(message, properties = {}) { -+ command_1.issueCommand('notice', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); -+} -+exports.notice = notice; -+/** -+ * Writes info to log with console.log. -+ * @param message info message -+ */ -+function info(message) { -+ process.stdout.write(message + os.EOL); -+} -+exports.info = info; -+/** -+ * Begin an output group. -+ * -+ * Output until the next `groupEnd` will be foldable in this group -+ * -+ * @param name The name of the output group -+ */ -+function startGroup(name) { -+ command_1.issue('group', name); -+} -+exports.startGroup = startGroup; -+/** -+ * End an output group. -+ */ -+function endGroup() { -+ command_1.issue('endgroup'); -+} -+exports.endGroup = endGroup; -+/** -+ * Wrap an asynchronous function call in a group. -+ * -+ * Returns the same type as the function itself. -+ * -+ * @param name The name of the group -+ * @param fn The function to wrap in the group -+ */ -+function group(name, fn) { -+ return __awaiter(this, void 0, void 0, function* () { -+ startGroup(name); -+ let result; -+ try { -+ result = yield fn(); -+ } -+ finally { -+ endGroup(); -+ } -+ return result; -+ }); -+} -+exports.group = group; -+//----------------------------------------------------------------------- -+// Wrapper action state -+//----------------------------------------------------------------------- -+/** -+ * Saves state for current action, the state can only be retrieved by this action's post job execution. -+ * -+ * @param name name of the state to store -+ * @param value value to store. Non-string values will be converted to a string via JSON.stringify -+ */ -+// eslint-disable-next-line @typescript-eslint/no-explicit-any -+function saveState(name, value) { -+ const filePath = process.env['GITHUB_STATE'] || ''; -+ if (filePath) { -+ return file_command_1.issueFileCommand('STATE', file_command_1.prepareKeyValueMessage(name, value)); -+ } -+ command_1.issueCommand('save-state', { name }, utils_1.toCommandValue(value)); -+} -+exports.saveState = saveState; -+/** -+ * Gets the value of an state set by this action's main execution. -+ * -+ * @param name name of the state to get -+ * @returns string -+ */ -+function getState(name) { -+ return process.env[`STATE_${name}`] || ''; -+} -+exports.getState = getState; -+function getIDToken(aud) { -+ return __awaiter(this, void 0, void 0, function* () { -+ return yield oidc_utils_1.OidcClient.getIDToken(aud); -+ }); -+} -+exports.getIDToken = getIDToken; -+/** -+ * Summary exports -+ */ -+var summary_1 = __nccwpck_require__(3535); -+Object.defineProperty(exports, "summary", ({ enumerable: true, get: function () { return summary_1.summary; } })); -+/** -+ * @deprecated use core.summary -+ */ -+var summary_2 = __nccwpck_require__(3535); -+Object.defineProperty(exports, "markdownSummary", ({ enumerable: true, get: function () { return summary_2.markdownSummary; } })); -+/** -+ * Path exports -+ */ -+var path_utils_1 = __nccwpck_require__(1027); -+Object.defineProperty(exports, "toPosixPath", ({ enumerable: true, get: function () { return path_utils_1.toPosixPath; } })); -+Object.defineProperty(exports, "toWin32Path", ({ enumerable: true, get: function () { return path_utils_1.toWin32Path; } })); -+Object.defineProperty(exports, "toPlatformPath", ({ enumerable: true, get: function () { return path_utils_1.toPlatformPath; } })); -+//# sourceMappingURL=core.js.map -+ -+/***/ }), -+ -+/***/ 1197: -+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { -+ -+"use strict"; -+ -+// For internal use, subject to change. -+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -+ if (k2 === undefined) k2 = k; -+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -+}) : (function(o, m, k, k2) { -+ if (k2 === undefined) k2 = k; -+ o[k2] = m[k]; -+})); -+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -+ Object.defineProperty(o, "default", { enumerable: true, value: v }); -+}) : function(o, v) { -+ o["default"] = v; -+}); -+var __importStar = (this && this.__importStar) || function (mod) { -+ if (mod && mod.__esModule) return mod; -+ var result = {}; -+ if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -+ __setModuleDefault(result, mod); -+ return result; -+}; -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+exports.prepareKeyValueMessage = exports.issueFileCommand = void 0; -+// We use any as a valid input type -+/* eslint-disable @typescript-eslint/no-explicit-any */ -+const fs = __importStar(__nccwpck_require__(7147)); -+const os = __importStar(__nccwpck_require__(2037)); -+const uuid_1 = __nccwpck_require__(3872); -+const utils_1 = __nccwpck_require__(9428); -+function issueFileCommand(command, message) { -+ const filePath = process.env[`GITHUB_${command}`]; -+ if (!filePath) { -+ throw new Error(`Unable to find environment variable for file command ${command}`); -+ } -+ if (!fs.existsSync(filePath)) { -+ throw new Error(`Missing file at path: ${filePath}`); -+ } -+ fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, { -+ encoding: 'utf8' -+ }); -+} -+exports.issueFileCommand = issueFileCommand; -+function prepareKeyValueMessage(key, value) { -+ const delimiter = `ghadelimiter_${uuid_1.v4()}`; -+ const convertedValue = utils_1.toCommandValue(value); -+ // These should realistically never happen, but just in case someone finds a -+ // way to exploit uuid generation let's not allow keys or values that contain -+ // the delimiter. -+ if (key.includes(delimiter)) { -+ throw new Error(`Unexpected input: name should not contain the delimiter "${delimiter}"`); -+ } -+ if (convertedValue.includes(delimiter)) { -+ throw new Error(`Unexpected input: value should not contain the delimiter "${delimiter}"`); -+ } -+ return `${key}<<${delimiter}${os.EOL}${convertedValue}${os.EOL}${delimiter}`; -+} -+exports.prepareKeyValueMessage = prepareKeyValueMessage; -+//# sourceMappingURL=file-command.js.map -+ -+/***/ }), -+ -+/***/ 8649: -+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { -+ -+"use strict"; -+ -+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { -+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } -+ return new (P || (P = Promise))(function (resolve, reject) { -+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } -+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } -+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } -+ step((generator = generator.apply(thisArg, _arguments || [])).next()); -+ }); -+}; -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+exports.OidcClient = void 0; -+const http_client_1 = __nccwpck_require__(5164); -+const auth_1 = __nccwpck_require__(1571); -+const core_1 = __nccwpck_require__(4237); -+class OidcClient { -+ static createHttpClient(allowRetry = true, maxRetry = 10) { -+ const requestOptions = { -+ allowRetries: allowRetry, -+ maxRetries: maxRetry -+ }; -+ return new http_client_1.HttpClient('actions/oidc-client', [new auth_1.BearerCredentialHandler(OidcClient.getRequestToken())], requestOptions); -+ } -+ static getRequestToken() { -+ const token = process.env['ACTIONS_ID_TOKEN_REQUEST_TOKEN']; -+ if (!token) { -+ throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable'); -+ } -+ return token; -+ } -+ static getIDTokenUrl() { -+ const runtimeUrl = process.env['ACTIONS_ID_TOKEN_REQUEST_URL']; -+ if (!runtimeUrl) { -+ throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable'); -+ } -+ return runtimeUrl; -+ } -+ static getCall(id_token_url) { -+ var _a; -+ return __awaiter(this, void 0, void 0, function* () { -+ const httpclient = OidcClient.createHttpClient(); -+ const res = yield httpclient -+ .getJson(id_token_url) -+ .catch(error => { -+ throw new Error(`Failed to get ID Token. \n -+ Error Code : ${error.statusCode}\n -+ Error Message: ${error.message}`); -+ }); -+ const id_token = (_a = res.result) === null || _a === void 0 ? void 0 : _a.value; -+ if (!id_token) { -+ throw new Error('Response json body do not have ID Token field'); -+ } -+ return id_token; -+ }); -+ } -+ static getIDToken(audience) { -+ return __awaiter(this, void 0, void 0, function* () { -+ try { -+ // New ID Token is requested from action service -+ let id_token_url = OidcClient.getIDTokenUrl(); -+ if (audience) { -+ const encodedAudience = encodeURIComponent(audience); -+ id_token_url = `${id_token_url}&audience=${encodedAudience}`; -+ } -+ core_1.debug(`ID token url is ${id_token_url}`); -+ const id_token = yield OidcClient.getCall(id_token_url); -+ core_1.setSecret(id_token); -+ return id_token; -+ } -+ catch (error) { -+ throw new Error(`Error message: ${error.message}`); -+ } -+ }); -+ } -+} -+exports.OidcClient = OidcClient; -+//# sourceMappingURL=oidc-utils.js.map -+ -+/***/ }), -+ -+/***/ 1027: -+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { -+ -+"use strict"; -+ -+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -+ if (k2 === undefined) k2 = k; -+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -+}) : (function(o, m, k, k2) { -+ if (k2 === undefined) k2 = k; -+ o[k2] = m[k]; -+})); -+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -+ Object.defineProperty(o, "default", { enumerable: true, value: v }); -+}) : function(o, v) { -+ o["default"] = v; -+}); -+var __importStar = (this && this.__importStar) || function (mod) { -+ if (mod && mod.__esModule) return mod; -+ var result = {}; -+ if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -+ __setModuleDefault(result, mod); -+ return result; -+}; -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+exports.toPlatformPath = exports.toWin32Path = exports.toPosixPath = void 0; -+const path = __importStar(__nccwpck_require__(1017)); -+/** -+ * toPosixPath converts the given path to the posix form. On Windows, \\ will be -+ * replaced with /. -+ * -+ * @param pth. Path to transform. -+ * @return string Posix path. -+ */ -+function toPosixPath(pth) { -+ return pth.replace(/[\\]/g, '/'); -+} -+exports.toPosixPath = toPosixPath; -+/** -+ * toWin32Path converts the given path to the win32 form. On Linux, / will be -+ * replaced with \\. -+ * -+ * @param pth. Path to transform. -+ * @return string Win32 path. -+ */ -+function toWin32Path(pth) { -+ return pth.replace(/[/]/g, '\\'); -+} -+exports.toWin32Path = toWin32Path; -+/** -+ * toPlatformPath converts the given path to a platform-specific path. It does -+ * this by replacing instances of / and \ with the platform-specific path -+ * separator. -+ * -+ * @param pth The path to platformize. -+ * @return string The platform-specific path. -+ */ -+function toPlatformPath(pth) { -+ return pth.replace(/[/\\]/g, path.sep); -+} -+exports.toPlatformPath = toPlatformPath; -+//# sourceMappingURL=path-utils.js.map -+ -+/***/ }), -+ -+/***/ 3535: -+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { -+ -+"use strict"; -+ -+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { -+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } -+ return new (P || (P = Promise))(function (resolve, reject) { -+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } -+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } -+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } -+ step((generator = generator.apply(thisArg, _arguments || [])).next()); -+ }); -+}; -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+exports.summary = exports.markdownSummary = exports.SUMMARY_DOCS_URL = exports.SUMMARY_ENV_VAR = void 0; -+const os_1 = __nccwpck_require__(2037); -+const fs_1 = __nccwpck_require__(7147); -+const { access, appendFile, writeFile } = fs_1.promises; -+exports.SUMMARY_ENV_VAR = 'GITHUB_STEP_SUMMARY'; -+exports.SUMMARY_DOCS_URL = 'https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary'; -+class Summary { -+ constructor() { -+ this._buffer = ''; -+ } -+ /** -+ * Finds the summary file path from the environment, rejects if env var is not found or file does not exist -+ * Also checks r/w permissions. -+ * -+ * @returns step summary file path -+ */ -+ filePath() { -+ return __awaiter(this, void 0, void 0, function* () { -+ if (this._filePath) { -+ return this._filePath; -+ } -+ const pathFromEnv = process.env[exports.SUMMARY_ENV_VAR]; -+ if (!pathFromEnv) { -+ throw new Error(`Unable to find environment variable for $${exports.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`); -+ } -+ try { -+ yield access(pathFromEnv, fs_1.constants.R_OK | fs_1.constants.W_OK); -+ } -+ catch (_a) { -+ throw new Error(`Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.`); -+ } -+ this._filePath = pathFromEnv; -+ return this._filePath; -+ }); -+ } -+ /** -+ * Wraps content in an HTML tag, adding any HTML attributes -+ * -+ * @param {string} tag HTML tag to wrap -+ * @param {string | null} content content within the tag -+ * @param {[attribute: string]: string} attrs key-value list of HTML attributes to add -+ * -+ * @returns {string} content wrapped in HTML element -+ */ -+ wrap(tag, content, attrs = {}) { -+ const htmlAttrs = Object.entries(attrs) -+ .map(([key, value]) => ` ${key}="${value}"`) -+ .join(''); -+ if (!content) { -+ return `<${tag}${htmlAttrs}>`; -+ } -+ return `<${tag}${htmlAttrs}>${content}`; -+ } -+ /** -+ * Writes text in the buffer to the summary buffer file and empties buffer. Will append by default. -+ * -+ * @param {SummaryWriteOptions} [options] (optional) options for write operation -+ * -+ * @returns {Promise} summary instance -+ */ -+ write(options) { -+ return __awaiter(this, void 0, void 0, function* () { -+ const overwrite = !!(options === null || options === void 0 ? void 0 : options.overwrite); -+ const filePath = yield this.filePath(); -+ const writeFunc = overwrite ? writeFile : appendFile; -+ yield writeFunc(filePath, this._buffer, { encoding: 'utf8' }); -+ return this.emptyBuffer(); -+ }); -+ } -+ /** -+ * Clears the summary buffer and wipes the summary file -+ * -+ * @returns {Summary} summary instance -+ */ -+ clear() { -+ return __awaiter(this, void 0, void 0, function* () { -+ return this.emptyBuffer().write({ overwrite: true }); -+ }); -+ } -+ /** -+ * Returns the current summary buffer as a string -+ * -+ * @returns {string} string of summary buffer -+ */ -+ stringify() { -+ return this._buffer; -+ } -+ /** -+ * If the summary buffer is empty -+ * -+ * @returns {boolen} true if the buffer is empty -+ */ -+ isEmptyBuffer() { -+ return this._buffer.length === 0; -+ } -+ /** -+ * Resets the summary buffer without writing to summary file -+ * -+ * @returns {Summary} summary instance -+ */ -+ emptyBuffer() { -+ this._buffer = ''; -+ return this; -+ } -+ /** -+ * Adds raw text to the summary buffer -+ * -+ * @param {string} text content to add -+ * @param {boolean} [addEOL=false] (optional) append an EOL to the raw text (default: false) -+ * -+ * @returns {Summary} summary instance -+ */ -+ addRaw(text, addEOL = false) { -+ this._buffer += text; -+ return addEOL ? this.addEOL() : this; -+ } -+ /** -+ * Adds the operating system-specific end-of-line marker to the buffer -+ * -+ * @returns {Summary} summary instance -+ */ -+ addEOL() { -+ return this.addRaw(os_1.EOL); -+ } -+ /** -+ * Adds an HTML codeblock to the summary buffer -+ * -+ * @param {string} code content to render within fenced code block -+ * @param {string} lang (optional) language to syntax highlight code -+ * -+ * @returns {Summary} summary instance -+ */ -+ addCodeBlock(code, lang) { -+ const attrs = Object.assign({}, (lang && { lang })); -+ const element = this.wrap('pre', this.wrap('code', code), attrs); -+ return this.addRaw(element).addEOL(); -+ } -+ /** -+ * Adds an HTML list to the summary buffer -+ * -+ * @param {string[]} items list of items to render -+ * @param {boolean} [ordered=false] (optional) if the rendered list should be ordered or not (default: false) -+ * -+ * @returns {Summary} summary instance -+ */ -+ addList(items, ordered = false) { -+ const tag = ordered ? 'ol' : 'ul'; -+ const listItems = items.map(item => this.wrap('li', item)).join(''); -+ const element = this.wrap(tag, listItems); -+ return this.addRaw(element).addEOL(); -+ } -+ /** -+ * Adds an HTML table to the summary buffer -+ * -+ * @param {SummaryTableCell[]} rows table rows -+ * -+ * @returns {Summary} summary instance -+ */ -+ addTable(rows) { -+ const tableBody = rows -+ .map(row => { -+ const cells = row -+ .map(cell => { -+ if (typeof cell === 'string') { -+ return this.wrap('td', cell); -+ } -+ const { header, data, colspan, rowspan } = cell; -+ const tag = header ? 'th' : 'td'; -+ const attrs = Object.assign(Object.assign({}, (colspan && { colspan })), (rowspan && { rowspan })); -+ return this.wrap(tag, data, attrs); -+ }) -+ .join(''); -+ return this.wrap('tr', cells); -+ }) -+ .join(''); -+ const element = this.wrap('table', tableBody); -+ return this.addRaw(element).addEOL(); -+ } -+ /** -+ * Adds a collapsable HTML details element to the summary buffer -+ * -+ * @param {string} label text for the closed state -+ * @param {string} content collapsable content -+ * -+ * @returns {Summary} summary instance -+ */ -+ addDetails(label, content) { -+ const element = this.wrap('details', this.wrap('summary', label) + content); -+ return this.addRaw(element).addEOL(); -+ } -+ /** -+ * Adds an HTML image tag to the summary buffer -+ * -+ * @param {string} src path to the image you to embed -+ * @param {string} alt text description of the image -+ * @param {SummaryImageOptions} options (optional) addition image attributes -+ * -+ * @returns {Summary} summary instance -+ */ -+ addImage(src, alt, options) { -+ const { width, height } = options || {}; -+ const attrs = Object.assign(Object.assign({}, (width && { width })), (height && { height })); -+ const element = this.wrap('img', null, Object.assign({ src, alt }, attrs)); -+ return this.addRaw(element).addEOL(); -+ } -+ /** -+ * Adds an HTML section heading element -+ * -+ * @param {string} text heading text -+ * @param {number | string} [level=1] (optional) the heading level, default: 1 -+ * -+ * @returns {Summary} summary instance -+ */ -+ addHeading(text, level) { -+ const tag = `h${level}`; -+ const allowedTag = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag) -+ ? tag -+ : 'h1'; -+ const element = this.wrap(allowedTag, text); -+ return this.addRaw(element).addEOL(); -+ } -+ /** -+ * Adds an HTML thematic break (
) to the summary buffer -+ * -+ * @returns {Summary} summary instance -+ */ -+ addSeparator() { -+ const element = this.wrap('hr', null); -+ return this.addRaw(element).addEOL(); -+ } -+ /** -+ * Adds an HTML line break (
) to the summary buffer -+ * -+ * @returns {Summary} summary instance -+ */ -+ addBreak() { -+ const element = this.wrap('br', null); -+ return this.addRaw(element).addEOL(); -+ } -+ /** -+ * Adds an HTML blockquote to the summary buffer -+ * -+ * @param {string} text quote text -+ * @param {string} cite (optional) citation url -+ * -+ * @returns {Summary} summary instance -+ */ -+ addQuote(text, cite) { -+ const attrs = Object.assign({}, (cite && { cite })); -+ const element = this.wrap('blockquote', text, attrs); -+ return this.addRaw(element).addEOL(); -+ } -+ /** -+ * Adds an HTML anchor tag to the summary buffer -+ * -+ * @param {string} text link text/content -+ * @param {string} href hyperlink -+ * -+ * @returns {Summary} summary instance -+ */ -+ addLink(text, href) { -+ const element = this.wrap('a', text, { href }); -+ return this.addRaw(element).addEOL(); -+ } -+} -+const _summary = new Summary(); -+/** -+ * @deprecated use `core.summary` -+ */ -+exports.markdownSummary = _summary; -+exports.summary = _summary; -+//# sourceMappingURL=summary.js.map -+ -+/***/ }), -+ -+/***/ 9428: -+/***/ ((__unused_webpack_module, exports) => { -+ -+"use strict"; -+ -+// We use any as a valid input type -+/* eslint-disable @typescript-eslint/no-explicit-any */ -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+exports.toCommandProperties = exports.toCommandValue = void 0; -+/** -+ * Sanitizes an input into a string so it can be passed into issueCommand safely -+ * @param input input to sanitize into a string -+ */ -+function toCommandValue(input) { -+ if (input === null || input === undefined) { -+ return ''; -+ } -+ else if (typeof input === 'string' || input instanceof String) { -+ return input; -+ } -+ return JSON.stringify(input); -+} -+exports.toCommandValue = toCommandValue; -+/** -+ * -+ * @param annotationProperties -+ * @returns The command properties to send with the actual annotation command -+ * See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646 -+ */ -+function toCommandProperties(annotationProperties) { -+ if (!Object.keys(annotationProperties).length) { -+ return {}; -+ } -+ return { -+ title: annotationProperties.title, -+ file: annotationProperties.file, -+ line: annotationProperties.startLine, -+ endLine: annotationProperties.endLine, -+ col: annotationProperties.startColumn, -+ endColumn: annotationProperties.endColumn -+ }; -+} -+exports.toCommandProperties = toCommandProperties; -+//# sourceMappingURL=utils.js.map -+ -+/***/ }), -+ -+/***/ 4165: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+exports.Context = void 0; -+const fs_1 = __nccwpck_require__(7147); -+const os_1 = __nccwpck_require__(2037); -+class Context { -+ /** -+ * Hydrate the context from the environment -+ */ -+ constructor() { -+ var _a, _b, _c; -+ this.payload = {}; -+ if (process.env.GITHUB_EVENT_PATH) { -+ if (fs_1.existsSync(process.env.GITHUB_EVENT_PATH)) { -+ this.payload = JSON.parse(fs_1.readFileSync(process.env.GITHUB_EVENT_PATH, { encoding: 'utf8' })); -+ } -+ else { -+ const path = process.env.GITHUB_EVENT_PATH; -+ process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${os_1.EOL}`); -+ } -+ } -+ this.eventName = process.env.GITHUB_EVENT_NAME; -+ this.sha = process.env.GITHUB_SHA; -+ this.ref = process.env.GITHUB_REF; -+ this.workflow = process.env.GITHUB_WORKFLOW; -+ this.action = process.env.GITHUB_ACTION; -+ this.actor = process.env.GITHUB_ACTOR; -+ this.job = process.env.GITHUB_JOB; -+ this.runNumber = parseInt(process.env.GITHUB_RUN_NUMBER, 10); -+ this.runId = parseInt(process.env.GITHUB_RUN_ID, 10); -+ this.apiUrl = (_a = process.env.GITHUB_API_URL) !== null && _a !== void 0 ? _a : `https://api.github.com`; -+ this.serverUrl = (_b = process.env.GITHUB_SERVER_URL) !== null && _b !== void 0 ? _b : `https://github.com`; -+ this.graphqlUrl = (_c = process.env.GITHUB_GRAPHQL_URL) !== null && _c !== void 0 ? _c : `https://api.github.com/graphql`; -+ } -+ get issue() { -+ const payload = this.payload; -+ return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pull_request || payload).number }); -+ } -+ get repo() { -+ if (process.env.GITHUB_REPOSITORY) { -+ const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/'); -+ return { owner, repo }; -+ } -+ if (this.payload.repository) { -+ return { -+ owner: this.payload.repository.owner.login, -+ repo: this.payload.repository.name -+ }; -+ } -+ throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'"); -+ } -+} -+exports.Context = Context; -+//# sourceMappingURL=context.js.map -+ -+/***/ }), -+ -+/***/ 212: -+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { -+ -+"use strict"; -+ -+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -+ if (k2 === undefined) k2 = k; -+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -+}) : (function(o, m, k, k2) { -+ if (k2 === undefined) k2 = k; -+ o[k2] = m[k]; -+})); -+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -+ Object.defineProperty(o, "default", { enumerable: true, value: v }); -+}) : function(o, v) { -+ o["default"] = v; -+}); -+var __importStar = (this && this.__importStar) || function (mod) { -+ if (mod && mod.__esModule) return mod; -+ var result = {}; -+ if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -+ __setModuleDefault(result, mod); -+ return result; -+}; -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+exports.getOctokit = exports.context = void 0; -+const Context = __importStar(__nccwpck_require__(4165)); -+const utils_1 = __nccwpck_require__(9891); -+exports.context = new Context.Context(); -+/** -+ * Returns a hydrated octokit ready to use for GitHub Actions -+ * -+ * @param token the repo PAT or GITHUB_TOKEN -+ * @param options other options to set -+ */ -+function getOctokit(token, options, ...additionalPlugins) { -+ const GitHubWithPlugins = utils_1.GitHub.plugin(...additionalPlugins); -+ return new GitHubWithPlugins(utils_1.getOctokitOptions(token, options)); -+} -+exports.getOctokit = getOctokit; -+//# sourceMappingURL=github.js.map -+ -+/***/ }), -+ -+/***/ 6089: -+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { -+ -+"use strict"; -+ -+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -+ if (k2 === undefined) k2 = k; -+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -+}) : (function(o, m, k, k2) { -+ if (k2 === undefined) k2 = k; -+ o[k2] = m[k]; -+})); -+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -+ Object.defineProperty(o, "default", { enumerable: true, value: v }); -+}) : function(o, v) { -+ o["default"] = v; -+}); -+var __importStar = (this && this.__importStar) || function (mod) { -+ if (mod && mod.__esModule) return mod; -+ var result = {}; -+ if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -+ __setModuleDefault(result, mod); -+ return result; -+}; -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+exports.getApiBaseUrl = exports.getProxyAgent = exports.getAuthString = void 0; -+const httpClient = __importStar(__nccwpck_require__(5164)); -+function getAuthString(token, options) { -+ if (!token && !options.auth) { -+ throw new Error('Parameter token or opts.auth is required'); -+ } -+ else if (token && options.auth) { -+ throw new Error('Parameters token and opts.auth may not both be specified'); -+ } -+ return typeof options.auth === 'string' ? options.auth : `token ${token}`; -+} -+exports.getAuthString = getAuthString; -+function getProxyAgent(destinationUrl) { -+ const hc = new httpClient.HttpClient(); -+ return hc.getAgent(destinationUrl); -+} -+exports.getProxyAgent = getProxyAgent; -+function getApiBaseUrl() { -+ return process.env['GITHUB_API_URL'] || 'https://api.github.com'; -+} -+exports.getApiBaseUrl = getApiBaseUrl; -+//# sourceMappingURL=utils.js.map -+ -+/***/ }), -+ -+/***/ 9891: -+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { -+ -+"use strict"; -+ -+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -+ if (k2 === undefined) k2 = k; -+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -+}) : (function(o, m, k, k2) { -+ if (k2 === undefined) k2 = k; -+ o[k2] = m[k]; -+})); -+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -+ Object.defineProperty(o, "default", { enumerable: true, value: v }); -+}) : function(o, v) { -+ o["default"] = v; -+}); -+var __importStar = (this && this.__importStar) || function (mod) { -+ if (mod && mod.__esModule) return mod; -+ var result = {}; -+ if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -+ __setModuleDefault(result, mod); -+ return result; -+}; -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+exports.getOctokitOptions = exports.GitHub = exports.defaults = exports.context = void 0; -+const Context = __importStar(__nccwpck_require__(4165)); -+const Utils = __importStar(__nccwpck_require__(6089)); -+// octokit + plugins -+const core_1 = __nccwpck_require__(2838); -+const plugin_rest_endpoint_methods_1 = __nccwpck_require__(5617); -+const plugin_paginate_rest_1 = __nccwpck_require__(8941); -+exports.context = new Context.Context(); -+const baseUrl = Utils.getApiBaseUrl(); -+exports.defaults = { -+ baseUrl, -+ request: { -+ agent: Utils.getProxyAgent(baseUrl) -+ } -+}; -+exports.GitHub = core_1.Octokit.plugin(plugin_rest_endpoint_methods_1.restEndpointMethods, plugin_paginate_rest_1.paginateRest).defaults(exports.defaults); -+/** -+ * Convience function to correctly format Octokit Options to pass into the constructor. -+ * -+ * @param token the repo PAT or GITHUB_TOKEN -+ * @param options other options to set -+ */ -+function getOctokitOptions(token, options) { -+ const opts = Object.assign({}, options || {}); // Shallow clone - don't mutate the object provided by the caller -+ // Auth -+ const auth = Utils.getAuthString(token, opts); -+ if (auth) { -+ opts.auth = auth; -+ } -+ return opts; -+} -+exports.getOctokitOptions = getOctokitOptions; -+//# sourceMappingURL=utils.js.map -+ -+/***/ }), -+ -+/***/ 1571: -+/***/ (function(__unused_webpack_module, exports) { -+ -+"use strict"; -+ -+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { -+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } -+ return new (P || (P = Promise))(function (resolve, reject) { -+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } -+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } -+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } -+ step((generator = generator.apply(thisArg, _arguments || [])).next()); -+ }); -+}; -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+exports.PersonalAccessTokenCredentialHandler = exports.BearerCredentialHandler = exports.BasicCredentialHandler = void 0; -+class BasicCredentialHandler { -+ constructor(username, password) { -+ this.username = username; -+ this.password = password; -+ } -+ prepareRequest(options) { -+ if (!options.headers) { -+ throw Error('The request has no headers'); -+ } -+ options.headers['Authorization'] = `Basic ${Buffer.from(`${this.username}:${this.password}`).toString('base64')}`; -+ } -+ // This handler cannot handle 401 -+ canHandleAuthentication() { -+ return false; -+ } -+ handleAuthentication() { -+ return __awaiter(this, void 0, void 0, function* () { -+ throw new Error('not implemented'); -+ }); -+ } -+} -+exports.BasicCredentialHandler = BasicCredentialHandler; -+class BearerCredentialHandler { -+ constructor(token) { -+ this.token = token; -+ } -+ // currently implements pre-authorization -+ // TODO: support preAuth = false where it hooks on 401 -+ prepareRequest(options) { -+ if (!options.headers) { -+ throw Error('The request has no headers'); -+ } -+ options.headers['Authorization'] = `Bearer ${this.token}`; -+ } -+ // This handler cannot handle 401 -+ canHandleAuthentication() { -+ return false; -+ } -+ handleAuthentication() { -+ return __awaiter(this, void 0, void 0, function* () { -+ throw new Error('not implemented'); -+ }); -+ } -+} -+exports.BearerCredentialHandler = BearerCredentialHandler; -+class PersonalAccessTokenCredentialHandler { -+ constructor(token) { -+ this.token = token; -+ } -+ // currently implements pre-authorization -+ // TODO: support preAuth = false where it hooks on 401 -+ prepareRequest(options) { -+ if (!options.headers) { -+ throw Error('The request has no headers'); -+ } -+ options.headers['Authorization'] = `Basic ${Buffer.from(`PAT:${this.token}`).toString('base64')}`; -+ } -+ // This handler cannot handle 401 -+ canHandleAuthentication() { -+ return false; -+ } -+ handleAuthentication() { -+ return __awaiter(this, void 0, void 0, function* () { -+ throw new Error('not implemented'); -+ }); -+ } -+} -+exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler; -+//# sourceMappingURL=auth.js.map -+ -+/***/ }), -+ -+/***/ 5164: -+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { -+ -+"use strict"; -+ -+/* eslint-disable @typescript-eslint/no-explicit-any */ -+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { -+ if (k2 === undefined) k2 = k; -+ var desc = Object.getOwnPropertyDescriptor(m, k); -+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { -+ desc = { enumerable: true, get: function() { return m[k]; } }; -+ } -+ Object.defineProperty(o, k2, desc); -+}) : (function(o, m, k, k2) { -+ if (k2 === undefined) k2 = k; -+ o[k2] = m[k]; -+})); -+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { -+ Object.defineProperty(o, "default", { enumerable: true, value: v }); -+}) : function(o, v) { -+ o["default"] = v; -+}); -+var __importStar = (this && this.__importStar) || function (mod) { -+ if (mod && mod.__esModule) return mod; -+ var result = {}; -+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); -+ __setModuleDefault(result, mod); -+ return result; -+}; -+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { -+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } -+ return new (P || (P = Promise))(function (resolve, reject) { -+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } -+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } -+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } -+ step((generator = generator.apply(thisArg, _arguments || [])).next()); -+ }); -+}; -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+exports.HttpClient = exports.isHttps = exports.HttpClientResponse = exports.HttpClientError = exports.getProxyUrl = exports.MediaTypes = exports.Headers = exports.HttpCodes = void 0; -+const http = __importStar(__nccwpck_require__(3685)); -+const https = __importStar(__nccwpck_require__(5687)); -+const pm = __importStar(__nccwpck_require__(2127)); -+const tunnel = __importStar(__nccwpck_require__(8578)); -+const undici_1 = __nccwpck_require__(1154); -+var HttpCodes; -+(function (HttpCodes) { -+ HttpCodes[HttpCodes["OK"] = 200] = "OK"; -+ HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; -+ HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; -+ HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; -+ HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; -+ HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; -+ HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; -+ HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; -+ HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; -+ HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; -+ HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; -+ HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; -+ HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; -+ HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; -+ HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; -+ HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; -+ HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; -+ HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; -+ HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; -+ HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; -+ HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; -+ HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests"; -+ HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; -+ HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; -+ HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; -+ HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; -+ HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; -+})(HttpCodes || (exports.HttpCodes = HttpCodes = {})); -+var Headers; -+(function (Headers) { -+ Headers["Accept"] = "accept"; -+ Headers["ContentType"] = "content-type"; -+})(Headers || (exports.Headers = Headers = {})); -+var MediaTypes; -+(function (MediaTypes) { -+ MediaTypes["ApplicationJson"] = "application/json"; -+})(MediaTypes || (exports.MediaTypes = MediaTypes = {})); -+/** -+ * Returns the proxy URL, depending upon the supplied url and proxy environment variables. -+ * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com -+ */ -+function getProxyUrl(serverUrl) { -+ const proxyUrl = pm.getProxyUrl(new URL(serverUrl)); -+ return proxyUrl ? proxyUrl.href : ''; -+} -+exports.getProxyUrl = getProxyUrl; -+const HttpRedirectCodes = [ -+ HttpCodes.MovedPermanently, -+ HttpCodes.ResourceMoved, -+ HttpCodes.SeeOther, -+ HttpCodes.TemporaryRedirect, -+ HttpCodes.PermanentRedirect -+]; -+const HttpResponseRetryCodes = [ -+ HttpCodes.BadGateway, -+ HttpCodes.ServiceUnavailable, -+ HttpCodes.GatewayTimeout -+]; -+const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; -+const ExponentialBackoffCeiling = 10; -+const ExponentialBackoffTimeSlice = 5; -+class HttpClientError extends Error { -+ constructor(message, statusCode) { -+ super(message); -+ this.name = 'HttpClientError'; -+ this.statusCode = statusCode; -+ Object.setPrototypeOf(this, HttpClientError.prototype); -+ } -+} -+exports.HttpClientError = HttpClientError; -+class HttpClientResponse { -+ constructor(message) { -+ this.message = message; -+ } -+ readBody() { -+ return __awaiter(this, void 0, void 0, function* () { -+ return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () { -+ let output = Buffer.alloc(0); -+ this.message.on('data', (chunk) => { -+ output = Buffer.concat([output, chunk]); -+ }); -+ this.message.on('end', () => { -+ resolve(output.toString()); -+ }); -+ })); -+ }); -+ } -+ readBodyBuffer() { -+ return __awaiter(this, void 0, void 0, function* () { -+ return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () { -+ const chunks = []; -+ this.message.on('data', (chunk) => { -+ chunks.push(chunk); -+ }); -+ this.message.on('end', () => { -+ resolve(Buffer.concat(chunks)); -+ }); -+ })); -+ }); -+ } -+} -+exports.HttpClientResponse = HttpClientResponse; -+function isHttps(requestUrl) { -+ const parsedUrl = new URL(requestUrl); -+ return parsedUrl.protocol === 'https:'; -+} -+exports.isHttps = isHttps; -+class HttpClient { -+ constructor(userAgent, handlers, requestOptions) { -+ this._ignoreSslError = false; -+ this._allowRedirects = true; -+ this._allowRedirectDowngrade = false; -+ this._maxRedirects = 50; -+ this._allowRetries = false; -+ this._maxRetries = 1; -+ this._keepAlive = false; -+ this._disposed = false; -+ this.userAgent = userAgent; -+ this.handlers = handlers || []; -+ this.requestOptions = requestOptions; -+ if (requestOptions) { -+ if (requestOptions.ignoreSslError != null) { -+ this._ignoreSslError = requestOptions.ignoreSslError; -+ } -+ this._socketTimeout = requestOptions.socketTimeout; -+ if (requestOptions.allowRedirects != null) { -+ this._allowRedirects = requestOptions.allowRedirects; -+ } -+ if (requestOptions.allowRedirectDowngrade != null) { -+ this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade; -+ } -+ if (requestOptions.maxRedirects != null) { -+ this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); -+ } -+ if (requestOptions.keepAlive != null) { -+ this._keepAlive = requestOptions.keepAlive; -+ } -+ if (requestOptions.allowRetries != null) { -+ this._allowRetries = requestOptions.allowRetries; -+ } -+ if (requestOptions.maxRetries != null) { -+ this._maxRetries = requestOptions.maxRetries; -+ } -+ } -+ } -+ options(requestUrl, additionalHeaders) { -+ return __awaiter(this, void 0, void 0, function* () { -+ return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); -+ }); -+ } -+ get(requestUrl, additionalHeaders) { -+ return __awaiter(this, void 0, void 0, function* () { -+ return this.request('GET', requestUrl, null, additionalHeaders || {}); -+ }); -+ } -+ del(requestUrl, additionalHeaders) { -+ return __awaiter(this, void 0, void 0, function* () { -+ return this.request('DELETE', requestUrl, null, additionalHeaders || {}); -+ }); -+ } -+ post(requestUrl, data, additionalHeaders) { -+ return __awaiter(this, void 0, void 0, function* () { -+ return this.request('POST', requestUrl, data, additionalHeaders || {}); -+ }); -+ } -+ patch(requestUrl, data, additionalHeaders) { -+ return __awaiter(this, void 0, void 0, function* () { -+ return this.request('PATCH', requestUrl, data, additionalHeaders || {}); -+ }); -+ } -+ put(requestUrl, data, additionalHeaders) { -+ return __awaiter(this, void 0, void 0, function* () { -+ return this.request('PUT', requestUrl, data, additionalHeaders || {}); -+ }); -+ } -+ head(requestUrl, additionalHeaders) { -+ return __awaiter(this, void 0, void 0, function* () { -+ return this.request('HEAD', requestUrl, null, additionalHeaders || {}); -+ }); -+ } -+ sendStream(verb, requestUrl, stream, additionalHeaders) { -+ return __awaiter(this, void 0, void 0, function* () { -+ return this.request(verb, requestUrl, stream, additionalHeaders); -+ }); -+ } -+ /** -+ * Gets a typed object from an endpoint -+ * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise -+ */ -+ getJson(requestUrl, additionalHeaders = {}) { -+ return __awaiter(this, void 0, void 0, function* () { -+ additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); -+ const res = yield this.get(requestUrl, additionalHeaders); -+ return this._processResponse(res, this.requestOptions); -+ }); -+ } -+ postJson(requestUrl, obj, additionalHeaders = {}) { -+ return __awaiter(this, void 0, void 0, function* () { -+ const data = JSON.stringify(obj, null, 2); -+ additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); -+ additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); -+ const res = yield this.post(requestUrl, data, additionalHeaders); -+ return this._processResponse(res, this.requestOptions); -+ }); -+ } -+ putJson(requestUrl, obj, additionalHeaders = {}) { -+ return __awaiter(this, void 0, void 0, function* () { -+ const data = JSON.stringify(obj, null, 2); -+ additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); -+ additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); -+ const res = yield this.put(requestUrl, data, additionalHeaders); -+ return this._processResponse(res, this.requestOptions); -+ }); -+ } -+ patchJson(requestUrl, obj, additionalHeaders = {}) { -+ return __awaiter(this, void 0, void 0, function* () { -+ const data = JSON.stringify(obj, null, 2); -+ additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); -+ additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); -+ const res = yield this.patch(requestUrl, data, additionalHeaders); -+ return this._processResponse(res, this.requestOptions); -+ }); -+ } -+ /** -+ * Makes a raw http request. -+ * All other methods such as get, post, patch, and request ultimately call this. -+ * Prefer get, del, post and patch -+ */ -+ request(verb, requestUrl, data, headers) { -+ return __awaiter(this, void 0, void 0, function* () { -+ if (this._disposed) { -+ throw new Error('Client has already been disposed.'); -+ } -+ const parsedUrl = new URL(requestUrl); -+ let info = this._prepareRequest(verb, parsedUrl, headers); -+ // Only perform retries on reads since writes may not be idempotent. -+ const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb) -+ ? this._maxRetries + 1 -+ : 1; -+ let numTries = 0; -+ let response; -+ do { -+ response = yield this.requestRaw(info, data); -+ // Check if it's an authentication challenge -+ if (response && -+ response.message && -+ response.message.statusCode === HttpCodes.Unauthorized) { -+ let authenticationHandler; -+ for (const handler of this.handlers) { -+ if (handler.canHandleAuthentication(response)) { -+ authenticationHandler = handler; -+ break; -+ } -+ } -+ if (authenticationHandler) { -+ return authenticationHandler.handleAuthentication(this, info, data); -+ } -+ else { -+ // We have received an unauthorized response but have no handlers to handle it. -+ // Let the response return to the caller. -+ return response; -+ } -+ } -+ let redirectsRemaining = this._maxRedirects; -+ while (response.message.statusCode && -+ HttpRedirectCodes.includes(response.message.statusCode) && -+ this._allowRedirects && -+ redirectsRemaining > 0) { -+ const redirectUrl = response.message.headers['location']; -+ if (!redirectUrl) { -+ // if there's no location to redirect to, we won't -+ break; -+ } -+ const parsedRedirectUrl = new URL(redirectUrl); -+ if (parsedUrl.protocol === 'https:' && -+ parsedUrl.protocol !== parsedRedirectUrl.protocol && -+ !this._allowRedirectDowngrade) { -+ throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.'); -+ } -+ // we need to finish reading the response before reassigning response -+ // which will leak the open socket. -+ yield response.readBody(); -+ // strip authorization header if redirected to a different hostname -+ if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { -+ for (const header in headers) { -+ // header names are case insensitive -+ if (header.toLowerCase() === 'authorization') { -+ delete headers[header]; -+ } -+ } -+ } -+ // let's make the request with the new redirectUrl -+ info = this._prepareRequest(verb, parsedRedirectUrl, headers); -+ response = yield this.requestRaw(info, data); -+ redirectsRemaining--; -+ } -+ if (!response.message.statusCode || -+ !HttpResponseRetryCodes.includes(response.message.statusCode)) { -+ // If not a retry code, return immediately instead of retrying -+ return response; -+ } -+ numTries += 1; -+ if (numTries < maxTries) { -+ yield response.readBody(); -+ yield this._performExponentialBackoff(numTries); -+ } -+ } while (numTries < maxTries); -+ return response; -+ }); -+ } -+ /** -+ * Needs to be called if keepAlive is set to true in request options. -+ */ -+ dispose() { -+ if (this._agent) { -+ this._agent.destroy(); -+ } -+ this._disposed = true; -+ } -+ /** -+ * Raw request. -+ * @param info -+ * @param data -+ */ -+ requestRaw(info, data) { -+ return __awaiter(this, void 0, void 0, function* () { -+ return new Promise((resolve, reject) => { -+ function callbackForResult(err, res) { -+ if (err) { -+ reject(err); -+ } -+ else if (!res) { -+ // If `err` is not passed, then `res` must be passed. -+ reject(new Error('Unknown error')); -+ } -+ else { -+ resolve(res); -+ } -+ } -+ this.requestRawWithCallback(info, data, callbackForResult); -+ }); -+ }); -+ } -+ /** -+ * Raw request with callback. -+ * @param info -+ * @param data -+ * @param onResult -+ */ -+ requestRawWithCallback(info, data, onResult) { -+ if (typeof data === 'string') { -+ if (!info.options.headers) { -+ info.options.headers = {}; -+ } -+ info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); -+ } -+ let callbackCalled = false; -+ function handleResult(err, res) { -+ if (!callbackCalled) { -+ callbackCalled = true; -+ onResult(err, res); -+ } -+ } -+ const req = info.httpModule.request(info.options, (msg) => { -+ const res = new HttpClientResponse(msg); -+ handleResult(undefined, res); -+ }); -+ let socket; -+ req.on('socket', sock => { -+ socket = sock; -+ }); -+ // If we ever get disconnected, we want the socket to timeout eventually -+ req.setTimeout(this._socketTimeout || 3 * 60000, () => { -+ if (socket) { -+ socket.end(); -+ } -+ handleResult(new Error(`Request timeout: ${info.options.path}`)); -+ }); -+ req.on('error', function (err) { -+ // err has statusCode property -+ // res should have headers -+ handleResult(err); -+ }); -+ if (data && typeof data === 'string') { -+ req.write(data, 'utf8'); -+ } -+ if (data && typeof data !== 'string') { -+ data.on('close', function () { -+ req.end(); -+ }); -+ data.pipe(req); -+ } -+ else { -+ req.end(); -+ } -+ } -+ /** -+ * Gets an http agent. This function is useful when you need an http agent that handles -+ * routing through a proxy server - depending upon the url and proxy environment variables. -+ * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com -+ */ -+ getAgent(serverUrl) { -+ const parsedUrl = new URL(serverUrl); -+ return this._getAgent(parsedUrl); -+ } -+ getAgentDispatcher(serverUrl) { -+ const parsedUrl = new URL(serverUrl); -+ const proxyUrl = pm.getProxyUrl(parsedUrl); -+ const useProxy = proxyUrl && proxyUrl.hostname; -+ if (!useProxy) { -+ return; -+ } -+ return this._getProxyAgentDispatcher(parsedUrl, proxyUrl); -+ } -+ _prepareRequest(method, requestUrl, headers) { -+ const info = {}; -+ info.parsedUrl = requestUrl; -+ const usingSsl = info.parsedUrl.protocol === 'https:'; -+ info.httpModule = usingSsl ? https : http; -+ const defaultPort = usingSsl ? 443 : 80; -+ info.options = {}; -+ info.options.host = info.parsedUrl.hostname; -+ info.options.port = info.parsedUrl.port -+ ? parseInt(info.parsedUrl.port) -+ : defaultPort; -+ info.options.path = -+ (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); -+ info.options.method = method; -+ info.options.headers = this._mergeHeaders(headers); -+ if (this.userAgent != null) { -+ info.options.headers['user-agent'] = this.userAgent; -+ } -+ info.options.agent = this._getAgent(info.parsedUrl); -+ // gives handlers an opportunity to participate -+ if (this.handlers) { -+ for (const handler of this.handlers) { -+ handler.prepareRequest(info.options); -+ } -+ } -+ return info; -+ } -+ _mergeHeaders(headers) { -+ if (this.requestOptions && this.requestOptions.headers) { -+ return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {})); -+ } -+ return lowercaseKeys(headers || {}); -+ } -+ _getExistingOrDefaultHeader(additionalHeaders, header, _default) { -+ let clientHeader; -+ if (this.requestOptions && this.requestOptions.headers) { -+ clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; -+ } -+ return additionalHeaders[header] || clientHeader || _default; -+ } -+ _getAgent(parsedUrl) { -+ let agent; -+ const proxyUrl = pm.getProxyUrl(parsedUrl); -+ const useProxy = proxyUrl && proxyUrl.hostname; -+ if (this._keepAlive && useProxy) { -+ agent = this._proxyAgent; -+ } -+ if (!useProxy) { -+ agent = this._agent; -+ } -+ // if agent is already assigned use that agent. -+ if (agent) { -+ return agent; -+ } -+ const usingSsl = parsedUrl.protocol === 'https:'; -+ let maxSockets = 100; -+ if (this.requestOptions) { -+ maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; -+ } -+ // This is `useProxy` again, but we need to check `proxyURl` directly for TypeScripts's flow analysis. -+ if (proxyUrl && proxyUrl.hostname) { -+ const agentOptions = { -+ maxSockets, -+ keepAlive: this._keepAlive, -+ proxy: Object.assign(Object.assign({}, ((proxyUrl.username || proxyUrl.password) && { -+ proxyAuth: `${proxyUrl.username}:${proxyUrl.password}` -+ })), { host: proxyUrl.hostname, port: proxyUrl.port }) -+ }; -+ let tunnelAgent; -+ const overHttps = proxyUrl.protocol === 'https:'; -+ if (usingSsl) { -+ tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; -+ } -+ else { -+ tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; -+ } -+ agent = tunnelAgent(agentOptions); -+ this._proxyAgent = agent; -+ } -+ // if tunneling agent isn't assigned create a new agent -+ if (!agent) { -+ const options = { keepAlive: this._keepAlive, maxSockets }; -+ agent = usingSsl ? new https.Agent(options) : new http.Agent(options); -+ this._agent = agent; -+ } -+ if (usingSsl && this._ignoreSslError) { -+ // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process -+ // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options -+ // we have to cast it to any and change it directly -+ agent.options = Object.assign(agent.options || {}, { -+ rejectUnauthorized: false -+ }); -+ } -+ return agent; -+ } -+ _getProxyAgentDispatcher(parsedUrl, proxyUrl) { -+ let proxyAgent; -+ if (this._keepAlive) { -+ proxyAgent = this._proxyAgentDispatcher; -+ } -+ // if agent is already assigned use that agent. -+ if (proxyAgent) { -+ return proxyAgent; -+ } -+ const usingSsl = parsedUrl.protocol === 'https:'; -+ proxyAgent = new undici_1.ProxyAgent(Object.assign({ uri: proxyUrl.href, pipelining: !this._keepAlive ? 0 : 1 }, ((proxyUrl.username || proxyUrl.password) && { -+ token: `Basic ${Buffer.from(`${proxyUrl.username}:${proxyUrl.password}`).toString('base64')}` -+ }))); -+ this._proxyAgentDispatcher = proxyAgent; -+ if (usingSsl && this._ignoreSslError) { -+ // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process -+ // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options -+ // we have to cast it to any and change it directly -+ proxyAgent.options = Object.assign(proxyAgent.options.requestTls || {}, { -+ rejectUnauthorized: false -+ }); -+ } -+ return proxyAgent; -+ } -+ _performExponentialBackoff(retryNumber) { -+ return __awaiter(this, void 0, void 0, function* () { -+ retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); -+ const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); -+ return new Promise(resolve => setTimeout(() => resolve(), ms)); -+ }); -+ } -+ _processResponse(res, options) { -+ return __awaiter(this, void 0, void 0, function* () { -+ return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { -+ const statusCode = res.message.statusCode || 0; -+ const response = { -+ statusCode, -+ result: null, -+ headers: {} -+ }; -+ // not found leads to null obj returned -+ if (statusCode === HttpCodes.NotFound) { -+ resolve(response); -+ } -+ // get the result from the body -+ function dateTimeDeserializer(key, value) { -+ if (typeof value === 'string') { -+ const a = new Date(value); -+ if (!isNaN(a.valueOf())) { -+ return a; -+ } -+ } -+ return value; -+ } -+ let obj; -+ let contents; -+ try { -+ contents = yield res.readBody(); -+ if (contents && contents.length > 0) { -+ if (options && options.deserializeDates) { -+ obj = JSON.parse(contents, dateTimeDeserializer); -+ } -+ else { -+ obj = JSON.parse(contents); -+ } -+ response.result = obj; -+ } -+ response.headers = res.message.headers; -+ } -+ catch (err) { -+ // Invalid resource (contents not json); leaving result obj null -+ } -+ // note that 3xx redirects are handled by the http layer. -+ if (statusCode > 299) { -+ let msg; -+ // if exception/error in body, attempt to get better error -+ if (obj && obj.message) { -+ msg = obj.message; -+ } -+ else if (contents && contents.length > 0) { -+ // it may be the case that the exception is in the body message as string -+ msg = contents; -+ } -+ else { -+ msg = `Failed request: (${statusCode})`; -+ } -+ const err = new HttpClientError(msg, statusCode); -+ err.result = response.result; -+ reject(err); -+ } -+ else { -+ resolve(response); -+ } -+ })); -+ }); -+ } -+} -+exports.HttpClient = HttpClient; -+const lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); -+//# sourceMappingURL=index.js.map -+ -+/***/ }), -+ -+/***/ 2127: -+/***/ ((__unused_webpack_module, exports) => { -+ -+"use strict"; -+ -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+exports.checkBypass = exports.getProxyUrl = void 0; -+function getProxyUrl(reqUrl) { -+ const usingSsl = reqUrl.protocol === 'https:'; -+ if (checkBypass(reqUrl)) { -+ return undefined; -+ } -+ const proxyVar = (() => { -+ if (usingSsl) { -+ return process.env['https_proxy'] || process.env['HTTPS_PROXY']; -+ } -+ else { -+ return process.env['http_proxy'] || process.env['HTTP_PROXY']; -+ } -+ })(); -+ if (proxyVar) { -+ try { -+ return new DecodedURL(proxyVar); -+ } -+ catch (_a) { -+ if (!proxyVar.startsWith('http://') && !proxyVar.startsWith('https://')) -+ return new DecodedURL(`http://${proxyVar}`); -+ } -+ } -+ else { -+ return undefined; -+ } -+} -+exports.getProxyUrl = getProxyUrl; -+function checkBypass(reqUrl) { -+ if (!reqUrl.hostname) { -+ return false; -+ } -+ const reqHost = reqUrl.hostname; -+ if (isLoopbackAddress(reqHost)) { -+ return true; -+ } -+ const noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''; -+ if (!noProxy) { -+ return false; -+ } -+ // Determine the request port -+ let reqPort; -+ if (reqUrl.port) { -+ reqPort = Number(reqUrl.port); -+ } -+ else if (reqUrl.protocol === 'http:') { -+ reqPort = 80; -+ } -+ else if (reqUrl.protocol === 'https:') { -+ reqPort = 443; -+ } -+ // Format the request hostname and hostname with port -+ const upperReqHosts = [reqUrl.hostname.toUpperCase()]; -+ if (typeof reqPort === 'number') { -+ upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); -+ } -+ // Compare request host against noproxy -+ for (const upperNoProxyItem of noProxy -+ .split(',') -+ .map(x => x.trim().toUpperCase()) -+ .filter(x => x)) { -+ if (upperNoProxyItem === '*' || -+ upperReqHosts.some(x => x === upperNoProxyItem || -+ x.endsWith(`.${upperNoProxyItem}`) || -+ (upperNoProxyItem.startsWith('.') && -+ x.endsWith(`${upperNoProxyItem}`)))) { -+ return true; -+ } -+ } -+ return false; -+} -+exports.checkBypass = checkBypass; -+function isLoopbackAddress(host) { -+ const hostLower = host.toLowerCase(); -+ return (hostLower === 'localhost' || -+ hostLower.startsWith('127.') || -+ hostLower.startsWith('[::1]') || -+ hostLower.startsWith('[0:0:0:0:0:0:0:1]')); -+} -+class DecodedURL extends URL { -+ constructor(url, base) { -+ super(url, base); -+ this._decodedUsername = decodeURIComponent(super.username); -+ this._decodedPassword = decodeURIComponent(super.password); -+ } -+ get username() { -+ return this._decodedUsername; -+ } -+ get password() { -+ return this._decodedPassword; -+ } -+} -+//# sourceMappingURL=proxy.js.map -+ -+/***/ }), -+ -+/***/ 8401: -+/***/ ((__unused_webpack_module, exports) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+ -+const REGEX_IS_INSTALLATION_LEGACY = /^v1\./; -+const REGEX_IS_INSTALLATION = /^ghs_/; -+const REGEX_IS_USER_TO_SERVER = /^ghu_/; -+async function auth(token) { -+ const isApp = token.split(/\./).length === 3; -+ const isInstallation = REGEX_IS_INSTALLATION_LEGACY.test(token) || REGEX_IS_INSTALLATION.test(token); -+ const isUserToServer = REGEX_IS_USER_TO_SERVER.test(token); -+ const tokenType = isApp ? "app" : isInstallation ? "installation" : isUserToServer ? "user-to-server" : "oauth"; -+ return { -+ type: "token", -+ token: token, -+ tokenType -+ }; -+} -+ -+/** -+ * Prefix token for usage in the Authorization header -+ * -+ * @param token OAuth token or JSON Web Token -+ */ -+function withAuthorizationPrefix(token) { -+ if (token.split(/\./).length === 3) { -+ return `bearer ${token}`; -+ } -+ -+ return `token ${token}`; -+} -+ -+async function hook(token, request, route, parameters) { -+ const endpoint = request.endpoint.merge(route, parameters); -+ endpoint.headers.authorization = withAuthorizationPrefix(token); -+ return request(endpoint); -+} -+ -+const createTokenAuth = function createTokenAuth(token) { -+ if (!token) { -+ throw new Error("[@octokit/auth-token] No token passed to createTokenAuth"); -+ } -+ -+ if (typeof token !== "string") { -+ throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string"); -+ } -+ -+ token = token.replace(/^(token|bearer) +/i, ""); -+ return Object.assign(auth.bind(null, token), { -+ hook: hook.bind(null, token) -+ }); -+}; -+ -+exports.createTokenAuth = createTokenAuth; -+//# sourceMappingURL=index.js.map -+ -+ -+/***/ }), -+ -+/***/ 2838: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+ -+var universalUserAgent = __nccwpck_require__(9074); -+var beforeAfterHook = __nccwpck_require__(2934); -+var request = __nccwpck_require__(7639); -+var graphql = __nccwpck_require__(9632); -+var authToken = __nccwpck_require__(8401); -+ -+function _objectWithoutPropertiesLoose(source, excluded) { -+ if (source == null) return {}; -+ var target = {}; -+ var sourceKeys = Object.keys(source); -+ var key, i; -+ -+ for (i = 0; i < sourceKeys.length; i++) { -+ key = sourceKeys[i]; -+ if (excluded.indexOf(key) >= 0) continue; -+ target[key] = source[key]; -+ } -+ -+ return target; -+} -+ -+function _objectWithoutProperties(source, excluded) { -+ if (source == null) return {}; -+ -+ var target = _objectWithoutPropertiesLoose(source, excluded); -+ -+ var key, i; -+ -+ if (Object.getOwnPropertySymbols) { -+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source); -+ -+ for (i = 0; i < sourceSymbolKeys.length; i++) { -+ key = sourceSymbolKeys[i]; -+ if (excluded.indexOf(key) >= 0) continue; -+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; -+ target[key] = source[key]; -+ } -+ } -+ -+ return target; -+} -+ -+const VERSION = "3.6.0"; -+ -+const _excluded = ["authStrategy"]; -+class Octokit { -+ constructor(options = {}) { -+ const hook = new beforeAfterHook.Collection(); -+ const requestDefaults = { -+ baseUrl: request.request.endpoint.DEFAULTS.baseUrl, -+ headers: {}, -+ request: Object.assign({}, options.request, { -+ // @ts-ignore internal usage only, no need to type -+ hook: hook.bind(null, "request") -+ }), -+ mediaType: { -+ previews: [], -+ format: "" -+ } -+ }; // prepend default user agent with `options.userAgent` if set -+ -+ requestDefaults.headers["user-agent"] = [options.userAgent, `octokit-core.js/${VERSION} ${universalUserAgent.getUserAgent()}`].filter(Boolean).join(" "); -+ -+ if (options.baseUrl) { -+ requestDefaults.baseUrl = options.baseUrl; -+ } -+ -+ if (options.previews) { -+ requestDefaults.mediaType.previews = options.previews; -+ } -+ -+ if (options.timeZone) { -+ requestDefaults.headers["time-zone"] = options.timeZone; -+ } -+ -+ this.request = request.request.defaults(requestDefaults); -+ this.graphql = graphql.withCustomRequest(this.request).defaults(requestDefaults); -+ this.log = Object.assign({ -+ debug: () => {}, -+ info: () => {}, -+ warn: console.warn.bind(console), -+ error: console.error.bind(console) -+ }, options.log); -+ this.hook = hook; // (1) If neither `options.authStrategy` nor `options.auth` are set, the `octokit` instance -+ // is unauthenticated. The `this.auth()` method is a no-op and no request hook is registered. -+ // (2) If only `options.auth` is set, use the default token authentication strategy. -+ // (3) If `options.authStrategy` is set then use it and pass in `options.auth`. Always pass own request as many strategies accept a custom request instance. -+ // TODO: type `options.auth` based on `options.authStrategy`. -+ -+ if (!options.authStrategy) { -+ if (!options.auth) { -+ // (1) -+ this.auth = async () => ({ -+ type: "unauthenticated" -+ }); -+ } else { -+ // (2) -+ const auth = authToken.createTokenAuth(options.auth); // @ts-ignore ¯\_(ツ)_/¯ -+ -+ hook.wrap("request", auth.hook); -+ this.auth = auth; -+ } -+ } else { -+ const { -+ authStrategy -+ } = options, -+ otherOptions = _objectWithoutProperties(options, _excluded); -+ -+ const auth = authStrategy(Object.assign({ -+ request: this.request, -+ log: this.log, -+ // we pass the current octokit instance as well as its constructor options -+ // to allow for authentication strategies that return a new octokit instance -+ // that shares the same internal state as the current one. The original -+ // requirement for this was the "event-octokit" authentication strategy -+ // of https://github.com/probot/octokit-auth-probot. -+ octokit: this, -+ octokitOptions: otherOptions -+ }, options.auth)); // @ts-ignore ¯\_(ツ)_/¯ -+ -+ hook.wrap("request", auth.hook); -+ this.auth = auth; -+ } // apply plugins -+ // https://stackoverflow.com/a/16345172 -+ -+ -+ const classConstructor = this.constructor; -+ classConstructor.plugins.forEach(plugin => { -+ Object.assign(this, plugin(this, options)); -+ }); -+ } -+ -+ static defaults(defaults) { -+ const OctokitWithDefaults = class extends this { -+ constructor(...args) { -+ const options = args[0] || {}; -+ -+ if (typeof defaults === "function") { -+ super(defaults(options)); -+ return; -+ } -+ -+ super(Object.assign({}, defaults, options, options.userAgent && defaults.userAgent ? { -+ userAgent: `${options.userAgent} ${defaults.userAgent}` -+ } : null)); -+ } -+ -+ }; -+ return OctokitWithDefaults; -+ } -+ /** -+ * Attach a plugin (or many) to your Octokit instance. -+ * -+ * @example -+ * const API = Octokit.plugin(plugin1, plugin2, plugin3, ...) -+ */ -+ -+ -+ static plugin(...newPlugins) { -+ var _a; -+ -+ const currentPlugins = this.plugins; -+ const NewOctokit = (_a = class extends this {}, _a.plugins = currentPlugins.concat(newPlugins.filter(plugin => !currentPlugins.includes(plugin))), _a); -+ return NewOctokit; -+ } -+ -+} -+Octokit.VERSION = VERSION; -+Octokit.plugins = []; -+ -+exports.Octokit = Octokit; -+//# sourceMappingURL=index.js.map -+ -+ -+/***/ }), -+ -+/***/ 3695: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+ -+var isPlainObject = __nccwpck_require__(7223); -+var universalUserAgent = __nccwpck_require__(9074); -+ -+function lowercaseKeys(object) { -+ if (!object) { -+ return {}; -+ } -+ -+ return Object.keys(object).reduce((newObj, key) => { -+ newObj[key.toLowerCase()] = object[key]; -+ return newObj; -+ }, {}); -+} -+ -+function mergeDeep(defaults, options) { -+ const result = Object.assign({}, defaults); -+ Object.keys(options).forEach(key => { -+ if (isPlainObject.isPlainObject(options[key])) { -+ if (!(key in defaults)) Object.assign(result, { -+ [key]: options[key] -+ });else result[key] = mergeDeep(defaults[key], options[key]); -+ } else { -+ Object.assign(result, { -+ [key]: options[key] -+ }); -+ } -+ }); -+ return result; -+} -+ -+function removeUndefinedProperties(obj) { -+ for (const key in obj) { -+ if (obj[key] === undefined) { -+ delete obj[key]; -+ } -+ } -+ -+ return obj; -+} -+ -+function merge(defaults, route, options) { -+ if (typeof route === "string") { -+ let [method, url] = route.split(" "); -+ options = Object.assign(url ? { -+ method, -+ url -+ } : { -+ url: method -+ }, options); -+ } else { -+ options = Object.assign({}, route); -+ } // lowercase header names before merging with defaults to avoid duplicates -+ -+ -+ options.headers = lowercaseKeys(options.headers); // remove properties with undefined values before merging -+ -+ removeUndefinedProperties(options); -+ removeUndefinedProperties(options.headers); -+ const mergedOptions = mergeDeep(defaults || {}, options); // mediaType.previews arrays are merged, instead of overwritten -+ -+ if (defaults && defaults.mediaType.previews.length) { -+ mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(preview => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews); -+ } -+ -+ mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map(preview => preview.replace(/-preview/, "")); -+ return mergedOptions; -+} -+ -+function addQueryParameters(url, parameters) { -+ const separator = /\?/.test(url) ? "&" : "?"; -+ const names = Object.keys(parameters); -+ -+ if (names.length === 0) { -+ return url; -+ } -+ -+ return url + separator + names.map(name => { -+ if (name === "q") { -+ return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+"); -+ } -+ -+ return `${name}=${encodeURIComponent(parameters[name])}`; -+ }).join("&"); -+} -+ -+const urlVariableRegex = /\{[^}]+\}/g; -+ -+function removeNonChars(variableName) { -+ return variableName.replace(/^\W+|\W+$/g, "").split(/,/); -+} -+ -+function extractUrlVariableNames(url) { -+ const matches = url.match(urlVariableRegex); -+ -+ if (!matches) { -+ return []; -+ } -+ -+ return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []); -+} -+ -+function omit(object, keysToOmit) { -+ return Object.keys(object).filter(option => !keysToOmit.includes(option)).reduce((obj, key) => { -+ obj[key] = object[key]; -+ return obj; -+ }, {}); -+} -+ -+// Based on https://github.com/bramstein/url-template, licensed under BSD -+// TODO: create separate package. -+// -+// Copyright (c) 2012-2014, Bram Stein -+// All rights reserved. -+// Redistribution and use in source and binary forms, with or without -+// modification, are permitted provided that the following conditions -+// are met: -+// 1. Redistributions of source code must retain the above copyright -+// notice, this list of conditions and the following disclaimer. -+// 2. Redistributions in binary form must reproduce the above copyright -+// notice, this list of conditions and the following disclaimer in the -+// documentation and/or other materials provided with the distribution. -+// 3. The name of the author may not be used to endorse or promote products -+// derived from this software without specific prior written permission. -+// THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED -+// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -+// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -+// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -+// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -+// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -+// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -+// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ -+/* istanbul ignore file */ -+function encodeReserved(str) { -+ return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) { -+ if (!/%[0-9A-Fa-f]/.test(part)) { -+ part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]"); -+ } -+ -+ return part; -+ }).join(""); -+} -+ -+function encodeUnreserved(str) { -+ return encodeURIComponent(str).replace(/[!'()*]/g, function (c) { -+ return "%" + c.charCodeAt(0).toString(16).toUpperCase(); -+ }); -+} -+ -+function encodeValue(operator, value, key) { -+ value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value); -+ -+ if (key) { -+ return encodeUnreserved(key) + "=" + value; -+ } else { -+ return value; -+ } -+} -+ -+function isDefined(value) { -+ return value !== undefined && value !== null; -+} -+ -+function isKeyOperator(operator) { -+ return operator === ";" || operator === "&" || operator === "?"; -+} -+ -+function getValues(context, operator, key, modifier) { -+ var value = context[key], -+ result = []; -+ -+ if (isDefined(value) && value !== "") { -+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") { -+ value = value.toString(); -+ -+ if (modifier && modifier !== "*") { -+ value = value.substring(0, parseInt(modifier, 10)); -+ } -+ -+ result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : "")); -+ } else { -+ if (modifier === "*") { -+ if (Array.isArray(value)) { -+ value.filter(isDefined).forEach(function (value) { -+ result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : "")); -+ }); -+ } else { -+ Object.keys(value).forEach(function (k) { -+ if (isDefined(value[k])) { -+ result.push(encodeValue(operator, value[k], k)); -+ } -+ }); -+ } -+ } else { -+ const tmp = []; -+ -+ if (Array.isArray(value)) { -+ value.filter(isDefined).forEach(function (value) { -+ tmp.push(encodeValue(operator, value)); -+ }); -+ } else { -+ Object.keys(value).forEach(function (k) { -+ if (isDefined(value[k])) { -+ tmp.push(encodeUnreserved(k)); -+ tmp.push(encodeValue(operator, value[k].toString())); -+ } -+ }); -+ } -+ -+ if (isKeyOperator(operator)) { -+ result.push(encodeUnreserved(key) + "=" + tmp.join(",")); -+ } else if (tmp.length !== 0) { -+ result.push(tmp.join(",")); -+ } -+ } -+ } -+ } else { -+ if (operator === ";") { -+ if (isDefined(value)) { -+ result.push(encodeUnreserved(key)); -+ } -+ } else if (value === "" && (operator === "&" || operator === "?")) { -+ result.push(encodeUnreserved(key) + "="); -+ } else if (value === "") { -+ result.push(""); -+ } -+ } -+ -+ return result; -+} -+ -+function parseUrl(template) { -+ return { -+ expand: expand.bind(null, template) -+ }; -+} -+ -+function expand(template, context) { -+ var operators = ["+", "#", ".", "/", ";", "?", "&"]; -+ return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) { -+ if (expression) { -+ let operator = ""; -+ const values = []; -+ -+ if (operators.indexOf(expression.charAt(0)) !== -1) { -+ operator = expression.charAt(0); -+ expression = expression.substr(1); -+ } -+ -+ expression.split(/,/g).forEach(function (variable) { -+ var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable); -+ values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3])); -+ }); -+ -+ if (operator && operator !== "+") { -+ var separator = ","; -+ -+ if (operator === "?") { -+ separator = "&"; -+ } else if (operator !== "#") { -+ separator = operator; -+ } -+ -+ return (values.length !== 0 ? operator : "") + values.join(separator); -+ } else { -+ return values.join(","); -+ } -+ } else { -+ return encodeReserved(literal); -+ } -+ }); -+} -+ -+function parse(options) { -+ // https://fetch.spec.whatwg.org/#methods -+ let method = options.method.toUpperCase(); // replace :varname with {varname} to make it RFC 6570 compatible -+ -+ let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{$1}"); -+ let headers = Object.assign({}, options.headers); -+ let body; -+ let parameters = omit(options, ["method", "baseUrl", "url", "headers", "request", "mediaType"]); // extract variable names from URL to calculate remaining variables later -+ -+ const urlVariableNames = extractUrlVariableNames(url); -+ url = parseUrl(url).expand(parameters); -+ -+ if (!/^http/.test(url)) { -+ url = options.baseUrl + url; -+ } -+ -+ const omittedParameters = Object.keys(options).filter(option => urlVariableNames.includes(option)).concat("baseUrl"); -+ const remainingParameters = omit(parameters, omittedParameters); -+ const isBinaryRequest = /application\/octet-stream/i.test(headers.accept); -+ -+ if (!isBinaryRequest) { -+ if (options.mediaType.format) { -+ // e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw -+ headers.accept = headers.accept.split(/,/).map(preview => preview.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`)).join(","); -+ } -+ -+ if (options.mediaType.previews.length) { -+ const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || []; -+ headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map(preview => { -+ const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json"; -+ return `application/vnd.github.${preview}-preview${format}`; -+ }).join(","); -+ } -+ } // for GET/HEAD requests, set URL query parameters from remaining parameters -+ // for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters -+ -+ -+ if (["GET", "HEAD"].includes(method)) { -+ url = addQueryParameters(url, remainingParameters); -+ } else { -+ if ("data" in remainingParameters) { -+ body = remainingParameters.data; -+ } else { -+ if (Object.keys(remainingParameters).length) { -+ body = remainingParameters; -+ } else { -+ headers["content-length"] = 0; -+ } -+ } -+ } // default content-type for JSON if body is set -+ -+ -+ if (!headers["content-type"] && typeof body !== "undefined") { -+ headers["content-type"] = "application/json; charset=utf-8"; -+ } // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body. -+ // fetch does not allow to set `content-length` header, but we can set body to an empty string -+ -+ -+ if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") { -+ body = ""; -+ } // Only return body/request keys if present -+ -+ -+ return Object.assign({ -+ method, -+ url, -+ headers -+ }, typeof body !== "undefined" ? { -+ body -+ } : null, options.request ? { -+ request: options.request -+ } : null); -+} -+ -+function endpointWithDefaults(defaults, route, options) { -+ return parse(merge(defaults, route, options)); -+} -+ -+function withDefaults(oldDefaults, newDefaults) { -+ const DEFAULTS = merge(oldDefaults, newDefaults); -+ const endpoint = endpointWithDefaults.bind(null, DEFAULTS); -+ return Object.assign(endpoint, { -+ DEFAULTS, -+ defaults: withDefaults.bind(null, DEFAULTS), -+ merge: merge.bind(null, DEFAULTS), -+ parse -+ }); -+} -+ -+const VERSION = "6.0.12"; -+ -+const userAgent = `octokit-endpoint.js/${VERSION} ${universalUserAgent.getUserAgent()}`; // DEFAULTS has all properties set that EndpointOptions has, except url. -+// So we use RequestParameters and add method as additional required property. -+ -+const DEFAULTS = { -+ method: "GET", -+ baseUrl: "https://api.github.com", -+ headers: { -+ accept: "application/vnd.github.v3+json", -+ "user-agent": userAgent -+ }, -+ mediaType: { -+ format: "", -+ previews: [] -+ } -+}; -+ -+const endpoint = withDefaults(null, DEFAULTS); -+ -+exports.endpoint = endpoint; -+//# sourceMappingURL=index.js.map -+ -+ -+/***/ }), -+ -+/***/ 9632: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+ -+var request = __nccwpck_require__(7639); -+var universalUserAgent = __nccwpck_require__(9074); -+ -+const VERSION = "4.8.0"; -+ -+function _buildMessageForResponseErrors(data) { -+ return `Request failed due to following response errors:\n` + data.errors.map(e => ` - ${e.message}`).join("\n"); -+} -+ -+class GraphqlResponseError extends Error { -+ constructor(request, headers, response) { -+ super(_buildMessageForResponseErrors(response)); -+ this.request = request; -+ this.headers = headers; -+ this.response = response; -+ this.name = "GraphqlResponseError"; // Expose the errors and response data in their shorthand properties. -+ -+ this.errors = response.errors; -+ this.data = response.data; // Maintains proper stack trace (only available on V8) -+ -+ /* istanbul ignore next */ -+ -+ if (Error.captureStackTrace) { -+ Error.captureStackTrace(this, this.constructor); -+ } -+ } -+ -+} -+ -+const NON_VARIABLE_OPTIONS = ["method", "baseUrl", "url", "headers", "request", "query", "mediaType"]; -+const FORBIDDEN_VARIABLE_OPTIONS = ["query", "method", "url"]; -+const GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/; -+function graphql(request, query, options) { -+ if (options) { -+ if (typeof query === "string" && "query" in options) { -+ return Promise.reject(new Error(`[@octokit/graphql] "query" cannot be used as variable name`)); -+ } -+ -+ for (const key in options) { -+ if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) continue; -+ return Promise.reject(new Error(`[@octokit/graphql] "${key}" cannot be used as variable name`)); -+ } -+ } -+ -+ const parsedOptions = typeof query === "string" ? Object.assign({ -+ query -+ }, options) : query; -+ const requestOptions = Object.keys(parsedOptions).reduce((result, key) => { -+ if (NON_VARIABLE_OPTIONS.includes(key)) { -+ result[key] = parsedOptions[key]; -+ return result; -+ } -+ -+ if (!result.variables) { -+ result.variables = {}; -+ } -+ -+ result.variables[key] = parsedOptions[key]; -+ return result; -+ }, {}); // workaround for GitHub Enterprise baseUrl set with /api/v3 suffix -+ // https://github.com/octokit/auth-app.js/issues/111#issuecomment-657610451 -+ -+ const baseUrl = parsedOptions.baseUrl || request.endpoint.DEFAULTS.baseUrl; -+ -+ if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) { -+ requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql"); -+ } -+ -+ return request(requestOptions).then(response => { -+ if (response.data.errors) { -+ const headers = {}; -+ -+ for (const key of Object.keys(response.headers)) { -+ headers[key] = response.headers[key]; -+ } -+ -+ throw new GraphqlResponseError(requestOptions, headers, response.data); -+ } -+ -+ return response.data.data; -+ }); -+} -+ -+function withDefaults(request$1, newDefaults) { -+ const newRequest = request$1.defaults(newDefaults); -+ -+ const newApi = (query, options) => { -+ return graphql(newRequest, query, options); -+ }; -+ -+ return Object.assign(newApi, { -+ defaults: withDefaults.bind(null, newRequest), -+ endpoint: request.request.endpoint -+ }); -+} -+ -+const graphql$1 = withDefaults(request.request, { -+ headers: { -+ "user-agent": `octokit-graphql.js/${VERSION} ${universalUserAgent.getUserAgent()}` -+ }, -+ method: "POST", -+ url: "/graphql" -+}); -+function withCustomRequest(customRequest) { -+ return withDefaults(customRequest, { -+ method: "POST", -+ url: "/graphql" -+ }); -+} -+ -+exports.GraphqlResponseError = GraphqlResponseError; -+exports.graphql = graphql$1; -+exports.withCustomRequest = withCustomRequest; -+//# sourceMappingURL=index.js.map -+ -+ -+/***/ }), -+ -+/***/ 8941: -+/***/ ((__unused_webpack_module, exports) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+ -+const VERSION = "2.21.3"; -+ -+function ownKeys(object, enumerableOnly) { -+ var keys = Object.keys(object); -+ -+ if (Object.getOwnPropertySymbols) { -+ var symbols = Object.getOwnPropertySymbols(object); -+ enumerableOnly && (symbols = symbols.filter(function (sym) { -+ return Object.getOwnPropertyDescriptor(object, sym).enumerable; -+ })), keys.push.apply(keys, symbols); -+ } -+ -+ return keys; -+} -+ -+function _objectSpread2(target) { -+ for (var i = 1; i < arguments.length; i++) { -+ var source = null != arguments[i] ? arguments[i] : {}; -+ i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { -+ _defineProperty(target, key, source[key]); -+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { -+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); -+ }); -+ } -+ -+ return target; -+} -+ -+function _defineProperty(obj, key, value) { -+ if (key in obj) { -+ Object.defineProperty(obj, key, { -+ value: value, -+ enumerable: true, -+ configurable: true, -+ writable: true -+ }); -+ } else { -+ obj[key] = value; -+ } -+ -+ return obj; -+} -+ -+/** -+ * Some “list” response that can be paginated have a different response structure -+ * -+ * They have a `total_count` key in the response (search also has `incomplete_results`, -+ * /installation/repositories also has `repository_selection`), as well as a key with -+ * the list of the items which name varies from endpoint to endpoint. -+ * -+ * Octokit normalizes these responses so that paginated results are always returned following -+ * the same structure. One challenge is that if the list response has only one page, no Link -+ * header is provided, so this header alone is not sufficient to check wether a response is -+ * paginated or not. -+ * -+ * We check if a "total_count" key is present in the response data, but also make sure that -+ * a "url" property is not, as the "Get the combined status for a specific ref" endpoint would -+ * otherwise match: https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref -+ */ -+function normalizePaginatedListResponse(response) { -+ // endpoints can respond with 204 if repository is empty -+ if (!response.data) { -+ return _objectSpread2(_objectSpread2({}, response), {}, { -+ data: [] -+ }); -+ } -+ -+ const responseNeedsNormalization = "total_count" in response.data && !("url" in response.data); -+ if (!responseNeedsNormalization) return response; // keep the additional properties intact as there is currently no other way -+ // to retrieve the same information. -+ -+ const incompleteResults = response.data.incomplete_results; -+ const repositorySelection = response.data.repository_selection; -+ const totalCount = response.data.total_count; -+ delete response.data.incomplete_results; -+ delete response.data.repository_selection; -+ delete response.data.total_count; -+ const namespaceKey = Object.keys(response.data)[0]; -+ const data = response.data[namespaceKey]; -+ response.data = data; -+ -+ if (typeof incompleteResults !== "undefined") { -+ response.data.incomplete_results = incompleteResults; -+ } -+ -+ if (typeof repositorySelection !== "undefined") { -+ response.data.repository_selection = repositorySelection; -+ } -+ -+ response.data.total_count = totalCount; -+ return response; -+} -+ -+function iterator(octokit, route, parameters) { -+ const options = typeof route === "function" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters); -+ const requestMethod = typeof route === "function" ? route : octokit.request; -+ const method = options.method; -+ const headers = options.headers; -+ let url = options.url; -+ return { -+ [Symbol.asyncIterator]: () => ({ -+ async next() { -+ if (!url) return { -+ done: true -+ }; -+ -+ try { -+ const response = await requestMethod({ -+ method, -+ url, -+ headers -+ }); -+ const normalizedResponse = normalizePaginatedListResponse(response); // `response.headers.link` format: -+ // '; rel="next", ; rel="last"' -+ // sets `url` to undefined if "next" URL is not present or `link` header is not set -+ -+ url = ((normalizedResponse.headers.link || "").match(/<([^>]+)>;\s*rel="next"/) || [])[1]; -+ return { -+ value: normalizedResponse -+ }; -+ } catch (error) { -+ if (error.status !== 409) throw error; -+ url = ""; -+ return { -+ value: { -+ status: 200, -+ headers: {}, -+ data: [] -+ } -+ }; -+ } -+ } -+ -+ }) -+ }; -+} -+ -+function paginate(octokit, route, parameters, mapFn) { -+ if (typeof parameters === "function") { -+ mapFn = parameters; -+ parameters = undefined; -+ } -+ -+ return gather(octokit, [], iterator(octokit, route, parameters)[Symbol.asyncIterator](), mapFn); -+} -+ -+function gather(octokit, results, iterator, mapFn) { -+ return iterator.next().then(result => { -+ if (result.done) { -+ return results; -+ } -+ -+ let earlyExit = false; -+ -+ function done() { -+ earlyExit = true; -+ } -+ -+ results = results.concat(mapFn ? mapFn(result.value, done) : result.value.data); -+ -+ if (earlyExit) { -+ return results; -+ } -+ -+ return gather(octokit, results, iterator, mapFn); -+ }); -+} -+ -+const composePaginateRest = Object.assign(paginate, { -+ iterator -+}); -+ -+const paginatingEndpoints = ["GET /app/hook/deliveries", "GET /app/installations", "GET /applications/grants", "GET /authorizations", "GET /enterprises/{enterprise}/actions/permissions/organizations", "GET /enterprises/{enterprise}/actions/runner-groups", "GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations", "GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners", "GET /enterprises/{enterprise}/actions/runners", "GET /enterprises/{enterprise}/audit-log", "GET /enterprises/{enterprise}/secret-scanning/alerts", "GET /enterprises/{enterprise}/settings/billing/advanced-security", "GET /events", "GET /gists", "GET /gists/public", "GET /gists/starred", "GET /gists/{gist_id}/comments", "GET /gists/{gist_id}/commits", "GET /gists/{gist_id}/forks", "GET /installation/repositories", "GET /issues", "GET /licenses", "GET /marketplace_listing/plans", "GET /marketplace_listing/plans/{plan_id}/accounts", "GET /marketplace_listing/stubbed/plans", "GET /marketplace_listing/stubbed/plans/{plan_id}/accounts", "GET /networks/{owner}/{repo}/events", "GET /notifications", "GET /organizations", "GET /orgs/{org}/actions/cache/usage-by-repository", "GET /orgs/{org}/actions/permissions/repositories", "GET /orgs/{org}/actions/runner-groups", "GET /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories", "GET /orgs/{org}/actions/runner-groups/{runner_group_id}/runners", "GET /orgs/{org}/actions/runners", "GET /orgs/{org}/actions/secrets", "GET /orgs/{org}/actions/secrets/{secret_name}/repositories", "GET /orgs/{org}/audit-log", "GET /orgs/{org}/blocks", "GET /orgs/{org}/code-scanning/alerts", "GET /orgs/{org}/codespaces", "GET /orgs/{org}/credential-authorizations", "GET /orgs/{org}/dependabot/secrets", "GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories", "GET /orgs/{org}/events", "GET /orgs/{org}/external-groups", "GET /orgs/{org}/failed_invitations", "GET /orgs/{org}/hooks", "GET /orgs/{org}/hooks/{hook_id}/deliveries", "GET /orgs/{org}/installations", "GET /orgs/{org}/invitations", "GET /orgs/{org}/invitations/{invitation_id}/teams", "GET /orgs/{org}/issues", "GET /orgs/{org}/members", "GET /orgs/{org}/migrations", "GET /orgs/{org}/migrations/{migration_id}/repositories", "GET /orgs/{org}/outside_collaborators", "GET /orgs/{org}/packages", "GET /orgs/{org}/packages/{package_type}/{package_name}/versions", "GET /orgs/{org}/projects", "GET /orgs/{org}/public_members", "GET /orgs/{org}/repos", "GET /orgs/{org}/secret-scanning/alerts", "GET /orgs/{org}/settings/billing/advanced-security", "GET /orgs/{org}/team-sync/groups", "GET /orgs/{org}/teams", "GET /orgs/{org}/teams/{team_slug}/discussions", "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments", "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions", "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions", "GET /orgs/{org}/teams/{team_slug}/invitations", "GET /orgs/{org}/teams/{team_slug}/members", "GET /orgs/{org}/teams/{team_slug}/projects", "GET /orgs/{org}/teams/{team_slug}/repos", "GET /orgs/{org}/teams/{team_slug}/teams", "GET /projects/columns/{column_id}/cards", "GET /projects/{project_id}/collaborators", "GET /projects/{project_id}/columns", "GET /repos/{owner}/{repo}/actions/artifacts", "GET /repos/{owner}/{repo}/actions/caches", "GET /repos/{owner}/{repo}/actions/runners", "GET /repos/{owner}/{repo}/actions/runs", "GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts", "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs", "GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs", "GET /repos/{owner}/{repo}/actions/secrets", "GET /repos/{owner}/{repo}/actions/workflows", "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs", "GET /repos/{owner}/{repo}/assignees", "GET /repos/{owner}/{repo}/branches", "GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations", "GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs", "GET /repos/{owner}/{repo}/code-scanning/alerts", "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances", "GET /repos/{owner}/{repo}/code-scanning/analyses", "GET /repos/{owner}/{repo}/codespaces", "GET /repos/{owner}/{repo}/codespaces/devcontainers", "GET /repos/{owner}/{repo}/codespaces/secrets", "GET /repos/{owner}/{repo}/collaborators", "GET /repos/{owner}/{repo}/comments", "GET /repos/{owner}/{repo}/comments/{comment_id}/reactions", "GET /repos/{owner}/{repo}/commits", "GET /repos/{owner}/{repo}/commits/{commit_sha}/comments", "GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls", "GET /repos/{owner}/{repo}/commits/{ref}/check-runs", "GET /repos/{owner}/{repo}/commits/{ref}/check-suites", "GET /repos/{owner}/{repo}/commits/{ref}/status", "GET /repos/{owner}/{repo}/commits/{ref}/statuses", "GET /repos/{owner}/{repo}/contributors", "GET /repos/{owner}/{repo}/dependabot/secrets", "GET /repos/{owner}/{repo}/deployments", "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses", "GET /repos/{owner}/{repo}/environments", "GET /repos/{owner}/{repo}/events", "GET /repos/{owner}/{repo}/forks", "GET /repos/{owner}/{repo}/git/matching-refs/{ref}", "GET /repos/{owner}/{repo}/hooks", "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries", "GET /repos/{owner}/{repo}/invitations", "GET /repos/{owner}/{repo}/issues", "GET /repos/{owner}/{repo}/issues/comments", "GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions", "GET /repos/{owner}/{repo}/issues/events", "GET /repos/{owner}/{repo}/issues/{issue_number}/comments", "GET /repos/{owner}/{repo}/issues/{issue_number}/events", "GET /repos/{owner}/{repo}/issues/{issue_number}/labels", "GET /repos/{owner}/{repo}/issues/{issue_number}/reactions", "GET /repos/{owner}/{repo}/issues/{issue_number}/timeline", "GET /repos/{owner}/{repo}/keys", "GET /repos/{owner}/{repo}/labels", "GET /repos/{owner}/{repo}/milestones", "GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels", "GET /repos/{owner}/{repo}/notifications", "GET /repos/{owner}/{repo}/pages/builds", "GET /repos/{owner}/{repo}/projects", "GET /repos/{owner}/{repo}/pulls", "GET /repos/{owner}/{repo}/pulls/comments", "GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions", "GET /repos/{owner}/{repo}/pulls/{pull_number}/comments", "GET /repos/{owner}/{repo}/pulls/{pull_number}/commits", "GET /repos/{owner}/{repo}/pulls/{pull_number}/files", "GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers", "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews", "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments", "GET /repos/{owner}/{repo}/releases", "GET /repos/{owner}/{repo}/releases/{release_id}/assets", "GET /repos/{owner}/{repo}/releases/{release_id}/reactions", "GET /repos/{owner}/{repo}/secret-scanning/alerts", "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations", "GET /repos/{owner}/{repo}/stargazers", "GET /repos/{owner}/{repo}/subscribers", "GET /repos/{owner}/{repo}/tags", "GET /repos/{owner}/{repo}/teams", "GET /repos/{owner}/{repo}/topics", "GET /repositories", "GET /repositories/{repository_id}/environments/{environment_name}/secrets", "GET /search/code", "GET /search/commits", "GET /search/issues", "GET /search/labels", "GET /search/repositories", "GET /search/topics", "GET /search/users", "GET /teams/{team_id}/discussions", "GET /teams/{team_id}/discussions/{discussion_number}/comments", "GET /teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions", "GET /teams/{team_id}/discussions/{discussion_number}/reactions", "GET /teams/{team_id}/invitations", "GET /teams/{team_id}/members", "GET /teams/{team_id}/projects", "GET /teams/{team_id}/repos", "GET /teams/{team_id}/teams", "GET /user/blocks", "GET /user/codespaces", "GET /user/codespaces/secrets", "GET /user/emails", "GET /user/followers", "GET /user/following", "GET /user/gpg_keys", "GET /user/installations", "GET /user/installations/{installation_id}/repositories", "GET /user/issues", "GET /user/keys", "GET /user/marketplace_purchases", "GET /user/marketplace_purchases/stubbed", "GET /user/memberships/orgs", "GET /user/migrations", "GET /user/migrations/{migration_id}/repositories", "GET /user/orgs", "GET /user/packages", "GET /user/packages/{package_type}/{package_name}/versions", "GET /user/public_emails", "GET /user/repos", "GET /user/repository_invitations", "GET /user/starred", "GET /user/subscriptions", "GET /user/teams", "GET /users", "GET /users/{username}/events", "GET /users/{username}/events/orgs/{org}", "GET /users/{username}/events/public", "GET /users/{username}/followers", "GET /users/{username}/following", "GET /users/{username}/gists", "GET /users/{username}/gpg_keys", "GET /users/{username}/keys", "GET /users/{username}/orgs", "GET /users/{username}/packages", "GET /users/{username}/projects", "GET /users/{username}/received_events", "GET /users/{username}/received_events/public", "GET /users/{username}/repos", "GET /users/{username}/starred", "GET /users/{username}/subscriptions"]; -+ -+function isPaginatingEndpoint(arg) { -+ if (typeof arg === "string") { -+ return paginatingEndpoints.includes(arg); -+ } else { -+ return false; -+ } -+} -+ -+/** -+ * @param octokit Octokit instance -+ * @param options Options passed to Octokit constructor -+ */ -+ -+function paginateRest(octokit) { -+ return { -+ paginate: Object.assign(paginate.bind(null, octokit), { -+ iterator: iterator.bind(null, octokit) -+ }) -+ }; -+} -+paginateRest.VERSION = VERSION; -+ -+exports.composePaginateRest = composePaginateRest; -+exports.isPaginatingEndpoint = isPaginatingEndpoint; -+exports.paginateRest = paginateRest; -+exports.paginatingEndpoints = paginatingEndpoints; -+//# sourceMappingURL=index.js.map -+ -+ -+/***/ }), -+ -+/***/ 5617: -+/***/ ((__unused_webpack_module, exports) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+ -+function ownKeys(object, enumerableOnly) { -+ var keys = Object.keys(object); -+ -+ if (Object.getOwnPropertySymbols) { -+ var symbols = Object.getOwnPropertySymbols(object); -+ -+ if (enumerableOnly) { -+ symbols = symbols.filter(function (sym) { -+ return Object.getOwnPropertyDescriptor(object, sym).enumerable; -+ }); -+ } -+ -+ keys.push.apply(keys, symbols); -+ } -+ -+ return keys; -+} -+ -+function _objectSpread2(target) { -+ for (var i = 1; i < arguments.length; i++) { -+ var source = arguments[i] != null ? arguments[i] : {}; -+ -+ if (i % 2) { -+ ownKeys(Object(source), true).forEach(function (key) { -+ _defineProperty(target, key, source[key]); -+ }); -+ } else if (Object.getOwnPropertyDescriptors) { -+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); -+ } else { -+ ownKeys(Object(source)).forEach(function (key) { -+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); -+ }); -+ } -+ } -+ -+ return target; -+} -+ -+function _defineProperty(obj, key, value) { -+ if (key in obj) { -+ Object.defineProperty(obj, key, { -+ value: value, -+ enumerable: true, -+ configurable: true, -+ writable: true -+ }); -+ } else { -+ obj[key] = value; -+ } -+ -+ return obj; -+} -+ -+const Endpoints = { -+ actions: { -+ addCustomLabelsToSelfHostedRunnerForOrg: ["POST /orgs/{org}/actions/runners/{runner_id}/labels"], -+ addCustomLabelsToSelfHostedRunnerForRepo: ["POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"], -+ addSelectedRepoToOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"], -+ approveWorkflowRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve"], -+ cancelWorkflowRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel"], -+ createOrUpdateEnvironmentSecret: ["PUT /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"], -+ createOrUpdateOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}"], -+ createOrUpdateRepoSecret: ["PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}"], -+ createRegistrationTokenForOrg: ["POST /orgs/{org}/actions/runners/registration-token"], -+ createRegistrationTokenForRepo: ["POST /repos/{owner}/{repo}/actions/runners/registration-token"], -+ createRemoveTokenForOrg: ["POST /orgs/{org}/actions/runners/remove-token"], -+ createRemoveTokenForRepo: ["POST /repos/{owner}/{repo}/actions/runners/remove-token"], -+ createWorkflowDispatch: ["POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches"], -+ deleteActionsCacheById: ["DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}"], -+ deleteActionsCacheByKey: ["DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}"], -+ deleteArtifact: ["DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"], -+ deleteEnvironmentSecret: ["DELETE /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"], -+ deleteOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}"], -+ deleteRepoSecret: ["DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}"], -+ deleteSelfHostedRunnerFromOrg: ["DELETE /orgs/{org}/actions/runners/{runner_id}"], -+ deleteSelfHostedRunnerFromRepo: ["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}"], -+ deleteWorkflowRun: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"], -+ deleteWorkflowRunLogs: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs"], -+ disableSelectedRepositoryGithubActionsOrganization: ["DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}"], -+ disableWorkflow: ["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable"], -+ downloadArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}"], -+ downloadJobLogsForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs"], -+ downloadWorkflowRunAttemptLogs: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs"], -+ downloadWorkflowRunLogs: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs"], -+ enableSelectedRepositoryGithubActionsOrganization: ["PUT /orgs/{org}/actions/permissions/repositories/{repository_id}"], -+ enableWorkflow: ["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable"], -+ getActionsCacheList: ["GET /repos/{owner}/{repo}/actions/caches"], -+ getActionsCacheUsage: ["GET /repos/{owner}/{repo}/actions/cache/usage"], -+ getActionsCacheUsageByRepoForOrg: ["GET /orgs/{org}/actions/cache/usage-by-repository"], -+ getActionsCacheUsageForEnterprise: ["GET /enterprises/{enterprise}/actions/cache/usage"], -+ getActionsCacheUsageForOrg: ["GET /orgs/{org}/actions/cache/usage"], -+ getAllowedActionsOrganization: ["GET /orgs/{org}/actions/permissions/selected-actions"], -+ getAllowedActionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions/selected-actions"], -+ getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"], -+ getEnvironmentPublicKey: ["GET /repositories/{repository_id}/environments/{environment_name}/secrets/public-key"], -+ getEnvironmentSecret: ["GET /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"], -+ getGithubActionsDefaultWorkflowPermissionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions/workflow"], -+ getGithubActionsDefaultWorkflowPermissionsOrganization: ["GET /orgs/{org}/actions/permissions/workflow"], -+ getGithubActionsDefaultWorkflowPermissionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions/workflow"], -+ getGithubActionsPermissionsOrganization: ["GET /orgs/{org}/actions/permissions"], -+ getGithubActionsPermissionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions"], -+ getJobForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"], -+ getOrgPublicKey: ["GET /orgs/{org}/actions/secrets/public-key"], -+ getOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}"], -+ getPendingDeploymentsForRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"], -+ getRepoPermissions: ["GET /repos/{owner}/{repo}/actions/permissions", {}, { -+ renamed: ["actions", "getGithubActionsPermissionsRepository"] -+ }], -+ getRepoPublicKey: ["GET /repos/{owner}/{repo}/actions/secrets/public-key"], -+ getRepoSecret: ["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"], -+ getReviewsForRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals"], -+ getSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}"], -+ getSelfHostedRunnerForRepo: ["GET /repos/{owner}/{repo}/actions/runners/{runner_id}"], -+ getWorkflow: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"], -+ getWorkflowAccessToRepository: ["GET /repos/{owner}/{repo}/actions/permissions/access"], -+ getWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}"], -+ getWorkflowRunAttempt: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}"], -+ getWorkflowRunUsage: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing"], -+ getWorkflowUsage: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing"], -+ listArtifactsForRepo: ["GET /repos/{owner}/{repo}/actions/artifacts"], -+ listEnvironmentSecrets: ["GET /repositories/{repository_id}/environments/{environment_name}/secrets"], -+ listJobsForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs"], -+ listJobsForWorkflowRunAttempt: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs"], -+ listLabelsForSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}/labels"], -+ listLabelsForSelfHostedRunnerForRepo: ["GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"], -+ listOrgSecrets: ["GET /orgs/{org}/actions/secrets"], -+ listRepoSecrets: ["GET /repos/{owner}/{repo}/actions/secrets"], -+ listRepoWorkflows: ["GET /repos/{owner}/{repo}/actions/workflows"], -+ listRunnerApplicationsForOrg: ["GET /orgs/{org}/actions/runners/downloads"], -+ listRunnerApplicationsForRepo: ["GET /repos/{owner}/{repo}/actions/runners/downloads"], -+ listSelectedReposForOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}/repositories"], -+ listSelectedRepositoriesEnabledGithubActionsOrganization: ["GET /orgs/{org}/actions/permissions/repositories"], -+ listSelfHostedRunnersForOrg: ["GET /orgs/{org}/actions/runners"], -+ listSelfHostedRunnersForRepo: ["GET /repos/{owner}/{repo}/actions/runners"], -+ listWorkflowRunArtifacts: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"], -+ listWorkflowRuns: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"], -+ listWorkflowRunsForRepo: ["GET /repos/{owner}/{repo}/actions/runs"], -+ reRunJobForWorkflowRun: ["POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun"], -+ reRunWorkflow: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"], -+ reRunWorkflowFailedJobs: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs"], -+ removeAllCustomLabelsFromSelfHostedRunnerForOrg: ["DELETE /orgs/{org}/actions/runners/{runner_id}/labels"], -+ removeAllCustomLabelsFromSelfHostedRunnerForRepo: ["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"], -+ removeCustomLabelFromSelfHostedRunnerForOrg: ["DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}"], -+ removeCustomLabelFromSelfHostedRunnerForRepo: ["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}"], -+ removeSelectedRepoFromOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"], -+ reviewPendingDeploymentsForRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"], -+ setAllowedActionsOrganization: ["PUT /orgs/{org}/actions/permissions/selected-actions"], -+ setAllowedActionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions/selected-actions"], -+ setCustomLabelsForSelfHostedRunnerForOrg: ["PUT /orgs/{org}/actions/runners/{runner_id}/labels"], -+ setCustomLabelsForSelfHostedRunnerForRepo: ["PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"], -+ setGithubActionsDefaultWorkflowPermissionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/workflow"], -+ setGithubActionsDefaultWorkflowPermissionsOrganization: ["PUT /orgs/{org}/actions/permissions/workflow"], -+ setGithubActionsDefaultWorkflowPermissionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions/workflow"], -+ setGithubActionsPermissionsOrganization: ["PUT /orgs/{org}/actions/permissions"], -+ setGithubActionsPermissionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions"], -+ setSelectedReposForOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories"], -+ setSelectedRepositoriesEnabledGithubActionsOrganization: ["PUT /orgs/{org}/actions/permissions/repositories"], -+ setWorkflowAccessToRepository: ["PUT /repos/{owner}/{repo}/actions/permissions/access"] -+ }, -+ activity: { -+ checkRepoIsStarredByAuthenticatedUser: ["GET /user/starred/{owner}/{repo}"], -+ deleteRepoSubscription: ["DELETE /repos/{owner}/{repo}/subscription"], -+ deleteThreadSubscription: ["DELETE /notifications/threads/{thread_id}/subscription"], -+ getFeeds: ["GET /feeds"], -+ getRepoSubscription: ["GET /repos/{owner}/{repo}/subscription"], -+ getThread: ["GET /notifications/threads/{thread_id}"], -+ getThreadSubscriptionForAuthenticatedUser: ["GET /notifications/threads/{thread_id}/subscription"], -+ listEventsForAuthenticatedUser: ["GET /users/{username}/events"], -+ listNotificationsForAuthenticatedUser: ["GET /notifications"], -+ listOrgEventsForAuthenticatedUser: ["GET /users/{username}/events/orgs/{org}"], -+ listPublicEvents: ["GET /events"], -+ listPublicEventsForRepoNetwork: ["GET /networks/{owner}/{repo}/events"], -+ listPublicEventsForUser: ["GET /users/{username}/events/public"], -+ listPublicOrgEvents: ["GET /orgs/{org}/events"], -+ listReceivedEventsForUser: ["GET /users/{username}/received_events"], -+ listReceivedPublicEventsForUser: ["GET /users/{username}/received_events/public"], -+ listRepoEvents: ["GET /repos/{owner}/{repo}/events"], -+ listRepoNotificationsForAuthenticatedUser: ["GET /repos/{owner}/{repo}/notifications"], -+ listReposStarredByAuthenticatedUser: ["GET /user/starred"], -+ listReposStarredByUser: ["GET /users/{username}/starred"], -+ listReposWatchedByUser: ["GET /users/{username}/subscriptions"], -+ listStargazersForRepo: ["GET /repos/{owner}/{repo}/stargazers"], -+ listWatchedReposForAuthenticatedUser: ["GET /user/subscriptions"], -+ listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"], -+ markNotificationsAsRead: ["PUT /notifications"], -+ markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"], -+ markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"], -+ setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"], -+ setThreadSubscription: ["PUT /notifications/threads/{thread_id}/subscription"], -+ starRepoForAuthenticatedUser: ["PUT /user/starred/{owner}/{repo}"], -+ unstarRepoForAuthenticatedUser: ["DELETE /user/starred/{owner}/{repo}"] -+ }, -+ apps: { -+ addRepoToInstallation: ["PUT /user/installations/{installation_id}/repositories/{repository_id}", {}, { -+ renamed: ["apps", "addRepoToInstallationForAuthenticatedUser"] -+ }], -+ addRepoToInstallationForAuthenticatedUser: ["PUT /user/installations/{installation_id}/repositories/{repository_id}"], -+ checkToken: ["POST /applications/{client_id}/token"], -+ createFromManifest: ["POST /app-manifests/{code}/conversions"], -+ createInstallationAccessToken: ["POST /app/installations/{installation_id}/access_tokens"], -+ deleteAuthorization: ["DELETE /applications/{client_id}/grant"], -+ deleteInstallation: ["DELETE /app/installations/{installation_id}"], -+ deleteToken: ["DELETE /applications/{client_id}/token"], -+ getAuthenticated: ["GET /app"], -+ getBySlug: ["GET /apps/{app_slug}"], -+ getInstallation: ["GET /app/installations/{installation_id}"], -+ getOrgInstallation: ["GET /orgs/{org}/installation"], -+ getRepoInstallation: ["GET /repos/{owner}/{repo}/installation"], -+ getSubscriptionPlanForAccount: ["GET /marketplace_listing/accounts/{account_id}"], -+ getSubscriptionPlanForAccountStubbed: ["GET /marketplace_listing/stubbed/accounts/{account_id}"], -+ getUserInstallation: ["GET /users/{username}/installation"], -+ getWebhookConfigForApp: ["GET /app/hook/config"], -+ getWebhookDelivery: ["GET /app/hook/deliveries/{delivery_id}"], -+ listAccountsForPlan: ["GET /marketplace_listing/plans/{plan_id}/accounts"], -+ listAccountsForPlanStubbed: ["GET /marketplace_listing/stubbed/plans/{plan_id}/accounts"], -+ listInstallationReposForAuthenticatedUser: ["GET /user/installations/{installation_id}/repositories"], -+ listInstallations: ["GET /app/installations"], -+ listInstallationsForAuthenticatedUser: ["GET /user/installations"], -+ listPlans: ["GET /marketplace_listing/plans"], -+ listPlansStubbed: ["GET /marketplace_listing/stubbed/plans"], -+ listReposAccessibleToInstallation: ["GET /installation/repositories"], -+ listSubscriptionsForAuthenticatedUser: ["GET /user/marketplace_purchases"], -+ listSubscriptionsForAuthenticatedUserStubbed: ["GET /user/marketplace_purchases/stubbed"], -+ listWebhookDeliveries: ["GET /app/hook/deliveries"], -+ redeliverWebhookDelivery: ["POST /app/hook/deliveries/{delivery_id}/attempts"], -+ removeRepoFromInstallation: ["DELETE /user/installations/{installation_id}/repositories/{repository_id}", {}, { -+ renamed: ["apps", "removeRepoFromInstallationForAuthenticatedUser"] -+ }], -+ removeRepoFromInstallationForAuthenticatedUser: ["DELETE /user/installations/{installation_id}/repositories/{repository_id}"], -+ resetToken: ["PATCH /applications/{client_id}/token"], -+ revokeInstallationAccessToken: ["DELETE /installation/token"], -+ scopeToken: ["POST /applications/{client_id}/token/scoped"], -+ suspendInstallation: ["PUT /app/installations/{installation_id}/suspended"], -+ unsuspendInstallation: ["DELETE /app/installations/{installation_id}/suspended"], -+ updateWebhookConfigForApp: ["PATCH /app/hook/config"] -+ }, -+ billing: { -+ getGithubActionsBillingOrg: ["GET /orgs/{org}/settings/billing/actions"], -+ getGithubActionsBillingUser: ["GET /users/{username}/settings/billing/actions"], -+ getGithubAdvancedSecurityBillingGhe: ["GET /enterprises/{enterprise}/settings/billing/advanced-security"], -+ getGithubAdvancedSecurityBillingOrg: ["GET /orgs/{org}/settings/billing/advanced-security"], -+ getGithubPackagesBillingOrg: ["GET /orgs/{org}/settings/billing/packages"], -+ getGithubPackagesBillingUser: ["GET /users/{username}/settings/billing/packages"], -+ getSharedStorageBillingOrg: ["GET /orgs/{org}/settings/billing/shared-storage"], -+ getSharedStorageBillingUser: ["GET /users/{username}/settings/billing/shared-storage"] -+ }, -+ checks: { -+ create: ["POST /repos/{owner}/{repo}/check-runs"], -+ createSuite: ["POST /repos/{owner}/{repo}/check-suites"], -+ get: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"], -+ getSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"], -+ listAnnotations: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations"], -+ listForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"], -+ listForSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs"], -+ listSuitesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"], -+ rerequestRun: ["POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest"], -+ rerequestSuite: ["POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest"], -+ setSuitesPreferences: ["PATCH /repos/{owner}/{repo}/check-suites/preferences"], -+ update: ["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"] -+ }, -+ codeScanning: { -+ deleteAnalysis: ["DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}"], -+ getAlert: ["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}", {}, { -+ renamedParameters: { -+ alert_id: "alert_number" -+ } -+ }], -+ getAnalysis: ["GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}"], -+ getSarif: ["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"], -+ listAlertInstances: ["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances"], -+ listAlertsForOrg: ["GET /orgs/{org}/code-scanning/alerts"], -+ listAlertsForRepo: ["GET /repos/{owner}/{repo}/code-scanning/alerts"], -+ listAlertsInstances: ["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances", {}, { -+ renamed: ["codeScanning", "listAlertInstances"] -+ }], -+ listRecentAnalyses: ["GET /repos/{owner}/{repo}/code-scanning/analyses"], -+ updateAlert: ["PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}"], -+ uploadSarif: ["POST /repos/{owner}/{repo}/code-scanning/sarifs"] -+ }, -+ codesOfConduct: { -+ getAllCodesOfConduct: ["GET /codes_of_conduct"], -+ getConductCode: ["GET /codes_of_conduct/{key}"] -+ }, -+ codespaces: { -+ addRepositoryForSecretForAuthenticatedUser: ["PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"], -+ codespaceMachinesForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}/machines"], -+ createForAuthenticatedUser: ["POST /user/codespaces"], -+ createOrUpdateRepoSecret: ["PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"], -+ createOrUpdateSecretForAuthenticatedUser: ["PUT /user/codespaces/secrets/{secret_name}"], -+ createWithPrForAuthenticatedUser: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces"], -+ createWithRepoForAuthenticatedUser: ["POST /repos/{owner}/{repo}/codespaces"], -+ deleteForAuthenticatedUser: ["DELETE /user/codespaces/{codespace_name}"], -+ deleteFromOrganization: ["DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}"], -+ deleteRepoSecret: ["DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"], -+ deleteSecretForAuthenticatedUser: ["DELETE /user/codespaces/secrets/{secret_name}"], -+ exportForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/exports"], -+ getExportDetailsForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}/exports/{export_id}"], -+ getForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}"], -+ getPublicKeyForAuthenticatedUser: ["GET /user/codespaces/secrets/public-key"], -+ getRepoPublicKey: ["GET /repos/{owner}/{repo}/codespaces/secrets/public-key"], -+ getRepoSecret: ["GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"], -+ getSecretForAuthenticatedUser: ["GET /user/codespaces/secrets/{secret_name}"], -+ listDevcontainersInRepositoryForAuthenticatedUser: ["GET /repos/{owner}/{repo}/codespaces/devcontainers"], -+ listForAuthenticatedUser: ["GET /user/codespaces"], -+ listInOrganization: ["GET /orgs/{org}/codespaces", {}, { -+ renamedParameters: { -+ org_id: "org" -+ } -+ }], -+ listInRepositoryForAuthenticatedUser: ["GET /repos/{owner}/{repo}/codespaces"], -+ listRepoSecrets: ["GET /repos/{owner}/{repo}/codespaces/secrets"], -+ listRepositoriesForSecretForAuthenticatedUser: ["GET /user/codespaces/secrets/{secret_name}/repositories"], -+ listSecretsForAuthenticatedUser: ["GET /user/codespaces/secrets"], -+ removeRepositoryForSecretForAuthenticatedUser: ["DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"], -+ repoMachinesForAuthenticatedUser: ["GET /repos/{owner}/{repo}/codespaces/machines"], -+ setRepositoriesForSecretForAuthenticatedUser: ["PUT /user/codespaces/secrets/{secret_name}/repositories"], -+ startForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/start"], -+ stopForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/stop"], -+ stopInOrganization: ["POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop"], -+ updateForAuthenticatedUser: ["PATCH /user/codespaces/{codespace_name}"] -+ }, -+ dependabot: { -+ addSelectedRepoToOrgSecret: ["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"], -+ createOrUpdateOrgSecret: ["PUT /orgs/{org}/dependabot/secrets/{secret_name}"], -+ createOrUpdateRepoSecret: ["PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"], -+ deleteOrgSecret: ["DELETE /orgs/{org}/dependabot/secrets/{secret_name}"], -+ deleteRepoSecret: ["DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"], -+ getOrgPublicKey: ["GET /orgs/{org}/dependabot/secrets/public-key"], -+ getOrgSecret: ["GET /orgs/{org}/dependabot/secrets/{secret_name}"], -+ getRepoPublicKey: ["GET /repos/{owner}/{repo}/dependabot/secrets/public-key"], -+ getRepoSecret: ["GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"], -+ listOrgSecrets: ["GET /orgs/{org}/dependabot/secrets"], -+ listRepoSecrets: ["GET /repos/{owner}/{repo}/dependabot/secrets"], -+ listSelectedReposForOrgSecret: ["GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories"], -+ removeSelectedRepoFromOrgSecret: ["DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"], -+ setSelectedReposForOrgSecret: ["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories"] -+ }, -+ dependencyGraph: { -+ createRepositorySnapshot: ["POST /repos/{owner}/{repo}/dependency-graph/snapshots"], -+ diffRange: ["GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}"] -+ }, -+ emojis: { -+ get: ["GET /emojis"] -+ }, -+ enterpriseAdmin: { -+ addCustomLabelsToSelfHostedRunnerForEnterprise: ["POST /enterprises/{enterprise}/actions/runners/{runner_id}/labels"], -+ disableSelectedOrganizationGithubActionsEnterprise: ["DELETE /enterprises/{enterprise}/actions/permissions/organizations/{org_id}"], -+ enableSelectedOrganizationGithubActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/organizations/{org_id}"], -+ getAllowedActionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions/selected-actions"], -+ getGithubActionsPermissionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions"], -+ getServerStatistics: ["GET /enterprise-installation/{enterprise_or_org}/server-statistics"], -+ listLabelsForSelfHostedRunnerForEnterprise: ["GET /enterprises/{enterprise}/actions/runners/{runner_id}/labels"], -+ listSelectedOrganizationsEnabledGithubActionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions/organizations"], -+ removeAllCustomLabelsFromSelfHostedRunnerForEnterprise: ["DELETE /enterprises/{enterprise}/actions/runners/{runner_id}/labels"], -+ removeCustomLabelFromSelfHostedRunnerForEnterprise: ["DELETE /enterprises/{enterprise}/actions/runners/{runner_id}/labels/{name}"], -+ setAllowedActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/selected-actions"], -+ setCustomLabelsForSelfHostedRunnerForEnterprise: ["PUT /enterprises/{enterprise}/actions/runners/{runner_id}/labels"], -+ setGithubActionsPermissionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions"], -+ setSelectedOrganizationsEnabledGithubActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/organizations"] -+ }, -+ gists: { -+ checkIsStarred: ["GET /gists/{gist_id}/star"], -+ create: ["POST /gists"], -+ createComment: ["POST /gists/{gist_id}/comments"], -+ delete: ["DELETE /gists/{gist_id}"], -+ deleteComment: ["DELETE /gists/{gist_id}/comments/{comment_id}"], -+ fork: ["POST /gists/{gist_id}/forks"], -+ get: ["GET /gists/{gist_id}"], -+ getComment: ["GET /gists/{gist_id}/comments/{comment_id}"], -+ getRevision: ["GET /gists/{gist_id}/{sha}"], -+ list: ["GET /gists"], -+ listComments: ["GET /gists/{gist_id}/comments"], -+ listCommits: ["GET /gists/{gist_id}/commits"], -+ listForUser: ["GET /users/{username}/gists"], -+ listForks: ["GET /gists/{gist_id}/forks"], -+ listPublic: ["GET /gists/public"], -+ listStarred: ["GET /gists/starred"], -+ star: ["PUT /gists/{gist_id}/star"], -+ unstar: ["DELETE /gists/{gist_id}/star"], -+ update: ["PATCH /gists/{gist_id}"], -+ updateComment: ["PATCH /gists/{gist_id}/comments/{comment_id}"] -+ }, -+ git: { -+ createBlob: ["POST /repos/{owner}/{repo}/git/blobs"], -+ createCommit: ["POST /repos/{owner}/{repo}/git/commits"], -+ createRef: ["POST /repos/{owner}/{repo}/git/refs"], -+ createTag: ["POST /repos/{owner}/{repo}/git/tags"], -+ createTree: ["POST /repos/{owner}/{repo}/git/trees"], -+ deleteRef: ["DELETE /repos/{owner}/{repo}/git/refs/{ref}"], -+ getBlob: ["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"], -+ getCommit: ["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"], -+ getRef: ["GET /repos/{owner}/{repo}/git/ref/{ref}"], -+ getTag: ["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"], -+ getTree: ["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"], -+ listMatchingRefs: ["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"], -+ updateRef: ["PATCH /repos/{owner}/{repo}/git/refs/{ref}"] -+ }, -+ gitignore: { -+ getAllTemplates: ["GET /gitignore/templates"], -+ getTemplate: ["GET /gitignore/templates/{name}"] -+ }, -+ interactions: { -+ getRestrictionsForAuthenticatedUser: ["GET /user/interaction-limits"], -+ getRestrictionsForOrg: ["GET /orgs/{org}/interaction-limits"], -+ getRestrictionsForRepo: ["GET /repos/{owner}/{repo}/interaction-limits"], -+ getRestrictionsForYourPublicRepos: ["GET /user/interaction-limits", {}, { -+ renamed: ["interactions", "getRestrictionsForAuthenticatedUser"] -+ }], -+ removeRestrictionsForAuthenticatedUser: ["DELETE /user/interaction-limits"], -+ removeRestrictionsForOrg: ["DELETE /orgs/{org}/interaction-limits"], -+ removeRestrictionsForRepo: ["DELETE /repos/{owner}/{repo}/interaction-limits"], -+ removeRestrictionsForYourPublicRepos: ["DELETE /user/interaction-limits", {}, { -+ renamed: ["interactions", "removeRestrictionsForAuthenticatedUser"] -+ }], -+ setRestrictionsForAuthenticatedUser: ["PUT /user/interaction-limits"], -+ setRestrictionsForOrg: ["PUT /orgs/{org}/interaction-limits"], -+ setRestrictionsForRepo: ["PUT /repos/{owner}/{repo}/interaction-limits"], -+ setRestrictionsForYourPublicRepos: ["PUT /user/interaction-limits", {}, { -+ renamed: ["interactions", "setRestrictionsForAuthenticatedUser"] -+ }] -+ }, -+ issues: { -+ addAssignees: ["POST /repos/{owner}/{repo}/issues/{issue_number}/assignees"], -+ addLabels: ["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"], -+ checkUserCanBeAssigned: ["GET /repos/{owner}/{repo}/assignees/{assignee}"], -+ create: ["POST /repos/{owner}/{repo}/issues"], -+ createComment: ["POST /repos/{owner}/{repo}/issues/{issue_number}/comments"], -+ createLabel: ["POST /repos/{owner}/{repo}/labels"], -+ createMilestone: ["POST /repos/{owner}/{repo}/milestones"], -+ deleteComment: ["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}"], -+ deleteLabel: ["DELETE /repos/{owner}/{repo}/labels/{name}"], -+ deleteMilestone: ["DELETE /repos/{owner}/{repo}/milestones/{milestone_number}"], -+ get: ["GET /repos/{owner}/{repo}/issues/{issue_number}"], -+ getComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"], -+ getEvent: ["GET /repos/{owner}/{repo}/issues/events/{event_id}"], -+ getLabel: ["GET /repos/{owner}/{repo}/labels/{name}"], -+ getMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}"], -+ list: ["GET /issues"], -+ listAssignees: ["GET /repos/{owner}/{repo}/assignees"], -+ listComments: ["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"], -+ listCommentsForRepo: ["GET /repos/{owner}/{repo}/issues/comments"], -+ listEvents: ["GET /repos/{owner}/{repo}/issues/{issue_number}/events"], -+ listEventsForRepo: ["GET /repos/{owner}/{repo}/issues/events"], -+ listEventsForTimeline: ["GET /repos/{owner}/{repo}/issues/{issue_number}/timeline"], -+ listForAuthenticatedUser: ["GET /user/issues"], -+ listForOrg: ["GET /orgs/{org}/issues"], -+ listForRepo: ["GET /repos/{owner}/{repo}/issues"], -+ listLabelsForMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels"], -+ listLabelsForRepo: ["GET /repos/{owner}/{repo}/labels"], -+ listLabelsOnIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/labels"], -+ listMilestones: ["GET /repos/{owner}/{repo}/milestones"], -+ lock: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"], -+ removeAllLabels: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels"], -+ removeAssignees: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees"], -+ removeLabel: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}"], -+ setLabels: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"], -+ unlock: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"], -+ update: ["PATCH /repos/{owner}/{repo}/issues/{issue_number}"], -+ updateComment: ["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"], -+ updateLabel: ["PATCH /repos/{owner}/{repo}/labels/{name}"], -+ updateMilestone: ["PATCH /repos/{owner}/{repo}/milestones/{milestone_number}"] -+ }, -+ licenses: { -+ get: ["GET /licenses/{license}"], -+ getAllCommonlyUsed: ["GET /licenses"], -+ getForRepo: ["GET /repos/{owner}/{repo}/license"] -+ }, -+ markdown: { -+ render: ["POST /markdown"], -+ renderRaw: ["POST /markdown/raw", { -+ headers: { -+ "content-type": "text/plain; charset=utf-8" -+ } -+ }] -+ }, -+ meta: { -+ get: ["GET /meta"], -+ getOctocat: ["GET /octocat"], -+ getZen: ["GET /zen"], -+ root: ["GET /"] -+ }, -+ migrations: { -+ cancelImport: ["DELETE /repos/{owner}/{repo}/import"], -+ deleteArchiveForAuthenticatedUser: ["DELETE /user/migrations/{migration_id}/archive"], -+ deleteArchiveForOrg: ["DELETE /orgs/{org}/migrations/{migration_id}/archive"], -+ downloadArchiveForOrg: ["GET /orgs/{org}/migrations/{migration_id}/archive"], -+ getArchiveForAuthenticatedUser: ["GET /user/migrations/{migration_id}/archive"], -+ getCommitAuthors: ["GET /repos/{owner}/{repo}/import/authors"], -+ getImportStatus: ["GET /repos/{owner}/{repo}/import"], -+ getLargeFiles: ["GET /repos/{owner}/{repo}/import/large_files"], -+ getStatusForAuthenticatedUser: ["GET /user/migrations/{migration_id}"], -+ getStatusForOrg: ["GET /orgs/{org}/migrations/{migration_id}"], -+ listForAuthenticatedUser: ["GET /user/migrations"], -+ listForOrg: ["GET /orgs/{org}/migrations"], -+ listReposForAuthenticatedUser: ["GET /user/migrations/{migration_id}/repositories"], -+ listReposForOrg: ["GET /orgs/{org}/migrations/{migration_id}/repositories"], -+ listReposForUser: ["GET /user/migrations/{migration_id}/repositories", {}, { -+ renamed: ["migrations", "listReposForAuthenticatedUser"] -+ }], -+ mapCommitAuthor: ["PATCH /repos/{owner}/{repo}/import/authors/{author_id}"], -+ setLfsPreference: ["PATCH /repos/{owner}/{repo}/import/lfs"], -+ startForAuthenticatedUser: ["POST /user/migrations"], -+ startForOrg: ["POST /orgs/{org}/migrations"], -+ startImport: ["PUT /repos/{owner}/{repo}/import"], -+ unlockRepoForAuthenticatedUser: ["DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock"], -+ unlockRepoForOrg: ["DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock"], -+ updateImport: ["PATCH /repos/{owner}/{repo}/import"] -+ }, -+ orgs: { -+ blockUser: ["PUT /orgs/{org}/blocks/{username}"], -+ cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"], -+ checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"], -+ checkMembershipForUser: ["GET /orgs/{org}/members/{username}"], -+ checkPublicMembershipForUser: ["GET /orgs/{org}/public_members/{username}"], -+ convertMemberToOutsideCollaborator: ["PUT /orgs/{org}/outside_collaborators/{username}"], -+ createInvitation: ["POST /orgs/{org}/invitations"], -+ createWebhook: ["POST /orgs/{org}/hooks"], -+ deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"], -+ get: ["GET /orgs/{org}"], -+ getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"], -+ getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"], -+ getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"], -+ getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"], -+ getWebhookDelivery: ["GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}"], -+ list: ["GET /organizations"], -+ listAppInstallations: ["GET /orgs/{org}/installations"], -+ listBlockedUsers: ["GET /orgs/{org}/blocks"], -+ listCustomRoles: ["GET /organizations/{organization_id}/custom_roles"], -+ listFailedInvitations: ["GET /orgs/{org}/failed_invitations"], -+ listForAuthenticatedUser: ["GET /user/orgs"], -+ listForUser: ["GET /users/{username}/orgs"], -+ listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"], -+ listMembers: ["GET /orgs/{org}/members"], -+ listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"], -+ listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"], -+ listPendingInvitations: ["GET /orgs/{org}/invitations"], -+ listPublicMembers: ["GET /orgs/{org}/public_members"], -+ listWebhookDeliveries: ["GET /orgs/{org}/hooks/{hook_id}/deliveries"], -+ listWebhooks: ["GET /orgs/{org}/hooks"], -+ pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"], -+ redeliverWebhookDelivery: ["POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"], -+ removeMember: ["DELETE /orgs/{org}/members/{username}"], -+ removeMembershipForUser: ["DELETE /orgs/{org}/memberships/{username}"], -+ removeOutsideCollaborator: ["DELETE /orgs/{org}/outside_collaborators/{username}"], -+ removePublicMembershipForAuthenticatedUser: ["DELETE /orgs/{org}/public_members/{username}"], -+ setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"], -+ setPublicMembershipForAuthenticatedUser: ["PUT /orgs/{org}/public_members/{username}"], -+ unblockUser: ["DELETE /orgs/{org}/blocks/{username}"], -+ update: ["PATCH /orgs/{org}"], -+ updateMembershipForAuthenticatedUser: ["PATCH /user/memberships/orgs/{org}"], -+ updateWebhook: ["PATCH /orgs/{org}/hooks/{hook_id}"], -+ updateWebhookConfigForOrg: ["PATCH /orgs/{org}/hooks/{hook_id}/config"] -+ }, -+ packages: { -+ deletePackageForAuthenticatedUser: ["DELETE /user/packages/{package_type}/{package_name}"], -+ deletePackageForOrg: ["DELETE /orgs/{org}/packages/{package_type}/{package_name}"], -+ deletePackageForUser: ["DELETE /users/{username}/packages/{package_type}/{package_name}"], -+ deletePackageVersionForAuthenticatedUser: ["DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}"], -+ deletePackageVersionForOrg: ["DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"], -+ deletePackageVersionForUser: ["DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"], -+ getAllPackageVersionsForAPackageOwnedByAnOrg: ["GET /orgs/{org}/packages/{package_type}/{package_name}/versions", {}, { -+ renamed: ["packages", "getAllPackageVersionsForPackageOwnedByOrg"] -+ }], -+ getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}/versions", {}, { -+ renamed: ["packages", "getAllPackageVersionsForPackageOwnedByAuthenticatedUser"] -+ }], -+ getAllPackageVersionsForPackageOwnedByAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}/versions"], -+ getAllPackageVersionsForPackageOwnedByOrg: ["GET /orgs/{org}/packages/{package_type}/{package_name}/versions"], -+ getAllPackageVersionsForPackageOwnedByUser: ["GET /users/{username}/packages/{package_type}/{package_name}/versions"], -+ getPackageForAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}"], -+ getPackageForOrganization: ["GET /orgs/{org}/packages/{package_type}/{package_name}"], -+ getPackageForUser: ["GET /users/{username}/packages/{package_type}/{package_name}"], -+ getPackageVersionForAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}"], -+ getPackageVersionForOrganization: ["GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"], -+ getPackageVersionForUser: ["GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"], -+ listPackagesForAuthenticatedUser: ["GET /user/packages"], -+ listPackagesForOrganization: ["GET /orgs/{org}/packages"], -+ listPackagesForUser: ["GET /users/{username}/packages"], -+ restorePackageForAuthenticatedUser: ["POST /user/packages/{package_type}/{package_name}/restore{?token}"], -+ restorePackageForOrg: ["POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}"], -+ restorePackageForUser: ["POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}"], -+ restorePackageVersionForAuthenticatedUser: ["POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"], -+ restorePackageVersionForOrg: ["POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"], -+ restorePackageVersionForUser: ["POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"] -+ }, -+ projects: { -+ addCollaborator: ["PUT /projects/{project_id}/collaborators/{username}"], -+ createCard: ["POST /projects/columns/{column_id}/cards"], -+ createColumn: ["POST /projects/{project_id}/columns"], -+ createForAuthenticatedUser: ["POST /user/projects"], -+ createForOrg: ["POST /orgs/{org}/projects"], -+ createForRepo: ["POST /repos/{owner}/{repo}/projects"], -+ delete: ["DELETE /projects/{project_id}"], -+ deleteCard: ["DELETE /projects/columns/cards/{card_id}"], -+ deleteColumn: ["DELETE /projects/columns/{column_id}"], -+ get: ["GET /projects/{project_id}"], -+ getCard: ["GET /projects/columns/cards/{card_id}"], -+ getColumn: ["GET /projects/columns/{column_id}"], -+ getPermissionForUser: ["GET /projects/{project_id}/collaborators/{username}/permission"], -+ listCards: ["GET /projects/columns/{column_id}/cards"], -+ listCollaborators: ["GET /projects/{project_id}/collaborators"], -+ listColumns: ["GET /projects/{project_id}/columns"], -+ listForOrg: ["GET /orgs/{org}/projects"], -+ listForRepo: ["GET /repos/{owner}/{repo}/projects"], -+ listForUser: ["GET /users/{username}/projects"], -+ moveCard: ["POST /projects/columns/cards/{card_id}/moves"], -+ moveColumn: ["POST /projects/columns/{column_id}/moves"], -+ removeCollaborator: ["DELETE /projects/{project_id}/collaborators/{username}"], -+ update: ["PATCH /projects/{project_id}"], -+ updateCard: ["PATCH /projects/columns/cards/{card_id}"], -+ updateColumn: ["PATCH /projects/columns/{column_id}"] -+ }, -+ pulls: { -+ checkIfMerged: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"], -+ create: ["POST /repos/{owner}/{repo}/pulls"], -+ createReplyForReviewComment: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies"], -+ createReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"], -+ createReviewComment: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments"], -+ deletePendingReview: ["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"], -+ deleteReviewComment: ["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}"], -+ dismissReview: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals"], -+ get: ["GET /repos/{owner}/{repo}/pulls/{pull_number}"], -+ getReview: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"], -+ getReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"], -+ list: ["GET /repos/{owner}/{repo}/pulls"], -+ listCommentsForReview: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments"], -+ listCommits: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"], -+ listFiles: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"], -+ listRequestedReviewers: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"], -+ listReviewComments: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/comments"], -+ listReviewCommentsForRepo: ["GET /repos/{owner}/{repo}/pulls/comments"], -+ listReviews: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"], -+ merge: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"], -+ removeRequestedReviewers: ["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"], -+ requestReviewers: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"], -+ submitReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events"], -+ update: ["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"], -+ updateBranch: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch"], -+ updateReview: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"], -+ updateReviewComment: ["PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}"] -+ }, -+ rateLimit: { -+ get: ["GET /rate_limit"] -+ }, -+ reactions: { -+ createForCommitComment: ["POST /repos/{owner}/{repo}/comments/{comment_id}/reactions"], -+ createForIssue: ["POST /repos/{owner}/{repo}/issues/{issue_number}/reactions"], -+ createForIssueComment: ["POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"], -+ createForPullRequestReviewComment: ["POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"], -+ createForRelease: ["POST /repos/{owner}/{repo}/releases/{release_id}/reactions"], -+ createForTeamDiscussionCommentInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"], -+ createForTeamDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"], -+ deleteForCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}"], -+ deleteForIssue: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}"], -+ deleteForIssueComment: ["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}"], -+ deleteForPullRequestComment: ["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}"], -+ deleteForRelease: ["DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}"], -+ deleteForTeamDiscussion: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}"], -+ deleteForTeamDiscussionComment: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}"], -+ listForCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}/reactions"], -+ listForIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions"], -+ listForIssueComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"], -+ listForPullRequestReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"], -+ listForRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}/reactions"], -+ listForTeamDiscussionCommentInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"], -+ listForTeamDiscussionInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"] -+ }, -+ repos: { -+ acceptInvitation: ["PATCH /user/repository_invitations/{invitation_id}", {}, { -+ renamed: ["repos", "acceptInvitationForAuthenticatedUser"] -+ }], -+ acceptInvitationForAuthenticatedUser: ["PATCH /user/repository_invitations/{invitation_id}"], -+ addAppAccessRestrictions: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", {}, { -+ mapToData: "apps" -+ }], -+ addCollaborator: ["PUT /repos/{owner}/{repo}/collaborators/{username}"], -+ addStatusCheckContexts: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", {}, { -+ mapToData: "contexts" -+ }], -+ addTeamAccessRestrictions: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", {}, { -+ mapToData: "teams" -+ }], -+ addUserAccessRestrictions: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", {}, { -+ mapToData: "users" -+ }], -+ checkCollaborator: ["GET /repos/{owner}/{repo}/collaborators/{username}"], -+ checkVulnerabilityAlerts: ["GET /repos/{owner}/{repo}/vulnerability-alerts"], -+ codeownersErrors: ["GET /repos/{owner}/{repo}/codeowners/errors"], -+ compareCommits: ["GET /repos/{owner}/{repo}/compare/{base}...{head}"], -+ compareCommitsWithBasehead: ["GET /repos/{owner}/{repo}/compare/{basehead}"], -+ createAutolink: ["POST /repos/{owner}/{repo}/autolinks"], -+ createCommitComment: ["POST /repos/{owner}/{repo}/commits/{commit_sha}/comments"], -+ createCommitSignatureProtection: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"], -+ createCommitStatus: ["POST /repos/{owner}/{repo}/statuses/{sha}"], -+ createDeployKey: ["POST /repos/{owner}/{repo}/keys"], -+ createDeployment: ["POST /repos/{owner}/{repo}/deployments"], -+ createDeploymentStatus: ["POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"], -+ createDispatchEvent: ["POST /repos/{owner}/{repo}/dispatches"], -+ createForAuthenticatedUser: ["POST /user/repos"], -+ createFork: ["POST /repos/{owner}/{repo}/forks"], -+ createInOrg: ["POST /orgs/{org}/repos"], -+ createOrUpdateEnvironment: ["PUT /repos/{owner}/{repo}/environments/{environment_name}"], -+ createOrUpdateFileContents: ["PUT /repos/{owner}/{repo}/contents/{path}"], -+ createPagesSite: ["POST /repos/{owner}/{repo}/pages"], -+ createRelease: ["POST /repos/{owner}/{repo}/releases"], -+ createTagProtection: ["POST /repos/{owner}/{repo}/tags/protection"], -+ createUsingTemplate: ["POST /repos/{template_owner}/{template_repo}/generate"], -+ createWebhook: ["POST /repos/{owner}/{repo}/hooks"], -+ declineInvitation: ["DELETE /user/repository_invitations/{invitation_id}", {}, { -+ renamed: ["repos", "declineInvitationForAuthenticatedUser"] -+ }], -+ declineInvitationForAuthenticatedUser: ["DELETE /user/repository_invitations/{invitation_id}"], -+ delete: ["DELETE /repos/{owner}/{repo}"], -+ deleteAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"], -+ deleteAdminBranchProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"], -+ deleteAnEnvironment: ["DELETE /repos/{owner}/{repo}/environments/{environment_name}"], -+ deleteAutolink: ["DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}"], -+ deleteBranchProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection"], -+ deleteCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}"], -+ deleteCommitSignatureProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"], -+ deleteDeployKey: ["DELETE /repos/{owner}/{repo}/keys/{key_id}"], -+ deleteDeployment: ["DELETE /repos/{owner}/{repo}/deployments/{deployment_id}"], -+ deleteFile: ["DELETE /repos/{owner}/{repo}/contents/{path}"], -+ deleteInvitation: ["DELETE /repos/{owner}/{repo}/invitations/{invitation_id}"], -+ deletePagesSite: ["DELETE /repos/{owner}/{repo}/pages"], -+ deletePullRequestReviewProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"], -+ deleteRelease: ["DELETE /repos/{owner}/{repo}/releases/{release_id}"], -+ deleteReleaseAsset: ["DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}"], -+ deleteTagProtection: ["DELETE /repos/{owner}/{repo}/tags/protection/{tag_protection_id}"], -+ deleteWebhook: ["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"], -+ disableAutomatedSecurityFixes: ["DELETE /repos/{owner}/{repo}/automated-security-fixes"], -+ disableLfsForRepo: ["DELETE /repos/{owner}/{repo}/lfs"], -+ disableVulnerabilityAlerts: ["DELETE /repos/{owner}/{repo}/vulnerability-alerts"], -+ downloadArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}", {}, { -+ renamed: ["repos", "downloadZipballArchive"] -+ }], -+ downloadTarballArchive: ["GET /repos/{owner}/{repo}/tarball/{ref}"], -+ downloadZipballArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}"], -+ enableAutomatedSecurityFixes: ["PUT /repos/{owner}/{repo}/automated-security-fixes"], -+ enableLfsForRepo: ["PUT /repos/{owner}/{repo}/lfs"], -+ enableVulnerabilityAlerts: ["PUT /repos/{owner}/{repo}/vulnerability-alerts"], -+ generateReleaseNotes: ["POST /repos/{owner}/{repo}/releases/generate-notes"], -+ get: ["GET /repos/{owner}/{repo}"], -+ getAccessRestrictions: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"], -+ getAdminBranchProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"], -+ getAllEnvironments: ["GET /repos/{owner}/{repo}/environments"], -+ getAllStatusCheckContexts: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts"], -+ getAllTopics: ["GET /repos/{owner}/{repo}/topics"], -+ getAppsWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps"], -+ getAutolink: ["GET /repos/{owner}/{repo}/autolinks/{autolink_id}"], -+ getBranch: ["GET /repos/{owner}/{repo}/branches/{branch}"], -+ getBranchProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection"], -+ getClones: ["GET /repos/{owner}/{repo}/traffic/clones"], -+ getCodeFrequencyStats: ["GET /repos/{owner}/{repo}/stats/code_frequency"], -+ getCollaboratorPermissionLevel: ["GET /repos/{owner}/{repo}/collaborators/{username}/permission"], -+ getCombinedStatusForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/status"], -+ getCommit: ["GET /repos/{owner}/{repo}/commits/{ref}"], -+ getCommitActivityStats: ["GET /repos/{owner}/{repo}/stats/commit_activity"], -+ getCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}"], -+ getCommitSignatureProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"], -+ getCommunityProfileMetrics: ["GET /repos/{owner}/{repo}/community/profile"], -+ getContent: ["GET /repos/{owner}/{repo}/contents/{path}"], -+ getContributorsStats: ["GET /repos/{owner}/{repo}/stats/contributors"], -+ getDeployKey: ["GET /repos/{owner}/{repo}/keys/{key_id}"], -+ getDeployment: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}"], -+ getDeploymentStatus: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}"], -+ getEnvironment: ["GET /repos/{owner}/{repo}/environments/{environment_name}"], -+ getLatestPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/latest"], -+ getLatestRelease: ["GET /repos/{owner}/{repo}/releases/latest"], -+ getPages: ["GET /repos/{owner}/{repo}/pages"], -+ getPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/{build_id}"], -+ getPagesHealthCheck: ["GET /repos/{owner}/{repo}/pages/health"], -+ getParticipationStats: ["GET /repos/{owner}/{repo}/stats/participation"], -+ getPullRequestReviewProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"], -+ getPunchCardStats: ["GET /repos/{owner}/{repo}/stats/punch_card"], -+ getReadme: ["GET /repos/{owner}/{repo}/readme"], -+ getReadmeInDirectory: ["GET /repos/{owner}/{repo}/readme/{dir}"], -+ getRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}"], -+ getReleaseAsset: ["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"], -+ getReleaseByTag: ["GET /repos/{owner}/{repo}/releases/tags/{tag}"], -+ getStatusChecksProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"], -+ getTeamsWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams"], -+ getTopPaths: ["GET /repos/{owner}/{repo}/traffic/popular/paths"], -+ getTopReferrers: ["GET /repos/{owner}/{repo}/traffic/popular/referrers"], -+ getUsersWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users"], -+ getViews: ["GET /repos/{owner}/{repo}/traffic/views"], -+ getWebhook: ["GET /repos/{owner}/{repo}/hooks/{hook_id}"], -+ getWebhookConfigForRepo: ["GET /repos/{owner}/{repo}/hooks/{hook_id}/config"], -+ getWebhookDelivery: ["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}"], -+ listAutolinks: ["GET /repos/{owner}/{repo}/autolinks"], -+ listBranches: ["GET /repos/{owner}/{repo}/branches"], -+ listBranchesForHeadCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head"], -+ listCollaborators: ["GET /repos/{owner}/{repo}/collaborators"], -+ listCommentsForCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/comments"], -+ listCommitCommentsForRepo: ["GET /repos/{owner}/{repo}/comments"], -+ listCommitStatusesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/statuses"], -+ listCommits: ["GET /repos/{owner}/{repo}/commits"], -+ listContributors: ["GET /repos/{owner}/{repo}/contributors"], -+ listDeployKeys: ["GET /repos/{owner}/{repo}/keys"], -+ listDeploymentStatuses: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"], -+ listDeployments: ["GET /repos/{owner}/{repo}/deployments"], -+ listForAuthenticatedUser: ["GET /user/repos"], -+ listForOrg: ["GET /orgs/{org}/repos"], -+ listForUser: ["GET /users/{username}/repos"], -+ listForks: ["GET /repos/{owner}/{repo}/forks"], -+ listInvitations: ["GET /repos/{owner}/{repo}/invitations"], -+ listInvitationsForAuthenticatedUser: ["GET /user/repository_invitations"], -+ listLanguages: ["GET /repos/{owner}/{repo}/languages"], -+ listPagesBuilds: ["GET /repos/{owner}/{repo}/pages/builds"], -+ listPublic: ["GET /repositories"], -+ listPullRequestsAssociatedWithCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls"], -+ listReleaseAssets: ["GET /repos/{owner}/{repo}/releases/{release_id}/assets"], -+ listReleases: ["GET /repos/{owner}/{repo}/releases"], -+ listTagProtection: ["GET /repos/{owner}/{repo}/tags/protection"], -+ listTags: ["GET /repos/{owner}/{repo}/tags"], -+ listTeams: ["GET /repos/{owner}/{repo}/teams"], -+ listWebhookDeliveries: ["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries"], -+ listWebhooks: ["GET /repos/{owner}/{repo}/hooks"], -+ merge: ["POST /repos/{owner}/{repo}/merges"], -+ mergeUpstream: ["POST /repos/{owner}/{repo}/merge-upstream"], -+ pingWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"], -+ redeliverWebhookDelivery: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"], -+ removeAppAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", {}, { -+ mapToData: "apps" -+ }], -+ removeCollaborator: ["DELETE /repos/{owner}/{repo}/collaborators/{username}"], -+ removeStatusCheckContexts: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", {}, { -+ mapToData: "contexts" -+ }], -+ removeStatusCheckProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"], -+ removeTeamAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", {}, { -+ mapToData: "teams" -+ }], -+ removeUserAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", {}, { -+ mapToData: "users" -+ }], -+ renameBranch: ["POST /repos/{owner}/{repo}/branches/{branch}/rename"], -+ replaceAllTopics: ["PUT /repos/{owner}/{repo}/topics"], -+ requestPagesBuild: ["POST /repos/{owner}/{repo}/pages/builds"], -+ setAdminBranchProtection: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"], -+ setAppAccessRestrictions: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", {}, { -+ mapToData: "apps" -+ }], -+ setStatusCheckContexts: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", {}, { -+ mapToData: "contexts" -+ }], -+ setTeamAccessRestrictions: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", {}, { -+ mapToData: "teams" -+ }], -+ setUserAccessRestrictions: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", {}, { -+ mapToData: "users" -+ }], -+ testPushWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"], -+ transfer: ["POST /repos/{owner}/{repo}/transfer"], -+ update: ["PATCH /repos/{owner}/{repo}"], -+ updateBranchProtection: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection"], -+ updateCommitComment: ["PATCH /repos/{owner}/{repo}/comments/{comment_id}"], -+ updateInformationAboutPagesSite: ["PUT /repos/{owner}/{repo}/pages"], -+ updateInvitation: ["PATCH /repos/{owner}/{repo}/invitations/{invitation_id}"], -+ updatePullRequestReviewProtection: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"], -+ updateRelease: ["PATCH /repos/{owner}/{repo}/releases/{release_id}"], -+ updateReleaseAsset: ["PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}"], -+ updateStatusCheckPotection: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks", {}, { -+ renamed: ["repos", "updateStatusCheckProtection"] -+ }], -+ updateStatusCheckProtection: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"], -+ updateWebhook: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"], -+ updateWebhookConfigForRepo: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config"], -+ uploadReleaseAsset: ["POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}", { -+ baseUrl: "https://uploads.github.com" -+ }] -+ }, -+ search: { -+ code: ["GET /search/code"], -+ commits: ["GET /search/commits"], -+ issuesAndPullRequests: ["GET /search/issues"], -+ labels: ["GET /search/labels"], -+ repos: ["GET /search/repositories"], -+ topics: ["GET /search/topics"], -+ users: ["GET /search/users"] -+ }, -+ secretScanning: { -+ getAlert: ["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"], -+ listAlertsForEnterprise: ["GET /enterprises/{enterprise}/secret-scanning/alerts"], -+ listAlertsForOrg: ["GET /orgs/{org}/secret-scanning/alerts"], -+ listAlertsForRepo: ["GET /repos/{owner}/{repo}/secret-scanning/alerts"], -+ listLocationsForAlert: ["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations"], -+ updateAlert: ["PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"] -+ }, -+ teams: { -+ addOrUpdateMembershipForUserInOrg: ["PUT /orgs/{org}/teams/{team_slug}/memberships/{username}"], -+ addOrUpdateProjectPermissionsInOrg: ["PUT /orgs/{org}/teams/{team_slug}/projects/{project_id}"], -+ addOrUpdateRepoPermissionsInOrg: ["PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"], -+ checkPermissionsForProjectInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects/{project_id}"], -+ checkPermissionsForRepoInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"], -+ create: ["POST /orgs/{org}/teams"], -+ createDiscussionCommentInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"], -+ createDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions"], -+ deleteDiscussionCommentInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"], -+ deleteDiscussionInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"], -+ deleteInOrg: ["DELETE /orgs/{org}/teams/{team_slug}"], -+ getByName: ["GET /orgs/{org}/teams/{team_slug}"], -+ getDiscussionCommentInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"], -+ getDiscussionInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"], -+ getMembershipForUserInOrg: ["GET /orgs/{org}/teams/{team_slug}/memberships/{username}"], -+ list: ["GET /orgs/{org}/teams"], -+ listChildInOrg: ["GET /orgs/{org}/teams/{team_slug}/teams"], -+ listDiscussionCommentsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"], -+ listDiscussionsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions"], -+ listForAuthenticatedUser: ["GET /user/teams"], -+ listMembersInOrg: ["GET /orgs/{org}/teams/{team_slug}/members"], -+ listPendingInvitationsInOrg: ["GET /orgs/{org}/teams/{team_slug}/invitations"], -+ listProjectsInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects"], -+ listReposInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos"], -+ removeMembershipForUserInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}"], -+ removeProjectInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/projects/{project_id}"], -+ removeRepoInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"], -+ updateDiscussionCommentInOrg: ["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"], -+ updateDiscussionInOrg: ["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"], -+ updateInOrg: ["PATCH /orgs/{org}/teams/{team_slug}"] -+ }, -+ users: { -+ addEmailForAuthenticated: ["POST /user/emails", {}, { -+ renamed: ["users", "addEmailForAuthenticatedUser"] -+ }], -+ addEmailForAuthenticatedUser: ["POST /user/emails"], -+ block: ["PUT /user/blocks/{username}"], -+ checkBlocked: ["GET /user/blocks/{username}"], -+ checkFollowingForUser: ["GET /users/{username}/following/{target_user}"], -+ checkPersonIsFollowedByAuthenticated: ["GET /user/following/{username}"], -+ createGpgKeyForAuthenticated: ["POST /user/gpg_keys", {}, { -+ renamed: ["users", "createGpgKeyForAuthenticatedUser"] -+ }], -+ createGpgKeyForAuthenticatedUser: ["POST /user/gpg_keys"], -+ createPublicSshKeyForAuthenticated: ["POST /user/keys", {}, { -+ renamed: ["users", "createPublicSshKeyForAuthenticatedUser"] -+ }], -+ createPublicSshKeyForAuthenticatedUser: ["POST /user/keys"], -+ deleteEmailForAuthenticated: ["DELETE /user/emails", {}, { -+ renamed: ["users", "deleteEmailForAuthenticatedUser"] -+ }], -+ deleteEmailForAuthenticatedUser: ["DELETE /user/emails"], -+ deleteGpgKeyForAuthenticated: ["DELETE /user/gpg_keys/{gpg_key_id}", {}, { -+ renamed: ["users", "deleteGpgKeyForAuthenticatedUser"] -+ }], -+ deleteGpgKeyForAuthenticatedUser: ["DELETE /user/gpg_keys/{gpg_key_id}"], -+ deletePublicSshKeyForAuthenticated: ["DELETE /user/keys/{key_id}", {}, { -+ renamed: ["users", "deletePublicSshKeyForAuthenticatedUser"] -+ }], -+ deletePublicSshKeyForAuthenticatedUser: ["DELETE /user/keys/{key_id}"], -+ follow: ["PUT /user/following/{username}"], -+ getAuthenticated: ["GET /user"], -+ getByUsername: ["GET /users/{username}"], -+ getContextForUser: ["GET /users/{username}/hovercard"], -+ getGpgKeyForAuthenticated: ["GET /user/gpg_keys/{gpg_key_id}", {}, { -+ renamed: ["users", "getGpgKeyForAuthenticatedUser"] -+ }], -+ getGpgKeyForAuthenticatedUser: ["GET /user/gpg_keys/{gpg_key_id}"], -+ getPublicSshKeyForAuthenticated: ["GET /user/keys/{key_id}", {}, { -+ renamed: ["users", "getPublicSshKeyForAuthenticatedUser"] -+ }], -+ getPublicSshKeyForAuthenticatedUser: ["GET /user/keys/{key_id}"], -+ list: ["GET /users"], -+ listBlockedByAuthenticated: ["GET /user/blocks", {}, { -+ renamed: ["users", "listBlockedByAuthenticatedUser"] -+ }], -+ listBlockedByAuthenticatedUser: ["GET /user/blocks"], -+ listEmailsForAuthenticated: ["GET /user/emails", {}, { -+ renamed: ["users", "listEmailsForAuthenticatedUser"] -+ }], -+ listEmailsForAuthenticatedUser: ["GET /user/emails"], -+ listFollowedByAuthenticated: ["GET /user/following", {}, { -+ renamed: ["users", "listFollowedByAuthenticatedUser"] -+ }], -+ listFollowedByAuthenticatedUser: ["GET /user/following"], -+ listFollowersForAuthenticatedUser: ["GET /user/followers"], -+ listFollowersForUser: ["GET /users/{username}/followers"], -+ listFollowingForUser: ["GET /users/{username}/following"], -+ listGpgKeysForAuthenticated: ["GET /user/gpg_keys", {}, { -+ renamed: ["users", "listGpgKeysForAuthenticatedUser"] -+ }], -+ listGpgKeysForAuthenticatedUser: ["GET /user/gpg_keys"], -+ listGpgKeysForUser: ["GET /users/{username}/gpg_keys"], -+ listPublicEmailsForAuthenticated: ["GET /user/public_emails", {}, { -+ renamed: ["users", "listPublicEmailsForAuthenticatedUser"] -+ }], -+ listPublicEmailsForAuthenticatedUser: ["GET /user/public_emails"], -+ listPublicKeysForUser: ["GET /users/{username}/keys"], -+ listPublicSshKeysForAuthenticated: ["GET /user/keys", {}, { -+ renamed: ["users", "listPublicSshKeysForAuthenticatedUser"] -+ }], -+ listPublicSshKeysForAuthenticatedUser: ["GET /user/keys"], -+ setPrimaryEmailVisibilityForAuthenticated: ["PATCH /user/email/visibility", {}, { -+ renamed: ["users", "setPrimaryEmailVisibilityForAuthenticatedUser"] -+ }], -+ setPrimaryEmailVisibilityForAuthenticatedUser: ["PATCH /user/email/visibility"], -+ unblock: ["DELETE /user/blocks/{username}"], -+ unfollow: ["DELETE /user/following/{username}"], -+ updateAuthenticated: ["PATCH /user"] -+ } -+}; -+ -+const VERSION = "5.16.2"; -+ -+function endpointsToMethods(octokit, endpointsMap) { -+ const newMethods = {}; -+ -+ for (const [scope, endpoints] of Object.entries(endpointsMap)) { -+ for (const [methodName, endpoint] of Object.entries(endpoints)) { -+ const [route, defaults, decorations] = endpoint; -+ const [method, url] = route.split(/ /); -+ const endpointDefaults = Object.assign({ -+ method, -+ url -+ }, defaults); -+ -+ if (!newMethods[scope]) { -+ newMethods[scope] = {}; -+ } -+ -+ const scopeMethods = newMethods[scope]; -+ -+ if (decorations) { -+ scopeMethods[methodName] = decorate(octokit, scope, methodName, endpointDefaults, decorations); -+ continue; -+ } -+ -+ scopeMethods[methodName] = octokit.request.defaults(endpointDefaults); -+ } -+ } -+ -+ return newMethods; -+} -+ -+function decorate(octokit, scope, methodName, defaults, decorations) { -+ const requestWithDefaults = octokit.request.defaults(defaults); -+ /* istanbul ignore next */ -+ -+ function withDecorations(...args) { -+ // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488 -+ let options = requestWithDefaults.endpoint.merge(...args); // There are currently no other decorations than `.mapToData` -+ -+ if (decorations.mapToData) { -+ options = Object.assign({}, options, { -+ data: options[decorations.mapToData], -+ [decorations.mapToData]: undefined -+ }); -+ return requestWithDefaults(options); -+ } -+ -+ if (decorations.renamed) { -+ const [newScope, newMethodName] = decorations.renamed; -+ octokit.log.warn(`octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()`); -+ } -+ -+ if (decorations.deprecated) { -+ octokit.log.warn(decorations.deprecated); -+ } -+ -+ if (decorations.renamedParameters) { -+ // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488 -+ const options = requestWithDefaults.endpoint.merge(...args); -+ -+ for (const [name, alias] of Object.entries(decorations.renamedParameters)) { -+ if (name in options) { -+ octokit.log.warn(`"${name}" parameter is deprecated for "octokit.${scope}.${methodName}()". Use "${alias}" instead`); -+ -+ if (!(alias in options)) { -+ options[alias] = options[name]; -+ } -+ -+ delete options[name]; -+ } -+ } -+ -+ return requestWithDefaults(options); -+ } // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488 -+ -+ -+ return requestWithDefaults(...args); -+ } -+ -+ return Object.assign(withDecorations, requestWithDefaults); -+} -+ -+function restEndpointMethods(octokit) { -+ const api = endpointsToMethods(octokit, Endpoints); -+ return { -+ rest: api -+ }; -+} -+restEndpointMethods.VERSION = VERSION; -+function legacyRestEndpointMethods(octokit) { -+ const api = endpointsToMethods(octokit, Endpoints); -+ return _objectSpread2(_objectSpread2({}, api), {}, { -+ rest: api -+ }); -+} -+legacyRestEndpointMethods.VERSION = VERSION; -+ -+exports.legacyRestEndpointMethods = legacyRestEndpointMethods; -+exports.restEndpointMethods = restEndpointMethods; -+//# sourceMappingURL=index.js.map -+ -+ -+/***/ }), -+ -+/***/ 3281: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+ -+function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } -+ -+var deprecation = __nccwpck_require__(5820); -+var once = _interopDefault(__nccwpck_require__(3069)); -+ -+const logOnceCode = once(deprecation => console.warn(deprecation)); -+const logOnceHeaders = once(deprecation => console.warn(deprecation)); -+/** -+ * Error with extra properties to help with debugging -+ */ -+ -+class RequestError extends Error { -+ constructor(message, statusCode, options) { -+ super(message); // Maintains proper stack trace (only available on V8) -+ -+ /* istanbul ignore next */ -+ -+ if (Error.captureStackTrace) { -+ Error.captureStackTrace(this, this.constructor); -+ } -+ -+ this.name = "HttpError"; -+ this.status = statusCode; -+ let headers; -+ -+ if ("headers" in options && typeof options.headers !== "undefined") { -+ headers = options.headers; -+ } -+ -+ if ("response" in options) { -+ this.response = options.response; -+ headers = options.response.headers; -+ } // redact request credentials without mutating original request options -+ -+ -+ const requestCopy = Object.assign({}, options.request); -+ -+ if (options.request.headers.authorization) { -+ requestCopy.headers = Object.assign({}, options.request.headers, { -+ authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]") -+ }); -+ } -+ -+ requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit -+ // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications -+ .replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]") // OAuth tokens can be passed as URL query parameters, although it is not recommended -+ // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header -+ .replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); -+ this.request = requestCopy; // deprecations -+ -+ Object.defineProperty(this, "code", { -+ get() { -+ logOnceCode(new deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`.")); -+ return statusCode; -+ } -+ -+ }); -+ Object.defineProperty(this, "headers", { -+ get() { -+ logOnceHeaders(new deprecation.Deprecation("[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`.")); -+ return headers || {}; -+ } -+ -+ }); -+ } -+ -+} -+ -+exports.RequestError = RequestError; -+//# sourceMappingURL=index.js.map -+ -+ -+/***/ }), -+ -+/***/ 7639: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+ -+function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } -+ -+var endpoint = __nccwpck_require__(3695); -+var universalUserAgent = __nccwpck_require__(9074); -+var isPlainObject = __nccwpck_require__(7223); -+var nodeFetch = _interopDefault(__nccwpck_require__(4353)); -+var requestError = __nccwpck_require__(3281); -+ -+const VERSION = "5.6.3"; -+ -+function getBufferResponse(response) { -+ return response.arrayBuffer(); -+} -+ -+function fetchWrapper(requestOptions) { -+ const log = requestOptions.request && requestOptions.request.log ? requestOptions.request.log : console; -+ -+ if (isPlainObject.isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) { -+ requestOptions.body = JSON.stringify(requestOptions.body); -+ } -+ -+ let headers = {}; -+ let status; -+ let url; -+ const fetch = requestOptions.request && requestOptions.request.fetch || nodeFetch; -+ return fetch(requestOptions.url, Object.assign({ -+ method: requestOptions.method, -+ body: requestOptions.body, -+ headers: requestOptions.headers, -+ redirect: requestOptions.redirect -+ }, // `requestOptions.request.agent` type is incompatible -+ // see https://github.com/octokit/types.ts/pull/264 -+ requestOptions.request)).then(async response => { -+ url = response.url; -+ status = response.status; -+ -+ for (const keyAndValue of response.headers) { -+ headers[keyAndValue[0]] = keyAndValue[1]; -+ } -+ -+ if ("deprecation" in headers) { -+ const matches = headers.link && headers.link.match(/<([^>]+)>; rel="deprecation"/); -+ const deprecationLink = matches && matches.pop(); -+ log.warn(`[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}`); -+ } -+ -+ if (status === 204 || status === 205) { -+ return; -+ } // GitHub API returns 200 for HEAD requests -+ -+ -+ if (requestOptions.method === "HEAD") { -+ if (status < 400) { -+ return; -+ } -+ -+ throw new requestError.RequestError(response.statusText, status, { -+ response: { -+ url, -+ status, -+ headers, -+ data: undefined -+ }, -+ request: requestOptions -+ }); -+ } -+ -+ if (status === 304) { -+ throw new requestError.RequestError("Not modified", status, { -+ response: { -+ url, -+ status, -+ headers, -+ data: await getResponseData(response) -+ }, -+ request: requestOptions -+ }); -+ } -+ -+ if (status >= 400) { -+ const data = await getResponseData(response); -+ const error = new requestError.RequestError(toErrorMessage(data), status, { -+ response: { -+ url, -+ status, -+ headers, -+ data -+ }, -+ request: requestOptions -+ }); -+ throw error; -+ } -+ -+ return getResponseData(response); -+ }).then(data => { -+ return { -+ status, -+ url, -+ headers, -+ data -+ }; -+ }).catch(error => { -+ if (error instanceof requestError.RequestError) throw error; -+ throw new requestError.RequestError(error.message, 500, { -+ request: requestOptions -+ }); -+ }); -+} -+ -+async function getResponseData(response) { -+ const contentType = response.headers.get("content-type"); -+ -+ if (/application\/json/.test(contentType)) { -+ return response.json(); -+ } -+ -+ if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { -+ return response.text(); -+ } -+ -+ return getBufferResponse(response); -+} -+ -+function toErrorMessage(data) { -+ if (typeof data === "string") return data; // istanbul ignore else - just in case -+ -+ if ("message" in data) { -+ if (Array.isArray(data.errors)) { -+ return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}`; -+ } -+ -+ return data.message; -+ } // istanbul ignore next - just in case -+ -+ -+ return `Unknown error: ${JSON.stringify(data)}`; -+} -+ -+function withDefaults(oldEndpoint, newDefaults) { -+ const endpoint = oldEndpoint.defaults(newDefaults); -+ -+ const newApi = function (route, parameters) { -+ const endpointOptions = endpoint.merge(route, parameters); -+ -+ if (!endpointOptions.request || !endpointOptions.request.hook) { -+ return fetchWrapper(endpoint.parse(endpointOptions)); -+ } -+ -+ const request = (route, parameters) => { -+ return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters))); -+ }; -+ -+ Object.assign(request, { -+ endpoint, -+ defaults: withDefaults.bind(null, endpoint) -+ }); -+ return endpointOptions.request.hook(request, endpointOptions); -+ }; -+ -+ return Object.assign(newApi, { -+ endpoint, -+ defaults: withDefaults.bind(null, endpoint) -+ }); -+} -+ -+const request = withDefaults(endpoint.endpoint, { -+ headers: { -+ "user-agent": `octokit-request.js/${VERSION} ${universalUserAgent.getUserAgent()}` -+ } -+}); -+ -+exports.request = request; -+//# sourceMappingURL=index.js.map -+ -+ -+/***/ }), -+ -+/***/ 2934: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+var register = __nccwpck_require__(6604); -+var addHook = __nccwpck_require__(1437); -+var removeHook = __nccwpck_require__(6583); -+ -+// bind with array of arguments: https://stackoverflow.com/a/21792913 -+var bind = Function.bind; -+var bindable = bind.bind(bind); -+ -+function bindApi(hook, state, name) { -+ var removeHookRef = bindable(removeHook, null).apply( -+ null, -+ name ? [state, name] : [state] -+ ); -+ hook.api = { remove: removeHookRef }; -+ hook.remove = removeHookRef; -+ ["before", "error", "after", "wrap"].forEach(function (kind) { -+ var args = name ? [state, kind, name] : [state, kind]; -+ hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args); -+ }); -+} -+ -+function HookSingular() { -+ var singularHookName = "h"; -+ var singularHookState = { -+ registry: {}, -+ }; -+ var singularHook = register.bind(null, singularHookState, singularHookName); -+ bindApi(singularHook, singularHookState, singularHookName); -+ return singularHook; -+} -+ -+function HookCollection() { -+ var state = { -+ registry: {}, -+ }; -+ -+ var hook = register.bind(null, state); -+ bindApi(hook, state); -+ -+ return hook; -+} -+ -+var collectionHookDeprecationMessageDisplayed = false; -+function Hook() { -+ if (!collectionHookDeprecationMessageDisplayed) { -+ console.warn( -+ '[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4' -+ ); -+ collectionHookDeprecationMessageDisplayed = true; -+ } -+ return HookCollection(); -+} -+ -+Hook.Singular = HookSingular.bind(); -+Hook.Collection = HookCollection.bind(); -+ -+module.exports = Hook; -+// expose constructors as a named property for TypeScript -+module.exports.Hook = Hook; -+module.exports.Singular = Hook.Singular; -+module.exports.Collection = Hook.Collection; -+ -+ -+/***/ }), -+ -+/***/ 1437: -+/***/ ((module) => { -+ -+module.exports = addHook; -+ -+function addHook(state, kind, name, hook) { -+ var orig = hook; -+ if (!state.registry[name]) { -+ state.registry[name] = []; -+ } -+ -+ if (kind === "before") { -+ hook = function (method, options) { -+ return Promise.resolve() -+ .then(orig.bind(null, options)) -+ .then(method.bind(null, options)); -+ }; -+ } -+ -+ if (kind === "after") { -+ hook = function (method, options) { -+ var result; -+ return Promise.resolve() -+ .then(method.bind(null, options)) -+ .then(function (result_) { -+ result = result_; -+ return orig(result, options); -+ }) -+ .then(function () { -+ return result; -+ }); -+ }; -+ } -+ -+ if (kind === "error") { -+ hook = function (method, options) { -+ return Promise.resolve() -+ .then(method.bind(null, options)) -+ .catch(function (error) { -+ return orig(error, options); -+ }); -+ }; -+ } -+ -+ state.registry[name].push({ -+ hook: hook, -+ orig: orig, -+ }); -+} -+ -+ -+/***/ }), -+ -+/***/ 6604: -+/***/ ((module) => { -+ -+module.exports = register; -+ -+function register(state, name, method, options) { -+ if (typeof method !== "function") { -+ throw new Error("method for before hook must be a function"); -+ } -+ -+ if (!options) { -+ options = {}; -+ } -+ -+ if (Array.isArray(name)) { -+ return name.reverse().reduce(function (callback, name) { -+ return register.bind(null, state, name, callback, options); -+ }, method)(); -+ } -+ -+ return Promise.resolve().then(function () { -+ if (!state.registry[name]) { -+ return method(options); -+ } -+ -+ return state.registry[name].reduce(function (method, registered) { -+ return registered.hook.bind(null, method, options); -+ }, method)(); -+ }); -+} -+ -+ -+/***/ }), -+ -+/***/ 6583: -+/***/ ((module) => { -+ -+module.exports = removeHook; -+ -+function removeHook(state, name, method) { -+ if (!state.registry[name]) { -+ return; -+ } -+ -+ var index = state.registry[name] -+ .map(function (registered) { -+ return registered.orig; -+ }) -+ .indexOf(method); -+ -+ if (index === -1) { -+ return; -+ } -+ -+ state.registry[name].splice(index, 1); -+} -+ -+ -+/***/ }), -+ -+/***/ 5820: -+/***/ ((__unused_webpack_module, exports) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+ -+class Deprecation extends Error { -+ constructor(message) { -+ super(message); // Maintains proper stack trace (only available on V8) -+ -+ /* istanbul ignore next */ -+ -+ if (Error.captureStackTrace) { -+ Error.captureStackTrace(this, this.constructor); -+ } -+ -+ this.name = 'Deprecation'; -+ } -+ -+} -+ -+exports.Deprecation = Deprecation; -+ -+ -+/***/ }), -+ -+/***/ 7223: -+/***/ ((__unused_webpack_module, exports) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+ -+/*! -+ * is-plain-object -+ * -+ * Copyright (c) 2014-2017, Jon Schlinkert. -+ * Released under the MIT License. -+ */ -+ -+function isObject(o) { -+ return Object.prototype.toString.call(o) === '[object Object]'; -+} -+ -+function isPlainObject(o) { -+ var ctor,prot; -+ -+ if (isObject(o) === false) return false; -+ -+ // If has modified constructor -+ ctor = o.constructor; -+ if (ctor === undefined) return true; -+ -+ // If has modified prototype -+ prot = ctor.prototype; -+ if (isObject(prot) === false) return false; -+ -+ // If constructor does not have an Object-specific method -+ if (prot.hasOwnProperty('isPrototypeOf') === false) { -+ return false; -+ } -+ -+ // Most likely a plain Object -+ return true; -+} -+ -+exports.isPlainObject = isPlainObject; -+ -+ -+/***/ }), -+ -+/***/ 4353: -+/***/ ((module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+ -+function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } -+ -+var Stream = _interopDefault(__nccwpck_require__(2781)); -+var http = _interopDefault(__nccwpck_require__(3685)); -+var Url = _interopDefault(__nccwpck_require__(7310)); -+var whatwgUrl = _interopDefault(__nccwpck_require__(8152)); -+var https = _interopDefault(__nccwpck_require__(5687)); -+var zlib = _interopDefault(__nccwpck_require__(9796)); -+ -+// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js -+ -+// fix for "Readable" isn't a named export issue -+const Readable = Stream.Readable; -+ -+const BUFFER = Symbol('buffer'); -+const TYPE = Symbol('type'); -+ -+class Blob { -+ constructor() { -+ this[TYPE] = ''; -+ -+ const blobParts = arguments[0]; -+ const options = arguments[1]; -+ -+ const buffers = []; -+ let size = 0; -+ -+ if (blobParts) { -+ const a = blobParts; -+ const length = Number(a.length); -+ for (let i = 0; i < length; i++) { -+ const element = a[i]; -+ let buffer; -+ if (element instanceof Buffer) { -+ buffer = element; -+ } else if (ArrayBuffer.isView(element)) { -+ buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength); -+ } else if (element instanceof ArrayBuffer) { -+ buffer = Buffer.from(element); -+ } else if (element instanceof Blob) { -+ buffer = element[BUFFER]; -+ } else { -+ buffer = Buffer.from(typeof element === 'string' ? element : String(element)); -+ } -+ size += buffer.length; -+ buffers.push(buffer); -+ } -+ } -+ -+ this[BUFFER] = Buffer.concat(buffers); -+ -+ let type = options && options.type !== undefined && String(options.type).toLowerCase(); -+ if (type && !/[^\u0020-\u007E]/.test(type)) { -+ this[TYPE] = type; -+ } -+ } -+ get size() { -+ return this[BUFFER].length; -+ } -+ get type() { -+ return this[TYPE]; -+ } -+ text() { -+ return Promise.resolve(this[BUFFER].toString()); -+ } -+ arrayBuffer() { -+ const buf = this[BUFFER]; -+ const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); -+ return Promise.resolve(ab); -+ } -+ stream() { -+ const readable = new Readable(); -+ readable._read = function () {}; -+ readable.push(this[BUFFER]); -+ readable.push(null); -+ return readable; -+ } -+ toString() { -+ return '[object Blob]'; -+ } -+ slice() { -+ const size = this.size; -+ -+ const start = arguments[0]; -+ const end = arguments[1]; -+ let relativeStart, relativeEnd; -+ if (start === undefined) { -+ relativeStart = 0; -+ } else if (start < 0) { -+ relativeStart = Math.max(size + start, 0); -+ } else { -+ relativeStart = Math.min(start, size); -+ } -+ if (end === undefined) { -+ relativeEnd = size; -+ } else if (end < 0) { -+ relativeEnd = Math.max(size + end, 0); -+ } else { -+ relativeEnd = Math.min(end, size); -+ } -+ const span = Math.max(relativeEnd - relativeStart, 0); -+ -+ const buffer = this[BUFFER]; -+ const slicedBuffer = buffer.slice(relativeStart, relativeStart + span); -+ const blob = new Blob([], { type: arguments[2] }); -+ blob[BUFFER] = slicedBuffer; -+ return blob; -+ } -+} -+ -+Object.defineProperties(Blob.prototype, { -+ size: { enumerable: true }, -+ type: { enumerable: true }, -+ slice: { enumerable: true } -+}); -+ -+Object.defineProperty(Blob.prototype, Symbol.toStringTag, { -+ value: 'Blob', -+ writable: false, -+ enumerable: false, -+ configurable: true -+}); -+ -+/** -+ * fetch-error.js -+ * -+ * FetchError interface for operational errors -+ */ -+ -+/** -+ * Create FetchError instance -+ * -+ * @param String message Error message for human -+ * @param String type Error type for machine -+ * @param String systemError For Node.js system error -+ * @return FetchError -+ */ -+function FetchError(message, type, systemError) { -+ Error.call(this, message); -+ -+ this.message = message; -+ this.type = type; -+ -+ // when err.type is `system`, err.code contains system error code -+ if (systemError) { -+ this.code = this.errno = systemError.code; -+ } -+ -+ // hide custom error implementation details from end-users -+ Error.captureStackTrace(this, this.constructor); -+} -+ -+FetchError.prototype = Object.create(Error.prototype); -+FetchError.prototype.constructor = FetchError; -+FetchError.prototype.name = 'FetchError'; -+ -+let convert; -+try { -+ convert = (__nccwpck_require__(3018).convert); -+} catch (e) {} -+ -+const INTERNALS = Symbol('Body internals'); -+ -+// fix an issue where "PassThrough" isn't a named export for node <10 -+const PassThrough = Stream.PassThrough; -+ -+/** -+ * Body mixin -+ * -+ * Ref: https://fetch.spec.whatwg.org/#body -+ * -+ * @param Stream body Readable stream -+ * @param Object opts Response options -+ * @return Void -+ */ -+function Body(body) { -+ var _this = this; -+ -+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, -+ _ref$size = _ref.size; -+ -+ let size = _ref$size === undefined ? 0 : _ref$size; -+ var _ref$timeout = _ref.timeout; -+ let timeout = _ref$timeout === undefined ? 0 : _ref$timeout; -+ -+ if (body == null) { -+ // body is undefined or null -+ body = null; -+ } else if (isURLSearchParams(body)) { -+ // body is a URLSearchParams -+ body = Buffer.from(body.toString()); -+ } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') { -+ // body is ArrayBuffer -+ body = Buffer.from(body); -+ } else if (ArrayBuffer.isView(body)) { -+ // body is ArrayBufferView -+ body = Buffer.from(body.buffer, body.byteOffset, body.byteLength); -+ } else if (body instanceof Stream) ; else { -+ // none of the above -+ // coerce to string then buffer -+ body = Buffer.from(String(body)); -+ } -+ this[INTERNALS] = { -+ body, -+ disturbed: false, -+ error: null -+ }; -+ this.size = size; -+ this.timeout = timeout; -+ -+ if (body instanceof Stream) { -+ body.on('error', function (err) { -+ const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err); -+ _this[INTERNALS].error = error; -+ }); -+ } -+} -+ -+Body.prototype = { -+ get body() { -+ return this[INTERNALS].body; -+ }, -+ -+ get bodyUsed() { -+ return this[INTERNALS].disturbed; -+ }, -+ -+ /** -+ * Decode response as ArrayBuffer -+ * -+ * @return Promise -+ */ -+ arrayBuffer() { -+ return consumeBody.call(this).then(function (buf) { -+ return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); -+ }); -+ }, -+ -+ /** -+ * Return raw response as Blob -+ * -+ * @return Promise -+ */ -+ blob() { -+ let ct = this.headers && this.headers.get('content-type') || ''; -+ return consumeBody.call(this).then(function (buf) { -+ return Object.assign( -+ // Prevent copying -+ new Blob([], { -+ type: ct.toLowerCase() -+ }), { -+ [BUFFER]: buf -+ }); -+ }); -+ }, -+ -+ /** -+ * Decode response as json -+ * -+ * @return Promise -+ */ -+ json() { -+ var _this2 = this; -+ -+ return consumeBody.call(this).then(function (buffer) { -+ try { -+ return JSON.parse(buffer.toString()); -+ } catch (err) { -+ return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json')); -+ } -+ }); -+ }, -+ -+ /** -+ * Decode response as text -+ * -+ * @return Promise -+ */ -+ text() { -+ return consumeBody.call(this).then(function (buffer) { -+ return buffer.toString(); -+ }); -+ }, -+ -+ /** -+ * Decode response as buffer (non-spec api) -+ * -+ * @return Promise -+ */ -+ buffer() { -+ return consumeBody.call(this); -+ }, -+ -+ /** -+ * Decode response as text, while automatically detecting the encoding and -+ * trying to decode to UTF-8 (non-spec api) -+ * -+ * @return Promise -+ */ -+ textConverted() { -+ var _this3 = this; -+ -+ return consumeBody.call(this).then(function (buffer) { -+ return convertBody(buffer, _this3.headers); -+ }); -+ } -+}; -+ -+// In browsers, all properties are enumerable. -+Object.defineProperties(Body.prototype, { -+ body: { enumerable: true }, -+ bodyUsed: { enumerable: true }, -+ arrayBuffer: { enumerable: true }, -+ blob: { enumerable: true }, -+ json: { enumerable: true }, -+ text: { enumerable: true } -+}); -+ -+Body.mixIn = function (proto) { -+ for (const name of Object.getOwnPropertyNames(Body.prototype)) { -+ // istanbul ignore else: future proof -+ if (!(name in proto)) { -+ const desc = Object.getOwnPropertyDescriptor(Body.prototype, name); -+ Object.defineProperty(proto, name, desc); -+ } -+ } -+}; -+ -+/** -+ * Consume and convert an entire Body to a Buffer. -+ * -+ * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body -+ * -+ * @return Promise -+ */ -+function consumeBody() { -+ var _this4 = this; -+ -+ if (this[INTERNALS].disturbed) { -+ return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`)); -+ } -+ -+ this[INTERNALS].disturbed = true; -+ -+ if (this[INTERNALS].error) { -+ return Body.Promise.reject(this[INTERNALS].error); -+ } -+ -+ let body = this.body; -+ -+ // body is null -+ if (body === null) { -+ return Body.Promise.resolve(Buffer.alloc(0)); -+ } -+ -+ // body is blob -+ if (isBlob(body)) { -+ body = body.stream(); -+ } -+ -+ // body is buffer -+ if (Buffer.isBuffer(body)) { -+ return Body.Promise.resolve(body); -+ } -+ -+ // istanbul ignore if: should never happen -+ if (!(body instanceof Stream)) { -+ return Body.Promise.resolve(Buffer.alloc(0)); -+ } -+ -+ // body is stream -+ // get ready to actually consume the body -+ let accum = []; -+ let accumBytes = 0; -+ let abort = false; -+ -+ return new Body.Promise(function (resolve, reject) { -+ let resTimeout; -+ -+ // allow timeout on slow response body -+ if (_this4.timeout) { -+ resTimeout = setTimeout(function () { -+ abort = true; -+ reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout')); -+ }, _this4.timeout); -+ } -+ -+ // handle stream errors -+ body.on('error', function (err) { -+ if (err.name === 'AbortError') { -+ // if the request was aborted, reject with this Error -+ abort = true; -+ reject(err); -+ } else { -+ // other errors, such as incorrect content-encoding -+ reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err)); -+ } -+ }); -+ -+ body.on('data', function (chunk) { -+ if (abort || chunk === null) { -+ return; -+ } -+ -+ if (_this4.size && accumBytes + chunk.length > _this4.size) { -+ abort = true; -+ reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size')); -+ return; -+ } -+ -+ accumBytes += chunk.length; -+ accum.push(chunk); -+ }); -+ -+ body.on('end', function () { -+ if (abort) { -+ return; -+ } -+ -+ clearTimeout(resTimeout); -+ -+ try { -+ resolve(Buffer.concat(accum, accumBytes)); -+ } catch (err) { -+ // handle streams that have accumulated too much data (issue #414) -+ reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err)); -+ } -+ }); -+ }); -+} -+ -+/** -+ * Detect buffer encoding and convert to target encoding -+ * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding -+ * -+ * @param Buffer buffer Incoming buffer -+ * @param String encoding Target encoding -+ * @return String -+ */ -+function convertBody(buffer, headers) { -+ if (typeof convert !== 'function') { -+ throw new Error('The package `encoding` must be installed to use the textConverted() function'); -+ } -+ -+ const ct = headers.get('content-type'); -+ let charset = 'utf-8'; -+ let res, str; -+ -+ // header -+ if (ct) { -+ res = /charset=([^;]*)/i.exec(ct); -+ } -+ -+ // no charset in content type, peek at response body for at most 1024 bytes -+ str = buffer.slice(0, 1024).toString(); -+ -+ // html5 -+ if (!res && str) { -+ res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined; -+ -+ this[MAP] = Object.create(null); -+ -+ if (init instanceof Headers) { -+ const rawHeaders = init.raw(); -+ const headerNames = Object.keys(rawHeaders); -+ -+ for (const headerName of headerNames) { -+ for (const value of rawHeaders[headerName]) { -+ this.append(headerName, value); -+ } -+ } -+ -+ return; -+ } -+ -+ // We don't worry about converting prop to ByteString here as append() -+ // will handle it. -+ if (init == null) ; else if (typeof init === 'object') { -+ const method = init[Symbol.iterator]; -+ if (method != null) { -+ if (typeof method !== 'function') { -+ throw new TypeError('Header pairs must be iterable'); -+ } -+ -+ // sequence> -+ // Note: per spec we have to first exhaust the lists then process them -+ const pairs = []; -+ for (const pair of init) { -+ if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') { -+ throw new TypeError('Each header pair must be iterable'); -+ } -+ pairs.push(Array.from(pair)); -+ } -+ -+ for (const pair of pairs) { -+ if (pair.length !== 2) { -+ throw new TypeError('Each header pair must be a name/value tuple'); -+ } -+ this.append(pair[0], pair[1]); -+ } -+ } else { -+ // record -+ for (const key of Object.keys(init)) { -+ const value = init[key]; -+ this.append(key, value); -+ } -+ } -+ } else { -+ throw new TypeError('Provided initializer must be an object'); -+ } -+ } -+ -+ /** -+ * Return combined header value given name -+ * -+ * @param String name Header name -+ * @return Mixed -+ */ -+ get(name) { -+ name = `${name}`; -+ validateName(name); -+ const key = find(this[MAP], name); -+ if (key === undefined) { -+ return null; -+ } -+ -+ return this[MAP][key].join(', '); -+ } -+ -+ /** -+ * Iterate over all headers -+ * -+ * @param Function callback Executed for each item with parameters (value, name, thisArg) -+ * @param Boolean thisArg `this` context for callback function -+ * @return Void -+ */ -+ forEach(callback) { -+ let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; -+ -+ let pairs = getHeaders(this); -+ let i = 0; -+ while (i < pairs.length) { -+ var _pairs$i = pairs[i]; -+ const name = _pairs$i[0], -+ value = _pairs$i[1]; -+ -+ callback.call(thisArg, value, name, this); -+ pairs = getHeaders(this); -+ i++; -+ } -+ } -+ -+ /** -+ * Overwrite header values given name -+ * -+ * @param String name Header name -+ * @param String value Header value -+ * @return Void -+ */ -+ set(name, value) { -+ name = `${name}`; -+ value = `${value}`; -+ validateName(name); -+ validateValue(value); -+ const key = find(this[MAP], name); -+ this[MAP][key !== undefined ? key : name] = [value]; -+ } -+ -+ /** -+ * Append a value onto existing header -+ * -+ * @param String name Header name -+ * @param String value Header value -+ * @return Void -+ */ -+ append(name, value) { -+ name = `${name}`; -+ value = `${value}`; -+ validateName(name); -+ validateValue(value); -+ const key = find(this[MAP], name); -+ if (key !== undefined) { -+ this[MAP][key].push(value); -+ } else { -+ this[MAP][name] = [value]; -+ } -+ } -+ -+ /** -+ * Check for header name existence -+ * -+ * @param String name Header name -+ * @return Boolean -+ */ -+ has(name) { -+ name = `${name}`; -+ validateName(name); -+ return find(this[MAP], name) !== undefined; -+ } -+ -+ /** -+ * Delete all header values given name -+ * -+ * @param String name Header name -+ * @return Void -+ */ -+ delete(name) { -+ name = `${name}`; -+ validateName(name); -+ const key = find(this[MAP], name); -+ if (key !== undefined) { -+ delete this[MAP][key]; -+ } -+ } -+ -+ /** -+ * Return raw headers (non-spec api) -+ * -+ * @return Object -+ */ -+ raw() { -+ return this[MAP]; -+ } -+ -+ /** -+ * Get an iterator on keys. -+ * -+ * @return Iterator -+ */ -+ keys() { -+ return createHeadersIterator(this, 'key'); -+ } -+ -+ /** -+ * Get an iterator on values. -+ * -+ * @return Iterator -+ */ -+ values() { -+ return createHeadersIterator(this, 'value'); -+ } -+ -+ /** -+ * Get an iterator on entries. -+ * -+ * This is the default iterator of the Headers object. -+ * -+ * @return Iterator -+ */ -+ [Symbol.iterator]() { -+ return createHeadersIterator(this, 'key+value'); -+ } -+} -+Headers.prototype.entries = Headers.prototype[Symbol.iterator]; -+ -+Object.defineProperty(Headers.prototype, Symbol.toStringTag, { -+ value: 'Headers', -+ writable: false, -+ enumerable: false, -+ configurable: true -+}); -+ -+Object.defineProperties(Headers.prototype, { -+ get: { enumerable: true }, -+ forEach: { enumerable: true }, -+ set: { enumerable: true }, -+ append: { enumerable: true }, -+ has: { enumerable: true }, -+ delete: { enumerable: true }, -+ keys: { enumerable: true }, -+ values: { enumerable: true }, -+ entries: { enumerable: true } -+}); -+ -+function getHeaders(headers) { -+ let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value'; -+ -+ const keys = Object.keys(headers[MAP]).sort(); -+ return keys.map(kind === 'key' ? function (k) { -+ return k.toLowerCase(); -+ } : kind === 'value' ? function (k) { -+ return headers[MAP][k].join(', '); -+ } : function (k) { -+ return [k.toLowerCase(), headers[MAP][k].join(', ')]; -+ }); -+} -+ -+const INTERNAL = Symbol('internal'); -+ -+function createHeadersIterator(target, kind) { -+ const iterator = Object.create(HeadersIteratorPrototype); -+ iterator[INTERNAL] = { -+ target, -+ kind, -+ index: 0 -+ }; -+ return iterator; -+} -+ -+const HeadersIteratorPrototype = Object.setPrototypeOf({ -+ next() { -+ // istanbul ignore if -+ if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) { -+ throw new TypeError('Value of `this` is not a HeadersIterator'); -+ } -+ -+ var _INTERNAL = this[INTERNAL]; -+ const target = _INTERNAL.target, -+ kind = _INTERNAL.kind, -+ index = _INTERNAL.index; -+ -+ const values = getHeaders(target, kind); -+ const len = values.length; -+ if (index >= len) { -+ return { -+ value: undefined, -+ done: true -+ }; -+ } -+ -+ this[INTERNAL].index = index + 1; -+ -+ return { -+ value: values[index], -+ done: false -+ }; -+ } -+}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))); -+ -+Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, { -+ value: 'HeadersIterator', -+ writable: false, -+ enumerable: false, -+ configurable: true -+}); -+ -+/** -+ * Export the Headers object in a form that Node.js can consume. -+ * -+ * @param Headers headers -+ * @return Object -+ */ -+function exportNodeCompatibleHeaders(headers) { -+ const obj = Object.assign({ __proto__: null }, headers[MAP]); -+ -+ // http.request() only supports string as Host header. This hack makes -+ // specifying custom Host header possible. -+ const hostHeaderKey = find(headers[MAP], 'Host'); -+ if (hostHeaderKey !== undefined) { -+ obj[hostHeaderKey] = obj[hostHeaderKey][0]; -+ } -+ -+ return obj; -+} -+ -+/** -+ * Create a Headers object from an object of headers, ignoring those that do -+ * not conform to HTTP grammar productions. -+ * -+ * @param Object obj Object of headers -+ * @return Headers -+ */ -+function createHeadersLenient(obj) { -+ const headers = new Headers(); -+ for (const name of Object.keys(obj)) { -+ if (invalidTokenRegex.test(name)) { -+ continue; -+ } -+ if (Array.isArray(obj[name])) { -+ for (const val of obj[name]) { -+ if (invalidHeaderCharRegex.test(val)) { -+ continue; -+ } -+ if (headers[MAP][name] === undefined) { -+ headers[MAP][name] = [val]; -+ } else { -+ headers[MAP][name].push(val); -+ } -+ } -+ } else if (!invalidHeaderCharRegex.test(obj[name])) { -+ headers[MAP][name] = [obj[name]]; -+ } -+ } -+ return headers; -+} -+ -+const INTERNALS$1 = Symbol('Response internals'); -+ -+// fix an issue where "STATUS_CODES" aren't a named export for node <10 -+const STATUS_CODES = http.STATUS_CODES; -+ -+/** -+ * Response class -+ * -+ * @param Stream body Readable stream -+ * @param Object opts Response options -+ * @return Void -+ */ -+class Response { -+ constructor() { -+ let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; -+ let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; -+ -+ Body.call(this, body, opts); -+ -+ const status = opts.status || 200; -+ const headers = new Headers(opts.headers); -+ -+ if (body != null && !headers.has('Content-Type')) { -+ const contentType = extractContentType(body); -+ if (contentType) { -+ headers.append('Content-Type', contentType); -+ } -+ } -+ -+ this[INTERNALS$1] = { -+ url: opts.url, -+ status, -+ statusText: opts.statusText || STATUS_CODES[status], -+ headers, -+ counter: opts.counter -+ }; -+ } -+ -+ get url() { -+ return this[INTERNALS$1].url || ''; -+ } -+ -+ get status() { -+ return this[INTERNALS$1].status; -+ } -+ -+ /** -+ * Convenience property representing if the request ended normally -+ */ -+ get ok() { -+ return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300; -+ } -+ -+ get redirected() { -+ return this[INTERNALS$1].counter > 0; -+ } -+ -+ get statusText() { -+ return this[INTERNALS$1].statusText; -+ } -+ -+ get headers() { -+ return this[INTERNALS$1].headers; -+ } -+ -+ /** -+ * Clone this response -+ * -+ * @return Response -+ */ -+ clone() { -+ return new Response(clone(this), { -+ url: this.url, -+ status: this.status, -+ statusText: this.statusText, -+ headers: this.headers, -+ ok: this.ok, -+ redirected: this.redirected -+ }); -+ } -+} -+ -+Body.mixIn(Response.prototype); -+ -+Object.defineProperties(Response.prototype, { -+ url: { enumerable: true }, -+ status: { enumerable: true }, -+ ok: { enumerable: true }, -+ redirected: { enumerable: true }, -+ statusText: { enumerable: true }, -+ headers: { enumerable: true }, -+ clone: { enumerable: true } -+}); -+ -+Object.defineProperty(Response.prototype, Symbol.toStringTag, { -+ value: 'Response', -+ writable: false, -+ enumerable: false, -+ configurable: true -+}); -+ -+const INTERNALS$2 = Symbol('Request internals'); -+const URL = Url.URL || whatwgUrl.URL; -+ -+// fix an issue where "format", "parse" aren't a named export for node <10 -+const parse_url = Url.parse; -+const format_url = Url.format; -+ -+/** -+ * Wrapper around `new URL` to handle arbitrary URLs -+ * -+ * @param {string} urlStr -+ * @return {void} -+ */ -+function parseURL(urlStr) { -+ /* -+ Check whether the URL is absolute or not -+ Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 -+ Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 -+ */ -+ if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) { -+ urlStr = new URL(urlStr).toString(); -+ } -+ -+ // Fallback to old implementation for arbitrary URLs -+ return parse_url(urlStr); -+} -+ -+const streamDestructionSupported = 'destroy' in Stream.Readable.prototype; -+ -+/** -+ * Check if a value is an instance of Request. -+ * -+ * @param Mixed input -+ * @return Boolean -+ */ -+function isRequest(input) { -+ return typeof input === 'object' && typeof input[INTERNALS$2] === 'object'; -+} -+ -+function isAbortSignal(signal) { -+ const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal); -+ return !!(proto && proto.constructor.name === 'AbortSignal'); -+} -+ -+/** -+ * Request class -+ * -+ * @param Mixed input Url or Request instance -+ * @param Object init Custom options -+ * @return Void -+ */ -+class Request { -+ constructor(input) { -+ let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; -+ -+ let parsedURL; -+ -+ // normalize input -+ if (!isRequest(input)) { -+ if (input && input.href) { -+ // in order to support Node.js' Url objects; though WHATWG's URL objects -+ // will fall into this branch also (since their `toString()` will return -+ // `href` property anyway) -+ parsedURL = parseURL(input.href); -+ } else { -+ // coerce input to a string before attempting to parse -+ parsedURL = parseURL(`${input}`); -+ } -+ input = {}; -+ } else { -+ parsedURL = parseURL(input.url); -+ } -+ -+ let method = init.method || input.method || 'GET'; -+ method = method.toUpperCase(); -+ -+ if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) { -+ throw new TypeError('Request with GET/HEAD method cannot have body'); -+ } -+ -+ let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null; -+ -+ Body.call(this, inputBody, { -+ timeout: init.timeout || input.timeout || 0, -+ size: init.size || input.size || 0 -+ }); -+ -+ const headers = new Headers(init.headers || input.headers || {}); -+ -+ if (inputBody != null && !headers.has('Content-Type')) { -+ const contentType = extractContentType(inputBody); -+ if (contentType) { -+ headers.append('Content-Type', contentType); -+ } -+ } -+ -+ let signal = isRequest(input) ? input.signal : null; -+ if ('signal' in init) signal = init.signal; -+ -+ if (signal != null && !isAbortSignal(signal)) { -+ throw new TypeError('Expected signal to be an instanceof AbortSignal'); -+ } -+ -+ this[INTERNALS$2] = { -+ method, -+ redirect: init.redirect || input.redirect || 'follow', -+ headers, -+ parsedURL, -+ signal -+ }; -+ -+ // node-fetch-only options -+ this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20; -+ this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true; -+ this.counter = init.counter || input.counter || 0; -+ this.agent = init.agent || input.agent; -+ } -+ -+ get method() { -+ return this[INTERNALS$2].method; -+ } -+ -+ get url() { -+ return format_url(this[INTERNALS$2].parsedURL); -+ } -+ -+ get headers() { -+ return this[INTERNALS$2].headers; -+ } -+ -+ get redirect() { -+ return this[INTERNALS$2].redirect; -+ } -+ -+ get signal() { -+ return this[INTERNALS$2].signal; -+ } -+ -+ /** -+ * Clone this request -+ * -+ * @return Request -+ */ -+ clone() { -+ return new Request(this); -+ } -+} -+ -+Body.mixIn(Request.prototype); -+ -+Object.defineProperty(Request.prototype, Symbol.toStringTag, { -+ value: 'Request', -+ writable: false, -+ enumerable: false, -+ configurable: true -+}); -+ -+Object.defineProperties(Request.prototype, { -+ method: { enumerable: true }, -+ url: { enumerable: true }, -+ headers: { enumerable: true }, -+ redirect: { enumerable: true }, -+ clone: { enumerable: true }, -+ signal: { enumerable: true } -+}); -+ -+/** -+ * Convert a Request to Node.js http request options. -+ * -+ * @param Request A Request instance -+ * @return Object The options object to be passed to http.request -+ */ -+function getNodeRequestOptions(request) { -+ const parsedURL = request[INTERNALS$2].parsedURL; -+ const headers = new Headers(request[INTERNALS$2].headers); -+ -+ // fetch step 1.3 -+ if (!headers.has('Accept')) { -+ headers.set('Accept', '*/*'); -+ } -+ -+ // Basic fetch -+ if (!parsedURL.protocol || !parsedURL.hostname) { -+ throw new TypeError('Only absolute URLs are supported'); -+ } -+ -+ if (!/^https?:$/.test(parsedURL.protocol)) { -+ throw new TypeError('Only HTTP(S) protocols are supported'); -+ } -+ -+ if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) { -+ throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8'); -+ } -+ -+ // HTTP-network-or-cache fetch steps 2.4-2.7 -+ let contentLengthValue = null; -+ if (request.body == null && /^(POST|PUT)$/i.test(request.method)) { -+ contentLengthValue = '0'; -+ } -+ if (request.body != null) { -+ const totalBytes = getTotalBytes(request); -+ if (typeof totalBytes === 'number') { -+ contentLengthValue = String(totalBytes); -+ } -+ } -+ if (contentLengthValue) { -+ headers.set('Content-Length', contentLengthValue); -+ } -+ -+ // HTTP-network-or-cache fetch step 2.11 -+ if (!headers.has('User-Agent')) { -+ headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)'); -+ } -+ -+ // HTTP-network-or-cache fetch step 2.15 -+ if (request.compress && !headers.has('Accept-Encoding')) { -+ headers.set('Accept-Encoding', 'gzip,deflate'); -+ } -+ -+ let agent = request.agent; -+ if (typeof agent === 'function') { -+ agent = agent(parsedURL); -+ } -+ -+ // HTTP-network fetch step 4.2 -+ // chunked encoding is handled by Node.js -+ -+ return Object.assign({}, parsedURL, { -+ method: request.method, -+ headers: exportNodeCompatibleHeaders(headers), -+ agent -+ }); -+} -+ -+/** -+ * abort-error.js -+ * -+ * AbortError interface for cancelled requests -+ */ -+ -+/** -+ * Create AbortError instance -+ * -+ * @param String message Error message for human -+ * @return AbortError -+ */ -+function AbortError(message) { -+ Error.call(this, message); -+ -+ this.type = 'aborted'; -+ this.message = message; -+ -+ // hide custom error implementation details from end-users -+ Error.captureStackTrace(this, this.constructor); -+} -+ -+AbortError.prototype = Object.create(Error.prototype); -+AbortError.prototype.constructor = AbortError; -+AbortError.prototype.name = 'AbortError'; -+ -+const URL$1 = Url.URL || whatwgUrl.URL; -+ -+// fix an issue where "PassThrough", "resolve" aren't a named export for node <10 -+const PassThrough$1 = Stream.PassThrough; -+ -+const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) { -+ const orig = new URL$1(original).hostname; -+ const dest = new URL$1(destination).hostname; -+ -+ return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest); -+}; -+ -+/** -+ * isSameProtocol reports whether the two provided URLs use the same protocol. -+ * -+ * Both domains must already be in canonical form. -+ * @param {string|URL} original -+ * @param {string|URL} destination -+ */ -+const isSameProtocol = function isSameProtocol(destination, original) { -+ const orig = new URL$1(original).protocol; -+ const dest = new URL$1(destination).protocol; -+ -+ return orig === dest; -+}; -+ -+/** -+ * Fetch function -+ * -+ * @param Mixed url Absolute url or Request instance -+ * @param Object opts Fetch options -+ * @return Promise -+ */ -+function fetch(url, opts) { -+ -+ // allow custom promise -+ if (!fetch.Promise) { -+ throw new Error('native promise missing, set fetch.Promise to your favorite alternative'); -+ } -+ -+ Body.Promise = fetch.Promise; -+ -+ // wrap http.request into fetch -+ return new fetch.Promise(function (resolve, reject) { -+ // build request object -+ const request = new Request(url, opts); -+ const options = getNodeRequestOptions(request); -+ -+ const send = (options.protocol === 'https:' ? https : http).request; -+ const signal = request.signal; -+ -+ let response = null; -+ -+ const abort = function abort() { -+ let error = new AbortError('The user aborted a request.'); -+ reject(error); -+ if (request.body && request.body instanceof Stream.Readable) { -+ destroyStream(request.body, error); -+ } -+ if (!response || !response.body) return; -+ response.body.emit('error', error); -+ }; -+ -+ if (signal && signal.aborted) { -+ abort(); -+ return; -+ } -+ -+ const abortAndFinalize = function abortAndFinalize() { -+ abort(); -+ finalize(); -+ }; -+ -+ // send request -+ const req = send(options); -+ let reqTimeout; -+ -+ if (signal) { -+ signal.addEventListener('abort', abortAndFinalize); -+ } -+ -+ function finalize() { -+ req.abort(); -+ if (signal) signal.removeEventListener('abort', abortAndFinalize); -+ clearTimeout(reqTimeout); -+ } -+ -+ if (request.timeout) { -+ req.once('socket', function (socket) { -+ reqTimeout = setTimeout(function () { -+ reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout')); -+ finalize(); -+ }, request.timeout); -+ }); -+ } -+ -+ req.on('error', function (err) { -+ reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err)); -+ -+ if (response && response.body) { -+ destroyStream(response.body, err); -+ } -+ -+ finalize(); -+ }); -+ -+ fixResponseChunkedTransferBadEnding(req, function (err) { -+ if (signal && signal.aborted) { -+ return; -+ } -+ -+ if (response && response.body) { -+ destroyStream(response.body, err); -+ } -+ }); -+ -+ /* c8 ignore next 18 */ -+ if (parseInt(process.version.substring(1)) < 14) { -+ // Before Node.js 14, pipeline() does not fully support async iterators and does not always -+ // properly handle when the socket close/end events are out of order. -+ req.on('socket', function (s) { -+ s.addListener('close', function (hadError) { -+ // if a data listener is still present we didn't end cleanly -+ const hasDataListener = s.listenerCount('data') > 0; -+ -+ // if end happened before close but the socket didn't emit an error, do it now -+ if (response && hasDataListener && !hadError && !(signal && signal.aborted)) { -+ const err = new Error('Premature close'); -+ err.code = 'ERR_STREAM_PREMATURE_CLOSE'; -+ response.body.emit('error', err); -+ } -+ }); -+ }); -+ } -+ -+ req.on('response', function (res) { -+ clearTimeout(reqTimeout); -+ -+ const headers = createHeadersLenient(res.headers); -+ -+ // HTTP fetch step 5 -+ if (fetch.isRedirect(res.statusCode)) { -+ // HTTP fetch step 5.2 -+ const location = headers.get('Location'); -+ -+ // HTTP fetch step 5.3 -+ let locationURL = null; -+ try { -+ locationURL = location === null ? null : new URL$1(location, request.url).toString(); -+ } catch (err) { -+ // error here can only be invalid URL in Location: header -+ // do not throw when options.redirect == manual -+ // let the user extract the errorneous redirect URL -+ if (request.redirect !== 'manual') { -+ reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect')); -+ finalize(); -+ return; -+ } -+ } -+ -+ // HTTP fetch step 5.5 -+ switch (request.redirect) { -+ case 'error': -+ reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect')); -+ finalize(); -+ return; -+ case 'manual': -+ // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL. -+ if (locationURL !== null) { -+ // handle corrupted header -+ try { -+ headers.set('Location', locationURL); -+ } catch (err) { -+ // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request -+ reject(err); -+ } -+ } -+ break; -+ case 'follow': -+ // HTTP-redirect fetch step 2 -+ if (locationURL === null) { -+ break; -+ } -+ -+ // HTTP-redirect fetch step 5 -+ if (request.counter >= request.follow) { -+ reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect')); -+ finalize(); -+ return; -+ } -+ -+ // HTTP-redirect fetch step 6 (counter increment) -+ // Create a new Request object. -+ const requestOpts = { -+ headers: new Headers(request.headers), -+ follow: request.follow, -+ counter: request.counter + 1, -+ agent: request.agent, -+ compress: request.compress, -+ method: request.method, -+ body: request.body, -+ signal: request.signal, -+ timeout: request.timeout, -+ size: request.size -+ }; -+ -+ if (!isDomainOrSubdomain(request.url, locationURL) || !isSameProtocol(request.url, locationURL)) { -+ for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) { -+ requestOpts.headers.delete(name); -+ } -+ } -+ -+ // HTTP-redirect fetch step 9 -+ if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) { -+ reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect')); -+ finalize(); -+ return; -+ } -+ -+ // HTTP-redirect fetch step 11 -+ if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') { -+ requestOpts.method = 'GET'; -+ requestOpts.body = undefined; -+ requestOpts.headers.delete('content-length'); -+ } -+ -+ // HTTP-redirect fetch step 15 -+ resolve(fetch(new Request(locationURL, requestOpts))); -+ finalize(); -+ return; -+ } -+ } -+ -+ // prepare response -+ res.once('end', function () { -+ if (signal) signal.removeEventListener('abort', abortAndFinalize); -+ }); -+ let body = res.pipe(new PassThrough$1()); -+ -+ const response_options = { -+ url: request.url, -+ status: res.statusCode, -+ statusText: res.statusMessage, -+ headers: headers, -+ size: request.size, -+ timeout: request.timeout, -+ counter: request.counter -+ }; -+ -+ // HTTP-network fetch step 12.1.1.3 -+ const codings = headers.get('Content-Encoding'); -+ -+ // HTTP-network fetch step 12.1.1.4: handle content codings -+ -+ // in following scenarios we ignore compression support -+ // 1. compression support is disabled -+ // 2. HEAD request -+ // 3. no Content-Encoding header -+ // 4. no content response (204) -+ // 5. content not modified response (304) -+ if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) { -+ response = new Response(body, response_options); -+ resolve(response); -+ return; -+ } -+ -+ // For Node v6+ -+ // Be less strict when decoding compressed responses, since sometimes -+ // servers send slightly invalid responses that are still accepted -+ // by common browsers. -+ // Always using Z_SYNC_FLUSH is what cURL does. -+ const zlibOptions = { -+ flush: zlib.Z_SYNC_FLUSH, -+ finishFlush: zlib.Z_SYNC_FLUSH -+ }; -+ -+ // for gzip -+ if (codings == 'gzip' || codings == 'x-gzip') { -+ body = body.pipe(zlib.createGunzip(zlibOptions)); -+ response = new Response(body, response_options); -+ resolve(response); -+ return; -+ } -+ -+ // for deflate -+ if (codings == 'deflate' || codings == 'x-deflate') { -+ // handle the infamous raw deflate response from old servers -+ // a hack for old IIS and Apache servers -+ const raw = res.pipe(new PassThrough$1()); -+ raw.once('data', function (chunk) { -+ // see http://stackoverflow.com/questions/37519828 -+ if ((chunk[0] & 0x0F) === 0x08) { -+ body = body.pipe(zlib.createInflate()); -+ } else { -+ body = body.pipe(zlib.createInflateRaw()); -+ } -+ response = new Response(body, response_options); -+ resolve(response); -+ }); -+ raw.on('end', function () { -+ // some old IIS servers return zero-length OK deflate responses, so 'data' is never emitted. -+ if (!response) { -+ response = new Response(body, response_options); -+ resolve(response); -+ } -+ }); -+ return; -+ } -+ -+ // for br -+ if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') { -+ body = body.pipe(zlib.createBrotliDecompress()); -+ response = new Response(body, response_options); -+ resolve(response); -+ return; -+ } -+ -+ // otherwise, use response as-is -+ response = new Response(body, response_options); -+ resolve(response); -+ }); -+ -+ writeToStream(req, request); -+ }); -+} -+function fixResponseChunkedTransferBadEnding(request, errorCallback) { -+ let socket; -+ -+ request.on('socket', function (s) { -+ socket = s; -+ }); -+ -+ request.on('response', function (response) { -+ const headers = response.headers; -+ -+ if (headers['transfer-encoding'] === 'chunked' && !headers['content-length']) { -+ response.once('close', function (hadError) { -+ // tests for socket presence, as in some situations the -+ // the 'socket' event is not triggered for the request -+ // (happens in deno), avoids `TypeError` -+ // if a data listener is still present we didn't end cleanly -+ const hasDataListener = socket && socket.listenerCount('data') > 0; -+ -+ if (hasDataListener && !hadError) { -+ const err = new Error('Premature close'); -+ err.code = 'ERR_STREAM_PREMATURE_CLOSE'; -+ errorCallback(err); -+ } -+ }); -+ } -+ }); -+} -+ -+function destroyStream(stream, err) { -+ if (stream.destroy) { -+ stream.destroy(err); -+ } else { -+ // node < 8 -+ stream.emit('error', err); -+ stream.end(); -+ } -+} -+ -+/** -+ * Redirect code matching -+ * -+ * @param Number code Status code -+ * @return Boolean -+ */ -+fetch.isRedirect = function (code) { -+ return code === 301 || code === 302 || code === 303 || code === 307 || code === 308; -+}; -+ -+// expose Promise -+fetch.Promise = global.Promise; -+ -+module.exports = exports = fetch; -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+exports["default"] = exports; -+exports.Headers = Headers; -+exports.Request = Request; -+exports.Response = Response; -+exports.FetchError = FetchError; -+exports.AbortError = AbortError; -+ -+ -+/***/ }), -+ -+/***/ 3069: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+var wrappy = __nccwpck_require__(7212) -+module.exports = wrappy(once) -+module.exports.strict = wrappy(onceStrict) -+ -+once.proto = once(function () { -+ Object.defineProperty(Function.prototype, 'once', { -+ value: function () { -+ return once(this) -+ }, -+ configurable: true -+ }) -+ -+ Object.defineProperty(Function.prototype, 'onceStrict', { -+ value: function () { -+ return onceStrict(this) -+ }, -+ configurable: true -+ }) -+}) -+ -+function once (fn) { -+ var f = function () { -+ if (f.called) return f.value -+ f.called = true -+ return f.value = fn.apply(this, arguments) -+ } -+ f.called = false -+ return f -+} -+ -+function onceStrict (fn) { -+ var f = function () { -+ if (f.called) -+ throw new Error(f.onceError) -+ f.called = true -+ return f.value = fn.apply(this, arguments) -+ } -+ var name = fn.name || 'Function wrapped with `once`' -+ f.onceError = name + " shouldn't be called more than once" -+ f.called = false -+ return f -+} -+ -+ -+/***/ }), -+ -+/***/ 3055: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+var punycode = __nccwpck_require__(5477); -+var mappingTable = __nccwpck_require__(3198); -+ -+var PROCESSING_OPTIONS = { -+ TRANSITIONAL: 0, -+ NONTRANSITIONAL: 1 -+}; -+ -+function normalize(str) { // fix bug in v8 -+ return str.split('\u0000').map(function (s) { return s.normalize('NFC'); }).join('\u0000'); -+} -+ -+function findStatus(val) { -+ var start = 0; -+ var end = mappingTable.length - 1; -+ -+ while (start <= end) { -+ var mid = Math.floor((start + end) / 2); -+ -+ var target = mappingTable[mid]; -+ if (target[0][0] <= val && target[0][1] >= val) { -+ return target; -+ } else if (target[0][0] > val) { -+ end = mid - 1; -+ } else { -+ start = mid + 1; -+ } -+ } -+ -+ return null; -+} -+ -+var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; -+ -+function countSymbols(string) { -+ return string -+ // replace every surrogate pair with a BMP symbol -+ .replace(regexAstralSymbols, '_') -+ // then get the length -+ .length; -+} -+ -+function mapChars(domain_name, useSTD3, processing_option) { -+ var hasError = false; -+ var processed = ""; -+ -+ var len = countSymbols(domain_name); -+ for (var i = 0; i < len; ++i) { -+ var codePoint = domain_name.codePointAt(i); -+ var status = findStatus(codePoint); -+ -+ switch (status[1]) { -+ case "disallowed": -+ hasError = true; -+ processed += String.fromCodePoint(codePoint); -+ break; -+ case "ignored": -+ break; -+ case "mapped": -+ processed += String.fromCodePoint.apply(String, status[2]); -+ break; -+ case "deviation": -+ if (processing_option === PROCESSING_OPTIONS.TRANSITIONAL) { -+ processed += String.fromCodePoint.apply(String, status[2]); -+ } else { -+ processed += String.fromCodePoint(codePoint); -+ } -+ break; -+ case "valid": -+ processed += String.fromCodePoint(codePoint); -+ break; -+ case "disallowed_STD3_mapped": -+ if (useSTD3) { -+ hasError = true; -+ processed += String.fromCodePoint(codePoint); -+ } else { -+ processed += String.fromCodePoint.apply(String, status[2]); -+ } -+ break; -+ case "disallowed_STD3_valid": -+ if (useSTD3) { -+ hasError = true; -+ } -+ -+ processed += String.fromCodePoint(codePoint); -+ break; -+ } -+ } -+ -+ return { -+ string: processed, -+ error: hasError -+ }; -+} -+ -+var combiningMarksRegex = /[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E4-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u192B\u1930-\u193B\u19B0-\u19C0\u19C8\u19C9\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFC-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2D]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDE2C-\uDE37\uDEDF-\uDEEA\uDF01-\uDF03\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDE30-\uDE40\uDEAB-\uDEB7]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF51-\uDF7E\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD83A[\uDCD0-\uDCD6]|\uDB40[\uDD00-\uDDEF]/; -+ -+function validateLabel(label, processing_option) { -+ if (label.substr(0, 4) === "xn--") { -+ label = punycode.toUnicode(label); -+ processing_option = PROCESSING_OPTIONS.NONTRANSITIONAL; -+ } -+ -+ var error = false; -+ -+ if (normalize(label) !== label || -+ (label[3] === "-" && label[4] === "-") || -+ label[0] === "-" || label[label.length - 1] === "-" || -+ label.indexOf(".") !== -1 || -+ label.search(combiningMarksRegex) === 0) { -+ error = true; -+ } -+ -+ var len = countSymbols(label); -+ for (var i = 0; i < len; ++i) { -+ var status = findStatus(label.codePointAt(i)); -+ if ((processing === PROCESSING_OPTIONS.TRANSITIONAL && status[1] !== "valid") || -+ (processing === PROCESSING_OPTIONS.NONTRANSITIONAL && -+ status[1] !== "valid" && status[1] !== "deviation")) { -+ error = true; -+ break; -+ } -+ } -+ -+ return { -+ label: label, -+ error: error -+ }; -+} -+ -+function processing(domain_name, useSTD3, processing_option) { -+ var result = mapChars(domain_name, useSTD3, processing_option); -+ result.string = normalize(result.string); -+ -+ var labels = result.string.split("."); -+ for (var i = 0; i < labels.length; ++i) { -+ try { -+ var validation = validateLabel(labels[i]); -+ labels[i] = validation.label; -+ result.error = result.error || validation.error; -+ } catch(e) { -+ result.error = true; -+ } -+ } -+ -+ return { -+ string: labels.join("."), -+ error: result.error -+ }; -+} -+ -+module.exports.toASCII = function(domain_name, useSTD3, processing_option, verifyDnsLength) { -+ var result = processing(domain_name, useSTD3, processing_option); -+ var labels = result.string.split("."); -+ labels = labels.map(function(l) { -+ try { -+ return punycode.toASCII(l); -+ } catch(e) { -+ result.error = true; -+ return l; -+ } -+ }); -+ -+ if (verifyDnsLength) { -+ var total = labels.slice(0, labels.length - 1).join(".").length; -+ if (total.length > 253 || total.length === 0) { -+ result.error = true; -+ } -+ -+ for (var i=0; i < labels.length; ++i) { -+ if (labels.length > 63 || labels.length === 0) { -+ result.error = true; -+ break; -+ } -+ } -+ } -+ -+ if (result.error) return null; -+ return labels.join("."); -+}; -+ -+module.exports.toUnicode = function(domain_name, useSTD3) { -+ var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL); -+ -+ return { -+ domain: result.string, -+ error: result.error -+ }; -+}; -+ -+module.exports.PROCESSING_OPTIONS = PROCESSING_OPTIONS; -+ -+ -+/***/ }), -+ -+/***/ 8578: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+module.exports = __nccwpck_require__(2805); -+ -+ -+/***/ }), -+ -+/***/ 2805: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+var net = __nccwpck_require__(1808); -+var tls = __nccwpck_require__(4404); -+var http = __nccwpck_require__(3685); -+var https = __nccwpck_require__(5687); -+var events = __nccwpck_require__(2361); -+var assert = __nccwpck_require__(9491); -+var util = __nccwpck_require__(3837); -+ -+ -+exports.httpOverHttp = httpOverHttp; -+exports.httpsOverHttp = httpsOverHttp; -+exports.httpOverHttps = httpOverHttps; -+exports.httpsOverHttps = httpsOverHttps; -+ -+ -+function httpOverHttp(options) { -+ var agent = new TunnelingAgent(options); -+ agent.request = http.request; -+ return agent; -+} -+ -+function httpsOverHttp(options) { -+ var agent = new TunnelingAgent(options); -+ agent.request = http.request; -+ agent.createSocket = createSecureSocket; -+ agent.defaultPort = 443; -+ return agent; -+} -+ -+function httpOverHttps(options) { -+ var agent = new TunnelingAgent(options); -+ agent.request = https.request; -+ return agent; -+} -+ -+function httpsOverHttps(options) { -+ var agent = new TunnelingAgent(options); -+ agent.request = https.request; -+ agent.createSocket = createSecureSocket; -+ agent.defaultPort = 443; -+ return agent; -+} -+ -+ -+function TunnelingAgent(options) { -+ var self = this; -+ self.options = options || {}; -+ self.proxyOptions = self.options.proxy || {}; -+ self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets; -+ self.requests = []; -+ self.sockets = []; -+ -+ self.on('free', function onFree(socket, host, port, localAddress) { -+ var options = toOptions(host, port, localAddress); -+ for (var i = 0, len = self.requests.length; i < len; ++i) { -+ var pending = self.requests[i]; -+ if (pending.host === options.host && pending.port === options.port) { -+ // Detect the request to connect same origin server, -+ // reuse the connection. -+ self.requests.splice(i, 1); -+ pending.request.onSocket(socket); -+ return; -+ } -+ } -+ socket.destroy(); -+ self.removeSocket(socket); -+ }); -+} -+util.inherits(TunnelingAgent, events.EventEmitter); -+ -+TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) { -+ var self = this; -+ var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress)); -+ -+ if (self.sockets.length >= this.maxSockets) { -+ // We are over limit so we'll add it to the queue. -+ self.requests.push(options); -+ return; -+ } -+ -+ // If we are under maxSockets create a new one. -+ self.createSocket(options, function(socket) { -+ socket.on('free', onFree); -+ socket.on('close', onCloseOrRemove); -+ socket.on('agentRemove', onCloseOrRemove); -+ req.onSocket(socket); -+ -+ function onFree() { -+ self.emit('free', socket, options); -+ } -+ -+ function onCloseOrRemove(err) { -+ self.removeSocket(socket); -+ socket.removeListener('free', onFree); -+ socket.removeListener('close', onCloseOrRemove); -+ socket.removeListener('agentRemove', onCloseOrRemove); -+ } -+ }); -+}; -+ -+TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { -+ var self = this; -+ var placeholder = {}; -+ self.sockets.push(placeholder); -+ -+ var connectOptions = mergeOptions({}, self.proxyOptions, { -+ method: 'CONNECT', -+ path: options.host + ':' + options.port, -+ agent: false, -+ headers: { -+ host: options.host + ':' + options.port -+ } -+ }); -+ if (options.localAddress) { -+ connectOptions.localAddress = options.localAddress; -+ } -+ if (connectOptions.proxyAuth) { -+ connectOptions.headers = connectOptions.headers || {}; -+ connectOptions.headers['Proxy-Authorization'] = 'Basic ' + -+ new Buffer(connectOptions.proxyAuth).toString('base64'); -+ } -+ -+ debug('making CONNECT request'); -+ var connectReq = self.request(connectOptions); -+ connectReq.useChunkedEncodingByDefault = false; // for v0.6 -+ connectReq.once('response', onResponse); // for v0.6 -+ connectReq.once('upgrade', onUpgrade); // for v0.6 -+ connectReq.once('connect', onConnect); // for v0.7 or later -+ connectReq.once('error', onError); -+ connectReq.end(); -+ -+ function onResponse(res) { -+ // Very hacky. This is necessary to avoid http-parser leaks. -+ res.upgrade = true; -+ } -+ -+ function onUpgrade(res, socket, head) { -+ // Hacky. -+ process.nextTick(function() { -+ onConnect(res, socket, head); -+ }); -+ } -+ -+ function onConnect(res, socket, head) { -+ connectReq.removeAllListeners(); -+ socket.removeAllListeners(); -+ -+ if (res.statusCode !== 200) { -+ debug('tunneling socket could not be established, statusCode=%d', -+ res.statusCode); -+ socket.destroy(); -+ var error = new Error('tunneling socket could not be established, ' + -+ 'statusCode=' + res.statusCode); -+ error.code = 'ECONNRESET'; -+ options.request.emit('error', error); -+ self.removeSocket(placeholder); -+ return; -+ } -+ if (head.length > 0) { -+ debug('got illegal response body from proxy'); -+ socket.destroy(); -+ var error = new Error('got illegal response body from proxy'); -+ error.code = 'ECONNRESET'; -+ options.request.emit('error', error); -+ self.removeSocket(placeholder); -+ return; -+ } -+ debug('tunneling connection has established'); -+ self.sockets[self.sockets.indexOf(placeholder)] = socket; -+ return cb(socket); -+ } -+ -+ function onError(cause) { -+ connectReq.removeAllListeners(); -+ -+ debug('tunneling socket could not be established, cause=%s\n', -+ cause.message, cause.stack); -+ var error = new Error('tunneling socket could not be established, ' + -+ 'cause=' + cause.message); -+ error.code = 'ECONNRESET'; -+ options.request.emit('error', error); -+ self.removeSocket(placeholder); -+ } -+}; -+ -+TunnelingAgent.prototype.removeSocket = function removeSocket(socket) { -+ var pos = this.sockets.indexOf(socket) -+ if (pos === -1) { -+ return; -+ } -+ this.sockets.splice(pos, 1); -+ -+ var pending = this.requests.shift(); -+ if (pending) { -+ // If we have pending requests and a socket gets closed a new one -+ // needs to be created to take over in the pool for the one that closed. -+ this.createSocket(pending, function(socket) { -+ pending.request.onSocket(socket); -+ }); -+ } -+}; -+ -+function createSecureSocket(options, cb) { -+ var self = this; -+ TunnelingAgent.prototype.createSocket.call(self, options, function(socket) { -+ var hostHeader = options.request.getHeader('host'); -+ var tlsOptions = mergeOptions({}, self.options, { -+ socket: socket, -+ servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host -+ }); -+ -+ // 0 is dummy port for v0.6 -+ var secureSocket = tls.connect(0, tlsOptions); -+ self.sockets[self.sockets.indexOf(socket)] = secureSocket; -+ cb(secureSocket); -+ }); -+} -+ -+ -+function toOptions(host, port, localAddress) { -+ if (typeof host === 'string') { // since v0.10 -+ return { -+ host: host, -+ port: port, -+ localAddress: localAddress -+ }; -+ } -+ return host; // for v0.11 or later -+} -+ -+function mergeOptions(target) { -+ for (var i = 1, len = arguments.length; i < len; ++i) { -+ var overrides = arguments[i]; -+ if (typeof overrides === 'object') { -+ var keys = Object.keys(overrides); -+ for (var j = 0, keyLen = keys.length; j < keyLen; ++j) { -+ var k = keys[j]; -+ if (overrides[k] !== undefined) { -+ target[k] = overrides[k]; -+ } -+ } -+ } -+ } -+ return target; -+} -+ -+ -+var debug; -+if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { -+ debug = function() { -+ var args = Array.prototype.slice.call(arguments); -+ if (typeof args[0] === 'string') { -+ args[0] = 'TUNNEL: ' + args[0]; -+ } else { -+ args.unshift('TUNNEL:'); -+ } -+ console.error.apply(console, args); -+ } -+} else { -+ debug = function() {}; -+} -+exports.debug = debug; // for test -+ -+ -+/***/ }), -+ -+/***/ 1154: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const Client = __nccwpck_require__(1813) -+const Dispatcher = __nccwpck_require__(8307) -+const errors = __nccwpck_require__(1878) -+const Pool = __nccwpck_require__(7921) -+const BalancedPool = __nccwpck_require__(5935) -+const Agent = __nccwpck_require__(823) -+const util = __nccwpck_require__(929) -+const { InvalidArgumentError } = errors -+const api = __nccwpck_require__(93) -+const buildConnector = __nccwpck_require__(7483) -+const MockClient = __nccwpck_require__(306) -+const MockAgent = __nccwpck_require__(8259) -+const MockPool = __nccwpck_require__(3405) -+const mockErrors = __nccwpck_require__(7868) -+const ProxyAgent = __nccwpck_require__(1819) -+const RetryHandler = __nccwpck_require__(6032) -+const { getGlobalDispatcher, setGlobalDispatcher } = __nccwpck_require__(7718) -+const DecoratorHandler = __nccwpck_require__(8291) -+const RedirectHandler = __nccwpck_require__(9944) -+const createRedirectInterceptor = __nccwpck_require__(9597) -+ -+let hasCrypto -+try { -+ __nccwpck_require__(6113) -+ hasCrypto = true -+} catch { -+ hasCrypto = false -+} -+ -+Object.assign(Dispatcher.prototype, api) -+ -+module.exports.Dispatcher = Dispatcher -+module.exports.Client = Client -+module.exports.Pool = Pool -+module.exports.BalancedPool = BalancedPool -+module.exports.Agent = Agent -+module.exports.ProxyAgent = ProxyAgent -+module.exports.RetryHandler = RetryHandler -+ -+module.exports.DecoratorHandler = DecoratorHandler -+module.exports.RedirectHandler = RedirectHandler -+module.exports.createRedirectInterceptor = createRedirectInterceptor -+ -+module.exports.buildConnector = buildConnector -+module.exports.errors = errors -+ -+function makeDispatcher (fn) { -+ return (url, opts, handler) => { -+ if (typeof opts === 'function') { -+ handler = opts -+ opts = null -+ } -+ -+ if (!url || (typeof url !== 'string' && typeof url !== 'object' && !(url instanceof URL))) { -+ throw new InvalidArgumentError('invalid url') -+ } -+ -+ if (opts != null && typeof opts !== 'object') { -+ throw new InvalidArgumentError('invalid opts') -+ } -+ -+ if (opts && opts.path != null) { -+ if (typeof opts.path !== 'string') { -+ throw new InvalidArgumentError('invalid opts.path') -+ } -+ -+ let path = opts.path -+ if (!opts.path.startsWith('/')) { -+ path = `/${path}` -+ } -+ -+ url = new URL(util.parseOrigin(url).origin + path) -+ } else { -+ if (!opts) { -+ opts = typeof url === 'object' ? url : {} -+ } -+ -+ url = util.parseURL(url) -+ } -+ -+ const { agent, dispatcher = getGlobalDispatcher() } = opts -+ -+ if (agent) { -+ throw new InvalidArgumentError('unsupported opts.agent. Did you mean opts.client?') -+ } -+ -+ return fn.call(dispatcher, { -+ ...opts, -+ origin: url.origin, -+ path: url.search ? `${url.pathname}${url.search}` : url.pathname, -+ method: opts.method || (opts.body ? 'PUT' : 'GET') -+ }, handler) -+ } -+} -+ -+module.exports.setGlobalDispatcher = setGlobalDispatcher -+module.exports.getGlobalDispatcher = getGlobalDispatcher -+ -+if (util.nodeMajor > 16 || (util.nodeMajor === 16 && util.nodeMinor >= 8)) { -+ let fetchImpl = null -+ module.exports.fetch = async function fetch (resource) { -+ if (!fetchImpl) { -+ fetchImpl = (__nccwpck_require__(8000).fetch) -+ } -+ -+ try { -+ return await fetchImpl(...arguments) -+ } catch (err) { -+ if (typeof err === 'object') { -+ Error.captureStackTrace(err, this) -+ } -+ -+ throw err -+ } -+ } -+ module.exports.Headers = __nccwpck_require__(3545).Headers -+ module.exports.Response = __nccwpck_require__(433).Response -+ module.exports.Request = __nccwpck_require__(1587).Request -+ module.exports.FormData = __nccwpck_require__(8703).FormData -+ module.exports.File = __nccwpck_require__(4517).File -+ module.exports.FileReader = __nccwpck_require__(5398).FileReader -+ -+ const { setGlobalOrigin, getGlobalOrigin } = __nccwpck_require__(5022) -+ -+ module.exports.setGlobalOrigin = setGlobalOrigin -+ module.exports.getGlobalOrigin = getGlobalOrigin -+ -+ const { CacheStorage } = __nccwpck_require__(5511) -+ const { kConstruct } = __nccwpck_require__(2969) -+ -+ // Cache & CacheStorage are tightly coupled with fetch. Even if it may run -+ // in an older version of Node, it doesn't have any use without fetch. -+ module.exports.caches = new CacheStorage(kConstruct) -+} -+ -+if (util.nodeMajor >= 16) { -+ const { deleteCookie, getCookies, getSetCookies, setCookie } = __nccwpck_require__(1739) -+ -+ module.exports.deleteCookie = deleteCookie -+ module.exports.getCookies = getCookies -+ module.exports.getSetCookies = getSetCookies -+ module.exports.setCookie = setCookie -+ -+ const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(1827) -+ -+ module.exports.parseMIMEType = parseMIMEType -+ module.exports.serializeAMimeType = serializeAMimeType -+} -+ -+if (util.nodeMajor >= 18 && hasCrypto) { -+ const { WebSocket } = __nccwpck_require__(3825) -+ -+ module.exports.WebSocket = WebSocket -+} -+ -+module.exports.request = makeDispatcher(api.request) -+module.exports.stream = makeDispatcher(api.stream) -+module.exports.pipeline = makeDispatcher(api.pipeline) -+module.exports.connect = makeDispatcher(api.connect) -+module.exports.upgrade = makeDispatcher(api.upgrade) -+ -+module.exports.MockClient = MockClient -+module.exports.MockPool = MockPool -+module.exports.MockAgent = MockAgent -+module.exports.mockErrors = mockErrors -+ -+ -+/***/ }), -+ -+/***/ 823: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { InvalidArgumentError } = __nccwpck_require__(1878) -+const { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = __nccwpck_require__(3745) -+const DispatcherBase = __nccwpck_require__(6552) -+const Pool = __nccwpck_require__(7921) -+const Client = __nccwpck_require__(1813) -+const util = __nccwpck_require__(929) -+const createRedirectInterceptor = __nccwpck_require__(9597) -+const { WeakRef, FinalizationRegistry } = __nccwpck_require__(6300)() -+ -+const kOnConnect = Symbol('onConnect') -+const kOnDisconnect = Symbol('onDisconnect') -+const kOnConnectionError = Symbol('onConnectionError') -+const kMaxRedirections = Symbol('maxRedirections') -+const kOnDrain = Symbol('onDrain') -+const kFactory = Symbol('factory') -+const kFinalizer = Symbol('finalizer') -+const kOptions = Symbol('options') -+ -+function defaultFactory (origin, opts) { -+ return opts && opts.connections === 1 -+ ? new Client(origin, opts) -+ : new Pool(origin, opts) -+} -+ -+class Agent extends DispatcherBase { -+ constructor ({ factory = defaultFactory, maxRedirections = 0, connect, ...options } = {}) { -+ super() -+ -+ if (typeof factory !== 'function') { -+ throw new InvalidArgumentError('factory must be a function.') -+ } -+ -+ if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') { -+ throw new InvalidArgumentError('connect must be a function or an object') -+ } -+ -+ if (!Number.isInteger(maxRedirections) || maxRedirections < 0) { -+ throw new InvalidArgumentError('maxRedirections must be a positive number') -+ } -+ -+ if (connect && typeof connect !== 'function') { -+ connect = { ...connect } -+ } -+ -+ this[kInterceptors] = options.interceptors && options.interceptors.Agent && Array.isArray(options.interceptors.Agent) -+ ? options.interceptors.Agent -+ : [createRedirectInterceptor({ maxRedirections })] -+ -+ this[kOptions] = { ...util.deepClone(options), connect } -+ this[kOptions].interceptors = options.interceptors -+ ? { ...options.interceptors } -+ : undefined -+ this[kMaxRedirections] = maxRedirections -+ this[kFactory] = factory -+ this[kClients] = new Map() -+ this[kFinalizer] = new FinalizationRegistry(/* istanbul ignore next: gc is undeterministic */ key => { -+ const ref = this[kClients].get(key) -+ if (ref !== undefined && ref.deref() === undefined) { -+ this[kClients].delete(key) -+ } -+ }) -+ -+ const agent = this -+ -+ this[kOnDrain] = (origin, targets) => { -+ agent.emit('drain', origin, [agent, ...targets]) -+ } -+ -+ this[kOnConnect] = (origin, targets) => { -+ agent.emit('connect', origin, [agent, ...targets]) -+ } -+ -+ this[kOnDisconnect] = (origin, targets, err) => { -+ agent.emit('disconnect', origin, [agent, ...targets], err) -+ } -+ -+ this[kOnConnectionError] = (origin, targets, err) => { -+ agent.emit('connectionError', origin, [agent, ...targets], err) -+ } -+ } -+ -+ get [kRunning] () { -+ let ret = 0 -+ for (const ref of this[kClients].values()) { -+ const client = ref.deref() -+ /* istanbul ignore next: gc is undeterministic */ -+ if (client) { -+ ret += client[kRunning] -+ } -+ } -+ return ret -+ } -+ -+ [kDispatch] (opts, handler) { -+ let key -+ if (opts.origin && (typeof opts.origin === 'string' || opts.origin instanceof URL)) { -+ key = String(opts.origin) -+ } else { -+ throw new InvalidArgumentError('opts.origin must be a non-empty string or URL.') -+ } -+ -+ const ref = this[kClients].get(key) -+ -+ let dispatcher = ref ? ref.deref() : null -+ if (!dispatcher) { -+ dispatcher = this[kFactory](opts.origin, this[kOptions]) -+ .on('drain', this[kOnDrain]) -+ .on('connect', this[kOnConnect]) -+ .on('disconnect', this[kOnDisconnect]) -+ .on('connectionError', this[kOnConnectionError]) -+ -+ this[kClients].set(key, new WeakRef(dispatcher)) -+ this[kFinalizer].register(dispatcher, key) -+ } -+ -+ return dispatcher.dispatch(opts, handler) -+ } -+ -+ async [kClose] () { -+ const closePromises = [] -+ for (const ref of this[kClients].values()) { -+ const client = ref.deref() -+ /* istanbul ignore else: gc is undeterministic */ -+ if (client) { -+ closePromises.push(client.close()) -+ } -+ } -+ -+ await Promise.all(closePromises) -+ } -+ -+ async [kDestroy] (err) { -+ const destroyPromises = [] -+ for (const ref of this[kClients].values()) { -+ const client = ref.deref() -+ /* istanbul ignore else: gc is undeterministic */ -+ if (client) { -+ destroyPromises.push(client.destroy(err)) -+ } -+ } -+ -+ await Promise.all(destroyPromises) -+ } -+} -+ -+module.exports = Agent -+ -+ -+/***/ }), -+ -+/***/ 1176: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+const { addAbortListener } = __nccwpck_require__(929) -+const { RequestAbortedError } = __nccwpck_require__(1878) -+ -+const kListener = Symbol('kListener') -+const kSignal = Symbol('kSignal') -+ -+function abort (self) { -+ if (self.abort) { -+ self.abort() -+ } else { -+ self.onError(new RequestAbortedError()) -+ } -+} -+ -+function addSignal (self, signal) { -+ self[kSignal] = null -+ self[kListener] = null -+ -+ if (!signal) { -+ return -+ } -+ -+ if (signal.aborted) { -+ abort(self) -+ return -+ } -+ -+ self[kSignal] = signal -+ self[kListener] = () => { -+ abort(self) -+ } -+ -+ addAbortListener(self[kSignal], self[kListener]) -+} -+ -+function removeSignal (self) { -+ if (!self[kSignal]) { -+ return -+ } -+ -+ if ('removeEventListener' in self[kSignal]) { -+ self[kSignal].removeEventListener('abort', self[kListener]) -+ } else { -+ self[kSignal].removeListener('abort', self[kListener]) -+ } -+ -+ self[kSignal] = null -+ self[kListener] = null -+} -+ -+module.exports = { -+ addSignal, -+ removeSignal -+} -+ -+ -+/***/ }), -+ -+/***/ 5474: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { AsyncResource } = __nccwpck_require__(852) -+const { InvalidArgumentError, RequestAbortedError, SocketError } = __nccwpck_require__(1878) -+const util = __nccwpck_require__(929) -+const { addSignal, removeSignal } = __nccwpck_require__(1176) -+ -+class ConnectHandler extends AsyncResource { -+ constructor (opts, callback) { -+ if (!opts || typeof opts !== 'object') { -+ throw new InvalidArgumentError('invalid opts') -+ } -+ -+ if (typeof callback !== 'function') { -+ throw new InvalidArgumentError('invalid callback') -+ } -+ -+ const { signal, opaque, responseHeaders } = opts -+ -+ if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') { -+ throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget') -+ } -+ -+ super('UNDICI_CONNECT') -+ -+ this.opaque = opaque || null -+ this.responseHeaders = responseHeaders || null -+ this.callback = callback -+ this.abort = null -+ -+ addSignal(this, signal) -+ } -+ -+ onConnect (abort, context) { -+ if (!this.callback) { -+ throw new RequestAbortedError() -+ } -+ -+ this.abort = abort -+ this.context = context -+ } -+ -+ onHeaders () { -+ throw new SocketError('bad connect', null) -+ } -+ -+ onUpgrade (statusCode, rawHeaders, socket) { -+ const { callback, opaque, context } = this -+ -+ removeSignal(this) -+ -+ this.callback = null -+ -+ let headers = rawHeaders -+ // Indicates is an HTTP2Session -+ if (headers != null) { -+ headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders) -+ } -+ -+ this.runInAsyncScope(callback, null, null, { -+ statusCode, -+ headers, -+ socket, -+ opaque, -+ context -+ }) -+ } -+ -+ onError (err) { -+ const { callback, opaque } = this -+ -+ removeSignal(this) -+ -+ if (callback) { -+ this.callback = null -+ queueMicrotask(() => { -+ this.runInAsyncScope(callback, null, err, { opaque }) -+ }) -+ } -+ } -+} -+ -+function connect (opts, callback) { -+ if (callback === undefined) { -+ return new Promise((resolve, reject) => { -+ connect.call(this, opts, (err, data) => { -+ return err ? reject(err) : resolve(data) -+ }) -+ }) -+ } -+ -+ try { -+ const connectHandler = new ConnectHandler(opts, callback) -+ this.dispatch({ ...opts, method: 'CONNECT' }, connectHandler) -+ } catch (err) { -+ if (typeof callback !== 'function') { -+ throw err -+ } -+ const opaque = opts && opts.opaque -+ queueMicrotask(() => callback(err, { opaque })) -+ } -+} -+ -+module.exports = connect -+ -+ -+/***/ }), -+ -+/***/ 5991: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { -+ Readable, -+ Duplex, -+ PassThrough -+} = __nccwpck_require__(2781) -+const { -+ InvalidArgumentError, -+ InvalidReturnValueError, -+ RequestAbortedError -+} = __nccwpck_require__(1878) -+const util = __nccwpck_require__(929) -+const { AsyncResource } = __nccwpck_require__(852) -+const { addSignal, removeSignal } = __nccwpck_require__(1176) -+const assert = __nccwpck_require__(9491) -+ -+const kResume = Symbol('resume') -+ -+class PipelineRequest extends Readable { -+ constructor () { -+ super({ autoDestroy: true }) -+ -+ this[kResume] = null -+ } -+ -+ _read () { -+ const { [kResume]: resume } = this -+ -+ if (resume) { -+ this[kResume] = null -+ resume() -+ } -+ } -+ -+ _destroy (err, callback) { -+ this._read() -+ -+ callback(err) -+ } -+} -+ -+class PipelineResponse extends Readable { -+ constructor (resume) { -+ super({ autoDestroy: true }) -+ this[kResume] = resume -+ } -+ -+ _read () { -+ this[kResume]() -+ } -+ -+ _destroy (err, callback) { -+ if (!err && !this._readableState.endEmitted) { -+ err = new RequestAbortedError() -+ } -+ -+ callback(err) -+ } -+} -+ -+class PipelineHandler extends AsyncResource { -+ constructor (opts, handler) { -+ if (!opts || typeof opts !== 'object') { -+ throw new InvalidArgumentError('invalid opts') -+ } -+ -+ if (typeof handler !== 'function') { -+ throw new InvalidArgumentError('invalid handler') -+ } -+ -+ const { signal, method, opaque, onInfo, responseHeaders } = opts -+ -+ if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') { -+ throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget') -+ } -+ -+ if (method === 'CONNECT') { -+ throw new InvalidArgumentError('invalid method') -+ } -+ -+ if (onInfo && typeof onInfo !== 'function') { -+ throw new InvalidArgumentError('invalid onInfo callback') -+ } -+ -+ super('UNDICI_PIPELINE') -+ -+ this.opaque = opaque || null -+ this.responseHeaders = responseHeaders || null -+ this.handler = handler -+ this.abort = null -+ this.context = null -+ this.onInfo = onInfo || null -+ -+ this.req = new PipelineRequest().on('error', util.nop) -+ -+ this.ret = new Duplex({ -+ readableObjectMode: opts.objectMode, -+ autoDestroy: true, -+ read: () => { -+ const { body } = this -+ -+ if (body && body.resume) { -+ body.resume() -+ } -+ }, -+ write: (chunk, encoding, callback) => { -+ const { req } = this -+ -+ if (req.push(chunk, encoding) || req._readableState.destroyed) { -+ callback() -+ } else { -+ req[kResume] = callback -+ } -+ }, -+ destroy: (err, callback) => { -+ const { body, req, res, ret, abort } = this -+ -+ if (!err && !ret._readableState.endEmitted) { -+ err = new RequestAbortedError() -+ } -+ -+ if (abort && err) { -+ abort() -+ } -+ -+ util.destroy(body, err) -+ util.destroy(req, err) -+ util.destroy(res, err) -+ -+ removeSignal(this) -+ -+ callback(err) -+ } -+ }).on('prefinish', () => { -+ const { req } = this -+ -+ // Node < 15 does not call _final in same tick. -+ req.push(null) -+ }) -+ -+ this.res = null -+ -+ addSignal(this, signal) -+ } -+ -+ onConnect (abort, context) { -+ const { ret, res } = this -+ -+ assert(!res, 'pipeline cannot be retried') -+ -+ if (ret.destroyed) { -+ throw new RequestAbortedError() -+ } -+ -+ this.abort = abort -+ this.context = context -+ } -+ -+ onHeaders (statusCode, rawHeaders, resume) { -+ const { opaque, handler, context } = this -+ -+ if (statusCode < 200) { -+ if (this.onInfo) { -+ const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders) -+ this.onInfo({ statusCode, headers }) -+ } -+ return -+ } -+ -+ this.res = new PipelineResponse(resume) -+ -+ let body -+ try { -+ this.handler = null -+ const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders) -+ body = this.runInAsyncScope(handler, null, { -+ statusCode, -+ headers, -+ opaque, -+ body: this.res, -+ context -+ }) -+ } catch (err) { -+ this.res.on('error', util.nop) -+ throw err -+ } -+ -+ if (!body || typeof body.on !== 'function') { -+ throw new InvalidReturnValueError('expected Readable') -+ } -+ -+ body -+ .on('data', (chunk) => { -+ const { ret, body } = this -+ -+ if (!ret.push(chunk) && body.pause) { -+ body.pause() -+ } -+ }) -+ .on('error', (err) => { -+ const { ret } = this -+ -+ util.destroy(ret, err) -+ }) -+ .on('end', () => { -+ const { ret } = this -+ -+ ret.push(null) -+ }) -+ .on('close', () => { -+ const { ret } = this -+ -+ if (!ret._readableState.ended) { -+ util.destroy(ret, new RequestAbortedError()) -+ } -+ }) -+ -+ this.body = body -+ } -+ -+ onData (chunk) { -+ const { res } = this -+ return res.push(chunk) -+ } -+ -+ onComplete (trailers) { -+ const { res } = this -+ res.push(null) -+ } -+ -+ onError (err) { -+ const { ret } = this -+ this.handler = null -+ util.destroy(ret, err) -+ } -+} -+ -+function pipeline (opts, handler) { -+ try { -+ const pipelineHandler = new PipelineHandler(opts, handler) -+ this.dispatch({ ...opts, body: pipelineHandler.req }, pipelineHandler) -+ return pipelineHandler.ret -+ } catch (err) { -+ return new PassThrough().destroy(err) -+ } -+} -+ -+module.exports = pipeline -+ -+ -+/***/ }), -+ -+/***/ 6152: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const Readable = __nccwpck_require__(8369) -+const { -+ InvalidArgumentError, -+ RequestAbortedError -+} = __nccwpck_require__(1878) -+const util = __nccwpck_require__(929) -+const { getResolveErrorBodyCallback } = __nccwpck_require__(2987) -+const { AsyncResource } = __nccwpck_require__(852) -+const { addSignal, removeSignal } = __nccwpck_require__(1176) -+ -+class RequestHandler extends AsyncResource { -+ constructor (opts, callback) { -+ if (!opts || typeof opts !== 'object') { -+ throw new InvalidArgumentError('invalid opts') -+ } -+ -+ const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError, highWaterMark } = opts -+ -+ try { -+ if (typeof callback !== 'function') { -+ throw new InvalidArgumentError('invalid callback') -+ } -+ -+ if (highWaterMark && (typeof highWaterMark !== 'number' || highWaterMark < 0)) { -+ throw new InvalidArgumentError('invalid highWaterMark') -+ } -+ -+ if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') { -+ throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget') -+ } -+ -+ if (method === 'CONNECT') { -+ throw new InvalidArgumentError('invalid method') -+ } -+ -+ if (onInfo && typeof onInfo !== 'function') { -+ throw new InvalidArgumentError('invalid onInfo callback') -+ } -+ -+ super('UNDICI_REQUEST') -+ } catch (err) { -+ if (util.isStream(body)) { -+ util.destroy(body.on('error', util.nop), err) -+ } -+ throw err -+ } -+ -+ this.responseHeaders = responseHeaders || null -+ this.opaque = opaque || null -+ this.callback = callback -+ this.res = null -+ this.abort = null -+ this.body = body -+ this.trailers = {} -+ this.context = null -+ this.onInfo = onInfo || null -+ this.throwOnError = throwOnError -+ this.highWaterMark = highWaterMark -+ -+ if (util.isStream(body)) { -+ body.on('error', (err) => { -+ this.onError(err) -+ }) -+ } -+ -+ addSignal(this, signal) -+ } -+ -+ onConnect (abort, context) { -+ if (!this.callback) { -+ throw new RequestAbortedError() -+ } -+ -+ this.abort = abort -+ this.context = context -+ } -+ -+ onHeaders (statusCode, rawHeaders, resume, statusMessage) { -+ const { callback, opaque, abort, context, responseHeaders, highWaterMark } = this -+ -+ const headers = responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders) -+ -+ if (statusCode < 200) { -+ if (this.onInfo) { -+ this.onInfo({ statusCode, headers }) -+ } -+ return -+ } -+ -+ const parsedHeaders = responseHeaders === 'raw' ? util.parseHeaders(rawHeaders) : headers -+ const contentType = parsedHeaders['content-type'] -+ const body = new Readable({ resume, abort, contentType, highWaterMark }) -+ -+ this.callback = null -+ this.res = body -+ if (callback !== null) { -+ if (this.throwOnError && statusCode >= 400) { -+ this.runInAsyncScope(getResolveErrorBodyCallback, null, -+ { callback, body, contentType, statusCode, statusMessage, headers } -+ ) -+ } else { -+ this.runInAsyncScope(callback, null, null, { -+ statusCode, -+ headers, -+ trailers: this.trailers, -+ opaque, -+ body, -+ context -+ }) -+ } -+ } -+ } -+ -+ onData (chunk) { -+ const { res } = this -+ return res.push(chunk) -+ } -+ -+ onComplete (trailers) { -+ const { res } = this -+ -+ removeSignal(this) -+ -+ util.parseHeaders(trailers, this.trailers) -+ -+ res.push(null) -+ } -+ -+ onError (err) { -+ const { res, callback, body, opaque } = this -+ -+ removeSignal(this) -+ -+ if (callback) { -+ // TODO: Does this need queueMicrotask? -+ this.callback = null -+ queueMicrotask(() => { -+ this.runInAsyncScope(callback, null, err, { opaque }) -+ }) -+ } -+ -+ if (res) { -+ this.res = null -+ // Ensure all queued handlers are invoked before destroying res. -+ queueMicrotask(() => { -+ util.destroy(res, err) -+ }) -+ } -+ -+ if (body) { -+ this.body = null -+ util.destroy(body, err) -+ } -+ } -+} -+ -+function request (opts, callback) { -+ if (callback === undefined) { -+ return new Promise((resolve, reject) => { -+ request.call(this, opts, (err, data) => { -+ return err ? reject(err) : resolve(data) -+ }) -+ }) -+ } -+ -+ try { -+ this.dispatch(opts, new RequestHandler(opts, callback)) -+ } catch (err) { -+ if (typeof callback !== 'function') { -+ throw err -+ } -+ const opaque = opts && opts.opaque -+ queueMicrotask(() => callback(err, { opaque })) -+ } -+} -+ -+module.exports = request -+module.exports.RequestHandler = RequestHandler -+ -+ -+/***/ }), -+ -+/***/ 5789: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { finished, PassThrough } = __nccwpck_require__(2781) -+const { -+ InvalidArgumentError, -+ InvalidReturnValueError, -+ RequestAbortedError -+} = __nccwpck_require__(1878) -+const util = __nccwpck_require__(929) -+const { getResolveErrorBodyCallback } = __nccwpck_require__(2987) -+const { AsyncResource } = __nccwpck_require__(852) -+const { addSignal, removeSignal } = __nccwpck_require__(1176) -+ -+class StreamHandler extends AsyncResource { -+ constructor (opts, factory, callback) { -+ if (!opts || typeof opts !== 'object') { -+ throw new InvalidArgumentError('invalid opts') -+ } -+ -+ const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError } = opts -+ -+ try { -+ if (typeof callback !== 'function') { -+ throw new InvalidArgumentError('invalid callback') -+ } -+ -+ if (typeof factory !== 'function') { -+ throw new InvalidArgumentError('invalid factory') -+ } -+ -+ if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') { -+ throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget') -+ } -+ -+ if (method === 'CONNECT') { -+ throw new InvalidArgumentError('invalid method') -+ } -+ -+ if (onInfo && typeof onInfo !== 'function') { -+ throw new InvalidArgumentError('invalid onInfo callback') -+ } -+ -+ super('UNDICI_STREAM') -+ } catch (err) { -+ if (util.isStream(body)) { -+ util.destroy(body.on('error', util.nop), err) -+ } -+ throw err -+ } -+ -+ this.responseHeaders = responseHeaders || null -+ this.opaque = opaque || null -+ this.factory = factory -+ this.callback = callback -+ this.res = null -+ this.abort = null -+ this.context = null -+ this.trailers = null -+ this.body = body -+ this.onInfo = onInfo || null -+ this.throwOnError = throwOnError || false -+ -+ if (util.isStream(body)) { -+ body.on('error', (err) => { -+ this.onError(err) -+ }) -+ } -+ -+ addSignal(this, signal) -+ } -+ -+ onConnect (abort, context) { -+ if (!this.callback) { -+ throw new RequestAbortedError() -+ } -+ -+ this.abort = abort -+ this.context = context -+ } -+ -+ onHeaders (statusCode, rawHeaders, resume, statusMessage) { -+ const { factory, opaque, context, callback, responseHeaders } = this -+ -+ const headers = responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders) -+ -+ if (statusCode < 200) { -+ if (this.onInfo) { -+ this.onInfo({ statusCode, headers }) -+ } -+ return -+ } -+ -+ this.factory = null -+ -+ let res -+ -+ if (this.throwOnError && statusCode >= 400) { -+ const parsedHeaders = responseHeaders === 'raw' ? util.parseHeaders(rawHeaders) : headers -+ const contentType = parsedHeaders['content-type'] -+ res = new PassThrough() -+ -+ this.callback = null -+ this.runInAsyncScope(getResolveErrorBodyCallback, null, -+ { callback, body: res, contentType, statusCode, statusMessage, headers } -+ ) -+ } else { -+ if (factory === null) { -+ return -+ } -+ -+ res = this.runInAsyncScope(factory, null, { -+ statusCode, -+ headers, -+ opaque, -+ context -+ }) -+ -+ if ( -+ !res || -+ typeof res.write !== 'function' || -+ typeof res.end !== 'function' || -+ typeof res.on !== 'function' -+ ) { -+ throw new InvalidReturnValueError('expected Writable') -+ } -+ -+ // TODO: Avoid finished. It registers an unnecessary amount of listeners. -+ finished(res, { readable: false }, (err) => { -+ const { callback, res, opaque, trailers, abort } = this -+ -+ this.res = null -+ if (err || !res.readable) { -+ util.destroy(res, err) -+ } -+ -+ this.callback = null -+ this.runInAsyncScope(callback, null, err || null, { opaque, trailers }) -+ -+ if (err) { -+ abort() -+ } -+ }) -+ } -+ -+ res.on('drain', resume) -+ -+ this.res = res -+ -+ const needDrain = res.writableNeedDrain !== undefined -+ ? res.writableNeedDrain -+ : res._writableState && res._writableState.needDrain -+ -+ return needDrain !== true -+ } -+ -+ onData (chunk) { -+ const { res } = this -+ -+ return res ? res.write(chunk) : true -+ } -+ -+ onComplete (trailers) { -+ const { res } = this -+ -+ removeSignal(this) -+ -+ if (!res) { -+ return -+ } -+ -+ this.trailers = util.parseHeaders(trailers) -+ -+ res.end() -+ } -+ -+ onError (err) { -+ const { res, callback, opaque, body } = this -+ -+ removeSignal(this) -+ -+ this.factory = null -+ -+ if (res) { -+ this.res = null -+ util.destroy(res, err) -+ } else if (callback) { -+ this.callback = null -+ queueMicrotask(() => { -+ this.runInAsyncScope(callback, null, err, { opaque }) -+ }) -+ } -+ -+ if (body) { -+ this.body = null -+ util.destroy(body, err) -+ } -+ } -+} -+ -+function stream (opts, factory, callback) { -+ if (callback === undefined) { -+ return new Promise((resolve, reject) => { -+ stream.call(this, opts, factory, (err, data) => { -+ return err ? reject(err) : resolve(data) -+ }) -+ }) -+ } -+ -+ try { -+ this.dispatch(opts, new StreamHandler(opts, factory, callback)) -+ } catch (err) { -+ if (typeof callback !== 'function') { -+ throw err -+ } -+ const opaque = opts && opts.opaque -+ queueMicrotask(() => callback(err, { opaque })) -+ } -+} -+ -+module.exports = stream -+ -+ -+/***/ }), -+ -+/***/ 9910: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { InvalidArgumentError, RequestAbortedError, SocketError } = __nccwpck_require__(1878) -+const { AsyncResource } = __nccwpck_require__(852) -+const util = __nccwpck_require__(929) -+const { addSignal, removeSignal } = __nccwpck_require__(1176) -+const assert = __nccwpck_require__(9491) -+ -+class UpgradeHandler extends AsyncResource { -+ constructor (opts, callback) { -+ if (!opts || typeof opts !== 'object') { -+ throw new InvalidArgumentError('invalid opts') -+ } -+ -+ if (typeof callback !== 'function') { -+ throw new InvalidArgumentError('invalid callback') -+ } -+ -+ const { signal, opaque, responseHeaders } = opts -+ -+ if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') { -+ throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget') -+ } -+ -+ super('UNDICI_UPGRADE') -+ -+ this.responseHeaders = responseHeaders || null -+ this.opaque = opaque || null -+ this.callback = callback -+ this.abort = null -+ this.context = null -+ -+ addSignal(this, signal) -+ } -+ -+ onConnect (abort, context) { -+ if (!this.callback) { -+ throw new RequestAbortedError() -+ } -+ -+ this.abort = abort -+ this.context = null -+ } -+ -+ onHeaders () { -+ throw new SocketError('bad upgrade', null) -+ } -+ -+ onUpgrade (statusCode, rawHeaders, socket) { -+ const { callback, opaque, context } = this -+ -+ assert.strictEqual(statusCode, 101) -+ -+ removeSignal(this) -+ -+ this.callback = null -+ const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders) -+ this.runInAsyncScope(callback, null, null, { -+ headers, -+ socket, -+ opaque, -+ context -+ }) -+ } -+ -+ onError (err) { -+ const { callback, opaque } = this -+ -+ removeSignal(this) -+ -+ if (callback) { -+ this.callback = null -+ queueMicrotask(() => { -+ this.runInAsyncScope(callback, null, err, { opaque }) -+ }) -+ } -+ } -+} -+ -+function upgrade (opts, callback) { -+ if (callback === undefined) { -+ return new Promise((resolve, reject) => { -+ upgrade.call(this, opts, (err, data) => { -+ return err ? reject(err) : resolve(data) -+ }) -+ }) -+ } -+ -+ try { -+ const upgradeHandler = new UpgradeHandler(opts, callback) -+ this.dispatch({ -+ ...opts, -+ method: opts.method || 'GET', -+ upgrade: opts.protocol || 'Websocket' -+ }, upgradeHandler) -+ } catch (err) { -+ if (typeof callback !== 'function') { -+ throw err -+ } -+ const opaque = opts && opts.opaque -+ queueMicrotask(() => callback(err, { opaque })) -+ } -+} -+ -+module.exports = upgrade -+ -+ -+/***/ }), -+ -+/***/ 93: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+module.exports.request = __nccwpck_require__(6152) -+module.exports.stream = __nccwpck_require__(5789) -+module.exports.pipeline = __nccwpck_require__(5991) -+module.exports.upgrade = __nccwpck_require__(9910) -+module.exports.connect = __nccwpck_require__(5474) -+ -+ -+/***/ }), -+ -+/***/ 8369: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+// Ported from https://github.com/nodejs/undici/pull/907 -+ -+ -+ -+const assert = __nccwpck_require__(9491) -+const { Readable } = __nccwpck_require__(2781) -+const { RequestAbortedError, NotSupportedError, InvalidArgumentError } = __nccwpck_require__(1878) -+const util = __nccwpck_require__(929) -+const { ReadableStreamFrom, toUSVString } = __nccwpck_require__(929) -+ -+let Blob -+ -+const kConsume = Symbol('kConsume') -+const kReading = Symbol('kReading') -+const kBody = Symbol('kBody') -+const kAbort = Symbol('abort') -+const kContentType = Symbol('kContentType') -+ -+const noop = () => {} -+ -+module.exports = class BodyReadable extends Readable { -+ constructor ({ -+ resume, -+ abort, -+ contentType = '', -+ highWaterMark = 64 * 1024 // Same as nodejs fs streams. -+ }) { -+ super({ -+ autoDestroy: true, -+ read: resume, -+ highWaterMark -+ }) -+ -+ this._readableState.dataEmitted = false -+ -+ this[kAbort] = abort -+ this[kConsume] = null -+ this[kBody] = null -+ this[kContentType] = contentType -+ -+ // Is stream being consumed through Readable API? -+ // This is an optimization so that we avoid checking -+ // for 'data' and 'readable' listeners in the hot path -+ // inside push(). -+ this[kReading] = false -+ } -+ -+ destroy (err) { -+ if (this.destroyed) { -+ // Node < 16 -+ return this -+ } -+ -+ if (!err && !this._readableState.endEmitted) { -+ err = new RequestAbortedError() -+ } -+ -+ if (err) { -+ this[kAbort]() -+ } -+ -+ return super.destroy(err) -+ } -+ -+ emit (ev, ...args) { -+ if (ev === 'data') { -+ // Node < 16.7 -+ this._readableState.dataEmitted = true -+ } else if (ev === 'error') { -+ // Node < 16 -+ this._readableState.errorEmitted = true -+ } -+ return super.emit(ev, ...args) -+ } -+ -+ on (ev, ...args) { -+ if (ev === 'data' || ev === 'readable') { -+ this[kReading] = true -+ } -+ return super.on(ev, ...args) -+ } -+ -+ addListener (ev, ...args) { -+ return this.on(ev, ...args) -+ } -+ -+ off (ev, ...args) { -+ const ret = super.off(ev, ...args) -+ if (ev === 'data' || ev === 'readable') { -+ this[kReading] = ( -+ this.listenerCount('data') > 0 || -+ this.listenerCount('readable') > 0 -+ ) -+ } -+ return ret -+ } -+ -+ removeListener (ev, ...args) { -+ return this.off(ev, ...args) -+ } -+ -+ push (chunk) { -+ if (this[kConsume] && chunk !== null && this.readableLength === 0) { -+ consumePush(this[kConsume], chunk) -+ return this[kReading] ? super.push(chunk) : true -+ } -+ return super.push(chunk) -+ } -+ -+ // https://fetch.spec.whatwg.org/#dom-body-text -+ async text () { -+ return consume(this, 'text') -+ } -+ -+ // https://fetch.spec.whatwg.org/#dom-body-json -+ async json () { -+ return consume(this, 'json') -+ } -+ -+ // https://fetch.spec.whatwg.org/#dom-body-blob -+ async blob () { -+ return consume(this, 'blob') -+ } -+ -+ // https://fetch.spec.whatwg.org/#dom-body-arraybuffer -+ async arrayBuffer () { -+ return consume(this, 'arrayBuffer') -+ } -+ -+ // https://fetch.spec.whatwg.org/#dom-body-formdata -+ async formData () { -+ // TODO: Implement. -+ throw new NotSupportedError() -+ } -+ -+ // https://fetch.spec.whatwg.org/#dom-body-bodyused -+ get bodyUsed () { -+ return util.isDisturbed(this) -+ } -+ -+ // https://fetch.spec.whatwg.org/#dom-body-body -+ get body () { -+ if (!this[kBody]) { -+ this[kBody] = ReadableStreamFrom(this) -+ if (this[kConsume]) { -+ // TODO: Is this the best way to force a lock? -+ this[kBody].getReader() // Ensure stream is locked. -+ assert(this[kBody].locked) -+ } -+ } -+ return this[kBody] -+ } -+ -+ dump (opts) { -+ let limit = opts && Number.isFinite(opts.limit) ? opts.limit : 262144 -+ const signal = opts && opts.signal -+ -+ if (signal) { -+ try { -+ if (typeof signal !== 'object' || !('aborted' in signal)) { -+ throw new InvalidArgumentError('signal must be an AbortSignal') -+ } -+ util.throwIfAborted(signal) -+ } catch (err) { -+ return Promise.reject(err) -+ } -+ } -+ -+ if (this.closed) { -+ return Promise.resolve(null) -+ } -+ -+ return new Promise((resolve, reject) => { -+ const signalListenerCleanup = signal -+ ? util.addAbortListener(signal, () => { -+ this.destroy() -+ }) -+ : noop -+ -+ this -+ .on('close', function () { -+ signalListenerCleanup() -+ if (signal && signal.aborted) { -+ reject(signal.reason || Object.assign(new Error('The operation was aborted'), { name: 'AbortError' })) -+ } else { -+ resolve(null) -+ } -+ }) -+ .on('error', noop) -+ .on('data', function (chunk) { -+ limit -= chunk.length -+ if (limit <= 0) { -+ this.destroy() -+ } -+ }) -+ .resume() -+ }) -+ } -+} -+ -+// https://streams.spec.whatwg.org/#readablestream-locked -+function isLocked (self) { -+ // Consume is an implicit lock. -+ return (self[kBody] && self[kBody].locked === true) || self[kConsume] -+} -+ -+// https://fetch.spec.whatwg.org/#body-unusable -+function isUnusable (self) { -+ return util.isDisturbed(self) || isLocked(self) -+} -+ -+async function consume (stream, type) { -+ if (isUnusable(stream)) { -+ throw new TypeError('unusable') -+ } -+ -+ assert(!stream[kConsume]) -+ -+ return new Promise((resolve, reject) => { -+ stream[kConsume] = { -+ type, -+ stream, -+ resolve, -+ reject, -+ length: 0, -+ body: [] -+ } -+ -+ stream -+ .on('error', function (err) { -+ consumeFinish(this[kConsume], err) -+ }) -+ .on('close', function () { -+ if (this[kConsume].body !== null) { -+ consumeFinish(this[kConsume], new RequestAbortedError()) -+ } -+ }) -+ -+ process.nextTick(consumeStart, stream[kConsume]) -+ }) -+} -+ -+function consumeStart (consume) { -+ if (consume.body === null) { -+ return -+ } -+ -+ const { _readableState: state } = consume.stream -+ -+ for (const chunk of state.buffer) { -+ consumePush(consume, chunk) -+ } -+ -+ if (state.endEmitted) { -+ consumeEnd(this[kConsume]) -+ } else { -+ consume.stream.on('end', function () { -+ consumeEnd(this[kConsume]) -+ }) -+ } -+ -+ consume.stream.resume() -+ -+ while (consume.stream.read() != null) { -+ // Loop -+ } -+} -+ -+function consumeEnd (consume) { -+ const { type, body, resolve, stream, length } = consume -+ -+ try { -+ if (type === 'text') { -+ resolve(toUSVString(Buffer.concat(body))) -+ } else if (type === 'json') { -+ resolve(JSON.parse(Buffer.concat(body))) -+ } else if (type === 'arrayBuffer') { -+ const dst = new Uint8Array(length) -+ -+ let pos = 0 -+ for (const buf of body) { -+ dst.set(buf, pos) -+ pos += buf.byteLength -+ } -+ -+ resolve(dst.buffer) -+ } else if (type === 'blob') { -+ if (!Blob) { -+ Blob = (__nccwpck_require__(4300).Blob) -+ } -+ resolve(new Blob(body, { type: stream[kContentType] })) -+ } -+ -+ consumeFinish(consume) -+ } catch (err) { -+ stream.destroy(err) -+ } -+} -+ -+function consumePush (consume, chunk) { -+ consume.length += chunk.length -+ consume.body.push(chunk) -+} -+ -+function consumeFinish (consume, err) { -+ if (consume.body === null) { -+ return -+ } -+ -+ if (err) { -+ consume.reject(err) -+ } else { -+ consume.resolve() -+ } -+ -+ consume.type = null -+ consume.stream = null -+ consume.resolve = null -+ consume.reject = null -+ consume.length = 0 -+ consume.body = null -+} -+ -+ -+/***/ }), -+ -+/***/ 2987: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+const assert = __nccwpck_require__(9491) -+const { -+ ResponseStatusCodeError -+} = __nccwpck_require__(1878) -+const { toUSVString } = __nccwpck_require__(929) -+ -+async function getResolveErrorBodyCallback ({ callback, body, contentType, statusCode, statusMessage, headers }) { -+ assert(body) -+ -+ let chunks = [] -+ let limit = 0 -+ -+ for await (const chunk of body) { -+ chunks.push(chunk) -+ limit += chunk.length -+ if (limit > 128 * 1024) { -+ chunks = null -+ break -+ } -+ } -+ -+ if (statusCode === 204 || !contentType || !chunks) { -+ process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ''}`, statusCode, headers)) -+ return -+ } -+ -+ try { -+ if (contentType.startsWith('application/json')) { -+ const payload = JSON.parse(toUSVString(Buffer.concat(chunks))) -+ process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ''}`, statusCode, headers, payload)) -+ return -+ } -+ -+ if (contentType.startsWith('text/')) { -+ const payload = toUSVString(Buffer.concat(chunks)) -+ process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ''}`, statusCode, headers, payload)) -+ return -+ } -+ } catch (err) { -+ // Process in a fallback if error -+ } -+ -+ process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ''}`, statusCode, headers)) -+} -+ -+module.exports = { getResolveErrorBodyCallback } -+ -+ -+/***/ }), -+ -+/***/ 5935: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { -+ BalancedPoolMissingUpstreamError, -+ InvalidArgumentError -+} = __nccwpck_require__(1878) -+const { -+ PoolBase, -+ kClients, -+ kNeedDrain, -+ kAddClient, -+ kRemoveClient, -+ kGetDispatcher -+} = __nccwpck_require__(5756) -+const Pool = __nccwpck_require__(7921) -+const { kUrl, kInterceptors } = __nccwpck_require__(3745) -+const { parseOrigin } = __nccwpck_require__(929) -+const kFactory = Symbol('factory') -+ -+const kOptions = Symbol('options') -+const kGreatestCommonDivisor = Symbol('kGreatestCommonDivisor') -+const kCurrentWeight = Symbol('kCurrentWeight') -+const kIndex = Symbol('kIndex') -+const kWeight = Symbol('kWeight') -+const kMaxWeightPerServer = Symbol('kMaxWeightPerServer') -+const kErrorPenalty = Symbol('kErrorPenalty') -+ -+function getGreatestCommonDivisor (a, b) { -+ if (b === 0) return a -+ return getGreatestCommonDivisor(b, a % b) -+} -+ -+function defaultFactory (origin, opts) { -+ return new Pool(origin, opts) -+} -+ -+class BalancedPool extends PoolBase { -+ constructor (upstreams = [], { factory = defaultFactory, ...opts } = {}) { -+ super() -+ -+ this[kOptions] = opts -+ this[kIndex] = -1 -+ this[kCurrentWeight] = 0 -+ -+ this[kMaxWeightPerServer] = this[kOptions].maxWeightPerServer || 100 -+ this[kErrorPenalty] = this[kOptions].errorPenalty || 15 -+ -+ if (!Array.isArray(upstreams)) { -+ upstreams = [upstreams] -+ } -+ -+ if (typeof factory !== 'function') { -+ throw new InvalidArgumentError('factory must be a function.') -+ } -+ -+ this[kInterceptors] = opts.interceptors && opts.interceptors.BalancedPool && Array.isArray(opts.interceptors.BalancedPool) -+ ? opts.interceptors.BalancedPool -+ : [] -+ this[kFactory] = factory -+ -+ for (const upstream of upstreams) { -+ this.addUpstream(upstream) -+ } -+ this._updateBalancedPoolStats() -+ } -+ -+ addUpstream (upstream) { -+ const upstreamOrigin = parseOrigin(upstream).origin -+ -+ if (this[kClients].find((pool) => ( -+ pool[kUrl].origin === upstreamOrigin && -+ pool.closed !== true && -+ pool.destroyed !== true -+ ))) { -+ return this -+ } -+ const pool = this[kFactory](upstreamOrigin, Object.assign({}, this[kOptions])) -+ -+ this[kAddClient](pool) -+ pool.on('connect', () => { -+ pool[kWeight] = Math.min(this[kMaxWeightPerServer], pool[kWeight] + this[kErrorPenalty]) -+ }) -+ -+ pool.on('connectionError', () => { -+ pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty]) -+ this._updateBalancedPoolStats() -+ }) -+ -+ pool.on('disconnect', (...args) => { -+ const err = args[2] -+ if (err && err.code === 'UND_ERR_SOCKET') { -+ // decrease the weight of the pool. -+ pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty]) -+ this._updateBalancedPoolStats() -+ } -+ }) -+ -+ for (const client of this[kClients]) { -+ client[kWeight] = this[kMaxWeightPerServer] -+ } -+ -+ this._updateBalancedPoolStats() -+ -+ return this -+ } -+ -+ _updateBalancedPoolStats () { -+ this[kGreatestCommonDivisor] = this[kClients].map(p => p[kWeight]).reduce(getGreatestCommonDivisor, 0) -+ } -+ -+ removeUpstream (upstream) { -+ const upstreamOrigin = parseOrigin(upstream).origin -+ -+ const pool = this[kClients].find((pool) => ( -+ pool[kUrl].origin === upstreamOrigin && -+ pool.closed !== true && -+ pool.destroyed !== true -+ )) -+ -+ if (pool) { -+ this[kRemoveClient](pool) -+ } -+ -+ return this -+ } -+ -+ get upstreams () { -+ return this[kClients] -+ .filter(dispatcher => dispatcher.closed !== true && dispatcher.destroyed !== true) -+ .map((p) => p[kUrl].origin) -+ } -+ -+ [kGetDispatcher] () { -+ // We validate that pools is greater than 0, -+ // otherwise we would have to wait until an upstream -+ // is added, which might never happen. -+ if (this[kClients].length === 0) { -+ throw new BalancedPoolMissingUpstreamError() -+ } -+ -+ const dispatcher = this[kClients].find(dispatcher => ( -+ !dispatcher[kNeedDrain] && -+ dispatcher.closed !== true && -+ dispatcher.destroyed !== true -+ )) -+ -+ if (!dispatcher) { -+ return -+ } -+ -+ const allClientsBusy = this[kClients].map(pool => pool[kNeedDrain]).reduce((a, b) => a && b, true) -+ -+ if (allClientsBusy) { -+ return -+ } -+ -+ let counter = 0 -+ -+ let maxWeightIndex = this[kClients].findIndex(pool => !pool[kNeedDrain]) -+ -+ while (counter++ < this[kClients].length) { -+ this[kIndex] = (this[kIndex] + 1) % this[kClients].length -+ const pool = this[kClients][this[kIndex]] -+ -+ // find pool index with the largest weight -+ if (pool[kWeight] > this[kClients][maxWeightIndex][kWeight] && !pool[kNeedDrain]) { -+ maxWeightIndex = this[kIndex] -+ } -+ -+ // decrease the current weight every `this[kClients].length`. -+ if (this[kIndex] === 0) { -+ // Set the current weight to the next lower weight. -+ this[kCurrentWeight] = this[kCurrentWeight] - this[kGreatestCommonDivisor] -+ -+ if (this[kCurrentWeight] <= 0) { -+ this[kCurrentWeight] = this[kMaxWeightPerServer] -+ } -+ } -+ if (pool[kWeight] >= this[kCurrentWeight] && (!pool[kNeedDrain])) { -+ return pool -+ } -+ } -+ -+ this[kCurrentWeight] = this[kClients][maxWeightIndex][kWeight] -+ this[kIndex] = maxWeightIndex -+ return this[kClients][maxWeightIndex] -+ } -+} -+ -+module.exports = BalancedPool -+ -+ -+/***/ }), -+ -+/***/ 2054: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { kConstruct } = __nccwpck_require__(2969) -+const { urlEquals, fieldValues: getFieldValues } = __nccwpck_require__(3417) -+const { kEnumerableProperty, isDisturbed } = __nccwpck_require__(929) -+const { kHeadersList } = __nccwpck_require__(3745) -+const { webidl } = __nccwpck_require__(5611) -+const { Response, cloneResponse } = __nccwpck_require__(433) -+const { Request } = __nccwpck_require__(1587) -+const { kState, kHeaders, kGuard, kRealm } = __nccwpck_require__(8069) -+const { fetching } = __nccwpck_require__(8000) -+const { urlIsHttpHttpsScheme, createDeferredPromise, readAllBytes } = __nccwpck_require__(1554) -+const assert = __nccwpck_require__(9491) -+const { getGlobalDispatcher } = __nccwpck_require__(7718) -+ -+/** -+ * @see https://w3c.github.io/ServiceWorker/#dfn-cache-batch-operation -+ * @typedef {Object} CacheBatchOperation -+ * @property {'delete' | 'put'} type -+ * @property {any} request -+ * @property {any} response -+ * @property {import('../../types/cache').CacheQueryOptions} options -+ */ -+ -+/** -+ * @see https://w3c.github.io/ServiceWorker/#dfn-request-response-list -+ * @typedef {[any, any][]} requestResponseList -+ */ -+ -+class Cache { -+ /** -+ * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-request-response-list -+ * @type {requestResponseList} -+ */ -+ #relevantRequestResponseList -+ -+ constructor () { -+ if (arguments[0] !== kConstruct) { -+ webidl.illegalConstructor() -+ } -+ -+ this.#relevantRequestResponseList = arguments[1] -+ } -+ -+ async match (request, options = {}) { -+ webidl.brandCheck(this, Cache) -+ webidl.argumentLengthCheck(arguments, 1, { header: 'Cache.match' }) -+ -+ request = webidl.converters.RequestInfo(request) -+ options = webidl.converters.CacheQueryOptions(options) -+ -+ const p = await this.matchAll(request, options) -+ -+ if (p.length === 0) { -+ return -+ } -+ -+ return p[0] -+ } -+ -+ async matchAll (request = undefined, options = {}) { -+ webidl.brandCheck(this, Cache) -+ -+ if (request !== undefined) request = webidl.converters.RequestInfo(request) -+ options = webidl.converters.CacheQueryOptions(options) -+ -+ // 1. -+ let r = null -+ -+ // 2. -+ if (request !== undefined) { -+ if (request instanceof Request) { -+ // 2.1.1 -+ r = request[kState] -+ -+ // 2.1.2 -+ if (r.method !== 'GET' && !options.ignoreMethod) { -+ return [] -+ } -+ } else if (typeof request === 'string') { -+ // 2.2.1 -+ r = new Request(request)[kState] -+ } -+ } -+ -+ // 5. -+ // 5.1 -+ const responses = [] -+ -+ // 5.2 -+ if (request === undefined) { -+ // 5.2.1 -+ for (const requestResponse of this.#relevantRequestResponseList) { -+ responses.push(requestResponse[1]) -+ } -+ } else { // 5.3 -+ // 5.3.1 -+ const requestResponses = this.#queryCache(r, options) -+ -+ // 5.3.2 -+ for (const requestResponse of requestResponses) { -+ responses.push(requestResponse[1]) -+ } -+ } -+ -+ // 5.4 -+ // We don't implement CORs so we don't need to loop over the responses, yay! -+ -+ // 5.5.1 -+ const responseList = [] -+ -+ // 5.5.2 -+ for (const response of responses) { -+ // 5.5.2.1 -+ const responseObject = new Response(response.body?.source ?? null) -+ const body = responseObject[kState].body -+ responseObject[kState] = response -+ responseObject[kState].body = body -+ responseObject[kHeaders][kHeadersList] = response.headersList -+ responseObject[kHeaders][kGuard] = 'immutable' -+ -+ responseList.push(responseObject) -+ } -+ -+ // 6. -+ return Object.freeze(responseList) -+ } -+ -+ async add (request) { -+ webidl.brandCheck(this, Cache) -+ webidl.argumentLengthCheck(arguments, 1, { header: 'Cache.add' }) -+ -+ request = webidl.converters.RequestInfo(request) -+ -+ // 1. -+ const requests = [request] -+ -+ // 2. -+ const responseArrayPromise = this.addAll(requests) -+ -+ // 3. -+ return await responseArrayPromise -+ } -+ -+ async addAll (requests) { -+ webidl.brandCheck(this, Cache) -+ webidl.argumentLengthCheck(arguments, 1, { header: 'Cache.addAll' }) -+ -+ requests = webidl.converters['sequence'](requests) -+ -+ // 1. -+ const responsePromises = [] -+ -+ // 2. -+ const requestList = [] -+ -+ // 3. -+ for (const request of requests) { -+ if (typeof request === 'string') { -+ continue -+ } -+ -+ // 3.1 -+ const r = request[kState] -+ -+ // 3.2 -+ if (!urlIsHttpHttpsScheme(r.url) || r.method !== 'GET') { -+ throw webidl.errors.exception({ -+ header: 'Cache.addAll', -+ message: 'Expected http/s scheme when method is not GET.' -+ }) -+ } -+ } -+ -+ // 4. -+ /** @type {ReturnType[]} */ -+ const fetchControllers = [] -+ -+ // 5. -+ for (const request of requests) { -+ // 5.1 -+ const r = new Request(request)[kState] -+ -+ // 5.2 -+ if (!urlIsHttpHttpsScheme(r.url)) { -+ throw webidl.errors.exception({ -+ header: 'Cache.addAll', -+ message: 'Expected http/s scheme.' -+ }) -+ } -+ -+ // 5.4 -+ r.initiator = 'fetch' -+ r.destination = 'subresource' -+ -+ // 5.5 -+ requestList.push(r) -+ -+ // 5.6 -+ const responsePromise = createDeferredPromise() -+ -+ // 5.7 -+ fetchControllers.push(fetching({ -+ request: r, -+ dispatcher: getGlobalDispatcher(), -+ processResponse (response) { -+ // 1. -+ if (response.type === 'error' || response.status === 206 || response.status < 200 || response.status > 299) { -+ responsePromise.reject(webidl.errors.exception({ -+ header: 'Cache.addAll', -+ message: 'Received an invalid status code or the request failed.' -+ })) -+ } else if (response.headersList.contains('vary')) { // 2. -+ // 2.1 -+ const fieldValues = getFieldValues(response.headersList.get('vary')) -+ -+ // 2.2 -+ for (const fieldValue of fieldValues) { -+ // 2.2.1 -+ if (fieldValue === '*') { -+ responsePromise.reject(webidl.errors.exception({ -+ header: 'Cache.addAll', -+ message: 'invalid vary field value' -+ })) -+ -+ for (const controller of fetchControllers) { -+ controller.abort() -+ } -+ -+ return -+ } -+ } -+ } -+ }, -+ processResponseEndOfBody (response) { -+ // 1. -+ if (response.aborted) { -+ responsePromise.reject(new DOMException('aborted', 'AbortError')) -+ return -+ } -+ -+ // 2. -+ responsePromise.resolve(response) -+ } -+ })) -+ -+ // 5.8 -+ responsePromises.push(responsePromise.promise) -+ } -+ -+ // 6. -+ const p = Promise.all(responsePromises) -+ -+ // 7. -+ const responses = await p -+ -+ // 7.1 -+ const operations = [] -+ -+ // 7.2 -+ let index = 0 -+ -+ // 7.3 -+ for (const response of responses) { -+ // 7.3.1 -+ /** @type {CacheBatchOperation} */ -+ const operation = { -+ type: 'put', // 7.3.2 -+ request: requestList[index], // 7.3.3 -+ response // 7.3.4 -+ } -+ -+ operations.push(operation) // 7.3.5 -+ -+ index++ // 7.3.6 -+ } -+ -+ // 7.5 -+ const cacheJobPromise = createDeferredPromise() -+ -+ // 7.6.1 -+ let errorData = null -+ -+ // 7.6.2 -+ try { -+ this.#batchCacheOperations(operations) -+ } catch (e) { -+ errorData = e -+ } -+ -+ // 7.6.3 -+ queueMicrotask(() => { -+ // 7.6.3.1 -+ if (errorData === null) { -+ cacheJobPromise.resolve(undefined) -+ } else { -+ // 7.6.3.2 -+ cacheJobPromise.reject(errorData) -+ } -+ }) -+ -+ // 7.7 -+ return cacheJobPromise.promise -+ } -+ -+ async put (request, response) { -+ webidl.brandCheck(this, Cache) -+ webidl.argumentLengthCheck(arguments, 2, { header: 'Cache.put' }) -+ -+ request = webidl.converters.RequestInfo(request) -+ response = webidl.converters.Response(response) -+ -+ // 1. -+ let innerRequest = null -+ -+ // 2. -+ if (request instanceof Request) { -+ innerRequest = request[kState] -+ } else { // 3. -+ innerRequest = new Request(request)[kState] -+ } -+ -+ // 4. -+ if (!urlIsHttpHttpsScheme(innerRequest.url) || innerRequest.method !== 'GET') { -+ throw webidl.errors.exception({ -+ header: 'Cache.put', -+ message: 'Expected an http/s scheme when method is not GET' -+ }) -+ } -+ -+ // 5. -+ const innerResponse = response[kState] -+ -+ // 6. -+ if (innerResponse.status === 206) { -+ throw webidl.errors.exception({ -+ header: 'Cache.put', -+ message: 'Got 206 status' -+ }) -+ } -+ -+ // 7. -+ if (innerResponse.headersList.contains('vary')) { -+ // 7.1. -+ const fieldValues = getFieldValues(innerResponse.headersList.get('vary')) -+ -+ // 7.2. -+ for (const fieldValue of fieldValues) { -+ // 7.2.1 -+ if (fieldValue === '*') { -+ throw webidl.errors.exception({ -+ header: 'Cache.put', -+ message: 'Got * vary field value' -+ }) -+ } -+ } -+ } -+ -+ // 8. -+ if (innerResponse.body && (isDisturbed(innerResponse.body.stream) || innerResponse.body.stream.locked)) { -+ throw webidl.errors.exception({ -+ header: 'Cache.put', -+ message: 'Response body is locked or disturbed' -+ }) -+ } -+ -+ // 9. -+ const clonedResponse = cloneResponse(innerResponse) -+ -+ // 10. -+ const bodyReadPromise = createDeferredPromise() -+ -+ // 11. -+ if (innerResponse.body != null) { -+ // 11.1 -+ const stream = innerResponse.body.stream -+ -+ // 11.2 -+ const reader = stream.getReader() -+ -+ // 11.3 -+ readAllBytes(reader).then(bodyReadPromise.resolve, bodyReadPromise.reject) -+ } else { -+ bodyReadPromise.resolve(undefined) -+ } -+ -+ // 12. -+ /** @type {CacheBatchOperation[]} */ -+ const operations = [] -+ -+ // 13. -+ /** @type {CacheBatchOperation} */ -+ const operation = { -+ type: 'put', // 14. -+ request: innerRequest, // 15. -+ response: clonedResponse // 16. -+ } -+ -+ // 17. -+ operations.push(operation) -+ -+ // 19. -+ const bytes = await bodyReadPromise.promise -+ -+ if (clonedResponse.body != null) { -+ clonedResponse.body.source = bytes -+ } -+ -+ // 19.1 -+ const cacheJobPromise = createDeferredPromise() -+ -+ // 19.2.1 -+ let errorData = null -+ -+ // 19.2.2 -+ try { -+ this.#batchCacheOperations(operations) -+ } catch (e) { -+ errorData = e -+ } -+ -+ // 19.2.3 -+ queueMicrotask(() => { -+ // 19.2.3.1 -+ if (errorData === null) { -+ cacheJobPromise.resolve() -+ } else { // 19.2.3.2 -+ cacheJobPromise.reject(errorData) -+ } -+ }) -+ -+ return cacheJobPromise.promise -+ } -+ -+ async delete (request, options = {}) { -+ webidl.brandCheck(this, Cache) -+ webidl.argumentLengthCheck(arguments, 1, { header: 'Cache.delete' }) -+ -+ request = webidl.converters.RequestInfo(request) -+ options = webidl.converters.CacheQueryOptions(options) -+ -+ /** -+ * @type {Request} -+ */ -+ let r = null -+ -+ if (request instanceof Request) { -+ r = request[kState] -+ -+ if (r.method !== 'GET' && !options.ignoreMethod) { -+ return false -+ } -+ } else { -+ assert(typeof request === 'string') -+ -+ r = new Request(request)[kState] -+ } -+ -+ /** @type {CacheBatchOperation[]} */ -+ const operations = [] -+ -+ /** @type {CacheBatchOperation} */ -+ const operation = { -+ type: 'delete', -+ request: r, -+ options -+ } -+ -+ operations.push(operation) -+ -+ const cacheJobPromise = createDeferredPromise() -+ -+ let errorData = null -+ let requestResponses -+ -+ try { -+ requestResponses = this.#batchCacheOperations(operations) -+ } catch (e) { -+ errorData = e -+ } -+ -+ queueMicrotask(() => { -+ if (errorData === null) { -+ cacheJobPromise.resolve(!!requestResponses?.length) -+ } else { -+ cacheJobPromise.reject(errorData) -+ } -+ }) -+ -+ return cacheJobPromise.promise -+ } -+ -+ /** -+ * @see https://w3c.github.io/ServiceWorker/#dom-cache-keys -+ * @param {any} request -+ * @param {import('../../types/cache').CacheQueryOptions} options -+ * @returns {readonly Request[]} -+ */ -+ async keys (request = undefined, options = {}) { -+ webidl.brandCheck(this, Cache) -+ -+ if (request !== undefined) request = webidl.converters.RequestInfo(request) -+ options = webidl.converters.CacheQueryOptions(options) -+ -+ // 1. -+ let r = null -+ -+ // 2. -+ if (request !== undefined) { -+ // 2.1 -+ if (request instanceof Request) { -+ // 2.1.1 -+ r = request[kState] -+ -+ // 2.1.2 -+ if (r.method !== 'GET' && !options.ignoreMethod) { -+ return [] -+ } -+ } else if (typeof request === 'string') { // 2.2 -+ r = new Request(request)[kState] -+ } -+ } -+ -+ // 4. -+ const promise = createDeferredPromise() -+ -+ // 5. -+ // 5.1 -+ const requests = [] -+ -+ // 5.2 -+ if (request === undefined) { -+ // 5.2.1 -+ for (const requestResponse of this.#relevantRequestResponseList) { -+ // 5.2.1.1 -+ requests.push(requestResponse[0]) -+ } -+ } else { // 5.3 -+ // 5.3.1 -+ const requestResponses = this.#queryCache(r, options) -+ -+ // 5.3.2 -+ for (const requestResponse of requestResponses) { -+ // 5.3.2.1 -+ requests.push(requestResponse[0]) -+ } -+ } -+ -+ // 5.4 -+ queueMicrotask(() => { -+ // 5.4.1 -+ const requestList = [] -+ -+ // 5.4.2 -+ for (const request of requests) { -+ const requestObject = new Request('https://a') -+ requestObject[kState] = request -+ requestObject[kHeaders][kHeadersList] = request.headersList -+ requestObject[kHeaders][kGuard] = 'immutable' -+ requestObject[kRealm] = request.client -+ -+ // 5.4.2.1 -+ requestList.push(requestObject) -+ } -+ -+ // 5.4.3 -+ promise.resolve(Object.freeze(requestList)) -+ }) -+ -+ return promise.promise -+ } -+ -+ /** -+ * @see https://w3c.github.io/ServiceWorker/#batch-cache-operations-algorithm -+ * @param {CacheBatchOperation[]} operations -+ * @returns {requestResponseList} -+ */ -+ #batchCacheOperations (operations) { -+ // 1. -+ const cache = this.#relevantRequestResponseList -+ -+ // 2. -+ const backupCache = [...cache] -+ -+ // 3. -+ const addedItems = [] -+ -+ // 4.1 -+ const resultList = [] -+ -+ try { -+ // 4.2 -+ for (const operation of operations) { -+ // 4.2.1 -+ if (operation.type !== 'delete' && operation.type !== 'put') { -+ throw webidl.errors.exception({ -+ header: 'Cache.#batchCacheOperations', -+ message: 'operation type does not match "delete" or "put"' -+ }) -+ } -+ -+ // 4.2.2 -+ if (operation.type === 'delete' && operation.response != null) { -+ throw webidl.errors.exception({ -+ header: 'Cache.#batchCacheOperations', -+ message: 'delete operation should not have an associated response' -+ }) -+ } -+ -+ // 4.2.3 -+ if (this.#queryCache(operation.request, operation.options, addedItems).length) { -+ throw new DOMException('???', 'InvalidStateError') -+ } -+ -+ // 4.2.4 -+ let requestResponses -+ -+ // 4.2.5 -+ if (operation.type === 'delete') { -+ // 4.2.5.1 -+ requestResponses = this.#queryCache(operation.request, operation.options) -+ -+ // TODO: the spec is wrong, this is needed to pass WPTs -+ if (requestResponses.length === 0) { -+ return [] -+ } -+ -+ // 4.2.5.2 -+ for (const requestResponse of requestResponses) { -+ const idx = cache.indexOf(requestResponse) -+ assert(idx !== -1) -+ -+ // 4.2.5.2.1 -+ cache.splice(idx, 1) -+ } -+ } else if (operation.type === 'put') { // 4.2.6 -+ // 4.2.6.1 -+ if (operation.response == null) { -+ throw webidl.errors.exception({ -+ header: 'Cache.#batchCacheOperations', -+ message: 'put operation should have an associated response' -+ }) -+ } -+ -+ // 4.2.6.2 -+ const r = operation.request -+ -+ // 4.2.6.3 -+ if (!urlIsHttpHttpsScheme(r.url)) { -+ throw webidl.errors.exception({ -+ header: 'Cache.#batchCacheOperations', -+ message: 'expected http or https scheme' -+ }) -+ } -+ -+ // 4.2.6.4 -+ if (r.method !== 'GET') { -+ throw webidl.errors.exception({ -+ header: 'Cache.#batchCacheOperations', -+ message: 'not get method' -+ }) -+ } -+ -+ // 4.2.6.5 -+ if (operation.options != null) { -+ throw webidl.errors.exception({ -+ header: 'Cache.#batchCacheOperations', -+ message: 'options must not be defined' -+ }) -+ } -+ -+ // 4.2.6.6 -+ requestResponses = this.#queryCache(operation.request) -+ -+ // 4.2.6.7 -+ for (const requestResponse of requestResponses) { -+ const idx = cache.indexOf(requestResponse) -+ assert(idx !== -1) -+ -+ // 4.2.6.7.1 -+ cache.splice(idx, 1) -+ } -+ -+ // 4.2.6.8 -+ cache.push([operation.request, operation.response]) -+ -+ // 4.2.6.10 -+ addedItems.push([operation.request, operation.response]) -+ } -+ -+ // 4.2.7 -+ resultList.push([operation.request, operation.response]) -+ } -+ -+ // 4.3 -+ return resultList -+ } catch (e) { // 5. -+ // 5.1 -+ this.#relevantRequestResponseList.length = 0 -+ -+ // 5.2 -+ this.#relevantRequestResponseList = backupCache -+ -+ // 5.3 -+ throw e -+ } -+ } -+ -+ /** -+ * @see https://w3c.github.io/ServiceWorker/#query-cache -+ * @param {any} requestQuery -+ * @param {import('../../types/cache').CacheQueryOptions} options -+ * @param {requestResponseList} targetStorage -+ * @returns {requestResponseList} -+ */ -+ #queryCache (requestQuery, options, targetStorage) { -+ /** @type {requestResponseList} */ -+ const resultList = [] -+ -+ const storage = targetStorage ?? this.#relevantRequestResponseList -+ -+ for (const requestResponse of storage) { -+ const [cachedRequest, cachedResponse] = requestResponse -+ if (this.#requestMatchesCachedItem(requestQuery, cachedRequest, cachedResponse, options)) { -+ resultList.push(requestResponse) -+ } -+ } -+ -+ return resultList -+ } -+ -+ /** -+ * @see https://w3c.github.io/ServiceWorker/#request-matches-cached-item-algorithm -+ * @param {any} requestQuery -+ * @param {any} request -+ * @param {any | null} response -+ * @param {import('../../types/cache').CacheQueryOptions | undefined} options -+ * @returns {boolean} -+ */ -+ #requestMatchesCachedItem (requestQuery, request, response = null, options) { -+ // if (options?.ignoreMethod === false && request.method === 'GET') { -+ // return false -+ // } -+ -+ const queryURL = new URL(requestQuery.url) -+ -+ const cachedURL = new URL(request.url) -+ -+ if (options?.ignoreSearch) { -+ cachedURL.search = '' -+ -+ queryURL.search = '' -+ } -+ -+ if (!urlEquals(queryURL, cachedURL, true)) { -+ return false -+ } -+ -+ if ( -+ response == null || -+ options?.ignoreVary || -+ !response.headersList.contains('vary') -+ ) { -+ return true -+ } -+ -+ const fieldValues = getFieldValues(response.headersList.get('vary')) -+ -+ for (const fieldValue of fieldValues) { -+ if (fieldValue === '*') { -+ return false -+ } -+ -+ const requestValue = request.headersList.get(fieldValue) -+ const queryValue = requestQuery.headersList.get(fieldValue) -+ -+ // If one has the header and the other doesn't, or one has -+ // a different value than the other, return false -+ if (requestValue !== queryValue) { -+ return false -+ } -+ } -+ -+ return true -+ } -+} -+ -+Object.defineProperties(Cache.prototype, { -+ [Symbol.toStringTag]: { -+ value: 'Cache', -+ configurable: true -+ }, -+ match: kEnumerableProperty, -+ matchAll: kEnumerableProperty, -+ add: kEnumerableProperty, -+ addAll: kEnumerableProperty, -+ put: kEnumerableProperty, -+ delete: kEnumerableProperty, -+ keys: kEnumerableProperty -+}) -+ -+const cacheQueryOptionConverters = [ -+ { -+ key: 'ignoreSearch', -+ converter: webidl.converters.boolean, -+ defaultValue: false -+ }, -+ { -+ key: 'ignoreMethod', -+ converter: webidl.converters.boolean, -+ defaultValue: false -+ }, -+ { -+ key: 'ignoreVary', -+ converter: webidl.converters.boolean, -+ defaultValue: false -+ } -+] -+ -+webidl.converters.CacheQueryOptions = webidl.dictionaryConverter(cacheQueryOptionConverters) -+ -+webidl.converters.MultiCacheQueryOptions = webidl.dictionaryConverter([ -+ ...cacheQueryOptionConverters, -+ { -+ key: 'cacheName', -+ converter: webidl.converters.DOMString -+ } -+]) -+ -+webidl.converters.Response = webidl.interfaceConverter(Response) -+ -+webidl.converters['sequence'] = webidl.sequenceConverter( -+ webidl.converters.RequestInfo -+) -+ -+module.exports = { -+ Cache -+} -+ -+ -+/***/ }), -+ -+/***/ 5511: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { kConstruct } = __nccwpck_require__(2969) -+const { Cache } = __nccwpck_require__(2054) -+const { webidl } = __nccwpck_require__(5611) -+const { kEnumerableProperty } = __nccwpck_require__(929) -+ -+class CacheStorage { -+ /** -+ * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-name-to-cache-map -+ * @type {Map} -+ */ -+ async has (cacheName) { -+ webidl.brandCheck(this, CacheStorage) -+ webidl.argumentLengthCheck(arguments, 1, { header: 'CacheStorage.has' }) -+ -+ cacheName = webidl.converters.DOMString(cacheName) -+ -+ // 2.1.1 -+ // 2.2 -+ return this.#caches.has(cacheName) -+ } -+ -+ /** -+ * @see https://w3c.github.io/ServiceWorker/#dom-cachestorage-open -+ * @param {string} cacheName -+ * @returns {Promise} -+ */ -+ async open (cacheName) { -+ webidl.brandCheck(this, CacheStorage) -+ webidl.argumentLengthCheck(arguments, 1, { header: 'CacheStorage.open' }) -+ -+ cacheName = webidl.converters.DOMString(cacheName) -+ -+ // 2.1 -+ if (this.#caches.has(cacheName)) { -+ // await caches.open('v1') !== await caches.open('v1') -+ -+ // 2.1.1 -+ const cache = this.#caches.get(cacheName) -+ -+ // 2.1.1.1 -+ return new Cache(kConstruct, cache) -+ } -+ -+ // 2.2 -+ const cache = [] -+ -+ // 2.3 -+ this.#caches.set(cacheName, cache) -+ -+ // 2.4 -+ return new Cache(kConstruct, cache) -+ } -+ -+ /** -+ * @see https://w3c.github.io/ServiceWorker/#cache-storage-delete -+ * @param {string} cacheName -+ * @returns {Promise} -+ */ -+ async delete (cacheName) { -+ webidl.brandCheck(this, CacheStorage) -+ webidl.argumentLengthCheck(arguments, 1, { header: 'CacheStorage.delete' }) -+ -+ cacheName = webidl.converters.DOMString(cacheName) -+ -+ return this.#caches.delete(cacheName) -+ } -+ -+ /** -+ * @see https://w3c.github.io/ServiceWorker/#cache-storage-keys -+ * @returns {string[]} -+ */ -+ async keys () { -+ webidl.brandCheck(this, CacheStorage) -+ -+ // 2.1 -+ const keys = this.#caches.keys() -+ -+ // 2.2 -+ return [...keys] -+ } -+} -+ -+Object.defineProperties(CacheStorage.prototype, { -+ [Symbol.toStringTag]: { -+ value: 'CacheStorage', -+ configurable: true -+ }, -+ match: kEnumerableProperty, -+ has: kEnumerableProperty, -+ open: kEnumerableProperty, -+ delete: kEnumerableProperty, -+ keys: kEnumerableProperty -+}) -+ -+module.exports = { -+ CacheStorage -+} -+ -+ -+/***/ }), -+ -+/***/ 2969: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+module.exports = { -+ kConstruct: (__nccwpck_require__(3745).kConstruct) -+} -+ -+ -+/***/ }), -+ -+/***/ 3417: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const assert = __nccwpck_require__(9491) -+const { URLSerializer } = __nccwpck_require__(1827) -+const { isValidHeaderName } = __nccwpck_require__(1554) -+ -+/** -+ * @see https://url.spec.whatwg.org/#concept-url-equals -+ * @param {URL} A -+ * @param {URL} B -+ * @param {boolean | undefined} excludeFragment -+ * @returns {boolean} -+ */ -+function urlEquals (A, B, excludeFragment = false) { -+ const serializedA = URLSerializer(A, excludeFragment) -+ -+ const serializedB = URLSerializer(B, excludeFragment) -+ -+ return serializedA === serializedB -+} -+ -+/** -+ * @see https://github.com/chromium/chromium/blob/694d20d134cb553d8d89e5500b9148012b1ba299/content/browser/cache_storage/cache_storage_cache.cc#L260-L262 -+ * @param {string} header -+ */ -+function fieldValues (header) { -+ assert(header !== null) -+ -+ const values = [] -+ -+ for (let value of header.split(',')) { -+ value = value.trim() -+ -+ if (!value.length) { -+ continue -+ } else if (!isValidHeaderName(value)) { -+ continue -+ } -+ -+ values.push(value) -+ } -+ -+ return values -+} -+ -+module.exports = { -+ urlEquals, -+ fieldValues -+} -+ -+ -+/***/ }), -+ -+/***/ 1813: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+// @ts-check -+ -+ -+ -+/* global WebAssembly */ -+ -+const assert = __nccwpck_require__(9491) -+const net = __nccwpck_require__(1808) -+const http = __nccwpck_require__(3685) -+const { pipeline } = __nccwpck_require__(2781) -+const util = __nccwpck_require__(929) -+const timers = __nccwpck_require__(8752) -+const Request = __nccwpck_require__(9901) -+const DispatcherBase = __nccwpck_require__(6552) -+const { -+ RequestContentLengthMismatchError, -+ ResponseContentLengthMismatchError, -+ InvalidArgumentError, -+ RequestAbortedError, -+ HeadersTimeoutError, -+ HeadersOverflowError, -+ SocketError, -+ InformationalError, -+ BodyTimeoutError, -+ HTTPParserError, -+ ResponseExceededMaxSizeError, -+ ClientDestroyedError -+} = __nccwpck_require__(1878) -+const buildConnector = __nccwpck_require__(7483) -+const { -+ kUrl, -+ kReset, -+ kServerName, -+ kClient, -+ kBusy, -+ kParser, -+ kConnect, -+ kBlocking, -+ kResuming, -+ kRunning, -+ kPending, -+ kSize, -+ kWriting, -+ kQueue, -+ kConnected, -+ kConnecting, -+ kNeedDrain, -+ kNoRef, -+ kKeepAliveDefaultTimeout, -+ kHostHeader, -+ kPendingIdx, -+ kRunningIdx, -+ kError, -+ kPipelining, -+ kSocket, -+ kKeepAliveTimeoutValue, -+ kMaxHeadersSize, -+ kKeepAliveMaxTimeout, -+ kKeepAliveTimeoutThreshold, -+ kHeadersTimeout, -+ kBodyTimeout, -+ kStrictContentLength, -+ kConnector, -+ kMaxRedirections, -+ kMaxRequests, -+ kCounter, -+ kClose, -+ kDestroy, -+ kDispatch, -+ kInterceptors, -+ kLocalAddress, -+ kMaxResponseSize, -+ kHTTPConnVersion, -+ // HTTP2 -+ kHost, -+ kHTTP2Session, -+ kHTTP2SessionState, -+ kHTTP2BuildRequest, -+ kHTTP2CopyHeaders, -+ kHTTP1BuildRequest -+} = __nccwpck_require__(3745) -+ -+/** @type {import('http2')} */ -+let http2 -+try { -+ http2 = __nccwpck_require__(5158) -+} catch { -+ // @ts-ignore -+ http2 = { constants: {} } -+} -+ -+const { -+ constants: { -+ HTTP2_HEADER_AUTHORITY, -+ HTTP2_HEADER_METHOD, -+ HTTP2_HEADER_PATH, -+ HTTP2_HEADER_SCHEME, -+ HTTP2_HEADER_CONTENT_LENGTH, -+ HTTP2_HEADER_EXPECT, -+ HTTP2_HEADER_STATUS -+ } -+} = http2 -+ -+// Experimental -+let h2ExperimentalWarned = false -+ -+const FastBuffer = Buffer[Symbol.species] -+ -+const kClosedResolve = Symbol('kClosedResolve') -+ -+const channels = {} -+ -+try { -+ const diagnosticsChannel = __nccwpck_require__(7643) -+ channels.sendHeaders = diagnosticsChannel.channel('undici:client:sendHeaders') -+ channels.beforeConnect = diagnosticsChannel.channel('undici:client:beforeConnect') -+ channels.connectError = diagnosticsChannel.channel('undici:client:connectError') -+ channels.connected = diagnosticsChannel.channel('undici:client:connected') -+} catch { -+ channels.sendHeaders = { hasSubscribers: false } -+ channels.beforeConnect = { hasSubscribers: false } -+ channels.connectError = { hasSubscribers: false } -+ channels.connected = { hasSubscribers: false } -+} -+ -+/** -+ * @type {import('../types/client').default} -+ */ -+class Client extends DispatcherBase { -+ /** -+ * -+ * @param {string|URL} url -+ * @param {import('../types/client').Client.Options} options -+ */ -+ constructor (url, { -+ interceptors, -+ maxHeaderSize, -+ headersTimeout, -+ socketTimeout, -+ requestTimeout, -+ connectTimeout, -+ bodyTimeout, -+ idleTimeout, -+ keepAlive, -+ keepAliveTimeout, -+ maxKeepAliveTimeout, -+ keepAliveMaxTimeout, -+ keepAliveTimeoutThreshold, -+ socketPath, -+ pipelining, -+ tls, -+ strictContentLength, -+ maxCachedSessions, -+ maxRedirections, -+ connect, -+ maxRequestsPerClient, -+ localAddress, -+ maxResponseSize, -+ autoSelectFamily, -+ autoSelectFamilyAttemptTimeout, -+ // h2 -+ allowH2, -+ maxConcurrentStreams -+ } = {}) { -+ super() -+ -+ if (keepAlive !== undefined) { -+ throw new InvalidArgumentError('unsupported keepAlive, use pipelining=0 instead') -+ } -+ -+ if (socketTimeout !== undefined) { -+ throw new InvalidArgumentError('unsupported socketTimeout, use headersTimeout & bodyTimeout instead') -+ } -+ -+ if (requestTimeout !== undefined) { -+ throw new InvalidArgumentError('unsupported requestTimeout, use headersTimeout & bodyTimeout instead') -+ } -+ -+ if (idleTimeout !== undefined) { -+ throw new InvalidArgumentError('unsupported idleTimeout, use keepAliveTimeout instead') -+ } -+ -+ if (maxKeepAliveTimeout !== undefined) { -+ throw new InvalidArgumentError('unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead') -+ } -+ -+ if (maxHeaderSize != null && !Number.isFinite(maxHeaderSize)) { -+ throw new InvalidArgumentError('invalid maxHeaderSize') -+ } -+ -+ if (socketPath != null && typeof socketPath !== 'string') { -+ throw new InvalidArgumentError('invalid socketPath') -+ } -+ -+ if (connectTimeout != null && (!Number.isFinite(connectTimeout) || connectTimeout < 0)) { -+ throw new InvalidArgumentError('invalid connectTimeout') -+ } -+ -+ if (keepAliveTimeout != null && (!Number.isFinite(keepAliveTimeout) || keepAliveTimeout <= 0)) { -+ throw new InvalidArgumentError('invalid keepAliveTimeout') -+ } -+ -+ if (keepAliveMaxTimeout != null && (!Number.isFinite(keepAliveMaxTimeout) || keepAliveMaxTimeout <= 0)) { -+ throw new InvalidArgumentError('invalid keepAliveMaxTimeout') -+ } -+ -+ if (keepAliveTimeoutThreshold != null && !Number.isFinite(keepAliveTimeoutThreshold)) { -+ throw new InvalidArgumentError('invalid keepAliveTimeoutThreshold') -+ } -+ -+ if (headersTimeout != null && (!Number.isInteger(headersTimeout) || headersTimeout < 0)) { -+ throw new InvalidArgumentError('headersTimeout must be a positive integer or zero') -+ } -+ -+ if (bodyTimeout != null && (!Number.isInteger(bodyTimeout) || bodyTimeout < 0)) { -+ throw new InvalidArgumentError('bodyTimeout must be a positive integer or zero') -+ } -+ -+ if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') { -+ throw new InvalidArgumentError('connect must be a function or an object') -+ } -+ -+ if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) { -+ throw new InvalidArgumentError('maxRedirections must be a positive number') -+ } -+ -+ if (maxRequestsPerClient != null && (!Number.isInteger(maxRequestsPerClient) || maxRequestsPerClient < 0)) { -+ throw new InvalidArgumentError('maxRequestsPerClient must be a positive number') -+ } -+ -+ if (localAddress != null && (typeof localAddress !== 'string' || net.isIP(localAddress) === 0)) { -+ throw new InvalidArgumentError('localAddress must be valid string IP address') -+ } -+ -+ if (maxResponseSize != null && (!Number.isInteger(maxResponseSize) || maxResponseSize < -1)) { -+ throw new InvalidArgumentError('maxResponseSize must be a positive number') -+ } -+ -+ if ( -+ autoSelectFamilyAttemptTimeout != null && -+ (!Number.isInteger(autoSelectFamilyAttemptTimeout) || autoSelectFamilyAttemptTimeout < -1) -+ ) { -+ throw new InvalidArgumentError('autoSelectFamilyAttemptTimeout must be a positive number') -+ } -+ -+ // h2 -+ if (allowH2 != null && typeof allowH2 !== 'boolean') { -+ throw new InvalidArgumentError('allowH2 must be a valid boolean value') -+ } -+ -+ if (maxConcurrentStreams != null && (typeof maxConcurrentStreams !== 'number' || maxConcurrentStreams < 1)) { -+ throw new InvalidArgumentError('maxConcurrentStreams must be a possitive integer, greater than 0') -+ } -+ -+ if (typeof connect !== 'function') { -+ connect = buildConnector({ -+ ...tls, -+ maxCachedSessions, -+ allowH2, -+ socketPath, -+ timeout: connectTimeout, -+ ...(util.nodeHasAutoSelectFamily && autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined), -+ ...connect -+ }) -+ } -+ -+ this[kInterceptors] = interceptors && interceptors.Client && Array.isArray(interceptors.Client) -+ ? interceptors.Client -+ : [createRedirectInterceptor({ maxRedirections })] -+ this[kUrl] = util.parseOrigin(url) -+ this[kConnector] = connect -+ this[kSocket] = null -+ this[kPipelining] = pipelining != null ? pipelining : 1 -+ this[kMaxHeadersSize] = maxHeaderSize || http.maxHeaderSize -+ this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout -+ this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 600e3 : keepAliveMaxTimeout -+ this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 1e3 : keepAliveTimeoutThreshold -+ this[kKeepAliveTimeoutValue] = this[kKeepAliveDefaultTimeout] -+ this[kServerName] = null -+ this[kLocalAddress] = localAddress != null ? localAddress : null -+ this[kResuming] = 0 // 0, idle, 1, scheduled, 2 resuming -+ this[kNeedDrain] = 0 // 0, idle, 1, scheduled, 2 resuming -+ this[kHostHeader] = `host: ${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ''}\r\n` -+ this[kBodyTimeout] = bodyTimeout != null ? bodyTimeout : 300e3 -+ this[kHeadersTimeout] = headersTimeout != null ? headersTimeout : 300e3 -+ this[kStrictContentLength] = strictContentLength == null ? true : strictContentLength -+ this[kMaxRedirections] = maxRedirections -+ this[kMaxRequests] = maxRequestsPerClient -+ this[kClosedResolve] = null -+ this[kMaxResponseSize] = maxResponseSize > -1 ? maxResponseSize : -1 -+ this[kHTTPConnVersion] = 'h1' -+ -+ // HTTP/2 -+ this[kHTTP2Session] = null -+ this[kHTTP2SessionState] = !allowH2 -+ ? null -+ : { -+ // streams: null, // Fixed queue of streams - For future support of `push` -+ openStreams: 0, // Keep track of them to decide wether or not unref the session -+ maxConcurrentStreams: maxConcurrentStreams != null ? maxConcurrentStreams : 100 // Max peerConcurrentStreams for a Node h2 server -+ } -+ this[kHost] = `${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ''}` -+ -+ // kQueue is built up of 3 sections separated by -+ // the kRunningIdx and kPendingIdx indices. -+ // | complete | running | pending | -+ // ^ kRunningIdx ^ kPendingIdx ^ kQueue.length -+ // kRunningIdx points to the first running element. -+ // kPendingIdx points to the first pending element. -+ // This implements a fast queue with an amortized -+ // time of O(1). -+ -+ this[kQueue] = [] -+ this[kRunningIdx] = 0 -+ this[kPendingIdx] = 0 -+ } -+ -+ get pipelining () { -+ return this[kPipelining] -+ } -+ -+ set pipelining (value) { -+ this[kPipelining] = value -+ resume(this, true) -+ } -+ -+ get [kPending] () { -+ return this[kQueue].length - this[kPendingIdx] -+ } -+ -+ get [kRunning] () { -+ return this[kPendingIdx] - this[kRunningIdx] -+ } -+ -+ get [kSize] () { -+ return this[kQueue].length - this[kRunningIdx] -+ } -+ -+ get [kConnected] () { -+ return !!this[kSocket] && !this[kConnecting] && !this[kSocket].destroyed -+ } -+ -+ get [kBusy] () { -+ const socket = this[kSocket] -+ return ( -+ (socket && (socket[kReset] || socket[kWriting] || socket[kBlocking])) || -+ (this[kSize] >= (this[kPipelining] || 1)) || -+ this[kPending] > 0 -+ ) -+ } -+ -+ /* istanbul ignore: only used for test */ -+ [kConnect] (cb) { -+ connect(this) -+ this.once('connect', cb) -+ } -+ -+ [kDispatch] (opts, handler) { -+ const origin = opts.origin || this[kUrl].origin -+ -+ const request = this[kHTTPConnVersion] === 'h2' -+ ? Request[kHTTP2BuildRequest](origin, opts, handler) -+ : Request[kHTTP1BuildRequest](origin, opts, handler) -+ -+ this[kQueue].push(request) -+ if (this[kResuming]) { -+ // Do nothing. -+ } else if (util.bodyLength(request.body) == null && util.isIterable(request.body)) { -+ // Wait a tick in case stream/iterator is ended in the same tick. -+ this[kResuming] = 1 -+ process.nextTick(resume, this) -+ } else { -+ resume(this, true) -+ } -+ -+ if (this[kResuming] && this[kNeedDrain] !== 2 && this[kBusy]) { -+ this[kNeedDrain] = 2 -+ } -+ -+ return this[kNeedDrain] < 2 -+ } -+ -+ async [kClose] () { -+ // TODO: for H2 we need to gracefully flush the remaining enqueued -+ // request and close each stream. -+ return new Promise((resolve) => { -+ if (!this[kSize]) { -+ resolve(null) -+ } else { -+ this[kClosedResolve] = resolve -+ } -+ }) -+ } -+ -+ async [kDestroy] (err) { -+ return new Promise((resolve) => { -+ const requests = this[kQueue].splice(this[kPendingIdx]) -+ for (let i = 0; i < requests.length; i++) { -+ const request = requests[i] -+ errorRequest(this, request, err) -+ } -+ -+ const callback = () => { -+ if (this[kClosedResolve]) { -+ // TODO (fix): Should we error here with ClientDestroyedError? -+ this[kClosedResolve]() -+ this[kClosedResolve] = null -+ } -+ resolve() -+ } -+ -+ if (this[kHTTP2Session] != null) { -+ util.destroy(this[kHTTP2Session], err) -+ this[kHTTP2Session] = null -+ this[kHTTP2SessionState] = null -+ } -+ -+ if (!this[kSocket]) { -+ queueMicrotask(callback) -+ } else { -+ util.destroy(this[kSocket].on('close', callback), err) -+ } -+ -+ resume(this) -+ }) -+ } -+} -+ -+function onHttp2SessionError (err) { -+ assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID') -+ -+ this[kSocket][kError] = err -+ -+ onError(this[kClient], err) -+} -+ -+function onHttp2FrameError (type, code, id) { -+ const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`) -+ -+ if (id === 0) { -+ this[kSocket][kError] = err -+ onError(this[kClient], err) -+ } -+} -+ -+function onHttp2SessionEnd () { -+ util.destroy(this, new SocketError('other side closed')) -+ util.destroy(this[kSocket], new SocketError('other side closed')) -+} -+ -+function onHTTP2GoAway (code) { -+ const client = this[kClient] -+ const err = new InformationalError(`HTTP/2: "GOAWAY" frame received with code ${code}`) -+ client[kSocket] = null -+ client[kHTTP2Session] = null -+ -+ if (client.destroyed) { -+ assert(this[kPending] === 0) -+ -+ // Fail entire queue. -+ const requests = client[kQueue].splice(client[kRunningIdx]) -+ for (let i = 0; i < requests.length; i++) { -+ const request = requests[i] -+ errorRequest(this, request, err) -+ } -+ } else if (client[kRunning] > 0) { -+ // Fail head of pipeline. -+ const request = client[kQueue][client[kRunningIdx]] -+ client[kQueue][client[kRunningIdx]++] = null -+ -+ errorRequest(client, request, err) -+ } -+ -+ client[kPendingIdx] = client[kRunningIdx] -+ -+ assert(client[kRunning] === 0) -+ -+ client.emit('disconnect', -+ client[kUrl], -+ [client], -+ err -+ ) -+ -+ resume(client) -+} -+ -+const constants = __nccwpck_require__(2655) -+const createRedirectInterceptor = __nccwpck_require__(9597) -+const EMPTY_BUF = Buffer.alloc(0) -+ -+async function lazyllhttp () { -+ const llhttpWasmData = process.env.JEST_WORKER_ID ? __nccwpck_require__(5102) : undefined -+ -+ let mod -+ try { -+ mod = await WebAssembly.compile(Buffer.from(__nccwpck_require__(6062), 'base64')) -+ } catch (e) { -+ /* istanbul ignore next */ -+ -+ // We could check if the error was caused by the simd option not -+ // being enabled, but the occurring of this other error -+ // * https://github.com/emscripten-core/emscripten/issues/11495 -+ // got me to remove that check to avoid breaking Node 12. -+ mod = await WebAssembly.compile(Buffer.from(llhttpWasmData || __nccwpck_require__(5102), 'base64')) -+ } -+ -+ return await WebAssembly.instantiate(mod, { -+ env: { -+ /* eslint-disable camelcase */ -+ -+ wasm_on_url: (p, at, len) => { -+ /* istanbul ignore next */ -+ return 0 -+ }, -+ wasm_on_status: (p, at, len) => { -+ assert.strictEqual(currentParser.ptr, p) -+ const start = at - currentBufferPtr + currentBufferRef.byteOffset -+ return currentParser.onStatus(new FastBuffer(currentBufferRef.buffer, start, len)) || 0 -+ }, -+ wasm_on_message_begin: (p) => { -+ assert.strictEqual(currentParser.ptr, p) -+ return currentParser.onMessageBegin() || 0 -+ }, -+ wasm_on_header_field: (p, at, len) => { -+ assert.strictEqual(currentParser.ptr, p) -+ const start = at - currentBufferPtr + currentBufferRef.byteOffset -+ return currentParser.onHeaderField(new FastBuffer(currentBufferRef.buffer, start, len)) || 0 -+ }, -+ wasm_on_header_value: (p, at, len) => { -+ assert.strictEqual(currentParser.ptr, p) -+ const start = at - currentBufferPtr + currentBufferRef.byteOffset -+ return currentParser.onHeaderValue(new FastBuffer(currentBufferRef.buffer, start, len)) || 0 -+ }, -+ wasm_on_headers_complete: (p, statusCode, upgrade, shouldKeepAlive) => { -+ assert.strictEqual(currentParser.ptr, p) -+ return currentParser.onHeadersComplete(statusCode, Boolean(upgrade), Boolean(shouldKeepAlive)) || 0 -+ }, -+ wasm_on_body: (p, at, len) => { -+ assert.strictEqual(currentParser.ptr, p) -+ const start = at - currentBufferPtr + currentBufferRef.byteOffset -+ return currentParser.onBody(new FastBuffer(currentBufferRef.buffer, start, len)) || 0 -+ }, -+ wasm_on_message_complete: (p) => { -+ assert.strictEqual(currentParser.ptr, p) -+ return currentParser.onMessageComplete() || 0 -+ } -+ -+ /* eslint-enable camelcase */ -+ } -+ }) -+} -+ -+let llhttpInstance = null -+let llhttpPromise = lazyllhttp() -+llhttpPromise.catch() -+ -+let currentParser = null -+let currentBufferRef = null -+let currentBufferSize = 0 -+let currentBufferPtr = null -+ -+const TIMEOUT_HEADERS = 1 -+const TIMEOUT_BODY = 2 -+const TIMEOUT_IDLE = 3 -+ -+class Parser { -+ constructor (client, socket, { exports }) { -+ assert(Number.isFinite(client[kMaxHeadersSize]) && client[kMaxHeadersSize] > 0) -+ -+ this.llhttp = exports -+ this.ptr = this.llhttp.llhttp_alloc(constants.TYPE.RESPONSE) -+ this.client = client -+ this.socket = socket -+ this.timeout = null -+ this.timeoutValue = null -+ this.timeoutType = null -+ this.statusCode = null -+ this.statusText = '' -+ this.upgrade = false -+ this.headers = [] -+ this.headersSize = 0 -+ this.headersMaxSize = client[kMaxHeadersSize] -+ this.shouldKeepAlive = false -+ this.paused = false -+ this.resume = this.resume.bind(this) -+ -+ this.bytesRead = 0 -+ -+ this.keepAlive = '' -+ this.contentLength = '' -+ this.connection = '' -+ this.maxResponseSize = client[kMaxResponseSize] -+ } -+ -+ setTimeout (value, type) { -+ this.timeoutType = type -+ if (value !== this.timeoutValue) { -+ timers.clearTimeout(this.timeout) -+ if (value) { -+ this.timeout = timers.setTimeout(onParserTimeout, value, this) -+ // istanbul ignore else: only for jest -+ if (this.timeout.unref) { -+ this.timeout.unref() -+ } -+ } else { -+ this.timeout = null -+ } -+ this.timeoutValue = value -+ } else if (this.timeout) { -+ // istanbul ignore else: only for jest -+ if (this.timeout.refresh) { -+ this.timeout.refresh() -+ } -+ } -+ } -+ -+ resume () { -+ if (this.socket.destroyed || !this.paused) { -+ return -+ } -+ -+ assert(this.ptr != null) -+ assert(currentParser == null) -+ -+ this.llhttp.llhttp_resume(this.ptr) -+ -+ assert(this.timeoutType === TIMEOUT_BODY) -+ if (this.timeout) { -+ // istanbul ignore else: only for jest -+ if (this.timeout.refresh) { -+ this.timeout.refresh() -+ } -+ } -+ -+ this.paused = false -+ this.execute(this.socket.read() || EMPTY_BUF) // Flush parser. -+ this.readMore() -+ } -+ -+ readMore () { -+ while (!this.paused && this.ptr) { -+ const chunk = this.socket.read() -+ if (chunk === null) { -+ break -+ } -+ this.execute(chunk) -+ } -+ } -+ -+ execute (data) { -+ assert(this.ptr != null) -+ assert(currentParser == null) -+ assert(!this.paused) -+ -+ const { socket, llhttp } = this -+ -+ if (data.length > currentBufferSize) { -+ if (currentBufferPtr) { -+ llhttp.free(currentBufferPtr) -+ } -+ currentBufferSize = Math.ceil(data.length / 4096) * 4096 -+ currentBufferPtr = llhttp.malloc(currentBufferSize) -+ } -+ -+ new Uint8Array(llhttp.memory.buffer, currentBufferPtr, currentBufferSize).set(data) -+ -+ // Call `execute` on the wasm parser. -+ // We pass the `llhttp_parser` pointer address, the pointer address of buffer view data, -+ // and finally the length of bytes to parse. -+ // The return value is an error code or `constants.ERROR.OK`. -+ try { -+ let ret -+ -+ try { -+ currentBufferRef = data -+ currentParser = this -+ ret = llhttp.llhttp_execute(this.ptr, currentBufferPtr, data.length) -+ /* eslint-disable-next-line no-useless-catch */ -+ } catch (err) { -+ /* istanbul ignore next: difficult to make a test case for */ -+ throw err -+ } finally { -+ currentParser = null -+ currentBufferRef = null -+ } -+ -+ const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr -+ -+ if (ret === constants.ERROR.PAUSED_UPGRADE) { -+ this.onUpgrade(data.slice(offset)) -+ } else if (ret === constants.ERROR.PAUSED) { -+ this.paused = true -+ socket.unshift(data.slice(offset)) -+ } else if (ret !== constants.ERROR.OK) { -+ const ptr = llhttp.llhttp_get_error_reason(this.ptr) -+ let message = '' -+ /* istanbul ignore else: difficult to make a test case for */ -+ if (ptr) { -+ const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0) -+ message = -+ 'Response does not match the HTTP/1.1 protocol (' + -+ Buffer.from(llhttp.memory.buffer, ptr, len).toString() + -+ ')' -+ } -+ throw new HTTPParserError(message, constants.ERROR[ret], data.slice(offset)) -+ } -+ } catch (err) { -+ util.destroy(socket, err) -+ } -+ } -+ -+ destroy () { -+ assert(this.ptr != null) -+ assert(currentParser == null) -+ -+ this.llhttp.llhttp_free(this.ptr) -+ this.ptr = null -+ -+ timers.clearTimeout(this.timeout) -+ this.timeout = null -+ this.timeoutValue = null -+ this.timeoutType = null -+ -+ this.paused = false -+ } -+ -+ onStatus (buf) { -+ this.statusText = buf.toString() -+ } -+ -+ onMessageBegin () { -+ const { socket, client } = this -+ -+ /* istanbul ignore next: difficult to make a test case for */ -+ if (socket.destroyed) { -+ return -1 -+ } -+ -+ const request = client[kQueue][client[kRunningIdx]] -+ if (!request) { -+ return -1 -+ } -+ } -+ -+ onHeaderField (buf) { -+ const len = this.headers.length -+ -+ if ((len & 1) === 0) { -+ this.headers.push(buf) -+ } else { -+ this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf]) -+ } -+ -+ this.trackHeader(buf.length) -+ } -+ -+ onHeaderValue (buf) { -+ let len = this.headers.length -+ -+ if ((len & 1) === 1) { -+ this.headers.push(buf) -+ len += 1 -+ } else { -+ this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf]) -+ } -+ -+ const key = this.headers[len - 2] -+ if (key.length === 10 && key.toString().toLowerCase() === 'keep-alive') { -+ this.keepAlive += buf.toString() -+ } else if (key.length === 10 && key.toString().toLowerCase() === 'connection') { -+ this.connection += buf.toString() -+ } else if (key.length === 14 && key.toString().toLowerCase() === 'content-length') { -+ this.contentLength += buf.toString() -+ } -+ -+ this.trackHeader(buf.length) -+ } -+ -+ trackHeader (len) { -+ this.headersSize += len -+ if (this.headersSize >= this.headersMaxSize) { -+ util.destroy(this.socket, new HeadersOverflowError()) -+ } -+ } -+ -+ onUpgrade (head) { -+ const { upgrade, client, socket, headers, statusCode } = this -+ -+ assert(upgrade) -+ -+ const request = client[kQueue][client[kRunningIdx]] -+ assert(request) -+ -+ assert(!socket.destroyed) -+ assert(socket === client[kSocket]) -+ assert(!this.paused) -+ assert(request.upgrade || request.method === 'CONNECT') -+ -+ this.statusCode = null -+ this.statusText = '' -+ this.shouldKeepAlive = null -+ -+ assert(this.headers.length % 2 === 0) -+ this.headers = [] -+ this.headersSize = 0 -+ -+ socket.unshift(head) -+ -+ socket[kParser].destroy() -+ socket[kParser] = null -+ -+ socket[kClient] = null -+ socket[kError] = null -+ socket -+ .removeListener('error', onSocketError) -+ .removeListener('readable', onSocketReadable) -+ .removeListener('end', onSocketEnd) -+ .removeListener('close', onSocketClose) -+ -+ client[kSocket] = null -+ client[kQueue][client[kRunningIdx]++] = null -+ client.emit('disconnect', client[kUrl], [client], new InformationalError('upgrade')) -+ -+ try { -+ request.onUpgrade(statusCode, headers, socket) -+ } catch (err) { -+ util.destroy(socket, err) -+ } -+ -+ resume(client) -+ } -+ -+ onHeadersComplete (statusCode, upgrade, shouldKeepAlive) { -+ const { client, socket, headers, statusText } = this -+ -+ /* istanbul ignore next: difficult to make a test case for */ -+ if (socket.destroyed) { -+ return -1 -+ } -+ -+ const request = client[kQueue][client[kRunningIdx]] -+ -+ /* istanbul ignore next: difficult to make a test case for */ -+ if (!request) { -+ return -1 -+ } -+ -+ assert(!this.upgrade) -+ assert(this.statusCode < 200) -+ -+ if (statusCode === 100) { -+ util.destroy(socket, new SocketError('bad response', util.getSocketInfo(socket))) -+ return -1 -+ } -+ -+ /* this can only happen if server is misbehaving */ -+ if (upgrade && !request.upgrade) { -+ util.destroy(socket, new SocketError('bad upgrade', util.getSocketInfo(socket))) -+ return -1 -+ } -+ -+ assert.strictEqual(this.timeoutType, TIMEOUT_HEADERS) -+ -+ this.statusCode = statusCode -+ this.shouldKeepAlive = ( -+ shouldKeepAlive || -+ // Override llhttp value which does not allow keepAlive for HEAD. -+ (request.method === 'HEAD' && !socket[kReset] && this.connection.toLowerCase() === 'keep-alive') -+ ) -+ -+ if (this.statusCode >= 200) { -+ const bodyTimeout = request.bodyTimeout != null -+ ? request.bodyTimeout -+ : client[kBodyTimeout] -+ this.setTimeout(bodyTimeout, TIMEOUT_BODY) -+ } else if (this.timeout) { -+ // istanbul ignore else: only for jest -+ if (this.timeout.refresh) { -+ this.timeout.refresh() -+ } -+ } -+ -+ if (request.method === 'CONNECT') { -+ assert(client[kRunning] === 1) -+ this.upgrade = true -+ return 2 -+ } -+ -+ if (upgrade) { -+ assert(client[kRunning] === 1) -+ this.upgrade = true -+ return 2 -+ } -+ -+ assert(this.headers.length % 2 === 0) -+ this.headers = [] -+ this.headersSize = 0 -+ -+ if (this.shouldKeepAlive && client[kPipelining]) { -+ const keepAliveTimeout = this.keepAlive ? util.parseKeepAliveTimeout(this.keepAlive) : null -+ -+ if (keepAliveTimeout != null) { -+ const timeout = Math.min( -+ keepAliveTimeout - client[kKeepAliveTimeoutThreshold], -+ client[kKeepAliveMaxTimeout] -+ ) -+ if (timeout <= 0) { -+ socket[kReset] = true -+ } else { -+ client[kKeepAliveTimeoutValue] = timeout -+ } -+ } else { -+ client[kKeepAliveTimeoutValue] = client[kKeepAliveDefaultTimeout] -+ } -+ } else { -+ // Stop more requests from being dispatched. -+ socket[kReset] = true -+ } -+ -+ const pause = request.onHeaders(statusCode, headers, this.resume, statusText) === false -+ -+ if (request.aborted) { -+ return -1 -+ } -+ -+ if (request.method === 'HEAD') { -+ return 1 -+ } -+ -+ if (statusCode < 200) { -+ return 1 -+ } -+ -+ if (socket[kBlocking]) { -+ socket[kBlocking] = false -+ resume(client) -+ } -+ -+ return pause ? constants.ERROR.PAUSED : 0 -+ } -+ -+ onBody (buf) { -+ const { client, socket, statusCode, maxResponseSize } = this -+ -+ if (socket.destroyed) { -+ return -1 -+ } -+ -+ const request = client[kQueue][client[kRunningIdx]] -+ assert(request) -+ -+ assert.strictEqual(this.timeoutType, TIMEOUT_BODY) -+ if (this.timeout) { -+ // istanbul ignore else: only for jest -+ if (this.timeout.refresh) { -+ this.timeout.refresh() -+ } -+ } -+ -+ assert(statusCode >= 200) -+ -+ if (maxResponseSize > -1 && this.bytesRead + buf.length > maxResponseSize) { -+ util.destroy(socket, new ResponseExceededMaxSizeError()) -+ return -1 -+ } -+ -+ this.bytesRead += buf.length -+ -+ if (request.onData(buf) === false) { -+ return constants.ERROR.PAUSED -+ } -+ } -+ -+ onMessageComplete () { -+ const { client, socket, statusCode, upgrade, headers, contentLength, bytesRead, shouldKeepAlive } = this -+ -+ if (socket.destroyed && (!statusCode || shouldKeepAlive)) { -+ return -1 -+ } -+ -+ if (upgrade) { -+ return -+ } -+ -+ const request = client[kQueue][client[kRunningIdx]] -+ assert(request) -+ -+ assert(statusCode >= 100) -+ -+ this.statusCode = null -+ this.statusText = '' -+ this.bytesRead = 0 -+ this.contentLength = '' -+ this.keepAlive = '' -+ this.connection = '' -+ -+ assert(this.headers.length % 2 === 0) -+ this.headers = [] -+ this.headersSize = 0 -+ -+ if (statusCode < 200) { -+ return -+ } -+ -+ /* istanbul ignore next: should be handled by llhttp? */ -+ if (request.method !== 'HEAD' && contentLength && bytesRead !== parseInt(contentLength, 10)) { -+ util.destroy(socket, new ResponseContentLengthMismatchError()) -+ return -1 -+ } -+ -+ request.onComplete(headers) -+ -+ client[kQueue][client[kRunningIdx]++] = null -+ -+ if (socket[kWriting]) { -+ assert.strictEqual(client[kRunning], 0) -+ // Response completed before request. -+ util.destroy(socket, new InformationalError('reset')) -+ return constants.ERROR.PAUSED -+ } else if (!shouldKeepAlive) { -+ util.destroy(socket, new InformationalError('reset')) -+ return constants.ERROR.PAUSED -+ } else if (socket[kReset] && client[kRunning] === 0) { -+ // Destroy socket once all requests have completed. -+ // The request at the tail of the pipeline is the one -+ // that requested reset and no further requests should -+ // have been queued since then. -+ util.destroy(socket, new InformationalError('reset')) -+ return constants.ERROR.PAUSED -+ } else if (client[kPipelining] === 1) { -+ // We must wait a full event loop cycle to reuse this socket to make sure -+ // that non-spec compliant servers are not closing the connection even if they -+ // said they won't. -+ setImmediate(resume, client) -+ } else { -+ resume(client) -+ } -+ } -+} -+ -+function onParserTimeout (parser) { -+ const { socket, timeoutType, client } = parser -+ -+ /* istanbul ignore else */ -+ if (timeoutType === TIMEOUT_HEADERS) { -+ if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) { -+ assert(!parser.paused, 'cannot be paused while waiting for headers') -+ util.destroy(socket, new HeadersTimeoutError()) -+ } -+ } else if (timeoutType === TIMEOUT_BODY) { -+ if (!parser.paused) { -+ util.destroy(socket, new BodyTimeoutError()) -+ } -+ } else if (timeoutType === TIMEOUT_IDLE) { -+ assert(client[kRunning] === 0 && client[kKeepAliveTimeoutValue]) -+ util.destroy(socket, new InformationalError('socket idle timeout')) -+ } -+} -+ -+function onSocketReadable () { -+ const { [kParser]: parser } = this -+ if (parser) { -+ parser.readMore() -+ } -+} -+ -+function onSocketError (err) { -+ const { [kClient]: client, [kParser]: parser } = this -+ -+ assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID') -+ -+ if (client[kHTTPConnVersion] !== 'h2') { -+ // On Mac OS, we get an ECONNRESET even if there is a full body to be forwarded -+ // to the user. -+ if (err.code === 'ECONNRESET' && parser.statusCode && !parser.shouldKeepAlive) { -+ // We treat all incoming data so for as a valid response. -+ parser.onMessageComplete() -+ return -+ } -+ } -+ -+ this[kError] = err -+ -+ onError(this[kClient], err) -+} -+ -+function onError (client, err) { -+ if ( -+ client[kRunning] === 0 && -+ err.code !== 'UND_ERR_INFO' && -+ err.code !== 'UND_ERR_SOCKET' -+ ) { -+ // Error is not caused by running request and not a recoverable -+ // socket error. -+ -+ assert(client[kPendingIdx] === client[kRunningIdx]) -+ -+ const requests = client[kQueue].splice(client[kRunningIdx]) -+ for (let i = 0; i < requests.length; i++) { -+ const request = requests[i] -+ errorRequest(client, request, err) -+ } -+ assert(client[kSize] === 0) -+ } -+} -+ -+function onSocketEnd () { -+ const { [kParser]: parser, [kClient]: client } = this -+ -+ if (client[kHTTPConnVersion] !== 'h2') { -+ if (parser.statusCode && !parser.shouldKeepAlive) { -+ // We treat all incoming data so far as a valid response. -+ parser.onMessageComplete() -+ return -+ } -+ } -+ -+ util.destroy(this, new SocketError('other side closed', util.getSocketInfo(this))) -+} -+ -+function onSocketClose () { -+ const { [kClient]: client, [kParser]: parser } = this -+ -+ if (client[kHTTPConnVersion] === 'h1' && parser) { -+ if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) { -+ // We treat all incoming data so far as a valid response. -+ parser.onMessageComplete() -+ } -+ -+ this[kParser].destroy() -+ this[kParser] = null -+ } -+ -+ const err = this[kError] || new SocketError('closed', util.getSocketInfo(this)) -+ -+ client[kSocket] = null -+ -+ if (client.destroyed) { -+ assert(client[kPending] === 0) -+ -+ // Fail entire queue. -+ const requests = client[kQueue].splice(client[kRunningIdx]) -+ for (let i = 0; i < requests.length; i++) { -+ const request = requests[i] -+ errorRequest(client, request, err) -+ } -+ } else if (client[kRunning] > 0 && err.code !== 'UND_ERR_INFO') { -+ // Fail head of pipeline. -+ const request = client[kQueue][client[kRunningIdx]] -+ client[kQueue][client[kRunningIdx]++] = null -+ -+ errorRequest(client, request, err) -+ } -+ -+ client[kPendingIdx] = client[kRunningIdx] -+ -+ assert(client[kRunning] === 0) -+ -+ client.emit('disconnect', client[kUrl], [client], err) -+ -+ resume(client) -+} -+ -+async function connect (client) { -+ assert(!client[kConnecting]) -+ assert(!client[kSocket]) -+ -+ let { host, hostname, protocol, port } = client[kUrl] -+ -+ // Resolve ipv6 -+ if (hostname[0] === '[') { -+ const idx = hostname.indexOf(']') -+ -+ assert(idx !== -1) -+ const ip = hostname.substring(1, idx) -+ -+ assert(net.isIP(ip)) -+ hostname = ip -+ } -+ -+ client[kConnecting] = true -+ -+ if (channels.beforeConnect.hasSubscribers) { -+ channels.beforeConnect.publish({ -+ connectParams: { -+ host, -+ hostname, -+ protocol, -+ port, -+ servername: client[kServerName], -+ localAddress: client[kLocalAddress] -+ }, -+ connector: client[kConnector] -+ }) -+ } -+ -+ try { -+ const socket = await new Promise((resolve, reject) => { -+ client[kConnector]({ -+ host, -+ hostname, -+ protocol, -+ port, -+ servername: client[kServerName], -+ localAddress: client[kLocalAddress] -+ }, (err, socket) => { -+ if (err) { -+ reject(err) -+ } else { -+ resolve(socket) -+ } -+ }) -+ }) -+ -+ if (client.destroyed) { -+ util.destroy(socket.on('error', () => {}), new ClientDestroyedError()) -+ return -+ } -+ -+ client[kConnecting] = false -+ -+ assert(socket) -+ -+ const isH2 = socket.alpnProtocol === 'h2' -+ if (isH2) { -+ if (!h2ExperimentalWarned) { -+ h2ExperimentalWarned = true -+ process.emitWarning('H2 support is experimental, expect them to change at any time.', { -+ code: 'UNDICI-H2' -+ }) -+ } -+ -+ const session = http2.connect(client[kUrl], { -+ createConnection: () => socket, -+ peerMaxConcurrentStreams: client[kHTTP2SessionState].maxConcurrentStreams -+ }) -+ -+ client[kHTTPConnVersion] = 'h2' -+ session[kClient] = client -+ session[kSocket] = socket -+ session.on('error', onHttp2SessionError) -+ session.on('frameError', onHttp2FrameError) -+ session.on('end', onHttp2SessionEnd) -+ session.on('goaway', onHTTP2GoAway) -+ session.on('close', onSocketClose) -+ session.unref() -+ -+ client[kHTTP2Session] = session -+ socket[kHTTP2Session] = session -+ } else { -+ if (!llhttpInstance) { -+ llhttpInstance = await llhttpPromise -+ llhttpPromise = null -+ } -+ -+ socket[kNoRef] = false -+ socket[kWriting] = false -+ socket[kReset] = false -+ socket[kBlocking] = false -+ socket[kParser] = new Parser(client, socket, llhttpInstance) -+ } -+ -+ socket[kCounter] = 0 -+ socket[kMaxRequests] = client[kMaxRequests] -+ socket[kClient] = client -+ socket[kError] = null -+ -+ socket -+ .on('error', onSocketError) -+ .on('readable', onSocketReadable) -+ .on('end', onSocketEnd) -+ .on('close', onSocketClose) -+ -+ client[kSocket] = socket -+ -+ if (channels.connected.hasSubscribers) { -+ channels.connected.publish({ -+ connectParams: { -+ host, -+ hostname, -+ protocol, -+ port, -+ servername: client[kServerName], -+ localAddress: client[kLocalAddress] -+ }, -+ connector: client[kConnector], -+ socket -+ }) -+ } -+ client.emit('connect', client[kUrl], [client]) -+ } catch (err) { -+ if (client.destroyed) { -+ return -+ } -+ -+ client[kConnecting] = false -+ -+ if (channels.connectError.hasSubscribers) { -+ channels.connectError.publish({ -+ connectParams: { -+ host, -+ hostname, -+ protocol, -+ port, -+ servername: client[kServerName], -+ localAddress: client[kLocalAddress] -+ }, -+ connector: client[kConnector], -+ error: err -+ }) -+ } -+ -+ if (err.code === 'ERR_TLS_CERT_ALTNAME_INVALID') { -+ assert(client[kRunning] === 0) -+ while (client[kPending] > 0 && client[kQueue][client[kPendingIdx]].servername === client[kServerName]) { -+ const request = client[kQueue][client[kPendingIdx]++] -+ errorRequest(client, request, err) -+ } -+ } else { -+ onError(client, err) -+ } -+ -+ client.emit('connectionError', client[kUrl], [client], err) -+ } -+ -+ resume(client) -+} -+ -+function emitDrain (client) { -+ client[kNeedDrain] = 0 -+ client.emit('drain', client[kUrl], [client]) -+} -+ -+function resume (client, sync) { -+ if (client[kResuming] === 2) { -+ return -+ } -+ -+ client[kResuming] = 2 -+ -+ _resume(client, sync) -+ client[kResuming] = 0 -+ -+ if (client[kRunningIdx] > 256) { -+ client[kQueue].splice(0, client[kRunningIdx]) -+ client[kPendingIdx] -= client[kRunningIdx] -+ client[kRunningIdx] = 0 -+ } -+} -+ -+function _resume (client, sync) { -+ while (true) { -+ if (client.destroyed) { -+ assert(client[kPending] === 0) -+ return -+ } -+ -+ if (client[kClosedResolve] && !client[kSize]) { -+ client[kClosedResolve]() -+ client[kClosedResolve] = null -+ return -+ } -+ -+ const socket = client[kSocket] -+ -+ if (socket && !socket.destroyed && socket.alpnProtocol !== 'h2') { -+ if (client[kSize] === 0) { -+ if (!socket[kNoRef] && socket.unref) { -+ socket.unref() -+ socket[kNoRef] = true -+ } -+ } else if (socket[kNoRef] && socket.ref) { -+ socket.ref() -+ socket[kNoRef] = false -+ } -+ -+ if (client[kSize] === 0) { -+ if (socket[kParser].timeoutType !== TIMEOUT_IDLE) { -+ socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_IDLE) -+ } -+ } else if (client[kRunning] > 0 && socket[kParser].statusCode < 200) { -+ if (socket[kParser].timeoutType !== TIMEOUT_HEADERS) { -+ const request = client[kQueue][client[kRunningIdx]] -+ const headersTimeout = request.headersTimeout != null -+ ? request.headersTimeout -+ : client[kHeadersTimeout] -+ socket[kParser].setTimeout(headersTimeout, TIMEOUT_HEADERS) -+ } -+ } -+ } -+ -+ if (client[kBusy]) { -+ client[kNeedDrain] = 2 -+ } else if (client[kNeedDrain] === 2) { -+ if (sync) { -+ client[kNeedDrain] = 1 -+ process.nextTick(emitDrain, client) -+ } else { -+ emitDrain(client) -+ } -+ continue -+ } -+ -+ if (client[kPending] === 0) { -+ return -+ } -+ -+ if (client[kRunning] >= (client[kPipelining] || 1)) { -+ return -+ } -+ -+ const request = client[kQueue][client[kPendingIdx]] -+ -+ if (client[kUrl].protocol === 'https:' && client[kServerName] !== request.servername) { -+ if (client[kRunning] > 0) { -+ return -+ } -+ -+ client[kServerName] = request.servername -+ -+ if (socket && socket.servername !== request.servername) { -+ util.destroy(socket, new InformationalError('servername changed')) -+ return -+ } -+ } -+ -+ if (client[kConnecting]) { -+ return -+ } -+ -+ if (!socket && !client[kHTTP2Session]) { -+ connect(client) -+ return -+ } -+ -+ if (socket.destroyed || socket[kWriting] || socket[kReset] || socket[kBlocking]) { -+ return -+ } -+ -+ if (client[kRunning] > 0 && !request.idempotent) { -+ // Non-idempotent request cannot be retried. -+ // Ensure that no other requests are inflight and -+ // could cause failure. -+ return -+ } -+ -+ if (client[kRunning] > 0 && (request.upgrade || request.method === 'CONNECT')) { -+ // Don't dispatch an upgrade until all preceding requests have completed. -+ // A misbehaving server might upgrade the connection before all pipelined -+ // request has completed. -+ return -+ } -+ -+ if (client[kRunning] > 0 && util.bodyLength(request.body) !== 0 && -+ (util.isStream(request.body) || util.isAsyncIterable(request.body))) { -+ // Request with stream or iterator body can error while other requests -+ // are inflight and indirectly error those as well. -+ // Ensure this doesn't happen by waiting for inflight -+ // to complete before dispatching. -+ -+ // Request with stream or iterator body cannot be retried. -+ // Ensure that no other requests are inflight and -+ // could cause failure. -+ return -+ } -+ -+ if (!request.aborted && write(client, request)) { -+ client[kPendingIdx]++ -+ } else { -+ client[kQueue].splice(client[kPendingIdx], 1) -+ } -+ } -+} -+ -+// https://www.rfc-editor.org/rfc/rfc7230#section-3.3.2 -+function shouldSendContentLength (method) { -+ return method !== 'GET' && method !== 'HEAD' && method !== 'OPTIONS' && method !== 'TRACE' && method !== 'CONNECT' -+} -+ -+function write (client, request) { -+ if (client[kHTTPConnVersion] === 'h2') { -+ writeH2(client, client[kHTTP2Session], request) -+ return -+ } -+ -+ const { body, method, path, host, upgrade, headers, blocking, reset } = request -+ -+ // https://tools.ietf.org/html/rfc7231#section-4.3.1 -+ // https://tools.ietf.org/html/rfc7231#section-4.3.2 -+ // https://tools.ietf.org/html/rfc7231#section-4.3.5 -+ -+ // Sending a payload body on a request that does not -+ // expect it can cause undefined behavior on some -+ // servers and corrupt connection state. Do not -+ // re-use the connection for further requests. -+ -+ const expectsPayload = ( -+ method === 'PUT' || -+ method === 'POST' || -+ method === 'PATCH' -+ ) -+ -+ if (body && typeof body.read === 'function') { -+ // Try to read EOF in order to get length. -+ body.read(0) -+ } -+ -+ const bodyLength = util.bodyLength(body) -+ -+ let contentLength = bodyLength -+ -+ if (contentLength === null) { -+ contentLength = request.contentLength -+ } -+ -+ if (contentLength === 0 && !expectsPayload) { -+ // https://tools.ietf.org/html/rfc7230#section-3.3.2 -+ // A user agent SHOULD NOT send a Content-Length header field when -+ // the request message does not contain a payload body and the method -+ // semantics do not anticipate such a body. -+ -+ contentLength = null -+ } -+ -+ // https://github.com/nodejs/undici/issues/2046 -+ // A user agent may send a Content-Length header with 0 value, this should be allowed. -+ if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength !== null && request.contentLength !== contentLength) { -+ if (client[kStrictContentLength]) { -+ errorRequest(client, request, new RequestContentLengthMismatchError()) -+ return false -+ } -+ -+ process.emitWarning(new RequestContentLengthMismatchError()) -+ } -+ -+ const socket = client[kSocket] -+ -+ try { -+ request.onConnect((err) => { -+ if (request.aborted || request.completed) { -+ return -+ } -+ -+ errorRequest(client, request, err || new RequestAbortedError()) -+ -+ util.destroy(socket, new InformationalError('aborted')) -+ }) -+ } catch (err) { -+ errorRequest(client, request, err) -+ } -+ -+ if (request.aborted) { -+ return false -+ } -+ -+ if (method === 'HEAD') { -+ // https://github.com/mcollina/undici/issues/258 -+ // Close after a HEAD request to interop with misbehaving servers -+ // that may send a body in the response. -+ -+ socket[kReset] = true -+ } -+ -+ if (upgrade || method === 'CONNECT') { -+ // On CONNECT or upgrade, block pipeline from dispatching further -+ // requests on this connection. -+ -+ socket[kReset] = true -+ } -+ -+ if (reset != null) { -+ socket[kReset] = reset -+ } -+ -+ if (client[kMaxRequests] && socket[kCounter]++ >= client[kMaxRequests]) { -+ socket[kReset] = true -+ } -+ -+ if (blocking) { -+ socket[kBlocking] = true -+ } -+ -+ let header = `${method} ${path} HTTP/1.1\r\n` -+ -+ if (typeof host === 'string') { -+ header += `host: ${host}\r\n` -+ } else { -+ header += client[kHostHeader] -+ } -+ -+ if (upgrade) { -+ header += `connection: upgrade\r\nupgrade: ${upgrade}\r\n` -+ } else if (client[kPipelining] && !socket[kReset]) { -+ header += 'connection: keep-alive\r\n' -+ } else { -+ header += 'connection: close\r\n' -+ } -+ -+ if (headers) { -+ header += headers -+ } -+ -+ if (channels.sendHeaders.hasSubscribers) { -+ channels.sendHeaders.publish({ request, headers: header, socket }) -+ } -+ -+ /* istanbul ignore else: assertion */ -+ if (!body || bodyLength === 0) { -+ if (contentLength === 0) { -+ socket.write(`${header}content-length: 0\r\n\r\n`, 'latin1') -+ } else { -+ assert(contentLength === null, 'no body must not have content length') -+ socket.write(`${header}\r\n`, 'latin1') -+ } -+ request.onRequestSent() -+ } else if (util.isBuffer(body)) { -+ assert(contentLength === body.byteLength, 'buffer body must have content length') -+ -+ socket.cork() -+ socket.write(`${header}content-length: ${contentLength}\r\n\r\n`, 'latin1') -+ socket.write(body) -+ socket.uncork() -+ request.onBodySent(body) -+ request.onRequestSent() -+ if (!expectsPayload) { -+ socket[kReset] = true -+ } -+ } else if (util.isBlobLike(body)) { -+ if (typeof body.stream === 'function') { -+ writeIterable({ body: body.stream(), client, request, socket, contentLength, header, expectsPayload }) -+ } else { -+ writeBlob({ body, client, request, socket, contentLength, header, expectsPayload }) -+ } -+ } else if (util.isStream(body)) { -+ writeStream({ body, client, request, socket, contentLength, header, expectsPayload }) -+ } else if (util.isIterable(body)) { -+ writeIterable({ body, client, request, socket, contentLength, header, expectsPayload }) -+ } else { -+ assert(false) -+ } -+ -+ return true -+} -+ -+function writeH2 (client, session, request) { -+ const { body, method, path, host, upgrade, expectContinue, signal, headers: reqHeaders } = request -+ -+ let headers -+ if (typeof reqHeaders === 'string') headers = Request[kHTTP2CopyHeaders](reqHeaders.trim()) -+ else headers = reqHeaders -+ -+ if (upgrade) { -+ errorRequest(client, request, new Error('Upgrade not supported for H2')) -+ return false -+ } -+ -+ try { -+ // TODO(HTTP/2): Should we call onConnect immediately or on stream ready event? -+ request.onConnect((err) => { -+ if (request.aborted || request.completed) { -+ return -+ } -+ -+ errorRequest(client, request, err || new RequestAbortedError()) -+ }) -+ } catch (err) { -+ errorRequest(client, request, err) -+ } -+ -+ if (request.aborted) { -+ return false -+ } -+ -+ /** @type {import('node:http2').ClientHttp2Stream} */ -+ let stream -+ const h2State = client[kHTTP2SessionState] -+ -+ headers[HTTP2_HEADER_AUTHORITY] = host || client[kHost] -+ headers[HTTP2_HEADER_METHOD] = method -+ -+ if (method === 'CONNECT') { -+ session.ref() -+ // we are already connected, streams are pending, first request -+ // will create a new stream. We trigger a request to create the stream and wait until -+ // `ready` event is triggered -+ // We disabled endStream to allow the user to write to the stream -+ stream = session.request(headers, { endStream: false, signal }) -+ -+ if (stream.id && !stream.pending) { -+ request.onUpgrade(null, null, stream) -+ ++h2State.openStreams -+ } else { -+ stream.once('ready', () => { -+ request.onUpgrade(null, null, stream) -+ ++h2State.openStreams -+ }) -+ } -+ -+ stream.once('close', () => { -+ h2State.openStreams -= 1 -+ // TODO(HTTP/2): unref only if current streams count is 0 -+ if (h2State.openStreams === 0) session.unref() -+ }) -+ -+ return true -+ } -+ -+ // https://tools.ietf.org/html/rfc7540#section-8.3 -+ // :path and :scheme headers must be omited when sending CONNECT -+ -+ headers[HTTP2_HEADER_PATH] = path -+ headers[HTTP2_HEADER_SCHEME] = 'https' -+ -+ // https://tools.ietf.org/html/rfc7231#section-4.3.1 -+ // https://tools.ietf.org/html/rfc7231#section-4.3.2 -+ // https://tools.ietf.org/html/rfc7231#section-4.3.5 -+ -+ // Sending a payload body on a request that does not -+ // expect it can cause undefined behavior on some -+ // servers and corrupt connection state. Do not -+ // re-use the connection for further requests. -+ -+ const expectsPayload = ( -+ method === 'PUT' || -+ method === 'POST' || -+ method === 'PATCH' -+ ) -+ -+ if (body && typeof body.read === 'function') { -+ // Try to read EOF in order to get length. -+ body.read(0) -+ } -+ -+ let contentLength = util.bodyLength(body) -+ -+ if (contentLength == null) { -+ contentLength = request.contentLength -+ } -+ -+ if (contentLength === 0 || !expectsPayload) { -+ // https://tools.ietf.org/html/rfc7230#section-3.3.2 -+ // A user agent SHOULD NOT send a Content-Length header field when -+ // the request message does not contain a payload body and the method -+ // semantics do not anticipate such a body. -+ -+ contentLength = null -+ } -+ -+ // https://github.com/nodejs/undici/issues/2046 -+ // A user agent may send a Content-Length header with 0 value, this should be allowed. -+ if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength != null && request.contentLength !== contentLength) { -+ if (client[kStrictContentLength]) { -+ errorRequest(client, request, new RequestContentLengthMismatchError()) -+ return false -+ } -+ -+ process.emitWarning(new RequestContentLengthMismatchError()) -+ } -+ -+ if (contentLength != null) { -+ assert(body, 'no body must not have content length') -+ headers[HTTP2_HEADER_CONTENT_LENGTH] = `${contentLength}` -+ } -+ -+ session.ref() -+ -+ const shouldEndStream = method === 'GET' || method === 'HEAD' -+ if (expectContinue) { -+ headers[HTTP2_HEADER_EXPECT] = '100-continue' -+ stream = session.request(headers, { endStream: shouldEndStream, signal }) -+ -+ stream.once('continue', writeBodyH2) -+ } else { -+ stream = session.request(headers, { -+ endStream: shouldEndStream, -+ signal -+ }) -+ writeBodyH2() -+ } -+ -+ // Increment counter as we have new several streams open -+ ++h2State.openStreams -+ -+ stream.once('response', headers => { -+ const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers -+ -+ if (request.onHeaders(Number(statusCode), realHeaders, stream.resume.bind(stream), '') === false) { -+ stream.pause() -+ } -+ }) -+ -+ stream.once('end', () => { -+ request.onComplete([]) -+ }) -+ -+ stream.on('data', (chunk) => { -+ if (request.onData(chunk) === false) { -+ stream.pause() -+ } -+ }) -+ -+ stream.once('close', () => { -+ h2State.openStreams -= 1 -+ // TODO(HTTP/2): unref only if current streams count is 0 -+ if (h2State.openStreams === 0) { -+ session.unref() -+ } -+ }) -+ -+ stream.once('error', function (err) { -+ if (client[kHTTP2Session] && !client[kHTTP2Session].destroyed && !this.closed && !this.destroyed) { -+ h2State.streams -= 1 -+ util.destroy(stream, err) -+ } -+ }) -+ -+ stream.once('frameError', (type, code) => { -+ const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`) -+ errorRequest(client, request, err) -+ -+ if (client[kHTTP2Session] && !client[kHTTP2Session].destroyed && !this.closed && !this.destroyed) { -+ h2State.streams -= 1 -+ util.destroy(stream, err) -+ } -+ }) -+ -+ // stream.on('aborted', () => { -+ // // TODO(HTTP/2): Support aborted -+ // }) -+ -+ // stream.on('timeout', () => { -+ // // TODO(HTTP/2): Support timeout -+ // }) -+ -+ // stream.on('push', headers => { -+ // // TODO(HTTP/2): Suppor push -+ // }) -+ -+ // stream.on('trailers', headers => { -+ // // TODO(HTTP/2): Support trailers -+ // }) -+ -+ return true -+ -+ function writeBodyH2 () { -+ /* istanbul ignore else: assertion */ -+ if (!body) { -+ request.onRequestSent() -+ } else if (util.isBuffer(body)) { -+ assert(contentLength === body.byteLength, 'buffer body must have content length') -+ stream.cork() -+ stream.write(body) -+ stream.uncork() -+ stream.end() -+ request.onBodySent(body) -+ request.onRequestSent() -+ } else if (util.isBlobLike(body)) { -+ if (typeof body.stream === 'function') { -+ writeIterable({ -+ client, -+ request, -+ contentLength, -+ h2stream: stream, -+ expectsPayload, -+ body: body.stream(), -+ socket: client[kSocket], -+ header: '' -+ }) -+ } else { -+ writeBlob({ -+ body, -+ client, -+ request, -+ contentLength, -+ expectsPayload, -+ h2stream: stream, -+ header: '', -+ socket: client[kSocket] -+ }) -+ } -+ } else if (util.isStream(body)) { -+ writeStream({ -+ body, -+ client, -+ request, -+ contentLength, -+ expectsPayload, -+ socket: client[kSocket], -+ h2stream: stream, -+ header: '' -+ }) -+ } else if (util.isIterable(body)) { -+ writeIterable({ -+ body, -+ client, -+ request, -+ contentLength, -+ expectsPayload, -+ header: '', -+ h2stream: stream, -+ socket: client[kSocket] -+ }) -+ } else { -+ assert(false) -+ } -+ } -+} -+ -+function writeStream ({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) { -+ assert(contentLength !== 0 || client[kRunning] === 0, 'stream body cannot be pipelined') -+ -+ if (client[kHTTPConnVersion] === 'h2') { -+ // For HTTP/2, is enough to pipe the stream -+ const pipe = pipeline( -+ body, -+ h2stream, -+ (err) => { -+ if (err) { -+ util.destroy(body, err) -+ util.destroy(h2stream, err) -+ } else { -+ request.onRequestSent() -+ } -+ } -+ ) -+ -+ pipe.on('data', onPipeData) -+ pipe.once('end', () => { -+ pipe.removeListener('data', onPipeData) -+ util.destroy(pipe) -+ }) -+ -+ function onPipeData (chunk) { -+ request.onBodySent(chunk) -+ } -+ -+ return -+ } -+ -+ let finished = false -+ -+ const writer = new AsyncWriter({ socket, request, contentLength, client, expectsPayload, header }) -+ -+ const onData = function (chunk) { -+ if (finished) { -+ return -+ } -+ -+ try { -+ if (!writer.write(chunk) && this.pause) { -+ this.pause() -+ } -+ } catch (err) { -+ util.destroy(this, err) -+ } -+ } -+ const onDrain = function () { -+ if (finished) { -+ return -+ } -+ -+ if (body.resume) { -+ body.resume() -+ } -+ } -+ const onAbort = function () { -+ if (finished) { -+ return -+ } -+ const err = new RequestAbortedError() -+ queueMicrotask(() => onFinished(err)) -+ } -+ const onFinished = function (err) { -+ if (finished) { -+ return -+ } -+ -+ finished = true -+ -+ assert(socket.destroyed || (socket[kWriting] && client[kRunning] <= 1)) -+ -+ socket -+ .off('drain', onDrain) -+ .off('error', onFinished) -+ -+ body -+ .removeListener('data', onData) -+ .removeListener('end', onFinished) -+ .removeListener('error', onFinished) -+ .removeListener('close', onAbort) -+ -+ if (!err) { -+ try { -+ writer.end() -+ } catch (er) { -+ err = er -+ } -+ } -+ -+ writer.destroy(err) -+ -+ if (err && (err.code !== 'UND_ERR_INFO' || err.message !== 'reset')) { -+ util.destroy(body, err) -+ } else { -+ util.destroy(body) -+ } -+ } -+ -+ body -+ .on('data', onData) -+ .on('end', onFinished) -+ .on('error', onFinished) -+ .on('close', onAbort) -+ -+ if (body.resume) { -+ body.resume() -+ } -+ -+ socket -+ .on('drain', onDrain) -+ .on('error', onFinished) -+} -+ -+async function writeBlob ({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) { -+ assert(contentLength === body.size, 'blob body must have content length') -+ -+ const isH2 = client[kHTTPConnVersion] === 'h2' -+ try { -+ if (contentLength != null && contentLength !== body.size) { -+ throw new RequestContentLengthMismatchError() -+ } -+ -+ const buffer = Buffer.from(await body.arrayBuffer()) -+ -+ if (isH2) { -+ h2stream.cork() -+ h2stream.write(buffer) -+ h2stream.uncork() -+ } else { -+ socket.cork() -+ socket.write(`${header}content-length: ${contentLength}\r\n\r\n`, 'latin1') -+ socket.write(buffer) -+ socket.uncork() -+ } -+ -+ request.onBodySent(buffer) -+ request.onRequestSent() -+ -+ if (!expectsPayload) { -+ socket[kReset] = true -+ } -+ -+ resume(client) -+ } catch (err) { -+ util.destroy(isH2 ? h2stream : socket, err) -+ } -+} -+ -+async function writeIterable ({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) { -+ assert(contentLength !== 0 || client[kRunning] === 0, 'iterator body cannot be pipelined') -+ -+ let callback = null -+ function onDrain () { -+ if (callback) { -+ const cb = callback -+ callback = null -+ cb() -+ } -+ } -+ -+ const waitForDrain = () => new Promise((resolve, reject) => { -+ assert(callback === null) -+ -+ if (socket[kError]) { -+ reject(socket[kError]) -+ } else { -+ callback = resolve -+ } -+ }) -+ -+ if (client[kHTTPConnVersion] === 'h2') { -+ h2stream -+ .on('close', onDrain) -+ .on('drain', onDrain) -+ -+ try { -+ // It's up to the user to somehow abort the async iterable. -+ for await (const chunk of body) { -+ if (socket[kError]) { -+ throw socket[kError] -+ } -+ -+ const res = h2stream.write(chunk) -+ request.onBodySent(chunk) -+ if (!res) { -+ await waitForDrain() -+ } -+ } -+ } catch (err) { -+ h2stream.destroy(err) -+ } finally { -+ request.onRequestSent() -+ h2stream.end() -+ h2stream -+ .off('close', onDrain) -+ .off('drain', onDrain) -+ } -+ -+ return -+ } -+ -+ socket -+ .on('close', onDrain) -+ .on('drain', onDrain) -+ -+ const writer = new AsyncWriter({ socket, request, contentLength, client, expectsPayload, header }) -+ try { -+ // It's up to the user to somehow abort the async iterable. -+ for await (const chunk of body) { -+ if (socket[kError]) { -+ throw socket[kError] -+ } -+ -+ if (!writer.write(chunk)) { -+ await waitForDrain() -+ } -+ } -+ -+ writer.end() -+ } catch (err) { -+ writer.destroy(err) -+ } finally { -+ socket -+ .off('close', onDrain) -+ .off('drain', onDrain) -+ } -+} -+ -+class AsyncWriter { -+ constructor ({ socket, request, contentLength, client, expectsPayload, header }) { -+ this.socket = socket -+ this.request = request -+ this.contentLength = contentLength -+ this.client = client -+ this.bytesWritten = 0 -+ this.expectsPayload = expectsPayload -+ this.header = header -+ -+ socket[kWriting] = true -+ } -+ -+ write (chunk) { -+ const { socket, request, contentLength, client, bytesWritten, expectsPayload, header } = this -+ -+ if (socket[kError]) { -+ throw socket[kError] -+ } -+ -+ if (socket.destroyed) { -+ return false -+ } -+ -+ const len = Buffer.byteLength(chunk) -+ if (!len) { -+ return true -+ } -+ -+ // We should defer writing chunks. -+ if (contentLength !== null && bytesWritten + len > contentLength) { -+ if (client[kStrictContentLength]) { -+ throw new RequestContentLengthMismatchError() -+ } -+ -+ process.emitWarning(new RequestContentLengthMismatchError()) -+ } -+ -+ socket.cork() -+ -+ if (bytesWritten === 0) { -+ if (!expectsPayload) { -+ socket[kReset] = true -+ } -+ -+ if (contentLength === null) { -+ socket.write(`${header}transfer-encoding: chunked\r\n`, 'latin1') -+ } else { -+ socket.write(`${header}content-length: ${contentLength}\r\n\r\n`, 'latin1') -+ } -+ } -+ -+ if (contentLength === null) { -+ socket.write(`\r\n${len.toString(16)}\r\n`, 'latin1') -+ } -+ -+ this.bytesWritten += len -+ -+ const ret = socket.write(chunk) -+ -+ socket.uncork() -+ -+ request.onBodySent(chunk) -+ -+ if (!ret) { -+ if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) { -+ // istanbul ignore else: only for jest -+ if (socket[kParser].timeout.refresh) { -+ socket[kParser].timeout.refresh() -+ } -+ } -+ } -+ -+ return ret -+ } -+ -+ end () { -+ const { socket, contentLength, client, bytesWritten, expectsPayload, header, request } = this -+ request.onRequestSent() -+ -+ socket[kWriting] = false -+ -+ if (socket[kError]) { -+ throw socket[kError] -+ } -+ -+ if (socket.destroyed) { -+ return -+ } -+ -+ if (bytesWritten === 0) { -+ if (expectsPayload) { -+ // https://tools.ietf.org/html/rfc7230#section-3.3.2 -+ // A user agent SHOULD send a Content-Length in a request message when -+ // no Transfer-Encoding is sent and the request method defines a meaning -+ // for an enclosed payload body. -+ -+ socket.write(`${header}content-length: 0\r\n\r\n`, 'latin1') -+ } else { -+ socket.write(`${header}\r\n`, 'latin1') -+ } -+ } else if (contentLength === null) { -+ socket.write('\r\n0\r\n\r\n', 'latin1') -+ } -+ -+ if (contentLength !== null && bytesWritten !== contentLength) { -+ if (client[kStrictContentLength]) { -+ throw new RequestContentLengthMismatchError() -+ } else { -+ process.emitWarning(new RequestContentLengthMismatchError()) -+ } -+ } -+ -+ if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) { -+ // istanbul ignore else: only for jest -+ if (socket[kParser].timeout.refresh) { -+ socket[kParser].timeout.refresh() -+ } -+ } -+ -+ resume(client) -+ } -+ -+ destroy (err) { -+ const { socket, client } = this -+ -+ socket[kWriting] = false -+ -+ if (err) { -+ assert(client[kRunning] <= 1, 'pipeline should only contain this request') -+ util.destroy(socket, err) -+ } -+ } -+} -+ -+function errorRequest (client, request, err) { -+ try { -+ request.onError(err) -+ assert(request.aborted) -+ } catch (err) { -+ client.emit('error', err) -+ } -+} -+ -+module.exports = Client -+ -+ -+/***/ }), -+ -+/***/ 6300: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+/* istanbul ignore file: only for Node 12 */ -+ -+const { kConnected, kSize } = __nccwpck_require__(3745) -+ -+class CompatWeakRef { -+ constructor (value) { -+ this.value = value -+ } -+ -+ deref () { -+ return this.value[kConnected] === 0 && this.value[kSize] === 0 -+ ? undefined -+ : this.value -+ } -+} -+ -+class CompatFinalizer { -+ constructor (finalizer) { -+ this.finalizer = finalizer -+ } -+ -+ register (dispatcher, key) { -+ if (dispatcher.on) { -+ dispatcher.on('disconnect', () => { -+ if (dispatcher[kConnected] === 0 && dispatcher[kSize] === 0) { -+ this.finalizer(key) -+ } -+ }) -+ } -+ } -+} -+ -+module.exports = function () { -+ // FIXME: remove workaround when the Node bug is fixed -+ // https://github.com/nodejs/node/issues/49344#issuecomment-1741776308 -+ if (process.env.NODE_V8_COVERAGE) { -+ return { -+ WeakRef: CompatWeakRef, -+ FinalizationRegistry: CompatFinalizer -+ } -+ } -+ return { -+ WeakRef: global.WeakRef || CompatWeakRef, -+ FinalizationRegistry: global.FinalizationRegistry || CompatFinalizer -+ } -+} -+ -+ -+/***/ }), -+ -+/***/ 6515: -+/***/ ((module) => { -+ -+"use strict"; -+ -+ -+// https://wicg.github.io/cookie-store/#cookie-maximum-attribute-value-size -+const maxAttributeValueSize = 1024 -+ -+// https://wicg.github.io/cookie-store/#cookie-maximum-name-value-pair-size -+const maxNameValuePairSize = 4096 -+ -+module.exports = { -+ maxAttributeValueSize, -+ maxNameValuePairSize -+} -+ -+ -+/***/ }), -+ -+/***/ 1739: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { parseSetCookie } = __nccwpck_require__(6918) -+const { stringify, getHeadersList } = __nccwpck_require__(4921) -+const { webidl } = __nccwpck_require__(5611) -+const { Headers } = __nccwpck_require__(3545) -+ -+/** -+ * @typedef {Object} Cookie -+ * @property {string} name -+ * @property {string} value -+ * @property {Date|number|undefined} expires -+ * @property {number|undefined} maxAge -+ * @property {string|undefined} domain -+ * @property {string|undefined} path -+ * @property {boolean|undefined} secure -+ * @property {boolean|undefined} httpOnly -+ * @property {'Strict'|'Lax'|'None'} sameSite -+ * @property {string[]} unparsed -+ */ -+ -+/** -+ * @param {Headers} headers -+ * @returns {Record} -+ */ -+function getCookies (headers) { -+ webidl.argumentLengthCheck(arguments, 1, { header: 'getCookies' }) -+ -+ webidl.brandCheck(headers, Headers, { strict: false }) -+ -+ const cookie = headers.get('cookie') -+ const out = {} -+ -+ if (!cookie) { -+ return out -+ } -+ -+ for (const piece of cookie.split(';')) { -+ const [name, ...value] = piece.split('=') -+ -+ out[name.trim()] = value.join('=') -+ } -+ -+ return out -+} -+ -+/** -+ * @param {Headers} headers -+ * @param {string} name -+ * @param {{ path?: string, domain?: string }|undefined} attributes -+ * @returns {void} -+ */ -+function deleteCookie (headers, name, attributes) { -+ webidl.argumentLengthCheck(arguments, 2, { header: 'deleteCookie' }) -+ -+ webidl.brandCheck(headers, Headers, { strict: false }) -+ -+ name = webidl.converters.DOMString(name) -+ attributes = webidl.converters.DeleteCookieAttributes(attributes) -+ -+ // Matches behavior of -+ // https://github.com/denoland/deno_std/blob/63827b16330b82489a04614027c33b7904e08be5/http/cookie.ts#L278 -+ setCookie(headers, { -+ name, -+ value: '', -+ expires: new Date(0), -+ ...attributes -+ }) -+} -+ -+/** -+ * @param {Headers} headers -+ * @returns {Cookie[]} -+ */ -+function getSetCookies (headers) { -+ webidl.argumentLengthCheck(arguments, 1, { header: 'getSetCookies' }) -+ -+ webidl.brandCheck(headers, Headers, { strict: false }) -+ -+ const cookies = getHeadersList(headers).cookies -+ -+ if (!cookies) { -+ return [] -+ } -+ -+ // In older versions of undici, cookies is a list of name:value. -+ return cookies.map((pair) => parseSetCookie(Array.isArray(pair) ? pair[1] : pair)) -+} -+ -+/** -+ * @param {Headers} headers -+ * @param {Cookie} cookie -+ * @returns {void} -+ */ -+function setCookie (headers, cookie) { -+ webidl.argumentLengthCheck(arguments, 2, { header: 'setCookie' }) -+ -+ webidl.brandCheck(headers, Headers, { strict: false }) -+ -+ cookie = webidl.converters.Cookie(cookie) -+ -+ const str = stringify(cookie) -+ -+ if (str) { -+ headers.append('Set-Cookie', stringify(cookie)) -+ } -+} -+ -+webidl.converters.DeleteCookieAttributes = webidl.dictionaryConverter([ -+ { -+ converter: webidl.nullableConverter(webidl.converters.DOMString), -+ key: 'path', -+ defaultValue: null -+ }, -+ { -+ converter: webidl.nullableConverter(webidl.converters.DOMString), -+ key: 'domain', -+ defaultValue: null -+ } -+]) -+ -+webidl.converters.Cookie = webidl.dictionaryConverter([ -+ { -+ converter: webidl.converters.DOMString, -+ key: 'name' -+ }, -+ { -+ converter: webidl.converters.DOMString, -+ key: 'value' -+ }, -+ { -+ converter: webidl.nullableConverter((value) => { -+ if (typeof value === 'number') { -+ return webidl.converters['unsigned long long'](value) -+ } -+ -+ return new Date(value) -+ }), -+ key: 'expires', -+ defaultValue: null -+ }, -+ { -+ converter: webidl.nullableConverter(webidl.converters['long long']), -+ key: 'maxAge', -+ defaultValue: null -+ }, -+ { -+ converter: webidl.nullableConverter(webidl.converters.DOMString), -+ key: 'domain', -+ defaultValue: null -+ }, -+ { -+ converter: webidl.nullableConverter(webidl.converters.DOMString), -+ key: 'path', -+ defaultValue: null -+ }, -+ { -+ converter: webidl.nullableConverter(webidl.converters.boolean), -+ key: 'secure', -+ defaultValue: null -+ }, -+ { -+ converter: webidl.nullableConverter(webidl.converters.boolean), -+ key: 'httpOnly', -+ defaultValue: null -+ }, -+ { -+ converter: webidl.converters.USVString, -+ key: 'sameSite', -+ allowedValues: ['Strict', 'Lax', 'None'] -+ }, -+ { -+ converter: webidl.sequenceConverter(webidl.converters.DOMString), -+ key: 'unparsed', -+ defaultValue: [] -+ } -+]) -+ -+module.exports = { -+ getCookies, -+ deleteCookie, -+ getSetCookies, -+ setCookie -+} -+ -+ -+/***/ }), -+ -+/***/ 6918: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { maxNameValuePairSize, maxAttributeValueSize } = __nccwpck_require__(6515) -+const { isCTLExcludingHtab } = __nccwpck_require__(4921) -+const { collectASequenceOfCodePointsFast } = __nccwpck_require__(1827) -+const assert = __nccwpck_require__(9491) -+ -+/** -+ * @description Parses the field-value attributes of a set-cookie header string. -+ * @see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4 -+ * @param {string} header -+ * @returns if the header is invalid, null will be returned -+ */ -+function parseSetCookie (header) { -+ // 1. If the set-cookie-string contains a %x00-08 / %x0A-1F / %x7F -+ // character (CTL characters excluding HTAB): Abort these steps and -+ // ignore the set-cookie-string entirely. -+ if (isCTLExcludingHtab(header)) { -+ return null -+ } -+ -+ let nameValuePair = '' -+ let unparsedAttributes = '' -+ let name = '' -+ let value = '' -+ -+ // 2. If the set-cookie-string contains a %x3B (";") character: -+ if (header.includes(';')) { -+ // 1. The name-value-pair string consists of the characters up to, -+ // but not including, the first %x3B (";"), and the unparsed- -+ // attributes consist of the remainder of the set-cookie-string -+ // (including the %x3B (";") in question). -+ const position = { position: 0 } -+ -+ nameValuePair = collectASequenceOfCodePointsFast(';', header, position) -+ unparsedAttributes = header.slice(position.position) -+ } else { -+ // Otherwise: -+ -+ // 1. The name-value-pair string consists of all the characters -+ // contained in the set-cookie-string, and the unparsed- -+ // attributes is the empty string. -+ nameValuePair = header -+ } -+ -+ // 3. If the name-value-pair string lacks a %x3D ("=") character, then -+ // the name string is empty, and the value string is the value of -+ // name-value-pair. -+ if (!nameValuePair.includes('=')) { -+ value = nameValuePair -+ } else { -+ // Otherwise, the name string consists of the characters up to, but -+ // not including, the first %x3D ("=") character, and the (possibly -+ // empty) value string consists of the characters after the first -+ // %x3D ("=") character. -+ const position = { position: 0 } -+ name = collectASequenceOfCodePointsFast( -+ '=', -+ nameValuePair, -+ position -+ ) -+ value = nameValuePair.slice(position.position + 1) -+ } -+ -+ // 4. Remove any leading or trailing WSP characters from the name -+ // string and the value string. -+ name = name.trim() -+ value = value.trim() -+ -+ // 5. If the sum of the lengths of the name string and the value string -+ // is more than 4096 octets, abort these steps and ignore the set- -+ // cookie-string entirely. -+ if (name.length + value.length > maxNameValuePairSize) { -+ return null -+ } -+ -+ // 6. The cookie-name is the name string, and the cookie-value is the -+ // value string. -+ return { -+ name, value, ...parseUnparsedAttributes(unparsedAttributes) -+ } -+} -+ -+/** -+ * Parses the remaining attributes of a set-cookie header -+ * @see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4 -+ * @param {string} unparsedAttributes -+ * @param {[Object.]={}} cookieAttributeList -+ */ -+function parseUnparsedAttributes (unparsedAttributes, cookieAttributeList = {}) { -+ // 1. If the unparsed-attributes string is empty, skip the rest of -+ // these steps. -+ if (unparsedAttributes.length === 0) { -+ return cookieAttributeList -+ } -+ -+ // 2. Discard the first character of the unparsed-attributes (which -+ // will be a %x3B (";") character). -+ assert(unparsedAttributes[0] === ';') -+ unparsedAttributes = unparsedAttributes.slice(1) -+ -+ let cookieAv = '' -+ -+ // 3. If the remaining unparsed-attributes contains a %x3B (";") -+ // character: -+ if (unparsedAttributes.includes(';')) { -+ // 1. Consume the characters of the unparsed-attributes up to, but -+ // not including, the first %x3B (";") character. -+ cookieAv = collectASequenceOfCodePointsFast( -+ ';', -+ unparsedAttributes, -+ { position: 0 } -+ ) -+ unparsedAttributes = unparsedAttributes.slice(cookieAv.length) -+ } else { -+ // Otherwise: -+ -+ // 1. Consume the remainder of the unparsed-attributes. -+ cookieAv = unparsedAttributes -+ unparsedAttributes = '' -+ } -+ -+ // Let the cookie-av string be the characters consumed in this step. -+ -+ let attributeName = '' -+ let attributeValue = '' -+ -+ // 4. If the cookie-av string contains a %x3D ("=") character: -+ if (cookieAv.includes('=')) { -+ // 1. The (possibly empty) attribute-name string consists of the -+ // characters up to, but not including, the first %x3D ("=") -+ // character, and the (possibly empty) attribute-value string -+ // consists of the characters after the first %x3D ("=") -+ // character. -+ const position = { position: 0 } -+ -+ attributeName = collectASequenceOfCodePointsFast( -+ '=', -+ cookieAv, -+ position -+ ) -+ attributeValue = cookieAv.slice(position.position + 1) -+ } else { -+ // Otherwise: -+ -+ // 1. The attribute-name string consists of the entire cookie-av -+ // string, and the attribute-value string is empty. -+ attributeName = cookieAv -+ } -+ -+ // 5. Remove any leading or trailing WSP characters from the attribute- -+ // name string and the attribute-value string. -+ attributeName = attributeName.trim() -+ attributeValue = attributeValue.trim() -+ -+ // 6. If the attribute-value is longer than 1024 octets, ignore the -+ // cookie-av string and return to Step 1 of this algorithm. -+ if (attributeValue.length > maxAttributeValueSize) { -+ return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList) -+ } -+ -+ // 7. Process the attribute-name and attribute-value according to the -+ // requirements in the following subsections. (Notice that -+ // attributes with unrecognized attribute-names are ignored.) -+ const attributeNameLowercase = attributeName.toLowerCase() -+ -+ // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.1 -+ // If the attribute-name case-insensitively matches the string -+ // "Expires", the user agent MUST process the cookie-av as follows. -+ if (attributeNameLowercase === 'expires') { -+ // 1. Let the expiry-time be the result of parsing the attribute-value -+ // as cookie-date (see Section 5.1.1). -+ const expiryTime = new Date(attributeValue) -+ -+ // 2. If the attribute-value failed to parse as a cookie date, ignore -+ // the cookie-av. -+ -+ cookieAttributeList.expires = expiryTime -+ } else if (attributeNameLowercase === 'max-age') { -+ // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.2 -+ // If the attribute-name case-insensitively matches the string "Max- -+ // Age", the user agent MUST process the cookie-av as follows. -+ -+ // 1. If the first character of the attribute-value is not a DIGIT or a -+ // "-" character, ignore the cookie-av. -+ const charCode = attributeValue.charCodeAt(0) -+ -+ if ((charCode < 48 || charCode > 57) && attributeValue[0] !== '-') { -+ return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList) -+ } -+ -+ // 2. If the remainder of attribute-value contains a non-DIGIT -+ // character, ignore the cookie-av. -+ if (!/^\d+$/.test(attributeValue)) { -+ return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList) -+ } -+ -+ // 3. Let delta-seconds be the attribute-value converted to an integer. -+ const deltaSeconds = Number(attributeValue) -+ -+ // 4. Let cookie-age-limit be the maximum age of the cookie (which -+ // SHOULD be 400 days or less, see Section 4.1.2.2). -+ -+ // 5. Set delta-seconds to the smaller of its present value and cookie- -+ // age-limit. -+ // deltaSeconds = Math.min(deltaSeconds * 1000, maxExpiresMs) -+ -+ // 6. If delta-seconds is less than or equal to zero (0), let expiry- -+ // time be the earliest representable date and time. Otherwise, let -+ // the expiry-time be the current date and time plus delta-seconds -+ // seconds. -+ // const expiryTime = deltaSeconds <= 0 ? Date.now() : Date.now() + deltaSeconds -+ -+ // 7. Append an attribute to the cookie-attribute-list with an -+ // attribute-name of Max-Age and an attribute-value of expiry-time. -+ cookieAttributeList.maxAge = deltaSeconds -+ } else if (attributeNameLowercase === 'domain') { -+ // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.3 -+ // If the attribute-name case-insensitively matches the string "Domain", -+ // the user agent MUST process the cookie-av as follows. -+ -+ // 1. Let cookie-domain be the attribute-value. -+ let cookieDomain = attributeValue -+ -+ // 2. If cookie-domain starts with %x2E ("."), let cookie-domain be -+ // cookie-domain without its leading %x2E ("."). -+ if (cookieDomain[0] === '.') { -+ cookieDomain = cookieDomain.slice(1) -+ } -+ -+ // 3. Convert the cookie-domain to lower case. -+ cookieDomain = cookieDomain.toLowerCase() -+ -+ // 4. Append an attribute to the cookie-attribute-list with an -+ // attribute-name of Domain and an attribute-value of cookie-domain. -+ cookieAttributeList.domain = cookieDomain -+ } else if (attributeNameLowercase === 'path') { -+ // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.4 -+ // If the attribute-name case-insensitively matches the string "Path", -+ // the user agent MUST process the cookie-av as follows. -+ -+ // 1. If the attribute-value is empty or if the first character of the -+ // attribute-value is not %x2F ("/"): -+ let cookiePath = '' -+ if (attributeValue.length === 0 || attributeValue[0] !== '/') { -+ // 1. Let cookie-path be the default-path. -+ cookiePath = '/' -+ } else { -+ // Otherwise: -+ -+ // 1. Let cookie-path be the attribute-value. -+ cookiePath = attributeValue -+ } -+ -+ // 2. Append an attribute to the cookie-attribute-list with an -+ // attribute-name of Path and an attribute-value of cookie-path. -+ cookieAttributeList.path = cookiePath -+ } else if (attributeNameLowercase === 'secure') { -+ // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.5 -+ // If the attribute-name case-insensitively matches the string "Secure", -+ // the user agent MUST append an attribute to the cookie-attribute-list -+ // with an attribute-name of Secure and an empty attribute-value. -+ -+ cookieAttributeList.secure = true -+ } else if (attributeNameLowercase === 'httponly') { -+ // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.6 -+ // If the attribute-name case-insensitively matches the string -+ // "HttpOnly", the user agent MUST append an attribute to the cookie- -+ // attribute-list with an attribute-name of HttpOnly and an empty -+ // attribute-value. -+ -+ cookieAttributeList.httpOnly = true -+ } else if (attributeNameLowercase === 'samesite') { -+ // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.7 -+ // If the attribute-name case-insensitively matches the string -+ // "SameSite", the user agent MUST process the cookie-av as follows: -+ -+ // 1. Let enforcement be "Default". -+ let enforcement = 'Default' -+ -+ const attributeValueLowercase = attributeValue.toLowerCase() -+ // 2. If cookie-av's attribute-value is a case-insensitive match for -+ // "None", set enforcement to "None". -+ if (attributeValueLowercase.includes('none')) { -+ enforcement = 'None' -+ } -+ -+ // 3. If cookie-av's attribute-value is a case-insensitive match for -+ // "Strict", set enforcement to "Strict". -+ if (attributeValueLowercase.includes('strict')) { -+ enforcement = 'Strict' -+ } -+ -+ // 4. If cookie-av's attribute-value is a case-insensitive match for -+ // "Lax", set enforcement to "Lax". -+ if (attributeValueLowercase.includes('lax')) { -+ enforcement = 'Lax' -+ } -+ -+ // 5. Append an attribute to the cookie-attribute-list with an -+ // attribute-name of "SameSite" and an attribute-value of -+ // enforcement. -+ cookieAttributeList.sameSite = enforcement -+ } else { -+ cookieAttributeList.unparsed ??= [] -+ -+ cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`) -+ } -+ -+ // 8. Return to Step 1 of this algorithm. -+ return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList) -+} -+ -+module.exports = { -+ parseSetCookie, -+ parseUnparsedAttributes -+} -+ -+ -+/***/ }), -+ -+/***/ 4921: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const assert = __nccwpck_require__(9491) -+const { kHeadersList } = __nccwpck_require__(3745) -+ -+function isCTLExcludingHtab (value) { -+ if (value.length === 0) { -+ return false -+ } -+ -+ for (const char of value) { -+ const code = char.charCodeAt(0) -+ -+ if ( -+ (code >= 0x00 || code <= 0x08) || -+ (code >= 0x0A || code <= 0x1F) || -+ code === 0x7F -+ ) { -+ return false -+ } -+ } -+} -+ -+/** -+ CHAR = -+ token = 1* -+ separators = "(" | ")" | "<" | ">" | "@" -+ | "," | ";" | ":" | "\" | <"> -+ | "/" | "[" | "]" | "?" | "=" -+ | "{" | "}" | SP | HT -+ * @param {string} name -+ */ -+function validateCookieName (name) { -+ for (const char of name) { -+ const code = char.charCodeAt(0) -+ -+ if ( -+ (code <= 0x20 || code > 0x7F) || -+ char === '(' || -+ char === ')' || -+ char === '>' || -+ char === '<' || -+ char === '@' || -+ char === ',' || -+ char === ';' || -+ char === ':' || -+ char === '\\' || -+ char === '"' || -+ char === '/' || -+ char === '[' || -+ char === ']' || -+ char === '?' || -+ char === '=' || -+ char === '{' || -+ char === '}' -+ ) { -+ throw new Error('Invalid cookie name') -+ } -+ } -+} -+ -+/** -+ cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE ) -+ cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E -+ ; US-ASCII characters excluding CTLs, -+ ; whitespace DQUOTE, comma, semicolon, -+ ; and backslash -+ * @param {string} value -+ */ -+function validateCookieValue (value) { -+ for (const char of value) { -+ const code = char.charCodeAt(0) -+ -+ if ( -+ code < 0x21 || // exclude CTLs (0-31) -+ code === 0x22 || -+ code === 0x2C || -+ code === 0x3B || -+ code === 0x5C || -+ code > 0x7E // non-ascii -+ ) { -+ throw new Error('Invalid header value') -+ } -+ } -+} -+ -+/** -+ * path-value = -+ * @param {string} path -+ */ -+function validateCookiePath (path) { -+ for (const char of path) { -+ const code = char.charCodeAt(0) -+ -+ if (code < 0x21 || char === ';') { -+ throw new Error('Invalid cookie path') -+ } -+ } -+} -+ -+/** -+ * I have no idea why these values aren't allowed to be honest, -+ * but Deno tests these. - Khafra -+ * @param {string} domain -+ */ -+function validateCookieDomain (domain) { -+ if ( -+ domain.startsWith('-') || -+ domain.endsWith('.') || -+ domain.endsWith('-') -+ ) { -+ throw new Error('Invalid cookie domain') -+ } -+} -+ -+/** -+ * @see https://www.rfc-editor.org/rfc/rfc7231#section-7.1.1.1 -+ * @param {number|Date} date -+ IMF-fixdate = day-name "," SP date1 SP time-of-day SP GMT -+ ; fixed length/zone/capitalization subset of the format -+ ; see Section 3.3 of [RFC5322] -+ -+ day-name = %x4D.6F.6E ; "Mon", case-sensitive -+ / %x54.75.65 ; "Tue", case-sensitive -+ / %x57.65.64 ; "Wed", case-sensitive -+ / %x54.68.75 ; "Thu", case-sensitive -+ / %x46.72.69 ; "Fri", case-sensitive -+ / %x53.61.74 ; "Sat", case-sensitive -+ / %x53.75.6E ; "Sun", case-sensitive -+ date1 = day SP month SP year -+ ; e.g., 02 Jun 1982 -+ -+ day = 2DIGIT -+ month = %x4A.61.6E ; "Jan", case-sensitive -+ / %x46.65.62 ; "Feb", case-sensitive -+ / %x4D.61.72 ; "Mar", case-sensitive -+ / %x41.70.72 ; "Apr", case-sensitive -+ / %x4D.61.79 ; "May", case-sensitive -+ / %x4A.75.6E ; "Jun", case-sensitive -+ / %x4A.75.6C ; "Jul", case-sensitive -+ / %x41.75.67 ; "Aug", case-sensitive -+ / %x53.65.70 ; "Sep", case-sensitive -+ / %x4F.63.74 ; "Oct", case-sensitive -+ / %x4E.6F.76 ; "Nov", case-sensitive -+ / %x44.65.63 ; "Dec", case-sensitive -+ year = 4DIGIT -+ -+ GMT = %x47.4D.54 ; "GMT", case-sensitive -+ -+ time-of-day = hour ":" minute ":" second -+ ; 00:00:00 - 23:59:60 (leap second) -+ -+ hour = 2DIGIT -+ minute = 2DIGIT -+ second = 2DIGIT -+ */ -+function toIMFDate (date) { -+ if (typeof date === 'number') { -+ date = new Date(date) -+ } -+ -+ const days = [ -+ 'Sun', 'Mon', 'Tue', 'Wed', -+ 'Thu', 'Fri', 'Sat' -+ ] -+ -+ const months = [ -+ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', -+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' -+ ] -+ -+ const dayName = days[date.getUTCDay()] -+ const day = date.getUTCDate().toString().padStart(2, '0') -+ const month = months[date.getUTCMonth()] -+ const year = date.getUTCFullYear() -+ const hour = date.getUTCHours().toString().padStart(2, '0') -+ const minute = date.getUTCMinutes().toString().padStart(2, '0') -+ const second = date.getUTCSeconds().toString().padStart(2, '0') -+ -+ return `${dayName}, ${day} ${month} ${year} ${hour}:${minute}:${second} GMT` -+} -+ -+/** -+ max-age-av = "Max-Age=" non-zero-digit *DIGIT -+ ; In practice, both expires-av and max-age-av -+ ; are limited to dates representable by the -+ ; user agent. -+ * @param {number} maxAge -+ */ -+function validateCookieMaxAge (maxAge) { -+ if (maxAge < 0) { -+ throw new Error('Invalid cookie max-age') -+ } -+} -+ -+/** -+ * @see https://www.rfc-editor.org/rfc/rfc6265#section-4.1.1 -+ * @param {import('./index').Cookie} cookie -+ */ -+function stringify (cookie) { -+ if (cookie.name.length === 0) { -+ return null -+ } -+ -+ validateCookieName(cookie.name) -+ validateCookieValue(cookie.value) -+ -+ const out = [`${cookie.name}=${cookie.value}`] -+ -+ // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-prefixes-00#section-3.1 -+ // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-prefixes-00#section-3.2 -+ if (cookie.name.startsWith('__Secure-')) { -+ cookie.secure = true -+ } -+ -+ if (cookie.name.startsWith('__Host-')) { -+ cookie.secure = true -+ cookie.domain = null -+ cookie.path = '/' -+ } -+ -+ if (cookie.secure) { -+ out.push('Secure') -+ } -+ -+ if (cookie.httpOnly) { -+ out.push('HttpOnly') -+ } -+ -+ if (typeof cookie.maxAge === 'number') { -+ validateCookieMaxAge(cookie.maxAge) -+ out.push(`Max-Age=${cookie.maxAge}`) -+ } -+ -+ if (cookie.domain) { -+ validateCookieDomain(cookie.domain) -+ out.push(`Domain=${cookie.domain}`) -+ } -+ -+ if (cookie.path) { -+ validateCookiePath(cookie.path) -+ out.push(`Path=${cookie.path}`) -+ } -+ -+ if (cookie.expires && cookie.expires.toString() !== 'Invalid Date') { -+ out.push(`Expires=${toIMFDate(cookie.expires)}`) -+ } -+ -+ if (cookie.sameSite) { -+ out.push(`SameSite=${cookie.sameSite}`) -+ } -+ -+ for (const part of cookie.unparsed) { -+ if (!part.includes('=')) { -+ throw new Error('Invalid unparsed') -+ } -+ -+ const [key, ...value] = part.split('=') -+ -+ out.push(`${key.trim()}=${value.join('=')}`) -+ } -+ -+ return out.join('; ') -+} -+ -+let kHeadersListNode -+ -+function getHeadersList (headers) { -+ if (headers[kHeadersList]) { -+ return headers[kHeadersList] -+ } -+ -+ if (!kHeadersListNode) { -+ kHeadersListNode = Object.getOwnPropertySymbols(headers).find( -+ (symbol) => symbol.description === 'headers list' -+ ) -+ -+ assert(kHeadersListNode, 'Headers cannot be parsed') -+ } -+ -+ const headersList = headers[kHeadersListNode] -+ assert(headersList) -+ -+ return headersList -+} -+ -+module.exports = { -+ isCTLExcludingHtab, -+ stringify, -+ getHeadersList -+} -+ -+ -+/***/ }), -+ -+/***/ 7483: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const net = __nccwpck_require__(1808) -+const assert = __nccwpck_require__(9491) -+const util = __nccwpck_require__(929) -+const { InvalidArgumentError, ConnectTimeoutError } = __nccwpck_require__(1878) -+ -+let tls // include tls conditionally since it is not always available -+ -+// TODO: session re-use does not wait for the first -+// connection to resolve the session and might therefore -+// resolve the same servername multiple times even when -+// re-use is enabled. -+ -+let SessionCache -+// FIXME: remove workaround when the Node bug is fixed -+// https://github.com/nodejs/node/issues/49344#issuecomment-1741776308 -+if (global.FinalizationRegistry && !process.env.NODE_V8_COVERAGE) { -+ SessionCache = class WeakSessionCache { -+ constructor (maxCachedSessions) { -+ this._maxCachedSessions = maxCachedSessions -+ this._sessionCache = new Map() -+ this._sessionRegistry = new global.FinalizationRegistry((key) => { -+ if (this._sessionCache.size < this._maxCachedSessions) { -+ return -+ } -+ -+ const ref = this._sessionCache.get(key) -+ if (ref !== undefined && ref.deref() === undefined) { -+ this._sessionCache.delete(key) -+ } -+ }) -+ } -+ -+ get (sessionKey) { -+ const ref = this._sessionCache.get(sessionKey) -+ return ref ? ref.deref() : null -+ } -+ -+ set (sessionKey, session) { -+ if (this._maxCachedSessions === 0) { -+ return -+ } -+ -+ this._sessionCache.set(sessionKey, new WeakRef(session)) -+ this._sessionRegistry.register(session, sessionKey) -+ } -+ } -+} else { -+ SessionCache = class SimpleSessionCache { -+ constructor (maxCachedSessions) { -+ this._maxCachedSessions = maxCachedSessions -+ this._sessionCache = new Map() -+ } -+ -+ get (sessionKey) { -+ return this._sessionCache.get(sessionKey) -+ } -+ -+ set (sessionKey, session) { -+ if (this._maxCachedSessions === 0) { -+ return -+ } -+ -+ if (this._sessionCache.size >= this._maxCachedSessions) { -+ // remove the oldest session -+ const { value: oldestKey } = this._sessionCache.keys().next() -+ this._sessionCache.delete(oldestKey) -+ } -+ -+ this._sessionCache.set(sessionKey, session) -+ } -+ } -+} -+ -+function buildConnector ({ allowH2, maxCachedSessions, socketPath, timeout, ...opts }) { -+ if (maxCachedSessions != null && (!Number.isInteger(maxCachedSessions) || maxCachedSessions < 0)) { -+ throw new InvalidArgumentError('maxCachedSessions must be a positive integer or zero') -+ } -+ -+ const options = { path: socketPath, ...opts } -+ const sessionCache = new SessionCache(maxCachedSessions == null ? 100 : maxCachedSessions) -+ timeout = timeout == null ? 10e3 : timeout -+ allowH2 = allowH2 != null ? allowH2 : false -+ return function connect ({ hostname, host, protocol, port, servername, localAddress, httpSocket }, callback) { -+ let socket -+ if (protocol === 'https:') { -+ if (!tls) { -+ tls = __nccwpck_require__(4404) -+ } -+ servername = servername || options.servername || util.getServerName(host) || null -+ -+ const sessionKey = servername || hostname -+ const session = sessionCache.get(sessionKey) || null -+ -+ assert(sessionKey) -+ -+ socket = tls.connect({ -+ highWaterMark: 16384, // TLS in node can't have bigger HWM anyway... -+ ...options, -+ servername, -+ session, -+ localAddress, -+ // TODO(HTTP/2): Add support for h2c -+ ALPNProtocols: allowH2 ? ['http/1.1', 'h2'] : ['http/1.1'], -+ socket: httpSocket, // upgrade socket connection -+ port: port || 443, -+ host: hostname -+ }) -+ -+ socket -+ .on('session', function (session) { -+ // TODO (fix): Can a session become invalid once established? Don't think so? -+ sessionCache.set(sessionKey, session) -+ }) -+ } else { -+ assert(!httpSocket, 'httpSocket can only be sent on TLS update') -+ socket = net.connect({ -+ highWaterMark: 64 * 1024, // Same as nodejs fs streams. -+ ...options, -+ localAddress, -+ port: port || 80, -+ host: hostname -+ }) -+ } -+ -+ // Set TCP keep alive options on the socket here instead of in connect() for the case of assigning the socket -+ if (options.keepAlive == null || options.keepAlive) { -+ const keepAliveInitialDelay = options.keepAliveInitialDelay === undefined ? 60e3 : options.keepAliveInitialDelay -+ socket.setKeepAlive(true, keepAliveInitialDelay) -+ } -+ -+ const cancelTimeout = setupTimeout(() => onConnectTimeout(socket), timeout) -+ -+ socket -+ .setNoDelay(true) -+ .once(protocol === 'https:' ? 'secureConnect' : 'connect', function () { -+ cancelTimeout() -+ -+ if (callback) { -+ const cb = callback -+ callback = null -+ cb(null, this) -+ } -+ }) -+ .on('error', function (err) { -+ cancelTimeout() -+ -+ if (callback) { -+ const cb = callback -+ callback = null -+ cb(err) -+ } -+ }) -+ -+ return socket -+ } -+} -+ -+function setupTimeout (onConnectTimeout, timeout) { -+ if (!timeout) { -+ return () => {} -+ } -+ -+ let s1 = null -+ let s2 = null -+ const timeoutId = setTimeout(() => { -+ // setImmediate is added to make sure that we priotorise socket error events over timeouts -+ s1 = setImmediate(() => { -+ if (process.platform === 'win32') { -+ // Windows needs an extra setImmediate probably due to implementation differences in the socket logic -+ s2 = setImmediate(() => onConnectTimeout()) -+ } else { -+ onConnectTimeout() -+ } -+ }) -+ }, timeout) -+ return () => { -+ clearTimeout(timeoutId) -+ clearImmediate(s1) -+ clearImmediate(s2) -+ } -+} -+ -+function onConnectTimeout (socket) { -+ util.destroy(socket, new ConnectTimeoutError()) -+} -+ -+module.exports = buildConnector -+ -+ -+/***/ }), -+ -+/***/ 3916: -+/***/ ((module) => { -+ -+"use strict"; -+ -+ -+/** @type {Record} */ -+const headerNameLowerCasedRecord = {} -+ -+// https://developer.mozilla.org/docs/Web/HTTP/Headers -+const wellknownHeaderNames = [ -+ 'Accept', -+ 'Accept-Encoding', -+ 'Accept-Language', -+ 'Accept-Ranges', -+ 'Access-Control-Allow-Credentials', -+ 'Access-Control-Allow-Headers', -+ 'Access-Control-Allow-Methods', -+ 'Access-Control-Allow-Origin', -+ 'Access-Control-Expose-Headers', -+ 'Access-Control-Max-Age', -+ 'Access-Control-Request-Headers', -+ 'Access-Control-Request-Method', -+ 'Age', -+ 'Allow', -+ 'Alt-Svc', -+ 'Alt-Used', -+ 'Authorization', -+ 'Cache-Control', -+ 'Clear-Site-Data', -+ 'Connection', -+ 'Content-Disposition', -+ 'Content-Encoding', -+ 'Content-Language', -+ 'Content-Length', -+ 'Content-Location', -+ 'Content-Range', -+ 'Content-Security-Policy', -+ 'Content-Security-Policy-Report-Only', -+ 'Content-Type', -+ 'Cookie', -+ 'Cross-Origin-Embedder-Policy', -+ 'Cross-Origin-Opener-Policy', -+ 'Cross-Origin-Resource-Policy', -+ 'Date', -+ 'Device-Memory', -+ 'Downlink', -+ 'ECT', -+ 'ETag', -+ 'Expect', -+ 'Expect-CT', -+ 'Expires', -+ 'Forwarded', -+ 'From', -+ 'Host', -+ 'If-Match', -+ 'If-Modified-Since', -+ 'If-None-Match', -+ 'If-Range', -+ 'If-Unmodified-Since', -+ 'Keep-Alive', -+ 'Last-Modified', -+ 'Link', -+ 'Location', -+ 'Max-Forwards', -+ 'Origin', -+ 'Permissions-Policy', -+ 'Pragma', -+ 'Proxy-Authenticate', -+ 'Proxy-Authorization', -+ 'RTT', -+ 'Range', -+ 'Referer', -+ 'Referrer-Policy', -+ 'Refresh', -+ 'Retry-After', -+ 'Sec-WebSocket-Accept', -+ 'Sec-WebSocket-Extensions', -+ 'Sec-WebSocket-Key', -+ 'Sec-WebSocket-Protocol', -+ 'Sec-WebSocket-Version', -+ 'Server', -+ 'Server-Timing', -+ 'Service-Worker-Allowed', -+ 'Service-Worker-Navigation-Preload', -+ 'Set-Cookie', -+ 'SourceMap', -+ 'Strict-Transport-Security', -+ 'Supports-Loading-Mode', -+ 'TE', -+ 'Timing-Allow-Origin', -+ 'Trailer', -+ 'Transfer-Encoding', -+ 'Upgrade', -+ 'Upgrade-Insecure-Requests', -+ 'User-Agent', -+ 'Vary', -+ 'Via', -+ 'WWW-Authenticate', -+ 'X-Content-Type-Options', -+ 'X-DNS-Prefetch-Control', -+ 'X-Frame-Options', -+ 'X-Permitted-Cross-Domain-Policies', -+ 'X-Powered-By', -+ 'X-Requested-With', -+ 'X-XSS-Protection' -+] -+ -+for (let i = 0; i < wellknownHeaderNames.length; ++i) { -+ const key = wellknownHeaderNames[i] -+ const lowerCasedKey = key.toLowerCase() -+ headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] = -+ lowerCasedKey -+} -+ -+// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`. -+Object.setPrototypeOf(headerNameLowerCasedRecord, null) -+ -+module.exports = { -+ wellknownHeaderNames, -+ headerNameLowerCasedRecord -+} -+ -+ -+/***/ }), -+ -+/***/ 1878: -+/***/ ((module) => { -+ -+"use strict"; -+ -+ -+class UndiciError extends Error { -+ constructor (message) { -+ super(message) -+ this.name = 'UndiciError' -+ this.code = 'UND_ERR' -+ } -+} -+ -+class ConnectTimeoutError extends UndiciError { -+ constructor (message) { -+ super(message) -+ Error.captureStackTrace(this, ConnectTimeoutError) -+ this.name = 'ConnectTimeoutError' -+ this.message = message || 'Connect Timeout Error' -+ this.code = 'UND_ERR_CONNECT_TIMEOUT' -+ } -+} -+ -+class HeadersTimeoutError extends UndiciError { -+ constructor (message) { -+ super(message) -+ Error.captureStackTrace(this, HeadersTimeoutError) -+ this.name = 'HeadersTimeoutError' -+ this.message = message || 'Headers Timeout Error' -+ this.code = 'UND_ERR_HEADERS_TIMEOUT' -+ } -+} -+ -+class HeadersOverflowError extends UndiciError { -+ constructor (message) { -+ super(message) -+ Error.captureStackTrace(this, HeadersOverflowError) -+ this.name = 'HeadersOverflowError' -+ this.message = message || 'Headers Overflow Error' -+ this.code = 'UND_ERR_HEADERS_OVERFLOW' -+ } -+} -+ -+class BodyTimeoutError extends UndiciError { -+ constructor (message) { -+ super(message) -+ Error.captureStackTrace(this, BodyTimeoutError) -+ this.name = 'BodyTimeoutError' -+ this.message = message || 'Body Timeout Error' -+ this.code = 'UND_ERR_BODY_TIMEOUT' -+ } -+} -+ -+class ResponseStatusCodeError extends UndiciError { -+ constructor (message, statusCode, headers, body) { -+ super(message) -+ Error.captureStackTrace(this, ResponseStatusCodeError) -+ this.name = 'ResponseStatusCodeError' -+ this.message = message || 'Response Status Code Error' -+ this.code = 'UND_ERR_RESPONSE_STATUS_CODE' -+ this.body = body -+ this.status = statusCode -+ this.statusCode = statusCode -+ this.headers = headers -+ } -+} -+ -+class InvalidArgumentError extends UndiciError { -+ constructor (message) { -+ super(message) -+ Error.captureStackTrace(this, InvalidArgumentError) -+ this.name = 'InvalidArgumentError' -+ this.message = message || 'Invalid Argument Error' -+ this.code = 'UND_ERR_INVALID_ARG' -+ } -+} -+ -+class InvalidReturnValueError extends UndiciError { -+ constructor (message) { -+ super(message) -+ Error.captureStackTrace(this, InvalidReturnValueError) -+ this.name = 'InvalidReturnValueError' -+ this.message = message || 'Invalid Return Value Error' -+ this.code = 'UND_ERR_INVALID_RETURN_VALUE' -+ } -+} -+ -+class RequestAbortedError extends UndiciError { -+ constructor (message) { -+ super(message) -+ Error.captureStackTrace(this, RequestAbortedError) -+ this.name = 'AbortError' -+ this.message = message || 'Request aborted' -+ this.code = 'UND_ERR_ABORTED' -+ } -+} -+ -+class InformationalError extends UndiciError { -+ constructor (message) { -+ super(message) -+ Error.captureStackTrace(this, InformationalError) -+ this.name = 'InformationalError' -+ this.message = message || 'Request information' -+ this.code = 'UND_ERR_INFO' -+ } -+} -+ -+class RequestContentLengthMismatchError extends UndiciError { -+ constructor (message) { -+ super(message) -+ Error.captureStackTrace(this, RequestContentLengthMismatchError) -+ this.name = 'RequestContentLengthMismatchError' -+ this.message = message || 'Request body length does not match content-length header' -+ this.code = 'UND_ERR_REQ_CONTENT_LENGTH_MISMATCH' -+ } -+} -+ -+class ResponseContentLengthMismatchError extends UndiciError { -+ constructor (message) { -+ super(message) -+ Error.captureStackTrace(this, ResponseContentLengthMismatchError) -+ this.name = 'ResponseContentLengthMismatchError' -+ this.message = message || 'Response body length does not match content-length header' -+ this.code = 'UND_ERR_RES_CONTENT_LENGTH_MISMATCH' -+ } -+} -+ -+class ClientDestroyedError extends UndiciError { -+ constructor (message) { -+ super(message) -+ Error.captureStackTrace(this, ClientDestroyedError) -+ this.name = 'ClientDestroyedError' -+ this.message = message || 'The client is destroyed' -+ this.code = 'UND_ERR_DESTROYED' -+ } -+} -+ -+class ClientClosedError extends UndiciError { -+ constructor (message) { -+ super(message) -+ Error.captureStackTrace(this, ClientClosedError) -+ this.name = 'ClientClosedError' -+ this.message = message || 'The client is closed' -+ this.code = 'UND_ERR_CLOSED' -+ } -+} -+ -+class SocketError extends UndiciError { -+ constructor (message, socket) { -+ super(message) -+ Error.captureStackTrace(this, SocketError) -+ this.name = 'SocketError' -+ this.message = message || 'Socket error' -+ this.code = 'UND_ERR_SOCKET' -+ this.socket = socket -+ } -+} -+ -+class NotSupportedError extends UndiciError { -+ constructor (message) { -+ super(message) -+ Error.captureStackTrace(this, NotSupportedError) -+ this.name = 'NotSupportedError' -+ this.message = message || 'Not supported error' -+ this.code = 'UND_ERR_NOT_SUPPORTED' -+ } -+} -+ -+class BalancedPoolMissingUpstreamError extends UndiciError { -+ constructor (message) { -+ super(message) -+ Error.captureStackTrace(this, NotSupportedError) -+ this.name = 'MissingUpstreamError' -+ this.message = message || 'No upstream has been added to the BalancedPool' -+ this.code = 'UND_ERR_BPL_MISSING_UPSTREAM' -+ } -+} -+ -+class HTTPParserError extends Error { -+ constructor (message, code, data) { -+ super(message) -+ Error.captureStackTrace(this, HTTPParserError) -+ this.name = 'HTTPParserError' -+ this.code = code ? `HPE_${code}` : undefined -+ this.data = data ? data.toString() : undefined -+ } -+} -+ -+class ResponseExceededMaxSizeError extends UndiciError { -+ constructor (message) { -+ super(message) -+ Error.captureStackTrace(this, ResponseExceededMaxSizeError) -+ this.name = 'ResponseExceededMaxSizeError' -+ this.message = message || 'Response content exceeded max size' -+ this.code = 'UND_ERR_RES_EXCEEDED_MAX_SIZE' -+ } -+} -+ -+class RequestRetryError extends UndiciError { -+ constructor (message, code, { headers, data }) { -+ super(message) -+ Error.captureStackTrace(this, RequestRetryError) -+ this.name = 'RequestRetryError' -+ this.message = message || 'Request retry error' -+ this.code = 'UND_ERR_REQ_RETRY' -+ this.statusCode = code -+ this.data = data -+ this.headers = headers -+ } -+} -+ -+module.exports = { -+ HTTPParserError, -+ UndiciError, -+ HeadersTimeoutError, -+ HeadersOverflowError, -+ BodyTimeoutError, -+ RequestContentLengthMismatchError, -+ ConnectTimeoutError, -+ ResponseStatusCodeError, -+ InvalidArgumentError, -+ InvalidReturnValueError, -+ RequestAbortedError, -+ ClientDestroyedError, -+ ClientClosedError, -+ InformationalError, -+ SocketError, -+ NotSupportedError, -+ ResponseContentLengthMismatchError, -+ BalancedPoolMissingUpstreamError, -+ ResponseExceededMaxSizeError, -+ RequestRetryError -+} -+ -+ -+/***/ }), -+ -+/***/ 9901: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { -+ InvalidArgumentError, -+ NotSupportedError -+} = __nccwpck_require__(1878) -+const assert = __nccwpck_require__(9491) -+const { kHTTP2BuildRequest, kHTTP2CopyHeaders, kHTTP1BuildRequest } = __nccwpck_require__(3745) -+const util = __nccwpck_require__(929) -+ -+// tokenRegExp and headerCharRegex have been lifted from -+// https://github.com/nodejs/node/blob/main/lib/_http_common.js -+ -+/** -+ * Verifies that the given val is a valid HTTP token -+ * per the rules defined in RFC 7230 -+ * See https://tools.ietf.org/html/rfc7230#section-3.2.6 -+ */ -+const tokenRegExp = /^[\^_`a-zA-Z\-0-9!#$%&'*+.|~]+$/ -+ -+/** -+ * Matches if val contains an invalid field-vchar -+ * field-value = *( field-content / obs-fold ) -+ * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] -+ * field-vchar = VCHAR / obs-text -+ */ -+const headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/ -+ -+// Verifies that a given path is valid does not contain control chars \x00 to \x20 -+const invalidPathRegex = /[^\u0021-\u00ff]/ -+ -+const kHandler = Symbol('handler') -+ -+const channels = {} -+ -+let extractBody -+ -+try { -+ const diagnosticsChannel = __nccwpck_require__(7643) -+ channels.create = diagnosticsChannel.channel('undici:request:create') -+ channels.bodySent = diagnosticsChannel.channel('undici:request:bodySent') -+ channels.headers = diagnosticsChannel.channel('undici:request:headers') -+ channels.trailers = diagnosticsChannel.channel('undici:request:trailers') -+ channels.error = diagnosticsChannel.channel('undici:request:error') -+} catch { -+ channels.create = { hasSubscribers: false } -+ channels.bodySent = { hasSubscribers: false } -+ channels.headers = { hasSubscribers: false } -+ channels.trailers = { hasSubscribers: false } -+ channels.error = { hasSubscribers: false } -+} -+ -+class Request { -+ constructor (origin, { -+ path, -+ method, -+ body, -+ headers, -+ query, -+ idempotent, -+ blocking, -+ upgrade, -+ headersTimeout, -+ bodyTimeout, -+ reset, -+ throwOnError, -+ expectContinue -+ }, handler) { -+ if (typeof path !== 'string') { -+ throw new InvalidArgumentError('path must be a string') -+ } else if ( -+ path[0] !== '/' && -+ !(path.startsWith('http://') || path.startsWith('https://')) && -+ method !== 'CONNECT' -+ ) { -+ throw new InvalidArgumentError('path must be an absolute URL or start with a slash') -+ } else if (invalidPathRegex.exec(path) !== null) { -+ throw new InvalidArgumentError('invalid request path') -+ } -+ -+ if (typeof method !== 'string') { -+ throw new InvalidArgumentError('method must be a string') -+ } else if (tokenRegExp.exec(method) === null) { -+ throw new InvalidArgumentError('invalid request method') -+ } -+ -+ if (upgrade && typeof upgrade !== 'string') { -+ throw new InvalidArgumentError('upgrade must be a string') -+ } -+ -+ if (headersTimeout != null && (!Number.isFinite(headersTimeout) || headersTimeout < 0)) { -+ throw new InvalidArgumentError('invalid headersTimeout') -+ } -+ -+ if (bodyTimeout != null && (!Number.isFinite(bodyTimeout) || bodyTimeout < 0)) { -+ throw new InvalidArgumentError('invalid bodyTimeout') -+ } -+ -+ if (reset != null && typeof reset !== 'boolean') { -+ throw new InvalidArgumentError('invalid reset') -+ } -+ -+ if (expectContinue != null && typeof expectContinue !== 'boolean') { -+ throw new InvalidArgumentError('invalid expectContinue') -+ } -+ -+ this.headersTimeout = headersTimeout -+ -+ this.bodyTimeout = bodyTimeout -+ -+ this.throwOnError = throwOnError === true -+ -+ this.method = method -+ -+ this.abort = null -+ -+ if (body == null) { -+ this.body = null -+ } else if (util.isStream(body)) { -+ this.body = body -+ -+ const rState = this.body._readableState -+ if (!rState || !rState.autoDestroy) { -+ this.endHandler = function autoDestroy () { -+ util.destroy(this) -+ } -+ this.body.on('end', this.endHandler) -+ } -+ -+ this.errorHandler = err => { -+ if (this.abort) { -+ this.abort(err) -+ } else { -+ this.error = err -+ } -+ } -+ this.body.on('error', this.errorHandler) -+ } else if (util.isBuffer(body)) { -+ this.body = body.byteLength ? body : null -+ } else if (ArrayBuffer.isView(body)) { -+ this.body = body.buffer.byteLength ? Buffer.from(body.buffer, body.byteOffset, body.byteLength) : null -+ } else if (body instanceof ArrayBuffer) { -+ this.body = body.byteLength ? Buffer.from(body) : null -+ } else if (typeof body === 'string') { -+ this.body = body.length ? Buffer.from(body) : null -+ } else if (util.isFormDataLike(body) || util.isIterable(body) || util.isBlobLike(body)) { -+ this.body = body -+ } else { -+ throw new InvalidArgumentError('body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable') -+ } -+ -+ this.completed = false -+ -+ this.aborted = false -+ -+ this.upgrade = upgrade || null -+ -+ this.path = query ? util.buildURL(path, query) : path -+ -+ this.origin = origin -+ -+ this.idempotent = idempotent == null -+ ? method === 'HEAD' || method === 'GET' -+ : idempotent -+ -+ this.blocking = blocking == null ? false : blocking -+ -+ this.reset = reset == null ? null : reset -+ -+ this.host = null -+ -+ this.contentLength = null -+ -+ this.contentType = null -+ -+ this.headers = '' -+ -+ // Only for H2 -+ this.expectContinue = expectContinue != null ? expectContinue : false -+ -+ if (Array.isArray(headers)) { -+ if (headers.length % 2 !== 0) { -+ throw new InvalidArgumentError('headers array must be even') -+ } -+ for (let i = 0; i < headers.length; i += 2) { -+ processHeader(this, headers[i], headers[i + 1]) -+ } -+ } else if (headers && typeof headers === 'object') { -+ const keys = Object.keys(headers) -+ for (let i = 0; i < keys.length; i++) { -+ const key = keys[i] -+ processHeader(this, key, headers[key]) -+ } -+ } else if (headers != null) { -+ throw new InvalidArgumentError('headers must be an object or an array') -+ } -+ -+ if (util.isFormDataLike(this.body)) { -+ if (util.nodeMajor < 16 || (util.nodeMajor === 16 && util.nodeMinor < 8)) { -+ throw new InvalidArgumentError('Form-Data bodies are only supported in node v16.8 and newer.') -+ } -+ -+ if (!extractBody) { -+ extractBody = (__nccwpck_require__(9928).extractBody) -+ } -+ -+ const [bodyStream, contentType] = extractBody(body) -+ if (this.contentType == null) { -+ this.contentType = contentType -+ this.headers += `content-type: ${contentType}\r\n` -+ } -+ this.body = bodyStream.stream -+ this.contentLength = bodyStream.length -+ } else if (util.isBlobLike(body) && this.contentType == null && body.type) { -+ this.contentType = body.type -+ this.headers += `content-type: ${body.type}\r\n` -+ } -+ -+ util.validateHandler(handler, method, upgrade) -+ -+ this.servername = util.getServerName(this.host) -+ -+ this[kHandler] = handler -+ -+ if (channels.create.hasSubscribers) { -+ channels.create.publish({ request: this }) -+ } -+ } -+ -+ onBodySent (chunk) { -+ if (this[kHandler].onBodySent) { -+ try { -+ return this[kHandler].onBodySent(chunk) -+ } catch (err) { -+ this.abort(err) -+ } -+ } -+ } -+ -+ onRequestSent () { -+ if (channels.bodySent.hasSubscribers) { -+ channels.bodySent.publish({ request: this }) -+ } -+ -+ if (this[kHandler].onRequestSent) { -+ try { -+ return this[kHandler].onRequestSent() -+ } catch (err) { -+ this.abort(err) -+ } -+ } -+ } -+ -+ onConnect (abort) { -+ assert(!this.aborted) -+ assert(!this.completed) -+ -+ if (this.error) { -+ abort(this.error) -+ } else { -+ this.abort = abort -+ return this[kHandler].onConnect(abort) -+ } -+ } -+ -+ onHeaders (statusCode, headers, resume, statusText) { -+ assert(!this.aborted) -+ assert(!this.completed) -+ -+ if (channels.headers.hasSubscribers) { -+ channels.headers.publish({ request: this, response: { statusCode, headers, statusText } }) -+ } -+ -+ try { -+ return this[kHandler].onHeaders(statusCode, headers, resume, statusText) -+ } catch (err) { -+ this.abort(err) -+ } -+ } -+ -+ onData (chunk) { -+ assert(!this.aborted) -+ assert(!this.completed) -+ -+ try { -+ return this[kHandler].onData(chunk) -+ } catch (err) { -+ this.abort(err) -+ return false -+ } -+ } -+ -+ onUpgrade (statusCode, headers, socket) { -+ assert(!this.aborted) -+ assert(!this.completed) -+ -+ return this[kHandler].onUpgrade(statusCode, headers, socket) -+ } -+ -+ onComplete (trailers) { -+ this.onFinally() -+ -+ assert(!this.aborted) -+ -+ this.completed = true -+ if (channels.trailers.hasSubscribers) { -+ channels.trailers.publish({ request: this, trailers }) -+ } -+ -+ try { -+ return this[kHandler].onComplete(trailers) -+ } catch (err) { -+ // TODO (fix): This might be a bad idea? -+ this.onError(err) -+ } -+ } -+ -+ onError (error) { -+ this.onFinally() -+ -+ if (channels.error.hasSubscribers) { -+ channels.error.publish({ request: this, error }) -+ } -+ -+ if (this.aborted) { -+ return -+ } -+ this.aborted = true -+ -+ return this[kHandler].onError(error) -+ } -+ -+ onFinally () { -+ if (this.errorHandler) { -+ this.body.off('error', this.errorHandler) -+ this.errorHandler = null -+ } -+ -+ if (this.endHandler) { -+ this.body.off('end', this.endHandler) -+ this.endHandler = null -+ } -+ } -+ -+ // TODO: adjust to support H2 -+ addHeader (key, value) { -+ processHeader(this, key, value) -+ return this -+ } -+ -+ static [kHTTP1BuildRequest] (origin, opts, handler) { -+ // TODO: Migrate header parsing here, to make Requests -+ // HTTP agnostic -+ return new Request(origin, opts, handler) -+ } -+ -+ static [kHTTP2BuildRequest] (origin, opts, handler) { -+ const headers = opts.headers -+ opts = { ...opts, headers: null } -+ -+ const request = new Request(origin, opts, handler) -+ -+ request.headers = {} -+ -+ if (Array.isArray(headers)) { -+ if (headers.length % 2 !== 0) { -+ throw new InvalidArgumentError('headers array must be even') -+ } -+ for (let i = 0; i < headers.length; i += 2) { -+ processHeader(request, headers[i], headers[i + 1], true) -+ } -+ } else if (headers && typeof headers === 'object') { -+ const keys = Object.keys(headers) -+ for (let i = 0; i < keys.length; i++) { -+ const key = keys[i] -+ processHeader(request, key, headers[key], true) -+ } -+ } else if (headers != null) { -+ throw new InvalidArgumentError('headers must be an object or an array') -+ } -+ -+ return request -+ } -+ -+ static [kHTTP2CopyHeaders] (raw) { -+ const rawHeaders = raw.split('\r\n') -+ const headers = {} -+ -+ for (const header of rawHeaders) { -+ const [key, value] = header.split(': ') -+ -+ if (value == null || value.length === 0) continue -+ -+ if (headers[key]) headers[key] += `,${value}` -+ else headers[key] = value -+ } -+ -+ return headers -+ } -+} -+ -+function processHeaderValue (key, val, skipAppend) { -+ if (val && typeof val === 'object') { -+ throw new InvalidArgumentError(`invalid ${key} header`) -+ } -+ -+ val = val != null ? `${val}` : '' -+ -+ if (headerCharRegex.exec(val) !== null) { -+ throw new InvalidArgumentError(`invalid ${key} header`) -+ } -+ -+ return skipAppend ? val : `${key}: ${val}\r\n` -+} -+ -+function processHeader (request, key, val, skipAppend = false) { -+ if (val && (typeof val === 'object' && !Array.isArray(val))) { -+ throw new InvalidArgumentError(`invalid ${key} header`) -+ } else if (val === undefined) { -+ return -+ } -+ -+ if ( -+ request.host === null && -+ key.length === 4 && -+ key.toLowerCase() === 'host' -+ ) { -+ if (headerCharRegex.exec(val) !== null) { -+ throw new InvalidArgumentError(`invalid ${key} header`) -+ } -+ // Consumed by Client -+ request.host = val -+ } else if ( -+ request.contentLength === null && -+ key.length === 14 && -+ key.toLowerCase() === 'content-length' -+ ) { -+ request.contentLength = parseInt(val, 10) -+ if (!Number.isFinite(request.contentLength)) { -+ throw new InvalidArgumentError('invalid content-length header') -+ } -+ } else if ( -+ request.contentType === null && -+ key.length === 12 && -+ key.toLowerCase() === 'content-type' -+ ) { -+ request.contentType = val -+ if (skipAppend) request.headers[key] = processHeaderValue(key, val, skipAppend) -+ else request.headers += processHeaderValue(key, val) -+ } else if ( -+ key.length === 17 && -+ key.toLowerCase() === 'transfer-encoding' -+ ) { -+ throw new InvalidArgumentError('invalid transfer-encoding header') -+ } else if ( -+ key.length === 10 && -+ key.toLowerCase() === 'connection' -+ ) { -+ const value = typeof val === 'string' ? val.toLowerCase() : null -+ if (value !== 'close' && value !== 'keep-alive') { -+ throw new InvalidArgumentError('invalid connection header') -+ } else if (value === 'close') { -+ request.reset = true -+ } -+ } else if ( -+ key.length === 10 && -+ key.toLowerCase() === 'keep-alive' -+ ) { -+ throw new InvalidArgumentError('invalid keep-alive header') -+ } else if ( -+ key.length === 7 && -+ key.toLowerCase() === 'upgrade' -+ ) { -+ throw new InvalidArgumentError('invalid upgrade header') -+ } else if ( -+ key.length === 6 && -+ key.toLowerCase() === 'expect' -+ ) { -+ throw new NotSupportedError('expect header not supported') -+ } else if (tokenRegExp.exec(key) === null) { -+ throw new InvalidArgumentError('invalid header key') -+ } else { -+ if (Array.isArray(val)) { -+ for (let i = 0; i < val.length; i++) { -+ if (skipAppend) { -+ if (request.headers[key]) request.headers[key] += `,${processHeaderValue(key, val[i], skipAppend)}` -+ else request.headers[key] = processHeaderValue(key, val[i], skipAppend) -+ } else { -+ request.headers += processHeaderValue(key, val[i]) -+ } -+ } -+ } else { -+ if (skipAppend) request.headers[key] = processHeaderValue(key, val, skipAppend) -+ else request.headers += processHeaderValue(key, val) -+ } -+ } -+} -+ -+module.exports = Request -+ -+ -+/***/ }), -+ -+/***/ 3745: -+/***/ ((module) => { -+ -+module.exports = { -+ kClose: Symbol('close'), -+ kDestroy: Symbol('destroy'), -+ kDispatch: Symbol('dispatch'), -+ kUrl: Symbol('url'), -+ kWriting: Symbol('writing'), -+ kResuming: Symbol('resuming'), -+ kQueue: Symbol('queue'), -+ kConnect: Symbol('connect'), -+ kConnecting: Symbol('connecting'), -+ kHeadersList: Symbol('headers list'), -+ kKeepAliveDefaultTimeout: Symbol('default keep alive timeout'), -+ kKeepAliveMaxTimeout: Symbol('max keep alive timeout'), -+ kKeepAliveTimeoutThreshold: Symbol('keep alive timeout threshold'), -+ kKeepAliveTimeoutValue: Symbol('keep alive timeout'), -+ kKeepAlive: Symbol('keep alive'), -+ kHeadersTimeout: Symbol('headers timeout'), -+ kBodyTimeout: Symbol('body timeout'), -+ kServerName: Symbol('server name'), -+ kLocalAddress: Symbol('local address'), -+ kHost: Symbol('host'), -+ kNoRef: Symbol('no ref'), -+ kBodyUsed: Symbol('used'), -+ kRunning: Symbol('running'), -+ kBlocking: Symbol('blocking'), -+ kPending: Symbol('pending'), -+ kSize: Symbol('size'), -+ kBusy: Symbol('busy'), -+ kQueued: Symbol('queued'), -+ kFree: Symbol('free'), -+ kConnected: Symbol('connected'), -+ kClosed: Symbol('closed'), -+ kNeedDrain: Symbol('need drain'), -+ kReset: Symbol('reset'), -+ kDestroyed: Symbol.for('nodejs.stream.destroyed'), -+ kMaxHeadersSize: Symbol('max headers size'), -+ kRunningIdx: Symbol('running index'), -+ kPendingIdx: Symbol('pending index'), -+ kError: Symbol('error'), -+ kClients: Symbol('clients'), -+ kClient: Symbol('client'), -+ kParser: Symbol('parser'), -+ kOnDestroyed: Symbol('destroy callbacks'), -+ kPipelining: Symbol('pipelining'), -+ kSocket: Symbol('socket'), -+ kHostHeader: Symbol('host header'), -+ kConnector: Symbol('connector'), -+ kStrictContentLength: Symbol('strict content length'), -+ kMaxRedirections: Symbol('maxRedirections'), -+ kMaxRequests: Symbol('maxRequestsPerClient'), -+ kProxy: Symbol('proxy agent options'), -+ kCounter: Symbol('socket request counter'), -+ kInterceptors: Symbol('dispatch interceptors'), -+ kMaxResponseSize: Symbol('max response size'), -+ kHTTP2Session: Symbol('http2Session'), -+ kHTTP2SessionState: Symbol('http2Session state'), -+ kHTTP2BuildRequest: Symbol('http2 build request'), -+ kHTTP1BuildRequest: Symbol('http1 build request'), -+ kHTTP2CopyHeaders: Symbol('http2 copy headers'), -+ kHTTPConnVersion: Symbol('http connection version'), -+ kRetryHandlerDefaultRetry: Symbol('retry agent default retry'), -+ kConstruct: Symbol('constructable') -+} -+ -+ -+/***/ }), -+ -+/***/ 929: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const assert = __nccwpck_require__(9491) -+const { kDestroyed, kBodyUsed } = __nccwpck_require__(3745) -+const { IncomingMessage } = __nccwpck_require__(3685) -+const stream = __nccwpck_require__(2781) -+const net = __nccwpck_require__(1808) -+const { InvalidArgumentError } = __nccwpck_require__(1878) -+const { Blob } = __nccwpck_require__(4300) -+const nodeUtil = __nccwpck_require__(3837) -+const { stringify } = __nccwpck_require__(3477) -+const { headerNameLowerCasedRecord } = __nccwpck_require__(3916) -+ -+const [nodeMajor, nodeMinor] = process.versions.node.split('.').map(v => Number(v)) -+ -+function nop () {} -+ -+function isStream (obj) { -+ return obj && typeof obj === 'object' && typeof obj.pipe === 'function' && typeof obj.on === 'function' -+} -+ -+// based on https://github.com/node-fetch/fetch-blob/blob/8ab587d34080de94140b54f07168451e7d0b655e/index.js#L229-L241 (MIT License) -+function isBlobLike (object) { -+ return (Blob && object instanceof Blob) || ( -+ object && -+ typeof object === 'object' && -+ (typeof object.stream === 'function' || -+ typeof object.arrayBuffer === 'function') && -+ /^(Blob|File)$/.test(object[Symbol.toStringTag]) -+ ) -+} -+ -+function buildURL (url, queryParams) { -+ if (url.includes('?') || url.includes('#')) { -+ throw new Error('Query params cannot be passed when url already contains "?" or "#".') -+ } -+ -+ const stringified = stringify(queryParams) -+ -+ if (stringified) { -+ url += '?' + stringified -+ } -+ -+ return url -+} -+ -+function parseURL (url) { -+ if (typeof url === 'string') { -+ url = new URL(url) -+ -+ if (!/^https?:/.test(url.origin || url.protocol)) { -+ throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.') -+ } -+ -+ return url -+ } -+ -+ if (!url || typeof url !== 'object') { -+ throw new InvalidArgumentError('Invalid URL: The URL argument must be a non-null object.') -+ } -+ -+ if (!/^https?:/.test(url.origin || url.protocol)) { -+ throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.') -+ } -+ -+ if (!(url instanceof URL)) { -+ if (url.port != null && url.port !== '' && !Number.isFinite(parseInt(url.port))) { -+ throw new InvalidArgumentError('Invalid URL: port must be a valid integer or a string representation of an integer.') -+ } -+ -+ if (url.path != null && typeof url.path !== 'string') { -+ throw new InvalidArgumentError('Invalid URL path: the path must be a string or null/undefined.') -+ } -+ -+ if (url.pathname != null && typeof url.pathname !== 'string') { -+ throw new InvalidArgumentError('Invalid URL pathname: the pathname must be a string or null/undefined.') -+ } -+ -+ if (url.hostname != null && typeof url.hostname !== 'string') { -+ throw new InvalidArgumentError('Invalid URL hostname: the hostname must be a string or null/undefined.') -+ } -+ -+ if (url.origin != null && typeof url.origin !== 'string') { -+ throw new InvalidArgumentError('Invalid URL origin: the origin must be a string or null/undefined.') -+ } -+ -+ const port = url.port != null -+ ? url.port -+ : (url.protocol === 'https:' ? 443 : 80) -+ let origin = url.origin != null -+ ? url.origin -+ : `${url.protocol}//${url.hostname}:${port}` -+ let path = url.path != null -+ ? url.path -+ : `${url.pathname || ''}${url.search || ''}` -+ -+ if (origin.endsWith('/')) { -+ origin = origin.substring(0, origin.length - 1) -+ } -+ -+ if (path && !path.startsWith('/')) { -+ path = `/${path}` -+ } -+ // new URL(path, origin) is unsafe when `path` contains an absolute URL -+ // From https://developer.mozilla.org/en-US/docs/Web/API/URL/URL: -+ // If first parameter is a relative URL, second param is required, and will be used as the base URL. -+ // If first parameter is an absolute URL, a given second param will be ignored. -+ url = new URL(origin + path) -+ } -+ -+ return url -+} -+ -+function parseOrigin (url) { -+ url = parseURL(url) -+ -+ if (url.pathname !== '/' || url.search || url.hash) { -+ throw new InvalidArgumentError('invalid url') -+ } -+ -+ return url -+} -+ -+function getHostname (host) { -+ if (host[0] === '[') { -+ const idx = host.indexOf(']') -+ -+ assert(idx !== -1) -+ return host.substring(1, idx) -+ } -+ -+ const idx = host.indexOf(':') -+ if (idx === -1) return host -+ -+ return host.substring(0, idx) -+} -+ -+// IP addresses are not valid server names per RFC6066 -+// > Currently, the only server names supported are DNS hostnames -+function getServerName (host) { -+ if (!host) { -+ return null -+ } -+ -+ assert.strictEqual(typeof host, 'string') -+ -+ const servername = getHostname(host) -+ if (net.isIP(servername)) { -+ return '' -+ } -+ -+ return servername -+} -+ -+function deepClone (obj) { -+ return JSON.parse(JSON.stringify(obj)) -+} -+ -+function isAsyncIterable (obj) { -+ return !!(obj != null && typeof obj[Symbol.asyncIterator] === 'function') -+} -+ -+function isIterable (obj) { -+ return !!(obj != null && (typeof obj[Symbol.iterator] === 'function' || typeof obj[Symbol.asyncIterator] === 'function')) -+} -+ -+function bodyLength (body) { -+ if (body == null) { -+ return 0 -+ } else if (isStream(body)) { -+ const state = body._readableState -+ return state && state.objectMode === false && state.ended === true && Number.isFinite(state.length) -+ ? state.length -+ : null -+ } else if (isBlobLike(body)) { -+ return body.size != null ? body.size : null -+ } else if (isBuffer(body)) { -+ return body.byteLength -+ } -+ -+ return null -+} -+ -+function isDestroyed (stream) { -+ return !stream || !!(stream.destroyed || stream[kDestroyed]) -+} -+ -+function isReadableAborted (stream) { -+ const state = stream && stream._readableState -+ return isDestroyed(stream) && state && !state.endEmitted -+} -+ -+function destroy (stream, err) { -+ if (stream == null || !isStream(stream) || isDestroyed(stream)) { -+ return -+ } -+ -+ if (typeof stream.destroy === 'function') { -+ if (Object.getPrototypeOf(stream).constructor === IncomingMessage) { -+ // See: https://github.com/nodejs/node/pull/38505/files -+ stream.socket = null -+ } -+ -+ stream.destroy(err) -+ } else if (err) { -+ process.nextTick((stream, err) => { -+ stream.emit('error', err) -+ }, stream, err) -+ } -+ -+ if (stream.destroyed !== true) { -+ stream[kDestroyed] = true -+ } -+} -+ -+const KEEPALIVE_TIMEOUT_EXPR = /timeout=(\d+)/ -+function parseKeepAliveTimeout (val) { -+ const m = val.toString().match(KEEPALIVE_TIMEOUT_EXPR) -+ return m ? parseInt(m[1], 10) * 1000 : null -+} -+ -+/** -+ * Retrieves a header name and returns its lowercase value. -+ * @param {string | Buffer} value Header name -+ * @returns {string} -+ */ -+function headerNameToString (value) { -+ return headerNameLowerCasedRecord[value] || value.toLowerCase() -+} -+ -+function parseHeaders (headers, obj = {}) { -+ // For H2 support -+ if (!Array.isArray(headers)) return headers -+ -+ for (let i = 0; i < headers.length; i += 2) { -+ const key = headers[i].toString().toLowerCase() -+ let val = obj[key] -+ -+ if (!val) { -+ if (Array.isArray(headers[i + 1])) { -+ obj[key] = headers[i + 1].map(x => x.toString('utf8')) -+ } else { -+ obj[key] = headers[i + 1].toString('utf8') -+ } -+ } else { -+ if (!Array.isArray(val)) { -+ val = [val] -+ obj[key] = val -+ } -+ val.push(headers[i + 1].toString('utf8')) -+ } -+ } -+ -+ // See https://github.com/nodejs/node/pull/46528 -+ if ('content-length' in obj && 'content-disposition' in obj) { -+ obj['content-disposition'] = Buffer.from(obj['content-disposition']).toString('latin1') -+ } -+ -+ return obj -+} -+ -+function parseRawHeaders (headers) { -+ const ret = [] -+ let hasContentLength = false -+ let contentDispositionIdx = -1 -+ -+ for (let n = 0; n < headers.length; n += 2) { -+ const key = headers[n + 0].toString() -+ const val = headers[n + 1].toString('utf8') -+ -+ if (key.length === 14 && (key === 'content-length' || key.toLowerCase() === 'content-length')) { -+ ret.push(key, val) -+ hasContentLength = true -+ } else if (key.length === 19 && (key === 'content-disposition' || key.toLowerCase() === 'content-disposition')) { -+ contentDispositionIdx = ret.push(key, val) - 1 -+ } else { -+ ret.push(key, val) -+ } -+ } -+ -+ // See https://github.com/nodejs/node/pull/46528 -+ if (hasContentLength && contentDispositionIdx !== -1) { -+ ret[contentDispositionIdx] = Buffer.from(ret[contentDispositionIdx]).toString('latin1') -+ } -+ -+ return ret -+} -+ -+function isBuffer (buffer) { -+ // See, https://github.com/mcollina/undici/pull/319 -+ return buffer instanceof Uint8Array || Buffer.isBuffer(buffer) -+} -+ -+function validateHandler (handler, method, upgrade) { -+ if (!handler || typeof handler !== 'object') { -+ throw new InvalidArgumentError('handler must be an object') -+ } -+ -+ if (typeof handler.onConnect !== 'function') { -+ throw new InvalidArgumentError('invalid onConnect method') -+ } -+ -+ if (typeof handler.onError !== 'function') { -+ throw new InvalidArgumentError('invalid onError method') -+ } -+ -+ if (typeof handler.onBodySent !== 'function' && handler.onBodySent !== undefined) { -+ throw new InvalidArgumentError('invalid onBodySent method') -+ } -+ -+ if (upgrade || method === 'CONNECT') { -+ if (typeof handler.onUpgrade !== 'function') { -+ throw new InvalidArgumentError('invalid onUpgrade method') -+ } -+ } else { -+ if (typeof handler.onHeaders !== 'function') { -+ throw new InvalidArgumentError('invalid onHeaders method') -+ } -+ -+ if (typeof handler.onData !== 'function') { -+ throw new InvalidArgumentError('invalid onData method') -+ } -+ -+ if (typeof handler.onComplete !== 'function') { -+ throw new InvalidArgumentError('invalid onComplete method') -+ } -+ } -+} -+ -+// A body is disturbed if it has been read from and it cannot -+// be re-used without losing state or data. -+function isDisturbed (body) { -+ return !!(body && ( -+ stream.isDisturbed -+ ? stream.isDisturbed(body) || body[kBodyUsed] // TODO (fix): Why is body[kBodyUsed] needed? -+ : body[kBodyUsed] || -+ body.readableDidRead || -+ (body._readableState && body._readableState.dataEmitted) || -+ isReadableAborted(body) -+ )) -+} -+ -+function isErrored (body) { -+ return !!(body && ( -+ stream.isErrored -+ ? stream.isErrored(body) -+ : /state: 'errored'/.test(nodeUtil.inspect(body) -+ ))) -+} -+ -+function isReadable (body) { -+ return !!(body && ( -+ stream.isReadable -+ ? stream.isReadable(body) -+ : /state: 'readable'/.test(nodeUtil.inspect(body) -+ ))) -+} -+ -+function getSocketInfo (socket) { -+ return { -+ localAddress: socket.localAddress, -+ localPort: socket.localPort, -+ remoteAddress: socket.remoteAddress, -+ remotePort: socket.remotePort, -+ remoteFamily: socket.remoteFamily, -+ timeout: socket.timeout, -+ bytesWritten: socket.bytesWritten, -+ bytesRead: socket.bytesRead -+ } -+} -+ -+async function * convertIterableToBuffer (iterable) { -+ for await (const chunk of iterable) { -+ yield Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk) -+ } -+} -+ -+let ReadableStream -+function ReadableStreamFrom (iterable) { -+ if (!ReadableStream) { -+ ReadableStream = (__nccwpck_require__(5356).ReadableStream) -+ } -+ -+ if (ReadableStream.from) { -+ return ReadableStream.from(convertIterableToBuffer(iterable)) -+ } -+ -+ let iterator -+ return new ReadableStream( -+ { -+ async start () { -+ iterator = iterable[Symbol.asyncIterator]() -+ }, -+ async pull (controller) { -+ const { done, value } = await iterator.next() -+ if (done) { -+ queueMicrotask(() => { -+ controller.close() -+ }) -+ } else { -+ const buf = Buffer.isBuffer(value) ? value : Buffer.from(value) -+ controller.enqueue(new Uint8Array(buf)) -+ } -+ return controller.desiredSize > 0 -+ }, -+ async cancel (reason) { -+ await iterator.return() -+ } -+ }, -+ 0 -+ ) -+} -+ -+// The chunk should be a FormData instance and contains -+// all the required methods. -+function isFormDataLike (object) { -+ return ( -+ object && -+ typeof object === 'object' && -+ typeof object.append === 'function' && -+ typeof object.delete === 'function' && -+ typeof object.get === 'function' && -+ typeof object.getAll === 'function' && -+ typeof object.has === 'function' && -+ typeof object.set === 'function' && -+ object[Symbol.toStringTag] === 'FormData' -+ ) -+} -+ -+function throwIfAborted (signal) { -+ if (!signal) { return } -+ if (typeof signal.throwIfAborted === 'function') { -+ signal.throwIfAborted() -+ } else { -+ if (signal.aborted) { -+ // DOMException not available < v17.0.0 -+ const err = new Error('The operation was aborted') -+ err.name = 'AbortError' -+ throw err -+ } -+ } -+} -+ -+function addAbortListener (signal, listener) { -+ if ('addEventListener' in signal) { -+ signal.addEventListener('abort', listener, { once: true }) -+ return () => signal.removeEventListener('abort', listener) -+ } -+ signal.addListener('abort', listener) -+ return () => signal.removeListener('abort', listener) -+} -+ -+const hasToWellFormed = !!String.prototype.toWellFormed -+ -+/** -+ * @param {string} val -+ */ -+function toUSVString (val) { -+ if (hasToWellFormed) { -+ return `${val}`.toWellFormed() -+ } else if (nodeUtil.toUSVString) { -+ return nodeUtil.toUSVString(val) -+ } -+ -+ return `${val}` -+} -+ -+// Parsed accordingly to RFC 9110 -+// https://www.rfc-editor.org/rfc/rfc9110#field.content-range -+function parseRangeHeader (range) { -+ if (range == null || range === '') return { start: 0, end: null, size: null } -+ -+ const m = range ? range.match(/^bytes (\d+)-(\d+)\/(\d+)?$/) : null -+ return m -+ ? { -+ start: parseInt(m[1]), -+ end: m[2] ? parseInt(m[2]) : null, -+ size: m[3] ? parseInt(m[3]) : null -+ } -+ : null -+} -+ -+const kEnumerableProperty = Object.create(null) -+kEnumerableProperty.enumerable = true -+ -+module.exports = { -+ kEnumerableProperty, -+ nop, -+ isDisturbed, -+ isErrored, -+ isReadable, -+ toUSVString, -+ isReadableAborted, -+ isBlobLike, -+ parseOrigin, -+ parseURL, -+ getServerName, -+ isStream, -+ isIterable, -+ isAsyncIterable, -+ isDestroyed, -+ headerNameToString, -+ parseRawHeaders, -+ parseHeaders, -+ parseKeepAliveTimeout, -+ destroy, -+ bodyLength, -+ deepClone, -+ ReadableStreamFrom, -+ isBuffer, -+ validateHandler, -+ getSocketInfo, -+ isFormDataLike, -+ buildURL, -+ throwIfAborted, -+ addAbortListener, -+ parseRangeHeader, -+ nodeMajor, -+ nodeMinor, -+ nodeHasAutoSelectFamily: nodeMajor > 18 || (nodeMajor === 18 && nodeMinor >= 13), -+ safeHTTPMethods: ['GET', 'HEAD', 'OPTIONS', 'TRACE'] -+} -+ -+ -+/***/ }), -+ -+/***/ 6552: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const Dispatcher = __nccwpck_require__(8307) -+const { -+ ClientDestroyedError, -+ ClientClosedError, -+ InvalidArgumentError -+} = __nccwpck_require__(1878) -+const { kDestroy, kClose, kDispatch, kInterceptors } = __nccwpck_require__(3745) -+ -+const kDestroyed = Symbol('destroyed') -+const kClosed = Symbol('closed') -+const kOnDestroyed = Symbol('onDestroyed') -+const kOnClosed = Symbol('onClosed') -+const kInterceptedDispatch = Symbol('Intercepted Dispatch') -+ -+class DispatcherBase extends Dispatcher { -+ constructor () { -+ super() -+ -+ this[kDestroyed] = false -+ this[kOnDestroyed] = null -+ this[kClosed] = false -+ this[kOnClosed] = [] -+ } -+ -+ get destroyed () { -+ return this[kDestroyed] -+ } -+ -+ get closed () { -+ return this[kClosed] -+ } -+ -+ get interceptors () { -+ return this[kInterceptors] -+ } -+ -+ set interceptors (newInterceptors) { -+ if (newInterceptors) { -+ for (let i = newInterceptors.length - 1; i >= 0; i--) { -+ const interceptor = this[kInterceptors][i] -+ if (typeof interceptor !== 'function') { -+ throw new InvalidArgumentError('interceptor must be an function') -+ } -+ } -+ } -+ -+ this[kInterceptors] = newInterceptors -+ } -+ -+ close (callback) { -+ if (callback === undefined) { -+ return new Promise((resolve, reject) => { -+ this.close((err, data) => { -+ return err ? reject(err) : resolve(data) -+ }) -+ }) -+ } -+ -+ if (typeof callback !== 'function') { -+ throw new InvalidArgumentError('invalid callback') -+ } -+ -+ if (this[kDestroyed]) { -+ queueMicrotask(() => callback(new ClientDestroyedError(), null)) -+ return -+ } -+ -+ if (this[kClosed]) { -+ if (this[kOnClosed]) { -+ this[kOnClosed].push(callback) -+ } else { -+ queueMicrotask(() => callback(null, null)) -+ } -+ return -+ } -+ -+ this[kClosed] = true -+ this[kOnClosed].push(callback) -+ -+ const onClosed = () => { -+ const callbacks = this[kOnClosed] -+ this[kOnClosed] = null -+ for (let i = 0; i < callbacks.length; i++) { -+ callbacks[i](null, null) -+ } -+ } -+ -+ // Should not error. -+ this[kClose]() -+ .then(() => this.destroy()) -+ .then(() => { -+ queueMicrotask(onClosed) -+ }) -+ } -+ -+ destroy (err, callback) { -+ if (typeof err === 'function') { -+ callback = err -+ err = null -+ } -+ -+ if (callback === undefined) { -+ return new Promise((resolve, reject) => { -+ this.destroy(err, (err, data) => { -+ return err ? /* istanbul ignore next: should never error */ reject(err) : resolve(data) -+ }) -+ }) -+ } -+ -+ if (typeof callback !== 'function') { -+ throw new InvalidArgumentError('invalid callback') -+ } -+ -+ if (this[kDestroyed]) { -+ if (this[kOnDestroyed]) { -+ this[kOnDestroyed].push(callback) -+ } else { -+ queueMicrotask(() => callback(null, null)) -+ } -+ return -+ } -+ -+ if (!err) { -+ err = new ClientDestroyedError() -+ } -+ -+ this[kDestroyed] = true -+ this[kOnDestroyed] = this[kOnDestroyed] || [] -+ this[kOnDestroyed].push(callback) -+ -+ const onDestroyed = () => { -+ const callbacks = this[kOnDestroyed] -+ this[kOnDestroyed] = null -+ for (let i = 0; i < callbacks.length; i++) { -+ callbacks[i](null, null) -+ } -+ } -+ -+ // Should not error. -+ this[kDestroy](err).then(() => { -+ queueMicrotask(onDestroyed) -+ }) -+ } -+ -+ [kInterceptedDispatch] (opts, handler) { -+ if (!this[kInterceptors] || this[kInterceptors].length === 0) { -+ this[kInterceptedDispatch] = this[kDispatch] -+ return this[kDispatch](opts, handler) -+ } -+ -+ let dispatch = this[kDispatch].bind(this) -+ for (let i = this[kInterceptors].length - 1; i >= 0; i--) { -+ dispatch = this[kInterceptors][i](dispatch) -+ } -+ this[kInterceptedDispatch] = dispatch -+ return dispatch(opts, handler) -+ } -+ -+ dispatch (opts, handler) { -+ if (!handler || typeof handler !== 'object') { -+ throw new InvalidArgumentError('handler must be an object') -+ } -+ -+ try { -+ if (!opts || typeof opts !== 'object') { -+ throw new InvalidArgumentError('opts must be an object.') -+ } -+ -+ if (this[kDestroyed] || this[kOnDestroyed]) { -+ throw new ClientDestroyedError() -+ } -+ -+ if (this[kClosed]) { -+ throw new ClientClosedError() -+ } -+ -+ return this[kInterceptedDispatch](opts, handler) -+ } catch (err) { -+ if (typeof handler.onError !== 'function') { -+ throw new InvalidArgumentError('invalid onError method') -+ } -+ -+ handler.onError(err) -+ -+ return false -+ } -+ } -+} -+ -+module.exports = DispatcherBase -+ -+ -+/***/ }), -+ -+/***/ 8307: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const EventEmitter = __nccwpck_require__(2361) -+ -+class Dispatcher extends EventEmitter { -+ dispatch () { -+ throw new Error('not implemented') -+ } -+ -+ close () { -+ throw new Error('not implemented') -+ } -+ -+ destroy () { -+ throw new Error('not implemented') -+ } -+} -+ -+module.exports = Dispatcher -+ -+ -+/***/ }), -+ -+/***/ 9928: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const Busboy = __nccwpck_require__(781) -+const util = __nccwpck_require__(929) -+const { -+ ReadableStreamFrom, -+ isBlobLike, -+ isReadableStreamLike, -+ readableStreamClose, -+ createDeferredPromise, -+ fullyReadBody -+} = __nccwpck_require__(1554) -+const { FormData } = __nccwpck_require__(8703) -+const { kState } = __nccwpck_require__(8069) -+const { webidl } = __nccwpck_require__(5611) -+const { DOMException, structuredClone } = __nccwpck_require__(9951) -+const { Blob, File: NativeFile } = __nccwpck_require__(4300) -+const { kBodyUsed } = __nccwpck_require__(3745) -+const assert = __nccwpck_require__(9491) -+const { isErrored } = __nccwpck_require__(929) -+const { isUint8Array, isArrayBuffer } = __nccwpck_require__(9830) -+const { File: UndiciFile } = __nccwpck_require__(4517) -+const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(1827) -+ -+let ReadableStream = globalThis.ReadableStream -+ -+/** @type {globalThis['File']} */ -+const File = NativeFile ?? UndiciFile -+const textEncoder = new TextEncoder() -+const textDecoder = new TextDecoder() -+ -+// https://fetch.spec.whatwg.org/#concept-bodyinit-extract -+function extractBody (object, keepalive = false) { -+ if (!ReadableStream) { -+ ReadableStream = (__nccwpck_require__(5356).ReadableStream) -+ } -+ -+ // 1. Let stream be null. -+ let stream = null -+ -+ // 2. If object is a ReadableStream object, then set stream to object. -+ if (object instanceof ReadableStream) { -+ stream = object -+ } else if (isBlobLike(object)) { -+ // 3. Otherwise, if object is a Blob object, set stream to the -+ // result of running object’s get stream. -+ stream = object.stream() -+ } else { -+ // 4. Otherwise, set stream to a new ReadableStream object, and set -+ // up stream. -+ stream = new ReadableStream({ -+ async pull (controller) { -+ controller.enqueue( -+ typeof source === 'string' ? textEncoder.encode(source) : source -+ ) -+ queueMicrotask(() => readableStreamClose(controller)) -+ }, -+ start () {}, -+ type: undefined -+ }) -+ } -+ -+ // 5. Assert: stream is a ReadableStream object. -+ assert(isReadableStreamLike(stream)) -+ -+ // 6. Let action be null. -+ let action = null -+ -+ // 7. Let source be null. -+ let source = null -+ -+ // 8. Let length be null. -+ let length = null -+ -+ // 9. Let type be null. -+ let type = null -+ -+ // 10. Switch on object: -+ if (typeof object === 'string') { -+ // Set source to the UTF-8 encoding of object. -+ // Note: setting source to a Uint8Array here breaks some mocking assumptions. -+ source = object -+ -+ // Set type to `text/plain;charset=UTF-8`. -+ type = 'text/plain;charset=UTF-8' -+ } else if (object instanceof URLSearchParams) { -+ // URLSearchParams -+ -+ // spec says to run application/x-www-form-urlencoded on body.list -+ // this is implemented in Node.js as apart of an URLSearchParams instance toString method -+ // See: https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/lib/internal/url.js#L490 -+ // and https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/lib/internal/url.js#L1100 -+ -+ // Set source to the result of running the application/x-www-form-urlencoded serializer with object’s list. -+ source = object.toString() -+ -+ // Set type to `application/x-www-form-urlencoded;charset=UTF-8`. -+ type = 'application/x-www-form-urlencoded;charset=UTF-8' -+ } else if (isArrayBuffer(object)) { -+ // BufferSource/ArrayBuffer -+ -+ // Set source to a copy of the bytes held by object. -+ source = new Uint8Array(object.slice()) -+ } else if (ArrayBuffer.isView(object)) { -+ // BufferSource/ArrayBufferView -+ -+ // Set source to a copy of the bytes held by object. -+ source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength)) -+ } else if (util.isFormDataLike(object)) { -+ const boundary = `----formdata-undici-0${`${Math.floor(Math.random() * 1e11)}`.padStart(11, '0')}` -+ const prefix = `--${boundary}\r\nContent-Disposition: form-data` -+ -+ /*! formdata-polyfill. MIT License. Jimmy Wärting */ -+ const escape = (str) => -+ str.replace(/\n/g, '%0A').replace(/\r/g, '%0D').replace(/"/g, '%22') -+ const normalizeLinefeeds = (value) => value.replace(/\r?\n|\r/g, '\r\n') -+ -+ // Set action to this step: run the multipart/form-data -+ // encoding algorithm, with object’s entry list and UTF-8. -+ // - This ensures that the body is immutable and can't be changed afterwords -+ // - That the content-length is calculated in advance. -+ // - And that all parts are pre-encoded and ready to be sent. -+ -+ const blobParts = [] -+ const rn = new Uint8Array([13, 10]) // '\r\n' -+ length = 0 -+ let hasUnknownSizeValue = false -+ -+ for (const [name, value] of object) { -+ if (typeof value === 'string') { -+ const chunk = textEncoder.encode(prefix + -+ `; name="${escape(normalizeLinefeeds(name))}"` + -+ `\r\n\r\n${normalizeLinefeeds(value)}\r\n`) -+ blobParts.push(chunk) -+ length += chunk.byteLength -+ } else { -+ const chunk = textEncoder.encode(`${prefix}; name="${escape(normalizeLinefeeds(name))}"` + -+ (value.name ? `; filename="${escape(value.name)}"` : '') + '\r\n' + -+ `Content-Type: ${ -+ value.type || 'application/octet-stream' -+ }\r\n\r\n`) -+ blobParts.push(chunk, value, rn) -+ if (typeof value.size === 'number') { -+ length += chunk.byteLength + value.size + rn.byteLength -+ } else { -+ hasUnknownSizeValue = true -+ } -+ } -+ } -+ -+ const chunk = textEncoder.encode(`--${boundary}--`) -+ blobParts.push(chunk) -+ length += chunk.byteLength -+ if (hasUnknownSizeValue) { -+ length = null -+ } -+ -+ // Set source to object. -+ source = object -+ -+ action = async function * () { -+ for (const part of blobParts) { -+ if (part.stream) { -+ yield * part.stream() -+ } else { -+ yield part -+ } -+ } -+ } -+ -+ // Set type to `multipart/form-data; boundary=`, -+ // followed by the multipart/form-data boundary string generated -+ // by the multipart/form-data encoding algorithm. -+ type = 'multipart/form-data; boundary=' + boundary -+ } else if (isBlobLike(object)) { -+ // Blob -+ -+ // Set source to object. -+ source = object -+ -+ // Set length to object’s size. -+ length = object.size -+ -+ // If object’s type attribute is not the empty byte sequence, set -+ // type to its value. -+ if (object.type) { -+ type = object.type -+ } -+ } else if (typeof object[Symbol.asyncIterator] === 'function') { -+ // If keepalive is true, then throw a TypeError. -+ if (keepalive) { -+ throw new TypeError('keepalive') -+ } -+ -+ // If object is disturbed or locked, then throw a TypeError. -+ if (util.isDisturbed(object) || object.locked) { -+ throw new TypeError( -+ 'Response body object should not be disturbed or locked' -+ ) -+ } -+ -+ stream = -+ object instanceof ReadableStream ? object : ReadableStreamFrom(object) -+ } -+ -+ // 11. If source is a byte sequence, then set action to a -+ // step that returns source and length to source’s length. -+ if (typeof source === 'string' || util.isBuffer(source)) { -+ length = Buffer.byteLength(source) -+ } -+ -+ // 12. If action is non-null, then run these steps in in parallel: -+ if (action != null) { -+ // Run action. -+ let iterator -+ stream = new ReadableStream({ -+ async start () { -+ iterator = action(object)[Symbol.asyncIterator]() -+ }, -+ async pull (controller) { -+ const { value, done } = await iterator.next() -+ if (done) { -+ // When running action is done, close stream. -+ queueMicrotask(() => { -+ controller.close() -+ }) -+ } else { -+ // Whenever one or more bytes are available and stream is not errored, -+ // enqueue a Uint8Array wrapping an ArrayBuffer containing the available -+ // bytes into stream. -+ if (!isErrored(stream)) { -+ controller.enqueue(new Uint8Array(value)) -+ } -+ } -+ return controller.desiredSize > 0 -+ }, -+ async cancel (reason) { -+ await iterator.return() -+ }, -+ type: undefined -+ }) -+ } -+ -+ // 13. Let body be a body whose stream is stream, source is source, -+ // and length is length. -+ const body = { stream, source, length } -+ -+ // 14. Return (body, type). -+ return [body, type] -+} -+ -+// https://fetch.spec.whatwg.org/#bodyinit-safely-extract -+function safelyExtractBody (object, keepalive = false) { -+ if (!ReadableStream) { -+ // istanbul ignore next -+ ReadableStream = (__nccwpck_require__(5356).ReadableStream) -+ } -+ -+ // To safely extract a body and a `Content-Type` value from -+ // a byte sequence or BodyInit object object, run these steps: -+ -+ // 1. If object is a ReadableStream object, then: -+ if (object instanceof ReadableStream) { -+ // Assert: object is neither disturbed nor locked. -+ // istanbul ignore next -+ assert(!util.isDisturbed(object), 'The body has already been consumed.') -+ // istanbul ignore next -+ assert(!object.locked, 'The stream is locked.') -+ } -+ -+ // 2. Return the results of extracting object. -+ return extractBody(object, keepalive) -+} -+ -+function cloneBody (body) { -+ // To clone a body body, run these steps: -+ -+ // https://fetch.spec.whatwg.org/#concept-body-clone -+ -+ // 1. Let « out1, out2 » be the result of teeing body’s stream. -+ const [out1, out2] = body.stream.tee() -+ const out2Clone = structuredClone(out2, { transfer: [out2] }) -+ // This, for whatever reasons, unrefs out2Clone which allows -+ // the process to exit by itself. -+ const [, finalClone] = out2Clone.tee() -+ -+ // 2. Set body’s stream to out1. -+ body.stream = out1 -+ -+ // 3. Return a body whose stream is out2 and other members are copied from body. -+ return { -+ stream: finalClone, -+ length: body.length, -+ source: body.source -+ } -+} -+ -+async function * consumeBody (body) { -+ if (body) { -+ if (isUint8Array(body)) { -+ yield body -+ } else { -+ const stream = body.stream -+ -+ if (util.isDisturbed(stream)) { -+ throw new TypeError('The body has already been consumed.') -+ } -+ -+ if (stream.locked) { -+ throw new TypeError('The stream is locked.') -+ } -+ -+ // Compat. -+ stream[kBodyUsed] = true -+ -+ yield * stream -+ } -+ } -+} -+ -+function throwIfAborted (state) { -+ if (state.aborted) { -+ throw new DOMException('The operation was aborted.', 'AbortError') -+ } -+} -+ -+function bodyMixinMethods (instance) { -+ const methods = { -+ blob () { -+ // The blob() method steps are to return the result of -+ // running consume body with this and the following step -+ // given a byte sequence bytes: return a Blob whose -+ // contents are bytes and whose type attribute is this’s -+ // MIME type. -+ return specConsumeBody(this, (bytes) => { -+ let mimeType = bodyMimeType(this) -+ -+ if (mimeType === 'failure') { -+ mimeType = '' -+ } else if (mimeType) { -+ mimeType = serializeAMimeType(mimeType) -+ } -+ -+ // Return a Blob whose contents are bytes and type attribute -+ // is mimeType. -+ return new Blob([bytes], { type: mimeType }) -+ }, instance) -+ }, -+ -+ arrayBuffer () { -+ // The arrayBuffer() method steps are to return the result -+ // of running consume body with this and the following step -+ // given a byte sequence bytes: return a new ArrayBuffer -+ // whose contents are bytes. -+ return specConsumeBody(this, (bytes) => { -+ return new Uint8Array(bytes).buffer -+ }, instance) -+ }, -+ -+ text () { -+ // The text() method steps are to return the result of running -+ // consume body with this and UTF-8 decode. -+ return specConsumeBody(this, utf8DecodeBytes, instance) -+ }, -+ -+ json () { -+ // The json() method steps are to return the result of running -+ // consume body with this and parse JSON from bytes. -+ return specConsumeBody(this, parseJSONFromBytes, instance) -+ }, -+ -+ async formData () { -+ webidl.brandCheck(this, instance) -+ -+ throwIfAborted(this[kState]) -+ -+ const contentType = this.headers.get('Content-Type') -+ -+ // If mimeType’s essence is "multipart/form-data", then: -+ if (/multipart\/form-data/.test(contentType)) { -+ const headers = {} -+ for (const [key, value] of this.headers) headers[key.toLowerCase()] = value -+ -+ const responseFormData = new FormData() -+ -+ let busboy -+ -+ try { -+ busboy = new Busboy({ -+ headers, -+ preservePath: true -+ }) -+ } catch (err) { -+ throw new DOMException(`${err}`, 'AbortError') -+ } -+ -+ busboy.on('field', (name, value) => { -+ responseFormData.append(name, value) -+ }) -+ busboy.on('file', (name, value, filename, encoding, mimeType) => { -+ const chunks = [] -+ -+ if (encoding === 'base64' || encoding.toLowerCase() === 'base64') { -+ let base64chunk = '' -+ -+ value.on('data', (chunk) => { -+ base64chunk += chunk.toString().replace(/[\r\n]/gm, '') -+ -+ const end = base64chunk.length - base64chunk.length % 4 -+ chunks.push(Buffer.from(base64chunk.slice(0, end), 'base64')) -+ -+ base64chunk = base64chunk.slice(end) -+ }) -+ value.on('end', () => { -+ chunks.push(Buffer.from(base64chunk, 'base64')) -+ responseFormData.append(name, new File(chunks, filename, { type: mimeType })) -+ }) -+ } else { -+ value.on('data', (chunk) => { -+ chunks.push(chunk) -+ }) -+ value.on('end', () => { -+ responseFormData.append(name, new File(chunks, filename, { type: mimeType })) -+ }) -+ } -+ }) -+ -+ const busboyResolve = new Promise((resolve, reject) => { -+ busboy.on('finish', resolve) -+ busboy.on('error', (err) => reject(new TypeError(err))) -+ }) -+ -+ if (this.body !== null) for await (const chunk of consumeBody(this[kState].body)) busboy.write(chunk) -+ busboy.end() -+ await busboyResolve -+ -+ return responseFormData -+ } else if (/application\/x-www-form-urlencoded/.test(contentType)) { -+ // Otherwise, if mimeType’s essence is "application/x-www-form-urlencoded", then: -+ -+ // 1. Let entries be the result of parsing bytes. -+ let entries -+ try { -+ let text = '' -+ // application/x-www-form-urlencoded parser will keep the BOM. -+ // https://url.spec.whatwg.org/#concept-urlencoded-parser -+ // Note that streaming decoder is stateful and cannot be reused -+ const streamingDecoder = new TextDecoder('utf-8', { ignoreBOM: true }) -+ -+ for await (const chunk of consumeBody(this[kState].body)) { -+ if (!isUint8Array(chunk)) { -+ throw new TypeError('Expected Uint8Array chunk') -+ } -+ text += streamingDecoder.decode(chunk, { stream: true }) -+ } -+ text += streamingDecoder.decode() -+ entries = new URLSearchParams(text) -+ } catch (err) { -+ // istanbul ignore next: Unclear when new URLSearchParams can fail on a string. -+ // 2. If entries is failure, then throw a TypeError. -+ throw Object.assign(new TypeError(), { cause: err }) -+ } -+ -+ // 3. Return a new FormData object whose entries are entries. -+ const formData = new FormData() -+ for (const [name, value] of entries) { -+ formData.append(name, value) -+ } -+ return formData -+ } else { -+ // Wait a tick before checking if the request has been aborted. -+ // Otherwise, a TypeError can be thrown when an AbortError should. -+ await Promise.resolve() -+ -+ throwIfAborted(this[kState]) -+ -+ // Otherwise, throw a TypeError. -+ throw webidl.errors.exception({ -+ header: `${instance.name}.formData`, -+ message: 'Could not parse content as FormData.' -+ }) -+ } -+ } -+ } -+ -+ return methods -+} -+ -+function mixinBody (prototype) { -+ Object.assign(prototype.prototype, bodyMixinMethods(prototype)) -+} -+ -+/** -+ * @see https://fetch.spec.whatwg.org/#concept-body-consume-body -+ * @param {Response|Request} object -+ * @param {(value: unknown) => unknown} convertBytesToJSValue -+ * @param {Response|Request} instance -+ */ -+async function specConsumeBody (object, convertBytesToJSValue, instance) { -+ webidl.brandCheck(object, instance) -+ -+ throwIfAborted(object[kState]) -+ -+ // 1. If object is unusable, then return a promise rejected -+ // with a TypeError. -+ if (bodyUnusable(object[kState].body)) { -+ throw new TypeError('Body is unusable') -+ } -+ -+ // 2. Let promise be a new promise. -+ const promise = createDeferredPromise() -+ -+ // 3. Let errorSteps given error be to reject promise with error. -+ const errorSteps = (error) => promise.reject(error) -+ -+ // 4. Let successSteps given a byte sequence data be to resolve -+ // promise with the result of running convertBytesToJSValue -+ // with data. If that threw an exception, then run errorSteps -+ // with that exception. -+ const successSteps = (data) => { -+ try { -+ promise.resolve(convertBytesToJSValue(data)) -+ } catch (e) { -+ errorSteps(e) -+ } -+ } -+ -+ // 5. If object’s body is null, then run successSteps with an -+ // empty byte sequence. -+ if (object[kState].body == null) { -+ successSteps(new Uint8Array()) -+ return promise.promise -+ } -+ -+ // 6. Otherwise, fully read object’s body given successSteps, -+ // errorSteps, and object’s relevant global object. -+ await fullyReadBody(object[kState].body, successSteps, errorSteps) -+ -+ // 7. Return promise. -+ return promise.promise -+} -+ -+// https://fetch.spec.whatwg.org/#body-unusable -+function bodyUnusable (body) { -+ // An object including the Body interface mixin is -+ // said to be unusable if its body is non-null and -+ // its body’s stream is disturbed or locked. -+ return body != null && (body.stream.locked || util.isDisturbed(body.stream)) -+} -+ -+/** -+ * @see https://encoding.spec.whatwg.org/#utf-8-decode -+ * @param {Buffer} buffer -+ */ -+function utf8DecodeBytes (buffer) { -+ if (buffer.length === 0) { -+ return '' -+ } -+ -+ // 1. Let buffer be the result of peeking three bytes from -+ // ioQueue, converted to a byte sequence. -+ -+ // 2. If buffer is 0xEF 0xBB 0xBF, then read three -+ // bytes from ioQueue. (Do nothing with those bytes.) -+ if (buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) { -+ buffer = buffer.subarray(3) -+ } -+ -+ // 3. Process a queue with an instance of UTF-8’s -+ // decoder, ioQueue, output, and "replacement". -+ const output = textDecoder.decode(buffer) -+ -+ // 4. Return output. -+ return output -+} -+ -+/** -+ * @see https://infra.spec.whatwg.org/#parse-json-bytes-to-a-javascript-value -+ * @param {Uint8Array} bytes -+ */ -+function parseJSONFromBytes (bytes) { -+ return JSON.parse(utf8DecodeBytes(bytes)) -+} -+ -+/** -+ * @see https://fetch.spec.whatwg.org/#concept-body-mime-type -+ * @param {import('./response').Response|import('./request').Request} object -+ */ -+function bodyMimeType (object) { -+ const { headersList } = object[kState] -+ const contentType = headersList.get('content-type') -+ -+ if (contentType === null) { -+ return 'failure' -+ } -+ -+ return parseMIMEType(contentType) -+} -+ -+module.exports = { -+ extractBody, -+ safelyExtractBody, -+ cloneBody, -+ mixinBody -+} -+ -+ -+/***/ }), -+ -+/***/ 9951: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { MessageChannel, receiveMessageOnPort } = __nccwpck_require__(1267) -+ -+const corsSafeListedMethods = ['GET', 'HEAD', 'POST'] -+const corsSafeListedMethodsSet = new Set(corsSafeListedMethods) -+ -+const nullBodyStatus = [101, 204, 205, 304] -+ -+const redirectStatus = [301, 302, 303, 307, 308] -+const redirectStatusSet = new Set(redirectStatus) -+ -+// https://fetch.spec.whatwg.org/#block-bad-port -+const badPorts = [ -+ '1', '7', '9', '11', '13', '15', '17', '19', '20', '21', '22', '23', '25', '37', '42', '43', '53', '69', '77', '79', -+ '87', '95', '101', '102', '103', '104', '109', '110', '111', '113', '115', '117', '119', '123', '135', '137', -+ '139', '143', '161', '179', '389', '427', '465', '512', '513', '514', '515', '526', '530', '531', '532', -+ '540', '548', '554', '556', '563', '587', '601', '636', '989', '990', '993', '995', '1719', '1720', '1723', -+ '2049', '3659', '4045', '5060', '5061', '6000', '6566', '6665', '6666', '6667', '6668', '6669', '6697', -+ '10080' -+] -+ -+const badPortsSet = new Set(badPorts) -+ -+// https://w3c.github.io/webappsec-referrer-policy/#referrer-policies -+const referrerPolicy = [ -+ '', -+ 'no-referrer', -+ 'no-referrer-when-downgrade', -+ 'same-origin', -+ 'origin', -+ 'strict-origin', -+ 'origin-when-cross-origin', -+ 'strict-origin-when-cross-origin', -+ 'unsafe-url' -+] -+const referrerPolicySet = new Set(referrerPolicy) -+ -+const requestRedirect = ['follow', 'manual', 'error'] -+ -+const safeMethods = ['GET', 'HEAD', 'OPTIONS', 'TRACE'] -+const safeMethodsSet = new Set(safeMethods) -+ -+const requestMode = ['navigate', 'same-origin', 'no-cors', 'cors'] -+ -+const requestCredentials = ['omit', 'same-origin', 'include'] -+ -+const requestCache = [ -+ 'default', -+ 'no-store', -+ 'reload', -+ 'no-cache', -+ 'force-cache', -+ 'only-if-cached' -+] -+ -+// https://fetch.spec.whatwg.org/#request-body-header-name -+const requestBodyHeader = [ -+ 'content-encoding', -+ 'content-language', -+ 'content-location', -+ 'content-type', -+ // See https://github.com/nodejs/undici/issues/2021 -+ // 'Content-Length' is a forbidden header name, which is typically -+ // removed in the Headers implementation. However, undici doesn't -+ // filter out headers, so we add it here. -+ 'content-length' -+] -+ -+// https://fetch.spec.whatwg.org/#enumdef-requestduplex -+const requestDuplex = [ -+ 'half' -+] -+ -+// http://fetch.spec.whatwg.org/#forbidden-method -+const forbiddenMethods = ['CONNECT', 'TRACE', 'TRACK'] -+const forbiddenMethodsSet = new Set(forbiddenMethods) -+ -+const subresource = [ -+ 'audio', -+ 'audioworklet', -+ 'font', -+ 'image', -+ 'manifest', -+ 'paintworklet', -+ 'script', -+ 'style', -+ 'track', -+ 'video', -+ 'xslt', -+ '' -+] -+const subresourceSet = new Set(subresource) -+ -+/** @type {globalThis['DOMException']} */ -+const DOMException = globalThis.DOMException ?? (() => { -+ // DOMException was only made a global in Node v17.0.0, -+ // but fetch supports >= v16.8. -+ try { -+ atob('~') -+ } catch (err) { -+ return Object.getPrototypeOf(err).constructor -+ } -+})() -+ -+let channel -+ -+/** @type {globalThis['structuredClone']} */ -+const structuredClone = -+ globalThis.structuredClone ?? -+ // https://github.com/nodejs/node/blob/b27ae24dcc4251bad726d9d84baf678d1f707fed/lib/internal/structured_clone.js -+ // structuredClone was added in v17.0.0, but fetch supports v16.8 -+ function structuredClone (value, options = undefined) { -+ if (arguments.length === 0) { -+ throw new TypeError('missing argument') -+ } -+ -+ if (!channel) { -+ channel = new MessageChannel() -+ } -+ channel.port1.unref() -+ channel.port2.unref() -+ channel.port1.postMessage(value, options?.transfer) -+ return receiveMessageOnPort(channel.port2).message -+ } -+ -+module.exports = { -+ DOMException, -+ structuredClone, -+ subresource, -+ forbiddenMethods, -+ requestBodyHeader, -+ referrerPolicy, -+ requestRedirect, -+ requestMode, -+ requestCredentials, -+ requestCache, -+ redirectStatus, -+ corsSafeListedMethods, -+ nullBodyStatus, -+ safeMethods, -+ badPorts, -+ requestDuplex, -+ subresourceSet, -+ badPortsSet, -+ redirectStatusSet, -+ corsSafeListedMethodsSet, -+ safeMethodsSet, -+ forbiddenMethodsSet, -+ referrerPolicySet -+} -+ -+ -+/***/ }), -+ -+/***/ 1827: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+const assert = __nccwpck_require__(9491) -+const { atob } = __nccwpck_require__(4300) -+const { isomorphicDecode } = __nccwpck_require__(1554) -+ -+const encoder = new TextEncoder() -+ -+/** -+ * @see https://mimesniff.spec.whatwg.org/#http-token-code-point -+ */ -+const HTTP_TOKEN_CODEPOINTS = /^[!#$%&'*+-.^_|~A-Za-z0-9]+$/ -+const HTTP_WHITESPACE_REGEX = /(\u000A|\u000D|\u0009|\u0020)/ // eslint-disable-line -+/** -+ * @see https://mimesniff.spec.whatwg.org/#http-quoted-string-token-code-point -+ */ -+const HTTP_QUOTED_STRING_TOKENS = /[\u0009|\u0020-\u007E|\u0080-\u00FF]/ // eslint-disable-line -+ -+// https://fetch.spec.whatwg.org/#data-url-processor -+/** @param {URL} dataURL */ -+function dataURLProcessor (dataURL) { -+ // 1. Assert: dataURL’s scheme is "data". -+ assert(dataURL.protocol === 'data:') -+ -+ // 2. Let input be the result of running the URL -+ // serializer on dataURL with exclude fragment -+ // set to true. -+ let input = URLSerializer(dataURL, true) -+ -+ // 3. Remove the leading "data:" string from input. -+ input = input.slice(5) -+ -+ // 4. Let position point at the start of input. -+ const position = { position: 0 } -+ -+ // 5. Let mimeType be the result of collecting a -+ // sequence of code points that are not equal -+ // to U+002C (,), given position. -+ let mimeType = collectASequenceOfCodePointsFast( -+ ',', -+ input, -+ position -+ ) -+ -+ // 6. Strip leading and trailing ASCII whitespace -+ // from mimeType. -+ // Undici implementation note: we need to store the -+ // length because if the mimetype has spaces removed, -+ // the wrong amount will be sliced from the input in -+ // step #9 -+ const mimeTypeLength = mimeType.length -+ mimeType = removeASCIIWhitespace(mimeType, true, true) -+ -+ // 7. If position is past the end of input, then -+ // return failure -+ if (position.position >= input.length) { -+ return 'failure' -+ } -+ -+ // 8. Advance position by 1. -+ position.position++ -+ -+ // 9. Let encodedBody be the remainder of input. -+ const encodedBody = input.slice(mimeTypeLength + 1) -+ -+ // 10. Let body be the percent-decoding of encodedBody. -+ let body = stringPercentDecode(encodedBody) -+ -+ // 11. If mimeType ends with U+003B (;), followed by -+ // zero or more U+0020 SPACE, followed by an ASCII -+ // case-insensitive match for "base64", then: -+ if (/;(\u0020){0,}base64$/i.test(mimeType)) { -+ // 1. Let stringBody be the isomorphic decode of body. -+ const stringBody = isomorphicDecode(body) -+ -+ // 2. Set body to the forgiving-base64 decode of -+ // stringBody. -+ body = forgivingBase64(stringBody) -+ -+ // 3. If body is failure, then return failure. -+ if (body === 'failure') { -+ return 'failure' -+ } -+ -+ // 4. Remove the last 6 code points from mimeType. -+ mimeType = mimeType.slice(0, -6) -+ -+ // 5. Remove trailing U+0020 SPACE code points from mimeType, -+ // if any. -+ mimeType = mimeType.replace(/(\u0020)+$/, '') -+ -+ // 6. Remove the last U+003B (;) code point from mimeType. -+ mimeType = mimeType.slice(0, -1) -+ } -+ -+ // 12. If mimeType starts with U+003B (;), then prepend -+ // "text/plain" to mimeType. -+ if (mimeType.startsWith(';')) { -+ mimeType = 'text/plain' + mimeType -+ } -+ -+ // 13. Let mimeTypeRecord be the result of parsing -+ // mimeType. -+ let mimeTypeRecord = parseMIMEType(mimeType) -+ -+ // 14. If mimeTypeRecord is failure, then set -+ // mimeTypeRecord to text/plain;charset=US-ASCII. -+ if (mimeTypeRecord === 'failure') { -+ mimeTypeRecord = parseMIMEType('text/plain;charset=US-ASCII') -+ } -+ -+ // 15. Return a new data: URL struct whose MIME -+ // type is mimeTypeRecord and body is body. -+ // https://fetch.spec.whatwg.org/#data-url-struct -+ return { mimeType: mimeTypeRecord, body } -+} -+ -+// https://url.spec.whatwg.org/#concept-url-serializer -+/** -+ * @param {URL} url -+ * @param {boolean} excludeFragment -+ */ -+function URLSerializer (url, excludeFragment = false) { -+ if (!excludeFragment) { -+ return url.href -+ } -+ -+ const href = url.href -+ const hashLength = url.hash.length -+ -+ return hashLength === 0 ? href : href.substring(0, href.length - hashLength) -+} -+ -+// https://infra.spec.whatwg.org/#collect-a-sequence-of-code-points -+/** -+ * @param {(char: string) => boolean} condition -+ * @param {string} input -+ * @param {{ position: number }} position -+ */ -+function collectASequenceOfCodePoints (condition, input, position) { -+ // 1. Let result be the empty string. -+ let result = '' -+ -+ // 2. While position doesn’t point past the end of input and the -+ // code point at position within input meets the condition condition: -+ while (position.position < input.length && condition(input[position.position])) { -+ // 1. Append that code point to the end of result. -+ result += input[position.position] -+ -+ // 2. Advance position by 1. -+ position.position++ -+ } -+ -+ // 3. Return result. -+ return result -+} -+ -+/** -+ * A faster collectASequenceOfCodePoints that only works when comparing a single character. -+ * @param {string} char -+ * @param {string} input -+ * @param {{ position: number }} position -+ */ -+function collectASequenceOfCodePointsFast (char, input, position) { -+ const idx = input.indexOf(char, position.position) -+ const start = position.position -+ -+ if (idx === -1) { -+ position.position = input.length -+ return input.slice(start) -+ } -+ -+ position.position = idx -+ return input.slice(start, position.position) -+} -+ -+// https://url.spec.whatwg.org/#string-percent-decode -+/** @param {string} input */ -+function stringPercentDecode (input) { -+ // 1. Let bytes be the UTF-8 encoding of input. -+ const bytes = encoder.encode(input) -+ -+ // 2. Return the percent-decoding of bytes. -+ return percentDecode(bytes) -+} -+ -+// https://url.spec.whatwg.org/#percent-decode -+/** @param {Uint8Array} input */ -+function percentDecode (input) { -+ // 1. Let output be an empty byte sequence. -+ /** @type {number[]} */ -+ const output = [] -+ -+ // 2. For each byte byte in input: -+ for (let i = 0; i < input.length; i++) { -+ const byte = input[i] -+ -+ // 1. If byte is not 0x25 (%), then append byte to output. -+ if (byte !== 0x25) { -+ output.push(byte) -+ -+ // 2. Otherwise, if byte is 0x25 (%) and the next two bytes -+ // after byte in input are not in the ranges -+ // 0x30 (0) to 0x39 (9), 0x41 (A) to 0x46 (F), -+ // and 0x61 (a) to 0x66 (f), all inclusive, append byte -+ // to output. -+ } else if ( -+ byte === 0x25 && -+ !/^[0-9A-Fa-f]{2}$/i.test(String.fromCharCode(input[i + 1], input[i + 2])) -+ ) { -+ output.push(0x25) -+ -+ // 3. Otherwise: -+ } else { -+ // 1. Let bytePoint be the two bytes after byte in input, -+ // decoded, and then interpreted as hexadecimal number. -+ const nextTwoBytes = String.fromCharCode(input[i + 1], input[i + 2]) -+ const bytePoint = Number.parseInt(nextTwoBytes, 16) -+ -+ // 2. Append a byte whose value is bytePoint to output. -+ output.push(bytePoint) -+ -+ // 3. Skip the next two bytes in input. -+ i += 2 -+ } -+ } -+ -+ // 3. Return output. -+ return Uint8Array.from(output) -+} -+ -+// https://mimesniff.spec.whatwg.org/#parse-a-mime-type -+/** @param {string} input */ -+function parseMIMEType (input) { -+ // 1. Remove any leading and trailing HTTP whitespace -+ // from input. -+ input = removeHTTPWhitespace(input, true, true) -+ -+ // 2. Let position be a position variable for input, -+ // initially pointing at the start of input. -+ const position = { position: 0 } -+ -+ // 3. Let type be the result of collecting a sequence -+ // of code points that are not U+002F (/) from -+ // input, given position. -+ const type = collectASequenceOfCodePointsFast( -+ '/', -+ input, -+ position -+ ) -+ -+ // 4. If type is the empty string or does not solely -+ // contain HTTP token code points, then return failure. -+ // https://mimesniff.spec.whatwg.org/#http-token-code-point -+ if (type.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(type)) { -+ return 'failure' -+ } -+ -+ // 5. If position is past the end of input, then return -+ // failure -+ if (position.position > input.length) { -+ return 'failure' -+ } -+ -+ // 6. Advance position by 1. (This skips past U+002F (/).) -+ position.position++ -+ -+ // 7. Let subtype be the result of collecting a sequence of -+ // code points that are not U+003B (;) from input, given -+ // position. -+ let subtype = collectASequenceOfCodePointsFast( -+ ';', -+ input, -+ position -+ ) -+ -+ // 8. Remove any trailing HTTP whitespace from subtype. -+ subtype = removeHTTPWhitespace(subtype, false, true) -+ -+ // 9. If subtype is the empty string or does not solely -+ // contain HTTP token code points, then return failure. -+ if (subtype.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(subtype)) { -+ return 'failure' -+ } -+ -+ const typeLowercase = type.toLowerCase() -+ const subtypeLowercase = subtype.toLowerCase() -+ -+ // 10. Let mimeType be a new MIME type record whose type -+ // is type, in ASCII lowercase, and subtype is subtype, -+ // in ASCII lowercase. -+ // https://mimesniff.spec.whatwg.org/#mime-type -+ const mimeType = { -+ type: typeLowercase, -+ subtype: subtypeLowercase, -+ /** @type {Map} */ -+ parameters: new Map(), -+ // https://mimesniff.spec.whatwg.org/#mime-type-essence -+ essence: `${typeLowercase}/${subtypeLowercase}` -+ } -+ -+ // 11. While position is not past the end of input: -+ while (position.position < input.length) { -+ // 1. Advance position by 1. (This skips past U+003B (;).) -+ position.position++ -+ -+ // 2. Collect a sequence of code points that are HTTP -+ // whitespace from input given position. -+ collectASequenceOfCodePoints( -+ // https://fetch.spec.whatwg.org/#http-whitespace -+ char => HTTP_WHITESPACE_REGEX.test(char), -+ input, -+ position -+ ) -+ -+ // 3. Let parameterName be the result of collecting a -+ // sequence of code points that are not U+003B (;) -+ // or U+003D (=) from input, given position. -+ let parameterName = collectASequenceOfCodePoints( -+ (char) => char !== ';' && char !== '=', -+ input, -+ position -+ ) -+ -+ // 4. Set parameterName to parameterName, in ASCII -+ // lowercase. -+ parameterName = parameterName.toLowerCase() -+ -+ // 5. If position is not past the end of input, then: -+ if (position.position < input.length) { -+ // 1. If the code point at position within input is -+ // U+003B (;), then continue. -+ if (input[position.position] === ';') { -+ continue -+ } -+ -+ // 2. Advance position by 1. (This skips past U+003D (=).) -+ position.position++ -+ } -+ -+ // 6. If position is past the end of input, then break. -+ if (position.position > input.length) { -+ break -+ } -+ -+ // 7. Let parameterValue be null. -+ let parameterValue = null -+ -+ // 8. If the code point at position within input is -+ // U+0022 ("), then: -+ if (input[position.position] === '"') { -+ // 1. Set parameterValue to the result of collecting -+ // an HTTP quoted string from input, given position -+ // and the extract-value flag. -+ parameterValue = collectAnHTTPQuotedString(input, position, true) -+ -+ // 2. Collect a sequence of code points that are not -+ // U+003B (;) from input, given position. -+ collectASequenceOfCodePointsFast( -+ ';', -+ input, -+ position -+ ) -+ -+ // 9. Otherwise: -+ } else { -+ // 1. Set parameterValue to the result of collecting -+ // a sequence of code points that are not U+003B (;) -+ // from input, given position. -+ parameterValue = collectASequenceOfCodePointsFast( -+ ';', -+ input, -+ position -+ ) -+ -+ // 2. Remove any trailing HTTP whitespace from parameterValue. -+ parameterValue = removeHTTPWhitespace(parameterValue, false, true) -+ -+ // 3. If parameterValue is the empty string, then continue. -+ if (parameterValue.length === 0) { -+ continue -+ } -+ } -+ -+ // 10. If all of the following are true -+ // - parameterName is not the empty string -+ // - parameterName solely contains HTTP token code points -+ // - parameterValue solely contains HTTP quoted-string token code points -+ // - mimeType’s parameters[parameterName] does not exist -+ // then set mimeType’s parameters[parameterName] to parameterValue. -+ if ( -+ parameterName.length !== 0 && -+ HTTP_TOKEN_CODEPOINTS.test(parameterName) && -+ (parameterValue.length === 0 || HTTP_QUOTED_STRING_TOKENS.test(parameterValue)) && -+ !mimeType.parameters.has(parameterName) -+ ) { -+ mimeType.parameters.set(parameterName, parameterValue) -+ } -+ } -+ -+ // 12. Return mimeType. -+ return mimeType -+} -+ -+// https://infra.spec.whatwg.org/#forgiving-base64-decode -+/** @param {string} data */ -+function forgivingBase64 (data) { -+ // 1. Remove all ASCII whitespace from data. -+ data = data.replace(/[\u0009\u000A\u000C\u000D\u0020]/g, '') // eslint-disable-line -+ -+ // 2. If data’s code point length divides by 4 leaving -+ // no remainder, then: -+ if (data.length % 4 === 0) { -+ // 1. If data ends with one or two U+003D (=) code points, -+ // then remove them from data. -+ data = data.replace(/=?=$/, '') -+ } -+ -+ // 3. If data’s code point length divides by 4 leaving -+ // a remainder of 1, then return failure. -+ if (data.length % 4 === 1) { -+ return 'failure' -+ } -+ -+ // 4. If data contains a code point that is not one of -+ // U+002B (+) -+ // U+002F (/) -+ // ASCII alphanumeric -+ // then return failure. -+ if (/[^+/0-9A-Za-z]/.test(data)) { -+ return 'failure' -+ } -+ -+ const binary = atob(data) -+ const bytes = new Uint8Array(binary.length) -+ -+ for (let byte = 0; byte < binary.length; byte++) { -+ bytes[byte] = binary.charCodeAt(byte) -+ } -+ -+ return bytes -+} -+ -+// https://fetch.spec.whatwg.org/#collect-an-http-quoted-string -+// tests: https://fetch.spec.whatwg.org/#example-http-quoted-string -+/** -+ * @param {string} input -+ * @param {{ position: number }} position -+ * @param {boolean?} extractValue -+ */ -+function collectAnHTTPQuotedString (input, position, extractValue) { -+ // 1. Let positionStart be position. -+ const positionStart = position.position -+ -+ // 2. Let value be the empty string. -+ let value = '' -+ -+ // 3. Assert: the code point at position within input -+ // is U+0022 ("). -+ assert(input[position.position] === '"') -+ -+ // 4. Advance position by 1. -+ position.position++ -+ -+ // 5. While true: -+ while (true) { -+ // 1. Append the result of collecting a sequence of code points -+ // that are not U+0022 (") or U+005C (\) from input, given -+ // position, to value. -+ value += collectASequenceOfCodePoints( -+ (char) => char !== '"' && char !== '\\', -+ input, -+ position -+ ) -+ -+ // 2. If position is past the end of input, then break. -+ if (position.position >= input.length) { -+ break -+ } -+ -+ // 3. Let quoteOrBackslash be the code point at position within -+ // input. -+ const quoteOrBackslash = input[position.position] -+ -+ // 4. Advance position by 1. -+ position.position++ -+ -+ // 5. If quoteOrBackslash is U+005C (\), then: -+ if (quoteOrBackslash === '\\') { -+ // 1. If position is past the end of input, then append -+ // U+005C (\) to value and break. -+ if (position.position >= input.length) { -+ value += '\\' -+ break -+ } -+ -+ // 2. Append the code point at position within input to value. -+ value += input[position.position] -+ -+ // 3. Advance position by 1. -+ position.position++ -+ -+ // 6. Otherwise: -+ } else { -+ // 1. Assert: quoteOrBackslash is U+0022 ("). -+ assert(quoteOrBackslash === '"') -+ -+ // 2. Break. -+ break -+ } -+ } -+ -+ // 6. If the extract-value flag is set, then return value. -+ if (extractValue) { -+ return value -+ } -+ -+ // 7. Return the code points from positionStart to position, -+ // inclusive, within input. -+ return input.slice(positionStart, position.position) -+} -+ -+/** -+ * @see https://mimesniff.spec.whatwg.org/#serialize-a-mime-type -+ */ -+function serializeAMimeType (mimeType) { -+ assert(mimeType !== 'failure') -+ const { parameters, essence } = mimeType -+ -+ // 1. Let serialization be the concatenation of mimeType’s -+ // type, U+002F (/), and mimeType’s subtype. -+ let serialization = essence -+ -+ // 2. For each name → value of mimeType’s parameters: -+ for (let [name, value] of parameters.entries()) { -+ // 1. Append U+003B (;) to serialization. -+ serialization += ';' -+ -+ // 2. Append name to serialization. -+ serialization += name -+ -+ // 3. Append U+003D (=) to serialization. -+ serialization += '=' -+ -+ // 4. If value does not solely contain HTTP token code -+ // points or value is the empty string, then: -+ if (!HTTP_TOKEN_CODEPOINTS.test(value)) { -+ // 1. Precede each occurence of U+0022 (") or -+ // U+005C (\) in value with U+005C (\). -+ value = value.replace(/(\\|")/g, '\\$1') -+ -+ // 2. Prepend U+0022 (") to value. -+ value = '"' + value -+ -+ // 3. Append U+0022 (") to value. -+ value += '"' -+ } -+ -+ // 5. Append value to serialization. -+ serialization += value -+ } -+ -+ // 3. Return serialization. -+ return serialization -+} -+ -+/** -+ * @see https://fetch.spec.whatwg.org/#http-whitespace -+ * @param {string} char -+ */ -+function isHTTPWhiteSpace (char) { -+ return char === '\r' || char === '\n' || char === '\t' || char === ' ' -+} -+ -+/** -+ * @see https://fetch.spec.whatwg.org/#http-whitespace -+ * @param {string} str -+ */ -+function removeHTTPWhitespace (str, leading = true, trailing = true) { -+ let lead = 0 -+ let trail = str.length - 1 -+ -+ if (leading) { -+ for (; lead < str.length && isHTTPWhiteSpace(str[lead]); lead++); -+ } -+ -+ if (trailing) { -+ for (; trail > 0 && isHTTPWhiteSpace(str[trail]); trail--); -+ } -+ -+ return str.slice(lead, trail + 1) -+} -+ -+/** -+ * @see https://infra.spec.whatwg.org/#ascii-whitespace -+ * @param {string} char -+ */ -+function isASCIIWhitespace (char) { -+ return char === '\r' || char === '\n' || char === '\t' || char === '\f' || char === ' ' -+} -+ -+/** -+ * @see https://infra.spec.whatwg.org/#strip-leading-and-trailing-ascii-whitespace -+ */ -+function removeASCIIWhitespace (str, leading = true, trailing = true) { -+ let lead = 0 -+ let trail = str.length - 1 -+ -+ if (leading) { -+ for (; lead < str.length && isASCIIWhitespace(str[lead]); lead++); -+ } -+ -+ if (trailing) { -+ for (; trail > 0 && isASCIIWhitespace(str[trail]); trail--); -+ } -+ -+ return str.slice(lead, trail + 1) -+} -+ -+module.exports = { -+ dataURLProcessor, -+ URLSerializer, -+ collectASequenceOfCodePoints, -+ collectASequenceOfCodePointsFast, -+ stringPercentDecode, -+ parseMIMEType, -+ collectAnHTTPQuotedString, -+ serializeAMimeType -+} -+ -+ -+/***/ }), -+ -+/***/ 4517: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { Blob, File: NativeFile } = __nccwpck_require__(4300) -+const { types } = __nccwpck_require__(3837) -+const { kState } = __nccwpck_require__(8069) -+const { isBlobLike } = __nccwpck_require__(1554) -+const { webidl } = __nccwpck_require__(5611) -+const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(1827) -+const { kEnumerableProperty } = __nccwpck_require__(929) -+const encoder = new TextEncoder() -+ -+class File extends Blob { -+ constructor (fileBits, fileName, options = {}) { -+ // The File constructor is invoked with two or three parameters, depending -+ // on whether the optional dictionary parameter is used. When the File() -+ // constructor is invoked, user agents must run the following steps: -+ webidl.argumentLengthCheck(arguments, 2, { header: 'File constructor' }) -+ -+ fileBits = webidl.converters['sequence'](fileBits) -+ fileName = webidl.converters.USVString(fileName) -+ options = webidl.converters.FilePropertyBag(options) -+ -+ // 1. Let bytes be the result of processing blob parts given fileBits and -+ // options. -+ // Note: Blob handles this for us -+ -+ // 2. Let n be the fileName argument to the constructor. -+ const n = fileName -+ -+ // 3. Process FilePropertyBag dictionary argument by running the following -+ // substeps: -+ -+ // 1. If the type member is provided and is not the empty string, let t -+ // be set to the type dictionary member. If t contains any characters -+ // outside the range U+0020 to U+007E, then set t to the empty string -+ // and return from these substeps. -+ // 2. Convert every character in t to ASCII lowercase. -+ let t = options.type -+ let d -+ -+ // eslint-disable-next-line no-labels -+ substep: { -+ if (t) { -+ t = parseMIMEType(t) -+ -+ if (t === 'failure') { -+ t = '' -+ // eslint-disable-next-line no-labels -+ break substep -+ } -+ -+ t = serializeAMimeType(t).toLowerCase() -+ } -+ -+ // 3. If the lastModified member is provided, let d be set to the -+ // lastModified dictionary member. If it is not provided, set d to the -+ // current date and time represented as the number of milliseconds since -+ // the Unix Epoch (which is the equivalent of Date.now() [ECMA-262]). -+ d = options.lastModified -+ } -+ -+ // 4. Return a new File object F such that: -+ // F refers to the bytes byte sequence. -+ // F.size is set to the number of total bytes in bytes. -+ // F.name is set to n. -+ // F.type is set to t. -+ // F.lastModified is set to d. -+ -+ super(processBlobParts(fileBits, options), { type: t }) -+ this[kState] = { -+ name: n, -+ lastModified: d, -+ type: t -+ } -+ } -+ -+ get name () { -+ webidl.brandCheck(this, File) -+ -+ return this[kState].name -+ } -+ -+ get lastModified () { -+ webidl.brandCheck(this, File) -+ -+ return this[kState].lastModified -+ } -+ -+ get type () { -+ webidl.brandCheck(this, File) -+ -+ return this[kState].type -+ } -+} -+ -+class FileLike { -+ constructor (blobLike, fileName, options = {}) { -+ // TODO: argument idl type check -+ -+ // The File constructor is invoked with two or three parameters, depending -+ // on whether the optional dictionary parameter is used. When the File() -+ // constructor is invoked, user agents must run the following steps: -+ -+ // 1. Let bytes be the result of processing blob parts given fileBits and -+ // options. -+ -+ // 2. Let n be the fileName argument to the constructor. -+ const n = fileName -+ -+ // 3. Process FilePropertyBag dictionary argument by running the following -+ // substeps: -+ -+ // 1. If the type member is provided and is not the empty string, let t -+ // be set to the type dictionary member. If t contains any characters -+ // outside the range U+0020 to U+007E, then set t to the empty string -+ // and return from these substeps. -+ // TODO -+ const t = options.type -+ -+ // 2. Convert every character in t to ASCII lowercase. -+ // TODO -+ -+ // 3. If the lastModified member is provided, let d be set to the -+ // lastModified dictionary member. If it is not provided, set d to the -+ // current date and time represented as the number of milliseconds since -+ // the Unix Epoch (which is the equivalent of Date.now() [ECMA-262]). -+ const d = options.lastModified ?? Date.now() -+ -+ // 4. Return a new File object F such that: -+ // F refers to the bytes byte sequence. -+ // F.size is set to the number of total bytes in bytes. -+ // F.name is set to n. -+ // F.type is set to t. -+ // F.lastModified is set to d. -+ -+ this[kState] = { -+ blobLike, -+ name: n, -+ type: t, -+ lastModified: d -+ } -+ } -+ -+ stream (...args) { -+ webidl.brandCheck(this, FileLike) -+ -+ return this[kState].blobLike.stream(...args) -+ } -+ -+ arrayBuffer (...args) { -+ webidl.brandCheck(this, FileLike) -+ -+ return this[kState].blobLike.arrayBuffer(...args) -+ } -+ -+ slice (...args) { -+ webidl.brandCheck(this, FileLike) -+ -+ return this[kState].blobLike.slice(...args) -+ } -+ -+ text (...args) { -+ webidl.brandCheck(this, FileLike) -+ -+ return this[kState].blobLike.text(...args) -+ } -+ -+ get size () { -+ webidl.brandCheck(this, FileLike) -+ -+ return this[kState].blobLike.size -+ } -+ -+ get type () { -+ webidl.brandCheck(this, FileLike) -+ -+ return this[kState].blobLike.type -+ } -+ -+ get name () { -+ webidl.brandCheck(this, FileLike) -+ -+ return this[kState].name -+ } -+ -+ get lastModified () { -+ webidl.brandCheck(this, FileLike) -+ -+ return this[kState].lastModified -+ } -+ -+ get [Symbol.toStringTag] () { -+ return 'File' -+ } -+} -+ -+Object.defineProperties(File.prototype, { -+ [Symbol.toStringTag]: { -+ value: 'File', -+ configurable: true -+ }, -+ name: kEnumerableProperty, -+ lastModified: kEnumerableProperty -+}) -+ -+webidl.converters.Blob = webidl.interfaceConverter(Blob) -+ -+webidl.converters.BlobPart = function (V, opts) { -+ if (webidl.util.Type(V) === 'Object') { -+ if (isBlobLike(V)) { -+ return webidl.converters.Blob(V, { strict: false }) -+ } -+ -+ if ( -+ ArrayBuffer.isView(V) || -+ types.isAnyArrayBuffer(V) -+ ) { -+ return webidl.converters.BufferSource(V, opts) -+ } -+ } -+ -+ return webidl.converters.USVString(V, opts) -+} -+ -+webidl.converters['sequence'] = webidl.sequenceConverter( -+ webidl.converters.BlobPart -+) -+ -+// https://www.w3.org/TR/FileAPI/#dfn-FilePropertyBag -+webidl.converters.FilePropertyBag = webidl.dictionaryConverter([ -+ { -+ key: 'lastModified', -+ converter: webidl.converters['long long'], -+ get defaultValue () { -+ return Date.now() -+ } -+ }, -+ { -+ key: 'type', -+ converter: webidl.converters.DOMString, -+ defaultValue: '' -+ }, -+ { -+ key: 'endings', -+ converter: (value) => { -+ value = webidl.converters.DOMString(value) -+ value = value.toLowerCase() -+ -+ if (value !== 'native') { -+ value = 'transparent' -+ } -+ -+ return value -+ }, -+ defaultValue: 'transparent' -+ } -+]) -+ -+/** -+ * @see https://www.w3.org/TR/FileAPI/#process-blob-parts -+ * @param {(NodeJS.TypedArray|Blob|string)[]} parts -+ * @param {{ type: string, endings: string }} options -+ */ -+function processBlobParts (parts, options) { -+ // 1. Let bytes be an empty sequence of bytes. -+ /** @type {NodeJS.TypedArray[]} */ -+ const bytes = [] -+ -+ // 2. For each element in parts: -+ for (const element of parts) { -+ // 1. If element is a USVString, run the following substeps: -+ if (typeof element === 'string') { -+ // 1. Let s be element. -+ let s = element -+ -+ // 2. If the endings member of options is "native", set s -+ // to the result of converting line endings to native -+ // of element. -+ if (options.endings === 'native') { -+ s = convertLineEndingsNative(s) -+ } -+ -+ // 3. Append the result of UTF-8 encoding s to bytes. -+ bytes.push(encoder.encode(s)) -+ } else if ( -+ types.isAnyArrayBuffer(element) || -+ types.isTypedArray(element) -+ ) { -+ // 2. If element is a BufferSource, get a copy of the -+ // bytes held by the buffer source, and append those -+ // bytes to bytes. -+ if (!element.buffer) { // ArrayBuffer -+ bytes.push(new Uint8Array(element)) -+ } else { -+ bytes.push( -+ new Uint8Array(element.buffer, element.byteOffset, element.byteLength) -+ ) -+ } -+ } else if (isBlobLike(element)) { -+ // 3. If element is a Blob, append the bytes it represents -+ // to bytes. -+ bytes.push(element) -+ } -+ } -+ -+ // 3. Return bytes. -+ return bytes -+} -+ -+/** -+ * @see https://www.w3.org/TR/FileAPI/#convert-line-endings-to-native -+ * @param {string} s -+ */ -+function convertLineEndingsNative (s) { -+ // 1. Let native line ending be be the code point U+000A LF. -+ let nativeLineEnding = '\n' -+ -+ // 2. If the underlying platform’s conventions are to -+ // represent newlines as a carriage return and line feed -+ // sequence, set native line ending to the code point -+ // U+000D CR followed by the code point U+000A LF. -+ if (process.platform === 'win32') { -+ nativeLineEnding = '\r\n' -+ } -+ -+ return s.replace(/\r?\n/g, nativeLineEnding) -+} -+ -+// If this function is moved to ./util.js, some tools (such as -+// rollup) will warn about circular dependencies. See: -+// https://github.com/nodejs/undici/issues/1629 -+function isFileLike (object) { -+ return ( -+ (NativeFile && object instanceof NativeFile) || -+ object instanceof File || ( -+ object && -+ (typeof object.stream === 'function' || -+ typeof object.arrayBuffer === 'function') && -+ object[Symbol.toStringTag] === 'File' -+ ) -+ ) -+} -+ -+module.exports = { File, FileLike, isFileLike } -+ -+ -+/***/ }), -+ -+/***/ 8703: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { isBlobLike, toUSVString, makeIterator } = __nccwpck_require__(1554) -+const { kState } = __nccwpck_require__(8069) -+const { File: UndiciFile, FileLike, isFileLike } = __nccwpck_require__(4517) -+const { webidl } = __nccwpck_require__(5611) -+const { Blob, File: NativeFile } = __nccwpck_require__(4300) -+ -+/** @type {globalThis['File']} */ -+const File = NativeFile ?? UndiciFile -+ -+// https://xhr.spec.whatwg.org/#formdata -+class FormData { -+ constructor (form) { -+ if (form !== undefined) { -+ throw webidl.errors.conversionFailed({ -+ prefix: 'FormData constructor', -+ argument: 'Argument 1', -+ types: ['undefined'] -+ }) -+ } -+ -+ this[kState] = [] -+ } -+ -+ append (name, value, filename = undefined) { -+ webidl.brandCheck(this, FormData) -+ -+ webidl.argumentLengthCheck(arguments, 2, { header: 'FormData.append' }) -+ -+ if (arguments.length === 3 && !isBlobLike(value)) { -+ throw new TypeError( -+ "Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'" -+ ) -+ } -+ -+ // 1. Let value be value if given; otherwise blobValue. -+ -+ name = webidl.converters.USVString(name) -+ value = isBlobLike(value) -+ ? webidl.converters.Blob(value, { strict: false }) -+ : webidl.converters.USVString(value) -+ filename = arguments.length === 3 -+ ? webidl.converters.USVString(filename) -+ : undefined -+ -+ // 2. Let entry be the result of creating an entry with -+ // name, value, and filename if given. -+ const entry = makeEntry(name, value, filename) -+ -+ // 3. Append entry to this’s entry list. -+ this[kState].push(entry) -+ } -+ -+ delete (name) { -+ webidl.brandCheck(this, FormData) -+ -+ webidl.argumentLengthCheck(arguments, 1, { header: 'FormData.delete' }) -+ -+ name = webidl.converters.USVString(name) -+ -+ // The delete(name) method steps are to remove all entries whose name -+ // is name from this’s entry list. -+ this[kState] = this[kState].filter(entry => entry.name !== name) -+ } -+ -+ get (name) { -+ webidl.brandCheck(this, FormData) -+ -+ webidl.argumentLengthCheck(arguments, 1, { header: 'FormData.get' }) -+ -+ name = webidl.converters.USVString(name) -+ -+ // 1. If there is no entry whose name is name in this’s entry list, -+ // then return null. -+ const idx = this[kState].findIndex((entry) => entry.name === name) -+ if (idx === -1) { -+ return null -+ } -+ -+ // 2. Return the value of the first entry whose name is name from -+ // this’s entry list. -+ return this[kState][idx].value -+ } -+ -+ getAll (name) { -+ webidl.brandCheck(this, FormData) -+ -+ webidl.argumentLengthCheck(arguments, 1, { header: 'FormData.getAll' }) -+ -+ name = webidl.converters.USVString(name) -+ -+ // 1. If there is no entry whose name is name in this’s entry list, -+ // then return the empty list. -+ // 2. Return the values of all entries whose name is name, in order, -+ // from this’s entry list. -+ return this[kState] -+ .filter((entry) => entry.name === name) -+ .map((entry) => entry.value) -+ } -+ -+ has (name) { -+ webidl.brandCheck(this, FormData) -+ -+ webidl.argumentLengthCheck(arguments, 1, { header: 'FormData.has' }) -+ -+ name = webidl.converters.USVString(name) -+ -+ // The has(name) method steps are to return true if there is an entry -+ // whose name is name in this’s entry list; otherwise false. -+ return this[kState].findIndex((entry) => entry.name === name) !== -1 -+ } -+ -+ set (name, value, filename = undefined) { -+ webidl.brandCheck(this, FormData) -+ -+ webidl.argumentLengthCheck(arguments, 2, { header: 'FormData.set' }) -+ -+ if (arguments.length === 3 && !isBlobLike(value)) { -+ throw new TypeError( -+ "Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'" -+ ) -+ } -+ -+ // The set(name, value) and set(name, blobValue, filename) method steps -+ // are: -+ -+ // 1. Let value be value if given; otherwise blobValue. -+ -+ name = webidl.converters.USVString(name) -+ value = isBlobLike(value) -+ ? webidl.converters.Blob(value, { strict: false }) -+ : webidl.converters.USVString(value) -+ filename = arguments.length === 3 -+ ? toUSVString(filename) -+ : undefined -+ -+ // 2. Let entry be the result of creating an entry with name, value, and -+ // filename if given. -+ const entry = makeEntry(name, value, filename) -+ -+ // 3. If there are entries in this’s entry list whose name is name, then -+ // replace the first such entry with entry and remove the others. -+ const idx = this[kState].findIndex((entry) => entry.name === name) -+ if (idx !== -1) { -+ this[kState] = [ -+ ...this[kState].slice(0, idx), -+ entry, -+ ...this[kState].slice(idx + 1).filter((entry) => entry.name !== name) -+ ] -+ } else { -+ // 4. Otherwise, append entry to this’s entry list. -+ this[kState].push(entry) -+ } -+ } -+ -+ entries () { -+ webidl.brandCheck(this, FormData) -+ -+ return makeIterator( -+ () => this[kState].map(pair => [pair.name, pair.value]), -+ 'FormData', -+ 'key+value' -+ ) -+ } -+ -+ keys () { -+ webidl.brandCheck(this, FormData) -+ -+ return makeIterator( -+ () => this[kState].map(pair => [pair.name, pair.value]), -+ 'FormData', -+ 'key' -+ ) -+ } -+ -+ values () { -+ webidl.brandCheck(this, FormData) -+ -+ return makeIterator( -+ () => this[kState].map(pair => [pair.name, pair.value]), -+ 'FormData', -+ 'value' -+ ) -+ } -+ -+ /** -+ * @param {(value: string, key: string, self: FormData) => void} callbackFn -+ * @param {unknown} thisArg -+ */ -+ forEach (callbackFn, thisArg = globalThis) { -+ webidl.brandCheck(this, FormData) -+ -+ webidl.argumentLengthCheck(arguments, 1, { header: 'FormData.forEach' }) -+ -+ if (typeof callbackFn !== 'function') { -+ throw new TypeError( -+ "Failed to execute 'forEach' on 'FormData': parameter 1 is not of type 'Function'." -+ ) -+ } -+ -+ for (const [key, value] of this) { -+ callbackFn.apply(thisArg, [value, key, this]) -+ } -+ } -+} -+ -+FormData.prototype[Symbol.iterator] = FormData.prototype.entries -+ -+Object.defineProperties(FormData.prototype, { -+ [Symbol.toStringTag]: { -+ value: 'FormData', -+ configurable: true -+ } -+}) -+ -+/** -+ * @see https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#create-an-entry -+ * @param {string} name -+ * @param {string|Blob} value -+ * @param {?string} filename -+ * @returns -+ */ -+function makeEntry (name, value, filename) { -+ // 1. Set name to the result of converting name into a scalar value string. -+ // "To convert a string into a scalar value string, replace any surrogates -+ // with U+FFFD." -+ // see: https://nodejs.org/dist/latest-v18.x/docs/api/buffer.html#buftostringencoding-start-end -+ name = Buffer.from(name).toString('utf8') -+ -+ // 2. If value is a string, then set value to the result of converting -+ // value into a scalar value string. -+ if (typeof value === 'string') { -+ value = Buffer.from(value).toString('utf8') -+ } else { -+ // 3. Otherwise: -+ -+ // 1. If value is not a File object, then set value to a new File object, -+ // representing the same bytes, whose name attribute value is "blob" -+ if (!isFileLike(value)) { -+ value = value instanceof Blob -+ ? new File([value], 'blob', { type: value.type }) -+ : new FileLike(value, 'blob', { type: value.type }) -+ } -+ -+ // 2. If filename is given, then set value to a new File object, -+ // representing the same bytes, whose name attribute is filename. -+ if (filename !== undefined) { -+ /** @type {FilePropertyBag} */ -+ const options = { -+ type: value.type, -+ lastModified: value.lastModified -+ } -+ -+ value = (NativeFile && value instanceof NativeFile) || value instanceof UndiciFile -+ ? new File([value], filename, options) -+ : new FileLike(value, filename, options) -+ } -+ } -+ -+ // 4. Return an entry whose name is name and whose value is value. -+ return { name, value } -+} -+ -+module.exports = { FormData } -+ -+ -+/***/ }), -+ -+/***/ 5022: -+/***/ ((module) => { -+ -+"use strict"; -+ -+ -+// In case of breaking changes, increase the version -+// number to avoid conflicts. -+const globalOrigin = Symbol.for('undici.globalOrigin.1') -+ -+function getGlobalOrigin () { -+ return globalThis[globalOrigin] -+} -+ -+function setGlobalOrigin (newOrigin) { -+ if (newOrigin === undefined) { -+ Object.defineProperty(globalThis, globalOrigin, { -+ value: undefined, -+ writable: true, -+ enumerable: false, -+ configurable: false -+ }) -+ -+ return -+ } -+ -+ const parsedURL = new URL(newOrigin) -+ -+ if (parsedURL.protocol !== 'http:' && parsedURL.protocol !== 'https:') { -+ throw new TypeError(`Only http & https urls are allowed, received ${parsedURL.protocol}`) -+ } -+ -+ Object.defineProperty(globalThis, globalOrigin, { -+ value: parsedURL, -+ writable: true, -+ enumerable: false, -+ configurable: false -+ }) -+} -+ -+module.exports = { -+ getGlobalOrigin, -+ setGlobalOrigin -+} -+ -+ -+/***/ }), -+ -+/***/ 3545: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+// https://github.com/Ethan-Arrowood/undici-fetch -+ -+ -+ -+const { kHeadersList, kConstruct } = __nccwpck_require__(3745) -+const { kGuard } = __nccwpck_require__(8069) -+const { kEnumerableProperty } = __nccwpck_require__(929) -+const { -+ makeIterator, -+ isValidHeaderName, -+ isValidHeaderValue -+} = __nccwpck_require__(1554) -+const { webidl } = __nccwpck_require__(5611) -+const assert = __nccwpck_require__(9491) -+ -+const kHeadersMap = Symbol('headers map') -+const kHeadersSortedMap = Symbol('headers map sorted') -+ -+/** -+ * @param {number} code -+ */ -+function isHTTPWhiteSpaceCharCode (code) { -+ return code === 0x00a || code === 0x00d || code === 0x009 || code === 0x020 -+} -+ -+/** -+ * @see https://fetch.spec.whatwg.org/#concept-header-value-normalize -+ * @param {string} potentialValue -+ */ -+function headerValueNormalize (potentialValue) { -+ // To normalize a byte sequence potentialValue, remove -+ // any leading and trailing HTTP whitespace bytes from -+ // potentialValue. -+ let i = 0; let j = potentialValue.length -+ -+ while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(j - 1))) --j -+ while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(i))) ++i -+ -+ return i === 0 && j === potentialValue.length ? potentialValue : potentialValue.substring(i, j) -+} -+ -+function fill (headers, object) { -+ // To fill a Headers object headers with a given object object, run these steps: -+ -+ // 1. If object is a sequence, then for each header in object: -+ // Note: webidl conversion to array has already been done. -+ if (Array.isArray(object)) { -+ for (let i = 0; i < object.length; ++i) { -+ const header = object[i] -+ // 1. If header does not contain exactly two items, then throw a TypeError. -+ if (header.length !== 2) { -+ throw webidl.errors.exception({ -+ header: 'Headers constructor', -+ message: `expected name/value pair to be length 2, found ${header.length}.` -+ }) -+ } -+ -+ // 2. Append (header’s first item, header’s second item) to headers. -+ appendHeader(headers, header[0], header[1]) -+ } -+ } else if (typeof object === 'object' && object !== null) { -+ // Note: null should throw -+ -+ // 2. Otherwise, object is a record, then for each key → value in object, -+ // append (key, value) to headers -+ const keys = Object.keys(object) -+ for (let i = 0; i < keys.length; ++i) { -+ appendHeader(headers, keys[i], object[keys[i]]) -+ } -+ } else { -+ throw webidl.errors.conversionFailed({ -+ prefix: 'Headers constructor', -+ argument: 'Argument 1', -+ types: ['sequence>', 'record'] -+ }) -+ } -+} -+ -+/** -+ * @see https://fetch.spec.whatwg.org/#concept-headers-append -+ */ -+function appendHeader (headers, name, value) { -+ // 1. Normalize value. -+ value = headerValueNormalize(value) -+ -+ // 2. If name is not a header name or value is not a -+ // header value, then throw a TypeError. -+ if (!isValidHeaderName(name)) { -+ throw webidl.errors.invalidArgument({ -+ prefix: 'Headers.append', -+ value: name, -+ type: 'header name' -+ }) -+ } else if (!isValidHeaderValue(value)) { -+ throw webidl.errors.invalidArgument({ -+ prefix: 'Headers.append', -+ value, -+ type: 'header value' -+ }) -+ } -+ -+ // 3. If headers’s guard is "immutable", then throw a TypeError. -+ // 4. Otherwise, if headers’s guard is "request" and name is a -+ // forbidden header name, return. -+ // Note: undici does not implement forbidden header names -+ if (headers[kGuard] === 'immutable') { -+ throw new TypeError('immutable') -+ } else if (headers[kGuard] === 'request-no-cors') { -+ // 5. Otherwise, if headers’s guard is "request-no-cors": -+ // TODO -+ } -+ -+ // 6. Otherwise, if headers’s guard is "response" and name is a -+ // forbidden response-header name, return. -+ -+ // 7. Append (name, value) to headers’s header list. -+ return headers[kHeadersList].append(name, value) -+ -+ // 8. If headers’s guard is "request-no-cors", then remove -+ // privileged no-CORS request headers from headers -+} -+ -+class HeadersList { -+ /** @type {[string, string][]|null} */ -+ cookies = null -+ -+ constructor (init) { -+ if (init instanceof HeadersList) { -+ this[kHeadersMap] = new Map(init[kHeadersMap]) -+ this[kHeadersSortedMap] = init[kHeadersSortedMap] -+ this.cookies = init.cookies === null ? null : [...init.cookies] -+ } else { -+ this[kHeadersMap] = new Map(init) -+ this[kHeadersSortedMap] = null -+ } -+ } -+ -+ // https://fetch.spec.whatwg.org/#header-list-contains -+ contains (name) { -+ // A header list list contains a header name name if list -+ // contains a header whose name is a byte-case-insensitive -+ // match for name. -+ name = name.toLowerCase() -+ -+ return this[kHeadersMap].has(name) -+ } -+ -+ clear () { -+ this[kHeadersMap].clear() -+ this[kHeadersSortedMap] = null -+ this.cookies = null -+ } -+ -+ // https://fetch.spec.whatwg.org/#concept-header-list-append -+ append (name, value) { -+ this[kHeadersSortedMap] = null -+ -+ // 1. If list contains name, then set name to the first such -+ // header’s name. -+ const lowercaseName = name.toLowerCase() -+ const exists = this[kHeadersMap].get(lowercaseName) -+ -+ // 2. Append (name, value) to list. -+ if (exists) { -+ const delimiter = lowercaseName === 'cookie' ? '; ' : ', ' -+ this[kHeadersMap].set(lowercaseName, { -+ name: exists.name, -+ value: `${exists.value}${delimiter}${value}` -+ }) -+ } else { -+ this[kHeadersMap].set(lowercaseName, { name, value }) -+ } -+ -+ if (lowercaseName === 'set-cookie') { -+ this.cookies ??= [] -+ this.cookies.push(value) -+ } -+ } -+ -+ // https://fetch.spec.whatwg.org/#concept-header-list-set -+ set (name, value) { -+ this[kHeadersSortedMap] = null -+ const lowercaseName = name.toLowerCase() -+ -+ if (lowercaseName === 'set-cookie') { -+ this.cookies = [value] -+ } -+ -+ // 1. If list contains name, then set the value of -+ // the first such header to value and remove the -+ // others. -+ // 2. Otherwise, append header (name, value) to list. -+ this[kHeadersMap].set(lowercaseName, { name, value }) -+ } -+ -+ // https://fetch.spec.whatwg.org/#concept-header-list-delete -+ delete (name) { -+ this[kHeadersSortedMap] = null -+ -+ name = name.toLowerCase() -+ -+ if (name === 'set-cookie') { -+ this.cookies = null -+ } -+ -+ this[kHeadersMap].delete(name) -+ } -+ -+ // https://fetch.spec.whatwg.org/#concept-header-list-get -+ get (name) { -+ const value = this[kHeadersMap].get(name.toLowerCase()) -+ -+ // 1. If list does not contain name, then return null. -+ // 2. Return the values of all headers in list whose name -+ // is a byte-case-insensitive match for name, -+ // separated from each other by 0x2C 0x20, in order. -+ return value === undefined ? null : value.value -+ } -+ -+ * [Symbol.iterator] () { -+ // use the lowercased name -+ for (const [name, { value }] of this[kHeadersMap]) { -+ yield [name, value] -+ } -+ } -+ -+ get entries () { -+ const headers = {} -+ -+ if (this[kHeadersMap].size) { -+ for (const { name, value } of this[kHeadersMap].values()) { -+ headers[name] = value -+ } -+ } -+ -+ return headers -+ } -+} -+ -+// https://fetch.spec.whatwg.org/#headers-class -+class Headers { -+ constructor (init = undefined) { -+ if (init === kConstruct) { -+ return -+ } -+ this[kHeadersList] = new HeadersList() -+ -+ // The new Headers(init) constructor steps are: -+ -+ // 1. Set this’s guard to "none". -+ this[kGuard] = 'none' -+ -+ // 2. If init is given, then fill this with init. -+ if (init !== undefined) { -+ init = webidl.converters.HeadersInit(init) -+ fill(this, init) -+ } -+ } -+ -+ // https://fetch.spec.whatwg.org/#dom-headers-append -+ append (name, value) { -+ webidl.brandCheck(this, Headers) -+ -+ webidl.argumentLengthCheck(arguments, 2, { header: 'Headers.append' }) -+ -+ name = webidl.converters.ByteString(name) -+ value = webidl.converters.ByteString(value) -+ -+ return appendHeader(this, name, value) -+ } -+ -+ // https://fetch.spec.whatwg.org/#dom-headers-delete -+ delete (name) { -+ webidl.brandCheck(this, Headers) -+ -+ webidl.argumentLengthCheck(arguments, 1, { header: 'Headers.delete' }) -+ -+ name = webidl.converters.ByteString(name) -+ -+ // 1. If name is not a header name, then throw a TypeError. -+ if (!isValidHeaderName(name)) { -+ throw webidl.errors.invalidArgument({ -+ prefix: 'Headers.delete', -+ value: name, -+ type: 'header name' -+ }) -+ } -+ -+ // 2. If this’s guard is "immutable", then throw a TypeError. -+ // 3. Otherwise, if this’s guard is "request" and name is a -+ // forbidden header name, return. -+ // 4. Otherwise, if this’s guard is "request-no-cors", name -+ // is not a no-CORS-safelisted request-header name, and -+ // name is not a privileged no-CORS request-header name, -+ // return. -+ // 5. Otherwise, if this’s guard is "response" and name is -+ // a forbidden response-header name, return. -+ // Note: undici does not implement forbidden header names -+ if (this[kGuard] === 'immutable') { -+ throw new TypeError('immutable') -+ } else if (this[kGuard] === 'request-no-cors') { -+ // TODO -+ } -+ -+ // 6. If this’s header list does not contain name, then -+ // return. -+ if (!this[kHeadersList].contains(name)) { -+ return -+ } -+ -+ // 7. Delete name from this’s header list. -+ // 8. If this’s guard is "request-no-cors", then remove -+ // privileged no-CORS request headers from this. -+ this[kHeadersList].delete(name) -+ } -+ -+ // https://fetch.spec.whatwg.org/#dom-headers-get -+ get (name) { -+ webidl.brandCheck(this, Headers) -+ -+ webidl.argumentLengthCheck(arguments, 1, { header: 'Headers.get' }) -+ -+ name = webidl.converters.ByteString(name) -+ -+ // 1. If name is not a header name, then throw a TypeError. -+ if (!isValidHeaderName(name)) { -+ throw webidl.errors.invalidArgument({ -+ prefix: 'Headers.get', -+ value: name, -+ type: 'header name' -+ }) -+ } -+ -+ // 2. Return the result of getting name from this’s header -+ // list. -+ return this[kHeadersList].get(name) -+ } -+ -+ // https://fetch.spec.whatwg.org/#dom-headers-has -+ has (name) { -+ webidl.brandCheck(this, Headers) -+ -+ webidl.argumentLengthCheck(arguments, 1, { header: 'Headers.has' }) -+ -+ name = webidl.converters.ByteString(name) -+ -+ // 1. If name is not a header name, then throw a TypeError. -+ if (!isValidHeaderName(name)) { -+ throw webidl.errors.invalidArgument({ -+ prefix: 'Headers.has', -+ value: name, -+ type: 'header name' -+ }) -+ } -+ -+ // 2. Return true if this’s header list contains name; -+ // otherwise false. -+ return this[kHeadersList].contains(name) -+ } -+ -+ // https://fetch.spec.whatwg.org/#dom-headers-set -+ set (name, value) { -+ webidl.brandCheck(this, Headers) -+ -+ webidl.argumentLengthCheck(arguments, 2, { header: 'Headers.set' }) -+ -+ name = webidl.converters.ByteString(name) -+ value = webidl.converters.ByteString(value) -+ -+ // 1. Normalize value. -+ value = headerValueNormalize(value) -+ -+ // 2. If name is not a header name or value is not a -+ // header value, then throw a TypeError. -+ if (!isValidHeaderName(name)) { -+ throw webidl.errors.invalidArgument({ -+ prefix: 'Headers.set', -+ value: name, -+ type: 'header name' -+ }) -+ } else if (!isValidHeaderValue(value)) { -+ throw webidl.errors.invalidArgument({ -+ prefix: 'Headers.set', -+ value, -+ type: 'header value' -+ }) -+ } -+ -+ // 3. If this’s guard is "immutable", then throw a TypeError. -+ // 4. Otherwise, if this’s guard is "request" and name is a -+ // forbidden header name, return. -+ // 5. Otherwise, if this’s guard is "request-no-cors" and -+ // name/value is not a no-CORS-safelisted request-header, -+ // return. -+ // 6. Otherwise, if this’s guard is "response" and name is a -+ // forbidden response-header name, return. -+ // Note: undici does not implement forbidden header names -+ if (this[kGuard] === 'immutable') { -+ throw new TypeError('immutable') -+ } else if (this[kGuard] === 'request-no-cors') { -+ // TODO -+ } -+ -+ // 7. Set (name, value) in this’s header list. -+ // 8. If this’s guard is "request-no-cors", then remove -+ // privileged no-CORS request headers from this -+ this[kHeadersList].set(name, value) -+ } -+ -+ // https://fetch.spec.whatwg.org/#dom-headers-getsetcookie -+ getSetCookie () { -+ webidl.brandCheck(this, Headers) -+ -+ // 1. If this’s header list does not contain `Set-Cookie`, then return « ». -+ // 2. Return the values of all headers in this’s header list whose name is -+ // a byte-case-insensitive match for `Set-Cookie`, in order. -+ -+ const list = this[kHeadersList].cookies -+ -+ if (list) { -+ return [...list] -+ } -+ -+ return [] -+ } -+ -+ // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine -+ get [kHeadersSortedMap] () { -+ if (this[kHeadersList][kHeadersSortedMap]) { -+ return this[kHeadersList][kHeadersSortedMap] -+ } -+ -+ // 1. Let headers be an empty list of headers with the key being the name -+ // and value the value. -+ const headers = [] -+ -+ // 2. Let names be the result of convert header names to a sorted-lowercase -+ // set with all the names of the headers in list. -+ const names = [...this[kHeadersList]].sort((a, b) => a[0] < b[0] ? -1 : 1) -+ const cookies = this[kHeadersList].cookies -+ -+ // 3. For each name of names: -+ for (let i = 0; i < names.length; ++i) { -+ const [name, value] = names[i] -+ // 1. If name is `set-cookie`, then: -+ if (name === 'set-cookie') { -+ // 1. Let values be a list of all values of headers in list whose name -+ // is a byte-case-insensitive match for name, in order. -+ -+ // 2. For each value of values: -+ // 1. Append (name, value) to headers. -+ for (let j = 0; j < cookies.length; ++j) { -+ headers.push([name, cookies[j]]) -+ } -+ } else { -+ // 2. Otherwise: -+ -+ // 1. Let value be the result of getting name from list. -+ -+ // 2. Assert: value is non-null. -+ assert(value !== null) -+ -+ // 3. Append (name, value) to headers. -+ headers.push([name, value]) -+ } -+ } -+ -+ this[kHeadersList][kHeadersSortedMap] = headers -+ -+ // 4. Return headers. -+ return headers -+ } -+ -+ keys () { -+ webidl.brandCheck(this, Headers) -+ -+ if (this[kGuard] === 'immutable') { -+ const value = this[kHeadersSortedMap] -+ return makeIterator(() => value, 'Headers', -+ 'key') -+ } -+ -+ return makeIterator( -+ () => [...this[kHeadersSortedMap].values()], -+ 'Headers', -+ 'key' -+ ) -+ } -+ -+ values () { -+ webidl.brandCheck(this, Headers) -+ -+ if (this[kGuard] === 'immutable') { -+ const value = this[kHeadersSortedMap] -+ return makeIterator(() => value, 'Headers', -+ 'value') -+ } -+ -+ return makeIterator( -+ () => [...this[kHeadersSortedMap].values()], -+ 'Headers', -+ 'value' -+ ) -+ } -+ -+ entries () { -+ webidl.brandCheck(this, Headers) -+ -+ if (this[kGuard] === 'immutable') { -+ const value = this[kHeadersSortedMap] -+ return makeIterator(() => value, 'Headers', -+ 'key+value') -+ } -+ -+ return makeIterator( -+ () => [...this[kHeadersSortedMap].values()], -+ 'Headers', -+ 'key+value' -+ ) -+ } -+ -+ /** -+ * @param {(value: string, key: string, self: Headers) => void} callbackFn -+ * @param {unknown} thisArg -+ */ -+ forEach (callbackFn, thisArg = globalThis) { -+ webidl.brandCheck(this, Headers) -+ -+ webidl.argumentLengthCheck(arguments, 1, { header: 'Headers.forEach' }) -+ -+ if (typeof callbackFn !== 'function') { -+ throw new TypeError( -+ "Failed to execute 'forEach' on 'Headers': parameter 1 is not of type 'Function'." -+ ) -+ } -+ -+ for (const [key, value] of this) { -+ callbackFn.apply(thisArg, [value, key, this]) -+ } -+ } -+ -+ [Symbol.for('nodejs.util.inspect.custom')] () { -+ webidl.brandCheck(this, Headers) -+ -+ return this[kHeadersList] -+ } -+} -+ -+Headers.prototype[Symbol.iterator] = Headers.prototype.entries -+ -+Object.defineProperties(Headers.prototype, { -+ append: kEnumerableProperty, -+ delete: kEnumerableProperty, -+ get: kEnumerableProperty, -+ has: kEnumerableProperty, -+ set: kEnumerableProperty, -+ getSetCookie: kEnumerableProperty, -+ keys: kEnumerableProperty, -+ values: kEnumerableProperty, -+ entries: kEnumerableProperty, -+ forEach: kEnumerableProperty, -+ [Symbol.iterator]: { enumerable: false }, -+ [Symbol.toStringTag]: { -+ value: 'Headers', -+ configurable: true -+ } -+}) -+ -+webidl.converters.HeadersInit = function (V) { -+ if (webidl.util.Type(V) === 'Object') { -+ if (V[Symbol.iterator]) { -+ return webidl.converters['sequence>'](V) -+ } -+ -+ return webidl.converters['record'](V) -+ } -+ -+ throw webidl.errors.conversionFailed({ -+ prefix: 'Headers constructor', -+ argument: 'Argument 1', -+ types: ['sequence>', 'record'] -+ }) -+} -+ -+module.exports = { -+ fill, -+ Headers, -+ HeadersList -+} -+ -+ -+/***/ }), -+ -+/***/ 8000: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+// https://github.com/Ethan-Arrowood/undici-fetch -+ -+ -+ -+const { -+ Response, -+ makeNetworkError, -+ makeAppropriateNetworkError, -+ filterResponse, -+ makeResponse -+} = __nccwpck_require__(433) -+const { Headers } = __nccwpck_require__(3545) -+const { Request, makeRequest } = __nccwpck_require__(1587) -+const zlib = __nccwpck_require__(9796) -+const { -+ bytesMatch, -+ makePolicyContainer, -+ clonePolicyContainer, -+ requestBadPort, -+ TAOCheck, -+ appendRequestOriginHeader, -+ responseLocationURL, -+ requestCurrentURL, -+ setRequestReferrerPolicyOnRedirect, -+ tryUpgradeRequestToAPotentiallyTrustworthyURL, -+ createOpaqueTimingInfo, -+ appendFetchMetadata, -+ corsCheck, -+ crossOriginResourcePolicyCheck, -+ determineRequestsReferrer, -+ coarsenedSharedCurrentTime, -+ createDeferredPromise, -+ isBlobLike, -+ sameOrigin, -+ isCancelled, -+ isAborted, -+ isErrorLike, -+ fullyReadBody, -+ readableStreamClose, -+ isomorphicEncode, -+ urlIsLocal, -+ urlIsHttpHttpsScheme, -+ urlHasHttpsScheme -+} = __nccwpck_require__(1554) -+const { kState, kHeaders, kGuard, kRealm } = __nccwpck_require__(8069) -+const assert = __nccwpck_require__(9491) -+const { safelyExtractBody } = __nccwpck_require__(9928) -+const { -+ redirectStatusSet, -+ nullBodyStatus, -+ safeMethodsSet, -+ requestBodyHeader, -+ subresourceSet, -+ DOMException -+} = __nccwpck_require__(9951) -+const { kHeadersList } = __nccwpck_require__(3745) -+const EE = __nccwpck_require__(2361) -+const { Readable, pipeline } = __nccwpck_require__(2781) -+const { addAbortListener, isErrored, isReadable, nodeMajor, nodeMinor } = __nccwpck_require__(929) -+const { dataURLProcessor, serializeAMimeType } = __nccwpck_require__(1827) -+const { TransformStream } = __nccwpck_require__(5356) -+const { getGlobalDispatcher } = __nccwpck_require__(7718) -+const { webidl } = __nccwpck_require__(5611) -+const { STATUS_CODES } = __nccwpck_require__(3685) -+const GET_OR_HEAD = ['GET', 'HEAD'] -+ -+/** @type {import('buffer').resolveObjectURL} */ -+let resolveObjectURL -+let ReadableStream = globalThis.ReadableStream -+ -+class Fetch extends EE { -+ constructor (dispatcher) { -+ super() -+ -+ this.dispatcher = dispatcher -+ this.connection = null -+ this.dump = false -+ this.state = 'ongoing' -+ // 2 terminated listeners get added per request, -+ // but only 1 gets removed. If there are 20 redirects, -+ // 21 listeners will be added. -+ // See https://github.com/nodejs/undici/issues/1711 -+ // TODO (fix): Find and fix root cause for leaked listener. -+ this.setMaxListeners(21) -+ } -+ -+ terminate (reason) { -+ if (this.state !== 'ongoing') { -+ return -+ } -+ -+ this.state = 'terminated' -+ this.connection?.destroy(reason) -+ this.emit('terminated', reason) -+ } -+ -+ // https://fetch.spec.whatwg.org/#fetch-controller-abort -+ abort (error) { -+ if (this.state !== 'ongoing') { -+ return -+ } -+ -+ // 1. Set controller’s state to "aborted". -+ this.state = 'aborted' -+ -+ // 2. Let fallbackError be an "AbortError" DOMException. -+ // 3. Set error to fallbackError if it is not given. -+ if (!error) { -+ error = new DOMException('The operation was aborted.', 'AbortError') -+ } -+ -+ // 4. Let serializedError be StructuredSerialize(error). -+ // If that threw an exception, catch it, and let -+ // serializedError be StructuredSerialize(fallbackError). -+ -+ // 5. Set controller’s serialized abort reason to serializedError. -+ this.serializedAbortReason = error -+ -+ this.connection?.destroy(error) -+ this.emit('terminated', error) -+ } -+} -+ -+// https://fetch.spec.whatwg.org/#fetch-method -+function fetch (input, init = {}) { -+ webidl.argumentLengthCheck(arguments, 1, { header: 'globalThis.fetch' }) -+ -+ // 1. Let p be a new promise. -+ const p = createDeferredPromise() -+ -+ // 2. Let requestObject be the result of invoking the initial value of -+ // Request as constructor with input and init as arguments. If this throws -+ // an exception, reject p with it and return p. -+ let requestObject -+ -+ try { -+ requestObject = new Request(input, init) -+ } catch (e) { -+ p.reject(e) -+ return p.promise -+ } -+ -+ // 3. Let request be requestObject’s request. -+ const request = requestObject[kState] -+ -+ // 4. If requestObject’s signal’s aborted flag is set, then: -+ if (requestObject.signal.aborted) { -+ // 1. Abort the fetch() call with p, request, null, and -+ // requestObject’s signal’s abort reason. -+ abortFetch(p, request, null, requestObject.signal.reason) -+ -+ // 2. Return p. -+ return p.promise -+ } -+ -+ // 5. Let globalObject be request’s client’s global object. -+ const globalObject = request.client.globalObject -+ -+ // 6. If globalObject is a ServiceWorkerGlobalScope object, then set -+ // request’s service-workers mode to "none". -+ if (globalObject?.constructor?.name === 'ServiceWorkerGlobalScope') { -+ request.serviceWorkers = 'none' -+ } -+ -+ // 7. Let responseObject be null. -+ let responseObject = null -+ -+ // 8. Let relevantRealm be this’s relevant Realm. -+ const relevantRealm = null -+ -+ // 9. Let locallyAborted be false. -+ let locallyAborted = false -+ -+ // 10. Let controller be null. -+ let controller = null -+ -+ // 11. Add the following abort steps to requestObject’s signal: -+ addAbortListener( -+ requestObject.signal, -+ () => { -+ // 1. Set locallyAborted to true. -+ locallyAborted = true -+ -+ // 2. Assert: controller is non-null. -+ assert(controller != null) -+ -+ // 3. Abort controller with requestObject’s signal’s abort reason. -+ controller.abort(requestObject.signal.reason) -+ -+ // 4. Abort the fetch() call with p, request, responseObject, -+ // and requestObject’s signal’s abort reason. -+ abortFetch(p, request, responseObject, requestObject.signal.reason) -+ } -+ ) -+ -+ // 12. Let handleFetchDone given response response be to finalize and -+ // report timing with response, globalObject, and "fetch". -+ const handleFetchDone = (response) => -+ finalizeAndReportTiming(response, 'fetch') -+ -+ // 13. Set controller to the result of calling fetch given request, -+ // with processResponseEndOfBody set to handleFetchDone, and processResponse -+ // given response being these substeps: -+ -+ const processResponse = (response) => { -+ // 1. If locallyAborted is true, terminate these substeps. -+ if (locallyAborted) { -+ return Promise.resolve() -+ } -+ -+ // 2. If response’s aborted flag is set, then: -+ if (response.aborted) { -+ // 1. Let deserializedError be the result of deserialize a serialized -+ // abort reason given controller’s serialized abort reason and -+ // relevantRealm. -+ -+ // 2. Abort the fetch() call with p, request, responseObject, and -+ // deserializedError. -+ -+ abortFetch(p, request, responseObject, controller.serializedAbortReason) -+ return Promise.resolve() -+ } -+ -+ // 3. If response is a network error, then reject p with a TypeError -+ // and terminate these substeps. -+ if (response.type === 'error') { -+ p.reject( -+ Object.assign(new TypeError('fetch failed'), { cause: response.error }) -+ ) -+ return Promise.resolve() -+ } -+ -+ // 4. Set responseObject to the result of creating a Response object, -+ // given response, "immutable", and relevantRealm. -+ responseObject = new Response() -+ responseObject[kState] = response -+ responseObject[kRealm] = relevantRealm -+ responseObject[kHeaders][kHeadersList] = response.headersList -+ responseObject[kHeaders][kGuard] = 'immutable' -+ responseObject[kHeaders][kRealm] = relevantRealm -+ -+ // 5. Resolve p with responseObject. -+ p.resolve(responseObject) -+ } -+ -+ controller = fetching({ -+ request, -+ processResponseEndOfBody: handleFetchDone, -+ processResponse, -+ dispatcher: init.dispatcher ?? getGlobalDispatcher() // undici -+ }) -+ -+ // 14. Return p. -+ return p.promise -+} -+ -+// https://fetch.spec.whatwg.org/#finalize-and-report-timing -+function finalizeAndReportTiming (response, initiatorType = 'other') { -+ // 1. If response is an aborted network error, then return. -+ if (response.type === 'error' && response.aborted) { -+ return -+ } -+ -+ // 2. If response’s URL list is null or empty, then return. -+ if (!response.urlList?.length) { -+ return -+ } -+ -+ // 3. Let originalURL be response’s URL list[0]. -+ const originalURL = response.urlList[0] -+ -+ // 4. Let timingInfo be response’s timing info. -+ let timingInfo = response.timingInfo -+ -+ // 5. Let cacheState be response’s cache state. -+ let cacheState = response.cacheState -+ -+ // 6. If originalURL’s scheme is not an HTTP(S) scheme, then return. -+ if (!urlIsHttpHttpsScheme(originalURL)) { -+ return -+ } -+ -+ // 7. If timingInfo is null, then return. -+ if (timingInfo === null) { -+ return -+ } -+ -+ // 8. If response’s timing allow passed flag is not set, then: -+ if (!response.timingAllowPassed) { -+ // 1. Set timingInfo to a the result of creating an opaque timing info for timingInfo. -+ timingInfo = createOpaqueTimingInfo({ -+ startTime: timingInfo.startTime -+ }) -+ -+ // 2. Set cacheState to the empty string. -+ cacheState = '' -+ } -+ -+ // 9. Set timingInfo’s end time to the coarsened shared current time -+ // given global’s relevant settings object’s cross-origin isolated -+ // capability. -+ // TODO: given global’s relevant settings object’s cross-origin isolated -+ // capability? -+ timingInfo.endTime = coarsenedSharedCurrentTime() -+ -+ // 10. Set response’s timing info to timingInfo. -+ response.timingInfo = timingInfo -+ -+ // 11. Mark resource timing for timingInfo, originalURL, initiatorType, -+ // global, and cacheState. -+ markResourceTiming( -+ timingInfo, -+ originalURL, -+ initiatorType, -+ globalThis, -+ cacheState -+ ) -+} -+ -+// https://w3c.github.io/resource-timing/#dfn-mark-resource-timing -+function markResourceTiming (timingInfo, originalURL, initiatorType, globalThis, cacheState) { -+ if (nodeMajor > 18 || (nodeMajor === 18 && nodeMinor >= 2)) { -+ performance.markResourceTiming(timingInfo, originalURL.href, initiatorType, globalThis, cacheState) -+ } -+} -+ -+// https://fetch.spec.whatwg.org/#abort-fetch -+function abortFetch (p, request, responseObject, error) { -+ // Note: AbortSignal.reason was added in node v17.2.0 -+ // which would give us an undefined error to reject with. -+ // Remove this once node v16 is no longer supported. -+ if (!error) { -+ error = new DOMException('The operation was aborted.', 'AbortError') -+ } -+ -+ // 1. Reject promise with error. -+ p.reject(error) -+ -+ // 2. If request’s body is not null and is readable, then cancel request’s -+ // body with error. -+ if (request.body != null && isReadable(request.body?.stream)) { -+ request.body.stream.cancel(error).catch((err) => { -+ if (err.code === 'ERR_INVALID_STATE') { -+ // Node bug? -+ return -+ } -+ throw err -+ }) -+ } -+ -+ // 3. If responseObject is null, then return. -+ if (responseObject == null) { -+ return -+ } -+ -+ // 4. Let response be responseObject’s response. -+ const response = responseObject[kState] -+ -+ // 5. If response’s body is not null and is readable, then error response’s -+ // body with error. -+ if (response.body != null && isReadable(response.body?.stream)) { -+ response.body.stream.cancel(error).catch((err) => { -+ if (err.code === 'ERR_INVALID_STATE') { -+ // Node bug? -+ return -+ } -+ throw err -+ }) -+ } -+} -+ -+// https://fetch.spec.whatwg.org/#fetching -+function fetching ({ -+ request, -+ processRequestBodyChunkLength, -+ processRequestEndOfBody, -+ processResponse, -+ processResponseEndOfBody, -+ processResponseConsumeBody, -+ useParallelQueue = false, -+ dispatcher // undici -+}) { -+ // 1. Let taskDestination be null. -+ let taskDestination = null -+ -+ // 2. Let crossOriginIsolatedCapability be false. -+ let crossOriginIsolatedCapability = false -+ -+ // 3. If request’s client is non-null, then: -+ if (request.client != null) { -+ // 1. Set taskDestination to request’s client’s global object. -+ taskDestination = request.client.globalObject -+ -+ // 2. Set crossOriginIsolatedCapability to request’s client’s cross-origin -+ // isolated capability. -+ crossOriginIsolatedCapability = -+ request.client.crossOriginIsolatedCapability -+ } -+ -+ // 4. If useParallelQueue is true, then set taskDestination to the result of -+ // starting a new parallel queue. -+ // TODO -+ -+ // 5. Let timingInfo be a new fetch timing info whose start time and -+ // post-redirect start time are the coarsened shared current time given -+ // crossOriginIsolatedCapability. -+ const currenTime = coarsenedSharedCurrentTime(crossOriginIsolatedCapability) -+ const timingInfo = createOpaqueTimingInfo({ -+ startTime: currenTime -+ }) -+ -+ // 6. Let fetchParams be a new fetch params whose -+ // request is request, -+ // timing info is timingInfo, -+ // process request body chunk length is processRequestBodyChunkLength, -+ // process request end-of-body is processRequestEndOfBody, -+ // process response is processResponse, -+ // process response consume body is processResponseConsumeBody, -+ // process response end-of-body is processResponseEndOfBody, -+ // task destination is taskDestination, -+ // and cross-origin isolated capability is crossOriginIsolatedCapability. -+ const fetchParams = { -+ controller: new Fetch(dispatcher), -+ request, -+ timingInfo, -+ processRequestBodyChunkLength, -+ processRequestEndOfBody, -+ processResponse, -+ processResponseConsumeBody, -+ processResponseEndOfBody, -+ taskDestination, -+ crossOriginIsolatedCapability -+ } -+ -+ // 7. If request’s body is a byte sequence, then set request’s body to -+ // request’s body as a body. -+ // NOTE: Since fetching is only called from fetch, body should already be -+ // extracted. -+ assert(!request.body || request.body.stream) -+ -+ // 8. If request’s window is "client", then set request’s window to request’s -+ // client, if request’s client’s global object is a Window object; otherwise -+ // "no-window". -+ if (request.window === 'client') { -+ // TODO: What if request.client is null? -+ request.window = -+ request.client?.globalObject?.constructor?.name === 'Window' -+ ? request.client -+ : 'no-window' -+ } -+ -+ // 9. If request’s origin is "client", then set request’s origin to request’s -+ // client’s origin. -+ if (request.origin === 'client') { -+ // TODO: What if request.client is null? -+ request.origin = request.client?.origin -+ } -+ -+ // 10. If all of the following conditions are true: -+ // TODO -+ -+ // 11. If request’s policy container is "client", then: -+ if (request.policyContainer === 'client') { -+ // 1. If request’s client is non-null, then set request’s policy -+ // container to a clone of request’s client’s policy container. [HTML] -+ if (request.client != null) { -+ request.policyContainer = clonePolicyContainer( -+ request.client.policyContainer -+ ) -+ } else { -+ // 2. Otherwise, set request’s policy container to a new policy -+ // container. -+ request.policyContainer = makePolicyContainer() -+ } -+ } -+ -+ // 12. If request’s header list does not contain `Accept`, then: -+ if (!request.headersList.contains('accept')) { -+ // 1. Let value be `*/*`. -+ const value = '*/*' -+ -+ // 2. A user agent should set value to the first matching statement, if -+ // any, switching on request’s destination: -+ // "document" -+ // "frame" -+ // "iframe" -+ // `text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8` -+ // "image" -+ // `image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5` -+ // "style" -+ // `text/css,*/*;q=0.1` -+ // TODO -+ -+ // 3. Append `Accept`/value to request’s header list. -+ request.headersList.append('accept', value) -+ } -+ -+ // 13. If request’s header list does not contain `Accept-Language`, then -+ // user agents should append `Accept-Language`/an appropriate value to -+ // request’s header list. -+ if (!request.headersList.contains('accept-language')) { -+ request.headersList.append('accept-language', '*') -+ } -+ -+ // 14. If request’s priority is null, then use request’s initiator and -+ // destination appropriately in setting request’s priority to a -+ // user-agent-defined object. -+ if (request.priority === null) { -+ // TODO -+ } -+ -+ // 15. If request is a subresource request, then: -+ if (subresourceSet.has(request.destination)) { -+ // TODO -+ } -+ -+ // 16. Run main fetch given fetchParams. -+ mainFetch(fetchParams) -+ .catch(err => { -+ fetchParams.controller.terminate(err) -+ }) -+ -+ // 17. Return fetchParam's controller -+ return fetchParams.controller -+} -+ -+// https://fetch.spec.whatwg.org/#concept-main-fetch -+async function mainFetch (fetchParams, recursive = false) { -+ // 1. Let request be fetchParams’s request. -+ const request = fetchParams.request -+ -+ // 2. Let response be null. -+ let response = null -+ -+ // 3. If request’s local-URLs-only flag is set and request’s current URL is -+ // not local, then set response to a network error. -+ if (request.localURLsOnly && !urlIsLocal(requestCurrentURL(request))) { -+ response = makeNetworkError('local URLs only') -+ } -+ -+ // 4. Run report Content Security Policy violations for request. -+ // TODO -+ -+ // 5. Upgrade request to a potentially trustworthy URL, if appropriate. -+ tryUpgradeRequestToAPotentiallyTrustworthyURL(request) -+ -+ // 6. If should request be blocked due to a bad port, should fetching request -+ // be blocked as mixed content, or should request be blocked by Content -+ // Security Policy returns blocked, then set response to a network error. -+ if (requestBadPort(request) === 'blocked') { -+ response = makeNetworkError('bad port') -+ } -+ // TODO: should fetching request be blocked as mixed content? -+ // TODO: should request be blocked by Content Security Policy? -+ -+ // 7. If request’s referrer policy is the empty string, then set request’s -+ // referrer policy to request’s policy container’s referrer policy. -+ if (request.referrerPolicy === '') { -+ request.referrerPolicy = request.policyContainer.referrerPolicy -+ } -+ -+ // 8. If request’s referrer is not "no-referrer", then set request’s -+ // referrer to the result of invoking determine request’s referrer. -+ if (request.referrer !== 'no-referrer') { -+ request.referrer = determineRequestsReferrer(request) -+ } -+ -+ // 9. Set request’s current URL’s scheme to "https" if all of the following -+ // conditions are true: -+ // - request’s current URL’s scheme is "http" -+ // - request’s current URL’s host is a domain -+ // - Matching request’s current URL’s host per Known HSTS Host Domain Name -+ // Matching results in either a superdomain match with an asserted -+ // includeSubDomains directive or a congruent match (with or without an -+ // asserted includeSubDomains directive). [HSTS] -+ // TODO -+ -+ // 10. If recursive is false, then run the remaining steps in parallel. -+ // TODO -+ -+ // 11. If response is null, then set response to the result of running -+ // the steps corresponding to the first matching statement: -+ if (response === null) { -+ response = await (async () => { -+ const currentURL = requestCurrentURL(request) -+ -+ if ( -+ // - request’s current URL’s origin is same origin with request’s origin, -+ // and request’s response tainting is "basic" -+ (sameOrigin(currentURL, request.url) && request.responseTainting === 'basic') || -+ // request’s current URL’s scheme is "data" -+ (currentURL.protocol === 'data:') || -+ // - request’s mode is "navigate" or "websocket" -+ (request.mode === 'navigate' || request.mode === 'websocket') -+ ) { -+ // 1. Set request’s response tainting to "basic". -+ request.responseTainting = 'basic' -+ -+ // 2. Return the result of running scheme fetch given fetchParams. -+ return await schemeFetch(fetchParams) -+ } -+ -+ // request’s mode is "same-origin" -+ if (request.mode === 'same-origin') { -+ // 1. Return a network error. -+ return makeNetworkError('request mode cannot be "same-origin"') -+ } -+ -+ // request’s mode is "no-cors" -+ if (request.mode === 'no-cors') { -+ // 1. If request’s redirect mode is not "follow", then return a network -+ // error. -+ if (request.redirect !== 'follow') { -+ return makeNetworkError( -+ 'redirect mode cannot be "follow" for "no-cors" request' -+ ) -+ } -+ -+ // 2. Set request’s response tainting to "opaque". -+ request.responseTainting = 'opaque' -+ -+ // 3. Return the result of running scheme fetch given fetchParams. -+ return await schemeFetch(fetchParams) -+ } -+ -+ // request’s current URL’s scheme is not an HTTP(S) scheme -+ if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) { -+ // Return a network error. -+ return makeNetworkError('URL scheme must be a HTTP(S) scheme') -+ } -+ -+ // - request’s use-CORS-preflight flag is set -+ // - request’s unsafe-request flag is set and either request’s method is -+ // not a CORS-safelisted method or CORS-unsafe request-header names with -+ // request’s header list is not empty -+ // 1. Set request’s response tainting to "cors". -+ // 2. Let corsWithPreflightResponse be the result of running HTTP fetch -+ // given fetchParams and true. -+ // 3. If corsWithPreflightResponse is a network error, then clear cache -+ // entries using request. -+ // 4. Return corsWithPreflightResponse. -+ // TODO -+ -+ // Otherwise -+ // 1. Set request’s response tainting to "cors". -+ request.responseTainting = 'cors' -+ -+ // 2. Return the result of running HTTP fetch given fetchParams. -+ return await httpFetch(fetchParams) -+ })() -+ } -+ -+ // 12. If recursive is true, then return response. -+ if (recursive) { -+ return response -+ } -+ -+ // 13. If response is not a network error and response is not a filtered -+ // response, then: -+ if (response.status !== 0 && !response.internalResponse) { -+ // If request’s response tainting is "cors", then: -+ if (request.responseTainting === 'cors') { -+ // 1. Let headerNames be the result of extracting header list values -+ // given `Access-Control-Expose-Headers` and response’s header list. -+ // TODO -+ // 2. If request’s credentials mode is not "include" and headerNames -+ // contains `*`, then set response’s CORS-exposed header-name list to -+ // all unique header names in response’s header list. -+ // TODO -+ // 3. Otherwise, if headerNames is not null or failure, then set -+ // response’s CORS-exposed header-name list to headerNames. -+ // TODO -+ } -+ -+ // Set response to the following filtered response with response as its -+ // internal response, depending on request’s response tainting: -+ if (request.responseTainting === 'basic') { -+ response = filterResponse(response, 'basic') -+ } else if (request.responseTainting === 'cors') { -+ response = filterResponse(response, 'cors') -+ } else if (request.responseTainting === 'opaque') { -+ response = filterResponse(response, 'opaque') -+ } else { -+ assert(false) -+ } -+ } -+ -+ // 14. Let internalResponse be response, if response is a network error, -+ // and response’s internal response otherwise. -+ let internalResponse = -+ response.status === 0 ? response : response.internalResponse -+ -+ // 15. If internalResponse’s URL list is empty, then set it to a clone of -+ // request’s URL list. -+ if (internalResponse.urlList.length === 0) { -+ internalResponse.urlList.push(...request.urlList) -+ } -+ -+ // 16. If request’s timing allow failed flag is unset, then set -+ // internalResponse’s timing allow passed flag. -+ if (!request.timingAllowFailed) { -+ response.timingAllowPassed = true -+ } -+ -+ // 17. If response is not a network error and any of the following returns -+ // blocked -+ // - should internalResponse to request be blocked as mixed content -+ // - should internalResponse to request be blocked by Content Security Policy -+ // - should internalResponse to request be blocked due to its MIME type -+ // - should internalResponse to request be blocked due to nosniff -+ // TODO -+ -+ // 18. If response’s type is "opaque", internalResponse’s status is 206, -+ // internalResponse’s range-requested flag is set, and request’s header -+ // list does not contain `Range`, then set response and internalResponse -+ // to a network error. -+ if ( -+ response.type === 'opaque' && -+ internalResponse.status === 206 && -+ internalResponse.rangeRequested && -+ !request.headers.contains('range') -+ ) { -+ response = internalResponse = makeNetworkError() -+ } -+ -+ // 19. If response is not a network error and either request’s method is -+ // `HEAD` or `CONNECT`, or internalResponse’s status is a null body status, -+ // set internalResponse’s body to null and disregard any enqueuing toward -+ // it (if any). -+ if ( -+ response.status !== 0 && -+ (request.method === 'HEAD' || -+ request.method === 'CONNECT' || -+ nullBodyStatus.includes(internalResponse.status)) -+ ) { -+ internalResponse.body = null -+ fetchParams.controller.dump = true -+ } -+ -+ // 20. If request’s integrity metadata is not the empty string, then: -+ if (request.integrity) { -+ // 1. Let processBodyError be this step: run fetch finale given fetchParams -+ // and a network error. -+ const processBodyError = (reason) => -+ fetchFinale(fetchParams, makeNetworkError(reason)) -+ -+ // 2. If request’s response tainting is "opaque", or response’s body is null, -+ // then run processBodyError and abort these steps. -+ if (request.responseTainting === 'opaque' || response.body == null) { -+ processBodyError(response.error) -+ return -+ } -+ -+ // 3. Let processBody given bytes be these steps: -+ const processBody = (bytes) => { -+ // 1. If bytes do not match request’s integrity metadata, -+ // then run processBodyError and abort these steps. [SRI] -+ if (!bytesMatch(bytes, request.integrity)) { -+ processBodyError('integrity mismatch') -+ return -+ } -+ -+ // 2. Set response’s body to bytes as a body. -+ response.body = safelyExtractBody(bytes)[0] -+ -+ // 3. Run fetch finale given fetchParams and response. -+ fetchFinale(fetchParams, response) -+ } -+ -+ // 4. Fully read response’s body given processBody and processBodyError. -+ await fullyReadBody(response.body, processBody, processBodyError) -+ } else { -+ // 21. Otherwise, run fetch finale given fetchParams and response. -+ fetchFinale(fetchParams, response) -+ } -+} -+ -+// https://fetch.spec.whatwg.org/#concept-scheme-fetch -+// given a fetch params fetchParams -+function schemeFetch (fetchParams) { -+ // Note: since the connection is destroyed on redirect, which sets fetchParams to a -+ // cancelled state, we do not want this condition to trigger *unless* there have been -+ // no redirects. See https://github.com/nodejs/undici/issues/1776 -+ // 1. If fetchParams is canceled, then return the appropriate network error for fetchParams. -+ if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) { -+ return Promise.resolve(makeAppropriateNetworkError(fetchParams)) -+ } -+ -+ // 2. Let request be fetchParams’s request. -+ const { request } = fetchParams -+ -+ const { protocol: scheme } = requestCurrentURL(request) -+ -+ // 3. Switch on request’s current URL’s scheme and run the associated steps: -+ switch (scheme) { -+ case 'about:': { -+ // If request’s current URL’s path is the string "blank", then return a new response -+ // whose status message is `OK`, header list is « (`Content-Type`, `text/html;charset=utf-8`) », -+ // and body is the empty byte sequence as a body. -+ -+ // Otherwise, return a network error. -+ return Promise.resolve(makeNetworkError('about scheme is not supported')) -+ } -+ case 'blob:': { -+ if (!resolveObjectURL) { -+ resolveObjectURL = (__nccwpck_require__(4300).resolveObjectURL) -+ } -+ -+ // 1. Let blobURLEntry be request’s current URL’s blob URL entry. -+ const blobURLEntry = requestCurrentURL(request) -+ -+ // https://github.com/web-platform-tests/wpt/blob/7b0ebaccc62b566a1965396e5be7bb2bc06f841f/FileAPI/url/resources/fetch-tests.js#L52-L56 -+ // Buffer.resolveObjectURL does not ignore URL queries. -+ if (blobURLEntry.search.length !== 0) { -+ return Promise.resolve(makeNetworkError('NetworkError when attempting to fetch resource.')) -+ } -+ -+ const blobURLEntryObject = resolveObjectURL(blobURLEntry.toString()) -+ -+ // 2. If request’s method is not `GET`, blobURLEntry is null, or blobURLEntry’s -+ // object is not a Blob object, then return a network error. -+ if (request.method !== 'GET' || !isBlobLike(blobURLEntryObject)) { -+ return Promise.resolve(makeNetworkError('invalid method')) -+ } -+ -+ // 3. Let bodyWithType be the result of safely extracting blobURLEntry’s object. -+ const bodyWithType = safelyExtractBody(blobURLEntryObject) -+ -+ // 4. Let body be bodyWithType’s body. -+ const body = bodyWithType[0] -+ -+ // 5. Let length be body’s length, serialized and isomorphic encoded. -+ const length = isomorphicEncode(`${body.length}`) -+ -+ // 6. Let type be bodyWithType’s type if it is non-null; otherwise the empty byte sequence. -+ const type = bodyWithType[1] ?? '' -+ -+ // 7. Return a new response whose status message is `OK`, header list is -+ // « (`Content-Length`, length), (`Content-Type`, type) », and body is body. -+ const response = makeResponse({ -+ statusText: 'OK', -+ headersList: [ -+ ['content-length', { name: 'Content-Length', value: length }], -+ ['content-type', { name: 'Content-Type', value: type }] -+ ] -+ }) -+ -+ response.body = body -+ -+ return Promise.resolve(response) -+ } -+ case 'data:': { -+ // 1. Let dataURLStruct be the result of running the -+ // data: URL processor on request’s current URL. -+ const currentURL = requestCurrentURL(request) -+ const dataURLStruct = dataURLProcessor(currentURL) -+ -+ // 2. If dataURLStruct is failure, then return a -+ // network error. -+ if (dataURLStruct === 'failure') { -+ return Promise.resolve(makeNetworkError('failed to fetch the data URL')) -+ } -+ -+ // 3. Let mimeType be dataURLStruct’s MIME type, serialized. -+ const mimeType = serializeAMimeType(dataURLStruct.mimeType) -+ -+ // 4. Return a response whose status message is `OK`, -+ // header list is « (`Content-Type`, mimeType) », -+ // and body is dataURLStruct’s body as a body. -+ return Promise.resolve(makeResponse({ -+ statusText: 'OK', -+ headersList: [ -+ ['content-type', { name: 'Content-Type', value: mimeType }] -+ ], -+ body: safelyExtractBody(dataURLStruct.body)[0] -+ })) -+ } -+ case 'file:': { -+ // For now, unfortunate as it is, file URLs are left as an exercise for the reader. -+ // When in doubt, return a network error. -+ return Promise.resolve(makeNetworkError('not implemented... yet...')) -+ } -+ case 'http:': -+ case 'https:': { -+ // Return the result of running HTTP fetch given fetchParams. -+ -+ return httpFetch(fetchParams) -+ .catch((err) => makeNetworkError(err)) -+ } -+ default: { -+ return Promise.resolve(makeNetworkError('unknown scheme')) -+ } -+ } -+} -+ -+// https://fetch.spec.whatwg.org/#finalize-response -+function finalizeResponse (fetchParams, response) { -+ // 1. Set fetchParams’s request’s done flag. -+ fetchParams.request.done = true -+ -+ // 2, If fetchParams’s process response done is not null, then queue a fetch -+ // task to run fetchParams’s process response done given response, with -+ // fetchParams’s task destination. -+ if (fetchParams.processResponseDone != null) { -+ queueMicrotask(() => fetchParams.processResponseDone(response)) -+ } -+} -+ -+// https://fetch.spec.whatwg.org/#fetch-finale -+function fetchFinale (fetchParams, response) { -+ // 1. If response is a network error, then: -+ if (response.type === 'error') { -+ // 1. Set response’s URL list to « fetchParams’s request’s URL list[0] ». -+ response.urlList = [fetchParams.request.urlList[0]] -+ -+ // 2. Set response’s timing info to the result of creating an opaque timing -+ // info for fetchParams’s timing info. -+ response.timingInfo = createOpaqueTimingInfo({ -+ startTime: fetchParams.timingInfo.startTime -+ }) -+ } -+ -+ // 2. Let processResponseEndOfBody be the following steps: -+ const processResponseEndOfBody = () => { -+ // 1. Set fetchParams’s request’s done flag. -+ fetchParams.request.done = true -+ -+ // If fetchParams’s process response end-of-body is not null, -+ // then queue a fetch task to run fetchParams’s process response -+ // end-of-body given response with fetchParams’s task destination. -+ if (fetchParams.processResponseEndOfBody != null) { -+ queueMicrotask(() => fetchParams.processResponseEndOfBody(response)) -+ } -+ } -+ -+ // 3. If fetchParams’s process response is non-null, then queue a fetch task -+ // to run fetchParams’s process response given response, with fetchParams’s -+ // task destination. -+ if (fetchParams.processResponse != null) { -+ queueMicrotask(() => fetchParams.processResponse(response)) -+ } -+ -+ // 4. If response’s body is null, then run processResponseEndOfBody. -+ if (response.body == null) { -+ processResponseEndOfBody() -+ } else { -+ // 5. Otherwise: -+ -+ // 1. Let transformStream be a new a TransformStream. -+ -+ // 2. Let identityTransformAlgorithm be an algorithm which, given chunk, -+ // enqueues chunk in transformStream. -+ const identityTransformAlgorithm = (chunk, controller) => { -+ controller.enqueue(chunk) -+ } -+ -+ // 3. Set up transformStream with transformAlgorithm set to identityTransformAlgorithm -+ // and flushAlgorithm set to processResponseEndOfBody. -+ const transformStream = new TransformStream({ -+ start () {}, -+ transform: identityTransformAlgorithm, -+ flush: processResponseEndOfBody -+ }, { -+ size () { -+ return 1 -+ } -+ }, { -+ size () { -+ return 1 -+ } -+ }) -+ -+ // 4. Set response’s body to the result of piping response’s body through transformStream. -+ response.body = { stream: response.body.stream.pipeThrough(transformStream) } -+ } -+ -+ // 6. If fetchParams’s process response consume body is non-null, then: -+ if (fetchParams.processResponseConsumeBody != null) { -+ // 1. Let processBody given nullOrBytes be this step: run fetchParams’s -+ // process response consume body given response and nullOrBytes. -+ const processBody = (nullOrBytes) => fetchParams.processResponseConsumeBody(response, nullOrBytes) -+ -+ // 2. Let processBodyError be this step: run fetchParams’s process -+ // response consume body given response and failure. -+ const processBodyError = (failure) => fetchParams.processResponseConsumeBody(response, failure) -+ -+ // 3. If response’s body is null, then queue a fetch task to run processBody -+ // given null, with fetchParams’s task destination. -+ if (response.body == null) { -+ queueMicrotask(() => processBody(null)) -+ } else { -+ // 4. Otherwise, fully read response’s body given processBody, processBodyError, -+ // and fetchParams’s task destination. -+ return fullyReadBody(response.body, processBody, processBodyError) -+ } -+ return Promise.resolve() -+ } -+} -+ -+// https://fetch.spec.whatwg.org/#http-fetch -+async function httpFetch (fetchParams) { -+ // 1. Let request be fetchParams’s request. -+ const request = fetchParams.request -+ -+ // 2. Let response be null. -+ let response = null -+ -+ // 3. Let actualResponse be null. -+ let actualResponse = null -+ -+ // 4. Let timingInfo be fetchParams’s timing info. -+ const timingInfo = fetchParams.timingInfo -+ -+ // 5. If request’s service-workers mode is "all", then: -+ if (request.serviceWorkers === 'all') { -+ // TODO -+ } -+ -+ // 6. If response is null, then: -+ if (response === null) { -+ // 1. If makeCORSPreflight is true and one of these conditions is true: -+ // TODO -+ -+ // 2. If request’s redirect mode is "follow", then set request’s -+ // service-workers mode to "none". -+ if (request.redirect === 'follow') { -+ request.serviceWorkers = 'none' -+ } -+ -+ // 3. Set response and actualResponse to the result of running -+ // HTTP-network-or-cache fetch given fetchParams. -+ actualResponse = response = await httpNetworkOrCacheFetch(fetchParams) -+ -+ // 4. If request’s response tainting is "cors" and a CORS check -+ // for request and response returns failure, then return a network error. -+ if ( -+ request.responseTainting === 'cors' && -+ corsCheck(request, response) === 'failure' -+ ) { -+ return makeNetworkError('cors failure') -+ } -+ -+ // 5. If the TAO check for request and response returns failure, then set -+ // request’s timing allow failed flag. -+ if (TAOCheck(request, response) === 'failure') { -+ request.timingAllowFailed = true -+ } -+ } -+ -+ // 7. If either request’s response tainting or response’s type -+ // is "opaque", and the cross-origin resource policy check with -+ // request’s origin, request’s client, request’s destination, -+ // and actualResponse returns blocked, then return a network error. -+ if ( -+ (request.responseTainting === 'opaque' || response.type === 'opaque') && -+ crossOriginResourcePolicyCheck( -+ request.origin, -+ request.client, -+ request.destination, -+ actualResponse -+ ) === 'blocked' -+ ) { -+ return makeNetworkError('blocked') -+ } -+ -+ // 8. If actualResponse’s status is a redirect status, then: -+ if (redirectStatusSet.has(actualResponse.status)) { -+ // 1. If actualResponse’s status is not 303, request’s body is not null, -+ // and the connection uses HTTP/2, then user agents may, and are even -+ // encouraged to, transmit an RST_STREAM frame. -+ // See, https://github.com/whatwg/fetch/issues/1288 -+ if (request.redirect !== 'manual') { -+ fetchParams.controller.connection.destroy() -+ } -+ -+ // 2. Switch on request’s redirect mode: -+ if (request.redirect === 'error') { -+ // Set response to a network error. -+ response = makeNetworkError('unexpected redirect') -+ } else if (request.redirect === 'manual') { -+ // Set response to an opaque-redirect filtered response whose internal -+ // response is actualResponse. -+ // NOTE(spec): On the web this would return an `opaqueredirect` response, -+ // but that doesn't make sense server side. -+ // See https://github.com/nodejs/undici/issues/1193. -+ response = actualResponse -+ } else if (request.redirect === 'follow') { -+ // Set response to the result of running HTTP-redirect fetch given -+ // fetchParams and response. -+ response = await httpRedirectFetch(fetchParams, response) -+ } else { -+ assert(false) -+ } -+ } -+ -+ // 9. Set response’s timing info to timingInfo. -+ response.timingInfo = timingInfo -+ -+ // 10. Return response. -+ return response -+} -+ -+// https://fetch.spec.whatwg.org/#http-redirect-fetch -+function httpRedirectFetch (fetchParams, response) { -+ // 1. Let request be fetchParams’s request. -+ const request = fetchParams.request -+ -+ // 2. Let actualResponse be response, if response is not a filtered response, -+ // and response’s internal response otherwise. -+ const actualResponse = response.internalResponse -+ ? response.internalResponse -+ : response -+ -+ // 3. Let locationURL be actualResponse’s location URL given request’s current -+ // URL’s fragment. -+ let locationURL -+ -+ try { -+ locationURL = responseLocationURL( -+ actualResponse, -+ requestCurrentURL(request).hash -+ ) -+ -+ // 4. If locationURL is null, then return response. -+ if (locationURL == null) { -+ return response -+ } -+ } catch (err) { -+ // 5. If locationURL is failure, then return a network error. -+ return Promise.resolve(makeNetworkError(err)) -+ } -+ -+ // 6. If locationURL’s scheme is not an HTTP(S) scheme, then return a network -+ // error. -+ if (!urlIsHttpHttpsScheme(locationURL)) { -+ return Promise.resolve(makeNetworkError('URL scheme must be a HTTP(S) scheme')) -+ } -+ -+ // 7. If request’s redirect count is 20, then return a network error. -+ if (request.redirectCount === 20) { -+ return Promise.resolve(makeNetworkError('redirect count exceeded')) -+ } -+ -+ // 8. Increase request’s redirect count by 1. -+ request.redirectCount += 1 -+ -+ // 9. If request’s mode is "cors", locationURL includes credentials, and -+ // request’s origin is not same origin with locationURL’s origin, then return -+ // a network error. -+ if ( -+ request.mode === 'cors' && -+ (locationURL.username || locationURL.password) && -+ !sameOrigin(request, locationURL) -+ ) { -+ return Promise.resolve(makeNetworkError('cross origin not allowed for request mode "cors"')) -+ } -+ -+ // 10. If request’s response tainting is "cors" and locationURL includes -+ // credentials, then return a network error. -+ if ( -+ request.responseTainting === 'cors' && -+ (locationURL.username || locationURL.password) -+ ) { -+ return Promise.resolve(makeNetworkError( -+ 'URL cannot contain credentials for request mode "cors"' -+ )) -+ } -+ -+ // 11. If actualResponse’s status is not 303, request’s body is non-null, -+ // and request’s body’s source is null, then return a network error. -+ if ( -+ actualResponse.status !== 303 && -+ request.body != null && -+ request.body.source == null -+ ) { -+ return Promise.resolve(makeNetworkError()) -+ } -+ -+ // 12. If one of the following is true -+ // - actualResponse’s status is 301 or 302 and request’s method is `POST` -+ // - actualResponse’s status is 303 and request’s method is not `GET` or `HEAD` -+ if ( -+ ([301, 302].includes(actualResponse.status) && request.method === 'POST') || -+ (actualResponse.status === 303 && -+ !GET_OR_HEAD.includes(request.method)) -+ ) { -+ // then: -+ // 1. Set request’s method to `GET` and request’s body to null. -+ request.method = 'GET' -+ request.body = null -+ -+ // 2. For each headerName of request-body-header name, delete headerName from -+ // request’s header list. -+ for (const headerName of requestBodyHeader) { -+ request.headersList.delete(headerName) -+ } -+ } -+ -+ // 13. If request’s current URL’s origin is not same origin with locationURL’s -+ // origin, then for each headerName of CORS non-wildcard request-header name, -+ // delete headerName from request’s header list. -+ if (!sameOrigin(requestCurrentURL(request), locationURL)) { -+ // https://fetch.spec.whatwg.org/#cors-non-wildcard-request-header-name -+ request.headersList.delete('authorization') -+ -+ // https://fetch.spec.whatwg.org/#authentication-entries -+ request.headersList.delete('proxy-authorization', true) -+ -+ // "Cookie" and "Host" are forbidden request-headers, which undici doesn't implement. -+ request.headersList.delete('cookie') -+ request.headersList.delete('host') -+ } -+ -+ // 14. If request’s body is non-null, then set request’s body to the first return -+ // value of safely extracting request’s body’s source. -+ if (request.body != null) { -+ assert(request.body.source != null) -+ request.body = safelyExtractBody(request.body.source)[0] -+ } -+ -+ // 15. Let timingInfo be fetchParams’s timing info. -+ const timingInfo = fetchParams.timingInfo -+ -+ // 16. Set timingInfo’s redirect end time and post-redirect start time to the -+ // coarsened shared current time given fetchParams’s cross-origin isolated -+ // capability. -+ timingInfo.redirectEndTime = timingInfo.postRedirectStartTime = -+ coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability) -+ -+ // 17. If timingInfo’s redirect start time is 0, then set timingInfo’s -+ // redirect start time to timingInfo’s start time. -+ if (timingInfo.redirectStartTime === 0) { -+ timingInfo.redirectStartTime = timingInfo.startTime -+ } -+ -+ // 18. Append locationURL to request’s URL list. -+ request.urlList.push(locationURL) -+ -+ // 19. Invoke set request’s referrer policy on redirect on request and -+ // actualResponse. -+ setRequestReferrerPolicyOnRedirect(request, actualResponse) -+ -+ // 20. Return the result of running main fetch given fetchParams and true. -+ return mainFetch(fetchParams, true) -+} -+ -+// https://fetch.spec.whatwg.org/#http-network-or-cache-fetch -+async function httpNetworkOrCacheFetch ( -+ fetchParams, -+ isAuthenticationFetch = false, -+ isNewConnectionFetch = false -+) { -+ // 1. Let request be fetchParams’s request. -+ const request = fetchParams.request -+ -+ // 2. Let httpFetchParams be null. -+ let httpFetchParams = null -+ -+ // 3. Let httpRequest be null. -+ let httpRequest = null -+ -+ // 4. Let response be null. -+ let response = null -+ -+ // 5. Let storedResponse be null. -+ // TODO: cache -+ -+ // 6. Let httpCache be null. -+ const httpCache = null -+ -+ // 7. Let the revalidatingFlag be unset. -+ const revalidatingFlag = false -+ -+ // 8. Run these steps, but abort when the ongoing fetch is terminated: -+ -+ // 1. If request’s window is "no-window" and request’s redirect mode is -+ // "error", then set httpFetchParams to fetchParams and httpRequest to -+ // request. -+ if (request.window === 'no-window' && request.redirect === 'error') { -+ httpFetchParams = fetchParams -+ httpRequest = request -+ } else { -+ // Otherwise: -+ -+ // 1. Set httpRequest to a clone of request. -+ httpRequest = makeRequest(request) -+ -+ // 2. Set httpFetchParams to a copy of fetchParams. -+ httpFetchParams = { ...fetchParams } -+ -+ // 3. Set httpFetchParams’s request to httpRequest. -+ httpFetchParams.request = httpRequest -+ } -+ -+ // 3. Let includeCredentials be true if one of -+ const includeCredentials = -+ request.credentials === 'include' || -+ (request.credentials === 'same-origin' && -+ request.responseTainting === 'basic') -+ -+ // 4. Let contentLength be httpRequest’s body’s length, if httpRequest’s -+ // body is non-null; otherwise null. -+ const contentLength = httpRequest.body ? httpRequest.body.length : null -+ -+ // 5. Let contentLengthHeaderValue be null. -+ let contentLengthHeaderValue = null -+ -+ // 6. If httpRequest’s body is null and httpRequest’s method is `POST` or -+ // `PUT`, then set contentLengthHeaderValue to `0`. -+ if ( -+ httpRequest.body == null && -+ ['POST', 'PUT'].includes(httpRequest.method) -+ ) { -+ contentLengthHeaderValue = '0' -+ } -+ -+ // 7. If contentLength is non-null, then set contentLengthHeaderValue to -+ // contentLength, serialized and isomorphic encoded. -+ if (contentLength != null) { -+ contentLengthHeaderValue = isomorphicEncode(`${contentLength}`) -+ } -+ -+ // 8. If contentLengthHeaderValue is non-null, then append -+ // `Content-Length`/contentLengthHeaderValue to httpRequest’s header -+ // list. -+ if (contentLengthHeaderValue != null) { -+ httpRequest.headersList.append('content-length', contentLengthHeaderValue) -+ } -+ -+ // 9. If contentLengthHeaderValue is non-null, then append (`Content-Length`, -+ // contentLengthHeaderValue) to httpRequest’s header list. -+ -+ // 10. If contentLength is non-null and httpRequest’s keepalive is true, -+ // then: -+ if (contentLength != null && httpRequest.keepalive) { -+ // NOTE: keepalive is a noop outside of browser context. -+ } -+ -+ // 11. If httpRequest’s referrer is a URL, then append -+ // `Referer`/httpRequest’s referrer, serialized and isomorphic encoded, -+ // to httpRequest’s header list. -+ if (httpRequest.referrer instanceof URL) { -+ httpRequest.headersList.append('referer', isomorphicEncode(httpRequest.referrer.href)) -+ } -+ -+ // 12. Append a request `Origin` header for httpRequest. -+ appendRequestOriginHeader(httpRequest) -+ -+ // 13. Append the Fetch metadata headers for httpRequest. [FETCH-METADATA] -+ appendFetchMetadata(httpRequest) -+ -+ // 14. If httpRequest’s header list does not contain `User-Agent`, then -+ // user agents should append `User-Agent`/default `User-Agent` value to -+ // httpRequest’s header list. -+ if (!httpRequest.headersList.contains('user-agent')) { -+ httpRequest.headersList.append('user-agent', typeof esbuildDetection === 'undefined' ? 'undici' : 'node') -+ } -+ -+ // 15. If httpRequest’s cache mode is "default" and httpRequest’s header -+ // list contains `If-Modified-Since`, `If-None-Match`, -+ // `If-Unmodified-Since`, `If-Match`, or `If-Range`, then set -+ // httpRequest’s cache mode to "no-store". -+ if ( -+ httpRequest.cache === 'default' && -+ (httpRequest.headersList.contains('if-modified-since') || -+ httpRequest.headersList.contains('if-none-match') || -+ httpRequest.headersList.contains('if-unmodified-since') || -+ httpRequest.headersList.contains('if-match') || -+ httpRequest.headersList.contains('if-range')) -+ ) { -+ httpRequest.cache = 'no-store' -+ } -+ -+ // 16. If httpRequest’s cache mode is "no-cache", httpRequest’s prevent -+ // no-cache cache-control header modification flag is unset, and -+ // httpRequest’s header list does not contain `Cache-Control`, then append -+ // `Cache-Control`/`max-age=0` to httpRequest’s header list. -+ if ( -+ httpRequest.cache === 'no-cache' && -+ !httpRequest.preventNoCacheCacheControlHeaderModification && -+ !httpRequest.headersList.contains('cache-control') -+ ) { -+ httpRequest.headersList.append('cache-control', 'max-age=0') -+ } -+ -+ // 17. If httpRequest’s cache mode is "no-store" or "reload", then: -+ if (httpRequest.cache === 'no-store' || httpRequest.cache === 'reload') { -+ // 1. If httpRequest’s header list does not contain `Pragma`, then append -+ // `Pragma`/`no-cache` to httpRequest’s header list. -+ if (!httpRequest.headersList.contains('pragma')) { -+ httpRequest.headersList.append('pragma', 'no-cache') -+ } -+ -+ // 2. If httpRequest’s header list does not contain `Cache-Control`, -+ // then append `Cache-Control`/`no-cache` to httpRequest’s header list. -+ if (!httpRequest.headersList.contains('cache-control')) { -+ httpRequest.headersList.append('cache-control', 'no-cache') -+ } -+ } -+ -+ // 18. If httpRequest’s header list contains `Range`, then append -+ // `Accept-Encoding`/`identity` to httpRequest’s header list. -+ if (httpRequest.headersList.contains('range')) { -+ httpRequest.headersList.append('accept-encoding', 'identity') -+ } -+ -+ // 19. Modify httpRequest’s header list per HTTP. Do not append a given -+ // header if httpRequest’s header list contains that header’s name. -+ // TODO: https://github.com/whatwg/fetch/issues/1285#issuecomment-896560129 -+ if (!httpRequest.headersList.contains('accept-encoding')) { -+ if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) { -+ httpRequest.headersList.append('accept-encoding', 'br, gzip, deflate') -+ } else { -+ httpRequest.headersList.append('accept-encoding', 'gzip, deflate') -+ } -+ } -+ -+ httpRequest.headersList.delete('host') -+ -+ // 20. If includeCredentials is true, then: -+ if (includeCredentials) { -+ // 1. If the user agent is not configured to block cookies for httpRequest -+ // (see section 7 of [COOKIES]), then: -+ // TODO: credentials -+ // 2. If httpRequest’s header list does not contain `Authorization`, then: -+ // TODO: credentials -+ } -+ -+ // 21. If there’s a proxy-authentication entry, use it as appropriate. -+ // TODO: proxy-authentication -+ -+ // 22. Set httpCache to the result of determining the HTTP cache -+ // partition, given httpRequest. -+ // TODO: cache -+ -+ // 23. If httpCache is null, then set httpRequest’s cache mode to -+ // "no-store". -+ if (httpCache == null) { -+ httpRequest.cache = 'no-store' -+ } -+ -+ // 24. If httpRequest’s cache mode is neither "no-store" nor "reload", -+ // then: -+ if (httpRequest.mode !== 'no-store' && httpRequest.mode !== 'reload') { -+ // TODO: cache -+ } -+ -+ // 9. If aborted, then return the appropriate network error for fetchParams. -+ // TODO -+ -+ // 10. If response is null, then: -+ if (response == null) { -+ // 1. If httpRequest’s cache mode is "only-if-cached", then return a -+ // network error. -+ if (httpRequest.mode === 'only-if-cached') { -+ return makeNetworkError('only if cached') -+ } -+ -+ // 2. Let forwardResponse be the result of running HTTP-network fetch -+ // given httpFetchParams, includeCredentials, and isNewConnectionFetch. -+ const forwardResponse = await httpNetworkFetch( -+ httpFetchParams, -+ includeCredentials, -+ isNewConnectionFetch -+ ) -+ -+ // 3. If httpRequest’s method is unsafe and forwardResponse’s status is -+ // in the range 200 to 399, inclusive, invalidate appropriate stored -+ // responses in httpCache, as per the "Invalidation" chapter of HTTP -+ // Caching, and set storedResponse to null. [HTTP-CACHING] -+ if ( -+ !safeMethodsSet.has(httpRequest.method) && -+ forwardResponse.status >= 200 && -+ forwardResponse.status <= 399 -+ ) { -+ // TODO: cache -+ } -+ -+ // 4. If the revalidatingFlag is set and forwardResponse’s status is 304, -+ // then: -+ if (revalidatingFlag && forwardResponse.status === 304) { -+ // TODO: cache -+ } -+ -+ // 5. If response is null, then: -+ if (response == null) { -+ // 1. Set response to forwardResponse. -+ response = forwardResponse -+ -+ // 2. Store httpRequest and forwardResponse in httpCache, as per the -+ // "Storing Responses in Caches" chapter of HTTP Caching. [HTTP-CACHING] -+ // TODO: cache -+ } -+ } -+ -+ // 11. Set response’s URL list to a clone of httpRequest’s URL list. -+ response.urlList = [...httpRequest.urlList] -+ -+ // 12. If httpRequest’s header list contains `Range`, then set response’s -+ // range-requested flag. -+ if (httpRequest.headersList.contains('range')) { -+ response.rangeRequested = true -+ } -+ -+ // 13. Set response’s request-includes-credentials to includeCredentials. -+ response.requestIncludesCredentials = includeCredentials -+ -+ // 14. If response’s status is 401, httpRequest’s response tainting is not -+ // "cors", includeCredentials is true, and request’s window is an environment -+ // settings object, then: -+ // TODO -+ -+ // 15. If response’s status is 407, then: -+ if (response.status === 407) { -+ // 1. If request’s window is "no-window", then return a network error. -+ if (request.window === 'no-window') { -+ return makeNetworkError() -+ } -+ -+ // 2. ??? -+ -+ // 3. If fetchParams is canceled, then return the appropriate network error for fetchParams. -+ if (isCancelled(fetchParams)) { -+ return makeAppropriateNetworkError(fetchParams) -+ } -+ -+ // 4. Prompt the end user as appropriate in request’s window and store -+ // the result as a proxy-authentication entry. [HTTP-AUTH] -+ // TODO: Invoke some kind of callback? -+ -+ // 5. Set response to the result of running HTTP-network-or-cache fetch given -+ // fetchParams. -+ // TODO -+ return makeNetworkError('proxy authentication required') -+ } -+ -+ // 16. If all of the following are true -+ if ( -+ // response’s status is 421 -+ response.status === 421 && -+ // isNewConnectionFetch is false -+ !isNewConnectionFetch && -+ // request’s body is null, or request’s body is non-null and request’s body’s source is non-null -+ (request.body == null || request.body.source != null) -+ ) { -+ // then: -+ -+ // 1. If fetchParams is canceled, then return the appropriate network error for fetchParams. -+ if (isCancelled(fetchParams)) { -+ return makeAppropriateNetworkError(fetchParams) -+ } -+ -+ // 2. Set response to the result of running HTTP-network-or-cache -+ // fetch given fetchParams, isAuthenticationFetch, and true. -+ -+ // TODO (spec): The spec doesn't specify this but we need to cancel -+ // the active response before we can start a new one. -+ // https://github.com/whatwg/fetch/issues/1293 -+ fetchParams.controller.connection.destroy() -+ -+ response = await httpNetworkOrCacheFetch( -+ fetchParams, -+ isAuthenticationFetch, -+ true -+ ) -+ } -+ -+ // 17. If isAuthenticationFetch is true, then create an authentication entry -+ if (isAuthenticationFetch) { -+ // TODO -+ } -+ -+ // 18. Return response. -+ return response -+} -+ -+// https://fetch.spec.whatwg.org/#http-network-fetch -+async function httpNetworkFetch ( -+ fetchParams, -+ includeCredentials = false, -+ forceNewConnection = false -+) { -+ assert(!fetchParams.controller.connection || fetchParams.controller.connection.destroyed) -+ -+ fetchParams.controller.connection = { -+ abort: null, -+ destroyed: false, -+ destroy (err) { -+ if (!this.destroyed) { -+ this.destroyed = true -+ this.abort?.(err ?? new DOMException('The operation was aborted.', 'AbortError')) -+ } -+ } -+ } -+ -+ // 1. Let request be fetchParams’s request. -+ const request = fetchParams.request -+ -+ // 2. Let response be null. -+ let response = null -+ -+ // 3. Let timingInfo be fetchParams’s timing info. -+ const timingInfo = fetchParams.timingInfo -+ -+ // 4. Let httpCache be the result of determining the HTTP cache partition, -+ // given request. -+ // TODO: cache -+ const httpCache = null -+ -+ // 5. If httpCache is null, then set request’s cache mode to "no-store". -+ if (httpCache == null) { -+ request.cache = 'no-store' -+ } -+ -+ // 6. Let networkPartitionKey be the result of determining the network -+ // partition key given request. -+ // TODO -+ -+ // 7. Let newConnection be "yes" if forceNewConnection is true; otherwise -+ // "no". -+ const newConnection = forceNewConnection ? 'yes' : 'no' // eslint-disable-line no-unused-vars -+ -+ // 8. Switch on request’s mode: -+ if (request.mode === 'websocket') { -+ // Let connection be the result of obtaining a WebSocket connection, -+ // given request’s current URL. -+ // TODO -+ } else { -+ // Let connection be the result of obtaining a connection, given -+ // networkPartitionKey, request’s current URL’s origin, -+ // includeCredentials, and forceNewConnection. -+ // TODO -+ } -+ -+ // 9. Run these steps, but abort when the ongoing fetch is terminated: -+ -+ // 1. If connection is failure, then return a network error. -+ -+ // 2. Set timingInfo’s final connection timing info to the result of -+ // calling clamp and coarsen connection timing info with connection’s -+ // timing info, timingInfo’s post-redirect start time, and fetchParams’s -+ // cross-origin isolated capability. -+ -+ // 3. If connection is not an HTTP/2 connection, request’s body is non-null, -+ // and request’s body’s source is null, then append (`Transfer-Encoding`, -+ // `chunked`) to request’s header list. -+ -+ // 4. Set timingInfo’s final network-request start time to the coarsened -+ // shared current time given fetchParams’s cross-origin isolated -+ // capability. -+ -+ // 5. Set response to the result of making an HTTP request over connection -+ // using request with the following caveats: -+ -+ // - Follow the relevant requirements from HTTP. [HTTP] [HTTP-SEMANTICS] -+ // [HTTP-COND] [HTTP-CACHING] [HTTP-AUTH] -+ -+ // - If request’s body is non-null, and request’s body’s source is null, -+ // then the user agent may have a buffer of up to 64 kibibytes and store -+ // a part of request’s body in that buffer. If the user agent reads from -+ // request’s body beyond that buffer’s size and the user agent needs to -+ // resend request, then instead return a network error. -+ -+ // - Set timingInfo’s final network-response start time to the coarsened -+ // shared current time given fetchParams’s cross-origin isolated capability, -+ // immediately after the user agent’s HTTP parser receives the first byte -+ // of the response (e.g., frame header bytes for HTTP/2 or response status -+ // line for HTTP/1.x). -+ -+ // - Wait until all the headers are transmitted. -+ -+ // - Any responses whose status is in the range 100 to 199, inclusive, -+ // and is not 101, are to be ignored, except for the purposes of setting -+ // timingInfo’s final network-response start time above. -+ -+ // - If request’s header list contains `Transfer-Encoding`/`chunked` and -+ // response is transferred via HTTP/1.0 or older, then return a network -+ // error. -+ -+ // - If the HTTP request results in a TLS client certificate dialog, then: -+ -+ // 1. If request’s window is an environment settings object, make the -+ // dialog available in request’s window. -+ -+ // 2. Otherwise, return a network error. -+ -+ // To transmit request’s body body, run these steps: -+ let requestBody = null -+ // 1. If body is null and fetchParams’s process request end-of-body is -+ // non-null, then queue a fetch task given fetchParams’s process request -+ // end-of-body and fetchParams’s task destination. -+ if (request.body == null && fetchParams.processRequestEndOfBody) { -+ queueMicrotask(() => fetchParams.processRequestEndOfBody()) -+ } else if (request.body != null) { -+ // 2. Otherwise, if body is non-null: -+ -+ // 1. Let processBodyChunk given bytes be these steps: -+ const processBodyChunk = async function * (bytes) { -+ // 1. If the ongoing fetch is terminated, then abort these steps. -+ if (isCancelled(fetchParams)) { -+ return -+ } -+ -+ // 2. Run this step in parallel: transmit bytes. -+ yield bytes -+ -+ // 3. If fetchParams’s process request body is non-null, then run -+ // fetchParams’s process request body given bytes’s length. -+ fetchParams.processRequestBodyChunkLength?.(bytes.byteLength) -+ } -+ -+ // 2. Let processEndOfBody be these steps: -+ const processEndOfBody = () => { -+ // 1. If fetchParams is canceled, then abort these steps. -+ if (isCancelled(fetchParams)) { -+ return -+ } -+ -+ // 2. If fetchParams’s process request end-of-body is non-null, -+ // then run fetchParams’s process request end-of-body. -+ if (fetchParams.processRequestEndOfBody) { -+ fetchParams.processRequestEndOfBody() -+ } -+ } -+ -+ // 3. Let processBodyError given e be these steps: -+ const processBodyError = (e) => { -+ // 1. If fetchParams is canceled, then abort these steps. -+ if (isCancelled(fetchParams)) { -+ return -+ } -+ -+ // 2. If e is an "AbortError" DOMException, then abort fetchParams’s controller. -+ if (e.name === 'AbortError') { -+ fetchParams.controller.abort() -+ } else { -+ fetchParams.controller.terminate(e) -+ } -+ } -+ -+ // 4. Incrementally read request’s body given processBodyChunk, processEndOfBody, -+ // processBodyError, and fetchParams’s task destination. -+ requestBody = (async function * () { -+ try { -+ for await (const bytes of request.body.stream) { -+ yield * processBodyChunk(bytes) -+ } -+ processEndOfBody() -+ } catch (err) { -+ processBodyError(err) -+ } -+ })() -+ } -+ -+ try { -+ // socket is only provided for websockets -+ const { body, status, statusText, headersList, socket } = await dispatch({ body: requestBody }) -+ -+ if (socket) { -+ response = makeResponse({ status, statusText, headersList, socket }) -+ } else { -+ const iterator = body[Symbol.asyncIterator]() -+ fetchParams.controller.next = () => iterator.next() -+ -+ response = makeResponse({ status, statusText, headersList }) -+ } -+ } catch (err) { -+ // 10. If aborted, then: -+ if (err.name === 'AbortError') { -+ // 1. If connection uses HTTP/2, then transmit an RST_STREAM frame. -+ fetchParams.controller.connection.destroy() -+ -+ // 2. Return the appropriate network error for fetchParams. -+ return makeAppropriateNetworkError(fetchParams, err) -+ } -+ -+ return makeNetworkError(err) -+ } -+ -+ // 11. Let pullAlgorithm be an action that resumes the ongoing fetch -+ // if it is suspended. -+ const pullAlgorithm = () => { -+ fetchParams.controller.resume() -+ } -+ -+ // 12. Let cancelAlgorithm be an algorithm that aborts fetchParams’s -+ // controller with reason, given reason. -+ const cancelAlgorithm = (reason) => { -+ fetchParams.controller.abort(reason) -+ } -+ -+ // 13. Let highWaterMark be a non-negative, non-NaN number, chosen by -+ // the user agent. -+ // TODO -+ -+ // 14. Let sizeAlgorithm be an algorithm that accepts a chunk object -+ // and returns a non-negative, non-NaN, non-infinite number, chosen by the user agent. -+ // TODO -+ -+ // 15. Let stream be a new ReadableStream. -+ // 16. Set up stream with pullAlgorithm set to pullAlgorithm, -+ // cancelAlgorithm set to cancelAlgorithm, highWaterMark set to -+ // highWaterMark, and sizeAlgorithm set to sizeAlgorithm. -+ if (!ReadableStream) { -+ ReadableStream = (__nccwpck_require__(5356).ReadableStream) -+ } -+ -+ const stream = new ReadableStream( -+ { -+ async start (controller) { -+ fetchParams.controller.controller = controller -+ }, -+ async pull (controller) { -+ await pullAlgorithm(controller) -+ }, -+ async cancel (reason) { -+ await cancelAlgorithm(reason) -+ } -+ }, -+ { -+ highWaterMark: 0, -+ size () { -+ return 1 -+ } -+ } -+ ) -+ -+ // 17. Run these steps, but abort when the ongoing fetch is terminated: -+ -+ // 1. Set response’s body to a new body whose stream is stream. -+ response.body = { stream } -+ -+ // 2. If response is not a network error and request’s cache mode is -+ // not "no-store", then update response in httpCache for request. -+ // TODO -+ -+ // 3. If includeCredentials is true and the user agent is not configured -+ // to block cookies for request (see section 7 of [COOKIES]), then run the -+ // "set-cookie-string" parsing algorithm (see section 5.2 of [COOKIES]) on -+ // the value of each header whose name is a byte-case-insensitive match for -+ // `Set-Cookie` in response’s header list, if any, and request’s current URL. -+ // TODO -+ -+ // 18. If aborted, then: -+ // TODO -+ -+ // 19. Run these steps in parallel: -+ -+ // 1. Run these steps, but abort when fetchParams is canceled: -+ fetchParams.controller.on('terminated', onAborted) -+ fetchParams.controller.resume = async () => { -+ // 1. While true -+ while (true) { -+ // 1-3. See onData... -+ -+ // 4. Set bytes to the result of handling content codings given -+ // codings and bytes. -+ let bytes -+ let isFailure -+ try { -+ const { done, value } = await fetchParams.controller.next() -+ -+ if (isAborted(fetchParams)) { -+ break -+ } -+ -+ bytes = done ? undefined : value -+ } catch (err) { -+ if (fetchParams.controller.ended && !timingInfo.encodedBodySize) { -+ // zlib doesn't like empty streams. -+ bytes = undefined -+ } else { -+ bytes = err -+ -+ // err may be propagated from the result of calling readablestream.cancel, -+ // which might not be an error. https://github.com/nodejs/undici/issues/2009 -+ isFailure = true -+ } -+ } -+ -+ if (bytes === undefined) { -+ // 2. Otherwise, if the bytes transmission for response’s message -+ // body is done normally and stream is readable, then close -+ // stream, finalize response for fetchParams and response, and -+ // abort these in-parallel steps. -+ readableStreamClose(fetchParams.controller.controller) -+ -+ finalizeResponse(fetchParams, response) -+ -+ return -+ } -+ -+ // 5. Increase timingInfo’s decoded body size by bytes’s length. -+ timingInfo.decodedBodySize += bytes?.byteLength ?? 0 -+ -+ // 6. If bytes is failure, then terminate fetchParams’s controller. -+ if (isFailure) { -+ fetchParams.controller.terminate(bytes) -+ return -+ } -+ -+ // 7. Enqueue a Uint8Array wrapping an ArrayBuffer containing bytes -+ // into stream. -+ fetchParams.controller.controller.enqueue(new Uint8Array(bytes)) -+ -+ // 8. If stream is errored, then terminate the ongoing fetch. -+ if (isErrored(stream)) { -+ fetchParams.controller.terminate() -+ return -+ } -+ -+ // 9. If stream doesn’t need more data ask the user agent to suspend -+ // the ongoing fetch. -+ if (!fetchParams.controller.controller.desiredSize) { -+ return -+ } -+ } -+ } -+ -+ // 2. If aborted, then: -+ function onAborted (reason) { -+ // 2. If fetchParams is aborted, then: -+ if (isAborted(fetchParams)) { -+ // 1. Set response’s aborted flag. -+ response.aborted = true -+ -+ // 2. If stream is readable, then error stream with the result of -+ // deserialize a serialized abort reason given fetchParams’s -+ // controller’s serialized abort reason and an -+ // implementation-defined realm. -+ if (isReadable(stream)) { -+ fetchParams.controller.controller.error( -+ fetchParams.controller.serializedAbortReason -+ ) -+ } -+ } else { -+ // 3. Otherwise, if stream is readable, error stream with a TypeError. -+ if (isReadable(stream)) { -+ fetchParams.controller.controller.error(new TypeError('terminated', { -+ cause: isErrorLike(reason) ? reason : undefined -+ })) -+ } -+ } -+ -+ // 4. If connection uses HTTP/2, then transmit an RST_STREAM frame. -+ // 5. Otherwise, the user agent should close connection unless it would be bad for performance to do so. -+ fetchParams.controller.connection.destroy() -+ } -+ -+ // 20. Return response. -+ return response -+ -+ async function dispatch ({ body }) { -+ const url = requestCurrentURL(request) -+ /** @type {import('../..').Agent} */ -+ const agent = fetchParams.controller.dispatcher -+ -+ return new Promise((resolve, reject) => agent.dispatch( -+ { -+ path: url.pathname + url.search, -+ origin: url.origin, -+ method: request.method, -+ body: fetchParams.controller.dispatcher.isMockActive ? request.body && (request.body.source || request.body.stream) : body, -+ headers: request.headersList.entries, -+ maxRedirections: 0, -+ upgrade: request.mode === 'websocket' ? 'websocket' : undefined -+ }, -+ { -+ body: null, -+ abort: null, -+ -+ onConnect (abort) { -+ // TODO (fix): Do we need connection here? -+ const { connection } = fetchParams.controller -+ -+ if (connection.destroyed) { -+ abort(new DOMException('The operation was aborted.', 'AbortError')) -+ } else { -+ fetchParams.controller.on('terminated', abort) -+ this.abort = connection.abort = abort -+ } -+ }, -+ -+ onHeaders (status, headersList, resume, statusText) { -+ if (status < 200) { -+ return -+ } -+ -+ let codings = [] -+ let location = '' -+ -+ const headers = new Headers() -+ -+ // For H2, the headers are a plain JS object -+ // We distinguish between them and iterate accordingly -+ if (Array.isArray(headersList)) { -+ for (let n = 0; n < headersList.length; n += 2) { -+ const key = headersList[n + 0].toString('latin1') -+ const val = headersList[n + 1].toString('latin1') -+ if (key.toLowerCase() === 'content-encoding') { -+ // https://www.rfc-editor.org/rfc/rfc7231#section-3.1.2.1 -+ // "All content-coding values are case-insensitive..." -+ codings = val.toLowerCase().split(',').map((x) => x.trim()) -+ } else if (key.toLowerCase() === 'location') { -+ location = val -+ } -+ -+ headers[kHeadersList].append(key, val) -+ } -+ } else { -+ const keys = Object.keys(headersList) -+ for (const key of keys) { -+ const val = headersList[key] -+ if (key.toLowerCase() === 'content-encoding') { -+ // https://www.rfc-editor.org/rfc/rfc7231#section-3.1.2.1 -+ // "All content-coding values are case-insensitive..." -+ codings = val.toLowerCase().split(',').map((x) => x.trim()).reverse() -+ } else if (key.toLowerCase() === 'location') { -+ location = val -+ } -+ -+ headers[kHeadersList].append(key, val) -+ } -+ } -+ -+ this.body = new Readable({ read: resume }) -+ -+ const decoders = [] -+ -+ const willFollow = request.redirect === 'follow' && -+ location && -+ redirectStatusSet.has(status) -+ -+ // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding -+ if (request.method !== 'HEAD' && request.method !== 'CONNECT' && !nullBodyStatus.includes(status) && !willFollow) { -+ for (const coding of codings) { -+ // https://www.rfc-editor.org/rfc/rfc9112.html#section-7.2 -+ if (coding === 'x-gzip' || coding === 'gzip') { -+ decoders.push(zlib.createGunzip({ -+ // Be less strict when decoding compressed responses, since sometimes -+ // servers send slightly invalid responses that are still accepted -+ // by common browsers. -+ // Always using Z_SYNC_FLUSH is what cURL does. -+ flush: zlib.constants.Z_SYNC_FLUSH, -+ finishFlush: zlib.constants.Z_SYNC_FLUSH -+ })) -+ } else if (coding === 'deflate') { -+ decoders.push(zlib.createInflate()) -+ } else if (coding === 'br') { -+ decoders.push(zlib.createBrotliDecompress()) -+ } else { -+ decoders.length = 0 -+ break -+ } -+ } -+ } -+ -+ resolve({ -+ status, -+ statusText, -+ headersList: headers[kHeadersList], -+ body: decoders.length -+ ? pipeline(this.body, ...decoders, () => { }) -+ : this.body.on('error', () => {}) -+ }) -+ -+ return true -+ }, -+ -+ onData (chunk) { -+ if (fetchParams.controller.dump) { -+ return -+ } -+ -+ // 1. If one or more bytes have been transmitted from response’s -+ // message body, then: -+ -+ // 1. Let bytes be the transmitted bytes. -+ const bytes = chunk -+ -+ // 2. Let codings be the result of extracting header list values -+ // given `Content-Encoding` and response’s header list. -+ // See pullAlgorithm. -+ -+ // 3. Increase timingInfo’s encoded body size by bytes’s length. -+ timingInfo.encodedBodySize += bytes.byteLength -+ -+ // 4. See pullAlgorithm... -+ -+ return this.body.push(bytes) -+ }, -+ -+ onComplete () { -+ if (this.abort) { -+ fetchParams.controller.off('terminated', this.abort) -+ } -+ -+ fetchParams.controller.ended = true -+ -+ this.body.push(null) -+ }, -+ -+ onError (error) { -+ if (this.abort) { -+ fetchParams.controller.off('terminated', this.abort) -+ } -+ -+ this.body?.destroy(error) -+ -+ fetchParams.controller.terminate(error) -+ -+ reject(error) -+ }, -+ -+ onUpgrade (status, headersList, socket) { -+ if (status !== 101) { -+ return -+ } -+ -+ const headers = new Headers() -+ -+ for (let n = 0; n < headersList.length; n += 2) { -+ const key = headersList[n + 0].toString('latin1') -+ const val = headersList[n + 1].toString('latin1') -+ -+ headers[kHeadersList].append(key, val) -+ } -+ -+ resolve({ -+ status, -+ statusText: STATUS_CODES[status], -+ headersList: headers[kHeadersList], -+ socket -+ }) -+ -+ return true -+ } -+ } -+ )) -+ } -+} -+ -+module.exports = { -+ fetch, -+ Fetch, -+ fetching, -+ finalizeAndReportTiming -+} -+ -+ -+/***/ }), -+ -+/***/ 1587: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+/* globals AbortController */ -+ -+ -+ -+const { extractBody, mixinBody, cloneBody } = __nccwpck_require__(9928) -+const { Headers, fill: fillHeaders, HeadersList } = __nccwpck_require__(3545) -+const { FinalizationRegistry } = __nccwpck_require__(6300)() -+const util = __nccwpck_require__(929) -+const { -+ isValidHTTPToken, -+ sameOrigin, -+ normalizeMethod, -+ makePolicyContainer, -+ normalizeMethodRecord -+} = __nccwpck_require__(1554) -+const { -+ forbiddenMethodsSet, -+ corsSafeListedMethodsSet, -+ referrerPolicy, -+ requestRedirect, -+ requestMode, -+ requestCredentials, -+ requestCache, -+ requestDuplex -+} = __nccwpck_require__(9951) -+const { kEnumerableProperty } = util -+const { kHeaders, kSignal, kState, kGuard, kRealm } = __nccwpck_require__(8069) -+const { webidl } = __nccwpck_require__(5611) -+const { getGlobalOrigin } = __nccwpck_require__(5022) -+const { URLSerializer } = __nccwpck_require__(1827) -+const { kHeadersList, kConstruct } = __nccwpck_require__(3745) -+const assert = __nccwpck_require__(9491) -+const { getMaxListeners, setMaxListeners, getEventListeners, defaultMaxListeners } = __nccwpck_require__(2361) -+ -+let TransformStream = globalThis.TransformStream -+ -+const kAbortController = Symbol('abortController') -+ -+const requestFinalizer = new FinalizationRegistry(({ signal, abort }) => { -+ signal.removeEventListener('abort', abort) -+}) -+ -+// https://fetch.spec.whatwg.org/#request-class -+class Request { -+ // https://fetch.spec.whatwg.org/#dom-request -+ constructor (input, init = {}) { -+ if (input === kConstruct) { -+ return -+ } -+ -+ webidl.argumentLengthCheck(arguments, 1, { header: 'Request constructor' }) -+ -+ input = webidl.converters.RequestInfo(input) -+ init = webidl.converters.RequestInit(init) -+ -+ // https://html.spec.whatwg.org/multipage/webappapis.html#environment-settings-object -+ this[kRealm] = { -+ settingsObject: { -+ baseUrl: getGlobalOrigin(), -+ get origin () { -+ return this.baseUrl?.origin -+ }, -+ policyContainer: makePolicyContainer() -+ } -+ } -+ -+ // 1. Let request be null. -+ let request = null -+ -+ // 2. Let fallbackMode be null. -+ let fallbackMode = null -+ -+ // 3. Let baseURL be this’s relevant settings object’s API base URL. -+ const baseUrl = this[kRealm].settingsObject.baseUrl -+ -+ // 4. Let signal be null. -+ let signal = null -+ -+ // 5. If input is a string, then: -+ if (typeof input === 'string') { -+ // 1. Let parsedURL be the result of parsing input with baseURL. -+ // 2. If parsedURL is failure, then throw a TypeError. -+ let parsedURL -+ try { -+ parsedURL = new URL(input, baseUrl) -+ } catch (err) { -+ throw new TypeError('Failed to parse URL from ' + input, { cause: err }) -+ } -+ -+ // 3. If parsedURL includes credentials, then throw a TypeError. -+ if (parsedURL.username || parsedURL.password) { -+ throw new TypeError( -+ 'Request cannot be constructed from a URL that includes credentials: ' + -+ input -+ ) -+ } -+ -+ // 4. Set request to a new request whose URL is parsedURL. -+ request = makeRequest({ urlList: [parsedURL] }) -+ -+ // 5. Set fallbackMode to "cors". -+ fallbackMode = 'cors' -+ } else { -+ // 6. Otherwise: -+ -+ // 7. Assert: input is a Request object. -+ assert(input instanceof Request) -+ -+ // 8. Set request to input’s request. -+ request = input[kState] -+ -+ // 9. Set signal to input’s signal. -+ signal = input[kSignal] -+ } -+ -+ // 7. Let origin be this’s relevant settings object’s origin. -+ const origin = this[kRealm].settingsObject.origin -+ -+ // 8. Let window be "client". -+ let window = 'client' -+ -+ // 9. If request’s window is an environment settings object and its origin -+ // is same origin with origin, then set window to request’s window. -+ if ( -+ request.window?.constructor?.name === 'EnvironmentSettingsObject' && -+ sameOrigin(request.window, origin) -+ ) { -+ window = request.window -+ } -+ -+ // 10. If init["window"] exists and is non-null, then throw a TypeError. -+ if (init.window != null) { -+ throw new TypeError(`'window' option '${window}' must be null`) -+ } -+ -+ // 11. If init["window"] exists, then set window to "no-window". -+ if ('window' in init) { -+ window = 'no-window' -+ } -+ -+ // 12. Set request to a new request with the following properties: -+ request = makeRequest({ -+ // URL request’s URL. -+ // undici implementation note: this is set as the first item in request's urlList in makeRequest -+ // method request’s method. -+ method: request.method, -+ // header list A copy of request’s header list. -+ // undici implementation note: headersList is cloned in makeRequest -+ headersList: request.headersList, -+ // unsafe-request flag Set. -+ unsafeRequest: request.unsafeRequest, -+ // client This’s relevant settings object. -+ client: this[kRealm].settingsObject, -+ // window window. -+ window, -+ // priority request’s priority. -+ priority: request.priority, -+ // origin request’s origin. The propagation of the origin is only significant for navigation requests -+ // being handled by a service worker. In this scenario a request can have an origin that is different -+ // from the current client. -+ origin: request.origin, -+ // referrer request’s referrer. -+ referrer: request.referrer, -+ // referrer policy request’s referrer policy. -+ referrerPolicy: request.referrerPolicy, -+ // mode request’s mode. -+ mode: request.mode, -+ // credentials mode request’s credentials mode. -+ credentials: request.credentials, -+ // cache mode request’s cache mode. -+ cache: request.cache, -+ // redirect mode request’s redirect mode. -+ redirect: request.redirect, -+ // integrity metadata request’s integrity metadata. -+ integrity: request.integrity, -+ // keepalive request’s keepalive. -+ keepalive: request.keepalive, -+ // reload-navigation flag request’s reload-navigation flag. -+ reloadNavigation: request.reloadNavigation, -+ // history-navigation flag request’s history-navigation flag. -+ historyNavigation: request.historyNavigation, -+ // URL list A clone of request’s URL list. -+ urlList: [...request.urlList] -+ }) -+ -+ const initHasKey = Object.keys(init).length !== 0 -+ -+ // 13. If init is not empty, then: -+ if (initHasKey) { -+ // 1. If request’s mode is "navigate", then set it to "same-origin". -+ if (request.mode === 'navigate') { -+ request.mode = 'same-origin' -+ } -+ -+ // 2. Unset request’s reload-navigation flag. -+ request.reloadNavigation = false -+ -+ // 3. Unset request’s history-navigation flag. -+ request.historyNavigation = false -+ -+ // 4. Set request’s origin to "client". -+ request.origin = 'client' -+ -+ // 5. Set request’s referrer to "client" -+ request.referrer = 'client' -+ -+ // 6. Set request’s referrer policy to the empty string. -+ request.referrerPolicy = '' -+ -+ // 7. Set request’s URL to request’s current URL. -+ request.url = request.urlList[request.urlList.length - 1] -+ -+ // 8. Set request’s URL list to « request’s URL ». -+ request.urlList = [request.url] -+ } -+ -+ // 14. If init["referrer"] exists, then: -+ if (init.referrer !== undefined) { -+ // 1. Let referrer be init["referrer"]. -+ const referrer = init.referrer -+ -+ // 2. If referrer is the empty string, then set request’s referrer to "no-referrer". -+ if (referrer === '') { -+ request.referrer = 'no-referrer' -+ } else { -+ // 1. Let parsedReferrer be the result of parsing referrer with -+ // baseURL. -+ // 2. If parsedReferrer is failure, then throw a TypeError. -+ let parsedReferrer -+ try { -+ parsedReferrer = new URL(referrer, baseUrl) -+ } catch (err) { -+ throw new TypeError(`Referrer "${referrer}" is not a valid URL.`, { cause: err }) -+ } -+ -+ // 3. If one of the following is true -+ // - parsedReferrer’s scheme is "about" and path is the string "client" -+ // - parsedReferrer’s origin is not same origin with origin -+ // then set request’s referrer to "client". -+ if ( -+ (parsedReferrer.protocol === 'about:' && parsedReferrer.hostname === 'client') || -+ (origin && !sameOrigin(parsedReferrer, this[kRealm].settingsObject.baseUrl)) -+ ) { -+ request.referrer = 'client' -+ } else { -+ // 4. Otherwise, set request’s referrer to parsedReferrer. -+ request.referrer = parsedReferrer -+ } -+ } -+ } -+ -+ // 15. If init["referrerPolicy"] exists, then set request’s referrer policy -+ // to it. -+ if (init.referrerPolicy !== undefined) { -+ request.referrerPolicy = init.referrerPolicy -+ } -+ -+ // 16. Let mode be init["mode"] if it exists, and fallbackMode otherwise. -+ let mode -+ if (init.mode !== undefined) { -+ mode = init.mode -+ } else { -+ mode = fallbackMode -+ } -+ -+ // 17. If mode is "navigate", then throw a TypeError. -+ if (mode === 'navigate') { -+ throw webidl.errors.exception({ -+ header: 'Request constructor', -+ message: 'invalid request mode navigate.' -+ }) -+ } -+ -+ // 18. If mode is non-null, set request’s mode to mode. -+ if (mode != null) { -+ request.mode = mode -+ } -+ -+ // 19. If init["credentials"] exists, then set request’s credentials mode -+ // to it. -+ if (init.credentials !== undefined) { -+ request.credentials = init.credentials -+ } -+ -+ // 18. If init["cache"] exists, then set request’s cache mode to it. -+ if (init.cache !== undefined) { -+ request.cache = init.cache -+ } -+ -+ // 21. If request’s cache mode is "only-if-cached" and request’s mode is -+ // not "same-origin", then throw a TypeError. -+ if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') { -+ throw new TypeError( -+ "'only-if-cached' can be set only with 'same-origin' mode" -+ ) -+ } -+ -+ // 22. If init["redirect"] exists, then set request’s redirect mode to it. -+ if (init.redirect !== undefined) { -+ request.redirect = init.redirect -+ } -+ -+ // 23. If init["integrity"] exists, then set request’s integrity metadata to it. -+ if (init.integrity != null) { -+ request.integrity = String(init.integrity) -+ } -+ -+ // 24. If init["keepalive"] exists, then set request’s keepalive to it. -+ if (init.keepalive !== undefined) { -+ request.keepalive = Boolean(init.keepalive) -+ } -+ -+ // 25. If init["method"] exists, then: -+ if (init.method !== undefined) { -+ // 1. Let method be init["method"]. -+ let method = init.method -+ -+ // 2. If method is not a method or method is a forbidden method, then -+ // throw a TypeError. -+ if (!isValidHTTPToken(method)) { -+ throw new TypeError(`'${method}' is not a valid HTTP method.`) -+ } -+ -+ if (forbiddenMethodsSet.has(method.toUpperCase())) { -+ throw new TypeError(`'${method}' HTTP method is unsupported.`) -+ } -+ -+ // 3. Normalize method. -+ method = normalizeMethodRecord[method] ?? normalizeMethod(method) -+ -+ // 4. Set request’s method to method. -+ request.method = method -+ } -+ -+ // 26. If init["signal"] exists, then set signal to it. -+ if (init.signal !== undefined) { -+ signal = init.signal -+ } -+ -+ // 27. Set this’s request to request. -+ this[kState] = request -+ -+ // 28. Set this’s signal to a new AbortSignal object with this’s relevant -+ // Realm. -+ // TODO: could this be simplified with AbortSignal.any -+ // (https://dom.spec.whatwg.org/#dom-abortsignal-any) -+ const ac = new AbortController() -+ this[kSignal] = ac.signal -+ this[kSignal][kRealm] = this[kRealm] -+ -+ // 29. If signal is not null, then make this’s signal follow signal. -+ if (signal != null) { -+ if ( -+ !signal || -+ typeof signal.aborted !== 'boolean' || -+ typeof signal.addEventListener !== 'function' -+ ) { -+ throw new TypeError( -+ "Failed to construct 'Request': member signal is not of type AbortSignal." -+ ) -+ } -+ -+ if (signal.aborted) { -+ ac.abort(signal.reason) -+ } else { -+ // Keep a strong ref to ac while request object -+ // is alive. This is needed to prevent AbortController -+ // from being prematurely garbage collected. -+ // See, https://github.com/nodejs/undici/issues/1926. -+ this[kAbortController] = ac -+ -+ const acRef = new WeakRef(ac) -+ const abort = function () { -+ const ac = acRef.deref() -+ if (ac !== undefined) { -+ ac.abort(this.reason) -+ } -+ } -+ -+ // Third-party AbortControllers may not work with these. -+ // See, https://github.com/nodejs/undici/pull/1910#issuecomment-1464495619. -+ try { -+ // If the max amount of listeners is equal to the default, increase it -+ // This is only available in node >= v19.9.0 -+ if (typeof getMaxListeners === 'function' && getMaxListeners(signal) === defaultMaxListeners) { -+ setMaxListeners(100, signal) -+ } else if (getEventListeners(signal, 'abort').length >= defaultMaxListeners) { -+ setMaxListeners(100, signal) -+ } -+ } catch {} -+ -+ util.addAbortListener(signal, abort) -+ requestFinalizer.register(ac, { signal, abort }) -+ } -+ } -+ -+ // 30. Set this’s headers to a new Headers object with this’s relevant -+ // Realm, whose header list is request’s header list and guard is -+ // "request". -+ this[kHeaders] = new Headers(kConstruct) -+ this[kHeaders][kHeadersList] = request.headersList -+ this[kHeaders][kGuard] = 'request' -+ this[kHeaders][kRealm] = this[kRealm] -+ -+ // 31. If this’s request’s mode is "no-cors", then: -+ if (mode === 'no-cors') { -+ // 1. If this’s request’s method is not a CORS-safelisted method, -+ // then throw a TypeError. -+ if (!corsSafeListedMethodsSet.has(request.method)) { -+ throw new TypeError( -+ `'${request.method} is unsupported in no-cors mode.` -+ ) -+ } -+ -+ // 2. Set this’s headers’s guard to "request-no-cors". -+ this[kHeaders][kGuard] = 'request-no-cors' -+ } -+ -+ // 32. If init is not empty, then: -+ if (initHasKey) { -+ /** @type {HeadersList} */ -+ const headersList = this[kHeaders][kHeadersList] -+ // 1. Let headers be a copy of this’s headers and its associated header -+ // list. -+ // 2. If init["headers"] exists, then set headers to init["headers"]. -+ const headers = init.headers !== undefined ? init.headers : new HeadersList(headersList) -+ -+ // 3. Empty this’s headers’s header list. -+ headersList.clear() -+ -+ // 4. If headers is a Headers object, then for each header in its header -+ // list, append header’s name/header’s value to this’s headers. -+ if (headers instanceof HeadersList) { -+ for (const [key, val] of headers) { -+ headersList.append(key, val) -+ } -+ // Note: Copy the `set-cookie` meta-data. -+ headersList.cookies = headers.cookies -+ } else { -+ // 5. Otherwise, fill this’s headers with headers. -+ fillHeaders(this[kHeaders], headers) -+ } -+ } -+ -+ // 33. Let inputBody be input’s request’s body if input is a Request -+ // object; otherwise null. -+ const inputBody = input instanceof Request ? input[kState].body : null -+ -+ // 34. If either init["body"] exists and is non-null or inputBody is -+ // non-null, and request’s method is `GET` or `HEAD`, then throw a -+ // TypeError. -+ if ( -+ (init.body != null || inputBody != null) && -+ (request.method === 'GET' || request.method === 'HEAD') -+ ) { -+ throw new TypeError('Request with GET/HEAD method cannot have body.') -+ } -+ -+ // 35. Let initBody be null. -+ let initBody = null -+ -+ // 36. If init["body"] exists and is non-null, then: -+ if (init.body != null) { -+ // 1. Let Content-Type be null. -+ // 2. Set initBody and Content-Type to the result of extracting -+ // init["body"], with keepalive set to request’s keepalive. -+ const [extractedBody, contentType] = extractBody( -+ init.body, -+ request.keepalive -+ ) -+ initBody = extractedBody -+ -+ // 3, If Content-Type is non-null and this’s headers’s header list does -+ // not contain `Content-Type`, then append `Content-Type`/Content-Type to -+ // this’s headers. -+ if (contentType && !this[kHeaders][kHeadersList].contains('content-type')) { -+ this[kHeaders].append('content-type', contentType) -+ } -+ } -+ -+ // 37. Let inputOrInitBody be initBody if it is non-null; otherwise -+ // inputBody. -+ const inputOrInitBody = initBody ?? inputBody -+ -+ // 38. If inputOrInitBody is non-null and inputOrInitBody’s source is -+ // null, then: -+ if (inputOrInitBody != null && inputOrInitBody.source == null) { -+ // 1. If initBody is non-null and init["duplex"] does not exist, -+ // then throw a TypeError. -+ if (initBody != null && init.duplex == null) { -+ throw new TypeError('RequestInit: duplex option is required when sending a body.') -+ } -+ -+ // 2. If this’s request’s mode is neither "same-origin" nor "cors", -+ // then throw a TypeError. -+ if (request.mode !== 'same-origin' && request.mode !== 'cors') { -+ throw new TypeError( -+ 'If request is made from ReadableStream, mode should be "same-origin" or "cors"' -+ ) -+ } -+ -+ // 3. Set this’s request’s use-CORS-preflight flag. -+ request.useCORSPreflightFlag = true -+ } -+ -+ // 39. Let finalBody be inputOrInitBody. -+ let finalBody = inputOrInitBody -+ -+ // 40. If initBody is null and inputBody is non-null, then: -+ if (initBody == null && inputBody != null) { -+ // 1. If input is unusable, then throw a TypeError. -+ if (util.isDisturbed(inputBody.stream) || inputBody.stream.locked) { -+ throw new TypeError( -+ 'Cannot construct a Request with a Request object that has already been used.' -+ ) -+ } -+ -+ // 2. Set finalBody to the result of creating a proxy for inputBody. -+ if (!TransformStream) { -+ TransformStream = (__nccwpck_require__(5356).TransformStream) -+ } -+ -+ // https://streams.spec.whatwg.org/#readablestream-create-a-proxy -+ const identityTransform = new TransformStream() -+ inputBody.stream.pipeThrough(identityTransform) -+ finalBody = { -+ source: inputBody.source, -+ length: inputBody.length, -+ stream: identityTransform.readable -+ } -+ } -+ -+ // 41. Set this’s request’s body to finalBody. -+ this[kState].body = finalBody -+ } -+ -+ // Returns request’s HTTP method, which is "GET" by default. -+ get method () { -+ webidl.brandCheck(this, Request) -+ -+ // The method getter steps are to return this’s request’s method. -+ return this[kState].method -+ } -+ -+ // Returns the URL of request as a string. -+ get url () { -+ webidl.brandCheck(this, Request) -+ -+ // The url getter steps are to return this’s request’s URL, serialized. -+ return URLSerializer(this[kState].url) -+ } -+ -+ // Returns a Headers object consisting of the headers associated with request. -+ // Note that headers added in the network layer by the user agent will not -+ // be accounted for in this object, e.g., the "Host" header. -+ get headers () { -+ webidl.brandCheck(this, Request) -+ -+ // The headers getter steps are to return this’s headers. -+ return this[kHeaders] -+ } -+ -+ // Returns the kind of resource requested by request, e.g., "document" -+ // or "script". -+ get destination () { -+ webidl.brandCheck(this, Request) -+ -+ // The destination getter are to return this’s request’s destination. -+ return this[kState].destination -+ } -+ -+ // Returns the referrer of request. Its value can be a same-origin URL if -+ // explicitly set in init, the empty string to indicate no referrer, and -+ // "about:client" when defaulting to the global’s default. This is used -+ // during fetching to determine the value of the `Referer` header of the -+ // request being made. -+ get referrer () { -+ webidl.brandCheck(this, Request) -+ -+ // 1. If this’s request’s referrer is "no-referrer", then return the -+ // empty string. -+ if (this[kState].referrer === 'no-referrer') { -+ return '' -+ } -+ -+ // 2. If this’s request’s referrer is "client", then return -+ // "about:client". -+ if (this[kState].referrer === 'client') { -+ return 'about:client' -+ } -+ -+ // Return this’s request’s referrer, serialized. -+ return this[kState].referrer.toString() -+ } -+ -+ // Returns the referrer policy associated with request. -+ // This is used during fetching to compute the value of the request’s -+ // referrer. -+ get referrerPolicy () { -+ webidl.brandCheck(this, Request) -+ -+ // The referrerPolicy getter steps are to return this’s request’s referrer policy. -+ return this[kState].referrerPolicy -+ } -+ -+ // Returns the mode associated with request, which is a string indicating -+ // whether the request will use CORS, or will be restricted to same-origin -+ // URLs. -+ get mode () { -+ webidl.brandCheck(this, Request) -+ -+ // The mode getter steps are to return this’s request’s mode. -+ return this[kState].mode -+ } -+ -+ // Returns the credentials mode associated with request, -+ // which is a string indicating whether credentials will be sent with the -+ // request always, never, or only when sent to a same-origin URL. -+ get credentials () { -+ // The credentials getter steps are to return this’s request’s credentials mode. -+ return this[kState].credentials -+ } -+ -+ // Returns the cache mode associated with request, -+ // which is a string indicating how the request will -+ // interact with the browser’s cache when fetching. -+ get cache () { -+ webidl.brandCheck(this, Request) -+ -+ // The cache getter steps are to return this’s request’s cache mode. -+ return this[kState].cache -+ } -+ -+ // Returns the redirect mode associated with request, -+ // which is a string indicating how redirects for the -+ // request will be handled during fetching. A request -+ // will follow redirects by default. -+ get redirect () { -+ webidl.brandCheck(this, Request) -+ -+ // The redirect getter steps are to return this’s request’s redirect mode. -+ return this[kState].redirect -+ } -+ -+ // Returns request’s subresource integrity metadata, which is a -+ // cryptographic hash of the resource being fetched. Its value -+ // consists of multiple hashes separated by whitespace. [SRI] -+ get integrity () { -+ webidl.brandCheck(this, Request) -+ -+ // The integrity getter steps are to return this’s request’s integrity -+ // metadata. -+ return this[kState].integrity -+ } -+ -+ // Returns a boolean indicating whether or not request can outlive the -+ // global in which it was created. -+ get keepalive () { -+ webidl.brandCheck(this, Request) -+ -+ // The keepalive getter steps are to return this’s request’s keepalive. -+ return this[kState].keepalive -+ } -+ -+ // Returns a boolean indicating whether or not request is for a reload -+ // navigation. -+ get isReloadNavigation () { -+ webidl.brandCheck(this, Request) -+ -+ // The isReloadNavigation getter steps are to return true if this’s -+ // request’s reload-navigation flag is set; otherwise false. -+ return this[kState].reloadNavigation -+ } -+ -+ // Returns a boolean indicating whether or not request is for a history -+ // navigation (a.k.a. back-foward navigation). -+ get isHistoryNavigation () { -+ webidl.brandCheck(this, Request) -+ -+ // The isHistoryNavigation getter steps are to return true if this’s request’s -+ // history-navigation flag is set; otherwise false. -+ return this[kState].historyNavigation -+ } -+ -+ // Returns the signal associated with request, which is an AbortSignal -+ // object indicating whether or not request has been aborted, and its -+ // abort event handler. -+ get signal () { -+ webidl.brandCheck(this, Request) -+ -+ // The signal getter steps are to return this’s signal. -+ return this[kSignal] -+ } -+ -+ get body () { -+ webidl.brandCheck(this, Request) -+ -+ return this[kState].body ? this[kState].body.stream : null -+ } -+ -+ get bodyUsed () { -+ webidl.brandCheck(this, Request) -+ -+ return !!this[kState].body && util.isDisturbed(this[kState].body.stream) -+ } -+ -+ get duplex () { -+ webidl.brandCheck(this, Request) -+ -+ return 'half' -+ } -+ -+ // Returns a clone of request. -+ clone () { -+ webidl.brandCheck(this, Request) -+ -+ // 1. If this is unusable, then throw a TypeError. -+ if (this.bodyUsed || this.body?.locked) { -+ throw new TypeError('unusable') -+ } -+ -+ // 2. Let clonedRequest be the result of cloning this’s request. -+ const clonedRequest = cloneRequest(this[kState]) -+ -+ // 3. Let clonedRequestObject be the result of creating a Request object, -+ // given clonedRequest, this’s headers’s guard, and this’s relevant Realm. -+ const clonedRequestObject = new Request(kConstruct) -+ clonedRequestObject[kState] = clonedRequest -+ clonedRequestObject[kRealm] = this[kRealm] -+ clonedRequestObject[kHeaders] = new Headers(kConstruct) -+ clonedRequestObject[kHeaders][kHeadersList] = clonedRequest.headersList -+ clonedRequestObject[kHeaders][kGuard] = this[kHeaders][kGuard] -+ clonedRequestObject[kHeaders][kRealm] = this[kHeaders][kRealm] -+ -+ // 4. Make clonedRequestObject’s signal follow this’s signal. -+ const ac = new AbortController() -+ if (this.signal.aborted) { -+ ac.abort(this.signal.reason) -+ } else { -+ util.addAbortListener( -+ this.signal, -+ () => { -+ ac.abort(this.signal.reason) -+ } -+ ) -+ } -+ clonedRequestObject[kSignal] = ac.signal -+ -+ // 4. Return clonedRequestObject. -+ return clonedRequestObject -+ } -+} -+ -+mixinBody(Request) -+ -+function makeRequest (init) { -+ // https://fetch.spec.whatwg.org/#requests -+ const request = { -+ method: 'GET', -+ localURLsOnly: false, -+ unsafeRequest: false, -+ body: null, -+ client: null, -+ reservedClient: null, -+ replacesClientId: '', -+ window: 'client', -+ keepalive: false, -+ serviceWorkers: 'all', -+ initiator: '', -+ destination: '', -+ priority: null, -+ origin: 'client', -+ policyContainer: 'client', -+ referrer: 'client', -+ referrerPolicy: '', -+ mode: 'no-cors', -+ useCORSPreflightFlag: false, -+ credentials: 'same-origin', -+ useCredentials: false, -+ cache: 'default', -+ redirect: 'follow', -+ integrity: '', -+ cryptoGraphicsNonceMetadata: '', -+ parserMetadata: '', -+ reloadNavigation: false, -+ historyNavigation: false, -+ userActivation: false, -+ taintedOrigin: false, -+ redirectCount: 0, -+ responseTainting: 'basic', -+ preventNoCacheCacheControlHeaderModification: false, -+ done: false, -+ timingAllowFailed: false, -+ ...init, -+ headersList: init.headersList -+ ? new HeadersList(init.headersList) -+ : new HeadersList() -+ } -+ request.url = request.urlList[0] -+ return request -+} -+ -+// https://fetch.spec.whatwg.org/#concept-request-clone -+function cloneRequest (request) { -+ // To clone a request request, run these steps: -+ -+ // 1. Let newRequest be a copy of request, except for its body. -+ const newRequest = makeRequest({ ...request, body: null }) -+ -+ // 2. If request’s body is non-null, set newRequest’s body to the -+ // result of cloning request’s body. -+ if (request.body != null) { -+ newRequest.body = cloneBody(request.body) -+ } -+ -+ // 3. Return newRequest. -+ return newRequest -+} -+ -+Object.defineProperties(Request.prototype, { -+ method: kEnumerableProperty, -+ url: kEnumerableProperty, -+ headers: kEnumerableProperty, -+ redirect: kEnumerableProperty, -+ clone: kEnumerableProperty, -+ signal: kEnumerableProperty, -+ duplex: kEnumerableProperty, -+ destination: kEnumerableProperty, -+ body: kEnumerableProperty, -+ bodyUsed: kEnumerableProperty, -+ isHistoryNavigation: kEnumerableProperty, -+ isReloadNavigation: kEnumerableProperty, -+ keepalive: kEnumerableProperty, -+ integrity: kEnumerableProperty, -+ cache: kEnumerableProperty, -+ credentials: kEnumerableProperty, -+ attribute: kEnumerableProperty, -+ referrerPolicy: kEnumerableProperty, -+ referrer: kEnumerableProperty, -+ mode: kEnumerableProperty, -+ [Symbol.toStringTag]: { -+ value: 'Request', -+ configurable: true -+ } -+}) -+ -+webidl.converters.Request = webidl.interfaceConverter( -+ Request -+) -+ -+// https://fetch.spec.whatwg.org/#requestinfo -+webidl.converters.RequestInfo = function (V) { -+ if (typeof V === 'string') { -+ return webidl.converters.USVString(V) -+ } -+ -+ if (V instanceof Request) { -+ return webidl.converters.Request(V) -+ } -+ -+ return webidl.converters.USVString(V) -+} -+ -+webidl.converters.AbortSignal = webidl.interfaceConverter( -+ AbortSignal -+) -+ -+// https://fetch.spec.whatwg.org/#requestinit -+webidl.converters.RequestInit = webidl.dictionaryConverter([ -+ { -+ key: 'method', -+ converter: webidl.converters.ByteString -+ }, -+ { -+ key: 'headers', -+ converter: webidl.converters.HeadersInit -+ }, -+ { -+ key: 'body', -+ converter: webidl.nullableConverter( -+ webidl.converters.BodyInit -+ ) -+ }, -+ { -+ key: 'referrer', -+ converter: webidl.converters.USVString -+ }, -+ { -+ key: 'referrerPolicy', -+ converter: webidl.converters.DOMString, -+ // https://w3c.github.io/webappsec-referrer-policy/#referrer-policy -+ allowedValues: referrerPolicy -+ }, -+ { -+ key: 'mode', -+ converter: webidl.converters.DOMString, -+ // https://fetch.spec.whatwg.org/#concept-request-mode -+ allowedValues: requestMode -+ }, -+ { -+ key: 'credentials', -+ converter: webidl.converters.DOMString, -+ // https://fetch.spec.whatwg.org/#requestcredentials -+ allowedValues: requestCredentials -+ }, -+ { -+ key: 'cache', -+ converter: webidl.converters.DOMString, -+ // https://fetch.spec.whatwg.org/#requestcache -+ allowedValues: requestCache -+ }, -+ { -+ key: 'redirect', -+ converter: webidl.converters.DOMString, -+ // https://fetch.spec.whatwg.org/#requestredirect -+ allowedValues: requestRedirect -+ }, -+ { -+ key: 'integrity', -+ converter: webidl.converters.DOMString -+ }, -+ { -+ key: 'keepalive', -+ converter: webidl.converters.boolean -+ }, -+ { -+ key: 'signal', -+ converter: webidl.nullableConverter( -+ (signal) => webidl.converters.AbortSignal( -+ signal, -+ { strict: false } -+ ) -+ ) -+ }, -+ { -+ key: 'window', -+ converter: webidl.converters.any -+ }, -+ { -+ key: 'duplex', -+ converter: webidl.converters.DOMString, -+ allowedValues: requestDuplex -+ } -+]) -+ -+module.exports = { Request, makeRequest } -+ -+ -+/***/ }), -+ -+/***/ 433: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { Headers, HeadersList, fill } = __nccwpck_require__(3545) -+const { extractBody, cloneBody, mixinBody } = __nccwpck_require__(9928) -+const util = __nccwpck_require__(929) -+const { kEnumerableProperty } = util -+const { -+ isValidReasonPhrase, -+ isCancelled, -+ isAborted, -+ isBlobLike, -+ serializeJavascriptValueToJSONString, -+ isErrorLike, -+ isomorphicEncode -+} = __nccwpck_require__(1554) -+const { -+ redirectStatusSet, -+ nullBodyStatus, -+ DOMException -+} = __nccwpck_require__(9951) -+const { kState, kHeaders, kGuard, kRealm } = __nccwpck_require__(8069) -+const { webidl } = __nccwpck_require__(5611) -+const { FormData } = __nccwpck_require__(8703) -+const { getGlobalOrigin } = __nccwpck_require__(5022) -+const { URLSerializer } = __nccwpck_require__(1827) -+const { kHeadersList, kConstruct } = __nccwpck_require__(3745) -+const assert = __nccwpck_require__(9491) -+const { types } = __nccwpck_require__(3837) -+ -+const ReadableStream = globalThis.ReadableStream || (__nccwpck_require__(5356).ReadableStream) -+const textEncoder = new TextEncoder('utf-8') -+ -+// https://fetch.spec.whatwg.org/#response-class -+class Response { -+ // Creates network error Response. -+ static error () { -+ // TODO -+ const relevantRealm = { settingsObject: {} } -+ -+ // The static error() method steps are to return the result of creating a -+ // Response object, given a new network error, "immutable", and this’s -+ // relevant Realm. -+ const responseObject = new Response() -+ responseObject[kState] = makeNetworkError() -+ responseObject[kRealm] = relevantRealm -+ responseObject[kHeaders][kHeadersList] = responseObject[kState].headersList -+ responseObject[kHeaders][kGuard] = 'immutable' -+ responseObject[kHeaders][kRealm] = relevantRealm -+ return responseObject -+ } -+ -+ // https://fetch.spec.whatwg.org/#dom-response-json -+ static json (data, init = {}) { -+ webidl.argumentLengthCheck(arguments, 1, { header: 'Response.json' }) -+ -+ if (init !== null) { -+ init = webidl.converters.ResponseInit(init) -+ } -+ -+ // 1. Let bytes the result of running serialize a JavaScript value to JSON bytes on data. -+ const bytes = textEncoder.encode( -+ serializeJavascriptValueToJSONString(data) -+ ) -+ -+ // 2. Let body be the result of extracting bytes. -+ const body = extractBody(bytes) -+ -+ // 3. Let responseObject be the result of creating a Response object, given a new response, -+ // "response", and this’s relevant Realm. -+ const relevantRealm = { settingsObject: {} } -+ const responseObject = new Response() -+ responseObject[kRealm] = relevantRealm -+ responseObject[kHeaders][kGuard] = 'response' -+ responseObject[kHeaders][kRealm] = relevantRealm -+ -+ // 4. Perform initialize a response given responseObject, init, and (body, "application/json"). -+ initializeResponse(responseObject, init, { body: body[0], type: 'application/json' }) -+ -+ // 5. Return responseObject. -+ return responseObject -+ } -+ -+ // Creates a redirect Response that redirects to url with status status. -+ static redirect (url, status = 302) { -+ const relevantRealm = { settingsObject: {} } -+ -+ webidl.argumentLengthCheck(arguments, 1, { header: 'Response.redirect' }) -+ -+ url = webidl.converters.USVString(url) -+ status = webidl.converters['unsigned short'](status) -+ -+ // 1. Let parsedURL be the result of parsing url with current settings -+ // object’s API base URL. -+ // 2. If parsedURL is failure, then throw a TypeError. -+ // TODO: base-URL? -+ let parsedURL -+ try { -+ parsedURL = new URL(url, getGlobalOrigin()) -+ } catch (err) { -+ throw Object.assign(new TypeError('Failed to parse URL from ' + url), { -+ cause: err -+ }) -+ } -+ -+ // 3. If status is not a redirect status, then throw a RangeError. -+ if (!redirectStatusSet.has(status)) { -+ throw new RangeError('Invalid status code ' + status) -+ } -+ -+ // 4. Let responseObject be the result of creating a Response object, -+ // given a new response, "immutable", and this’s relevant Realm. -+ const responseObject = new Response() -+ responseObject[kRealm] = relevantRealm -+ responseObject[kHeaders][kGuard] = 'immutable' -+ responseObject[kHeaders][kRealm] = relevantRealm -+ -+ // 5. Set responseObject’s response’s status to status. -+ responseObject[kState].status = status -+ -+ // 6. Let value be parsedURL, serialized and isomorphic encoded. -+ const value = isomorphicEncode(URLSerializer(parsedURL)) -+ -+ // 7. Append `Location`/value to responseObject’s response’s header list. -+ responseObject[kState].headersList.append('location', value) -+ -+ // 8. Return responseObject. -+ return responseObject -+ } -+ -+ // https://fetch.spec.whatwg.org/#dom-response -+ constructor (body = null, init = {}) { -+ if (body !== null) { -+ body = webidl.converters.BodyInit(body) -+ } -+ -+ init = webidl.converters.ResponseInit(init) -+ -+ // TODO -+ this[kRealm] = { settingsObject: {} } -+ -+ // 1. Set this’s response to a new response. -+ this[kState] = makeResponse({}) -+ -+ // 2. Set this’s headers to a new Headers object with this’s relevant -+ // Realm, whose header list is this’s response’s header list and guard -+ // is "response". -+ this[kHeaders] = new Headers(kConstruct) -+ this[kHeaders][kGuard] = 'response' -+ this[kHeaders][kHeadersList] = this[kState].headersList -+ this[kHeaders][kRealm] = this[kRealm] -+ -+ // 3. Let bodyWithType be null. -+ let bodyWithType = null -+ -+ // 4. If body is non-null, then set bodyWithType to the result of extracting body. -+ if (body != null) { -+ const [extractedBody, type] = extractBody(body) -+ bodyWithType = { body: extractedBody, type } -+ } -+ -+ // 5. Perform initialize a response given this, init, and bodyWithType. -+ initializeResponse(this, init, bodyWithType) -+ } -+ -+ // Returns response’s type, e.g., "cors". -+ get type () { -+ webidl.brandCheck(this, Response) -+ -+ // The type getter steps are to return this’s response’s type. -+ return this[kState].type -+ } -+ -+ // Returns response’s URL, if it has one; otherwise the empty string. -+ get url () { -+ webidl.brandCheck(this, Response) -+ -+ const urlList = this[kState].urlList -+ -+ // The url getter steps are to return the empty string if this’s -+ // response’s URL is null; otherwise this’s response’s URL, -+ // serialized with exclude fragment set to true. -+ const url = urlList[urlList.length - 1] ?? null -+ -+ if (url === null) { -+ return '' -+ } -+ -+ return URLSerializer(url, true) -+ } -+ -+ // Returns whether response was obtained through a redirect. -+ get redirected () { -+ webidl.brandCheck(this, Response) -+ -+ // The redirected getter steps are to return true if this’s response’s URL -+ // list has more than one item; otherwise false. -+ return this[kState].urlList.length > 1 -+ } -+ -+ // Returns response’s status. -+ get status () { -+ webidl.brandCheck(this, Response) -+ -+ // The status getter steps are to return this’s response’s status. -+ return this[kState].status -+ } -+ -+ // Returns whether response’s status is an ok status. -+ get ok () { -+ webidl.brandCheck(this, Response) -+ -+ // The ok getter steps are to return true if this’s response’s status is an -+ // ok status; otherwise false. -+ return this[kState].status >= 200 && this[kState].status <= 299 -+ } -+ -+ // Returns response’s status message. -+ get statusText () { -+ webidl.brandCheck(this, Response) -+ -+ // The statusText getter steps are to return this’s response’s status -+ // message. -+ return this[kState].statusText -+ } -+ -+ // Returns response’s headers as Headers. -+ get headers () { -+ webidl.brandCheck(this, Response) -+ -+ // The headers getter steps are to return this’s headers. -+ return this[kHeaders] -+ } -+ -+ get body () { -+ webidl.brandCheck(this, Response) -+ -+ return this[kState].body ? this[kState].body.stream : null -+ } -+ -+ get bodyUsed () { -+ webidl.brandCheck(this, Response) -+ -+ return !!this[kState].body && util.isDisturbed(this[kState].body.stream) -+ } -+ -+ // Returns a clone of response. -+ clone () { -+ webidl.brandCheck(this, Response) -+ -+ // 1. If this is unusable, then throw a TypeError. -+ if (this.bodyUsed || (this.body && this.body.locked)) { -+ throw webidl.errors.exception({ -+ header: 'Response.clone', -+ message: 'Body has already been consumed.' -+ }) -+ } -+ -+ // 2. Let clonedResponse be the result of cloning this’s response. -+ const clonedResponse = cloneResponse(this[kState]) -+ -+ // 3. Return the result of creating a Response object, given -+ // clonedResponse, this’s headers’s guard, and this’s relevant Realm. -+ const clonedResponseObject = new Response() -+ clonedResponseObject[kState] = clonedResponse -+ clonedResponseObject[kRealm] = this[kRealm] -+ clonedResponseObject[kHeaders][kHeadersList] = clonedResponse.headersList -+ clonedResponseObject[kHeaders][kGuard] = this[kHeaders][kGuard] -+ clonedResponseObject[kHeaders][kRealm] = this[kHeaders][kRealm] -+ -+ return clonedResponseObject -+ } -+} -+ -+mixinBody(Response) -+ -+Object.defineProperties(Response.prototype, { -+ type: kEnumerableProperty, -+ url: kEnumerableProperty, -+ status: kEnumerableProperty, -+ ok: kEnumerableProperty, -+ redirected: kEnumerableProperty, -+ statusText: kEnumerableProperty, -+ headers: kEnumerableProperty, -+ clone: kEnumerableProperty, -+ body: kEnumerableProperty, -+ bodyUsed: kEnumerableProperty, -+ [Symbol.toStringTag]: { -+ value: 'Response', -+ configurable: true -+ } -+}) -+ -+Object.defineProperties(Response, { -+ json: kEnumerableProperty, -+ redirect: kEnumerableProperty, -+ error: kEnumerableProperty -+}) -+ -+// https://fetch.spec.whatwg.org/#concept-response-clone -+function cloneResponse (response) { -+ // To clone a response response, run these steps: -+ -+ // 1. If response is a filtered response, then return a new identical -+ // filtered response whose internal response is a clone of response’s -+ // internal response. -+ if (response.internalResponse) { -+ return filterResponse( -+ cloneResponse(response.internalResponse), -+ response.type -+ ) -+ } -+ -+ // 2. Let newResponse be a copy of response, except for its body. -+ const newResponse = makeResponse({ ...response, body: null }) -+ -+ // 3. If response’s body is non-null, then set newResponse’s body to the -+ // result of cloning response’s body. -+ if (response.body != null) { -+ newResponse.body = cloneBody(response.body) -+ } -+ -+ // 4. Return newResponse. -+ return newResponse -+} -+ -+function makeResponse (init) { -+ return { -+ aborted: false, -+ rangeRequested: false, -+ timingAllowPassed: false, -+ requestIncludesCredentials: false, -+ type: 'default', -+ status: 200, -+ timingInfo: null, -+ cacheState: '', -+ statusText: '', -+ ...init, -+ headersList: init.headersList -+ ? new HeadersList(init.headersList) -+ : new HeadersList(), -+ urlList: init.urlList ? [...init.urlList] : [] -+ } -+} -+ -+function makeNetworkError (reason) { -+ const isError = isErrorLike(reason) -+ return makeResponse({ -+ type: 'error', -+ status: 0, -+ error: isError -+ ? reason -+ : new Error(reason ? String(reason) : reason), -+ aborted: reason && reason.name === 'AbortError' -+ }) -+} -+ -+function makeFilteredResponse (response, state) { -+ state = { -+ internalResponse: response, -+ ...state -+ } -+ -+ return new Proxy(response, { -+ get (target, p) { -+ return p in state ? state[p] : target[p] -+ }, -+ set (target, p, value) { -+ assert(!(p in state)) -+ target[p] = value -+ return true -+ } -+ }) -+} -+ -+// https://fetch.spec.whatwg.org/#concept-filtered-response -+function filterResponse (response, type) { -+ // Set response to the following filtered response with response as its -+ // internal response, depending on request’s response tainting: -+ if (type === 'basic') { -+ // A basic filtered response is a filtered response whose type is "basic" -+ // and header list excludes any headers in internal response’s header list -+ // whose name is a forbidden response-header name. -+ -+ // Note: undici does not implement forbidden response-header names -+ return makeFilteredResponse(response, { -+ type: 'basic', -+ headersList: response.headersList -+ }) -+ } else if (type === 'cors') { -+ // A CORS filtered response is a filtered response whose type is "cors" -+ // and header list excludes any headers in internal response’s header -+ // list whose name is not a CORS-safelisted response-header name, given -+ // internal response’s CORS-exposed header-name list. -+ -+ // Note: undici does not implement CORS-safelisted response-header names -+ return makeFilteredResponse(response, { -+ type: 'cors', -+ headersList: response.headersList -+ }) -+ } else if (type === 'opaque') { -+ // An opaque filtered response is a filtered response whose type is -+ // "opaque", URL list is the empty list, status is 0, status message -+ // is the empty byte sequence, header list is empty, and body is null. -+ -+ return makeFilteredResponse(response, { -+ type: 'opaque', -+ urlList: Object.freeze([]), -+ status: 0, -+ statusText: '', -+ body: null -+ }) -+ } else if (type === 'opaqueredirect') { -+ // An opaque-redirect filtered response is a filtered response whose type -+ // is "opaqueredirect", status is 0, status message is the empty byte -+ // sequence, header list is empty, and body is null. -+ -+ return makeFilteredResponse(response, { -+ type: 'opaqueredirect', -+ status: 0, -+ statusText: '', -+ headersList: [], -+ body: null -+ }) -+ } else { -+ assert(false) -+ } -+} -+ -+// https://fetch.spec.whatwg.org/#appropriate-network-error -+function makeAppropriateNetworkError (fetchParams, err = null) { -+ // 1. Assert: fetchParams is canceled. -+ assert(isCancelled(fetchParams)) -+ -+ // 2. Return an aborted network error if fetchParams is aborted; -+ // otherwise return a network error. -+ return isAborted(fetchParams) -+ ? makeNetworkError(Object.assign(new DOMException('The operation was aborted.', 'AbortError'), { cause: err })) -+ : makeNetworkError(Object.assign(new DOMException('Request was cancelled.'), { cause: err })) -+} -+ -+// https://whatpr.org/fetch/1392.html#initialize-a-response -+function initializeResponse (response, init, body) { -+ // 1. If init["status"] is not in the range 200 to 599, inclusive, then -+ // throw a RangeError. -+ if (init.status !== null && (init.status < 200 || init.status > 599)) { -+ throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.') -+ } -+ -+ // 2. If init["statusText"] does not match the reason-phrase token production, -+ // then throw a TypeError. -+ if ('statusText' in init && init.statusText != null) { -+ // See, https://datatracker.ietf.org/doc/html/rfc7230#section-3.1.2: -+ // reason-phrase = *( HTAB / SP / VCHAR / obs-text ) -+ if (!isValidReasonPhrase(String(init.statusText))) { -+ throw new TypeError('Invalid statusText') -+ } -+ } -+ -+ // 3. Set response’s response’s status to init["status"]. -+ if ('status' in init && init.status != null) { -+ response[kState].status = init.status -+ } -+ -+ // 4. Set response’s response’s status message to init["statusText"]. -+ if ('statusText' in init && init.statusText != null) { -+ response[kState].statusText = init.statusText -+ } -+ -+ // 5. If init["headers"] exists, then fill response’s headers with init["headers"]. -+ if ('headers' in init && init.headers != null) { -+ fill(response[kHeaders], init.headers) -+ } -+ -+ // 6. If body was given, then: -+ if (body) { -+ // 1. If response's status is a null body status, then throw a TypeError. -+ if (nullBodyStatus.includes(response.status)) { -+ throw webidl.errors.exception({ -+ header: 'Response constructor', -+ message: 'Invalid response status code ' + response.status -+ }) -+ } -+ -+ // 2. Set response's body to body's body. -+ response[kState].body = body.body -+ -+ // 3. If body's type is non-null and response's header list does not contain -+ // `Content-Type`, then append (`Content-Type`, body's type) to response's header list. -+ if (body.type != null && !response[kState].headersList.contains('Content-Type')) { -+ response[kState].headersList.append('content-type', body.type) -+ } -+ } -+} -+ -+webidl.converters.ReadableStream = webidl.interfaceConverter( -+ ReadableStream -+) -+ -+webidl.converters.FormData = webidl.interfaceConverter( -+ FormData -+) -+ -+webidl.converters.URLSearchParams = webidl.interfaceConverter( -+ URLSearchParams -+) -+ -+// https://fetch.spec.whatwg.org/#typedefdef-xmlhttprequestbodyinit -+webidl.converters.XMLHttpRequestBodyInit = function (V) { -+ if (typeof V === 'string') { -+ return webidl.converters.USVString(V) -+ } -+ -+ if (isBlobLike(V)) { -+ return webidl.converters.Blob(V, { strict: false }) -+ } -+ -+ if (types.isArrayBuffer(V) || types.isTypedArray(V) || types.isDataView(V)) { -+ return webidl.converters.BufferSource(V) -+ } -+ -+ if (util.isFormDataLike(V)) { -+ return webidl.converters.FormData(V, { strict: false }) -+ } -+ -+ if (V instanceof URLSearchParams) { -+ return webidl.converters.URLSearchParams(V) -+ } -+ -+ return webidl.converters.DOMString(V) -+} -+ -+// https://fetch.spec.whatwg.org/#bodyinit -+webidl.converters.BodyInit = function (V) { -+ if (V instanceof ReadableStream) { -+ return webidl.converters.ReadableStream(V) -+ } -+ -+ // Note: the spec doesn't include async iterables, -+ // this is an undici extension. -+ if (V?.[Symbol.asyncIterator]) { -+ return V -+ } -+ -+ return webidl.converters.XMLHttpRequestBodyInit(V) -+} -+ -+webidl.converters.ResponseInit = webidl.dictionaryConverter([ -+ { -+ key: 'status', -+ converter: webidl.converters['unsigned short'], -+ defaultValue: 200 -+ }, -+ { -+ key: 'statusText', -+ converter: webidl.converters.ByteString, -+ defaultValue: '' -+ }, -+ { -+ key: 'headers', -+ converter: webidl.converters.HeadersInit -+ } -+]) -+ -+module.exports = { -+ makeNetworkError, -+ makeResponse, -+ makeAppropriateNetworkError, -+ filterResponse, -+ Response, -+ cloneResponse -+} -+ -+ -+/***/ }), -+ -+/***/ 8069: -+/***/ ((module) => { -+ -+"use strict"; -+ -+ -+module.exports = { -+ kUrl: Symbol('url'), -+ kHeaders: Symbol('headers'), -+ kSignal: Symbol('signal'), -+ kState: Symbol('state'), -+ kGuard: Symbol('guard'), -+ kRealm: Symbol('realm') -+} -+ -+ -+/***/ }), -+ -+/***/ 1554: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { redirectStatusSet, referrerPolicySet: referrerPolicyTokens, badPortsSet } = __nccwpck_require__(9951) -+const { getGlobalOrigin } = __nccwpck_require__(5022) -+const { performance } = __nccwpck_require__(4074) -+const { isBlobLike, toUSVString, ReadableStreamFrom } = __nccwpck_require__(929) -+const assert = __nccwpck_require__(9491) -+const { isUint8Array } = __nccwpck_require__(9830) -+ -+let supportedHashes = [] -+ -+// https://nodejs.org/api/crypto.html#determining-if-crypto-support-is-unavailable -+/** @type {import('crypto')|undefined} */ -+let crypto -+ -+try { -+ crypto = __nccwpck_require__(6113) -+ const possibleRelevantHashes = ['sha256', 'sha384', 'sha512'] -+ supportedHashes = crypto.getHashes().filter((hash) => possibleRelevantHashes.includes(hash)) -+/* c8 ignore next 3 */ -+} catch { -+} -+ -+function responseURL (response) { -+ // https://fetch.spec.whatwg.org/#responses -+ // A response has an associated URL. It is a pointer to the last URL -+ // in response’s URL list and null if response’s URL list is empty. -+ const urlList = response.urlList -+ const length = urlList.length -+ return length === 0 ? null : urlList[length - 1].toString() -+} -+ -+// https://fetch.spec.whatwg.org/#concept-response-location-url -+function responseLocationURL (response, requestFragment) { -+ // 1. If response’s status is not a redirect status, then return null. -+ if (!redirectStatusSet.has(response.status)) { -+ return null -+ } -+ -+ // 2. Let location be the result of extracting header list values given -+ // `Location` and response’s header list. -+ let location = response.headersList.get('location') -+ -+ // 3. If location is a header value, then set location to the result of -+ // parsing location with response’s URL. -+ if (location !== null && isValidHeaderValue(location)) { -+ location = new URL(location, responseURL(response)) -+ } -+ -+ // 4. If location is a URL whose fragment is null, then set location’s -+ // fragment to requestFragment. -+ if (location && !location.hash) { -+ location.hash = requestFragment -+ } -+ -+ // 5. Return location. -+ return location -+} -+ -+/** @returns {URL} */ -+function requestCurrentURL (request) { -+ return request.urlList[request.urlList.length - 1] -+} -+ -+function requestBadPort (request) { -+ // 1. Let url be request’s current URL. -+ const url = requestCurrentURL(request) -+ -+ // 2. If url’s scheme is an HTTP(S) scheme and url’s port is a bad port, -+ // then return blocked. -+ if (urlIsHttpHttpsScheme(url) && badPortsSet.has(url.port)) { -+ return 'blocked' -+ } -+ -+ // 3. Return allowed. -+ return 'allowed' -+} -+ -+function isErrorLike (object) { -+ return object instanceof Error || ( -+ object?.constructor?.name === 'Error' || -+ object?.constructor?.name === 'DOMException' -+ ) -+} -+ -+// Check whether |statusText| is a ByteString and -+// matches the Reason-Phrase token production. -+// RFC 2616: https://tools.ietf.org/html/rfc2616 -+// RFC 7230: https://tools.ietf.org/html/rfc7230 -+// "reason-phrase = *( HTAB / SP / VCHAR / obs-text )" -+// https://github.com/chromium/chromium/blob/94.0.4604.1/third_party/blink/renderer/core/fetch/response.cc#L116 -+function isValidReasonPhrase (statusText) { -+ for (let i = 0; i < statusText.length; ++i) { -+ const c = statusText.charCodeAt(i) -+ if ( -+ !( -+ ( -+ c === 0x09 || // HTAB -+ (c >= 0x20 && c <= 0x7e) || // SP / VCHAR -+ (c >= 0x80 && c <= 0xff) -+ ) // obs-text -+ ) -+ ) { -+ return false -+ } -+ } -+ return true -+} -+ -+/** -+ * @see https://tools.ietf.org/html/rfc7230#section-3.2.6 -+ * @param {number} c -+ */ -+function isTokenCharCode (c) { -+ switch (c) { -+ case 0x22: -+ case 0x28: -+ case 0x29: -+ case 0x2c: -+ case 0x2f: -+ case 0x3a: -+ case 0x3b: -+ case 0x3c: -+ case 0x3d: -+ case 0x3e: -+ case 0x3f: -+ case 0x40: -+ case 0x5b: -+ case 0x5c: -+ case 0x5d: -+ case 0x7b: -+ case 0x7d: -+ // DQUOTE and "(),/:;<=>?@[\]{}" -+ return false -+ default: -+ // VCHAR %x21-7E -+ return c >= 0x21 && c <= 0x7e -+ } -+} -+ -+/** -+ * @param {string} characters -+ */ -+function isValidHTTPToken (characters) { -+ if (characters.length === 0) { -+ return false -+ } -+ for (let i = 0; i < characters.length; ++i) { -+ if (!isTokenCharCode(characters.charCodeAt(i))) { -+ return false -+ } -+ } -+ return true -+} -+ -+/** -+ * @see https://fetch.spec.whatwg.org/#header-name -+ * @param {string} potentialValue -+ */ -+function isValidHeaderName (potentialValue) { -+ return isValidHTTPToken(potentialValue) -+} -+ -+/** -+ * @see https://fetch.spec.whatwg.org/#header-value -+ * @param {string} potentialValue -+ */ -+function isValidHeaderValue (potentialValue) { -+ // - Has no leading or trailing HTTP tab or space bytes. -+ // - Contains no 0x00 (NUL) or HTTP newline bytes. -+ if ( -+ potentialValue.startsWith('\t') || -+ potentialValue.startsWith(' ') || -+ potentialValue.endsWith('\t') || -+ potentialValue.endsWith(' ') -+ ) { -+ return false -+ } -+ -+ if ( -+ potentialValue.includes('\0') || -+ potentialValue.includes('\r') || -+ potentialValue.includes('\n') -+ ) { -+ return false -+ } -+ -+ return true -+} -+ -+// https://w3c.github.io/webappsec-referrer-policy/#set-requests-referrer-policy-on-redirect -+function setRequestReferrerPolicyOnRedirect (request, actualResponse) { -+ // Given a request request and a response actualResponse, this algorithm -+ // updates request’s referrer policy according to the Referrer-Policy -+ // header (if any) in actualResponse. -+ -+ // 1. Let policy be the result of executing § 8.1 Parse a referrer policy -+ // from a Referrer-Policy header on actualResponse. -+ -+ // 8.1 Parse a referrer policy from a Referrer-Policy header -+ // 1. Let policy-tokens be the result of extracting header list values given `Referrer-Policy` and response’s header list. -+ const { headersList } = actualResponse -+ // 2. Let policy be the empty string. -+ // 3. For each token in policy-tokens, if token is a referrer policy and token is not the empty string, then set policy to token. -+ // 4. Return policy. -+ const policyHeader = (headersList.get('referrer-policy') ?? '').split(',') -+ -+ // Note: As the referrer-policy can contain multiple policies -+ // separated by comma, we need to loop through all of them -+ // and pick the first valid one. -+ // Ref: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy#specify_a_fallback_policy -+ let policy = '' -+ if (policyHeader.length > 0) { -+ // The right-most policy takes precedence. -+ // The left-most policy is the fallback. -+ for (let i = policyHeader.length; i !== 0; i--) { -+ const token = policyHeader[i - 1].trim() -+ if (referrerPolicyTokens.has(token)) { -+ policy = token -+ break -+ } -+ } -+ } -+ -+ // 2. If policy is not the empty string, then set request’s referrer policy to policy. -+ if (policy !== '') { -+ request.referrerPolicy = policy -+ } -+} -+ -+// https://fetch.spec.whatwg.org/#cross-origin-resource-policy-check -+function crossOriginResourcePolicyCheck () { -+ // TODO -+ return 'allowed' -+} -+ -+// https://fetch.spec.whatwg.org/#concept-cors-check -+function corsCheck () { -+ // TODO -+ return 'success' -+} -+ -+// https://fetch.spec.whatwg.org/#concept-tao-check -+function TAOCheck () { -+ // TODO -+ return 'success' -+} -+ -+function appendFetchMetadata (httpRequest) { -+ // https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-dest-header -+ // TODO -+ -+ // https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-mode-header -+ -+ // 1. Assert: r’s url is a potentially trustworthy URL. -+ // TODO -+ -+ // 2. Let header be a Structured Header whose value is a token. -+ let header = null -+ -+ // 3. Set header’s value to r’s mode. -+ header = httpRequest.mode -+ -+ // 4. Set a structured field value `Sec-Fetch-Mode`/header in r’s header list. -+ httpRequest.headersList.set('sec-fetch-mode', header) -+ -+ // https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-site-header -+ // TODO -+ -+ // https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-user-header -+ // TODO -+} -+ -+// https://fetch.spec.whatwg.org/#append-a-request-origin-header -+function appendRequestOriginHeader (request) { -+ // 1. Let serializedOrigin be the result of byte-serializing a request origin with request. -+ let serializedOrigin = request.origin -+ -+ // 2. If request’s response tainting is "cors" or request’s mode is "websocket", then append (`Origin`, serializedOrigin) to request’s header list. -+ if (request.responseTainting === 'cors' || request.mode === 'websocket') { -+ if (serializedOrigin) { -+ request.headersList.append('origin', serializedOrigin) -+ } -+ -+ // 3. Otherwise, if request’s method is neither `GET` nor `HEAD`, then: -+ } else if (request.method !== 'GET' && request.method !== 'HEAD') { -+ // 1. Switch on request’s referrer policy: -+ switch (request.referrerPolicy) { -+ case 'no-referrer': -+ // Set serializedOrigin to `null`. -+ serializedOrigin = null -+ break -+ case 'no-referrer-when-downgrade': -+ case 'strict-origin': -+ case 'strict-origin-when-cross-origin': -+ // If request’s origin is a tuple origin, its scheme is "https", and request’s current URL’s scheme is not "https", then set serializedOrigin to `null`. -+ if (request.origin && urlHasHttpsScheme(request.origin) && !urlHasHttpsScheme(requestCurrentURL(request))) { -+ serializedOrigin = null -+ } -+ break -+ case 'same-origin': -+ // If request’s origin is not same origin with request’s current URL’s origin, then set serializedOrigin to `null`. -+ if (!sameOrigin(request, requestCurrentURL(request))) { -+ serializedOrigin = null -+ } -+ break -+ default: -+ // Do nothing. -+ } -+ -+ if (serializedOrigin) { -+ // 2. Append (`Origin`, serializedOrigin) to request’s header list. -+ request.headersList.append('origin', serializedOrigin) -+ } -+ } -+} -+ -+function coarsenedSharedCurrentTime (crossOriginIsolatedCapability) { -+ // TODO -+ return performance.now() -+} -+ -+// https://fetch.spec.whatwg.org/#create-an-opaque-timing-info -+function createOpaqueTimingInfo (timingInfo) { -+ return { -+ startTime: timingInfo.startTime ?? 0, -+ redirectStartTime: 0, -+ redirectEndTime: 0, -+ postRedirectStartTime: timingInfo.startTime ?? 0, -+ finalServiceWorkerStartTime: 0, -+ finalNetworkResponseStartTime: 0, -+ finalNetworkRequestStartTime: 0, -+ endTime: 0, -+ encodedBodySize: 0, -+ decodedBodySize: 0, -+ finalConnectionTimingInfo: null -+ } -+} -+ -+// https://html.spec.whatwg.org/multipage/origin.html#policy-container -+function makePolicyContainer () { -+ // Note: the fetch spec doesn't make use of embedder policy or CSP list -+ return { -+ referrerPolicy: 'strict-origin-when-cross-origin' -+ } -+} -+ -+// https://html.spec.whatwg.org/multipage/origin.html#clone-a-policy-container -+function clonePolicyContainer (policyContainer) { -+ return { -+ referrerPolicy: policyContainer.referrerPolicy -+ } -+} -+ -+// https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer -+function determineRequestsReferrer (request) { -+ // 1. Let policy be request's referrer policy. -+ const policy = request.referrerPolicy -+ -+ // Note: policy cannot (shouldn't) be null or an empty string. -+ assert(policy) -+ -+ // 2. Let environment be request’s client. -+ -+ let referrerSource = null -+ -+ // 3. Switch on request’s referrer: -+ if (request.referrer === 'client') { -+ // Note: node isn't a browser and doesn't implement document/iframes, -+ // so we bypass this step and replace it with our own. -+ -+ const globalOrigin = getGlobalOrigin() -+ -+ if (!globalOrigin || globalOrigin.origin === 'null') { -+ return 'no-referrer' -+ } -+ -+ // note: we need to clone it as it's mutated -+ referrerSource = new URL(globalOrigin) -+ } else if (request.referrer instanceof URL) { -+ // Let referrerSource be request’s referrer. -+ referrerSource = request.referrer -+ } -+ -+ // 4. Let request’s referrerURL be the result of stripping referrerSource for -+ // use as a referrer. -+ let referrerURL = stripURLForReferrer(referrerSource) -+ -+ // 5. Let referrerOrigin be the result of stripping referrerSource for use as -+ // a referrer, with the origin-only flag set to true. -+ const referrerOrigin = stripURLForReferrer(referrerSource, true) -+ -+ // 6. If the result of serializing referrerURL is a string whose length is -+ // greater than 4096, set referrerURL to referrerOrigin. -+ if (referrerURL.toString().length > 4096) { -+ referrerURL = referrerOrigin -+ } -+ -+ const areSameOrigin = sameOrigin(request, referrerURL) -+ const isNonPotentiallyTrustWorthy = isURLPotentiallyTrustworthy(referrerURL) && -+ !isURLPotentiallyTrustworthy(request.url) -+ -+ // 8. Execute the switch statements corresponding to the value of policy: -+ switch (policy) { -+ case 'origin': return referrerOrigin != null ? referrerOrigin : stripURLForReferrer(referrerSource, true) -+ case 'unsafe-url': return referrerURL -+ case 'same-origin': -+ return areSameOrigin ? referrerOrigin : 'no-referrer' -+ case 'origin-when-cross-origin': -+ return areSameOrigin ? referrerURL : referrerOrigin -+ case 'strict-origin-when-cross-origin': { -+ const currentURL = requestCurrentURL(request) -+ -+ // 1. If the origin of referrerURL and the origin of request’s current -+ // URL are the same, then return referrerURL. -+ if (sameOrigin(referrerURL, currentURL)) { -+ return referrerURL -+ } -+ -+ // 2. If referrerURL is a potentially trustworthy URL and request’s -+ // current URL is not a potentially trustworthy URL, then return no -+ // referrer. -+ if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) { -+ return 'no-referrer' -+ } -+ -+ // 3. Return referrerOrigin. -+ return referrerOrigin -+ } -+ case 'strict-origin': // eslint-disable-line -+ /** -+ * 1. If referrerURL is a potentially trustworthy URL and -+ * request’s current URL is not a potentially trustworthy URL, -+ * then return no referrer. -+ * 2. Return referrerOrigin -+ */ -+ case 'no-referrer-when-downgrade': // eslint-disable-line -+ /** -+ * 1. If referrerURL is a potentially trustworthy URL and -+ * request’s current URL is not a potentially trustworthy URL, -+ * then return no referrer. -+ * 2. Return referrerOrigin -+ */ -+ -+ default: // eslint-disable-line -+ return isNonPotentiallyTrustWorthy ? 'no-referrer' : referrerOrigin -+ } -+} -+ -+/** -+ * @see https://w3c.github.io/webappsec-referrer-policy/#strip-url -+ * @param {URL} url -+ * @param {boolean|undefined} originOnly -+ */ -+function stripURLForReferrer (url, originOnly) { -+ // 1. Assert: url is a URL. -+ assert(url instanceof URL) -+ -+ // 2. If url’s scheme is a local scheme, then return no referrer. -+ if (url.protocol === 'file:' || url.protocol === 'about:' || url.protocol === 'blank:') { -+ return 'no-referrer' -+ } -+ -+ // 3. Set url’s username to the empty string. -+ url.username = '' -+ -+ // 4. Set url’s password to the empty string. -+ url.password = '' -+ -+ // 5. Set url’s fragment to null. -+ url.hash = '' -+ -+ // 6. If the origin-only flag is true, then: -+ if (originOnly) { -+ // 1. Set url’s path to « the empty string ». -+ url.pathname = '' -+ -+ // 2. Set url’s query to null. -+ url.search = '' -+ } -+ -+ // 7. Return url. -+ return url -+} -+ -+function isURLPotentiallyTrustworthy (url) { -+ if (!(url instanceof URL)) { -+ return false -+ } -+ -+ // If child of about, return true -+ if (url.href === 'about:blank' || url.href === 'about:srcdoc') { -+ return true -+ } -+ -+ // If scheme is data, return true -+ if (url.protocol === 'data:') return true -+ -+ // If file, return true -+ if (url.protocol === 'file:') return true -+ -+ return isOriginPotentiallyTrustworthy(url.origin) -+ -+ function isOriginPotentiallyTrustworthy (origin) { -+ // If origin is explicitly null, return false -+ if (origin == null || origin === 'null') return false -+ -+ const originAsURL = new URL(origin) -+ -+ // If secure, return true -+ if (originAsURL.protocol === 'https:' || originAsURL.protocol === 'wss:') { -+ return true -+ } -+ -+ // If localhost or variants, return true -+ if (/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(originAsURL.hostname) || -+ (originAsURL.hostname === 'localhost' || originAsURL.hostname.includes('localhost.')) || -+ (originAsURL.hostname.endsWith('.localhost'))) { -+ return true -+ } -+ -+ // If any other, return false -+ return false -+ } -+} -+ -+/** -+ * @see https://w3c.github.io/webappsec-subresource-integrity/#does-response-match-metadatalist -+ * @param {Uint8Array} bytes -+ * @param {string} metadataList -+ */ -+function bytesMatch (bytes, metadataList) { -+ // If node is not built with OpenSSL support, we cannot check -+ // a request's integrity, so allow it by default (the spec will -+ // allow requests if an invalid hash is given, as precedence). -+ /* istanbul ignore if: only if node is built with --without-ssl */ -+ if (crypto === undefined) { -+ return true -+ } -+ -+ // 1. Let parsedMetadata be the result of parsing metadataList. -+ const parsedMetadata = parseMetadata(metadataList) -+ -+ // 2. If parsedMetadata is no metadata, return true. -+ if (parsedMetadata === 'no metadata') { -+ return true -+ } -+ -+ // 3. If response is not eligible for integrity validation, return false. -+ // TODO -+ -+ // 4. If parsedMetadata is the empty set, return true. -+ if (parsedMetadata.length === 0) { -+ return true -+ } -+ -+ // 5. Let metadata be the result of getting the strongest -+ // metadata from parsedMetadata. -+ const strongest = getStrongestMetadata(parsedMetadata) -+ const metadata = filterMetadataListByAlgorithm(parsedMetadata, strongest) -+ -+ // 6. For each item in metadata: -+ for (const item of metadata) { -+ // 1. Let algorithm be the alg component of item. -+ const algorithm = item.algo -+ -+ // 2. Let expectedValue be the val component of item. -+ const expectedValue = item.hash -+ -+ // See https://github.com/web-platform-tests/wpt/commit/e4c5cc7a5e48093220528dfdd1c4012dc3837a0e -+ // "be liberal with padding". This is annoying, and it's not even in the spec. -+ -+ // 3. Let actualValue be the result of applying algorithm to bytes. -+ let actualValue = crypto.createHash(algorithm).update(bytes).digest('base64') -+ -+ if (actualValue[actualValue.length - 1] === '=') { -+ if (actualValue[actualValue.length - 2] === '=') { -+ actualValue = actualValue.slice(0, -2) -+ } else { -+ actualValue = actualValue.slice(0, -1) -+ } -+ } -+ -+ // 4. If actualValue is a case-sensitive match for expectedValue, -+ // return true. -+ if (compareBase64Mixed(actualValue, expectedValue)) { -+ return true -+ } -+ } -+ -+ // 7. Return false. -+ return false -+} -+ -+// https://w3c.github.io/webappsec-subresource-integrity/#grammardef-hash-with-options -+// https://www.w3.org/TR/CSP2/#source-list-syntax -+// https://www.rfc-editor.org/rfc/rfc5234#appendix-B.1 -+const parseHashWithOptions = /(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i -+ -+/** -+ * @see https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata -+ * @param {string} metadata -+ */ -+function parseMetadata (metadata) { -+ // 1. Let result be the empty set. -+ /** @type {{ algo: string, hash: string }[]} */ -+ const result = [] -+ -+ // 2. Let empty be equal to true. -+ let empty = true -+ -+ // 3. For each token returned by splitting metadata on spaces: -+ for (const token of metadata.split(' ')) { -+ // 1. Set empty to false. -+ empty = false -+ -+ // 2. Parse token as a hash-with-options. -+ const parsedToken = parseHashWithOptions.exec(token) -+ -+ // 3. If token does not parse, continue to the next token. -+ if ( -+ parsedToken === null || -+ parsedToken.groups === undefined || -+ parsedToken.groups.algo === undefined -+ ) { -+ // Note: Chromium blocks the request at this point, but Firefox -+ // gives a warning that an invalid integrity was given. The -+ // correct behavior is to ignore these, and subsequently not -+ // check the integrity of the resource. -+ continue -+ } -+ -+ // 4. Let algorithm be the hash-algo component of token. -+ const algorithm = parsedToken.groups.algo.toLowerCase() -+ -+ // 5. If algorithm is a hash function recognized by the user -+ // agent, add the parsed token to result. -+ if (supportedHashes.includes(algorithm)) { -+ result.push(parsedToken.groups) -+ } -+ } -+ -+ // 4. Return no metadata if empty is true, otherwise return result. -+ if (empty === true) { -+ return 'no metadata' -+ } -+ -+ return result -+} -+ -+/** -+ * @param {{ algo: 'sha256' | 'sha384' | 'sha512' }[]} metadataList -+ */ -+function getStrongestMetadata (metadataList) { -+ // Let algorithm be the algo component of the first item in metadataList. -+ // Can be sha256 -+ let algorithm = metadataList[0].algo -+ // If the algorithm is sha512, then it is the strongest -+ // and we can return immediately -+ if (algorithm[3] === '5') { -+ return algorithm -+ } -+ -+ for (let i = 1; i < metadataList.length; ++i) { -+ const metadata = metadataList[i] -+ // If the algorithm is sha512, then it is the strongest -+ // and we can break the loop immediately -+ if (metadata.algo[3] === '5') { -+ algorithm = 'sha512' -+ break -+ // If the algorithm is sha384, then a potential sha256 or sha384 is ignored -+ } else if (algorithm[3] === '3') { -+ continue -+ // algorithm is sha256, check if algorithm is sha384 and if so, set it as -+ // the strongest -+ } else if (metadata.algo[3] === '3') { -+ algorithm = 'sha384' -+ } -+ } -+ return algorithm -+} -+ -+function filterMetadataListByAlgorithm (metadataList, algorithm) { -+ if (metadataList.length === 1) { -+ return metadataList -+ } -+ -+ let pos = 0 -+ for (let i = 0; i < metadataList.length; ++i) { -+ if (metadataList[i].algo === algorithm) { -+ metadataList[pos++] = metadataList[i] -+ } -+ } -+ -+ metadataList.length = pos -+ -+ return metadataList -+} -+ -+/** -+ * Compares two base64 strings, allowing for base64url -+ * in the second string. -+ * -+* @param {string} actualValue always base64 -+ * @param {string} expectedValue base64 or base64url -+ * @returns {boolean} -+ */ -+function compareBase64Mixed (actualValue, expectedValue) { -+ if (actualValue.length !== expectedValue.length) { -+ return false -+ } -+ for (let i = 0; i < actualValue.length; ++i) { -+ if (actualValue[i] !== expectedValue[i]) { -+ if ( -+ (actualValue[i] === '+' && expectedValue[i] === '-') || -+ (actualValue[i] === '/' && expectedValue[i] === '_') -+ ) { -+ continue -+ } -+ return false -+ } -+ } -+ -+ return true -+} -+ -+// https://w3c.github.io/webappsec-upgrade-insecure-requests/#upgrade-request -+function tryUpgradeRequestToAPotentiallyTrustworthyURL (request) { -+ // TODO -+} -+ -+/** -+ * @link {https://html.spec.whatwg.org/multipage/origin.html#same-origin} -+ * @param {URL} A -+ * @param {URL} B -+ */ -+function sameOrigin (A, B) { -+ // 1. If A and B are the same opaque origin, then return true. -+ if (A.origin === B.origin && A.origin === 'null') { -+ return true -+ } -+ -+ // 2. If A and B are both tuple origins and their schemes, -+ // hosts, and port are identical, then return true. -+ if (A.protocol === B.protocol && A.hostname === B.hostname && A.port === B.port) { -+ return true -+ } -+ -+ // 3. Return false. -+ return false -+} -+ -+function createDeferredPromise () { -+ let res -+ let rej -+ const promise = new Promise((resolve, reject) => { -+ res = resolve -+ rej = reject -+ }) -+ -+ return { promise, resolve: res, reject: rej } -+} -+ -+function isAborted (fetchParams) { -+ return fetchParams.controller.state === 'aborted' -+} -+ -+function isCancelled (fetchParams) { -+ return fetchParams.controller.state === 'aborted' || -+ fetchParams.controller.state === 'terminated' -+} -+ -+const normalizeMethodRecord = { -+ delete: 'DELETE', -+ DELETE: 'DELETE', -+ get: 'GET', -+ GET: 'GET', -+ head: 'HEAD', -+ HEAD: 'HEAD', -+ options: 'OPTIONS', -+ OPTIONS: 'OPTIONS', -+ post: 'POST', -+ POST: 'POST', -+ put: 'PUT', -+ PUT: 'PUT' -+} -+ -+// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`. -+Object.setPrototypeOf(normalizeMethodRecord, null) -+ -+/** -+ * @see https://fetch.spec.whatwg.org/#concept-method-normalize -+ * @param {string} method -+ */ -+function normalizeMethod (method) { -+ return normalizeMethodRecord[method.toLowerCase()] ?? method -+} -+ -+// https://infra.spec.whatwg.org/#serialize-a-javascript-value-to-a-json-string -+function serializeJavascriptValueToJSONString (value) { -+ // 1. Let result be ? Call(%JSON.stringify%, undefined, « value »). -+ const result = JSON.stringify(value) -+ -+ // 2. If result is undefined, then throw a TypeError. -+ if (result === undefined) { -+ throw new TypeError('Value is not JSON serializable') -+ } -+ -+ // 3. Assert: result is a string. -+ assert(typeof result === 'string') -+ -+ // 4. Return result. -+ return result -+} -+ -+// https://tc39.es/ecma262/#sec-%25iteratorprototype%25-object -+const esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())) -+ -+/** -+ * @see https://webidl.spec.whatwg.org/#dfn-iterator-prototype-object -+ * @param {() => unknown[]} iterator -+ * @param {string} name name of the instance -+ * @param {'key'|'value'|'key+value'} kind -+ */ -+function makeIterator (iterator, name, kind) { -+ const object = { -+ index: 0, -+ kind, -+ target: iterator -+ } -+ -+ const i = { -+ next () { -+ // 1. Let interface be the interface for which the iterator prototype object exists. -+ -+ // 2. Let thisValue be the this value. -+ -+ // 3. Let object be ? ToObject(thisValue). -+ -+ // 4. If object is a platform object, then perform a security -+ // check, passing: -+ -+ // 5. If object is not a default iterator object for interface, -+ // then throw a TypeError. -+ if (Object.getPrototypeOf(this) !== i) { -+ throw new TypeError( -+ `'next' called on an object that does not implement interface ${name} Iterator.` -+ ) -+ } -+ -+ // 6. Let index be object’s index. -+ // 7. Let kind be object’s kind. -+ // 8. Let values be object’s target's value pairs to iterate over. -+ const { index, kind, target } = object -+ const values = target() -+ -+ // 9. Let len be the length of values. -+ const len = values.length -+ -+ // 10. If index is greater than or equal to len, then return -+ // CreateIterResultObject(undefined, true). -+ if (index >= len) { -+ return { value: undefined, done: true } -+ } -+ -+ // 11. Let pair be the entry in values at index index. -+ const pair = values[index] -+ -+ // 12. Set object’s index to index + 1. -+ object.index = index + 1 -+ -+ // 13. Return the iterator result for pair and kind. -+ return iteratorResult(pair, kind) -+ }, -+ // The class string of an iterator prototype object for a given interface is the -+ // result of concatenating the identifier of the interface and the string " Iterator". -+ [Symbol.toStringTag]: `${name} Iterator` -+ } -+ -+ // The [[Prototype]] internal slot of an iterator prototype object must be %IteratorPrototype%. -+ Object.setPrototypeOf(i, esIteratorPrototype) -+ // esIteratorPrototype needs to be the prototype of i -+ // which is the prototype of an empty object. Yes, it's confusing. -+ return Object.setPrototypeOf({}, i) -+} -+ -+// https://webidl.spec.whatwg.org/#iterator-result -+function iteratorResult (pair, kind) { -+ let result -+ -+ // 1. Let result be a value determined by the value of kind: -+ switch (kind) { -+ case 'key': { -+ // 1. Let idlKey be pair’s key. -+ // 2. Let key be the result of converting idlKey to an -+ // ECMAScript value. -+ // 3. result is key. -+ result = pair[0] -+ break -+ } -+ case 'value': { -+ // 1. Let idlValue be pair’s value. -+ // 2. Let value be the result of converting idlValue to -+ // an ECMAScript value. -+ // 3. result is value. -+ result = pair[1] -+ break -+ } -+ case 'key+value': { -+ // 1. Let idlKey be pair’s key. -+ // 2. Let idlValue be pair’s value. -+ // 3. Let key be the result of converting idlKey to an -+ // ECMAScript value. -+ // 4. Let value be the result of converting idlValue to -+ // an ECMAScript value. -+ // 5. Let array be ! ArrayCreate(2). -+ // 6. Call ! CreateDataProperty(array, "0", key). -+ // 7. Call ! CreateDataProperty(array, "1", value). -+ // 8. result is array. -+ result = pair -+ break -+ } -+ } -+ -+ // 2. Return CreateIterResultObject(result, false). -+ return { value: result, done: false } -+} -+ -+/** -+ * @see https://fetch.spec.whatwg.org/#body-fully-read -+ */ -+async function fullyReadBody (body, processBody, processBodyError) { -+ // 1. If taskDestination is null, then set taskDestination to -+ // the result of starting a new parallel queue. -+ -+ // 2. Let successSteps given a byte sequence bytes be to queue a -+ // fetch task to run processBody given bytes, with taskDestination. -+ const successSteps = processBody -+ -+ // 3. Let errorSteps be to queue a fetch task to run processBodyError, -+ // with taskDestination. -+ const errorSteps = processBodyError -+ -+ // 4. Let reader be the result of getting a reader for body’s stream. -+ // If that threw an exception, then run errorSteps with that -+ // exception and return. -+ let reader -+ -+ try { -+ reader = body.stream.getReader() -+ } catch (e) { -+ errorSteps(e) -+ return -+ } -+ -+ // 5. Read all bytes from reader, given successSteps and errorSteps. -+ try { -+ const result = await readAllBytes(reader) -+ successSteps(result) -+ } catch (e) { -+ errorSteps(e) -+ } -+} -+ -+/** @type {ReadableStream} */ -+let ReadableStream = globalThis.ReadableStream -+ -+function isReadableStreamLike (stream) { -+ if (!ReadableStream) { -+ ReadableStream = (__nccwpck_require__(5356).ReadableStream) -+ } -+ -+ return stream instanceof ReadableStream || ( -+ stream[Symbol.toStringTag] === 'ReadableStream' && -+ typeof stream.tee === 'function' -+ ) -+} -+ -+const MAXIMUM_ARGUMENT_LENGTH = 65535 -+ -+/** -+ * @see https://infra.spec.whatwg.org/#isomorphic-decode -+ * @param {number[]|Uint8Array} input -+ */ -+function isomorphicDecode (input) { -+ // 1. To isomorphic decode a byte sequence input, return a string whose code point -+ // length is equal to input’s length and whose code points have the same values -+ // as the values of input’s bytes, in the same order. -+ -+ if (input.length < MAXIMUM_ARGUMENT_LENGTH) { -+ return String.fromCharCode(...input) -+ } -+ -+ return input.reduce((previous, current) => previous + String.fromCharCode(current), '') -+} -+ -+/** -+ * @param {ReadableStreamController} controller -+ */ -+function readableStreamClose (controller) { -+ try { -+ controller.close() -+ } catch (err) { -+ // TODO: add comment explaining why this error occurs. -+ if (!err.message.includes('Controller is already closed')) { -+ throw err -+ } -+ } -+} -+ -+/** -+ * @see https://infra.spec.whatwg.org/#isomorphic-encode -+ * @param {string} input -+ */ -+function isomorphicEncode (input) { -+ // 1. Assert: input contains no code points greater than U+00FF. -+ for (let i = 0; i < input.length; i++) { -+ assert(input.charCodeAt(i) <= 0xFF) -+ } -+ -+ // 2. Return a byte sequence whose length is equal to input’s code -+ // point length and whose bytes have the same values as the -+ // values of input’s code points, in the same order -+ return input -+} -+ -+/** -+ * @see https://streams.spec.whatwg.org/#readablestreamdefaultreader-read-all-bytes -+ * @see https://streams.spec.whatwg.org/#read-loop -+ * @param {ReadableStreamDefaultReader} reader -+ */ -+async function readAllBytes (reader) { -+ const bytes = [] -+ let byteLength = 0 -+ -+ while (true) { -+ const { done, value: chunk } = await reader.read() -+ -+ if (done) { -+ // 1. Call successSteps with bytes. -+ return Buffer.concat(bytes, byteLength) -+ } -+ -+ // 1. If chunk is not a Uint8Array object, call failureSteps -+ // with a TypeError and abort these steps. -+ if (!isUint8Array(chunk)) { -+ throw new TypeError('Received non-Uint8Array chunk') -+ } -+ -+ // 2. Append the bytes represented by chunk to bytes. -+ bytes.push(chunk) -+ byteLength += chunk.length -+ -+ // 3. Read-loop given reader, bytes, successSteps, and failureSteps. -+ } -+} -+ -+/** -+ * @see https://fetch.spec.whatwg.org/#is-local -+ * @param {URL} url -+ */ -+function urlIsLocal (url) { -+ assert('protocol' in url) // ensure it's a url object -+ -+ const protocol = url.protocol -+ -+ return protocol === 'about:' || protocol === 'blob:' || protocol === 'data:' -+} -+ -+/** -+ * @param {string|URL} url -+ */ -+function urlHasHttpsScheme (url) { -+ if (typeof url === 'string') { -+ return url.startsWith('https:') -+ } -+ -+ return url.protocol === 'https:' -+} -+ -+/** -+ * @see https://fetch.spec.whatwg.org/#http-scheme -+ * @param {URL} url -+ */ -+function urlIsHttpHttpsScheme (url) { -+ assert('protocol' in url) // ensure it's a url object -+ -+ const protocol = url.protocol -+ -+ return protocol === 'http:' || protocol === 'https:' -+} -+ -+/** -+ * Fetch supports node >= 16.8.0, but Object.hasOwn was added in v16.9.0. -+ */ -+const hasOwn = Object.hasOwn || ((dict, key) => Object.prototype.hasOwnProperty.call(dict, key)) -+ -+module.exports = { -+ isAborted, -+ isCancelled, -+ createDeferredPromise, -+ ReadableStreamFrom, -+ toUSVString, -+ tryUpgradeRequestToAPotentiallyTrustworthyURL, -+ coarsenedSharedCurrentTime, -+ determineRequestsReferrer, -+ makePolicyContainer, -+ clonePolicyContainer, -+ appendFetchMetadata, -+ appendRequestOriginHeader, -+ TAOCheck, -+ corsCheck, -+ crossOriginResourcePolicyCheck, -+ createOpaqueTimingInfo, -+ setRequestReferrerPolicyOnRedirect, -+ isValidHTTPToken, -+ requestBadPort, -+ requestCurrentURL, -+ responseURL, -+ responseLocationURL, -+ isBlobLike, -+ isURLPotentiallyTrustworthy, -+ isValidReasonPhrase, -+ sameOrigin, -+ normalizeMethod, -+ serializeJavascriptValueToJSONString, -+ makeIterator, -+ isValidHeaderName, -+ isValidHeaderValue, -+ hasOwn, -+ isErrorLike, -+ fullyReadBody, -+ bytesMatch, -+ isReadableStreamLike, -+ readableStreamClose, -+ isomorphicEncode, -+ isomorphicDecode, -+ urlIsLocal, -+ urlHasHttpsScheme, -+ urlIsHttpHttpsScheme, -+ readAllBytes, -+ normalizeMethodRecord, -+ parseMetadata -+} -+ -+ -+/***/ }), -+ -+/***/ 5611: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { types } = __nccwpck_require__(3837) -+const { hasOwn, toUSVString } = __nccwpck_require__(1554) -+ -+/** @type {import('../../types/webidl').Webidl} */ -+const webidl = {} -+webidl.converters = {} -+webidl.util = {} -+webidl.errors = {} -+ -+webidl.errors.exception = function (message) { -+ return new TypeError(`${message.header}: ${message.message}`) -+} -+ -+webidl.errors.conversionFailed = function (context) { -+ const plural = context.types.length === 1 ? '' : ' one of' -+ const message = -+ `${context.argument} could not be converted to` + -+ `${plural}: ${context.types.join(', ')}.` -+ -+ return webidl.errors.exception({ -+ header: context.prefix, -+ message -+ }) -+} -+ -+webidl.errors.invalidArgument = function (context) { -+ return webidl.errors.exception({ -+ header: context.prefix, -+ message: `"${context.value}" is an invalid ${context.type}.` -+ }) -+} -+ -+// https://webidl.spec.whatwg.org/#implements -+webidl.brandCheck = function (V, I, opts = undefined) { -+ if (opts?.strict !== false && !(V instanceof I)) { -+ throw new TypeError('Illegal invocation') -+ } else { -+ return V?.[Symbol.toStringTag] === I.prototype[Symbol.toStringTag] -+ } -+} -+ -+webidl.argumentLengthCheck = function ({ length }, min, ctx) { -+ if (length < min) { -+ throw webidl.errors.exception({ -+ message: `${min} argument${min !== 1 ? 's' : ''} required, ` + -+ `but${length ? ' only' : ''} ${length} found.`, -+ ...ctx -+ }) -+ } -+} -+ -+webidl.illegalConstructor = function () { -+ throw webidl.errors.exception({ -+ header: 'TypeError', -+ message: 'Illegal constructor' -+ }) -+} -+ -+// https://tc39.es/ecma262/#sec-ecmascript-data-types-and-values -+webidl.util.Type = function (V) { -+ switch (typeof V) { -+ case 'undefined': return 'Undefined' -+ case 'boolean': return 'Boolean' -+ case 'string': return 'String' -+ case 'symbol': return 'Symbol' -+ case 'number': return 'Number' -+ case 'bigint': return 'BigInt' -+ case 'function': -+ case 'object': { -+ if (V === null) { -+ return 'Null' -+ } -+ -+ return 'Object' -+ } -+ } -+} -+ -+// https://webidl.spec.whatwg.org/#abstract-opdef-converttoint -+webidl.util.ConvertToInt = function (V, bitLength, signedness, opts = {}) { -+ let upperBound -+ let lowerBound -+ -+ // 1. If bitLength is 64, then: -+ if (bitLength === 64) { -+ // 1. Let upperBound be 2^53 − 1. -+ upperBound = Math.pow(2, 53) - 1 -+ -+ // 2. If signedness is "unsigned", then let lowerBound be 0. -+ if (signedness === 'unsigned') { -+ lowerBound = 0 -+ } else { -+ // 3. Otherwise let lowerBound be −2^53 + 1. -+ lowerBound = Math.pow(-2, 53) + 1 -+ } -+ } else if (signedness === 'unsigned') { -+ // 2. Otherwise, if signedness is "unsigned", then: -+ -+ // 1. Let lowerBound be 0. -+ lowerBound = 0 -+ -+ // 2. Let upperBound be 2^bitLength − 1. -+ upperBound = Math.pow(2, bitLength) - 1 -+ } else { -+ // 3. Otherwise: -+ -+ // 1. Let lowerBound be -2^bitLength − 1. -+ lowerBound = Math.pow(-2, bitLength) - 1 -+ -+ // 2. Let upperBound be 2^bitLength − 1 − 1. -+ upperBound = Math.pow(2, bitLength - 1) - 1 -+ } -+ -+ // 4. Let x be ? ToNumber(V). -+ let x = Number(V) -+ -+ // 5. If x is −0, then set x to +0. -+ if (x === 0) { -+ x = 0 -+ } -+ -+ // 6. If the conversion is to an IDL type associated -+ // with the [EnforceRange] extended attribute, then: -+ if (opts.enforceRange === true) { -+ // 1. If x is NaN, +∞, or −∞, then throw a TypeError. -+ if ( -+ Number.isNaN(x) || -+ x === Number.POSITIVE_INFINITY || -+ x === Number.NEGATIVE_INFINITY -+ ) { -+ throw webidl.errors.exception({ -+ header: 'Integer conversion', -+ message: `Could not convert ${V} to an integer.` -+ }) -+ } -+ -+ // 2. Set x to IntegerPart(x). -+ x = webidl.util.IntegerPart(x) -+ -+ // 3. If x < lowerBound or x > upperBound, then -+ // throw a TypeError. -+ if (x < lowerBound || x > upperBound) { -+ throw webidl.errors.exception({ -+ header: 'Integer conversion', -+ message: `Value must be between ${lowerBound}-${upperBound}, got ${x}.` -+ }) -+ } -+ -+ // 4. Return x. -+ return x -+ } -+ -+ // 7. If x is not NaN and the conversion is to an IDL -+ // type associated with the [Clamp] extended -+ // attribute, then: -+ if (!Number.isNaN(x) && opts.clamp === true) { -+ // 1. Set x to min(max(x, lowerBound), upperBound). -+ x = Math.min(Math.max(x, lowerBound), upperBound) -+ -+ // 2. Round x to the nearest integer, choosing the -+ // even integer if it lies halfway between two, -+ // and choosing +0 rather than −0. -+ if (Math.floor(x) % 2 === 0) { -+ x = Math.floor(x) -+ } else { -+ x = Math.ceil(x) -+ } -+ -+ // 3. Return x. -+ return x -+ } -+ -+ // 8. If x is NaN, +0, +∞, or −∞, then return +0. -+ if ( -+ Number.isNaN(x) || -+ (x === 0 && Object.is(0, x)) || -+ x === Number.POSITIVE_INFINITY || -+ x === Number.NEGATIVE_INFINITY -+ ) { -+ return 0 -+ } -+ -+ // 9. Set x to IntegerPart(x). -+ x = webidl.util.IntegerPart(x) -+ -+ // 10. Set x to x modulo 2^bitLength. -+ x = x % Math.pow(2, bitLength) -+ -+ // 11. If signedness is "signed" and x ≥ 2^bitLength − 1, -+ // then return x − 2^bitLength. -+ if (signedness === 'signed' && x >= Math.pow(2, bitLength) - 1) { -+ return x - Math.pow(2, bitLength) -+ } -+ -+ // 12. Otherwise, return x. -+ return x -+} -+ -+// https://webidl.spec.whatwg.org/#abstract-opdef-integerpart -+webidl.util.IntegerPart = function (n) { -+ // 1. Let r be floor(abs(n)). -+ const r = Math.floor(Math.abs(n)) -+ -+ // 2. If n < 0, then return -1 × r. -+ if (n < 0) { -+ return -1 * r -+ } -+ -+ // 3. Otherwise, return r. -+ return r -+} -+ -+// https://webidl.spec.whatwg.org/#es-sequence -+webidl.sequenceConverter = function (converter) { -+ return (V) => { -+ // 1. If Type(V) is not Object, throw a TypeError. -+ if (webidl.util.Type(V) !== 'Object') { -+ throw webidl.errors.exception({ -+ header: 'Sequence', -+ message: `Value of type ${webidl.util.Type(V)} is not an Object.` -+ }) -+ } -+ -+ // 2. Let method be ? GetMethod(V, @@iterator). -+ /** @type {Generator} */ -+ const method = V?.[Symbol.iterator]?.() -+ const seq = [] -+ -+ // 3. If method is undefined, throw a TypeError. -+ if ( -+ method === undefined || -+ typeof method.next !== 'function' -+ ) { -+ throw webidl.errors.exception({ -+ header: 'Sequence', -+ message: 'Object is not an iterator.' -+ }) -+ } -+ -+ // https://webidl.spec.whatwg.org/#create-sequence-from-iterable -+ while (true) { -+ const { done, value } = method.next() -+ -+ if (done) { -+ break -+ } -+ -+ seq.push(converter(value)) -+ } -+ -+ return seq -+ } -+} -+ -+// https://webidl.spec.whatwg.org/#es-to-record -+webidl.recordConverter = function (keyConverter, valueConverter) { -+ return (O) => { -+ // 1. If Type(O) is not Object, throw a TypeError. -+ if (webidl.util.Type(O) !== 'Object') { -+ throw webidl.errors.exception({ -+ header: 'Record', -+ message: `Value of type ${webidl.util.Type(O)} is not an Object.` -+ }) -+ } -+ -+ // 2. Let result be a new empty instance of record. -+ const result = {} -+ -+ if (!types.isProxy(O)) { -+ // Object.keys only returns enumerable properties -+ const keys = Object.keys(O) -+ -+ for (const key of keys) { -+ // 1. Let typedKey be key converted to an IDL value of type K. -+ const typedKey = keyConverter(key) -+ -+ // 2. Let value be ? Get(O, key). -+ // 3. Let typedValue be value converted to an IDL value of type V. -+ const typedValue = valueConverter(O[key]) -+ -+ // 4. Set result[typedKey] to typedValue. -+ result[typedKey] = typedValue -+ } -+ -+ // 5. Return result. -+ return result -+ } -+ -+ // 3. Let keys be ? O.[[OwnPropertyKeys]](). -+ const keys = Reflect.ownKeys(O) -+ -+ // 4. For each key of keys. -+ for (const key of keys) { -+ // 1. Let desc be ? O.[[GetOwnProperty]](key). -+ const desc = Reflect.getOwnPropertyDescriptor(O, key) -+ -+ // 2. If desc is not undefined and desc.[[Enumerable]] is true: -+ if (desc?.enumerable) { -+ // 1. Let typedKey be key converted to an IDL value of type K. -+ const typedKey = keyConverter(key) -+ -+ // 2. Let value be ? Get(O, key). -+ // 3. Let typedValue be value converted to an IDL value of type V. -+ const typedValue = valueConverter(O[key]) -+ -+ // 4. Set result[typedKey] to typedValue. -+ result[typedKey] = typedValue -+ } -+ } -+ -+ // 5. Return result. -+ return result -+ } -+} -+ -+webidl.interfaceConverter = function (i) { -+ return (V, opts = {}) => { -+ if (opts.strict !== false && !(V instanceof i)) { -+ throw webidl.errors.exception({ -+ header: i.name, -+ message: `Expected ${V} to be an instance of ${i.name}.` -+ }) -+ } -+ -+ return V -+ } -+} -+ -+webidl.dictionaryConverter = function (converters) { -+ return (dictionary) => { -+ const type = webidl.util.Type(dictionary) -+ const dict = {} -+ -+ if (type === 'Null' || type === 'Undefined') { -+ return dict -+ } else if (type !== 'Object') { -+ throw webidl.errors.exception({ -+ header: 'Dictionary', -+ message: `Expected ${dictionary} to be one of: Null, Undefined, Object.` -+ }) -+ } -+ -+ for (const options of converters) { -+ const { key, defaultValue, required, converter } = options -+ -+ if (required === true) { -+ if (!hasOwn(dictionary, key)) { -+ throw webidl.errors.exception({ -+ header: 'Dictionary', -+ message: `Missing required key "${key}".` -+ }) -+ } -+ } -+ -+ let value = dictionary[key] -+ const hasDefault = hasOwn(options, 'defaultValue') -+ -+ // Only use defaultValue if value is undefined and -+ // a defaultValue options was provided. -+ if (hasDefault && value !== null) { -+ value = value ?? defaultValue -+ } -+ -+ // A key can be optional and have no default value. -+ // When this happens, do not perform a conversion, -+ // and do not assign the key a value. -+ if (required || hasDefault || value !== undefined) { -+ value = converter(value) -+ -+ if ( -+ options.allowedValues && -+ !options.allowedValues.includes(value) -+ ) { -+ throw webidl.errors.exception({ -+ header: 'Dictionary', -+ message: `${value} is not an accepted type. Expected one of ${options.allowedValues.join(', ')}.` -+ }) -+ } -+ -+ dict[key] = value -+ } -+ } -+ -+ return dict -+ } -+} -+ -+webidl.nullableConverter = function (converter) { -+ return (V) => { -+ if (V === null) { -+ return V -+ } -+ -+ return converter(V) -+ } -+} -+ -+// https://webidl.spec.whatwg.org/#es-DOMString -+webidl.converters.DOMString = function (V, opts = {}) { -+ // 1. If V is null and the conversion is to an IDL type -+ // associated with the [LegacyNullToEmptyString] -+ // extended attribute, then return the DOMString value -+ // that represents the empty string. -+ if (V === null && opts.legacyNullToEmptyString) { -+ return '' -+ } -+ -+ // 2. Let x be ? ToString(V). -+ if (typeof V === 'symbol') { -+ throw new TypeError('Could not convert argument of type symbol to string.') -+ } -+ -+ // 3. Return the IDL DOMString value that represents the -+ // same sequence of code units as the one the -+ // ECMAScript String value x represents. -+ return String(V) -+} -+ -+// https://webidl.spec.whatwg.org/#es-ByteString -+webidl.converters.ByteString = function (V) { -+ // 1. Let x be ? ToString(V). -+ // Note: DOMString converter perform ? ToString(V) -+ const x = webidl.converters.DOMString(V) -+ -+ // 2. If the value of any element of x is greater than -+ // 255, then throw a TypeError. -+ for (let index = 0; index < x.length; index++) { -+ if (x.charCodeAt(index) > 255) { -+ throw new TypeError( -+ 'Cannot convert argument to a ByteString because the character at ' + -+ `index ${index} has a value of ${x.charCodeAt(index)} which is greater than 255.` -+ ) -+ } -+ } -+ -+ // 3. Return an IDL ByteString value whose length is the -+ // length of x, and where the value of each element is -+ // the value of the corresponding element of x. -+ return x -+} -+ -+// https://webidl.spec.whatwg.org/#es-USVString -+webidl.converters.USVString = toUSVString -+ -+// https://webidl.spec.whatwg.org/#es-boolean -+webidl.converters.boolean = function (V) { -+ // 1. Let x be the result of computing ToBoolean(V). -+ const x = Boolean(V) -+ -+ // 2. Return the IDL boolean value that is the one that represents -+ // the same truth value as the ECMAScript Boolean value x. -+ return x -+} -+ -+// https://webidl.spec.whatwg.org/#es-any -+webidl.converters.any = function (V) { -+ return V -+} -+ -+// https://webidl.spec.whatwg.org/#es-long-long -+webidl.converters['long long'] = function (V) { -+ // 1. Let x be ? ConvertToInt(V, 64, "signed"). -+ const x = webidl.util.ConvertToInt(V, 64, 'signed') -+ -+ // 2. Return the IDL long long value that represents -+ // the same numeric value as x. -+ return x -+} -+ -+// https://webidl.spec.whatwg.org/#es-unsigned-long-long -+webidl.converters['unsigned long long'] = function (V) { -+ // 1. Let x be ? ConvertToInt(V, 64, "unsigned"). -+ const x = webidl.util.ConvertToInt(V, 64, 'unsigned') -+ -+ // 2. Return the IDL unsigned long long value that -+ // represents the same numeric value as x. -+ return x -+} -+ -+// https://webidl.spec.whatwg.org/#es-unsigned-long -+webidl.converters['unsigned long'] = function (V) { -+ // 1. Let x be ? ConvertToInt(V, 32, "unsigned"). -+ const x = webidl.util.ConvertToInt(V, 32, 'unsigned') -+ -+ // 2. Return the IDL unsigned long value that -+ // represents the same numeric value as x. -+ return x -+} -+ -+// https://webidl.spec.whatwg.org/#es-unsigned-short -+webidl.converters['unsigned short'] = function (V, opts) { -+ // 1. Let x be ? ConvertToInt(V, 16, "unsigned"). -+ const x = webidl.util.ConvertToInt(V, 16, 'unsigned', opts) -+ -+ // 2. Return the IDL unsigned short value that represents -+ // the same numeric value as x. -+ return x -+} -+ -+// https://webidl.spec.whatwg.org/#idl-ArrayBuffer -+webidl.converters.ArrayBuffer = function (V, opts = {}) { -+ // 1. If Type(V) is not Object, or V does not have an -+ // [[ArrayBufferData]] internal slot, then throw a -+ // TypeError. -+ // see: https://tc39.es/ecma262/#sec-properties-of-the-arraybuffer-instances -+ // see: https://tc39.es/ecma262/#sec-properties-of-the-sharedarraybuffer-instances -+ if ( -+ webidl.util.Type(V) !== 'Object' || -+ !types.isAnyArrayBuffer(V) -+ ) { -+ throw webidl.errors.conversionFailed({ -+ prefix: `${V}`, -+ argument: `${V}`, -+ types: ['ArrayBuffer'] -+ }) -+ } -+ -+ // 2. If the conversion is not to an IDL type associated -+ // with the [AllowShared] extended attribute, and -+ // IsSharedArrayBuffer(V) is true, then throw a -+ // TypeError. -+ if (opts.allowShared === false && types.isSharedArrayBuffer(V)) { -+ throw webidl.errors.exception({ -+ header: 'ArrayBuffer', -+ message: 'SharedArrayBuffer is not allowed.' -+ }) -+ } -+ -+ // 3. If the conversion is not to an IDL type associated -+ // with the [AllowResizable] extended attribute, and -+ // IsResizableArrayBuffer(V) is true, then throw a -+ // TypeError. -+ // Note: resizable ArrayBuffers are currently a proposal. -+ -+ // 4. Return the IDL ArrayBuffer value that is a -+ // reference to the same object as V. -+ return V -+} -+ -+webidl.converters.TypedArray = function (V, T, opts = {}) { -+ // 1. Let T be the IDL type V is being converted to. -+ -+ // 2. If Type(V) is not Object, or V does not have a -+ // [[TypedArrayName]] internal slot with a value -+ // equal to T’s name, then throw a TypeError. -+ if ( -+ webidl.util.Type(V) !== 'Object' || -+ !types.isTypedArray(V) || -+ V.constructor.name !== T.name -+ ) { -+ throw webidl.errors.conversionFailed({ -+ prefix: `${T.name}`, -+ argument: `${V}`, -+ types: [T.name] -+ }) -+ } -+ -+ // 3. If the conversion is not to an IDL type associated -+ // with the [AllowShared] extended attribute, and -+ // IsSharedArrayBuffer(V.[[ViewedArrayBuffer]]) is -+ // true, then throw a TypeError. -+ if (opts.allowShared === false && types.isSharedArrayBuffer(V.buffer)) { -+ throw webidl.errors.exception({ -+ header: 'ArrayBuffer', -+ message: 'SharedArrayBuffer is not allowed.' -+ }) -+ } -+ -+ // 4. If the conversion is not to an IDL type associated -+ // with the [AllowResizable] extended attribute, and -+ // IsResizableArrayBuffer(V.[[ViewedArrayBuffer]]) is -+ // true, then throw a TypeError. -+ // Note: resizable array buffers are currently a proposal -+ -+ // 5. Return the IDL value of type T that is a reference -+ // to the same object as V. -+ return V -+} -+ -+webidl.converters.DataView = function (V, opts = {}) { -+ // 1. If Type(V) is not Object, or V does not have a -+ // [[DataView]] internal slot, then throw a TypeError. -+ if (webidl.util.Type(V) !== 'Object' || !types.isDataView(V)) { -+ throw webidl.errors.exception({ -+ header: 'DataView', -+ message: 'Object is not a DataView.' -+ }) -+ } -+ -+ // 2. If the conversion is not to an IDL type associated -+ // with the [AllowShared] extended attribute, and -+ // IsSharedArrayBuffer(V.[[ViewedArrayBuffer]]) is true, -+ // then throw a TypeError. -+ if (opts.allowShared === false && types.isSharedArrayBuffer(V.buffer)) { -+ throw webidl.errors.exception({ -+ header: 'ArrayBuffer', -+ message: 'SharedArrayBuffer is not allowed.' -+ }) -+ } -+ -+ // 3. If the conversion is not to an IDL type associated -+ // with the [AllowResizable] extended attribute, and -+ // IsResizableArrayBuffer(V.[[ViewedArrayBuffer]]) is -+ // true, then throw a TypeError. -+ // Note: resizable ArrayBuffers are currently a proposal -+ -+ // 4. Return the IDL DataView value that is a reference -+ // to the same object as V. -+ return V -+} -+ -+// https://webidl.spec.whatwg.org/#BufferSource -+webidl.converters.BufferSource = function (V, opts = {}) { -+ if (types.isAnyArrayBuffer(V)) { -+ return webidl.converters.ArrayBuffer(V, opts) -+ } -+ -+ if (types.isTypedArray(V)) { -+ return webidl.converters.TypedArray(V, V.constructor) -+ } -+ -+ if (types.isDataView(V)) { -+ return webidl.converters.DataView(V, opts) -+ } -+ -+ throw new TypeError(`Could not convert ${V} to a BufferSource.`) -+} -+ -+webidl.converters['sequence'] = webidl.sequenceConverter( -+ webidl.converters.ByteString -+) -+ -+webidl.converters['sequence>'] = webidl.sequenceConverter( -+ webidl.converters['sequence'] -+) -+ -+webidl.converters['record'] = webidl.recordConverter( -+ webidl.converters.ByteString, -+ webidl.converters.ByteString -+) -+ -+module.exports = { -+ webidl -+} -+ -+ -+/***/ }), -+ -+/***/ 6451: -+/***/ ((module) => { -+ -+"use strict"; -+ -+ -+/** -+ * @see https://encoding.spec.whatwg.org/#concept-encoding-get -+ * @param {string|undefined} label -+ */ -+function getEncoding (label) { -+ if (!label) { -+ return 'failure' -+ } -+ -+ // 1. Remove any leading and trailing ASCII whitespace from label. -+ // 2. If label is an ASCII case-insensitive match for any of the -+ // labels listed in the table below, then return the -+ // corresponding encoding; otherwise return failure. -+ switch (label.trim().toLowerCase()) { -+ case 'unicode-1-1-utf-8': -+ case 'unicode11utf8': -+ case 'unicode20utf8': -+ case 'utf-8': -+ case 'utf8': -+ case 'x-unicode20utf8': -+ return 'UTF-8' -+ case '866': -+ case 'cp866': -+ case 'csibm866': -+ case 'ibm866': -+ return 'IBM866' -+ case 'csisolatin2': -+ case 'iso-8859-2': -+ case 'iso-ir-101': -+ case 'iso8859-2': -+ case 'iso88592': -+ case 'iso_8859-2': -+ case 'iso_8859-2:1987': -+ case 'l2': -+ case 'latin2': -+ return 'ISO-8859-2' -+ case 'csisolatin3': -+ case 'iso-8859-3': -+ case 'iso-ir-109': -+ case 'iso8859-3': -+ case 'iso88593': -+ case 'iso_8859-3': -+ case 'iso_8859-3:1988': -+ case 'l3': -+ case 'latin3': -+ return 'ISO-8859-3' -+ case 'csisolatin4': -+ case 'iso-8859-4': -+ case 'iso-ir-110': -+ case 'iso8859-4': -+ case 'iso88594': -+ case 'iso_8859-4': -+ case 'iso_8859-4:1988': -+ case 'l4': -+ case 'latin4': -+ return 'ISO-8859-4' -+ case 'csisolatincyrillic': -+ case 'cyrillic': -+ case 'iso-8859-5': -+ case 'iso-ir-144': -+ case 'iso8859-5': -+ case 'iso88595': -+ case 'iso_8859-5': -+ case 'iso_8859-5:1988': -+ return 'ISO-8859-5' -+ case 'arabic': -+ case 'asmo-708': -+ case 'csiso88596e': -+ case 'csiso88596i': -+ case 'csisolatinarabic': -+ case 'ecma-114': -+ case 'iso-8859-6': -+ case 'iso-8859-6-e': -+ case 'iso-8859-6-i': -+ case 'iso-ir-127': -+ case 'iso8859-6': -+ case 'iso88596': -+ case 'iso_8859-6': -+ case 'iso_8859-6:1987': -+ return 'ISO-8859-6' -+ case 'csisolatingreek': -+ case 'ecma-118': -+ case 'elot_928': -+ case 'greek': -+ case 'greek8': -+ case 'iso-8859-7': -+ case 'iso-ir-126': -+ case 'iso8859-7': -+ case 'iso88597': -+ case 'iso_8859-7': -+ case 'iso_8859-7:1987': -+ case 'sun_eu_greek': -+ return 'ISO-8859-7' -+ case 'csiso88598e': -+ case 'csisolatinhebrew': -+ case 'hebrew': -+ case 'iso-8859-8': -+ case 'iso-8859-8-e': -+ case 'iso-ir-138': -+ case 'iso8859-8': -+ case 'iso88598': -+ case 'iso_8859-8': -+ case 'iso_8859-8:1988': -+ case 'visual': -+ return 'ISO-8859-8' -+ case 'csiso88598i': -+ case 'iso-8859-8-i': -+ case 'logical': -+ return 'ISO-8859-8-I' -+ case 'csisolatin6': -+ case 'iso-8859-10': -+ case 'iso-ir-157': -+ case 'iso8859-10': -+ case 'iso885910': -+ case 'l6': -+ case 'latin6': -+ return 'ISO-8859-10' -+ case 'iso-8859-13': -+ case 'iso8859-13': -+ case 'iso885913': -+ return 'ISO-8859-13' -+ case 'iso-8859-14': -+ case 'iso8859-14': -+ case 'iso885914': -+ return 'ISO-8859-14' -+ case 'csisolatin9': -+ case 'iso-8859-15': -+ case 'iso8859-15': -+ case 'iso885915': -+ case 'iso_8859-15': -+ case 'l9': -+ return 'ISO-8859-15' -+ case 'iso-8859-16': -+ return 'ISO-8859-16' -+ case 'cskoi8r': -+ case 'koi': -+ case 'koi8': -+ case 'koi8-r': -+ case 'koi8_r': -+ return 'KOI8-R' -+ case 'koi8-ru': -+ case 'koi8-u': -+ return 'KOI8-U' -+ case 'csmacintosh': -+ case 'mac': -+ case 'macintosh': -+ case 'x-mac-roman': -+ return 'macintosh' -+ case 'iso-8859-11': -+ case 'iso8859-11': -+ case 'iso885911': -+ case 'tis-620': -+ case 'windows-874': -+ return 'windows-874' -+ case 'cp1250': -+ case 'windows-1250': -+ case 'x-cp1250': -+ return 'windows-1250' -+ case 'cp1251': -+ case 'windows-1251': -+ case 'x-cp1251': -+ return 'windows-1251' -+ case 'ansi_x3.4-1968': -+ case 'ascii': -+ case 'cp1252': -+ case 'cp819': -+ case 'csisolatin1': -+ case 'ibm819': -+ case 'iso-8859-1': -+ case 'iso-ir-100': -+ case 'iso8859-1': -+ case 'iso88591': -+ case 'iso_8859-1': -+ case 'iso_8859-1:1987': -+ case 'l1': -+ case 'latin1': -+ case 'us-ascii': -+ case 'windows-1252': -+ case 'x-cp1252': -+ return 'windows-1252' -+ case 'cp1253': -+ case 'windows-1253': -+ case 'x-cp1253': -+ return 'windows-1253' -+ case 'cp1254': -+ case 'csisolatin5': -+ case 'iso-8859-9': -+ case 'iso-ir-148': -+ case 'iso8859-9': -+ case 'iso88599': -+ case 'iso_8859-9': -+ case 'iso_8859-9:1989': -+ case 'l5': -+ case 'latin5': -+ case 'windows-1254': -+ case 'x-cp1254': -+ return 'windows-1254' -+ case 'cp1255': -+ case 'windows-1255': -+ case 'x-cp1255': -+ return 'windows-1255' -+ case 'cp1256': -+ case 'windows-1256': -+ case 'x-cp1256': -+ return 'windows-1256' -+ case 'cp1257': -+ case 'windows-1257': -+ case 'x-cp1257': -+ return 'windows-1257' -+ case 'cp1258': -+ case 'windows-1258': -+ case 'x-cp1258': -+ return 'windows-1258' -+ case 'x-mac-cyrillic': -+ case 'x-mac-ukrainian': -+ return 'x-mac-cyrillic' -+ case 'chinese': -+ case 'csgb2312': -+ case 'csiso58gb231280': -+ case 'gb2312': -+ case 'gb_2312': -+ case 'gb_2312-80': -+ case 'gbk': -+ case 'iso-ir-58': -+ case 'x-gbk': -+ return 'GBK' -+ case 'gb18030': -+ return 'gb18030' -+ case 'big5': -+ case 'big5-hkscs': -+ case 'cn-big5': -+ case 'csbig5': -+ case 'x-x-big5': -+ return 'Big5' -+ case 'cseucpkdfmtjapanese': -+ case 'euc-jp': -+ case 'x-euc-jp': -+ return 'EUC-JP' -+ case 'csiso2022jp': -+ case 'iso-2022-jp': -+ return 'ISO-2022-JP' -+ case 'csshiftjis': -+ case 'ms932': -+ case 'ms_kanji': -+ case 'shift-jis': -+ case 'shift_jis': -+ case 'sjis': -+ case 'windows-31j': -+ case 'x-sjis': -+ return 'Shift_JIS' -+ case 'cseuckr': -+ case 'csksc56011987': -+ case 'euc-kr': -+ case 'iso-ir-149': -+ case 'korean': -+ case 'ks_c_5601-1987': -+ case 'ks_c_5601-1989': -+ case 'ksc5601': -+ case 'ksc_5601': -+ case 'windows-949': -+ return 'EUC-KR' -+ case 'csiso2022kr': -+ case 'hz-gb-2312': -+ case 'iso-2022-cn': -+ case 'iso-2022-cn-ext': -+ case 'iso-2022-kr': -+ case 'replacement': -+ return 'replacement' -+ case 'unicodefffe': -+ case 'utf-16be': -+ return 'UTF-16BE' -+ case 'csunicode': -+ case 'iso-10646-ucs-2': -+ case 'ucs-2': -+ case 'unicode': -+ case 'unicodefeff': -+ case 'utf-16': -+ case 'utf-16le': -+ return 'UTF-16LE' -+ case 'x-user-defined': -+ return 'x-user-defined' -+ default: return 'failure' -+ } -+} -+ -+module.exports = { -+ getEncoding -+} -+ -+ -+/***/ }), -+ -+/***/ 5398: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { -+ staticPropertyDescriptors, -+ readOperation, -+ fireAProgressEvent -+} = __nccwpck_require__(1650) -+const { -+ kState, -+ kError, -+ kResult, -+ kEvents, -+ kAborted -+} = __nccwpck_require__(5554) -+const { webidl } = __nccwpck_require__(5611) -+const { kEnumerableProperty } = __nccwpck_require__(929) -+ -+class FileReader extends EventTarget { -+ constructor () { -+ super() -+ -+ this[kState] = 'empty' -+ this[kResult] = null -+ this[kError] = null -+ this[kEvents] = { -+ loadend: null, -+ error: null, -+ abort: null, -+ load: null, -+ progress: null, -+ loadstart: null -+ } -+ } -+ -+ /** -+ * @see https://w3c.github.io/FileAPI/#dfn-readAsArrayBuffer -+ * @param {import('buffer').Blob} blob -+ */ -+ readAsArrayBuffer (blob) { -+ webidl.brandCheck(this, FileReader) -+ -+ webidl.argumentLengthCheck(arguments, 1, { header: 'FileReader.readAsArrayBuffer' }) -+ -+ blob = webidl.converters.Blob(blob, { strict: false }) -+ -+ // The readAsArrayBuffer(blob) method, when invoked, -+ // must initiate a read operation for blob with ArrayBuffer. -+ readOperation(this, blob, 'ArrayBuffer') -+ } -+ -+ /** -+ * @see https://w3c.github.io/FileAPI/#readAsBinaryString -+ * @param {import('buffer').Blob} blob -+ */ -+ readAsBinaryString (blob) { -+ webidl.brandCheck(this, FileReader) -+ -+ webidl.argumentLengthCheck(arguments, 1, { header: 'FileReader.readAsBinaryString' }) -+ -+ blob = webidl.converters.Blob(blob, { strict: false }) -+ -+ // The readAsBinaryString(blob) method, when invoked, -+ // must initiate a read operation for blob with BinaryString. -+ readOperation(this, blob, 'BinaryString') -+ } -+ -+ /** -+ * @see https://w3c.github.io/FileAPI/#readAsDataText -+ * @param {import('buffer').Blob} blob -+ * @param {string?} encoding -+ */ -+ readAsText (blob, encoding = undefined) { -+ webidl.brandCheck(this, FileReader) -+ -+ webidl.argumentLengthCheck(arguments, 1, { header: 'FileReader.readAsText' }) -+ -+ blob = webidl.converters.Blob(blob, { strict: false }) -+ -+ if (encoding !== undefined) { -+ encoding = webidl.converters.DOMString(encoding) -+ } -+ -+ // The readAsText(blob, encoding) method, when invoked, -+ // must initiate a read operation for blob with Text and encoding. -+ readOperation(this, blob, 'Text', encoding) -+ } -+ -+ /** -+ * @see https://w3c.github.io/FileAPI/#dfn-readAsDataURL -+ * @param {import('buffer').Blob} blob -+ */ -+ readAsDataURL (blob) { -+ webidl.brandCheck(this, FileReader) -+ -+ webidl.argumentLengthCheck(arguments, 1, { header: 'FileReader.readAsDataURL' }) -+ -+ blob = webidl.converters.Blob(blob, { strict: false }) -+ -+ // The readAsDataURL(blob) method, when invoked, must -+ // initiate a read operation for blob with DataURL. -+ readOperation(this, blob, 'DataURL') -+ } -+ -+ /** -+ * @see https://w3c.github.io/FileAPI/#dfn-abort -+ */ -+ abort () { -+ // 1. If this's state is "empty" or if this's state is -+ // "done" set this's result to null and terminate -+ // this algorithm. -+ if (this[kState] === 'empty' || this[kState] === 'done') { -+ this[kResult] = null -+ return -+ } -+ -+ // 2. If this's state is "loading" set this's state to -+ // "done" and set this's result to null. -+ if (this[kState] === 'loading') { -+ this[kState] = 'done' -+ this[kResult] = null -+ } -+ -+ // 3. If there are any tasks from this on the file reading -+ // task source in an affiliated task queue, then remove -+ // those tasks from that task queue. -+ this[kAborted] = true -+ -+ // 4. Terminate the algorithm for the read method being processed. -+ // TODO -+ -+ // 5. Fire a progress event called abort at this. -+ fireAProgressEvent('abort', this) -+ -+ // 6. If this's state is not "loading", fire a progress -+ // event called loadend at this. -+ if (this[kState] !== 'loading') { -+ fireAProgressEvent('loadend', this) -+ } -+ } -+ -+ /** -+ * @see https://w3c.github.io/FileAPI/#dom-filereader-readystate -+ */ -+ get readyState () { -+ webidl.brandCheck(this, FileReader) -+ -+ switch (this[kState]) { -+ case 'empty': return this.EMPTY -+ case 'loading': return this.LOADING -+ case 'done': return this.DONE -+ } -+ } -+ -+ /** -+ * @see https://w3c.github.io/FileAPI/#dom-filereader-result -+ */ -+ get result () { -+ webidl.brandCheck(this, FileReader) -+ -+ // The result attribute’s getter, when invoked, must return -+ // this's result. -+ return this[kResult] -+ } -+ -+ /** -+ * @see https://w3c.github.io/FileAPI/#dom-filereader-error -+ */ -+ get error () { -+ webidl.brandCheck(this, FileReader) -+ -+ // The error attribute’s getter, when invoked, must return -+ // this's error. -+ return this[kError] -+ } -+ -+ get onloadend () { -+ webidl.brandCheck(this, FileReader) -+ -+ return this[kEvents].loadend -+ } -+ -+ set onloadend (fn) { -+ webidl.brandCheck(this, FileReader) -+ -+ if (this[kEvents].loadend) { -+ this.removeEventListener('loadend', this[kEvents].loadend) -+ } -+ -+ if (typeof fn === 'function') { -+ this[kEvents].loadend = fn -+ this.addEventListener('loadend', fn) -+ } else { -+ this[kEvents].loadend = null -+ } -+ } -+ -+ get onerror () { -+ webidl.brandCheck(this, FileReader) -+ -+ return this[kEvents].error -+ } -+ -+ set onerror (fn) { -+ webidl.brandCheck(this, FileReader) -+ -+ if (this[kEvents].error) { -+ this.removeEventListener('error', this[kEvents].error) -+ } -+ -+ if (typeof fn === 'function') { -+ this[kEvents].error = fn -+ this.addEventListener('error', fn) -+ } else { -+ this[kEvents].error = null -+ } -+ } -+ -+ get onloadstart () { -+ webidl.brandCheck(this, FileReader) -+ -+ return this[kEvents].loadstart -+ } -+ -+ set onloadstart (fn) { -+ webidl.brandCheck(this, FileReader) -+ -+ if (this[kEvents].loadstart) { -+ this.removeEventListener('loadstart', this[kEvents].loadstart) -+ } -+ -+ if (typeof fn === 'function') { -+ this[kEvents].loadstart = fn -+ this.addEventListener('loadstart', fn) -+ } else { -+ this[kEvents].loadstart = null -+ } -+ } -+ -+ get onprogress () { -+ webidl.brandCheck(this, FileReader) -+ -+ return this[kEvents].progress -+ } -+ -+ set onprogress (fn) { -+ webidl.brandCheck(this, FileReader) -+ -+ if (this[kEvents].progress) { -+ this.removeEventListener('progress', this[kEvents].progress) -+ } -+ -+ if (typeof fn === 'function') { -+ this[kEvents].progress = fn -+ this.addEventListener('progress', fn) -+ } else { -+ this[kEvents].progress = null -+ } -+ } -+ -+ get onload () { -+ webidl.brandCheck(this, FileReader) -+ -+ return this[kEvents].load -+ } -+ -+ set onload (fn) { -+ webidl.brandCheck(this, FileReader) -+ -+ if (this[kEvents].load) { -+ this.removeEventListener('load', this[kEvents].load) -+ } -+ -+ if (typeof fn === 'function') { -+ this[kEvents].load = fn -+ this.addEventListener('load', fn) -+ } else { -+ this[kEvents].load = null -+ } -+ } -+ -+ get onabort () { -+ webidl.brandCheck(this, FileReader) -+ -+ return this[kEvents].abort -+ } -+ -+ set onabort (fn) { -+ webidl.brandCheck(this, FileReader) -+ -+ if (this[kEvents].abort) { -+ this.removeEventListener('abort', this[kEvents].abort) -+ } -+ -+ if (typeof fn === 'function') { -+ this[kEvents].abort = fn -+ this.addEventListener('abort', fn) -+ } else { -+ this[kEvents].abort = null -+ } -+ } -+} -+ -+// https://w3c.github.io/FileAPI/#dom-filereader-empty -+FileReader.EMPTY = FileReader.prototype.EMPTY = 0 -+// https://w3c.github.io/FileAPI/#dom-filereader-loading -+FileReader.LOADING = FileReader.prototype.LOADING = 1 -+// https://w3c.github.io/FileAPI/#dom-filereader-done -+FileReader.DONE = FileReader.prototype.DONE = 2 -+ -+Object.defineProperties(FileReader.prototype, { -+ EMPTY: staticPropertyDescriptors, -+ LOADING: staticPropertyDescriptors, -+ DONE: staticPropertyDescriptors, -+ readAsArrayBuffer: kEnumerableProperty, -+ readAsBinaryString: kEnumerableProperty, -+ readAsText: kEnumerableProperty, -+ readAsDataURL: kEnumerableProperty, -+ abort: kEnumerableProperty, -+ readyState: kEnumerableProperty, -+ result: kEnumerableProperty, -+ error: kEnumerableProperty, -+ onloadstart: kEnumerableProperty, -+ onprogress: kEnumerableProperty, -+ onload: kEnumerableProperty, -+ onabort: kEnumerableProperty, -+ onerror: kEnumerableProperty, -+ onloadend: kEnumerableProperty, -+ [Symbol.toStringTag]: { -+ value: 'FileReader', -+ writable: false, -+ enumerable: false, -+ configurable: true -+ } -+}) -+ -+Object.defineProperties(FileReader, { -+ EMPTY: staticPropertyDescriptors, -+ LOADING: staticPropertyDescriptors, -+ DONE: staticPropertyDescriptors -+}) -+ -+module.exports = { -+ FileReader -+} -+ -+ -+/***/ }), -+ -+/***/ 8314: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { webidl } = __nccwpck_require__(5611) -+ -+const kState = Symbol('ProgressEvent state') -+ -+/** -+ * @see https://xhr.spec.whatwg.org/#progressevent -+ */ -+class ProgressEvent extends Event { -+ constructor (type, eventInitDict = {}) { -+ type = webidl.converters.DOMString(type) -+ eventInitDict = webidl.converters.ProgressEventInit(eventInitDict ?? {}) -+ -+ super(type, eventInitDict) -+ -+ this[kState] = { -+ lengthComputable: eventInitDict.lengthComputable, -+ loaded: eventInitDict.loaded, -+ total: eventInitDict.total -+ } -+ } -+ -+ get lengthComputable () { -+ webidl.brandCheck(this, ProgressEvent) -+ -+ return this[kState].lengthComputable -+ } -+ -+ get loaded () { -+ webidl.brandCheck(this, ProgressEvent) -+ -+ return this[kState].loaded -+ } -+ -+ get total () { -+ webidl.brandCheck(this, ProgressEvent) -+ -+ return this[kState].total -+ } -+} -+ -+webidl.converters.ProgressEventInit = webidl.dictionaryConverter([ -+ { -+ key: 'lengthComputable', -+ converter: webidl.converters.boolean, -+ defaultValue: false -+ }, -+ { -+ key: 'loaded', -+ converter: webidl.converters['unsigned long long'], -+ defaultValue: 0 -+ }, -+ { -+ key: 'total', -+ converter: webidl.converters['unsigned long long'], -+ defaultValue: 0 -+ }, -+ { -+ key: 'bubbles', -+ converter: webidl.converters.boolean, -+ defaultValue: false -+ }, -+ { -+ key: 'cancelable', -+ converter: webidl.converters.boolean, -+ defaultValue: false -+ }, -+ { -+ key: 'composed', -+ converter: webidl.converters.boolean, -+ defaultValue: false -+ } -+]) -+ -+module.exports = { -+ ProgressEvent -+} -+ -+ -+/***/ }), -+ -+/***/ 5554: -+/***/ ((module) => { -+ -+"use strict"; -+ -+ -+module.exports = { -+ kState: Symbol('FileReader state'), -+ kResult: Symbol('FileReader result'), -+ kError: Symbol('FileReader error'), -+ kLastProgressEventFired: Symbol('FileReader last progress event fired timestamp'), -+ kEvents: Symbol('FileReader events'), -+ kAborted: Symbol('FileReader aborted') -+} -+ -+ -+/***/ }), -+ -+/***/ 1650: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { -+ kState, -+ kError, -+ kResult, -+ kAborted, -+ kLastProgressEventFired -+} = __nccwpck_require__(5554) -+const { ProgressEvent } = __nccwpck_require__(8314) -+const { getEncoding } = __nccwpck_require__(6451) -+const { DOMException } = __nccwpck_require__(9951) -+const { serializeAMimeType, parseMIMEType } = __nccwpck_require__(1827) -+const { types } = __nccwpck_require__(3837) -+const { StringDecoder } = __nccwpck_require__(1576) -+const { btoa } = __nccwpck_require__(4300) -+ -+/** @type {PropertyDescriptor} */ -+const staticPropertyDescriptors = { -+ enumerable: true, -+ writable: false, -+ configurable: false -+} -+ -+/** -+ * @see https://w3c.github.io/FileAPI/#readOperation -+ * @param {import('./filereader').FileReader} fr -+ * @param {import('buffer').Blob} blob -+ * @param {string} type -+ * @param {string?} encodingName -+ */ -+function readOperation (fr, blob, type, encodingName) { -+ // 1. If fr’s state is "loading", throw an InvalidStateError -+ // DOMException. -+ if (fr[kState] === 'loading') { -+ throw new DOMException('Invalid state', 'InvalidStateError') -+ } -+ -+ // 2. Set fr’s state to "loading". -+ fr[kState] = 'loading' -+ -+ // 3. Set fr’s result to null. -+ fr[kResult] = null -+ -+ // 4. Set fr’s error to null. -+ fr[kError] = null -+ -+ // 5. Let stream be the result of calling get stream on blob. -+ /** @type {import('stream/web').ReadableStream} */ -+ const stream = blob.stream() -+ -+ // 6. Let reader be the result of getting a reader from stream. -+ const reader = stream.getReader() -+ -+ // 7. Let bytes be an empty byte sequence. -+ /** @type {Uint8Array[]} */ -+ const bytes = [] -+ -+ // 8. Let chunkPromise be the result of reading a chunk from -+ // stream with reader. -+ let chunkPromise = reader.read() -+ -+ // 9. Let isFirstChunk be true. -+ let isFirstChunk = true -+ -+ // 10. In parallel, while true: -+ // Note: "In parallel" just means non-blocking -+ // Note 2: readOperation itself cannot be async as double -+ // reading the body would then reject the promise, instead -+ // of throwing an error. -+ ;(async () => { -+ while (!fr[kAborted]) { -+ // 1. Wait for chunkPromise to be fulfilled or rejected. -+ try { -+ const { done, value } = await chunkPromise -+ -+ // 2. If chunkPromise is fulfilled, and isFirstChunk is -+ // true, queue a task to fire a progress event called -+ // loadstart at fr. -+ if (isFirstChunk && !fr[kAborted]) { -+ queueMicrotask(() => { -+ fireAProgressEvent('loadstart', fr) -+ }) -+ } -+ -+ // 3. Set isFirstChunk to false. -+ isFirstChunk = false -+ -+ // 4. If chunkPromise is fulfilled with an object whose -+ // done property is false and whose value property is -+ // a Uint8Array object, run these steps: -+ if (!done && types.isUint8Array(value)) { -+ // 1. Let bs be the byte sequence represented by the -+ // Uint8Array object. -+ -+ // 2. Append bs to bytes. -+ bytes.push(value) -+ -+ // 3. If roughly 50ms have passed since these steps -+ // were last invoked, queue a task to fire a -+ // progress event called progress at fr. -+ if ( -+ ( -+ fr[kLastProgressEventFired] === undefined || -+ Date.now() - fr[kLastProgressEventFired] >= 50 -+ ) && -+ !fr[kAborted] -+ ) { -+ fr[kLastProgressEventFired] = Date.now() -+ queueMicrotask(() => { -+ fireAProgressEvent('progress', fr) -+ }) -+ } -+ -+ // 4. Set chunkPromise to the result of reading a -+ // chunk from stream with reader. -+ chunkPromise = reader.read() -+ } else if (done) { -+ // 5. Otherwise, if chunkPromise is fulfilled with an -+ // object whose done property is true, queue a task -+ // to run the following steps and abort this algorithm: -+ queueMicrotask(() => { -+ // 1. Set fr’s state to "done". -+ fr[kState] = 'done' -+ -+ // 2. Let result be the result of package data given -+ // bytes, type, blob’s type, and encodingName. -+ try { -+ const result = packageData(bytes, type, blob.type, encodingName) -+ -+ // 4. Else: -+ -+ if (fr[kAborted]) { -+ return -+ } -+ -+ // 1. Set fr’s result to result. -+ fr[kResult] = result -+ -+ // 2. Fire a progress event called load at the fr. -+ fireAProgressEvent('load', fr) -+ } catch (error) { -+ // 3. If package data threw an exception error: -+ -+ // 1. Set fr’s error to error. -+ fr[kError] = error -+ -+ // 2. Fire a progress event called error at fr. -+ fireAProgressEvent('error', fr) -+ } -+ -+ // 5. If fr’s state is not "loading", fire a progress -+ // event called loadend at the fr. -+ if (fr[kState] !== 'loading') { -+ fireAProgressEvent('loadend', fr) -+ } -+ }) -+ -+ break -+ } -+ } catch (error) { -+ if (fr[kAborted]) { -+ return -+ } -+ -+ // 6. Otherwise, if chunkPromise is rejected with an -+ // error error, queue a task to run the following -+ // steps and abort this algorithm: -+ queueMicrotask(() => { -+ // 1. Set fr’s state to "done". -+ fr[kState] = 'done' -+ -+ // 2. Set fr’s error to error. -+ fr[kError] = error -+ -+ // 3. Fire a progress event called error at fr. -+ fireAProgressEvent('error', fr) -+ -+ // 4. If fr’s state is not "loading", fire a progress -+ // event called loadend at fr. -+ if (fr[kState] !== 'loading') { -+ fireAProgressEvent('loadend', fr) -+ } -+ }) -+ -+ break -+ } -+ } -+ })() -+} -+ -+/** -+ * @see https://w3c.github.io/FileAPI/#fire-a-progress-event -+ * @see https://dom.spec.whatwg.org/#concept-event-fire -+ * @param {string} e The name of the event -+ * @param {import('./filereader').FileReader} reader -+ */ -+function fireAProgressEvent (e, reader) { -+ // The progress event e does not bubble. e.bubbles must be false -+ // The progress event e is NOT cancelable. e.cancelable must be false -+ const event = new ProgressEvent(e, { -+ bubbles: false, -+ cancelable: false -+ }) -+ -+ reader.dispatchEvent(event) -+} -+ -+/** -+ * @see https://w3c.github.io/FileAPI/#blob-package-data -+ * @param {Uint8Array[]} bytes -+ * @param {string} type -+ * @param {string?} mimeType -+ * @param {string?} encodingName -+ */ -+function packageData (bytes, type, mimeType, encodingName) { -+ // 1. A Blob has an associated package data algorithm, given -+ // bytes, a type, a optional mimeType, and a optional -+ // encodingName, which switches on type and runs the -+ // associated steps: -+ -+ switch (type) { -+ case 'DataURL': { -+ // 1. Return bytes as a DataURL [RFC2397] subject to -+ // the considerations below: -+ // * Use mimeType as part of the Data URL if it is -+ // available in keeping with the Data URL -+ // specification [RFC2397]. -+ // * If mimeType is not available return a Data URL -+ // without a media-type. [RFC2397]. -+ -+ // https://datatracker.ietf.org/doc/html/rfc2397#section-3 -+ // dataurl := "data:" [ mediatype ] [ ";base64" ] "," data -+ // mediatype := [ type "/" subtype ] *( ";" parameter ) -+ // data := *urlchar -+ // parameter := attribute "=" value -+ let dataURL = 'data:' -+ -+ const parsed = parseMIMEType(mimeType || 'application/octet-stream') -+ -+ if (parsed !== 'failure') { -+ dataURL += serializeAMimeType(parsed) -+ } -+ -+ dataURL += ';base64,' -+ -+ const decoder = new StringDecoder('latin1') -+ -+ for (const chunk of bytes) { -+ dataURL += btoa(decoder.write(chunk)) -+ } -+ -+ dataURL += btoa(decoder.end()) -+ -+ return dataURL -+ } -+ case 'Text': { -+ // 1. Let encoding be failure -+ let encoding = 'failure' -+ -+ // 2. If the encodingName is present, set encoding to the -+ // result of getting an encoding from encodingName. -+ if (encodingName) { -+ encoding = getEncoding(encodingName) -+ } -+ -+ // 3. If encoding is failure, and mimeType is present: -+ if (encoding === 'failure' && mimeType) { -+ // 1. Let type be the result of parse a MIME type -+ // given mimeType. -+ const type = parseMIMEType(mimeType) -+ -+ // 2. If type is not failure, set encoding to the result -+ // of getting an encoding from type’s parameters["charset"]. -+ if (type !== 'failure') { -+ encoding = getEncoding(type.parameters.get('charset')) -+ } -+ } -+ -+ // 4. If encoding is failure, then set encoding to UTF-8. -+ if (encoding === 'failure') { -+ encoding = 'UTF-8' -+ } -+ -+ // 5. Decode bytes using fallback encoding encoding, and -+ // return the result. -+ return decode(bytes, encoding) -+ } -+ case 'ArrayBuffer': { -+ // Return a new ArrayBuffer whose contents are bytes. -+ const sequence = combineByteSequences(bytes) -+ -+ return sequence.buffer -+ } -+ case 'BinaryString': { -+ // Return bytes as a binary string, in which every byte -+ // is represented by a code unit of equal value [0..255]. -+ let binaryString = '' -+ -+ const decoder = new StringDecoder('latin1') -+ -+ for (const chunk of bytes) { -+ binaryString += decoder.write(chunk) -+ } -+ -+ binaryString += decoder.end() -+ -+ return binaryString -+ } -+ } -+} -+ -+/** -+ * @see https://encoding.spec.whatwg.org/#decode -+ * @param {Uint8Array[]} ioQueue -+ * @param {string} encoding -+ */ -+function decode (ioQueue, encoding) { -+ const bytes = combineByteSequences(ioQueue) -+ -+ // 1. Let BOMEncoding be the result of BOM sniffing ioQueue. -+ const BOMEncoding = BOMSniffing(bytes) -+ -+ let slice = 0 -+ -+ // 2. If BOMEncoding is non-null: -+ if (BOMEncoding !== null) { -+ // 1. Set encoding to BOMEncoding. -+ encoding = BOMEncoding -+ -+ // 2. Read three bytes from ioQueue, if BOMEncoding is -+ // UTF-8; otherwise read two bytes. -+ // (Do nothing with those bytes.) -+ slice = BOMEncoding === 'UTF-8' ? 3 : 2 -+ } -+ -+ // 3. Process a queue with an instance of encoding’s -+ // decoder, ioQueue, output, and "replacement". -+ -+ // 4. Return output. -+ -+ const sliced = bytes.slice(slice) -+ return new TextDecoder(encoding).decode(sliced) -+} -+ -+/** -+ * @see https://encoding.spec.whatwg.org/#bom-sniff -+ * @param {Uint8Array} ioQueue -+ */ -+function BOMSniffing (ioQueue) { -+ // 1. Let BOM be the result of peeking 3 bytes from ioQueue, -+ // converted to a byte sequence. -+ const [a, b, c] = ioQueue -+ -+ // 2. For each of the rows in the table below, starting with -+ // the first one and going down, if BOM starts with the -+ // bytes given in the first column, then return the -+ // encoding given in the cell in the second column of that -+ // row. Otherwise, return null. -+ if (a === 0xEF && b === 0xBB && c === 0xBF) { -+ return 'UTF-8' -+ } else if (a === 0xFE && b === 0xFF) { -+ return 'UTF-16BE' -+ } else if (a === 0xFF && b === 0xFE) { -+ return 'UTF-16LE' -+ } -+ -+ return null -+} -+ -+/** -+ * @param {Uint8Array[]} sequences -+ */ -+function combineByteSequences (sequences) { -+ const size = sequences.reduce((a, b) => { -+ return a + b.byteLength -+ }, 0) -+ -+ let offset = 0 -+ -+ return sequences.reduce((a, b) => { -+ a.set(b, offset) -+ offset += b.byteLength -+ return a -+ }, new Uint8Array(size)) -+} -+ -+module.exports = { -+ staticPropertyDescriptors, -+ readOperation, -+ fireAProgressEvent -+} -+ -+ -+/***/ }), -+ -+/***/ 7718: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+// We include a version number for the Dispatcher API. In case of breaking changes, -+// this version number must be increased to avoid conflicts. -+const globalDispatcher = Symbol.for('undici.globalDispatcher.1') -+const { InvalidArgumentError } = __nccwpck_require__(1878) -+const Agent = __nccwpck_require__(823) -+ -+if (getGlobalDispatcher() === undefined) { -+ setGlobalDispatcher(new Agent()) -+} -+ -+function setGlobalDispatcher (agent) { -+ if (!agent || typeof agent.dispatch !== 'function') { -+ throw new InvalidArgumentError('Argument agent must implement Agent') -+ } -+ Object.defineProperty(globalThis, globalDispatcher, { -+ value: agent, -+ writable: true, -+ enumerable: false, -+ configurable: false -+ }) -+} -+ -+function getGlobalDispatcher () { -+ return globalThis[globalDispatcher] -+} -+ -+module.exports = { -+ setGlobalDispatcher, -+ getGlobalDispatcher -+} -+ -+ -+/***/ }), -+ -+/***/ 8291: -+/***/ ((module) => { -+ -+"use strict"; -+ -+ -+module.exports = class DecoratorHandler { -+ constructor (handler) { -+ this.handler = handler -+ } -+ -+ onConnect (...args) { -+ return this.handler.onConnect(...args) -+ } -+ -+ onError (...args) { -+ return this.handler.onError(...args) -+ } -+ -+ onUpgrade (...args) { -+ return this.handler.onUpgrade(...args) -+ } -+ -+ onHeaders (...args) { -+ return this.handler.onHeaders(...args) -+ } -+ -+ onData (...args) { -+ return this.handler.onData(...args) -+ } -+ -+ onComplete (...args) { -+ return this.handler.onComplete(...args) -+ } -+ -+ onBodySent (...args) { -+ return this.handler.onBodySent(...args) -+ } -+} -+ -+ -+/***/ }), -+ -+/***/ 9944: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const util = __nccwpck_require__(929) -+const { kBodyUsed } = __nccwpck_require__(3745) -+const assert = __nccwpck_require__(9491) -+const { InvalidArgumentError } = __nccwpck_require__(1878) -+const EE = __nccwpck_require__(2361) -+ -+const redirectableStatusCodes = [300, 301, 302, 303, 307, 308] -+ -+const kBody = Symbol('body') -+ -+class BodyAsyncIterable { -+ constructor (body) { -+ this[kBody] = body -+ this[kBodyUsed] = false -+ } -+ -+ async * [Symbol.asyncIterator] () { -+ assert(!this[kBodyUsed], 'disturbed') -+ this[kBodyUsed] = true -+ yield * this[kBody] -+ } -+} -+ -+class RedirectHandler { -+ constructor (dispatch, maxRedirections, opts, handler) { -+ if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) { -+ throw new InvalidArgumentError('maxRedirections must be a positive number') -+ } -+ -+ util.validateHandler(handler, opts.method, opts.upgrade) -+ -+ this.dispatch = dispatch -+ this.location = null -+ this.abort = null -+ this.opts = { ...opts, maxRedirections: 0 } // opts must be a copy -+ this.maxRedirections = maxRedirections -+ this.handler = handler -+ this.history = [] -+ -+ if (util.isStream(this.opts.body)) { -+ // TODO (fix): Provide some way for the user to cache the file to e.g. /tmp -+ // so that it can be dispatched again? -+ // TODO (fix): Do we need 100-expect support to provide a way to do this properly? -+ if (util.bodyLength(this.opts.body) === 0) { -+ this.opts.body -+ .on('data', function () { -+ assert(false) -+ }) -+ } -+ -+ if (typeof this.opts.body.readableDidRead !== 'boolean') { -+ this.opts.body[kBodyUsed] = false -+ EE.prototype.on.call(this.opts.body, 'data', function () { -+ this[kBodyUsed] = true -+ }) -+ } -+ } else if (this.opts.body && typeof this.opts.body.pipeTo === 'function') { -+ // TODO (fix): We can't access ReadableStream internal state -+ // to determine whether or not it has been disturbed. This is just -+ // a workaround. -+ this.opts.body = new BodyAsyncIterable(this.opts.body) -+ } else if ( -+ this.opts.body && -+ typeof this.opts.body !== 'string' && -+ !ArrayBuffer.isView(this.opts.body) && -+ util.isIterable(this.opts.body) -+ ) { -+ // TODO: Should we allow re-using iterable if !this.opts.idempotent -+ // or through some other flag? -+ this.opts.body = new BodyAsyncIterable(this.opts.body) -+ } -+ } -+ -+ onConnect (abort) { -+ this.abort = abort -+ this.handler.onConnect(abort, { history: this.history }) -+ } -+ -+ onUpgrade (statusCode, headers, socket) { -+ this.handler.onUpgrade(statusCode, headers, socket) -+ } -+ -+ onError (error) { -+ this.handler.onError(error) -+ } -+ -+ onHeaders (statusCode, headers, resume, statusText) { -+ this.location = this.history.length >= this.maxRedirections || util.isDisturbed(this.opts.body) -+ ? null -+ : parseLocation(statusCode, headers) -+ -+ if (this.opts.origin) { -+ this.history.push(new URL(this.opts.path, this.opts.origin)) -+ } -+ -+ if (!this.location) { -+ return this.handler.onHeaders(statusCode, headers, resume, statusText) -+ } -+ -+ const { origin, pathname, search } = util.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin))) -+ const path = search ? `${pathname}${search}` : pathname -+ -+ // Remove headers referring to the original URL. -+ // By default it is Host only, unless it's a 303 (see below), which removes also all Content-* headers. -+ // https://tools.ietf.org/html/rfc7231#section-6.4 -+ this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin) -+ this.opts.path = path -+ this.opts.origin = origin -+ this.opts.maxRedirections = 0 -+ this.opts.query = null -+ -+ // https://tools.ietf.org/html/rfc7231#section-6.4.4 -+ // In case of HTTP 303, always replace method to be either HEAD or GET -+ if (statusCode === 303 && this.opts.method !== 'HEAD') { -+ this.opts.method = 'GET' -+ this.opts.body = null -+ } -+ } -+ -+ onData (chunk) { -+ if (this.location) { -+ /* -+ https://tools.ietf.org/html/rfc7231#section-6.4 -+ -+ TLDR: undici always ignores 3xx response bodies. -+ -+ Redirection is used to serve the requested resource from another URL, so it is assumes that -+ no body is generated (and thus can be ignored). Even though generating a body is not prohibited. -+ -+ For status 301, 302, 303, 307 and 308 (the latter from RFC 7238), the specs mention that the body usually -+ (which means it's optional and not mandated) contain just an hyperlink to the value of -+ the Location response header, so the body can be ignored safely. -+ -+ For status 300, which is "Multiple Choices", the spec mentions both generating a Location -+ response header AND a response body with the other possible location to follow. -+ Since the spec explicitily chooses not to specify a format for such body and leave it to -+ servers and browsers implementors, we ignore the body as there is no specified way to eventually parse it. -+ */ -+ } else { -+ return this.handler.onData(chunk) -+ } -+ } -+ -+ onComplete (trailers) { -+ if (this.location) { -+ /* -+ https://tools.ietf.org/html/rfc7231#section-6.4 -+ -+ TLDR: undici always ignores 3xx response trailers as they are not expected in case of redirections -+ and neither are useful if present. -+ -+ See comment on onData method above for more detailed informations. -+ */ -+ -+ this.location = null -+ this.abort = null -+ -+ this.dispatch(this.opts, this) -+ } else { -+ this.handler.onComplete(trailers) -+ } -+ } -+ -+ onBodySent (chunk) { -+ if (this.handler.onBodySent) { -+ this.handler.onBodySent(chunk) -+ } -+ } -+} -+ -+function parseLocation (statusCode, headers) { -+ if (redirectableStatusCodes.indexOf(statusCode) === -1) { -+ return null -+ } -+ -+ for (let i = 0; i < headers.length; i += 2) { -+ if (headers[i].toString().toLowerCase() === 'location') { -+ return headers[i + 1] -+ } -+ } -+} -+ -+// https://tools.ietf.org/html/rfc7231#section-6.4.4 -+function shouldRemoveHeader (header, removeContent, unknownOrigin) { -+ if (header.length === 4) { -+ return util.headerNameToString(header) === 'host' -+ } -+ if (removeContent && util.headerNameToString(header).startsWith('content-')) { -+ return true -+ } -+ if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19)) { -+ const name = util.headerNameToString(header) -+ return name === 'authorization' || name === 'cookie' || name === 'proxy-authorization' -+ } -+ return false -+} -+ -+// https://tools.ietf.org/html/rfc7231#section-6.4 -+function cleanRequestHeaders (headers, removeContent, unknownOrigin) { -+ const ret = [] -+ if (Array.isArray(headers)) { -+ for (let i = 0; i < headers.length; i += 2) { -+ if (!shouldRemoveHeader(headers[i], removeContent, unknownOrigin)) { -+ ret.push(headers[i], headers[i + 1]) -+ } -+ } -+ } else if (headers && typeof headers === 'object') { -+ for (const key of Object.keys(headers)) { -+ if (!shouldRemoveHeader(key, removeContent, unknownOrigin)) { -+ ret.push(key, headers[key]) -+ } -+ } -+ } else { -+ assert(headers == null, 'headers must be an object or an array') -+ } -+ return ret -+} -+ -+module.exports = RedirectHandler -+ -+ -+/***/ }), -+ -+/***/ 6032: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+const assert = __nccwpck_require__(9491) -+ -+const { kRetryHandlerDefaultRetry } = __nccwpck_require__(3745) -+const { RequestRetryError } = __nccwpck_require__(1878) -+const { isDisturbed, parseHeaders, parseRangeHeader } = __nccwpck_require__(929) -+ -+function calculateRetryAfterHeader (retryAfter) { -+ const current = Date.now() -+ const diff = new Date(retryAfter).getTime() - current -+ -+ return diff -+} -+ -+class RetryHandler { -+ constructor (opts, handlers) { -+ const { retryOptions, ...dispatchOpts } = opts -+ const { -+ // Retry scoped -+ retry: retryFn, -+ maxRetries, -+ maxTimeout, -+ minTimeout, -+ timeoutFactor, -+ // Response scoped -+ methods, -+ errorCodes, -+ retryAfter, -+ statusCodes -+ } = retryOptions ?? {} -+ -+ this.dispatch = handlers.dispatch -+ this.handler = handlers.handler -+ this.opts = dispatchOpts -+ this.abort = null -+ this.aborted = false -+ this.retryOpts = { -+ retry: retryFn ?? RetryHandler[kRetryHandlerDefaultRetry], -+ retryAfter: retryAfter ?? true, -+ maxTimeout: maxTimeout ?? 30 * 1000, // 30s, -+ timeout: minTimeout ?? 500, // .5s -+ timeoutFactor: timeoutFactor ?? 2, -+ maxRetries: maxRetries ?? 5, -+ // What errors we should retry -+ methods: methods ?? ['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE', 'TRACE'], -+ // Indicates which errors to retry -+ statusCodes: statusCodes ?? [500, 502, 503, 504, 429], -+ // List of errors to retry -+ errorCodes: errorCodes ?? [ -+ 'ECONNRESET', -+ 'ECONNREFUSED', -+ 'ENOTFOUND', -+ 'ENETDOWN', -+ 'ENETUNREACH', -+ 'EHOSTDOWN', -+ 'EHOSTUNREACH', -+ 'EPIPE' -+ ] -+ } -+ -+ this.retryCount = 0 -+ this.start = 0 -+ this.end = null -+ this.etag = null -+ this.resume = null -+ -+ // Handle possible onConnect duplication -+ this.handler.onConnect(reason => { -+ this.aborted = true -+ if (this.abort) { -+ this.abort(reason) -+ } else { -+ this.reason = reason -+ } -+ }) -+ } -+ -+ onRequestSent () { -+ if (this.handler.onRequestSent) { -+ this.handler.onRequestSent() -+ } -+ } -+ -+ onUpgrade (statusCode, headers, socket) { -+ if (this.handler.onUpgrade) { -+ this.handler.onUpgrade(statusCode, headers, socket) -+ } -+ } -+ -+ onConnect (abort) { -+ if (this.aborted) { -+ abort(this.reason) -+ } else { -+ this.abort = abort -+ } -+ } -+ -+ onBodySent (chunk) { -+ if (this.handler.onBodySent) return this.handler.onBodySent(chunk) -+ } -+ -+ static [kRetryHandlerDefaultRetry] (err, { state, opts }, cb) { -+ const { statusCode, code, headers } = err -+ const { method, retryOptions } = opts -+ const { -+ maxRetries, -+ timeout, -+ maxTimeout, -+ timeoutFactor, -+ statusCodes, -+ errorCodes, -+ methods -+ } = retryOptions -+ let { counter, currentTimeout } = state -+ -+ currentTimeout = -+ currentTimeout != null && currentTimeout > 0 ? currentTimeout : timeout -+ -+ // Any code that is not a Undici's originated and allowed to retry -+ if ( -+ code && -+ code !== 'UND_ERR_REQ_RETRY' && -+ code !== 'UND_ERR_SOCKET' && -+ !errorCodes.includes(code) -+ ) { -+ cb(err) -+ return -+ } -+ -+ // If a set of method are provided and the current method is not in the list -+ if (Array.isArray(methods) && !methods.includes(method)) { -+ cb(err) -+ return -+ } -+ -+ // If a set of status code are provided and the current status code is not in the list -+ if ( -+ statusCode != null && -+ Array.isArray(statusCodes) && -+ !statusCodes.includes(statusCode) -+ ) { -+ cb(err) -+ return -+ } -+ -+ // If we reached the max number of retries -+ if (counter > maxRetries) { -+ cb(err) -+ return -+ } -+ -+ let retryAfterHeader = headers != null && headers['retry-after'] -+ if (retryAfterHeader) { -+ retryAfterHeader = Number(retryAfterHeader) -+ retryAfterHeader = isNaN(retryAfterHeader) -+ ? calculateRetryAfterHeader(retryAfterHeader) -+ : retryAfterHeader * 1e3 // Retry-After is in seconds -+ } -+ -+ const retryTimeout = -+ retryAfterHeader > 0 -+ ? Math.min(retryAfterHeader, maxTimeout) -+ : Math.min(currentTimeout * timeoutFactor ** counter, maxTimeout) -+ -+ state.currentTimeout = retryTimeout -+ -+ setTimeout(() => cb(null), retryTimeout) -+ } -+ -+ onHeaders (statusCode, rawHeaders, resume, statusMessage) { -+ const headers = parseHeaders(rawHeaders) -+ -+ this.retryCount += 1 -+ -+ if (statusCode >= 300) { -+ this.abort( -+ new RequestRetryError('Request failed', statusCode, { -+ headers, -+ count: this.retryCount -+ }) -+ ) -+ return false -+ } -+ -+ // Checkpoint for resume from where we left it -+ if (this.resume != null) { -+ this.resume = null -+ -+ if (statusCode !== 206) { -+ return true -+ } -+ -+ const contentRange = parseRangeHeader(headers['content-range']) -+ // If no content range -+ if (!contentRange) { -+ this.abort( -+ new RequestRetryError('Content-Range mismatch', statusCode, { -+ headers, -+ count: this.retryCount -+ }) -+ ) -+ return false -+ } -+ -+ // Let's start with a weak etag check -+ if (this.etag != null && this.etag !== headers.etag) { -+ this.abort( -+ new RequestRetryError('ETag mismatch', statusCode, { -+ headers, -+ count: this.retryCount -+ }) -+ ) -+ return false -+ } -+ -+ const { start, size, end = size } = contentRange -+ -+ assert(this.start === start, 'content-range mismatch') -+ assert(this.end == null || this.end === end, 'content-range mismatch') -+ -+ this.resume = resume -+ return true -+ } -+ -+ if (this.end == null) { -+ if (statusCode === 206) { -+ // First time we receive 206 -+ const range = parseRangeHeader(headers['content-range']) -+ -+ if (range == null) { -+ return this.handler.onHeaders( -+ statusCode, -+ rawHeaders, -+ resume, -+ statusMessage -+ ) -+ } -+ -+ const { start, size, end = size } = range -+ -+ assert( -+ start != null && Number.isFinite(start) && this.start !== start, -+ 'content-range mismatch' -+ ) -+ assert(Number.isFinite(start)) -+ assert( -+ end != null && Number.isFinite(end) && this.end !== end, -+ 'invalid content-length' -+ ) -+ -+ this.start = start -+ this.end = end -+ } -+ -+ // We make our best to checkpoint the body for further range headers -+ if (this.end == null) { -+ const contentLength = headers['content-length'] -+ this.end = contentLength != null ? Number(contentLength) : null -+ } -+ -+ assert(Number.isFinite(this.start)) -+ assert( -+ this.end == null || Number.isFinite(this.end), -+ 'invalid content-length' -+ ) -+ -+ this.resume = resume -+ this.etag = headers.etag != null ? headers.etag : null -+ -+ return this.handler.onHeaders( -+ statusCode, -+ rawHeaders, -+ resume, -+ statusMessage -+ ) -+ } -+ -+ const err = new RequestRetryError('Request failed', statusCode, { -+ headers, -+ count: this.retryCount -+ }) -+ -+ this.abort(err) -+ -+ return false -+ } -+ -+ onData (chunk) { -+ this.start += chunk.length -+ -+ return this.handler.onData(chunk) -+ } -+ -+ onComplete (rawTrailers) { -+ this.retryCount = 0 -+ return this.handler.onComplete(rawTrailers) -+ } -+ -+ onError (err) { -+ if (this.aborted || isDisturbed(this.opts.body)) { -+ return this.handler.onError(err) -+ } -+ -+ this.retryOpts.retry( -+ err, -+ { -+ state: { counter: this.retryCount++, currentTimeout: this.retryAfter }, -+ opts: { retryOptions: this.retryOpts, ...this.opts } -+ }, -+ onRetry.bind(this) -+ ) -+ -+ function onRetry (err) { -+ if (err != null || this.aborted || isDisturbed(this.opts.body)) { -+ return this.handler.onError(err) -+ } -+ -+ if (this.start !== 0) { -+ this.opts = { -+ ...this.opts, -+ headers: { -+ ...this.opts.headers, -+ range: `bytes=${this.start}-${this.end ?? ''}` -+ } -+ } -+ } -+ -+ try { -+ this.dispatch(this.opts, this) -+ } catch (err) { -+ this.handler.onError(err) -+ } -+ } -+ } -+} -+ -+module.exports = RetryHandler -+ -+ -+/***/ }), -+ -+/***/ 9597: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const RedirectHandler = __nccwpck_require__(9944) -+ -+function createRedirectInterceptor ({ maxRedirections: defaultMaxRedirections }) { -+ return (dispatch) => { -+ return function Intercept (opts, handler) { -+ const { maxRedirections = defaultMaxRedirections } = opts -+ -+ if (!maxRedirections) { -+ return dispatch(opts, handler) -+ } -+ -+ const redirectHandler = new RedirectHandler(dispatch, maxRedirections, opts, handler) -+ opts = { ...opts, maxRedirections: 0 } // Stop sub dispatcher from also redirecting. -+ return dispatch(opts, redirectHandler) -+ } -+ } -+} -+ -+module.exports = createRedirectInterceptor -+ -+ -+/***/ }), -+ -+/***/ 2655: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+exports.SPECIAL_HEADERS = exports.HEADER_STATE = exports.MINOR = exports.MAJOR = exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS = exports.TOKEN = exports.STRICT_TOKEN = exports.HEX = exports.URL_CHAR = exports.STRICT_URL_CHAR = exports.USERINFO_CHARS = exports.MARK = exports.ALPHANUM = exports.NUM = exports.HEX_MAP = exports.NUM_MAP = exports.ALPHA = exports.FINISH = exports.H_METHOD_MAP = exports.METHOD_MAP = exports.METHODS_RTSP = exports.METHODS_ICE = exports.METHODS_HTTP = exports.METHODS = exports.LENIENT_FLAGS = exports.FLAGS = exports.TYPE = exports.ERROR = void 0; -+const utils_1 = __nccwpck_require__(4965); -+// C headers -+var ERROR; -+(function (ERROR) { -+ ERROR[ERROR["OK"] = 0] = "OK"; -+ ERROR[ERROR["INTERNAL"] = 1] = "INTERNAL"; -+ ERROR[ERROR["STRICT"] = 2] = "STRICT"; -+ ERROR[ERROR["LF_EXPECTED"] = 3] = "LF_EXPECTED"; -+ ERROR[ERROR["UNEXPECTED_CONTENT_LENGTH"] = 4] = "UNEXPECTED_CONTENT_LENGTH"; -+ ERROR[ERROR["CLOSED_CONNECTION"] = 5] = "CLOSED_CONNECTION"; -+ ERROR[ERROR["INVALID_METHOD"] = 6] = "INVALID_METHOD"; -+ ERROR[ERROR["INVALID_URL"] = 7] = "INVALID_URL"; -+ ERROR[ERROR["INVALID_CONSTANT"] = 8] = "INVALID_CONSTANT"; -+ ERROR[ERROR["INVALID_VERSION"] = 9] = "INVALID_VERSION"; -+ ERROR[ERROR["INVALID_HEADER_TOKEN"] = 10] = "INVALID_HEADER_TOKEN"; -+ ERROR[ERROR["INVALID_CONTENT_LENGTH"] = 11] = "INVALID_CONTENT_LENGTH"; -+ ERROR[ERROR["INVALID_CHUNK_SIZE"] = 12] = "INVALID_CHUNK_SIZE"; -+ ERROR[ERROR["INVALID_STATUS"] = 13] = "INVALID_STATUS"; -+ ERROR[ERROR["INVALID_EOF_STATE"] = 14] = "INVALID_EOF_STATE"; -+ ERROR[ERROR["INVALID_TRANSFER_ENCODING"] = 15] = "INVALID_TRANSFER_ENCODING"; -+ ERROR[ERROR["CB_MESSAGE_BEGIN"] = 16] = "CB_MESSAGE_BEGIN"; -+ ERROR[ERROR["CB_HEADERS_COMPLETE"] = 17] = "CB_HEADERS_COMPLETE"; -+ ERROR[ERROR["CB_MESSAGE_COMPLETE"] = 18] = "CB_MESSAGE_COMPLETE"; -+ ERROR[ERROR["CB_CHUNK_HEADER"] = 19] = "CB_CHUNK_HEADER"; -+ ERROR[ERROR["CB_CHUNK_COMPLETE"] = 20] = "CB_CHUNK_COMPLETE"; -+ ERROR[ERROR["PAUSED"] = 21] = "PAUSED"; -+ ERROR[ERROR["PAUSED_UPGRADE"] = 22] = "PAUSED_UPGRADE"; -+ ERROR[ERROR["PAUSED_H2_UPGRADE"] = 23] = "PAUSED_H2_UPGRADE"; -+ ERROR[ERROR["USER"] = 24] = "USER"; -+})(ERROR = exports.ERROR || (exports.ERROR = {})); -+var TYPE; -+(function (TYPE) { -+ TYPE[TYPE["BOTH"] = 0] = "BOTH"; -+ TYPE[TYPE["REQUEST"] = 1] = "REQUEST"; -+ TYPE[TYPE["RESPONSE"] = 2] = "RESPONSE"; -+})(TYPE = exports.TYPE || (exports.TYPE = {})); -+var FLAGS; -+(function (FLAGS) { -+ FLAGS[FLAGS["CONNECTION_KEEP_ALIVE"] = 1] = "CONNECTION_KEEP_ALIVE"; -+ FLAGS[FLAGS["CONNECTION_CLOSE"] = 2] = "CONNECTION_CLOSE"; -+ FLAGS[FLAGS["CONNECTION_UPGRADE"] = 4] = "CONNECTION_UPGRADE"; -+ FLAGS[FLAGS["CHUNKED"] = 8] = "CHUNKED"; -+ FLAGS[FLAGS["UPGRADE"] = 16] = "UPGRADE"; -+ FLAGS[FLAGS["CONTENT_LENGTH"] = 32] = "CONTENT_LENGTH"; -+ FLAGS[FLAGS["SKIPBODY"] = 64] = "SKIPBODY"; -+ FLAGS[FLAGS["TRAILING"] = 128] = "TRAILING"; -+ // 1 << 8 is unused -+ FLAGS[FLAGS["TRANSFER_ENCODING"] = 512] = "TRANSFER_ENCODING"; -+})(FLAGS = exports.FLAGS || (exports.FLAGS = {})); -+var LENIENT_FLAGS; -+(function (LENIENT_FLAGS) { -+ LENIENT_FLAGS[LENIENT_FLAGS["HEADERS"] = 1] = "HEADERS"; -+ LENIENT_FLAGS[LENIENT_FLAGS["CHUNKED_LENGTH"] = 2] = "CHUNKED_LENGTH"; -+ LENIENT_FLAGS[LENIENT_FLAGS["KEEP_ALIVE"] = 4] = "KEEP_ALIVE"; -+})(LENIENT_FLAGS = exports.LENIENT_FLAGS || (exports.LENIENT_FLAGS = {})); -+var METHODS; -+(function (METHODS) { -+ METHODS[METHODS["DELETE"] = 0] = "DELETE"; -+ METHODS[METHODS["GET"] = 1] = "GET"; -+ METHODS[METHODS["HEAD"] = 2] = "HEAD"; -+ METHODS[METHODS["POST"] = 3] = "POST"; -+ METHODS[METHODS["PUT"] = 4] = "PUT"; -+ /* pathological */ -+ METHODS[METHODS["CONNECT"] = 5] = "CONNECT"; -+ METHODS[METHODS["OPTIONS"] = 6] = "OPTIONS"; -+ METHODS[METHODS["TRACE"] = 7] = "TRACE"; -+ /* WebDAV */ -+ METHODS[METHODS["COPY"] = 8] = "COPY"; -+ METHODS[METHODS["LOCK"] = 9] = "LOCK"; -+ METHODS[METHODS["MKCOL"] = 10] = "MKCOL"; -+ METHODS[METHODS["MOVE"] = 11] = "MOVE"; -+ METHODS[METHODS["PROPFIND"] = 12] = "PROPFIND"; -+ METHODS[METHODS["PROPPATCH"] = 13] = "PROPPATCH"; -+ METHODS[METHODS["SEARCH"] = 14] = "SEARCH"; -+ METHODS[METHODS["UNLOCK"] = 15] = "UNLOCK"; -+ METHODS[METHODS["BIND"] = 16] = "BIND"; -+ METHODS[METHODS["REBIND"] = 17] = "REBIND"; -+ METHODS[METHODS["UNBIND"] = 18] = "UNBIND"; -+ METHODS[METHODS["ACL"] = 19] = "ACL"; -+ /* subversion */ -+ METHODS[METHODS["REPORT"] = 20] = "REPORT"; -+ METHODS[METHODS["MKACTIVITY"] = 21] = "MKACTIVITY"; -+ METHODS[METHODS["CHECKOUT"] = 22] = "CHECKOUT"; -+ METHODS[METHODS["MERGE"] = 23] = "MERGE"; -+ /* upnp */ -+ METHODS[METHODS["M-SEARCH"] = 24] = "M-SEARCH"; -+ METHODS[METHODS["NOTIFY"] = 25] = "NOTIFY"; -+ METHODS[METHODS["SUBSCRIBE"] = 26] = "SUBSCRIBE"; -+ METHODS[METHODS["UNSUBSCRIBE"] = 27] = "UNSUBSCRIBE"; -+ /* RFC-5789 */ -+ METHODS[METHODS["PATCH"] = 28] = "PATCH"; -+ METHODS[METHODS["PURGE"] = 29] = "PURGE"; -+ /* CalDAV */ -+ METHODS[METHODS["MKCALENDAR"] = 30] = "MKCALENDAR"; -+ /* RFC-2068, section 19.6.1.2 */ -+ METHODS[METHODS["LINK"] = 31] = "LINK"; -+ METHODS[METHODS["UNLINK"] = 32] = "UNLINK"; -+ /* icecast */ -+ METHODS[METHODS["SOURCE"] = 33] = "SOURCE"; -+ /* RFC-7540, section 11.6 */ -+ METHODS[METHODS["PRI"] = 34] = "PRI"; -+ /* RFC-2326 RTSP */ -+ METHODS[METHODS["DESCRIBE"] = 35] = "DESCRIBE"; -+ METHODS[METHODS["ANNOUNCE"] = 36] = "ANNOUNCE"; -+ METHODS[METHODS["SETUP"] = 37] = "SETUP"; -+ METHODS[METHODS["PLAY"] = 38] = "PLAY"; -+ METHODS[METHODS["PAUSE"] = 39] = "PAUSE"; -+ METHODS[METHODS["TEARDOWN"] = 40] = "TEARDOWN"; -+ METHODS[METHODS["GET_PARAMETER"] = 41] = "GET_PARAMETER"; -+ METHODS[METHODS["SET_PARAMETER"] = 42] = "SET_PARAMETER"; -+ METHODS[METHODS["REDIRECT"] = 43] = "REDIRECT"; -+ METHODS[METHODS["RECORD"] = 44] = "RECORD"; -+ /* RAOP */ -+ METHODS[METHODS["FLUSH"] = 45] = "FLUSH"; -+})(METHODS = exports.METHODS || (exports.METHODS = {})); -+exports.METHODS_HTTP = [ -+ METHODS.DELETE, -+ METHODS.GET, -+ METHODS.HEAD, -+ METHODS.POST, -+ METHODS.PUT, -+ METHODS.CONNECT, -+ METHODS.OPTIONS, -+ METHODS.TRACE, -+ METHODS.COPY, -+ METHODS.LOCK, -+ METHODS.MKCOL, -+ METHODS.MOVE, -+ METHODS.PROPFIND, -+ METHODS.PROPPATCH, -+ METHODS.SEARCH, -+ METHODS.UNLOCK, -+ METHODS.BIND, -+ METHODS.REBIND, -+ METHODS.UNBIND, -+ METHODS.ACL, -+ METHODS.REPORT, -+ METHODS.MKACTIVITY, -+ METHODS.CHECKOUT, -+ METHODS.MERGE, -+ METHODS['M-SEARCH'], -+ METHODS.NOTIFY, -+ METHODS.SUBSCRIBE, -+ METHODS.UNSUBSCRIBE, -+ METHODS.PATCH, -+ METHODS.PURGE, -+ METHODS.MKCALENDAR, -+ METHODS.LINK, -+ METHODS.UNLINK, -+ METHODS.PRI, -+ // TODO(indutny): should we allow it with HTTP? -+ METHODS.SOURCE, -+]; -+exports.METHODS_ICE = [ -+ METHODS.SOURCE, -+]; -+exports.METHODS_RTSP = [ -+ METHODS.OPTIONS, -+ METHODS.DESCRIBE, -+ METHODS.ANNOUNCE, -+ METHODS.SETUP, -+ METHODS.PLAY, -+ METHODS.PAUSE, -+ METHODS.TEARDOWN, -+ METHODS.GET_PARAMETER, -+ METHODS.SET_PARAMETER, -+ METHODS.REDIRECT, -+ METHODS.RECORD, -+ METHODS.FLUSH, -+ // For AirPlay -+ METHODS.GET, -+ METHODS.POST, -+]; -+exports.METHOD_MAP = utils_1.enumToMap(METHODS); -+exports.H_METHOD_MAP = {}; -+Object.keys(exports.METHOD_MAP).forEach((key) => { -+ if (/^H/.test(key)) { -+ exports.H_METHOD_MAP[key] = exports.METHOD_MAP[key]; -+ } -+}); -+var FINISH; -+(function (FINISH) { -+ FINISH[FINISH["SAFE"] = 0] = "SAFE"; -+ FINISH[FINISH["SAFE_WITH_CB"] = 1] = "SAFE_WITH_CB"; -+ FINISH[FINISH["UNSAFE"] = 2] = "UNSAFE"; -+})(FINISH = exports.FINISH || (exports.FINISH = {})); -+exports.ALPHA = []; -+for (let i = 'A'.charCodeAt(0); i <= 'Z'.charCodeAt(0); i++) { -+ // Upper case -+ exports.ALPHA.push(String.fromCharCode(i)); -+ // Lower case -+ exports.ALPHA.push(String.fromCharCode(i + 0x20)); -+} -+exports.NUM_MAP = { -+ 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, -+ 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, -+}; -+exports.HEX_MAP = { -+ 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, -+ 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, -+ A: 0XA, B: 0XB, C: 0XC, D: 0XD, E: 0XE, F: 0XF, -+ a: 0xa, b: 0xb, c: 0xc, d: 0xd, e: 0xe, f: 0xf, -+}; -+exports.NUM = [ -+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', -+]; -+exports.ALPHANUM = exports.ALPHA.concat(exports.NUM); -+exports.MARK = ['-', '_', '.', '!', '~', '*', '\'', '(', ')']; -+exports.USERINFO_CHARS = exports.ALPHANUM -+ .concat(exports.MARK) -+ .concat(['%', ';', ':', '&', '=', '+', '$', ',']); -+// TODO(indutny): use RFC -+exports.STRICT_URL_CHAR = [ -+ '!', '"', '$', '%', '&', '\'', -+ '(', ')', '*', '+', ',', '-', '.', '/', -+ ':', ';', '<', '=', '>', -+ '@', '[', '\\', ']', '^', '_', -+ '`', -+ '{', '|', '}', '~', -+].concat(exports.ALPHANUM); -+exports.URL_CHAR = exports.STRICT_URL_CHAR -+ .concat(['\t', '\f']); -+// All characters with 0x80 bit set to 1 -+for (let i = 0x80; i <= 0xff; i++) { -+ exports.URL_CHAR.push(i); -+} -+exports.HEX = exports.NUM.concat(['a', 'b', 'c', 'd', 'e', 'f', 'A', 'B', 'C', 'D', 'E', 'F']); -+/* Tokens as defined by rfc 2616. Also lowercases them. -+ * token = 1* -+ * separators = "(" | ")" | "<" | ">" | "@" -+ * | "," | ";" | ":" | "\" | <"> -+ * | "/" | "[" | "]" | "?" | "=" -+ * | "{" | "}" | SP | HT -+ */ -+exports.STRICT_TOKEN = [ -+ '!', '#', '$', '%', '&', '\'', -+ '*', '+', '-', '.', -+ '^', '_', '`', -+ '|', '~', -+].concat(exports.ALPHANUM); -+exports.TOKEN = exports.STRICT_TOKEN.concat([' ']); -+/* -+ * Verify that a char is a valid visible (printable) US-ASCII -+ * character or %x80-FF -+ */ -+exports.HEADER_CHARS = ['\t']; -+for (let i = 32; i <= 255; i++) { -+ if (i !== 127) { -+ exports.HEADER_CHARS.push(i); -+ } -+} -+// ',' = \x44 -+exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS.filter((c) => c !== 44); -+exports.MAJOR = exports.NUM_MAP; -+exports.MINOR = exports.MAJOR; -+var HEADER_STATE; -+(function (HEADER_STATE) { -+ HEADER_STATE[HEADER_STATE["GENERAL"] = 0] = "GENERAL"; -+ HEADER_STATE[HEADER_STATE["CONNECTION"] = 1] = "CONNECTION"; -+ HEADER_STATE[HEADER_STATE["CONTENT_LENGTH"] = 2] = "CONTENT_LENGTH"; -+ HEADER_STATE[HEADER_STATE["TRANSFER_ENCODING"] = 3] = "TRANSFER_ENCODING"; -+ HEADER_STATE[HEADER_STATE["UPGRADE"] = 4] = "UPGRADE"; -+ HEADER_STATE[HEADER_STATE["CONNECTION_KEEP_ALIVE"] = 5] = "CONNECTION_KEEP_ALIVE"; -+ HEADER_STATE[HEADER_STATE["CONNECTION_CLOSE"] = 6] = "CONNECTION_CLOSE"; -+ HEADER_STATE[HEADER_STATE["CONNECTION_UPGRADE"] = 7] = "CONNECTION_UPGRADE"; -+ HEADER_STATE[HEADER_STATE["TRANSFER_ENCODING_CHUNKED"] = 8] = "TRANSFER_ENCODING_CHUNKED"; -+})(HEADER_STATE = exports.HEADER_STATE || (exports.HEADER_STATE = {})); -+exports.SPECIAL_HEADERS = { -+ 'connection': HEADER_STATE.CONNECTION, -+ 'content-length': HEADER_STATE.CONTENT_LENGTH, -+ 'proxy-connection': HEADER_STATE.CONNECTION, -+ 'transfer-encoding': HEADER_STATE.TRANSFER_ENCODING, -+ 'upgrade': HEADER_STATE.UPGRADE, -+}; -+//# sourceMappingURL=constants.js.map -+ -+/***/ }), -+ -+/***/ 5102: -+/***/ ((module) => { -+ -+module.exports = 'AGFzbQEAAAABMAhgAX8Bf2ADf39/AX9gBH9/f38Bf2AAAGADf39/AGABfwBgAn9/AGAGf39/f39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQACA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAA0ZFAwMEAAAFAAAAAAAABQEFAAUFBQAABgAAAAAGBgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAABAQcAAAUFAwABBAUBcAESEgUDAQACBggBfwFBgNQECwfRBSIGbWVtb3J5AgALX2luaXRpYWxpemUACRlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQALbGxodHRwX2luaXQAChhsbGh0dHBfc2hvdWxkX2tlZXBfYWxpdmUAQQxsbGh0dHBfYWxsb2MADAZtYWxsb2MARgtsbGh0dHBfZnJlZQANBGZyZWUASA9sbGh0dHBfZ2V0X3R5cGUADhVsbGh0dHBfZ2V0X2h0dHBfbWFqb3IADxVsbGh0dHBfZ2V0X2h0dHBfbWlub3IAEBFsbGh0dHBfZ2V0X21ldGhvZAARFmxsaHR0cF9nZXRfc3RhdHVzX2NvZGUAEhJsbGh0dHBfZ2V0X3VwZ3JhZGUAEwxsbGh0dHBfcmVzZXQAFA5sbGh0dHBfZXhlY3V0ZQAVFGxsaHR0cF9zZXR0aW5nc19pbml0ABYNbGxodHRwX2ZpbmlzaAAXDGxsaHR0cF9wYXVzZQAYDWxsaHR0cF9yZXN1bWUAGRtsbGh0dHBfcmVzdW1lX2FmdGVyX3VwZ3JhZGUAGhBsbGh0dHBfZ2V0X2Vycm5vABsXbGxodHRwX2dldF9lcnJvcl9yZWFzb24AHBdsbGh0dHBfc2V0X2Vycm9yX3JlYXNvbgAdFGxsaHR0cF9nZXRfZXJyb3JfcG9zAB4RbGxodHRwX2Vycm5vX25hbWUAHxJsbGh0dHBfbWV0aG9kX25hbWUAIBJs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ADcDACAAQShqQgA3AwAgAEEgakIANwMAIABBEGpCADcDACAAQQhqQgA3AwAgAEHdATYCHEEAC3sBAX8CQCAAKAIMIgMNAAJAIAAoAgRFDQAgACABNgIECwJAIAAgASACEMSAgIAAIgMNACAAKAIMDwsgACADNgIcQQAhAyAAKAIEIgFFDQAgACABIAIgACgCCBGBgICAAAAiAUUNACAAIAI2AhQgACABNgIMIAEhAwsgAwvk8wEDDn8DfgR/I4CAgIAAQRBrIgMkgICAgAAgASEEIAEhBSABIQYgASEHIAEhCCABIQkgASEKIAEhCyABIQwgASENIAEhDiABIQ8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCHCIQQX9qDt0B2gEB2QECAwQFBgcICQoLDA0O2AEPENcBERLWARMUFRYXGBkaG+AB3wEcHR7VAR8gISIjJCXUASYnKCkqKyzTAdIBLS7RAdABLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVG2wFHSElKzwHOAUvNAUzMAU1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4ABgQGCAYMBhAGFAYYBhwGIAYkB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QAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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FCAAIBA2AgxBACEQDLIBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxNCyAAQdMANgIcIAAgATYCFCAAIBA2AgxBACEQDLEBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxRCyAAQeUANgIcIAAgATYCFCAAIBA2AgxBACEQDLABCyAAQQA2AhwgACABNgIUIABBxoqAgAA2AhAgAEEHNgIMQQAhEAyvAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMSQsgAEHSADYCHCAAIAE2AhQgACAQNgIMQQAhEAyuAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMSQsgAEHTADYCHCAAIAE2AhQgACAQNgIMQQAhEAytAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMTQsgAEHlADYCHCAAIAE2AhQgACAQNgIMQQAhEAysAQsgAEEANgIcIAAgATYCFCAAQdyIgIAANgIQIABBBzYCDEEAIRAMqwELIBBBP0cNASABQQFqIQELQQUhEAyQAQtBACEQIABBADYCHCAAIAE2AhQgAEH9koCAADYCECAAQQc2AgwMqAELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEILIABB0gA2AhwgACABNgIUIAAgEDYCDEEAIRAMpwELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEILIABB0wA2AhwgACABNgIUIAAgEDYCDEEAIRAMpgELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEYLIABB5QA2AhwgACABNgIUIAAgEDYCDEEAIRAMpQELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDD8LIABB0gA2AhwgACAUNgIUIAAgATYCDEEAIRAMpAELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDD8LIABB0wA2AhwgACAUNgIUIAAgATYCDEEAIRAMowELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDEMLIABB5QA2AhwgACAU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YWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21ldGhvZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lYCBjYWxsYmFjayBlcnJvcgBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNlcnZlcgBJbnZhbGlkIGhlYWRlciB2YWx1ZSBjaGFyAEludmFsaWQgaGVhZGVyIGZpZWxkIGNoYXIAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl92ZXJzaW9uAEludmFsaWQgbWlub3IgdmVyc2lvbgBJbnZhbGlkIG1ham9yIHZlcnNpb24ARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgdmVyc2lvbgBFeHBlY3RlZCBDUkxGIGFmdGVyIHZlcnNpb24ASW52YWxpZCBIVFRQIHZlcnNpb24ASW52YWxpZCBoZWFkZXIgdG9rZW4AU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl91cmwASW52YWxpZCBjaGFyYWN0ZXJzIGluIHVybABVbmV4cGVjdGVkIHN0YXJ0IGNoYXIgaW4gdXJsAERvdWJsZSBAIGluIHVybABFbXB0eSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXJhY3RlciBpbiBDb250ZW50LUxlbmd0aABEdXBsaWNhdGUgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyIGluIHVybCBwYXRoAENvbnRlbnQtTGVuZ3RoIGNhbid0IGJlIHByZXNlbnQgd2l0aCBUcmFuc2Zlci1FbmNvZGluZwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBzaXplAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25faGVhZGVyX3ZhbHVlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgdmFsdWUATWlzc2luZyBleHBlY3RlZCBMRiBhZnRlciBoZWFkZXIgdmFsdWUASW52YWxpZCBgVHJhbnNmZXItRW5jb2RpbmdgIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fbmFtZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIG5hbWUAUGF1c2Ugb24gQ09OTkVDVC9VcGdyYWRlAFBhdXNlIG9uIFBSSS9VcGdyYWRlAEV4cGVjdGVkIEhUVFAvMiBDb25uZWN0aW9uIFByZWZhY2UAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9tZXRob2QARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgbWV0aG9kAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25faGVhZGVyX2ZpZWxkAFBhdXNlZABJbnZhbGlkIHdvcmQgZW5jb3VudGVyZWQASW52YWxpZCBtZXRob2QgZW5jb3VudGVyZWQAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzY2hlbWEAUmVxdWVzdCBoYXMgaW52YWxpZCBgVHJhbnNmZXItRW5jb2RpbmdgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX0NIVU5LX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX05BTUVfQ09NUExFVEUASFBFX0NCX01FU1NBR0VfQ09NUExFVEUASFBFX0NCX01FVEhPRF9DT01QTEVURQBIUEVfQ0JfSEVBREVSX0ZJRUxEX0NPTVBMRVRFAERFTEVURQBIUEVfSU5WQUxJRF9FT0ZfU1RBVEUASU5WQUxJRF9TU0xfQ0VSVElGSUNBVEUAUEFVU0UATk9fUkVTUE9OU0UAVU5TVVBQT1JURURfTUVESUFfVFlQRQBHT05FAE5PVF9BQ0NFUFRBQkxFAFNFUlZJQ0VfVU5BVkFJTEFCTEUAUkFOR0VfTk9UX1NBVElTRklBQkxFAE9SSUdJTl9JU19VTlJFQUNIQUJMRQBSRVNQT05TRV9JU19TVEFMRQBQVVJHRQBNRVJHRQBSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFAFJFUVVFU1RfSEVBREVSX1RPT19MQVJHRQBQQVlMT0FEX1RPT19MQVJHRQBJTlNVRkZJQ0lFTlRfU1RPUkFHRQBIUEVfUEFVU0VEX1VQR1JBREUASFBFX1BBVVNFRF9IMl9VUEdSQURFAFNPVVJDRQBBTk5PVU5DRQBUUkFDRQBIUEVfVU5FWFBFQ1RFRF9TUEFDRQBERVNDUklCRQBVTlNVQlNDUklCRQBSRUNPUkQASFBFX0lOVkFMSURfTUVUSE9EAE5PVF9GT1VORABQUk9QRklORABVTkJJTkQAUkVCSU5EAFVOQVVUSE9SSVpFRABNRVRIT0RfTk9UX0FMTE9XRUQASFRUUF9WRVJTSU9OX05PVF9TVVBQT1JURUQAQUxSRUFEWV9SRVBPUlRFRABBQ0NFUFRFRABOT1RfSU1QTEVNRU5URUQATE9PUF9ERVRFQ1RFRABIUEVfQ1JfRVhQRUNURUQASFBFX0xGX0VYUEVDVEVEAENSRUFURUQASU1fVVNFRABIUEVfUEFVU0VEAFRJTUVPVVRfT0NDVVJFRABQQVlNRU5UX1JFUVVJUkVEAFBSRUNPTkRJVElPTl9SRVFVSVJFRABQUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRABORVRXT1JLX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAExFTkdUSF9SRVFVSVJFRABTU0xfQ0VSVElGSUNBVEVfUkVRVUlSRUQAVVBHUkFERV9SRVFVSVJFRABQQUdFX0VYUElSRUQAUFJFQ09ORElUSU9OX0ZBSUxFRABFWFBFQ1RBVElPTl9GQUlMRUQAUkVWQUxJREFUSU9OX0ZBSUxFRABTU0xfSEFORFNIQUtFX0ZBSUxFRABMT0NLRUQAVFJBTlNGT1JNQVRJT05fQVBQTElFRABOT1RfTU9ESUZJRUQATk9UX0VYVEVOREVEAEJBTkRXSURUSF9MSU1JVF9FWENFRURFRABTSVRFX0lTX09WRVJMT0FERUQASEVBRABFeHBlY3RlZCBIVFRQLwAAXhMAACYTAAAwEAAA8BcAAJ0TAAAVEgAAORcAAPASAAAKEAAAdRIAAK0SAACCEwAATxQAAH8QAACgFQAAIxQAAIkSAACLFAAATRUAANQRAADPFAAAEBgAAMkWAADcFgAAwREAAOAXAAC7FAAAdBQAAHwVAADlFAAACBcAAB8QAABlFQAAoxQAACgVAAACFQAAmRUAACwQAACLGQAATw8AANQOAABqEAAAzhAAAAIXAACJDgAAbhMAABwTAABmFAAAVhcAAMETAADNEwAAbBMAAGgXAABmFwAAXxcAACITAADODwAAaQ4AANgOAABjFgAAyxMAAKoOAAAoFwAAJhcAAMUTAABdFgAA6BEAAGcTAABlEwAA8hYAAHMTAAAdFwAA+RYAAPMRAADPDgAAzhUAAAwSAACzEQAApREAAGEQAAAyFwAAuxMAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIDAgICAgIAAAICAAICAAICAgICAgICAgIABAAAAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbG9zZWVlcC1hbGl2ZQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAQEBAQEAAAEBAAEBAAEBAQEBAQEBAQEAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AAAAAAAAAAAAAAAAAAAByYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AAAAAAAAAAAAAAAABAgABAwAAAAAAAAAAAAAAAAAAAAAAAAQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAQIAAQMAAAAAAAAAAAAAAAAAAAAAAAAEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAQAAAgAAAAAAAAAAAAAAAAAAAAAAAAMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAIAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOT1VOQ0VFQ0tPVVRORUNURVRFQ1JJQkVMVVNIRVRFQURTRUFSQ0hSR0VDVElWSVRZTEVOREFSVkVPVElGWVBUSU9OU0NIU0VBWVNUQVRDSEdFT1JESVJFQ1RPUlRSQ0hQQVJBTUVURVJVUkNFQlNDUklCRUFSRE9XTkFDRUlORE5LQ0tVQlNDUklCRUhUVFAvQURUUC8=' -+ -+ -+/***/ }), -+ -+/***/ 6062: -+/***/ ((module) => { -+ -+module.exports = 'AGFzbQEAAAABMAhgAX8Bf2ADf39/AX9gBH9/f38Bf2AAAGADf39/AGABfwBgAn9/AGAGf39/f39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQACA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAA0ZFAwMEAAAFAAAAAAAABQEFAAUFBQAABgAAAAAGBgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAABAQcAAAUFAwABBAUBcAESEgUDAQACBggBfwFBgNQECwfRBSIGbWVtb3J5AgALX2luaXRpYWxpemUACRlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQALbGxodHRwX2luaXQAChhsbGh0dHBfc2hvdWxkX2tlZXBfYWxpdmUAQQxsbGh0dHBfYWxsb2MADAZtYWxsb2MARgtsbGh0dHBfZnJlZQANBGZyZWUASA9sbGh0dHBfZ2V0X3R5cGUADhVsbGh0dHBfZ2V0X2h0dHBfbWFqb3IADxVsbGh0dHBfZ2V0X2h0dHBfbWlub3IAEBFsbGh0dHBfZ2V0X21ldGhvZAARFmxsaHR0cF9nZXRfc3RhdHVzX2NvZGUAEhJsbGh0dHBfZ2V0X3VwZ3JhZGUAEwxsbGh0dHBfcmVzZXQAFA5sbGh0dHBfZXhlY3V0ZQAVFGxsaHR0cF9zZXR0aW5nc19pbml0ABYNbGxodHRwX2ZpbmlzaAAXDGxsaHR0cF9wYXVzZQAYDWxsaHR0cF9yZXN1bWUAGRtsbGh0dHBfcmVzdW1lX2FmdGVyX3VwZ3JhZGUAGhBsbGh0dHBfZ2V0X2Vycm5vABsXbGxodHRwX2dldF9lcnJvcl9yZWFzb24AHBdsbGh0dHBfc2V0X2Vycm9yX3JlYXNvbgAdFGxsaHR0cF9nZXRfZXJyb3JfcG9zAB4RbGxodHRwX2Vycm5vX25hbWUAHxJsbGh0dHBfbWV0aG9kX25hbWUAIBJs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IAH9CwMAIABBMGogAf0LAwAgAEEgaiAB/QsDACAAQd0BNgIcQQALewEBfwJAIAAoAgwiAw0AAkAgACgCBEUNACAAIAE2AgQLAkAgACABIAIQxICAgAAiAw0AIAAoAgwPCyAAIAM2AhxBACEDIAAoAgQiAUUNACAAIAEgAiAAKAIIEYGAgIAAACIBRQ0AIAAgAjYCFCAAIAE2AgwgASEDCyADC+TzAQMOfwN+BH8jgICAgABBEGsiAySAgICAACABIQQgASEFIAEhBiABIQcgASEIIAEhCSABIQogASELIAEhDCABIQ0gASEOIAEhDwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIcIhBBf2oO3QHaAQHZAQIDBAUGBwgJCgsMDQ7YAQ8Q1wEREtYBExQVFhcYGRob4AHfARwdHtUBHyAhIiMkJdQBJicoKSorLNMB0gEtLtEB0AEvMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUbbAUdISUrPAc4BS80BTMwBTU5PUFFSU1RVVldYWVpbXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEB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QAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIBAOxwEAAQID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YWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsb3NlZWVwLWFsaXZlAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgAAAAAAAAAAAAAAAAAAAHJhbnNmZXItZW5jb2RpbmdwZ3JhZGUNCg0KDQpTTQ0KDQpUVFAvQ0UvVFNQLwAAAAAAAAAAAAAAAAECAAEDAAAAAAAAAAAAAAAAAAAAAAAABAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAABAgABAwAAAAAAAAAAAAAAAAAAAAAAAAQBAQUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAABAAACAAAAAAAAAAAAAAAAAAAAAAAAAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAgAAAAACAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==' -+ -+ -+/***/ }), -+ -+/***/ 4965: -+/***/ ((__unused_webpack_module, exports) => { -+ -+"use strict"; -+ -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+exports.enumToMap = void 0; -+function enumToMap(obj) { -+ const res = {}; -+ Object.keys(obj).forEach((key) => { -+ const value = obj[key]; -+ if (typeof value === 'number') { -+ res[key] = value; -+ } -+ }); -+ return res; -+} -+exports.enumToMap = enumToMap; -+//# sourceMappingURL=utils.js.map -+ -+/***/ }), -+ -+/***/ 8259: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { kClients } = __nccwpck_require__(3745) -+const Agent = __nccwpck_require__(823) -+const { -+ kAgent, -+ kMockAgentSet, -+ kMockAgentGet, -+ kDispatches, -+ kIsMockActive, -+ kNetConnect, -+ kGetNetConnect, -+ kOptions, -+ kFactory -+} = __nccwpck_require__(3516) -+const MockClient = __nccwpck_require__(306) -+const MockPool = __nccwpck_require__(3405) -+const { matchValue, buildMockOptions } = __nccwpck_require__(7544) -+const { InvalidArgumentError, UndiciError } = __nccwpck_require__(1878) -+const Dispatcher = __nccwpck_require__(8307) -+const Pluralizer = __nccwpck_require__(2337) -+const PendingInterceptorsFormatter = __nccwpck_require__(4183) -+ -+class FakeWeakRef { -+ constructor (value) { -+ this.value = value -+ } -+ -+ deref () { -+ return this.value -+ } -+} -+ -+class MockAgent extends Dispatcher { -+ constructor (opts) { -+ super(opts) -+ -+ this[kNetConnect] = true -+ this[kIsMockActive] = true -+ -+ // Instantiate Agent and encapsulate -+ if ((opts && opts.agent && typeof opts.agent.dispatch !== 'function')) { -+ throw new InvalidArgumentError('Argument opts.agent must implement Agent') -+ } -+ const agent = opts && opts.agent ? opts.agent : new Agent(opts) -+ this[kAgent] = agent -+ -+ this[kClients] = agent[kClients] -+ this[kOptions] = buildMockOptions(opts) -+ } -+ -+ get (origin) { -+ let dispatcher = this[kMockAgentGet](origin) -+ -+ if (!dispatcher) { -+ dispatcher = this[kFactory](origin) -+ this[kMockAgentSet](origin, dispatcher) -+ } -+ return dispatcher -+ } -+ -+ dispatch (opts, handler) { -+ // Call MockAgent.get to perform additional setup before dispatching as normal -+ this.get(opts.origin) -+ return this[kAgent].dispatch(opts, handler) -+ } -+ -+ async close () { -+ await this[kAgent].close() -+ this[kClients].clear() -+ } -+ -+ deactivate () { -+ this[kIsMockActive] = false -+ } -+ -+ activate () { -+ this[kIsMockActive] = true -+ } -+ -+ enableNetConnect (matcher) { -+ if (typeof matcher === 'string' || typeof matcher === 'function' || matcher instanceof RegExp) { -+ if (Array.isArray(this[kNetConnect])) { -+ this[kNetConnect].push(matcher) -+ } else { -+ this[kNetConnect] = [matcher] -+ } -+ } else if (typeof matcher === 'undefined') { -+ this[kNetConnect] = true -+ } else { -+ throw new InvalidArgumentError('Unsupported matcher. Must be one of String|Function|RegExp.') -+ } -+ } -+ -+ disableNetConnect () { -+ this[kNetConnect] = false -+ } -+ -+ // This is required to bypass issues caused by using global symbols - see: -+ // https://github.com/nodejs/undici/issues/1447 -+ get isMockActive () { -+ return this[kIsMockActive] -+ } -+ -+ [kMockAgentSet] (origin, dispatcher) { -+ this[kClients].set(origin, new FakeWeakRef(dispatcher)) -+ } -+ -+ [kFactory] (origin) { -+ const mockOptions = Object.assign({ agent: this }, this[kOptions]) -+ return this[kOptions] && this[kOptions].connections === 1 -+ ? new MockClient(origin, mockOptions) -+ : new MockPool(origin, mockOptions) -+ } -+ -+ [kMockAgentGet] (origin) { -+ // First check if we can immediately find it -+ const ref = this[kClients].get(origin) -+ if (ref) { -+ return ref.deref() -+ } -+ -+ // If the origin is not a string create a dummy parent pool and return to user -+ if (typeof origin !== 'string') { -+ const dispatcher = this[kFactory]('http://localhost:9999') -+ this[kMockAgentSet](origin, dispatcher) -+ return dispatcher -+ } -+ -+ // If we match, create a pool and assign the same dispatches -+ for (const [keyMatcher, nonExplicitRef] of Array.from(this[kClients])) { -+ const nonExplicitDispatcher = nonExplicitRef.deref() -+ if (nonExplicitDispatcher && typeof keyMatcher !== 'string' && matchValue(keyMatcher, origin)) { -+ const dispatcher = this[kFactory](origin) -+ this[kMockAgentSet](origin, dispatcher) -+ dispatcher[kDispatches] = nonExplicitDispatcher[kDispatches] -+ return dispatcher -+ } -+ } -+ } -+ -+ [kGetNetConnect] () { -+ return this[kNetConnect] -+ } -+ -+ pendingInterceptors () { -+ const mockAgentClients = this[kClients] -+ -+ return Array.from(mockAgentClients.entries()) -+ .flatMap(([origin, scope]) => scope.deref()[kDispatches].map(dispatch => ({ ...dispatch, origin }))) -+ .filter(({ pending }) => pending) -+ } -+ -+ assertNoPendingInterceptors ({ pendingInterceptorsFormatter = new PendingInterceptorsFormatter() } = {}) { -+ const pending = this.pendingInterceptors() -+ -+ if (pending.length === 0) { -+ return -+ } -+ -+ const pluralizer = new Pluralizer('interceptor', 'interceptors').pluralize(pending.length) -+ -+ throw new UndiciError(` -+${pluralizer.count} ${pluralizer.noun} ${pluralizer.is} pending: -+ -+${pendingInterceptorsFormatter.format(pending)} -+`.trim()) -+ } -+} -+ -+module.exports = MockAgent -+ -+ -+/***/ }), -+ -+/***/ 306: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { promisify } = __nccwpck_require__(3837) -+const Client = __nccwpck_require__(1813) -+const { buildMockDispatch } = __nccwpck_require__(7544) -+const { -+ kDispatches, -+ kMockAgent, -+ kClose, -+ kOriginalClose, -+ kOrigin, -+ kOriginalDispatch, -+ kConnected -+} = __nccwpck_require__(3516) -+const { MockInterceptor } = __nccwpck_require__(6190) -+const Symbols = __nccwpck_require__(3745) -+const { InvalidArgumentError } = __nccwpck_require__(1878) -+ -+/** -+ * MockClient provides an API that extends the Client to influence the mockDispatches. -+ */ -+class MockClient extends Client { -+ constructor (origin, opts) { -+ super(origin, opts) -+ -+ if (!opts || !opts.agent || typeof opts.agent.dispatch !== 'function') { -+ throw new InvalidArgumentError('Argument opts.agent must implement Agent') -+ } -+ -+ this[kMockAgent] = opts.agent -+ this[kOrigin] = origin -+ this[kDispatches] = [] -+ this[kConnected] = 1 -+ this[kOriginalDispatch] = this.dispatch -+ this[kOriginalClose] = this.close.bind(this) -+ -+ this.dispatch = buildMockDispatch.call(this) -+ this.close = this[kClose] -+ } -+ -+ get [Symbols.kConnected] () { -+ return this[kConnected] -+ } -+ -+ /** -+ * Sets up the base interceptor for mocking replies from undici. -+ */ -+ intercept (opts) { -+ return new MockInterceptor(opts, this[kDispatches]) -+ } -+ -+ async [kClose] () { -+ await promisify(this[kOriginalClose])() -+ this[kConnected] = 0 -+ this[kMockAgent][Symbols.kClients].delete(this[kOrigin]) -+ } -+} -+ -+module.exports = MockClient -+ -+ -+/***/ }), -+ -+/***/ 7868: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { UndiciError } = __nccwpck_require__(1878) -+ -+class MockNotMatchedError extends UndiciError { -+ constructor (message) { -+ super(message) -+ Error.captureStackTrace(this, MockNotMatchedError) -+ this.name = 'MockNotMatchedError' -+ this.message = message || 'The request does not match any registered mock dispatches' -+ this.code = 'UND_MOCK_ERR_MOCK_NOT_MATCHED' -+ } -+} -+ -+module.exports = { -+ MockNotMatchedError -+} -+ -+ -+/***/ }), -+ -+/***/ 6190: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { getResponseData, buildKey, addMockDispatch } = __nccwpck_require__(7544) -+const { -+ kDispatches, -+ kDispatchKey, -+ kDefaultHeaders, -+ kDefaultTrailers, -+ kContentLength, -+ kMockDispatch -+} = __nccwpck_require__(3516) -+const { InvalidArgumentError } = __nccwpck_require__(1878) -+const { buildURL } = __nccwpck_require__(929) -+ -+/** -+ * Defines the scope API for an interceptor reply -+ */ -+class MockScope { -+ constructor (mockDispatch) { -+ this[kMockDispatch] = mockDispatch -+ } -+ -+ /** -+ * Delay a reply by a set amount in ms. -+ */ -+ delay (waitInMs) { -+ if (typeof waitInMs !== 'number' || !Number.isInteger(waitInMs) || waitInMs <= 0) { -+ throw new InvalidArgumentError('waitInMs must be a valid integer > 0') -+ } -+ -+ this[kMockDispatch].delay = waitInMs -+ return this -+ } -+ -+ /** -+ * For a defined reply, never mark as consumed. -+ */ -+ persist () { -+ this[kMockDispatch].persist = true -+ return this -+ } -+ -+ /** -+ * Allow one to define a reply for a set amount of matching requests. -+ */ -+ times (repeatTimes) { -+ if (typeof repeatTimes !== 'number' || !Number.isInteger(repeatTimes) || repeatTimes <= 0) { -+ throw new InvalidArgumentError('repeatTimes must be a valid integer > 0') -+ } -+ -+ this[kMockDispatch].times = repeatTimes -+ return this -+ } -+} -+ -+/** -+ * Defines an interceptor for a Mock -+ */ -+class MockInterceptor { -+ constructor (opts, mockDispatches) { -+ if (typeof opts !== 'object') { -+ throw new InvalidArgumentError('opts must be an object') -+ } -+ if (typeof opts.path === 'undefined') { -+ throw new InvalidArgumentError('opts.path must be defined') -+ } -+ if (typeof opts.method === 'undefined') { -+ opts.method = 'GET' -+ } -+ // See https://github.com/nodejs/undici/issues/1245 -+ // As per RFC 3986, clients are not supposed to send URI -+ // fragments to servers when they retrieve a document, -+ if (typeof opts.path === 'string') { -+ if (opts.query) { -+ opts.path = buildURL(opts.path, opts.query) -+ } else { -+ // Matches https://github.com/nodejs/undici/blob/main/lib/fetch/index.js#L1811 -+ const parsedURL = new URL(opts.path, 'data://') -+ opts.path = parsedURL.pathname + parsedURL.search -+ } -+ } -+ if (typeof opts.method === 'string') { -+ opts.method = opts.method.toUpperCase() -+ } -+ -+ this[kDispatchKey] = buildKey(opts) -+ this[kDispatches] = mockDispatches -+ this[kDefaultHeaders] = {} -+ this[kDefaultTrailers] = {} -+ this[kContentLength] = false -+ } -+ -+ createMockScopeDispatchData (statusCode, data, responseOptions = {}) { -+ const responseData = getResponseData(data) -+ const contentLength = this[kContentLength] ? { 'content-length': responseData.length } : {} -+ const headers = { ...this[kDefaultHeaders], ...contentLength, ...responseOptions.headers } -+ const trailers = { ...this[kDefaultTrailers], ...responseOptions.trailers } -+ -+ return { statusCode, data, headers, trailers } -+ } -+ -+ validateReplyParameters (statusCode, data, responseOptions) { -+ if (typeof statusCode === 'undefined') { -+ throw new InvalidArgumentError('statusCode must be defined') -+ } -+ if (typeof data === 'undefined') { -+ throw new InvalidArgumentError('data must be defined') -+ } -+ if (typeof responseOptions !== 'object') { -+ throw new InvalidArgumentError('responseOptions must be an object') -+ } -+ } -+ -+ /** -+ * Mock an undici request with a defined reply. -+ */ -+ reply (replyData) { -+ // Values of reply aren't available right now as they -+ // can only be available when the reply callback is invoked. -+ if (typeof replyData === 'function') { -+ // We'll first wrap the provided callback in another function, -+ // this function will properly resolve the data from the callback -+ // when invoked. -+ const wrappedDefaultsCallback = (opts) => { -+ // Our reply options callback contains the parameter for statusCode, data and options. -+ const resolvedData = replyData(opts) -+ -+ // Check if it is in the right format -+ if (typeof resolvedData !== 'object') { -+ throw new InvalidArgumentError('reply options callback must return an object') -+ } -+ -+ const { statusCode, data = '', responseOptions = {} } = resolvedData -+ this.validateReplyParameters(statusCode, data, responseOptions) -+ // Since the values can be obtained immediately we return them -+ // from this higher order function that will be resolved later. -+ return { -+ ...this.createMockScopeDispatchData(statusCode, data, responseOptions) -+ } -+ } -+ -+ // Add usual dispatch data, but this time set the data parameter to function that will eventually provide data. -+ const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback) -+ return new MockScope(newMockDispatch) -+ } -+ -+ // We can have either one or three parameters, if we get here, -+ // we should have 1-3 parameters. So we spread the arguments of -+ // this function to obtain the parameters, since replyData will always -+ // just be the statusCode. -+ const [statusCode, data = '', responseOptions = {}] = [...arguments] -+ this.validateReplyParameters(statusCode, data, responseOptions) -+ -+ // Send in-already provided data like usual -+ const dispatchData = this.createMockScopeDispatchData(statusCode, data, responseOptions) -+ const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], dispatchData) -+ return new MockScope(newMockDispatch) -+ } -+ -+ /** -+ * Mock an undici request with a defined error. -+ */ -+ replyWithError (error) { -+ if (typeof error === 'undefined') { -+ throw new InvalidArgumentError('error must be defined') -+ } -+ -+ const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], { error }) -+ return new MockScope(newMockDispatch) -+ } -+ -+ /** -+ * Set default reply headers on the interceptor for subsequent replies -+ */ -+ defaultReplyHeaders (headers) { -+ if (typeof headers === 'undefined') { -+ throw new InvalidArgumentError('headers must be defined') -+ } -+ -+ this[kDefaultHeaders] = headers -+ return this -+ } -+ -+ /** -+ * Set default reply trailers on the interceptor for subsequent replies -+ */ -+ defaultReplyTrailers (trailers) { -+ if (typeof trailers === 'undefined') { -+ throw new InvalidArgumentError('trailers must be defined') -+ } -+ -+ this[kDefaultTrailers] = trailers -+ return this -+ } -+ -+ /** -+ * Set reply content length header for replies on the interceptor -+ */ -+ replyContentLength () { -+ this[kContentLength] = true -+ return this -+ } -+} -+ -+module.exports.MockInterceptor = MockInterceptor -+module.exports.MockScope = MockScope -+ -+ -+/***/ }), -+ -+/***/ 3405: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { promisify } = __nccwpck_require__(3837) -+const Pool = __nccwpck_require__(7921) -+const { buildMockDispatch } = __nccwpck_require__(7544) -+const { -+ kDispatches, -+ kMockAgent, -+ kClose, -+ kOriginalClose, -+ kOrigin, -+ kOriginalDispatch, -+ kConnected -+} = __nccwpck_require__(3516) -+const { MockInterceptor } = __nccwpck_require__(6190) -+const Symbols = __nccwpck_require__(3745) -+const { InvalidArgumentError } = __nccwpck_require__(1878) -+ -+/** -+ * MockPool provides an API that extends the Pool to influence the mockDispatches. -+ */ -+class MockPool extends Pool { -+ constructor (origin, opts) { -+ super(origin, opts) -+ -+ if (!opts || !opts.agent || typeof opts.agent.dispatch !== 'function') { -+ throw new InvalidArgumentError('Argument opts.agent must implement Agent') -+ } -+ -+ this[kMockAgent] = opts.agent -+ this[kOrigin] = origin -+ this[kDispatches] = [] -+ this[kConnected] = 1 -+ this[kOriginalDispatch] = this.dispatch -+ this[kOriginalClose] = this.close.bind(this) -+ -+ this.dispatch = buildMockDispatch.call(this) -+ this.close = this[kClose] -+ } -+ -+ get [Symbols.kConnected] () { -+ return this[kConnected] -+ } -+ -+ /** -+ * Sets up the base interceptor for mocking replies from undici. -+ */ -+ intercept (opts) { -+ return new MockInterceptor(opts, this[kDispatches]) -+ } -+ -+ async [kClose] () { -+ await promisify(this[kOriginalClose])() -+ this[kConnected] = 0 -+ this[kMockAgent][Symbols.kClients].delete(this[kOrigin]) -+ } -+} -+ -+module.exports = MockPool -+ -+ -+/***/ }), -+ -+/***/ 3516: -+/***/ ((module) => { -+ -+"use strict"; -+ -+ -+module.exports = { -+ kAgent: Symbol('agent'), -+ kOptions: Symbol('options'), -+ kFactory: Symbol('factory'), -+ kDispatches: Symbol('dispatches'), -+ kDispatchKey: Symbol('dispatch key'), -+ kDefaultHeaders: Symbol('default headers'), -+ kDefaultTrailers: Symbol('default trailers'), -+ kContentLength: Symbol('content length'), -+ kMockAgent: Symbol('mock agent'), -+ kMockAgentSet: Symbol('mock agent set'), -+ kMockAgentGet: Symbol('mock agent get'), -+ kMockDispatch: Symbol('mock dispatch'), -+ kClose: Symbol('close'), -+ kOriginalClose: Symbol('original agent close'), -+ kOrigin: Symbol('origin'), -+ kIsMockActive: Symbol('is mock active'), -+ kNetConnect: Symbol('net connect'), -+ kGetNetConnect: Symbol('get net connect'), -+ kConnected: Symbol('connected') -+} -+ -+ -+/***/ }), -+ -+/***/ 7544: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { MockNotMatchedError } = __nccwpck_require__(7868) -+const { -+ kDispatches, -+ kMockAgent, -+ kOriginalDispatch, -+ kOrigin, -+ kGetNetConnect -+} = __nccwpck_require__(3516) -+const { buildURL, nop } = __nccwpck_require__(929) -+const { STATUS_CODES } = __nccwpck_require__(3685) -+const { -+ types: { -+ isPromise -+ } -+} = __nccwpck_require__(3837) -+ -+function matchValue (match, value) { -+ if (typeof match === 'string') { -+ return match === value -+ } -+ if (match instanceof RegExp) { -+ return match.test(value) -+ } -+ if (typeof match === 'function') { -+ return match(value) === true -+ } -+ return false -+} -+ -+function lowerCaseEntries (headers) { -+ return Object.fromEntries( -+ Object.entries(headers).map(([headerName, headerValue]) => { -+ return [headerName.toLocaleLowerCase(), headerValue] -+ }) -+ ) -+} -+ -+/** -+ * @param {import('../../index').Headers|string[]|Record} headers -+ * @param {string} key -+ */ -+function getHeaderByName (headers, key) { -+ if (Array.isArray(headers)) { -+ for (let i = 0; i < headers.length; i += 2) { -+ if (headers[i].toLocaleLowerCase() === key.toLocaleLowerCase()) { -+ return headers[i + 1] -+ } -+ } -+ -+ return undefined -+ } else if (typeof headers.get === 'function') { -+ return headers.get(key) -+ } else { -+ return lowerCaseEntries(headers)[key.toLocaleLowerCase()] -+ } -+} -+ -+/** @param {string[]} headers */ -+function buildHeadersFromArray (headers) { // fetch HeadersList -+ const clone = headers.slice() -+ const entries = [] -+ for (let index = 0; index < clone.length; index += 2) { -+ entries.push([clone[index], clone[index + 1]]) -+ } -+ return Object.fromEntries(entries) -+} -+ -+function matchHeaders (mockDispatch, headers) { -+ if (typeof mockDispatch.headers === 'function') { -+ if (Array.isArray(headers)) { // fetch HeadersList -+ headers = buildHeadersFromArray(headers) -+ } -+ return mockDispatch.headers(headers ? lowerCaseEntries(headers) : {}) -+ } -+ if (typeof mockDispatch.headers === 'undefined') { -+ return true -+ } -+ if (typeof headers !== 'object' || typeof mockDispatch.headers !== 'object') { -+ return false -+ } -+ -+ for (const [matchHeaderName, matchHeaderValue] of Object.entries(mockDispatch.headers)) { -+ const headerValue = getHeaderByName(headers, matchHeaderName) -+ -+ if (!matchValue(matchHeaderValue, headerValue)) { -+ return false -+ } -+ } -+ return true -+} -+ -+function safeUrl (path) { -+ if (typeof path !== 'string') { -+ return path -+ } -+ -+ const pathSegments = path.split('?') -+ -+ if (pathSegments.length !== 2) { -+ return path -+ } -+ -+ const qp = new URLSearchParams(pathSegments.pop()) -+ qp.sort() -+ return [...pathSegments, qp.toString()].join('?') -+} -+ -+function matchKey (mockDispatch, { path, method, body, headers }) { -+ const pathMatch = matchValue(mockDispatch.path, path) -+ const methodMatch = matchValue(mockDispatch.method, method) -+ const bodyMatch = typeof mockDispatch.body !== 'undefined' ? matchValue(mockDispatch.body, body) : true -+ const headersMatch = matchHeaders(mockDispatch, headers) -+ return pathMatch && methodMatch && bodyMatch && headersMatch -+} -+ -+function getResponseData (data) { -+ if (Buffer.isBuffer(data)) { -+ return data -+ } else if (typeof data === 'object') { -+ return JSON.stringify(data) -+ } else { -+ return data.toString() -+ } -+} -+ -+function getMockDispatch (mockDispatches, key) { -+ const basePath = key.query ? buildURL(key.path, key.query) : key.path -+ const resolvedPath = typeof basePath === 'string' ? safeUrl(basePath) : basePath -+ -+ // Match path -+ let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path }) => matchValue(safeUrl(path), resolvedPath)) -+ if (matchedMockDispatches.length === 0) { -+ throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`) -+ } -+ -+ // Match method -+ matchedMockDispatches = matchedMockDispatches.filter(({ method }) => matchValue(method, key.method)) -+ if (matchedMockDispatches.length === 0) { -+ throw new MockNotMatchedError(`Mock dispatch not matched for method '${key.method}'`) -+ } -+ -+ // Match body -+ matchedMockDispatches = matchedMockDispatches.filter(({ body }) => typeof body !== 'undefined' ? matchValue(body, key.body) : true) -+ if (matchedMockDispatches.length === 0) { -+ throw new MockNotMatchedError(`Mock dispatch not matched for body '${key.body}'`) -+ } -+ -+ // Match headers -+ matchedMockDispatches = matchedMockDispatches.filter((mockDispatch) => matchHeaders(mockDispatch, key.headers)) -+ if (matchedMockDispatches.length === 0) { -+ throw new MockNotMatchedError(`Mock dispatch not matched for headers '${typeof key.headers === 'object' ? JSON.stringify(key.headers) : key.headers}'`) -+ } -+ -+ return matchedMockDispatches[0] -+} -+ -+function addMockDispatch (mockDispatches, key, data) { -+ const baseData = { timesInvoked: 0, times: 1, persist: false, consumed: false } -+ const replyData = typeof data === 'function' ? { callback: data } : { ...data } -+ const newMockDispatch = { ...baseData, ...key, pending: true, data: { error: null, ...replyData } } -+ mockDispatches.push(newMockDispatch) -+ return newMockDispatch -+} -+ -+function deleteMockDispatch (mockDispatches, key) { -+ const index = mockDispatches.findIndex(dispatch => { -+ if (!dispatch.consumed) { -+ return false -+ } -+ return matchKey(dispatch, key) -+ }) -+ if (index !== -1) { -+ mockDispatches.splice(index, 1) -+ } -+} -+ -+function buildKey (opts) { -+ const { path, method, body, headers, query } = opts -+ return { -+ path, -+ method, -+ body, -+ headers, -+ query -+ } -+} -+ -+function generateKeyValues (data) { -+ return Object.entries(data).reduce((keyValuePairs, [key, value]) => [ -+ ...keyValuePairs, -+ Buffer.from(`${key}`), -+ Array.isArray(value) ? value.map(x => Buffer.from(`${x}`)) : Buffer.from(`${value}`) -+ ], []) -+} -+ -+/** -+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Status -+ * @param {number} statusCode -+ */ -+function getStatusText (statusCode) { -+ return STATUS_CODES[statusCode] || 'unknown' -+} -+ -+async function getResponse (body) { -+ const buffers = [] -+ for await (const data of body) { -+ buffers.push(data) -+ } -+ return Buffer.concat(buffers).toString('utf8') -+} -+ -+/** -+ * Mock dispatch function used to simulate undici dispatches -+ */ -+function mockDispatch (opts, handler) { -+ // Get mock dispatch from built key -+ const key = buildKey(opts) -+ const mockDispatch = getMockDispatch(this[kDispatches], key) -+ -+ mockDispatch.timesInvoked++ -+ -+ // Here's where we resolve a callback if a callback is present for the dispatch data. -+ if (mockDispatch.data.callback) { -+ mockDispatch.data = { ...mockDispatch.data, ...mockDispatch.data.callback(opts) } -+ } -+ -+ // Parse mockDispatch data -+ const { data: { statusCode, data, headers, trailers, error }, delay, persist } = mockDispatch -+ const { timesInvoked, times } = mockDispatch -+ -+ // If it's used up and not persistent, mark as consumed -+ mockDispatch.consumed = !persist && timesInvoked >= times -+ mockDispatch.pending = timesInvoked < times -+ -+ // If specified, trigger dispatch error -+ if (error !== null) { -+ deleteMockDispatch(this[kDispatches], key) -+ handler.onError(error) -+ return true -+ } -+ -+ // Handle the request with a delay if necessary -+ if (typeof delay === 'number' && delay > 0) { -+ setTimeout(() => { -+ handleReply(this[kDispatches]) -+ }, delay) -+ } else { -+ handleReply(this[kDispatches]) -+ } -+ -+ function handleReply (mockDispatches, _data = data) { -+ // fetch's HeadersList is a 1D string array -+ const optsHeaders = Array.isArray(opts.headers) -+ ? buildHeadersFromArray(opts.headers) -+ : opts.headers -+ const body = typeof _data === 'function' -+ ? _data({ ...opts, headers: optsHeaders }) -+ : _data -+ -+ // util.types.isPromise is likely needed for jest. -+ if (isPromise(body)) { -+ // If handleReply is asynchronous, throwing an error -+ // in the callback will reject the promise, rather than -+ // synchronously throw the error, which breaks some tests. -+ // Rather, we wait for the callback to resolve if it is a -+ // promise, and then re-run handleReply with the new body. -+ body.then((newData) => handleReply(mockDispatches, newData)) -+ return -+ } -+ -+ const responseData = getResponseData(body) -+ const responseHeaders = generateKeyValues(headers) -+ const responseTrailers = generateKeyValues(trailers) -+ -+ handler.abort = nop -+ handler.onHeaders(statusCode, responseHeaders, resume, getStatusText(statusCode)) -+ handler.onData(Buffer.from(responseData)) -+ handler.onComplete(responseTrailers) -+ deleteMockDispatch(mockDispatches, key) -+ } -+ -+ function resume () {} -+ -+ return true -+} -+ -+function buildMockDispatch () { -+ const agent = this[kMockAgent] -+ const origin = this[kOrigin] -+ const originalDispatch = this[kOriginalDispatch] -+ -+ return function dispatch (opts, handler) { -+ if (agent.isMockActive) { -+ try { -+ mockDispatch.call(this, opts, handler) -+ } catch (error) { -+ if (error instanceof MockNotMatchedError) { -+ const netConnect = agent[kGetNetConnect]() -+ if (netConnect === false) { -+ throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect disabled)`) -+ } -+ if (checkNetConnect(netConnect, origin)) { -+ originalDispatch.call(this, opts, handler) -+ } else { -+ throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect is not enabled for this origin)`) -+ } -+ } else { -+ throw error -+ } -+ } -+ } else { -+ originalDispatch.call(this, opts, handler) -+ } -+ } -+} -+ -+function checkNetConnect (netConnect, origin) { -+ const url = new URL(origin) -+ if (netConnect === true) { -+ return true -+ } else if (Array.isArray(netConnect) && netConnect.some((matcher) => matchValue(matcher, url.host))) { -+ return true -+ } -+ return false -+} -+ -+function buildMockOptions (opts) { -+ if (opts) { -+ const { agent, ...mockOptions } = opts -+ return mockOptions -+ } -+} -+ -+module.exports = { -+ getResponseData, -+ getMockDispatch, -+ addMockDispatch, -+ deleteMockDispatch, -+ buildKey, -+ generateKeyValues, -+ matchValue, -+ getResponse, -+ getStatusText, -+ mockDispatch, -+ buildMockDispatch, -+ checkNetConnect, -+ buildMockOptions, -+ getHeaderByName -+} -+ -+ -+/***/ }), -+ -+/***/ 4183: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { Transform } = __nccwpck_require__(2781) -+const { Console } = __nccwpck_require__(6206) -+ -+/** -+ * Gets the output of `console.table(…)` as a string. -+ */ -+module.exports = class PendingInterceptorsFormatter { -+ constructor ({ disableColors } = {}) { -+ this.transform = new Transform({ -+ transform (chunk, _enc, cb) { -+ cb(null, chunk) -+ } -+ }) -+ -+ this.logger = new Console({ -+ stdout: this.transform, -+ inspectOptions: { -+ colors: !disableColors && !process.env.CI -+ } -+ }) -+ } -+ -+ format (pendingInterceptors) { -+ const withPrettyHeaders = pendingInterceptors.map( -+ ({ method, path, data: { statusCode }, persist, times, timesInvoked, origin }) => ({ -+ Method: method, -+ Origin: origin, -+ Path: path, -+ 'Status code': statusCode, -+ Persistent: persist ? '✅' : '❌', -+ Invocations: timesInvoked, -+ Remaining: persist ? Infinity : times - timesInvoked -+ })) -+ -+ this.logger.table(withPrettyHeaders) -+ return this.transform.read().toString() -+ } -+} -+ -+ -+/***/ }), -+ -+/***/ 2337: -+/***/ ((module) => { -+ -+"use strict"; -+ -+ -+const singulars = { -+ pronoun: 'it', -+ is: 'is', -+ was: 'was', -+ this: 'this' -+} -+ -+const plurals = { -+ pronoun: 'they', -+ is: 'are', -+ was: 'were', -+ this: 'these' -+} -+ -+module.exports = class Pluralizer { -+ constructor (singular, plural) { -+ this.singular = singular -+ this.plural = plural -+ } -+ -+ pluralize (count) { -+ const one = count === 1 -+ const keys = one ? singulars : plurals -+ const noun = one ? this.singular : this.plural -+ return { ...keys, count, noun } -+ } -+} -+ -+ -+/***/ }), -+ -+/***/ 9661: -+/***/ ((module) => { -+ -+"use strict"; -+/* eslint-disable */ -+ -+ -+ -+// Extracted from node/lib/internal/fixed_queue.js -+ -+// Currently optimal queue size, tested on V8 6.0 - 6.6. Must be power of two. -+const kSize = 2048; -+const kMask = kSize - 1; -+ -+// The FixedQueue is implemented as a singly-linked list of fixed-size -+// circular buffers. It looks something like this: -+// -+// head tail -+// | | -+// v v -+// +-----------+ <-----\ +-----------+ <------\ +-----------+ -+// | [null] | \----- | next | \------- | next | -+// +-----------+ +-----------+ +-----------+ -+// | item | <-- bottom | item | <-- bottom | [empty] | -+// | item | | item | | [empty] | -+// | item | | item | | [empty] | -+// | item | | item | | [empty] | -+// | item | | item | bottom --> | item | -+// | item | | item | | item | -+// | ... | | ... | | ... | -+// | item | | item | | item | -+// | item | | item | | item | -+// | [empty] | <-- top | item | | item | -+// | [empty] | | item | | item | -+// | [empty] | | [empty] | <-- top top --> | [empty] | -+// +-----------+ +-----------+ +-----------+ -+// -+// Or, if there is only one circular buffer, it looks something -+// like either of these: -+// -+// head tail head tail -+// | | | | -+// v v v v -+// +-----------+ +-----------+ -+// | [null] | | [null] | -+// +-----------+ +-----------+ -+// | [empty] | | item | -+// | [empty] | | item | -+// | item | <-- bottom top --> | [empty] | -+// | item | | [empty] | -+// | [empty] | <-- top bottom --> | item | -+// | [empty] | | item | -+// +-----------+ +-----------+ -+// -+// Adding a value means moving `top` forward by one, removing means -+// moving `bottom` forward by one. After reaching the end, the queue -+// wraps around. -+// -+// When `top === bottom` the current queue is empty and when -+// `top + 1 === bottom` it's full. This wastes a single space of storage -+// but allows much quicker checks. -+ -+class FixedCircularBuffer { -+ constructor() { -+ this.bottom = 0; -+ this.top = 0; -+ this.list = new Array(kSize); -+ this.next = null; -+ } -+ -+ isEmpty() { -+ return this.top === this.bottom; -+ } -+ -+ isFull() { -+ return ((this.top + 1) & kMask) === this.bottom; -+ } -+ -+ push(data) { -+ this.list[this.top] = data; -+ this.top = (this.top + 1) & kMask; -+ } -+ -+ shift() { -+ const nextItem = this.list[this.bottom]; -+ if (nextItem === undefined) -+ return null; -+ this.list[this.bottom] = undefined; -+ this.bottom = (this.bottom + 1) & kMask; -+ return nextItem; -+ } -+} -+ -+module.exports = class FixedQueue { -+ constructor() { -+ this.head = this.tail = new FixedCircularBuffer(); -+ } -+ -+ isEmpty() { -+ return this.head.isEmpty(); -+ } -+ -+ push(data) { -+ if (this.head.isFull()) { -+ // Head is full: Creates a new queue, sets the old queue's `.next` to it, -+ // and sets it as the new main queue. -+ this.head = this.head.next = new FixedCircularBuffer(); -+ } -+ this.head.push(data); -+ } -+ -+ shift() { -+ const tail = this.tail; -+ const next = tail.shift(); -+ if (tail.isEmpty() && tail.next !== null) { -+ // If there is another queue, it forms the new tail. -+ this.tail = tail.next; -+ } -+ return next; -+ } -+}; -+ -+ -+/***/ }), -+ -+/***/ 5756: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const DispatcherBase = __nccwpck_require__(6552) -+const FixedQueue = __nccwpck_require__(9661) -+const { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = __nccwpck_require__(3745) -+const PoolStats = __nccwpck_require__(5767) -+ -+const kClients = Symbol('clients') -+const kNeedDrain = Symbol('needDrain') -+const kQueue = Symbol('queue') -+const kClosedResolve = Symbol('closed resolve') -+const kOnDrain = Symbol('onDrain') -+const kOnConnect = Symbol('onConnect') -+const kOnDisconnect = Symbol('onDisconnect') -+const kOnConnectionError = Symbol('onConnectionError') -+const kGetDispatcher = Symbol('get dispatcher') -+const kAddClient = Symbol('add client') -+const kRemoveClient = Symbol('remove client') -+const kStats = Symbol('stats') -+ -+class PoolBase extends DispatcherBase { -+ constructor () { -+ super() -+ -+ this[kQueue] = new FixedQueue() -+ this[kClients] = [] -+ this[kQueued] = 0 -+ -+ const pool = this -+ -+ this[kOnDrain] = function onDrain (origin, targets) { -+ const queue = pool[kQueue] -+ -+ let needDrain = false -+ -+ while (!needDrain) { -+ const item = queue.shift() -+ if (!item) { -+ break -+ } -+ pool[kQueued]-- -+ needDrain = !this.dispatch(item.opts, item.handler) -+ } -+ -+ this[kNeedDrain] = needDrain -+ -+ if (!this[kNeedDrain] && pool[kNeedDrain]) { -+ pool[kNeedDrain] = false -+ pool.emit('drain', origin, [pool, ...targets]) -+ } -+ -+ if (pool[kClosedResolve] && queue.isEmpty()) { -+ Promise -+ .all(pool[kClients].map(c => c.close())) -+ .then(pool[kClosedResolve]) -+ } -+ } -+ -+ this[kOnConnect] = (origin, targets) => { -+ pool.emit('connect', origin, [pool, ...targets]) -+ } -+ -+ this[kOnDisconnect] = (origin, targets, err) => { -+ pool.emit('disconnect', origin, [pool, ...targets], err) -+ } -+ -+ this[kOnConnectionError] = (origin, targets, err) => { -+ pool.emit('connectionError', origin, [pool, ...targets], err) -+ } -+ -+ this[kStats] = new PoolStats(this) -+ } -+ -+ get [kBusy] () { -+ return this[kNeedDrain] -+ } -+ -+ get [kConnected] () { -+ return this[kClients].filter(client => client[kConnected]).length -+ } -+ -+ get [kFree] () { -+ return this[kClients].filter(client => client[kConnected] && !client[kNeedDrain]).length -+ } -+ -+ get [kPending] () { -+ let ret = this[kQueued] -+ for (const { [kPending]: pending } of this[kClients]) { -+ ret += pending -+ } -+ return ret -+ } -+ -+ get [kRunning] () { -+ let ret = 0 -+ for (const { [kRunning]: running } of this[kClients]) { -+ ret += running -+ } -+ return ret -+ } -+ -+ get [kSize] () { -+ let ret = this[kQueued] -+ for (const { [kSize]: size } of this[kClients]) { -+ ret += size -+ } -+ return ret -+ } -+ -+ get stats () { -+ return this[kStats] -+ } -+ -+ async [kClose] () { -+ if (this[kQueue].isEmpty()) { -+ return Promise.all(this[kClients].map(c => c.close())) -+ } else { -+ return new Promise((resolve) => { -+ this[kClosedResolve] = resolve -+ }) -+ } -+ } -+ -+ async [kDestroy] (err) { -+ while (true) { -+ const item = this[kQueue].shift() -+ if (!item) { -+ break -+ } -+ item.handler.onError(err) -+ } -+ -+ return Promise.all(this[kClients].map(c => c.destroy(err))) -+ } -+ -+ [kDispatch] (opts, handler) { -+ const dispatcher = this[kGetDispatcher]() -+ -+ if (!dispatcher) { -+ this[kNeedDrain] = true -+ this[kQueue].push({ opts, handler }) -+ this[kQueued]++ -+ } else if (!dispatcher.dispatch(opts, handler)) { -+ dispatcher[kNeedDrain] = true -+ this[kNeedDrain] = !this[kGetDispatcher]() -+ } -+ -+ return !this[kNeedDrain] -+ } -+ -+ [kAddClient] (client) { -+ client -+ .on('drain', this[kOnDrain]) -+ .on('connect', this[kOnConnect]) -+ .on('disconnect', this[kOnDisconnect]) -+ .on('connectionError', this[kOnConnectionError]) -+ -+ this[kClients].push(client) -+ -+ if (this[kNeedDrain]) { -+ process.nextTick(() => { -+ if (this[kNeedDrain]) { -+ this[kOnDrain](client[kUrl], [this, client]) -+ } -+ }) -+ } -+ -+ return this -+ } -+ -+ [kRemoveClient] (client) { -+ client.close(() => { -+ const idx = this[kClients].indexOf(client) -+ if (idx !== -1) { -+ this[kClients].splice(idx, 1) -+ } -+ }) -+ -+ this[kNeedDrain] = this[kClients].some(dispatcher => ( -+ !dispatcher[kNeedDrain] && -+ dispatcher.closed !== true && -+ dispatcher.destroyed !== true -+ )) -+ } -+} -+ -+module.exports = { -+ PoolBase, -+ kClients, -+ kNeedDrain, -+ kAddClient, -+ kRemoveClient, -+ kGetDispatcher -+} -+ -+ -+/***/ }), -+ -+/***/ 5767: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+const { kFree, kConnected, kPending, kQueued, kRunning, kSize } = __nccwpck_require__(3745) -+const kPool = Symbol('pool') -+ -+class PoolStats { -+ constructor (pool) { -+ this[kPool] = pool -+ } -+ -+ get connected () { -+ return this[kPool][kConnected] -+ } -+ -+ get free () { -+ return this[kPool][kFree] -+ } -+ -+ get pending () { -+ return this[kPool][kPending] -+ } -+ -+ get queued () { -+ return this[kPool][kQueued] -+ } -+ -+ get running () { -+ return this[kPool][kRunning] -+ } -+ -+ get size () { -+ return this[kPool][kSize] -+ } -+} -+ -+module.exports = PoolStats -+ -+ -+/***/ }), -+ -+/***/ 7921: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { -+ PoolBase, -+ kClients, -+ kNeedDrain, -+ kAddClient, -+ kGetDispatcher -+} = __nccwpck_require__(5756) -+const Client = __nccwpck_require__(1813) -+const { -+ InvalidArgumentError -+} = __nccwpck_require__(1878) -+const util = __nccwpck_require__(929) -+const { kUrl, kInterceptors } = __nccwpck_require__(3745) -+const buildConnector = __nccwpck_require__(7483) -+ -+const kOptions = Symbol('options') -+const kConnections = Symbol('connections') -+const kFactory = Symbol('factory') -+ -+function defaultFactory (origin, opts) { -+ return new Client(origin, opts) -+} -+ -+class Pool extends PoolBase { -+ constructor (origin, { -+ connections, -+ factory = defaultFactory, -+ connect, -+ connectTimeout, -+ tls, -+ maxCachedSessions, -+ socketPath, -+ autoSelectFamily, -+ autoSelectFamilyAttemptTimeout, -+ allowH2, -+ ...options -+ } = {}) { -+ super() -+ -+ if (connections != null && (!Number.isFinite(connections) || connections < 0)) { -+ throw new InvalidArgumentError('invalid connections') -+ } -+ -+ if (typeof factory !== 'function') { -+ throw new InvalidArgumentError('factory must be a function.') -+ } -+ -+ if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') { -+ throw new InvalidArgumentError('connect must be a function or an object') -+ } -+ -+ if (typeof connect !== 'function') { -+ connect = buildConnector({ -+ ...tls, -+ maxCachedSessions, -+ allowH2, -+ socketPath, -+ timeout: connectTimeout, -+ ...(util.nodeHasAutoSelectFamily && autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined), -+ ...connect -+ }) -+ } -+ -+ this[kInterceptors] = options.interceptors && options.interceptors.Pool && Array.isArray(options.interceptors.Pool) -+ ? options.interceptors.Pool -+ : [] -+ this[kConnections] = connections || null -+ this[kUrl] = util.parseOrigin(origin) -+ this[kOptions] = { ...util.deepClone(options), connect, allowH2 } -+ this[kOptions].interceptors = options.interceptors -+ ? { ...options.interceptors } -+ : undefined -+ this[kFactory] = factory -+ } -+ -+ [kGetDispatcher] () { -+ let dispatcher = this[kClients].find(dispatcher => !dispatcher[kNeedDrain]) -+ -+ if (dispatcher) { -+ return dispatcher -+ } -+ -+ if (!this[kConnections] || this[kClients].length < this[kConnections]) { -+ dispatcher = this[kFactory](this[kUrl], this[kOptions]) -+ this[kAddClient](dispatcher) -+ } -+ -+ return dispatcher -+ } -+} -+ -+module.exports = Pool -+ -+ -+/***/ }), -+ -+/***/ 1819: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { kProxy, kClose, kDestroy, kInterceptors } = __nccwpck_require__(3745) -+const { URL } = __nccwpck_require__(7310) -+const Agent = __nccwpck_require__(823) -+const Pool = __nccwpck_require__(7921) -+const DispatcherBase = __nccwpck_require__(6552) -+const { InvalidArgumentError, RequestAbortedError } = __nccwpck_require__(1878) -+const buildConnector = __nccwpck_require__(7483) -+ -+const kAgent = Symbol('proxy agent') -+const kClient = Symbol('proxy client') -+const kProxyHeaders = Symbol('proxy headers') -+const kRequestTls = Symbol('request tls settings') -+const kProxyTls = Symbol('proxy tls settings') -+const kConnectEndpoint = Symbol('connect endpoint function') -+ -+function defaultProtocolPort (protocol) { -+ return protocol === 'https:' ? 443 : 80 -+} -+ -+function buildProxyOptions (opts) { -+ if (typeof opts === 'string') { -+ opts = { uri: opts } -+ } -+ -+ if (!opts || !opts.uri) { -+ throw new InvalidArgumentError('Proxy opts.uri is mandatory') -+ } -+ -+ return { -+ uri: opts.uri, -+ protocol: opts.protocol || 'https' -+ } -+} -+ -+function defaultFactory (origin, opts) { -+ return new Pool(origin, opts) -+} -+ -+class ProxyAgent extends DispatcherBase { -+ constructor (opts) { -+ super(opts) -+ this[kProxy] = buildProxyOptions(opts) -+ this[kAgent] = new Agent(opts) -+ this[kInterceptors] = opts.interceptors && opts.interceptors.ProxyAgent && Array.isArray(opts.interceptors.ProxyAgent) -+ ? opts.interceptors.ProxyAgent -+ : [] -+ -+ if (typeof opts === 'string') { -+ opts = { uri: opts } -+ } -+ -+ if (!opts || !opts.uri) { -+ throw new InvalidArgumentError('Proxy opts.uri is mandatory') -+ } -+ -+ const { clientFactory = defaultFactory } = opts -+ -+ if (typeof clientFactory !== 'function') { -+ throw new InvalidArgumentError('Proxy opts.clientFactory must be a function.') -+ } -+ -+ this[kRequestTls] = opts.requestTls -+ this[kProxyTls] = opts.proxyTls -+ this[kProxyHeaders] = opts.headers || {} -+ -+ const resolvedUrl = new URL(opts.uri) -+ const { origin, port, host, username, password } = resolvedUrl -+ -+ if (opts.auth && opts.token) { -+ throw new InvalidArgumentError('opts.auth cannot be used in combination with opts.token') -+ } else if (opts.auth) { -+ /* @deprecated in favour of opts.token */ -+ this[kProxyHeaders]['proxy-authorization'] = `Basic ${opts.auth}` -+ } else if (opts.token) { -+ this[kProxyHeaders]['proxy-authorization'] = opts.token -+ } else if (username && password) { -+ this[kProxyHeaders]['proxy-authorization'] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:${decodeURIComponent(password)}`).toString('base64')}` -+ } -+ -+ const connect = buildConnector({ ...opts.proxyTls }) -+ this[kConnectEndpoint] = buildConnector({ ...opts.requestTls }) -+ this[kClient] = clientFactory(resolvedUrl, { connect }) -+ this[kAgent] = new Agent({ -+ ...opts, -+ connect: async (opts, callback) => { -+ let requestedHost = opts.host -+ if (!opts.port) { -+ requestedHost += `:${defaultProtocolPort(opts.protocol)}` -+ } -+ try { -+ const { socket, statusCode } = await this[kClient].connect({ -+ origin, -+ port, -+ path: requestedHost, -+ signal: opts.signal, -+ headers: { -+ ...this[kProxyHeaders], -+ host -+ } -+ }) -+ if (statusCode !== 200) { -+ socket.on('error', () => {}).destroy() -+ callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`)) -+ } -+ if (opts.protocol !== 'https:') { -+ callback(null, socket) -+ return -+ } -+ let servername -+ if (this[kRequestTls]) { -+ servername = this[kRequestTls].servername -+ } else { -+ servername = opts.servername -+ } -+ this[kConnectEndpoint]({ ...opts, servername, httpSocket: socket }, callback) -+ } catch (err) { -+ callback(err) -+ } -+ } -+ }) -+ } -+ -+ dispatch (opts, handler) { -+ const { host } = new URL(opts.origin) -+ const headers = buildHeaders(opts.headers) -+ throwIfProxyAuthIsSent(headers) -+ return this[kAgent].dispatch( -+ { -+ ...opts, -+ headers: { -+ ...headers, -+ host -+ } -+ }, -+ handler -+ ) -+ } -+ -+ async [kClose] () { -+ await this[kAgent].close() -+ await this[kClient].close() -+ } -+ -+ async [kDestroy] () { -+ await this[kAgent].destroy() -+ await this[kClient].destroy() -+ } -+} -+ -+/** -+ * @param {string[] | Record} headers -+ * @returns {Record} -+ */ -+function buildHeaders (headers) { -+ // When using undici.fetch, the headers list is stored -+ // as an array. -+ if (Array.isArray(headers)) { -+ /** @type {Record} */ -+ const headersPair = {} -+ -+ for (let i = 0; i < headers.length; i += 2) { -+ headersPair[headers[i]] = headers[i + 1] -+ } -+ -+ return headersPair -+ } -+ -+ return headers -+} -+ -+/** -+ * @param {Record} headers -+ * -+ * Previous versions of ProxyAgent suggests the Proxy-Authorization in request headers -+ * Nevertheless, it was changed and to avoid a security vulnerability by end users -+ * this check was created. -+ * It should be removed in the next major version for performance reasons -+ */ -+function throwIfProxyAuthIsSent (headers) { -+ const existProxyAuth = headers && Object.keys(headers) -+ .find((key) => key.toLowerCase() === 'proxy-authorization') -+ if (existProxyAuth) { -+ throw new InvalidArgumentError('Proxy-Authorization should be sent in ProxyAgent constructor') -+ } -+} -+ -+module.exports = ProxyAgent -+ -+ -+/***/ }), -+ -+/***/ 8752: -+/***/ ((module) => { -+ -+"use strict"; -+ -+ -+let fastNow = Date.now() -+let fastNowTimeout -+ -+const fastTimers = [] -+ -+function onTimeout () { -+ fastNow = Date.now() -+ -+ let len = fastTimers.length -+ let idx = 0 -+ while (idx < len) { -+ const timer = fastTimers[idx] -+ -+ if (timer.state === 0) { -+ timer.state = fastNow + timer.delay -+ } else if (timer.state > 0 && fastNow >= timer.state) { -+ timer.state = -1 -+ timer.callback(timer.opaque) -+ } -+ -+ if (timer.state === -1) { -+ timer.state = -2 -+ if (idx !== len - 1) { -+ fastTimers[idx] = fastTimers.pop() -+ } else { -+ fastTimers.pop() -+ } -+ len -= 1 -+ } else { -+ idx += 1 -+ } -+ } -+ -+ if (fastTimers.length > 0) { -+ refreshTimeout() -+ } -+} -+ -+function refreshTimeout () { -+ if (fastNowTimeout && fastNowTimeout.refresh) { -+ fastNowTimeout.refresh() -+ } else { -+ clearTimeout(fastNowTimeout) -+ fastNowTimeout = setTimeout(onTimeout, 1e3) -+ if (fastNowTimeout.unref) { -+ fastNowTimeout.unref() -+ } -+ } -+} -+ -+class Timeout { -+ constructor (callback, delay, opaque) { -+ this.callback = callback -+ this.delay = delay -+ this.opaque = opaque -+ -+ // -2 not in timer list -+ // -1 in timer list but inactive -+ // 0 in timer list waiting for time -+ // > 0 in timer list waiting for time to expire -+ this.state = -2 -+ -+ this.refresh() -+ } -+ -+ refresh () { -+ if (this.state === -2) { -+ fastTimers.push(this) -+ if (!fastNowTimeout || fastTimers.length === 1) { -+ refreshTimeout() -+ } -+ } -+ -+ this.state = 0 -+ } -+ -+ clear () { -+ this.state = -1 -+ } -+} -+ -+module.exports = { -+ setTimeout (callback, delay, opaque) { -+ return delay < 1e3 -+ ? setTimeout(callback, delay, opaque) -+ : new Timeout(callback, delay, opaque) -+ }, -+ clearTimeout (timeout) { -+ if (timeout instanceof Timeout) { -+ timeout.clear() -+ } else { -+ clearTimeout(timeout) -+ } -+ } -+} -+ -+ -+/***/ }), -+ -+/***/ 1799: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const diagnosticsChannel = __nccwpck_require__(7643) -+const { uid, states } = __nccwpck_require__(5825) -+const { -+ kReadyState, -+ kSentClose, -+ kByteParser, -+ kReceivedClose -+} = __nccwpck_require__(7742) -+const { fireEvent, failWebsocketConnection } = __nccwpck_require__(2401) -+const { CloseEvent } = __nccwpck_require__(8702) -+const { makeRequest } = __nccwpck_require__(1587) -+const { fetching } = __nccwpck_require__(8000) -+const { Headers } = __nccwpck_require__(3545) -+const { getGlobalDispatcher } = __nccwpck_require__(7718) -+const { kHeadersList } = __nccwpck_require__(3745) -+ -+const channels = {} -+channels.open = diagnosticsChannel.channel('undici:websocket:open') -+channels.close = diagnosticsChannel.channel('undici:websocket:close') -+channels.socketError = diagnosticsChannel.channel('undici:websocket:socket_error') -+ -+/** @type {import('crypto')} */ -+let crypto -+try { -+ crypto = __nccwpck_require__(6113) -+} catch { -+ -+} -+ -+/** -+ * @see https://websockets.spec.whatwg.org/#concept-websocket-establish -+ * @param {URL} url -+ * @param {string|string[]} protocols -+ * @param {import('./websocket').WebSocket} ws -+ * @param {(response: any) => void} onEstablish -+ * @param {Partial} options -+ */ -+function establishWebSocketConnection (url, protocols, ws, onEstablish, options) { -+ // 1. Let requestURL be a copy of url, with its scheme set to "http", if url’s -+ // scheme is "ws", and to "https" otherwise. -+ const requestURL = url -+ -+ requestURL.protocol = url.protocol === 'ws:' ? 'http:' : 'https:' -+ -+ // 2. Let request be a new request, whose URL is requestURL, client is client, -+ // service-workers mode is "none", referrer is "no-referrer", mode is -+ // "websocket", credentials mode is "include", cache mode is "no-store" , -+ // and redirect mode is "error". -+ const request = makeRequest({ -+ urlList: [requestURL], -+ serviceWorkers: 'none', -+ referrer: 'no-referrer', -+ mode: 'websocket', -+ credentials: 'include', -+ cache: 'no-store', -+ redirect: 'error' -+ }) -+ -+ // Note: undici extension, allow setting custom headers. -+ if (options.headers) { -+ const headersList = new Headers(options.headers)[kHeadersList] -+ -+ request.headersList = headersList -+ } -+ -+ // 3. Append (`Upgrade`, `websocket`) to request’s header list. -+ // 4. Append (`Connection`, `Upgrade`) to request’s header list. -+ // Note: both of these are handled by undici currently. -+ // https://github.com/nodejs/undici/blob/68c269c4144c446f3f1220951338daef4a6b5ec4/lib/client.js#L1397 -+ -+ // 5. Let keyValue be a nonce consisting of a randomly selected -+ // 16-byte value that has been forgiving-base64-encoded and -+ // isomorphic encoded. -+ const keyValue = crypto.randomBytes(16).toString('base64') -+ -+ // 6. Append (`Sec-WebSocket-Key`, keyValue) to request’s -+ // header list. -+ request.headersList.append('sec-websocket-key', keyValue) -+ -+ // 7. Append (`Sec-WebSocket-Version`, `13`) to request’s -+ // header list. -+ request.headersList.append('sec-websocket-version', '13') -+ -+ // 8. For each protocol in protocols, combine -+ // (`Sec-WebSocket-Protocol`, protocol) in request’s header -+ // list. -+ for (const protocol of protocols) { -+ request.headersList.append('sec-websocket-protocol', protocol) -+ } -+ -+ // 9. Let permessageDeflate be a user-agent defined -+ // "permessage-deflate" extension header value. -+ // https://github.com/mozilla/gecko-dev/blob/ce78234f5e653a5d3916813ff990f053510227bc/netwerk/protocol/websocket/WebSocketChannel.cpp#L2673 -+ // TODO: enable once permessage-deflate is supported -+ const permessageDeflate = '' // 'permessage-deflate; 15' -+ -+ // 10. Append (`Sec-WebSocket-Extensions`, permessageDeflate) to -+ // request’s header list. -+ // request.headersList.append('sec-websocket-extensions', permessageDeflate) -+ -+ // 11. Fetch request with useParallelQueue set to true, and -+ // processResponse given response being these steps: -+ const controller = fetching({ -+ request, -+ useParallelQueue: true, -+ dispatcher: options.dispatcher ?? getGlobalDispatcher(), -+ processResponse (response) { -+ // 1. If response is a network error or its status is not 101, -+ // fail the WebSocket connection. -+ if (response.type === 'error' || response.status !== 101) { -+ failWebsocketConnection(ws, 'Received network error or non-101 status code.') -+ return -+ } -+ -+ // 2. If protocols is not the empty list and extracting header -+ // list values given `Sec-WebSocket-Protocol` and response’s -+ // header list results in null, failure, or the empty byte -+ // sequence, then fail the WebSocket connection. -+ if (protocols.length !== 0 && !response.headersList.get('Sec-WebSocket-Protocol')) { -+ failWebsocketConnection(ws, 'Server did not respond with sent protocols.') -+ return -+ } -+ -+ // 3. Follow the requirements stated step 2 to step 6, inclusive, -+ // of the last set of steps in section 4.1 of The WebSocket -+ // Protocol to validate response. This either results in fail -+ // the WebSocket connection or the WebSocket connection is -+ // established. -+ -+ // 2. If the response lacks an |Upgrade| header field or the |Upgrade| -+ // header field contains a value that is not an ASCII case- -+ // insensitive match for the value "websocket", the client MUST -+ // _Fail the WebSocket Connection_. -+ if (response.headersList.get('Upgrade')?.toLowerCase() !== 'websocket') { -+ failWebsocketConnection(ws, 'Server did not set Upgrade header to "websocket".') -+ return -+ } -+ -+ // 3. If the response lacks a |Connection| header field or the -+ // |Connection| header field doesn't contain a token that is an -+ // ASCII case-insensitive match for the value "Upgrade", the client -+ // MUST _Fail the WebSocket Connection_. -+ if (response.headersList.get('Connection')?.toLowerCase() !== 'upgrade') { -+ failWebsocketConnection(ws, 'Server did not set Connection header to "upgrade".') -+ return -+ } -+ -+ // 4. If the response lacks a |Sec-WebSocket-Accept| header field or -+ // the |Sec-WebSocket-Accept| contains a value other than the -+ // base64-encoded SHA-1 of the concatenation of the |Sec-WebSocket- -+ // Key| (as a string, not base64-decoded) with the string "258EAFA5- -+ // E914-47DA-95CA-C5AB0DC85B11" but ignoring any leading and -+ // trailing whitespace, the client MUST _Fail the WebSocket -+ // Connection_. -+ const secWSAccept = response.headersList.get('Sec-WebSocket-Accept') -+ const digest = crypto.createHash('sha1').update(keyValue + uid).digest('base64') -+ if (secWSAccept !== digest) { -+ failWebsocketConnection(ws, 'Incorrect hash received in Sec-WebSocket-Accept header.') -+ return -+ } -+ -+ // 5. If the response includes a |Sec-WebSocket-Extensions| header -+ // field and this header field indicates the use of an extension -+ // that was not present in the client's handshake (the server has -+ // indicated an extension not requested by the client), the client -+ // MUST _Fail the WebSocket Connection_. (The parsing of this -+ // header field to determine which extensions are requested is -+ // discussed in Section 9.1.) -+ const secExtension = response.headersList.get('Sec-WebSocket-Extensions') -+ -+ if (secExtension !== null && secExtension !== permessageDeflate) { -+ failWebsocketConnection(ws, 'Received different permessage-deflate than the one set.') -+ return -+ } -+ -+ // 6. If the response includes a |Sec-WebSocket-Protocol| header field -+ // and this header field indicates the use of a subprotocol that was -+ // not present in the client's handshake (the server has indicated a -+ // subprotocol not requested by the client), the client MUST _Fail -+ // the WebSocket Connection_. -+ const secProtocol = response.headersList.get('Sec-WebSocket-Protocol') -+ -+ if (secProtocol !== null && secProtocol !== request.headersList.get('Sec-WebSocket-Protocol')) { -+ failWebsocketConnection(ws, 'Protocol was not set in the opening handshake.') -+ return -+ } -+ -+ response.socket.on('data', onSocketData) -+ response.socket.on('close', onSocketClose) -+ response.socket.on('error', onSocketError) -+ -+ if (channels.open.hasSubscribers) { -+ channels.open.publish({ -+ address: response.socket.address(), -+ protocol: secProtocol, -+ extensions: secExtension -+ }) -+ } -+ -+ onEstablish(response) -+ } -+ }) -+ -+ return controller -+} -+ -+/** -+ * @param {Buffer} chunk -+ */ -+function onSocketData (chunk) { -+ if (!this.ws[kByteParser].write(chunk)) { -+ this.pause() -+ } -+} -+ -+/** -+ * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol -+ * @see https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.4 -+ */ -+function onSocketClose () { -+ const { ws } = this -+ -+ // If the TCP connection was closed after the -+ // WebSocket closing handshake was completed, the WebSocket connection -+ // is said to have been closed _cleanly_. -+ const wasClean = ws[kSentClose] && ws[kReceivedClose] -+ -+ let code = 1005 -+ let reason = '' -+ -+ const result = ws[kByteParser].closingInfo -+ -+ if (result) { -+ code = result.code ?? 1005 -+ reason = result.reason -+ } else if (!ws[kSentClose]) { -+ // If _The WebSocket -+ // Connection is Closed_ and no Close control frame was received by the -+ // endpoint (such as could occur if the underlying transport connection -+ // is lost), _The WebSocket Connection Close Code_ is considered to be -+ // 1006. -+ code = 1006 -+ } -+ -+ // 1. Change the ready state to CLOSED (3). -+ ws[kReadyState] = states.CLOSED -+ -+ // 2. If the user agent was required to fail the WebSocket -+ // connection, or if the WebSocket connection was closed -+ // after being flagged as full, fire an event named error -+ // at the WebSocket object. -+ // TODO -+ -+ // 3. Fire an event named close at the WebSocket object, -+ // using CloseEvent, with the wasClean attribute -+ // initialized to true if the connection closed cleanly -+ // and false otherwise, the code attribute initialized to -+ // the WebSocket connection close code, and the reason -+ // attribute initialized to the result of applying UTF-8 -+ // decode without BOM to the WebSocket connection close -+ // reason. -+ fireEvent('close', ws, CloseEvent, { -+ wasClean, code, reason -+ }) -+ -+ if (channels.close.hasSubscribers) { -+ channels.close.publish({ -+ websocket: ws, -+ code, -+ reason -+ }) -+ } -+} -+ -+function onSocketError (error) { -+ const { ws } = this -+ -+ ws[kReadyState] = states.CLOSING -+ -+ if (channels.socketError.hasSubscribers) { -+ channels.socketError.publish(error) -+ } -+ -+ this.destroy() -+} -+ -+module.exports = { -+ establishWebSocketConnection -+} -+ -+ -+/***/ }), -+ -+/***/ 5825: -+/***/ ((module) => { -+ -+"use strict"; -+ -+ -+// This is a Globally Unique Identifier unique used -+// to validate that the endpoint accepts websocket -+// connections. -+// See https://www.rfc-editor.org/rfc/rfc6455.html#section-1.3 -+const uid = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11' -+ -+/** @type {PropertyDescriptor} */ -+const staticPropertyDescriptors = { -+ enumerable: true, -+ writable: false, -+ configurable: false -+} -+ -+const states = { -+ CONNECTING: 0, -+ OPEN: 1, -+ CLOSING: 2, -+ CLOSED: 3 -+} -+ -+const opcodes = { -+ CONTINUATION: 0x0, -+ TEXT: 0x1, -+ BINARY: 0x2, -+ CLOSE: 0x8, -+ PING: 0x9, -+ PONG: 0xA -+} -+ -+const maxUnsigned16Bit = 2 ** 16 - 1 // 65535 -+ -+const parserStates = { -+ INFO: 0, -+ PAYLOADLENGTH_16: 2, -+ PAYLOADLENGTH_64: 3, -+ READ_DATA: 4 -+} -+ -+const emptyBuffer = Buffer.allocUnsafe(0) -+ -+module.exports = { -+ uid, -+ staticPropertyDescriptors, -+ states, -+ opcodes, -+ maxUnsigned16Bit, -+ parserStates, -+ emptyBuffer -+} -+ -+ -+/***/ }), -+ -+/***/ 8702: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { webidl } = __nccwpck_require__(5611) -+const { kEnumerableProperty } = __nccwpck_require__(929) -+const { MessagePort } = __nccwpck_require__(1267) -+ -+/** -+ * @see https://html.spec.whatwg.org/multipage/comms.html#messageevent -+ */ -+class MessageEvent extends Event { -+ #eventInit -+ -+ constructor (type, eventInitDict = {}) { -+ webidl.argumentLengthCheck(arguments, 1, { header: 'MessageEvent constructor' }) -+ -+ type = webidl.converters.DOMString(type) -+ eventInitDict = webidl.converters.MessageEventInit(eventInitDict) -+ -+ super(type, eventInitDict) -+ -+ this.#eventInit = eventInitDict -+ } -+ -+ get data () { -+ webidl.brandCheck(this, MessageEvent) -+ -+ return this.#eventInit.data -+ } -+ -+ get origin () { -+ webidl.brandCheck(this, MessageEvent) -+ -+ return this.#eventInit.origin -+ } -+ -+ get lastEventId () { -+ webidl.brandCheck(this, MessageEvent) -+ -+ return this.#eventInit.lastEventId -+ } -+ -+ get source () { -+ webidl.brandCheck(this, MessageEvent) -+ -+ return this.#eventInit.source -+ } -+ -+ get ports () { -+ webidl.brandCheck(this, MessageEvent) -+ -+ if (!Object.isFrozen(this.#eventInit.ports)) { -+ Object.freeze(this.#eventInit.ports) -+ } -+ -+ return this.#eventInit.ports -+ } -+ -+ initMessageEvent ( -+ type, -+ bubbles = false, -+ cancelable = false, -+ data = null, -+ origin = '', -+ lastEventId = '', -+ source = null, -+ ports = [] -+ ) { -+ webidl.brandCheck(this, MessageEvent) -+ -+ webidl.argumentLengthCheck(arguments, 1, { header: 'MessageEvent.initMessageEvent' }) -+ -+ return new MessageEvent(type, { -+ bubbles, cancelable, data, origin, lastEventId, source, ports -+ }) -+ } -+} -+ -+/** -+ * @see https://websockets.spec.whatwg.org/#the-closeevent-interface -+ */ -+class CloseEvent extends Event { -+ #eventInit -+ -+ constructor (type, eventInitDict = {}) { -+ webidl.argumentLengthCheck(arguments, 1, { header: 'CloseEvent constructor' }) -+ -+ type = webidl.converters.DOMString(type) -+ eventInitDict = webidl.converters.CloseEventInit(eventInitDict) -+ -+ super(type, eventInitDict) -+ -+ this.#eventInit = eventInitDict -+ } -+ -+ get wasClean () { -+ webidl.brandCheck(this, CloseEvent) -+ -+ return this.#eventInit.wasClean -+ } -+ -+ get code () { -+ webidl.brandCheck(this, CloseEvent) -+ -+ return this.#eventInit.code -+ } -+ -+ get reason () { -+ webidl.brandCheck(this, CloseEvent) -+ -+ return this.#eventInit.reason -+ } -+} -+ -+// https://html.spec.whatwg.org/multipage/webappapis.html#the-errorevent-interface -+class ErrorEvent extends Event { -+ #eventInit -+ -+ constructor (type, eventInitDict) { -+ webidl.argumentLengthCheck(arguments, 1, { header: 'ErrorEvent constructor' }) -+ -+ super(type, eventInitDict) -+ -+ type = webidl.converters.DOMString(type) -+ eventInitDict = webidl.converters.ErrorEventInit(eventInitDict ?? {}) -+ -+ this.#eventInit = eventInitDict -+ } -+ -+ get message () { -+ webidl.brandCheck(this, ErrorEvent) -+ -+ return this.#eventInit.message -+ } -+ -+ get filename () { -+ webidl.brandCheck(this, ErrorEvent) -+ -+ return this.#eventInit.filename -+ } -+ -+ get lineno () { -+ webidl.brandCheck(this, ErrorEvent) -+ -+ return this.#eventInit.lineno -+ } -+ -+ get colno () { -+ webidl.brandCheck(this, ErrorEvent) -+ -+ return this.#eventInit.colno -+ } -+ -+ get error () { -+ webidl.brandCheck(this, ErrorEvent) -+ -+ return this.#eventInit.error -+ } -+} -+ -+Object.defineProperties(MessageEvent.prototype, { -+ [Symbol.toStringTag]: { -+ value: 'MessageEvent', -+ configurable: true -+ }, -+ data: kEnumerableProperty, -+ origin: kEnumerableProperty, -+ lastEventId: kEnumerableProperty, -+ source: kEnumerableProperty, -+ ports: kEnumerableProperty, -+ initMessageEvent: kEnumerableProperty -+}) -+ -+Object.defineProperties(CloseEvent.prototype, { -+ [Symbol.toStringTag]: { -+ value: 'CloseEvent', -+ configurable: true -+ }, -+ reason: kEnumerableProperty, -+ code: kEnumerableProperty, -+ wasClean: kEnumerableProperty -+}) -+ -+Object.defineProperties(ErrorEvent.prototype, { -+ [Symbol.toStringTag]: { -+ value: 'ErrorEvent', -+ configurable: true -+ }, -+ message: kEnumerableProperty, -+ filename: kEnumerableProperty, -+ lineno: kEnumerableProperty, -+ colno: kEnumerableProperty, -+ error: kEnumerableProperty -+}) -+ -+webidl.converters.MessagePort = webidl.interfaceConverter(MessagePort) -+ -+webidl.converters['sequence'] = webidl.sequenceConverter( -+ webidl.converters.MessagePort -+) -+ -+const eventInit = [ -+ { -+ key: 'bubbles', -+ converter: webidl.converters.boolean, -+ defaultValue: false -+ }, -+ { -+ key: 'cancelable', -+ converter: webidl.converters.boolean, -+ defaultValue: false -+ }, -+ { -+ key: 'composed', -+ converter: webidl.converters.boolean, -+ defaultValue: false -+ } -+] -+ -+webidl.converters.MessageEventInit = webidl.dictionaryConverter([ -+ ...eventInit, -+ { -+ key: 'data', -+ converter: webidl.converters.any, -+ defaultValue: null -+ }, -+ { -+ key: 'origin', -+ converter: webidl.converters.USVString, -+ defaultValue: '' -+ }, -+ { -+ key: 'lastEventId', -+ converter: webidl.converters.DOMString, -+ defaultValue: '' -+ }, -+ { -+ key: 'source', -+ // Node doesn't implement WindowProxy or ServiceWorker, so the only -+ // valid value for source is a MessagePort. -+ converter: webidl.nullableConverter(webidl.converters.MessagePort), -+ defaultValue: null -+ }, -+ { -+ key: 'ports', -+ converter: webidl.converters['sequence'], -+ get defaultValue () { -+ return [] -+ } -+ } -+]) -+ -+webidl.converters.CloseEventInit = webidl.dictionaryConverter([ -+ ...eventInit, -+ { -+ key: 'wasClean', -+ converter: webidl.converters.boolean, -+ defaultValue: false -+ }, -+ { -+ key: 'code', -+ converter: webidl.converters['unsigned short'], -+ defaultValue: 0 -+ }, -+ { -+ key: 'reason', -+ converter: webidl.converters.USVString, -+ defaultValue: '' -+ } -+]) -+ -+webidl.converters.ErrorEventInit = webidl.dictionaryConverter([ -+ ...eventInit, -+ { -+ key: 'message', -+ converter: webidl.converters.DOMString, -+ defaultValue: '' -+ }, -+ { -+ key: 'filename', -+ converter: webidl.converters.USVString, -+ defaultValue: '' -+ }, -+ { -+ key: 'lineno', -+ converter: webidl.converters['unsigned long'], -+ defaultValue: 0 -+ }, -+ { -+ key: 'colno', -+ converter: webidl.converters['unsigned long'], -+ defaultValue: 0 -+ }, -+ { -+ key: 'error', -+ converter: webidl.converters.any -+ } -+]) -+ -+module.exports = { -+ MessageEvent, -+ CloseEvent, -+ ErrorEvent -+} -+ -+ -+/***/ }), -+ -+/***/ 8169: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { maxUnsigned16Bit } = __nccwpck_require__(5825) -+ -+/** @type {import('crypto')} */ -+let crypto -+try { -+ crypto = __nccwpck_require__(6113) -+} catch { -+ -+} -+ -+class WebsocketFrameSend { -+ /** -+ * @param {Buffer|undefined} data -+ */ -+ constructor (data) { -+ this.frameData = data -+ this.maskKey = crypto.randomBytes(4) -+ } -+ -+ createFrame (opcode) { -+ const bodyLength = this.frameData?.byteLength ?? 0 -+ -+ /** @type {number} */ -+ let payloadLength = bodyLength // 0-125 -+ let offset = 6 -+ -+ if (bodyLength > maxUnsigned16Bit) { -+ offset += 8 // payload length is next 8 bytes -+ payloadLength = 127 -+ } else if (bodyLength > 125) { -+ offset += 2 // payload length is next 2 bytes -+ payloadLength = 126 -+ } -+ -+ const buffer = Buffer.allocUnsafe(bodyLength + offset) -+ -+ // Clear first 2 bytes, everything else is overwritten -+ buffer[0] = buffer[1] = 0 -+ buffer[0] |= 0x80 // FIN -+ buffer[0] = (buffer[0] & 0xF0) + opcode // opcode -+ -+ /*! ws. MIT License. Einar Otto Stangvik */ -+ buffer[offset - 4] = this.maskKey[0] -+ buffer[offset - 3] = this.maskKey[1] -+ buffer[offset - 2] = this.maskKey[2] -+ buffer[offset - 1] = this.maskKey[3] -+ -+ buffer[1] = payloadLength -+ -+ if (payloadLength === 126) { -+ buffer.writeUInt16BE(bodyLength, 2) -+ } else if (payloadLength === 127) { -+ // Clear extended payload length -+ buffer[2] = buffer[3] = 0 -+ buffer.writeUIntBE(bodyLength, 4, 6) -+ } -+ -+ buffer[1] |= 0x80 // MASK -+ -+ // mask body -+ for (let i = 0; i < bodyLength; i++) { -+ buffer[offset + i] = this.frameData[i] ^ this.maskKey[i % 4] -+ } -+ -+ return buffer -+ } -+} -+ -+module.exports = { -+ WebsocketFrameSend -+} -+ -+ -+/***/ }), -+ -+/***/ 1010: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { Writable } = __nccwpck_require__(2781) -+const diagnosticsChannel = __nccwpck_require__(7643) -+const { parserStates, opcodes, states, emptyBuffer } = __nccwpck_require__(5825) -+const { kReadyState, kSentClose, kResponse, kReceivedClose } = __nccwpck_require__(7742) -+const { isValidStatusCode, failWebsocketConnection, websocketMessageReceived } = __nccwpck_require__(2401) -+const { WebsocketFrameSend } = __nccwpck_require__(8169) -+ -+// This code was influenced by ws released under the MIT license. -+// Copyright (c) 2011 Einar Otto Stangvik -+// Copyright (c) 2013 Arnout Kazemier and contributors -+// Copyright (c) 2016 Luigi Pinca and contributors -+ -+const channels = {} -+channels.ping = diagnosticsChannel.channel('undici:websocket:ping') -+channels.pong = diagnosticsChannel.channel('undici:websocket:pong') -+ -+class ByteParser extends Writable { -+ #buffers = [] -+ #byteOffset = 0 -+ -+ #state = parserStates.INFO -+ -+ #info = {} -+ #fragments = [] -+ -+ constructor (ws) { -+ super() -+ -+ this.ws = ws -+ } -+ -+ /** -+ * @param {Buffer} chunk -+ * @param {() => void} callback -+ */ -+ _write (chunk, _, callback) { -+ this.#buffers.push(chunk) -+ this.#byteOffset += chunk.length -+ -+ this.run(callback) -+ } -+ -+ /** -+ * Runs whenever a new chunk is received. -+ * Callback is called whenever there are no more chunks buffering, -+ * or not enough bytes are buffered to parse. -+ */ -+ run (callback) { -+ while (true) { -+ if (this.#state === parserStates.INFO) { -+ // If there aren't enough bytes to parse the payload length, etc. -+ if (this.#byteOffset < 2) { -+ return callback() -+ } -+ -+ const buffer = this.consume(2) -+ -+ this.#info.fin = (buffer[0] & 0x80) !== 0 -+ this.#info.opcode = buffer[0] & 0x0F -+ -+ // If we receive a fragmented message, we use the type of the first -+ // frame to parse the full message as binary/text, when it's terminated -+ this.#info.originalOpcode ??= this.#info.opcode -+ -+ this.#info.fragmented = !this.#info.fin && this.#info.opcode !== opcodes.CONTINUATION -+ -+ if (this.#info.fragmented && this.#info.opcode !== opcodes.BINARY && this.#info.opcode !== opcodes.TEXT) { -+ // Only text and binary frames can be fragmented -+ failWebsocketConnection(this.ws, 'Invalid frame type was fragmented.') -+ return -+ } -+ -+ const payloadLength = buffer[1] & 0x7F -+ -+ if (payloadLength <= 125) { -+ this.#info.payloadLength = payloadLength -+ this.#state = parserStates.READ_DATA -+ } else if (payloadLength === 126) { -+ this.#state = parserStates.PAYLOADLENGTH_16 -+ } else if (payloadLength === 127) { -+ this.#state = parserStates.PAYLOADLENGTH_64 -+ } -+ -+ if (this.#info.fragmented && payloadLength > 125) { -+ // A fragmented frame can't be fragmented itself -+ failWebsocketConnection(this.ws, 'Fragmented frame exceeded 125 bytes.') -+ return -+ } else if ( -+ (this.#info.opcode === opcodes.PING || -+ this.#info.opcode === opcodes.PONG || -+ this.#info.opcode === opcodes.CLOSE) && -+ payloadLength > 125 -+ ) { -+ // Control frames can have a payload length of 125 bytes MAX -+ failWebsocketConnection(this.ws, 'Payload length for control frame exceeded 125 bytes.') -+ return -+ } else if (this.#info.opcode === opcodes.CLOSE) { -+ if (payloadLength === 1) { -+ failWebsocketConnection(this.ws, 'Received close frame with a 1-byte body.') -+ return -+ } -+ -+ const body = this.consume(payloadLength) -+ -+ this.#info.closeInfo = this.parseCloseBody(false, body) -+ -+ if (!this.ws[kSentClose]) { -+ // If an endpoint receives a Close frame and did not previously send a -+ // Close frame, the endpoint MUST send a Close frame in response. (When -+ // sending a Close frame in response, the endpoint typically echos the -+ // status code it received.) -+ const body = Buffer.allocUnsafe(2) -+ body.writeUInt16BE(this.#info.closeInfo.code, 0) -+ const closeFrame = new WebsocketFrameSend(body) -+ -+ this.ws[kResponse].socket.write( -+ closeFrame.createFrame(opcodes.CLOSE), -+ (err) => { -+ if (!err) { -+ this.ws[kSentClose] = true -+ } -+ } -+ ) -+ } -+ -+ // Upon either sending or receiving a Close control frame, it is said -+ // that _The WebSocket Closing Handshake is Started_ and that the -+ // WebSocket connection is in the CLOSING state. -+ this.ws[kReadyState] = states.CLOSING -+ this.ws[kReceivedClose] = true -+ -+ this.end() -+ -+ return -+ } else if (this.#info.opcode === opcodes.PING) { -+ // Upon receipt of a Ping frame, an endpoint MUST send a Pong frame in -+ // response, unless it already received a Close frame. -+ // A Pong frame sent in response to a Ping frame must have identical -+ // "Application data" -+ -+ const body = this.consume(payloadLength) -+ -+ if (!this.ws[kReceivedClose]) { -+ const frame = new WebsocketFrameSend(body) -+ -+ this.ws[kResponse].socket.write(frame.createFrame(opcodes.PONG)) -+ -+ if (channels.ping.hasSubscribers) { -+ channels.ping.publish({ -+ payload: body -+ }) -+ } -+ } -+ -+ this.#state = parserStates.INFO -+ -+ if (this.#byteOffset > 0) { -+ continue -+ } else { -+ callback() -+ return -+ } -+ } else if (this.#info.opcode === opcodes.PONG) { -+ // A Pong frame MAY be sent unsolicited. This serves as a -+ // unidirectional heartbeat. A response to an unsolicited Pong frame is -+ // not expected. -+ -+ const body = this.consume(payloadLength) -+ -+ if (channels.pong.hasSubscribers) { -+ channels.pong.publish({ -+ payload: body -+ }) -+ } -+ -+ if (this.#byteOffset > 0) { -+ continue -+ } else { -+ callback() -+ return -+ } -+ } -+ } else if (this.#state === parserStates.PAYLOADLENGTH_16) { -+ if (this.#byteOffset < 2) { -+ return callback() -+ } -+ -+ const buffer = this.consume(2) -+ -+ this.#info.payloadLength = buffer.readUInt16BE(0) -+ this.#state = parserStates.READ_DATA -+ } else if (this.#state === parserStates.PAYLOADLENGTH_64) { -+ if (this.#byteOffset < 8) { -+ return callback() -+ } -+ -+ const buffer = this.consume(8) -+ const upper = buffer.readUInt32BE(0) -+ -+ // 2^31 is the maxinimum bytes an arraybuffer can contain -+ // on 32-bit systems. Although, on 64-bit systems, this is -+ // 2^53-1 bytes. -+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Invalid_array_length -+ // https://source.chromium.org/chromium/chromium/src/+/main:v8/src/common/globals.h;drc=1946212ac0100668f14eb9e2843bdd846e510a1e;bpv=1;bpt=1;l=1275 -+ // https://source.chromium.org/chromium/chromium/src/+/main:v8/src/objects/js-array-buffer.h;l=34;drc=1946212ac0100668f14eb9e2843bdd846e510a1e -+ if (upper > 2 ** 31 - 1) { -+ failWebsocketConnection(this.ws, 'Received payload length > 2^31 bytes.') -+ return -+ } -+ -+ const lower = buffer.readUInt32BE(4) -+ -+ this.#info.payloadLength = (upper << 8) + lower -+ this.#state = parserStates.READ_DATA -+ } else if (this.#state === parserStates.READ_DATA) { -+ if (this.#byteOffset < this.#info.payloadLength) { -+ // If there is still more data in this chunk that needs to be read -+ return callback() -+ } else if (this.#byteOffset >= this.#info.payloadLength) { -+ // If the server sent multiple frames in a single chunk -+ -+ const body = this.consume(this.#info.payloadLength) -+ -+ this.#fragments.push(body) -+ -+ // If the frame is unfragmented, or a fragmented frame was terminated, -+ // a message was received -+ if (!this.#info.fragmented || (this.#info.fin && this.#info.opcode === opcodes.CONTINUATION)) { -+ const fullMessage = Buffer.concat(this.#fragments) -+ -+ websocketMessageReceived(this.ws, this.#info.originalOpcode, fullMessage) -+ -+ this.#info = {} -+ this.#fragments.length = 0 -+ } -+ -+ this.#state = parserStates.INFO -+ } -+ } -+ -+ if (this.#byteOffset > 0) { -+ continue -+ } else { -+ callback() -+ break -+ } -+ } -+ } -+ -+ /** -+ * Take n bytes from the buffered Buffers -+ * @param {number} n -+ * @returns {Buffer|null} -+ */ -+ consume (n) { -+ if (n > this.#byteOffset) { -+ return null -+ } else if (n === 0) { -+ return emptyBuffer -+ } -+ -+ if (this.#buffers[0].length === n) { -+ this.#byteOffset -= this.#buffers[0].length -+ return this.#buffers.shift() -+ } -+ -+ const buffer = Buffer.allocUnsafe(n) -+ let offset = 0 -+ -+ while (offset !== n) { -+ const next = this.#buffers[0] -+ const { length } = next -+ -+ if (length + offset === n) { -+ buffer.set(this.#buffers.shift(), offset) -+ break -+ } else if (length + offset > n) { -+ buffer.set(next.subarray(0, n - offset), offset) -+ this.#buffers[0] = next.subarray(n - offset) -+ break -+ } else { -+ buffer.set(this.#buffers.shift(), offset) -+ offset += next.length -+ } -+ } -+ -+ this.#byteOffset -= n -+ -+ return buffer -+ } -+ -+ parseCloseBody (onlyCode, data) { -+ // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.5 -+ /** @type {number|undefined} */ -+ let code -+ -+ if (data.length >= 2) { -+ // _The WebSocket Connection Close Code_ is -+ // defined as the status code (Section 7.4) contained in the first Close -+ // control frame received by the application -+ code = data.readUInt16BE(0) -+ } -+ -+ if (onlyCode) { -+ if (!isValidStatusCode(code)) { -+ return null -+ } -+ -+ return { code } -+ } -+ -+ // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.6 -+ /** @type {Buffer} */ -+ let reason = data.subarray(2) -+ -+ // Remove BOM -+ if (reason[0] === 0xEF && reason[1] === 0xBB && reason[2] === 0xBF) { -+ reason = reason.subarray(3) -+ } -+ -+ if (code !== undefined && !isValidStatusCode(code)) { -+ return null -+ } -+ -+ try { -+ // TODO: optimize this -+ reason = new TextDecoder('utf-8', { fatal: true }).decode(reason) -+ } catch { -+ return null -+ } -+ -+ return { code, reason } -+ } -+ -+ get closingInfo () { -+ return this.#info.closeInfo -+ } -+} -+ -+module.exports = { -+ ByteParser -+} -+ -+ -+/***/ }), -+ -+/***/ 7742: -+/***/ ((module) => { -+ -+"use strict"; -+ -+ -+module.exports = { -+ kWebSocketURL: Symbol('url'), -+ kReadyState: Symbol('ready state'), -+ kController: Symbol('controller'), -+ kResponse: Symbol('response'), -+ kBinaryType: Symbol('binary type'), -+ kSentClose: Symbol('sent close'), -+ kReceivedClose: Symbol('received close'), -+ kByteParser: Symbol('byte parser') -+} -+ -+ -+/***/ }), -+ -+/***/ 2401: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { kReadyState, kController, kResponse, kBinaryType, kWebSocketURL } = __nccwpck_require__(7742) -+const { states, opcodes } = __nccwpck_require__(5825) -+const { MessageEvent, ErrorEvent } = __nccwpck_require__(8702) -+ -+/* globals Blob */ -+ -+/** -+ * @param {import('./websocket').WebSocket} ws -+ */ -+function isEstablished (ws) { -+ // If the server's response is validated as provided for above, it is -+ // said that _The WebSocket Connection is Established_ and that the -+ // WebSocket Connection is in the OPEN state. -+ return ws[kReadyState] === states.OPEN -+} -+ -+/** -+ * @param {import('./websocket').WebSocket} ws -+ */ -+function isClosing (ws) { -+ // Upon either sending or receiving a Close control frame, it is said -+ // that _The WebSocket Closing Handshake is Started_ and that the -+ // WebSocket connection is in the CLOSING state. -+ return ws[kReadyState] === states.CLOSING -+} -+ -+/** -+ * @param {import('./websocket').WebSocket} ws -+ */ -+function isClosed (ws) { -+ return ws[kReadyState] === states.CLOSED -+} -+ -+/** -+ * @see https://dom.spec.whatwg.org/#concept-event-fire -+ * @param {string} e -+ * @param {EventTarget} target -+ * @param {EventInit | undefined} eventInitDict -+ */ -+function fireEvent (e, target, eventConstructor = Event, eventInitDict) { -+ // 1. If eventConstructor is not given, then let eventConstructor be Event. -+ -+ // 2. Let event be the result of creating an event given eventConstructor, -+ // in the relevant realm of target. -+ // 3. Initialize event’s type attribute to e. -+ const event = new eventConstructor(e, eventInitDict) // eslint-disable-line new-cap -+ -+ // 4. Initialize any other IDL attributes of event as described in the -+ // invocation of this algorithm. -+ -+ // 5. Return the result of dispatching event at target, with legacy target -+ // override flag set if set. -+ target.dispatchEvent(event) -+} -+ -+/** -+ * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol -+ * @param {import('./websocket').WebSocket} ws -+ * @param {number} type Opcode -+ * @param {Buffer} data application data -+ */ -+function websocketMessageReceived (ws, type, data) { -+ // 1. If ready state is not OPEN (1), then return. -+ if (ws[kReadyState] !== states.OPEN) { -+ return -+ } -+ -+ // 2. Let dataForEvent be determined by switching on type and binary type: -+ let dataForEvent -+ -+ if (type === opcodes.TEXT) { -+ // -> type indicates that the data is Text -+ // a new DOMString containing data -+ try { -+ dataForEvent = new TextDecoder('utf-8', { fatal: true }).decode(data) -+ } catch { -+ failWebsocketConnection(ws, 'Received invalid UTF-8 in text frame.') -+ return -+ } -+ } else if (type === opcodes.BINARY) { -+ if (ws[kBinaryType] === 'blob') { -+ // -> type indicates that the data is Binary and binary type is "blob" -+ // a new Blob object, created in the relevant Realm of the WebSocket -+ // object, that represents data as its raw data -+ dataForEvent = new Blob([data]) -+ } else { -+ // -> type indicates that the data is Binary and binary type is "arraybuffer" -+ // a new ArrayBuffer object, created in the relevant Realm of the -+ // WebSocket object, whose contents are data -+ dataForEvent = new Uint8Array(data).buffer -+ } -+ } -+ -+ // 3. Fire an event named message at the WebSocket object, using MessageEvent, -+ // with the origin attribute initialized to the serialization of the WebSocket -+ // object’s url's origin, and the data attribute initialized to dataForEvent. -+ fireEvent('message', ws, MessageEvent, { -+ origin: ws[kWebSocketURL].origin, -+ data: dataForEvent -+ }) -+} -+ -+/** -+ * @see https://datatracker.ietf.org/doc/html/rfc6455 -+ * @see https://datatracker.ietf.org/doc/html/rfc2616 -+ * @see https://bugs.chromium.org/p/chromium/issues/detail?id=398407 -+ * @param {string} protocol -+ */ -+function isValidSubprotocol (protocol) { -+ // If present, this value indicates one -+ // or more comma-separated subprotocol the client wishes to speak, -+ // ordered by preference. The elements that comprise this value -+ // MUST be non-empty strings with characters in the range U+0021 to -+ // U+007E not including separator characters as defined in -+ // [RFC2616] and MUST all be unique strings. -+ if (protocol.length === 0) { -+ return false -+ } -+ -+ for (const char of protocol) { -+ const code = char.charCodeAt(0) -+ -+ if ( -+ code < 0x21 || -+ code > 0x7E || -+ char === '(' || -+ char === ')' || -+ char === '<' || -+ char === '>' || -+ char === '@' || -+ char === ',' || -+ char === ';' || -+ char === ':' || -+ char === '\\' || -+ char === '"' || -+ char === '/' || -+ char === '[' || -+ char === ']' || -+ char === '?' || -+ char === '=' || -+ char === '{' || -+ char === '}' || -+ code === 32 || // SP -+ code === 9 // HT -+ ) { -+ return false -+ } -+ } -+ -+ return true -+} -+ -+/** -+ * @see https://datatracker.ietf.org/doc/html/rfc6455#section-7-4 -+ * @param {number} code -+ */ -+function isValidStatusCode (code) { -+ if (code >= 1000 && code < 1015) { -+ return ( -+ code !== 1004 && // reserved -+ code !== 1005 && // "MUST NOT be set as a status code" -+ code !== 1006 // "MUST NOT be set as a status code" -+ ) -+ } -+ -+ return code >= 3000 && code <= 4999 -+} -+ -+/** -+ * @param {import('./websocket').WebSocket} ws -+ * @param {string|undefined} reason -+ */ -+function failWebsocketConnection (ws, reason) { -+ const { [kController]: controller, [kResponse]: response } = ws -+ -+ controller.abort() -+ -+ if (response?.socket && !response.socket.destroyed) { -+ response.socket.destroy() -+ } -+ -+ if (reason) { -+ fireEvent('error', ws, ErrorEvent, { -+ error: new Error(reason) -+ }) -+ } -+} -+ -+module.exports = { -+ isEstablished, -+ isClosing, -+ isClosed, -+ fireEvent, -+ isValidSubprotocol, -+ isValidStatusCode, -+ failWebsocketConnection, -+ websocketMessageReceived -+} -+ -+ -+/***/ }), -+ -+/***/ 3825: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const { webidl } = __nccwpck_require__(5611) -+const { DOMException } = __nccwpck_require__(9951) -+const { URLSerializer } = __nccwpck_require__(1827) -+const { getGlobalOrigin } = __nccwpck_require__(5022) -+const { staticPropertyDescriptors, states, opcodes, emptyBuffer } = __nccwpck_require__(5825) -+const { -+ kWebSocketURL, -+ kReadyState, -+ kController, -+ kBinaryType, -+ kResponse, -+ kSentClose, -+ kByteParser -+} = __nccwpck_require__(7742) -+const { isEstablished, isClosing, isValidSubprotocol, failWebsocketConnection, fireEvent } = __nccwpck_require__(2401) -+const { establishWebSocketConnection } = __nccwpck_require__(1799) -+const { WebsocketFrameSend } = __nccwpck_require__(8169) -+const { ByteParser } = __nccwpck_require__(1010) -+const { kEnumerableProperty, isBlobLike } = __nccwpck_require__(929) -+const { getGlobalDispatcher } = __nccwpck_require__(7718) -+const { types } = __nccwpck_require__(3837) -+ -+let experimentalWarned = false -+ -+// https://websockets.spec.whatwg.org/#interface-definition -+class WebSocket extends EventTarget { -+ #events = { -+ open: null, -+ error: null, -+ close: null, -+ message: null -+ } -+ -+ #bufferedAmount = 0 -+ #protocol = '' -+ #extensions = '' -+ -+ /** -+ * @param {string} url -+ * @param {string|string[]} protocols -+ */ -+ constructor (url, protocols = []) { -+ super() -+ -+ webidl.argumentLengthCheck(arguments, 1, { header: 'WebSocket constructor' }) -+ -+ if (!experimentalWarned) { -+ experimentalWarned = true -+ process.emitWarning('WebSockets are experimental, expect them to change at any time.', { -+ code: 'UNDICI-WS' -+ }) -+ } -+ -+ const options = webidl.converters['DOMString or sequence or WebSocketInit'](protocols) -+ -+ url = webidl.converters.USVString(url) -+ protocols = options.protocols -+ -+ // 1. Let baseURL be this's relevant settings object's API base URL. -+ const baseURL = getGlobalOrigin() -+ -+ // 1. Let urlRecord be the result of applying the URL parser to url with baseURL. -+ let urlRecord -+ -+ try { -+ urlRecord = new URL(url, baseURL) -+ } catch (e) { -+ // 3. If urlRecord is failure, then throw a "SyntaxError" DOMException. -+ throw new DOMException(e, 'SyntaxError') -+ } -+ -+ // 4. If urlRecord’s scheme is "http", then set urlRecord’s scheme to "ws". -+ if (urlRecord.protocol === 'http:') { -+ urlRecord.protocol = 'ws:' -+ } else if (urlRecord.protocol === 'https:') { -+ // 5. Otherwise, if urlRecord’s scheme is "https", set urlRecord’s scheme to "wss". -+ urlRecord.protocol = 'wss:' -+ } -+ -+ // 6. If urlRecord’s scheme is not "ws" or "wss", then throw a "SyntaxError" DOMException. -+ if (urlRecord.protocol !== 'ws:' && urlRecord.protocol !== 'wss:') { -+ throw new DOMException( -+ `Expected a ws: or wss: protocol, got ${urlRecord.protocol}`, -+ 'SyntaxError' -+ ) -+ } -+ -+ // 7. If urlRecord’s fragment is non-null, then throw a "SyntaxError" -+ // DOMException. -+ if (urlRecord.hash || urlRecord.href.endsWith('#')) { -+ throw new DOMException('Got fragment', 'SyntaxError') -+ } -+ -+ // 8. If protocols is a string, set protocols to a sequence consisting -+ // of just that string. -+ if (typeof protocols === 'string') { -+ protocols = [protocols] -+ } -+ -+ // 9. If any of the values in protocols occur more than once or otherwise -+ // fail to match the requirements for elements that comprise the value -+ // of `Sec-WebSocket-Protocol` fields as defined by The WebSocket -+ // protocol, then throw a "SyntaxError" DOMException. -+ if (protocols.length !== new Set(protocols.map(p => p.toLowerCase())).size) { -+ throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError') -+ } -+ -+ if (protocols.length > 0 && !protocols.every(p => isValidSubprotocol(p))) { -+ throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError') -+ } -+ -+ // 10. Set this's url to urlRecord. -+ this[kWebSocketURL] = new URL(urlRecord.href) -+ -+ // 11. Let client be this's relevant settings object. -+ -+ // 12. Run this step in parallel: -+ -+ // 1. Establish a WebSocket connection given urlRecord, protocols, -+ // and client. -+ this[kController] = establishWebSocketConnection( -+ urlRecord, -+ protocols, -+ this, -+ (response) => this.#onConnectionEstablished(response), -+ options -+ ) -+ -+ // Each WebSocket object has an associated ready state, which is a -+ // number representing the state of the connection. Initially it must -+ // be CONNECTING (0). -+ this[kReadyState] = WebSocket.CONNECTING -+ -+ // The extensions attribute must initially return the empty string. -+ -+ // The protocol attribute must initially return the empty string. -+ -+ // Each WebSocket object has an associated binary type, which is a -+ // BinaryType. Initially it must be "blob". -+ this[kBinaryType] = 'blob' -+ } -+ -+ /** -+ * @see https://websockets.spec.whatwg.org/#dom-websocket-close -+ * @param {number|undefined} code -+ * @param {string|undefined} reason -+ */ -+ close (code = undefined, reason = undefined) { -+ webidl.brandCheck(this, WebSocket) -+ -+ if (code !== undefined) { -+ code = webidl.converters['unsigned short'](code, { clamp: true }) -+ } -+ -+ if (reason !== undefined) { -+ reason = webidl.converters.USVString(reason) -+ } -+ -+ // 1. If code is present, but is neither an integer equal to 1000 nor an -+ // integer in the range 3000 to 4999, inclusive, throw an -+ // "InvalidAccessError" DOMException. -+ if (code !== undefined) { -+ if (code !== 1000 && (code < 3000 || code > 4999)) { -+ throw new DOMException('invalid code', 'InvalidAccessError') -+ } -+ } -+ -+ let reasonByteLength = 0 -+ -+ // 2. If reason is present, then run these substeps: -+ if (reason !== undefined) { -+ // 1. Let reasonBytes be the result of encoding reason. -+ // 2. If reasonBytes is longer than 123 bytes, then throw a -+ // "SyntaxError" DOMException. -+ reasonByteLength = Buffer.byteLength(reason) -+ -+ if (reasonByteLength > 123) { -+ throw new DOMException( -+ `Reason must be less than 123 bytes; received ${reasonByteLength}`, -+ 'SyntaxError' -+ ) -+ } -+ } -+ -+ // 3. Run the first matching steps from the following list: -+ if (this[kReadyState] === WebSocket.CLOSING || this[kReadyState] === WebSocket.CLOSED) { -+ // If this's ready state is CLOSING (2) or CLOSED (3) -+ // Do nothing. -+ } else if (!isEstablished(this)) { -+ // If the WebSocket connection is not yet established -+ // Fail the WebSocket connection and set this's ready state -+ // to CLOSING (2). -+ failWebsocketConnection(this, 'Connection was closed before it was established.') -+ this[kReadyState] = WebSocket.CLOSING -+ } else if (!isClosing(this)) { -+ // If the WebSocket closing handshake has not yet been started -+ // Start the WebSocket closing handshake and set this's ready -+ // state to CLOSING (2). -+ // - If neither code nor reason is present, the WebSocket Close -+ // message must not have a body. -+ // - If code is present, then the status code to use in the -+ // WebSocket Close message must be the integer given by code. -+ // - If reason is also present, then reasonBytes must be -+ // provided in the Close message after the status code. -+ -+ const frame = new WebsocketFrameSend() -+ -+ // If neither code nor reason is present, the WebSocket Close -+ // message must not have a body. -+ -+ // If code is present, then the status code to use in the -+ // WebSocket Close message must be the integer given by code. -+ if (code !== undefined && reason === undefined) { -+ frame.frameData = Buffer.allocUnsafe(2) -+ frame.frameData.writeUInt16BE(code, 0) -+ } else if (code !== undefined && reason !== undefined) { -+ // If reason is also present, then reasonBytes must be -+ // provided in the Close message after the status code. -+ frame.frameData = Buffer.allocUnsafe(2 + reasonByteLength) -+ frame.frameData.writeUInt16BE(code, 0) -+ // the body MAY contain UTF-8-encoded data with value /reason/ -+ frame.frameData.write(reason, 2, 'utf-8') -+ } else { -+ frame.frameData = emptyBuffer -+ } -+ -+ /** @type {import('stream').Duplex} */ -+ const socket = this[kResponse].socket -+ -+ socket.write(frame.createFrame(opcodes.CLOSE), (err) => { -+ if (!err) { -+ this[kSentClose] = true -+ } -+ }) -+ -+ // Upon either sending or receiving a Close control frame, it is said -+ // that _The WebSocket Closing Handshake is Started_ and that the -+ // WebSocket connection is in the CLOSING state. -+ this[kReadyState] = states.CLOSING -+ } else { -+ // Otherwise -+ // Set this's ready state to CLOSING (2). -+ this[kReadyState] = WebSocket.CLOSING -+ } -+ } -+ -+ /** -+ * @see https://websockets.spec.whatwg.org/#dom-websocket-send -+ * @param {NodeJS.TypedArray|ArrayBuffer|Blob|string} data -+ */ -+ send (data) { -+ webidl.brandCheck(this, WebSocket) -+ -+ webidl.argumentLengthCheck(arguments, 1, { header: 'WebSocket.send' }) -+ -+ data = webidl.converters.WebSocketSendData(data) -+ -+ // 1. If this's ready state is CONNECTING, then throw an -+ // "InvalidStateError" DOMException. -+ if (this[kReadyState] === WebSocket.CONNECTING) { -+ throw new DOMException('Sent before connected.', 'InvalidStateError') -+ } -+ -+ // 2. Run the appropriate set of steps from the following list: -+ // https://datatracker.ietf.org/doc/html/rfc6455#section-6.1 -+ // https://datatracker.ietf.org/doc/html/rfc6455#section-5.2 -+ -+ if (!isEstablished(this) || isClosing(this)) { -+ return -+ } -+ -+ /** @type {import('stream').Duplex} */ -+ const socket = this[kResponse].socket -+ -+ // If data is a string -+ if (typeof data === 'string') { -+ // If the WebSocket connection is established and the WebSocket -+ // closing handshake has not yet started, then the user agent -+ // must send a WebSocket Message comprised of the data argument -+ // using a text frame opcode; if the data cannot be sent, e.g. -+ // because it would need to be buffered but the buffer is full, -+ // the user agent must flag the WebSocket as full and then close -+ // the WebSocket connection. Any invocation of this method with a -+ // string argument that does not throw an exception must increase -+ // the bufferedAmount attribute by the number of bytes needed to -+ // express the argument as UTF-8. -+ -+ const value = Buffer.from(data) -+ const frame = new WebsocketFrameSend(value) -+ const buffer = frame.createFrame(opcodes.TEXT) -+ -+ this.#bufferedAmount += value.byteLength -+ socket.write(buffer, () => { -+ this.#bufferedAmount -= value.byteLength -+ }) -+ } else if (types.isArrayBuffer(data)) { -+ // If the WebSocket connection is established, and the WebSocket -+ // closing handshake has not yet started, then the user agent must -+ // send a WebSocket Message comprised of data using a binary frame -+ // opcode; if the data cannot be sent, e.g. because it would need -+ // to be buffered but the buffer is full, the user agent must flag -+ // the WebSocket as full and then close the WebSocket connection. -+ // The data to be sent is the data stored in the buffer described -+ // by the ArrayBuffer object. Any invocation of this method with an -+ // ArrayBuffer argument that does not throw an exception must -+ // increase the bufferedAmount attribute by the length of the -+ // ArrayBuffer in bytes. -+ -+ const value = Buffer.from(data) -+ const frame = new WebsocketFrameSend(value) -+ const buffer = frame.createFrame(opcodes.BINARY) -+ -+ this.#bufferedAmount += value.byteLength -+ socket.write(buffer, () => { -+ this.#bufferedAmount -= value.byteLength -+ }) -+ } else if (ArrayBuffer.isView(data)) { -+ // If the WebSocket connection is established, and the WebSocket -+ // closing handshake has not yet started, then the user agent must -+ // send a WebSocket Message comprised of data using a binary frame -+ // opcode; if the data cannot be sent, e.g. because it would need to -+ // be buffered but the buffer is full, the user agent must flag the -+ // WebSocket as full and then close the WebSocket connection. The -+ // data to be sent is the data stored in the section of the buffer -+ // described by the ArrayBuffer object that data references. Any -+ // invocation of this method with this kind of argument that does -+ // not throw an exception must increase the bufferedAmount attribute -+ // by the length of data’s buffer in bytes. -+ -+ const ab = Buffer.from(data, data.byteOffset, data.byteLength) -+ -+ const frame = new WebsocketFrameSend(ab) -+ const buffer = frame.createFrame(opcodes.BINARY) -+ -+ this.#bufferedAmount += ab.byteLength -+ socket.write(buffer, () => { -+ this.#bufferedAmount -= ab.byteLength -+ }) -+ } else if (isBlobLike(data)) { -+ // If the WebSocket connection is established, and the WebSocket -+ // closing handshake has not yet started, then the user agent must -+ // send a WebSocket Message comprised of data using a binary frame -+ // opcode; if the data cannot be sent, e.g. because it would need to -+ // be buffered but the buffer is full, the user agent must flag the -+ // WebSocket as full and then close the WebSocket connection. The data -+ // to be sent is the raw data represented by the Blob object. Any -+ // invocation of this method with a Blob argument that does not throw -+ // an exception must increase the bufferedAmount attribute by the size -+ // of the Blob object’s raw data, in bytes. -+ -+ const frame = new WebsocketFrameSend() -+ -+ data.arrayBuffer().then((ab) => { -+ const value = Buffer.from(ab) -+ frame.frameData = value -+ const buffer = frame.createFrame(opcodes.BINARY) -+ -+ this.#bufferedAmount += value.byteLength -+ socket.write(buffer, () => { -+ this.#bufferedAmount -= value.byteLength -+ }) -+ }) -+ } -+ } -+ -+ get readyState () { -+ webidl.brandCheck(this, WebSocket) -+ -+ // The readyState getter steps are to return this's ready state. -+ return this[kReadyState] -+ } -+ -+ get bufferedAmount () { -+ webidl.brandCheck(this, WebSocket) -+ -+ return this.#bufferedAmount -+ } -+ -+ get url () { -+ webidl.brandCheck(this, WebSocket) -+ -+ // The url getter steps are to return this's url, serialized. -+ return URLSerializer(this[kWebSocketURL]) -+ } -+ -+ get extensions () { -+ webidl.brandCheck(this, WebSocket) -+ -+ return this.#extensions -+ } -+ -+ get protocol () { -+ webidl.brandCheck(this, WebSocket) -+ -+ return this.#protocol -+ } -+ -+ get onopen () { -+ webidl.brandCheck(this, WebSocket) -+ -+ return this.#events.open -+ } -+ -+ set onopen (fn) { -+ webidl.brandCheck(this, WebSocket) -+ -+ if (this.#events.open) { -+ this.removeEventListener('open', this.#events.open) -+ } -+ -+ if (typeof fn === 'function') { -+ this.#events.open = fn -+ this.addEventListener('open', fn) -+ } else { -+ this.#events.open = null -+ } -+ } -+ -+ get onerror () { -+ webidl.brandCheck(this, WebSocket) -+ -+ return this.#events.error -+ } -+ -+ set onerror (fn) { -+ webidl.brandCheck(this, WebSocket) -+ -+ if (this.#events.error) { -+ this.removeEventListener('error', this.#events.error) -+ } -+ -+ if (typeof fn === 'function') { -+ this.#events.error = fn -+ this.addEventListener('error', fn) -+ } else { -+ this.#events.error = null -+ } -+ } -+ -+ get onclose () { -+ webidl.brandCheck(this, WebSocket) -+ -+ return this.#events.close -+ } -+ -+ set onclose (fn) { -+ webidl.brandCheck(this, WebSocket) -+ -+ if (this.#events.close) { -+ this.removeEventListener('close', this.#events.close) -+ } -+ -+ if (typeof fn === 'function') { -+ this.#events.close = fn -+ this.addEventListener('close', fn) -+ } else { -+ this.#events.close = null -+ } -+ } -+ -+ get onmessage () { -+ webidl.brandCheck(this, WebSocket) -+ -+ return this.#events.message -+ } -+ -+ set onmessage (fn) { -+ webidl.brandCheck(this, WebSocket) -+ -+ if (this.#events.message) { -+ this.removeEventListener('message', this.#events.message) -+ } -+ -+ if (typeof fn === 'function') { -+ this.#events.message = fn -+ this.addEventListener('message', fn) -+ } else { -+ this.#events.message = null -+ } -+ } -+ -+ get binaryType () { -+ webidl.brandCheck(this, WebSocket) -+ -+ return this[kBinaryType] -+ } -+ -+ set binaryType (type) { -+ webidl.brandCheck(this, WebSocket) -+ -+ if (type !== 'blob' && type !== 'arraybuffer') { -+ this[kBinaryType] = 'blob' -+ } else { -+ this[kBinaryType] = type -+ } -+ } -+ -+ /** -+ * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol -+ */ -+ #onConnectionEstablished (response) { -+ // processResponse is called when the "response’s header list has been received and initialized." -+ // once this happens, the connection is open -+ this[kResponse] = response -+ -+ const parser = new ByteParser(this) -+ parser.on('drain', function onParserDrain () { -+ this.ws[kResponse].socket.resume() -+ }) -+ -+ response.socket.ws = this -+ this[kByteParser] = parser -+ -+ // 1. Change the ready state to OPEN (1). -+ this[kReadyState] = states.OPEN -+ -+ // 2. Change the extensions attribute’s value to the extensions in use, if -+ // it is not the null value. -+ // https://datatracker.ietf.org/doc/html/rfc6455#section-9.1 -+ const extensions = response.headersList.get('sec-websocket-extensions') -+ -+ if (extensions !== null) { -+ this.#extensions = extensions -+ } -+ -+ // 3. Change the protocol attribute’s value to the subprotocol in use, if -+ // it is not the null value. -+ // https://datatracker.ietf.org/doc/html/rfc6455#section-1.9 -+ const protocol = response.headersList.get('sec-websocket-protocol') -+ -+ if (protocol !== null) { -+ this.#protocol = protocol -+ } -+ -+ // 4. Fire an event named open at the WebSocket object. -+ fireEvent('open', this) -+ } -+} -+ -+// https://websockets.spec.whatwg.org/#dom-websocket-connecting -+WebSocket.CONNECTING = WebSocket.prototype.CONNECTING = states.CONNECTING -+// https://websockets.spec.whatwg.org/#dom-websocket-open -+WebSocket.OPEN = WebSocket.prototype.OPEN = states.OPEN -+// https://websockets.spec.whatwg.org/#dom-websocket-closing -+WebSocket.CLOSING = WebSocket.prototype.CLOSING = states.CLOSING -+// https://websockets.spec.whatwg.org/#dom-websocket-closed -+WebSocket.CLOSED = WebSocket.prototype.CLOSED = states.CLOSED -+ -+Object.defineProperties(WebSocket.prototype, { -+ CONNECTING: staticPropertyDescriptors, -+ OPEN: staticPropertyDescriptors, -+ CLOSING: staticPropertyDescriptors, -+ CLOSED: staticPropertyDescriptors, -+ url: kEnumerableProperty, -+ readyState: kEnumerableProperty, -+ bufferedAmount: kEnumerableProperty, -+ onopen: kEnumerableProperty, -+ onerror: kEnumerableProperty, -+ onclose: kEnumerableProperty, -+ close: kEnumerableProperty, -+ onmessage: kEnumerableProperty, -+ binaryType: kEnumerableProperty, -+ send: kEnumerableProperty, -+ extensions: kEnumerableProperty, -+ protocol: kEnumerableProperty, -+ [Symbol.toStringTag]: { -+ value: 'WebSocket', -+ writable: false, -+ enumerable: false, -+ configurable: true -+ } -+}) -+ -+Object.defineProperties(WebSocket, { -+ CONNECTING: staticPropertyDescriptors, -+ OPEN: staticPropertyDescriptors, -+ CLOSING: staticPropertyDescriptors, -+ CLOSED: staticPropertyDescriptors -+}) -+ -+webidl.converters['sequence'] = webidl.sequenceConverter( -+ webidl.converters.DOMString -+) -+ -+webidl.converters['DOMString or sequence'] = function (V) { -+ if (webidl.util.Type(V) === 'Object' && Symbol.iterator in V) { -+ return webidl.converters['sequence'](V) -+ } -+ -+ return webidl.converters.DOMString(V) -+} -+ -+// This implements the propsal made in https://github.com/whatwg/websockets/issues/42 -+webidl.converters.WebSocketInit = webidl.dictionaryConverter([ -+ { -+ key: 'protocols', -+ converter: webidl.converters['DOMString or sequence'], -+ get defaultValue () { -+ return [] -+ } -+ }, -+ { -+ key: 'dispatcher', -+ converter: (V) => V, -+ get defaultValue () { -+ return getGlobalDispatcher() -+ } -+ }, -+ { -+ key: 'headers', -+ converter: webidl.nullableConverter(webidl.converters.HeadersInit) -+ } -+]) -+ -+webidl.converters['DOMString or sequence or WebSocketInit'] = function (V) { -+ if (webidl.util.Type(V) === 'Object' && !(Symbol.iterator in V)) { -+ return webidl.converters.WebSocketInit(V) -+ } -+ -+ return { protocols: webidl.converters['DOMString or sequence'](V) } -+} -+ -+webidl.converters.WebSocketSendData = function (V) { -+ if (webidl.util.Type(V) === 'Object') { -+ if (isBlobLike(V)) { -+ return webidl.converters.Blob(V, { strict: false }) -+ } -+ -+ if (ArrayBuffer.isView(V) || types.isAnyArrayBuffer(V)) { -+ return webidl.converters.BufferSource(V) -+ } -+ } -+ -+ return webidl.converters.USVString(V) -+} -+ -+module.exports = { -+ WebSocket -+} -+ -+ -+/***/ }), -+ -+/***/ 9074: -+/***/ ((__unused_webpack_module, exports) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ value: true })); -+ -+function getUserAgent() { -+ if (typeof navigator === "object" && "userAgent" in navigator) { -+ return navigator.userAgent; -+ } -+ -+ if (typeof process === "object" && process.version !== undefined) { -+ return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; -+ } -+ -+ return ""; -+} -+ -+exports.getUserAgent = getUserAgent; -+//# sourceMappingURL=index.js.map -+ -+ -+/***/ }), -+ -+/***/ 3872: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ -+ value: true -+})); -+Object.defineProperty(exports, "v1", ({ -+ enumerable: true, -+ get: function () { -+ return _v.default; -+ } -+})); -+Object.defineProperty(exports, "v3", ({ -+ enumerable: true, -+ get: function () { -+ return _v2.default; -+ } -+})); -+Object.defineProperty(exports, "v4", ({ -+ enumerable: true, -+ get: function () { -+ return _v3.default; -+ } -+})); -+Object.defineProperty(exports, "v5", ({ -+ enumerable: true, -+ get: function () { -+ return _v4.default; -+ } -+})); -+Object.defineProperty(exports, "NIL", ({ -+ enumerable: true, -+ get: function () { -+ return _nil.default; -+ } -+})); -+Object.defineProperty(exports, "version", ({ -+ enumerable: true, -+ get: function () { -+ return _version.default; -+ } -+})); -+Object.defineProperty(exports, "validate", ({ -+ enumerable: true, -+ get: function () { -+ return _validate.default; -+ } -+})); -+Object.defineProperty(exports, "stringify", ({ -+ enumerable: true, -+ get: function () { -+ return _stringify.default; -+ } -+})); -+Object.defineProperty(exports, "parse", ({ -+ enumerable: true, -+ get: function () { -+ return _parse.default; -+ } -+})); -+ -+var _v = _interopRequireDefault(__nccwpck_require__(5596)); -+ -+var _v2 = _interopRequireDefault(__nccwpck_require__(2427)); -+ -+var _v3 = _interopRequireDefault(__nccwpck_require__(6007)); -+ -+var _v4 = _interopRequireDefault(__nccwpck_require__(398)); -+ -+var _nil = _interopRequireDefault(__nccwpck_require__(1623)); -+ -+var _version = _interopRequireDefault(__nccwpck_require__(8818)); -+ -+var _validate = _interopRequireDefault(__nccwpck_require__(5629)); -+ -+var _stringify = _interopRequireDefault(__nccwpck_require__(7016)); -+ -+var _parse = _interopRequireDefault(__nccwpck_require__(1158)); -+ -+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -+ -+/***/ }), -+ -+/***/ 3828: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ -+ value: true -+})); -+exports["default"] = void 0; -+ -+var _crypto = _interopRequireDefault(__nccwpck_require__(6113)); -+ -+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -+ -+function md5(bytes) { -+ if (Array.isArray(bytes)) { -+ bytes = Buffer.from(bytes); -+ } else if (typeof bytes === 'string') { -+ bytes = Buffer.from(bytes, 'utf8'); -+ } -+ -+ return _crypto.default.createHash('md5').update(bytes).digest(); -+} -+ -+var _default = md5; -+exports["default"] = _default; -+ -+/***/ }), -+ -+/***/ 1623: -+/***/ ((__unused_webpack_module, exports) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ -+ value: true -+})); -+exports["default"] = void 0; -+var _default = '00000000-0000-0000-0000-000000000000'; -+exports["default"] = _default; -+ -+/***/ }), -+ -+/***/ 1158: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ -+ value: true -+})); -+exports["default"] = void 0; -+ -+var _validate = _interopRequireDefault(__nccwpck_require__(5629)); -+ -+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -+ -+function parse(uuid) { -+ if (!(0, _validate.default)(uuid)) { -+ throw TypeError('Invalid UUID'); -+ } -+ -+ let v; -+ const arr = new Uint8Array(16); // Parse ########-....-....-....-............ -+ -+ arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; -+ arr[1] = v >>> 16 & 0xff; -+ arr[2] = v >>> 8 & 0xff; -+ arr[3] = v & 0xff; // Parse ........-####-....-....-............ -+ -+ arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; -+ arr[5] = v & 0xff; // Parse ........-....-####-....-............ -+ -+ arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; -+ arr[7] = v & 0xff; // Parse ........-....-....-####-............ -+ -+ arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; -+ arr[9] = v & 0xff; // Parse ........-....-....-....-############ -+ // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) -+ -+ arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; -+ arr[11] = v / 0x100000000 & 0xff; -+ arr[12] = v >>> 24 & 0xff; -+ arr[13] = v >>> 16 & 0xff; -+ arr[14] = v >>> 8 & 0xff; -+ arr[15] = v & 0xff; -+ return arr; -+} -+ -+var _default = parse; -+exports["default"] = _default; -+ -+/***/ }), -+ -+/***/ 3607: -+/***/ ((__unused_webpack_module, exports) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ -+ value: true -+})); -+exports["default"] = void 0; -+var _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; -+exports["default"] = _default; -+ -+/***/ }), -+ -+/***/ 1260: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ -+ value: true -+})); -+exports["default"] = rng; -+ -+var _crypto = _interopRequireDefault(__nccwpck_require__(6113)); -+ -+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -+ -+const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate -+ -+let poolPtr = rnds8Pool.length; -+ -+function rng() { -+ if (poolPtr > rnds8Pool.length - 16) { -+ _crypto.default.randomFillSync(rnds8Pool); -+ -+ poolPtr = 0; -+ } -+ -+ return rnds8Pool.slice(poolPtr, poolPtr += 16); -+} -+ -+/***/ }), -+ -+/***/ 7615: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ -+ value: true -+})); -+exports["default"] = void 0; -+ -+var _crypto = _interopRequireDefault(__nccwpck_require__(6113)); -+ -+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -+ -+function sha1(bytes) { -+ if (Array.isArray(bytes)) { -+ bytes = Buffer.from(bytes); -+ } else if (typeof bytes === 'string') { -+ bytes = Buffer.from(bytes, 'utf8'); -+ } -+ -+ return _crypto.default.createHash('sha1').update(bytes).digest(); -+} -+ -+var _default = sha1; -+exports["default"] = _default; -+ -+/***/ }), -+ -+/***/ 7016: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ -+ value: true -+})); -+exports["default"] = void 0; -+ -+var _validate = _interopRequireDefault(__nccwpck_require__(5629)); -+ -+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -+ -+/** -+ * Convert array of 16 byte values to UUID string format of the form: -+ * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX -+ */ -+const byteToHex = []; -+ -+for (let i = 0; i < 256; ++i) { -+ byteToHex.push((i + 0x100).toString(16).substr(1)); -+} -+ -+function stringify(arr, offset = 0) { -+ // Note: Be careful editing this code! It's been tuned for performance -+ // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 -+ const uuid = (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(); // Consistency check for valid UUID. If this throws, it's likely due to one -+ // of the following: -+ // - One or more input array values don't map to a hex octet (leading to -+ // "undefined" in the uuid) -+ // - Invalid input values for the RFC `version` or `variant` fields -+ -+ if (!(0, _validate.default)(uuid)) { -+ throw TypeError('Stringified UUID is invalid'); -+ } -+ -+ return uuid; -+} -+ -+var _default = stringify; -+exports["default"] = _default; -+ -+/***/ }), -+ -+/***/ 5596: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ -+ value: true -+})); -+exports["default"] = void 0; -+ -+var _rng = _interopRequireDefault(__nccwpck_require__(1260)); -+ -+var _stringify = _interopRequireDefault(__nccwpck_require__(7016)); -+ -+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -+ -+// **`v1()` - Generate time-based UUID** -+// -+// Inspired by https://github.com/LiosK/UUID.js -+// and http://docs.python.org/library/uuid.html -+let _nodeId; -+ -+let _clockseq; // Previous uuid creation time -+ -+ -+let _lastMSecs = 0; -+let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details -+ -+function v1(options, buf, offset) { -+ let i = buf && offset || 0; -+ const b = buf || new Array(16); -+ options = options || {}; -+ let node = options.node || _nodeId; -+ let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not -+ // specified. We do this lazily to minimize issues related to insufficient -+ // system entropy. See #189 -+ -+ if (node == null || clockseq == null) { -+ const seedBytes = options.random || (options.rng || _rng.default)(); -+ -+ if (node == null) { -+ // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) -+ node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; -+ } -+ -+ if (clockseq == null) { -+ // Per 4.2.2, randomize (14 bit) clockseq -+ clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; -+ } -+ } // UUID timestamps are 100 nano-second units since the Gregorian epoch, -+ // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so -+ // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' -+ // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. -+ -+ -+ let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock -+ // cycle to simulate higher resolution clock -+ -+ let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) -+ -+ const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression -+ -+ if (dt < 0 && options.clockseq === undefined) { -+ clockseq = clockseq + 1 & 0x3fff; -+ } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new -+ // time interval -+ -+ -+ if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { -+ nsecs = 0; -+ } // Per 4.2.1.2 Throw error if too many uuids are requested -+ -+ -+ if (nsecs >= 10000) { -+ throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); -+ } -+ -+ _lastMSecs = msecs; -+ _lastNSecs = nsecs; -+ _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch -+ -+ msecs += 12219292800000; // `time_low` -+ -+ const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; -+ b[i++] = tl >>> 24 & 0xff; -+ b[i++] = tl >>> 16 & 0xff; -+ b[i++] = tl >>> 8 & 0xff; -+ b[i++] = tl & 0xff; // `time_mid` -+ -+ const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; -+ b[i++] = tmh >>> 8 & 0xff; -+ b[i++] = tmh & 0xff; // `time_high_and_version` -+ -+ b[i++] = tmh >>> 24 & 0xf | 0x10; // include version -+ -+ b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) -+ -+ b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` -+ -+ b[i++] = clockseq & 0xff; // `node` -+ -+ for (let n = 0; n < 6; ++n) { -+ b[i + n] = node[n]; -+ } -+ -+ return buf || (0, _stringify.default)(b); -+} -+ -+var _default = v1; -+exports["default"] = _default; -+ -+/***/ }), -+ -+/***/ 2427: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ -+ value: true -+})); -+exports["default"] = void 0; -+ -+var _v = _interopRequireDefault(__nccwpck_require__(6901)); -+ -+var _md = _interopRequireDefault(__nccwpck_require__(3828)); -+ -+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -+ -+const v3 = (0, _v.default)('v3', 0x30, _md.default); -+var _default = v3; -+exports["default"] = _default; -+ -+/***/ }), -+ -+/***/ 6901: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ -+ value: true -+})); -+exports["default"] = _default; -+exports.URL = exports.DNS = void 0; -+ -+var _stringify = _interopRequireDefault(__nccwpck_require__(7016)); -+ -+var _parse = _interopRequireDefault(__nccwpck_require__(1158)); -+ -+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -+ -+function stringToBytes(str) { -+ str = unescape(encodeURIComponent(str)); // UTF8 escape -+ -+ const bytes = []; -+ -+ for (let i = 0; i < str.length; ++i) { -+ bytes.push(str.charCodeAt(i)); -+ } -+ -+ return bytes; -+} -+ -+const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -+exports.DNS = DNS; -+const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -+exports.URL = URL; -+ -+function _default(name, version, hashfunc) { -+ function generateUUID(value, namespace, buf, offset) { -+ if (typeof value === 'string') { -+ value = stringToBytes(value); -+ } -+ -+ if (typeof namespace === 'string') { -+ namespace = (0, _parse.default)(namespace); -+ } -+ -+ if (namespace.length !== 16) { -+ throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); -+ } // Compute hash of namespace and value, Per 4.3 -+ // Future: Use spread syntax when supported on all platforms, e.g. `bytes = -+ // hashfunc([...namespace, ... value])` -+ -+ -+ let bytes = new Uint8Array(16 + value.length); -+ bytes.set(namespace); -+ bytes.set(value, namespace.length); -+ bytes = hashfunc(bytes); -+ bytes[6] = bytes[6] & 0x0f | version; -+ bytes[8] = bytes[8] & 0x3f | 0x80; -+ -+ if (buf) { -+ offset = offset || 0; -+ -+ for (let i = 0; i < 16; ++i) { -+ buf[offset + i] = bytes[i]; -+ } -+ -+ return buf; -+ } -+ -+ return (0, _stringify.default)(bytes); -+ } // Function#name is not settable on some platforms (#270) -+ -+ -+ try { -+ generateUUID.name = name; // eslint-disable-next-line no-empty -+ } catch (err) {} // For CommonJS default export support -+ -+ -+ generateUUID.DNS = DNS; -+ generateUUID.URL = URL; -+ return generateUUID; -+} -+ -+/***/ }), -+ -+/***/ 6007: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ -+ value: true -+})); -+exports["default"] = void 0; -+ -+var _rng = _interopRequireDefault(__nccwpck_require__(1260)); -+ -+var _stringify = _interopRequireDefault(__nccwpck_require__(7016)); -+ -+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -+ -+function v4(options, buf, offset) { -+ options = options || {}; -+ -+ const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` -+ -+ -+ rnds[6] = rnds[6] & 0x0f | 0x40; -+ rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -+ -+ if (buf) { -+ offset = offset || 0; -+ -+ for (let i = 0; i < 16; ++i) { -+ buf[offset + i] = rnds[i]; -+ } -+ -+ return buf; -+ } -+ -+ return (0, _stringify.default)(rnds); -+} -+ -+var _default = v4; -+exports["default"] = _default; -+ -+/***/ }), -+ -+/***/ 398: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ -+ value: true -+})); -+exports["default"] = void 0; -+ -+var _v = _interopRequireDefault(__nccwpck_require__(6901)); -+ -+var _sha = _interopRequireDefault(__nccwpck_require__(7615)); -+ -+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -+ -+const v5 = (0, _v.default)('v5', 0x50, _sha.default); -+var _default = v5; -+exports["default"] = _default; -+ -+/***/ }), -+ -+/***/ 5629: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ -+ value: true -+})); -+exports["default"] = void 0; -+ -+var _regex = _interopRequireDefault(__nccwpck_require__(3607)); -+ -+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -+ -+function validate(uuid) { -+ return typeof uuid === 'string' && _regex.default.test(uuid); -+} -+ -+var _default = validate; -+exports["default"] = _default; -+ -+/***/ }), -+ -+/***/ 8818: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+Object.defineProperty(exports, "__esModule", ({ -+ value: true -+})); -+exports["default"] = void 0; -+ -+var _validate = _interopRequireDefault(__nccwpck_require__(5629)); -+ -+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -+ -+function version(uuid) { -+ if (!(0, _validate.default)(uuid)) { -+ throw TypeError('Invalid UUID'); -+ } -+ -+ return parseInt(uuid.substr(14, 1), 16); -+} -+ -+var _default = version; -+exports["default"] = _default; -+ -+/***/ }), -+ -+/***/ 1646: -+/***/ ((module) => { -+ -+"use strict"; -+ -+ -+var conversions = {}; -+module.exports = conversions; -+ -+function sign(x) { -+ return x < 0 ? -1 : 1; -+} -+ -+function evenRound(x) { -+ // Round x to the nearest integer, choosing the even integer if it lies halfway between two. -+ if ((x % 1) === 0.5 && (x & 1) === 0) { // [even number].5; round down (i.e. floor) -+ return Math.floor(x); -+ } else { -+ return Math.round(x); -+ } -+} -+ -+function createNumberConversion(bitLength, typeOpts) { -+ if (!typeOpts.unsigned) { -+ --bitLength; -+ } -+ const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength); -+ const upperBound = Math.pow(2, bitLength) - 1; -+ -+ const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength); -+ const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1); -+ -+ return function(V, opts) { -+ if (!opts) opts = {}; -+ -+ let x = +V; -+ -+ if (opts.enforceRange) { -+ if (!Number.isFinite(x)) { -+ throw new TypeError("Argument is not a finite number"); -+ } -+ -+ x = sign(x) * Math.floor(Math.abs(x)); -+ if (x < lowerBound || x > upperBound) { -+ throw new TypeError("Argument is not in byte range"); -+ } -+ -+ return x; -+ } -+ -+ if (!isNaN(x) && opts.clamp) { -+ x = evenRound(x); -+ -+ if (x < lowerBound) x = lowerBound; -+ if (x > upperBound) x = upperBound; -+ return x; -+ } -+ -+ if (!Number.isFinite(x) || x === 0) { -+ return 0; -+ } -+ -+ x = sign(x) * Math.floor(Math.abs(x)); -+ x = x % moduloVal; -+ -+ if (!typeOpts.unsigned && x >= moduloBound) { -+ return x - moduloVal; -+ } else if (typeOpts.unsigned) { -+ if (x < 0) { -+ x += moduloVal; -+ } else if (x === -0) { // don't return negative zero -+ return 0; -+ } -+ } -+ -+ return x; -+ } -+} -+ -+conversions["void"] = function () { -+ return undefined; -+}; -+ -+conversions["boolean"] = function (val) { -+ return !!val; -+}; -+ -+conversions["byte"] = createNumberConversion(8, { unsigned: false }); -+conversions["octet"] = createNumberConversion(8, { unsigned: true }); -+ -+conversions["short"] = createNumberConversion(16, { unsigned: false }); -+conversions["unsigned short"] = createNumberConversion(16, { unsigned: true }); -+ -+conversions["long"] = createNumberConversion(32, { unsigned: false }); -+conversions["unsigned long"] = createNumberConversion(32, { unsigned: true }); -+ -+conversions["long long"] = createNumberConversion(32, { unsigned: false, moduloBitLength: 64 }); -+conversions["unsigned long long"] = createNumberConversion(32, { unsigned: true, moduloBitLength: 64 }); -+ -+conversions["double"] = function (V) { -+ const x = +V; -+ -+ if (!Number.isFinite(x)) { -+ throw new TypeError("Argument is not a finite floating-point value"); -+ } -+ -+ return x; -+}; -+ -+conversions["unrestricted double"] = function (V) { -+ const x = +V; -+ -+ if (isNaN(x)) { -+ throw new TypeError("Argument is NaN"); -+ } -+ -+ return x; -+}; -+ -+// not quite valid, but good enough for JS -+conversions["float"] = conversions["double"]; -+conversions["unrestricted float"] = conversions["unrestricted double"]; -+ -+conversions["DOMString"] = function (V, opts) { -+ if (!opts) opts = {}; -+ -+ if (opts.treatNullAsEmptyString && V === null) { -+ return ""; -+ } -+ -+ return String(V); -+}; -+ -+conversions["ByteString"] = function (V, opts) { -+ const x = String(V); -+ let c = undefined; -+ for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) { -+ if (c > 255) { -+ throw new TypeError("Argument is not a valid bytestring"); -+ } -+ } -+ -+ return x; -+}; -+ -+conversions["USVString"] = function (V) { -+ const S = String(V); -+ const n = S.length; -+ const U = []; -+ for (let i = 0; i < n; ++i) { -+ const c = S.charCodeAt(i); -+ if (c < 0xD800 || c > 0xDFFF) { -+ U.push(String.fromCodePoint(c)); -+ } else if (0xDC00 <= c && c <= 0xDFFF) { -+ U.push(String.fromCodePoint(0xFFFD)); -+ } else { -+ if (i === n - 1) { -+ U.push(String.fromCodePoint(0xFFFD)); -+ } else { -+ const d = S.charCodeAt(i + 1); -+ if (0xDC00 <= d && d <= 0xDFFF) { -+ const a = c & 0x3FF; -+ const b = d & 0x3FF; -+ U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b)); -+ ++i; -+ } else { -+ U.push(String.fromCodePoint(0xFFFD)); -+ } -+ } -+ } -+ } -+ -+ return U.join(''); -+}; -+ -+conversions["Date"] = function (V, opts) { -+ if (!(V instanceof Date)) { -+ throw new TypeError("Argument is not a Date object"); -+ } -+ if (isNaN(V)) { -+ return undefined; -+ } -+ -+ return V; -+}; -+ -+conversions["RegExp"] = function (V, opts) { -+ if (!(V instanceof RegExp)) { -+ V = new RegExp(V); -+ } -+ -+ return V; -+}; -+ -+ -+/***/ }), -+ -+/***/ 2162: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+const usm = __nccwpck_require__(4368); -+ -+exports.implementation = class URLImpl { -+ constructor(constructorArgs) { -+ const url = constructorArgs[0]; -+ const base = constructorArgs[1]; -+ -+ let parsedBase = null; -+ if (base !== undefined) { -+ parsedBase = usm.basicURLParse(base); -+ if (parsedBase === "failure") { -+ throw new TypeError("Invalid base URL"); -+ } -+ } -+ -+ const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase }); -+ if (parsedURL === "failure") { -+ throw new TypeError("Invalid URL"); -+ } -+ -+ this._url = parsedURL; -+ -+ // TODO: query stuff -+ } -+ -+ get href() { -+ return usm.serializeURL(this._url); -+ } -+ -+ set href(v) { -+ const parsedURL = usm.basicURLParse(v); -+ if (parsedURL === "failure") { -+ throw new TypeError("Invalid URL"); -+ } -+ -+ this._url = parsedURL; -+ } -+ -+ get origin() { -+ return usm.serializeURLOrigin(this._url); -+ } -+ -+ get protocol() { -+ return this._url.scheme + ":"; -+ } -+ -+ set protocol(v) { -+ usm.basicURLParse(v + ":", { url: this._url, stateOverride: "scheme start" }); -+ } -+ -+ get username() { -+ return this._url.username; -+ } -+ -+ set username(v) { -+ if (usm.cannotHaveAUsernamePasswordPort(this._url)) { -+ return; -+ } -+ -+ usm.setTheUsername(this._url, v); -+ } -+ -+ get password() { -+ return this._url.password; -+ } -+ -+ set password(v) { -+ if (usm.cannotHaveAUsernamePasswordPort(this._url)) { -+ return; -+ } -+ -+ usm.setThePassword(this._url, v); -+ } -+ -+ get host() { -+ const url = this._url; -+ -+ if (url.host === null) { -+ return ""; -+ } -+ -+ if (url.port === null) { -+ return usm.serializeHost(url.host); -+ } -+ -+ return usm.serializeHost(url.host) + ":" + usm.serializeInteger(url.port); -+ } -+ -+ set host(v) { -+ if (this._url.cannotBeABaseURL) { -+ return; -+ } -+ -+ usm.basicURLParse(v, { url: this._url, stateOverride: "host" }); -+ } -+ -+ get hostname() { -+ if (this._url.host === null) { -+ return ""; -+ } -+ -+ return usm.serializeHost(this._url.host); -+ } -+ -+ set hostname(v) { -+ if (this._url.cannotBeABaseURL) { -+ return; -+ } -+ -+ usm.basicURLParse(v, { url: this._url, stateOverride: "hostname" }); -+ } -+ -+ get port() { -+ if (this._url.port === null) { -+ return ""; -+ } -+ -+ return usm.serializeInteger(this._url.port); -+ } -+ -+ set port(v) { -+ if (usm.cannotHaveAUsernamePasswordPort(this._url)) { -+ return; -+ } -+ -+ if (v === "") { -+ this._url.port = null; -+ } else { -+ usm.basicURLParse(v, { url: this._url, stateOverride: "port" }); -+ } -+ } -+ -+ get pathname() { -+ if (this._url.cannotBeABaseURL) { -+ return this._url.path[0]; -+ } -+ -+ if (this._url.path.length === 0) { -+ return ""; -+ } -+ -+ return "/" + this._url.path.join("/"); -+ } -+ -+ set pathname(v) { -+ if (this._url.cannotBeABaseURL) { -+ return; -+ } -+ -+ this._url.path = []; -+ usm.basicURLParse(v, { url: this._url, stateOverride: "path start" }); -+ } -+ -+ get search() { -+ if (this._url.query === null || this._url.query === "") { -+ return ""; -+ } -+ -+ return "?" + this._url.query; -+ } -+ -+ set search(v) { -+ // TODO: query stuff -+ -+ const url = this._url; -+ -+ if (v === "") { -+ url.query = null; -+ return; -+ } -+ -+ const input = v[0] === "?" ? v.substring(1) : v; -+ url.query = ""; -+ usm.basicURLParse(input, { url, stateOverride: "query" }); -+ } -+ -+ get hash() { -+ if (this._url.fragment === null || this._url.fragment === "") { -+ return ""; -+ } -+ -+ return "#" + this._url.fragment; -+ } -+ -+ set hash(v) { -+ if (v === "") { -+ this._url.fragment = null; -+ return; -+ } -+ -+ const input = v[0] === "#" ? v.substring(1) : v; -+ this._url.fragment = ""; -+ usm.basicURLParse(input, { url: this._url, stateOverride: "fragment" }); -+ } -+ -+ toJSON() { -+ return this.href; -+ } -+}; -+ -+ -+/***/ }), -+ -+/***/ 2584: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const conversions = __nccwpck_require__(1646); -+const utils = __nccwpck_require__(396); -+const Impl = __nccwpck_require__(2162); -+ -+const impl = utils.implSymbol; -+ -+function URL(url) { -+ if (!this || this[impl] || !(this instanceof URL)) { -+ throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function."); -+ } -+ if (arguments.length < 1) { -+ throw new TypeError("Failed to construct 'URL': 1 argument required, but only " + arguments.length + " present."); -+ } -+ const args = []; -+ for (let i = 0; i < arguments.length && i < 2; ++i) { -+ args[i] = arguments[i]; -+ } -+ args[0] = conversions["USVString"](args[0]); -+ if (args[1] !== undefined) { -+ args[1] = conversions["USVString"](args[1]); -+ } -+ -+ module.exports.setup(this, args); -+} -+ -+URL.prototype.toJSON = function toJSON() { -+ if (!this || !module.exports.is(this)) { -+ throw new TypeError("Illegal invocation"); -+ } -+ const args = []; -+ for (let i = 0; i < arguments.length && i < 0; ++i) { -+ args[i] = arguments[i]; -+ } -+ return this[impl].toJSON.apply(this[impl], args); -+}; -+Object.defineProperty(URL.prototype, "href", { -+ get() { -+ return this[impl].href; -+ }, -+ set(V) { -+ V = conversions["USVString"](V); -+ this[impl].href = V; -+ }, -+ enumerable: true, -+ configurable: true -+}); -+ -+URL.prototype.toString = function () { -+ if (!this || !module.exports.is(this)) { -+ throw new TypeError("Illegal invocation"); -+ } -+ return this.href; -+}; -+ -+Object.defineProperty(URL.prototype, "origin", { -+ get() { -+ return this[impl].origin; -+ }, -+ enumerable: true, -+ configurable: true -+}); -+ -+Object.defineProperty(URL.prototype, "protocol", { -+ get() { -+ return this[impl].protocol; -+ }, -+ set(V) { -+ V = conversions["USVString"](V); -+ this[impl].protocol = V; -+ }, -+ enumerable: true, -+ configurable: true -+}); -+ -+Object.defineProperty(URL.prototype, "username", { -+ get() { -+ return this[impl].username; -+ }, -+ set(V) { -+ V = conversions["USVString"](V); -+ this[impl].username = V; -+ }, -+ enumerable: true, -+ configurable: true -+}); -+ -+Object.defineProperty(URL.prototype, "password", { -+ get() { -+ return this[impl].password; -+ }, -+ set(V) { -+ V = conversions["USVString"](V); -+ this[impl].password = V; -+ }, -+ enumerable: true, -+ configurable: true -+}); -+ -+Object.defineProperty(URL.prototype, "host", { -+ get() { -+ return this[impl].host; -+ }, -+ set(V) { -+ V = conversions["USVString"](V); -+ this[impl].host = V; -+ }, -+ enumerable: true, -+ configurable: true -+}); -+ -+Object.defineProperty(URL.prototype, "hostname", { -+ get() { -+ return this[impl].hostname; -+ }, -+ set(V) { -+ V = conversions["USVString"](V); -+ this[impl].hostname = V; -+ }, -+ enumerable: true, -+ configurable: true -+}); -+ -+Object.defineProperty(URL.prototype, "port", { -+ get() { -+ return this[impl].port; -+ }, -+ set(V) { -+ V = conversions["USVString"](V); -+ this[impl].port = V; -+ }, -+ enumerable: true, -+ configurable: true -+}); -+ -+Object.defineProperty(URL.prototype, "pathname", { -+ get() { -+ return this[impl].pathname; -+ }, -+ set(V) { -+ V = conversions["USVString"](V); -+ this[impl].pathname = V; -+ }, -+ enumerable: true, -+ configurable: true -+}); -+ -+Object.defineProperty(URL.prototype, "search", { -+ get() { -+ return this[impl].search; -+ }, -+ set(V) { -+ V = conversions["USVString"](V); -+ this[impl].search = V; -+ }, -+ enumerable: true, -+ configurable: true -+}); -+ -+Object.defineProperty(URL.prototype, "hash", { -+ get() { -+ return this[impl].hash; -+ }, -+ set(V) { -+ V = conversions["USVString"](V); -+ this[impl].hash = V; -+ }, -+ enumerable: true, -+ configurable: true -+}); -+ -+ -+module.exports = { -+ is(obj) { -+ return !!obj && obj[impl] instanceof Impl.implementation; -+ }, -+ create(constructorArgs, privateData) { -+ let obj = Object.create(URL.prototype); -+ this.setup(obj, constructorArgs, privateData); -+ return obj; -+ }, -+ setup(obj, constructorArgs, privateData) { -+ if (!privateData) privateData = {}; -+ privateData.wrapper = obj; -+ -+ obj[impl] = new Impl.implementation(constructorArgs, privateData); -+ obj[impl][utils.wrapperSymbol] = obj; -+ }, -+ interface: URL, -+ expose: { -+ Window: { URL: URL }, -+ Worker: { URL: URL } -+ } -+}; -+ -+ -+ -+/***/ }), -+ -+/***/ 8152: -+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+exports.URL = __nccwpck_require__(2584)["interface"]; -+exports.serializeURL = __nccwpck_require__(4368).serializeURL; -+exports.serializeURLOrigin = __nccwpck_require__(4368).serializeURLOrigin; -+exports.basicURLParse = __nccwpck_require__(4368).basicURLParse; -+exports.setTheUsername = __nccwpck_require__(4368).setTheUsername; -+exports.setThePassword = __nccwpck_require__(4368).setThePassword; -+exports.serializeHost = __nccwpck_require__(4368).serializeHost; -+exports.serializeInteger = __nccwpck_require__(4368).serializeInteger; -+exports.parseURL = __nccwpck_require__(4368).parseURL; -+ -+ -+/***/ }), -+ -+/***/ 4368: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+const punycode = __nccwpck_require__(5477); -+const tr46 = __nccwpck_require__(3055); -+ -+const specialSchemes = { -+ ftp: 21, -+ file: null, -+ gopher: 70, -+ http: 80, -+ https: 443, -+ ws: 80, -+ wss: 443 -+}; -+ -+const failure = Symbol("failure"); -+ -+function countSymbols(str) { -+ return punycode.ucs2.decode(str).length; -+} -+ -+function at(input, idx) { -+ const c = input[idx]; -+ return isNaN(c) ? undefined : String.fromCodePoint(c); -+} -+ -+function isASCIIDigit(c) { -+ return c >= 0x30 && c <= 0x39; -+} -+ -+function isASCIIAlpha(c) { -+ return (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A); -+} -+ -+function isASCIIAlphanumeric(c) { -+ return isASCIIAlpha(c) || isASCIIDigit(c); -+} -+ -+function isASCIIHex(c) { -+ return isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66); -+} -+ -+function isSingleDot(buffer) { -+ return buffer === "." || buffer.toLowerCase() === "%2e"; -+} -+ -+function isDoubleDot(buffer) { -+ buffer = buffer.toLowerCase(); -+ return buffer === ".." || buffer === "%2e." || buffer === ".%2e" || buffer === "%2e%2e"; -+} -+ -+function isWindowsDriveLetterCodePoints(cp1, cp2) { -+ return isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124); -+} -+ -+function isWindowsDriveLetterString(string) { -+ return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && (string[1] === ":" || string[1] === "|"); -+} -+ -+function isNormalizedWindowsDriveLetterString(string) { -+ return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && string[1] === ":"; -+} -+ -+function containsForbiddenHostCodePoint(string) { -+ return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/) !== -1; -+} -+ -+function containsForbiddenHostCodePointExcludingPercent(string) { -+ return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/) !== -1; -+} -+ -+function isSpecialScheme(scheme) { -+ return specialSchemes[scheme] !== undefined; -+} -+ -+function isSpecial(url) { -+ return isSpecialScheme(url.scheme); -+} -+ -+function defaultPort(scheme) { -+ return specialSchemes[scheme]; -+} -+ -+function percentEncode(c) { -+ let hex = c.toString(16).toUpperCase(); -+ if (hex.length === 1) { -+ hex = "0" + hex; -+ } -+ -+ return "%" + hex; -+} -+ -+function utf8PercentEncode(c) { -+ const buf = new Buffer(c); -+ -+ let str = ""; -+ -+ for (let i = 0; i < buf.length; ++i) { -+ str += percentEncode(buf[i]); -+ } -+ -+ return str; -+} -+ -+function utf8PercentDecode(str) { -+ const input = new Buffer(str); -+ const output = []; -+ for (let i = 0; i < input.length; ++i) { -+ if (input[i] !== 37) { -+ output.push(input[i]); -+ } else if (input[i] === 37 && isASCIIHex(input[i + 1]) && isASCIIHex(input[i + 2])) { -+ output.push(parseInt(input.slice(i + 1, i + 3).toString(), 16)); -+ i += 2; -+ } else { -+ output.push(input[i]); -+ } -+ } -+ return new Buffer(output).toString(); -+} -+ -+function isC0ControlPercentEncode(c) { -+ return c <= 0x1F || c > 0x7E; -+} -+ -+const extraPathPercentEncodeSet = new Set([32, 34, 35, 60, 62, 63, 96, 123, 125]); -+function isPathPercentEncode(c) { -+ return isC0ControlPercentEncode(c) || extraPathPercentEncodeSet.has(c); -+} -+ -+const extraUserinfoPercentEncodeSet = -+ new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]); -+function isUserinfoPercentEncode(c) { -+ return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c); -+} -+ -+function percentEncodeChar(c, encodeSetPredicate) { -+ const cStr = String.fromCodePoint(c); -+ -+ if (encodeSetPredicate(c)) { -+ return utf8PercentEncode(cStr); -+ } -+ -+ return cStr; -+} -+ -+function parseIPv4Number(input) { -+ let R = 10; -+ -+ if (input.length >= 2 && input.charAt(0) === "0" && input.charAt(1).toLowerCase() === "x") { -+ input = input.substring(2); -+ R = 16; -+ } else if (input.length >= 2 && input.charAt(0) === "0") { -+ input = input.substring(1); -+ R = 8; -+ } -+ -+ if (input === "") { -+ return 0; -+ } -+ -+ const regex = R === 10 ? /[^0-9]/ : (R === 16 ? /[^0-9A-Fa-f]/ : /[^0-7]/); -+ if (regex.test(input)) { -+ return failure; -+ } -+ -+ return parseInt(input, R); -+} -+ -+function parseIPv4(input) { -+ const parts = input.split("."); -+ if (parts[parts.length - 1] === "") { -+ if (parts.length > 1) { -+ parts.pop(); -+ } -+ } -+ -+ if (parts.length > 4) { -+ return input; -+ } -+ -+ const numbers = []; -+ for (const part of parts) { -+ if (part === "") { -+ return input; -+ } -+ const n = parseIPv4Number(part); -+ if (n === failure) { -+ return input; -+ } -+ -+ numbers.push(n); -+ } -+ -+ for (let i = 0; i < numbers.length - 1; ++i) { -+ if (numbers[i] > 255) { -+ return failure; -+ } -+ } -+ if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) { -+ return failure; -+ } -+ -+ let ipv4 = numbers.pop(); -+ let counter = 0; -+ -+ for (const n of numbers) { -+ ipv4 += n * Math.pow(256, 3 - counter); -+ ++counter; -+ } -+ -+ return ipv4; -+} -+ -+function serializeIPv4(address) { -+ let output = ""; -+ let n = address; -+ -+ for (let i = 1; i <= 4; ++i) { -+ output = String(n % 256) + output; -+ if (i !== 4) { -+ output = "." + output; -+ } -+ n = Math.floor(n / 256); -+ } -+ -+ return output; -+} -+ -+function parseIPv6(input) { -+ const address = [0, 0, 0, 0, 0, 0, 0, 0]; -+ let pieceIndex = 0; -+ let compress = null; -+ let pointer = 0; -+ -+ input = punycode.ucs2.decode(input); -+ -+ if (input[pointer] === 58) { -+ if (input[pointer + 1] !== 58) { -+ return failure; -+ } -+ -+ pointer += 2; -+ ++pieceIndex; -+ compress = pieceIndex; -+ } -+ -+ while (pointer < input.length) { -+ if (pieceIndex === 8) { -+ return failure; -+ } -+ -+ if (input[pointer] === 58) { -+ if (compress !== null) { -+ return failure; -+ } -+ ++pointer; -+ ++pieceIndex; -+ compress = pieceIndex; -+ continue; -+ } -+ -+ let value = 0; -+ let length = 0; -+ -+ while (length < 4 && isASCIIHex(input[pointer])) { -+ value = value * 0x10 + parseInt(at(input, pointer), 16); -+ ++pointer; -+ ++length; -+ } -+ -+ if (input[pointer] === 46) { -+ if (length === 0) { -+ return failure; -+ } -+ -+ pointer -= length; -+ -+ if (pieceIndex > 6) { -+ return failure; -+ } -+ -+ let numbersSeen = 0; -+ -+ while (input[pointer] !== undefined) { -+ let ipv4Piece = null; -+ -+ if (numbersSeen > 0) { -+ if (input[pointer] === 46 && numbersSeen < 4) { -+ ++pointer; -+ } else { -+ return failure; -+ } -+ } -+ -+ if (!isASCIIDigit(input[pointer])) { -+ return failure; -+ } -+ -+ while (isASCIIDigit(input[pointer])) { -+ const number = parseInt(at(input, pointer)); -+ if (ipv4Piece === null) { -+ ipv4Piece = number; -+ } else if (ipv4Piece === 0) { -+ return failure; -+ } else { -+ ipv4Piece = ipv4Piece * 10 + number; -+ } -+ if (ipv4Piece > 255) { -+ return failure; -+ } -+ ++pointer; -+ } -+ -+ address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece; -+ -+ ++numbersSeen; -+ -+ if (numbersSeen === 2 || numbersSeen === 4) { -+ ++pieceIndex; -+ } -+ } -+ -+ if (numbersSeen !== 4) { -+ return failure; -+ } -+ -+ break; -+ } else if (input[pointer] === 58) { -+ ++pointer; -+ if (input[pointer] === undefined) { -+ return failure; -+ } -+ } else if (input[pointer] !== undefined) { -+ return failure; -+ } -+ -+ address[pieceIndex] = value; -+ ++pieceIndex; -+ } -+ -+ if (compress !== null) { -+ let swaps = pieceIndex - compress; -+ pieceIndex = 7; -+ while (pieceIndex !== 0 && swaps > 0) { -+ const temp = address[compress + swaps - 1]; -+ address[compress + swaps - 1] = address[pieceIndex]; -+ address[pieceIndex] = temp; -+ --pieceIndex; -+ --swaps; -+ } -+ } else if (compress === null && pieceIndex !== 8) { -+ return failure; -+ } -+ -+ return address; -+} -+ -+function serializeIPv6(address) { -+ let output = ""; -+ const seqResult = findLongestZeroSequence(address); -+ const compress = seqResult.idx; -+ let ignore0 = false; -+ -+ for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) { -+ if (ignore0 && address[pieceIndex] === 0) { -+ continue; -+ } else if (ignore0) { -+ ignore0 = false; -+ } -+ -+ if (compress === pieceIndex) { -+ const separator = pieceIndex === 0 ? "::" : ":"; -+ output += separator; -+ ignore0 = true; -+ continue; -+ } -+ -+ output += address[pieceIndex].toString(16); -+ -+ if (pieceIndex !== 7) { -+ output += ":"; -+ } -+ } -+ -+ return output; -+} -+ -+function parseHost(input, isSpecialArg) { -+ if (input[0] === "[") { -+ if (input[input.length - 1] !== "]") { -+ return failure; -+ } -+ -+ return parseIPv6(input.substring(1, input.length - 1)); -+ } -+ -+ if (!isSpecialArg) { -+ return parseOpaqueHost(input); -+ } -+ -+ const domain = utf8PercentDecode(input); -+ const asciiDomain = tr46.toASCII(domain, false, tr46.PROCESSING_OPTIONS.NONTRANSITIONAL, false); -+ if (asciiDomain === null) { -+ return failure; -+ } -+ -+ if (containsForbiddenHostCodePoint(asciiDomain)) { -+ return failure; -+ } -+ -+ const ipv4Host = parseIPv4(asciiDomain); -+ if (typeof ipv4Host === "number" || ipv4Host === failure) { -+ return ipv4Host; -+ } -+ -+ return asciiDomain; -+} -+ -+function parseOpaqueHost(input) { -+ if (containsForbiddenHostCodePointExcludingPercent(input)) { -+ return failure; -+ } -+ -+ let output = ""; -+ const decoded = punycode.ucs2.decode(input); -+ for (let i = 0; i < decoded.length; ++i) { -+ output += percentEncodeChar(decoded[i], isC0ControlPercentEncode); -+ } -+ return output; -+} -+ -+function findLongestZeroSequence(arr) { -+ let maxIdx = null; -+ let maxLen = 1; // only find elements > 1 -+ let currStart = null; -+ let currLen = 0; -+ -+ for (let i = 0; i < arr.length; ++i) { -+ if (arr[i] !== 0) { -+ if (currLen > maxLen) { -+ maxIdx = currStart; -+ maxLen = currLen; -+ } -+ -+ currStart = null; -+ currLen = 0; -+ } else { -+ if (currStart === null) { -+ currStart = i; -+ } -+ ++currLen; -+ } -+ } -+ -+ // if trailing zeros -+ if (currLen > maxLen) { -+ maxIdx = currStart; -+ maxLen = currLen; -+ } -+ -+ return { -+ idx: maxIdx, -+ len: maxLen -+ }; -+} -+ -+function serializeHost(host) { -+ if (typeof host === "number") { -+ return serializeIPv4(host); -+ } -+ -+ // IPv6 serializer -+ if (host instanceof Array) { -+ return "[" + serializeIPv6(host) + "]"; -+ } -+ -+ return host; -+} -+ -+function trimControlChars(url) { -+ return url.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g, ""); -+} -+ -+function trimTabAndNewline(url) { -+ return url.replace(/\u0009|\u000A|\u000D/g, ""); -+} -+ -+function shortenPath(url) { -+ const path = url.path; -+ if (path.length === 0) { -+ return; -+ } -+ if (url.scheme === "file" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) { -+ return; -+ } -+ -+ path.pop(); -+} -+ -+function includesCredentials(url) { -+ return url.username !== "" || url.password !== ""; -+} -+ -+function cannotHaveAUsernamePasswordPort(url) { -+ return url.host === null || url.host === "" || url.cannotBeABaseURL || url.scheme === "file"; -+} -+ -+function isNormalizedWindowsDriveLetter(string) { -+ return /^[A-Za-z]:$/.test(string); -+} -+ -+function URLStateMachine(input, base, encodingOverride, url, stateOverride) { -+ this.pointer = 0; -+ this.input = input; -+ this.base = base || null; -+ this.encodingOverride = encodingOverride || "utf-8"; -+ this.stateOverride = stateOverride; -+ this.url = url; -+ this.failure = false; -+ this.parseError = false; -+ -+ if (!this.url) { -+ this.url = { -+ scheme: "", -+ username: "", -+ password: "", -+ host: null, -+ port: null, -+ path: [], -+ query: null, -+ fragment: null, -+ -+ cannotBeABaseURL: false -+ }; -+ -+ const res = trimControlChars(this.input); -+ if (res !== this.input) { -+ this.parseError = true; -+ } -+ this.input = res; -+ } -+ -+ const res = trimTabAndNewline(this.input); -+ if (res !== this.input) { -+ this.parseError = true; -+ } -+ this.input = res; -+ -+ this.state = stateOverride || "scheme start"; -+ -+ this.buffer = ""; -+ this.atFlag = false; -+ this.arrFlag = false; -+ this.passwordTokenSeenFlag = false; -+ -+ this.input = punycode.ucs2.decode(this.input); -+ -+ for (; this.pointer <= this.input.length; ++this.pointer) { -+ const c = this.input[this.pointer]; -+ const cStr = isNaN(c) ? undefined : String.fromCodePoint(c); -+ -+ // exec state machine -+ const ret = this["parse " + this.state](c, cStr); -+ if (!ret) { -+ break; // terminate algorithm -+ } else if (ret === failure) { -+ this.failure = true; -+ break; -+ } -+ } -+} -+ -+URLStateMachine.prototype["parse scheme start"] = function parseSchemeStart(c, cStr) { -+ if (isASCIIAlpha(c)) { -+ this.buffer += cStr.toLowerCase(); -+ this.state = "scheme"; -+ } else if (!this.stateOverride) { -+ this.state = "no scheme"; -+ --this.pointer; -+ } else { -+ this.parseError = true; -+ return failure; -+ } -+ -+ return true; -+}; -+ -+URLStateMachine.prototype["parse scheme"] = function parseScheme(c, cStr) { -+ if (isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) { -+ this.buffer += cStr.toLowerCase(); -+ } else if (c === 58) { -+ if (this.stateOverride) { -+ if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) { -+ return false; -+ } -+ -+ if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) { -+ return false; -+ } -+ -+ if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === "file") { -+ return false; -+ } -+ -+ if (this.url.scheme === "file" && (this.url.host === "" || this.url.host === null)) { -+ return false; -+ } -+ } -+ this.url.scheme = this.buffer; -+ this.buffer = ""; -+ if (this.stateOverride) { -+ return false; -+ } -+ if (this.url.scheme === "file") { -+ if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) { -+ this.parseError = true; -+ } -+ this.state = "file"; -+ } else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) { -+ this.state = "special relative or authority"; -+ } else if (isSpecial(this.url)) { -+ this.state = "special authority slashes"; -+ } else if (this.input[this.pointer + 1] === 47) { -+ this.state = "path or authority"; -+ ++this.pointer; -+ } else { -+ this.url.cannotBeABaseURL = true; -+ this.url.path.push(""); -+ this.state = "cannot-be-a-base-URL path"; -+ } -+ } else if (!this.stateOverride) { -+ this.buffer = ""; -+ this.state = "no scheme"; -+ this.pointer = -1; -+ } else { -+ this.parseError = true; -+ return failure; -+ } -+ -+ return true; -+}; -+ -+URLStateMachine.prototype["parse no scheme"] = function parseNoScheme(c) { -+ if (this.base === null || (this.base.cannotBeABaseURL && c !== 35)) { -+ return failure; -+ } else if (this.base.cannotBeABaseURL && c === 35) { -+ this.url.scheme = this.base.scheme; -+ this.url.path = this.base.path.slice(); -+ this.url.query = this.base.query; -+ this.url.fragment = ""; -+ this.url.cannotBeABaseURL = true; -+ this.state = "fragment"; -+ } else if (this.base.scheme === "file") { -+ this.state = "file"; -+ --this.pointer; -+ } else { -+ this.state = "relative"; -+ --this.pointer; -+ } -+ -+ return true; -+}; -+ -+URLStateMachine.prototype["parse special relative or authority"] = function parseSpecialRelativeOrAuthority(c) { -+ if (c === 47 && this.input[this.pointer + 1] === 47) { -+ this.state = "special authority ignore slashes"; -+ ++this.pointer; -+ } else { -+ this.parseError = true; -+ this.state = "relative"; -+ --this.pointer; -+ } -+ -+ return true; -+}; -+ -+URLStateMachine.prototype["parse path or authority"] = function parsePathOrAuthority(c) { -+ if (c === 47) { -+ this.state = "authority"; -+ } else { -+ this.state = "path"; -+ --this.pointer; -+ } -+ -+ return true; -+}; -+ -+URLStateMachine.prototype["parse relative"] = function parseRelative(c) { -+ this.url.scheme = this.base.scheme; -+ if (isNaN(c)) { -+ this.url.username = this.base.username; -+ this.url.password = this.base.password; -+ this.url.host = this.base.host; -+ this.url.port = this.base.port; -+ this.url.path = this.base.path.slice(); -+ this.url.query = this.base.query; -+ } else if (c === 47) { -+ this.state = "relative slash"; -+ } else if (c === 63) { -+ this.url.username = this.base.username; -+ this.url.password = this.base.password; -+ this.url.host = this.base.host; -+ this.url.port = this.base.port; -+ this.url.path = this.base.path.slice(); -+ this.url.query = ""; -+ this.state = "query"; -+ } else if (c === 35) { -+ this.url.username = this.base.username; -+ this.url.password = this.base.password; -+ this.url.host = this.base.host; -+ this.url.port = this.base.port; -+ this.url.path = this.base.path.slice(); -+ this.url.query = this.base.query; -+ this.url.fragment = ""; -+ this.state = "fragment"; -+ } else if (isSpecial(this.url) && c === 92) { -+ this.parseError = true; -+ this.state = "relative slash"; -+ } else { -+ this.url.username = this.base.username; -+ this.url.password = this.base.password; -+ this.url.host = this.base.host; -+ this.url.port = this.base.port; -+ this.url.path = this.base.path.slice(0, this.base.path.length - 1); -+ -+ this.state = "path"; -+ --this.pointer; -+ } -+ -+ return true; -+}; -+ -+URLStateMachine.prototype["parse relative slash"] = function parseRelativeSlash(c) { -+ if (isSpecial(this.url) && (c === 47 || c === 92)) { -+ if (c === 92) { -+ this.parseError = true; -+ } -+ this.state = "special authority ignore slashes"; -+ } else if (c === 47) { -+ this.state = "authority"; -+ } else { -+ this.url.username = this.base.username; -+ this.url.password = this.base.password; -+ this.url.host = this.base.host; -+ this.url.port = this.base.port; -+ this.state = "path"; -+ --this.pointer; -+ } -+ -+ return true; -+}; -+ -+URLStateMachine.prototype["parse special authority slashes"] = function parseSpecialAuthoritySlashes(c) { -+ if (c === 47 && this.input[this.pointer + 1] === 47) { -+ this.state = "special authority ignore slashes"; -+ ++this.pointer; -+ } else { -+ this.parseError = true; -+ this.state = "special authority ignore slashes"; -+ --this.pointer; -+ } -+ -+ return true; -+}; -+ -+URLStateMachine.prototype["parse special authority ignore slashes"] = function parseSpecialAuthorityIgnoreSlashes(c) { -+ if (c !== 47 && c !== 92) { -+ this.state = "authority"; -+ --this.pointer; -+ } else { -+ this.parseError = true; -+ } -+ -+ return true; -+}; -+ -+URLStateMachine.prototype["parse authority"] = function parseAuthority(c, cStr) { -+ if (c === 64) { -+ this.parseError = true; -+ if (this.atFlag) { -+ this.buffer = "%40" + this.buffer; -+ } -+ this.atFlag = true; -+ -+ // careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars -+ const len = countSymbols(this.buffer); -+ for (let pointer = 0; pointer < len; ++pointer) { -+ const codePoint = this.buffer.codePointAt(pointer); -+ -+ if (codePoint === 58 && !this.passwordTokenSeenFlag) { -+ this.passwordTokenSeenFlag = true; -+ continue; -+ } -+ const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode); -+ if (this.passwordTokenSeenFlag) { -+ this.url.password += encodedCodePoints; -+ } else { -+ this.url.username += encodedCodePoints; -+ } -+ } -+ this.buffer = ""; -+ } else if (isNaN(c) || c === 47 || c === 63 || c === 35 || -+ (isSpecial(this.url) && c === 92)) { -+ if (this.atFlag && this.buffer === "") { -+ this.parseError = true; -+ return failure; -+ } -+ this.pointer -= countSymbols(this.buffer) + 1; -+ this.buffer = ""; -+ this.state = "host"; -+ } else { -+ this.buffer += cStr; -+ } -+ -+ return true; -+}; -+ -+URLStateMachine.prototype["parse hostname"] = -+URLStateMachine.prototype["parse host"] = function parseHostName(c, cStr) { -+ if (this.stateOverride && this.url.scheme === "file") { -+ --this.pointer; -+ this.state = "file host"; -+ } else if (c === 58 && !this.arrFlag) { -+ if (this.buffer === "") { -+ this.parseError = true; -+ return failure; -+ } -+ -+ const host = parseHost(this.buffer, isSpecial(this.url)); -+ if (host === failure) { -+ return failure; -+ } -+ -+ this.url.host = host; -+ this.buffer = ""; -+ this.state = "port"; -+ if (this.stateOverride === "hostname") { -+ return false; -+ } -+ } else if (isNaN(c) || c === 47 || c === 63 || c === 35 || -+ (isSpecial(this.url) && c === 92)) { -+ --this.pointer; -+ if (isSpecial(this.url) && this.buffer === "") { -+ this.parseError = true; -+ return failure; -+ } else if (this.stateOverride && this.buffer === "" && -+ (includesCredentials(this.url) || this.url.port !== null)) { -+ this.parseError = true; -+ return false; -+ } -+ -+ const host = parseHost(this.buffer, isSpecial(this.url)); -+ if (host === failure) { -+ return failure; -+ } -+ -+ this.url.host = host; -+ this.buffer = ""; -+ this.state = "path start"; -+ if (this.stateOverride) { -+ return false; -+ } -+ } else { -+ if (c === 91) { -+ this.arrFlag = true; -+ } else if (c === 93) { -+ this.arrFlag = false; -+ } -+ this.buffer += cStr; -+ } -+ -+ return true; -+}; -+ -+URLStateMachine.prototype["parse port"] = function parsePort(c, cStr) { -+ if (isASCIIDigit(c)) { -+ this.buffer += cStr; -+ } else if (isNaN(c) || c === 47 || c === 63 || c === 35 || -+ (isSpecial(this.url) && c === 92) || -+ this.stateOverride) { -+ if (this.buffer !== "") { -+ const port = parseInt(this.buffer); -+ if (port > Math.pow(2, 16) - 1) { -+ this.parseError = true; -+ return failure; -+ } -+ this.url.port = port === defaultPort(this.url.scheme) ? null : port; -+ this.buffer = ""; -+ } -+ if (this.stateOverride) { -+ return false; -+ } -+ this.state = "path start"; -+ --this.pointer; -+ } else { -+ this.parseError = true; -+ return failure; -+ } -+ -+ return true; -+}; -+ -+const fileOtherwiseCodePoints = new Set([47, 92, 63, 35]); -+ -+URLStateMachine.prototype["parse file"] = function parseFile(c) { -+ this.url.scheme = "file"; -+ -+ if (c === 47 || c === 92) { -+ if (c === 92) { -+ this.parseError = true; -+ } -+ this.state = "file slash"; -+ } else if (this.base !== null && this.base.scheme === "file") { -+ if (isNaN(c)) { -+ this.url.host = this.base.host; -+ this.url.path = this.base.path.slice(); -+ this.url.query = this.base.query; -+ } else if (c === 63) { -+ this.url.host = this.base.host; -+ this.url.path = this.base.path.slice(); -+ this.url.query = ""; -+ this.state = "query"; -+ } else if (c === 35) { -+ this.url.host = this.base.host; -+ this.url.path = this.base.path.slice(); -+ this.url.query = this.base.query; -+ this.url.fragment = ""; -+ this.state = "fragment"; -+ } else { -+ if (this.input.length - this.pointer - 1 === 0 || // remaining consists of 0 code points -+ !isWindowsDriveLetterCodePoints(c, this.input[this.pointer + 1]) || -+ (this.input.length - this.pointer - 1 >= 2 && // remaining has at least 2 code points -+ !fileOtherwiseCodePoints.has(this.input[this.pointer + 2]))) { -+ this.url.host = this.base.host; -+ this.url.path = this.base.path.slice(); -+ shortenPath(this.url); -+ } else { -+ this.parseError = true; -+ } -+ -+ this.state = "path"; -+ --this.pointer; -+ } -+ } else { -+ this.state = "path"; -+ --this.pointer; -+ } -+ -+ return true; -+}; -+ -+URLStateMachine.prototype["parse file slash"] = function parseFileSlash(c) { -+ if (c === 47 || c === 92) { -+ if (c === 92) { -+ this.parseError = true; -+ } -+ this.state = "file host"; -+ } else { -+ if (this.base !== null && this.base.scheme === "file") { -+ if (isNormalizedWindowsDriveLetterString(this.base.path[0])) { -+ this.url.path.push(this.base.path[0]); -+ } else { -+ this.url.host = this.base.host; -+ } -+ } -+ this.state = "path"; -+ --this.pointer; -+ } -+ -+ return true; -+}; -+ -+URLStateMachine.prototype["parse file host"] = function parseFileHost(c, cStr) { -+ if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) { -+ --this.pointer; -+ if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) { -+ this.parseError = true; -+ this.state = "path"; -+ } else if (this.buffer === "") { -+ this.url.host = ""; -+ if (this.stateOverride) { -+ return false; -+ } -+ this.state = "path start"; -+ } else { -+ let host = parseHost(this.buffer, isSpecial(this.url)); -+ if (host === failure) { -+ return failure; -+ } -+ if (host === "localhost") { -+ host = ""; -+ } -+ this.url.host = host; -+ -+ if (this.stateOverride) { -+ return false; -+ } -+ -+ this.buffer = ""; -+ this.state = "path start"; -+ } -+ } else { -+ this.buffer += cStr; -+ } -+ -+ return true; -+}; -+ -+URLStateMachine.prototype["parse path start"] = function parsePathStart(c) { -+ if (isSpecial(this.url)) { -+ if (c === 92) { -+ this.parseError = true; -+ } -+ this.state = "path"; -+ -+ if (c !== 47 && c !== 92) { -+ --this.pointer; -+ } -+ } else if (!this.stateOverride && c === 63) { -+ this.url.query = ""; -+ this.state = "query"; -+ } else if (!this.stateOverride && c === 35) { -+ this.url.fragment = ""; -+ this.state = "fragment"; -+ } else if (c !== undefined) { -+ this.state = "path"; -+ if (c !== 47) { -+ --this.pointer; -+ } -+ } -+ -+ return true; -+}; -+ -+URLStateMachine.prototype["parse path"] = function parsePath(c) { -+ if (isNaN(c) || c === 47 || (isSpecial(this.url) && c === 92) || -+ (!this.stateOverride && (c === 63 || c === 35))) { -+ if (isSpecial(this.url) && c === 92) { -+ this.parseError = true; -+ } -+ -+ if (isDoubleDot(this.buffer)) { -+ shortenPath(this.url); -+ if (c !== 47 && !(isSpecial(this.url) && c === 92)) { -+ this.url.path.push(""); -+ } -+ } else if (isSingleDot(this.buffer) && c !== 47 && -+ !(isSpecial(this.url) && c === 92)) { -+ this.url.path.push(""); -+ } else if (!isSingleDot(this.buffer)) { -+ if (this.url.scheme === "file" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) { -+ if (this.url.host !== "" && this.url.host !== null) { -+ this.parseError = true; -+ this.url.host = ""; -+ } -+ this.buffer = this.buffer[0] + ":"; -+ } -+ this.url.path.push(this.buffer); -+ } -+ this.buffer = ""; -+ if (this.url.scheme === "file" && (c === undefined || c === 63 || c === 35)) { -+ while (this.url.path.length > 1 && this.url.path[0] === "") { -+ this.parseError = true; -+ this.url.path.shift(); -+ } -+ } -+ if (c === 63) { -+ this.url.query = ""; -+ this.state = "query"; -+ } -+ if (c === 35) { -+ this.url.fragment = ""; -+ this.state = "fragment"; -+ } -+ } else { -+ // TODO: If c is not a URL code point and not "%", parse error. -+ -+ if (c === 37 && -+ (!isASCIIHex(this.input[this.pointer + 1]) || -+ !isASCIIHex(this.input[this.pointer + 2]))) { -+ this.parseError = true; -+ } -+ -+ this.buffer += percentEncodeChar(c, isPathPercentEncode); -+ } -+ -+ return true; -+}; -+ -+URLStateMachine.prototype["parse cannot-be-a-base-URL path"] = function parseCannotBeABaseURLPath(c) { -+ if (c === 63) { -+ this.url.query = ""; -+ this.state = "query"; -+ } else if (c === 35) { -+ this.url.fragment = ""; -+ this.state = "fragment"; -+ } else { -+ // TODO: Add: not a URL code point -+ if (!isNaN(c) && c !== 37) { -+ this.parseError = true; -+ } -+ -+ if (c === 37 && -+ (!isASCIIHex(this.input[this.pointer + 1]) || -+ !isASCIIHex(this.input[this.pointer + 2]))) { -+ this.parseError = true; -+ } -+ -+ if (!isNaN(c)) { -+ this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode); -+ } -+ } -+ -+ return true; -+}; -+ -+URLStateMachine.prototype["parse query"] = function parseQuery(c, cStr) { -+ if (isNaN(c) || (!this.stateOverride && c === 35)) { -+ if (!isSpecial(this.url) || this.url.scheme === "ws" || this.url.scheme === "wss") { -+ this.encodingOverride = "utf-8"; -+ } -+ -+ const buffer = new Buffer(this.buffer); // TODO: Use encoding override instead -+ for (let i = 0; i < buffer.length; ++i) { -+ if (buffer[i] < 0x21 || buffer[i] > 0x7E || buffer[i] === 0x22 || buffer[i] === 0x23 || -+ buffer[i] === 0x3C || buffer[i] === 0x3E) { -+ this.url.query += percentEncode(buffer[i]); -+ } else { -+ this.url.query += String.fromCodePoint(buffer[i]); -+ } -+ } -+ -+ this.buffer = ""; -+ if (c === 35) { -+ this.url.fragment = ""; -+ this.state = "fragment"; -+ } -+ } else { -+ // TODO: If c is not a URL code point and not "%", parse error. -+ if (c === 37 && -+ (!isASCIIHex(this.input[this.pointer + 1]) || -+ !isASCIIHex(this.input[this.pointer + 2]))) { -+ this.parseError = true; -+ } -+ -+ this.buffer += cStr; -+ } -+ -+ return true; -+}; -+ -+URLStateMachine.prototype["parse fragment"] = function parseFragment(c) { -+ if (isNaN(c)) { // do nothing -+ } else if (c === 0x0) { -+ this.parseError = true; -+ } else { -+ // TODO: If c is not a URL code point and not "%", parse error. -+ if (c === 37 && -+ (!isASCIIHex(this.input[this.pointer + 1]) || -+ !isASCIIHex(this.input[this.pointer + 2]))) { -+ this.parseError = true; -+ } -+ -+ this.url.fragment += percentEncodeChar(c, isC0ControlPercentEncode); -+ } -+ -+ return true; -+}; -+ -+function serializeURL(url, excludeFragment) { -+ let output = url.scheme + ":"; -+ if (url.host !== null) { -+ output += "//"; -+ -+ if (url.username !== "" || url.password !== "") { -+ output += url.username; -+ if (url.password !== "") { -+ output += ":" + url.password; -+ } -+ output += "@"; -+ } -+ -+ output += serializeHost(url.host); -+ -+ if (url.port !== null) { -+ output += ":" + url.port; -+ } -+ } else if (url.host === null && url.scheme === "file") { -+ output += "//"; -+ } -+ -+ if (url.cannotBeABaseURL) { -+ output += url.path[0]; -+ } else { -+ for (const string of url.path) { -+ output += "/" + string; -+ } -+ } -+ -+ if (url.query !== null) { -+ output += "?" + url.query; -+ } -+ -+ if (!excludeFragment && url.fragment !== null) { -+ output += "#" + url.fragment; -+ } -+ -+ return output; -+} -+ -+function serializeOrigin(tuple) { -+ let result = tuple.scheme + "://"; -+ result += serializeHost(tuple.host); -+ -+ if (tuple.port !== null) { -+ result += ":" + tuple.port; -+ } -+ -+ return result; -+} -+ -+module.exports.serializeURL = serializeURL; -+ -+module.exports.serializeURLOrigin = function (url) { -+ // https://url.spec.whatwg.org/#concept-url-origin -+ switch (url.scheme) { -+ case "blob": -+ try { -+ return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0])); -+ } catch (e) { -+ // serializing an opaque origin returns "null" -+ return "null"; -+ } -+ case "ftp": -+ case "gopher": -+ case "http": -+ case "https": -+ case "ws": -+ case "wss": -+ return serializeOrigin({ -+ scheme: url.scheme, -+ host: url.host, -+ port: url.port -+ }); -+ case "file": -+ // spec says "exercise to the reader", chrome says "file://" -+ return "file://"; -+ default: -+ // serializing an opaque origin returns "null" -+ return "null"; -+ } -+}; -+ -+module.exports.basicURLParse = function (input, options) { -+ if (options === undefined) { -+ options = {}; -+ } -+ -+ const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride); -+ if (usm.failure) { -+ return "failure"; -+ } -+ -+ return usm.url; -+}; -+ -+module.exports.setTheUsername = function (url, username) { -+ url.username = ""; -+ const decoded = punycode.ucs2.decode(username); -+ for (let i = 0; i < decoded.length; ++i) { -+ url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode); -+ } -+}; -+ -+module.exports.setThePassword = function (url, password) { -+ url.password = ""; -+ const decoded = punycode.ucs2.decode(password); -+ for (let i = 0; i < decoded.length; ++i) { -+ url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode); -+ } -+}; -+ -+module.exports.serializeHost = serializeHost; -+ -+module.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort; -+ -+module.exports.serializeInteger = function (integer) { -+ return String(integer); -+}; -+ -+module.exports.parseURL = function (input, options) { -+ if (options === undefined) { -+ options = {}; -+ } -+ -+ // We don't handle blobs, so this just delegates: -+ return module.exports.basicURLParse(input, { baseURL: options.baseURL, encodingOverride: options.encodingOverride }); -+}; -+ -+ -+/***/ }), -+ -+/***/ 396: -+/***/ ((module) => { -+ -+"use strict"; -+ -+ -+module.exports.mixin = function mixin(target, source) { -+ const keys = Object.getOwnPropertyNames(source); -+ for (let i = 0; i < keys.length; ++i) { -+ Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i])); -+ } -+}; -+ -+module.exports.wrapperSymbol = Symbol("wrapper"); -+module.exports.implSymbol = Symbol("impl"); -+ -+module.exports.wrapperForImpl = function (impl) { -+ return impl[module.exports.wrapperSymbol]; -+}; -+ -+module.exports.implForWrapper = function (wrapper) { -+ return wrapper[module.exports.implSymbol]; -+}; -+ -+ -+ -+/***/ }), -+ -+/***/ 7212: -+/***/ ((module) => { -+ -+// Returns a wrapper function that returns a wrapped callback -+// The wrapper function should do some stuff, and return a -+// presumably different callback function. -+// This makes sure that own properties are retained, so that -+// decorations and such are not lost along the way. -+module.exports = wrappy -+function wrappy (fn, cb) { -+ if (fn && cb) return wrappy(fn)(cb) -+ -+ if (typeof fn !== 'function') -+ throw new TypeError('need wrapper function') -+ -+ Object.keys(fn).forEach(function (k) { -+ wrapper[k] = fn[k] -+ }) -+ -+ return wrapper -+ -+ function wrapper() { -+ var args = new Array(arguments.length) -+ for (var i = 0; i < args.length; i++) { -+ args[i] = arguments[i] -+ } -+ var ret = fn.apply(this, args) -+ var cb = args[args.length-1] -+ if (typeof ret === 'function' && ret !== cb) { -+ Object.keys(cb).forEach(function (k) { -+ ret[k] = cb[k] -+ }) -+ } -+ return ret -+ } -+} -+ -+ -+/***/ }), -+ -+/***/ 3018: -+/***/ ((module) => { -+ -+module.exports = eval("require")("encoding"); -+ -+ -+/***/ }), -+ -+/***/ 9491: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("assert"); -+ -+/***/ }), -+ -+/***/ 852: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("async_hooks"); -+ -+/***/ }), -+ -+/***/ 4300: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("buffer"); -+ -+/***/ }), -+ -+/***/ 6206: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("console"); -+ -+/***/ }), -+ -+/***/ 6113: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("crypto"); -+ -+/***/ }), -+ -+/***/ 7643: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("diagnostics_channel"); -+ -+/***/ }), -+ -+/***/ 2361: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("events"); -+ -+/***/ }), -+ -+/***/ 7147: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("fs"); -+ -+/***/ }), -+ -+/***/ 3685: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("http"); -+ -+/***/ }), -+ -+/***/ 5158: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("http2"); -+ -+/***/ }), -+ -+/***/ 5687: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("https"); -+ -+/***/ }), -+ -+/***/ 1808: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("net"); -+ -+/***/ }), -+ -+/***/ 5673: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("node:events"); -+ -+/***/ }), -+ -+/***/ 4492: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("node:stream"); -+ -+/***/ }), -+ -+/***/ 7261: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("node:util"); -+ -+/***/ }), -+ -+/***/ 2037: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("os"); -+ -+/***/ }), -+ -+/***/ 1017: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("path"); -+ -+/***/ }), -+ -+/***/ 4074: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("perf_hooks"); -+ -+/***/ }), -+ -+/***/ 5477: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("punycode"); -+ -+/***/ }), -+ -+/***/ 3477: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("querystring"); -+ -+/***/ }), -+ -+/***/ 2781: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("stream"); -+ -+/***/ }), -+ -+/***/ 5356: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("stream/web"); -+ -+/***/ }), -+ -+/***/ 1576: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("string_decoder"); -+ -+/***/ }), -+ -+/***/ 4404: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("tls"); -+ -+/***/ }), -+ -+/***/ 7310: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("url"); -+ -+/***/ }), -+ -+/***/ 3837: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("util"); -+ -+/***/ }), -+ -+/***/ 9830: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("util/types"); -+ -+/***/ }), -+ -+/***/ 1267: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("worker_threads"); -+ -+/***/ }), -+ -+/***/ 9796: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = require("zlib"); -+ -+/***/ }), -+ -+/***/ 6920: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const WritableStream = (__nccwpck_require__(4492).Writable) -+const inherits = (__nccwpck_require__(7261).inherits) -+ -+const StreamSearch = __nccwpck_require__(8727) -+ -+const PartStream = __nccwpck_require__(1366) -+const HeaderParser = __nccwpck_require__(769) -+ -+const DASH = 45 -+const B_ONEDASH = Buffer.from('-') -+const B_CRLF = Buffer.from('\r\n') -+const EMPTY_FN = function () {} -+ -+function Dicer (cfg) { -+ if (!(this instanceof Dicer)) { return new Dicer(cfg) } -+ WritableStream.call(this, cfg) -+ -+ if (!cfg || (!cfg.headerFirst && typeof cfg.boundary !== 'string')) { throw new TypeError('Boundary required') } -+ -+ if (typeof cfg.boundary === 'string') { this.setBoundary(cfg.boundary) } else { this._bparser = undefined } -+ -+ this._headerFirst = cfg.headerFirst -+ -+ this._dashes = 0 -+ this._parts = 0 -+ this._finished = false -+ this._realFinish = false -+ this._isPreamble = true -+ this._justMatched = false -+ this._firstWrite = true -+ this._inHeader = true -+ this._part = undefined -+ this._cb = undefined -+ this._ignoreData = false -+ this._partOpts = { highWaterMark: cfg.partHwm } -+ this._pause = false -+ -+ const self = this -+ this._hparser = new HeaderParser(cfg) -+ this._hparser.on('header', function (header) { -+ self._inHeader = false -+ self._part.emit('header', header) -+ }) -+} -+inherits(Dicer, WritableStream) -+ -+Dicer.prototype.emit = function (ev) { -+ if (ev === 'finish' && !this._realFinish) { -+ if (!this._finished) { -+ const self = this -+ process.nextTick(function () { -+ self.emit('error', new Error('Unexpected end of multipart data')) -+ if (self._part && !self._ignoreData) { -+ const type = (self._isPreamble ? 'Preamble' : 'Part') -+ self._part.emit('error', new Error(type + ' terminated early due to unexpected end of multipart data')) -+ self._part.push(null) -+ process.nextTick(function () { -+ self._realFinish = true -+ self.emit('finish') -+ self._realFinish = false -+ }) -+ return -+ } -+ self._realFinish = true -+ self.emit('finish') -+ self._realFinish = false -+ }) -+ } -+ } else { WritableStream.prototype.emit.apply(this, arguments) } -+} -+ -+Dicer.prototype._write = function (data, encoding, cb) { -+ // ignore unexpected data (e.g. extra trailer data after finished) -+ if (!this._hparser && !this._bparser) { return cb() } -+ -+ if (this._headerFirst && this._isPreamble) { -+ if (!this._part) { -+ this._part = new PartStream(this._partOpts) -+ if (this.listenerCount('preamble') !== 0) { this.emit('preamble', this._part) } else { this._ignore() } -+ } -+ const r = this._hparser.push(data) -+ if (!this._inHeader && r !== undefined && r < data.length) { data = data.slice(r) } else { return cb() } -+ } -+ -+ // allows for "easier" testing -+ if (this._firstWrite) { -+ this._bparser.push(B_CRLF) -+ this._firstWrite = false -+ } -+ -+ this._bparser.push(data) -+ -+ if (this._pause) { this._cb = cb } else { cb() } -+} -+ -+Dicer.prototype.reset = function () { -+ this._part = undefined -+ this._bparser = undefined -+ this._hparser = undefined -+} -+ -+Dicer.prototype.setBoundary = function (boundary) { -+ const self = this -+ this._bparser = new StreamSearch('\r\n--' + boundary) -+ this._bparser.on('info', function (isMatch, data, start, end) { -+ self._oninfo(isMatch, data, start, end) -+ }) -+} -+ -+Dicer.prototype._ignore = function () { -+ if (this._part && !this._ignoreData) { -+ this._ignoreData = true -+ this._part.on('error', EMPTY_FN) -+ // we must perform some kind of read on the stream even though we are -+ // ignoring the data, otherwise node's Readable stream will not emit 'end' -+ // after pushing null to the stream -+ this._part.resume() -+ } -+} -+ -+Dicer.prototype._oninfo = function (isMatch, data, start, end) { -+ let buf; const self = this; let i = 0; let r; let shouldWriteMore = true -+ -+ if (!this._part && this._justMatched && data) { -+ while (this._dashes < 2 && (start + i) < end) { -+ if (data[start + i] === DASH) { -+ ++i -+ ++this._dashes -+ } else { -+ if (this._dashes) { buf = B_ONEDASH } -+ this._dashes = 0 -+ break -+ } -+ } -+ if (this._dashes === 2) { -+ if ((start + i) < end && this.listenerCount('trailer') !== 0) { this.emit('trailer', data.slice(start + i, end)) } -+ this.reset() -+ this._finished = true -+ // no more parts will be added -+ if (self._parts === 0) { -+ self._realFinish = true -+ self.emit('finish') -+ self._realFinish = false -+ } -+ } -+ if (this._dashes) { return } -+ } -+ if (this._justMatched) { this._justMatched = false } -+ if (!this._part) { -+ this._part = new PartStream(this._partOpts) -+ this._part._read = function (n) { -+ self._unpause() -+ } -+ if (this._isPreamble && this.listenerCount('preamble') !== 0) { -+ this.emit('preamble', this._part) -+ } else if (this._isPreamble !== true && this.listenerCount('part') !== 0) { -+ this.emit('part', this._part) -+ } else { -+ this._ignore() -+ } -+ if (!this._isPreamble) { this._inHeader = true } -+ } -+ if (data && start < end && !this._ignoreData) { -+ if (this._isPreamble || !this._inHeader) { -+ if (buf) { shouldWriteMore = this._part.push(buf) } -+ shouldWriteMore = this._part.push(data.slice(start, end)) -+ if (!shouldWriteMore) { this._pause = true } -+ } else if (!this._isPreamble && this._inHeader) { -+ if (buf) { this._hparser.push(buf) } -+ r = this._hparser.push(data.slice(start, end)) -+ if (!this._inHeader && r !== undefined && r < end) { this._oninfo(false, data, start + r, end) } -+ } -+ } -+ if (isMatch) { -+ this._hparser.reset() -+ if (this._isPreamble) { this._isPreamble = false } else { -+ if (start !== end) { -+ ++this._parts -+ this._part.on('end', function () { -+ if (--self._parts === 0) { -+ if (self._finished) { -+ self._realFinish = true -+ self.emit('finish') -+ self._realFinish = false -+ } else { -+ self._unpause() -+ } -+ } -+ }) -+ } -+ } -+ this._part.push(null) -+ this._part = undefined -+ this._ignoreData = false -+ this._justMatched = true -+ this._dashes = 0 -+ } -+} -+ -+Dicer.prototype._unpause = function () { -+ if (!this._pause) { return } -+ -+ this._pause = false -+ if (this._cb) { -+ const cb = this._cb -+ this._cb = undefined -+ cb() -+ } -+} -+ -+module.exports = Dicer -+ -+ -+/***/ }), -+ -+/***/ 769: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const EventEmitter = (__nccwpck_require__(5673).EventEmitter) -+const inherits = (__nccwpck_require__(7261).inherits) -+const getLimit = __nccwpck_require__(5518) -+ -+const StreamSearch = __nccwpck_require__(8727) -+ -+const B_DCRLF = Buffer.from('\r\n\r\n') -+const RE_CRLF = /\r\n/g -+const RE_HDR = /^([^:]+):[ \t]?([\x00-\xFF]+)?$/ // eslint-disable-line no-control-regex -+ -+function HeaderParser (cfg) { -+ EventEmitter.call(this) -+ -+ cfg = cfg || {} -+ const self = this -+ this.nread = 0 -+ this.maxed = false -+ this.npairs = 0 -+ this.maxHeaderPairs = getLimit(cfg, 'maxHeaderPairs', 2000) -+ this.maxHeaderSize = getLimit(cfg, 'maxHeaderSize', 80 * 1024) -+ this.buffer = '' -+ this.header = {} -+ this.finished = false -+ this.ss = new StreamSearch(B_DCRLF) -+ this.ss.on('info', function (isMatch, data, start, end) { -+ if (data && !self.maxed) { -+ if (self.nread + end - start >= self.maxHeaderSize) { -+ end = self.maxHeaderSize - self.nread + start -+ self.nread = self.maxHeaderSize -+ self.maxed = true -+ } else { self.nread += (end - start) } -+ -+ self.buffer += data.toString('binary', start, end) -+ } -+ if (isMatch) { self._finish() } -+ }) -+} -+inherits(HeaderParser, EventEmitter) -+ -+HeaderParser.prototype.push = function (data) { -+ const r = this.ss.push(data) -+ if (this.finished) { return r } -+} -+ -+HeaderParser.prototype.reset = function () { -+ this.finished = false -+ this.buffer = '' -+ this.header = {} -+ this.ss.reset() -+} -+ -+HeaderParser.prototype._finish = function () { -+ if (this.buffer) { this._parseHeader() } -+ this.ss.matches = this.ss.maxMatches -+ const header = this.header -+ this.header = {} -+ this.buffer = '' -+ this.finished = true -+ this.nread = this.npairs = 0 -+ this.maxed = false -+ this.emit('header', header) -+} -+ -+HeaderParser.prototype._parseHeader = function () { -+ if (this.npairs === this.maxHeaderPairs) { return } -+ -+ const lines = this.buffer.split(RE_CRLF) -+ const len = lines.length -+ let m, h -+ -+ for (var i = 0; i < len; ++i) { // eslint-disable-line no-var -+ if (lines[i].length === 0) { continue } -+ if (lines[i][0] === '\t' || lines[i][0] === ' ') { -+ // folded header content -+ // RFC2822 says to just remove the CRLF and not the whitespace following -+ // it, so we follow the RFC and include the leading whitespace ... -+ if (h) { -+ this.header[h][this.header[h].length - 1] += lines[i] -+ continue -+ } -+ } -+ -+ const posColon = lines[i].indexOf(':') -+ if ( -+ posColon === -1 || -+ posColon === 0 -+ ) { -+ return -+ } -+ m = RE_HDR.exec(lines[i]) -+ h = m[1].toLowerCase() -+ this.header[h] = this.header[h] || [] -+ this.header[h].push((m[2] || '')) -+ if (++this.npairs === this.maxHeaderPairs) { break } -+ } -+} -+ -+module.exports = HeaderParser -+ -+ -+/***/ }), -+ -+/***/ 1366: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const inherits = (__nccwpck_require__(7261).inherits) -+const ReadableStream = (__nccwpck_require__(4492).Readable) -+ -+function PartStream (opts) { -+ ReadableStream.call(this, opts) -+} -+inherits(PartStream, ReadableStream) -+ -+PartStream.prototype._read = function (n) {} -+ -+module.exports = PartStream -+ -+ -+/***/ }), -+ -+/***/ 8727: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+/** -+ * Copyright Brian White. All rights reserved. -+ * -+ * @see https://github.com/mscdex/streamsearch -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a copy -+ * of this software and associated documentation files (the "Software"), to -+ * deal in the Software without restriction, including without limitation the -+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -+ * sell copies of the Software, and to permit persons to whom the Software is -+ * furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -+ * IN THE SOFTWARE. -+ * -+ * Based heavily on the Streaming Boyer-Moore-Horspool C++ implementation -+ * by Hongli Lai at: https://github.com/FooBarWidget/boyer-moore-horspool -+ */ -+const EventEmitter = (__nccwpck_require__(5673).EventEmitter) -+const inherits = (__nccwpck_require__(7261).inherits) -+ -+function SBMH (needle) { -+ if (typeof needle === 'string') { -+ needle = Buffer.from(needle) -+ } -+ -+ if (!Buffer.isBuffer(needle)) { -+ throw new TypeError('The needle has to be a String or a Buffer.') -+ } -+ -+ const needleLength = needle.length -+ -+ if (needleLength === 0) { -+ throw new Error('The needle cannot be an empty String/Buffer.') -+ } -+ -+ if (needleLength > 256) { -+ throw new Error('The needle cannot have a length bigger than 256.') -+ } -+ -+ this.maxMatches = Infinity -+ this.matches = 0 -+ -+ this._occ = new Array(256) -+ .fill(needleLength) // Initialize occurrence table. -+ this._lookbehind_size = 0 -+ this._needle = needle -+ this._bufpos = 0 -+ -+ this._lookbehind = Buffer.alloc(needleLength) -+ -+ // Populate occurrence table with analysis of the needle, -+ // ignoring last letter. -+ for (var i = 0; i < needleLength - 1; ++i) { // eslint-disable-line no-var -+ this._occ[needle[i]] = needleLength - 1 - i -+ } -+} -+inherits(SBMH, EventEmitter) -+ -+SBMH.prototype.reset = function () { -+ this._lookbehind_size = 0 -+ this.matches = 0 -+ this._bufpos = 0 -+} -+ -+SBMH.prototype.push = function (chunk, pos) { -+ if (!Buffer.isBuffer(chunk)) { -+ chunk = Buffer.from(chunk, 'binary') -+ } -+ const chlen = chunk.length -+ this._bufpos = pos || 0 -+ let r -+ while (r !== chlen && this.matches < this.maxMatches) { r = this._sbmh_feed(chunk) } -+ return r -+} -+ -+SBMH.prototype._sbmh_feed = function (data) { -+ const len = data.length -+ const needle = this._needle -+ const needleLength = needle.length -+ const lastNeedleChar = needle[needleLength - 1] -+ -+ // Positive: points to a position in `data` -+ // pos == 3 points to data[3] -+ // Negative: points to a position in the lookbehind buffer -+ // pos == -2 points to lookbehind[lookbehind_size - 2] -+ let pos = -this._lookbehind_size -+ let ch -+ -+ if (pos < 0) { -+ // Lookbehind buffer is not empty. Perform Boyer-Moore-Horspool -+ // search with character lookup code that considers both the -+ // lookbehind buffer and the current round's haystack data. -+ // -+ // Loop until -+ // there is a match. -+ // or until -+ // we've moved past the position that requires the -+ // lookbehind buffer. In this case we switch to the -+ // optimized loop. -+ // or until -+ // the character to look at lies outside the haystack. -+ while (pos < 0 && pos <= len - needleLength) { -+ ch = this._sbmh_lookup_char(data, pos + needleLength - 1) -+ -+ if ( -+ ch === lastNeedleChar && -+ this._sbmh_memcmp(data, pos, needleLength - 1) -+ ) { -+ this._lookbehind_size = 0 -+ ++this.matches -+ this.emit('info', true) -+ -+ return (this._bufpos = pos + needleLength) -+ } -+ pos += this._occ[ch] -+ } -+ -+ // No match. -+ -+ if (pos < 0) { -+ // There's too few data for Boyer-Moore-Horspool to run, -+ // so let's use a different algorithm to skip as much as -+ // we can. -+ // Forward pos until -+ // the trailing part of lookbehind + data -+ // looks like the beginning of the needle -+ // or until -+ // pos == 0 -+ while (pos < 0 && !this._sbmh_memcmp(data, pos, len - pos)) { ++pos } -+ } -+ -+ if (pos >= 0) { -+ // Discard lookbehind buffer. -+ this.emit('info', false, this._lookbehind, 0, this._lookbehind_size) -+ this._lookbehind_size = 0 -+ } else { -+ // Cut off part of the lookbehind buffer that has -+ // been processed and append the entire haystack -+ // into it. -+ const bytesToCutOff = this._lookbehind_size + pos -+ if (bytesToCutOff > 0) { -+ // The cut off data is guaranteed not to contain the needle. -+ this.emit('info', false, this._lookbehind, 0, bytesToCutOff) -+ } -+ -+ this._lookbehind.copy(this._lookbehind, 0, bytesToCutOff, -+ this._lookbehind_size - bytesToCutOff) -+ this._lookbehind_size -= bytesToCutOff -+ -+ data.copy(this._lookbehind, this._lookbehind_size) -+ this._lookbehind_size += len -+ -+ this._bufpos = len -+ return len -+ } -+ } -+ -+ pos += (pos >= 0) * this._bufpos -+ -+ // Lookbehind buffer is now empty. We only need to check if the -+ // needle is in the haystack. -+ if (data.indexOf(needle, pos) !== -1) { -+ pos = data.indexOf(needle, pos) -+ ++this.matches -+ if (pos > 0) { this.emit('info', true, data, this._bufpos, pos) } else { this.emit('info', true) } -+ -+ return (this._bufpos = pos + needleLength) -+ } else { -+ pos = len - needleLength -+ } -+ -+ // There was no match. If there's trailing haystack data that we cannot -+ // match yet using the Boyer-Moore-Horspool algorithm (because the trailing -+ // data is less than the needle size) then match using a modified -+ // algorithm that starts matching from the beginning instead of the end. -+ // Whatever trailing data is left after running this algorithm is added to -+ // the lookbehind buffer. -+ while ( -+ pos < len && -+ ( -+ data[pos] !== needle[0] || -+ ( -+ (Buffer.compare( -+ data.subarray(pos, pos + len - pos), -+ needle.subarray(0, len - pos) -+ ) !== 0) -+ ) -+ ) -+ ) { -+ ++pos -+ } -+ if (pos < len) { -+ data.copy(this._lookbehind, 0, pos, pos + (len - pos)) -+ this._lookbehind_size = len - pos -+ } -+ -+ // Everything until pos is guaranteed not to contain needle data. -+ if (pos > 0) { this.emit('info', false, data, this._bufpos, pos < len ? pos : len) } -+ -+ this._bufpos = len -+ return len -+} -+ -+SBMH.prototype._sbmh_lookup_char = function (data, pos) { -+ return (pos < 0) -+ ? this._lookbehind[this._lookbehind_size + pos] -+ : data[pos] -+} -+ -+SBMH.prototype._sbmh_memcmp = function (data, pos, len) { -+ for (var i = 0; i < len; ++i) { // eslint-disable-line no-var -+ if (this._sbmh_lookup_char(data, pos + i) !== this._needle[i]) { return false } -+ } -+ return true -+} -+ -+module.exports = SBMH -+ -+ -+/***/ }), -+ -+/***/ 781: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const WritableStream = (__nccwpck_require__(4492).Writable) -+const { inherits } = __nccwpck_require__(7261) -+const Dicer = __nccwpck_require__(6920) -+ -+const MultipartParser = __nccwpck_require__(2150) -+const UrlencodedParser = __nccwpck_require__(5905) -+const parseParams = __nccwpck_require__(5432) -+ -+function Busboy (opts) { -+ if (!(this instanceof Busboy)) { return new Busboy(opts) } -+ -+ if (typeof opts !== 'object') { -+ throw new TypeError('Busboy expected an options-Object.') -+ } -+ if (typeof opts.headers !== 'object') { -+ throw new TypeError('Busboy expected an options-Object with headers-attribute.') -+ } -+ if (typeof opts.headers['content-type'] !== 'string') { -+ throw new TypeError('Missing Content-Type-header.') -+ } -+ -+ const { -+ headers, -+ ...streamOptions -+ } = opts -+ -+ this.opts = { -+ autoDestroy: false, -+ ...streamOptions -+ } -+ WritableStream.call(this, this.opts) -+ -+ this._done = false -+ this._parser = this.getParserByHeaders(headers) -+ this._finished = false -+} -+inherits(Busboy, WritableStream) -+ -+Busboy.prototype.emit = function (ev) { -+ if (ev === 'finish') { -+ if (!this._done) { -+ this._parser?.end() -+ return -+ } else if (this._finished) { -+ return -+ } -+ this._finished = true -+ } -+ WritableStream.prototype.emit.apply(this, arguments) -+} -+ -+Busboy.prototype.getParserByHeaders = function (headers) { -+ const parsed = parseParams(headers['content-type']) -+ -+ const cfg = { -+ defCharset: this.opts.defCharset, -+ fileHwm: this.opts.fileHwm, -+ headers, -+ highWaterMark: this.opts.highWaterMark, -+ isPartAFile: this.opts.isPartAFile, -+ limits: this.opts.limits, -+ parsedConType: parsed, -+ preservePath: this.opts.preservePath -+ } -+ -+ if (MultipartParser.detect.test(parsed[0])) { -+ return new MultipartParser(this, cfg) -+ } -+ if (UrlencodedParser.detect.test(parsed[0])) { -+ return new UrlencodedParser(this, cfg) -+ } -+ throw new Error('Unsupported Content-Type.') -+} -+ -+Busboy.prototype._write = function (chunk, encoding, cb) { -+ this._parser.write(chunk, cb) -+} -+ -+module.exports = Busboy -+module.exports["default"] = Busboy -+module.exports.Busboy = Busboy -+ -+module.exports.Dicer = Dicer -+ -+ -+/***/ }), -+ -+/***/ 2150: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+// TODO: -+// * support 1 nested multipart level -+// (see second multipart example here: -+// http://www.w3.org/TR/html401/interact/forms.html#didx-multipartform-data) -+// * support limits.fieldNameSize -+// -- this will require modifications to utils.parseParams -+ -+const { Readable } = __nccwpck_require__(4492) -+const { inherits } = __nccwpck_require__(7261) -+ -+const Dicer = __nccwpck_require__(6920) -+ -+const parseParams = __nccwpck_require__(5432) -+const decodeText = __nccwpck_require__(8556) -+const basename = __nccwpck_require__(5403) -+const getLimit = __nccwpck_require__(5518) -+ -+const RE_BOUNDARY = /^boundary$/i -+const RE_FIELD = /^form-data$/i -+const RE_CHARSET = /^charset$/i -+const RE_FILENAME = /^filename$/i -+const RE_NAME = /^name$/i -+ -+Multipart.detect = /^multipart\/form-data/i -+function Multipart (boy, cfg) { -+ let i -+ let len -+ const self = this -+ let boundary -+ const limits = cfg.limits -+ const isPartAFile = cfg.isPartAFile || ((fieldName, contentType, fileName) => (contentType === 'application/octet-stream' || fileName !== undefined)) -+ const parsedConType = cfg.parsedConType || [] -+ const defCharset = cfg.defCharset || 'utf8' -+ const preservePath = cfg.preservePath -+ const fileOpts = { highWaterMark: cfg.fileHwm } -+ -+ for (i = 0, len = parsedConType.length; i < len; ++i) { -+ if (Array.isArray(parsedConType[i]) && -+ RE_BOUNDARY.test(parsedConType[i][0])) { -+ boundary = parsedConType[i][1] -+ break -+ } -+ } -+ -+ function checkFinished () { -+ if (nends === 0 && finished && !boy._done) { -+ finished = false -+ self.end() -+ } -+ } -+ -+ if (typeof boundary !== 'string') { throw new Error('Multipart: Boundary not found') } -+ -+ const fieldSizeLimit = getLimit(limits, 'fieldSize', 1 * 1024 * 1024) -+ const fileSizeLimit = getLimit(limits, 'fileSize', Infinity) -+ const filesLimit = getLimit(limits, 'files', Infinity) -+ const fieldsLimit = getLimit(limits, 'fields', Infinity) -+ const partsLimit = getLimit(limits, 'parts', Infinity) -+ const headerPairsLimit = getLimit(limits, 'headerPairs', 2000) -+ const headerSizeLimit = getLimit(limits, 'headerSize', 80 * 1024) -+ -+ let nfiles = 0 -+ let nfields = 0 -+ let nends = 0 -+ let curFile -+ let curField -+ let finished = false -+ -+ this._needDrain = false -+ this._pause = false -+ this._cb = undefined -+ this._nparts = 0 -+ this._boy = boy -+ -+ const parserCfg = { -+ boundary, -+ maxHeaderPairs: headerPairsLimit, -+ maxHeaderSize: headerSizeLimit, -+ partHwm: fileOpts.highWaterMark, -+ highWaterMark: cfg.highWaterMark -+ } -+ -+ this.parser = new Dicer(parserCfg) -+ this.parser.on('drain', function () { -+ self._needDrain = false -+ if (self._cb && !self._pause) { -+ const cb = self._cb -+ self._cb = undefined -+ cb() -+ } -+ }).on('part', function onPart (part) { -+ if (++self._nparts > partsLimit) { -+ self.parser.removeListener('part', onPart) -+ self.parser.on('part', skipPart) -+ boy.hitPartsLimit = true -+ boy.emit('partsLimit') -+ return skipPart(part) -+ } -+ -+ // hack because streams2 _always_ doesn't emit 'end' until nextTick, so let -+ // us emit 'end' early since we know the part has ended if we are already -+ // seeing the next part -+ if (curField) { -+ const field = curField -+ field.emit('end') -+ field.removeAllListeners('end') -+ } -+ -+ part.on('header', function (header) { -+ let contype -+ let fieldname -+ let parsed -+ let charset -+ let encoding -+ let filename -+ let nsize = 0 -+ -+ if (header['content-type']) { -+ parsed = parseParams(header['content-type'][0]) -+ if (parsed[0]) { -+ contype = parsed[0].toLowerCase() -+ for (i = 0, len = parsed.length; i < len; ++i) { -+ if (RE_CHARSET.test(parsed[i][0])) { -+ charset = parsed[i][1].toLowerCase() -+ break -+ } -+ } -+ } -+ } -+ -+ if (contype === undefined) { contype = 'text/plain' } -+ if (charset === undefined) { charset = defCharset } -+ -+ if (header['content-disposition']) { -+ parsed = parseParams(header['content-disposition'][0]) -+ if (!RE_FIELD.test(parsed[0])) { return skipPart(part) } -+ for (i = 0, len = parsed.length; i < len; ++i) { -+ if (RE_NAME.test(parsed[i][0])) { -+ fieldname = parsed[i][1] -+ } else if (RE_FILENAME.test(parsed[i][0])) { -+ filename = parsed[i][1] -+ if (!preservePath) { filename = basename(filename) } -+ } -+ } -+ } else { return skipPart(part) } -+ -+ if (header['content-transfer-encoding']) { encoding = header['content-transfer-encoding'][0].toLowerCase() } else { encoding = '7bit' } -+ -+ let onData, -+ onEnd -+ -+ if (isPartAFile(fieldname, contype, filename)) { -+ // file/binary field -+ if (nfiles === filesLimit) { -+ if (!boy.hitFilesLimit) { -+ boy.hitFilesLimit = true -+ boy.emit('filesLimit') -+ } -+ return skipPart(part) -+ } -+ -+ ++nfiles -+ -+ if (boy.listenerCount('file') === 0) { -+ self.parser._ignore() -+ return -+ } -+ -+ ++nends -+ const file = new FileStream(fileOpts) -+ curFile = file -+ file.on('end', function () { -+ --nends -+ self._pause = false -+ checkFinished() -+ if (self._cb && !self._needDrain) { -+ const cb = self._cb -+ self._cb = undefined -+ cb() -+ } -+ }) -+ file._read = function (n) { -+ if (!self._pause) { return } -+ self._pause = false -+ if (self._cb && !self._needDrain) { -+ const cb = self._cb -+ self._cb = undefined -+ cb() -+ } -+ } -+ boy.emit('file', fieldname, file, filename, encoding, contype) -+ -+ onData = function (data) { -+ if ((nsize += data.length) > fileSizeLimit) { -+ const extralen = fileSizeLimit - nsize + data.length -+ if (extralen > 0) { file.push(data.slice(0, extralen)) } -+ file.truncated = true -+ file.bytesRead = fileSizeLimit -+ part.removeAllListeners('data') -+ file.emit('limit') -+ return -+ } else if (!file.push(data)) { self._pause = true } -+ -+ file.bytesRead = nsize -+ } -+ -+ onEnd = function () { -+ curFile = undefined -+ file.push(null) -+ } -+ } else { -+ // non-file field -+ if (nfields === fieldsLimit) { -+ if (!boy.hitFieldsLimit) { -+ boy.hitFieldsLimit = true -+ boy.emit('fieldsLimit') -+ } -+ return skipPart(part) -+ } -+ -+ ++nfields -+ ++nends -+ let buffer = '' -+ let truncated = false -+ curField = part -+ -+ onData = function (data) { -+ if ((nsize += data.length) > fieldSizeLimit) { -+ const extralen = (fieldSizeLimit - (nsize - data.length)) -+ buffer += data.toString('binary', 0, extralen) -+ truncated = true -+ part.removeAllListeners('data') -+ } else { buffer += data.toString('binary') } -+ } -+ -+ onEnd = function () { -+ curField = undefined -+ if (buffer.length) { buffer = decodeText(buffer, 'binary', charset) } -+ boy.emit('field', fieldname, buffer, false, truncated, encoding, contype) -+ --nends -+ checkFinished() -+ } -+ } -+ -+ /* As of node@2efe4ab761666 (v0.10.29+/v0.11.14+), busboy had become -+ broken. Streams2/streams3 is a huge black box of confusion, but -+ somehow overriding the sync state seems to fix things again (and still -+ seems to work for previous node versions). -+ */ -+ part._readableState.sync = false -+ -+ part.on('data', onData) -+ part.on('end', onEnd) -+ }).on('error', function (err) { -+ if (curFile) { curFile.emit('error', err) } -+ }) -+ }).on('error', function (err) { -+ boy.emit('error', err) -+ }).on('finish', function () { -+ finished = true -+ checkFinished() -+ }) -+} -+ -+Multipart.prototype.write = function (chunk, cb) { -+ const r = this.parser.write(chunk) -+ if (r && !this._pause) { -+ cb() -+ } else { -+ this._needDrain = !r -+ this._cb = cb -+ } -+} -+ -+Multipart.prototype.end = function () { -+ const self = this -+ -+ if (self.parser.writable) { -+ self.parser.end() -+ } else if (!self._boy._done) { -+ process.nextTick(function () { -+ self._boy._done = true -+ self._boy.emit('finish') -+ }) -+ } -+} -+ -+function skipPart (part) { -+ part.resume() -+} -+ -+function FileStream (opts) { -+ Readable.call(this, opts) -+ -+ this.bytesRead = 0 -+ -+ this.truncated = false -+} -+ -+inherits(FileStream, Readable) -+ -+FileStream.prototype._read = function (n) {} -+ -+module.exports = Multipart -+ -+ -+/***/ }), -+ -+/***/ 5905: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+ -+ -+const Decoder = __nccwpck_require__(8910) -+const decodeText = __nccwpck_require__(8556) -+const getLimit = __nccwpck_require__(5518) -+ -+const RE_CHARSET = /^charset$/i -+ -+UrlEncoded.detect = /^application\/x-www-form-urlencoded/i -+function UrlEncoded (boy, cfg) { -+ const limits = cfg.limits -+ const parsedConType = cfg.parsedConType -+ this.boy = boy -+ -+ this.fieldSizeLimit = getLimit(limits, 'fieldSize', 1 * 1024 * 1024) -+ this.fieldNameSizeLimit = getLimit(limits, 'fieldNameSize', 100) -+ this.fieldsLimit = getLimit(limits, 'fields', Infinity) -+ -+ let charset -+ for (var i = 0, len = parsedConType.length; i < len; ++i) { // eslint-disable-line no-var -+ if (Array.isArray(parsedConType[i]) && -+ RE_CHARSET.test(parsedConType[i][0])) { -+ charset = parsedConType[i][1].toLowerCase() -+ break -+ } -+ } -+ -+ if (charset === undefined) { charset = cfg.defCharset || 'utf8' } -+ -+ this.decoder = new Decoder() -+ this.charset = charset -+ this._fields = 0 -+ this._state = 'key' -+ this._checkingBytes = true -+ this._bytesKey = 0 -+ this._bytesVal = 0 -+ this._key = '' -+ this._val = '' -+ this._keyTrunc = false -+ this._valTrunc = false -+ this._hitLimit = false -+} -+ -+UrlEncoded.prototype.write = function (data, cb) { -+ if (this._fields === this.fieldsLimit) { -+ if (!this.boy.hitFieldsLimit) { -+ this.boy.hitFieldsLimit = true -+ this.boy.emit('fieldsLimit') -+ } -+ return cb() -+ } -+ -+ let idxeq; let idxamp; let i; let p = 0; const len = data.length -+ -+ while (p < len) { -+ if (this._state === 'key') { -+ idxeq = idxamp = undefined -+ for (i = p; i < len; ++i) { -+ if (!this._checkingBytes) { ++p } -+ if (data[i] === 0x3D/* = */) { -+ idxeq = i -+ break -+ } else if (data[i] === 0x26/* & */) { -+ idxamp = i -+ break -+ } -+ if (this._checkingBytes && this._bytesKey === this.fieldNameSizeLimit) { -+ this._hitLimit = true -+ break -+ } else if (this._checkingBytes) { ++this._bytesKey } -+ } -+ -+ if (idxeq !== undefined) { -+ // key with assignment -+ if (idxeq > p) { this._key += this.decoder.write(data.toString('binary', p, idxeq)) } -+ this._state = 'val' -+ -+ this._hitLimit = false -+ this._checkingBytes = true -+ this._val = '' -+ this._bytesVal = 0 -+ this._valTrunc = false -+ this.decoder.reset() -+ -+ p = idxeq + 1 -+ } else if (idxamp !== undefined) { -+ // key with no assignment -+ ++this._fields -+ let key; const keyTrunc = this._keyTrunc -+ if (idxamp > p) { key = (this._key += this.decoder.write(data.toString('binary', p, idxamp))) } else { key = this._key } -+ -+ this._hitLimit = false -+ this._checkingBytes = true -+ this._key = '' -+ this._bytesKey = 0 -+ this._keyTrunc = false -+ this.decoder.reset() -+ -+ if (key.length) { -+ this.boy.emit('field', decodeText(key, 'binary', this.charset), -+ '', -+ keyTrunc, -+ false) -+ } -+ -+ p = idxamp + 1 -+ if (this._fields === this.fieldsLimit) { return cb() } -+ } else if (this._hitLimit) { -+ // we may not have hit the actual limit if there are encoded bytes... -+ if (i > p) { this._key += this.decoder.write(data.toString('binary', p, i)) } -+ p = i -+ if ((this._bytesKey = this._key.length) === this.fieldNameSizeLimit) { -+ // yep, we actually did hit the limit -+ this._checkingBytes = false -+ this._keyTrunc = true -+ } -+ } else { -+ if (p < len) { this._key += this.decoder.write(data.toString('binary', p)) } -+ p = len -+ } -+ } else { -+ idxamp = undefined -+ for (i = p; i < len; ++i) { -+ if (!this._checkingBytes) { ++p } -+ if (data[i] === 0x26/* & */) { -+ idxamp = i -+ break -+ } -+ if (this._checkingBytes && this._bytesVal === this.fieldSizeLimit) { -+ this._hitLimit = true -+ break -+ } else if (this._checkingBytes) { ++this._bytesVal } -+ } -+ -+ if (idxamp !== undefined) { -+ ++this._fields -+ if (idxamp > p) { this._val += this.decoder.write(data.toString('binary', p, idxamp)) } -+ this.boy.emit('field', decodeText(this._key, 'binary', this.charset), -+ decodeText(this._val, 'binary', this.charset), -+ this._keyTrunc, -+ this._valTrunc) -+ this._state = 'key' -+ -+ this._hitLimit = false -+ this._checkingBytes = true -+ this._key = '' -+ this._bytesKey = 0 -+ this._keyTrunc = false -+ this.decoder.reset() -+ -+ p = idxamp + 1 -+ if (this._fields === this.fieldsLimit) { return cb() } -+ } else if (this._hitLimit) { -+ // we may not have hit the actual limit if there are encoded bytes... -+ if (i > p) { this._val += this.decoder.write(data.toString('binary', p, i)) } -+ p = i -+ if ((this._val === '' && this.fieldSizeLimit === 0) || -+ (this._bytesVal = this._val.length) === this.fieldSizeLimit) { -+ // yep, we actually did hit the limit -+ this._checkingBytes = false -+ this._valTrunc = true -+ } -+ } else { -+ if (p < len) { this._val += this.decoder.write(data.toString('binary', p)) } -+ p = len -+ } -+ } -+ } -+ cb() -+} -+ -+UrlEncoded.prototype.end = function () { -+ if (this.boy._done) { return } -+ -+ if (this._state === 'key' && this._key.length > 0) { -+ this.boy.emit('field', decodeText(this._key, 'binary', this.charset), -+ '', -+ this._keyTrunc, -+ false) -+ } else if (this._state === 'val') { -+ this.boy.emit('field', decodeText(this._key, 'binary', this.charset), -+ decodeText(this._val, 'binary', this.charset), -+ this._keyTrunc, -+ this._valTrunc) -+ } -+ this.boy._done = true -+ this.boy.emit('finish') -+} -+ -+module.exports = UrlEncoded -+ -+ -+/***/ }), -+ -+/***/ 8910: -+/***/ ((module) => { -+ -+"use strict"; -+ -+ -+const RE_PLUS = /\+/g -+ -+const HEX = [ -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, -+ 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -+] -+ -+function Decoder () { -+ this.buffer = undefined -+} -+Decoder.prototype.write = function (str) { -+ // Replace '+' with ' ' before decoding -+ str = str.replace(RE_PLUS, ' ') -+ let res = '' -+ let i = 0; let p = 0; const len = str.length -+ for (; i < len; ++i) { -+ if (this.buffer !== undefined) { -+ if (!HEX[str.charCodeAt(i)]) { -+ res += '%' + this.buffer -+ this.buffer = undefined -+ --i // retry character -+ } else { -+ this.buffer += str[i] -+ ++p -+ if (this.buffer.length === 2) { -+ res += String.fromCharCode(parseInt(this.buffer, 16)) -+ this.buffer = undefined -+ } -+ } -+ } else if (str[i] === '%') { -+ if (i > p) { -+ res += str.substring(p, i) -+ p = i -+ } -+ this.buffer = '' -+ ++p -+ } -+ } -+ if (p < len && this.buffer === undefined) { res += str.substring(p) } -+ return res -+} -+Decoder.prototype.reset = function () { -+ this.buffer = undefined -+} -+ -+module.exports = Decoder -+ -+ -+/***/ }), -+ -+/***/ 5403: -+/***/ ((module) => { -+ -+"use strict"; -+ -+ -+module.exports = function basename (path) { -+ if (typeof path !== 'string') { return '' } -+ for (var i = path.length - 1; i >= 0; --i) { // eslint-disable-line no-var -+ switch (path.charCodeAt(i)) { -+ case 0x2F: // '/' -+ case 0x5C: // '\' -+ path = path.slice(i + 1) -+ return (path === '..' || path === '.' ? '' : path) -+ } -+ } -+ return (path === '..' || path === '.' ? '' : path) -+} -+ -+ -+/***/ }), -+ -+/***/ 8556: -+/***/ (function(module) { -+ -+"use strict"; -+ -+ -+// Node has always utf-8 -+const utf8Decoder = new TextDecoder('utf-8') -+const textDecoders = new Map([ -+ ['utf-8', utf8Decoder], -+ ['utf8', utf8Decoder] -+]) -+ -+function getDecoder (charset) { -+ let lc -+ while (true) { -+ switch (charset) { -+ case 'utf-8': -+ case 'utf8': -+ return decoders.utf8 -+ case 'latin1': -+ case 'ascii': // TODO: Make these a separate, strict decoder? -+ case 'us-ascii': -+ case 'iso-8859-1': -+ case 'iso8859-1': -+ case 'iso88591': -+ case 'iso_8859-1': -+ case 'windows-1252': -+ case 'iso_8859-1:1987': -+ case 'cp1252': -+ case 'x-cp1252': -+ return decoders.latin1 -+ case 'utf16le': -+ case 'utf-16le': -+ case 'ucs2': -+ case 'ucs-2': -+ return decoders.utf16le -+ case 'base64': -+ return decoders.base64 -+ default: -+ if (lc === undefined) { -+ lc = true -+ charset = charset.toLowerCase() -+ continue -+ } -+ return decoders.other.bind(charset) -+ } -+ } -+} -+ -+const decoders = { -+ utf8: (data, sourceEncoding) => { -+ if (data.length === 0) { -+ return '' -+ } -+ if (typeof data === 'string') { -+ data = Buffer.from(data, sourceEncoding) -+ } -+ return data.utf8Slice(0, data.length) -+ }, -+ -+ latin1: (data, sourceEncoding) => { -+ if (data.length === 0) { -+ return '' -+ } -+ if (typeof data === 'string') { -+ return data -+ } -+ return data.latin1Slice(0, data.length) -+ }, -+ -+ utf16le: (data, sourceEncoding) => { -+ if (data.length === 0) { -+ return '' -+ } -+ if (typeof data === 'string') { -+ data = Buffer.from(data, sourceEncoding) -+ } -+ return data.ucs2Slice(0, data.length) -+ }, -+ -+ base64: (data, sourceEncoding) => { -+ if (data.length === 0) { -+ return '' -+ } -+ if (typeof data === 'string') { -+ data = Buffer.from(data, sourceEncoding) -+ } -+ return data.base64Slice(0, data.length) -+ }, -+ -+ other: (data, sourceEncoding) => { -+ if (data.length === 0) { -+ return '' -+ } -+ if (typeof data === 'string') { -+ data = Buffer.from(data, sourceEncoding) -+ } -+ -+ if (textDecoders.has(this.toString())) { -+ try { -+ return textDecoders.get(this).decode(data) -+ } catch {} -+ } -+ return typeof data === 'string' -+ ? data -+ : data.toString() -+ } -+} -+ -+function decodeText (text, sourceEncoding, destEncoding) { -+ if (text) { -+ return getDecoder(destEncoding)(text, sourceEncoding) -+ } -+ return text -+} -+ -+module.exports = decodeText -+ -+ -+/***/ }), -+ -+/***/ 5518: -+/***/ ((module) => { -+ -+"use strict"; -+ -+ -+module.exports = function getLimit (limits, name, defaultLimit) { -+ if ( -+ !limits || -+ limits[name] === undefined || -+ limits[name] === null -+ ) { return defaultLimit } -+ -+ if ( -+ typeof limits[name] !== 'number' || -+ isNaN(limits[name]) -+ ) { throw new TypeError('Limit ' + name + ' is not a valid number') } -+ -+ return limits[name] -+} -+ -+ -+/***/ }), -+ -+/***/ 5432: -+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -+ -+"use strict"; -+/* eslint-disable object-property-newline */ -+ -+ -+const decodeText = __nccwpck_require__(8556) -+ -+const RE_ENCODED = /%[a-fA-F0-9][a-fA-F0-9]/g -+ -+const EncodedLookup = { -+ '%00': '\x00', '%01': '\x01', '%02': '\x02', '%03': '\x03', '%04': '\x04', -+ '%05': '\x05', '%06': '\x06', '%07': '\x07', '%08': '\x08', '%09': '\x09', -+ '%0a': '\x0a', '%0A': '\x0a', '%0b': '\x0b', '%0B': '\x0b', '%0c': '\x0c', -+ '%0C': '\x0c', '%0d': '\x0d', '%0D': '\x0d', '%0e': '\x0e', '%0E': '\x0e', -+ '%0f': '\x0f', '%0F': '\x0f', '%10': '\x10', '%11': '\x11', '%12': '\x12', -+ '%13': '\x13', '%14': '\x14', '%15': '\x15', '%16': '\x16', '%17': '\x17', -+ '%18': '\x18', '%19': '\x19', '%1a': '\x1a', '%1A': '\x1a', '%1b': '\x1b', -+ '%1B': '\x1b', '%1c': '\x1c', '%1C': '\x1c', '%1d': '\x1d', '%1D': '\x1d', -+ '%1e': '\x1e', '%1E': '\x1e', '%1f': '\x1f', '%1F': '\x1f', '%20': '\x20', -+ '%21': '\x21', '%22': '\x22', '%23': '\x23', '%24': '\x24', '%25': '\x25', -+ '%26': '\x26', '%27': '\x27', '%28': '\x28', '%29': '\x29', '%2a': '\x2a', -+ '%2A': '\x2a', '%2b': '\x2b', '%2B': '\x2b', '%2c': '\x2c', '%2C': '\x2c', -+ '%2d': '\x2d', '%2D': '\x2d', '%2e': '\x2e', '%2E': '\x2e', '%2f': '\x2f', -+ '%2F': '\x2f', '%30': '\x30', '%31': '\x31', '%32': '\x32', '%33': '\x33', -+ '%34': '\x34', '%35': '\x35', '%36': '\x36', '%37': '\x37', '%38': '\x38', -+ '%39': '\x39', '%3a': '\x3a', '%3A': '\x3a', '%3b': '\x3b', '%3B': '\x3b', -+ '%3c': '\x3c', '%3C': '\x3c', '%3d': '\x3d', '%3D': '\x3d', '%3e': '\x3e', -+ '%3E': '\x3e', '%3f': '\x3f', '%3F': '\x3f', '%40': '\x40', '%41': '\x41', -+ '%42': '\x42', '%43': '\x43', '%44': '\x44', '%45': '\x45', '%46': '\x46', -+ '%47': '\x47', '%48': '\x48', '%49': '\x49', '%4a': '\x4a', '%4A': '\x4a', -+ '%4b': '\x4b', '%4B': '\x4b', '%4c': '\x4c', '%4C': '\x4c', '%4d': '\x4d', -+ '%4D': '\x4d', '%4e': '\x4e', '%4E': '\x4e', '%4f': '\x4f', '%4F': '\x4f', -+ '%50': '\x50', '%51': '\x51', '%52': '\x52', '%53': '\x53', '%54': '\x54', -+ '%55': '\x55', '%56': '\x56', '%57': '\x57', '%58': '\x58', '%59': '\x59', -+ '%5a': '\x5a', '%5A': '\x5a', '%5b': '\x5b', '%5B': '\x5b', '%5c': '\x5c', -+ '%5C': '\x5c', '%5d': '\x5d', '%5D': '\x5d', '%5e': '\x5e', '%5E': '\x5e', -+ '%5f': '\x5f', '%5F': '\x5f', '%60': '\x60', '%61': '\x61', '%62': '\x62', -+ '%63': '\x63', '%64': '\x64', '%65': '\x65', '%66': '\x66', '%67': '\x67', -+ '%68': '\x68', '%69': '\x69', '%6a': '\x6a', '%6A': '\x6a', '%6b': '\x6b', -+ '%6B': '\x6b', '%6c': '\x6c', '%6C': '\x6c', '%6d': '\x6d', '%6D': '\x6d', -+ '%6e': '\x6e', '%6E': '\x6e', '%6f': '\x6f', '%6F': '\x6f', '%70': '\x70', -+ '%71': '\x71', '%72': '\x72', '%73': '\x73', '%74': '\x74', '%75': '\x75', -+ '%76': '\x76', '%77': '\x77', '%78': '\x78', '%79': '\x79', '%7a': '\x7a', -+ '%7A': '\x7a', '%7b': '\x7b', '%7B': '\x7b', '%7c': '\x7c', '%7C': '\x7c', -+ '%7d': '\x7d', '%7D': '\x7d', '%7e': '\x7e', '%7E': '\x7e', '%7f': '\x7f', -+ '%7F': '\x7f', '%80': '\x80', '%81': '\x81', '%82': '\x82', '%83': '\x83', -+ '%84': '\x84', '%85': '\x85', '%86': '\x86', '%87': '\x87', '%88': '\x88', -+ '%89': '\x89', '%8a': '\x8a', '%8A': '\x8a', '%8b': '\x8b', '%8B': '\x8b', -+ '%8c': '\x8c', '%8C': '\x8c', '%8d': '\x8d', '%8D': '\x8d', '%8e': '\x8e', -+ '%8E': '\x8e', '%8f': '\x8f', '%8F': '\x8f', '%90': '\x90', '%91': '\x91', -+ '%92': '\x92', '%93': '\x93', '%94': '\x94', '%95': '\x95', '%96': '\x96', -+ '%97': '\x97', '%98': '\x98', '%99': '\x99', '%9a': '\x9a', '%9A': '\x9a', -+ '%9b': '\x9b', '%9B': '\x9b', '%9c': '\x9c', '%9C': '\x9c', '%9d': '\x9d', -+ '%9D': '\x9d', '%9e': '\x9e', '%9E': '\x9e', '%9f': '\x9f', '%9F': '\x9f', -+ '%a0': '\xa0', '%A0': '\xa0', '%a1': '\xa1', '%A1': '\xa1', '%a2': '\xa2', -+ '%A2': '\xa2', '%a3': '\xa3', '%A3': '\xa3', '%a4': '\xa4', '%A4': '\xa4', -+ '%a5': '\xa5', '%A5': '\xa5', '%a6': '\xa6', '%A6': '\xa6', '%a7': '\xa7', -+ '%A7': '\xa7', '%a8': '\xa8', '%A8': '\xa8', '%a9': '\xa9', '%A9': '\xa9', -+ '%aa': '\xaa', '%Aa': '\xaa', '%aA': '\xaa', '%AA': '\xaa', '%ab': '\xab', -+ '%Ab': '\xab', '%aB': '\xab', '%AB': '\xab', '%ac': '\xac', '%Ac': '\xac', -+ '%aC': '\xac', '%AC': '\xac', '%ad': '\xad', '%Ad': '\xad', '%aD': '\xad', -+ '%AD': '\xad', '%ae': '\xae', '%Ae': '\xae', '%aE': '\xae', '%AE': '\xae', -+ '%af': '\xaf', '%Af': '\xaf', '%aF': '\xaf', '%AF': '\xaf', '%b0': '\xb0', -+ '%B0': '\xb0', '%b1': '\xb1', '%B1': '\xb1', '%b2': '\xb2', '%B2': '\xb2', -+ '%b3': '\xb3', '%B3': '\xb3', '%b4': '\xb4', '%B4': '\xb4', '%b5': '\xb5', -+ '%B5': '\xb5', '%b6': '\xb6', '%B6': '\xb6', '%b7': '\xb7', '%B7': '\xb7', -+ '%b8': '\xb8', '%B8': '\xb8', '%b9': '\xb9', '%B9': '\xb9', '%ba': '\xba', -+ '%Ba': '\xba', '%bA': '\xba', '%BA': '\xba', '%bb': '\xbb', '%Bb': '\xbb', -+ '%bB': '\xbb', '%BB': '\xbb', '%bc': '\xbc', '%Bc': '\xbc', '%bC': '\xbc', -+ '%BC': '\xbc', '%bd': '\xbd', '%Bd': '\xbd', '%bD': '\xbd', '%BD': '\xbd', -+ '%be': '\xbe', '%Be': '\xbe', '%bE': '\xbe', '%BE': '\xbe', '%bf': '\xbf', -+ '%Bf': '\xbf', '%bF': '\xbf', '%BF': '\xbf', '%c0': '\xc0', '%C0': '\xc0', -+ '%c1': '\xc1', '%C1': '\xc1', '%c2': '\xc2', '%C2': '\xc2', '%c3': '\xc3', -+ '%C3': '\xc3', '%c4': '\xc4', '%C4': '\xc4', '%c5': '\xc5', '%C5': '\xc5', -+ '%c6': '\xc6', '%C6': '\xc6', '%c7': '\xc7', '%C7': '\xc7', '%c8': '\xc8', -+ '%C8': '\xc8', '%c9': '\xc9', '%C9': '\xc9', '%ca': '\xca', '%Ca': '\xca', -+ '%cA': '\xca', '%CA': '\xca', '%cb': '\xcb', '%Cb': '\xcb', '%cB': '\xcb', -+ '%CB': '\xcb', '%cc': '\xcc', '%Cc': '\xcc', '%cC': '\xcc', '%CC': '\xcc', -+ '%cd': '\xcd', '%Cd': '\xcd', '%cD': '\xcd', '%CD': '\xcd', '%ce': '\xce', -+ '%Ce': '\xce', '%cE': '\xce', '%CE': '\xce', '%cf': '\xcf', '%Cf': '\xcf', -+ '%cF': '\xcf', '%CF': '\xcf', '%d0': '\xd0', '%D0': '\xd0', '%d1': '\xd1', -+ '%D1': '\xd1', '%d2': '\xd2', '%D2': '\xd2', '%d3': '\xd3', '%D3': '\xd3', -+ '%d4': '\xd4', '%D4': '\xd4', '%d5': '\xd5', '%D5': '\xd5', '%d6': '\xd6', -+ '%D6': '\xd6', '%d7': '\xd7', '%D7': '\xd7', '%d8': '\xd8', '%D8': '\xd8', -+ '%d9': '\xd9', '%D9': '\xd9', '%da': '\xda', '%Da': '\xda', '%dA': '\xda', -+ '%DA': '\xda', '%db': '\xdb', '%Db': '\xdb', '%dB': '\xdb', '%DB': '\xdb', -+ '%dc': '\xdc', '%Dc': '\xdc', '%dC': '\xdc', '%DC': '\xdc', '%dd': '\xdd', -+ '%Dd': '\xdd', '%dD': '\xdd', '%DD': '\xdd', '%de': '\xde', '%De': '\xde', -+ '%dE': '\xde', '%DE': '\xde', '%df': '\xdf', '%Df': '\xdf', '%dF': '\xdf', -+ '%DF': '\xdf', '%e0': '\xe0', '%E0': '\xe0', '%e1': '\xe1', '%E1': '\xe1', -+ '%e2': '\xe2', '%E2': '\xe2', '%e3': '\xe3', '%E3': '\xe3', '%e4': '\xe4', -+ '%E4': '\xe4', '%e5': '\xe5', '%E5': '\xe5', '%e6': '\xe6', '%E6': '\xe6', -+ '%e7': '\xe7', '%E7': '\xe7', '%e8': '\xe8', '%E8': '\xe8', '%e9': '\xe9', -+ '%E9': '\xe9', '%ea': '\xea', '%Ea': '\xea', '%eA': '\xea', '%EA': '\xea', -+ '%eb': '\xeb', '%Eb': '\xeb', '%eB': '\xeb', '%EB': '\xeb', '%ec': '\xec', -+ '%Ec': '\xec', '%eC': '\xec', '%EC': '\xec', '%ed': '\xed', '%Ed': '\xed', -+ '%eD': '\xed', '%ED': '\xed', '%ee': '\xee', '%Ee': '\xee', '%eE': '\xee', -+ '%EE': '\xee', '%ef': '\xef', '%Ef': '\xef', '%eF': '\xef', '%EF': '\xef', -+ '%f0': '\xf0', '%F0': '\xf0', '%f1': '\xf1', '%F1': '\xf1', '%f2': '\xf2', -+ '%F2': '\xf2', '%f3': '\xf3', '%F3': '\xf3', '%f4': '\xf4', '%F4': '\xf4', -+ '%f5': '\xf5', '%F5': '\xf5', '%f6': '\xf6', '%F6': '\xf6', '%f7': '\xf7', -+ '%F7': '\xf7', '%f8': '\xf8', '%F8': '\xf8', '%f9': '\xf9', '%F9': '\xf9', -+ '%fa': '\xfa', '%Fa': '\xfa', '%fA': '\xfa', '%FA': '\xfa', '%fb': '\xfb', -+ '%Fb': '\xfb', '%fB': '\xfb', '%FB': '\xfb', '%fc': '\xfc', '%Fc': '\xfc', -+ '%fC': '\xfc', '%FC': '\xfc', '%fd': '\xfd', '%Fd': '\xfd', '%fD': '\xfd', -+ '%FD': '\xfd', '%fe': '\xfe', '%Fe': '\xfe', '%fE': '\xfe', '%FE': '\xfe', -+ '%ff': '\xff', '%Ff': '\xff', '%fF': '\xff', '%FF': '\xff' -+} -+ -+function encodedReplacer (match) { -+ return EncodedLookup[match] -+} -+ -+const STATE_KEY = 0 -+const STATE_VALUE = 1 -+const STATE_CHARSET = 2 -+const STATE_LANG = 3 -+ -+function parseParams (str) { -+ const res = [] -+ let state = STATE_KEY -+ let charset = '' -+ let inquote = false -+ let escaping = false -+ let p = 0 -+ let tmp = '' -+ const len = str.length -+ -+ for (var i = 0; i < len; ++i) { // eslint-disable-line no-var -+ const char = str[i] -+ if (char === '\\' && inquote) { -+ if (escaping) { escaping = false } else { -+ escaping = true -+ continue -+ } -+ } else if (char === '"') { -+ if (!escaping) { -+ if (inquote) { -+ inquote = false -+ state = STATE_KEY -+ } else { inquote = true } -+ continue -+ } else { escaping = false } -+ } else { -+ if (escaping && inquote) { tmp += '\\' } -+ escaping = false -+ if ((state === STATE_CHARSET || state === STATE_LANG) && char === "'") { -+ if (state === STATE_CHARSET) { -+ state = STATE_LANG -+ charset = tmp.substring(1) -+ } else { state = STATE_VALUE } -+ tmp = '' -+ continue -+ } else if (state === STATE_KEY && -+ (char === '*' || char === '=') && -+ res.length) { -+ state = char === '*' -+ ? STATE_CHARSET -+ : STATE_VALUE -+ res[p] = [tmp, undefined] -+ tmp = '' -+ continue -+ } else if (!inquote && char === ';') { -+ state = STATE_KEY -+ if (charset) { -+ if (tmp.length) { -+ tmp = decodeText(tmp.replace(RE_ENCODED, encodedReplacer), -+ 'binary', -+ charset) -+ } -+ charset = '' -+ } else if (tmp.length) { -+ tmp = decodeText(tmp, 'binary', 'utf8') -+ } -+ if (res[p] === undefined) { res[p] = tmp } else { res[p][1] = tmp } -+ tmp = '' -+ ++p -+ continue -+ } else if (!inquote && (char === ' ' || char === '\t')) { continue } -+ } -+ tmp += char -+ } -+ if (charset && tmp.length) { -+ tmp = decodeText(tmp.replace(RE_ENCODED, encodedReplacer), -+ 'binary', -+ charset) -+ } else if (tmp) { -+ tmp = decodeText(tmp, 'binary', 'utf8') -+ } -+ -+ if (res[p] === undefined) { -+ if (tmp) { res[p] = tmp } -+ } else { res[p][1] = tmp } -+ -+ return res -+} -+ -+module.exports = parseParams -+ -+ -+/***/ }), -+ -+/***/ 3198: -+/***/ ((module) => { -+ -+"use strict"; -+module.exports = JSON.parse('[[[0,44],"disallowed_STD3_valid"],[[45,46],"valid"],[[47,47],"disallowed_STD3_valid"],[[48,57],"valid"],[[58,64],"disallowed_STD3_valid"],[[65,65],"mapped",[97]],[[66,66],"mapped",[98]],[[67,67],"mapped",[99]],[[68,68],"mapped",[100]],[[69,69],"mapped",[101]],[[70,70],"mapped",[102]],[[71,71],"mapped",[103]],[[72,72],"mapped",[104]],[[73,73],"mapped",[105]],[[74,74],"mapped",[106]],[[75,75],"mapped",[107]],[[76,76],"mapped",[108]],[[77,77],"mapped",[109]],[[78,78],"mapped",[110]],[[79,79],"mapped",[111]],[[80,80],"mapped",[112]],[[81,81],"mapped",[113]],[[82,82],"mapped",[114]],[[83,83],"mapped",[115]],[[84,84],"mapped",[116]],[[85,85],"mapped",[117]],[[86,86],"mapped",[118]],[[87,87],"mapped",[119]],[[88,88],"mapped",[120]],[[89,89],"mapped",[121]],[[90,90],"mapped",[122]],[[91,96],"disallowed_STD3_valid"],[[97,122],"valid"],[[123,127],"disallowed_STD3_valid"],[[128,159],"disallowed"],[[160,160],"disallowed_STD3_mapped",[32]],[[161,167],"valid",[],"NV8"],[[168,168],"disallowed_STD3_mapped",[32,776]],[[169,169],"valid",[],"NV8"],[[170,170],"mapped",[97]],[[171,172],"valid",[],"NV8"],[[173,173],"ignored"],[[174,174],"valid",[],"NV8"],[[175,175],"disallowed_STD3_mapped",[32,772]],[[176,177],"valid",[],"NV8"],[[178,178],"mapped",[50]],[[179,179],"mapped",[51]],[[180,180],"disallowed_STD3_mapped",[32,769]],[[181,181],"mapped",[956]],[[182,182],"valid",[],"NV8"],[[183,183],"valid"],[[184,184],"disallowed_STD3_mapped",[32,807]],[[185,185],"mapped",[49]],[[186,186],"mapped",[111]],[[187,187],"valid",[],"NV8"],[[188,188],"mapped",[49,8260,52]],[[189,189],"mapped",[49,8260,50]],[[190,190],"mapped",[51,8260,52]],[[191,191],"valid",[],"NV8"],[[192,192],"mapped",[224]],[[193,193],"mapped",[225]],[[194,194],"mapped",[226]],[[195,195],"mapped",[227]],[[196,196],"mapped",[228]],[[197,197],"mapped",[229]],[[198,198],"mapped",[230]],[[199,199],"mapped",[231]],[[200,200],"mapped",[232]],[[201,201],"mapped",[233]],[[202,202],"mapped",[234]],[[203,203],"mapped",[235]],[[204,204],"mapped",[236]],[[205,205],"mapped",[237]],[[206,206],"mapped",[238]],[[207,207],"mapped",[239]],[[208,208],"mapped",[240]],[[209,209],"mapped",[241]],[[210,210],"mapped",[242]],[[211,211],"mapped",[243]],[[212,212],"mapped",[244]],[[213,213],"mapped",[245]],[[214,214],"mapped",[246]],[[215,215],"valid",[],"NV8"],[[216,216],"mapped",[248]],[[217,217],"mapped",[249]],[[218,218],"mapped",[250]],[[219,219],"mapped",[251]],[[220,220],"mapped",[252]],[[221,221],"mapped",[253]],[[222,222],"mapped",[254]],[[223,223],"deviation",[115,115]],[[224,246],"valid"],[[247,247],"valid",[],"NV8"],[[248,255],"valid"],[[256,256],"mapped",[257]],[[257,257],"valid"],[[258,258],"mapped",[259]],[[259,259],"valid"],[[260,260],"mapped",[261]],[[261,261],"valid"],[[262,262],"mapped",[263]],[[263,263],"valid"],[[264,264],"mapped",[265]],[[265,265],"valid"],[[266,266],"mapped",[267]],[[267,267],"valid"],[[268,268],"mapped",[269]],[[269,269],"valid"],[[270,270],"mapped",[271]],[[271,271],"valid"],[[272,272],"mapped",[273]],[[273,273],"valid"],[[274,274],"mapped",[275]],[[275,275],"valid"],[[276,276],"mapped",[277]],[[277,277],"valid"],[[278,278],"mapped",[279]],[[279,279],"valid"],[[280,280],"mapped",[281]],[[281,281],"valid"],[[282,282],"mapped",[283]],[[283,283],"valid"],[[284,284],"mapped",[285]],[[285,285],"valid"],[[286,286],"mapped",[287]],[[287,287],"valid"],[[288,288],"mapped",[289]],[[289,289],"valid"],[[290,290],"mapped",[291]],[[291,291],"valid"],[[292,292],"mapped",[293]],[[293,293],"valid"],[[294,294],"mapped",[295]],[[295,295],"valid"],[[296,296],"mapped",[297]],[[297,297],"valid"],[[298,298],"mapped",[299]],[[299,299],"valid"],[[300,300],"mapped",[301]],[[301,301],"valid"],[[302,302],"mapped",[303]],[[303,303],"valid"],[[304,304],"mapped",[105,775]],[[305,305],"valid"],[[306,307],"mapped",[105,106]],[[308,308],"mapped",[309]],[[309,309],"valid"],[[310,310],"mapped",[311]],[[311,312],"valid"],[[313,313],"mapped",[314]],[[314,314],"valid"],[[315,315],"mapped",[316]],[[316,316],"valid"],[[317,317],"mapped",[318]],[[318,318],"valid"],[[319,320],"mapped",[108,183]],[[321,321],"mapped",[322]],[[322,322],"valid"],[[323,323],"mapped",[324]],[[324,324],"valid"],[[325,325],"mapped",[326]],[[326,326],"valid"],[[327,327],"mapped",[328]],[[328,328],"valid"],[[329,329],"mapped",[700,110]],[[330,330],"mapped",[331]],[[331,331],"valid"],[[332,332],"mapped",[333]],[[333,333],"valid"],[[334,334],"mapped",[335]],[[335,335],"valid"],[[336,336],"mapped",[337]],[[337,337],"valid"],[[338,338],"mapped",[339]],[[339,339],"valid"],[[340,340],"mapped",[341]],[[341,341],"valid"],[[342,342],"mapped",[343]],[[343,343],"valid"],[[344,344],"mapped",[345]],[[345,345],"valid"],[[346,346],"mapped",[347]],[[347,347],"valid"],[[348,348],"mapped",[349]],[[349,349],"valid"],[[350,350],"mapped",[351]],[[351,351],"valid"],[[352,352],"mapped",[353]],[[353,353],"valid"],[[354,354],"mapped",[355]],[[355,355],"valid"],[[356,356],"mapped",[357]],[[357,357],"valid"],[[358,358],"mapped",[359]],[[359,359],"valid"],[[360,360],"mapped",[361]],[[361,361],"valid"],[[362,362],"mapped",[363]],[[363,363],"valid"],[[364,364],"mapped",[365]],[[365,365],"valid"],[[366,366],"mapped",[367]],[[367,367],"valid"],[[368,368],"mapped",[369]],[[369,369],"valid"],[[370,370],"mapped",[371]],[[371,371],"valid"],[[372,372],"mapped",[373]],[[373,373],"valid"],[[374,374],"mapped",[375]],[[375,375],"valid"],[[376,376],"mapped",[255]],[[377,377],"mapped",[378]],[[378,378],"valid"],[[379,379],"mapped",[380]],[[380,380],"valid"],[[381,381],"mapped",[382]],[[382,382],"valid"],[[383,383],"mapped",[115]],[[384,384],"valid"],[[385,385],"mapped",[595]],[[386,386],"mapped",[387]],[[387,387],"valid"],[[388,388],"mapped",[389]],[[389,389],"valid"],[[390,390],"mapped",[596]],[[391,391],"mapped",[392]],[[392,392],"valid"],[[393,393],"mapped",[598]],[[394,394],"mapped",[599]],[[395,395],"mapped",[396]],[[396,397],"valid"],[[398,398],"mapped",[477]],[[399,399],"mapped",[601]],[[400,400],"mapped",[603]],[[401,401],"mapped",[402]],[[402,402],"valid"],[[403,403],"mapped",[608]],[[404,404],"mapped",[611]],[[405,405],"valid"],[[406,406],"mapped",[617]],[[407,407],"mapped",[616]],[[408,408],"mapped",[409]],[[409,411],"valid"],[[412,412],"mapped",[623]],[[413,413],"mapped",[626]],[[414,414],"valid"],[[415,415],"mapped",[629]],[[416,416],"mapped",[417]],[[417,417],"valid"],[[418,418],"mapped",[419]],[[419,419],"valid"],[[420,420],"mapped",[421]],[[421,421],"valid"],[[422,422],"mapped",[640]],[[423,423],"mapped",[424]],[[424,424],"valid"],[[425,425],"mapped",[643]],[[426,427],"valid"],[[428,428],"mapped",[429]],[[429,429],"valid"],[[430,430],"mapped",[648]],[[431,431],"mapped",[432]],[[432,432],"valid"],[[433,433],"mapped",[650]],[[434,434],"mapped",[651]],[[435,435],"mapped",[436]],[[436,436],"valid"],[[437,437],"mapped",[438]],[[438,438],"valid"],[[439,439],"mapped",[658]],[[440,440],"mapped",[441]],[[441,443],"valid"],[[444,444],"mapped",[445]],[[445,451],"valid"],[[452,454],"mapped",[100,382]],[[455,457],"mapped",[108,106]],[[458,460],"mapped",[110,106]],[[461,461],"mapped",[462]],[[462,462],"valid"],[[463,463],"mapped",[464]],[[464,464],"valid"],[[465,465],"mapped",[466]],[[466,466],"valid"],[[467,467],"mapped",[468]],[[468,468],"valid"],[[469,469],"mapped",[470]],[[470,470],"valid"],[[471,471],"mapped",[472]],[[472,472],"valid"],[[473,473],"mapped",[474]],[[474,474],"valid"],[[475,475],"mapped",[476]],[[476,477],"valid"],[[478,478],"mapped",[479]],[[479,479],"valid"],[[480,480],"mapped",[481]],[[481,481],"valid"],[[482,482],"mapped",[483]],[[483,483],"valid"],[[484,484],"mapped",[485]],[[485,485],"valid"],[[486,486],"mapped",[487]],[[487,487],"valid"],[[488,488],"mapped",[489]],[[489,489],"valid"],[[490,490],"mapped",[491]],[[491,491],"valid"],[[492,492],"mapped",[493]],[[493,493],"valid"],[[494,494],"mapped",[495]],[[495,496],"valid"],[[497,499],"mapped",[100,122]],[[500,500],"mapped",[501]],[[501,501],"valid"],[[502,502],"mapped",[405]],[[503,503],"mapped",[447]],[[504,504],"mapped",[505]],[[505,505],"valid"],[[506,506],"mapped",[507]],[[507,507],"valid"],[[508,508],"mapped",[509]],[[509,509],"valid"],[[510,510],"mapped",[511]],[[511,511],"valid"],[[512,512],"mapped",[513]],[[513,513],"valid"],[[514,514],"mapped",[515]],[[515,515],"valid"],[[516,516],"mapped",[517]],[[517,517],"valid"],[[518,518],"mapped",[519]],[[519,519],"valid"],[[520,520],"mapped",[521]],[[521,521],"valid"],[[522,522],"mapped",[523]],[[523,523],"valid"],[[524,524],"mapped",[525]],[[525,525],"valid"],[[526,526],"mapped",[527]],[[527,527],"valid"],[[528,528],"mapped",[529]],[[529,529],"valid"],[[530,530],"mapped",[531]],[[531,531],"valid"],[[532,532],"mapped",[533]],[[533,533],"valid"],[[534,534],"mapped",[535]],[[535,535],"valid"],[[536,536],"mapped",[537]],[[537,537],"valid"],[[538,538],"mapped",[539]],[[539,539],"valid"],[[540,540],"mapped",[541]],[[541,541],"valid"],[[542,542],"mapped",[543]],[[543,543],"valid"],[[544,544],"mapped",[414]],[[545,545],"valid"],[[546,546],"mapped",[547]],[[547,547],"valid"],[[548,548],"mapped",[549]],[[549,549],"valid"],[[550,550],"mapped",[551]],[[551,551],"valid"],[[552,552],"mapped",[553]],[[553,553],"valid"],[[554,554],"mapped",[555]],[[555,555],"valid"],[[556,556],"mapped",[557]],[[557,557],"valid"],[[558,558],"mapped",[559]],[[559,559],"valid"],[[560,560],"mapped",[561]],[[561,561],"valid"],[[562,562],"mapped",[563]],[[563,563],"valid"],[[564,566],"valid"],[[567,569],"valid"],[[570,570],"mapped",[11365]],[[571,571],"mapped",[572]],[[572,572],"valid"],[[573,573],"mapped",[410]],[[574,574],"mapped",[11366]],[[575,576],"valid"],[[577,577],"mapped",[578]],[[578,578],"valid"],[[579,579],"mapped",[384]],[[580,580],"mapped",[649]],[[581,581],"mapped",[652]],[[582,582],"mapped",[583]],[[583,583],"valid"],[[584,584],"mapped",[585]],[[585,585],"valid"],[[586,586],"mapped",[587]],[[587,587],"valid"],[[588,588],"mapped",[589]],[[589,589],"valid"],[[590,590],"mapped",[591]],[[591,591],"valid"],[[592,680],"valid"],[[681,685],"valid"],[[686,687],"valid"],[[688,688],"mapped",[104]],[[689,689],"mapped",[614]],[[690,690],"mapped",[106]],[[691,691],"mapped",[114]],[[692,692],"mapped",[633]],[[693,693],"mapped",[635]],[[694,694],"mapped",[641]],[[695,695],"mapped",[119]],[[696,696],"mapped",[121]],[[697,705],"valid"],[[706,709],"valid",[],"NV8"],[[710,721],"valid"],[[722,727],"valid",[],"NV8"],[[728,728],"disallowed_STD3_mapped",[32,774]],[[729,729],"disallowed_STD3_mapped",[32,775]],[[730,730],"disallowed_STD3_mapped",[32,778]],[[731,731],"disallowed_STD3_mapped",[32,808]],[[732,732],"disallowed_STD3_mapped",[32,771]],[[733,733],"disallowed_STD3_mapped",[32,779]],[[734,734],"valid",[],"NV8"],[[735,735],"valid",[],"NV8"],[[736,736],"mapped",[611]],[[737,737],"mapped",[108]],[[738,738],"mapped",[115]],[[739,739],"mapped",[120]],[[740,740],"mapped",[661]],[[741,745],"valid",[],"NV8"],[[746,747],"valid",[],"NV8"],[[748,748],"valid"],[[749,749],"valid",[],"NV8"],[[750,750],"valid"],[[751,767],"valid",[],"NV8"],[[768,831],"valid"],[[832,832],"mapped",[768]],[[833,833],"mapped",[769]],[[834,834],"valid"],[[835,835],"mapped",[787]],[[836,836],"mapped",[776,769]],[[837,837],"mapped",[953]],[[838,846],"valid"],[[847,847],"ignored"],[[848,855],"valid"],[[856,860],"valid"],[[861,863],"valid"],[[864,865],"valid"],[[866,866],"valid"],[[867,879],"valid"],[[880,880],"mapped",[881]],[[881,881],"valid"],[[882,882],"mapped",[883]],[[883,883],"valid"],[[884,884],"mapped",[697]],[[885,885],"valid"],[[886,886],"mapped",[887]],[[887,887],"valid"],[[888,889],"disallowed"],[[890,890],"disallowed_STD3_mapped",[32,953]],[[891,893],"valid"],[[894,894],"disallowed_STD3_mapped",[59]],[[895,895],"mapped",[1011]],[[896,899],"disallowed"],[[900,900],"disallowed_STD3_mapped",[32,769]],[[901,901],"disallowed_STD3_mapped",[32,776,769]],[[902,902],"mapped",[940]],[[903,903],"mapped",[183]],[[904,904],"mapped",[941]],[[905,905],"mapped",[942]],[[906,906],"mapped",[943]],[[907,907],"disallowed"],[[908,908],"mapped",[972]],[[909,909],"disallowed"],[[910,910],"mapped",[973]],[[911,911],"mapped",[974]],[[912,912],"valid"],[[913,913],"mapped",[945]],[[914,914],"mapped",[946]],[[915,915],"mapped",[947]],[[916,916],"mapped",[948]],[[917,917],"mapped",[949]],[[918,918],"mapped",[950]],[[919,919],"mapped",[951]],[[920,920],"mapped",[952]],[[921,921],"mapped",[953]],[[922,922],"mapped",[954]],[[923,923],"mapped",[955]],[[924,924],"mapped",[956]],[[925,925],"mapped",[957]],[[926,926],"mapped",[958]],[[927,927],"mapped",[959]],[[928,928],"mapped",[960]],[[929,929],"mapped",[961]],[[930,930],"disallowed"],[[931,931],"mapped",[963]],[[932,932],"mapped",[964]],[[933,933],"mapped",[965]],[[934,934],"mapped",[966]],[[935,935],"mapped",[967]],[[936,936],"mapped",[968]],[[937,937],"mapped",[969]],[[938,938],"mapped",[970]],[[939,939],"mapped",[971]],[[940,961],"valid"],[[962,962],"deviation",[963]],[[963,974],"valid"],[[975,975],"mapped",[983]],[[976,976],"mapped",[946]],[[977,977],"mapped",[952]],[[978,978],"mapped",[965]],[[979,979],"mapped",[973]],[[980,980],"mapped",[971]],[[981,981],"mapped",[966]],[[982,982],"mapped",[960]],[[983,983],"valid"],[[984,984],"mapped",[985]],[[985,985],"valid"],[[986,986],"mapped",[987]],[[987,987],"valid"],[[988,988],"mapped",[989]],[[989,989],"valid"],[[990,990],"mapped",[991]],[[991,991],"valid"],[[992,992],"mapped",[993]],[[993,993],"valid"],[[994,994],"mapped",[995]],[[995,995],"valid"],[[996,996],"mapped",[997]],[[997,997],"valid"],[[998,998],"mapped",[999]],[[999,999],"valid"],[[1000,1000],"mapped",[1001]],[[1001,1001],"valid"],[[1002,1002],"mapped",[1003]],[[1003,1003],"valid"],[[1004,1004],"mapped",[1005]],[[1005,1005],"valid"],[[1006,1006],"mapped",[1007]],[[1007,1007],"valid"],[[1008,1008],"mapped",[954]],[[1009,1009],"mapped",[961]],[[1010,1010],"mapped",[963]],[[1011,1011],"valid"],[[1012,1012],"mapped",[952]],[[1013,1013],"mapped",[949]],[[1014,1014],"valid",[],"NV8"],[[1015,1015],"mapped",[1016]],[[1016,1016],"valid"],[[1017,1017],"mapped",[963]],[[1018,1018],"mapped",[1019]],[[1019,1019],"valid"],[[1020,1020],"valid"],[[1021,1021],"mapped",[891]],[[1022,1022],"mapped",[892]],[[1023,1023],"mapped",[893]],[[1024,1024],"mapped",[1104]],[[1025,1025],"mapped",[1105]],[[1026,1026],"mapped",[1106]],[[1027,1027],"mapped",[1107]],[[1028,1028],"mapped",[1108]],[[1029,1029],"mapped",[1109]],[[1030,1030],"mapped",[1110]],[[1031,1031],"mapped",[1111]],[[1032,1032],"mapped",[1112]],[[1033,1033],"mapped",[1113]],[[1034,1034],"mapped",[1114]],[[1035,1035],"mapped",[1115]],[[1036,1036],"mapped",[1116]],[[1037,1037],"mapped",[1117]],[[1038,1038],"mapped",[1118]],[[1039,1039],"mapped",[1119]],[[1040,1040],"mapped",[1072]],[[1041,1041],"mapped",[1073]],[[1042,1042],"mapped",[1074]],[[1043,1043],"mapped",[1075]],[[1044,1044],"mapped",[1076]],[[1045,1045],"mapped",[1077]],[[1046,1046],"mapped",[1078]],[[1047,1047],"mapped",[1079]],[[1048,1048],"mapped",[1080]],[[1049,1049],"mapped",[1081]],[[1050,1050],"mapped",[1082]],[[1051,1051],"mapped",[1083]],[[1052,1052],"mapped",[1084]],[[1053,1053],"mapped",[1085]],[[1054,1054],"mapped",[1086]],[[1055,1055],"mapped",[1087]],[[1056,1056],"mapped",[1088]],[[1057,1057],"mapped",[1089]],[[1058,1058],"mapped",[1090]],[[1059,1059],"mapped",[1091]],[[1060,1060],"mapped",[1092]],[[1061,1061],"mapped",[1093]],[[1062,1062],"mapped",[1094]],[[1063,1063],"mapped",[1095]],[[1064,1064],"mapped",[1096]],[[1065,1065],"mapped",[1097]],[[1066,1066],"mapped",[1098]],[[1067,1067],"mapped",[1099]],[[1068,1068],"mapped",[1100]],[[1069,1069],"mapped",[1101]],[[1070,1070],"mapped",[1102]],[[1071,1071],"mapped",[1103]],[[1072,1103],"valid"],[[1104,1104],"valid"],[[1105,1116],"valid"],[[1117,1117],"valid"],[[1118,1119],"valid"],[[1120,1120],"mapped",[1121]],[[1121,1121],"valid"],[[1122,1122],"mapped",[1123]],[[1123,1123],"valid"],[[1124,1124],"mapped",[1125]],[[1125,1125],"valid"],[[1126,1126],"mapped",[1127]],[[1127,1127],"valid"],[[1128,1128],"mapped",[1129]],[[1129,1129],"valid"],[[1130,1130],"mapped",[1131]],[[1131,1131],"valid"],[[1132,1132],"mapped",[1133]],[[1133,1133],"valid"],[[1134,1134],"mapped",[1135]],[[1135,1135],"valid"],[[1136,1136],"mapped",[1137]],[[1137,1137],"valid"],[[1138,1138],"mapped",[1139]],[[1139,1139],"valid"],[[1140,1140],"mapped",[1141]],[[1141,1141],"valid"],[[1142,1142],"mapped",[1143]],[[1143,1143],"valid"],[[1144,1144],"mapped",[1145]],[[1145,1145],"valid"],[[1146,1146],"mapped",[1147]],[[1147,1147],"valid"],[[1148,1148],"mapped",[1149]],[[1149,1149],"valid"],[[1150,1150],"mapped",[1151]],[[1151,1151],"valid"],[[1152,1152],"mapped",[1153]],[[1153,1153],"valid"],[[1154,1154],"valid",[],"NV8"],[[1155,1158],"valid"],[[1159,1159],"valid"],[[1160,1161],"valid",[],"NV8"],[[1162,1162],"mapped",[1163]],[[1163,1163],"valid"],[[1164,1164],"mapped",[1165]],[[1165,1165],"valid"],[[1166,1166],"mapped",[1167]],[[1167,1167],"valid"],[[1168,1168],"mapped",[1169]],[[1169,1169],"valid"],[[1170,1170],"mapped",[1171]],[[1171,1171],"valid"],[[1172,1172],"mapped",[1173]],[[1173,1173],"valid"],[[1174,1174],"mapped",[1175]],[[1175,1175],"valid"],[[1176,1176],"mapped",[1177]],[[1177,1177],"valid"],[[1178,1178],"mapped",[1179]],[[1179,1179],"valid"],[[1180,1180],"mapped",[1181]],[[1181,1181],"valid"],[[1182,1182],"mapped",[1183]],[[1183,1183],"valid"],[[1184,1184],"mapped",[1185]],[[1185,1185],"valid"],[[1186,1186],"mapped",[1187]],[[1187,1187],"valid"],[[1188,1188],"mapped",[1189]],[[1189,1189],"valid"],[[1190,1190],"mapped",[1191]],[[1191,1191],"valid"],[[1192,1192],"mapped",[1193]],[[1193,1193],"valid"],[[1194,1194],"mapped",[1195]],[[1195,1195],"valid"],[[1196,1196],"mapped",[1197]],[[1197,1197],"valid"],[[1198,1198],"mapped",[1199]],[[1199,1199],"valid"],[[1200,1200],"mapped",[1201]],[[1201,1201],"valid"],[[1202,1202],"mapped",[1203]],[[1203,1203],"valid"],[[1204,1204],"mapped",[1205]],[[1205,1205],"valid"],[[1206,1206],"mapped",[1207]],[[1207,1207],"valid"],[[1208,1208],"mapped",[1209]],[[1209,1209],"valid"],[[1210,1210],"mapped",[1211]],[[1211,1211],"valid"],[[1212,1212],"mapped",[1213]],[[1213,1213],"valid"],[[1214,1214],"mapped",[1215]],[[1215,1215],"valid"],[[1216,1216],"disallowed"],[[1217,1217],"mapped",[1218]],[[1218,1218],"valid"],[[1219,1219],"mapped",[1220]],[[1220,1220],"valid"],[[1221,1221],"mapped",[1222]],[[1222,1222],"valid"],[[1223,1223],"mapped",[1224]],[[1224,1224],"valid"],[[1225,1225],"mapped",[1226]],[[1226,1226],"valid"],[[1227,1227],"mapped",[1228]],[[1228,1228],"valid"],[[1229,1229],"mapped",[1230]],[[1230,1230],"valid"],[[1231,1231],"valid"],[[1232,1232],"mapped",[1233]],[[1233,1233],"valid"],[[1234,1234],"mapped",[1235]],[[1235,1235],"valid"],[[1236,1236],"mapped",[1237]],[[1237,1237],"valid"],[[1238,1238],"mapped",[1239]],[[1239,1239],"valid"],[[1240,1240],"mapped",[1241]],[[1241,1241],"valid"],[[1242,1242],"mapped",[1243]],[[1243,1243],"valid"],[[1244,1244],"mapped",[1245]],[[1245,1245],"valid"],[[1246,1246],"mapped",[1247]],[[1247,1247],"valid"],[[1248,1248],"mapped",[1249]],[[1249,1249],"valid"],[[1250,1250],"mapped",[1251]],[[1251,1251],"valid"],[[1252,1252],"mapped",[1253]],[[1253,1253],"valid"],[[1254,1254],"mapped",[1255]],[[1255,1255],"valid"],[[1256,1256],"mapped",[1257]],[[1257,1257],"valid"],[[1258,1258],"mapped",[1259]],[[1259,1259],"valid"],[[1260,1260],"mapped",[1261]],[[1261,1261],"valid"],[[1262,1262],"mapped",[1263]],[[1263,1263],"valid"],[[1264,1264],"mapped",[1265]],[[1265,1265],"valid"],[[1266,1266],"mapped",[1267]],[[1267,1267],"valid"],[[1268,1268],"mapped",[1269]],[[1269,1269],"valid"],[[1270,1270],"mapped",[1271]],[[1271,1271],"valid"],[[1272,1272],"mapped",[1273]],[[1273,1273],"valid"],[[1274,1274],"mapped",[1275]],[[1275,1275],"valid"],[[1276,1276],"mapped",[1277]],[[1277,1277],"valid"],[[1278,1278],"mapped",[1279]],[[1279,1279],"valid"],[[1280,1280],"mapped",[1281]],[[1281,1281],"valid"],[[1282,1282],"mapped",[1283]],[[1283,1283],"valid"],[[1284,1284],"mapped",[1285]],[[1285,1285],"valid"],[[1286,1286],"mapped",[1287]],[[1287,1287],"valid"],[[1288,1288],"mapped",[1289]],[[1289,1289],"valid"],[[1290,1290],"mapped",[1291]],[[1291,1291],"valid"],[[1292,1292],"mapped",[1293]],[[1293,1293],"valid"],[[1294,1294],"mapped",[1295]],[[1295,1295],"valid"],[[1296,1296],"mapped",[1297]],[[1297,1297],"valid"],[[1298,1298],"mapped",[1299]],[[1299,1299],"valid"],[[1300,1300],"mapped",[1301]],[[1301,1301],"valid"],[[1302,1302],"mapped",[1303]],[[1303,1303],"valid"],[[1304,1304],"mapped",[1305]],[[1305,1305],"valid"],[[1306,1306],"mapped",[1307]],[[1307,1307],"valid"],[[1308,1308],"mapped",[1309]],[[1309,1309],"valid"],[[1310,1310],"mapped",[1311]],[[1311,1311],"valid"],[[1312,1312],"mapped",[1313]],[[1313,1313],"valid"],[[1314,1314],"mapped",[1315]],[[1315,1315],"valid"],[[1316,1316],"mapped",[1317]],[[1317,1317],"valid"],[[1318,1318],"mapped",[1319]],[[1319,1319],"valid"],[[1320,1320],"mapped",[1321]],[[1321,1321],"valid"],[[1322,1322],"mapped",[1323]],[[1323,1323],"valid"],[[1324,1324],"mapped",[1325]],[[1325,1325],"valid"],[[1326,1326],"mapped",[1327]],[[1327,1327],"valid"],[[1328,1328],"disallowed"],[[1329,1329],"mapped",[1377]],[[1330,1330],"mapped",[1378]],[[1331,1331],"mapped",[1379]],[[1332,1332],"mapped",[1380]],[[1333,1333],"mapped",[1381]],[[1334,1334],"mapped",[1382]],[[1335,1335],"mapped",[1383]],[[1336,1336],"mapped",[1384]],[[1337,1337],"mapped",[1385]],[[1338,1338],"mapped",[1386]],[[1339,1339],"mapped",[1387]],[[1340,1340],"mapped",[1388]],[[1341,1341],"mapped",[1389]],[[1342,1342],"mapped",[1390]],[[1343,1343],"mapped",[1391]],[[1344,1344],"mapped",[1392]],[[1345,1345],"mapped",[1393]],[[1346,1346],"mapped",[1394]],[[1347,1347],"mapped",[1395]],[[1348,1348],"mapped",[1396]],[[1349,1349],"mapped",[1397]],[[1350,1350],"mapped",[1398]],[[1351,1351],"mapped",[1399]],[[1352,1352],"mapped",[1400]],[[1353,1353],"mapped",[1401]],[[1354,1354],"mapped",[1402]],[[1355,1355],"mapped",[1403]],[[1356,1356],"mapped",[1404]],[[1357,1357],"mapped",[1405]],[[1358,1358],"mapped",[1406]],[[1359,1359],"mapped",[1407]],[[1360,1360],"mapped",[1408]],[[1361,1361],"mapped",[1409]],[[1362,1362],"mapped",[1410]],[[1363,1363],"mapped",[1411]],[[1364,1364],"mapped",[1412]],[[1365,1365],"mapped",[1413]],[[1366,1366],"mapped",[1414]],[[1367,1368],"disallowed"],[[1369,1369],"valid"],[[1370,1375],"valid",[],"NV8"],[[1376,1376],"disallowed"],[[1377,1414],"valid"],[[1415,1415],"mapped",[1381,1410]],[[1416,1416],"disallowed"],[[1417,1417],"valid",[],"NV8"],[[1418,1418],"valid",[],"NV8"],[[1419,1420],"disallowed"],[[1421,1422],"valid",[],"NV8"],[[1423,1423],"valid",[],"NV8"],[[1424,1424],"disallowed"],[[1425,1441],"valid"],[[1442,1442],"valid"],[[1443,1455],"valid"],[[1456,1465],"valid"],[[1466,1466],"valid"],[[1467,1469],"valid"],[[1470,1470],"valid",[],"NV8"],[[1471,1471],"valid"],[[1472,1472],"valid",[],"NV8"],[[1473,1474],"valid"],[[1475,1475],"valid",[],"NV8"],[[1476,1476],"valid"],[[1477,1477],"valid"],[[1478,1478],"valid",[],"NV8"],[[1479,1479],"valid"],[[1480,1487],"disallowed"],[[1488,1514],"valid"],[[1515,1519],"disallowed"],[[1520,1524],"valid"],[[1525,1535],"disallowed"],[[1536,1539],"disallowed"],[[1540,1540],"disallowed"],[[1541,1541],"disallowed"],[[1542,1546],"valid",[],"NV8"],[[1547,1547],"valid",[],"NV8"],[[1548,1548],"valid",[],"NV8"],[[1549,1551],"valid",[],"NV8"],[[1552,1557],"valid"],[[1558,1562],"valid"],[[1563,1563],"valid",[],"NV8"],[[1564,1564],"disallowed"],[[1565,1565],"disallowed"],[[1566,1566],"valid",[],"NV8"],[[1567,1567],"valid",[],"NV8"],[[1568,1568],"valid"],[[1569,1594],"valid"],[[1595,1599],"valid"],[[1600,1600],"valid",[],"NV8"],[[1601,1618],"valid"],[[1619,1621],"valid"],[[1622,1624],"valid"],[[1625,1630],"valid"],[[1631,1631],"valid"],[[1632,1641],"valid"],[[1642,1645],"valid",[],"NV8"],[[1646,1647],"valid"],[[1648,1652],"valid"],[[1653,1653],"mapped",[1575,1652]],[[1654,1654],"mapped",[1608,1652]],[[1655,1655],"mapped",[1735,1652]],[[1656,1656],"mapped",[1610,1652]],[[1657,1719],"valid"],[[1720,1721],"valid"],[[1722,1726],"valid"],[[1727,1727],"valid"],[[1728,1742],"valid"],[[1743,1743],"valid"],[[1744,1747],"valid"],[[1748,1748],"valid",[],"NV8"],[[1749,1756],"valid"],[[1757,1757],"disallowed"],[[1758,1758],"valid",[],"NV8"],[[1759,1768],"valid"],[[1769,1769],"valid",[],"NV8"],[[1770,1773],"valid"],[[1774,1775],"valid"],[[1776,1785],"valid"],[[1786,1790],"valid"],[[1791,1791],"valid"],[[1792,1805],"valid",[],"NV8"],[[1806,1806],"disallowed"],[[1807,1807],"disallowed"],[[1808,1836],"valid"],[[1837,1839],"valid"],[[1840,1866],"valid"],[[1867,1868],"disallowed"],[[1869,1871],"valid"],[[1872,1901],"valid"],[[1902,1919],"valid"],[[1920,1968],"valid"],[[1969,1969],"valid"],[[1970,1983],"disallowed"],[[1984,2037],"valid"],[[2038,2042],"valid",[],"NV8"],[[2043,2047],"disallowed"],[[2048,2093],"valid"],[[2094,2095],"disallowed"],[[2096,2110],"valid",[],"NV8"],[[2111,2111],"disallowed"],[[2112,2139],"valid"],[[2140,2141],"disallowed"],[[2142,2142],"valid",[],"NV8"],[[2143,2207],"disallowed"],[[2208,2208],"valid"],[[2209,2209],"valid"],[[2210,2220],"valid"],[[2221,2226],"valid"],[[2227,2228],"valid"],[[2229,2274],"disallowed"],[[2275,2275],"valid"],[[2276,2302],"valid"],[[2303,2303],"valid"],[[2304,2304],"valid"],[[2305,2307],"valid"],[[2308,2308],"valid"],[[2309,2361],"valid"],[[2362,2363],"valid"],[[2364,2381],"valid"],[[2382,2382],"valid"],[[2383,2383],"valid"],[[2384,2388],"valid"],[[2389,2389],"valid"],[[2390,2391],"valid"],[[2392,2392],"mapped",[2325,2364]],[[2393,2393],"mapped",[2326,2364]],[[2394,2394],"mapped",[2327,2364]],[[2395,2395],"mapped",[2332,2364]],[[2396,2396],"mapped",[2337,2364]],[[2397,2397],"mapped",[2338,2364]],[[2398,2398],"mapped",[2347,2364]],[[2399,2399],"mapped",[2351,2364]],[[2400,2403],"valid"],[[2404,2405],"valid",[],"NV8"],[[2406,2415],"valid"],[[2416,2416],"valid",[],"NV8"],[[2417,2418],"valid"],[[2419,2423],"valid"],[[2424,2424],"valid"],[[2425,2426],"valid"],[[2427,2428],"valid"],[[2429,2429],"valid"],[[2430,2431],"valid"],[[2432,2432],"valid"],[[2433,2435],"valid"],[[2436,2436],"disallowed"],[[2437,2444],"valid"],[[2445,2446],"disallowed"],[[2447,2448],"valid"],[[2449,2450],"disallowed"],[[2451,2472],"valid"],[[2473,2473],"disallowed"],[[2474,2480],"valid"],[[2481,2481],"disallowed"],[[2482,2482],"valid"],[[2483,2485],"disallowed"],[[2486,2489],"valid"],[[2490,2491],"disallowed"],[[2492,2492],"valid"],[[2493,2493],"valid"],[[2494,2500],"valid"],[[2501,2502],"disallowed"],[[2503,2504],"valid"],[[2505,2506],"disallowed"],[[2507,2509],"valid"],[[2510,2510],"valid"],[[2511,2518],"disallowed"],[[2519,2519],"valid"],[[2520,2523],"disallowed"],[[2524,2524],"mapped",[2465,2492]],[[2525,2525],"mapped",[2466,2492]],[[2526,2526],"disallowed"],[[2527,2527],"mapped",[2479,2492]],[[2528,2531],"valid"],[[2532,2533],"disallowed"],[[2534,2545],"valid"],[[2546,2554],"valid",[],"NV8"],[[2555,2555],"valid",[],"NV8"],[[2556,2560],"disallowed"],[[2561,2561],"valid"],[[2562,2562],"valid"],[[2563,2563],"valid"],[[2564,2564],"disallowed"],[[2565,2570],"valid"],[[2571,2574],"disallowed"],[[2575,2576],"valid"],[[2577,2578],"disallowed"],[[2579,2600],"valid"],[[2601,2601],"disallowed"],[[2602,2608],"valid"],[[2609,2609],"disallowed"],[[2610,2610],"valid"],[[2611,2611],"mapped",[2610,2620]],[[2612,2612],"disallowed"],[[2613,2613],"valid"],[[2614,2614],"mapped",[2616,2620]],[[2615,2615],"disallowed"],[[2616,2617],"valid"],[[2618,2619],"disallowed"],[[2620,2620],"valid"],[[2621,2621],"disallowed"],[[2622,2626],"valid"],[[2627,2630],"disallowed"],[[2631,2632],"valid"],[[2633,2634],"disallowed"],[[2635,2637],"valid"],[[2638,2640],"disallowed"],[[2641,2641],"valid"],[[2642,2648],"disallowed"],[[2649,2649],"mapped",[2582,2620]],[[2650,2650],"mapped",[2583,2620]],[[2651,2651],"mapped",[2588,2620]],[[2652,2652],"valid"],[[2653,2653],"disallowed"],[[2654,2654],"mapped",[2603,2620]],[[2655,2661],"disallowed"],[[2662,2676],"valid"],[[2677,2677],"valid"],[[2678,2688],"disallowed"],[[2689,2691],"valid"],[[2692,2692],"disallowed"],[[2693,2699],"valid"],[[2700,2700],"valid"],[[2701,2701],"valid"],[[2702,2702],"disallowed"],[[2703,2705],"valid"],[[2706,2706],"disallowed"],[[2707,2728],"valid"],[[2729,2729],"disallowed"],[[2730,2736],"valid"],[[2737,2737],"disallowed"],[[2738,2739],"valid"],[[2740,2740],"disallowed"],[[2741,2745],"valid"],[[2746,2747],"disallowed"],[[2748,2757],"valid"],[[2758,2758],"disallowed"],[[2759,2761],"valid"],[[2762,2762],"disallowed"],[[2763,2765],"valid"],[[2766,2767],"disallowed"],[[2768,2768],"valid"],[[2769,2783],"disallowed"],[[2784,2784],"valid"],[[2785,2787],"valid"],[[2788,2789],"disallowed"],[[2790,2799],"valid"],[[2800,2800],"valid",[],"NV8"],[[2801,2801],"valid",[],"NV8"],[[2802,2808],"disallowed"],[[2809,2809],"valid"],[[2810,2816],"disallowed"],[[2817,2819],"valid"],[[2820,2820],"disallowed"],[[2821,2828],"valid"],[[2829,2830],"disallowed"],[[2831,2832],"valid"],[[2833,2834],"disallowed"],[[2835,2856],"valid"],[[2857,2857],"disallowed"],[[2858,2864],"valid"],[[2865,2865],"disallowed"],[[2866,2867],"valid"],[[2868,2868],"disallowed"],[[2869,2869],"valid"],[[2870,2873],"valid"],[[2874,2875],"disallowed"],[[2876,2883],"valid"],[[2884,2884],"valid"],[[2885,2886],"disallowed"],[[2887,2888],"valid"],[[2889,2890],"disallowed"],[[2891,2893],"valid"],[[2894,2901],"disallowed"],[[2902,2903],"valid"],[[2904,2907],"disallowed"],[[2908,2908],"mapped",[2849,2876]],[[2909,2909],"mapped",[2850,2876]],[[2910,2910],"disallowed"],[[2911,2913],"valid"],[[2914,2915],"valid"],[[2916,2917],"disallowed"],[[2918,2927],"valid"],[[2928,2928],"valid",[],"NV8"],[[2929,2929],"valid"],[[2930,2935],"valid",[],"NV8"],[[2936,2945],"disallowed"],[[2946,2947],"valid"],[[2948,2948],"disallowed"],[[2949,2954],"valid"],[[2955,2957],"disallowed"],[[2958,2960],"valid"],[[2961,2961],"disallowed"],[[2962,2965],"valid"],[[2966,2968],"disallowed"],[[2969,2970],"valid"],[[2971,2971],"disallowed"],[[2972,2972],"valid"],[[2973,2973],"disallowed"],[[2974,2975],"valid"],[[2976,2978],"disallowed"],[[2979,2980],"valid"],[[2981,2983],"disallowed"],[[2984,2986],"valid"],[[2987,2989],"disallowed"],[[2990,2997],"valid"],[[2998,2998],"valid"],[[2999,3001],"valid"],[[3002,3005],"disallowed"],[[3006,3010],"valid"],[[3011,3013],"disallowed"],[[3014,3016],"valid"],[[3017,3017],"disallowed"],[[3018,3021],"valid"],[[3022,3023],"disallowed"],[[3024,3024],"valid"],[[3025,3030],"disallowed"],[[3031,3031],"valid"],[[3032,3045],"disallowed"],[[3046,3046],"valid"],[[3047,3055],"valid"],[[3056,3058],"valid",[],"NV8"],[[3059,3066],"valid",[],"NV8"],[[3067,3071],"disallowed"],[[3072,3072],"valid"],[[3073,3075],"valid"],[[3076,3076],"disallowed"],[[3077,3084],"valid"],[[3085,3085],"disallowed"],[[3086,3088],"valid"],[[3089,3089],"disallowed"],[[3090,3112],"valid"],[[3113,3113],"disallowed"],[[3114,3123],"valid"],[[3124,3124],"valid"],[[3125,3129],"valid"],[[3130,3132],"disallowed"],[[3133,3133],"valid"],[[3134,3140],"valid"],[[3141,3141],"disallowed"],[[3142,3144],"valid"],[[3145,3145],"disallowed"],[[3146,3149],"valid"],[[3150,3156],"disallowed"],[[3157,3158],"valid"],[[3159,3159],"disallowed"],[[3160,3161],"valid"],[[3162,3162],"valid"],[[3163,3167],"disallowed"],[[3168,3169],"valid"],[[3170,3171],"valid"],[[3172,3173],"disallowed"],[[3174,3183],"valid"],[[3184,3191],"disallowed"],[[3192,3199],"valid",[],"NV8"],[[3200,3200],"disallowed"],[[3201,3201],"valid"],[[3202,3203],"valid"],[[3204,3204],"disallowed"],[[3205,3212],"valid"],[[3213,3213],"disallowed"],[[3214,3216],"valid"],[[3217,3217],"disallowed"],[[3218,3240],"valid"],[[3241,3241],"disallowed"],[[3242,3251],"valid"],[[3252,3252],"disallowed"],[[3253,3257],"valid"],[[3258,3259],"disallowed"],[[3260,3261],"valid"],[[3262,3268],"valid"],[[3269,3269],"disallowed"],[[3270,3272],"valid"],[[3273,3273],"disallowed"],[[3274,3277],"valid"],[[3278,3284],"disallowed"],[[3285,3286],"valid"],[[3287,3293],"disallowed"],[[3294,3294],"valid"],[[3295,3295],"disallowed"],[[3296,3297],"valid"],[[3298,3299],"valid"],[[3300,3301],"disallowed"],[[3302,3311],"valid"],[[3312,3312],"disallowed"],[[3313,3314],"valid"],[[3315,3328],"disallowed"],[[3329,3329],"valid"],[[3330,3331],"valid"],[[3332,3332],"disallowed"],[[3333,3340],"valid"],[[3341,3341],"disallowed"],[[3342,3344],"valid"],[[3345,3345],"disallowed"],[[3346,3368],"valid"],[[3369,3369],"valid"],[[3370,3385],"valid"],[[3386,3386],"valid"],[[3387,3388],"disallowed"],[[3389,3389],"valid"],[[3390,3395],"valid"],[[3396,3396],"valid"],[[3397,3397],"disallowed"],[[3398,3400],"valid"],[[3401,3401],"disallowed"],[[3402,3405],"valid"],[[3406,3406],"valid"],[[3407,3414],"disallowed"],[[3415,3415],"valid"],[[3416,3422],"disallowed"],[[3423,3423],"valid"],[[3424,3425],"valid"],[[3426,3427],"valid"],[[3428,3429],"disallowed"],[[3430,3439],"valid"],[[3440,3445],"valid",[],"NV8"],[[3446,3448],"disallowed"],[[3449,3449],"valid",[],"NV8"],[[3450,3455],"valid"],[[3456,3457],"disallowed"],[[3458,3459],"valid"],[[3460,3460],"disallowed"],[[3461,3478],"valid"],[[3479,3481],"disallowed"],[[3482,3505],"valid"],[[3506,3506],"disallowed"],[[3507,3515],"valid"],[[3516,3516],"disallowed"],[[3517,3517],"valid"],[[3518,3519],"disallowed"],[[3520,3526],"valid"],[[3527,3529],"disallowed"],[[3530,3530],"valid"],[[3531,3534],"disallowed"],[[3535,3540],"valid"],[[3541,3541],"disallowed"],[[3542,3542],"valid"],[[3543,3543],"disallowed"],[[3544,3551],"valid"],[[3552,3557],"disallowed"],[[3558,3567],"valid"],[[3568,3569],"disallowed"],[[3570,3571],"valid"],[[3572,3572],"valid",[],"NV8"],[[3573,3584],"disallowed"],[[3585,3634],"valid"],[[3635,3635],"mapped",[3661,3634]],[[3636,3642],"valid"],[[3643,3646],"disallowed"],[[3647,3647],"valid",[],"NV8"],[[3648,3662],"valid"],[[3663,3663],"valid",[],"NV8"],[[3664,3673],"valid"],[[3674,3675],"valid",[],"NV8"],[[3676,3712],"disallowed"],[[3713,3714],"valid"],[[3715,3715],"disallowed"],[[3716,3716],"valid"],[[3717,3718],"disallowed"],[[3719,3720],"valid"],[[3721,3721],"disallowed"],[[3722,3722],"valid"],[[3723,3724],"disallowed"],[[3725,3725],"valid"],[[3726,3731],"disallowed"],[[3732,3735],"valid"],[[3736,3736],"disallowed"],[[3737,3743],"valid"],[[3744,3744],"disallowed"],[[3745,3747],"valid"],[[3748,3748],"disallowed"],[[3749,3749],"valid"],[[3750,3750],"disallowed"],[[3751,3751],"valid"],[[3752,3753],"disallowed"],[[3754,3755],"valid"],[[3756,3756],"disallowed"],[[3757,3762],"valid"],[[3763,3763],"mapped",[3789,3762]],[[3764,3769],"valid"],[[3770,3770],"disallowed"],[[3771,3773],"valid"],[[3774,3775],"disallowed"],[[3776,3780],"valid"],[[3781,3781],"disallowed"],[[3782,3782],"valid"],[[3783,3783],"disallowed"],[[3784,3789],"valid"],[[3790,3791],"disallowed"],[[3792,3801],"valid"],[[3802,3803],"disallowed"],[[3804,3804],"mapped",[3755,3737]],[[3805,3805],"mapped",[3755,3745]],[[3806,3807],"valid"],[[3808,3839],"disallowed"],[[3840,3840],"valid"],[[3841,3850],"valid",[],"NV8"],[[3851,3851],"valid"],[[3852,3852],"mapped",[3851]],[[3853,3863],"valid",[],"NV8"],[[3864,3865],"valid"],[[3866,3871],"valid",[],"NV8"],[[3872,3881],"valid"],[[3882,3892],"valid",[],"NV8"],[[3893,3893],"valid"],[[3894,3894],"valid",[],"NV8"],[[3895,3895],"valid"],[[3896,3896],"valid",[],"NV8"],[[3897,3897],"valid"],[[3898,3901],"valid",[],"NV8"],[[3902,3906],"valid"],[[3907,3907],"mapped",[3906,4023]],[[3908,3911],"valid"],[[3912,3912],"disallowed"],[[3913,3916],"valid"],[[3917,3917],"mapped",[3916,4023]],[[3918,3921],"valid"],[[3922,3922],"mapped",[3921,4023]],[[3923,3926],"valid"],[[3927,3927],"mapped",[3926,4023]],[[3928,3931],"valid"],[[3932,3932],"mapped",[3931,4023]],[[3933,3944],"valid"],[[3945,3945],"mapped",[3904,4021]],[[3946,3946],"valid"],[[3947,3948],"valid"],[[3949,3952],"disallowed"],[[3953,3954],"valid"],[[3955,3955],"mapped",[3953,3954]],[[3956,3956],"valid"],[[3957,3957],"mapped",[3953,3956]],[[3958,3958],"mapped",[4018,3968]],[[3959,3959],"mapped",[4018,3953,3968]],[[3960,3960],"mapped",[4019,3968]],[[3961,3961],"mapped",[4019,3953,3968]],[[3962,3968],"valid"],[[3969,3969],"mapped",[3953,3968]],[[3970,3972],"valid"],[[3973,3973],"valid",[],"NV8"],[[3974,3979],"valid"],[[3980,3983],"valid"],[[3984,3986],"valid"],[[3987,3987],"mapped",[3986,4023]],[[3988,3989],"valid"],[[3990,3990],"valid"],[[3991,3991],"valid"],[[3992,3992],"disallowed"],[[3993,3996],"valid"],[[3997,3997],"mapped",[3996,4023]],[[3998,4001],"valid"],[[4002,4002],"mapped",[4001,4023]],[[4003,4006],"valid"],[[4007,4007],"mapped",[4006,4023]],[[4008,4011],"valid"],[[4012,4012],"mapped",[4011,4023]],[[4013,4013],"valid"],[[4014,4016],"valid"],[[4017,4023],"valid"],[[4024,4024],"valid"],[[4025,4025],"mapped",[3984,4021]],[[4026,4028],"valid"],[[4029,4029],"disallowed"],[[4030,4037],"valid",[],"NV8"],[[4038,4038],"valid"],[[4039,4044],"valid",[],"NV8"],[[4045,4045],"disallowed"],[[4046,4046],"valid",[],"NV8"],[[4047,4047],"valid",[],"NV8"],[[4048,4049],"valid",[],"NV8"],[[4050,4052],"valid",[],"NV8"],[[4053,4056],"valid",[],"NV8"],[[4057,4058],"valid",[],"NV8"],[[4059,4095],"disallowed"],[[4096,4129],"valid"],[[4130,4130],"valid"],[[4131,4135],"valid"],[[4136,4136],"valid"],[[4137,4138],"valid"],[[4139,4139],"valid"],[[4140,4146],"valid"],[[4147,4149],"valid"],[[4150,4153],"valid"],[[4154,4159],"valid"],[[4160,4169],"valid"],[[4170,4175],"valid",[],"NV8"],[[4176,4185],"valid"],[[4186,4249],"valid"],[[4250,4253],"valid"],[[4254,4255],"valid",[],"NV8"],[[4256,4293],"disallowed"],[[4294,4294],"disallowed"],[[4295,4295],"mapped",[11559]],[[4296,4300],"disallowed"],[[4301,4301],"mapped",[11565]],[[4302,4303],"disallowed"],[[4304,4342],"valid"],[[4343,4344],"valid"],[[4345,4346],"valid"],[[4347,4347],"valid",[],"NV8"],[[4348,4348],"mapped",[4316]],[[4349,4351],"valid"],[[4352,4441],"valid",[],"NV8"],[[4442,4446],"valid",[],"NV8"],[[4447,4448],"disallowed"],[[4449,4514],"valid",[],"NV8"],[[4515,4519],"valid",[],"NV8"],[[4520,4601],"valid",[],"NV8"],[[4602,4607],"valid",[],"NV8"],[[4608,4614],"valid"],[[4615,4615],"valid"],[[4616,4678],"valid"],[[4679,4679],"valid"],[[4680,4680],"valid"],[[4681,4681],"disallowed"],[[4682,4685],"valid"],[[4686,4687],"disallowed"],[[4688,4694],"valid"],[[4695,4695],"disallowed"],[[4696,4696],"valid"],[[4697,4697],"disallowed"],[[4698,4701],"valid"],[[4702,4703],"disallowed"],[[4704,4742],"valid"],[[4743,4743],"valid"],[[4744,4744],"valid"],[[4745,4745],"disallowed"],[[4746,4749],"valid"],[[4750,4751],"disallowed"],[[4752,4782],"valid"],[[4783,4783],"valid"],[[4784,4784],"valid"],[[4785,4785],"disallowed"],[[4786,4789],"valid"],[[4790,4791],"disallowed"],[[4792,4798],"valid"],[[4799,4799],"disallowed"],[[4800,4800],"valid"],[[4801,4801],"disallowed"],[[4802,4805],"valid"],[[4806,4807],"disallowed"],[[4808,4814],"valid"],[[4815,4815],"valid"],[[4816,4822],"valid"],[[4823,4823],"disallowed"],[[4824,4846],"valid"],[[4847,4847],"valid"],[[4848,4878],"valid"],[[4879,4879],"valid"],[[4880,4880],"valid"],[[4881,4881],"disallowed"],[[4882,4885],"valid"],[[4886,4887],"disallowed"],[[4888,4894],"valid"],[[4895,4895],"valid"],[[4896,4934],"valid"],[[4935,4935],"valid"],[[4936,4954],"valid"],[[4955,4956],"disallowed"],[[4957,4958],"valid"],[[4959,4959],"valid"],[[4960,4960],"valid",[],"NV8"],[[4961,4988],"valid",[],"NV8"],[[4989,4991],"disallowed"],[[4992,5007],"valid"],[[5008,5017],"valid",[],"NV8"],[[5018,5023],"disallowed"],[[5024,5108],"valid"],[[5109,5109],"valid"],[[5110,5111],"disallowed"],[[5112,5112],"mapped",[5104]],[[5113,5113],"mapped",[5105]],[[5114,5114],"mapped",[5106]],[[5115,5115],"mapped",[5107]],[[5116,5116],"mapped",[5108]],[[5117,5117],"mapped",[5109]],[[5118,5119],"disallowed"],[[5120,5120],"valid",[],"NV8"],[[5121,5740],"valid"],[[5741,5742],"valid",[],"NV8"],[[5743,5750],"valid"],[[5751,5759],"valid"],[[5760,5760],"disallowed"],[[5761,5786],"valid"],[[5787,5788],"valid",[],"NV8"],[[5789,5791],"disallowed"],[[5792,5866],"valid"],[[5867,5872],"valid",[],"NV8"],[[5873,5880],"valid"],[[5881,5887],"disallowed"],[[5888,5900],"valid"],[[5901,5901],"disallowed"],[[5902,5908],"valid"],[[5909,5919],"disallowed"],[[5920,5940],"valid"],[[5941,5942],"valid",[],"NV8"],[[5943,5951],"disallowed"],[[5952,5971],"valid"],[[5972,5983],"disallowed"],[[5984,5996],"valid"],[[5997,5997],"disallowed"],[[5998,6000],"valid"],[[6001,6001],"disallowed"],[[6002,6003],"valid"],[[6004,6015],"disallowed"],[[6016,6067],"valid"],[[6068,6069],"disallowed"],[[6070,6099],"valid"],[[6100,6102],"valid",[],"NV8"],[[6103,6103],"valid"],[[6104,6107],"valid",[],"NV8"],[[6108,6108],"valid"],[[6109,6109],"valid"],[[6110,6111],"disallowed"],[[6112,6121],"valid"],[[6122,6127],"disallowed"],[[6128,6137],"valid",[],"NV8"],[[6138,6143],"disallowed"],[[6144,6149],"valid",[],"NV8"],[[6150,6150],"disallowed"],[[6151,6154],"valid",[],"NV8"],[[6155,6157],"ignored"],[[6158,6158],"disallowed"],[[6159,6159],"disallowed"],[[6160,6169],"valid"],[[6170,6175],"disallowed"],[[6176,6263],"valid"],[[6264,6271],"disallowed"],[[6272,6313],"valid"],[[6314,6314],"valid"],[[6315,6319],"disallowed"],[[6320,6389],"valid"],[[6390,6399],"disallowed"],[[6400,6428],"valid"],[[6429,6430],"valid"],[[6431,6431],"disallowed"],[[6432,6443],"valid"],[[6444,6447],"disallowed"],[[6448,6459],"valid"],[[6460,6463],"disallowed"],[[6464,6464],"valid",[],"NV8"],[[6465,6467],"disallowed"],[[6468,6469],"valid",[],"NV8"],[[6470,6509],"valid"],[[6510,6511],"disallowed"],[[6512,6516],"valid"],[[6517,6527],"disallowed"],[[6528,6569],"valid"],[[6570,6571],"valid"],[[6572,6575],"disallowed"],[[6576,6601],"valid"],[[6602,6607],"disallowed"],[[6608,6617],"valid"],[[6618,6618],"valid",[],"XV8"],[[6619,6621],"disallowed"],[[6622,6623],"valid",[],"NV8"],[[6624,6655],"valid",[],"NV8"],[[6656,6683],"valid"],[[6684,6685],"disallowed"],[[6686,6687],"valid",[],"NV8"],[[6688,6750],"valid"],[[6751,6751],"disallowed"],[[6752,6780],"valid"],[[6781,6782],"disallowed"],[[6783,6793],"valid"],[[6794,6799],"disallowed"],[[6800,6809],"valid"],[[6810,6815],"disallowed"],[[6816,6822],"valid",[],"NV8"],[[6823,6823],"valid"],[[6824,6829],"valid",[],"NV8"],[[6830,6831],"disallowed"],[[6832,6845],"valid"],[[6846,6846],"valid",[],"NV8"],[[6847,6911],"disallowed"],[[6912,6987],"valid"],[[6988,6991],"disallowed"],[[6992,7001],"valid"],[[7002,7018],"valid",[],"NV8"],[[7019,7027],"valid"],[[7028,7036],"valid",[],"NV8"],[[7037,7039],"disallowed"],[[7040,7082],"valid"],[[7083,7085],"valid"],[[7086,7097],"valid"],[[7098,7103],"valid"],[[7104,7155],"valid"],[[7156,7163],"disallowed"],[[7164,7167],"valid",[],"NV8"],[[7168,7223],"valid"],[[7224,7226],"disallowed"],[[7227,7231],"valid",[],"NV8"],[[7232,7241],"valid"],[[7242,7244],"disallowed"],[[7245,7293],"valid"],[[7294,7295],"valid",[],"NV8"],[[7296,7359],"disallowed"],[[7360,7367],"valid",[],"NV8"],[[7368,7375],"disallowed"],[[7376,7378],"valid"],[[7379,7379],"valid",[],"NV8"],[[7380,7410],"valid"],[[7411,7414],"valid"],[[7415,7415],"disallowed"],[[7416,7417],"valid"],[[7418,7423],"disallowed"],[[7424,7467],"valid"],[[7468,7468],"mapped",[97]],[[7469,7469],"mapped",[230]],[[7470,7470],"mapped",[98]],[[7471,7471],"valid"],[[7472,7472],"mapped",[100]],[[7473,7473],"mapped",[101]],[[7474,7474],"mapped",[477]],[[7475,7475],"mapped",[103]],[[7476,7476],"mapped",[104]],[[7477,7477],"mapped",[105]],[[7478,7478],"mapped",[106]],[[7479,7479],"mapped",[107]],[[7480,7480],"mapped",[108]],[[7481,7481],"mapped",[109]],[[7482,7482],"mapped",[110]],[[7483,7483],"valid"],[[7484,7484],"mapped",[111]],[[7485,7485],"mapped",[547]],[[7486,7486],"mapped",[112]],[[7487,7487],"mapped",[114]],[[7488,7488],"mapped",[116]],[[7489,7489],"mapped",[117]],[[7490,7490],"mapped",[119]],[[7491,7491],"mapped",[97]],[[7492,7492],"mapped",[592]],[[7493,7493],"mapped",[593]],[[7494,7494],"mapped",[7426]],[[7495,7495],"mapped",[98]],[[7496,7496],"mapped",[100]],[[7497,7497],"mapped",[101]],[[7498,7498],"mapped",[601]],[[7499,7499],"mapped",[603]],[[7500,7500],"mapped",[604]],[[7501,7501],"mapped",[103]],[[7502,7502],"valid"],[[7503,7503],"mapped",[107]],[[7504,7504],"mapped",[109]],[[7505,7505],"mapped",[331]],[[7506,7506],"mapped",[111]],[[7507,7507],"mapped",[596]],[[7508,7508],"mapped",[7446]],[[7509,7509],"mapped",[7447]],[[7510,7510],"mapped",[112]],[[7511,7511],"mapped",[116]],[[7512,7512],"mapped",[117]],[[7513,7513],"mapped",[7453]],[[7514,7514],"mapped",[623]],[[7515,7515],"mapped",[118]],[[7516,7516],"mapped",[7461]],[[7517,7517],"mapped",[946]],[[7518,7518],"mapped",[947]],[[7519,7519],"mapped",[948]],[[7520,7520],"mapped",[966]],[[7521,7521],"mapped",[967]],[[7522,7522],"mapped",[105]],[[7523,7523],"mapped",[114]],[[7524,7524],"mapped",[117]],[[7525,7525],"mapped",[118]],[[7526,7526],"mapped",[946]],[[7527,7527],"mapped",[947]],[[7528,7528],"mapped",[961]],[[7529,7529],"mapped",[966]],[[7530,7530],"mapped",[967]],[[7531,7531],"valid"],[[7532,7543],"valid"],[[7544,7544],"mapped",[1085]],[[7545,7578],"valid"],[[7579,7579],"mapped",[594]],[[7580,7580],"mapped",[99]],[[7581,7581],"mapped",[597]],[[7582,7582],"mapped",[240]],[[7583,7583],"mapped",[604]],[[7584,7584],"mapped",[102]],[[7585,7585],"mapped",[607]],[[7586,7586],"mapped",[609]],[[7587,7587],"mapped",[613]],[[7588,7588],"mapped",[616]],[[7589,7589],"mapped",[617]],[[7590,7590],"mapped",[618]],[[7591,7591],"mapped",[7547]],[[7592,7592],"mapped",[669]],[[7593,7593],"mapped",[621]],[[7594,7594],"mapped",[7557]],[[7595,7595],"mapped",[671]],[[7596,7596],"mapped",[625]],[[7597,7597],"mapped",[624]],[[7598,7598],"mapped",[626]],[[7599,7599],"mapped",[627]],[[7600,7600],"mapped",[628]],[[7601,7601],"mapped",[629]],[[7602,7602],"mapped",[632]],[[7603,7603],"mapped",[642]],[[7604,7604],"mapped",[643]],[[7605,7605],"mapped",[427]],[[7606,7606],"mapped",[649]],[[7607,7607],"mapped",[650]],[[7608,7608],"mapped",[7452]],[[7609,7609],"mapped",[651]],[[7610,7610],"mapped",[652]],[[7611,7611],"mapped",[122]],[[7612,7612],"mapped",[656]],[[7613,7613],"mapped",[657]],[[7614,7614],"mapped",[658]],[[7615,7615],"mapped",[952]],[[7616,7619],"valid"],[[7620,7626],"valid"],[[7627,7654],"valid"],[[7655,7669],"valid"],[[7670,7675],"disallowed"],[[7676,7676],"valid"],[[7677,7677],"valid"],[[7678,7679],"valid"],[[7680,7680],"mapped",[7681]],[[7681,7681],"valid"],[[7682,7682],"mapped",[7683]],[[7683,7683],"valid"],[[7684,7684],"mapped",[7685]],[[7685,7685],"valid"],[[7686,7686],"mapped",[7687]],[[7687,7687],"valid"],[[7688,7688],"mapped",[7689]],[[7689,7689],"valid"],[[7690,7690],"mapped",[7691]],[[7691,7691],"valid"],[[7692,7692],"mapped",[7693]],[[7693,7693],"valid"],[[7694,7694],"mapped",[7695]],[[7695,7695],"valid"],[[7696,7696],"mapped",[7697]],[[7697,7697],"valid"],[[7698,7698],"mapped",[7699]],[[7699,7699],"valid"],[[7700,7700],"mapped",[7701]],[[7701,7701],"valid"],[[7702,7702],"mapped",[7703]],[[7703,7703],"valid"],[[7704,7704],"mapped",[7705]],[[7705,7705],"valid"],[[7706,7706],"mapped",[7707]],[[7707,7707],"valid"],[[7708,7708],"mapped",[7709]],[[7709,7709],"valid"],[[7710,7710],"mapped",[7711]],[[7711,7711],"valid"],[[7712,7712],"mapped",[7713]],[[7713,7713],"valid"],[[7714,7714],"mapped",[7715]],[[7715,7715],"valid"],[[7716,7716],"mapped",[7717]],[[7717,7717],"valid"],[[7718,7718],"mapped",[7719]],[[7719,7719],"valid"],[[7720,7720],"mapped",[7721]],[[7721,7721],"valid"],[[7722,7722],"mapped",[7723]],[[7723,7723],"valid"],[[7724,7724],"mapped",[7725]],[[7725,7725],"valid"],[[7726,7726],"mapped",[7727]],[[7727,7727],"valid"],[[7728,7728],"mapped",[7729]],[[7729,7729],"valid"],[[7730,7730],"mapped",[7731]],[[7731,7731],"valid"],[[7732,7732],"mapped",[7733]],[[7733,7733],"valid"],[[7734,7734],"mapped",[7735]],[[7735,7735],"valid"],[[7736,7736],"mapped",[7737]],[[7737,7737],"valid"],[[7738,7738],"mapped",[7739]],[[7739,7739],"valid"],[[7740,7740],"mapped",[7741]],[[7741,7741],"valid"],[[7742,7742],"mapped",[7743]],[[7743,7743],"valid"],[[7744,7744],"mapped",[7745]],[[7745,7745],"valid"],[[7746,7746],"mapped",[7747]],[[7747,7747],"valid"],[[7748,7748],"mapped",[7749]],[[7749,7749],"valid"],[[7750,7750],"mapped",[7751]],[[7751,7751],"valid"],[[7752,7752],"mapped",[7753]],[[7753,7753],"valid"],[[7754,7754],"mapped",[7755]],[[7755,7755],"valid"],[[7756,7756],"mapped",[7757]],[[7757,7757],"valid"],[[7758,7758],"mapped",[7759]],[[7759,7759],"valid"],[[7760,7760],"mapped",[7761]],[[7761,7761],"valid"],[[7762,7762],"mapped",[7763]],[[7763,7763],"valid"],[[7764,7764],"mapped",[7765]],[[7765,7765],"valid"],[[7766,7766],"mapped",[7767]],[[7767,7767],"valid"],[[7768,7768],"mapped",[7769]],[[7769,7769],"valid"],[[7770,7770],"mapped",[7771]],[[7771,7771],"valid"],[[7772,7772],"mapped",[7773]],[[7773,7773],"valid"],[[7774,7774],"mapped",[7775]],[[7775,7775],"valid"],[[7776,7776],"mapped",[7777]],[[7777,7777],"valid"],[[7778,7778],"mapped",[7779]],[[7779,7779],"valid"],[[7780,7780],"mapped",[7781]],[[7781,7781],"valid"],[[7782,7782],"mapped",[7783]],[[7783,7783],"valid"],[[7784,7784],"mapped",[7785]],[[7785,7785],"valid"],[[7786,7786],"mapped",[7787]],[[7787,7787],"valid"],[[7788,7788],"mapped",[7789]],[[7789,7789],"valid"],[[7790,7790],"mapped",[7791]],[[7791,7791],"valid"],[[7792,7792],"mapped",[7793]],[[7793,7793],"valid"],[[7794,7794],"mapped",[7795]],[[7795,7795],"valid"],[[7796,7796],"mapped",[7797]],[[7797,7797],"valid"],[[7798,7798],"mapped",[7799]],[[7799,7799],"valid"],[[7800,7800],"mapped",[7801]],[[7801,7801],"valid"],[[7802,7802],"mapped",[7803]],[[7803,7803],"valid"],[[7804,7804],"mapped",[7805]],[[7805,7805],"valid"],[[7806,7806],"mapped",[7807]],[[7807,7807],"valid"],[[7808,7808],"mapped",[7809]],[[7809,7809],"valid"],[[7810,7810],"mapped",[7811]],[[7811,7811],"valid"],[[7812,7812],"mapped",[7813]],[[7813,7813],"valid"],[[7814,7814],"mapped",[7815]],[[7815,7815],"valid"],[[7816,7816],"mapped",[7817]],[[7817,7817],"valid"],[[7818,7818],"mapped",[7819]],[[7819,7819],"valid"],[[7820,7820],"mapped",[7821]],[[7821,7821],"valid"],[[7822,7822],"mapped",[7823]],[[7823,7823],"valid"],[[7824,7824],"mapped",[7825]],[[7825,7825],"valid"],[[7826,7826],"mapped",[7827]],[[7827,7827],"valid"],[[7828,7828],"mapped",[7829]],[[7829,7833],"valid"],[[7834,7834],"mapped",[97,702]],[[7835,7835],"mapped",[7777]],[[7836,7837],"valid"],[[7838,7838],"mapped",[115,115]],[[7839,7839],"valid"],[[7840,7840],"mapped",[7841]],[[7841,7841],"valid"],[[7842,7842],"mapped",[7843]],[[7843,7843],"valid"],[[7844,7844],"mapped",[7845]],[[7845,7845],"valid"],[[7846,7846],"mapped",[7847]],[[7847,7847],"valid"],[[7848,7848],"mapped",[7849]],[[7849,7849],"valid"],[[7850,7850],"mapped",[7851]],[[7851,7851],"valid"],[[7852,7852],"mapped",[7853]],[[7853,7853],"valid"],[[7854,7854],"mapped",[7855]],[[7855,7855],"valid"],[[7856,7856],"mapped",[7857]],[[7857,7857],"valid"],[[7858,7858],"mapped",[7859]],[[7859,7859],"valid"],[[7860,7860],"mapped",[7861]],[[7861,7861],"valid"],[[7862,7862],"mapped",[7863]],[[7863,7863],"valid"],[[7864,7864],"mapped",[7865]],[[7865,7865],"valid"],[[7866,7866],"mapped",[7867]],[[7867,7867],"valid"],[[7868,7868],"mapped",[7869]],[[7869,7869],"valid"],[[7870,7870],"mapped",[7871]],[[7871,7871],"valid"],[[7872,7872],"mapped",[7873]],[[7873,7873],"valid"],[[7874,7874],"mapped",[7875]],[[7875,7875],"valid"],[[7876,7876],"mapped",[7877]],[[7877,7877],"valid"],[[7878,7878],"mapped",[7879]],[[7879,7879],"valid"],[[7880,7880],"mapped",[7881]],[[7881,7881],"valid"],[[7882,7882],"mapped",[7883]],[[7883,7883],"valid"],[[7884,7884],"mapped",[7885]],[[7885,7885],"valid"],[[7886,7886],"mapped",[7887]],[[7887,7887],"valid"],[[7888,7888],"mapped",[7889]],[[7889,7889],"valid"],[[7890,7890],"mapped",[7891]],[[7891,7891],"valid"],[[7892,7892],"mapped",[7893]],[[7893,7893],"valid"],[[7894,7894],"mapped",[7895]],[[7895,7895],"valid"],[[7896,7896],"mapped",[7897]],[[7897,7897],"valid"],[[7898,7898],"mapped",[7899]],[[7899,7899],"valid"],[[7900,7900],"mapped",[7901]],[[7901,7901],"valid"],[[7902,7902],"mapped",[7903]],[[7903,7903],"valid"],[[7904,7904],"mapped",[7905]],[[7905,7905],"valid"],[[7906,7906],"mapped",[7907]],[[7907,7907],"valid"],[[7908,7908],"mapped",[7909]],[[7909,7909],"valid"],[[7910,7910],"mapped",[7911]],[[7911,7911],"valid"],[[7912,7912],"mapped",[7913]],[[7913,7913],"valid"],[[7914,7914],"mapped",[7915]],[[7915,7915],"valid"],[[7916,7916],"mapped",[7917]],[[7917,7917],"valid"],[[7918,7918],"mapped",[7919]],[[7919,7919],"valid"],[[7920,7920],"mapped",[7921]],[[7921,7921],"valid"],[[7922,7922],"mapped",[7923]],[[7923,7923],"valid"],[[7924,7924],"mapped",[7925]],[[7925,7925],"valid"],[[7926,7926],"mapped",[7927]],[[7927,7927],"valid"],[[7928,7928],"mapped",[7929]],[[7929,7929],"valid"],[[7930,7930],"mapped",[7931]],[[7931,7931],"valid"],[[7932,7932],"mapped",[7933]],[[7933,7933],"valid"],[[7934,7934],"mapped",[7935]],[[7935,7935],"valid"],[[7936,7943],"valid"],[[7944,7944],"mapped",[7936]],[[7945,7945],"mapped",[7937]],[[7946,7946],"mapped",[7938]],[[7947,7947],"mapped",[7939]],[[7948,7948],"mapped",[7940]],[[7949,7949],"mapped",[7941]],[[7950,7950],"mapped",[7942]],[[7951,7951],"mapped",[7943]],[[7952,7957],"valid"],[[7958,7959],"disallowed"],[[7960,7960],"mapped",[7952]],[[7961,7961],"mapped",[7953]],[[7962,7962],"mapped",[7954]],[[7963,7963],"mapped",[7955]],[[7964,7964],"mapped",[7956]],[[7965,7965],"mapped",[7957]],[[7966,7967],"disallowed"],[[7968,7975],"valid"],[[7976,7976],"mapped",[7968]],[[7977,7977],"mapped",[7969]],[[7978,7978],"mapped",[7970]],[[7979,7979],"mapped",[7971]],[[7980,7980],"mapped",[7972]],[[7981,7981],"mapped",[7973]],[[7982,7982],"mapped",[7974]],[[7983,7983],"mapped",[7975]],[[7984,7991],"valid"],[[7992,7992],"mapped",[7984]],[[7993,7993],"mapped",[7985]],[[7994,7994],"mapped",[7986]],[[7995,7995],"mapped",[7987]],[[7996,7996],"mapped",[7988]],[[7997,7997],"mapped",[7989]],[[7998,7998],"mapped",[7990]],[[7999,7999],"mapped",[7991]],[[8000,8005],"valid"],[[8006,8007],"disallowed"],[[8008,8008],"mapped",[8000]],[[8009,8009],"mapped",[8001]],[[8010,8010],"mapped",[8002]],[[8011,8011],"mapped",[8003]],[[8012,8012],"mapped",[8004]],[[8013,8013],"mapped",[8005]],[[8014,8015],"disallowed"],[[8016,8023],"valid"],[[8024,8024],"disallowed"],[[8025,8025],"mapped",[8017]],[[8026,8026],"disallowed"],[[8027,8027],"mapped",[8019]],[[8028,8028],"disallowed"],[[8029,8029],"mapped",[8021]],[[8030,8030],"disallowed"],[[8031,8031],"mapped",[8023]],[[8032,8039],"valid"],[[8040,8040],"mapped",[8032]],[[8041,8041],"mapped",[8033]],[[8042,8042],"mapped",[8034]],[[8043,8043],"mapped",[8035]],[[8044,8044],"mapped",[8036]],[[8045,8045],"mapped",[8037]],[[8046,8046],"mapped",[8038]],[[8047,8047],"mapped",[8039]],[[8048,8048],"valid"],[[8049,8049],"mapped",[940]],[[8050,8050],"valid"],[[8051,8051],"mapped",[941]],[[8052,8052],"valid"],[[8053,8053],"mapped",[942]],[[8054,8054],"valid"],[[8055,8055],"mapped",[943]],[[8056,8056],"valid"],[[8057,8057],"mapped",[972]],[[8058,8058],"valid"],[[8059,8059],"mapped",[973]],[[8060,8060],"valid"],[[8061,8061],"mapped",[974]],[[8062,8063],"disallowed"],[[8064,8064],"mapped",[7936,953]],[[8065,8065],"mapped",[7937,953]],[[8066,8066],"mapped",[7938,953]],[[8067,8067],"mapped",[7939,953]],[[8068,8068],"mapped",[7940,953]],[[8069,8069],"mapped",[7941,953]],[[8070,8070],"mapped",[7942,953]],[[8071,8071],"mapped",[7943,953]],[[8072,8072],"mapped",[7936,953]],[[8073,8073],"mapped",[7937,953]],[[8074,8074],"mapped",[7938,953]],[[8075,8075],"mapped",[7939,953]],[[8076,8076],"mapped",[7940,953]],[[8077,8077],"mapped",[7941,953]],[[8078,8078],"mapped",[7942,953]],[[8079,8079],"mapped",[7943,953]],[[8080,8080],"mapped",[7968,953]],[[8081,8081],"mapped",[7969,953]],[[8082,8082],"mapped",[7970,953]],[[8083,8083],"mapped",[7971,953]],[[8084,8084],"mapped",[7972,953]],[[8085,8085],"mapped",[7973,953]],[[8086,8086],"mapped",[7974,953]],[[8087,8087],"mapped",[7975,953]],[[8088,8088],"mapped",[7968,953]],[[8089,8089],"mapped",[7969,953]],[[8090,8090],"mapped",[7970,953]],[[8091,8091],"mapped",[7971,953]],[[8092,8092],"mapped",[7972,953]],[[8093,8093],"mapped",[7973,953]],[[8094,8094],"mapped",[7974,953]],[[8095,8095],"mapped",[7975,953]],[[8096,8096],"mapped",[8032,953]],[[8097,8097],"mapped",[8033,953]],[[8098,8098],"mapped",[8034,953]],[[8099,8099],"mapped",[8035,953]],[[8100,8100],"mapped",[8036,953]],[[8101,8101],"mapped",[8037,953]],[[8102,8102],"mapped",[8038,953]],[[8103,8103],"mapped",[8039,953]],[[8104,8104],"mapped",[8032,953]],[[8105,8105],"mapped",[8033,953]],[[8106,8106],"mapped",[8034,953]],[[8107,8107],"mapped",[8035,953]],[[8108,8108],"mapped",[8036,953]],[[8109,8109],"mapped",[8037,953]],[[8110,8110],"mapped",[8038,953]],[[8111,8111],"mapped",[8039,953]],[[8112,8113],"valid"],[[8114,8114],"mapped",[8048,953]],[[8115,8115],"mapped",[945,953]],[[8116,8116],"mapped",[940,953]],[[8117,8117],"disallowed"],[[8118,8118],"valid"],[[8119,8119],"mapped",[8118,953]],[[8120,8120],"mapped",[8112]],[[8121,8121],"mapped",[8113]],[[8122,8122],"mapped",[8048]],[[8123,8123],"mapped",[940]],[[8124,8124],"mapped",[945,953]],[[8125,8125],"disallowed_STD3_mapped",[32,787]],[[8126,8126],"mapped",[953]],[[8127,8127],"disallowed_STD3_mapped",[32,787]],[[8128,8128],"disallowed_STD3_mapped",[32,834]],[[8129,8129],"disallowed_STD3_mapped",[32,776,834]],[[8130,8130],"mapped",[8052,953]],[[8131,8131],"mapped",[951,953]],[[8132,8132],"mapped",[942,953]],[[8133,8133],"disallowed"],[[8134,8134],"valid"],[[8135,8135],"mapped",[8134,953]],[[8136,8136],"mapped",[8050]],[[8137,8137],"mapped",[941]],[[8138,8138],"mapped",[8052]],[[8139,8139],"mapped",[942]],[[8140,8140],"mapped",[951,953]],[[8141,8141],"disallowed_STD3_mapped",[32,787,768]],[[8142,8142],"disallowed_STD3_mapped",[32,787,769]],[[8143,8143],"disallowed_STD3_mapped",[32,787,834]],[[8144,8146],"valid"],[[8147,8147],"mapped",[912]],[[8148,8149],"disallowed"],[[8150,8151],"valid"],[[8152,8152],"mapped",[8144]],[[8153,8153],"mapped",[8145]],[[8154,8154],"mapped",[8054]],[[8155,8155],"mapped",[943]],[[8156,8156],"disallowed"],[[8157,8157],"disallowed_STD3_mapped",[32,788,768]],[[8158,8158],"disallowed_STD3_mapped",[32,788,769]],[[8159,8159],"disallowed_STD3_mapped",[32,788,834]],[[8160,8162],"valid"],[[8163,8163],"mapped",[944]],[[8164,8167],"valid"],[[8168,8168],"mapped",[8160]],[[8169,8169],"mapped",[8161]],[[8170,8170],"mapped",[8058]],[[8171,8171],"mapped",[973]],[[8172,8172],"mapped",[8165]],[[8173,8173],"disallowed_STD3_mapped",[32,776,768]],[[8174,8174],"disallowed_STD3_mapped",[32,776,769]],[[8175,8175],"disallowed_STD3_mapped",[96]],[[8176,8177],"disallowed"],[[8178,8178],"mapped",[8060,953]],[[8179,8179],"mapped",[969,953]],[[8180,8180],"mapped",[974,953]],[[8181,8181],"disallowed"],[[8182,8182],"valid"],[[8183,8183],"mapped",[8182,953]],[[8184,8184],"mapped",[8056]],[[8185,8185],"mapped",[972]],[[8186,8186],"mapped",[8060]],[[8187,8187],"mapped",[974]],[[8188,8188],"mapped",[969,953]],[[8189,8189],"disallowed_STD3_mapped",[32,769]],[[8190,8190],"disallowed_STD3_mapped",[32,788]],[[8191,8191],"disallowed"],[[8192,8202],"disallowed_STD3_mapped",[32]],[[8203,8203],"ignored"],[[8204,8205],"deviation",[]],[[8206,8207],"disallowed"],[[8208,8208],"valid",[],"NV8"],[[8209,8209],"mapped",[8208]],[[8210,8214],"valid",[],"NV8"],[[8215,8215],"disallowed_STD3_mapped",[32,819]],[[8216,8227],"valid",[],"NV8"],[[8228,8230],"disallowed"],[[8231,8231],"valid",[],"NV8"],[[8232,8238],"disallowed"],[[8239,8239],"disallowed_STD3_mapped",[32]],[[8240,8242],"valid",[],"NV8"],[[8243,8243],"mapped",[8242,8242]],[[8244,8244],"mapped",[8242,8242,8242]],[[8245,8245],"valid",[],"NV8"],[[8246,8246],"mapped",[8245,8245]],[[8247,8247],"mapped",[8245,8245,8245]],[[8248,8251],"valid",[],"NV8"],[[8252,8252],"disallowed_STD3_mapped",[33,33]],[[8253,8253],"valid",[],"NV8"],[[8254,8254],"disallowed_STD3_mapped",[32,773]],[[8255,8262],"valid",[],"NV8"],[[8263,8263],"disallowed_STD3_mapped",[63,63]],[[8264,8264],"disallowed_STD3_mapped",[63,33]],[[8265,8265],"disallowed_STD3_mapped",[33,63]],[[8266,8269],"valid",[],"NV8"],[[8270,8274],"valid",[],"NV8"],[[8275,8276],"valid",[],"NV8"],[[8277,8278],"valid",[],"NV8"],[[8279,8279],"mapped",[8242,8242,8242,8242]],[[8280,8286],"valid",[],"NV8"],[[8287,8287],"disallowed_STD3_mapped",[32]],[[8288,8288],"ignored"],[[8289,8291],"disallowed"],[[8292,8292],"ignored"],[[8293,8293],"disallowed"],[[8294,8297],"disallowed"],[[8298,8303],"disallowed"],[[8304,8304],"mapped",[48]],[[8305,8305],"mapped",[105]],[[8306,8307],"disallowed"],[[8308,8308],"mapped",[52]],[[8309,8309],"mapped",[53]],[[8310,8310],"mapped",[54]],[[8311,8311],"mapped",[55]],[[8312,8312],"mapped",[56]],[[8313,8313],"mapped",[57]],[[8314,8314],"disallowed_STD3_mapped",[43]],[[8315,8315],"mapped",[8722]],[[8316,8316],"disallowed_STD3_mapped",[61]],[[8317,8317],"disallowed_STD3_mapped",[40]],[[8318,8318],"disallowed_STD3_mapped",[41]],[[8319,8319],"mapped",[110]],[[8320,8320],"mapped",[48]],[[8321,8321],"mapped",[49]],[[8322,8322],"mapped",[50]],[[8323,8323],"mapped",[51]],[[8324,8324],"mapped",[52]],[[8325,8325],"mapped",[53]],[[8326,8326],"mapped",[54]],[[8327,8327],"mapped",[55]],[[8328,8328],"mapped",[56]],[[8329,8329],"mapped",[57]],[[8330,8330],"disallowed_STD3_mapped",[43]],[[8331,8331],"mapped",[8722]],[[8332,8332],"disallowed_STD3_mapped",[61]],[[8333,8333],"disallowed_STD3_mapped",[40]],[[8334,8334],"disallowed_STD3_mapped",[41]],[[8335,8335],"disallowed"],[[8336,8336],"mapped",[97]],[[8337,8337],"mapped",[101]],[[8338,8338],"mapped",[111]],[[8339,8339],"mapped",[120]],[[8340,8340],"mapped",[601]],[[8341,8341],"mapped",[104]],[[8342,8342],"mapped",[107]],[[8343,8343],"mapped",[108]],[[8344,8344],"mapped",[109]],[[8345,8345],"mapped",[110]],[[8346,8346],"mapped",[112]],[[8347,8347],"mapped",[115]],[[8348,8348],"mapped",[116]],[[8349,8351],"disallowed"],[[8352,8359],"valid",[],"NV8"],[[8360,8360],"mapped",[114,115]],[[8361,8362],"valid",[],"NV8"],[[8363,8363],"valid",[],"NV8"],[[8364,8364],"valid",[],"NV8"],[[8365,8367],"valid",[],"NV8"],[[8368,8369],"valid",[],"NV8"],[[8370,8373],"valid",[],"NV8"],[[8374,8376],"valid",[],"NV8"],[[8377,8377],"valid",[],"NV8"],[[8378,8378],"valid",[],"NV8"],[[8379,8381],"valid",[],"NV8"],[[8382,8382],"valid",[],"NV8"],[[8383,8399],"disallowed"],[[8400,8417],"valid",[],"NV8"],[[8418,8419],"valid",[],"NV8"],[[8420,8426],"valid",[],"NV8"],[[8427,8427],"valid",[],"NV8"],[[8428,8431],"valid",[],"NV8"],[[8432,8432],"valid",[],"NV8"],[[8433,8447],"disallowed"],[[8448,8448],"disallowed_STD3_mapped",[97,47,99]],[[8449,8449],"disallowed_STD3_mapped",[97,47,115]],[[8450,8450],"mapped",[99]],[[8451,8451],"mapped",[176,99]],[[8452,8452],"valid",[],"NV8"],[[8453,8453],"disallowed_STD3_mapped",[99,47,111]],[[8454,8454],"disallowed_STD3_mapped",[99,47,117]],[[8455,8455],"mapped",[603]],[[8456,8456],"valid",[],"NV8"],[[8457,8457],"mapped",[176,102]],[[8458,8458],"mapped",[103]],[[8459,8462],"mapped",[104]],[[8463,8463],"mapped",[295]],[[8464,8465],"mapped",[105]],[[8466,8467],"mapped",[108]],[[8468,8468],"valid",[],"NV8"],[[8469,8469],"mapped",[110]],[[8470,8470],"mapped",[110,111]],[[8471,8472],"valid",[],"NV8"],[[8473,8473],"mapped",[112]],[[8474,8474],"mapped",[113]],[[8475,8477],"mapped",[114]],[[8478,8479],"valid",[],"NV8"],[[8480,8480],"mapped",[115,109]],[[8481,8481],"mapped",[116,101,108]],[[8482,8482],"mapped",[116,109]],[[8483,8483],"valid",[],"NV8"],[[8484,8484],"mapped",[122]],[[8485,8485],"valid",[],"NV8"],[[8486,8486],"mapped",[969]],[[8487,8487],"valid",[],"NV8"],[[8488,8488],"mapped",[122]],[[8489,8489],"valid",[],"NV8"],[[8490,8490],"mapped",[107]],[[8491,8491],"mapped",[229]],[[8492,8492],"mapped",[98]],[[8493,8493],"mapped",[99]],[[8494,8494],"valid",[],"NV8"],[[8495,8496],"mapped",[101]],[[8497,8497],"mapped",[102]],[[8498,8498],"disallowed"],[[8499,8499],"mapped",[109]],[[8500,8500],"mapped",[111]],[[8501,8501],"mapped",[1488]],[[8502,8502],"mapped",[1489]],[[8503,8503],"mapped",[1490]],[[8504,8504],"mapped",[1491]],[[8505,8505],"mapped",[105]],[[8506,8506],"valid",[],"NV8"],[[8507,8507],"mapped",[102,97,120]],[[8508,8508],"mapped",[960]],[[8509,8510],"mapped",[947]],[[8511,8511],"mapped",[960]],[[8512,8512],"mapped",[8721]],[[8513,8516],"valid",[],"NV8"],[[8517,8518],"mapped",[100]],[[8519,8519],"mapped",[101]],[[8520,8520],"mapped",[105]],[[8521,8521],"mapped",[106]],[[8522,8523],"valid",[],"NV8"],[[8524,8524],"valid",[],"NV8"],[[8525,8525],"valid",[],"NV8"],[[8526,8526],"valid"],[[8527,8527],"valid",[],"NV8"],[[8528,8528],"mapped",[49,8260,55]],[[8529,8529],"mapped",[49,8260,57]],[[8530,8530],"mapped",[49,8260,49,48]],[[8531,8531],"mapped",[49,8260,51]],[[8532,8532],"mapped",[50,8260,51]],[[8533,8533],"mapped",[49,8260,53]],[[8534,8534],"mapped",[50,8260,53]],[[8535,8535],"mapped",[51,8260,53]],[[8536,8536],"mapped",[52,8260,53]],[[8537,8537],"mapped",[49,8260,54]],[[8538,8538],"mapped",[53,8260,54]],[[8539,8539],"mapped",[49,8260,56]],[[8540,8540],"mapped",[51,8260,56]],[[8541,8541],"mapped",[53,8260,56]],[[8542,8542],"mapped",[55,8260,56]],[[8543,8543],"mapped",[49,8260]],[[8544,8544],"mapped",[105]],[[8545,8545],"mapped",[105,105]],[[8546,8546],"mapped",[105,105,105]],[[8547,8547],"mapped",[105,118]],[[8548,8548],"mapped",[118]],[[8549,8549],"mapped",[118,105]],[[8550,8550],"mapped",[118,105,105]],[[8551,8551],"mapped",[118,105,105,105]],[[8552,8552],"mapped",[105,120]],[[8553,8553],"mapped",[120]],[[8554,8554],"mapped",[120,105]],[[8555,8555],"mapped",[120,105,105]],[[8556,8556],"mapped",[108]],[[8557,8557],"mapped",[99]],[[8558,8558],"mapped",[100]],[[8559,8559],"mapped",[109]],[[8560,8560],"mapped",[105]],[[8561,8561],"mapped",[105,105]],[[8562,8562],"mapped",[105,105,105]],[[8563,8563],"mapped",[105,118]],[[8564,8564],"mapped",[118]],[[8565,8565],"mapped",[118,105]],[[8566,8566],"mapped",[118,105,105]],[[8567,8567],"mapped",[118,105,105,105]],[[8568,8568],"mapped",[105,120]],[[8569,8569],"mapped",[120]],[[8570,8570],"mapped",[120,105]],[[8571,8571],"mapped",[120,105,105]],[[8572,8572],"mapped",[108]],[[8573,8573],"mapped",[99]],[[8574,8574],"mapped",[100]],[[8575,8575],"mapped",[109]],[[8576,8578],"valid",[],"NV8"],[[8579,8579],"disallowed"],[[8580,8580],"valid"],[[8581,8584],"valid",[],"NV8"],[[8585,8585],"mapped",[48,8260,51]],[[8586,8587],"valid",[],"NV8"],[[8588,8591],"disallowed"],[[8592,8682],"valid",[],"NV8"],[[8683,8691],"valid",[],"NV8"],[[8692,8703],"valid",[],"NV8"],[[8704,8747],"valid",[],"NV8"],[[8748,8748],"mapped",[8747,8747]],[[8749,8749],"mapped",[8747,8747,8747]],[[8750,8750],"valid",[],"NV8"],[[8751,8751],"mapped",[8750,8750]],[[8752,8752],"mapped",[8750,8750,8750]],[[8753,8799],"valid",[],"NV8"],[[8800,8800],"disallowed_STD3_valid"],[[8801,8813],"valid",[],"NV8"],[[8814,8815],"disallowed_STD3_valid"],[[8816,8945],"valid",[],"NV8"],[[8946,8959],"valid",[],"NV8"],[[8960,8960],"valid",[],"NV8"],[[8961,8961],"valid",[],"NV8"],[[8962,9000],"valid",[],"NV8"],[[9001,9001],"mapped",[12296]],[[9002,9002],"mapped",[12297]],[[9003,9082],"valid",[],"NV8"],[[9083,9083],"valid",[],"NV8"],[[9084,9084],"valid",[],"NV8"],[[9085,9114],"valid",[],"NV8"],[[9115,9166],"valid",[],"NV8"],[[9167,9168],"valid",[],"NV8"],[[9169,9179],"valid",[],"NV8"],[[9180,9191],"valid",[],"NV8"],[[9192,9192],"valid",[],"NV8"],[[9193,9203],"valid",[],"NV8"],[[9204,9210],"valid",[],"NV8"],[[9211,9215],"disallowed"],[[9216,9252],"valid",[],"NV8"],[[9253,9254],"valid",[],"NV8"],[[9255,9279],"disallowed"],[[9280,9290],"valid",[],"NV8"],[[9291,9311],"disallowed"],[[9312,9312],"mapped",[49]],[[9313,9313],"mapped",[50]],[[9314,9314],"mapped",[51]],[[9315,9315],"mapped",[52]],[[9316,9316],"mapped",[53]],[[9317,9317],"mapped",[54]],[[9318,9318],"mapped",[55]],[[9319,9319],"mapped",[56]],[[9320,9320],"mapped",[57]],[[9321,9321],"mapped",[49,48]],[[9322,9322],"mapped",[49,49]],[[9323,9323],"mapped",[49,50]],[[9324,9324],"mapped",[49,51]],[[9325,9325],"mapped",[49,52]],[[9326,9326],"mapped",[49,53]],[[9327,9327],"mapped",[49,54]],[[9328,9328],"mapped",[49,55]],[[9329,9329],"mapped",[49,56]],[[9330,9330],"mapped",[49,57]],[[9331,9331],"mapped",[50,48]],[[9332,9332],"disallowed_STD3_mapped",[40,49,41]],[[9333,9333],"disallowed_STD3_mapped",[40,50,41]],[[9334,9334],"disallowed_STD3_mapped",[40,51,41]],[[9335,9335],"disallowed_STD3_mapped",[40,52,41]],[[9336,9336],"disallowed_STD3_mapped",[40,53,41]],[[9337,9337],"disallowed_STD3_mapped",[40,54,41]],[[9338,9338],"disallowed_STD3_mapped",[40,55,41]],[[9339,9339],"disallowed_STD3_mapped",[40,56,41]],[[9340,9340],"disallowed_STD3_mapped",[40,57,41]],[[9341,9341],"disallowed_STD3_mapped",[40,49,48,41]],[[9342,9342],"disallowed_STD3_mapped",[40,49,49,41]],[[9343,9343],"disallowed_STD3_mapped",[40,49,50,41]],[[9344,9344],"disallowed_STD3_mapped",[40,49,51,41]],[[9345,9345],"disallowed_STD3_mapped",[40,49,52,41]],[[9346,9346],"disallowed_STD3_mapped",[40,49,53,41]],[[9347,9347],"disallowed_STD3_mapped",[40,49,54,41]],[[9348,9348],"disallowed_STD3_mapped",[40,49,55,41]],[[9349,9349],"disallowed_STD3_mapped",[40,49,56,41]],[[9350,9350],"disallowed_STD3_mapped",[40,49,57,41]],[[9351,9351],"disallowed_STD3_mapped",[40,50,48,41]],[[9352,9371],"disallowed"],[[9372,9372],"disallowed_STD3_mapped",[40,97,41]],[[9373,9373],"disallowed_STD3_mapped",[40,98,41]],[[9374,9374],"disallowed_STD3_mapped",[40,99,41]],[[9375,9375],"disallowed_STD3_mapped",[40,100,41]],[[9376,9376],"disallowed_STD3_mapped",[40,101,41]],[[9377,9377],"disallowed_STD3_mapped",[40,102,41]],[[9378,9378],"disallowed_STD3_mapped",[40,103,41]],[[9379,9379],"disallowed_STD3_mapped",[40,104,41]],[[9380,9380],"disallowed_STD3_mapped",[40,105,41]],[[9381,9381],"disallowed_STD3_mapped",[40,106,41]],[[9382,9382],"disallowed_STD3_mapped",[40,107,41]],[[9383,9383],"disallowed_STD3_mapped",[40,108,41]],[[9384,9384],"disallowed_STD3_mapped",[40,109,41]],[[9385,9385],"disallowed_STD3_mapped",[40,110,41]],[[9386,9386],"disallowed_STD3_mapped",[40,111,41]],[[9387,9387],"disallowed_STD3_mapped",[40,112,41]],[[9388,9388],"disallowed_STD3_mapped",[40,113,41]],[[9389,9389],"disallowed_STD3_mapped",[40,114,41]],[[9390,9390],"disallowed_STD3_mapped",[40,115,41]],[[9391,9391],"disallowed_STD3_mapped",[40,116,41]],[[9392,9392],"disallowed_STD3_mapped",[40,117,41]],[[9393,9393],"disallowed_STD3_mapped",[40,118,41]],[[9394,9394],"disallowed_STD3_mapped",[40,119,41]],[[9395,9395],"disallowed_STD3_mapped",[40,120,41]],[[9396,9396],"disallowed_STD3_mapped",[40,121,41]],[[9397,9397],"disallowed_STD3_mapped",[40,122,41]],[[9398,9398],"mapped",[97]],[[9399,9399],"mapped",[98]],[[9400,9400],"mapped",[99]],[[9401,9401],"mapped",[100]],[[9402,9402],"mapped",[101]],[[9403,9403],"mapped",[102]],[[9404,9404],"mapped",[103]],[[9405,9405],"mapped",[104]],[[9406,9406],"mapped",[105]],[[9407,9407],"mapped",[106]],[[9408,9408],"mapped",[107]],[[9409,9409],"mapped",[108]],[[9410,9410],"mapped",[109]],[[9411,9411],"mapped",[110]],[[9412,9412],"mapped",[111]],[[9413,9413],"mapped",[112]],[[9414,9414],"mapped",[113]],[[9415,9415],"mapped",[114]],[[9416,9416],"mapped",[115]],[[9417,9417],"mapped",[116]],[[9418,9418],"mapped",[117]],[[9419,9419],"mapped",[118]],[[9420,9420],"mapped",[119]],[[9421,9421],"mapped",[120]],[[9422,9422],"mapped",[121]],[[9423,9423],"mapped",[122]],[[9424,9424],"mapped",[97]],[[9425,9425],"mapped",[98]],[[9426,9426],"mapped",[99]],[[9427,9427],"mapped",[100]],[[9428,9428],"mapped",[101]],[[9429,9429],"mapped",[102]],[[9430,9430],"mapped",[103]],[[9431,9431],"mapped",[104]],[[9432,9432],"mapped",[105]],[[9433,9433],"mapped",[106]],[[9434,9434],"mapped",[107]],[[9435,9435],"mapped",[108]],[[9436,9436],"mapped",[109]],[[9437,9437],"mapped",[110]],[[9438,9438],"mapped",[111]],[[9439,9439],"mapped",[112]],[[9440,9440],"mapped",[113]],[[9441,9441],"mapped",[114]],[[9442,9442],"mapped",[115]],[[9443,9443],"mapped",[116]],[[9444,9444],"mapped",[117]],[[9445,9445],"mapped",[118]],[[9446,9446],"mapped",[119]],[[9447,9447],"mapped",[120]],[[9448,9448],"mapped",[121]],[[9449,9449],"mapped",[122]],[[9450,9450],"mapped",[48]],[[9451,9470],"valid",[],"NV8"],[[9471,9471],"valid",[],"NV8"],[[9472,9621],"valid",[],"NV8"],[[9622,9631],"valid",[],"NV8"],[[9632,9711],"valid",[],"NV8"],[[9712,9719],"valid",[],"NV8"],[[9720,9727],"valid",[],"NV8"],[[9728,9747],"valid",[],"NV8"],[[9748,9749],"valid",[],"NV8"],[[9750,9751],"valid",[],"NV8"],[[9752,9752],"valid",[],"NV8"],[[9753,9753],"valid",[],"NV8"],[[9754,9839],"valid",[],"NV8"],[[9840,9841],"valid",[],"NV8"],[[9842,9853],"valid",[],"NV8"],[[9854,9855],"valid",[],"NV8"],[[9856,9865],"valid",[],"NV8"],[[9866,9873],"valid",[],"NV8"],[[9874,9884],"valid",[],"NV8"],[[9885,9885],"valid",[],"NV8"],[[9886,9887],"valid",[],"NV8"],[[9888,9889],"valid",[],"NV8"],[[9890,9905],"valid",[],"NV8"],[[9906,9906],"valid",[],"NV8"],[[9907,9916],"valid",[],"NV8"],[[9917,9919],"valid",[],"NV8"],[[9920,9923],"valid",[],"NV8"],[[9924,9933],"valid",[],"NV8"],[[9934,9934],"valid",[],"NV8"],[[9935,9953],"valid",[],"NV8"],[[9954,9954],"valid",[],"NV8"],[[9955,9955],"valid",[],"NV8"],[[9956,9959],"valid",[],"NV8"],[[9960,9983],"valid",[],"NV8"],[[9984,9984],"valid",[],"NV8"],[[9985,9988],"valid",[],"NV8"],[[9989,9989],"valid",[],"NV8"],[[9990,9993],"valid",[],"NV8"],[[9994,9995],"valid",[],"NV8"],[[9996,10023],"valid",[],"NV8"],[[10024,10024],"valid",[],"NV8"],[[10025,10059],"valid",[],"NV8"],[[10060,10060],"valid",[],"NV8"],[[10061,10061],"valid",[],"NV8"],[[10062,10062],"valid",[],"NV8"],[[10063,10066],"valid",[],"NV8"],[[10067,10069],"valid",[],"NV8"],[[10070,10070],"valid",[],"NV8"],[[10071,10071],"valid",[],"NV8"],[[10072,10078],"valid",[],"NV8"],[[10079,10080],"valid",[],"NV8"],[[10081,10087],"valid",[],"NV8"],[[10088,10101],"valid",[],"NV8"],[[10102,10132],"valid",[],"NV8"],[[10133,10135],"valid",[],"NV8"],[[10136,10159],"valid",[],"NV8"],[[10160,10160],"valid",[],"NV8"],[[10161,10174],"valid",[],"NV8"],[[10175,10175],"valid",[],"NV8"],[[10176,10182],"valid",[],"NV8"],[[10183,10186],"valid",[],"NV8"],[[10187,10187],"valid",[],"NV8"],[[10188,10188],"valid",[],"NV8"],[[10189,10189],"valid",[],"NV8"],[[10190,10191],"valid",[],"NV8"],[[10192,10219],"valid",[],"NV8"],[[10220,10223],"valid",[],"NV8"],[[10224,10239],"valid",[],"NV8"],[[10240,10495],"valid",[],"NV8"],[[10496,10763],"valid",[],"NV8"],[[10764,10764],"mapped",[8747,8747,8747,8747]],[[10765,10867],"valid",[],"NV8"],[[10868,10868],"disallowed_STD3_mapped",[58,58,61]],[[10869,10869],"disallowed_STD3_mapped",[61,61]],[[10870,10870],"disallowed_STD3_mapped",[61,61,61]],[[10871,10971],"valid",[],"NV8"],[[10972,10972],"mapped",[10973,824]],[[10973,11007],"valid",[],"NV8"],[[11008,11021],"valid",[],"NV8"],[[11022,11027],"valid",[],"NV8"],[[11028,11034],"valid",[],"NV8"],[[11035,11039],"valid",[],"NV8"],[[11040,11043],"valid",[],"NV8"],[[11044,11084],"valid",[],"NV8"],[[11085,11087],"valid",[],"NV8"],[[11088,11092],"valid",[],"NV8"],[[11093,11097],"valid",[],"NV8"],[[11098,11123],"valid",[],"NV8"],[[11124,11125],"disallowed"],[[11126,11157],"valid",[],"NV8"],[[11158,11159],"disallowed"],[[11160,11193],"valid",[],"NV8"],[[11194,11196],"disallowed"],[[11197,11208],"valid",[],"NV8"],[[11209,11209],"disallowed"],[[11210,11217],"valid",[],"NV8"],[[11218,11243],"disallowed"],[[11244,11247],"valid",[],"NV8"],[[11248,11263],"disallowed"],[[11264,11264],"mapped",[11312]],[[11265,11265],"mapped",[11313]],[[11266,11266],"mapped",[11314]],[[11267,11267],"mapped",[11315]],[[11268,11268],"mapped",[11316]],[[11269,11269],"mapped",[11317]],[[11270,11270],"mapped",[11318]],[[11271,11271],"mapped",[11319]],[[11272,11272],"mapped",[11320]],[[11273,11273],"mapped",[11321]],[[11274,11274],"mapped",[11322]],[[11275,11275],"mapped",[11323]],[[11276,11276],"mapped",[11324]],[[11277,11277],"mapped",[11325]],[[11278,11278],"mapped",[11326]],[[11279,11279],"mapped",[11327]],[[11280,11280],"mapped",[11328]],[[11281,11281],"mapped",[11329]],[[11282,11282],"mapped",[11330]],[[11283,11283],"mapped",[11331]],[[11284,11284],"mapped",[11332]],[[11285,11285],"mapped",[11333]],[[11286,11286],"mapped",[11334]],[[11287,11287],"mapped",[11335]],[[11288,11288],"mapped",[11336]],[[11289,11289],"mapped",[11337]],[[11290,11290],"mapped",[11338]],[[11291,11291],"mapped",[11339]],[[11292,11292],"mapped",[11340]],[[11293,11293],"mapped",[11341]],[[11294,11294],"mapped",[11342]],[[11295,11295],"mapped",[11343]],[[11296,11296],"mapped",[11344]],[[11297,11297],"mapped",[11345]],[[11298,11298],"mapped",[11346]],[[11299,11299],"mapped",[11347]],[[11300,11300],"mapped",[11348]],[[11301,11301],"mapped",[11349]],[[11302,11302],"mapped",[11350]],[[11303,11303],"mapped",[11351]],[[11304,11304],"mapped",[11352]],[[11305,11305],"mapped",[11353]],[[11306,11306],"mapped",[11354]],[[11307,11307],"mapped",[11355]],[[11308,11308],"mapped",[11356]],[[11309,11309],"mapped",[11357]],[[11310,11310],"mapped",[11358]],[[11311,11311],"disallowed"],[[11312,11358],"valid"],[[11359,11359],"disallowed"],[[11360,11360],"mapped",[11361]],[[11361,11361],"valid"],[[11362,11362],"mapped",[619]],[[11363,11363],"mapped",[7549]],[[11364,11364],"mapped",[637]],[[11365,11366],"valid"],[[11367,11367],"mapped",[11368]],[[11368,11368],"valid"],[[11369,11369],"mapped",[11370]],[[11370,11370],"valid"],[[11371,11371],"mapped",[11372]],[[11372,11372],"valid"],[[11373,11373],"mapped",[593]],[[11374,11374],"mapped",[625]],[[11375,11375],"mapped",[592]],[[11376,11376],"mapped",[594]],[[11377,11377],"valid"],[[11378,11378],"mapped",[11379]],[[11379,11379],"valid"],[[11380,11380],"valid"],[[11381,11381],"mapped",[11382]],[[11382,11383],"valid"],[[11384,11387],"valid"],[[11388,11388],"mapped",[106]],[[11389,11389],"mapped",[118]],[[11390,11390],"mapped",[575]],[[11391,11391],"mapped",[576]],[[11392,11392],"mapped",[11393]],[[11393,11393],"valid"],[[11394,11394],"mapped",[11395]],[[11395,11395],"valid"],[[11396,11396],"mapped",[11397]],[[11397,11397],"valid"],[[11398,11398],"mapped",[11399]],[[11399,11399],"valid"],[[11400,11400],"mapped",[11401]],[[11401,11401],"valid"],[[11402,11402],"mapped",[11403]],[[11403,11403],"valid"],[[11404,11404],"mapped",[11405]],[[11405,11405],"valid"],[[11406,11406],"mapped",[11407]],[[11407,11407],"valid"],[[11408,11408],"mapped",[11409]],[[11409,11409],"valid"],[[11410,11410],"mapped",[11411]],[[11411,11411],"valid"],[[11412,11412],"mapped",[11413]],[[11413,11413],"valid"],[[11414,11414],"mapped",[11415]],[[11415,11415],"valid"],[[11416,11416],"mapped",[11417]],[[11417,11417],"valid"],[[11418,11418],"mapped",[11419]],[[11419,11419],"valid"],[[11420,11420],"mapped",[11421]],[[11421,11421],"valid"],[[11422,11422],"mapped",[11423]],[[11423,11423],"valid"],[[11424,11424],"mapped",[11425]],[[11425,11425],"valid"],[[11426,11426],"mapped",[11427]],[[11427,11427],"valid"],[[11428,11428],"mapped",[11429]],[[11429,11429],"valid"],[[11430,11430],"mapped",[11431]],[[11431,11431],"valid"],[[11432,11432],"mapped",[11433]],[[11433,11433],"valid"],[[11434,11434],"mapped",[11435]],[[11435,11435],"valid"],[[11436,11436],"mapped",[11437]],[[11437,11437],"valid"],[[11438,11438],"mapped",[11439]],[[11439,11439],"valid"],[[11440,11440],"mapped",[11441]],[[11441,11441],"valid"],[[11442,11442],"mapped",[11443]],[[11443,11443],"valid"],[[11444,11444],"mapped",[11445]],[[11445,11445],"valid"],[[11446,11446],"mapped",[11447]],[[11447,11447],"valid"],[[11448,11448],"mapped",[11449]],[[11449,11449],"valid"],[[11450,11450],"mapped",[11451]],[[11451,11451],"valid"],[[11452,11452],"mapped",[11453]],[[11453,11453],"valid"],[[11454,11454],"mapped",[11455]],[[11455,11455],"valid"],[[11456,11456],"mapped",[11457]],[[11457,11457],"valid"],[[11458,11458],"mapped",[11459]],[[11459,11459],"valid"],[[11460,11460],"mapped",[11461]],[[11461,11461],"valid"],[[11462,11462],"mapped",[11463]],[[11463,11463],"valid"],[[11464,11464],"mapped",[11465]],[[11465,11465],"valid"],[[11466,11466],"mapped",[11467]],[[11467,11467],"valid"],[[11468,11468],"mapped",[11469]],[[11469,11469],"valid"],[[11470,11470],"mapped",[11471]],[[11471,11471],"valid"],[[11472,11472],"mapped",[11473]],[[11473,11473],"valid"],[[11474,11474],"mapped",[11475]],[[11475,11475],"valid"],[[11476,11476],"mapped",[11477]],[[11477,11477],"valid"],[[11478,11478],"mapped",[11479]],[[11479,11479],"valid"],[[11480,11480],"mapped",[11481]],[[11481,11481],"valid"],[[11482,11482],"mapped",[11483]],[[11483,11483],"valid"],[[11484,11484],"mapped",[11485]],[[11485,11485],"valid"],[[11486,11486],"mapped",[11487]],[[11487,11487],"valid"],[[11488,11488],"mapped",[11489]],[[11489,11489],"valid"],[[11490,11490],"mapped",[11491]],[[11491,11492],"valid"],[[11493,11498],"valid",[],"NV8"],[[11499,11499],"mapped",[11500]],[[11500,11500],"valid"],[[11501,11501],"mapped",[11502]],[[11502,11505],"valid"],[[11506,11506],"mapped",[11507]],[[11507,11507],"valid"],[[11508,11512],"disallowed"],[[11513,11519],"valid",[],"NV8"],[[11520,11557],"valid"],[[11558,11558],"disallowed"],[[11559,11559],"valid"],[[11560,11564],"disallowed"],[[11565,11565],"valid"],[[11566,11567],"disallowed"],[[11568,11621],"valid"],[[11622,11623],"valid"],[[11624,11630],"disallowed"],[[11631,11631],"mapped",[11617]],[[11632,11632],"valid",[],"NV8"],[[11633,11646],"disallowed"],[[11647,11647],"valid"],[[11648,11670],"valid"],[[11671,11679],"disallowed"],[[11680,11686],"valid"],[[11687,11687],"disallowed"],[[11688,11694],"valid"],[[11695,11695],"disallowed"],[[11696,11702],"valid"],[[11703,11703],"disallowed"],[[11704,11710],"valid"],[[11711,11711],"disallowed"],[[11712,11718],"valid"],[[11719,11719],"disallowed"],[[11720,11726],"valid"],[[11727,11727],"disallowed"],[[11728,11734],"valid"],[[11735,11735],"disallowed"],[[11736,11742],"valid"],[[11743,11743],"disallowed"],[[11744,11775],"valid"],[[11776,11799],"valid",[],"NV8"],[[11800,11803],"valid",[],"NV8"],[[11804,11805],"valid",[],"NV8"],[[11806,11822],"valid",[],"NV8"],[[11823,11823],"valid"],[[11824,11824],"valid",[],"NV8"],[[11825,11825],"valid",[],"NV8"],[[11826,11835],"valid",[],"NV8"],[[11836,11842],"valid",[],"NV8"],[[11843,11903],"disallowed"],[[11904,11929],"valid",[],"NV8"],[[11930,11930],"disallowed"],[[11931,11934],"valid",[],"NV8"],[[11935,11935],"mapped",[27597]],[[11936,12018],"valid",[],"NV8"],[[12019,12019],"mapped",[40863]],[[12020,12031],"disallowed"],[[12032,12032],"mapped",[19968]],[[12033,12033],"mapped",[20008]],[[12034,12034],"mapped",[20022]],[[12035,12035],"mapped",[20031]],[[12036,12036],"mapped",[20057]],[[12037,12037],"mapped",[20101]],[[12038,12038],"mapped",[20108]],[[12039,12039],"mapped",[20128]],[[12040,12040],"mapped",[20154]],[[12041,12041],"mapped",[20799]],[[12042,12042],"mapped",[20837]],[[12043,12043],"mapped",[20843]],[[12044,12044],"mapped",[20866]],[[12045,12045],"mapped",[20886]],[[12046,12046],"mapped",[20907]],[[12047,12047],"mapped",[20960]],[[12048,12048],"mapped",[20981]],[[12049,12049],"mapped",[20992]],[[12050,12050],"mapped",[21147]],[[12051,12051],"mapped",[21241]],[[12052,12052],"mapped",[21269]],[[12053,12053],"mapped",[21274]],[[12054,12054],"mapped",[21304]],[[12055,12055],"mapped",[21313]],[[12056,12056],"mapped",[21340]],[[12057,12057],"mapped",[21353]],[[12058,12058],"mapped",[21378]],[[12059,12059],"mapped",[21430]],[[12060,12060],"mapped",[21448]],[[12061,12061],"mapped",[21475]],[[12062,12062],"mapped",[22231]],[[12063,12063],"mapped",[22303]],[[12064,12064],"mapped",[22763]],[[12065,12065],"mapped",[22786]],[[12066,12066],"mapped",[22794]],[[12067,12067],"mapped",[22805]],[[12068,12068],"mapped",[22823]],[[12069,12069],"mapped",[22899]],[[12070,12070],"mapped",[23376]],[[12071,12071],"mapped",[23424]],[[12072,12072],"mapped",[23544]],[[12073,12073],"mapped",[23567]],[[12074,12074],"mapped",[23586]],[[12075,12075],"mapped",[23608]],[[12076,12076],"mapped",[23662]],[[12077,12077],"mapped",[23665]],[[12078,12078],"mapped",[24027]],[[12079,12079],"mapped",[24037]],[[12080,12080],"mapped",[24049]],[[12081,12081],"mapped",[24062]],[[12082,12082],"mapped",[24178]],[[12083,12083],"mapped",[24186]],[[12084,12084],"mapped",[24191]],[[12085,12085],"mapped",[24308]],[[12086,12086],"mapped",[24318]],[[12087,12087],"mapped",[24331]],[[12088,12088],"mapped",[24339]],[[12089,12089],"mapped",[24400]],[[12090,12090],"mapped",[24417]],[[12091,12091],"mapped",[24435]],[[12092,12092],"mapped",[24515]],[[12093,12093],"mapped",[25096]],[[12094,12094],"mapped",[25142]],[[12095,12095],"mapped",[25163]],[[12096,12096],"mapped",[25903]],[[12097,12097],"mapped",[25908]],[[12098,12098],"mapped",[25991]],[[12099,12099],"mapped",[26007]],[[12100,12100],"mapped",[26020]],[[12101,12101],"mapped",[26041]],[[12102,12102],"mapped",[26080]],[[12103,12103],"mapped",[26085]],[[12104,12104],"mapped",[26352]],[[12105,12105],"mapped",[26376]],[[12106,12106],"mapped",[26408]],[[12107,12107],"mapped",[27424]],[[12108,12108],"mapped",[27490]],[[12109,12109],"mapped",[27513]],[[12110,12110],"mapped",[27571]],[[12111,12111],"mapped",[27595]],[[12112,12112],"mapped",[27604]],[[12113,12113],"mapped",[27611]],[[12114,12114],"mapped",[27663]],[[12115,12115],"mapped",[27668]],[[12116,12116],"mapped",[27700]],[[12117,12117],"mapped",[28779]],[[12118,12118],"mapped",[29226]],[[12119,12119],"mapped",[29238]],[[12120,12120],"mapped",[29243]],[[12121,12121],"mapped",[29247]],[[12122,12122],"mapped",[29255]],[[12123,12123],"mapped",[29273]],[[12124,12124],"mapped",[29275]],[[12125,12125],"mapped",[29356]],[[12126,12126],"mapped",[29572]],[[12127,12127],"mapped",[29577]],[[12128,12128],"mapped",[29916]],[[12129,12129],"mapped",[29926]],[[12130,12130],"mapped",[29976]],[[12131,12131],"mapped",[29983]],[[12132,12132],"mapped",[29992]],[[12133,12133],"mapped",[30000]],[[12134,12134],"mapped",[30091]],[[12135,12135],"mapped",[30098]],[[12136,12136],"mapped",[30326]],[[12137,12137],"mapped",[30333]],[[12138,12138],"mapped",[30382]],[[12139,12139],"mapped",[30399]],[[12140,12140],"mapped",[30446]],[[12141,12141],"mapped",[30683]],[[12142,12142],"mapped",[30690]],[[12143,12143],"mapped",[30707]],[[12144,12144],"mapped",[31034]],[[12145,12145],"mapped",[31160]],[[12146,12146],"mapped",[31166]],[[12147,12147],"mapped",[31348]],[[12148,12148],"mapped",[31435]],[[12149,12149],"mapped",[31481]],[[12150,12150],"mapped",[31859]],[[12151,12151],"mapped",[31992]],[[12152,12152],"mapped",[32566]],[[12153,12153],"mapped",[32593]],[[12154,12154],"mapped",[32650]],[[12155,12155],"mapped",[32701]],[[12156,12156],"mapped",[32769]],[[12157,12157],"mapped",[32780]],[[12158,12158],"mapped",[32786]],[[12159,12159],"mapped",[32819]],[[12160,12160],"mapped",[32895]],[[12161,12161],"mapped",[32905]],[[12162,12162],"mapped",[33251]],[[12163,12163],"mapped",[33258]],[[12164,12164],"mapped",[33267]],[[12165,12165],"mapped",[33276]],[[12166,12166],"mapped",[33292]],[[12167,12167],"mapped",[33307]],[[12168,12168],"mapped",[33311]],[[12169,12169],"mapped",[33390]],[[12170,12170],"mapped",[33394]],[[12171,12171],"mapped",[33400]],[[12172,12172],"mapped",[34381]],[[12173,12173],"mapped",[34411]],[[12174,12174],"mapped",[34880]],[[12175,12175],"mapped",[34892]],[[12176,12176],"mapped",[34915]],[[12177,12177],"mapped",[35198]],[[12178,12178],"mapped",[35211]],[[12179,12179],"mapped",[35282]],[[12180,12180],"mapped",[35328]],[[12181,12181],"mapped",[35895]],[[12182,12182],"mapped",[35910]],[[12183,12183],"mapped",[35925]],[[12184,12184],"mapped",[35960]],[[12185,12185],"mapped",[35997]],[[12186,12186],"mapped",[36196]],[[12187,12187],"mapped",[36208]],[[12188,12188],"mapped",[36275]],[[12189,12189],"mapped",[36523]],[[12190,12190],"mapped",[36554]],[[12191,12191],"mapped",[36763]],[[12192,12192],"mapped",[36784]],[[12193,12193],"mapped",[36789]],[[12194,12194],"mapped",[37009]],[[12195,12195],"mapped",[37193]],[[12196,12196],"mapped",[37318]],[[12197,12197],"mapped",[37324]],[[12198,12198],"mapped",[37329]],[[12199,12199],"mapped",[38263]],[[12200,12200],"mapped",[38272]],[[12201,12201],"mapped",[38428]],[[12202,12202],"mapped",[38582]],[[12203,12203],"mapped",[38585]],[[12204,12204],"mapped",[38632]],[[12205,12205],"mapped",[38737]],[[12206,12206],"mapped",[38750]],[[12207,12207],"mapped",[38754]],[[12208,12208],"mapped",[38761]],[[12209,12209],"mapped",[38859]],[[12210,12210],"mapped",[38893]],[[12211,12211],"mapped",[38899]],[[12212,12212],"mapped",[38913]],[[12213,12213],"mapped",[39080]],[[12214,12214],"mapped",[39131]],[[12215,12215],"mapped",[39135]],[[12216,12216],"mapped",[39318]],[[12217,12217],"mapped",[39321]],[[12218,12218],"mapped",[39340]],[[12219,12219],"mapped",[39592]],[[12220,12220],"mapped",[39640]],[[12221,12221],"mapped",[39647]],[[12222,12222],"mapped",[39717]],[[12223,12223],"mapped",[39727]],[[12224,12224],"mapped",[39730]],[[12225,12225],"mapped",[39740]],[[12226,12226],"mapped",[39770]],[[12227,12227],"mapped",[40165]],[[12228,12228],"mapped",[40565]],[[12229,12229],"mapped",[40575]],[[12230,12230],"mapped",[40613]],[[12231,12231],"mapped",[40635]],[[12232,12232],"mapped",[40643]],[[12233,12233],"mapped",[40653]],[[12234,12234],"mapped",[40657]],[[12235,12235],"mapped",[40697]],[[12236,12236],"mapped",[40701]],[[12237,12237],"mapped",[40718]],[[12238,12238],"mapped",[40723]],[[12239,12239],"mapped",[40736]],[[12240,12240],"mapped",[40763]],[[12241,12241],"mapped",[40778]],[[12242,12242],"mapped",[40786]],[[12243,12243],"mapped",[40845]],[[12244,12244],"mapped",[40860]],[[12245,12245],"mapped",[40864]],[[12246,12271],"disallowed"],[[12272,12283],"disallowed"],[[12284,12287],"disallowed"],[[12288,12288],"disallowed_STD3_mapped",[32]],[[12289,12289],"valid",[],"NV8"],[[12290,12290],"mapped",[46]],[[12291,12292],"valid",[],"NV8"],[[12293,12295],"valid"],[[12296,12329],"valid",[],"NV8"],[[12330,12333],"valid"],[[12334,12341],"valid",[],"NV8"],[[12342,12342],"mapped",[12306]],[[12343,12343],"valid",[],"NV8"],[[12344,12344],"mapped",[21313]],[[12345,12345],"mapped",[21316]],[[12346,12346],"mapped",[21317]],[[12347,12347],"valid",[],"NV8"],[[12348,12348],"valid"],[[12349,12349],"valid",[],"NV8"],[[12350,12350],"valid",[],"NV8"],[[12351,12351],"valid",[],"NV8"],[[12352,12352],"disallowed"],[[12353,12436],"valid"],[[12437,12438],"valid"],[[12439,12440],"disallowed"],[[12441,12442],"valid"],[[12443,12443],"disallowed_STD3_mapped",[32,12441]],[[12444,12444],"disallowed_STD3_mapped",[32,12442]],[[12445,12446],"valid"],[[12447,12447],"mapped",[12424,12426]],[[12448,12448],"valid",[],"NV8"],[[12449,12542],"valid"],[[12543,12543],"mapped",[12467,12488]],[[12544,12548],"disallowed"],[[12549,12588],"valid"],[[12589,12589],"valid"],[[12590,12592],"disallowed"],[[12593,12593],"mapped",[4352]],[[12594,12594],"mapped",[4353]],[[12595,12595],"mapped",[4522]],[[12596,12596],"mapped",[4354]],[[12597,12597],"mapped",[4524]],[[12598,12598],"mapped",[4525]],[[12599,12599],"mapped",[4355]],[[12600,12600],"mapped",[4356]],[[12601,12601],"mapped",[4357]],[[12602,12602],"mapped",[4528]],[[12603,12603],"mapped",[4529]],[[12604,12604],"mapped",[4530]],[[12605,12605],"mapped",[4531]],[[12606,12606],"mapped",[4532]],[[12607,12607],"mapped",[4533]],[[12608,12608],"mapped",[4378]],[[12609,12609],"mapped",[4358]],[[12610,12610],"mapped",[4359]],[[12611,12611],"mapped",[4360]],[[12612,12612],"mapped",[4385]],[[12613,12613],"mapped",[4361]],[[12614,12614],"mapped",[4362]],[[12615,12615],"mapped",[4363]],[[12616,12616],"mapped",[4364]],[[12617,12617],"mapped",[4365]],[[12618,12618],"mapped",[4366]],[[12619,12619],"mapped",[4367]],[[12620,12620],"mapped",[4368]],[[12621,12621],"mapped",[4369]],[[12622,12622],"mapped",[4370]],[[12623,12623],"mapped",[4449]],[[12624,12624],"mapped",[4450]],[[12625,12625],"mapped",[4451]],[[12626,12626],"mapped",[4452]],[[12627,12627],"mapped",[4453]],[[12628,12628],"mapped",[4454]],[[12629,12629],"mapped",[4455]],[[12630,12630],"mapped",[4456]],[[12631,12631],"mapped",[4457]],[[12632,12632],"mapped",[4458]],[[12633,12633],"mapped",[4459]],[[12634,12634],"mapped",[4460]],[[12635,12635],"mapped",[4461]],[[12636,12636],"mapped",[4462]],[[12637,12637],"mapped",[4463]],[[12638,12638],"mapped",[4464]],[[12639,12639],"mapped",[4465]],[[12640,12640],"mapped",[4466]],[[12641,12641],"mapped",[4467]],[[12642,12642],"mapped",[4468]],[[12643,12643],"mapped",[4469]],[[12644,12644],"disallowed"],[[12645,12645],"mapped",[4372]],[[12646,12646],"mapped",[4373]],[[12647,12647],"mapped",[4551]],[[12648,12648],"mapped",[4552]],[[12649,12649],"mapped",[4556]],[[12650,12650],"mapped",[4558]],[[12651,12651],"mapped",[4563]],[[12652,12652],"mapped",[4567]],[[12653,12653],"mapped",[4569]],[[12654,12654],"mapped",[4380]],[[12655,12655],"mapped",[4573]],[[12656,12656],"mapped",[4575]],[[12657,12657],"mapped",[4381]],[[12658,12658],"mapped",[4382]],[[12659,12659],"mapped",[4384]],[[12660,12660],"mapped",[4386]],[[12661,12661],"mapped",[4387]],[[12662,12662],"mapped",[4391]],[[12663,12663],"mapped",[4393]],[[12664,12664],"mapped",[4395]],[[12665,12665],"mapped",[4396]],[[12666,12666],"mapped",[4397]],[[12667,12667],"mapped",[4398]],[[12668,12668],"mapped",[4399]],[[12669,12669],"mapped",[4402]],[[12670,12670],"mapped",[4406]],[[12671,12671],"mapped",[4416]],[[12672,12672],"mapped",[4423]],[[12673,12673],"mapped",[4428]],[[12674,12674],"mapped",[4593]],[[12675,12675],"mapped",[4594]],[[12676,12676],"mapped",[4439]],[[12677,12677],"mapped",[4440]],[[12678,12678],"mapped",[4441]],[[12679,12679],"mapped",[4484]],[[12680,12680],"mapped",[4485]],[[12681,12681],"mapped",[4488]],[[12682,12682],"mapped",[4497]],[[12683,12683],"mapped",[4498]],[[12684,12684],"mapped",[4500]],[[12685,12685],"mapped",[4510]],[[12686,12686],"mapped",[4513]],[[12687,12687],"disallowed"],[[12688,12689],"valid",[],"NV8"],[[12690,12690],"mapped",[19968]],[[12691,12691],"mapped",[20108]],[[12692,12692],"mapped",[19977]],[[12693,12693],"mapped",[22235]],[[12694,12694],"mapped",[19978]],[[12695,12695],"mapped",[20013]],[[12696,12696],"mapped",[19979]],[[12697,12697],"mapped",[30002]],[[12698,12698],"mapped",[20057]],[[12699,12699],"mapped",[19993]],[[12700,12700],"mapped",[19969]],[[12701,12701],"mapped",[22825]],[[12702,12702],"mapped",[22320]],[[12703,12703],"mapped",[20154]],[[12704,12727],"valid"],[[12728,12730],"valid"],[[12731,12735],"disallowed"],[[12736,12751],"valid",[],"NV8"],[[12752,12771],"valid",[],"NV8"],[[12772,12783],"disallowed"],[[12784,12799],"valid"],[[12800,12800],"disallowed_STD3_mapped",[40,4352,41]],[[12801,12801],"disallowed_STD3_mapped",[40,4354,41]],[[12802,12802],"disallowed_STD3_mapped",[40,4355,41]],[[12803,12803],"disallowed_STD3_mapped",[40,4357,41]],[[12804,12804],"disallowed_STD3_mapped",[40,4358,41]],[[12805,12805],"disallowed_STD3_mapped",[40,4359,41]],[[12806,12806],"disallowed_STD3_mapped",[40,4361,41]],[[12807,12807],"disallowed_STD3_mapped",[40,4363,41]],[[12808,12808],"disallowed_STD3_mapped",[40,4364,41]],[[12809,12809],"disallowed_STD3_mapped",[40,4366,41]],[[12810,12810],"disallowed_STD3_mapped",[40,4367,41]],[[12811,12811],"disallowed_STD3_mapped",[40,4368,41]],[[12812,12812],"disallowed_STD3_mapped",[40,4369,41]],[[12813,12813],"disallowed_STD3_mapped",[40,4370,41]],[[12814,12814],"disallowed_STD3_mapped",[40,44032,41]],[[12815,12815],"disallowed_STD3_mapped",[40,45208,41]],[[12816,12816],"disallowed_STD3_mapped",[40,45796,41]],[[12817,12817],"disallowed_STD3_mapped",[40,46972,41]],[[12818,12818],"disallowed_STD3_mapped",[40,47560,41]],[[12819,12819],"disallowed_STD3_mapped",[40,48148,41]],[[12820,12820],"disallowed_STD3_mapped",[40,49324,41]],[[12821,12821],"disallowed_STD3_mapped",[40,50500,41]],[[12822,12822],"disallowed_STD3_mapped",[40,51088,41]],[[12823,12823],"disallowed_STD3_mapped",[40,52264,41]],[[12824,12824],"disallowed_STD3_mapped",[40,52852,41]],[[12825,12825],"disallowed_STD3_mapped",[40,53440,41]],[[12826,12826],"disallowed_STD3_mapped",[40,54028,41]],[[12827,12827],"disallowed_STD3_mapped",[40,54616,41]],[[12828,12828],"disallowed_STD3_mapped",[40,51452,41]],[[12829,12829],"disallowed_STD3_mapped",[40,50724,51204,41]],[[12830,12830],"disallowed_STD3_mapped",[40,50724,54980,41]],[[12831,12831],"disallowed"],[[12832,12832],"disallowed_STD3_mapped",[40,19968,41]],[[12833,12833],"disallowed_STD3_mapped",[40,20108,41]],[[12834,12834],"disallowed_STD3_mapped",[40,19977,41]],[[12835,12835],"disallowed_STD3_mapped",[40,22235,41]],[[12836,12836],"disallowed_STD3_mapped",[40,20116,41]],[[12837,12837],"disallowed_STD3_mapped",[40,20845,41]],[[12838,12838],"disallowed_STD3_mapped",[40,19971,41]],[[12839,12839],"disallowed_STD3_mapped",[40,20843,41]],[[12840,12840],"disallowed_STD3_mapped",[40,20061,41]],[[12841,12841],"disallowed_STD3_mapped",[40,21313,41]],[[12842,12842],"disallowed_STD3_mapped",[40,26376,41]],[[12843,12843],"disallowed_STD3_mapped",[40,28779,41]],[[12844,12844],"disallowed_STD3_mapped",[40,27700,41]],[[12845,12845],"disallowed_STD3_mapped",[40,26408,41]],[[12846,12846],"disallowed_STD3_mapped",[40,37329,41]],[[12847,12847],"disallowed_STD3_mapped",[40,22303,41]],[[12848,12848],"disallowed_STD3_mapped",[40,26085,41]],[[12849,12849],"disallowed_STD3_mapped",[40,26666,41]],[[12850,12850],"disallowed_STD3_mapped",[40,26377,41]],[[12851,12851],"disallowed_STD3_mapped",[40,31038,41]],[[12852,12852],"disallowed_STD3_mapped",[40,21517,41]],[[12853,12853],"disallowed_STD3_mapped",[40,29305,41]],[[12854,12854],"disallowed_STD3_mapped",[40,36001,41]],[[12855,12855],"disallowed_STD3_mapped",[40,31069,41]],[[12856,12856],"disallowed_STD3_mapped",[40,21172,41]],[[12857,12857],"disallowed_STD3_mapped",[40,20195,41]],[[12858,12858],"disallowed_STD3_mapped",[40,21628,41]],[[12859,12859],"disallowed_STD3_mapped",[40,23398,41]],[[12860,12860],"disallowed_STD3_mapped",[40,30435,41]],[[12861,12861],"disallowed_STD3_mapped",[40,20225,41]],[[12862,12862],"disallowed_STD3_mapped",[40,36039,41]],[[12863,12863],"disallowed_STD3_mapped",[40,21332,41]],[[12864,12864],"disallowed_STD3_mapped",[40,31085,41]],[[12865,12865],"disallowed_STD3_mapped",[40,20241,41]],[[12866,12866],"disallowed_STD3_mapped",[40,33258,41]],[[12867,12867],"disallowed_STD3_mapped",[40,33267,41]],[[12868,12868],"mapped",[21839]],[[12869,12869],"mapped",[24188]],[[12870,12870],"mapped",[25991]],[[12871,12871],"mapped",[31631]],[[12872,12879],"valid",[],"NV8"],[[12880,12880],"mapped",[112,116,101]],[[12881,12881],"mapped",[50,49]],[[12882,12882],"mapped",[50,50]],[[12883,12883],"mapped",[50,51]],[[12884,12884],"mapped",[50,52]],[[12885,12885],"mapped",[50,53]],[[12886,12886],"mapped",[50,54]],[[12887,12887],"mapped",[50,55]],[[12888,12888],"mapped",[50,56]],[[12889,12889],"mapped",[50,57]],[[12890,12890],"mapped",[51,48]],[[12891,12891],"mapped",[51,49]],[[12892,12892],"mapped",[51,50]],[[12893,12893],"mapped",[51,51]],[[12894,12894],"mapped",[51,52]],[[12895,12895],"mapped",[51,53]],[[12896,12896],"mapped",[4352]],[[12897,12897],"mapped",[4354]],[[12898,12898],"mapped",[4355]],[[12899,12899],"mapped",[4357]],[[12900,12900],"mapped",[4358]],[[12901,12901],"mapped",[4359]],[[12902,12902],"mapped",[4361]],[[12903,12903],"mapped",[4363]],[[12904,12904],"mapped",[4364]],[[12905,12905],"mapped",[4366]],[[12906,12906],"mapped",[4367]],[[12907,12907],"mapped",[4368]],[[12908,12908],"mapped",[4369]],[[12909,12909],"mapped",[4370]],[[12910,12910],"mapped",[44032]],[[12911,12911],"mapped",[45208]],[[12912,12912],"mapped",[45796]],[[12913,12913],"mapped",[46972]],[[12914,12914],"mapped",[47560]],[[12915,12915],"mapped",[48148]],[[12916,12916],"mapped",[49324]],[[12917,12917],"mapped",[50500]],[[12918,12918],"mapped",[51088]],[[12919,12919],"mapped",[52264]],[[12920,12920],"mapped",[52852]],[[12921,12921],"mapped",[53440]],[[12922,12922],"mapped",[54028]],[[12923,12923],"mapped",[54616]],[[12924,12924],"mapped",[52280,44256]],[[12925,12925],"mapped",[51452,51032]],[[12926,12926],"mapped",[50864]],[[12927,12927],"valid",[],"NV8"],[[12928,12928],"mapped",[19968]],[[12929,12929],"mapped",[20108]],[[12930,12930],"mapped",[19977]],[[12931,12931],"mapped",[22235]],[[12932,12932],"mapped",[20116]],[[12933,12933],"mapped",[20845]],[[12934,12934],"mapped",[19971]],[[12935,12935],"mapped",[20843]],[[12936,12936],"mapped",[20061]],[[12937,12937],"mapped",[21313]],[[12938,12938],"mapped",[26376]],[[12939,12939],"mapped",[28779]],[[12940,12940],"mapped",[27700]],[[12941,12941],"mapped",[26408]],[[12942,12942],"mapped",[37329]],[[12943,12943],"mapped",[22303]],[[12944,12944],"mapped",[26085]],[[12945,12945],"mapped",[26666]],[[12946,12946],"mapped",[26377]],[[12947,12947],"mapped",[31038]],[[12948,12948],"mapped",[21517]],[[12949,12949],"mapped",[29305]],[[12950,12950],"mapped",[36001]],[[12951,12951],"mapped",[31069]],[[12952,12952],"mapped",[21172]],[[12953,12953],"mapped",[31192]],[[12954,12954],"mapped",[30007]],[[12955,12955],"mapped",[22899]],[[12956,12956],"mapped",[36969]],[[12957,12957],"mapped",[20778]],[[12958,12958],"mapped",[21360]],[[12959,12959],"mapped",[27880]],[[12960,12960],"mapped",[38917]],[[12961,12961],"mapped",[20241]],[[12962,12962],"mapped",[20889]],[[12963,12963],"mapped",[27491]],[[12964,12964],"mapped",[19978]],[[12965,12965],"mapped",[20013]],[[12966,12966],"mapped",[19979]],[[12967,12967],"mapped",[24038]],[[12968,12968],"mapped",[21491]],[[12969,12969],"mapped",[21307]],[[12970,12970],"mapped",[23447]],[[12971,12971],"mapped",[23398]],[[12972,12972],"mapped",[30435]],[[12973,12973],"mapped",[20225]],[[12974,12974],"mapped",[36039]],[[12975,12975],"mapped",[21332]],[[12976,12976],"mapped",[22812]],[[12977,12977],"mapped",[51,54]],[[12978,12978],"mapped",[51,55]],[[12979,12979],"mapped",[51,56]],[[12980,12980],"mapped",[51,57]],[[12981,12981],"mapped",[52,48]],[[12982,12982],"mapped",[52,49]],[[12983,12983],"mapped",[52,50]],[[12984,12984],"mapped",[52,51]],[[12985,12985],"mapped",[52,52]],[[12986,12986],"mapped",[52,53]],[[12987,12987],"mapped",[52,54]],[[12988,12988],"mapped",[52,55]],[[12989,12989],"mapped",[52,56]],[[12990,12990],"mapped",[52,57]],[[12991,12991],"mapped",[53,48]],[[12992,12992],"mapped",[49,26376]],[[12993,12993],"mapped",[50,26376]],[[12994,12994],"mapped",[51,26376]],[[12995,12995],"mapped",[52,26376]],[[12996,12996],"mapped",[53,26376]],[[12997,12997],"mapped",[54,26376]],[[12998,12998],"mapped",[55,26376]],[[12999,12999],"mapped",[56,26376]],[[13000,13000],"mapped",[57,26376]],[[13001,13001],"mapped",[49,48,26376]],[[13002,13002],"mapped",[49,49,26376]],[[13003,13003],"mapped",[49,50,26376]],[[13004,13004],"mapped",[104,103]],[[13005,13005],"mapped",[101,114,103]],[[13006,13006],"mapped",[101,118]],[[13007,13007],"mapped",[108,116,100]],[[13008,13008],"mapped",[12450]],[[13009,13009],"mapped",[12452]],[[13010,13010],"mapped",[12454]],[[13011,13011],"mapped",[12456]],[[13012,13012],"mapped",[12458]],[[13013,13013],"mapped",[12459]],[[13014,13014],"mapped",[12461]],[[13015,13015],"mapped",[12463]],[[13016,13016],"mapped",[12465]],[[13017,13017],"mapped",[12467]],[[13018,13018],"mapped",[12469]],[[13019,13019],"mapped",[12471]],[[13020,13020],"mapped",[12473]],[[13021,13021],"mapped",[12475]],[[13022,13022],"mapped",[12477]],[[13023,13023],"mapped",[12479]],[[13024,13024],"mapped",[12481]],[[13025,13025],"mapped",[12484]],[[13026,13026],"mapped",[12486]],[[13027,13027],"mapped",[12488]],[[13028,13028],"mapped",[12490]],[[13029,13029],"mapped",[12491]],[[13030,13030],"mapped",[12492]],[[13031,13031],"mapped",[12493]],[[13032,13032],"mapped",[12494]],[[13033,13033],"mapped",[12495]],[[13034,13034],"mapped",[12498]],[[13035,13035],"mapped",[12501]],[[13036,13036],"mapped",[12504]],[[13037,13037],"mapped",[12507]],[[13038,13038],"mapped",[12510]],[[13039,13039],"mapped",[12511]],[[13040,13040],"mapped",[12512]],[[13041,13041],"mapped",[12513]],[[13042,13042],"mapped",[12514]],[[13043,13043],"mapped",[12516]],[[13044,13044],"mapped",[12518]],[[13045,13045],"mapped",[12520]],[[13046,13046],"mapped",[12521]],[[13047,13047],"mapped",[12522]],[[13048,13048],"mapped",[12523]],[[13049,13049],"mapped",[12524]],[[13050,13050],"mapped",[12525]],[[13051,13051],"mapped",[12527]],[[13052,13052],"mapped",[12528]],[[13053,13053],"mapped",[12529]],[[13054,13054],"mapped",[12530]],[[13055,13055],"disallowed"],[[13056,13056],"mapped",[12450,12497,12540,12488]],[[13057,13057],"mapped",[12450,12523,12501,12449]],[[13058,13058],"mapped",[12450,12531,12506,12450]],[[13059,13059],"mapped",[12450,12540,12523]],[[13060,13060],"mapped",[12452,12491,12531,12464]],[[13061,13061],"mapped",[12452,12531,12481]],[[13062,13062],"mapped",[12454,12457,12531]],[[13063,13063],"mapped",[12456,12473,12463,12540,12489]],[[13064,13064],"mapped",[12456,12540,12459,12540]],[[13065,13065],"mapped",[12458,12531,12473]],[[13066,13066],"mapped",[12458,12540,12512]],[[13067,13067],"mapped",[12459,12452,12522]],[[13068,13068],"mapped",[12459,12521,12483,12488]],[[13069,13069],"mapped",[12459,12525,12522,12540]],[[13070,13070],"mapped",[12460,12525,12531]],[[13071,13071],"mapped",[12460,12531,12510]],[[13072,13072],"mapped",[12462,12460]],[[13073,13073],"mapped",[12462,12491,12540]],[[13074,13074],"mapped",[12461,12517,12522,12540]],[[13075,13075],"mapped",[12462,12523,12480,12540]],[[13076,13076],"mapped",[12461,12525]],[[13077,13077],"mapped",[12461,12525,12464,12521,12512]],[[13078,13078],"mapped",[12461,12525,12513,12540,12488,12523]],[[13079,13079],"mapped",[12461,12525,12527,12483,12488]],[[13080,13080],"mapped",[12464,12521,12512]],[[13081,13081],"mapped",[12464,12521,12512,12488,12531]],[[13082,13082],"mapped",[12463,12523,12476,12452,12525]],[[13083,13083],"mapped",[12463,12525,12540,12493]],[[13084,13084],"mapped",[12465,12540,12473]],[[13085,13085],"mapped",[12467,12523,12490]],[[13086,13086],"mapped",[12467,12540,12509]],[[13087,13087],"mapped",[12469,12452,12463,12523]],[[13088,13088],"mapped",[12469,12531,12481,12540,12512]],[[13089,13089],"mapped",[12471,12522,12531,12464]],[[13090,13090],"mapped",[12475,12531,12481]],[[13091,13091],"mapped",[12475,12531,12488]],[[13092,13092],"mapped",[12480,12540,12473]],[[13093,13093],"mapped",[12487,12471]],[[13094,13094],"mapped",[12489,12523]],[[13095,13095],"mapped",[12488,12531]],[[13096,13096],"mapped",[12490,12494]],[[13097,13097],"mapped",[12494,12483,12488]],[[13098,13098],"mapped",[12495,12452,12484]],[[13099,13099],"mapped",[12497,12540,12475,12531,12488]],[[13100,13100],"mapped",[12497,12540,12484]],[[13101,13101],"mapped",[12496,12540,12524,12523]],[[13102,13102],"mapped",[12500,12450,12473,12488,12523]],[[13103,13103],"mapped",[12500,12463,12523]],[[13104,13104],"mapped",[12500,12467]],[[13105,13105],"mapped",[12499,12523]],[[13106,13106],"mapped",[12501,12449,12521,12483,12489]],[[13107,13107],"mapped",[12501,12451,12540,12488]],[[13108,13108],"mapped",[12502,12483,12471,12455,12523]],[[13109,13109],"mapped",[12501,12521,12531]],[[13110,13110],"mapped",[12504,12463,12479,12540,12523]],[[13111,13111],"mapped",[12506,12477]],[[13112,13112],"mapped",[12506,12491,12498]],[[13113,13113],"mapped",[12504,12523,12484]],[[13114,13114],"mapped",[12506,12531,12473]],[[13115,13115],"mapped",[12506,12540,12472]],[[13116,13116],"mapped",[12505,12540,12479]],[[13117,13117],"mapped",[12509,12452,12531,12488]],[[13118,13118],"mapped",[12508,12523,12488]],[[13119,13119],"mapped",[12507,12531]],[[13120,13120],"mapped",[12509,12531,12489]],[[13121,13121],"mapped",[12507,12540,12523]],[[13122,13122],"mapped",[12507,12540,12531]],[[13123,13123],"mapped",[12510,12452,12463,12525]],[[13124,13124],"mapped",[12510,12452,12523]],[[13125,13125],"mapped",[12510,12483,12495]],[[13126,13126],"mapped",[12510,12523,12463]],[[13127,13127],"mapped",[12510,12531,12471,12519,12531]],[[13128,13128],"mapped",[12511,12463,12525,12531]],[[13129,13129],"mapped",[12511,12522]],[[13130,13130],"mapped",[12511,12522,12496,12540,12523]],[[13131,13131],"mapped",[12513,12460]],[[13132,13132],"mapped",[12513,12460,12488,12531]],[[13133,13133],"mapped",[12513,12540,12488,12523]],[[13134,13134],"mapped",[12516,12540,12489]],[[13135,13135],"mapped",[12516,12540,12523]],[[13136,13136],"mapped",[12518,12450,12531]],[[13137,13137],"mapped",[12522,12483,12488,12523]],[[13138,13138],"mapped",[12522,12521]],[[13139,13139],"mapped",[12523,12500,12540]],[[13140,13140],"mapped",[12523,12540,12502,12523]],[[13141,13141],"mapped",[12524,12512]],[[13142,13142],"mapped",[12524,12531,12488,12466,12531]],[[13143,13143],"mapped",[12527,12483,12488]],[[13144,13144],"mapped",[48,28857]],[[13145,13145],"mapped",[49,28857]],[[13146,13146],"mapped",[50,28857]],[[13147,13147],"mapped",[51,28857]],[[13148,13148],"mapped",[52,28857]],[[13149,13149],"mapped",[53,28857]],[[13150,13150],"mapped",[54,28857]],[[13151,13151],"mapped",[55,28857]],[[13152,13152],"mapped",[56,28857]],[[13153,13153],"mapped",[57,28857]],[[13154,13154],"mapped",[49,48,28857]],[[13155,13155],"mapped",[49,49,28857]],[[13156,13156],"mapped",[49,50,28857]],[[13157,13157],"mapped",[49,51,28857]],[[13158,13158],"mapped",[49,52,28857]],[[13159,13159],"mapped",[49,53,28857]],[[13160,13160],"mapped",[49,54,28857]],[[13161,13161],"mapped",[49,55,28857]],[[13162,13162],"mapped",[49,56,28857]],[[13163,13163],"mapped",[49,57,28857]],[[13164,13164],"mapped",[50,48,28857]],[[13165,13165],"mapped",[50,49,28857]],[[13166,13166],"mapped",[50,50,28857]],[[13167,13167],"mapped",[50,51,28857]],[[13168,13168],"mapped",[50,52,28857]],[[13169,13169],"mapped",[104,112,97]],[[13170,13170],"mapped",[100,97]],[[13171,13171],"mapped",[97,117]],[[13172,13172],"mapped",[98,97,114]],[[13173,13173],"mapped",[111,118]],[[13174,13174],"mapped",[112,99]],[[13175,13175],"mapped",[100,109]],[[13176,13176],"mapped",[100,109,50]],[[13177,13177],"mapped",[100,109,51]],[[13178,13178],"mapped",[105,117]],[[13179,13179],"mapped",[24179,25104]],[[13180,13180],"mapped",[26157,21644]],[[13181,13181],"mapped",[22823,27491]],[[13182,13182],"mapped",[26126,27835]],[[13183,13183],"mapped",[26666,24335,20250,31038]],[[13184,13184],"mapped",[112,97]],[[13185,13185],"mapped",[110,97]],[[13186,13186],"mapped",[956,97]],[[13187,13187],"mapped",[109,97]],[[13188,13188],"mapped",[107,97]],[[13189,13189],"mapped",[107,98]],[[13190,13190],"mapped",[109,98]],[[13191,13191],"mapped",[103,98]],[[13192,13192],"mapped",[99,97,108]],[[13193,13193],"mapped",[107,99,97,108]],[[13194,13194],"mapped",[112,102]],[[13195,13195],"mapped",[110,102]],[[13196,13196],"mapped",[956,102]],[[13197,13197],"mapped",[956,103]],[[13198,13198],"mapped",[109,103]],[[13199,13199],"mapped",[107,103]],[[13200,13200],"mapped",[104,122]],[[13201,13201],"mapped",[107,104,122]],[[13202,13202],"mapped",[109,104,122]],[[13203,13203],"mapped",[103,104,122]],[[13204,13204],"mapped",[116,104,122]],[[13205,13205],"mapped",[956,108]],[[13206,13206],"mapped",[109,108]],[[13207,13207],"mapped",[100,108]],[[13208,13208],"mapped",[107,108]],[[13209,13209],"mapped",[102,109]],[[13210,13210],"mapped",[110,109]],[[13211,13211],"mapped",[956,109]],[[13212,13212],"mapped",[109,109]],[[13213,13213],"mapped",[99,109]],[[13214,13214],"mapped",[107,109]],[[13215,13215],"mapped",[109,109,50]],[[13216,13216],"mapped",[99,109,50]],[[13217,13217],"mapped",[109,50]],[[13218,13218],"mapped",[107,109,50]],[[13219,13219],"mapped",[109,109,51]],[[13220,13220],"mapped",[99,109,51]],[[13221,13221],"mapped",[109,51]],[[13222,13222],"mapped",[107,109,51]],[[13223,13223],"mapped",[109,8725,115]],[[13224,13224],"mapped",[109,8725,115,50]],[[13225,13225],"mapped",[112,97]],[[13226,13226],"mapped",[107,112,97]],[[13227,13227],"mapped",[109,112,97]],[[13228,13228],"mapped",[103,112,97]],[[13229,13229],"mapped",[114,97,100]],[[13230,13230],"mapped",[114,97,100,8725,115]],[[13231,13231],"mapped",[114,97,100,8725,115,50]],[[13232,13232],"mapped",[112,115]],[[13233,13233],"mapped",[110,115]],[[13234,13234],"mapped",[956,115]],[[13235,13235],"mapped",[109,115]],[[13236,13236],"mapped",[112,118]],[[13237,13237],"mapped",[110,118]],[[13238,13238],"mapped",[956,118]],[[13239,13239],"mapped",[109,118]],[[13240,13240],"mapped",[107,118]],[[13241,13241],"mapped",[109,118]],[[13242,13242],"mapped",[112,119]],[[13243,13243],"mapped",[110,119]],[[13244,13244],"mapped",[956,119]],[[13245,13245],"mapped",[109,119]],[[13246,13246],"mapped",[107,119]],[[13247,13247],"mapped",[109,119]],[[13248,13248],"mapped",[107,969]],[[13249,13249],"mapped",[109,969]],[[13250,13250],"disallowed"],[[13251,13251],"mapped",[98,113]],[[13252,13252],"mapped",[99,99]],[[13253,13253],"mapped",[99,100]],[[13254,13254],"mapped",[99,8725,107,103]],[[13255,13255],"disallowed"],[[13256,13256],"mapped",[100,98]],[[13257,13257],"mapped",[103,121]],[[13258,13258],"mapped",[104,97]],[[13259,13259],"mapped",[104,112]],[[13260,13260],"mapped",[105,110]],[[13261,13261],"mapped",[107,107]],[[13262,13262],"mapped",[107,109]],[[13263,13263],"mapped",[107,116]],[[13264,13264],"mapped",[108,109]],[[13265,13265],"mapped",[108,110]],[[13266,13266],"mapped",[108,111,103]],[[13267,13267],"mapped",[108,120]],[[13268,13268],"mapped",[109,98]],[[13269,13269],"mapped",[109,105,108]],[[13270,13270],"mapped",[109,111,108]],[[13271,13271],"mapped",[112,104]],[[13272,13272],"disallowed"],[[13273,13273],"mapped",[112,112,109]],[[13274,13274],"mapped",[112,114]],[[13275,13275],"mapped",[115,114]],[[13276,13276],"mapped",[115,118]],[[13277,13277],"mapped",[119,98]],[[13278,13278],"mapped",[118,8725,109]],[[13279,13279],"mapped",[97,8725,109]],[[13280,13280],"mapped",[49,26085]],[[13281,13281],"mapped",[50,26085]],[[13282,13282],"mapped",[51,26085]],[[13283,13283],"mapped",[52,26085]],[[13284,13284],"mapped",[53,26085]],[[13285,13285],"mapped",[54,26085]],[[13286,13286],"mapped",[55,26085]],[[13287,13287],"mapped",[56,26085]],[[13288,13288],"mapped",[57,26085]],[[13289,13289],"mapped",[49,48,26085]],[[13290,13290],"mapped",[49,49,26085]],[[13291,13291],"mapped",[49,50,26085]],[[13292,13292],"mapped",[49,51,26085]],[[13293,13293],"mapped",[49,52,26085]],[[13294,13294],"mapped",[49,53,26085]],[[13295,13295],"mapped",[49,54,26085]],[[13296,13296],"mapped",[49,55,26085]],[[13297,13297],"mapped",[49,56,26085]],[[13298,13298],"mapped",[49,57,26085]],[[13299,13299],"mapped",[50,48,26085]],[[13300,13300],"mapped",[50,49,26085]],[[13301,13301],"mapped",[50,50,26085]],[[13302,13302],"mapped",[50,51,26085]],[[13303,13303],"mapped",[50,52,26085]],[[13304,13304],"mapped",[50,53,26085]],[[13305,13305],"mapped",[50,54,26085]],[[13306,13306],"mapped",[50,55,26085]],[[13307,13307],"mapped",[50,56,26085]],[[13308,13308],"mapped",[50,57,26085]],[[13309,13309],"mapped",[51,48,26085]],[[13310,13310],"mapped",[51,49,26085]],[[13311,13311],"mapped",[103,97,108]],[[13312,19893],"valid"],[[19894,19903],"disallowed"],[[19904,19967],"valid",[],"NV8"],[[19968,40869],"valid"],[[40870,40891],"valid"],[[40892,40899],"valid"],[[40900,40907],"valid"],[[40908,40908],"valid"],[[40909,40917],"valid"],[[40918,40959],"disallowed"],[[40960,42124],"valid"],[[42125,42127],"disallowed"],[[42128,42145],"valid",[],"NV8"],[[42146,42147],"valid",[],"NV8"],[[42148,42163],"valid",[],"NV8"],[[42164,42164],"valid",[],"NV8"],[[42165,42176],"valid",[],"NV8"],[[42177,42177],"valid",[],"NV8"],[[42178,42180],"valid",[],"NV8"],[[42181,42181],"valid",[],"NV8"],[[42182,42182],"valid",[],"NV8"],[[42183,42191],"disallowed"],[[42192,42237],"valid"],[[42238,42239],"valid",[],"NV8"],[[42240,42508],"valid"],[[42509,42511],"valid",[],"NV8"],[[42512,42539],"valid"],[[42540,42559],"disallowed"],[[42560,42560],"mapped",[42561]],[[42561,42561],"valid"],[[42562,42562],"mapped",[42563]],[[42563,42563],"valid"],[[42564,42564],"mapped",[42565]],[[42565,42565],"valid"],[[42566,42566],"mapped",[42567]],[[42567,42567],"valid"],[[42568,42568],"mapped",[42569]],[[42569,42569],"valid"],[[42570,42570],"mapped",[42571]],[[42571,42571],"valid"],[[42572,42572],"mapped",[42573]],[[42573,42573],"valid"],[[42574,42574],"mapped",[42575]],[[42575,42575],"valid"],[[42576,42576],"mapped",[42577]],[[42577,42577],"valid"],[[42578,42578],"mapped",[42579]],[[42579,42579],"valid"],[[42580,42580],"mapped",[42581]],[[42581,42581],"valid"],[[42582,42582],"mapped",[42583]],[[42583,42583],"valid"],[[42584,42584],"mapped",[42585]],[[42585,42585],"valid"],[[42586,42586],"mapped",[42587]],[[42587,42587],"valid"],[[42588,42588],"mapped",[42589]],[[42589,42589],"valid"],[[42590,42590],"mapped",[42591]],[[42591,42591],"valid"],[[42592,42592],"mapped",[42593]],[[42593,42593],"valid"],[[42594,42594],"mapped",[42595]],[[42595,42595],"valid"],[[42596,42596],"mapped",[42597]],[[42597,42597],"valid"],[[42598,42598],"mapped",[42599]],[[42599,42599],"valid"],[[42600,42600],"mapped",[42601]],[[42601,42601],"valid"],[[42602,42602],"mapped",[42603]],[[42603,42603],"valid"],[[42604,42604],"mapped",[42605]],[[42605,42607],"valid"],[[42608,42611],"valid",[],"NV8"],[[42612,42619],"valid"],[[42620,42621],"valid"],[[42622,42622],"valid",[],"NV8"],[[42623,42623],"valid"],[[42624,42624],"mapped",[42625]],[[42625,42625],"valid"],[[42626,42626],"mapped",[42627]],[[42627,42627],"valid"],[[42628,42628],"mapped",[42629]],[[42629,42629],"valid"],[[42630,42630],"mapped",[42631]],[[42631,42631],"valid"],[[42632,42632],"mapped",[42633]],[[42633,42633],"valid"],[[42634,42634],"mapped",[42635]],[[42635,42635],"valid"],[[42636,42636],"mapped",[42637]],[[42637,42637],"valid"],[[42638,42638],"mapped",[42639]],[[42639,42639],"valid"],[[42640,42640],"mapped",[42641]],[[42641,42641],"valid"],[[42642,42642],"mapped",[42643]],[[42643,42643],"valid"],[[42644,42644],"mapped",[42645]],[[42645,42645],"valid"],[[42646,42646],"mapped",[42647]],[[42647,42647],"valid"],[[42648,42648],"mapped",[42649]],[[42649,42649],"valid"],[[42650,42650],"mapped",[42651]],[[42651,42651],"valid"],[[42652,42652],"mapped",[1098]],[[42653,42653],"mapped",[1100]],[[42654,42654],"valid"],[[42655,42655],"valid"],[[42656,42725],"valid"],[[42726,42735],"valid",[],"NV8"],[[42736,42737],"valid"],[[42738,42743],"valid",[],"NV8"],[[42744,42751],"disallowed"],[[42752,42774],"valid",[],"NV8"],[[42775,42778],"valid"],[[42779,42783],"valid"],[[42784,42785],"valid",[],"NV8"],[[42786,42786],"mapped",[42787]],[[42787,42787],"valid"],[[42788,42788],"mapped",[42789]],[[42789,42789],"valid"],[[42790,42790],"mapped",[42791]],[[42791,42791],"valid"],[[42792,42792],"mapped",[42793]],[[42793,42793],"valid"],[[42794,42794],"mapped",[42795]],[[42795,42795],"valid"],[[42796,42796],"mapped",[42797]],[[42797,42797],"valid"],[[42798,42798],"mapped",[42799]],[[42799,42801],"valid"],[[42802,42802],"mapped",[42803]],[[42803,42803],"valid"],[[42804,42804],"mapped",[42805]],[[42805,42805],"valid"],[[42806,42806],"mapped",[42807]],[[42807,42807],"valid"],[[42808,42808],"mapped",[42809]],[[42809,42809],"valid"],[[42810,42810],"mapped",[42811]],[[42811,42811],"valid"],[[42812,42812],"mapped",[42813]],[[42813,42813],"valid"],[[42814,42814],"mapped",[42815]],[[42815,42815],"valid"],[[42816,42816],"mapped",[42817]],[[42817,42817],"valid"],[[42818,42818],"mapped",[42819]],[[42819,42819],"valid"],[[42820,42820],"mapped",[42821]],[[42821,42821],"valid"],[[42822,42822],"mapped",[42823]],[[42823,42823],"valid"],[[42824,42824],"mapped",[42825]],[[42825,42825],"valid"],[[42826,42826],"mapped",[42827]],[[42827,42827],"valid"],[[42828,42828],"mapped",[42829]],[[42829,42829],"valid"],[[42830,42830],"mapped",[42831]],[[42831,42831],"valid"],[[42832,42832],"mapped",[42833]],[[42833,42833],"valid"],[[42834,42834],"mapped",[42835]],[[42835,42835],"valid"],[[42836,42836],"mapped",[42837]],[[42837,42837],"valid"],[[42838,42838],"mapped",[42839]],[[42839,42839],"valid"],[[42840,42840],"mapped",[42841]],[[42841,42841],"valid"],[[42842,42842],"mapped",[42843]],[[42843,42843],"valid"],[[42844,42844],"mapped",[42845]],[[42845,42845],"valid"],[[42846,42846],"mapped",[42847]],[[42847,42847],"valid"],[[42848,42848],"mapped",[42849]],[[42849,42849],"valid"],[[42850,42850],"mapped",[42851]],[[42851,42851],"valid"],[[42852,42852],"mapped",[42853]],[[42853,42853],"valid"],[[42854,42854],"mapped",[42855]],[[42855,42855],"valid"],[[42856,42856],"mapped",[42857]],[[42857,42857],"valid"],[[42858,42858],"mapped",[42859]],[[42859,42859],"valid"],[[42860,42860],"mapped",[42861]],[[42861,42861],"valid"],[[42862,42862],"mapped",[42863]],[[42863,42863],"valid"],[[42864,42864],"mapped",[42863]],[[42865,42872],"valid"],[[42873,42873],"mapped",[42874]],[[42874,42874],"valid"],[[42875,42875],"mapped",[42876]],[[42876,42876],"valid"],[[42877,42877],"mapped",[7545]],[[42878,42878],"mapped",[42879]],[[42879,42879],"valid"],[[42880,42880],"mapped",[42881]],[[42881,42881],"valid"],[[42882,42882],"mapped",[42883]],[[42883,42883],"valid"],[[42884,42884],"mapped",[42885]],[[42885,42885],"valid"],[[42886,42886],"mapped",[42887]],[[42887,42888],"valid"],[[42889,42890],"valid",[],"NV8"],[[42891,42891],"mapped",[42892]],[[42892,42892],"valid"],[[42893,42893],"mapped",[613]],[[42894,42894],"valid"],[[42895,42895],"valid"],[[42896,42896],"mapped",[42897]],[[42897,42897],"valid"],[[42898,42898],"mapped",[42899]],[[42899,42899],"valid"],[[42900,42901],"valid"],[[42902,42902],"mapped",[42903]],[[42903,42903],"valid"],[[42904,42904],"mapped",[42905]],[[42905,42905],"valid"],[[42906,42906],"mapped",[42907]],[[42907,42907],"valid"],[[42908,42908],"mapped",[42909]],[[42909,42909],"valid"],[[42910,42910],"mapped",[42911]],[[42911,42911],"valid"],[[42912,42912],"mapped",[42913]],[[42913,42913],"valid"],[[42914,42914],"mapped",[42915]],[[42915,42915],"valid"],[[42916,42916],"mapped",[42917]],[[42917,42917],"valid"],[[42918,42918],"mapped",[42919]],[[42919,42919],"valid"],[[42920,42920],"mapped",[42921]],[[42921,42921],"valid"],[[42922,42922],"mapped",[614]],[[42923,42923],"mapped",[604]],[[42924,42924],"mapped",[609]],[[42925,42925],"mapped",[620]],[[42926,42927],"disallowed"],[[42928,42928],"mapped",[670]],[[42929,42929],"mapped",[647]],[[42930,42930],"mapped",[669]],[[42931,42931],"mapped",[43859]],[[42932,42932],"mapped",[42933]],[[42933,42933],"valid"],[[42934,42934],"mapped",[42935]],[[42935,42935],"valid"],[[42936,42998],"disallowed"],[[42999,42999],"valid"],[[43000,43000],"mapped",[295]],[[43001,43001],"mapped",[339]],[[43002,43002],"valid"],[[43003,43007],"valid"],[[43008,43047],"valid"],[[43048,43051],"valid",[],"NV8"],[[43052,43055],"disallowed"],[[43056,43065],"valid",[],"NV8"],[[43066,43071],"disallowed"],[[43072,43123],"valid"],[[43124,43127],"valid",[],"NV8"],[[43128,43135],"disallowed"],[[43136,43204],"valid"],[[43205,43213],"disallowed"],[[43214,43215],"valid",[],"NV8"],[[43216,43225],"valid"],[[43226,43231],"disallowed"],[[43232,43255],"valid"],[[43256,43258],"valid",[],"NV8"],[[43259,43259],"valid"],[[43260,43260],"valid",[],"NV8"],[[43261,43261],"valid"],[[43262,43263],"disallowed"],[[43264,43309],"valid"],[[43310,43311],"valid",[],"NV8"],[[43312,43347],"valid"],[[43348,43358],"disallowed"],[[43359,43359],"valid",[],"NV8"],[[43360,43388],"valid",[],"NV8"],[[43389,43391],"disallowed"],[[43392,43456],"valid"],[[43457,43469],"valid",[],"NV8"],[[43470,43470],"disallowed"],[[43471,43481],"valid"],[[43482,43485],"disallowed"],[[43486,43487],"valid",[],"NV8"],[[43488,43518],"valid"],[[43519,43519],"disallowed"],[[43520,43574],"valid"],[[43575,43583],"disallowed"],[[43584,43597],"valid"],[[43598,43599],"disallowed"],[[43600,43609],"valid"],[[43610,43611],"disallowed"],[[43612,43615],"valid",[],"NV8"],[[43616,43638],"valid"],[[43639,43641],"valid",[],"NV8"],[[43642,43643],"valid"],[[43644,43647],"valid"],[[43648,43714],"valid"],[[43715,43738],"disallowed"],[[43739,43741],"valid"],[[43742,43743],"valid",[],"NV8"],[[43744,43759],"valid"],[[43760,43761],"valid",[],"NV8"],[[43762,43766],"valid"],[[43767,43776],"disallowed"],[[43777,43782],"valid"],[[43783,43784],"disallowed"],[[43785,43790],"valid"],[[43791,43792],"disallowed"],[[43793,43798],"valid"],[[43799,43807],"disallowed"],[[43808,43814],"valid"],[[43815,43815],"disallowed"],[[43816,43822],"valid"],[[43823,43823],"disallowed"],[[43824,43866],"valid"],[[43867,43867],"valid",[],"NV8"],[[43868,43868],"mapped",[42791]],[[43869,43869],"mapped",[43831]],[[43870,43870],"mapped",[619]],[[43871,43871],"mapped",[43858]],[[43872,43875],"valid"],[[43876,43877],"valid"],[[43878,43887],"disallowed"],[[43888,43888],"mapped",[5024]],[[43889,43889],"mapped",[5025]],[[43890,43890],"mapped",[5026]],[[43891,43891],"mapped",[5027]],[[43892,43892],"mapped",[5028]],[[43893,43893],"mapped",[5029]],[[43894,43894],"mapped",[5030]],[[43895,43895],"mapped",[5031]],[[43896,43896],"mapped",[5032]],[[43897,43897],"mapped",[5033]],[[43898,43898],"mapped",[5034]],[[43899,43899],"mapped",[5035]],[[43900,43900],"mapped",[5036]],[[43901,43901],"mapped",[5037]],[[43902,43902],"mapped",[5038]],[[43903,43903],"mapped",[5039]],[[43904,43904],"mapped",[5040]],[[43905,43905],"mapped",[5041]],[[43906,43906],"mapped",[5042]],[[43907,43907],"mapped",[5043]],[[43908,43908],"mapped",[5044]],[[43909,43909],"mapped",[5045]],[[43910,43910],"mapped",[5046]],[[43911,43911],"mapped",[5047]],[[43912,43912],"mapped",[5048]],[[43913,43913],"mapped",[5049]],[[43914,43914],"mapped",[5050]],[[43915,43915],"mapped",[5051]],[[43916,43916],"mapped",[5052]],[[43917,43917],"mapped",[5053]],[[43918,43918],"mapped",[5054]],[[43919,43919],"mapped",[5055]],[[43920,43920],"mapped",[5056]],[[43921,43921],"mapped",[5057]],[[43922,43922],"mapped",[5058]],[[43923,43923],"mapped",[5059]],[[43924,43924],"mapped",[5060]],[[43925,43925],"mapped",[5061]],[[43926,43926],"mapped",[5062]],[[43927,43927],"mapped",[5063]],[[43928,43928],"mapped",[5064]],[[43929,43929],"mapped",[5065]],[[43930,43930],"mapped",[5066]],[[43931,43931],"mapped",[5067]],[[43932,43932],"mapped",[5068]],[[43933,43933],"mapped",[5069]],[[43934,43934],"mapped",[5070]],[[43935,43935],"mapped",[5071]],[[43936,43936],"mapped",[5072]],[[43937,43937],"mapped",[5073]],[[43938,43938],"mapped",[5074]],[[43939,43939],"mapped",[5075]],[[43940,43940],"mapped",[5076]],[[43941,43941],"mapped",[5077]],[[43942,43942],"mapped",[5078]],[[43943,43943],"mapped",[5079]],[[43944,43944],"mapped",[5080]],[[43945,43945],"mapped",[5081]],[[43946,43946],"mapped",[5082]],[[43947,43947],"mapped",[5083]],[[43948,43948],"mapped",[5084]],[[43949,43949],"mapped",[5085]],[[43950,43950],"mapped",[5086]],[[43951,43951],"mapped",[5087]],[[43952,43952],"mapped",[5088]],[[43953,43953],"mapped",[5089]],[[43954,43954],"mapped",[5090]],[[43955,43955],"mapped",[5091]],[[43956,43956],"mapped",[5092]],[[43957,43957],"mapped",[5093]],[[43958,43958],"mapped",[5094]],[[43959,43959],"mapped",[5095]],[[43960,43960],"mapped",[5096]],[[43961,43961],"mapped",[5097]],[[43962,43962],"mapped",[5098]],[[43963,43963],"mapped",[5099]],[[43964,43964],"mapped",[5100]],[[43965,43965],"mapped",[5101]],[[43966,43966],"mapped",[5102]],[[43967,43967],"mapped",[5103]],[[43968,44010],"valid"],[[44011,44011],"valid",[],"NV8"],[[44012,44013],"valid"],[[44014,44015],"disallowed"],[[44016,44025],"valid"],[[44026,44031],"disallowed"],[[44032,55203],"valid"],[[55204,55215],"disallowed"],[[55216,55238],"valid",[],"NV8"],[[55239,55242],"disallowed"],[[55243,55291],"valid",[],"NV8"],[[55292,55295],"disallowed"],[[55296,57343],"disallowed"],[[57344,63743],"disallowed"],[[63744,63744],"mapped",[35912]],[[63745,63745],"mapped",[26356]],[[63746,63746],"mapped",[36554]],[[63747,63747],"mapped",[36040]],[[63748,63748],"mapped",[28369]],[[63749,63749],"mapped",[20018]],[[63750,63750],"mapped",[21477]],[[63751,63752],"mapped",[40860]],[[63753,63753],"mapped",[22865]],[[63754,63754],"mapped",[37329]],[[63755,63755],"mapped",[21895]],[[63756,63756],"mapped",[22856]],[[63757,63757],"mapped",[25078]],[[63758,63758],"mapped",[30313]],[[63759,63759],"mapped",[32645]],[[63760,63760],"mapped",[34367]],[[63761,63761],"mapped",[34746]],[[63762,63762],"mapped",[35064]],[[63763,63763],"mapped",[37007]],[[63764,63764],"mapped",[27138]],[[63765,63765],"mapped",[27931]],[[63766,63766],"mapped",[28889]],[[63767,63767],"mapped",[29662]],[[63768,63768],"mapped",[33853]],[[63769,63769],"mapped",[37226]],[[63770,63770],"mapped",[39409]],[[63771,63771],"mapped",[20098]],[[63772,63772],"mapped",[21365]],[[63773,63773],"mapped",[27396]],[[63774,63774],"mapped",[29211]],[[63775,63775],"mapped",[34349]],[[63776,63776],"mapped",[40478]],[[63777,63777],"mapped",[23888]],[[63778,63778],"mapped",[28651]],[[63779,63779],"mapped",[34253]],[[63780,63780],"mapped",[35172]],[[63781,63781],"mapped",[25289]],[[63782,63782],"mapped",[33240]],[[63783,63783],"mapped",[34847]],[[63784,63784],"mapped",[24266]],[[63785,63785],"mapped",[26391]],[[63786,63786],"mapped",[28010]],[[63787,63787],"mapped",[29436]],[[63788,63788],"mapped",[37070]],[[63789,63789],"mapped",[20358]],[[63790,63790],"mapped",[20919]],[[63791,63791],"mapped",[21214]],[[63792,63792],"mapped",[25796]],[[63793,63793],"mapped",[27347]],[[63794,63794],"mapped",[29200]],[[63795,63795],"mapped",[30439]],[[63796,63796],"mapped",[32769]],[[63797,63797],"mapped",[34310]],[[63798,63798],"mapped",[34396]],[[63799,63799],"mapped",[36335]],[[63800,63800],"mapped",[38706]],[[63801,63801],"mapped",[39791]],[[63802,63802],"mapped",[40442]],[[63803,63803],"mapped",[30860]],[[63804,63804],"mapped",[31103]],[[63805,63805],"mapped",[32160]],[[63806,63806],"mapped",[33737]],[[63807,63807],"mapped",[37636]],[[63808,63808],"mapped",[40575]],[[63809,63809],"mapped",[35542]],[[63810,63810],"mapped",[22751]],[[63811,63811],"mapped",[24324]],[[63812,63812],"mapped",[31840]],[[63813,63813],"mapped",[32894]],[[63814,63814],"mapped",[29282]],[[63815,63815],"mapped",[30922]],[[63816,63816],"mapped",[36034]],[[63817,63817],"mapped",[38647]],[[63818,63818],"mapped",[22744]],[[63819,63819],"mapped",[23650]],[[63820,63820],"mapped",[27155]],[[63821,63821],"mapped",[28122]],[[63822,63822],"mapped",[28431]],[[63823,63823],"mapped",[32047]],[[63824,63824],"mapped",[32311]],[[63825,63825],"mapped",[38475]],[[63826,63826],"mapped",[21202]],[[63827,63827],"mapped",[32907]],[[63828,63828],"mapped",[20956]],[[63829,63829],"mapped",[20940]],[[63830,63830],"mapped",[31260]],[[63831,63831],"mapped",[32190]],[[63832,63832],"mapped",[33777]],[[63833,63833],"mapped",[38517]],[[63834,63834],"mapped",[35712]],[[63835,63835],"mapped",[25295]],[[63836,63836],"mapped",[27138]],[[63837,63837],"mapped",[35582]],[[63838,63838],"mapped",[20025]],[[63839,63839],"mapped",[23527]],[[63840,63840],"mapped",[24594]],[[63841,63841],"mapped",[29575]],[[63842,63842],"mapped",[30064]],[[63843,63843],"mapped",[21271]],[[63844,63844],"mapped",[30971]],[[63845,63845],"mapped",[20415]],[[63846,63846],"mapped",[24489]],[[63847,63847],"mapped",[19981]],[[63848,63848],"mapped",[27852]],[[63849,63849],"mapped",[25976]],[[63850,63850],"mapped",[32034]],[[63851,63851],"mapped",[21443]],[[63852,63852],"mapped",[22622]],[[63853,63853],"mapped",[30465]],[[63854,63854],"mapped",[33865]],[[63855,63855],"mapped",[35498]],[[63856,63856],"mapped",[27578]],[[63857,63857],"mapped",[36784]],[[63858,63858],"mapped",[27784]],[[63859,63859],"mapped",[25342]],[[63860,63860],"mapped",[33509]],[[63861,63861],"mapped",[25504]],[[63862,63862],"mapped",[30053]],[[63863,63863],"mapped",[20142]],[[63864,63864],"mapped",[20841]],[[63865,63865],"mapped",[20937]],[[63866,63866],"mapped",[26753]],[[63867,63867],"mapped",[31975]],[[63868,63868],"mapped",[33391]],[[63869,63869],"mapped",[35538]],[[63870,63870],"mapped",[37327]],[[63871,63871],"mapped",[21237]],[[63872,63872],"mapped",[21570]],[[63873,63873],"mapped",[22899]],[[63874,63874],"mapped",[24300]],[[63875,63875],"mapped",[26053]],[[63876,63876],"mapped",[28670]],[[63877,63877],"mapped",[31018]],[[63878,63878],"mapped",[38317]],[[63879,63879],"mapped",[39530]],[[63880,63880],"mapped",[40599]],[[63881,63881],"mapped",[40654]],[[63882,63882],"mapped",[21147]],[[63883,63883],"mapped",[26310]],[[63884,63884],"mapped",[27511]],[[63885,63885],"mapped",[36706]],[[63886,63886],"mapped",[24180]],[[63887,63887],"mapped",[24976]],[[63888,63888],"mapped",[25088]],[[63889,63889],"mapped",[25754]],[[63890,63890],"mapped",[28451]],[[63891,63891],"mapped",[29001]],[[63892,63892],"mapped",[29833]],[[63893,63893],"mapped",[31178]],[[63894,63894],"mapped",[32244]],[[63895,63895],"mapped",[32879]],[[63896,63896],"mapped",[36646]],[[63897,63897],"mapped",[34030]],[[63898,63898],"mapped",[36899]],[[63899,63899],"mapped",[37706]],[[63900,63900],"mapped",[21015]],[[63901,63901],"mapped",[21155]],[[63902,63902],"mapped",[21693]],[[63903,63903],"mapped",[28872]],[[63904,63904],"mapped",[35010]],[[63905,63905],"mapped",[35498]],[[63906,63906],"mapped",[24265]],[[63907,63907],"mapped",[24565]],[[63908,63908],"mapped",[25467]],[[63909,63909],"mapped",[27566]],[[63910,63910],"mapped",[31806]],[[63911,63911],"mapped",[29557]],[[63912,63912],"mapped",[20196]],[[63913,63913],"mapped",[22265]],[[63914,63914],"mapped",[23527]],[[63915,63915],"mapped",[23994]],[[63916,63916],"mapped",[24604]],[[63917,63917],"mapped",[29618]],[[63918,63918],"mapped",[29801]],[[63919,63919],"mapped",[32666]],[[63920,63920],"mapped",[32838]],[[63921,63921],"mapped",[37428]],[[63922,63922],"mapped",[38646]],[[63923,63923],"mapped",[38728]],[[63924,63924],"mapped",[38936]],[[63925,63925],"mapped",[20363]],[[63926,63926],"mapped",[31150]],[[63927,63927],"mapped",[37300]],[[63928,63928],"mapped",[38584]],[[63929,63929],"mapped",[24801]],[[63930,63930],"mapped",[20102]],[[63931,63931],"mapped",[20698]],[[63932,63932],"mapped",[23534]],[[63933,63933],"mapped",[23615]],[[63934,63934],"mapped",[26009]],[[63935,63935],"mapped",[27138]],[[63936,63936],"mapped",[29134]],[[63937,63937],"mapped",[30274]],[[63938,63938],"mapped",[34044]],[[63939,63939],"mapped",[36988]],[[63940,63940],"mapped",[40845]],[[63941,63941],"mapped",[26248]],[[63942,63942],"mapped",[38446]],[[63943,63943],"mapped",[21129]],[[63944,63944],"mapped",[26491]],[[63945,63945],"mapped",[26611]],[[63946,63946],"mapped",[27969]],[[63947,63947],"mapped",[28316]],[[63948,63948],"mapped",[29705]],[[63949,63949],"mapped",[30041]],[[63950,63950],"mapped",[30827]],[[63951,63951],"mapped",[32016]],[[63952,63952],"mapped",[39006]],[[63953,63953],"mapped",[20845]],[[63954,63954],"mapped",[25134]],[[63955,63955],"mapped",[38520]],[[63956,63956],"mapped",[20523]],[[63957,63957],"mapped",[23833]],[[63958,63958],"mapped",[28138]],[[63959,63959],"mapped",[36650]],[[63960,63960],"mapped",[24459]],[[63961,63961],"mapped",[24900]],[[63962,63962],"mapped",[26647]],[[63963,63963],"mapped",[29575]],[[63964,63964],"mapped",[38534]],[[63965,63965],"mapped",[21033]],[[63966,63966],"mapped",[21519]],[[63967,63967],"mapped",[23653]],[[63968,63968],"mapped",[26131]],[[63969,63969],"mapped",[26446]],[[63970,63970],"mapped",[26792]],[[63971,63971],"mapped",[27877]],[[63972,63972],"mapped",[29702]],[[63973,63973],"mapped",[30178]],[[63974,63974],"mapped",[32633]],[[63975,63975],"mapped",[35023]],[[63976,63976],"mapped",[35041]],[[63977,63977],"mapped",[37324]],[[63978,63978],"mapped",[38626]],[[63979,63979],"mapped",[21311]],[[63980,63980],"mapped",[28346]],[[63981,63981],"mapped",[21533]],[[63982,63982],"mapped",[29136]],[[63983,63983],"mapped",[29848]],[[63984,63984],"mapped",[34298]],[[63985,63985],"mapped",[38563]],[[63986,63986],"mapped",[40023]],[[63987,63987],"mapped",[40607]],[[63988,63988],"mapped",[26519]],[[63989,63989],"mapped",[28107]],[[63990,63990],"mapped",[33256]],[[63991,63991],"mapped",[31435]],[[63992,63992],"mapped",[31520]],[[63993,63993],"mapped",[31890]],[[63994,63994],"mapped",[29376]],[[63995,63995],"mapped",[28825]],[[63996,63996],"mapped",[35672]],[[63997,63997],"mapped",[20160]],[[63998,63998],"mapped",[33590]],[[63999,63999],"mapped",[21050]],[[64000,64000],"mapped",[20999]],[[64001,64001],"mapped",[24230]],[[64002,64002],"mapped",[25299]],[[64003,64003],"mapped",[31958]],[[64004,64004],"mapped",[23429]],[[64005,64005],"mapped",[27934]],[[64006,64006],"mapped",[26292]],[[64007,64007],"mapped",[36667]],[[64008,64008],"mapped",[34892]],[[64009,64009],"mapped",[38477]],[[64010,64010],"mapped",[35211]],[[64011,64011],"mapped",[24275]],[[64012,64012],"mapped",[20800]],[[64013,64013],"mapped",[21952]],[[64014,64015],"valid"],[[64016,64016],"mapped",[22618]],[[64017,64017],"valid"],[[64018,64018],"mapped",[26228]],[[64019,64020],"valid"],[[64021,64021],"mapped",[20958]],[[64022,64022],"mapped",[29482]],[[64023,64023],"mapped",[30410]],[[64024,64024],"mapped",[31036]],[[64025,64025],"mapped",[31070]],[[64026,64026],"mapped",[31077]],[[64027,64027],"mapped",[31119]],[[64028,64028],"mapped",[38742]],[[64029,64029],"mapped",[31934]],[[64030,64030],"mapped",[32701]],[[64031,64031],"valid"],[[64032,64032],"mapped",[34322]],[[64033,64033],"valid"],[[64034,64034],"mapped",[35576]],[[64035,64036],"valid"],[[64037,64037],"mapped",[36920]],[[64038,64038],"mapped",[37117]],[[64039,64041],"valid"],[[64042,64042],"mapped",[39151]],[[64043,64043],"mapped",[39164]],[[64044,64044],"mapped",[39208]],[[64045,64045],"mapped",[40372]],[[64046,64046],"mapped",[37086]],[[64047,64047],"mapped",[38583]],[[64048,64048],"mapped",[20398]],[[64049,64049],"mapped",[20711]],[[64050,64050],"mapped",[20813]],[[64051,64051],"mapped",[21193]],[[64052,64052],"mapped",[21220]],[[64053,64053],"mapped",[21329]],[[64054,64054],"mapped",[21917]],[[64055,64055],"mapped",[22022]],[[64056,64056],"mapped",[22120]],[[64057,64057],"mapped",[22592]],[[64058,64058],"mapped",[22696]],[[64059,64059],"mapped",[23652]],[[64060,64060],"mapped",[23662]],[[64061,64061],"mapped",[24724]],[[64062,64062],"mapped",[24936]],[[64063,64063],"mapped",[24974]],[[64064,64064],"mapped",[25074]],[[64065,64065],"mapped",[25935]],[[64066,64066],"mapped",[26082]],[[64067,64067],"mapped",[26257]],[[64068,64068],"mapped",[26757]],[[64069,64069],"mapped",[28023]],[[64070,64070],"mapped",[28186]],[[64071,64071],"mapped",[28450]],[[64072,64072],"mapped",[29038]],[[64073,64073],"mapped",[29227]],[[64074,64074],"mapped",[29730]],[[64075,64075],"mapped",[30865]],[[64076,64076],"mapped",[31038]],[[64077,64077],"mapped",[31049]],[[64078,64078],"mapped",[31048]],[[64079,64079],"mapped",[31056]],[[64080,64080],"mapped",[31062]],[[64081,64081],"mapped",[31069]],[[64082,64082],"mapped",[31117]],[[64083,64083],"mapped",[31118]],[[64084,64084],"mapped",[31296]],[[64085,64085],"mapped",[31361]],[[64086,64086],"mapped",[31680]],[[64087,64087],"mapped",[32244]],[[64088,64088],"mapped",[32265]],[[64089,64089],"mapped",[32321]],[[64090,64090],"mapped",[32626]],[[64091,64091],"mapped",[32773]],[[64092,64092],"mapped",[33261]],[[64093,64094],"mapped",[33401]],[[64095,64095],"mapped",[33879]],[[64096,64096],"mapped",[35088]],[[64097,64097],"mapped",[35222]],[[64098,64098],"mapped",[35585]],[[64099,64099],"mapped",[35641]],[[64100,64100],"mapped",[36051]],[[64101,64101],"mapped",[36104]],[[64102,64102],"mapped",[36790]],[[64103,64103],"mapped",[36920]],[[64104,64104],"mapped",[38627]],[[64105,64105],"mapped",[38911]],[[64106,64106],"mapped",[38971]],[[64107,64107],"mapped",[24693]],[[64108,64108],"mapped",[148206]],[[64109,64109],"mapped",[33304]],[[64110,64111],"disallowed"],[[64112,64112],"mapped",[20006]],[[64113,64113],"mapped",[20917]],[[64114,64114],"mapped",[20840]],[[64115,64115],"mapped",[20352]],[[64116,64116],"mapped",[20805]],[[64117,64117],"mapped",[20864]],[[64118,64118],"mapped",[21191]],[[64119,64119],"mapped",[21242]],[[64120,64120],"mapped",[21917]],[[64121,64121],"mapped",[21845]],[[64122,64122],"mapped",[21913]],[[64123,64123],"mapped",[21986]],[[64124,64124],"mapped",[22618]],[[64125,64125],"mapped",[22707]],[[64126,64126],"mapped",[22852]],[[64127,64127],"mapped",[22868]],[[64128,64128],"mapped",[23138]],[[64129,64129],"mapped",[23336]],[[64130,64130],"mapped",[24274]],[[64131,64131],"mapped",[24281]],[[64132,64132],"mapped",[24425]],[[64133,64133],"mapped",[24493]],[[64134,64134],"mapped",[24792]],[[64135,64135],"mapped",[24910]],[[64136,64136],"mapped",[24840]],[[64137,64137],"mapped",[24974]],[[64138,64138],"mapped",[24928]],[[64139,64139],"mapped",[25074]],[[64140,64140],"mapped",[25140]],[[64141,64141],"mapped",[25540]],[[64142,64142],"mapped",[25628]],[[64143,64143],"mapped",[25682]],[[64144,64144],"mapped",[25942]],[[64145,64145],"mapped",[26228]],[[64146,64146],"mapped",[26391]],[[64147,64147],"mapped",[26395]],[[64148,64148],"mapped",[26454]],[[64149,64149],"mapped",[27513]],[[64150,64150],"mapped",[27578]],[[64151,64151],"mapped",[27969]],[[64152,64152],"mapped",[28379]],[[64153,64153],"mapped",[28363]],[[64154,64154],"mapped",[28450]],[[64155,64155],"mapped",[28702]],[[64156,64156],"mapped",[29038]],[[64157,64157],"mapped",[30631]],[[64158,64158],"mapped",[29237]],[[64159,64159],"mapped",[29359]],[[64160,64160],"mapped",[29482]],[[64161,64161],"mapped",[29809]],[[64162,64162],"mapped",[29958]],[[64163,64163],"mapped",[30011]],[[64164,64164],"mapped",[30237]],[[64165,64165],"mapped",[30239]],[[64166,64166],"mapped",[30410]],[[64167,64167],"mapped",[30427]],[[64168,64168],"mapped",[30452]],[[64169,64169],"mapped",[30538]],[[64170,64170],"mapped",[30528]],[[64171,64171],"mapped",[30924]],[[64172,64172],"mapped",[31409]],[[64173,64173],"mapped",[31680]],[[64174,64174],"mapped",[31867]],[[64175,64175],"mapped",[32091]],[[64176,64176],"mapped",[32244]],[[64177,64177],"mapped",[32574]],[[64178,64178],"mapped",[32773]],[[64179,64179],"mapped",[33618]],[[64180,64180],"mapped",[33775]],[[64181,64181],"mapped",[34681]],[[64182,64182],"mapped",[35137]],[[64183,64183],"mapped",[35206]],[[64184,64184],"mapped",[35222]],[[64185,64185],"mapped",[35519]],[[64186,64186],"mapped",[35576]],[[64187,64187],"mapped",[35531]],[[64188,64188],"mapped",[35585]],[[64189,64189],"mapped",[35582]],[[64190,64190],"mapped",[35565]],[[64191,64191],"mapped",[35641]],[[64192,64192],"mapped",[35722]],[[64193,64193],"mapped",[36104]],[[64194,64194],"mapped",[36664]],[[64195,64195],"mapped",[36978]],[[64196,64196],"mapped",[37273]],[[64197,64197],"mapped",[37494]],[[64198,64198],"mapped",[38524]],[[64199,64199],"mapped",[38627]],[[64200,64200],"mapped",[38742]],[[64201,64201],"mapped",[38875]],[[64202,64202],"mapped",[38911]],[[64203,64203],"mapped",[38923]],[[64204,64204],"mapped",[38971]],[[64205,64205],"mapped",[39698]],[[64206,64206],"mapped",[40860]],[[64207,64207],"mapped",[141386]],[[64208,64208],"mapped",[141380]],[[64209,64209],"mapped",[144341]],[[64210,64210],"mapped",[15261]],[[64211,64211],"mapped",[16408]],[[64212,64212],"mapped",[16441]],[[64213,64213],"mapped",[152137]],[[64214,64214],"mapped",[154832]],[[64215,64215],"mapped",[163539]],[[64216,64216],"mapped",[40771]],[[64217,64217],"mapped",[40846]],[[64218,64255],"disallowed"],[[64256,64256],"mapped",[102,102]],[[64257,64257],"mapped",[102,105]],[[64258,64258],"mapped",[102,108]],[[64259,64259],"mapped",[102,102,105]],[[64260,64260],"mapped",[102,102,108]],[[64261,64262],"mapped",[115,116]],[[64263,64274],"disallowed"],[[64275,64275],"mapped",[1396,1398]],[[64276,64276],"mapped",[1396,1381]],[[64277,64277],"mapped",[1396,1387]],[[64278,64278],"mapped",[1406,1398]],[[64279,64279],"mapped",[1396,1389]],[[64280,64284],"disallowed"],[[64285,64285],"mapped",[1497,1460]],[[64286,64286],"valid"],[[64287,64287],"mapped",[1522,1463]],[[64288,64288],"mapped",[1506]],[[64289,64289],"mapped",[1488]],[[64290,64290],"mapped",[1491]],[[64291,64291],"mapped",[1492]],[[64292,64292],"mapped",[1499]],[[64293,64293],"mapped",[1500]],[[64294,64294],"mapped",[1501]],[[64295,64295],"mapped",[1512]],[[64296,64296],"mapped",[1514]],[[64297,64297],"disallowed_STD3_mapped",[43]],[[64298,64298],"mapped",[1513,1473]],[[64299,64299],"mapped",[1513,1474]],[[64300,64300],"mapped",[1513,1468,1473]],[[64301,64301],"mapped",[1513,1468,1474]],[[64302,64302],"mapped",[1488,1463]],[[64303,64303],"mapped",[1488,1464]],[[64304,64304],"mapped",[1488,1468]],[[64305,64305],"mapped",[1489,1468]],[[64306,64306],"mapped",[1490,1468]],[[64307,64307],"mapped",[1491,1468]],[[64308,64308],"mapped",[1492,1468]],[[64309,64309],"mapped",[1493,1468]],[[64310,64310],"mapped",[1494,1468]],[[64311,64311],"disallowed"],[[64312,64312],"mapped",[1496,1468]],[[64313,64313],"mapped",[1497,1468]],[[64314,64314],"mapped",[1498,1468]],[[64315,64315],"mapped",[1499,1468]],[[64316,64316],"mapped",[1500,1468]],[[64317,64317],"disallowed"],[[64318,64318],"mapped",[1502,1468]],[[64319,64319],"disallowed"],[[64320,64320],"mapped",[1504,1468]],[[64321,64321],"mapped",[1505,1468]],[[64322,64322],"disallowed"],[[64323,64323],"mapped",[1507,1468]],[[64324,64324],"mapped",[1508,1468]],[[64325,64325],"disallowed"],[[64326,64326],"mapped",[1510,1468]],[[64327,64327],"mapped",[1511,1468]],[[64328,64328],"mapped",[1512,1468]],[[64329,64329],"mapped",[1513,1468]],[[64330,64330],"mapped",[1514,1468]],[[64331,64331],"mapped",[1493,1465]],[[64332,64332],"mapped",[1489,1471]],[[64333,64333],"mapped",[1499,1471]],[[64334,64334],"mapped",[1508,1471]],[[64335,64335],"mapped",[1488,1500]],[[64336,64337],"mapped",[1649]],[[64338,64341],"mapped",[1659]],[[64342,64345],"mapped",[1662]],[[64346,64349],"mapped",[1664]],[[64350,64353],"mapped",[1658]],[[64354,64357],"mapped",[1663]],[[64358,64361],"mapped",[1657]],[[64362,64365],"mapped",[1700]],[[64366,64369],"mapped",[1702]],[[64370,64373],"mapped",[1668]],[[64374,64377],"mapped",[1667]],[[64378,64381],"mapped",[1670]],[[64382,64385],"mapped",[1671]],[[64386,64387],"mapped",[1677]],[[64388,64389],"mapped",[1676]],[[64390,64391],"mapped",[1678]],[[64392,64393],"mapped",[1672]],[[64394,64395],"mapped",[1688]],[[64396,64397],"mapped",[1681]],[[64398,64401],"mapped",[1705]],[[64402,64405],"mapped",[1711]],[[64406,64409],"mapped",[1715]],[[64410,64413],"mapped",[1713]],[[64414,64415],"mapped",[1722]],[[64416,64419],"mapped",[1723]],[[64420,64421],"mapped",[1728]],[[64422,64425],"mapped",[1729]],[[64426,64429],"mapped",[1726]],[[64430,64431],"mapped",[1746]],[[64432,64433],"mapped",[1747]],[[64434,64449],"valid",[],"NV8"],[[64450,64466],"disallowed"],[[64467,64470],"mapped",[1709]],[[64471,64472],"mapped",[1735]],[[64473,64474],"mapped",[1734]],[[64475,64476],"mapped",[1736]],[[64477,64477],"mapped",[1735,1652]],[[64478,64479],"mapped",[1739]],[[64480,64481],"mapped",[1733]],[[64482,64483],"mapped",[1737]],[[64484,64487],"mapped",[1744]],[[64488,64489],"mapped",[1609]],[[64490,64491],"mapped",[1574,1575]],[[64492,64493],"mapped",[1574,1749]],[[64494,64495],"mapped",[1574,1608]],[[64496,64497],"mapped",[1574,1735]],[[64498,64499],"mapped",[1574,1734]],[[64500,64501],"mapped",[1574,1736]],[[64502,64504],"mapped",[1574,1744]],[[64505,64507],"mapped",[1574,1609]],[[64508,64511],"mapped",[1740]],[[64512,64512],"mapped",[1574,1580]],[[64513,64513],"mapped",[1574,1581]],[[64514,64514],"mapped",[1574,1605]],[[64515,64515],"mapped",[1574,1609]],[[64516,64516],"mapped",[1574,1610]],[[64517,64517],"mapped",[1576,1580]],[[64518,64518],"mapped",[1576,1581]],[[64519,64519],"mapped",[1576,1582]],[[64520,64520],"mapped",[1576,1605]],[[64521,64521],"mapped",[1576,1609]],[[64522,64522],"mapped",[1576,1610]],[[64523,64523],"mapped",[1578,1580]],[[64524,64524],"mapped",[1578,1581]],[[64525,64525],"mapped",[1578,1582]],[[64526,64526],"mapped",[1578,1605]],[[64527,64527],"mapped",[1578,1609]],[[64528,64528],"mapped",[1578,1610]],[[64529,64529],"mapped",[1579,1580]],[[64530,64530],"mapped",[1579,1605]],[[64531,64531],"mapped",[1579,1609]],[[64532,64532],"mapped",[1579,1610]],[[64533,64533],"mapped",[1580,1581]],[[64534,64534],"mapped",[1580,1605]],[[64535,64535],"mapped",[1581,1580]],[[64536,64536],"mapped",[1581,1605]],[[64537,64537],"mapped",[1582,1580]],[[64538,64538],"mapped",[1582,1581]],[[64539,64539],"mapped",[1582,1605]],[[64540,64540],"mapped",[1587,1580]],[[64541,64541],"mapped",[1587,1581]],[[64542,64542],"mapped",[1587,1582]],[[64543,64543],"mapped",[1587,1605]],[[64544,64544],"mapped",[1589,1581]],[[64545,64545],"mapped",[1589,1605]],[[64546,64546],"mapped",[1590,1580]],[[64547,64547],"mapped",[1590,1581]],[[64548,64548],"mapped",[1590,1582]],[[64549,64549],"mapped",[1590,1605]],[[64550,64550],"mapped",[1591,1581]],[[64551,64551],"mapped",[1591,1605]],[[64552,64552],"mapped",[1592,1605]],[[64553,64553],"mapped",[1593,1580]],[[64554,64554],"mapped",[1593,1605]],[[64555,64555],"mapped",[1594,1580]],[[64556,64556],"mapped",[1594,1605]],[[64557,64557],"mapped",[1601,1580]],[[64558,64558],"mapped",[1601,1581]],[[64559,64559],"mapped",[1601,1582]],[[64560,64560],"mapped",[1601,1605]],[[64561,64561],"mapped",[1601,1609]],[[64562,64562],"mapped",[1601,1610]],[[64563,64563],"mapped",[1602,1581]],[[64564,64564],"mapped",[1602,1605]],[[64565,64565],"mapped",[1602,1609]],[[64566,64566],"mapped",[1602,1610]],[[64567,64567],"mapped",[1603,1575]],[[64568,64568],"mapped",[1603,1580]],[[64569,64569],"mapped",[1603,1581]],[[64570,64570],"mapped",[1603,1582]],[[64571,64571],"mapped",[1603,1604]],[[64572,64572],"mapped",[1603,1605]],[[64573,64573],"mapped",[1603,1609]],[[64574,64574],"mapped",[1603,1610]],[[64575,64575],"mapped",[1604,1580]],[[64576,64576],"mapped",[1604,1581]],[[64577,64577],"mapped",[1604,1582]],[[64578,64578],"mapped",[1604,1605]],[[64579,64579],"mapped",[1604,1609]],[[64580,64580],"mapped",[1604,1610]],[[64581,64581],"mapped",[1605,1580]],[[64582,64582],"mapped",[1605,1581]],[[64583,64583],"mapped",[1605,1582]],[[64584,64584],"mapped",[1605,1605]],[[64585,64585],"mapped",[1605,1609]],[[64586,64586],"mapped",[1605,1610]],[[64587,64587],"mapped",[1606,1580]],[[64588,64588],"mapped",[1606,1581]],[[64589,64589],"mapped",[1606,1582]],[[64590,64590],"mapped",[1606,1605]],[[64591,64591],"mapped",[1606,1609]],[[64592,64592],"mapped",[1606,1610]],[[64593,64593],"mapped",[1607,1580]],[[64594,64594],"mapped",[1607,1605]],[[64595,64595],"mapped",[1607,1609]],[[64596,64596],"mapped",[1607,1610]],[[64597,64597],"mapped",[1610,1580]],[[64598,64598],"mapped",[1610,1581]],[[64599,64599],"mapped",[1610,1582]],[[64600,64600],"mapped",[1610,1605]],[[64601,64601],"mapped",[1610,1609]],[[64602,64602],"mapped",[1610,1610]],[[64603,64603],"mapped",[1584,1648]],[[64604,64604],"mapped",[1585,1648]],[[64605,64605],"mapped",[1609,1648]],[[64606,64606],"disallowed_STD3_mapped",[32,1612,1617]],[[64607,64607],"disallowed_STD3_mapped",[32,1613,1617]],[[64608,64608],"disallowed_STD3_mapped",[32,1614,1617]],[[64609,64609],"disallowed_STD3_mapped",[32,1615,1617]],[[64610,64610],"disallowed_STD3_mapped",[32,1616,1617]],[[64611,64611],"disallowed_STD3_mapped",[32,1617,1648]],[[64612,64612],"mapped",[1574,1585]],[[64613,64613],"mapped",[1574,1586]],[[64614,64614],"mapped",[1574,1605]],[[64615,64615],"mapped",[1574,1606]],[[64616,64616],"mapped",[1574,1609]],[[64617,64617],"mapped",[1574,1610]],[[64618,64618],"mapped",[1576,1585]],[[64619,64619],"mapped",[1576,1586]],[[64620,64620],"mapped",[1576,1605]],[[64621,64621],"mapped",[1576,1606]],[[64622,64622],"mapped",[1576,1609]],[[64623,64623],"mapped",[1576,1610]],[[64624,64624],"mapped",[1578,1585]],[[64625,64625],"mapped",[1578,1586]],[[64626,64626],"mapped",[1578,1605]],[[64627,64627],"mapped",[1578,1606]],[[64628,64628],"mapped",[1578,1609]],[[64629,64629],"mapped",[1578,1610]],[[64630,64630],"mapped",[1579,1585]],[[64631,64631],"mapped",[1579,1586]],[[64632,64632],"mapped",[1579,1605]],[[64633,64633],"mapped",[1579,1606]],[[64634,64634],"mapped",[1579,1609]],[[64635,64635],"mapped",[1579,1610]],[[64636,64636],"mapped",[1601,1609]],[[64637,64637],"mapped",[1601,1610]],[[64638,64638],"mapped",[1602,1609]],[[64639,64639],"mapped",[1602,1610]],[[64640,64640],"mapped",[1603,1575]],[[64641,64641],"mapped",[1603,1604]],[[64642,64642],"mapped",[1603,1605]],[[64643,64643],"mapped",[1603,1609]],[[64644,64644],"mapped",[1603,1610]],[[64645,64645],"mapped",[1604,1605]],[[64646,64646],"mapped",[1604,1609]],[[64647,64647],"mapped",[1604,1610]],[[64648,64648],"mapped",[1605,1575]],[[64649,64649],"mapped",[1605,1605]],[[64650,64650],"mapped",[1606,1585]],[[64651,64651],"mapped",[1606,1586]],[[64652,64652],"mapped",[1606,1605]],[[64653,64653],"mapped",[1606,1606]],[[64654,64654],"mapped",[1606,1609]],[[64655,64655],"mapped",[1606,1610]],[[64656,64656],"mapped",[1609,1648]],[[64657,64657],"mapped",[1610,1585]],[[64658,64658],"mapped",[1610,1586]],[[64659,64659],"mapped",[1610,1605]],[[64660,64660],"mapped",[1610,1606]],[[64661,64661],"mapped",[1610,1609]],[[64662,64662],"mapped",[1610,1610]],[[64663,64663],"mapped",[1574,1580]],[[64664,64664],"mapped",[1574,1581]],[[64665,64665],"mapped",[1574,1582]],[[64666,64666],"mapped",[1574,1605]],[[64667,64667],"mapped",[1574,1607]],[[64668,64668],"mapped",[1576,1580]],[[64669,64669],"mapped",[1576,1581]],[[64670,64670],"mapped",[1576,1582]],[[64671,64671],"mapped",[1576,1605]],[[64672,64672],"mapped",[1576,1607]],[[64673,64673],"mapped",[1578,1580]],[[64674,64674],"mapped",[1578,1581]],[[64675,64675],"mapped",[1578,1582]],[[64676,64676],"mapped",[1578,1605]],[[64677,64677],"mapped",[1578,1607]],[[64678,64678],"mapped",[1579,1605]],[[64679,64679],"mapped",[1580,1581]],[[64680,64680],"mapped",[1580,1605]],[[64681,64681],"mapped",[1581,1580]],[[64682,64682],"mapped",[1581,1605]],[[64683,64683],"mapped",[1582,1580]],[[64684,64684],"mapped",[1582,1605]],[[64685,64685],"mapped",[1587,1580]],[[64686,64686],"mapped",[1587,1581]],[[64687,64687],"mapped",[1587,1582]],[[64688,64688],"mapped",[1587,1605]],[[64689,64689],"mapped",[1589,1581]],[[64690,64690],"mapped",[1589,1582]],[[64691,64691],"mapped",[1589,1605]],[[64692,64692],"mapped",[1590,1580]],[[64693,64693],"mapped",[1590,1581]],[[64694,64694],"mapped",[1590,1582]],[[64695,64695],"mapped",[1590,1605]],[[64696,64696],"mapped",[1591,1581]],[[64697,64697],"mapped",[1592,1605]],[[64698,64698],"mapped",[1593,1580]],[[64699,64699],"mapped",[1593,1605]],[[64700,64700],"mapped",[1594,1580]],[[64701,64701],"mapped",[1594,1605]],[[64702,64702],"mapped",[1601,1580]],[[64703,64703],"mapped",[1601,1581]],[[64704,64704],"mapped",[1601,1582]],[[64705,64705],"mapped",[1601,1605]],[[64706,64706],"mapped",[1602,1581]],[[64707,64707],"mapped",[1602,1605]],[[64708,64708],"mapped",[1603,1580]],[[64709,64709],"mapped",[1603,1581]],[[64710,64710],"mapped",[1603,1582]],[[64711,64711],"mapped",[1603,1604]],[[64712,64712],"mapped",[1603,1605]],[[64713,64713],"mapped",[1604,1580]],[[64714,64714],"mapped",[1604,1581]],[[64715,64715],"mapped",[1604,1582]],[[64716,64716],"mapped",[1604,1605]],[[64717,64717],"mapped",[1604,1607]],[[64718,64718],"mapped",[1605,1580]],[[64719,64719],"mapped",[1605,1581]],[[64720,64720],"mapped",[1605,1582]],[[64721,64721],"mapped",[1605,1605]],[[64722,64722],"mapped",[1606,1580]],[[64723,64723],"mapped",[1606,1581]],[[64724,64724],"mapped",[1606,1582]],[[64725,64725],"mapped",[1606,1605]],[[64726,64726],"mapped",[1606,1607]],[[64727,64727],"mapped",[1607,1580]],[[64728,64728],"mapped",[1607,1605]],[[64729,64729],"mapped",[1607,1648]],[[64730,64730],"mapped",[1610,1580]],[[64731,64731],"mapped",[1610,1581]],[[64732,64732],"mapped",[1610,1582]],[[64733,64733],"mapped",[1610,1605]],[[64734,64734],"mapped",[1610,1607]],[[64735,64735],"mapped",[1574,1605]],[[64736,64736],"mapped",[1574,1607]],[[64737,64737],"mapped",[1576,1605]],[[64738,64738],"mapped",[1576,1607]],[[64739,64739],"mapped",[1578,1605]],[[64740,64740],"mapped",[1578,1607]],[[64741,64741],"mapped",[1579,1605]],[[64742,64742],"mapped",[1579,1607]],[[64743,64743],"mapped",[1587,1605]],[[64744,64744],"mapped",[1587,1607]],[[64745,64745],"mapped",[1588,1605]],[[64746,64746],"mapped",[1588,1607]],[[64747,64747],"mapped",[1603,1604]],[[64748,64748],"mapped",[1603,1605]],[[64749,64749],"mapped",[1604,1605]],[[64750,64750],"mapped",[1606,1605]],[[64751,64751],"mapped",[1606,1607]],[[64752,64752],"mapped",[1610,1605]],[[64753,64753],"mapped",[1610,1607]],[[64754,64754],"mapped",[1600,1614,1617]],[[64755,64755],"mapped",[1600,1615,1617]],[[64756,64756],"mapped",[1600,1616,1617]],[[64757,64757],"mapped",[1591,1609]],[[64758,64758],"mapped",[1591,1610]],[[64759,64759],"mapped",[1593,1609]],[[64760,64760],"mapped",[1593,1610]],[[64761,64761],"mapped",[1594,1609]],[[64762,64762],"mapped",[1594,1610]],[[64763,64763],"mapped",[1587,1609]],[[64764,64764],"mapped",[1587,1610]],[[64765,64765],"mapped",[1588,1609]],[[64766,64766],"mapped",[1588,1610]],[[64767,64767],"mapped",[1581,1609]],[[64768,64768],"mapped",[1581,1610]],[[64769,64769],"mapped",[1580,1609]],[[64770,64770],"mapped",[1580,1610]],[[64771,64771],"mapped",[1582,1609]],[[64772,64772],"mapped",[1582,1610]],[[64773,64773],"mapped",[1589,1609]],[[64774,64774],"mapped",[1589,1610]],[[64775,64775],"mapped",[1590,1609]],[[64776,64776],"mapped",[1590,1610]],[[64777,64777],"mapped",[1588,1580]],[[64778,64778],"mapped",[1588,1581]],[[64779,64779],"mapped",[1588,1582]],[[64780,64780],"mapped",[1588,1605]],[[64781,64781],"mapped",[1588,1585]],[[64782,64782],"mapped",[1587,1585]],[[64783,64783],"mapped",[1589,1585]],[[64784,64784],"mapped",[1590,1585]],[[64785,64785],"mapped",[1591,1609]],[[64786,64786],"mapped",[1591,1610]],[[64787,64787],"mapped",[1593,1609]],[[64788,64788],"mapped",[1593,1610]],[[64789,64789],"mapped",[1594,1609]],[[64790,64790],"mapped",[1594,1610]],[[64791,64791],"mapped",[1587,1609]],[[64792,64792],"mapped",[1587,1610]],[[64793,64793],"mapped",[1588,1609]],[[64794,64794],"mapped",[1588,1610]],[[64795,64795],"mapped",[1581,1609]],[[64796,64796],"mapped",[1581,1610]],[[64797,64797],"mapped",[1580,1609]],[[64798,64798],"mapped",[1580,1610]],[[64799,64799],"mapped",[1582,1609]],[[64800,64800],"mapped",[1582,1610]],[[64801,64801],"mapped",[1589,1609]],[[64802,64802],"mapped",[1589,1610]],[[64803,64803],"mapped",[1590,1609]],[[64804,64804],"mapped",[1590,1610]],[[64805,64805],"mapped",[1588,1580]],[[64806,64806],"mapped",[1588,1581]],[[64807,64807],"mapped",[1588,1582]],[[64808,64808],"mapped",[1588,1605]],[[64809,64809],"mapped",[1588,1585]],[[64810,64810],"mapped",[1587,1585]],[[64811,64811],"mapped",[1589,1585]],[[64812,64812],"mapped",[1590,1585]],[[64813,64813],"mapped",[1588,1580]],[[64814,64814],"mapped",[1588,1581]],[[64815,64815],"mapped",[1588,1582]],[[64816,64816],"mapped",[1588,1605]],[[64817,64817],"mapped",[1587,1607]],[[64818,64818],"mapped",[1588,1607]],[[64819,64819],"mapped",[1591,1605]],[[64820,64820],"mapped",[1587,1580]],[[64821,64821],"mapped",[1587,1581]],[[64822,64822],"mapped",[1587,1582]],[[64823,64823],"mapped",[1588,1580]],[[64824,64824],"mapped",[1588,1581]],[[64825,64825],"mapped",[1588,1582]],[[64826,64826],"mapped",[1591,1605]],[[64827,64827],"mapped",[1592,1605]],[[64828,64829],"mapped",[1575,1611]],[[64830,64831],"valid",[],"NV8"],[[64832,64847],"disallowed"],[[64848,64848],"mapped",[1578,1580,1605]],[[64849,64850],"mapped",[1578,1581,1580]],[[64851,64851],"mapped",[1578,1581,1605]],[[64852,64852],"mapped",[1578,1582,1605]],[[64853,64853],"mapped",[1578,1605,1580]],[[64854,64854],"mapped",[1578,1605,1581]],[[64855,64855],"mapped",[1578,1605,1582]],[[64856,64857],"mapped",[1580,1605,1581]],[[64858,64858],"mapped",[1581,1605,1610]],[[64859,64859],"mapped",[1581,1605,1609]],[[64860,64860],"mapped",[1587,1581,1580]],[[64861,64861],"mapped",[1587,1580,1581]],[[64862,64862],"mapped",[1587,1580,1609]],[[64863,64864],"mapped",[1587,1605,1581]],[[64865,64865],"mapped",[1587,1605,1580]],[[64866,64867],"mapped",[1587,1605,1605]],[[64868,64869],"mapped",[1589,1581,1581]],[[64870,64870],"mapped",[1589,1605,1605]],[[64871,64872],"mapped",[1588,1581,1605]],[[64873,64873],"mapped",[1588,1580,1610]],[[64874,64875],"mapped",[1588,1605,1582]],[[64876,64877],"mapped",[1588,1605,1605]],[[64878,64878],"mapped",[1590,1581,1609]],[[64879,64880],"mapped",[1590,1582,1605]],[[64881,64882],"mapped",[1591,1605,1581]],[[64883,64883],"mapped",[1591,1605,1605]],[[64884,64884],"mapped",[1591,1605,1610]],[[64885,64885],"mapped",[1593,1580,1605]],[[64886,64887],"mapped",[1593,1605,1605]],[[64888,64888],"mapped",[1593,1605,1609]],[[64889,64889],"mapped",[1594,1605,1605]],[[64890,64890],"mapped",[1594,1605,1610]],[[64891,64891],"mapped",[1594,1605,1609]],[[64892,64893],"mapped",[1601,1582,1605]],[[64894,64894],"mapped",[1602,1605,1581]],[[64895,64895],"mapped",[1602,1605,1605]],[[64896,64896],"mapped",[1604,1581,1605]],[[64897,64897],"mapped",[1604,1581,1610]],[[64898,64898],"mapped",[1604,1581,1609]],[[64899,64900],"mapped",[1604,1580,1580]],[[64901,64902],"mapped",[1604,1582,1605]],[[64903,64904],"mapped",[1604,1605,1581]],[[64905,64905],"mapped",[1605,1581,1580]],[[64906,64906],"mapped",[1605,1581,1605]],[[64907,64907],"mapped",[1605,1581,1610]],[[64908,64908],"mapped",[1605,1580,1581]],[[64909,64909],"mapped",[1605,1580,1605]],[[64910,64910],"mapped",[1605,1582,1580]],[[64911,64911],"mapped",[1605,1582,1605]],[[64912,64913],"disallowed"],[[64914,64914],"mapped",[1605,1580,1582]],[[64915,64915],"mapped",[1607,1605,1580]],[[64916,64916],"mapped",[1607,1605,1605]],[[64917,64917],"mapped",[1606,1581,1605]],[[64918,64918],"mapped",[1606,1581,1609]],[[64919,64920],"mapped",[1606,1580,1605]],[[64921,64921],"mapped",[1606,1580,1609]],[[64922,64922],"mapped",[1606,1605,1610]],[[64923,64923],"mapped",[1606,1605,1609]],[[64924,64925],"mapped",[1610,1605,1605]],[[64926,64926],"mapped",[1576,1582,1610]],[[64927,64927],"mapped",[1578,1580,1610]],[[64928,64928],"mapped",[1578,1580,1609]],[[64929,64929],"mapped",[1578,1582,1610]],[[64930,64930],"mapped",[1578,1582,1609]],[[64931,64931],"mapped",[1578,1605,1610]],[[64932,64932],"mapped",[1578,1605,1609]],[[64933,64933],"mapped",[1580,1605,1610]],[[64934,64934],"mapped",[1580,1581,1609]],[[64935,64935],"mapped",[1580,1605,1609]],[[64936,64936],"mapped",[1587,1582,1609]],[[64937,64937],"mapped",[1589,1581,1610]],[[64938,64938],"mapped",[1588,1581,1610]],[[64939,64939],"mapped",[1590,1581,1610]],[[64940,64940],"mapped",[1604,1580,1610]],[[64941,64941],"mapped",[1604,1605,1610]],[[64942,64942],"mapped",[1610,1581,1610]],[[64943,64943],"mapped",[1610,1580,1610]],[[64944,64944],"mapped",[1610,1605,1610]],[[64945,64945],"mapped",[1605,1605,1610]],[[64946,64946],"mapped",[1602,1605,1610]],[[64947,64947],"mapped",[1606,1581,1610]],[[64948,64948],"mapped",[1602,1605,1581]],[[64949,64949],"mapped",[1604,1581,1605]],[[64950,64950],"mapped",[1593,1605,1610]],[[64951,64951],"mapped",[1603,1605,1610]],[[64952,64952],"mapped",[1606,1580,1581]],[[64953,64953],"mapped",[1605,1582,1610]],[[64954,64954],"mapped",[1604,1580,1605]],[[64955,64955],"mapped",[1603,1605,1605]],[[64956,64956],"mapped",[1604,1580,1605]],[[64957,64957],"mapped",[1606,1580,1581]],[[64958,64958],"mapped",[1580,1581,1610]],[[64959,64959],"mapped",[1581,1580,1610]],[[64960,64960],"mapped",[1605,1580,1610]],[[64961,64961],"mapped",[1601,1605,1610]],[[64962,64962],"mapped",[1576,1581,1610]],[[64963,64963],"mapped",[1603,1605,1605]],[[64964,64964],"mapped",[1593,1580,1605]],[[64965,64965],"mapped",[1589,1605,1605]],[[64966,64966],"mapped",[1587,1582,1610]],[[64967,64967],"mapped",[1606,1580,1610]],[[64968,64975],"disallowed"],[[64976,65007],"disallowed"],[[65008,65008],"mapped",[1589,1604,1746]],[[65009,65009],"mapped",[1602,1604,1746]],[[65010,65010],"mapped",[1575,1604,1604,1607]],[[65011,65011],"mapped",[1575,1603,1576,1585]],[[65012,65012],"mapped",[1605,1581,1605,1583]],[[65013,65013],"mapped",[1589,1604,1593,1605]],[[65014,65014],"mapped",[1585,1587,1608,1604]],[[65015,65015],"mapped",[1593,1604,1610,1607]],[[65016,65016],"mapped",[1608,1587,1604,1605]],[[65017,65017],"mapped",[1589,1604,1609]],[[65018,65018],"disallowed_STD3_mapped",[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605]],[[65019,65019],"disallowed_STD3_mapped",[1580,1604,32,1580,1604,1575,1604,1607]],[[65020,65020],"mapped",[1585,1740,1575,1604]],[[65021,65021],"valid",[],"NV8"],[[65022,65023],"disallowed"],[[65024,65039],"ignored"],[[65040,65040],"disallowed_STD3_mapped",[44]],[[65041,65041],"mapped",[12289]],[[65042,65042],"disallowed"],[[65043,65043],"disallowed_STD3_mapped",[58]],[[65044,65044],"disallowed_STD3_mapped",[59]],[[65045,65045],"disallowed_STD3_mapped",[33]],[[65046,65046],"disallowed_STD3_mapped",[63]],[[65047,65047],"mapped",[12310]],[[65048,65048],"mapped",[12311]],[[65049,65049],"disallowed"],[[65050,65055],"disallowed"],[[65056,65059],"valid"],[[65060,65062],"valid"],[[65063,65069],"valid"],[[65070,65071],"valid"],[[65072,65072],"disallowed"],[[65073,65073],"mapped",[8212]],[[65074,65074],"mapped",[8211]],[[65075,65076],"disallowed_STD3_mapped",[95]],[[65077,65077],"disallowed_STD3_mapped",[40]],[[65078,65078],"disallowed_STD3_mapped",[41]],[[65079,65079],"disallowed_STD3_mapped",[123]],[[65080,65080],"disallowed_STD3_mapped",[125]],[[65081,65081],"mapped",[12308]],[[65082,65082],"mapped",[12309]],[[65083,65083],"mapped",[12304]],[[65084,65084],"mapped",[12305]],[[65085,65085],"mapped",[12298]],[[65086,65086],"mapped",[12299]],[[65087,65087],"mapped",[12296]],[[65088,65088],"mapped",[12297]],[[65089,65089],"mapped",[12300]],[[65090,65090],"mapped",[12301]],[[65091,65091],"mapped",[12302]],[[65092,65092],"mapped",[12303]],[[65093,65094],"valid",[],"NV8"],[[65095,65095],"disallowed_STD3_mapped",[91]],[[65096,65096],"disallowed_STD3_mapped",[93]],[[65097,65100],"disallowed_STD3_mapped",[32,773]],[[65101,65103],"disallowed_STD3_mapped",[95]],[[65104,65104],"disallowed_STD3_mapped",[44]],[[65105,65105],"mapped",[12289]],[[65106,65106],"disallowed"],[[65107,65107],"disallowed"],[[65108,65108],"disallowed_STD3_mapped",[59]],[[65109,65109],"disallowed_STD3_mapped",[58]],[[65110,65110],"disallowed_STD3_mapped",[63]],[[65111,65111],"disallowed_STD3_mapped",[33]],[[65112,65112],"mapped",[8212]],[[65113,65113],"disallowed_STD3_mapped",[40]],[[65114,65114],"disallowed_STD3_mapped",[41]],[[65115,65115],"disallowed_STD3_mapped",[123]],[[65116,65116],"disallowed_STD3_mapped",[125]],[[65117,65117],"mapped",[12308]],[[65118,65118],"mapped",[12309]],[[65119,65119],"disallowed_STD3_mapped",[35]],[[65120,65120],"disallowed_STD3_mapped",[38]],[[65121,65121],"disallowed_STD3_mapped",[42]],[[65122,65122],"disallowed_STD3_mapped",[43]],[[65123,65123],"mapped",[45]],[[65124,65124],"disallowed_STD3_mapped",[60]],[[65125,65125],"disallowed_STD3_mapped",[62]],[[65126,65126],"disallowed_STD3_mapped",[61]],[[65127,65127],"disallowed"],[[65128,65128],"disallowed_STD3_mapped",[92]],[[65129,65129],"disallowed_STD3_mapped",[36]],[[65130,65130],"disallowed_STD3_mapped",[37]],[[65131,65131],"disallowed_STD3_mapped",[64]],[[65132,65135],"disallowed"],[[65136,65136],"disallowed_STD3_mapped",[32,1611]],[[65137,65137],"mapped",[1600,1611]],[[65138,65138],"disallowed_STD3_mapped",[32,1612]],[[65139,65139],"valid"],[[65140,65140],"disallowed_STD3_mapped",[32,1613]],[[65141,65141],"disallowed"],[[65142,65142],"disallowed_STD3_mapped",[32,1614]],[[65143,65143],"mapped",[1600,1614]],[[65144,65144],"disallowed_STD3_mapped",[32,1615]],[[65145,65145],"mapped",[1600,1615]],[[65146,65146],"disallowed_STD3_mapped",[32,1616]],[[65147,65147],"mapped",[1600,1616]],[[65148,65148],"disallowed_STD3_mapped",[32,1617]],[[65149,65149],"mapped",[1600,1617]],[[65150,65150],"disallowed_STD3_mapped",[32,1618]],[[65151,65151],"mapped",[1600,1618]],[[65152,65152],"mapped",[1569]],[[65153,65154],"mapped",[1570]],[[65155,65156],"mapped",[1571]],[[65157,65158],"mapped",[1572]],[[65159,65160],"mapped",[1573]],[[65161,65164],"mapped",[1574]],[[65165,65166],"mapped",[1575]],[[65167,65170],"mapped",[1576]],[[65171,65172],"mapped",[1577]],[[65173,65176],"mapped",[1578]],[[65177,65180],"mapped",[1579]],[[65181,65184],"mapped",[1580]],[[65185,65188],"mapped",[1581]],[[65189,65192],"mapped",[1582]],[[65193,65194],"mapped",[1583]],[[65195,65196],"mapped",[1584]],[[65197,65198],"mapped",[1585]],[[65199,65200],"mapped",[1586]],[[65201,65204],"mapped",[1587]],[[65205,65208],"mapped",[1588]],[[65209,65212],"mapped",[1589]],[[65213,65216],"mapped",[1590]],[[65217,65220],"mapped",[1591]],[[65221,65224],"mapped",[1592]],[[65225,65228],"mapped",[1593]],[[65229,65232],"mapped",[1594]],[[65233,65236],"mapped",[1601]],[[65237,65240],"mapped",[1602]],[[65241,65244],"mapped",[1603]],[[65245,65248],"mapped",[1604]],[[65249,65252],"mapped",[1605]],[[65253,65256],"mapped",[1606]],[[65257,65260],"mapped",[1607]],[[65261,65262],"mapped",[1608]],[[65263,65264],"mapped",[1609]],[[65265,65268],"mapped",[1610]],[[65269,65270],"mapped",[1604,1570]],[[65271,65272],"mapped",[1604,1571]],[[65273,65274],"mapped",[1604,1573]],[[65275,65276],"mapped",[1604,1575]],[[65277,65278],"disallowed"],[[65279,65279],"ignored"],[[65280,65280],"disallowed"],[[65281,65281],"disallowed_STD3_mapped",[33]],[[65282,65282],"disallowed_STD3_mapped",[34]],[[65283,65283],"disallowed_STD3_mapped",[35]],[[65284,65284],"disallowed_STD3_mapped",[36]],[[65285,65285],"disallowed_STD3_mapped",[37]],[[65286,65286],"disallowed_STD3_mapped",[38]],[[65287,65287],"disallowed_STD3_mapped",[39]],[[65288,65288],"disallowed_STD3_mapped",[40]],[[65289,65289],"disallowed_STD3_mapped",[41]],[[65290,65290],"disallowed_STD3_mapped",[42]],[[65291,65291],"disallowed_STD3_mapped",[43]],[[65292,65292],"disallowed_STD3_mapped",[44]],[[65293,65293],"mapped",[45]],[[65294,65294],"mapped",[46]],[[65295,65295],"disallowed_STD3_mapped",[47]],[[65296,65296],"mapped",[48]],[[65297,65297],"mapped",[49]],[[65298,65298],"mapped",[50]],[[65299,65299],"mapped",[51]],[[65300,65300],"mapped",[52]],[[65301,65301],"mapped",[53]],[[65302,65302],"mapped",[54]],[[65303,65303],"mapped",[55]],[[65304,65304],"mapped",[56]],[[65305,65305],"mapped",[57]],[[65306,65306],"disallowed_STD3_mapped",[58]],[[65307,65307],"disallowed_STD3_mapped",[59]],[[65308,65308],"disallowed_STD3_mapped",[60]],[[65309,65309],"disallowed_STD3_mapped",[61]],[[65310,65310],"disallowed_STD3_mapped",[62]],[[65311,65311],"disallowed_STD3_mapped",[63]],[[65312,65312],"disallowed_STD3_mapped",[64]],[[65313,65313],"mapped",[97]],[[65314,65314],"mapped",[98]],[[65315,65315],"mapped",[99]],[[65316,65316],"mapped",[100]],[[65317,65317],"mapped",[101]],[[65318,65318],"mapped",[102]],[[65319,65319],"mapped",[103]],[[65320,65320],"mapped",[104]],[[65321,65321],"mapped",[105]],[[65322,65322],"mapped",[106]],[[65323,65323],"mapped",[107]],[[65324,65324],"mapped",[108]],[[65325,65325],"mapped",[109]],[[65326,65326],"mapped",[110]],[[65327,65327],"mapped",[111]],[[65328,65328],"mapped",[112]],[[65329,65329],"mapped",[113]],[[65330,65330],"mapped",[114]],[[65331,65331],"mapped",[115]],[[65332,65332],"mapped",[116]],[[65333,65333],"mapped",[117]],[[65334,65334],"mapped",[118]],[[65335,65335],"mapped",[119]],[[65336,65336],"mapped",[120]],[[65337,65337],"mapped",[121]],[[65338,65338],"mapped",[122]],[[65339,65339],"disallowed_STD3_mapped",[91]],[[65340,65340],"disallowed_STD3_mapped",[92]],[[65341,65341],"disallowed_STD3_mapped",[93]],[[65342,65342],"disallowed_STD3_mapped",[94]],[[65343,65343],"disallowed_STD3_mapped",[95]],[[65344,65344],"disallowed_STD3_mapped",[96]],[[65345,65345],"mapped",[97]],[[65346,65346],"mapped",[98]],[[65347,65347],"mapped",[99]],[[65348,65348],"mapped",[100]],[[65349,65349],"mapped",[101]],[[65350,65350],"mapped",[102]],[[65351,65351],"mapped",[103]],[[65352,65352],"mapped",[104]],[[65353,65353],"mapped",[105]],[[65354,65354],"mapped",[106]],[[65355,65355],"mapped",[107]],[[65356,65356],"mapped",[108]],[[65357,65357],"mapped",[109]],[[65358,65358],"mapped",[110]],[[65359,65359],"mapped",[111]],[[65360,65360],"mapped",[112]],[[65361,65361],"mapped",[113]],[[65362,65362],"mapped",[114]],[[65363,65363],"mapped",[115]],[[65364,65364],"mapped",[116]],[[65365,65365],"mapped",[117]],[[65366,65366],"mapped",[118]],[[65367,65367],"mapped",[119]],[[65368,65368],"mapped",[120]],[[65369,65369],"mapped",[121]],[[65370,65370],"mapped",[122]],[[65371,65371],"disallowed_STD3_mapped",[123]],[[65372,65372],"disallowed_STD3_mapped",[124]],[[65373,65373],"disallowed_STD3_mapped",[125]],[[65374,65374],"disallowed_STD3_mapped",[126]],[[65375,65375],"mapped",[10629]],[[65376,65376],"mapped",[10630]],[[65377,65377],"mapped",[46]],[[65378,65378],"mapped",[12300]],[[65379,65379],"mapped",[12301]],[[65380,65380],"mapped",[12289]],[[65381,65381],"mapped",[12539]],[[65382,65382],"mapped",[12530]],[[65383,65383],"mapped",[12449]],[[65384,65384],"mapped",[12451]],[[65385,65385],"mapped",[12453]],[[65386,65386],"mapped",[12455]],[[65387,65387],"mapped",[12457]],[[65388,65388],"mapped",[12515]],[[65389,65389],"mapped",[12517]],[[65390,65390],"mapped",[12519]],[[65391,65391],"mapped",[12483]],[[65392,65392],"mapped",[12540]],[[65393,65393],"mapped",[12450]],[[65394,65394],"mapped",[12452]],[[65395,65395],"mapped",[12454]],[[65396,65396],"mapped",[12456]],[[65397,65397],"mapped",[12458]],[[65398,65398],"mapped",[12459]],[[65399,65399],"mapped",[12461]],[[65400,65400],"mapped",[12463]],[[65401,65401],"mapped",[12465]],[[65402,65402],"mapped",[12467]],[[65403,65403],"mapped",[12469]],[[65404,65404],"mapped",[12471]],[[65405,65405],"mapped",[12473]],[[65406,65406],"mapped",[12475]],[[65407,65407],"mapped",[12477]],[[65408,65408],"mapped",[12479]],[[65409,65409],"mapped",[12481]],[[65410,65410],"mapped",[12484]],[[65411,65411],"mapped",[12486]],[[65412,65412],"mapped",[12488]],[[65413,65413],"mapped",[12490]],[[65414,65414],"mapped",[12491]],[[65415,65415],"mapped",[12492]],[[65416,65416],"mapped",[12493]],[[65417,65417],"mapped",[12494]],[[65418,65418],"mapped",[12495]],[[65419,65419],"mapped",[12498]],[[65420,65420],"mapped",[12501]],[[65421,65421],"mapped",[12504]],[[65422,65422],"mapped",[12507]],[[65423,65423],"mapped",[12510]],[[65424,65424],"mapped",[12511]],[[65425,65425],"mapped",[12512]],[[65426,65426],"mapped",[12513]],[[65427,65427],"mapped",[12514]],[[65428,65428],"mapped",[12516]],[[65429,65429],"mapped",[12518]],[[65430,65430],"mapped",[12520]],[[65431,65431],"mapped",[12521]],[[65432,65432],"mapped",[12522]],[[65433,65433],"mapped",[12523]],[[65434,65434],"mapped",[12524]],[[65435,65435],"mapped",[12525]],[[65436,65436],"mapped",[12527]],[[65437,65437],"mapped",[12531]],[[65438,65438],"mapped",[12441]],[[65439,65439],"mapped",[12442]],[[65440,65440],"disallowed"],[[65441,65441],"mapped",[4352]],[[65442,65442],"mapped",[4353]],[[65443,65443],"mapped",[4522]],[[65444,65444],"mapped",[4354]],[[65445,65445],"mapped",[4524]],[[65446,65446],"mapped",[4525]],[[65447,65447],"mapped",[4355]],[[65448,65448],"mapped",[4356]],[[65449,65449],"mapped",[4357]],[[65450,65450],"mapped",[4528]],[[65451,65451],"mapped",[4529]],[[65452,65452],"mapped",[4530]],[[65453,65453],"mapped",[4531]],[[65454,65454],"mapped",[4532]],[[65455,65455],"mapped",[4533]],[[65456,65456],"mapped",[4378]],[[65457,65457],"mapped",[4358]],[[65458,65458],"mapped",[4359]],[[65459,65459],"mapped",[4360]],[[65460,65460],"mapped",[4385]],[[65461,65461],"mapped",[4361]],[[65462,65462],"mapped",[4362]],[[65463,65463],"mapped",[4363]],[[65464,65464],"mapped",[4364]],[[65465,65465],"mapped",[4365]],[[65466,65466],"mapped",[4366]],[[65467,65467],"mapped",[4367]],[[65468,65468],"mapped",[4368]],[[65469,65469],"mapped",[4369]],[[65470,65470],"mapped",[4370]],[[65471,65473],"disallowed"],[[65474,65474],"mapped",[4449]],[[65475,65475],"mapped",[4450]],[[65476,65476],"mapped",[4451]],[[65477,65477],"mapped",[4452]],[[65478,65478],"mapped",[4453]],[[65479,65479],"mapped",[4454]],[[65480,65481],"disallowed"],[[65482,65482],"mapped",[4455]],[[65483,65483],"mapped",[4456]],[[65484,65484],"mapped",[4457]],[[65485,65485],"mapped",[4458]],[[65486,65486],"mapped",[4459]],[[65487,65487],"mapped",[4460]],[[65488,65489],"disallowed"],[[65490,65490],"mapped",[4461]],[[65491,65491],"mapped",[4462]],[[65492,65492],"mapped",[4463]],[[65493,65493],"mapped",[4464]],[[65494,65494],"mapped",[4465]],[[65495,65495],"mapped",[4466]],[[65496,65497],"disallowed"],[[65498,65498],"mapped",[4467]],[[65499,65499],"mapped",[4468]],[[65500,65500],"mapped",[4469]],[[65501,65503],"disallowed"],[[65504,65504],"mapped",[162]],[[65505,65505],"mapped",[163]],[[65506,65506],"mapped",[172]],[[65507,65507],"disallowed_STD3_mapped",[32,772]],[[65508,65508],"mapped",[166]],[[65509,65509],"mapped",[165]],[[65510,65510],"mapped",[8361]],[[65511,65511],"disallowed"],[[65512,65512],"mapped",[9474]],[[65513,65513],"mapped",[8592]],[[65514,65514],"mapped",[8593]],[[65515,65515],"mapped",[8594]],[[65516,65516],"mapped",[8595]],[[65517,65517],"mapped",[9632]],[[65518,65518],"mapped",[9675]],[[65519,65528],"disallowed"],[[65529,65531],"disallowed"],[[65532,65532],"disallowed"],[[65533,65533],"disallowed"],[[65534,65535],"disallowed"],[[65536,65547],"valid"],[[65548,65548],"disallowed"],[[65549,65574],"valid"],[[65575,65575],"disallowed"],[[65576,65594],"valid"],[[65595,65595],"disallowed"],[[65596,65597],"valid"],[[65598,65598],"disallowed"],[[65599,65613],"valid"],[[65614,65615],"disallowed"],[[65616,65629],"valid"],[[65630,65663],"disallowed"],[[65664,65786],"valid"],[[65787,65791],"disallowed"],[[65792,65794],"valid",[],"NV8"],[[65795,65798],"disallowed"],[[65799,65843],"valid",[],"NV8"],[[65844,65846],"disallowed"],[[65847,65855],"valid",[],"NV8"],[[65856,65930],"valid",[],"NV8"],[[65931,65932],"valid",[],"NV8"],[[65933,65935],"disallowed"],[[65936,65947],"valid",[],"NV8"],[[65948,65951],"disallowed"],[[65952,65952],"valid",[],"NV8"],[[65953,65999],"disallowed"],[[66000,66044],"valid",[],"NV8"],[[66045,66045],"valid"],[[66046,66175],"disallowed"],[[66176,66204],"valid"],[[66205,66207],"disallowed"],[[66208,66256],"valid"],[[66257,66271],"disallowed"],[[66272,66272],"valid"],[[66273,66299],"valid",[],"NV8"],[[66300,66303],"disallowed"],[[66304,66334],"valid"],[[66335,66335],"valid"],[[66336,66339],"valid",[],"NV8"],[[66340,66351],"disallowed"],[[66352,66368],"valid"],[[66369,66369],"valid",[],"NV8"],[[66370,66377],"valid"],[[66378,66378],"valid",[],"NV8"],[[66379,66383],"disallowed"],[[66384,66426],"valid"],[[66427,66431],"disallowed"],[[66432,66461],"valid"],[[66462,66462],"disallowed"],[[66463,66463],"valid",[],"NV8"],[[66464,66499],"valid"],[[66500,66503],"disallowed"],[[66504,66511],"valid"],[[66512,66517],"valid",[],"NV8"],[[66518,66559],"disallowed"],[[66560,66560],"mapped",[66600]],[[66561,66561],"mapped",[66601]],[[66562,66562],"mapped",[66602]],[[66563,66563],"mapped",[66603]],[[66564,66564],"mapped",[66604]],[[66565,66565],"mapped",[66605]],[[66566,66566],"mapped",[66606]],[[66567,66567],"mapped",[66607]],[[66568,66568],"mapped",[66608]],[[66569,66569],"mapped",[66609]],[[66570,66570],"mapped",[66610]],[[66571,66571],"mapped",[66611]],[[66572,66572],"mapped",[66612]],[[66573,66573],"mapped",[66613]],[[66574,66574],"mapped",[66614]],[[66575,66575],"mapped",[66615]],[[66576,66576],"mapped",[66616]],[[66577,66577],"mapped",[66617]],[[66578,66578],"mapped",[66618]],[[66579,66579],"mapped",[66619]],[[66580,66580],"mapped",[66620]],[[66581,66581],"mapped",[66621]],[[66582,66582],"mapped",[66622]],[[66583,66583],"mapped",[66623]],[[66584,66584],"mapped",[66624]],[[66585,66585],"mapped",[66625]],[[66586,66586],"mapped",[66626]],[[66587,66587],"mapped",[66627]],[[66588,66588],"mapped",[66628]],[[66589,66589],"mapped",[66629]],[[66590,66590],"mapped",[66630]],[[66591,66591],"mapped",[66631]],[[66592,66592],"mapped",[66632]],[[66593,66593],"mapped",[66633]],[[66594,66594],"mapped",[66634]],[[66595,66595],"mapped",[66635]],[[66596,66596],"mapped",[66636]],[[66597,66597],"mapped",[66637]],[[66598,66598],"mapped",[66638]],[[66599,66599],"mapped",[66639]],[[66600,66637],"valid"],[[66638,66717],"valid"],[[66718,66719],"disallowed"],[[66720,66729],"valid"],[[66730,66815],"disallowed"],[[66816,66855],"valid"],[[66856,66863],"disallowed"],[[66864,66915],"valid"],[[66916,66926],"disallowed"],[[66927,66927],"valid",[],"NV8"],[[66928,67071],"disallowed"],[[67072,67382],"valid"],[[67383,67391],"disallowed"],[[67392,67413],"valid"],[[67414,67423],"disallowed"],[[67424,67431],"valid"],[[67432,67583],"disallowed"],[[67584,67589],"valid"],[[67590,67591],"disallowed"],[[67592,67592],"valid"],[[67593,67593],"disallowed"],[[67594,67637],"valid"],[[67638,67638],"disallowed"],[[67639,67640],"valid"],[[67641,67643],"disallowed"],[[67644,67644],"valid"],[[67645,67646],"disallowed"],[[67647,67647],"valid"],[[67648,67669],"valid"],[[67670,67670],"disallowed"],[[67671,67679],"valid",[],"NV8"],[[67680,67702],"valid"],[[67703,67711],"valid",[],"NV8"],[[67712,67742],"valid"],[[67743,67750],"disallowed"],[[67751,67759],"valid",[],"NV8"],[[67760,67807],"disallowed"],[[67808,67826],"valid"],[[67827,67827],"disallowed"],[[67828,67829],"valid"],[[67830,67834],"disallowed"],[[67835,67839],"valid",[],"NV8"],[[67840,67861],"valid"],[[67862,67865],"valid",[],"NV8"],[[67866,67867],"valid",[],"NV8"],[[67868,67870],"disallowed"],[[67871,67871],"valid",[],"NV8"],[[67872,67897],"valid"],[[67898,67902],"disallowed"],[[67903,67903],"valid",[],"NV8"],[[67904,67967],"disallowed"],[[67968,68023],"valid"],[[68024,68027],"disallowed"],[[68028,68029],"valid",[],"NV8"],[[68030,68031],"valid"],[[68032,68047],"valid",[],"NV8"],[[68048,68049],"disallowed"],[[68050,68095],"valid",[],"NV8"],[[68096,68099],"valid"],[[68100,68100],"disallowed"],[[68101,68102],"valid"],[[68103,68107],"disallowed"],[[68108,68115],"valid"],[[68116,68116],"disallowed"],[[68117,68119],"valid"],[[68120,68120],"disallowed"],[[68121,68147],"valid"],[[68148,68151],"disallowed"],[[68152,68154],"valid"],[[68155,68158],"disallowed"],[[68159,68159],"valid"],[[68160,68167],"valid",[],"NV8"],[[68168,68175],"disallowed"],[[68176,68184],"valid",[],"NV8"],[[68185,68191],"disallowed"],[[68192,68220],"valid"],[[68221,68223],"valid",[],"NV8"],[[68224,68252],"valid"],[[68253,68255],"valid",[],"NV8"],[[68256,68287],"disallowed"],[[68288,68295],"valid"],[[68296,68296],"valid",[],"NV8"],[[68297,68326],"valid"],[[68327,68330],"disallowed"],[[68331,68342],"valid",[],"NV8"],[[68343,68351],"disallowed"],[[68352,68405],"valid"],[[68406,68408],"disallowed"],[[68409,68415],"valid",[],"NV8"],[[68416,68437],"valid"],[[68438,68439],"disallowed"],[[68440,68447],"valid",[],"NV8"],[[68448,68466],"valid"],[[68467,68471],"disallowed"],[[68472,68479],"valid",[],"NV8"],[[68480,68497],"valid"],[[68498,68504],"disallowed"],[[68505,68508],"valid",[],"NV8"],[[68509,68520],"disallowed"],[[68521,68527],"valid",[],"NV8"],[[68528,68607],"disallowed"],[[68608,68680],"valid"],[[68681,68735],"disallowed"],[[68736,68736],"mapped",[68800]],[[68737,68737],"mapped",[68801]],[[68738,68738],"mapped",[68802]],[[68739,68739],"mapped",[68803]],[[68740,68740],"mapped",[68804]],[[68741,68741],"mapped",[68805]],[[68742,68742],"mapped",[68806]],[[68743,68743],"mapped",[68807]],[[68744,68744],"mapped",[68808]],[[68745,68745],"mapped",[68809]],[[68746,68746],"mapped",[68810]],[[68747,68747],"mapped",[68811]],[[68748,68748],"mapped",[68812]],[[68749,68749],"mapped",[68813]],[[68750,68750],"mapped",[68814]],[[68751,68751],"mapped",[68815]],[[68752,68752],"mapped",[68816]],[[68753,68753],"mapped",[68817]],[[68754,68754],"mapped",[68818]],[[68755,68755],"mapped",[68819]],[[68756,68756],"mapped",[68820]],[[68757,68757],"mapped",[68821]],[[68758,68758],"mapped",[68822]],[[68759,68759],"mapped",[68823]],[[68760,68760],"mapped",[68824]],[[68761,68761],"mapped",[68825]],[[68762,68762],"mapped",[68826]],[[68763,68763],"mapped",[68827]],[[68764,68764],"mapped",[68828]],[[68765,68765],"mapped",[68829]],[[68766,68766],"mapped",[68830]],[[68767,68767],"mapped",[68831]],[[68768,68768],"mapped",[68832]],[[68769,68769],"mapped",[68833]],[[68770,68770],"mapped",[68834]],[[68771,68771],"mapped",[68835]],[[68772,68772],"mapped",[68836]],[[68773,68773],"mapped",[68837]],[[68774,68774],"mapped",[68838]],[[68775,68775],"mapped",[68839]],[[68776,68776],"mapped",[68840]],[[68777,68777],"mapped",[68841]],[[68778,68778],"mapped",[68842]],[[68779,68779],"mapped",[68843]],[[68780,68780],"mapped",[68844]],[[68781,68781],"mapped",[68845]],[[68782,68782],"mapped",[68846]],[[68783,68783],"mapped",[68847]],[[68784,68784],"mapped",[68848]],[[68785,68785],"mapped",[68849]],[[68786,68786],"mapped",[68850]],[[68787,68799],"disallowed"],[[68800,68850],"valid"],[[68851,68857],"disallowed"],[[68858,68863],"valid",[],"NV8"],[[68864,69215],"disallowed"],[[69216,69246],"valid",[],"NV8"],[[69247,69631],"disallowed"],[[69632,69702],"valid"],[[69703,69709],"valid",[],"NV8"],[[69710,69713],"disallowed"],[[69714,69733],"valid",[],"NV8"],[[69734,69743],"valid"],[[69744,69758],"disallowed"],[[69759,69759],"valid"],[[69760,69818],"valid"],[[69819,69820],"valid",[],"NV8"],[[69821,69821],"disallowed"],[[69822,69825],"valid",[],"NV8"],[[69826,69839],"disallowed"],[[69840,69864],"valid"],[[69865,69871],"disallowed"],[[69872,69881],"valid"],[[69882,69887],"disallowed"],[[69888,69940],"valid"],[[69941,69941],"disallowed"],[[69942,69951],"valid"],[[69952,69955],"valid",[],"NV8"],[[69956,69967],"disallowed"],[[69968,70003],"valid"],[[70004,70005],"valid",[],"NV8"],[[70006,70006],"valid"],[[70007,70015],"disallowed"],[[70016,70084],"valid"],[[70085,70088],"valid",[],"NV8"],[[70089,70089],"valid",[],"NV8"],[[70090,70092],"valid"],[[70093,70093],"valid",[],"NV8"],[[70094,70095],"disallowed"],[[70096,70105],"valid"],[[70106,70106],"valid"],[[70107,70107],"valid",[],"NV8"],[[70108,70108],"valid"],[[70109,70111],"valid",[],"NV8"],[[70112,70112],"disallowed"],[[70113,70132],"valid",[],"NV8"],[[70133,70143],"disallowed"],[[70144,70161],"valid"],[[70162,70162],"disallowed"],[[70163,70199],"valid"],[[70200,70205],"valid",[],"NV8"],[[70206,70271],"disallowed"],[[70272,70278],"valid"],[[70279,70279],"disallowed"],[[70280,70280],"valid"],[[70281,70281],"disallowed"],[[70282,70285],"valid"],[[70286,70286],"disallowed"],[[70287,70301],"valid"],[[70302,70302],"disallowed"],[[70303,70312],"valid"],[[70313,70313],"valid",[],"NV8"],[[70314,70319],"disallowed"],[[70320,70378],"valid"],[[70379,70383],"disallowed"],[[70384,70393],"valid"],[[70394,70399],"disallowed"],[[70400,70400],"valid"],[[70401,70403],"valid"],[[70404,70404],"disallowed"],[[70405,70412],"valid"],[[70413,70414],"disallowed"],[[70415,70416],"valid"],[[70417,70418],"disallowed"],[[70419,70440],"valid"],[[70441,70441],"disallowed"],[[70442,70448],"valid"],[[70449,70449],"disallowed"],[[70450,70451],"valid"],[[70452,70452],"disallowed"],[[70453,70457],"valid"],[[70458,70459],"disallowed"],[[70460,70468],"valid"],[[70469,70470],"disallowed"],[[70471,70472],"valid"],[[70473,70474],"disallowed"],[[70475,70477],"valid"],[[70478,70479],"disallowed"],[[70480,70480],"valid"],[[70481,70486],"disallowed"],[[70487,70487],"valid"],[[70488,70492],"disallowed"],[[70493,70499],"valid"],[[70500,70501],"disallowed"],[[70502,70508],"valid"],[[70509,70511],"disallowed"],[[70512,70516],"valid"],[[70517,70783],"disallowed"],[[70784,70853],"valid"],[[70854,70854],"valid",[],"NV8"],[[70855,70855],"valid"],[[70856,70863],"disallowed"],[[70864,70873],"valid"],[[70874,71039],"disallowed"],[[71040,71093],"valid"],[[71094,71095],"disallowed"],[[71096,71104],"valid"],[[71105,71113],"valid",[],"NV8"],[[71114,71127],"valid",[],"NV8"],[[71128,71133],"valid"],[[71134,71167],"disallowed"],[[71168,71232],"valid"],[[71233,71235],"valid",[],"NV8"],[[71236,71236],"valid"],[[71237,71247],"disallowed"],[[71248,71257],"valid"],[[71258,71295],"disallowed"],[[71296,71351],"valid"],[[71352,71359],"disallowed"],[[71360,71369],"valid"],[[71370,71423],"disallowed"],[[71424,71449],"valid"],[[71450,71452],"disallowed"],[[71453,71467],"valid"],[[71468,71471],"disallowed"],[[71472,71481],"valid"],[[71482,71487],"valid",[],"NV8"],[[71488,71839],"disallowed"],[[71840,71840],"mapped",[71872]],[[71841,71841],"mapped",[71873]],[[71842,71842],"mapped",[71874]],[[71843,71843],"mapped",[71875]],[[71844,71844],"mapped",[71876]],[[71845,71845],"mapped",[71877]],[[71846,71846],"mapped",[71878]],[[71847,71847],"mapped",[71879]],[[71848,71848],"mapped",[71880]],[[71849,71849],"mapped",[71881]],[[71850,71850],"mapped",[71882]],[[71851,71851],"mapped",[71883]],[[71852,71852],"mapped",[71884]],[[71853,71853],"mapped",[71885]],[[71854,71854],"mapped",[71886]],[[71855,71855],"mapped",[71887]],[[71856,71856],"mapped",[71888]],[[71857,71857],"mapped",[71889]],[[71858,71858],"mapped",[71890]],[[71859,71859],"mapped",[71891]],[[71860,71860],"mapped",[71892]],[[71861,71861],"mapped",[71893]],[[71862,71862],"mapped",[71894]],[[71863,71863],"mapped",[71895]],[[71864,71864],"mapped",[71896]],[[71865,71865],"mapped",[71897]],[[71866,71866],"mapped",[71898]],[[71867,71867],"mapped",[71899]],[[71868,71868],"mapped",[71900]],[[71869,71869],"mapped",[71901]],[[71870,71870],"mapped",[71902]],[[71871,71871],"mapped",[71903]],[[71872,71913],"valid"],[[71914,71922],"valid",[],"NV8"],[[71923,71934],"disallowed"],[[71935,71935],"valid"],[[71936,72383],"disallowed"],[[72384,72440],"valid"],[[72441,73727],"disallowed"],[[73728,74606],"valid"],[[74607,74648],"valid"],[[74649,74649],"valid"],[[74650,74751],"disallowed"],[[74752,74850],"valid",[],"NV8"],[[74851,74862],"valid",[],"NV8"],[[74863,74863],"disallowed"],[[74864,74867],"valid",[],"NV8"],[[74868,74868],"valid",[],"NV8"],[[74869,74879],"disallowed"],[[74880,75075],"valid"],[[75076,77823],"disallowed"],[[77824,78894],"valid"],[[78895,82943],"disallowed"],[[82944,83526],"valid"],[[83527,92159],"disallowed"],[[92160,92728],"valid"],[[92729,92735],"disallowed"],[[92736,92766],"valid"],[[92767,92767],"disallowed"],[[92768,92777],"valid"],[[92778,92781],"disallowed"],[[92782,92783],"valid",[],"NV8"],[[92784,92879],"disallowed"],[[92880,92909],"valid"],[[92910,92911],"disallowed"],[[92912,92916],"valid"],[[92917,92917],"valid",[],"NV8"],[[92918,92927],"disallowed"],[[92928,92982],"valid"],[[92983,92991],"valid",[],"NV8"],[[92992,92995],"valid"],[[92996,92997],"valid",[],"NV8"],[[92998,93007],"disallowed"],[[93008,93017],"valid"],[[93018,93018],"disallowed"],[[93019,93025],"valid",[],"NV8"],[[93026,93026],"disallowed"],[[93027,93047],"valid"],[[93048,93052],"disallowed"],[[93053,93071],"valid"],[[93072,93951],"disallowed"],[[93952,94020],"valid"],[[94021,94031],"disallowed"],[[94032,94078],"valid"],[[94079,94094],"disallowed"],[[94095,94111],"valid"],[[94112,110591],"disallowed"],[[110592,110593],"valid"],[[110594,113663],"disallowed"],[[113664,113770],"valid"],[[113771,113775],"disallowed"],[[113776,113788],"valid"],[[113789,113791],"disallowed"],[[113792,113800],"valid"],[[113801,113807],"disallowed"],[[113808,113817],"valid"],[[113818,113819],"disallowed"],[[113820,113820],"valid",[],"NV8"],[[113821,113822],"valid"],[[113823,113823],"valid",[],"NV8"],[[113824,113827],"ignored"],[[113828,118783],"disallowed"],[[118784,119029],"valid",[],"NV8"],[[119030,119039],"disallowed"],[[119040,119078],"valid",[],"NV8"],[[119079,119080],"disallowed"],[[119081,119081],"valid",[],"NV8"],[[119082,119133],"valid",[],"NV8"],[[119134,119134],"mapped",[119127,119141]],[[119135,119135],"mapped",[119128,119141]],[[119136,119136],"mapped",[119128,119141,119150]],[[119137,119137],"mapped",[119128,119141,119151]],[[119138,119138],"mapped",[119128,119141,119152]],[[119139,119139],"mapped",[119128,119141,119153]],[[119140,119140],"mapped",[119128,119141,119154]],[[119141,119154],"valid",[],"NV8"],[[119155,119162],"disallowed"],[[119163,119226],"valid",[],"NV8"],[[119227,119227],"mapped",[119225,119141]],[[119228,119228],"mapped",[119226,119141]],[[119229,119229],"mapped",[119225,119141,119150]],[[119230,119230],"mapped",[119226,119141,119150]],[[119231,119231],"mapped",[119225,119141,119151]],[[119232,119232],"mapped",[119226,119141,119151]],[[119233,119261],"valid",[],"NV8"],[[119262,119272],"valid",[],"NV8"],[[119273,119295],"disallowed"],[[119296,119365],"valid",[],"NV8"],[[119366,119551],"disallowed"],[[119552,119638],"valid",[],"NV8"],[[119639,119647],"disallowed"],[[119648,119665],"valid",[],"NV8"],[[119666,119807],"disallowed"],[[119808,119808],"mapped",[97]],[[119809,119809],"mapped",[98]],[[119810,119810],"mapped",[99]],[[119811,119811],"mapped",[100]],[[119812,119812],"mapped",[101]],[[119813,119813],"mapped",[102]],[[119814,119814],"mapped",[103]],[[119815,119815],"mapped",[104]],[[119816,119816],"mapped",[105]],[[119817,119817],"mapped",[106]],[[119818,119818],"mapped",[107]],[[119819,119819],"mapped",[108]],[[119820,119820],"mapped",[109]],[[119821,119821],"mapped",[110]],[[119822,119822],"mapped",[111]],[[119823,119823],"mapped",[112]],[[119824,119824],"mapped",[113]],[[119825,119825],"mapped",[114]],[[119826,119826],"mapped",[115]],[[119827,119827],"mapped",[116]],[[119828,119828],"mapped",[117]],[[119829,119829],"mapped",[118]],[[119830,119830],"mapped",[119]],[[119831,119831],"mapped",[120]],[[119832,119832],"mapped",[121]],[[119833,119833],"mapped",[122]],[[119834,119834],"mapped",[97]],[[119835,119835],"mapped",[98]],[[119836,119836],"mapped",[99]],[[119837,119837],"mapped",[100]],[[119838,119838],"mapped",[101]],[[119839,119839],"mapped",[102]],[[119840,119840],"mapped",[103]],[[119841,119841],"mapped",[104]],[[119842,119842],"mapped",[105]],[[119843,119843],"mapped",[106]],[[119844,119844],"mapped",[107]],[[119845,119845],"mapped",[108]],[[119846,119846],"mapped",[109]],[[119847,119847],"mapped",[110]],[[119848,119848],"mapped",[111]],[[119849,119849],"mapped",[112]],[[119850,119850],"mapped",[113]],[[119851,119851],"mapped",[114]],[[119852,119852],"mapped",[115]],[[119853,119853],"mapped",[116]],[[119854,119854],"mapped",[117]],[[119855,119855],"mapped",[118]],[[119856,119856],"mapped",[119]],[[119857,119857],"mapped",[120]],[[119858,119858],"mapped",[121]],[[119859,119859],"mapped",[122]],[[119860,119860],"mapped",[97]],[[119861,119861],"mapped",[98]],[[119862,119862],"mapped",[99]],[[119863,119863],"mapped",[100]],[[119864,119864],"mapped",[101]],[[119865,119865],"mapped",[102]],[[119866,119866],"mapped",[103]],[[119867,119867],"mapped",[104]],[[119868,119868],"mapped",[105]],[[119869,119869],"mapped",[106]],[[119870,119870],"mapped",[107]],[[119871,119871],"mapped",[108]],[[119872,119872],"mapped",[109]],[[119873,119873],"mapped",[110]],[[119874,119874],"mapped",[111]],[[119875,119875],"mapped",[112]],[[119876,119876],"mapped",[113]],[[119877,119877],"mapped",[114]],[[119878,119878],"mapped",[115]],[[119879,119879],"mapped",[116]],[[119880,119880],"mapped",[117]],[[119881,119881],"mapped",[118]],[[119882,119882],"mapped",[119]],[[119883,119883],"mapped",[120]],[[119884,119884],"mapped",[121]],[[119885,119885],"mapped",[122]],[[119886,119886],"mapped",[97]],[[119887,119887],"mapped",[98]],[[119888,119888],"mapped",[99]],[[119889,119889],"mapped",[100]],[[119890,119890],"mapped",[101]],[[119891,119891],"mapped",[102]],[[119892,119892],"mapped",[103]],[[119893,119893],"disallowed"],[[119894,119894],"mapped",[105]],[[119895,119895],"mapped",[106]],[[119896,119896],"mapped",[107]],[[119897,119897],"mapped",[108]],[[119898,119898],"mapped",[109]],[[119899,119899],"mapped",[110]],[[119900,119900],"mapped",[111]],[[119901,119901],"mapped",[112]],[[119902,119902],"mapped",[113]],[[119903,119903],"mapped",[114]],[[119904,119904],"mapped",[115]],[[119905,119905],"mapped",[116]],[[119906,119906],"mapped",[117]],[[119907,119907],"mapped",[118]],[[119908,119908],"mapped",[119]],[[119909,119909],"mapped",[120]],[[119910,119910],"mapped",[121]],[[119911,119911],"mapped",[122]],[[119912,119912],"mapped",[97]],[[119913,119913],"mapped",[98]],[[119914,119914],"mapped",[99]],[[119915,119915],"mapped",[100]],[[119916,119916],"mapped",[101]],[[119917,119917],"mapped",[102]],[[119918,119918],"mapped",[103]],[[119919,119919],"mapped",[104]],[[119920,119920],"mapped",[105]],[[119921,119921],"mapped",[106]],[[119922,119922],"mapped",[107]],[[119923,119923],"mapped",[108]],[[119924,119924],"mapped",[109]],[[119925,119925],"mapped",[110]],[[119926,119926],"mapped",[111]],[[119927,119927],"mapped",[112]],[[119928,119928],"mapped",[113]],[[119929,119929],"mapped",[114]],[[119930,119930],"mapped",[115]],[[119931,119931],"mapped",[116]],[[119932,119932],"mapped",[117]],[[119933,119933],"mapped",[118]],[[119934,119934],"mapped",[119]],[[119935,119935],"mapped",[120]],[[119936,119936],"mapped",[121]],[[119937,119937],"mapped",[122]],[[119938,119938],"mapped",[97]],[[119939,119939],"mapped",[98]],[[119940,119940],"mapped",[99]],[[119941,119941],"mapped",[100]],[[119942,119942],"mapped",[101]],[[119943,119943],"mapped",[102]],[[119944,119944],"mapped",[103]],[[119945,119945],"mapped",[104]],[[119946,119946],"mapped",[105]],[[119947,119947],"mapped",[106]],[[119948,119948],"mapped",[107]],[[119949,119949],"mapped",[108]],[[119950,119950],"mapped",[109]],[[119951,119951],"mapped",[110]],[[119952,119952],"mapped",[111]],[[119953,119953],"mapped",[112]],[[119954,119954],"mapped",[113]],[[119955,119955],"mapped",[114]],[[119956,119956],"mapped",[115]],[[119957,119957],"mapped",[116]],[[119958,119958],"mapped",[117]],[[119959,119959],"mapped",[118]],[[119960,119960],"mapped",[119]],[[119961,119961],"mapped",[120]],[[119962,119962],"mapped",[121]],[[119963,119963],"mapped",[122]],[[119964,119964],"mapped",[97]],[[119965,119965],"disallowed"],[[119966,119966],"mapped",[99]],[[119967,119967],"mapped",[100]],[[119968,119969],"disallowed"],[[119970,119970],"mapped",[103]],[[119971,119972],"disallowed"],[[119973,119973],"mapped",[106]],[[119974,119974],"mapped",[107]],[[119975,119976],"disallowed"],[[119977,119977],"mapped",[110]],[[119978,119978],"mapped",[111]],[[119979,119979],"mapped",[112]],[[119980,119980],"mapped",[113]],[[119981,119981],"disallowed"],[[119982,119982],"mapped",[115]],[[119983,119983],"mapped",[116]],[[119984,119984],"mapped",[117]],[[119985,119985],"mapped",[118]],[[119986,119986],"mapped",[119]],[[119987,119987],"mapped",[120]],[[119988,119988],"mapped",[121]],[[119989,119989],"mapped",[122]],[[119990,119990],"mapped",[97]],[[119991,119991],"mapped",[98]],[[119992,119992],"mapped",[99]],[[119993,119993],"mapped",[100]],[[119994,119994],"disallowed"],[[119995,119995],"mapped",[102]],[[119996,119996],"disallowed"],[[119997,119997],"mapped",[104]],[[119998,119998],"mapped",[105]],[[119999,119999],"mapped",[106]],[[120000,120000],"mapped",[107]],[[120001,120001],"mapped",[108]],[[120002,120002],"mapped",[109]],[[120003,120003],"mapped",[110]],[[120004,120004],"disallowed"],[[120005,120005],"mapped",[112]],[[120006,120006],"mapped",[113]],[[120007,120007],"mapped",[114]],[[120008,120008],"mapped",[115]],[[120009,120009],"mapped",[116]],[[120010,120010],"mapped",[117]],[[120011,120011],"mapped",[118]],[[120012,120012],"mapped",[119]],[[120013,120013],"mapped",[120]],[[120014,120014],"mapped",[121]],[[120015,120015],"mapped",[122]],[[120016,120016],"mapped",[97]],[[120017,120017],"mapped",[98]],[[120018,120018],"mapped",[99]],[[120019,120019],"mapped",[100]],[[120020,120020],"mapped",[101]],[[120021,120021],"mapped",[102]],[[120022,120022],"mapped",[103]],[[120023,120023],"mapped",[104]],[[120024,120024],"mapped",[105]],[[120025,120025],"mapped",[106]],[[120026,120026],"mapped",[107]],[[120027,120027],"mapped",[108]],[[120028,120028],"mapped",[109]],[[120029,120029],"mapped",[110]],[[120030,120030],"mapped",[111]],[[120031,120031],"mapped",[112]],[[120032,120032],"mapped",[113]],[[120033,120033],"mapped",[114]],[[120034,120034],"mapped",[115]],[[120035,120035],"mapped",[116]],[[120036,120036],"mapped",[117]],[[120037,120037],"mapped",[118]],[[120038,120038],"mapped",[119]],[[120039,120039],"mapped",[120]],[[120040,120040],"mapped",[121]],[[120041,120041],"mapped",[122]],[[120042,120042],"mapped",[97]],[[120043,120043],"mapped",[98]],[[120044,120044],"mapped",[99]],[[120045,120045],"mapped",[100]],[[120046,120046],"mapped",[101]],[[120047,120047],"mapped",[102]],[[120048,120048],"mapped",[103]],[[120049,120049],"mapped",[104]],[[120050,120050],"mapped",[105]],[[120051,120051],"mapped",[106]],[[120052,120052],"mapped",[107]],[[120053,120053],"mapped",[108]],[[120054,120054],"mapped",[109]],[[120055,120055],"mapped",[110]],[[120056,120056],"mapped",[111]],[[120057,120057],"mapped",[112]],[[120058,120058],"mapped",[113]],[[120059,120059],"mapped",[114]],[[120060,120060],"mapped",[115]],[[120061,120061],"mapped",[116]],[[120062,120062],"mapped",[117]],[[120063,120063],"mapped",[118]],[[120064,120064],"mapped",[119]],[[120065,120065],"mapped",[120]],[[120066,120066],"mapped",[121]],[[120067,120067],"mapped",[122]],[[120068,120068],"mapped",[97]],[[120069,120069],"mapped",[98]],[[120070,120070],"disallowed"],[[120071,120071],"mapped",[100]],[[120072,120072],"mapped",[101]],[[120073,120073],"mapped",[102]],[[120074,120074],"mapped",[103]],[[120075,120076],"disallowed"],[[120077,120077],"mapped",[106]],[[120078,120078],"mapped",[107]],[[120079,120079],"mapped",[108]],[[120080,120080],"mapped",[109]],[[120081,120081],"mapped",[110]],[[120082,120082],"mapped",[111]],[[120083,120083],"mapped",[112]],[[120084,120084],"mapped",[113]],[[120085,120085],"disallowed"],[[120086,120086],"mapped",[115]],[[120087,120087],"mapped",[116]],[[120088,120088],"mapped",[117]],[[120089,120089],"mapped",[118]],[[120090,120090],"mapped",[119]],[[120091,120091],"mapped",[120]],[[120092,120092],"mapped",[121]],[[120093,120093],"disallowed"],[[120094,120094],"mapped",[97]],[[120095,120095],"mapped",[98]],[[120096,120096],"mapped",[99]],[[120097,120097],"mapped",[100]],[[120098,120098],"mapped",[101]],[[120099,120099],"mapped",[102]],[[120100,120100],"mapped",[103]],[[120101,120101],"mapped",[104]],[[120102,120102],"mapped",[105]],[[120103,120103],"mapped",[106]],[[120104,120104],"mapped",[107]],[[120105,120105],"mapped",[108]],[[120106,120106],"mapped",[109]],[[120107,120107],"mapped",[110]],[[120108,120108],"mapped",[111]],[[120109,120109],"mapped",[112]],[[120110,120110],"mapped",[113]],[[120111,120111],"mapped",[114]],[[120112,120112],"mapped",[115]],[[120113,120113],"mapped",[116]],[[120114,120114],"mapped",[117]],[[120115,120115],"mapped",[118]],[[120116,120116],"mapped",[119]],[[120117,120117],"mapped",[120]],[[120118,120118],"mapped",[121]],[[120119,120119],"mapped",[122]],[[120120,120120],"mapped",[97]],[[120121,120121],"mapped",[98]],[[120122,120122],"disallowed"],[[120123,120123],"mapped",[100]],[[120124,120124],"mapped",[101]],[[120125,120125],"mapped",[102]],[[120126,120126],"mapped",[103]],[[120127,120127],"disallowed"],[[120128,120128],"mapped",[105]],[[120129,120129],"mapped",[106]],[[120130,120130],"mapped",[107]],[[120131,120131],"mapped",[108]],[[120132,120132],"mapped",[109]],[[120133,120133],"disallowed"],[[120134,120134],"mapped",[111]],[[120135,120137],"disallowed"],[[120138,120138],"mapped",[115]],[[120139,120139],"mapped",[116]],[[120140,120140],"mapped",[117]],[[120141,120141],"mapped",[118]],[[120142,120142],"mapped",[119]],[[120143,120143],"mapped",[120]],[[120144,120144],"mapped",[121]],[[120145,120145],"disallowed"],[[120146,120146],"mapped",[97]],[[120147,120147],"mapped",[98]],[[120148,120148],"mapped",[99]],[[120149,120149],"mapped",[100]],[[120150,120150],"mapped",[101]],[[120151,120151],"mapped",[102]],[[120152,120152],"mapped",[103]],[[120153,120153],"mapped",[104]],[[120154,120154],"mapped",[105]],[[120155,120155],"mapped",[106]],[[120156,120156],"mapped",[107]],[[120157,120157],"mapped",[108]],[[120158,120158],"mapped",[109]],[[120159,120159],"mapped",[110]],[[120160,120160],"mapped",[111]],[[120161,120161],"mapped",[112]],[[120162,120162],"mapped",[113]],[[120163,120163],"mapped",[114]],[[120164,120164],"mapped",[115]],[[120165,120165],"mapped",[116]],[[120166,120166],"mapped",[117]],[[120167,120167],"mapped",[118]],[[120168,120168],"mapped",[119]],[[120169,120169],"mapped",[120]],[[120170,120170],"mapped",[121]],[[120171,120171],"mapped",[122]],[[120172,120172],"mapped",[97]],[[120173,120173],"mapped",[98]],[[120174,120174],"mapped",[99]],[[120175,120175],"mapped",[100]],[[120176,120176],"mapped",[101]],[[120177,120177],"mapped",[102]],[[120178,120178],"mapped",[103]],[[120179,120179],"mapped",[104]],[[120180,120180],"mapped",[105]],[[120181,120181],"mapped",[106]],[[120182,120182],"mapped",[107]],[[120183,120183],"mapped",[108]],[[120184,120184],"mapped",[109]],[[120185,120185],"mapped",[110]],[[120186,120186],"mapped",[111]],[[120187,120187],"mapped",[112]],[[120188,120188],"mapped",[113]],[[120189,120189],"mapped",[114]],[[120190,120190],"mapped",[115]],[[120191,120191],"mapped",[116]],[[120192,120192],"mapped",[117]],[[120193,120193],"mapped",[118]],[[120194,120194],"mapped",[119]],[[120195,120195],"mapped",[120]],[[120196,120196],"mapped",[121]],[[120197,120197],"mapped",[122]],[[120198,120198],"mapped",[97]],[[120199,120199],"mapped",[98]],[[120200,120200],"mapped",[99]],[[120201,120201],"mapped",[100]],[[120202,120202],"mapped",[101]],[[120203,120203],"mapped",[102]],[[120204,120204],"mapped",[103]],[[120205,120205],"mapped",[104]],[[120206,120206],"mapped",[105]],[[120207,120207],"mapped",[106]],[[120208,120208],"mapped",[107]],[[120209,120209],"mapped",[108]],[[120210,120210],"mapped",[109]],[[120211,120211],"mapped",[110]],[[120212,120212],"mapped",[111]],[[120213,120213],"mapped",[112]],[[120214,120214],"mapped",[113]],[[120215,120215],"mapped",[114]],[[120216,120216],"mapped",[115]],[[120217,120217],"mapped",[116]],[[120218,120218],"mapped",[117]],[[120219,120219],"mapped",[118]],[[120220,120220],"mapped",[119]],[[120221,120221],"mapped",[120]],[[120222,120222],"mapped",[121]],[[120223,120223],"mapped",[122]],[[120224,120224],"mapped",[97]],[[120225,120225],"mapped",[98]],[[120226,120226],"mapped",[99]],[[120227,120227],"mapped",[100]],[[120228,120228],"mapped",[101]],[[120229,120229],"mapped",[102]],[[120230,120230],"mapped",[103]],[[120231,120231],"mapped",[104]],[[120232,120232],"mapped",[105]],[[120233,120233],"mapped",[106]],[[120234,120234],"mapped",[107]],[[120235,120235],"mapped",[108]],[[120236,120236],"mapped",[109]],[[120237,120237],"mapped",[110]],[[120238,120238],"mapped",[111]],[[120239,120239],"mapped",[112]],[[120240,120240],"mapped",[113]],[[120241,120241],"mapped",[114]],[[120242,120242],"mapped",[115]],[[120243,120243],"mapped",[116]],[[120244,120244],"mapped",[117]],[[120245,120245],"mapped",[118]],[[120246,120246],"mapped",[119]],[[120247,120247],"mapped",[120]],[[120248,120248],"mapped",[121]],[[120249,120249],"mapped",[122]],[[120250,120250],"mapped",[97]],[[120251,120251],"mapped",[98]],[[120252,120252],"mapped",[99]],[[120253,120253],"mapped",[100]],[[120254,120254],"mapped",[101]],[[120255,120255],"mapped",[102]],[[120256,120256],"mapped",[103]],[[120257,120257],"mapped",[104]],[[120258,120258],"mapped",[105]],[[120259,120259],"mapped",[106]],[[120260,120260],"mapped",[107]],[[120261,120261],"mapped",[108]],[[120262,120262],"mapped",[109]],[[120263,120263],"mapped",[110]],[[120264,120264],"mapped",[111]],[[120265,120265],"mapped",[112]],[[120266,120266],"mapped",[113]],[[120267,120267],"mapped",[114]],[[120268,120268],"mapped",[115]],[[120269,120269],"mapped",[116]],[[120270,120270],"mapped",[117]],[[120271,120271],"mapped",[118]],[[120272,120272],"mapped",[119]],[[120273,120273],"mapped",[120]],[[120274,120274],"mapped",[121]],[[120275,120275],"mapped",[122]],[[120276,120276],"mapped",[97]],[[120277,120277],"mapped",[98]],[[120278,120278],"mapped",[99]],[[120279,120279],"mapped",[100]],[[120280,120280],"mapped",[101]],[[120281,120281],"mapped",[102]],[[120282,120282],"mapped",[103]],[[120283,120283],"mapped",[104]],[[120284,120284],"mapped",[105]],[[120285,120285],"mapped",[106]],[[120286,120286],"mapped",[107]],[[120287,120287],"mapped",[108]],[[120288,120288],"mapped",[109]],[[120289,120289],"mapped",[110]],[[120290,120290],"mapped",[111]],[[120291,120291],"mapped",[112]],[[120292,120292],"mapped",[113]],[[120293,120293],"mapped",[114]],[[120294,120294],"mapped",[115]],[[120295,120295],"mapped",[116]],[[120296,120296],"mapped",[117]],[[120297,120297],"mapped",[118]],[[120298,120298],"mapped",[119]],[[120299,120299],"mapped",[120]],[[120300,120300],"mapped",[121]],[[120301,120301],"mapped",[122]],[[120302,120302],"mapped",[97]],[[120303,120303],"mapped",[98]],[[120304,120304],"mapped",[99]],[[120305,120305],"mapped",[100]],[[120306,120306],"mapped",[101]],[[120307,120307],"mapped",[102]],[[120308,120308],"mapped",[103]],[[120309,120309],"mapped",[104]],[[120310,120310],"mapped",[105]],[[120311,120311],"mapped",[106]],[[120312,120312],"mapped",[107]],[[120313,120313],"mapped",[108]],[[120314,120314],"mapped",[109]],[[120315,120315],"mapped",[110]],[[120316,120316],"mapped",[111]],[[120317,120317],"mapped",[112]],[[120318,120318],"mapped",[113]],[[120319,120319],"mapped",[114]],[[120320,120320],"mapped",[115]],[[120321,120321],"mapped",[116]],[[120322,120322],"mapped",[117]],[[120323,120323],"mapped",[118]],[[120324,120324],"mapped",[119]],[[120325,120325],"mapped",[120]],[[120326,120326],"mapped",[121]],[[120327,120327],"mapped",[122]],[[120328,120328],"mapped",[97]],[[120329,120329],"mapped",[98]],[[120330,120330],"mapped",[99]],[[120331,120331],"mapped",[100]],[[120332,120332],"mapped",[101]],[[120333,120333],"mapped",[102]],[[120334,120334],"mapped",[103]],[[120335,120335],"mapped",[104]],[[120336,120336],"mapped",[105]],[[120337,120337],"mapped",[106]],[[120338,120338],"mapped",[107]],[[120339,120339],"mapped",[108]],[[120340,120340],"mapped",[109]],[[120341,120341],"mapped",[110]],[[120342,120342],"mapped",[111]],[[120343,120343],"mapped",[112]],[[120344,120344],"mapped",[113]],[[120345,120345],"mapped",[114]],[[120346,120346],"mapped",[115]],[[120347,120347],"mapped",[116]],[[120348,120348],"mapped",[117]],[[120349,120349],"mapped",[118]],[[120350,120350],"mapped",[119]],[[120351,120351],"mapped",[120]],[[120352,120352],"mapped",[121]],[[120353,120353],"mapped",[122]],[[120354,120354],"mapped",[97]],[[120355,120355],"mapped",[98]],[[120356,120356],"mapped",[99]],[[120357,120357],"mapped",[100]],[[120358,120358],"mapped",[101]],[[120359,120359],"mapped",[102]],[[120360,120360],"mapped",[103]],[[120361,120361],"mapped",[104]],[[120362,120362],"mapped",[105]],[[120363,120363],"mapped",[106]],[[120364,120364],"mapped",[107]],[[120365,120365],"mapped",[108]],[[120366,120366],"mapped",[109]],[[120367,120367],"mapped",[110]],[[120368,120368],"mapped",[111]],[[120369,120369],"mapped",[112]],[[120370,120370],"mapped",[113]],[[120371,120371],"mapped",[114]],[[120372,120372],"mapped",[115]],[[120373,120373],"mapped",[116]],[[120374,120374],"mapped",[117]],[[120375,120375],"mapped",[118]],[[120376,120376],"mapped",[119]],[[120377,120377],"mapped",[120]],[[120378,120378],"mapped",[121]],[[120379,120379],"mapped",[122]],[[120380,120380],"mapped",[97]],[[120381,120381],"mapped",[98]],[[120382,120382],"mapped",[99]],[[120383,120383],"mapped",[100]],[[120384,120384],"mapped",[101]],[[120385,120385],"mapped",[102]],[[120386,120386],"mapped",[103]],[[120387,120387],"mapped",[104]],[[120388,120388],"mapped",[105]],[[120389,120389],"mapped",[106]],[[120390,120390],"mapped",[107]],[[120391,120391],"mapped",[108]],[[120392,120392],"mapped",[109]],[[120393,120393],"mapped",[110]],[[120394,120394],"mapped",[111]],[[120395,120395],"mapped",[112]],[[120396,120396],"mapped",[113]],[[120397,120397],"mapped",[114]],[[120398,120398],"mapped",[115]],[[120399,120399],"mapped",[116]],[[120400,120400],"mapped",[117]],[[120401,120401],"mapped",[118]],[[120402,120402],"mapped",[119]],[[120403,120403],"mapped",[120]],[[120404,120404],"mapped",[121]],[[120405,120405],"mapped",[122]],[[120406,120406],"mapped",[97]],[[120407,120407],"mapped",[98]],[[120408,120408],"mapped",[99]],[[120409,120409],"mapped",[100]],[[120410,120410],"mapped",[101]],[[120411,120411],"mapped",[102]],[[120412,120412],"mapped",[103]],[[120413,120413],"mapped",[104]],[[120414,120414],"mapped",[105]],[[120415,120415],"mapped",[106]],[[120416,120416],"mapped",[107]],[[120417,120417],"mapped",[108]],[[120418,120418],"mapped",[109]],[[120419,120419],"mapped",[110]],[[120420,120420],"mapped",[111]],[[120421,120421],"mapped",[112]],[[120422,120422],"mapped",[113]],[[120423,120423],"mapped",[114]],[[120424,120424],"mapped",[115]],[[120425,120425],"mapped",[116]],[[120426,120426],"mapped",[117]],[[120427,120427],"mapped",[118]],[[120428,120428],"mapped",[119]],[[120429,120429],"mapped",[120]],[[120430,120430],"mapped",[121]],[[120431,120431],"mapped",[122]],[[120432,120432],"mapped",[97]],[[120433,120433],"mapped",[98]],[[120434,120434],"mapped",[99]],[[120435,120435],"mapped",[100]],[[120436,120436],"mapped",[101]],[[120437,120437],"mapped",[102]],[[120438,120438],"mapped",[103]],[[120439,120439],"mapped",[104]],[[120440,120440],"mapped",[105]],[[120441,120441],"mapped",[106]],[[120442,120442],"mapped",[107]],[[120443,120443],"mapped",[108]],[[120444,120444],"mapped",[109]],[[120445,120445],"mapped",[110]],[[120446,120446],"mapped",[111]],[[120447,120447],"mapped",[112]],[[120448,120448],"mapped",[113]],[[120449,120449],"mapped",[114]],[[120450,120450],"mapped",[115]],[[120451,120451],"mapped",[116]],[[120452,120452],"mapped",[117]],[[120453,120453],"mapped",[118]],[[120454,120454],"mapped",[119]],[[120455,120455],"mapped",[120]],[[120456,120456],"mapped",[121]],[[120457,120457],"mapped",[122]],[[120458,120458],"mapped",[97]],[[120459,120459],"mapped",[98]],[[120460,120460],"mapped",[99]],[[120461,120461],"mapped",[100]],[[120462,120462],"mapped",[101]],[[120463,120463],"mapped",[102]],[[120464,120464],"mapped",[103]],[[120465,120465],"mapped",[104]],[[120466,120466],"mapped",[105]],[[120467,120467],"mapped",[106]],[[120468,120468],"mapped",[107]],[[120469,120469],"mapped",[108]],[[120470,120470],"mapped",[109]],[[120471,120471],"mapped",[110]],[[120472,120472],"mapped",[111]],[[120473,120473],"mapped",[112]],[[120474,120474],"mapped",[113]],[[120475,120475],"mapped",[114]],[[120476,120476],"mapped",[115]],[[120477,120477],"mapped",[116]],[[120478,120478],"mapped",[117]],[[120479,120479],"mapped",[118]],[[120480,120480],"mapped",[119]],[[120481,120481],"mapped",[120]],[[120482,120482],"mapped",[121]],[[120483,120483],"mapped",[122]],[[120484,120484],"mapped",[305]],[[120485,120485],"mapped",[567]],[[120486,120487],"disallowed"],[[120488,120488],"mapped",[945]],[[120489,120489],"mapped",[946]],[[120490,120490],"mapped",[947]],[[120491,120491],"mapped",[948]],[[120492,120492],"mapped",[949]],[[120493,120493],"mapped",[950]],[[120494,120494],"mapped",[951]],[[120495,120495],"mapped",[952]],[[120496,120496],"mapped",[953]],[[120497,120497],"mapped",[954]],[[120498,120498],"mapped",[955]],[[120499,120499],"mapped",[956]],[[120500,120500],"mapped",[957]],[[120501,120501],"mapped",[958]],[[120502,120502],"mapped",[959]],[[120503,120503],"mapped",[960]],[[120504,120504],"mapped",[961]],[[120505,120505],"mapped",[952]],[[120506,120506],"mapped",[963]],[[120507,120507],"mapped",[964]],[[120508,120508],"mapped",[965]],[[120509,120509],"mapped",[966]],[[120510,120510],"mapped",[967]],[[120511,120511],"mapped",[968]],[[120512,120512],"mapped",[969]],[[120513,120513],"mapped",[8711]],[[120514,120514],"mapped",[945]],[[120515,120515],"mapped",[946]],[[120516,120516],"mapped",[947]],[[120517,120517],"mapped",[948]],[[120518,120518],"mapped",[949]],[[120519,120519],"mapped",[950]],[[120520,120520],"mapped",[951]],[[120521,120521],"mapped",[952]],[[120522,120522],"mapped",[953]],[[120523,120523],"mapped",[954]],[[120524,120524],"mapped",[955]],[[120525,120525],"mapped",[956]],[[120526,120526],"mapped",[957]],[[120527,120527],"mapped",[958]],[[120528,120528],"mapped",[959]],[[120529,120529],"mapped",[960]],[[120530,120530],"mapped",[961]],[[120531,120532],"mapped",[963]],[[120533,120533],"mapped",[964]],[[120534,120534],"mapped",[965]],[[120535,120535],"mapped",[966]],[[120536,120536],"mapped",[967]],[[120537,120537],"mapped",[968]],[[120538,120538],"mapped",[969]],[[120539,120539],"mapped",[8706]],[[120540,120540],"mapped",[949]],[[120541,120541],"mapped",[952]],[[120542,120542],"mapped",[954]],[[120543,120543],"mapped",[966]],[[120544,120544],"mapped",[961]],[[120545,120545],"mapped",[960]],[[120546,120546],"mapped",[945]],[[120547,120547],"mapped",[946]],[[120548,120548],"mapped",[947]],[[120549,120549],"mapped",[948]],[[120550,120550],"mapped",[949]],[[120551,120551],"mapped",[950]],[[120552,120552],"mapped",[951]],[[120553,120553],"mapped",[952]],[[120554,120554],"mapped",[953]],[[120555,120555],"mapped",[954]],[[120556,120556],"mapped",[955]],[[120557,120557],"mapped",[956]],[[120558,120558],"mapped",[957]],[[120559,120559],"mapped",[958]],[[120560,120560],"mapped",[959]],[[120561,120561],"mapped",[960]],[[120562,120562],"mapped",[961]],[[120563,120563],"mapped",[952]],[[120564,120564],"mapped",[963]],[[120565,120565],"mapped",[964]],[[120566,120566],"mapped",[965]],[[120567,120567],"mapped",[966]],[[120568,120568],"mapped",[967]],[[120569,120569],"mapped",[968]],[[120570,120570],"mapped",[969]],[[120571,120571],"mapped",[8711]],[[120572,120572],"mapped",[945]],[[120573,120573],"mapped",[946]],[[120574,120574],"mapped",[947]],[[120575,120575],"mapped",[948]],[[120576,120576],"mapped",[949]],[[120577,120577],"mapped",[950]],[[120578,120578],"mapped",[951]],[[120579,120579],"mapped",[952]],[[120580,120580],"mapped",[953]],[[120581,120581],"mapped",[954]],[[120582,120582],"mapped",[955]],[[120583,120583],"mapped",[956]],[[120584,120584],"mapped",[957]],[[120585,120585],"mapped",[958]],[[120586,120586],"mapped",[959]],[[120587,120587],"mapped",[960]],[[120588,120588],"mapped",[961]],[[120589,120590],"mapped",[963]],[[120591,120591],"mapped",[964]],[[120592,120592],"mapped",[965]],[[120593,120593],"mapped",[966]],[[120594,120594],"mapped",[967]],[[120595,120595],"mapped",[968]],[[120596,120596],"mapped",[969]],[[120597,120597],"mapped",[8706]],[[120598,120598],"mapped",[949]],[[120599,120599],"mapped",[952]],[[120600,120600],"mapped",[954]],[[120601,120601],"mapped",[966]],[[120602,120602],"mapped",[961]],[[120603,120603],"mapped",[960]],[[120604,120604],"mapped",[945]],[[120605,120605],"mapped",[946]],[[120606,120606],"mapped",[947]],[[120607,120607],"mapped",[948]],[[120608,120608],"mapped",[949]],[[120609,120609],"mapped",[950]],[[120610,120610],"mapped",[951]],[[120611,120611],"mapped",[952]],[[120612,120612],"mapped",[953]],[[120613,120613],"mapped",[954]],[[120614,120614],"mapped",[955]],[[120615,120615],"mapped",[956]],[[120616,120616],"mapped",[957]],[[120617,120617],"mapped",[958]],[[120618,120618],"mapped",[959]],[[120619,120619],"mapped",[960]],[[120620,120620],"mapped",[961]],[[120621,120621],"mapped",[952]],[[120622,120622],"mapped",[963]],[[120623,120623],"mapped",[964]],[[120624,120624],"mapped",[965]],[[120625,120625],"mapped",[966]],[[120626,120626],"mapped",[967]],[[120627,120627],"mapped",[968]],[[120628,120628],"mapped",[969]],[[120629,120629],"mapped",[8711]],[[120630,120630],"mapped",[945]],[[120631,120631],"mapped",[946]],[[120632,120632],"mapped",[947]],[[120633,120633],"mapped",[948]],[[120634,120634],"mapped",[949]],[[120635,120635],"mapped",[950]],[[120636,120636],"mapped",[951]],[[120637,120637],"mapped",[952]],[[120638,120638],"mapped",[953]],[[120639,120639],"mapped",[954]],[[120640,120640],"mapped",[955]],[[120641,120641],"mapped",[956]],[[120642,120642],"mapped",[957]],[[120643,120643],"mapped",[958]],[[120644,120644],"mapped",[959]],[[120645,120645],"mapped",[960]],[[120646,120646],"mapped",[961]],[[120647,120648],"mapped",[963]],[[120649,120649],"mapped",[964]],[[120650,120650],"mapped",[965]],[[120651,120651],"mapped",[966]],[[120652,120652],"mapped",[967]],[[120653,120653],"mapped",[968]],[[120654,120654],"mapped",[969]],[[120655,120655],"mapped",[8706]],[[120656,120656],"mapped",[949]],[[120657,120657],"mapped",[952]],[[120658,120658],"mapped",[954]],[[120659,120659],"mapped",[966]],[[120660,120660],"mapped",[961]],[[120661,120661],"mapped",[960]],[[120662,120662],"mapped",[945]],[[120663,120663],"mapped",[946]],[[120664,120664],"mapped",[947]],[[120665,120665],"mapped",[948]],[[120666,120666],"mapped",[949]],[[120667,120667],"mapped",[950]],[[120668,120668],"mapped",[951]],[[120669,120669],"mapped",[952]],[[120670,120670],"mapped",[953]],[[120671,120671],"mapped",[954]],[[120672,120672],"mapped",[955]],[[120673,120673],"mapped",[956]],[[120674,120674],"mapped",[957]],[[120675,120675],"mapped",[958]],[[120676,120676],"mapped",[959]],[[120677,120677],"mapped",[960]],[[120678,120678],"mapped",[961]],[[120679,120679],"mapped",[952]],[[120680,120680],"mapped",[963]],[[120681,120681],"mapped",[964]],[[120682,120682],"mapped",[965]],[[120683,120683],"mapped",[966]],[[120684,120684],"mapped",[967]],[[120685,120685],"mapped",[968]],[[120686,120686],"mapped",[969]],[[120687,120687],"mapped",[8711]],[[120688,120688],"mapped",[945]],[[120689,120689],"mapped",[946]],[[120690,120690],"mapped",[947]],[[120691,120691],"mapped",[948]],[[120692,120692],"mapped",[949]],[[120693,120693],"mapped",[950]],[[120694,120694],"mapped",[951]],[[120695,120695],"mapped",[952]],[[120696,120696],"mapped",[953]],[[120697,120697],"mapped",[954]],[[120698,120698],"mapped",[955]],[[120699,120699],"mapped",[956]],[[120700,120700],"mapped",[957]],[[120701,120701],"mapped",[958]],[[120702,120702],"mapped",[959]],[[120703,120703],"mapped",[960]],[[120704,120704],"mapped",[961]],[[120705,120706],"mapped",[963]],[[120707,120707],"mapped",[964]],[[120708,120708],"mapped",[965]],[[120709,120709],"mapped",[966]],[[120710,120710],"mapped",[967]],[[120711,120711],"mapped",[968]],[[120712,120712],"mapped",[969]],[[120713,120713],"mapped",[8706]],[[120714,120714],"mapped",[949]],[[120715,120715],"mapped",[952]],[[120716,120716],"mapped",[954]],[[120717,120717],"mapped",[966]],[[120718,120718],"mapped",[961]],[[120719,120719],"mapped",[960]],[[120720,120720],"mapped",[945]],[[120721,120721],"mapped",[946]],[[120722,120722],"mapped",[947]],[[120723,120723],"mapped",[948]],[[120724,120724],"mapped",[949]],[[120725,120725],"mapped",[950]],[[120726,120726],"mapped",[951]],[[120727,120727],"mapped",[952]],[[120728,120728],"mapped",[953]],[[120729,120729],"mapped",[954]],[[120730,120730],"mapped",[955]],[[120731,120731],"mapped",[956]],[[120732,120732],"mapped",[957]],[[120733,120733],"mapped",[958]],[[120734,120734],"mapped",[959]],[[120735,120735],"mapped",[960]],[[120736,120736],"mapped",[961]],[[120737,120737],"mapped",[952]],[[120738,120738],"mapped",[963]],[[120739,120739],"mapped",[964]],[[120740,120740],"mapped",[965]],[[120741,120741],"mapped",[966]],[[120742,120742],"mapped",[967]],[[120743,120743],"mapped",[968]],[[120744,120744],"mapped",[969]],[[120745,120745],"mapped",[8711]],[[120746,120746],"mapped",[945]],[[120747,120747],"mapped",[946]],[[120748,120748],"mapped",[947]],[[120749,120749],"mapped",[948]],[[120750,120750],"mapped",[949]],[[120751,120751],"mapped",[950]],[[120752,120752],"mapped",[951]],[[120753,120753],"mapped",[952]],[[120754,120754],"mapped",[953]],[[120755,120755],"mapped",[954]],[[120756,120756],"mapped",[955]],[[120757,120757],"mapped",[956]],[[120758,120758],"mapped",[957]],[[120759,120759],"mapped",[958]],[[120760,120760],"mapped",[959]],[[120761,120761],"mapped",[960]],[[120762,120762],"mapped",[961]],[[120763,120764],"mapped",[963]],[[120765,120765],"mapped",[964]],[[120766,120766],"mapped",[965]],[[120767,120767],"mapped",[966]],[[120768,120768],"mapped",[967]],[[120769,120769],"mapped",[968]],[[120770,120770],"mapped",[969]],[[120771,120771],"mapped",[8706]],[[120772,120772],"mapped",[949]],[[120773,120773],"mapped",[952]],[[120774,120774],"mapped",[954]],[[120775,120775],"mapped",[966]],[[120776,120776],"mapped",[961]],[[120777,120777],"mapped",[960]],[[120778,120779],"mapped",[989]],[[120780,120781],"disallowed"],[[120782,120782],"mapped",[48]],[[120783,120783],"mapped",[49]],[[120784,120784],"mapped",[50]],[[120785,120785],"mapped",[51]],[[120786,120786],"mapped",[52]],[[120787,120787],"mapped",[53]],[[120788,120788],"mapped",[54]],[[120789,120789],"mapped",[55]],[[120790,120790],"mapped",[56]],[[120791,120791],"mapped",[57]],[[120792,120792],"mapped",[48]],[[120793,120793],"mapped",[49]],[[120794,120794],"mapped",[50]],[[120795,120795],"mapped",[51]],[[120796,120796],"mapped",[52]],[[120797,120797],"mapped",[53]],[[120798,120798],"mapped",[54]],[[120799,120799],"mapped",[55]],[[120800,120800],"mapped",[56]],[[120801,120801],"mapped",[57]],[[120802,120802],"mapped",[48]],[[120803,120803],"mapped",[49]],[[120804,120804],"mapped",[50]],[[120805,120805],"mapped",[51]],[[120806,120806],"mapped",[52]],[[120807,120807],"mapped",[53]],[[120808,120808],"mapped",[54]],[[120809,120809],"mapped",[55]],[[120810,120810],"mapped",[56]],[[120811,120811],"mapped",[57]],[[120812,120812],"mapped",[48]],[[120813,120813],"mapped",[49]],[[120814,120814],"mapped",[50]],[[120815,120815],"mapped",[51]],[[120816,120816],"mapped",[52]],[[120817,120817],"mapped",[53]],[[120818,120818],"mapped",[54]],[[120819,120819],"mapped",[55]],[[120820,120820],"mapped",[56]],[[120821,120821],"mapped",[57]],[[120822,120822],"mapped",[48]],[[120823,120823],"mapped",[49]],[[120824,120824],"mapped",[50]],[[120825,120825],"mapped",[51]],[[120826,120826],"mapped",[52]],[[120827,120827],"mapped",[53]],[[120828,120828],"mapped",[54]],[[120829,120829],"mapped",[55]],[[120830,120830],"mapped",[56]],[[120831,120831],"mapped",[57]],[[120832,121343],"valid",[],"NV8"],[[121344,121398],"valid"],[[121399,121402],"valid",[],"NV8"],[[121403,121452],"valid"],[[121453,121460],"valid",[],"NV8"],[[121461,121461],"valid"],[[121462,121475],"valid",[],"NV8"],[[121476,121476],"valid"],[[121477,121483],"valid",[],"NV8"],[[121484,121498],"disallowed"],[[121499,121503],"valid"],[[121504,121504],"disallowed"],[[121505,121519],"valid"],[[121520,124927],"disallowed"],[[124928,125124],"valid"],[[125125,125126],"disallowed"],[[125127,125135],"valid",[],"NV8"],[[125136,125142],"valid"],[[125143,126463],"disallowed"],[[126464,126464],"mapped",[1575]],[[126465,126465],"mapped",[1576]],[[126466,126466],"mapped",[1580]],[[126467,126467],"mapped",[1583]],[[126468,126468],"disallowed"],[[126469,126469],"mapped",[1608]],[[126470,126470],"mapped",[1586]],[[126471,126471],"mapped",[1581]],[[126472,126472],"mapped",[1591]],[[126473,126473],"mapped",[1610]],[[126474,126474],"mapped",[1603]],[[126475,126475],"mapped",[1604]],[[126476,126476],"mapped",[1605]],[[126477,126477],"mapped",[1606]],[[126478,126478],"mapped",[1587]],[[126479,126479],"mapped",[1593]],[[126480,126480],"mapped",[1601]],[[126481,126481],"mapped",[1589]],[[126482,126482],"mapped",[1602]],[[126483,126483],"mapped",[1585]],[[126484,126484],"mapped",[1588]],[[126485,126485],"mapped",[1578]],[[126486,126486],"mapped",[1579]],[[126487,126487],"mapped",[1582]],[[126488,126488],"mapped",[1584]],[[126489,126489],"mapped",[1590]],[[126490,126490],"mapped",[1592]],[[126491,126491],"mapped",[1594]],[[126492,126492],"mapped",[1646]],[[126493,126493],"mapped",[1722]],[[126494,126494],"mapped",[1697]],[[126495,126495],"mapped",[1647]],[[126496,126496],"disallowed"],[[126497,126497],"mapped",[1576]],[[126498,126498],"mapped",[1580]],[[126499,126499],"disallowed"],[[126500,126500],"mapped",[1607]],[[126501,126502],"disallowed"],[[126503,126503],"mapped",[1581]],[[126504,126504],"disallowed"],[[126505,126505],"mapped",[1610]],[[126506,126506],"mapped",[1603]],[[126507,126507],"mapped",[1604]],[[126508,126508],"mapped",[1605]],[[126509,126509],"mapped",[1606]],[[126510,126510],"mapped",[1587]],[[126511,126511],"mapped",[1593]],[[126512,126512],"mapped",[1601]],[[126513,126513],"mapped",[1589]],[[126514,126514],"mapped",[1602]],[[126515,126515],"disallowed"],[[126516,126516],"mapped",[1588]],[[126517,126517],"mapped",[1578]],[[126518,126518],"mapped",[1579]],[[126519,126519],"mapped",[1582]],[[126520,126520],"disallowed"],[[126521,126521],"mapped",[1590]],[[126522,126522],"disallowed"],[[126523,126523],"mapped",[1594]],[[126524,126529],"disallowed"],[[126530,126530],"mapped",[1580]],[[126531,126534],"disallowed"],[[126535,126535],"mapped",[1581]],[[126536,126536],"disallowed"],[[126537,126537],"mapped",[1610]],[[126538,126538],"disallowed"],[[126539,126539],"mapped",[1604]],[[126540,126540],"disallowed"],[[126541,126541],"mapped",[1606]],[[126542,126542],"mapped",[1587]],[[126543,126543],"mapped",[1593]],[[126544,126544],"disallowed"],[[126545,126545],"mapped",[1589]],[[126546,126546],"mapped",[1602]],[[126547,126547],"disallowed"],[[126548,126548],"mapped",[1588]],[[126549,126550],"disallowed"],[[126551,126551],"mapped",[1582]],[[126552,126552],"disallowed"],[[126553,126553],"mapped",[1590]],[[126554,126554],"disallowed"],[[126555,126555],"mapped",[1594]],[[126556,126556],"disallowed"],[[126557,126557],"mapped",[1722]],[[126558,126558],"disallowed"],[[126559,126559],"mapped",[1647]],[[126560,126560],"disallowed"],[[126561,126561],"mapped",[1576]],[[126562,126562],"mapped",[1580]],[[126563,126563],"disallowed"],[[126564,126564],"mapped",[1607]],[[126565,126566],"disallowed"],[[126567,126567],"mapped",[1581]],[[126568,126568],"mapped",[1591]],[[126569,126569],"mapped",[1610]],[[126570,126570],"mapped",[1603]],[[126571,126571],"disallowed"],[[126572,126572],"mapped",[1605]],[[126573,126573],"mapped",[1606]],[[126574,126574],"mapped",[1587]],[[126575,126575],"mapped",[1593]],[[126576,126576],"mapped",[1601]],[[126577,126577],"mapped",[1589]],[[126578,126578],"mapped",[1602]],[[126579,126579],"disallowed"],[[126580,126580],"mapped",[1588]],[[126581,126581],"mapped",[1578]],[[126582,126582],"mapped",[1579]],[[126583,126583],"mapped",[1582]],[[126584,126584],"disallowed"],[[126585,126585],"mapped",[1590]],[[126586,126586],"mapped",[1592]],[[126587,126587],"mapped",[1594]],[[126588,126588],"mapped",[1646]],[[126589,126589],"disallowed"],[[126590,126590],"mapped",[1697]],[[126591,126591],"disallowed"],[[126592,126592],"mapped",[1575]],[[126593,126593],"mapped",[1576]],[[126594,126594],"mapped",[1580]],[[126595,126595],"mapped",[1583]],[[126596,126596],"mapped",[1607]],[[126597,126597],"mapped",[1608]],[[126598,126598],"mapped",[1586]],[[126599,126599],"mapped",[1581]],[[126600,126600],"mapped",[1591]],[[126601,126601],"mapped",[1610]],[[126602,126602],"disallowed"],[[126603,126603],"mapped",[1604]],[[126604,126604],"mapped",[1605]],[[126605,126605],"mapped",[1606]],[[126606,126606],"mapped",[1587]],[[126607,126607],"mapped",[1593]],[[126608,126608],"mapped",[1601]],[[126609,126609],"mapped",[1589]],[[126610,126610],"mapped",[1602]],[[126611,126611],"mapped",[1585]],[[126612,126612],"mapped",[1588]],[[126613,126613],"mapped",[1578]],[[126614,126614],"mapped",[1579]],[[126615,126615],"mapped",[1582]],[[126616,126616],"mapped",[1584]],[[126617,126617],"mapped",[1590]],[[126618,126618],"mapped",[1592]],[[126619,126619],"mapped",[1594]],[[126620,126624],"disallowed"],[[126625,126625],"mapped",[1576]],[[126626,126626],"mapped",[1580]],[[126627,126627],"mapped",[1583]],[[126628,126628],"disallowed"],[[126629,126629],"mapped",[1608]],[[126630,126630],"mapped",[1586]],[[126631,126631],"mapped",[1581]],[[126632,126632],"mapped",[1591]],[[126633,126633],"mapped",[1610]],[[126634,126634],"disallowed"],[[126635,126635],"mapped",[1604]],[[126636,126636],"mapped",[1605]],[[126637,126637],"mapped",[1606]],[[126638,126638],"mapped",[1587]],[[126639,126639],"mapped",[1593]],[[126640,126640],"mapped",[1601]],[[126641,126641],"mapped",[1589]],[[126642,126642],"mapped",[1602]],[[126643,126643],"mapped",[1585]],[[126644,126644],"mapped",[1588]],[[126645,126645],"mapped",[1578]],[[126646,126646],"mapped",[1579]],[[126647,126647],"mapped",[1582]],[[126648,126648],"mapped",[1584]],[[126649,126649],"mapped",[1590]],[[126650,126650],"mapped",[1592]],[[126651,126651],"mapped",[1594]],[[126652,126703],"disallowed"],[[126704,126705],"valid",[],"NV8"],[[126706,126975],"disallowed"],[[126976,127019],"valid",[],"NV8"],[[127020,127023],"disallowed"],[[127024,127123],"valid",[],"NV8"],[[127124,127135],"disallowed"],[[127136,127150],"valid",[],"NV8"],[[127151,127152],"disallowed"],[[127153,127166],"valid",[],"NV8"],[[127167,127167],"valid",[],"NV8"],[[127168,127168],"disallowed"],[[127169,127183],"valid",[],"NV8"],[[127184,127184],"disallowed"],[[127185,127199],"valid",[],"NV8"],[[127200,127221],"valid",[],"NV8"],[[127222,127231],"disallowed"],[[127232,127232],"disallowed"],[[127233,127233],"disallowed_STD3_mapped",[48,44]],[[127234,127234],"disallowed_STD3_mapped",[49,44]],[[127235,127235],"disallowed_STD3_mapped",[50,44]],[[127236,127236],"disallowed_STD3_mapped",[51,44]],[[127237,127237],"disallowed_STD3_mapped",[52,44]],[[127238,127238],"disallowed_STD3_mapped",[53,44]],[[127239,127239],"disallowed_STD3_mapped",[54,44]],[[127240,127240],"disallowed_STD3_mapped",[55,44]],[[127241,127241],"disallowed_STD3_mapped",[56,44]],[[127242,127242],"disallowed_STD3_mapped",[57,44]],[[127243,127244],"valid",[],"NV8"],[[127245,127247],"disallowed"],[[127248,127248],"disallowed_STD3_mapped",[40,97,41]],[[127249,127249],"disallowed_STD3_mapped",[40,98,41]],[[127250,127250],"disallowed_STD3_mapped",[40,99,41]],[[127251,127251],"disallowed_STD3_mapped",[40,100,41]],[[127252,127252],"disallowed_STD3_mapped",[40,101,41]],[[127253,127253],"disallowed_STD3_mapped",[40,102,41]],[[127254,127254],"disallowed_STD3_mapped",[40,103,41]],[[127255,127255],"disallowed_STD3_mapped",[40,104,41]],[[127256,127256],"disallowed_STD3_mapped",[40,105,41]],[[127257,127257],"disallowed_STD3_mapped",[40,106,41]],[[127258,127258],"disallowed_STD3_mapped",[40,107,41]],[[127259,127259],"disallowed_STD3_mapped",[40,108,41]],[[127260,127260],"disallowed_STD3_mapped",[40,109,41]],[[127261,127261],"disallowed_STD3_mapped",[40,110,41]],[[127262,127262],"disallowed_STD3_mapped",[40,111,41]],[[127263,127263],"disallowed_STD3_mapped",[40,112,41]],[[127264,127264],"disallowed_STD3_mapped",[40,113,41]],[[127265,127265],"disallowed_STD3_mapped",[40,114,41]],[[127266,127266],"disallowed_STD3_mapped",[40,115,41]],[[127267,127267],"disallowed_STD3_mapped",[40,116,41]],[[127268,127268],"disallowed_STD3_mapped",[40,117,41]],[[127269,127269],"disallowed_STD3_mapped",[40,118,41]],[[127270,127270],"disallowed_STD3_mapped",[40,119,41]],[[127271,127271],"disallowed_STD3_mapped",[40,120,41]],[[127272,127272],"disallowed_STD3_mapped",[40,121,41]],[[127273,127273],"disallowed_STD3_mapped",[40,122,41]],[[127274,127274],"mapped",[12308,115,12309]],[[127275,127275],"mapped",[99]],[[127276,127276],"mapped",[114]],[[127277,127277],"mapped",[99,100]],[[127278,127278],"mapped",[119,122]],[[127279,127279],"disallowed"],[[127280,127280],"mapped",[97]],[[127281,127281],"mapped",[98]],[[127282,127282],"mapped",[99]],[[127283,127283],"mapped",[100]],[[127284,127284],"mapped",[101]],[[127285,127285],"mapped",[102]],[[127286,127286],"mapped",[103]],[[127287,127287],"mapped",[104]],[[127288,127288],"mapped",[105]],[[127289,127289],"mapped",[106]],[[127290,127290],"mapped",[107]],[[127291,127291],"mapped",[108]],[[127292,127292],"mapped",[109]],[[127293,127293],"mapped",[110]],[[127294,127294],"mapped",[111]],[[127295,127295],"mapped",[112]],[[127296,127296],"mapped",[113]],[[127297,127297],"mapped",[114]],[[127298,127298],"mapped",[115]],[[127299,127299],"mapped",[116]],[[127300,127300],"mapped",[117]],[[127301,127301],"mapped",[118]],[[127302,127302],"mapped",[119]],[[127303,127303],"mapped",[120]],[[127304,127304],"mapped",[121]],[[127305,127305],"mapped",[122]],[[127306,127306],"mapped",[104,118]],[[127307,127307],"mapped",[109,118]],[[127308,127308],"mapped",[115,100]],[[127309,127309],"mapped",[115,115]],[[127310,127310],"mapped",[112,112,118]],[[127311,127311],"mapped",[119,99]],[[127312,127318],"valid",[],"NV8"],[[127319,127319],"valid",[],"NV8"],[[127320,127326],"valid",[],"NV8"],[[127327,127327],"valid",[],"NV8"],[[127328,127337],"valid",[],"NV8"],[[127338,127338],"mapped",[109,99]],[[127339,127339],"mapped",[109,100]],[[127340,127343],"disallowed"],[[127344,127352],"valid",[],"NV8"],[[127353,127353],"valid",[],"NV8"],[[127354,127354],"valid",[],"NV8"],[[127355,127356],"valid",[],"NV8"],[[127357,127358],"valid",[],"NV8"],[[127359,127359],"valid",[],"NV8"],[[127360,127369],"valid",[],"NV8"],[[127370,127373],"valid",[],"NV8"],[[127374,127375],"valid",[],"NV8"],[[127376,127376],"mapped",[100,106]],[[127377,127386],"valid",[],"NV8"],[[127387,127461],"disallowed"],[[127462,127487],"valid",[],"NV8"],[[127488,127488],"mapped",[12411,12363]],[[127489,127489],"mapped",[12467,12467]],[[127490,127490],"mapped",[12469]],[[127491,127503],"disallowed"],[[127504,127504],"mapped",[25163]],[[127505,127505],"mapped",[23383]],[[127506,127506],"mapped",[21452]],[[127507,127507],"mapped",[12487]],[[127508,127508],"mapped",[20108]],[[127509,127509],"mapped",[22810]],[[127510,127510],"mapped",[35299]],[[127511,127511],"mapped",[22825]],[[127512,127512],"mapped",[20132]],[[127513,127513],"mapped",[26144]],[[127514,127514],"mapped",[28961]],[[127515,127515],"mapped",[26009]],[[127516,127516],"mapped",[21069]],[[127517,127517],"mapped",[24460]],[[127518,127518],"mapped",[20877]],[[127519,127519],"mapped",[26032]],[[127520,127520],"mapped",[21021]],[[127521,127521],"mapped",[32066]],[[127522,127522],"mapped",[29983]],[[127523,127523],"mapped",[36009]],[[127524,127524],"mapped",[22768]],[[127525,127525],"mapped",[21561]],[[127526,127526],"mapped",[28436]],[[127527,127527],"mapped",[25237]],[[127528,127528],"mapped",[25429]],[[127529,127529],"mapped",[19968]],[[127530,127530],"mapped",[19977]],[[127531,127531],"mapped",[36938]],[[127532,127532],"mapped",[24038]],[[127533,127533],"mapped",[20013]],[[127534,127534],"mapped",[21491]],[[127535,127535],"mapped",[25351]],[[127536,127536],"mapped",[36208]],[[127537,127537],"mapped",[25171]],[[127538,127538],"mapped",[31105]],[[127539,127539],"mapped",[31354]],[[127540,127540],"mapped",[21512]],[[127541,127541],"mapped",[28288]],[[127542,127542],"mapped",[26377]],[[127543,127543],"mapped",[26376]],[[127544,127544],"mapped",[30003]],[[127545,127545],"mapped",[21106]],[[127546,127546],"mapped",[21942]],[[127547,127551],"disallowed"],[[127552,127552],"mapped",[12308,26412,12309]],[[127553,127553],"mapped",[12308,19977,12309]],[[127554,127554],"mapped",[12308,20108,12309]],[[127555,127555],"mapped",[12308,23433,12309]],[[127556,127556],"mapped",[12308,28857,12309]],[[127557,127557],"mapped",[12308,25171,12309]],[[127558,127558],"mapped",[12308,30423,12309]],[[127559,127559],"mapped",[12308,21213,12309]],[[127560,127560],"mapped",[12308,25943,12309]],[[127561,127567],"disallowed"],[[127568,127568],"mapped",[24471]],[[127569,127569],"mapped",[21487]],[[127570,127743],"disallowed"],[[127744,127776],"valid",[],"NV8"],[[127777,127788],"valid",[],"NV8"],[[127789,127791],"valid",[],"NV8"],[[127792,127797],"valid",[],"NV8"],[[127798,127798],"valid",[],"NV8"],[[127799,127868],"valid",[],"NV8"],[[127869,127869],"valid",[],"NV8"],[[127870,127871],"valid",[],"NV8"],[[127872,127891],"valid",[],"NV8"],[[127892,127903],"valid",[],"NV8"],[[127904,127940],"valid",[],"NV8"],[[127941,127941],"valid",[],"NV8"],[[127942,127946],"valid",[],"NV8"],[[127947,127950],"valid",[],"NV8"],[[127951,127955],"valid",[],"NV8"],[[127956,127967],"valid",[],"NV8"],[[127968,127984],"valid",[],"NV8"],[[127985,127991],"valid",[],"NV8"],[[127992,127999],"valid",[],"NV8"],[[128000,128062],"valid",[],"NV8"],[[128063,128063],"valid",[],"NV8"],[[128064,128064],"valid",[],"NV8"],[[128065,128065],"valid",[],"NV8"],[[128066,128247],"valid",[],"NV8"],[[128248,128248],"valid",[],"NV8"],[[128249,128252],"valid",[],"NV8"],[[128253,128254],"valid",[],"NV8"],[[128255,128255],"valid",[],"NV8"],[[128256,128317],"valid",[],"NV8"],[[128318,128319],"valid",[],"NV8"],[[128320,128323],"valid",[],"NV8"],[[128324,128330],"valid",[],"NV8"],[[128331,128335],"valid",[],"NV8"],[[128336,128359],"valid",[],"NV8"],[[128360,128377],"valid",[],"NV8"],[[128378,128378],"disallowed"],[[128379,128419],"valid",[],"NV8"],[[128420,128420],"disallowed"],[[128421,128506],"valid",[],"NV8"],[[128507,128511],"valid",[],"NV8"],[[128512,128512],"valid",[],"NV8"],[[128513,128528],"valid",[],"NV8"],[[128529,128529],"valid",[],"NV8"],[[128530,128532],"valid",[],"NV8"],[[128533,128533],"valid",[],"NV8"],[[128534,128534],"valid",[],"NV8"],[[128535,128535],"valid",[],"NV8"],[[128536,128536],"valid",[],"NV8"],[[128537,128537],"valid",[],"NV8"],[[128538,128538],"valid",[],"NV8"],[[128539,128539],"valid",[],"NV8"],[[128540,128542],"valid",[],"NV8"],[[128543,128543],"valid",[],"NV8"],[[128544,128549],"valid",[],"NV8"],[[128550,128551],"valid",[],"NV8"],[[128552,128555],"valid",[],"NV8"],[[128556,128556],"valid",[],"NV8"],[[128557,128557],"valid",[],"NV8"],[[128558,128559],"valid",[],"NV8"],[[128560,128563],"valid",[],"NV8"],[[128564,128564],"valid",[],"NV8"],[[128565,128576],"valid",[],"NV8"],[[128577,128578],"valid",[],"NV8"],[[128579,128580],"valid",[],"NV8"],[[128581,128591],"valid",[],"NV8"],[[128592,128639],"valid",[],"NV8"],[[128640,128709],"valid",[],"NV8"],[[128710,128719],"valid",[],"NV8"],[[128720,128720],"valid",[],"NV8"],[[128721,128735],"disallowed"],[[128736,128748],"valid",[],"NV8"],[[128749,128751],"disallowed"],[[128752,128755],"valid",[],"NV8"],[[128756,128767],"disallowed"],[[128768,128883],"valid",[],"NV8"],[[128884,128895],"disallowed"],[[128896,128980],"valid",[],"NV8"],[[128981,129023],"disallowed"],[[129024,129035],"valid",[],"NV8"],[[129036,129039],"disallowed"],[[129040,129095],"valid",[],"NV8"],[[129096,129103],"disallowed"],[[129104,129113],"valid",[],"NV8"],[[129114,129119],"disallowed"],[[129120,129159],"valid",[],"NV8"],[[129160,129167],"disallowed"],[[129168,129197],"valid",[],"NV8"],[[129198,129295],"disallowed"],[[129296,129304],"valid",[],"NV8"],[[129305,129407],"disallowed"],[[129408,129412],"valid",[],"NV8"],[[129413,129471],"disallowed"],[[129472,129472],"valid",[],"NV8"],[[129473,131069],"disallowed"],[[131070,131071],"disallowed"],[[131072,173782],"valid"],[[173783,173823],"disallowed"],[[173824,177972],"valid"],[[177973,177983],"disallowed"],[[177984,178205],"valid"],[[178206,178207],"disallowed"],[[178208,183969],"valid"],[[183970,194559],"disallowed"],[[194560,194560],"mapped",[20029]],[[194561,194561],"mapped",[20024]],[[194562,194562],"mapped",[20033]],[[194563,194563],"mapped",[131362]],[[194564,194564],"mapped",[20320]],[[194565,194565],"mapped",[20398]],[[194566,194566],"mapped",[20411]],[[194567,194567],"mapped",[20482]],[[194568,194568],"mapped",[20602]],[[194569,194569],"mapped",[20633]],[[194570,194570],"mapped",[20711]],[[194571,194571],"mapped",[20687]],[[194572,194572],"mapped",[13470]],[[194573,194573],"mapped",[132666]],[[194574,194574],"mapped",[20813]],[[194575,194575],"mapped",[20820]],[[194576,194576],"mapped",[20836]],[[194577,194577],"mapped",[20855]],[[194578,194578],"mapped",[132380]],[[194579,194579],"mapped",[13497]],[[194580,194580],"mapped",[20839]],[[194581,194581],"mapped",[20877]],[[194582,194582],"mapped",[132427]],[[194583,194583],"mapped",[20887]],[[194584,194584],"mapped",[20900]],[[194585,194585],"mapped",[20172]],[[194586,194586],"mapped",[20908]],[[194587,194587],"mapped",[20917]],[[194588,194588],"mapped",[168415]],[[194589,194589],"mapped",[20981]],[[194590,194590],"mapped",[20995]],[[194591,194591],"mapped",[13535]],[[194592,194592],"mapped",[21051]],[[194593,194593],"mapped",[21062]],[[194594,194594],"mapped",[21106]],[[194595,194595],"mapped",[21111]],[[194596,194596],"mapped",[13589]],[[194597,194597],"mapped",[21191]],[[194598,194598],"mapped",[21193]],[[194599,194599],"mapped",[21220]],[[194600,194600],"mapped",[21242]],[[194601,194601],"mapped",[21253]],[[194602,194602],"mapped",[21254]],[[194603,194603],"mapped",[21271]],[[194604,194604],"mapped",[21321]],[[194605,194605],"mapped",[21329]],[[194606,194606],"mapped",[21338]],[[194607,194607],"mapped",[21363]],[[194608,194608],"mapped",[21373]],[[194609,194611],"mapped",[21375]],[[194612,194612],"mapped",[133676]],[[194613,194613],"mapped",[28784]],[[194614,194614],"mapped",[21450]],[[194615,194615],"mapped",[21471]],[[194616,194616],"mapped",[133987]],[[194617,194617],"mapped",[21483]],[[194618,194618],"mapped",[21489]],[[194619,194619],"mapped",[21510]],[[194620,194620],"mapped",[21662]],[[194621,194621],"mapped",[21560]],[[194622,194622],"mapped",[21576]],[[194623,194623],"mapped",[21608]],[[194624,194624],"mapped",[21666]],[[194625,194625],"mapped",[21750]],[[194626,194626],"mapped",[21776]],[[194627,194627],"mapped",[21843]],[[194628,194628],"mapped",[21859]],[[194629,194630],"mapped",[21892]],[[194631,194631],"mapped",[21913]],[[194632,194632],"mapped",[21931]],[[194633,194633],"mapped",[21939]],[[194634,194634],"mapped",[21954]],[[194635,194635],"mapped",[22294]],[[194636,194636],"mapped",[22022]],[[194637,194637],"mapped",[22295]],[[194638,194638],"mapped",[22097]],[[194639,194639],"mapped",[22132]],[[194640,194640],"mapped",[20999]],[[194641,194641],"mapped",[22766]],[[194642,194642],"mapped",[22478]],[[194643,194643],"mapped",[22516]],[[194644,194644],"mapped",[22541]],[[194645,194645],"mapped",[22411]],[[194646,194646],"mapped",[22578]],[[194647,194647],"mapped",[22577]],[[194648,194648],"mapped",[22700]],[[194649,194649],"mapped",[136420]],[[194650,194650],"mapped",[22770]],[[194651,194651],"mapped",[22775]],[[194652,194652],"mapped",[22790]],[[194653,194653],"mapped",[22810]],[[194654,194654],"mapped",[22818]],[[194655,194655],"mapped",[22882]],[[194656,194656],"mapped",[136872]],[[194657,194657],"mapped",[136938]],[[194658,194658],"mapped",[23020]],[[194659,194659],"mapped",[23067]],[[194660,194660],"mapped",[23079]],[[194661,194661],"mapped",[23000]],[[194662,194662],"mapped",[23142]],[[194663,194663],"mapped",[14062]],[[194664,194664],"disallowed"],[[194665,194665],"mapped",[23304]],[[194666,194667],"mapped",[23358]],[[194668,194668],"mapped",[137672]],[[194669,194669],"mapped",[23491]],[[194670,194670],"mapped",[23512]],[[194671,194671],"mapped",[23527]],[[194672,194672],"mapped",[23539]],[[194673,194673],"mapped",[138008]],[[194674,194674],"mapped",[23551]],[[194675,194675],"mapped",[23558]],[[194676,194676],"disallowed"],[[194677,194677],"mapped",[23586]],[[194678,194678],"mapped",[14209]],[[194679,194679],"mapped",[23648]],[[194680,194680],"mapped",[23662]],[[194681,194681],"mapped",[23744]],[[194682,194682],"mapped",[23693]],[[194683,194683],"mapped",[138724]],[[194684,194684],"mapped",[23875]],[[194685,194685],"mapped",[138726]],[[194686,194686],"mapped",[23918]],[[194687,194687],"mapped",[23915]],[[194688,194688],"mapped",[23932]],[[194689,194689],"mapped",[24033]],[[194690,194690],"mapped",[24034]],[[194691,194691],"mapped",[14383]],[[194692,194692],"mapped",[24061]],[[194693,194693],"mapped",[24104]],[[194694,194694],"mapped",[24125]],[[194695,194695],"mapped",[24169]],[[194696,194696],"mapped",[14434]],[[194697,194697],"mapped",[139651]],[[194698,194698],"mapped",[14460]],[[194699,194699],"mapped",[24240]],[[194700,194700],"mapped",[24243]],[[194701,194701],"mapped",[24246]],[[194702,194702],"mapped",[24266]],[[194703,194703],"mapped",[172946]],[[194704,194704],"mapped",[24318]],[[194705,194706],"mapped",[140081]],[[194707,194707],"mapped",[33281]],[[194708,194709],"mapped",[24354]],[[194710,194710],"mapped",[14535]],[[194711,194711],"mapped",[144056]],[[194712,194712],"mapped",[156122]],[[194713,194713],"mapped",[24418]],[[194714,194714],"mapped",[24427]],[[194715,194715],"mapped",[14563]],[[194716,194716],"mapped",[24474]],[[194717,194717],"mapped",[24525]],[[194718,194718],"mapped",[24535]],[[194719,194719],"mapped",[24569]],[[194720,194720],"mapped",[24705]],[[194721,194721],"mapped",[14650]],[[194722,194722],"mapped",[14620]],[[194723,194723],"mapped",[24724]],[[194724,194724],"mapped",[141012]],[[194725,194725],"mapped",[24775]],[[194726,194726],"mapped",[24904]],[[194727,194727],"mapped",[24908]],[[194728,194728],"mapped",[24910]],[[194729,194729],"mapped",[24908]],[[194730,194730],"mapped",[24954]],[[194731,194731],"mapped",[24974]],[[194732,194732],"mapped",[25010]],[[194733,194733],"mapped",[24996]],[[194734,194734],"mapped",[25007]],[[194735,194735],"mapped",[25054]],[[194736,194736],"mapped",[25074]],[[194737,194737],"mapped",[25078]],[[194738,194738],"mapped",[25104]],[[194739,194739],"mapped",[25115]],[[194740,194740],"mapped",[25181]],[[194741,194741],"mapped",[25265]],[[194742,194742],"mapped",[25300]],[[194743,194743],"mapped",[25424]],[[194744,194744],"mapped",[142092]],[[194745,194745],"mapped",[25405]],[[194746,194746],"mapped",[25340]],[[194747,194747],"mapped",[25448]],[[194748,194748],"mapped",[25475]],[[194749,194749],"mapped",[25572]],[[194750,194750],"mapped",[142321]],[[194751,194751],"mapped",[25634]],[[194752,194752],"mapped",[25541]],[[194753,194753],"mapped",[25513]],[[194754,194754],"mapped",[14894]],[[194755,194755],"mapped",[25705]],[[194756,194756],"mapped",[25726]],[[194757,194757],"mapped",[25757]],[[194758,194758],"mapped",[25719]],[[194759,194759],"mapped",[14956]],[[194760,194760],"mapped",[25935]],[[194761,194761],"mapped",[25964]],[[194762,194762],"mapped",[143370]],[[194763,194763],"mapped",[26083]],[[194764,194764],"mapped",[26360]],[[194765,194765],"mapped",[26185]],[[194766,194766],"mapped",[15129]],[[194767,194767],"mapped",[26257]],[[194768,194768],"mapped",[15112]],[[194769,194769],"mapped",[15076]],[[194770,194770],"mapped",[20882]],[[194771,194771],"mapped",[20885]],[[194772,194772],"mapped",[26368]],[[194773,194773],"mapped",[26268]],[[194774,194774],"mapped",[32941]],[[194775,194775],"mapped",[17369]],[[194776,194776],"mapped",[26391]],[[194777,194777],"mapped",[26395]],[[194778,194778],"mapped",[26401]],[[194779,194779],"mapped",[26462]],[[194780,194780],"mapped",[26451]],[[194781,194781],"mapped",[144323]],[[194782,194782],"mapped",[15177]],[[194783,194783],"mapped",[26618]],[[194784,194784],"mapped",[26501]],[[194785,194785],"mapped",[26706]],[[194786,194786],"mapped",[26757]],[[194787,194787],"mapped",[144493]],[[194788,194788],"mapped",[26766]],[[194789,194789],"mapped",[26655]],[[194790,194790],"mapped",[26900]],[[194791,194791],"mapped",[15261]],[[194792,194792],"mapped",[26946]],[[194793,194793],"mapped",[27043]],[[194794,194794],"mapped",[27114]],[[194795,194795],"mapped",[27304]],[[194796,194796],"mapped",[145059]],[[194797,194797],"mapped",[27355]],[[194798,194798],"mapped",[15384]],[[194799,194799],"mapped",[27425]],[[194800,194800],"mapped",[145575]],[[194801,194801],"mapped",[27476]],[[194802,194802],"mapped",[15438]],[[194803,194803],"mapped",[27506]],[[194804,194804],"mapped",[27551]],[[194805,194805],"mapped",[27578]],[[194806,194806],"mapped",[27579]],[[194807,194807],"mapped",[146061]],[[194808,194808],"mapped",[138507]],[[194809,194809],"mapped",[146170]],[[194810,194810],"mapped",[27726]],[[194811,194811],"mapped",[146620]],[[194812,194812],"mapped",[27839]],[[194813,194813],"mapped",[27853]],[[194814,194814],"mapped",[27751]],[[194815,194815],"mapped",[27926]],[[194816,194816],"mapped",[27966]],[[194817,194817],"mapped",[28023]],[[194818,194818],"mapped",[27969]],[[194819,194819],"mapped",[28009]],[[194820,194820],"mapped",[28024]],[[194821,194821],"mapped",[28037]],[[194822,194822],"mapped",[146718]],[[194823,194823],"mapped",[27956]],[[194824,194824],"mapped",[28207]],[[194825,194825],"mapped",[28270]],[[194826,194826],"mapped",[15667]],[[194827,194827],"mapped",[28363]],[[194828,194828],"mapped",[28359]],[[194829,194829],"mapped",[147153]],[[194830,194830],"mapped",[28153]],[[194831,194831],"mapped",[28526]],[[194832,194832],"mapped",[147294]],[[194833,194833],"mapped",[147342]],[[194834,194834],"mapped",[28614]],[[194835,194835],"mapped",[28729]],[[194836,194836],"mapped",[28702]],[[194837,194837],"mapped",[28699]],[[194838,194838],"mapped",[15766]],[[194839,194839],"mapped",[28746]],[[194840,194840],"mapped",[28797]],[[194841,194841],"mapped",[28791]],[[194842,194842],"mapped",[28845]],[[194843,194843],"mapped",[132389]],[[194844,194844],"mapped",[28997]],[[194845,194845],"mapped",[148067]],[[194846,194846],"mapped",[29084]],[[194847,194847],"disallowed"],[[194848,194848],"mapped",[29224]],[[194849,194849],"mapped",[29237]],[[194850,194850],"mapped",[29264]],[[194851,194851],"mapped",[149000]],[[194852,194852],"mapped",[29312]],[[194853,194853],"mapped",[29333]],[[194854,194854],"mapped",[149301]],[[194855,194855],"mapped",[149524]],[[194856,194856],"mapped",[29562]],[[194857,194857],"mapped",[29579]],[[194858,194858],"mapped",[16044]],[[194859,194859],"mapped",[29605]],[[194860,194861],"mapped",[16056]],[[194862,194862],"mapped",[29767]],[[194863,194863],"mapped",[29788]],[[194864,194864],"mapped",[29809]],[[194865,194865],"mapped",[29829]],[[194866,194866],"mapped",[29898]],[[194867,194867],"mapped",[16155]],[[194868,194868],"mapped",[29988]],[[194869,194869],"mapped",[150582]],[[194870,194870],"mapped",[30014]],[[194871,194871],"mapped",[150674]],[[194872,194872],"mapped",[30064]],[[194873,194873],"mapped",[139679]],[[194874,194874],"mapped",[30224]],[[194875,194875],"mapped",[151457]],[[194876,194876],"mapped",[151480]],[[194877,194877],"mapped",[151620]],[[194878,194878],"mapped",[16380]],[[194879,194879],"mapped",[16392]],[[194880,194880],"mapped",[30452]],[[194881,194881],"mapped",[151795]],[[194882,194882],"mapped",[151794]],[[194883,194883],"mapped",[151833]],[[194884,194884],"mapped",[151859]],[[194885,194885],"mapped",[30494]],[[194886,194887],"mapped",[30495]],[[194888,194888],"mapped",[30538]],[[194889,194889],"mapped",[16441]],[[194890,194890],"mapped",[30603]],[[194891,194891],"mapped",[16454]],[[194892,194892],"mapped",[16534]],[[194893,194893],"mapped",[152605]],[[194894,194894],"mapped",[30798]],[[194895,194895],"mapped",[30860]],[[194896,194896],"mapped",[30924]],[[194897,194897],"mapped",[16611]],[[194898,194898],"mapped",[153126]],[[194899,194899],"mapped",[31062]],[[194900,194900],"mapped",[153242]],[[194901,194901],"mapped",[153285]],[[194902,194902],"mapped",[31119]],[[194903,194903],"mapped",[31211]],[[194904,194904],"mapped",[16687]],[[194905,194905],"mapped",[31296]],[[194906,194906],"mapped",[31306]],[[194907,194907],"mapped",[31311]],[[194908,194908],"mapped",[153980]],[[194909,194910],"mapped",[154279]],[[194911,194911],"disallowed"],[[194912,194912],"mapped",[16898]],[[194913,194913],"mapped",[154539]],[[194914,194914],"mapped",[31686]],[[194915,194915],"mapped",[31689]],[[194916,194916],"mapped",[16935]],[[194917,194917],"mapped",[154752]],[[194918,194918],"mapped",[31954]],[[194919,194919],"mapped",[17056]],[[194920,194920],"mapped",[31976]],[[194921,194921],"mapped",[31971]],[[194922,194922],"mapped",[32000]],[[194923,194923],"mapped",[155526]],[[194924,194924],"mapped",[32099]],[[194925,194925],"mapped",[17153]],[[194926,194926],"mapped",[32199]],[[194927,194927],"mapped",[32258]],[[194928,194928],"mapped",[32325]],[[194929,194929],"mapped",[17204]],[[194930,194930],"mapped",[156200]],[[194931,194931],"mapped",[156231]],[[194932,194932],"mapped",[17241]],[[194933,194933],"mapped",[156377]],[[194934,194934],"mapped",[32634]],[[194935,194935],"mapped",[156478]],[[194936,194936],"mapped",[32661]],[[194937,194937],"mapped",[32762]],[[194938,194938],"mapped",[32773]],[[194939,194939],"mapped",[156890]],[[194940,194940],"mapped",[156963]],[[194941,194941],"mapped",[32864]],[[194942,194942],"mapped",[157096]],[[194943,194943],"mapped",[32880]],[[194944,194944],"mapped",[144223]],[[194945,194945],"mapped",[17365]],[[194946,194946],"mapped",[32946]],[[194947,194947],"mapped",[33027]],[[194948,194948],"mapped",[17419]],[[194949,194949],"mapped",[33086]],[[194950,194950],"mapped",[23221]],[[194951,194951],"mapped",[157607]],[[194952,194952],"mapped",[157621]],[[194953,194953],"mapped",[144275]],[[194954,194954],"mapped",[144284]],[[194955,194955],"mapped",[33281]],[[194956,194956],"mapped",[33284]],[[194957,194957],"mapped",[36766]],[[194958,194958],"mapped",[17515]],[[194959,194959],"mapped",[33425]],[[194960,194960],"mapped",[33419]],[[194961,194961],"mapped",[33437]],[[194962,194962],"mapped",[21171]],[[194963,194963],"mapped",[33457]],[[194964,194964],"mapped",[33459]],[[194965,194965],"mapped",[33469]],[[194966,194966],"mapped",[33510]],[[194967,194967],"mapped",[158524]],[[194968,194968],"mapped",[33509]],[[194969,194969],"mapped",[33565]],[[194970,194970],"mapped",[33635]],[[194971,194971],"mapped",[33709]],[[194972,194972],"mapped",[33571]],[[194973,194973],"mapped",[33725]],[[194974,194974],"mapped",[33767]],[[194975,194975],"mapped",[33879]],[[194976,194976],"mapped",[33619]],[[194977,194977],"mapped",[33738]],[[194978,194978],"mapped",[33740]],[[194979,194979],"mapped",[33756]],[[194980,194980],"mapped",[158774]],[[194981,194981],"mapped",[159083]],[[194982,194982],"mapped",[158933]],[[194983,194983],"mapped",[17707]],[[194984,194984],"mapped",[34033]],[[194985,194985],"mapped",[34035]],[[194986,194986],"mapped",[34070]],[[194987,194987],"mapped",[160714]],[[194988,194988],"mapped",[34148]],[[194989,194989],"mapped",[159532]],[[194990,194990],"mapped",[17757]],[[194991,194991],"mapped",[17761]],[[194992,194992],"mapped",[159665]],[[194993,194993],"mapped",[159954]],[[194994,194994],"mapped",[17771]],[[194995,194995],"mapped",[34384]],[[194996,194996],"mapped",[34396]],[[194997,194997],"mapped",[34407]],[[194998,194998],"mapped",[34409]],[[194999,194999],"mapped",[34473]],[[195000,195000],"mapped",[34440]],[[195001,195001],"mapped",[34574]],[[195002,195002],"mapped",[34530]],[[195003,195003],"mapped",[34681]],[[195004,195004],"mapped",[34600]],[[195005,195005],"mapped",[34667]],[[195006,195006],"mapped",[34694]],[[195007,195007],"disallowed"],[[195008,195008],"mapped",[34785]],[[195009,195009],"mapped",[34817]],[[195010,195010],"mapped",[17913]],[[195011,195011],"mapped",[34912]],[[195012,195012],"mapped",[34915]],[[195013,195013],"mapped",[161383]],[[195014,195014],"mapped",[35031]],[[195015,195015],"mapped",[35038]],[[195016,195016],"mapped",[17973]],[[195017,195017],"mapped",[35066]],[[195018,195018],"mapped",[13499]],[[195019,195019],"mapped",[161966]],[[195020,195020],"mapped",[162150]],[[195021,195021],"mapped",[18110]],[[195022,195022],"mapped",[18119]],[[195023,195023],"mapped",[35488]],[[195024,195024],"mapped",[35565]],[[195025,195025],"mapped",[35722]],[[195026,195026],"mapped",[35925]],[[195027,195027],"mapped",[162984]],[[195028,195028],"mapped",[36011]],[[195029,195029],"mapped",[36033]],[[195030,195030],"mapped",[36123]],[[195031,195031],"mapped",[36215]],[[195032,195032],"mapped",[163631]],[[195033,195033],"mapped",[133124]],[[195034,195034],"mapped",[36299]],[[195035,195035],"mapped",[36284]],[[195036,195036],"mapped",[36336]],[[195037,195037],"mapped",[133342]],[[195038,195038],"mapped",[36564]],[[195039,195039],"mapped",[36664]],[[195040,195040],"mapped",[165330]],[[195041,195041],"mapped",[165357]],[[195042,195042],"mapped",[37012]],[[195043,195043],"mapped",[37105]],[[195044,195044],"mapped",[37137]],[[195045,195045],"mapped",[165678]],[[195046,195046],"mapped",[37147]],[[195047,195047],"mapped",[37432]],[[195048,195048],"mapped",[37591]],[[195049,195049],"mapped",[37592]],[[195050,195050],"mapped",[37500]],[[195051,195051],"mapped",[37881]],[[195052,195052],"mapped",[37909]],[[195053,195053],"mapped",[166906]],[[195054,195054],"mapped",[38283]],[[195055,195055],"mapped",[18837]],[[195056,195056],"mapped",[38327]],[[195057,195057],"mapped",[167287]],[[195058,195058],"mapped",[18918]],[[195059,195059],"mapped",[38595]],[[195060,195060],"mapped",[23986]],[[195061,195061],"mapped",[38691]],[[195062,195062],"mapped",[168261]],[[195063,195063],"mapped",[168474]],[[195064,195064],"mapped",[19054]],[[195065,195065],"mapped",[19062]],[[195066,195066],"mapped",[38880]],[[195067,195067],"mapped",[168970]],[[195068,195068],"mapped",[19122]],[[195069,195069],"mapped",[169110]],[[195070,195071],"mapped",[38923]],[[195072,195072],"mapped",[38953]],[[195073,195073],"mapped",[169398]],[[195074,195074],"mapped",[39138]],[[195075,195075],"mapped",[19251]],[[195076,195076],"mapped",[39209]],[[195077,195077],"mapped",[39335]],[[195078,195078],"mapped",[39362]],[[195079,195079],"mapped",[39422]],[[195080,195080],"mapped",[19406]],[[195081,195081],"mapped",[170800]],[[195082,195082],"mapped",[39698]],[[195083,195083],"mapped",[40000]],[[195084,195084],"mapped",[40189]],[[195085,195085],"mapped",[19662]],[[195086,195086],"mapped",[19693]],[[195087,195087],"mapped",[40295]],[[195088,195088],"mapped",[172238]],[[195089,195089],"mapped",[19704]],[[195090,195090],"mapped",[172293]],[[195091,195091],"mapped",[172558]],[[195092,195092],"mapped",[172689]],[[195093,195093],"mapped",[40635]],[[195094,195094],"mapped",[19798]],[[195095,195095],"mapped",[40697]],[[195096,195096],"mapped",[40702]],[[195097,195097],"mapped",[40709]],[[195098,195098],"mapped",[40719]],[[195099,195099],"mapped",[40726]],[[195100,195100],"mapped",[40763]],[[195101,195101],"mapped",[173568]],[[195102,196605],"disallowed"],[[196606,196607],"disallowed"],[[196608,262141],"disallowed"],[[262142,262143],"disallowed"],[[262144,327677],"disallowed"],[[327678,327679],"disallowed"],[[327680,393213],"disallowed"],[[393214,393215],"disallowed"],[[393216,458749],"disallowed"],[[458750,458751],"disallowed"],[[458752,524285],"disallowed"],[[524286,524287],"disallowed"],[[524288,589821],"disallowed"],[[589822,589823],"disallowed"],[[589824,655357],"disallowed"],[[655358,655359],"disallowed"],[[655360,720893],"disallowed"],[[720894,720895],"disallowed"],[[720896,786429],"disallowed"],[[786430,786431],"disallowed"],[[786432,851965],"disallowed"],[[851966,851967],"disallowed"],[[851968,917501],"disallowed"],[[917502,917503],"disallowed"],[[917504,917504],"disallowed"],[[917505,917505],"disallowed"],[[917506,917535],"disallowed"],[[917536,917631],"disallowed"],[[917632,917759],"disallowed"],[[917760,917999],"ignored"],[[918000,983037],"disallowed"],[[983038,983039],"disallowed"],[[983040,1048573],"disallowed"],[[1048574,1048575],"disallowed"],[[1048576,1114109],"disallowed"],[[1114110,1114111],"disallowed"]]'); -+ -+/***/ }) -+ -+/******/ }); -+/************************************************************************/ -+/******/ // The module cache -+/******/ var __webpack_module_cache__ = {}; -+/******/ -+/******/ // The require function -+/******/ function __nccwpck_require__(moduleId) { -+/******/ // Check if module is in cache -+/******/ var cachedModule = __webpack_module_cache__[moduleId]; -+/******/ if (cachedModule !== undefined) { -+/******/ return cachedModule.exports; -+/******/ } -+/******/ // Create a new module (and put it into the cache) -+/******/ var module = __webpack_module_cache__[moduleId] = { -+/******/ // no module.id needed -+/******/ // no module.loaded needed -+/******/ exports: {} -+/******/ }; -+/******/ -+/******/ // Execute the module function -+/******/ var threw = true; -+/******/ try { -+/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __nccwpck_require__); -+/******/ threw = false; -+/******/ } finally { -+/******/ if(threw) delete __webpack_module_cache__[moduleId]; -+/******/ } -+/******/ -+/******/ // Return the exports of the module -+/******/ return module.exports; -+/******/ } -+/******/ -+/************************************************************************/ -+/******/ /* webpack/runtime/make namespace object */ -+/******/ (() => { -+/******/ // define __esModule on exports -+/******/ __nccwpck_require__.r = (exports) => { -+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -+/******/ } -+/******/ Object.defineProperty(exports, '__esModule', { value: true }); -+/******/ }; -+/******/ })(); -+/******/ -+/******/ /* webpack/runtime/compat */ -+/******/ -+/******/ if (typeof __nccwpck_require__ !== 'undefined') __nccwpck_require__.ab = __dirname + "/"; -+/******/ -+/************************************************************************/ -+var __webpack_exports__ = {}; -+// This entry need to be wrapped in an IIFE because it need to be in strict mode. -+(() => { -+"use strict"; -+// ESM COMPAT FLAG -+__nccwpck_require__.r(__webpack_exports__); -+ -+// EXTERNAL MODULE: ../../node_modules/.pnpm/@actions+core@1.10.1/node_modules/@actions/core/lib/core.js -+var core = __nccwpck_require__(4237); -+// EXTERNAL MODULE: ../../node_modules/.pnpm/@actions+github@5.1.1/node_modules/@actions/github/lib/github.js -+var github = __nccwpck_require__(212); -+;// CONCATENATED MODULE: external "node:fs/promises" -+const promises_namespaceObject = require("node:fs/promises"); -+;// CONCATENATED MODULE: external "node:path" -+const external_node_path_namespaceObject = require("node:path"); -+;// CONCATENATED MODULE: ./src/index.ts -+var __assign = (undefined && undefined.__assign) || function () { -+ __assign = Object.assign || function(t) { -+ for (var s, i = 1, n = arguments.length; i < n; i++) { -+ s = arguments[i]; -+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) -+ t[p] = s[p]; -+ } -+ return t; -+ }; -+ return __assign.apply(this, arguments); -+}; -+var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { -+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } -+ return new (P || (P = Promise))(function (resolve, reject) { -+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } -+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } -+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } -+ step((generator = generator.apply(thisArg, _arguments || [])).next()); -+ }); -+}; -+var __generator = (undefined && undefined.__generator) || function (thisArg, body) { -+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; -+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; -+ function verb(n) { return function (v) { return step([n, v]); }; } -+ function step(op) { -+ if (f) throw new TypeError("Generator is already executing."); -+ while (g && (g = 0, op[0] && (_ = 0)), _) try { -+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; -+ if (y = 0, t) op = [op[0] & 2, t.value]; -+ switch (op[0]) { -+ case 0: case 1: t = op; break; -+ case 4: _.label++; return { value: op[1], done: false }; -+ case 5: _.label++; y = op[1]; op = [0]; continue; -+ case 7: op = _.ops.pop(); _.trys.pop(); continue; -+ default: -+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } -+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } -+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } -+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } -+ if (t[2]) _.ops.pop(); -+ _.trys.pop(); continue; -+ } -+ op = body.call(thisArg, _); -+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } -+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; -+ } -+}; -+var __rest = (undefined && undefined.__rest) || function (s, e) { -+ var t = {}; -+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) -+ t[p] = s[p]; -+ if (s != null && typeof Object.getOwnPropertySymbols === "function") -+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { -+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) -+ t[p[i]] = s[p[i]]; -+ } -+ return t; -+}; -+ -+ -+ -+ -+// Ensure GITHUB_TOKEN and GITHUB_WORKSPACE are present -+if (!process.env.GITHUB_TOKEN) -+ throw new TypeError('No GITHUB_TOKEN provided'); -+if (!process.env.GITHUB_WORKSPACE) -+ throw new TypeError('Not a GitHub workspace'); -+var config = { -+ invalidLink: { -+ comment: (0,core.getInput)('reproduction_comment') || '.github/invalid-reproduction.md', -+ bugLabels: (0,core.getInput)('reproduction_issue_labels') -+ .split(',') -+ .map(function (l) { return l.trim(); }), -+ hosts: ((0,core.getInput)('reproduction_hosts') || 'github.com').split(',').map(function (h) { return h.trim(); }), -+ label: (0,core.getInput)('reproduction_invalid_label') || 'invalid-reproduction', -+ linkSection: (0,core.getInput)('reproduction_link_section') || '### Link to reproduction(.*)### To reproduce', -+ }, -+ tagOnly: getBooleanOrUndefined('tag_only') || false, -+ token: process.env.GITHUB_TOKEN, -+ workspace: process.env.GITHUB_WORKSPACE, -+}; -+// Attempt to parse JSON, return parsed object or error -+function tryParse(json) { -+ try { -+ return JSON.parse(json); -+ } -+ catch (e) { -+ setFailed("Could not parse JSON: ".concat(e instanceof Error ? e.message : e)); -+ return {}; -+ } -+} -+// Retrieves a boolean input or undefined based on environment variables -+function getBooleanOrUndefined(value) { -+ var variable = process.env["INPUT_".concat(value.toUpperCase())]; -+ return variable === undefined || variable === '' ? undefined : (0,core.getBooleanInput)(value); -+} -+// Returns the appropriate label match type -+function getLabelMatch(value) { -+ return value === 'name' ? 'name' : 'description'; -+} -+// Function to check if an issue contains a valid reproduction link -+function checkValidReproduction() { -+ return __awaiter(this, void 0, Promise, function () { -+ var _a, issue, action, labels, issueMatchingLabel, client, common, labelsToRemove, comment, _b, _c, _d; -+ var _e; -+ return __generator(this, function (_f) { -+ switch (_f.label) { -+ case 0: -+ _a = github.context.payload, issue = _a.issue, action = _a.action; -+ if (action !== 'opened' || !(issue === null || issue === void 0 ? void 0 : issue.body)) -+ return [2 /*return*/]; -+ labels = issue.labels.map(function (l) { return l.name; }); -+ issueMatchingLabel = labels.length && -+ config.invalidLink.bugLabels.length && -+ labels.some(function (l) { return config.invalidLink.bugLabels.includes(l); }); -+ if (!issueMatchingLabel) { -+ (0,core.info)("Issue #".concat(issue.number, " does not match required labels: ").concat(config.invalidLink.bugLabels.join(', '))); -+ (0,core.info)("Issue labels: ".concat(labels.join(', '))); -+ return [2 /*return*/]; -+ } -+ (0,core.info)("Issue #".concat(issue.number, " labels: ").concat(labels.join(', '))); -+ client = (0,github.getOctokit)(config.token).rest; -+ common = __assign(__assign({}, github.context.repo), { issue_number: issue.number }); -+ labelsToRemove = labels.filter(function (l) { return config.invalidLink.bugLabels.includes(l); }); -+ return [4 /*yield*/, isValidReproduction(issue.body)]; -+ case 1: -+ if (!_f.sent()) return [3 /*break*/, 3]; -+ return [4 /*yield*/, Promise.all(labelsToRemove.map(function (label) { return client.issues.removeLabel(__assign(__assign({}, common), { name: label })); }))]; -+ case 2: -+ _f.sent(); -+ return [2 /*return*/, (0,core.info)("Issue #".concat(issue.number, " contains a valid reproduction \uD83D\uDC9A"))]; -+ case 3: -+ (0,core.info)("Invalid reproduction, issue will be closed/labeled/commented..."); -+ // Adjust labels -+ return [4 /*yield*/, Promise.all(labelsToRemove.map(function (label) { return client.issues.removeLabel(__assign(__assign({}, common), { name: label })); }))]; -+ case 4: -+ // Adjust labels -+ _f.sent(); -+ (0,core.info)("Issue #".concat(issue.number, " - validate label removed")); -+ return [4 /*yield*/, client.issues.addLabels(__assign(__assign({}, common), { labels: [config.invalidLink.label] }))]; -+ case 5: -+ _f.sent(); -+ (0,core.info)("Issue #".concat(issue.number, " - labeled")); -+ // If tagOnly, do not close or comment -+ if (config.tagOnly) { -+ (0,core.info)('Tag-only enabled, no closing/commenting actions taken'); -+ return [2 /*return*/]; -+ } -+ // Perform closing and commenting actions -+ return [4 /*yield*/, client.issues.update(__assign(__assign({}, common), { state: 'closed' }))]; -+ case 6: -+ // Perform closing and commenting actions -+ _f.sent(); -+ (0,core.info)("Issue #".concat(issue.number, " - closed")); -+ comment = (0,external_node_path_namespaceObject.join)(config.workspace, config.invalidLink.comment); -+ _c = (_b = client.issues).createComment; -+ _d = [__assign({}, common)]; -+ _e = {}; -+ return [4 /*yield*/, getCommentBody(comment)]; -+ case 7: return [4 /*yield*/, _c.apply(_b, [__assign.apply(void 0, _d.concat([(_e.body = _f.sent(), _e)]))])]; -+ case 8: -+ _f.sent(); -+ (0,core.info)("Issue #".concat(issue.number, " - commented")); -+ return [2 /*return*/]; -+ } -+ }); -+ }); -+} -+/** -+ * Determine if an issue contains a valid/accessible link to a reproduction. -+ * -+ * Returns `true` if the link is valid. -+ * @param body - The body content of the issue -+ */ -+function isValidReproduction(body) { -+ var _a, _b; -+ return __awaiter(this, void 0, Promise, function () { -+ var linkSectionRe, link, url, response, isOk, error_1; -+ return __generator(this, function (_c) { -+ switch (_c.label) { -+ case 0: -+ linkSectionRe = new RegExp(config.invalidLink.linkSection, 'is'); -+ link = (_b = (_a = body.match(linkSectionRe)) === null || _a === void 0 ? void 0 : _a[1]) === null || _b === void 0 ? void 0 : _b.trim(); -+ if (!link) { -+ (0,core.info)('Missing link'); -+ (0,core.info)("Link section regex: ".concat(linkSectionRe)); -+ (0,core.info)("Link section: ".concat(body)); -+ return [2 /*return*/, false]; -+ } -+ (0,core.info)("Checking validity of link: ".concat(link)); -+ if (!URL.canParse(link)) { -+ (0,core.info)("Invalid URL: ".concat(link)); -+ return [2 /*return*/, false]; -+ } -+ url = new URL(link); -+ if (!config.invalidLink.hosts.includes(url.hostname)) { -+ (0,core.info)('Link did not match allowed reproduction hosts'); -+ return [2 /*return*/, false]; -+ } -+ _c.label = 1; -+ case 1: -+ _c.trys.push([1, 3, , 4]); -+ return [4 /*yield*/, fetch(link)]; -+ case 2: -+ response = _c.sent(); -+ isOk = response.status < 400 || response.status >= 500; -+ (0,core.info)("Link status: ".concat(response.status)); -+ if (!isOk) { -+ (0,core.info)("Link returned status ".concat(response.status)); -+ } -+ return [2 /*return*/, isOk]; -+ case 3: -+ error_1 = _c.sent(); -+ (0,core.info)("Error fetching link: ".concat(error_1.message)); -+ return [2 /*return*/, false]; -+ case 4: return [2 /*return*/]; -+ } -+ }); -+ }); -+} -+/** -+ * Return either a file's content or a string -+ * @param {string} pathOrComment -+ */ -+function getCommentBody(pathOrComment) { -+ return __awaiter(this, void 0, void 0, function () { -+ var error_2; -+ return __generator(this, function (_a) { -+ switch (_a.label) { -+ case 0: -+ _a.trys.push([0, 3, , 4]); -+ return [4 /*yield*/, (0,promises_namespaceObject.access)(pathOrComment)]; -+ case 1: -+ _a.sent(); -+ return [4 /*yield*/, (0,promises_namespaceObject.readFile)(pathOrComment, 'utf8')]; -+ case 2: return [2 /*return*/, _a.sent()]; -+ case 3: -+ error_2 = _a.sent(); -+ if (error_2.code === 'ENOENT') -+ return [2 /*return*/, pathOrComment]; -+ throw error_2; -+ case 4: return [2 /*return*/]; -+ } -+ }); -+ }); -+} -+function run() { -+ return __awaiter(this, void 0, void 0, function () { -+ var token, workspace, safeConfig; -+ return __generator(this, function (_a) { -+ switch (_a.label) { -+ case 0: -+ token = config.token, workspace = config.workspace, safeConfig = __rest(config, ["token", "workspace"]); -+ (0,core.info)('Configuration:'); -+ (0,core.info)(JSON.stringify(safeConfig, null, 2)); -+ return [4 /*yield*/, checkValidReproduction()]; -+ case 1: -+ _a.sent(); -+ return [2 /*return*/]; -+ } -+ }); -+ }); -+} -+run().catch(core.setFailed); -+ -+})(); -+ -+module.exports = __webpack_exports__; -+/******/ })() -+; -\ No newline at end of file -diff --git a/.github/actions/triage/jest.config.js b/.github/actions/triage/jest.config.js -new file mode 100644 -index 000000000..6ff7d1326 ---- /dev/null -+++ b/.github/actions/triage/jest.config.js -@@ -0,0 +1,7 @@ -+module.exports = { -+ testEnvironment: 'node', -+ testPathIgnorePatterns: ['/node_modules/', '/dist/'], -+ transform: { -+ '^.+\\.(t|j)sx?$': ['@swc/jest'], -+ }, -+} -diff --git a/.github/actions/triage/package.json b/.github/actions/triage/package.json -new file mode 100644 -index 000000000..254153318 ---- /dev/null -+++ b/.github/actions/triage/package.json -@@ -0,0 +1,34 @@ -+{ -+ "name": "triage", -+ "version": "0.0.0", -+ "description": "GitHub Action to triage new issues", -+ "main": "dist/index.js", -+ "license": "MIT", -+ "private": true, -+ "scripts": { -+ "clean": "rimraf dist", -+ "build": "pnpm build:typecheck && pnpm build:ncc", -+ "build:ncc": "ncc build src/index.ts -t -o dist", -+ "build:typecheck": "tsc", -+ "test": "jest" -+ }, -+ "dependencies": { -+ "@actions/core": "^1.3.0", -+ "@actions/github": "^5.0.0" -+ }, -+ "devDependencies": { -+ "@octokit/webhooks-types": "^7.5.1", -+ "@swc/jest": "^0.2.36", -+ "@types/jest": "^27.5.2", -+ "@types/node": "^20.16.5", -+ "@typescript-eslint/eslint-plugin": "^4.33.0", -+ "@typescript-eslint/parser": "^4.33.0", -+ "@vercel/ncc": "0.38.1", -+ "concurrently": "^8.2.2", -+ "eslint": "^7.32.0", -+ "jest": "^29.7.0", -+ "prettier": "^3.3.3", -+ "ts-jest": "^26.5.6", -+ "typescript": "^4.9.5" -+ } -+} -diff --git a/.github/actions/triage/pnpm-lock.yaml b/.github/actions/triage/pnpm-lock.yaml -new file mode 100644 -index 000000000..116d6d942 ---- /dev/null -+++ b/.github/actions/triage/pnpm-lock.yaml -@@ -0,0 +1,5419 @@ -+lockfileVersion: '9.0' -+ -+settings: -+ autoInstallPeers: true -+ excludeLinksFromLockfile: false -+ -+importers: -+ -+ .: -+ dependencies: -+ '@actions/core': -+ specifier: ^1.3.0 -+ version: 1.3.0 -+ '@actions/github': -+ specifier: ^5.0.0 -+ version: 5.0.0 -+ devDependencies: -+ '@octokit/webhooks-types': -+ specifier: ^7.5.1 -+ version: 7.5.1 -+ '@types/jest': -+ specifier: ^27.5.0 -+ version: 27.5.0 -+ '@types/node': -+ specifier: ^20.14.11 -+ version: 20.14.11 -+ '@typescript-eslint/eslint-plugin': -+ specifier: ^4.33.0 -+ version: 4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@4.9.5))(eslint@7.32.0)(typescript@4.9.5) -+ '@typescript-eslint/parser': -+ specifier: ^4.33.0 -+ version: 4.33.0(eslint@7.32.0)(typescript@4.9.5) -+ '@vercel/ncc': -+ specifier: 0.38.1 -+ version: 0.38.1 -+ concurrently: -+ specifier: ^8.2.2 -+ version: 8.2.2 -+ eslint: -+ specifier: ^7.32.0 -+ version: 7.32.0 -+ jest: -+ specifier: ^26.6.3 -+ version: 26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)) -+ prettier: -+ specifier: ^3.3.3 -+ version: 3.3.3 -+ ts-jest: -+ specifier: ^26.5.6 -+ version: 26.5.6(jest@26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)))(typescript@4.9.5) -+ typescript: -+ specifier: ^4.9.5 -+ version: 4.9.5 -+ -+packages: -+ -+ '@actions/core@1.3.0': -+ resolution: {integrity: sha512-xxtX0Cwdhb8LcgatfJkokqT8KzPvcIbwL9xpLU09nOwBzaStbfm0dNncsP0M4us+EpoPdWy7vbzU5vSOH7K6pg==} -+ -+ '@actions/github@5.0.0': -+ resolution: {integrity: sha512-QvE9eAAfEsS+yOOk0cylLBIO/d6WyWIOvsxxzdrPFaud39G6BOkUwScXZn1iBzQzHyu9SBkkLSWlohDWdsasAQ==} -+ -+ '@actions/http-client@1.0.11': -+ resolution: {integrity: sha512-VRYHGQV1rqnROJqdMvGUbY/Kn8vriQe/F9HR2AlYHzmKuM/p3kjNuXhmdBfcVgsvRWTz5C5XW5xvndZrVBuAYg==} -+ -+ '@babel/code-frame@7.12.11': -+ resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} -+ -+ '@babel/core@7.11.6': -+ resolution: {integrity: sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==} -+ engines: {node: '>=6.9.0'} -+ -+ '@babel/generator@7.11.6': -+ resolution: {integrity: sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==} -+ -+ '@babel/helper-function-name@7.10.4': -+ resolution: {integrity: sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==} -+ -+ '@babel/helper-get-function-arity@7.10.4': -+ resolution: {integrity: sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==} -+ -+ '@babel/helper-member-expression-to-functions@7.11.0': -+ resolution: {integrity: sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==} -+ -+ '@babel/helper-module-imports@7.10.4': -+ resolution: {integrity: sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==} -+ -+ '@babel/helper-module-transforms@7.11.0': -+ resolution: {integrity: sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==} -+ -+ '@babel/helper-optimise-call-expression@7.10.4': -+ resolution: {integrity: sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==} -+ -+ '@babel/helper-plugin-utils@7.10.4': -+ resolution: {integrity: sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==} -+ -+ '@babel/helper-replace-supers@7.10.4': -+ resolution: {integrity: sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==} -+ -+ '@babel/helper-simple-access@7.10.4': -+ resolution: {integrity: sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==} -+ -+ '@babel/helper-split-export-declaration@7.11.0': -+ resolution: {integrity: sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==} -+ -+ '@babel/helper-validator-identifier@7.10.4': -+ resolution: {integrity: sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==} -+ -+ '@babel/helpers@7.10.4': -+ resolution: {integrity: sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==} -+ -+ '@babel/highlight@7.10.4': -+ resolution: {integrity: sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==} -+ -+ '@babel/parser@7.11.5': -+ resolution: {integrity: sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==} -+ engines: {node: '>=6.0.0'} -+ hasBin: true -+ -+ '@babel/plugin-syntax-async-generators@7.8.4': -+ resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} -+ peerDependencies: -+ '@babel/core': ^7.0.0-0 -+ -+ '@babel/plugin-syntax-bigint@7.8.3': -+ resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} -+ peerDependencies: -+ '@babel/core': ^7.0.0-0 -+ -+ '@babel/plugin-syntax-class-properties@7.10.4': -+ resolution: {integrity: sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==} -+ peerDependencies: -+ '@babel/core': ^7.0.0-0 -+ -+ '@babel/plugin-syntax-import-meta@7.10.4': -+ resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} -+ peerDependencies: -+ '@babel/core': ^7.0.0-0 -+ -+ '@babel/plugin-syntax-json-strings@7.8.3': -+ resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} -+ peerDependencies: -+ '@babel/core': ^7.0.0-0 -+ -+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4': -+ resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} -+ peerDependencies: -+ '@babel/core': ^7.0.0-0 -+ -+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': -+ resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} -+ peerDependencies: -+ '@babel/core': ^7.0.0-0 -+ -+ '@babel/plugin-syntax-numeric-separator@7.10.4': -+ resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} -+ peerDependencies: -+ '@babel/core': ^7.0.0-0 -+ -+ '@babel/plugin-syntax-object-rest-spread@7.8.3': -+ resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} -+ peerDependencies: -+ '@babel/core': ^7.0.0-0 -+ -+ '@babel/plugin-syntax-optional-catch-binding@7.8.3': -+ resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} -+ peerDependencies: -+ '@babel/core': ^7.0.0-0 -+ -+ '@babel/plugin-syntax-optional-chaining@7.8.3': -+ resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} -+ peerDependencies: -+ '@babel/core': ^7.0.0-0 -+ -+ '@babel/plugin-syntax-top-level-await@7.12.1': -+ resolution: {integrity: sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==} -+ peerDependencies: -+ '@babel/core': ^7.0.0-0 -+ -+ '@babel/runtime@7.23.6': -+ resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} -+ engines: {node: '>=6.9.0'} -+ -+ '@babel/template@7.10.4': -+ resolution: {integrity: sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==} -+ -+ '@babel/traverse@7.11.5': -+ resolution: {integrity: sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==} -+ -+ '@babel/types@7.11.5': -+ resolution: {integrity: sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==} -+ -+ '@bcoe/v8-coverage@0.2.3': -+ resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} -+ -+ '@cnakazawa/watch@1.0.4': -+ resolution: {integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==} -+ engines: {node: '>=0.1.95'} -+ hasBin: true -+ -+ '@cspotcode/source-map-support@0.8.1': -+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} -+ engines: {node: '>=12'} -+ -+ '@eslint/eslintrc@0.4.3': -+ resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} -+ engines: {node: ^10.12.0 || >=12.0.0} -+ -+ '@humanwhocodes/config-array@0.5.0': -+ resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} -+ engines: {node: '>=10.10.0'} -+ deprecated: Use @eslint/config-array instead -+ -+ '@humanwhocodes/object-schema@1.2.0': -+ resolution: {integrity: sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==} -+ deprecated: Use @eslint/object-schema instead -+ -+ '@istanbuljs/load-nyc-config@1.1.0': -+ resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} -+ engines: {node: '>=8'} -+ -+ '@istanbuljs/schema@0.1.2': -+ resolution: {integrity: sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==} -+ engines: {node: '>=8'} -+ -+ '@jest/console@26.6.2': -+ resolution: {integrity: sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==} -+ engines: {node: '>= 10.14.2'} -+ -+ '@jest/core@26.6.3': -+ resolution: {integrity: sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==} -+ engines: {node: '>= 10.14.2'} -+ -+ '@jest/environment@26.6.2': -+ resolution: {integrity: sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==} -+ engines: {node: '>= 10.14.2'} -+ -+ '@jest/fake-timers@26.6.2': -+ resolution: {integrity: sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==} -+ engines: {node: '>= 10.14.2'} -+ -+ '@jest/globals@26.6.2': -+ resolution: {integrity: sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==} -+ engines: {node: '>= 10.14.2'} -+ -+ '@jest/reporters@26.6.2': -+ resolution: {integrity: sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==} -+ engines: {node: '>= 10.14.2'} -+ -+ '@jest/source-map@26.6.2': -+ resolution: {integrity: sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==} -+ engines: {node: '>= 10.14.2'} -+ -+ '@jest/test-result@26.6.2': -+ resolution: {integrity: sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==} -+ engines: {node: '>= 10.14.2'} -+ -+ '@jest/test-sequencer@26.6.3': -+ resolution: {integrity: sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==} -+ engines: {node: '>= 10.14.2'} -+ -+ '@jest/transform@26.6.2': -+ resolution: {integrity: sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==} -+ engines: {node: '>= 10.14.2'} -+ -+ '@jest/types@26.6.2': -+ resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} -+ engines: {node: '>= 10.14.2'} -+ -+ '@jridgewell/resolve-uri@3.1.2': -+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} -+ engines: {node: '>=6.0.0'} -+ -+ '@jridgewell/sourcemap-codec@1.5.0': -+ resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} -+ -+ '@jridgewell/trace-mapping@0.3.9': -+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} -+ -+ '@nodelib/fs.scandir@2.1.3': -+ resolution: {integrity: sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==} -+ engines: {node: '>= 8'} -+ -+ '@nodelib/fs.stat@2.0.3': -+ resolution: {integrity: sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==} -+ engines: {node: '>= 8'} -+ -+ '@nodelib/fs.walk@1.2.4': -+ resolution: {integrity: sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==} -+ engines: {node: '>= 8'} -+ -+ '@octokit/auth-token@2.4.5': -+ resolution: {integrity: sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==} -+ -+ '@octokit/core@3.4.0': -+ resolution: {integrity: sha512-6/vlKPP8NF17cgYXqucdshWqmMZGXkuvtcrWCgU5NOI0Pl2GjlmZyWgBMrU8zJ3v2MJlM6++CiB45VKYmhiWWg==} -+ -+ '@octokit/endpoint@6.0.8': -+ resolution: {integrity: sha512-MuRrgv+bM4Q+e9uEvxAB/Kf+Sj0O2JAOBA131uo1o6lgdq1iS8ejKwtqHgdfY91V3rN9R/hdGKFiQYMzVzVBEQ==} -+ -+ '@octokit/graphql@4.6.2': -+ resolution: {integrity: sha512-WmsIR1OzOr/3IqfG9JIczI8gMJUMzzyx5j0XXQ4YihHtKlQc+u35VpVoOXhlKAlaBntvry1WpAzPl/a+s3n89Q==} -+ -+ '@octokit/openapi-types@7.2.1': -+ resolution: {integrity: sha512-IHQJpLciwzwDvciLxiFj3IEV5VYn7lSVcj5cu0jbTwMfK4IG6/g8SPrVp3Le1VRzIiYSRcBzm1dA7vgWelYP3Q==} -+ -+ '@octokit/plugin-paginate-rest@2.13.3': -+ resolution: {integrity: sha512-46lptzM9lTeSmIBt/sVP/FLSTPGx6DCzAdSX3PfeJ3mTf4h9sGC26WpaQzMEq/Z44cOcmx8VsOhO+uEgE3cjYg==} -+ peerDependencies: -+ '@octokit/core': '>=2' -+ -+ '@octokit/plugin-rest-endpoint-methods@5.3.0': -+ resolution: {integrity: sha512-+4NAJ9WzPN5gW6W1H1tblw/DesTD6PaWuU5+/x3Pa7nyK6qjR6cn4jwkJtzxVPTgtzryOFLX+5vs7MROFswp5Q==} -+ peerDependencies: -+ '@octokit/core': '>=3' -+ -+ '@octokit/request-error@2.0.5': -+ resolution: {integrity: sha512-T/2wcCFyM7SkXzNoyVNWjyVlUwBvW3igM3Btr/eKYiPmucXTtkxt2RBsf6gn3LTzaLSLTQtNmvg+dGsOxQrjZg==} -+ -+ '@octokit/request@5.4.15': -+ resolution: {integrity: sha512-6UnZfZzLwNhdLRreOtTkT9n57ZwulCve8q3IT/Z477vThu6snfdkBuhxnChpOKNGxcQ71ow561Qoa6uqLdPtag==} -+ -+ '@octokit/types@5.5.0': -+ resolution: {integrity: sha512-UZ1pErDue6bZNjYOotCNveTXArOMZQFG6hKJfOnGnulVCMcVVi7YIIuuR4WfBhjo7zgpmzn/BkPDnUXtNx+PcQ==} -+ -+ '@octokit/types@6.16.0': -+ resolution: {integrity: sha512-EktqSNq8EKXE82a7Vw33ozOEhFXIRik+rZHJTHAgVZRm/p2K5r5ecn5fVpRkLCm3CAVFwchRvt3yvtmfbt2LCQ==} -+ -+ '@octokit/webhooks-types@7.5.1': -+ resolution: {integrity: sha512-1dozxWEP8lKGbtEu7HkRbK1F/nIPuJXNfT0gd96y6d3LcHZTtRtlf8xz3nicSJfesADxJyDh+mWBOsdLkqgzYw==} -+ -+ '@sinonjs/commons@1.8.1': -+ resolution: {integrity: sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==} -+ -+ '@sinonjs/fake-timers@6.0.1': -+ resolution: {integrity: sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==} -+ -+ '@tsconfig/node10@1.0.11': -+ resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} -+ -+ '@tsconfig/node12@1.0.11': -+ resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} -+ -+ '@tsconfig/node14@1.0.3': -+ resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} -+ -+ '@tsconfig/node16@1.0.4': -+ resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} -+ -+ '@types/babel__core@7.1.10': -+ resolution: {integrity: sha512-x8OM8XzITIMyiwl5Vmo2B1cR1S1Ipkyv4mdlbJjMa1lmuKvKY9FrBbEANIaMlnWn5Rf7uO+rC/VgYabNkE17Hw==} -+ -+ '@types/babel__generator@7.6.2': -+ resolution: {integrity: sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==} -+ -+ '@types/babel__template@7.0.3': -+ resolution: {integrity: sha512-uCoznIPDmnickEi6D0v11SBpW0OuVqHJCa7syXqQHy5uktSCreIlt0iglsCnmvz8yCb38hGcWeseA8cWJSwv5Q==} -+ -+ '@types/babel__traverse@7.0.15': -+ resolution: {integrity: sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A==} -+ -+ '@types/graceful-fs@4.1.3': -+ resolution: {integrity: sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ==} -+ -+ '@types/istanbul-lib-coverage@2.0.3': -+ resolution: {integrity: sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==} -+ -+ '@types/istanbul-lib-report@3.0.0': -+ resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} -+ -+ '@types/istanbul-reports@3.0.0': -+ resolution: {integrity: sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==} -+ -+ '@types/jest@27.5.0': -+ resolution: {integrity: sha512-9RBFx7r4k+msyj/arpfaa0WOOEcaAZNmN+j80KFbFCoSqCJGHTz7YMAMGQW9Xmqm5w6l5c25vbSjMwlikJi5+g==} -+ -+ '@types/json-schema@7.0.15': -+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} -+ -+ '@types/node@20.14.11': -+ resolution: {integrity: sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==} -+ -+ '@types/normalize-package-data@2.4.0': -+ resolution: {integrity: sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==} -+ -+ '@types/prettier@2.1.1': -+ resolution: {integrity: sha512-2zs+O+UkDsJ1Vcp667pd3f8xearMdopz/z54i99wtRDI5KLmngk7vlrYZD0ZjKHaROR03EznlBbVY9PfAEyJIQ==} -+ -+ '@types/stack-utils@2.0.0': -+ resolution: {integrity: sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==} -+ -+ '@types/yargs-parser@15.0.0': -+ resolution: {integrity: sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==} -+ -+ '@types/yargs@15.0.8': -+ resolution: {integrity: sha512-b0BYzFUzBpOhPjpl1wtAHU994jBeKF4TKVlT7ssFv44T617XNcPdRoG4AzHLVshLzlrF7i3lTelH7UbuNYV58Q==} -+ -+ '@typescript-eslint/eslint-plugin@4.33.0': -+ resolution: {integrity: sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==} -+ engines: {node: ^10.12.0 || >=12.0.0} -+ peerDependencies: -+ '@typescript-eslint/parser': ^4.0.0 -+ eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 -+ typescript: '*' -+ peerDependenciesMeta: -+ typescript: -+ optional: true -+ -+ '@typescript-eslint/experimental-utils@4.33.0': -+ resolution: {integrity: sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==} -+ engines: {node: ^10.12.0 || >=12.0.0} -+ peerDependencies: -+ eslint: '*' -+ -+ '@typescript-eslint/parser@4.33.0': -+ resolution: {integrity: sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==} -+ engines: {node: ^10.12.0 || >=12.0.0} -+ peerDependencies: -+ eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 -+ typescript: '*' -+ peerDependenciesMeta: -+ typescript: -+ optional: true -+ -+ '@typescript-eslint/scope-manager@4.33.0': -+ resolution: {integrity: sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==} -+ engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} -+ -+ '@typescript-eslint/types@4.33.0': -+ resolution: {integrity: sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==} -+ engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} -+ -+ '@typescript-eslint/typescript-estree@4.33.0': -+ resolution: {integrity: sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==} -+ engines: {node: ^10.12.0 || >=12.0.0} -+ peerDependencies: -+ typescript: '*' -+ peerDependenciesMeta: -+ typescript: -+ optional: true -+ -+ '@typescript-eslint/visitor-keys@4.33.0': -+ resolution: {integrity: sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==} -+ engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} -+ -+ '@vercel/ncc@0.38.1': -+ resolution: {integrity: sha512-IBBb+iI2NLu4VQn3Vwldyi2QwaXt5+hTyh58ggAMoCGE6DJmPvwL3KPBWcJl1m9LYPChBLE980Jw+CS4Wokqxw==} -+ hasBin: true -+ -+ abab@2.0.5: -+ resolution: {integrity: sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==} -+ deprecated: Use your platform's native atob() and btoa() methods instead -+ -+ acorn-globals@6.0.0: -+ resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} -+ -+ acorn-jsx@5.3.1: -+ resolution: {integrity: sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==} -+ peerDependencies: -+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 -+ -+ acorn-walk@7.2.0: -+ resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} -+ engines: {node: '>=0.4.0'} -+ -+ acorn-walk@8.3.3: -+ resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} -+ engines: {node: '>=0.4.0'} -+ -+ acorn@7.4.1: -+ resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} -+ engines: {node: '>=0.4.0'} -+ hasBin: true -+ -+ acorn@8.12.1: -+ resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} -+ engines: {node: '>=0.4.0'} -+ hasBin: true -+ -+ ajv@6.12.6: -+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} -+ -+ ajv@8.6.3: -+ resolution: {integrity: sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==} -+ -+ ansi-colors@4.1.1: -+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} -+ engines: {node: '>=6'} -+ -+ ansi-escapes@4.3.1: -+ resolution: {integrity: sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==} -+ engines: {node: '>=8'} -+ -+ ansi-regex@5.0.1: -+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} -+ engines: {node: '>=8'} -+ -+ ansi-styles@3.2.1: -+ resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} -+ engines: {node: '>=4'} -+ -+ ansi-styles@4.3.0: -+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} -+ engines: {node: '>=8'} -+ -+ ansi-styles@5.2.0: -+ resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} -+ engines: {node: '>=10'} -+ -+ anymatch@2.0.0: -+ resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} -+ -+ anymatch@3.1.3: -+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} -+ engines: {node: '>= 8'} -+ -+ arg@4.1.3: -+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} -+ -+ argparse@1.0.10: -+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} -+ -+ arr-diff@4.0.0: -+ resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} -+ engines: {node: '>=0.10.0'} -+ -+ arr-flatten@1.1.0: -+ resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} -+ engines: {node: '>=0.10.0'} -+ -+ arr-union@3.1.0: -+ resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} -+ engines: {node: '>=0.10.0'} -+ -+ array-union@2.1.0: -+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} -+ engines: {node: '>=8'} -+ -+ array-unique@0.3.2: -+ resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} -+ engines: {node: '>=0.10.0'} -+ -+ asn1@0.2.4: -+ resolution: {integrity: sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==} -+ -+ assert-plus@1.0.0: -+ resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} -+ engines: {node: '>=0.8'} -+ -+ assign-symbols@1.0.0: -+ resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} -+ engines: {node: '>=0.10.0'} -+ -+ astral-regex@2.0.0: -+ resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} -+ engines: {node: '>=8'} -+ -+ asynckit@0.4.0: -+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} -+ -+ atob@2.1.2: -+ resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} -+ engines: {node: '>= 4.5.0'} -+ hasBin: true -+ -+ aws-sign2@0.7.0: -+ resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} -+ -+ aws4@1.10.1: -+ resolution: {integrity: sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==} -+ -+ babel-jest@26.6.3: -+ resolution: {integrity: sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==} -+ engines: {node: '>= 10.14.2'} -+ peerDependencies: -+ '@babel/core': ^7.0.0 -+ -+ babel-plugin-istanbul@6.0.0: -+ resolution: {integrity: sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==} -+ engines: {node: '>=8'} -+ -+ babel-plugin-jest-hoist@26.6.2: -+ resolution: {integrity: sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==} -+ engines: {node: '>= 10.14.2'} -+ -+ babel-preset-current-node-syntax@1.0.0: -+ resolution: {integrity: sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q==} -+ peerDependencies: -+ '@babel/core': ^7.0.0 -+ -+ babel-preset-jest@26.6.2: -+ resolution: {integrity: sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==} -+ engines: {node: '>= 10.14.2'} -+ peerDependencies: -+ '@babel/core': ^7.0.0 -+ -+ balanced-match@1.0.0: -+ resolution: {integrity: sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==} -+ -+ base@0.11.2: -+ resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} -+ engines: {node: '>=0.10.0'} -+ -+ bcrypt-pbkdf@1.0.2: -+ resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} -+ -+ before-after-hook@2.2.1: -+ resolution: {integrity: sha512-/6FKxSTWoJdbsLDF8tdIjaRiFXiE6UHsEHE3OPI/cwPURCVi1ukP0gmLn7XWEiFk5TcwQjjY5PWsU+j+tgXgmw==} -+ -+ brace-expansion@1.1.11: -+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} -+ -+ braces@2.3.2: -+ resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} -+ engines: {node: '>=0.10.0'} -+ -+ braces@3.0.3: -+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} -+ engines: {node: '>=8'} -+ -+ browser-process-hrtime@1.0.0: -+ resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} -+ -+ bs-logger@0.2.6: -+ resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} -+ engines: {node: '>= 6'} -+ -+ bser@2.1.1: -+ resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} -+ -+ buffer-from@1.1.1: -+ resolution: {integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==} -+ -+ cache-base@1.0.1: -+ resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} -+ engines: {node: '>=0.10.0'} -+ -+ callsites@3.1.0: -+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} -+ engines: {node: '>=6'} -+ -+ camelcase@5.3.1: -+ resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} -+ engines: {node: '>=6'} -+ -+ camelcase@6.0.0: -+ resolution: {integrity: sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==} -+ engines: {node: '>=10'} -+ -+ capture-exit@2.0.0: -+ resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} -+ engines: {node: 6.* || 8.* || >= 10.*} -+ -+ caseless@0.12.0: -+ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} -+ -+ chalk@2.4.2: -+ resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} -+ engines: {node: '>=4'} -+ -+ chalk@4.1.2: -+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} -+ engines: {node: '>=10'} -+ -+ char-regex@1.0.2: -+ resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} -+ engines: {node: '>=10'} -+ -+ ci-info@2.0.0: -+ resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} -+ -+ cjs-module-lexer@0.6.0: -+ resolution: {integrity: sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==} -+ -+ class-utils@0.3.6: -+ resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} -+ engines: {node: '>=0.10.0'} -+ -+ cliui@6.0.0: -+ resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} -+ -+ cliui@8.0.1: -+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} -+ engines: {node: '>=12'} -+ -+ co@4.6.0: -+ resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} -+ engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} -+ -+ collect-v8-coverage@1.0.1: -+ resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} -+ -+ collection-visit@1.0.0: -+ resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} -+ engines: {node: '>=0.10.0'} -+ -+ color-convert@1.9.3: -+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} -+ -+ color-convert@2.0.1: -+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} -+ engines: {node: '>=7.0.0'} -+ -+ color-name@1.1.3: -+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} -+ -+ color-name@1.1.4: -+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} -+ -+ combined-stream@1.0.8: -+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} -+ engines: {node: '>= 0.8'} -+ -+ component-emitter@1.3.0: -+ resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} -+ -+ concat-map@0.0.1: -+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} -+ -+ concurrently@8.2.2: -+ resolution: {integrity: sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==} -+ engines: {node: ^14.13.0 || >=16.0.0} -+ hasBin: true -+ -+ convert-source-map@1.7.0: -+ resolution: {integrity: sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==} -+ -+ copy-descriptor@0.1.1: -+ resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} -+ engines: {node: '>=0.10.0'} -+ -+ core-util-is@1.0.2: -+ resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} -+ -+ create-require@1.1.1: -+ resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} -+ -+ cross-spawn@6.0.5: -+ resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} -+ engines: {node: '>=4.8'} -+ -+ cross-spawn@7.0.3: -+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} -+ engines: {node: '>= 8'} -+ -+ cssom@0.3.8: -+ resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} -+ -+ cssom@0.4.4: -+ resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} -+ -+ cssstyle@2.3.0: -+ resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} -+ engines: {node: '>=8'} -+ -+ dashdash@1.14.1: -+ resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} -+ engines: {node: '>=0.10'} -+ -+ data-urls@2.0.0: -+ resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} -+ engines: {node: '>=10'} -+ -+ date-fns@2.30.0: -+ resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} -+ engines: {node: '>=0.11'} -+ -+ debug@2.6.9: -+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} -+ peerDependencies: -+ supports-color: '*' -+ peerDependenciesMeta: -+ supports-color: -+ optional: true -+ -+ debug@4.3.6: -+ resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} -+ engines: {node: '>=6.0'} -+ peerDependencies: -+ supports-color: '*' -+ peerDependenciesMeta: -+ supports-color: -+ optional: true -+ -+ decamelize@1.2.0: -+ resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} -+ engines: {node: '>=0.10.0'} -+ -+ decimal.js@10.2.1: -+ resolution: {integrity: sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==} -+ -+ decode-uri-component@0.2.0: -+ resolution: {integrity: sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==} -+ engines: {node: '>=0.10'} -+ -+ deep-is@0.1.3: -+ resolution: {integrity: sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==} -+ -+ deepmerge@4.2.2: -+ resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} -+ engines: {node: '>=0.10.0'} -+ -+ define-property@0.2.5: -+ resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} -+ engines: {node: '>=0.10.0'} -+ -+ define-property@1.0.0: -+ resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} -+ engines: {node: '>=0.10.0'} -+ -+ define-property@2.0.2: -+ resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} -+ engines: {node: '>=0.10.0'} -+ -+ delayed-stream@1.0.0: -+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} -+ engines: {node: '>=0.4.0'} -+ -+ deprecation@2.3.1: -+ resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} -+ -+ detect-newline@3.1.0: -+ resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} -+ engines: {node: '>=8'} -+ -+ diff-sequences@26.6.2: -+ resolution: {integrity: sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==} -+ engines: {node: '>= 10.14.2'} -+ -+ diff-sequences@27.5.1: -+ resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} -+ engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} -+ -+ diff@4.0.2: -+ resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} -+ engines: {node: '>=0.3.1'} -+ -+ dir-glob@3.0.1: -+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} -+ engines: {node: '>=8'} -+ -+ doctrine@3.0.0: -+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} -+ engines: {node: '>=6.0.0'} -+ -+ domexception@2.0.1: -+ resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} -+ engines: {node: '>=8'} -+ deprecated: Use your platform's native DOMException instead -+ -+ ecc-jsbn@0.1.2: -+ resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} -+ -+ emittery@0.7.1: -+ resolution: {integrity: sha512-d34LN4L6h18Bzz9xpoku2nPwKxCPlPMr3EEKTkoEBi+1/+b0lcRkRJ1UVyyZaKNeqGR3swcGl6s390DNO4YVgQ==} -+ engines: {node: '>=10'} -+ -+ emoji-regex@8.0.0: -+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} -+ -+ end-of-stream@1.4.4: -+ resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} -+ -+ enquirer@2.3.6: -+ resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} -+ engines: {node: '>=8.6'} -+ -+ error-ex@1.3.2: -+ resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} -+ -+ escalade@3.1.1: -+ resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} -+ engines: {node: '>=6'} -+ -+ escape-string-regexp@1.0.5: -+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} -+ engines: {node: '>=0.8.0'} -+ -+ escape-string-regexp@2.0.0: -+ resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} -+ engines: {node: '>=8'} -+ -+ escape-string-regexp@4.0.0: -+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} -+ engines: {node: '>=10'} -+ -+ escodegen@1.14.3: -+ resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} -+ engines: {node: '>=4.0'} -+ hasBin: true -+ -+ eslint-scope@5.1.1: -+ resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} -+ engines: {node: '>=8.0.0'} -+ -+ eslint-utils@2.1.0: -+ resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} -+ engines: {node: '>=6'} -+ -+ eslint-utils@3.0.0: -+ resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} -+ engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} -+ peerDependencies: -+ eslint: '>=5' -+ -+ eslint-visitor-keys@1.3.0: -+ resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} -+ engines: {node: '>=4'} -+ -+ eslint-visitor-keys@2.0.0: -+ resolution: {integrity: sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==} -+ engines: {node: '>=10'} -+ -+ eslint@7.32.0: -+ resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} -+ engines: {node: ^10.12.0 || >=12.0.0} -+ hasBin: true -+ -+ espree@7.3.1: -+ resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} -+ engines: {node: ^10.12.0 || >=12.0.0} -+ -+ esprima@4.0.1: -+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} -+ engines: {node: '>=4'} -+ hasBin: true -+ -+ esquery@1.4.0: -+ resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} -+ engines: {node: '>=0.10'} -+ -+ esrecurse@4.3.0: -+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} -+ engines: {node: '>=4.0'} -+ -+ estraverse@4.3.0: -+ resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} -+ engines: {node: '>=4.0'} -+ -+ estraverse@5.2.0: -+ resolution: {integrity: sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==} -+ engines: {node: '>=4.0'} -+ -+ esutils@2.0.3: -+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} -+ engines: {node: '>=0.10.0'} -+ -+ exec-sh@0.3.4: -+ resolution: {integrity: sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==} -+ -+ execa@1.0.0: -+ resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} -+ engines: {node: '>=6'} -+ -+ execa@4.0.3: -+ resolution: {integrity: sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==} -+ engines: {node: '>=10'} -+ -+ exit@0.1.2: -+ resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} -+ engines: {node: '>= 0.8.0'} -+ -+ expand-brackets@2.1.4: -+ resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} -+ engines: {node: '>=0.10.0'} -+ -+ expect@26.6.2: -+ resolution: {integrity: sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==} -+ engines: {node: '>= 10.14.2'} -+ -+ extend-shallow@2.0.1: -+ resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} -+ engines: {node: '>=0.10.0'} -+ -+ extend-shallow@3.0.2: -+ resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} -+ engines: {node: '>=0.10.0'} -+ -+ extend@3.0.2: -+ resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} -+ -+ extglob@2.0.4: -+ resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} -+ engines: {node: '>=0.10.0'} -+ -+ extsprintf@1.3.0: -+ resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} -+ engines: {'0': node >=0.6.0} -+ -+ extsprintf@1.4.0: -+ resolution: {integrity: sha512-6NW8DZ8pWBc5NbGYUiqqccj9dXnuSzilZYqprdKJBZsQodGH9IyUoFOGxIWVDcBzHMb8ET24aqx9p66tZEWZkA==} -+ engines: {'0': node >=0.6.0} -+ -+ fast-deep-equal@3.1.3: -+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} -+ -+ fast-glob@3.3.2: -+ resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} -+ engines: {node: '>=8.6.0'} -+ -+ fast-json-stable-stringify@2.1.0: -+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} -+ -+ fast-levenshtein@2.0.6: -+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} -+ -+ fastq@1.8.0: -+ resolution: {integrity: sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==} -+ -+ fb-watchman@2.0.1: -+ resolution: {integrity: sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==} -+ -+ file-entry-cache@6.0.1: -+ resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} -+ engines: {node: ^10.12.0 || >=12.0.0} -+ -+ fill-range@4.0.0: -+ resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} -+ engines: {node: '>=0.10.0'} -+ -+ fill-range@7.1.1: -+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} -+ engines: {node: '>=8'} -+ -+ find-up@4.1.0: -+ resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} -+ engines: {node: '>=8'} -+ -+ flat-cache@3.0.4: -+ resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} -+ engines: {node: ^10.12.0 || >=12.0.0} -+ -+ flatted@3.1.0: -+ resolution: {integrity: sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==} -+ -+ for-in@1.0.2: -+ resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} -+ engines: {node: '>=0.10.0'} -+ -+ forever-agent@0.6.1: -+ resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} -+ -+ form-data@2.3.3: -+ resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} -+ engines: {node: '>= 0.12'} -+ -+ fragment-cache@0.2.1: -+ resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} -+ engines: {node: '>=0.10.0'} -+ -+ fs.realpath@1.0.0: -+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} -+ -+ fsevents@2.1.3: -+ resolution: {integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==} -+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} -+ os: [darwin] -+ deprecated: '"Please update to latest v2.3 or v2.2"' -+ -+ function-bind@1.1.1: -+ resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} -+ -+ functional-red-black-tree@1.0.1: -+ resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} -+ -+ gensync@1.0.0-beta.1: -+ resolution: {integrity: sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==} -+ engines: {node: '>=6.9.0'} -+ -+ get-caller-file@2.0.5: -+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} -+ engines: {node: 6.* || 8.* || >= 10.*} -+ -+ get-package-type@0.1.0: -+ resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} -+ engines: {node: '>=8.0.0'} -+ -+ get-stream@4.1.0: -+ resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} -+ engines: {node: '>=6'} -+ -+ get-stream@5.2.0: -+ resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} -+ engines: {node: '>=8'} -+ -+ get-value@2.0.6: -+ resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} -+ engines: {node: '>=0.10.0'} -+ -+ getpass@0.1.7: -+ resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} -+ -+ glob-parent@5.1.2: -+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} -+ engines: {node: '>= 6'} -+ -+ glob@7.1.6: -+ resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} -+ deprecated: Glob versions prior to v9 are no longer supported -+ -+ globals@11.12.0: -+ resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} -+ engines: {node: '>=4'} -+ -+ globals@13.9.0: -+ resolution: {integrity: sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==} -+ engines: {node: '>=8'} -+ -+ globby@11.0.3: -+ resolution: {integrity: sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==} -+ engines: {node: '>=10'} -+ -+ graceful-fs@4.2.11: -+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} -+ -+ growly@1.3.0: -+ resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==} -+ -+ har-schema@2.0.0: -+ resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} -+ engines: {node: '>=4'} -+ -+ har-validator@5.1.5: -+ resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} -+ engines: {node: '>=6'} -+ deprecated: this library is no longer supported -+ -+ has-flag@3.0.0: -+ resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} -+ engines: {node: '>=4'} -+ -+ has-flag@4.0.0: -+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} -+ engines: {node: '>=8'} -+ -+ has-value@0.3.1: -+ resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} -+ engines: {node: '>=0.10.0'} -+ -+ has-value@1.0.0: -+ resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} -+ engines: {node: '>=0.10.0'} -+ -+ has-values@0.1.4: -+ resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} -+ engines: {node: '>=0.10.0'} -+ -+ has-values@1.0.0: -+ resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} -+ engines: {node: '>=0.10.0'} -+ -+ has@1.0.3: -+ resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} -+ engines: {node: '>= 0.4.0'} -+ -+ hosted-git-info@2.8.8: -+ resolution: {integrity: sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==} -+ -+ html-encoding-sniffer@2.0.1: -+ resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} -+ engines: {node: '>=10'} -+ -+ html-escaper@2.0.2: -+ resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} -+ -+ http-signature@1.2.0: -+ resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} -+ engines: {node: '>=0.8', npm: '>=1.3.7'} -+ -+ human-signals@1.1.1: -+ resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} -+ engines: {node: '>=8.12.0'} -+ -+ iconv-lite@0.4.24: -+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} -+ engines: {node: '>=0.10.0'} -+ -+ ignore@4.0.6: -+ resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} -+ engines: {node: '>= 4'} -+ -+ ignore@5.1.8: -+ resolution: {integrity: sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==} -+ engines: {node: '>= 4'} -+ -+ import-fresh@3.2.1: -+ resolution: {integrity: sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==} -+ engines: {node: '>=6'} -+ -+ import-local@3.0.2: -+ resolution: {integrity: sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==} -+ engines: {node: '>=8'} -+ hasBin: true -+ -+ imurmurhash@0.1.4: -+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} -+ engines: {node: '>=0.8.19'} -+ -+ inflight@1.0.6: -+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} -+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. -+ -+ inherits@2.0.4: -+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} -+ -+ ip-regex@2.1.0: -+ resolution: {integrity: sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==} -+ engines: {node: '>=4'} -+ -+ is-accessor-descriptor@0.1.6: -+ resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} -+ engines: {node: '>=0.10.0'} -+ deprecated: Please upgrade to v0.1.7 -+ -+ is-accessor-descriptor@1.0.0: -+ resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} -+ engines: {node: '>=0.10.0'} -+ deprecated: Please upgrade to v1.0.1 -+ -+ is-arrayish@0.2.1: -+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} -+ -+ is-buffer@1.1.6: -+ resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} -+ -+ is-ci@2.0.0: -+ resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} -+ hasBin: true -+ -+ is-core-module@2.0.0: -+ resolution: {integrity: sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==} -+ -+ is-data-descriptor@0.1.4: -+ resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} -+ engines: {node: '>=0.10.0'} -+ deprecated: Please upgrade to v0.1.5 -+ -+ is-data-descriptor@1.0.0: -+ resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} -+ engines: {node: '>=0.10.0'} -+ deprecated: Please upgrade to v1.0.1 -+ -+ is-descriptor@0.1.6: -+ resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} -+ engines: {node: '>=0.10.0'} -+ -+ is-descriptor@1.0.2: -+ resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==} -+ engines: {node: '>=0.10.0'} -+ -+ is-docker@2.1.1: -+ resolution: {integrity: sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==} -+ engines: {node: '>=8'} -+ hasBin: true -+ -+ is-extendable@0.1.1: -+ resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} -+ engines: {node: '>=0.10.0'} -+ -+ is-extendable@1.0.1: -+ resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} -+ engines: {node: '>=0.10.0'} -+ -+ is-extglob@2.1.1: -+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} -+ engines: {node: '>=0.10.0'} -+ -+ is-fullwidth-code-point@3.0.0: -+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} -+ engines: {node: '>=8'} -+ -+ is-generator-fn@2.1.0: -+ resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} -+ engines: {node: '>=6'} -+ -+ is-glob@4.0.3: -+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} -+ engines: {node: '>=0.10.0'} -+ -+ is-number@3.0.0: -+ resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} -+ engines: {node: '>=0.10.0'} -+ -+ is-number@7.0.0: -+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} -+ engines: {node: '>=0.12.0'} -+ -+ is-plain-object@2.0.4: -+ resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} -+ engines: {node: '>=0.10.0'} -+ -+ is-plain-object@5.0.0: -+ resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} -+ engines: {node: '>=0.10.0'} -+ -+ is-potential-custom-element-name@1.0.0: -+ resolution: {integrity: sha512-CE64XFKRrCIpeuy4hhp3nBSUTGziMV09Rn0CPW7G3RRvNBcwysyrJlgIpuEzafB6g1T2P1kGc35nG2bMHqH73w==} -+ -+ is-stream@1.1.0: -+ resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} -+ engines: {node: '>=0.10.0'} -+ -+ is-stream@2.0.0: -+ resolution: {integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==} -+ engines: {node: '>=8'} -+ -+ is-typedarray@1.0.0: -+ resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} -+ -+ is-windows@1.0.2: -+ resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} -+ engines: {node: '>=0.10.0'} -+ -+ is-wsl@2.2.0: -+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} -+ engines: {node: '>=8'} -+ -+ isarray@1.0.0: -+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} -+ -+ isexe@2.0.0: -+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} -+ -+ isobject@2.1.0: -+ resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} -+ engines: {node: '>=0.10.0'} -+ -+ isobject@3.0.1: -+ resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} -+ engines: {node: '>=0.10.0'} -+ -+ isstream@0.1.2: -+ resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} -+ -+ istanbul-lib-coverage@3.0.0: -+ resolution: {integrity: sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==} -+ engines: {node: '>=8'} -+ -+ istanbul-lib-instrument@4.0.3: -+ resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} -+ engines: {node: '>=8'} -+ -+ istanbul-lib-report@3.0.0: -+ resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} -+ engines: {node: '>=8'} -+ -+ istanbul-lib-source-maps@4.0.0: -+ resolution: {integrity: sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==} -+ engines: {node: '>=8'} -+ -+ istanbul-reports@3.0.2: -+ resolution: {integrity: sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==} -+ engines: {node: '>=8'} -+ -+ jest-changed-files@26.6.2: -+ resolution: {integrity: sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-cli@26.6.3: -+ resolution: {integrity: sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==} -+ engines: {node: '>= 10.14.2'} -+ hasBin: true -+ -+ jest-config@26.6.3: -+ resolution: {integrity: sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==} -+ engines: {node: '>= 10.14.2'} -+ peerDependencies: -+ ts-node: '>=9.0.0' -+ peerDependenciesMeta: -+ ts-node: -+ optional: true -+ -+ jest-diff@26.6.2: -+ resolution: {integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-diff@27.5.1: -+ resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} -+ engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} -+ -+ jest-docblock@26.0.0: -+ resolution: {integrity: sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-each@26.6.2: -+ resolution: {integrity: sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-environment-jsdom@26.6.2: -+ resolution: {integrity: sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-environment-node@26.6.2: -+ resolution: {integrity: sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-get-type@26.3.0: -+ resolution: {integrity: sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-get-type@27.5.1: -+ resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} -+ engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} -+ -+ jest-haste-map@26.6.2: -+ resolution: {integrity: sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-jasmine2@26.6.3: -+ resolution: {integrity: sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-leak-detector@26.6.2: -+ resolution: {integrity: sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-matcher-utils@26.6.2: -+ resolution: {integrity: sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-matcher-utils@27.5.1: -+ resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} -+ engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} -+ -+ jest-message-util@26.6.2: -+ resolution: {integrity: sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-mock@26.6.2: -+ resolution: {integrity: sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-pnp-resolver@1.2.2: -+ resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} -+ engines: {node: '>=6'} -+ peerDependencies: -+ jest-resolve: '*' -+ peerDependenciesMeta: -+ jest-resolve: -+ optional: true -+ -+ jest-regex-util@26.0.0: -+ resolution: {integrity: sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-resolve-dependencies@26.6.3: -+ resolution: {integrity: sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-resolve@26.6.2: -+ resolution: {integrity: sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-runner@26.6.3: -+ resolution: {integrity: sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-runtime@26.6.3: -+ resolution: {integrity: sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==} -+ engines: {node: '>= 10.14.2'} -+ hasBin: true -+ -+ jest-serializer@26.6.2: -+ resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-snapshot@26.6.2: -+ resolution: {integrity: sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-util@26.6.2: -+ resolution: {integrity: sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-validate@26.6.2: -+ resolution: {integrity: sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-watcher@26.6.2: -+ resolution: {integrity: sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==} -+ engines: {node: '>= 10.14.2'} -+ -+ jest-worker@26.6.2: -+ resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} -+ engines: {node: '>= 10.13.0'} -+ -+ jest@26.6.3: -+ resolution: {integrity: sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==} -+ engines: {node: '>= 10.14.2'} -+ hasBin: true -+ -+ js-tokens@4.0.0: -+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} -+ -+ js-yaml@3.14.0: -+ resolution: {integrity: sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==} -+ hasBin: true -+ -+ jsbn@0.1.1: -+ resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} -+ -+ jsdom@16.4.0: -+ resolution: {integrity: sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==} -+ engines: {node: '>=10'} -+ peerDependencies: -+ canvas: ^2.5.0 -+ peerDependenciesMeta: -+ canvas: -+ optional: true -+ -+ jsesc@2.5.2: -+ resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} -+ engines: {node: '>=4'} -+ hasBin: true -+ -+ json-parse-even-better-errors@2.3.1: -+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} -+ -+ json-schema-traverse@0.4.1: -+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} -+ -+ json-schema-traverse@1.0.0: -+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} -+ -+ json-schema@0.2.3: -+ resolution: {integrity: sha512-a3xHnILGMtk+hDOqNwHzF6e2fNbiMrXZvxKQiEv2MlgQP+pjIOzqAmKYD2mDpXYE/44M7g+n9p2bKkYWDUcXCQ==} -+ -+ json-stable-stringify-without-jsonify@1.0.1: -+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} -+ -+ json-stringify-safe@5.0.1: -+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} -+ -+ json5@2.1.3: -+ resolution: {integrity: sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==} -+ engines: {node: '>=6'} -+ hasBin: true -+ -+ jsprim@1.4.1: -+ resolution: {integrity: sha512-4Dj8Rf+fQ+/Pn7C5qeEX02op1WfOss3PKTE9Nsop3Dx+6UPxlm1dr/og7o2cRa5hNN07CACr4NFzRLtj/rjWog==} -+ engines: {'0': node >=0.6.0} -+ -+ kind-of@3.2.2: -+ resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} -+ engines: {node: '>=0.10.0'} -+ -+ kind-of@4.0.0: -+ resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} -+ engines: {node: '>=0.10.0'} -+ -+ kind-of@5.1.0: -+ resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} -+ engines: {node: '>=0.10.0'} -+ -+ kind-of@6.0.3: -+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} -+ engines: {node: '>=0.10.0'} -+ -+ kleur@3.0.3: -+ resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} -+ engines: {node: '>=6'} -+ -+ leven@3.1.0: -+ resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} -+ engines: {node: '>=6'} -+ -+ levn@0.3.0: -+ resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} -+ engines: {node: '>= 0.8.0'} -+ -+ levn@0.4.1: -+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} -+ engines: {node: '>= 0.8.0'} -+ -+ lines-and-columns@1.1.6: -+ resolution: {integrity: sha512-8ZmlJFVK9iCmtLz19HpSsR8HaAMWBT284VMNednLwlIMDP2hJDCIhUp0IZ2xUcZ+Ob6BM0VvCSJwzASDM45NLQ==} -+ -+ locate-path@5.0.0: -+ resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} -+ engines: {node: '>=8'} -+ -+ lodash.clonedeep@4.5.0: -+ resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} -+ -+ lodash.merge@4.6.2: -+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} -+ -+ lodash.sortby@4.7.0: -+ resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} -+ -+ lodash.truncate@4.4.2: -+ resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} -+ -+ lodash@4.17.21: -+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} -+ -+ lru-cache@6.0.0: -+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} -+ engines: {node: '>=10'} -+ -+ make-dir@3.1.0: -+ resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} -+ engines: {node: '>=8'} -+ -+ make-error@1.3.6: -+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} -+ -+ makeerror@1.0.11: -+ resolution: {integrity: sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==} -+ -+ map-cache@0.2.2: -+ resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} -+ engines: {node: '>=0.10.0'} -+ -+ map-visit@1.0.0: -+ resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} -+ engines: {node: '>=0.10.0'} -+ -+ merge-stream@2.0.0: -+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} -+ -+ merge2@1.4.1: -+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} -+ engines: {node: '>= 8'} -+ -+ micromatch@3.1.10: -+ resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} -+ engines: {node: '>=0.10.0'} -+ -+ micromatch@4.0.8: -+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} -+ engines: {node: '>=8.6'} -+ -+ mime-db@1.44.0: -+ resolution: {integrity: sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==} -+ engines: {node: '>= 0.6'} -+ -+ mime-types@2.1.27: -+ resolution: {integrity: sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==} -+ engines: {node: '>= 0.6'} -+ -+ mimic-fn@2.1.0: -+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} -+ engines: {node: '>=6'} -+ -+ minimatch@3.0.4: -+ resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} -+ -+ minimist@1.2.8: -+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} -+ -+ mixin-deep@1.3.2: -+ resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} -+ engines: {node: '>=0.10.0'} -+ -+ mkdirp@1.0.4: -+ resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} -+ engines: {node: '>=10'} -+ hasBin: true -+ -+ ms@2.0.0: -+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} -+ -+ ms@2.1.2: -+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} -+ -+ nanomatch@1.2.13: -+ resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} -+ engines: {node: '>=0.10.0'} -+ -+ natural-compare@1.4.0: -+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} -+ -+ nice-try@1.0.5: -+ resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} -+ -+ node-fetch@2.7.0: -+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} -+ engines: {node: 4.x || >=6.0.0} -+ peerDependencies: -+ encoding: ^0.1.0 -+ peerDependenciesMeta: -+ encoding: -+ optional: true -+ -+ node-int64@0.4.0: -+ resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} -+ -+ node-modules-regexp@1.0.0: -+ resolution: {integrity: sha512-JMaRS9L4wSRIR+6PTVEikTrq/lMGEZR43a48ETeilY0Q0iMwVnccMFrUM1k+tNzmYuIU0Vh710bCUqHX+/+ctQ==} -+ engines: {node: '>=0.10.0'} -+ -+ node-notifier@8.0.1: -+ resolution: {integrity: sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==} -+ -+ normalize-package-data@2.5.0: -+ resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} -+ -+ normalize-path@2.1.1: -+ resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} -+ engines: {node: '>=0.10.0'} -+ -+ normalize-path@3.0.0: -+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} -+ engines: {node: '>=0.10.0'} -+ -+ npm-run-path@2.0.2: -+ resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} -+ engines: {node: '>=4'} -+ -+ npm-run-path@4.0.1: -+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} -+ engines: {node: '>=8'} -+ -+ nwsapi@2.2.0: -+ resolution: {integrity: sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==} -+ -+ oauth-sign@0.9.0: -+ resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} -+ -+ object-copy@0.1.0: -+ resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} -+ engines: {node: '>=0.10.0'} -+ -+ object-visit@1.0.1: -+ resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} -+ engines: {node: '>=0.10.0'} -+ -+ object.pick@1.3.0: -+ resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} -+ engines: {node: '>=0.10.0'} -+ -+ once@1.4.0: -+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} -+ -+ onetime@5.1.2: -+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} -+ engines: {node: '>=6'} -+ -+ optionator@0.8.3: -+ resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} -+ engines: {node: '>= 0.8.0'} -+ -+ optionator@0.9.1: -+ resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} -+ engines: {node: '>= 0.8.0'} -+ -+ p-each-series@2.1.0: -+ resolution: {integrity: sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ==} -+ engines: {node: '>=8'} -+ -+ p-finally@1.0.0: -+ resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} -+ engines: {node: '>=4'} -+ -+ p-limit@2.3.0: -+ resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} -+ engines: {node: '>=6'} -+ -+ p-locate@4.1.0: -+ resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} -+ engines: {node: '>=8'} -+ -+ p-try@2.2.0: -+ resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} -+ engines: {node: '>=6'} -+ -+ parent-module@1.0.1: -+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} -+ engines: {node: '>=6'} -+ -+ parse-json@5.1.0: -+ resolution: {integrity: sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==} -+ engines: {node: '>=8'} -+ -+ parse5@5.1.1: -+ resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} -+ -+ pascalcase@0.1.1: -+ resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} -+ engines: {node: '>=0.10.0'} -+ -+ path-exists@4.0.0: -+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} -+ engines: {node: '>=8'} -+ -+ path-is-absolute@1.0.1: -+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} -+ engines: {node: '>=0.10.0'} -+ -+ path-key@2.0.1: -+ resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} -+ engines: {node: '>=4'} -+ -+ path-key@3.1.1: -+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} -+ engines: {node: '>=8'} -+ -+ path-parse@1.0.6: -+ resolution: {integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==} -+ -+ path-type@4.0.0: -+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} -+ engines: {node: '>=8'} -+ -+ performance-now@2.1.0: -+ resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} -+ -+ picomatch@2.3.1: -+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} -+ engines: {node: '>=8.6'} -+ -+ pirates@4.0.1: -+ resolution: {integrity: sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==} -+ engines: {node: '>= 6'} -+ -+ pkg-dir@4.2.0: -+ resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} -+ engines: {node: '>=8'} -+ -+ posix-character-classes@0.1.1: -+ resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} -+ engines: {node: '>=0.10.0'} -+ -+ prelude-ls@1.1.2: -+ resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} -+ engines: {node: '>= 0.8.0'} -+ -+ prelude-ls@1.2.1: -+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} -+ engines: {node: '>= 0.8.0'} -+ -+ prettier@3.3.3: -+ resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} -+ engines: {node: '>=14'} -+ hasBin: true -+ -+ pretty-format@26.6.2: -+ resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==} -+ engines: {node: '>= 10'} -+ -+ pretty-format@27.5.1: -+ resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} -+ engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} -+ -+ progress@2.0.3: -+ resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} -+ engines: {node: '>=0.4.0'} -+ -+ prompts@2.3.2: -+ resolution: {integrity: sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==} -+ engines: {node: '>= 6'} -+ -+ psl@1.8.0: -+ resolution: {integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==} -+ -+ pump@3.0.0: -+ resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} -+ -+ punycode@2.1.1: -+ resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} -+ engines: {node: '>=6'} -+ -+ qs@6.5.2: -+ resolution: {integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==} -+ engines: {node: '>=0.6'} -+ -+ react-is@17.0.1: -+ resolution: {integrity: sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==} -+ -+ read-pkg-up@7.0.1: -+ resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} -+ engines: {node: '>=8'} -+ -+ read-pkg@5.2.0: -+ resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} -+ engines: {node: '>=8'} -+ -+ regenerator-runtime@0.14.1: -+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} -+ -+ regex-not@1.0.2: -+ resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} -+ engines: {node: '>=0.10.0'} -+ -+ regexpp@3.1.0: -+ resolution: {integrity: sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==} -+ engines: {node: '>=8'} -+ -+ remove-trailing-separator@1.1.0: -+ resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} -+ -+ repeat-element@1.1.3: -+ resolution: {integrity: sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==} -+ engines: {node: '>=0.10.0'} -+ -+ repeat-string@1.6.1: -+ resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} -+ engines: {node: '>=0.10'} -+ -+ request-promise-core@1.1.4: -+ resolution: {integrity: sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==} -+ engines: {node: '>=0.10.0'} -+ peerDependencies: -+ request: ^2.34 -+ -+ request-promise-native@1.0.9: -+ resolution: {integrity: sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==} -+ engines: {node: '>=0.12.0'} -+ deprecated: request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142 -+ peerDependencies: -+ request: ^2.34 -+ -+ request@2.88.2: -+ resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} -+ engines: {node: '>= 6'} -+ deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 -+ -+ require-directory@2.1.1: -+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} -+ engines: {node: '>=0.10.0'} -+ -+ require-from-string@2.0.2: -+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} -+ engines: {node: '>=0.10.0'} -+ -+ require-main-filename@2.0.0: -+ resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} -+ -+ resolve-cwd@3.0.0: -+ resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} -+ engines: {node: '>=8'} -+ -+ resolve-from@4.0.0: -+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} -+ engines: {node: '>=4'} -+ -+ resolve-from@5.0.0: -+ resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} -+ engines: {node: '>=8'} -+ -+ resolve-url@0.2.1: -+ resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} -+ deprecated: https://github.com/lydell/resolve-url#deprecated -+ -+ resolve@1.18.1: -+ resolution: {integrity: sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==} -+ -+ ret@0.1.15: -+ resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} -+ engines: {node: '>=0.12'} -+ -+ reusify@1.0.4: -+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} -+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'} -+ -+ rimraf@3.0.2: -+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} -+ deprecated: Rimraf versions prior to v4 are no longer supported -+ hasBin: true -+ -+ rsvp@4.8.5: -+ resolution: {integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==} -+ engines: {node: 6.* || >= 7.*} -+ -+ run-parallel@1.1.9: -+ resolution: {integrity: sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==} -+ -+ rxjs@7.8.1: -+ resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} -+ -+ safe-buffer@5.1.2: -+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} -+ -+ safe-buffer@5.2.1: -+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} -+ -+ safe-regex@1.1.0: -+ resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} -+ -+ safer-buffer@2.1.2: -+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} -+ -+ sane@4.1.0: -+ resolution: {integrity: sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==} -+ engines: {node: 6.* || 8.* || >= 10.*} -+ deprecated: some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added -+ hasBin: true -+ -+ saxes@5.0.1: -+ resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} -+ engines: {node: '>=10'} -+ -+ semver@5.7.1: -+ resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} -+ hasBin: true -+ -+ semver@6.3.1: -+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} -+ hasBin: true -+ -+ semver@7.3.5: -+ resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} -+ engines: {node: '>=10'} -+ hasBin: true -+ -+ set-blocking@2.0.0: -+ resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} -+ -+ set-value@2.0.1: -+ resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} -+ engines: {node: '>=0.10.0'} -+ -+ shebang-command@1.2.0: -+ resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} -+ engines: {node: '>=0.10.0'} -+ -+ shebang-command@2.0.0: -+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} -+ engines: {node: '>=8'} -+ -+ shebang-regex@1.0.0: -+ resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} -+ engines: {node: '>=0.10.0'} -+ -+ shebang-regex@3.0.0: -+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} -+ engines: {node: '>=8'} -+ -+ shell-quote@1.8.1: -+ resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} -+ -+ shellwords@0.1.1: -+ resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==} -+ -+ signal-exit@3.0.3: -+ resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==} -+ -+ sisteransi@1.0.5: -+ resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} -+ -+ slash@3.0.0: -+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} -+ engines: {node: '>=8'} -+ -+ slice-ansi@4.0.0: -+ resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} -+ engines: {node: '>=10'} -+ -+ snapdragon-node@2.1.1: -+ resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} -+ engines: {node: '>=0.10.0'} -+ -+ snapdragon-util@3.0.1: -+ resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} -+ engines: {node: '>=0.10.0'} -+ -+ snapdragon@0.8.2: -+ resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} -+ engines: {node: '>=0.10.0'} -+ -+ source-map-resolve@0.5.3: -+ resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} -+ deprecated: See https://github.com/lydell/source-map-resolve#deprecated -+ -+ source-map-support@0.5.19: -+ resolution: {integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==} -+ -+ source-map-url@0.4.0: -+ resolution: {integrity: sha512-liJwHPI9x9d9w5WSIjM58MqGmmb7XzNqwdUA3kSBQ4lmDngexlKwawGzK3J1mKXi6+sysoMDlpVyZh9sv5vRfw==} -+ deprecated: See https://github.com/lydell/source-map-url#deprecated -+ -+ source-map@0.5.7: -+ resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} -+ engines: {node: '>=0.10.0'} -+ -+ source-map@0.6.1: -+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} -+ engines: {node: '>=0.10.0'} -+ -+ source-map@0.7.3: -+ resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} -+ engines: {node: '>= 8'} -+ -+ spawn-command@0.0.2: -+ resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} -+ -+ spdx-correct@3.1.1: -+ resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} -+ -+ spdx-exceptions@2.3.0: -+ resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} -+ -+ spdx-expression-parse@3.0.1: -+ resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} -+ -+ spdx-license-ids@3.0.6: -+ resolution: {integrity: sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==} -+ -+ split-string@3.1.0: -+ resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} -+ engines: {node: '>=0.10.0'} -+ -+ sprintf-js@1.0.3: -+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} -+ -+ sshpk@1.16.1: -+ resolution: {integrity: sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==} -+ engines: {node: '>=0.10.0'} -+ hasBin: true -+ -+ stack-utils@2.0.2: -+ resolution: {integrity: sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg==} -+ engines: {node: '>=10'} -+ -+ static-extend@0.1.2: -+ resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} -+ engines: {node: '>=0.10.0'} -+ -+ stealthy-require@1.1.1: -+ resolution: {integrity: sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==} -+ engines: {node: '>=0.10.0'} -+ -+ string-length@4.0.1: -+ resolution: {integrity: sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==} -+ engines: {node: '>=10'} -+ -+ string-width@4.2.3: -+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} -+ engines: {node: '>=8'} -+ -+ strip-ansi@6.0.1: -+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} -+ engines: {node: '>=8'} -+ -+ strip-bom@4.0.0: -+ resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} -+ engines: {node: '>=8'} -+ -+ strip-eof@1.0.0: -+ resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} -+ engines: {node: '>=0.10.0'} -+ -+ strip-final-newline@2.0.0: -+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} -+ engines: {node: '>=6'} -+ -+ strip-json-comments@3.1.1: -+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} -+ engines: {node: '>=8'} -+ -+ supports-color@5.5.0: -+ resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} -+ engines: {node: '>=4'} -+ -+ supports-color@7.2.0: -+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} -+ engines: {node: '>=8'} -+ -+ supports-color@8.1.1: -+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} -+ engines: {node: '>=10'} -+ -+ supports-hyperlinks@2.1.0: -+ resolution: {integrity: sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==} -+ engines: {node: '>=8'} -+ -+ symbol-tree@3.2.4: -+ resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} -+ -+ table@6.7.1: -+ resolution: {integrity: sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==} -+ engines: {node: '>=10.0.0'} -+ -+ terminal-link@2.1.1: -+ resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} -+ engines: {node: '>=8'} -+ -+ test-exclude@6.0.0: -+ resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} -+ engines: {node: '>=8'} -+ -+ text-table@0.2.0: -+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} -+ -+ throat@5.0.0: -+ resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} -+ -+ tmpl@1.0.4: -+ resolution: {integrity: sha512-9tP427gQBl7Mx3vzr3mquZ+Rq+1sAqIJb5dPSYEjWMYsqitxARsFCHkZS3sDptHAmrUPCZfzXNZqSuBIHdpV5A==} -+ -+ to-fast-properties@2.0.0: -+ resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} -+ engines: {node: '>=4'} -+ -+ to-object-path@0.3.0: -+ resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} -+ engines: {node: '>=0.10.0'} -+ -+ to-regex-range@2.1.1: -+ resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} -+ engines: {node: '>=0.10.0'} -+ -+ to-regex-range@5.0.1: -+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} -+ engines: {node: '>=8.0'} -+ -+ to-regex@3.0.2: -+ resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} -+ engines: {node: '>=0.10.0'} -+ -+ tough-cookie@2.5.0: -+ resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} -+ engines: {node: '>=0.8'} -+ -+ tough-cookie@3.0.1: -+ resolution: {integrity: sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==} -+ engines: {node: '>=6'} -+ -+ tr46@0.0.3: -+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} -+ -+ tr46@2.0.2: -+ resolution: {integrity: sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==} -+ engines: {node: '>=8'} -+ -+ tree-kill@1.2.2: -+ resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} -+ hasBin: true -+ -+ ts-jest@26.5.6: -+ resolution: {integrity: sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==} -+ engines: {node: '>= 10'} -+ hasBin: true -+ peerDependencies: -+ jest: '>=26 <27' -+ typescript: '>=3.8 <5.0' -+ -+ ts-node@10.9.1: -+ resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} -+ hasBin: true -+ peerDependencies: -+ '@swc/core': '>=1.2.50' -+ '@swc/wasm': '>=1.2.50' -+ '@types/node': '*' -+ typescript: '>=2.7' -+ peerDependenciesMeta: -+ '@swc/core': -+ optional: true -+ '@swc/wasm': -+ optional: true -+ -+ tslib@1.14.0: -+ resolution: {integrity: sha512-+Zw5lu0D9tvBMjGP8LpvMb0u2WW2QV3y+D8mO6J+cNzCYIN4sVy43Bf9vl92nqFahutN0I8zHa7cc4vihIshnw==} -+ -+ tslib@2.6.2: -+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} -+ -+ tsutils@3.21.0: -+ resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} -+ engines: {node: '>= 6'} -+ peerDependencies: -+ typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' -+ -+ tunnel-agent@0.6.0: -+ resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} -+ -+ tunnel@0.0.6: -+ resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} -+ engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} -+ -+ tweetnacl@0.14.5: -+ resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} -+ -+ type-check@0.3.2: -+ resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} -+ engines: {node: '>= 0.8.0'} -+ -+ type-check@0.4.0: -+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} -+ engines: {node: '>= 0.8.0'} -+ -+ type-detect@4.0.8: -+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} -+ engines: {node: '>=4'} -+ -+ type-fest@0.11.0: -+ resolution: {integrity: sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==} -+ engines: {node: '>=8'} -+ -+ type-fest@0.20.2: -+ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} -+ engines: {node: '>=10'} -+ -+ type-fest@0.6.0: -+ resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} -+ engines: {node: '>=8'} -+ -+ type-fest@0.8.1: -+ resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} -+ engines: {node: '>=8'} -+ -+ typedarray-to-buffer@3.1.5: -+ resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} -+ -+ typescript@4.9.5: -+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} -+ engines: {node: '>=4.2.0'} -+ hasBin: true -+ -+ undici-types@5.26.5: -+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} -+ -+ union-value@1.0.1: -+ resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} -+ engines: {node: '>=0.10.0'} -+ -+ universal-user-agent@6.0.0: -+ resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==} -+ -+ unset-value@1.0.0: -+ resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} -+ engines: {node: '>=0.10.0'} -+ -+ uri-js@4.4.0: -+ resolution: {integrity: sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==} -+ -+ urix@0.1.0: -+ resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} -+ deprecated: Please see https://github.com/lydell/urix#deprecated -+ -+ use@3.1.1: -+ resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} -+ engines: {node: '>=0.10.0'} -+ -+ uuid@3.4.0: -+ resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} -+ deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. -+ hasBin: true -+ -+ uuid@8.3.2: -+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} -+ hasBin: true -+ -+ v8-compile-cache-lib@3.0.1: -+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} -+ -+ v8-compile-cache@2.1.1: -+ resolution: {integrity: sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==} -+ -+ v8-to-istanbul@7.0.0: -+ resolution: {integrity: sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA==} -+ engines: {node: '>=10.10.0'} -+ -+ validate-npm-package-license@3.0.4: -+ resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} -+ -+ verror@1.10.0: -+ resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} -+ engines: {'0': node >=0.6.0} -+ -+ w3c-hr-time@1.0.2: -+ resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} -+ deprecated: Use your platform's native performance.now() and performance.timeOrigin. -+ -+ w3c-xmlserializer@2.0.0: -+ resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} -+ engines: {node: '>=10'} -+ -+ walker@1.0.7: -+ resolution: {integrity: sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==} -+ -+ webidl-conversions@3.0.1: -+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} -+ -+ webidl-conversions@5.0.0: -+ resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} -+ engines: {node: '>=8'} -+ -+ webidl-conversions@6.1.0: -+ resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} -+ engines: {node: '>=10.4'} -+ -+ whatwg-encoding@1.0.5: -+ resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} -+ -+ whatwg-mimetype@2.3.0: -+ resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} -+ -+ whatwg-url@5.0.0: -+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} -+ -+ whatwg-url@8.4.0: -+ resolution: {integrity: sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==} -+ engines: {node: '>=10'} -+ -+ which-module@2.0.0: -+ resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} -+ -+ which@1.3.1: -+ resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} -+ hasBin: true -+ -+ which@2.0.2: -+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} -+ engines: {node: '>= 8'} -+ hasBin: true -+ -+ word-wrap@1.2.3: -+ resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} -+ engines: {node: '>=0.10.0'} -+ -+ wrap-ansi@6.2.0: -+ resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} -+ engines: {node: '>=8'} -+ -+ wrap-ansi@7.0.0: -+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} -+ engines: {node: '>=10'} -+ -+ wrappy@1.0.2: -+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} -+ -+ write-file-atomic@3.0.3: -+ resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} -+ -+ ws@7.3.1: -+ resolution: {integrity: sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==} -+ engines: {node: '>=8.3.0'} -+ peerDependencies: -+ bufferutil: ^4.0.1 -+ utf-8-validate: ^5.0.2 -+ peerDependenciesMeta: -+ bufferutil: -+ optional: true -+ utf-8-validate: -+ optional: true -+ -+ xml-name-validator@3.0.0: -+ resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} -+ -+ xmlchars@2.2.0: -+ resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} -+ -+ y18n@4.0.1: -+ resolution: {integrity: sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==} -+ -+ y18n@5.0.8: -+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} -+ engines: {node: '>=10'} -+ -+ yallist@4.0.0: -+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} -+ -+ yargs-parser@18.1.3: -+ resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} -+ engines: {node: '>=6'} -+ -+ yargs-parser@20.2.7: -+ resolution: {integrity: sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==} -+ engines: {node: '>=10'} -+ -+ yargs-parser@21.1.1: -+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} -+ engines: {node: '>=12'} -+ -+ yargs@15.4.1: -+ resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} -+ engines: {node: '>=8'} -+ -+ yargs@17.7.2: -+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} -+ engines: {node: '>=12'} -+ -+ yn@3.1.1: -+ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} -+ engines: {node: '>=6'} -+ -+snapshots: -+ -+ '@actions/core@1.3.0': {} -+ -+ '@actions/github@5.0.0': -+ dependencies: -+ '@actions/http-client': 1.0.11 -+ '@octokit/core': 3.4.0 -+ '@octokit/plugin-paginate-rest': 2.13.3(@octokit/core@3.4.0) -+ '@octokit/plugin-rest-endpoint-methods': 5.3.0(@octokit/core@3.4.0) -+ transitivePeerDependencies: -+ - encoding -+ -+ '@actions/http-client@1.0.11': -+ dependencies: -+ tunnel: 0.0.6 -+ -+ '@babel/code-frame@7.12.11': -+ dependencies: -+ '@babel/highlight': 7.10.4 -+ -+ '@babel/core@7.11.6': -+ dependencies: -+ '@babel/code-frame': 7.12.11 -+ '@babel/generator': 7.11.6 -+ '@babel/helper-module-transforms': 7.11.0 -+ '@babel/helpers': 7.10.4 -+ '@babel/parser': 7.11.5 -+ '@babel/template': 7.10.4 -+ '@babel/traverse': 7.11.5 -+ '@babel/types': 7.11.5 -+ convert-source-map: 1.7.0 -+ debug: 4.3.6 -+ gensync: 1.0.0-beta.1 -+ json5: 2.1.3 -+ lodash: 4.17.21 -+ resolve: 1.18.1 -+ semver: 5.7.1 -+ source-map: 0.5.7 -+ transitivePeerDependencies: -+ - supports-color -+ -+ '@babel/generator@7.11.6': -+ dependencies: -+ '@babel/types': 7.11.5 -+ jsesc: 2.5.2 -+ source-map: 0.5.7 -+ -+ '@babel/helper-function-name@7.10.4': -+ dependencies: -+ '@babel/helper-get-function-arity': 7.10.4 -+ '@babel/template': 7.10.4 -+ '@babel/types': 7.11.5 -+ -+ '@babel/helper-get-function-arity@7.10.4': -+ dependencies: -+ '@babel/types': 7.11.5 -+ -+ '@babel/helper-member-expression-to-functions@7.11.0': -+ dependencies: -+ '@babel/types': 7.11.5 -+ -+ '@babel/helper-module-imports@7.10.4': -+ dependencies: -+ '@babel/types': 7.11.5 -+ -+ '@babel/helper-module-transforms@7.11.0': -+ dependencies: -+ '@babel/helper-module-imports': 7.10.4 -+ '@babel/helper-replace-supers': 7.10.4 -+ '@babel/helper-simple-access': 7.10.4 -+ '@babel/helper-split-export-declaration': 7.11.0 -+ '@babel/template': 7.10.4 -+ '@babel/types': 7.11.5 -+ lodash: 4.17.21 -+ transitivePeerDependencies: -+ - supports-color -+ -+ '@babel/helper-optimise-call-expression@7.10.4': -+ dependencies: -+ '@babel/types': 7.11.5 -+ -+ '@babel/helper-plugin-utils@7.10.4': {} -+ -+ '@babel/helper-replace-supers@7.10.4': -+ dependencies: -+ '@babel/helper-member-expression-to-functions': 7.11.0 -+ '@babel/helper-optimise-call-expression': 7.10.4 -+ '@babel/traverse': 7.11.5 -+ '@babel/types': 7.11.5 -+ transitivePeerDependencies: -+ - supports-color -+ -+ '@babel/helper-simple-access@7.10.4': -+ dependencies: -+ '@babel/template': 7.10.4 -+ '@babel/types': 7.11.5 -+ -+ '@babel/helper-split-export-declaration@7.11.0': -+ dependencies: -+ '@babel/types': 7.11.5 -+ -+ '@babel/helper-validator-identifier@7.10.4': {} -+ -+ '@babel/helpers@7.10.4': -+ dependencies: -+ '@babel/template': 7.10.4 -+ '@babel/traverse': 7.11.5 -+ '@babel/types': 7.11.5 -+ transitivePeerDependencies: -+ - supports-color -+ -+ '@babel/highlight@7.10.4': -+ dependencies: -+ '@babel/helper-validator-identifier': 7.10.4 -+ chalk: 2.4.2 -+ js-tokens: 4.0.0 -+ -+ '@babel/parser@7.11.5': -+ dependencies: -+ '@babel/types': 7.11.5 -+ -+ '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.11.6)': -+ dependencies: -+ '@babel/core': 7.11.6 -+ '@babel/helper-plugin-utils': 7.10.4 -+ -+ '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.11.6)': -+ dependencies: -+ '@babel/core': 7.11.6 -+ '@babel/helper-plugin-utils': 7.10.4 -+ -+ '@babel/plugin-syntax-class-properties@7.10.4(@babel/core@7.11.6)': -+ dependencies: -+ '@babel/core': 7.11.6 -+ '@babel/helper-plugin-utils': 7.10.4 -+ -+ '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.11.6)': -+ dependencies: -+ '@babel/core': 7.11.6 -+ '@babel/helper-plugin-utils': 7.10.4 -+ -+ '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.11.6)': -+ dependencies: -+ '@babel/core': 7.11.6 -+ '@babel/helper-plugin-utils': 7.10.4 -+ -+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.11.6)': -+ dependencies: -+ '@babel/core': 7.11.6 -+ '@babel/helper-plugin-utils': 7.10.4 -+ -+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.11.6)': -+ dependencies: -+ '@babel/core': 7.11.6 -+ '@babel/helper-plugin-utils': 7.10.4 -+ -+ '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.11.6)': -+ dependencies: -+ '@babel/core': 7.11.6 -+ '@babel/helper-plugin-utils': 7.10.4 -+ -+ '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.11.6)': -+ dependencies: -+ '@babel/core': 7.11.6 -+ '@babel/helper-plugin-utils': 7.10.4 -+ -+ '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.11.6)': -+ dependencies: -+ '@babel/core': 7.11.6 -+ '@babel/helper-plugin-utils': 7.10.4 -+ -+ '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.11.6)': -+ dependencies: -+ '@babel/core': 7.11.6 -+ '@babel/helper-plugin-utils': 7.10.4 -+ -+ '@babel/plugin-syntax-top-level-await@7.12.1(@babel/core@7.11.6)': -+ dependencies: -+ '@babel/core': 7.11.6 -+ '@babel/helper-plugin-utils': 7.10.4 -+ -+ '@babel/runtime@7.23.6': -+ dependencies: -+ regenerator-runtime: 0.14.1 -+ -+ '@babel/template@7.10.4': -+ dependencies: -+ '@babel/code-frame': 7.12.11 -+ '@babel/parser': 7.11.5 -+ '@babel/types': 7.11.5 -+ -+ '@babel/traverse@7.11.5': -+ dependencies: -+ '@babel/code-frame': 7.12.11 -+ '@babel/generator': 7.11.6 -+ '@babel/helper-function-name': 7.10.4 -+ '@babel/helper-split-export-declaration': 7.11.0 -+ '@babel/parser': 7.11.5 -+ '@babel/types': 7.11.5 -+ debug: 4.3.6 -+ globals: 11.12.0 -+ lodash: 4.17.21 -+ transitivePeerDependencies: -+ - supports-color -+ -+ '@babel/types@7.11.5': -+ dependencies: -+ '@babel/helper-validator-identifier': 7.10.4 -+ lodash: 4.17.21 -+ to-fast-properties: 2.0.0 -+ -+ '@bcoe/v8-coverage@0.2.3': {} -+ -+ '@cnakazawa/watch@1.0.4': -+ dependencies: -+ exec-sh: 0.3.4 -+ minimist: 1.2.8 -+ -+ '@cspotcode/source-map-support@0.8.1': -+ dependencies: -+ '@jridgewell/trace-mapping': 0.3.9 -+ optional: true -+ -+ '@eslint/eslintrc@0.4.3': -+ dependencies: -+ ajv: 6.12.6 -+ debug: 4.3.6 -+ espree: 7.3.1 -+ globals: 13.9.0 -+ ignore: 4.0.6 -+ import-fresh: 3.2.1 -+ js-yaml: 3.14.0 -+ minimatch: 3.0.4 -+ strip-json-comments: 3.1.1 -+ transitivePeerDependencies: -+ - supports-color -+ -+ '@humanwhocodes/config-array@0.5.0': -+ dependencies: -+ '@humanwhocodes/object-schema': 1.2.0 -+ debug: 4.3.6 -+ minimatch: 3.0.4 -+ transitivePeerDependencies: -+ - supports-color -+ -+ '@humanwhocodes/object-schema@1.2.0': {} -+ -+ '@istanbuljs/load-nyc-config@1.1.0': -+ dependencies: -+ camelcase: 5.3.1 -+ find-up: 4.1.0 -+ get-package-type: 0.1.0 -+ js-yaml: 3.14.0 -+ resolve-from: 5.0.0 -+ -+ '@istanbuljs/schema@0.1.2': {} -+ -+ '@jest/console@26.6.2': -+ dependencies: -+ '@jest/types': 26.6.2 -+ '@types/node': 20.14.11 -+ chalk: 4.1.2 -+ jest-message-util: 26.6.2 -+ jest-util: 26.6.2 -+ slash: 3.0.0 -+ -+ '@jest/core@26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5))': -+ dependencies: -+ '@jest/console': 26.6.2 -+ '@jest/reporters': 26.6.2 -+ '@jest/test-result': 26.6.2 -+ '@jest/transform': 26.6.2 -+ '@jest/types': 26.6.2 -+ '@types/node': 20.14.11 -+ ansi-escapes: 4.3.1 -+ chalk: 4.1.2 -+ exit: 0.1.2 -+ graceful-fs: 4.2.11 -+ jest-changed-files: 26.6.2 -+ jest-config: 26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)) -+ jest-haste-map: 26.6.2 -+ jest-message-util: 26.6.2 -+ jest-regex-util: 26.0.0 -+ jest-resolve: 26.6.2 -+ jest-resolve-dependencies: 26.6.3 -+ jest-runner: 26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)) -+ jest-runtime: 26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)) -+ jest-snapshot: 26.6.2 -+ jest-util: 26.6.2 -+ jest-validate: 26.6.2 -+ jest-watcher: 26.6.2 -+ micromatch: 4.0.8 -+ p-each-series: 2.1.0 -+ rimraf: 3.0.2 -+ slash: 3.0.0 -+ strip-ansi: 6.0.1 -+ transitivePeerDependencies: -+ - bufferutil -+ - canvas -+ - supports-color -+ - ts-node -+ - utf-8-validate -+ -+ '@jest/environment@26.6.2': -+ dependencies: -+ '@jest/fake-timers': 26.6.2 -+ '@jest/types': 26.6.2 -+ '@types/node': 20.14.11 -+ jest-mock: 26.6.2 -+ -+ '@jest/fake-timers@26.6.2': -+ dependencies: -+ '@jest/types': 26.6.2 -+ '@sinonjs/fake-timers': 6.0.1 -+ '@types/node': 20.14.11 -+ jest-message-util: 26.6.2 -+ jest-mock: 26.6.2 -+ jest-util: 26.6.2 -+ -+ '@jest/globals@26.6.2': -+ dependencies: -+ '@jest/environment': 26.6.2 -+ '@jest/types': 26.6.2 -+ expect: 26.6.2 -+ -+ '@jest/reporters@26.6.2': -+ dependencies: -+ '@bcoe/v8-coverage': 0.2.3 -+ '@jest/console': 26.6.2 -+ '@jest/test-result': 26.6.2 -+ '@jest/transform': 26.6.2 -+ '@jest/types': 26.6.2 -+ chalk: 4.1.2 -+ collect-v8-coverage: 1.0.1 -+ exit: 0.1.2 -+ glob: 7.1.6 -+ graceful-fs: 4.2.11 -+ istanbul-lib-coverage: 3.0.0 -+ istanbul-lib-instrument: 4.0.3 -+ istanbul-lib-report: 3.0.0 -+ istanbul-lib-source-maps: 4.0.0 -+ istanbul-reports: 3.0.2 -+ jest-haste-map: 26.6.2 -+ jest-resolve: 26.6.2 -+ jest-util: 26.6.2 -+ jest-worker: 26.6.2 -+ slash: 3.0.0 -+ source-map: 0.6.1 -+ string-length: 4.0.1 -+ terminal-link: 2.1.1 -+ v8-to-istanbul: 7.0.0 -+ optionalDependencies: -+ node-notifier: 8.0.1 -+ transitivePeerDependencies: -+ - supports-color -+ -+ '@jest/source-map@26.6.2': -+ dependencies: -+ callsites: 3.1.0 -+ graceful-fs: 4.2.11 -+ source-map: 0.6.1 -+ -+ '@jest/test-result@26.6.2': -+ dependencies: -+ '@jest/console': 26.6.2 -+ '@jest/types': 26.6.2 -+ '@types/istanbul-lib-coverage': 2.0.3 -+ collect-v8-coverage: 1.0.1 -+ -+ '@jest/test-sequencer@26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5))': -+ dependencies: -+ '@jest/test-result': 26.6.2 -+ graceful-fs: 4.2.11 -+ jest-haste-map: 26.6.2 -+ jest-runner: 26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)) -+ jest-runtime: 26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)) -+ transitivePeerDependencies: -+ - bufferutil -+ - canvas -+ - supports-color -+ - ts-node -+ - utf-8-validate -+ -+ '@jest/transform@26.6.2': -+ dependencies: -+ '@babel/core': 7.11.6 -+ '@jest/types': 26.6.2 -+ babel-plugin-istanbul: 6.0.0 -+ chalk: 4.1.2 -+ convert-source-map: 1.7.0 -+ fast-json-stable-stringify: 2.1.0 -+ graceful-fs: 4.2.11 -+ jest-haste-map: 26.6.2 -+ jest-regex-util: 26.0.0 -+ jest-util: 26.6.2 -+ micromatch: 4.0.8 -+ pirates: 4.0.1 -+ slash: 3.0.0 -+ source-map: 0.6.1 -+ write-file-atomic: 3.0.3 -+ transitivePeerDependencies: -+ - supports-color -+ -+ '@jest/types@26.6.2': -+ dependencies: -+ '@types/istanbul-lib-coverage': 2.0.3 -+ '@types/istanbul-reports': 3.0.0 -+ '@types/node': 20.14.11 -+ '@types/yargs': 15.0.8 -+ chalk: 4.1.2 -+ -+ '@jridgewell/resolve-uri@3.1.2': -+ optional: true -+ -+ '@jridgewell/sourcemap-codec@1.5.0': -+ optional: true -+ -+ '@jridgewell/trace-mapping@0.3.9': -+ dependencies: -+ '@jridgewell/resolve-uri': 3.1.2 -+ '@jridgewell/sourcemap-codec': 1.5.0 -+ optional: true -+ -+ '@nodelib/fs.scandir@2.1.3': -+ dependencies: -+ '@nodelib/fs.stat': 2.0.3 -+ run-parallel: 1.1.9 -+ -+ '@nodelib/fs.stat@2.0.3': {} -+ -+ '@nodelib/fs.walk@1.2.4': -+ dependencies: -+ '@nodelib/fs.scandir': 2.1.3 -+ fastq: 1.8.0 -+ -+ '@octokit/auth-token@2.4.5': -+ dependencies: -+ '@octokit/types': 6.16.0 -+ -+ '@octokit/core@3.4.0': -+ dependencies: -+ '@octokit/auth-token': 2.4.5 -+ '@octokit/graphql': 4.6.2 -+ '@octokit/request': 5.4.15 -+ '@octokit/request-error': 2.0.5 -+ '@octokit/types': 6.16.0 -+ before-after-hook: 2.2.1 -+ universal-user-agent: 6.0.0 -+ transitivePeerDependencies: -+ - encoding -+ -+ '@octokit/endpoint@6.0.8': -+ dependencies: -+ '@octokit/types': 5.5.0 -+ is-plain-object: 5.0.0 -+ universal-user-agent: 6.0.0 -+ -+ '@octokit/graphql@4.6.2': -+ dependencies: -+ '@octokit/request': 5.4.15 -+ '@octokit/types': 6.16.0 -+ universal-user-agent: 6.0.0 -+ transitivePeerDependencies: -+ - encoding -+ -+ '@octokit/openapi-types@7.2.1': {} -+ -+ '@octokit/plugin-paginate-rest@2.13.3(@octokit/core@3.4.0)': -+ dependencies: -+ '@octokit/core': 3.4.0 -+ '@octokit/types': 6.16.0 -+ -+ '@octokit/plugin-rest-endpoint-methods@5.3.0(@octokit/core@3.4.0)': -+ dependencies: -+ '@octokit/core': 3.4.0 -+ '@octokit/types': 6.16.0 -+ deprecation: 2.3.1 -+ -+ '@octokit/request-error@2.0.5': -+ dependencies: -+ '@octokit/types': 6.16.0 -+ deprecation: 2.3.1 -+ once: 1.4.0 -+ -+ '@octokit/request@5.4.15': -+ dependencies: -+ '@octokit/endpoint': 6.0.8 -+ '@octokit/request-error': 2.0.5 -+ '@octokit/types': 6.16.0 -+ is-plain-object: 5.0.0 -+ node-fetch: 2.7.0 -+ universal-user-agent: 6.0.0 -+ transitivePeerDependencies: -+ - encoding -+ -+ '@octokit/types@5.5.0': -+ dependencies: -+ '@types/node': 20.14.11 -+ -+ '@octokit/types@6.16.0': -+ dependencies: -+ '@octokit/openapi-types': 7.2.1 -+ -+ '@octokit/webhooks-types@7.5.1': {} -+ -+ '@sinonjs/commons@1.8.1': -+ dependencies: -+ type-detect: 4.0.8 -+ -+ '@sinonjs/fake-timers@6.0.1': -+ dependencies: -+ '@sinonjs/commons': 1.8.1 -+ -+ '@tsconfig/node10@1.0.11': -+ optional: true -+ -+ '@tsconfig/node12@1.0.11': -+ optional: true -+ -+ '@tsconfig/node14@1.0.3': -+ optional: true -+ -+ '@tsconfig/node16@1.0.4': -+ optional: true -+ -+ '@types/babel__core@7.1.10': -+ dependencies: -+ '@babel/parser': 7.11.5 -+ '@babel/types': 7.11.5 -+ '@types/babel__generator': 7.6.2 -+ '@types/babel__template': 7.0.3 -+ '@types/babel__traverse': 7.0.15 -+ -+ '@types/babel__generator@7.6.2': -+ dependencies: -+ '@babel/types': 7.11.5 -+ -+ '@types/babel__template@7.0.3': -+ dependencies: -+ '@babel/parser': 7.11.5 -+ '@babel/types': 7.11.5 -+ -+ '@types/babel__traverse@7.0.15': -+ dependencies: -+ '@babel/types': 7.11.5 -+ -+ '@types/graceful-fs@4.1.3': -+ dependencies: -+ '@types/node': 20.14.11 -+ -+ '@types/istanbul-lib-coverage@2.0.3': {} -+ -+ '@types/istanbul-lib-report@3.0.0': -+ dependencies: -+ '@types/istanbul-lib-coverage': 2.0.3 -+ -+ '@types/istanbul-reports@3.0.0': -+ dependencies: -+ '@types/istanbul-lib-report': 3.0.0 -+ -+ '@types/jest@27.5.0': -+ dependencies: -+ jest-matcher-utils: 27.5.1 -+ pretty-format: 27.5.1 -+ -+ '@types/json-schema@7.0.15': {} -+ -+ '@types/node@20.14.11': -+ dependencies: -+ undici-types: 5.26.5 -+ -+ '@types/normalize-package-data@2.4.0': {} -+ -+ '@types/prettier@2.1.1': {} -+ -+ '@types/stack-utils@2.0.0': {} -+ -+ '@types/yargs-parser@15.0.0': {} -+ -+ '@types/yargs@15.0.8': -+ dependencies: -+ '@types/yargs-parser': 15.0.0 -+ -+ '@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@4.9.5))(eslint@7.32.0)(typescript@4.9.5)': -+ dependencies: -+ '@typescript-eslint/experimental-utils': 4.33.0(eslint@7.32.0)(typescript@4.9.5) -+ '@typescript-eslint/parser': 4.33.0(eslint@7.32.0)(typescript@4.9.5) -+ '@typescript-eslint/scope-manager': 4.33.0 -+ debug: 4.3.6 -+ eslint: 7.32.0 -+ functional-red-black-tree: 1.0.1 -+ ignore: 5.1.8 -+ regexpp: 3.1.0 -+ semver: 7.3.5 -+ tsutils: 3.21.0(typescript@4.9.5) -+ optionalDependencies: -+ typescript: 4.9.5 -+ transitivePeerDependencies: -+ - supports-color -+ -+ '@typescript-eslint/experimental-utils@4.33.0(eslint@7.32.0)(typescript@4.9.5)': -+ dependencies: -+ '@types/json-schema': 7.0.15 -+ '@typescript-eslint/scope-manager': 4.33.0 -+ '@typescript-eslint/types': 4.33.0 -+ '@typescript-eslint/typescript-estree': 4.33.0(typescript@4.9.5) -+ eslint: 7.32.0 -+ eslint-scope: 5.1.1 -+ eslint-utils: 3.0.0(eslint@7.32.0) -+ transitivePeerDependencies: -+ - supports-color -+ - typescript -+ -+ '@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@4.9.5)': -+ dependencies: -+ '@typescript-eslint/scope-manager': 4.33.0 -+ '@typescript-eslint/types': 4.33.0 -+ '@typescript-eslint/typescript-estree': 4.33.0(typescript@4.9.5) -+ debug: 4.3.6 -+ eslint: 7.32.0 -+ optionalDependencies: -+ typescript: 4.9.5 -+ transitivePeerDependencies: -+ - supports-color -+ -+ '@typescript-eslint/scope-manager@4.33.0': -+ dependencies: -+ '@typescript-eslint/types': 4.33.0 -+ '@typescript-eslint/visitor-keys': 4.33.0 -+ -+ '@typescript-eslint/types@4.33.0': {} -+ -+ '@typescript-eslint/typescript-estree@4.33.0(typescript@4.9.5)': -+ dependencies: -+ '@typescript-eslint/types': 4.33.0 -+ '@typescript-eslint/visitor-keys': 4.33.0 -+ debug: 4.3.6 -+ globby: 11.0.3 -+ is-glob: 4.0.3 -+ semver: 7.3.5 -+ tsutils: 3.21.0(typescript@4.9.5) -+ optionalDependencies: -+ typescript: 4.9.5 -+ transitivePeerDependencies: -+ - supports-color -+ -+ '@typescript-eslint/visitor-keys@4.33.0': -+ dependencies: -+ '@typescript-eslint/types': 4.33.0 -+ eslint-visitor-keys: 2.0.0 -+ -+ '@vercel/ncc@0.38.1': {} -+ -+ abab@2.0.5: {} -+ -+ acorn-globals@6.0.0: -+ dependencies: -+ acorn: 7.4.1 -+ acorn-walk: 7.2.0 -+ -+ acorn-jsx@5.3.1(acorn@7.4.1): -+ dependencies: -+ acorn: 7.4.1 -+ -+ acorn-walk@7.2.0: {} -+ -+ acorn-walk@8.3.3: -+ dependencies: -+ acorn: 8.12.1 -+ optional: true -+ -+ acorn@7.4.1: {} -+ -+ acorn@8.12.1: -+ optional: true -+ -+ ajv@6.12.6: -+ dependencies: -+ fast-deep-equal: 3.1.3 -+ fast-json-stable-stringify: 2.1.0 -+ json-schema-traverse: 0.4.1 -+ uri-js: 4.4.0 -+ -+ ajv@8.6.3: -+ dependencies: -+ fast-deep-equal: 3.1.3 -+ json-schema-traverse: 1.0.0 -+ require-from-string: 2.0.2 -+ uri-js: 4.4.0 -+ -+ ansi-colors@4.1.1: {} -+ -+ ansi-escapes@4.3.1: -+ dependencies: -+ type-fest: 0.11.0 -+ -+ ansi-regex@5.0.1: {} -+ -+ ansi-styles@3.2.1: -+ dependencies: -+ color-convert: 1.9.3 -+ -+ ansi-styles@4.3.0: -+ dependencies: -+ color-convert: 2.0.1 -+ -+ ansi-styles@5.2.0: {} -+ -+ anymatch@2.0.0: -+ dependencies: -+ micromatch: 3.1.10 -+ normalize-path: 2.1.1 -+ transitivePeerDependencies: -+ - supports-color -+ -+ anymatch@3.1.3: -+ dependencies: -+ normalize-path: 3.0.0 -+ picomatch: 2.3.1 -+ -+ arg@4.1.3: -+ optional: true -+ -+ argparse@1.0.10: -+ dependencies: -+ sprintf-js: 1.0.3 -+ -+ arr-diff@4.0.0: {} -+ -+ arr-flatten@1.1.0: {} -+ -+ arr-union@3.1.0: {} -+ -+ array-union@2.1.0: {} -+ -+ array-unique@0.3.2: {} -+ -+ asn1@0.2.4: -+ dependencies: -+ safer-buffer: 2.1.2 -+ -+ assert-plus@1.0.0: {} -+ -+ assign-symbols@1.0.0: {} -+ -+ astral-regex@2.0.0: {} -+ -+ asynckit@0.4.0: {} -+ -+ atob@2.1.2: {} -+ -+ aws-sign2@0.7.0: {} -+ -+ aws4@1.10.1: {} -+ -+ babel-jest@26.6.3(@babel/core@7.11.6): -+ dependencies: -+ '@babel/core': 7.11.6 -+ '@jest/transform': 26.6.2 -+ '@jest/types': 26.6.2 -+ '@types/babel__core': 7.1.10 -+ babel-plugin-istanbul: 6.0.0 -+ babel-preset-jest: 26.6.2(@babel/core@7.11.6) -+ chalk: 4.1.2 -+ graceful-fs: 4.2.11 -+ slash: 3.0.0 -+ transitivePeerDependencies: -+ - supports-color -+ -+ babel-plugin-istanbul@6.0.0: -+ dependencies: -+ '@babel/helper-plugin-utils': 7.10.4 -+ '@istanbuljs/load-nyc-config': 1.1.0 -+ '@istanbuljs/schema': 0.1.2 -+ istanbul-lib-instrument: 4.0.3 -+ test-exclude: 6.0.0 -+ transitivePeerDependencies: -+ - supports-color -+ -+ babel-plugin-jest-hoist@26.6.2: -+ dependencies: -+ '@babel/template': 7.10.4 -+ '@babel/types': 7.11.5 -+ '@types/babel__core': 7.1.10 -+ '@types/babel__traverse': 7.0.15 -+ -+ babel-preset-current-node-syntax@1.0.0(@babel/core@7.11.6): -+ dependencies: -+ '@babel/core': 7.11.6 -+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.11.6) -+ '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.11.6) -+ '@babel/plugin-syntax-class-properties': 7.10.4(@babel/core@7.11.6) -+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.11.6) -+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.11.6) -+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.11.6) -+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.11.6) -+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.11.6) -+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.11.6) -+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.11.6) -+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.11.6) -+ '@babel/plugin-syntax-top-level-await': 7.12.1(@babel/core@7.11.6) -+ -+ babel-preset-jest@26.6.2(@babel/core@7.11.6): -+ dependencies: -+ '@babel/core': 7.11.6 -+ babel-plugin-jest-hoist: 26.6.2 -+ babel-preset-current-node-syntax: 1.0.0(@babel/core@7.11.6) -+ -+ balanced-match@1.0.0: {} -+ -+ base@0.11.2: -+ dependencies: -+ cache-base: 1.0.1 -+ class-utils: 0.3.6 -+ component-emitter: 1.3.0 -+ define-property: 1.0.0 -+ isobject: 3.0.1 -+ mixin-deep: 1.3.2 -+ pascalcase: 0.1.1 -+ -+ bcrypt-pbkdf@1.0.2: -+ dependencies: -+ tweetnacl: 0.14.5 -+ -+ before-after-hook@2.2.1: {} -+ -+ brace-expansion@1.1.11: -+ dependencies: -+ balanced-match: 1.0.0 -+ concat-map: 0.0.1 -+ -+ braces@2.3.2: -+ dependencies: -+ arr-flatten: 1.1.0 -+ array-unique: 0.3.2 -+ extend-shallow: 2.0.1 -+ fill-range: 4.0.0 -+ isobject: 3.0.1 -+ repeat-element: 1.1.3 -+ snapdragon: 0.8.2 -+ snapdragon-node: 2.1.1 -+ split-string: 3.1.0 -+ to-regex: 3.0.2 -+ transitivePeerDependencies: -+ - supports-color -+ -+ braces@3.0.3: -+ dependencies: -+ fill-range: 7.1.1 -+ -+ browser-process-hrtime@1.0.0: {} -+ -+ bs-logger@0.2.6: -+ dependencies: -+ fast-json-stable-stringify: 2.1.0 -+ -+ bser@2.1.1: -+ dependencies: -+ node-int64: 0.4.0 -+ -+ buffer-from@1.1.1: {} -+ -+ cache-base@1.0.1: -+ dependencies: -+ collection-visit: 1.0.0 -+ component-emitter: 1.3.0 -+ get-value: 2.0.6 -+ has-value: 1.0.0 -+ isobject: 3.0.1 -+ set-value: 2.0.1 -+ to-object-path: 0.3.0 -+ union-value: 1.0.1 -+ unset-value: 1.0.0 -+ -+ callsites@3.1.0: {} -+ -+ camelcase@5.3.1: {} -+ -+ camelcase@6.0.0: {} -+ -+ capture-exit@2.0.0: -+ dependencies: -+ rsvp: 4.8.5 -+ -+ caseless@0.12.0: {} -+ -+ chalk@2.4.2: -+ dependencies: -+ ansi-styles: 3.2.1 -+ escape-string-regexp: 1.0.5 -+ supports-color: 5.5.0 -+ -+ chalk@4.1.2: -+ dependencies: -+ ansi-styles: 4.3.0 -+ supports-color: 7.2.0 -+ -+ char-regex@1.0.2: {} -+ -+ ci-info@2.0.0: {} -+ -+ cjs-module-lexer@0.6.0: {} -+ -+ class-utils@0.3.6: -+ dependencies: -+ arr-union: 3.1.0 -+ define-property: 0.2.5 -+ isobject: 3.0.1 -+ static-extend: 0.1.2 -+ -+ cliui@6.0.0: -+ dependencies: -+ string-width: 4.2.3 -+ strip-ansi: 6.0.1 -+ wrap-ansi: 6.2.0 -+ -+ cliui@8.0.1: -+ dependencies: -+ string-width: 4.2.3 -+ strip-ansi: 6.0.1 -+ wrap-ansi: 7.0.0 -+ -+ co@4.6.0: {} -+ -+ collect-v8-coverage@1.0.1: {} -+ -+ collection-visit@1.0.0: -+ dependencies: -+ map-visit: 1.0.0 -+ object-visit: 1.0.1 -+ -+ color-convert@1.9.3: -+ dependencies: -+ color-name: 1.1.3 -+ -+ color-convert@2.0.1: -+ dependencies: -+ color-name: 1.1.4 -+ -+ color-name@1.1.3: {} -+ -+ color-name@1.1.4: {} -+ -+ combined-stream@1.0.8: -+ dependencies: -+ delayed-stream: 1.0.0 -+ -+ component-emitter@1.3.0: {} -+ -+ concat-map@0.0.1: {} -+ -+ concurrently@8.2.2: -+ dependencies: -+ chalk: 4.1.2 -+ date-fns: 2.30.0 -+ lodash: 4.17.21 -+ rxjs: 7.8.1 -+ shell-quote: 1.8.1 -+ spawn-command: 0.0.2 -+ supports-color: 8.1.1 -+ tree-kill: 1.2.2 -+ yargs: 17.7.2 -+ -+ convert-source-map@1.7.0: -+ dependencies: -+ safe-buffer: 5.1.2 -+ -+ copy-descriptor@0.1.1: {} -+ -+ core-util-is@1.0.2: {} -+ -+ create-require@1.1.1: -+ optional: true -+ -+ cross-spawn@6.0.5: -+ dependencies: -+ nice-try: 1.0.5 -+ path-key: 2.0.1 -+ semver: 5.7.1 -+ shebang-command: 1.2.0 -+ which: 1.3.1 -+ -+ cross-spawn@7.0.3: -+ dependencies: -+ path-key: 3.1.1 -+ shebang-command: 2.0.0 -+ which: 2.0.2 -+ -+ cssom@0.3.8: {} -+ -+ cssom@0.4.4: {} -+ -+ cssstyle@2.3.0: -+ dependencies: -+ cssom: 0.3.8 -+ -+ dashdash@1.14.1: -+ dependencies: -+ assert-plus: 1.0.0 -+ -+ data-urls@2.0.0: -+ dependencies: -+ abab: 2.0.5 -+ whatwg-mimetype: 2.3.0 -+ whatwg-url: 8.4.0 -+ -+ date-fns@2.30.0: -+ dependencies: -+ '@babel/runtime': 7.23.6 -+ -+ debug@2.6.9: -+ dependencies: -+ ms: 2.0.0 -+ -+ debug@4.3.6: -+ dependencies: -+ ms: 2.1.2 -+ -+ decamelize@1.2.0: {} -+ -+ decimal.js@10.2.1: {} -+ -+ decode-uri-component@0.2.0: {} -+ -+ deep-is@0.1.3: {} -+ -+ deepmerge@4.2.2: {} -+ -+ define-property@0.2.5: -+ dependencies: -+ is-descriptor: 0.1.6 -+ -+ define-property@1.0.0: -+ dependencies: -+ is-descriptor: 1.0.2 -+ -+ define-property@2.0.2: -+ dependencies: -+ is-descriptor: 1.0.2 -+ isobject: 3.0.1 -+ -+ delayed-stream@1.0.0: {} -+ -+ deprecation@2.3.1: {} -+ -+ detect-newline@3.1.0: {} -+ -+ diff-sequences@26.6.2: {} -+ -+ diff-sequences@27.5.1: {} -+ -+ diff@4.0.2: -+ optional: true -+ -+ dir-glob@3.0.1: -+ dependencies: -+ path-type: 4.0.0 -+ -+ doctrine@3.0.0: -+ dependencies: -+ esutils: 2.0.3 -+ -+ domexception@2.0.1: -+ dependencies: -+ webidl-conversions: 5.0.0 -+ -+ ecc-jsbn@0.1.2: -+ dependencies: -+ jsbn: 0.1.1 -+ safer-buffer: 2.1.2 -+ -+ emittery@0.7.1: {} -+ -+ emoji-regex@8.0.0: {} -+ -+ end-of-stream@1.4.4: -+ dependencies: -+ once: 1.4.0 -+ -+ enquirer@2.3.6: -+ dependencies: -+ ansi-colors: 4.1.1 -+ -+ error-ex@1.3.2: -+ dependencies: -+ is-arrayish: 0.2.1 -+ -+ escalade@3.1.1: {} -+ -+ escape-string-regexp@1.0.5: {} -+ -+ escape-string-regexp@2.0.0: {} -+ -+ escape-string-regexp@4.0.0: {} -+ -+ escodegen@1.14.3: -+ dependencies: -+ esprima: 4.0.1 -+ estraverse: 4.3.0 -+ esutils: 2.0.3 -+ optionator: 0.8.3 -+ optionalDependencies: -+ source-map: 0.6.1 -+ -+ eslint-scope@5.1.1: -+ dependencies: -+ esrecurse: 4.3.0 -+ estraverse: 4.3.0 -+ -+ eslint-utils@2.1.0: -+ dependencies: -+ eslint-visitor-keys: 1.3.0 -+ -+ eslint-utils@3.0.0(eslint@7.32.0): -+ dependencies: -+ eslint: 7.32.0 -+ eslint-visitor-keys: 2.0.0 -+ -+ eslint-visitor-keys@1.3.0: {} -+ -+ eslint-visitor-keys@2.0.0: {} -+ -+ eslint@7.32.0: -+ dependencies: -+ '@babel/code-frame': 7.12.11 -+ '@eslint/eslintrc': 0.4.3 -+ '@humanwhocodes/config-array': 0.5.0 -+ ajv: 6.12.6 -+ chalk: 4.1.2 -+ cross-spawn: 7.0.3 -+ debug: 4.3.6 -+ doctrine: 3.0.0 -+ enquirer: 2.3.6 -+ escape-string-regexp: 4.0.0 -+ eslint-scope: 5.1.1 -+ eslint-utils: 2.1.0 -+ eslint-visitor-keys: 2.0.0 -+ espree: 7.3.1 -+ esquery: 1.4.0 -+ esutils: 2.0.3 -+ fast-deep-equal: 3.1.3 -+ file-entry-cache: 6.0.1 -+ functional-red-black-tree: 1.0.1 -+ glob-parent: 5.1.2 -+ globals: 13.9.0 -+ ignore: 4.0.6 -+ import-fresh: 3.2.1 -+ imurmurhash: 0.1.4 -+ is-glob: 4.0.3 -+ js-yaml: 3.14.0 -+ json-stable-stringify-without-jsonify: 1.0.1 -+ levn: 0.4.1 -+ lodash.merge: 4.6.2 -+ minimatch: 3.0.4 -+ natural-compare: 1.4.0 -+ optionator: 0.9.1 -+ progress: 2.0.3 -+ regexpp: 3.1.0 -+ semver: 7.3.5 -+ strip-ansi: 6.0.1 -+ strip-json-comments: 3.1.1 -+ table: 6.7.1 -+ text-table: 0.2.0 -+ v8-compile-cache: 2.1.1 -+ transitivePeerDependencies: -+ - supports-color -+ -+ espree@7.3.1: -+ dependencies: -+ acorn: 7.4.1 -+ acorn-jsx: 5.3.1(acorn@7.4.1) -+ eslint-visitor-keys: 1.3.0 -+ -+ esprima@4.0.1: {} -+ -+ esquery@1.4.0: -+ dependencies: -+ estraverse: 5.2.0 -+ -+ esrecurse@4.3.0: -+ dependencies: -+ estraverse: 5.2.0 -+ -+ estraverse@4.3.0: {} -+ -+ estraverse@5.2.0: {} -+ -+ esutils@2.0.3: {} -+ -+ exec-sh@0.3.4: {} -+ -+ execa@1.0.0: -+ dependencies: -+ cross-spawn: 6.0.5 -+ get-stream: 4.1.0 -+ is-stream: 1.1.0 -+ npm-run-path: 2.0.2 -+ p-finally: 1.0.0 -+ signal-exit: 3.0.3 -+ strip-eof: 1.0.0 -+ -+ execa@4.0.3: -+ dependencies: -+ cross-spawn: 7.0.3 -+ get-stream: 5.2.0 -+ human-signals: 1.1.1 -+ is-stream: 2.0.0 -+ merge-stream: 2.0.0 -+ npm-run-path: 4.0.1 -+ onetime: 5.1.2 -+ signal-exit: 3.0.3 -+ strip-final-newline: 2.0.0 -+ -+ exit@0.1.2: {} -+ -+ expand-brackets@2.1.4: -+ dependencies: -+ debug: 2.6.9 -+ define-property: 0.2.5 -+ extend-shallow: 2.0.1 -+ posix-character-classes: 0.1.1 -+ regex-not: 1.0.2 -+ snapdragon: 0.8.2 -+ to-regex: 3.0.2 -+ transitivePeerDependencies: -+ - supports-color -+ -+ expect@26.6.2: -+ dependencies: -+ '@jest/types': 26.6.2 -+ ansi-styles: 4.3.0 -+ jest-get-type: 26.3.0 -+ jest-matcher-utils: 26.6.2 -+ jest-message-util: 26.6.2 -+ jest-regex-util: 26.0.0 -+ -+ extend-shallow@2.0.1: -+ dependencies: -+ is-extendable: 0.1.1 -+ -+ extend-shallow@3.0.2: -+ dependencies: -+ assign-symbols: 1.0.0 -+ is-extendable: 1.0.1 -+ -+ extend@3.0.2: {} -+ -+ extglob@2.0.4: -+ dependencies: -+ array-unique: 0.3.2 -+ define-property: 1.0.0 -+ expand-brackets: 2.1.4 -+ extend-shallow: 2.0.1 -+ fragment-cache: 0.2.1 -+ regex-not: 1.0.2 -+ snapdragon: 0.8.2 -+ to-regex: 3.0.2 -+ transitivePeerDependencies: -+ - supports-color -+ -+ extsprintf@1.3.0: {} -+ -+ extsprintf@1.4.0: {} -+ -+ fast-deep-equal@3.1.3: {} -+ -+ fast-glob@3.3.2: -+ dependencies: -+ '@nodelib/fs.stat': 2.0.3 -+ '@nodelib/fs.walk': 1.2.4 -+ glob-parent: 5.1.2 -+ merge2: 1.4.1 -+ micromatch: 4.0.8 -+ -+ fast-json-stable-stringify@2.1.0: {} -+ -+ fast-levenshtein@2.0.6: {} -+ -+ fastq@1.8.0: -+ dependencies: -+ reusify: 1.0.4 -+ -+ fb-watchman@2.0.1: -+ dependencies: -+ bser: 2.1.1 -+ -+ file-entry-cache@6.0.1: -+ dependencies: -+ flat-cache: 3.0.4 -+ -+ fill-range@4.0.0: -+ dependencies: -+ extend-shallow: 2.0.1 -+ is-number: 3.0.0 -+ repeat-string: 1.6.1 -+ to-regex-range: 2.1.1 -+ -+ fill-range@7.1.1: -+ dependencies: -+ to-regex-range: 5.0.1 -+ -+ find-up@4.1.0: -+ dependencies: -+ locate-path: 5.0.0 -+ path-exists: 4.0.0 -+ -+ flat-cache@3.0.4: -+ dependencies: -+ flatted: 3.1.0 -+ rimraf: 3.0.2 -+ -+ flatted@3.1.0: {} -+ -+ for-in@1.0.2: {} -+ -+ forever-agent@0.6.1: {} -+ -+ form-data@2.3.3: -+ dependencies: -+ asynckit: 0.4.0 -+ combined-stream: 1.0.8 -+ mime-types: 2.1.27 -+ -+ fragment-cache@0.2.1: -+ dependencies: -+ map-cache: 0.2.2 -+ -+ fs.realpath@1.0.0: {} -+ -+ fsevents@2.1.3: -+ optional: true -+ -+ function-bind@1.1.1: {} -+ -+ functional-red-black-tree@1.0.1: {} -+ -+ gensync@1.0.0-beta.1: {} -+ -+ get-caller-file@2.0.5: {} -+ -+ get-package-type@0.1.0: {} -+ -+ get-stream@4.1.0: -+ dependencies: -+ pump: 3.0.0 -+ -+ get-stream@5.2.0: -+ dependencies: -+ pump: 3.0.0 -+ -+ get-value@2.0.6: {} -+ -+ getpass@0.1.7: -+ dependencies: -+ assert-plus: 1.0.0 -+ -+ glob-parent@5.1.2: -+ dependencies: -+ is-glob: 4.0.3 -+ -+ glob@7.1.6: -+ dependencies: -+ fs.realpath: 1.0.0 -+ inflight: 1.0.6 -+ inherits: 2.0.4 -+ minimatch: 3.0.4 -+ once: 1.4.0 -+ path-is-absolute: 1.0.1 -+ -+ globals@11.12.0: {} -+ -+ globals@13.9.0: -+ dependencies: -+ type-fest: 0.20.2 -+ -+ globby@11.0.3: -+ dependencies: -+ array-union: 2.1.0 -+ dir-glob: 3.0.1 -+ fast-glob: 3.3.2 -+ ignore: 5.1.8 -+ merge2: 1.4.1 -+ slash: 3.0.0 -+ -+ graceful-fs@4.2.11: {} -+ -+ growly@1.3.0: -+ optional: true -+ -+ har-schema@2.0.0: {} -+ -+ har-validator@5.1.5: -+ dependencies: -+ ajv: 6.12.6 -+ har-schema: 2.0.0 -+ -+ has-flag@3.0.0: {} -+ -+ has-flag@4.0.0: {} -+ -+ has-value@0.3.1: -+ dependencies: -+ get-value: 2.0.6 -+ has-values: 0.1.4 -+ isobject: 2.1.0 -+ -+ has-value@1.0.0: -+ dependencies: -+ get-value: 2.0.6 -+ has-values: 1.0.0 -+ isobject: 3.0.1 -+ -+ has-values@0.1.4: {} -+ -+ has-values@1.0.0: -+ dependencies: -+ is-number: 3.0.0 -+ kind-of: 4.0.0 -+ -+ has@1.0.3: -+ dependencies: -+ function-bind: 1.1.1 -+ -+ hosted-git-info@2.8.8: {} -+ -+ html-encoding-sniffer@2.0.1: -+ dependencies: -+ whatwg-encoding: 1.0.5 -+ -+ html-escaper@2.0.2: {} -+ -+ http-signature@1.2.0: -+ dependencies: -+ assert-plus: 1.0.0 -+ jsprim: 1.4.1 -+ sshpk: 1.16.1 -+ -+ human-signals@1.1.1: {} -+ -+ iconv-lite@0.4.24: -+ dependencies: -+ safer-buffer: 2.1.2 -+ -+ ignore@4.0.6: {} -+ -+ ignore@5.1.8: {} -+ -+ import-fresh@3.2.1: -+ dependencies: -+ parent-module: 1.0.1 -+ resolve-from: 4.0.0 -+ -+ import-local@3.0.2: -+ dependencies: -+ pkg-dir: 4.2.0 -+ resolve-cwd: 3.0.0 -+ -+ imurmurhash@0.1.4: {} -+ -+ inflight@1.0.6: -+ dependencies: -+ once: 1.4.0 -+ wrappy: 1.0.2 -+ -+ inherits@2.0.4: {} -+ -+ ip-regex@2.1.0: {} -+ -+ is-accessor-descriptor@0.1.6: -+ dependencies: -+ kind-of: 3.2.2 -+ -+ is-accessor-descriptor@1.0.0: -+ dependencies: -+ kind-of: 6.0.3 -+ -+ is-arrayish@0.2.1: {} -+ -+ is-buffer@1.1.6: {} -+ -+ is-ci@2.0.0: -+ dependencies: -+ ci-info: 2.0.0 -+ -+ is-core-module@2.0.0: -+ dependencies: -+ has: 1.0.3 -+ -+ is-data-descriptor@0.1.4: -+ dependencies: -+ kind-of: 3.2.2 -+ -+ is-data-descriptor@1.0.0: -+ dependencies: -+ kind-of: 6.0.3 -+ -+ is-descriptor@0.1.6: -+ dependencies: -+ is-accessor-descriptor: 0.1.6 -+ is-data-descriptor: 0.1.4 -+ kind-of: 5.1.0 -+ -+ is-descriptor@1.0.2: -+ dependencies: -+ is-accessor-descriptor: 1.0.0 -+ is-data-descriptor: 1.0.0 -+ kind-of: 6.0.3 -+ -+ is-docker@2.1.1: -+ optional: true -+ -+ is-extendable@0.1.1: {} -+ -+ is-extendable@1.0.1: -+ dependencies: -+ is-plain-object: 2.0.4 -+ -+ is-extglob@2.1.1: {} -+ -+ is-fullwidth-code-point@3.0.0: {} -+ -+ is-generator-fn@2.1.0: {} -+ -+ is-glob@4.0.3: -+ dependencies: -+ is-extglob: 2.1.1 -+ -+ is-number@3.0.0: -+ dependencies: -+ kind-of: 3.2.2 -+ -+ is-number@7.0.0: {} -+ -+ is-plain-object@2.0.4: -+ dependencies: -+ isobject: 3.0.1 -+ -+ is-plain-object@5.0.0: {} -+ -+ is-potential-custom-element-name@1.0.0: {} -+ -+ is-stream@1.1.0: {} -+ -+ is-stream@2.0.0: {} -+ -+ is-typedarray@1.0.0: {} -+ -+ is-windows@1.0.2: {} -+ -+ is-wsl@2.2.0: -+ dependencies: -+ is-docker: 2.1.1 -+ optional: true -+ -+ isarray@1.0.0: {} -+ -+ isexe@2.0.0: {} -+ -+ isobject@2.1.0: -+ dependencies: -+ isarray: 1.0.0 -+ -+ isobject@3.0.1: {} -+ -+ isstream@0.1.2: {} -+ -+ istanbul-lib-coverage@3.0.0: {} -+ -+ istanbul-lib-instrument@4.0.3: -+ dependencies: -+ '@babel/core': 7.11.6 -+ '@istanbuljs/schema': 0.1.2 -+ istanbul-lib-coverage: 3.0.0 -+ semver: 6.3.1 -+ transitivePeerDependencies: -+ - supports-color -+ -+ istanbul-lib-report@3.0.0: -+ dependencies: -+ istanbul-lib-coverage: 3.0.0 -+ make-dir: 3.1.0 -+ supports-color: 7.2.0 -+ -+ istanbul-lib-source-maps@4.0.0: -+ dependencies: -+ debug: 4.3.6 -+ istanbul-lib-coverage: 3.0.0 -+ source-map: 0.6.1 -+ transitivePeerDependencies: -+ - supports-color -+ -+ istanbul-reports@3.0.2: -+ dependencies: -+ html-escaper: 2.0.2 -+ istanbul-lib-report: 3.0.0 -+ -+ jest-changed-files@26.6.2: -+ dependencies: -+ '@jest/types': 26.6.2 -+ execa: 4.0.3 -+ throat: 5.0.0 -+ -+ jest-cli@26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)): -+ dependencies: -+ '@jest/core': 26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)) -+ '@jest/test-result': 26.6.2 -+ '@jest/types': 26.6.2 -+ chalk: 4.1.2 -+ exit: 0.1.2 -+ graceful-fs: 4.2.11 -+ import-local: 3.0.2 -+ is-ci: 2.0.0 -+ jest-config: 26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)) -+ jest-util: 26.6.2 -+ jest-validate: 26.6.2 -+ prompts: 2.3.2 -+ yargs: 15.4.1 -+ transitivePeerDependencies: -+ - bufferutil -+ - canvas -+ - supports-color -+ - ts-node -+ - utf-8-validate -+ -+ jest-config@26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)): -+ dependencies: -+ '@babel/core': 7.11.6 -+ '@jest/test-sequencer': 26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)) -+ '@jest/types': 26.6.2 -+ babel-jest: 26.6.3(@babel/core@7.11.6) -+ chalk: 4.1.2 -+ deepmerge: 4.2.2 -+ glob: 7.1.6 -+ graceful-fs: 4.2.11 -+ jest-environment-jsdom: 26.6.2 -+ jest-environment-node: 26.6.2 -+ jest-get-type: 26.3.0 -+ jest-jasmine2: 26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)) -+ jest-regex-util: 26.0.0 -+ jest-resolve: 26.6.2 -+ jest-util: 26.6.2 -+ jest-validate: 26.6.2 -+ micromatch: 4.0.8 -+ pretty-format: 26.6.2 -+ optionalDependencies: -+ ts-node: 10.9.1(@types/node@20.14.11)(typescript@4.9.5) -+ transitivePeerDependencies: -+ - bufferutil -+ - canvas -+ - supports-color -+ - utf-8-validate -+ -+ jest-diff@26.6.2: -+ dependencies: -+ chalk: 4.1.2 -+ diff-sequences: 26.6.2 -+ jest-get-type: 26.3.0 -+ pretty-format: 26.6.2 -+ -+ jest-diff@27.5.1: -+ dependencies: -+ chalk: 4.1.2 -+ diff-sequences: 27.5.1 -+ jest-get-type: 27.5.1 -+ pretty-format: 27.5.1 -+ -+ jest-docblock@26.0.0: -+ dependencies: -+ detect-newline: 3.1.0 -+ -+ jest-each@26.6.2: -+ dependencies: -+ '@jest/types': 26.6.2 -+ chalk: 4.1.2 -+ jest-get-type: 26.3.0 -+ jest-util: 26.6.2 -+ pretty-format: 26.6.2 -+ -+ jest-environment-jsdom@26.6.2: -+ dependencies: -+ '@jest/environment': 26.6.2 -+ '@jest/fake-timers': 26.6.2 -+ '@jest/types': 26.6.2 -+ '@types/node': 20.14.11 -+ jest-mock: 26.6.2 -+ jest-util: 26.6.2 -+ jsdom: 16.4.0 -+ transitivePeerDependencies: -+ - bufferutil -+ - canvas -+ - utf-8-validate -+ -+ jest-environment-node@26.6.2: -+ dependencies: -+ '@jest/environment': 26.6.2 -+ '@jest/fake-timers': 26.6.2 -+ '@jest/types': 26.6.2 -+ '@types/node': 20.14.11 -+ jest-mock: 26.6.2 -+ jest-util: 26.6.2 -+ -+ jest-get-type@26.3.0: {} -+ -+ jest-get-type@27.5.1: {} -+ -+ jest-haste-map@26.6.2: -+ dependencies: -+ '@jest/types': 26.6.2 -+ '@types/graceful-fs': 4.1.3 -+ '@types/node': 20.14.11 -+ anymatch: 3.1.3 -+ fb-watchman: 2.0.1 -+ graceful-fs: 4.2.11 -+ jest-regex-util: 26.0.0 -+ jest-serializer: 26.6.2 -+ jest-util: 26.6.2 -+ jest-worker: 26.6.2 -+ micromatch: 4.0.8 -+ sane: 4.1.0 -+ walker: 1.0.7 -+ optionalDependencies: -+ fsevents: 2.1.3 -+ transitivePeerDependencies: -+ - supports-color -+ -+ jest-jasmine2@26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)): -+ dependencies: -+ '@babel/traverse': 7.11.5 -+ '@jest/environment': 26.6.2 -+ '@jest/source-map': 26.6.2 -+ '@jest/test-result': 26.6.2 -+ '@jest/types': 26.6.2 -+ '@types/node': 20.14.11 -+ chalk: 4.1.2 -+ co: 4.6.0 -+ expect: 26.6.2 -+ is-generator-fn: 2.1.0 -+ jest-each: 26.6.2 -+ jest-matcher-utils: 26.6.2 -+ jest-message-util: 26.6.2 -+ jest-runtime: 26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)) -+ jest-snapshot: 26.6.2 -+ jest-util: 26.6.2 -+ pretty-format: 26.6.2 -+ throat: 5.0.0 -+ transitivePeerDependencies: -+ - bufferutil -+ - canvas -+ - supports-color -+ - ts-node -+ - utf-8-validate -+ -+ jest-leak-detector@26.6.2: -+ dependencies: -+ jest-get-type: 26.3.0 -+ pretty-format: 26.6.2 -+ -+ jest-matcher-utils@26.6.2: -+ dependencies: -+ chalk: 4.1.2 -+ jest-diff: 26.6.2 -+ jest-get-type: 26.3.0 -+ pretty-format: 26.6.2 -+ -+ jest-matcher-utils@27.5.1: -+ dependencies: -+ chalk: 4.1.2 -+ jest-diff: 27.5.1 -+ jest-get-type: 27.5.1 -+ pretty-format: 27.5.1 -+ -+ jest-message-util@26.6.2: -+ dependencies: -+ '@babel/code-frame': 7.12.11 -+ '@jest/types': 26.6.2 -+ '@types/stack-utils': 2.0.0 -+ chalk: 4.1.2 -+ graceful-fs: 4.2.11 -+ micromatch: 4.0.8 -+ pretty-format: 26.6.2 -+ slash: 3.0.0 -+ stack-utils: 2.0.2 -+ -+ jest-mock@26.6.2: -+ dependencies: -+ '@jest/types': 26.6.2 -+ '@types/node': 20.14.11 -+ -+ jest-pnp-resolver@1.2.2(jest-resolve@26.6.2): -+ optionalDependencies: -+ jest-resolve: 26.6.2 -+ -+ jest-regex-util@26.0.0: {} -+ -+ jest-resolve-dependencies@26.6.3: -+ dependencies: -+ '@jest/types': 26.6.2 -+ jest-regex-util: 26.0.0 -+ jest-snapshot: 26.6.2 -+ transitivePeerDependencies: -+ - supports-color -+ -+ jest-resolve@26.6.2: -+ dependencies: -+ '@jest/types': 26.6.2 -+ chalk: 4.1.2 -+ graceful-fs: 4.2.11 -+ jest-pnp-resolver: 1.2.2(jest-resolve@26.6.2) -+ jest-util: 26.6.2 -+ read-pkg-up: 7.0.1 -+ resolve: 1.18.1 -+ slash: 3.0.0 -+ -+ jest-runner@26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)): -+ dependencies: -+ '@jest/console': 26.6.2 -+ '@jest/environment': 26.6.2 -+ '@jest/test-result': 26.6.2 -+ '@jest/types': 26.6.2 -+ '@types/node': 20.14.11 -+ chalk: 4.1.2 -+ emittery: 0.7.1 -+ exit: 0.1.2 -+ graceful-fs: 4.2.11 -+ jest-config: 26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)) -+ jest-docblock: 26.0.0 -+ jest-haste-map: 26.6.2 -+ jest-leak-detector: 26.6.2 -+ jest-message-util: 26.6.2 -+ jest-resolve: 26.6.2 -+ jest-runtime: 26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)) -+ jest-util: 26.6.2 -+ jest-worker: 26.6.2 -+ source-map-support: 0.5.19 -+ throat: 5.0.0 -+ transitivePeerDependencies: -+ - bufferutil -+ - canvas -+ - supports-color -+ - ts-node -+ - utf-8-validate -+ -+ jest-runtime@26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)): -+ dependencies: -+ '@jest/console': 26.6.2 -+ '@jest/environment': 26.6.2 -+ '@jest/fake-timers': 26.6.2 -+ '@jest/globals': 26.6.2 -+ '@jest/source-map': 26.6.2 -+ '@jest/test-result': 26.6.2 -+ '@jest/transform': 26.6.2 -+ '@jest/types': 26.6.2 -+ '@types/yargs': 15.0.8 -+ chalk: 4.1.2 -+ cjs-module-lexer: 0.6.0 -+ collect-v8-coverage: 1.0.1 -+ exit: 0.1.2 -+ glob: 7.1.6 -+ graceful-fs: 4.2.11 -+ jest-config: 26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)) -+ jest-haste-map: 26.6.2 -+ jest-message-util: 26.6.2 -+ jest-mock: 26.6.2 -+ jest-regex-util: 26.0.0 -+ jest-resolve: 26.6.2 -+ jest-snapshot: 26.6.2 -+ jest-util: 26.6.2 -+ jest-validate: 26.6.2 -+ slash: 3.0.0 -+ strip-bom: 4.0.0 -+ yargs: 15.4.1 -+ transitivePeerDependencies: -+ - bufferutil -+ - canvas -+ - supports-color -+ - ts-node -+ - utf-8-validate -+ -+ jest-serializer@26.6.2: -+ dependencies: -+ '@types/node': 20.14.11 -+ graceful-fs: 4.2.11 -+ -+ jest-snapshot@26.6.2: -+ dependencies: -+ '@babel/types': 7.11.5 -+ '@jest/types': 26.6.2 -+ '@types/babel__traverse': 7.0.15 -+ '@types/prettier': 2.1.1 -+ chalk: 4.1.2 -+ expect: 26.6.2 -+ graceful-fs: 4.2.11 -+ jest-diff: 26.6.2 -+ jest-get-type: 26.3.0 -+ jest-haste-map: 26.6.2 -+ jest-matcher-utils: 26.6.2 -+ jest-message-util: 26.6.2 -+ jest-resolve: 26.6.2 -+ natural-compare: 1.4.0 -+ pretty-format: 26.6.2 -+ semver: 7.3.5 -+ transitivePeerDependencies: -+ - supports-color -+ -+ jest-util@26.6.2: -+ dependencies: -+ '@jest/types': 26.6.2 -+ '@types/node': 20.14.11 -+ chalk: 4.1.2 -+ graceful-fs: 4.2.11 -+ is-ci: 2.0.0 -+ micromatch: 4.0.8 -+ -+ jest-validate@26.6.2: -+ dependencies: -+ '@jest/types': 26.6.2 -+ camelcase: 6.0.0 -+ chalk: 4.1.2 -+ jest-get-type: 26.3.0 -+ leven: 3.1.0 -+ pretty-format: 26.6.2 -+ -+ jest-watcher@26.6.2: -+ dependencies: -+ '@jest/test-result': 26.6.2 -+ '@jest/types': 26.6.2 -+ '@types/node': 20.14.11 -+ ansi-escapes: 4.3.1 -+ chalk: 4.1.2 -+ jest-util: 26.6.2 -+ string-length: 4.0.1 -+ -+ jest-worker@26.6.2: -+ dependencies: -+ '@types/node': 20.14.11 -+ merge-stream: 2.0.0 -+ supports-color: 7.2.0 -+ -+ jest@26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)): -+ dependencies: -+ '@jest/core': 26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)) -+ import-local: 3.0.2 -+ jest-cli: 26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)) -+ transitivePeerDependencies: -+ - bufferutil -+ - canvas -+ - supports-color -+ - ts-node -+ - utf-8-validate -+ -+ js-tokens@4.0.0: {} -+ -+ js-yaml@3.14.0: -+ dependencies: -+ argparse: 1.0.10 -+ esprima: 4.0.1 -+ -+ jsbn@0.1.1: {} -+ -+ jsdom@16.4.0: -+ dependencies: -+ abab: 2.0.5 -+ acorn: 7.4.1 -+ acorn-globals: 6.0.0 -+ cssom: 0.4.4 -+ cssstyle: 2.3.0 -+ data-urls: 2.0.0 -+ decimal.js: 10.2.1 -+ domexception: 2.0.1 -+ escodegen: 1.14.3 -+ html-encoding-sniffer: 2.0.1 -+ is-potential-custom-element-name: 1.0.0 -+ nwsapi: 2.2.0 -+ parse5: 5.1.1 -+ request: 2.88.2 -+ request-promise-native: 1.0.9(request@2.88.2) -+ saxes: 5.0.1 -+ symbol-tree: 3.2.4 -+ tough-cookie: 3.0.1 -+ w3c-hr-time: 1.0.2 -+ w3c-xmlserializer: 2.0.0 -+ webidl-conversions: 6.1.0 -+ whatwg-encoding: 1.0.5 -+ whatwg-mimetype: 2.3.0 -+ whatwg-url: 8.4.0 -+ ws: 7.3.1 -+ xml-name-validator: 3.0.0 -+ transitivePeerDependencies: -+ - bufferutil -+ - utf-8-validate -+ -+ jsesc@2.5.2: {} -+ -+ json-parse-even-better-errors@2.3.1: {} -+ -+ json-schema-traverse@0.4.1: {} -+ -+ json-schema-traverse@1.0.0: {} -+ -+ json-schema@0.2.3: {} -+ -+ json-stable-stringify-without-jsonify@1.0.1: {} -+ -+ json-stringify-safe@5.0.1: {} -+ -+ json5@2.1.3: -+ dependencies: -+ minimist: 1.2.8 -+ -+ jsprim@1.4.1: -+ dependencies: -+ assert-plus: 1.0.0 -+ extsprintf: 1.3.0 -+ json-schema: 0.2.3 -+ verror: 1.10.0 -+ -+ kind-of@3.2.2: -+ dependencies: -+ is-buffer: 1.1.6 -+ -+ kind-of@4.0.0: -+ dependencies: -+ is-buffer: 1.1.6 -+ -+ kind-of@5.1.0: {} -+ -+ kind-of@6.0.3: {} -+ -+ kleur@3.0.3: {} -+ -+ leven@3.1.0: {} -+ -+ levn@0.3.0: -+ dependencies: -+ prelude-ls: 1.1.2 -+ type-check: 0.3.2 -+ -+ levn@0.4.1: -+ dependencies: -+ prelude-ls: 1.2.1 -+ type-check: 0.4.0 -+ -+ lines-and-columns@1.1.6: {} -+ -+ locate-path@5.0.0: -+ dependencies: -+ p-locate: 4.1.0 -+ -+ lodash.clonedeep@4.5.0: {} -+ -+ lodash.merge@4.6.2: {} -+ -+ lodash.sortby@4.7.0: {} -+ -+ lodash.truncate@4.4.2: {} -+ -+ lodash@4.17.21: {} -+ -+ lru-cache@6.0.0: -+ dependencies: -+ yallist: 4.0.0 -+ -+ make-dir@3.1.0: -+ dependencies: -+ semver: 6.3.1 -+ -+ make-error@1.3.6: {} -+ -+ makeerror@1.0.11: -+ dependencies: -+ tmpl: 1.0.4 -+ -+ map-cache@0.2.2: {} -+ -+ map-visit@1.0.0: -+ dependencies: -+ object-visit: 1.0.1 -+ -+ merge-stream@2.0.0: {} -+ -+ merge2@1.4.1: {} -+ -+ micromatch@3.1.10: -+ dependencies: -+ arr-diff: 4.0.0 -+ array-unique: 0.3.2 -+ braces: 2.3.2 -+ define-property: 2.0.2 -+ extend-shallow: 3.0.2 -+ extglob: 2.0.4 -+ fragment-cache: 0.2.1 -+ kind-of: 6.0.3 -+ nanomatch: 1.2.13 -+ object.pick: 1.3.0 -+ regex-not: 1.0.2 -+ snapdragon: 0.8.2 -+ to-regex: 3.0.2 -+ transitivePeerDependencies: -+ - supports-color -+ -+ micromatch@4.0.8: -+ dependencies: -+ braces: 3.0.3 -+ picomatch: 2.3.1 -+ -+ mime-db@1.44.0: {} -+ -+ mime-types@2.1.27: -+ dependencies: -+ mime-db: 1.44.0 -+ -+ mimic-fn@2.1.0: {} -+ -+ minimatch@3.0.4: -+ dependencies: -+ brace-expansion: 1.1.11 -+ -+ minimist@1.2.8: {} -+ -+ mixin-deep@1.3.2: -+ dependencies: -+ for-in: 1.0.2 -+ is-extendable: 1.0.1 -+ -+ mkdirp@1.0.4: {} -+ -+ ms@2.0.0: {} -+ -+ ms@2.1.2: {} -+ -+ nanomatch@1.2.13: -+ dependencies: -+ arr-diff: 4.0.0 -+ array-unique: 0.3.2 -+ define-property: 2.0.2 -+ extend-shallow: 3.0.2 -+ fragment-cache: 0.2.1 -+ is-windows: 1.0.2 -+ kind-of: 6.0.3 -+ object.pick: 1.3.0 -+ regex-not: 1.0.2 -+ snapdragon: 0.8.2 -+ to-regex: 3.0.2 -+ transitivePeerDependencies: -+ - supports-color -+ -+ natural-compare@1.4.0: {} -+ -+ nice-try@1.0.5: {} -+ -+ node-fetch@2.7.0: -+ dependencies: -+ whatwg-url: 5.0.0 -+ -+ node-int64@0.4.0: {} -+ -+ node-modules-regexp@1.0.0: {} -+ -+ node-notifier@8.0.1: -+ dependencies: -+ growly: 1.3.0 -+ is-wsl: 2.2.0 -+ semver: 7.3.5 -+ shellwords: 0.1.1 -+ uuid: 8.3.2 -+ which: 2.0.2 -+ optional: true -+ -+ normalize-package-data@2.5.0: -+ dependencies: -+ hosted-git-info: 2.8.8 -+ resolve: 1.18.1 -+ semver: 5.7.1 -+ validate-npm-package-license: 3.0.4 -+ -+ normalize-path@2.1.1: -+ dependencies: -+ remove-trailing-separator: 1.1.0 -+ -+ normalize-path@3.0.0: {} -+ -+ npm-run-path@2.0.2: -+ dependencies: -+ path-key: 2.0.1 -+ -+ npm-run-path@4.0.1: -+ dependencies: -+ path-key: 3.1.1 -+ -+ nwsapi@2.2.0: {} -+ -+ oauth-sign@0.9.0: {} -+ -+ object-copy@0.1.0: -+ dependencies: -+ copy-descriptor: 0.1.1 -+ define-property: 0.2.5 -+ kind-of: 3.2.2 -+ -+ object-visit@1.0.1: -+ dependencies: -+ isobject: 3.0.1 -+ -+ object.pick@1.3.0: -+ dependencies: -+ isobject: 3.0.1 -+ -+ once@1.4.0: -+ dependencies: -+ wrappy: 1.0.2 -+ -+ onetime@5.1.2: -+ dependencies: -+ mimic-fn: 2.1.0 -+ -+ optionator@0.8.3: -+ dependencies: -+ deep-is: 0.1.3 -+ fast-levenshtein: 2.0.6 -+ levn: 0.3.0 -+ prelude-ls: 1.1.2 -+ type-check: 0.3.2 -+ word-wrap: 1.2.3 -+ -+ optionator@0.9.1: -+ dependencies: -+ deep-is: 0.1.3 -+ fast-levenshtein: 2.0.6 -+ levn: 0.4.1 -+ prelude-ls: 1.2.1 -+ type-check: 0.4.0 -+ word-wrap: 1.2.3 -+ -+ p-each-series@2.1.0: {} -+ -+ p-finally@1.0.0: {} -+ -+ p-limit@2.3.0: -+ dependencies: -+ p-try: 2.2.0 -+ -+ p-locate@4.1.0: -+ dependencies: -+ p-limit: 2.3.0 -+ -+ p-try@2.2.0: {} -+ -+ parent-module@1.0.1: -+ dependencies: -+ callsites: 3.1.0 -+ -+ parse-json@5.1.0: -+ dependencies: -+ '@babel/code-frame': 7.12.11 -+ error-ex: 1.3.2 -+ json-parse-even-better-errors: 2.3.1 -+ lines-and-columns: 1.1.6 -+ -+ parse5@5.1.1: {} -+ -+ pascalcase@0.1.1: {} -+ -+ path-exists@4.0.0: {} -+ -+ path-is-absolute@1.0.1: {} -+ -+ path-key@2.0.1: {} -+ -+ path-key@3.1.1: {} -+ -+ path-parse@1.0.6: {} -+ -+ path-type@4.0.0: {} -+ -+ performance-now@2.1.0: {} -+ -+ picomatch@2.3.1: {} -+ -+ pirates@4.0.1: -+ dependencies: -+ node-modules-regexp: 1.0.0 -+ -+ pkg-dir@4.2.0: -+ dependencies: -+ find-up: 4.1.0 -+ -+ posix-character-classes@0.1.1: {} -+ -+ prelude-ls@1.1.2: {} -+ -+ prelude-ls@1.2.1: {} -+ -+ prettier@3.3.3: {} -+ -+ pretty-format@26.6.2: -+ dependencies: -+ '@jest/types': 26.6.2 -+ ansi-regex: 5.0.1 -+ ansi-styles: 4.3.0 -+ react-is: 17.0.1 -+ -+ pretty-format@27.5.1: -+ dependencies: -+ ansi-regex: 5.0.1 -+ ansi-styles: 5.2.0 -+ react-is: 17.0.1 -+ -+ progress@2.0.3: {} -+ -+ prompts@2.3.2: -+ dependencies: -+ kleur: 3.0.3 -+ sisteransi: 1.0.5 -+ -+ psl@1.8.0: {} -+ -+ pump@3.0.0: -+ dependencies: -+ end-of-stream: 1.4.4 -+ once: 1.4.0 -+ -+ punycode@2.1.1: {} -+ -+ qs@6.5.2: {} -+ -+ react-is@17.0.1: {} -+ -+ read-pkg-up@7.0.1: -+ dependencies: -+ find-up: 4.1.0 -+ read-pkg: 5.2.0 -+ type-fest: 0.8.1 -+ -+ read-pkg@5.2.0: -+ dependencies: -+ '@types/normalize-package-data': 2.4.0 -+ normalize-package-data: 2.5.0 -+ parse-json: 5.1.0 -+ type-fest: 0.6.0 -+ -+ regenerator-runtime@0.14.1: {} -+ -+ regex-not@1.0.2: -+ dependencies: -+ extend-shallow: 3.0.2 -+ safe-regex: 1.1.0 -+ -+ regexpp@3.1.0: {} -+ -+ remove-trailing-separator@1.1.0: {} -+ -+ repeat-element@1.1.3: {} -+ -+ repeat-string@1.6.1: {} -+ -+ request-promise-core@1.1.4(request@2.88.2): -+ dependencies: -+ lodash: 4.17.21 -+ request: 2.88.2 -+ -+ request-promise-native@1.0.9(request@2.88.2): -+ dependencies: -+ request: 2.88.2 -+ request-promise-core: 1.1.4(request@2.88.2) -+ stealthy-require: 1.1.1 -+ tough-cookie: 2.5.0 -+ -+ request@2.88.2: -+ dependencies: -+ aws-sign2: 0.7.0 -+ aws4: 1.10.1 -+ caseless: 0.12.0 -+ combined-stream: 1.0.8 -+ extend: 3.0.2 -+ forever-agent: 0.6.1 -+ form-data: 2.3.3 -+ har-validator: 5.1.5 -+ http-signature: 1.2.0 -+ is-typedarray: 1.0.0 -+ isstream: 0.1.2 -+ json-stringify-safe: 5.0.1 -+ mime-types: 2.1.27 -+ oauth-sign: 0.9.0 -+ performance-now: 2.1.0 -+ qs: 6.5.2 -+ safe-buffer: 5.2.1 -+ tough-cookie: 2.5.0 -+ tunnel-agent: 0.6.0 -+ uuid: 3.4.0 -+ -+ require-directory@2.1.1: {} -+ -+ require-from-string@2.0.2: {} -+ -+ require-main-filename@2.0.0: {} -+ -+ resolve-cwd@3.0.0: -+ dependencies: -+ resolve-from: 5.0.0 -+ -+ resolve-from@4.0.0: {} -+ -+ resolve-from@5.0.0: {} -+ -+ resolve-url@0.2.1: {} -+ -+ resolve@1.18.1: -+ dependencies: -+ is-core-module: 2.0.0 -+ path-parse: 1.0.6 -+ -+ ret@0.1.15: {} -+ -+ reusify@1.0.4: {} -+ -+ rimraf@3.0.2: -+ dependencies: -+ glob: 7.1.6 -+ -+ rsvp@4.8.5: {} -+ -+ run-parallel@1.1.9: {} -+ -+ rxjs@7.8.1: -+ dependencies: -+ tslib: 2.6.2 -+ -+ safe-buffer@5.1.2: {} -+ -+ safe-buffer@5.2.1: {} -+ -+ safe-regex@1.1.0: -+ dependencies: -+ ret: 0.1.15 -+ -+ safer-buffer@2.1.2: {} -+ -+ sane@4.1.0: -+ dependencies: -+ '@cnakazawa/watch': 1.0.4 -+ anymatch: 2.0.0 -+ capture-exit: 2.0.0 -+ exec-sh: 0.3.4 -+ execa: 1.0.0 -+ fb-watchman: 2.0.1 -+ micromatch: 3.1.10 -+ minimist: 1.2.8 -+ walker: 1.0.7 -+ transitivePeerDependencies: -+ - supports-color -+ -+ saxes@5.0.1: -+ dependencies: -+ xmlchars: 2.2.0 -+ -+ semver@5.7.1: {} -+ -+ semver@6.3.1: {} -+ -+ semver@7.3.5: -+ dependencies: -+ lru-cache: 6.0.0 -+ -+ set-blocking@2.0.0: {} -+ -+ set-value@2.0.1: -+ dependencies: -+ extend-shallow: 2.0.1 -+ is-extendable: 0.1.1 -+ is-plain-object: 2.0.4 -+ split-string: 3.1.0 -+ -+ shebang-command@1.2.0: -+ dependencies: -+ shebang-regex: 1.0.0 -+ -+ shebang-command@2.0.0: -+ dependencies: -+ shebang-regex: 3.0.0 -+ -+ shebang-regex@1.0.0: {} -+ -+ shebang-regex@3.0.0: {} -+ -+ shell-quote@1.8.1: {} -+ -+ shellwords@0.1.1: -+ optional: true -+ -+ signal-exit@3.0.3: {} -+ -+ sisteransi@1.0.5: {} -+ -+ slash@3.0.0: {} -+ -+ slice-ansi@4.0.0: -+ dependencies: -+ ansi-styles: 4.3.0 -+ astral-regex: 2.0.0 -+ is-fullwidth-code-point: 3.0.0 -+ -+ snapdragon-node@2.1.1: -+ dependencies: -+ define-property: 1.0.0 -+ isobject: 3.0.1 -+ snapdragon-util: 3.0.1 -+ -+ snapdragon-util@3.0.1: -+ dependencies: -+ kind-of: 3.2.2 -+ -+ snapdragon@0.8.2: -+ dependencies: -+ base: 0.11.2 -+ debug: 2.6.9 -+ define-property: 0.2.5 -+ extend-shallow: 2.0.1 -+ map-cache: 0.2.2 -+ source-map: 0.5.7 -+ source-map-resolve: 0.5.3 -+ use: 3.1.1 -+ transitivePeerDependencies: -+ - supports-color -+ -+ source-map-resolve@0.5.3: -+ dependencies: -+ atob: 2.1.2 -+ decode-uri-component: 0.2.0 -+ resolve-url: 0.2.1 -+ source-map-url: 0.4.0 -+ urix: 0.1.0 -+ -+ source-map-support@0.5.19: -+ dependencies: -+ buffer-from: 1.1.1 -+ source-map: 0.6.1 -+ -+ source-map-url@0.4.0: {} -+ -+ source-map@0.5.7: {} -+ -+ source-map@0.6.1: {} -+ -+ source-map@0.7.3: {} -+ -+ spawn-command@0.0.2: {} -+ -+ spdx-correct@3.1.1: -+ dependencies: -+ spdx-expression-parse: 3.0.1 -+ spdx-license-ids: 3.0.6 -+ -+ spdx-exceptions@2.3.0: {} -+ -+ spdx-expression-parse@3.0.1: -+ dependencies: -+ spdx-exceptions: 2.3.0 -+ spdx-license-ids: 3.0.6 -+ -+ spdx-license-ids@3.0.6: {} -+ -+ split-string@3.1.0: -+ dependencies: -+ extend-shallow: 3.0.2 -+ -+ sprintf-js@1.0.3: {} -+ -+ sshpk@1.16.1: -+ dependencies: -+ asn1: 0.2.4 -+ assert-plus: 1.0.0 -+ bcrypt-pbkdf: 1.0.2 -+ dashdash: 1.14.1 -+ ecc-jsbn: 0.1.2 -+ getpass: 0.1.7 -+ jsbn: 0.1.1 -+ safer-buffer: 2.1.2 -+ tweetnacl: 0.14.5 -+ -+ stack-utils@2.0.2: -+ dependencies: -+ escape-string-regexp: 2.0.0 -+ -+ static-extend@0.1.2: -+ dependencies: -+ define-property: 0.2.5 -+ object-copy: 0.1.0 -+ -+ stealthy-require@1.1.1: {} -+ -+ string-length@4.0.1: -+ dependencies: -+ char-regex: 1.0.2 -+ strip-ansi: 6.0.1 -+ -+ string-width@4.2.3: -+ dependencies: -+ emoji-regex: 8.0.0 -+ is-fullwidth-code-point: 3.0.0 -+ strip-ansi: 6.0.1 -+ -+ strip-ansi@6.0.1: -+ dependencies: -+ ansi-regex: 5.0.1 -+ -+ strip-bom@4.0.0: {} -+ -+ strip-eof@1.0.0: {} -+ -+ strip-final-newline@2.0.0: {} -+ -+ strip-json-comments@3.1.1: {} -+ -+ supports-color@5.5.0: -+ dependencies: -+ has-flag: 3.0.0 -+ -+ supports-color@7.2.0: -+ dependencies: -+ has-flag: 4.0.0 -+ -+ supports-color@8.1.1: -+ dependencies: -+ has-flag: 4.0.0 -+ -+ supports-hyperlinks@2.1.0: -+ dependencies: -+ has-flag: 4.0.0 -+ supports-color: 7.2.0 -+ -+ symbol-tree@3.2.4: {} -+ -+ table@6.7.1: -+ dependencies: -+ ajv: 8.6.3 -+ lodash.clonedeep: 4.5.0 -+ lodash.truncate: 4.4.2 -+ slice-ansi: 4.0.0 -+ string-width: 4.2.3 -+ strip-ansi: 6.0.1 -+ -+ terminal-link@2.1.1: -+ dependencies: -+ ansi-escapes: 4.3.1 -+ supports-hyperlinks: 2.1.0 -+ -+ test-exclude@6.0.0: -+ dependencies: -+ '@istanbuljs/schema': 0.1.2 -+ glob: 7.1.6 -+ minimatch: 3.0.4 -+ -+ text-table@0.2.0: {} -+ -+ throat@5.0.0: {} -+ -+ tmpl@1.0.4: {} -+ -+ to-fast-properties@2.0.0: {} -+ -+ to-object-path@0.3.0: -+ dependencies: -+ kind-of: 3.2.2 -+ -+ to-regex-range@2.1.1: -+ dependencies: -+ is-number: 3.0.0 -+ repeat-string: 1.6.1 -+ -+ to-regex-range@5.0.1: -+ dependencies: -+ is-number: 7.0.0 -+ -+ to-regex@3.0.2: -+ dependencies: -+ define-property: 2.0.2 -+ extend-shallow: 3.0.2 -+ regex-not: 1.0.2 -+ safe-regex: 1.1.0 -+ -+ tough-cookie@2.5.0: -+ dependencies: -+ psl: 1.8.0 -+ punycode: 2.1.1 -+ -+ tough-cookie@3.0.1: -+ dependencies: -+ ip-regex: 2.1.0 -+ psl: 1.8.0 -+ punycode: 2.1.1 -+ -+ tr46@0.0.3: {} -+ -+ tr46@2.0.2: -+ dependencies: -+ punycode: 2.1.1 -+ -+ tree-kill@1.2.2: {} -+ -+ ts-jest@26.5.6(jest@26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)))(typescript@4.9.5): -+ dependencies: -+ bs-logger: 0.2.6 -+ buffer-from: 1.1.1 -+ fast-json-stable-stringify: 2.1.0 -+ jest: 26.6.3(ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5)) -+ jest-util: 26.6.2 -+ json5: 2.1.3 -+ lodash: 4.17.21 -+ make-error: 1.3.6 -+ mkdirp: 1.0.4 -+ semver: 7.3.5 -+ typescript: 4.9.5 -+ yargs-parser: 20.2.7 -+ -+ ts-node@10.9.1(@types/node@20.14.11)(typescript@4.9.5): -+ dependencies: -+ '@cspotcode/source-map-support': 0.8.1 -+ '@tsconfig/node10': 1.0.11 -+ '@tsconfig/node12': 1.0.11 -+ '@tsconfig/node14': 1.0.3 -+ '@tsconfig/node16': 1.0.4 -+ '@types/node': 20.14.11 -+ acorn: 8.12.1 -+ acorn-walk: 8.3.3 -+ arg: 4.1.3 -+ create-require: 1.1.1 -+ diff: 4.0.2 -+ make-error: 1.3.6 -+ typescript: 4.9.5 -+ v8-compile-cache-lib: 3.0.1 -+ yn: 3.1.1 -+ optional: true -+ -+ tslib@1.14.0: {} -+ -+ tslib@2.6.2: {} -+ -+ tsutils@3.21.0(typescript@4.9.5): -+ dependencies: -+ tslib: 1.14.0 -+ typescript: 4.9.5 -+ -+ tunnel-agent@0.6.0: -+ dependencies: -+ safe-buffer: 5.2.1 -+ -+ tunnel@0.0.6: {} -+ -+ tweetnacl@0.14.5: {} -+ -+ type-check@0.3.2: -+ dependencies: -+ prelude-ls: 1.1.2 -+ -+ type-check@0.4.0: -+ dependencies: -+ prelude-ls: 1.2.1 -+ -+ type-detect@4.0.8: {} -+ -+ type-fest@0.11.0: {} -+ -+ type-fest@0.20.2: {} -+ -+ type-fest@0.6.0: {} -+ -+ type-fest@0.8.1: {} -+ -+ typedarray-to-buffer@3.1.5: -+ dependencies: -+ is-typedarray: 1.0.0 -+ -+ typescript@4.9.5: {} -+ -+ undici-types@5.26.5: {} -+ -+ union-value@1.0.1: -+ dependencies: -+ arr-union: 3.1.0 -+ get-value: 2.0.6 -+ is-extendable: 0.1.1 -+ set-value: 2.0.1 -+ -+ universal-user-agent@6.0.0: {} -+ -+ unset-value@1.0.0: -+ dependencies: -+ has-value: 0.3.1 -+ isobject: 3.0.1 -+ -+ uri-js@4.4.0: -+ dependencies: -+ punycode: 2.1.1 -+ -+ urix@0.1.0: {} -+ -+ use@3.1.1: {} -+ -+ uuid@3.4.0: {} -+ -+ uuid@8.3.2: -+ optional: true -+ -+ v8-compile-cache-lib@3.0.1: -+ optional: true -+ -+ v8-compile-cache@2.1.1: {} -+ -+ v8-to-istanbul@7.0.0: -+ dependencies: -+ '@types/istanbul-lib-coverage': 2.0.3 -+ convert-source-map: 1.7.0 -+ source-map: 0.7.3 -+ -+ validate-npm-package-license@3.0.4: -+ dependencies: -+ spdx-correct: 3.1.1 -+ spdx-expression-parse: 3.0.1 -+ -+ verror@1.10.0: -+ dependencies: -+ assert-plus: 1.0.0 -+ core-util-is: 1.0.2 -+ extsprintf: 1.4.0 -+ -+ w3c-hr-time@1.0.2: -+ dependencies: -+ browser-process-hrtime: 1.0.0 -+ -+ w3c-xmlserializer@2.0.0: -+ dependencies: -+ xml-name-validator: 3.0.0 -+ -+ walker@1.0.7: -+ dependencies: -+ makeerror: 1.0.11 -+ -+ webidl-conversions@3.0.1: {} -+ -+ webidl-conversions@5.0.0: {} -+ -+ webidl-conversions@6.1.0: {} -+ -+ whatwg-encoding@1.0.5: -+ dependencies: -+ iconv-lite: 0.4.24 -+ -+ whatwg-mimetype@2.3.0: {} -+ -+ whatwg-url@5.0.0: -+ dependencies: -+ tr46: 0.0.3 -+ webidl-conversions: 3.0.1 -+ -+ whatwg-url@8.4.0: -+ dependencies: -+ lodash.sortby: 4.7.0 -+ tr46: 2.0.2 -+ webidl-conversions: 6.1.0 -+ -+ which-module@2.0.0: {} -+ -+ which@1.3.1: -+ dependencies: -+ isexe: 2.0.0 -+ -+ which@2.0.2: -+ dependencies: -+ isexe: 2.0.0 -+ -+ word-wrap@1.2.3: {} -+ -+ wrap-ansi@6.2.0: -+ dependencies: -+ ansi-styles: 4.3.0 -+ string-width: 4.2.3 -+ strip-ansi: 6.0.1 -+ -+ wrap-ansi@7.0.0: -+ dependencies: -+ ansi-styles: 4.3.0 -+ string-width: 4.2.3 -+ strip-ansi: 6.0.1 -+ -+ wrappy@1.0.2: {} -+ -+ write-file-atomic@3.0.3: -+ dependencies: -+ imurmurhash: 0.1.4 -+ is-typedarray: 1.0.0 -+ signal-exit: 3.0.3 -+ typedarray-to-buffer: 3.1.5 -+ -+ ws@7.3.1: {} -+ -+ xml-name-validator@3.0.0: {} -+ -+ xmlchars@2.2.0: {} -+ -+ y18n@4.0.1: {} -+ -+ y18n@5.0.8: {} -+ -+ yallist@4.0.0: {} -+ -+ yargs-parser@18.1.3: -+ dependencies: -+ camelcase: 5.3.1 -+ decamelize: 1.2.0 -+ -+ yargs-parser@20.2.7: {} -+ -+ yargs-parser@21.1.1: {} -+ -+ yargs@15.4.1: -+ dependencies: -+ cliui: 6.0.0 -+ decamelize: 1.2.0 -+ find-up: 4.1.0 -+ get-caller-file: 2.0.5 -+ require-directory: 2.1.1 -+ require-main-filename: 2.0.0 -+ set-blocking: 2.0.0 -+ string-width: 4.2.3 -+ which-module: 2.0.0 -+ y18n: 4.0.1 -+ yargs-parser: 18.1.3 -+ -+ yargs@17.7.2: -+ dependencies: -+ cliui: 8.0.1 -+ escalade: 3.1.1 -+ get-caller-file: 2.0.5 -+ require-directory: 2.1.1 -+ string-width: 4.2.3 -+ y18n: 5.0.8 -+ yargs-parser: 21.1.1 -+ -+ yn@3.1.1: -+ optional: true -diff --git a/.github/actions/triage/src/index.test.ts b/.github/actions/triage/src/index.test.ts -new file mode 100644 -index 000000000..523b3cb1c ---- /dev/null -+++ b/.github/actions/triage/src/index.test.ts -@@ -0,0 +1,399 @@ -+import type * as githubModule from '@actions/github' -+import type * as coreModule from '@actions/core' -+import { mock } from 'node:test' -+ -+jest.mock('@actions/core') -+jest.mock('@actions/github') -+ -+type Mocked = { -+ -readonly [P in keyof T]: T[P] extends Function ? jest.Mock : jest.Mocked> -+} -+ -+const github = require('@actions/github') as jest.Mocked> -+const core = require('@actions/core') as jest.Mocked> -+ -+describe('tests', () => { -+ let mockOctokit: any = {} -+ let currentTag: string = 'current_tag_name' -+ -+ ;(core.warning as any) = jest.fn(console.warn.bind(console)) -+ ;(core.error as any) = jest.fn(console.error.bind(console)) -+ -+ let commentTempate: string = '' -+ let labelTemplate: string | null = null -+ const skipLabelTemplate: string | null = 'skip,test' -+ let tagFilter: string | RegExp | null = null -+ -+ let simpleMockOctokit: any = {} -+ -+ beforeEach(() => { -+ tagFilter = null -+ currentTag = 'current_tag_name' -+ ;(github.context as any) = { -+ payload: { -+ repo: { -+ owner: 'owner', -+ repo: 'repo', -+ }, -+ release: { -+ tag_name: currentTag, -+ }, -+ repository: { html_url: 'http://repository' }, -+ }, -+ } -+ -+ github.getOctokit.mockReset().mockImplementationOnce(((token: string) => { -+ expect(token).toBe('GITHUB_TOKEN_VALUE') -+ return mockOctokit -+ }) as any) -+ ;(core.getInput as any).mockImplementation((key: string) => { -+ if (key == 'GITHUB_TOKEN') { -+ return 'GITHUB_TOKEN_VALUE' -+ } -+ if (key == 'comment-template') { -+ return commentTempate -+ } -+ if (key == 'label-template') { -+ return labelTemplate -+ } -+ if (key == 'skip-label') { -+ return skipLabelTemplate -+ } -+ if (key == 'tag-filter') { -+ return tagFilter -+ } -+ fail(`Unexpected input key ${key}`) -+ }) -+ -+ commentTempate = -+ 'Included in release {release_link}. Replacements: {release_name}, {release_tag}.' -+ labelTemplate = null -+ simpleMockOctokit = { -+ rest: { -+ issues: { -+ get: jest.fn(() => Promise.resolve({ data: { locked: false } })), -+ createComment: jest.fn(() => Promise.resolve()), -+ addLabels: jest.fn(() => Promise.resolve()), -+ }, -+ repos: { -+ listReleases: jest.fn(() => -+ Promise.resolve({ -+ data: [ -+ { -+ name: 'Release Name', -+ tag_name: 'current_tag_name', -+ html_url: 'http://current_release', -+ }, -+ { -+ tag_name: 'prior_tag_name', -+ html_url: 'http://prior_release', -+ }, -+ ], -+ }), -+ ), -+ compareCommits: jest.fn(() => -+ Promise.resolve({ -+ data: { commits: [{ sha: 'SHA1' }] }, -+ }), -+ ), -+ }, -+ }, -+ graphql: jest.fn(() => -+ Promise.resolve({ -+ resource: { -+ messageHeadlineHTML: '', -+ messageBodyHTML: -+ 'Closes

Closes', -+ associatedPullRequests: { -+ pageInfo: { hasNextPage: false }, -+ edges: [], -+ }, -+ }, -+ }), -+ ), -+ } -+ }) -+ -+ afterEach(() => { -+ expect(core.error).not.toHaveBeenCalled() -+ expect(core.warning).not.toHaveBeenCalled() -+ expect(core.setFailed).not.toHaveBeenCalled() -+ }) -+ -+ test('main test', async () => { -+ mockOctokit = { -+ ...simpleMockOctokit, -+ rest: { -+ issues: { -+ get: jest.fn(() => Promise.resolve({ data: { locked: false } })), -+ createComment: jest.fn(() => Promise.resolve()), -+ addLabels: jest.fn(() => Promise.resolve()), -+ }, -+ repos: { -+ listReleases: jest.fn(() => -+ Promise.resolve({ -+ data: [ -+ { -+ tag_name: 'current_tag_name', -+ html_url: 'http://current_release', -+ }, -+ { -+ tag_name: 'prior_tag_name', -+ html_url: 'http://prior_release', -+ }, -+ ], -+ }), -+ ), -+ compareCommits: jest.fn(() => -+ Promise.resolve({ -+ data: { commits: [{ sha: 'SHA1' }, { sha: 'SHA2' }] }, -+ }), -+ ), -+ }, -+ }, -+ graphql: jest.fn(() => -+ Promise.resolve({ -+ resource: { -+ messageHeadlineHTML: -+ 'Closes #1', -+ messageBodyHTML: -+ 'Closes

Closes', -+ associatedPullRequests: { -+ pageInfo: { hasNextPage: false }, -+ edges: [ -+ { -+ node: { -+ bodyHTML: -+ 'Closes Closes', -+ number: 9, -+ labels: { -+ pageInfo: { hasNextPage: false }, -+ nodes: [{ name: 'label1' }, { name: 'label2' }], -+ }, -+ timelineItems: { -+ pageInfo: { hasNextPage: false }, -+ nodes: [ -+ { -+ isCrossRepository: true, -+ __typename: 'ConnectedEvent', -+ subject: { number: 1 }, -+ }, -+ { -+ isCrossRepository: false, -+ __typename: 'ConnectedEvent', -+ subject: { number: 2 }, -+ }, -+ { -+ isCrossRepository: false, -+ __typename: 'DisconnectedEvent', -+ subject: { number: 2 }, -+ }, -+ { -+ isCrossRepository: false, -+ __typename: 'ConnectedEvent', -+ subject: { number: 2 }, -+ }, -+ ], -+ }, -+ }, -+ }, -+ { -+ node: { -+ bodyHTML: '', -+ number: 42, -+ labels: { -+ pageInfo: { hasNextPage: false }, -+ nodes: [{ name: 'label1' }, { name: 'skip' }], -+ }, -+ timelineItems: { -+ pageInfo: { hasNextPage: false }, -+ nodes: [ -+ { -+ isCrossRepository: true, -+ __typename: 'ConnectedEvent', -+ subject: { number: 82 }, -+ }, -+ ], -+ }, -+ }, -+ }, -+ ], -+ }, -+ }, -+ }), -+ ), -+ } -+ -+ jest.isolateModules(() => { -+ require('./index') -+ }) -+ -+ await new Promise(setImmediate) -+ -+ expect(mockOctokit).toMatchSnapshot() -+ expect(mockOctokit.rest.issues.createComment).toHaveBeenCalledTimes(3) -+ }) -+ -+ describe('can filter tags', () => { -+ const v3prev = 'v3.0.1' -+ const v3current = 'v3.0.2' -+ const v2prev = 'v2.0.1' -+ const v2current = 'v2.0.2' -+ -+ const listReleasesData = [ -+ { -+ name: 'Current Release Name', -+ tag_name: v3current, -+ html_url: 'http://v3.0.2', -+ }, -+ { -+ name: 'Prev Release Name', -+ tag_name: v3prev, -+ html_url: 'http://v3.0.1', -+ }, -+ { -+ name: 'v2 Current Release Name', -+ tag_name: v2current, -+ html_url: 'http://v2.0.2', -+ }, -+ { -+ name: 'v2 Prev Release Name', -+ tag_name: v2prev, -+ html_url: 'http://v2.0.1', -+ }, -+ ] -+ -+ it.each` -+ description | prevTag | currentTag | filter -+ ${'no filter'} | ${v3prev} | ${v3current} | ${null} -+ ${'v3'} | ${v3prev} | ${v3current} | ${'v\\d'} -+ ${'v2'} | ${v2prev} | ${v2current} | ${'v\\d'} -+ `('should filter tags with $description', async ({ prevTag, currentTag, filter }) => { -+ // @ts-ignore -+ github.context.payload.release.tag_name = currentTag -+ -+ tagFilter = filter -+ -+ mockOctokit = { -+ ...simpleMockOctokit, -+ rest: { -+ issues: { -+ get: jest.fn(() => Promise.resolve({ data: { locked: false } })), -+ createComment: jest.fn(() => Promise.resolve()), -+ addLabels: jest.fn(() => Promise.resolve()), -+ }, -+ repos: { -+ listReleases: jest.fn(() => -+ Promise.resolve({ -+ data: listReleasesData, -+ }), -+ ), -+ compareCommits: jest.fn(() => -+ Promise.resolve({ -+ data: { commits: [{ sha: 'SHA1' }] }, -+ }), -+ ), -+ }, -+ }, -+ graphql: jest.fn(() => -+ Promise.resolve({ -+ resource: { -+ messageHeadlineHTML: '', -+ messageBodyHTML: -+ 'Closes

Closes', -+ associatedPullRequests: { -+ pageInfo: { hasNextPage: false }, -+ edges: [], -+ }, -+ }, -+ }), -+ ), -+ } -+ -+ jest.isolateModules(() => { -+ require('./index') -+ }) -+ -+ await new Promise(resolve => setImmediate(() => resolve())) -+ -+ expect(github.getOctokit).toHaveBeenCalled() -+ expect(mockOctokit.rest.repos.compareCommits.mock.calls).toEqual([ -+ [{ base: prevTag, head: currentTag }], -+ ]) -+ }) -+ }) -+ -+ describe('feature tests', () => { -+ beforeEach(() => { -+ mockOctokit = simpleMockOctokit -+ }) -+ -+ it('can disable comments', async () => { -+ commentTempate = '' -+ -+ jest.isolateModules(() => { -+ require('./index') -+ }) -+ -+ await new Promise(resolve => setImmediate(() => resolve())) -+ -+ expect(github.getOctokit).toHaveBeenCalled() -+ expect(mockOctokit.rest.issues.createComment).not.toHaveBeenCalled() -+ }) -+ -+ it('should unlock and comment', async () => { -+ mockOctokit = { -+ ...simpleMockOctokit, -+ rest: { -+ ...simpleMockOctokit.rest, -+ issues: { -+ // Return locked for both issues to be commented on -+ get: jest.fn(() => Promise.resolve({ data: { locked: true } })), -+ lock: jest.fn(() => Promise.resolve()), -+ unlock: jest.fn(() => Promise.resolve()), -+ createComment: jest.fn(() => Promise.resolve()), -+ }, -+ }, -+ graphql: jest.fn(() => -+ Promise.resolve({ -+ resource: { -+ messageHeadlineHTML: '', -+ messageBodyHTML: -+ 'Closes

Closes', -+ associatedPullRequests: { -+ pageInfo: { hasNextPage: false }, -+ edges: [], -+ }, -+ }, -+ }), -+ ), -+ } -+ -+ jest.isolateModules(() => { -+ require('./index') -+ }) -+ -+ await new Promise(resolve => setImmediate(() => resolve())) -+ -+ expect(github.getOctokit).toHaveBeenCalled() -+ -+ // Should call once for both linked issues -+ expect(mockOctokit.rest.issues.unlock).toHaveBeenCalledTimes(2) -+ expect(mockOctokit.rest.issues.createComment).toHaveBeenCalledTimes(2) -+ expect(mockOctokit.rest.issues.lock).toHaveBeenCalledTimes(2) -+ }) -+ -+ it.skip('can apply labels', async () => { -+ labelTemplate = ':dart: landed,release-{release_tag},{release_name}' -+ -+ jest.isolateModules(() => { -+ require('./index') -+ }) -+ -+ await new Promise(resolve => setImmediate(() => resolve())) -+ -+ expect(github.getOctokit).toHaveBeenCalled() -+ expect(mockOctokit.rest.issues.addLabels.mock.calls).toMatchSnapshot() -+ }) -+ }) -+}) -diff --git a/.github/actions/triage/src/index.ts b/.github/actions/triage/src/index.ts -new file mode 100644 -index 000000000..3c68426e6 ---- /dev/null -+++ b/.github/actions/triage/src/index.ts -@@ -0,0 +1,195 @@ -+import { debug, error, getBooleanInput, getInput, info, setFailed } from '@actions/core' -+ -+import { context, getOctokit } from '@actions/github' -+import { readFile, access } from 'node:fs/promises' -+import { join } from 'node:path' -+ -+// Ensure GITHUB_TOKEN and GITHUB_WORKSPACE are present -+if (!process.env.GITHUB_TOKEN) throw new TypeError('No GITHUB_TOKEN provided') -+if (!process.env.GITHUB_WORKSPACE) throw new TypeError('Not a GitHub workspace') -+ -+// Define the configuration object -+interface Config { -+ invalidLink: { -+ comment: string -+ bugLabels: string[] -+ hosts: string[] -+ label: string -+ linkSection: string -+ } -+ tagOnly: boolean -+ token: string -+ workspace: string -+} -+ -+const config: Config = { -+ invalidLink: { -+ comment: getInput('reproduction_comment') || '.github/invalid-reproduction.md', -+ bugLabels: getInput('reproduction_issue_labels') -+ .split(',') -+ .map(l => l.trim()), -+ hosts: (getInput('reproduction_hosts') || 'github.com').split(',').map(h => h.trim()), -+ label: getInput('reproduction_invalid_label') || 'invalid-reproduction', -+ linkSection: -+ getInput('reproduction_link_section') || '### Link to reproduction(.*)### To reproduce', -+ }, -+ tagOnly: getBooleanOrUndefined('tag_only') || false, -+ token: process.env.GITHUB_TOKEN, -+ workspace: process.env.GITHUB_WORKSPACE, -+} -+ -+// Attempt to parse JSON, return parsed object or error -+function tryParse(json: string): Record { -+ try { -+ return JSON.parse(json) -+ } catch (e) { -+ setFailed(`Could not parse JSON: ${e instanceof Error ? e.message : e}`) -+ return {} -+ } -+} -+ -+// Retrieves a boolean input or undefined based on environment variables -+function getBooleanOrUndefined(value: string): boolean | undefined { -+ const variable = process.env[`INPUT_${value.toUpperCase()}`] -+ return variable === undefined || variable === '' ? undefined : getBooleanInput(value) -+} -+ -+// Returns the appropriate label match type -+function getLabelMatch(value: string | undefined): 'name' | 'description' { -+ return value === 'name' ? 'name' : 'description' -+} -+ -+// Function to check if an issue contains a valid reproduction link -+async function checkValidReproduction(): Promise { -+ const { issue, action } = context.payload as { -+ issue: { number: number; body: string; labels: { name: string }[] } | undefined -+ action: string -+ } -+ -+ if (action !== 'opened' || !issue?.body) return -+ -+ const labels = issue.labels.map(l => l.name) -+ -+ const issueMatchingLabel = -+ labels.length && -+ config.invalidLink.bugLabels.length && -+ labels.some(l => config.invalidLink.bugLabels.includes(l)) -+ -+ if (!issueMatchingLabel) { -+ info( -+ `Issue #${issue.number} does not match required labels: ${config.invalidLink.bugLabels.join(', ')}`, -+ ) -+ info(`Issue labels: ${labels.join(', ')}`) -+ return -+ } -+ -+ info(`Issue #${issue.number} labels: ${labels.join(', ')}`) -+ -+ const { rest: client } = getOctokit(config.token) -+ const common = { ...context.repo, issue_number: issue.number } -+ -+ const labelsToRemove = labels.filter(l => config.invalidLink.bugLabels.includes(l)) -+ -+ if (await isValidReproduction(issue.body)) { -+ await Promise.all( -+ labelsToRemove.map(label => client.issues.removeLabel({ ...common, name: label })), -+ ) -+ -+ return info(`Issue #${issue.number} contains a valid reproduction 💚`) -+ } -+ -+ info(`Invalid reproduction, issue will be closed/labeled/commented...`) -+ -+ // Adjust labels -+ await Promise.all( -+ labelsToRemove.map(label => client.issues.removeLabel({ ...common, name: label })), -+ ) -+ info(`Issue #${issue.number} - validate label removed`) -+ await client.issues.addLabels({ ...common, labels: [config.invalidLink.label] }) -+ info(`Issue #${issue.number} - labeled`) -+ -+ // If tagOnly, do not close or comment -+ if (config.tagOnly) { -+ info('Tag-only enabled, no closing/commenting actions taken') -+ return -+ } -+ -+ // Perform closing and commenting actions -+ await client.issues.update({ ...common, state: 'closed' }) -+ info(`Issue #${issue.number} - closed`) -+ -+ const comment = join(config.workspace, config.invalidLink.comment) -+ await client.issues.createComment({ ...common, body: await getCommentBody(comment) }) -+ info(`Issue #${issue.number} - commented`) -+} -+ -+/** -+ * Determine if an issue contains a valid/accessible link to a reproduction. -+ * -+ * Returns `true` if the link is valid. -+ * @param body - The body content of the issue -+ */ -+async function isValidReproduction(body: string): Promise { -+ const linkSectionRe = new RegExp(config.invalidLink.linkSection, 'is') -+ const link = body.match(linkSectionRe)?.[1]?.trim() -+ -+ if (!link) { -+ info('Missing link') -+ info(`Link section regex: ${linkSectionRe}`) -+ info(`Link section: ${body}`) -+ return false -+ } -+ -+ info(`Checking validity of link: ${link}`) -+ -+ if (!URL.canParse(link)) { -+ info(`Invalid URL: ${link}`) -+ return false -+ } -+ -+ const url = new URL(link) -+ -+ if (!config.invalidLink.hosts.includes(url.hostname)) { -+ info('Link did not match allowed reproduction hosts') -+ return false -+ } -+ -+ try { -+ // Verify that the link can be accessed -+ const response = await fetch(link) -+ const isOk = response.status < 400 || response.status >= 500 -+ -+ info(`Link status: ${response.status}`) -+ if (!isOk) { -+ info(`Link returned status ${response.status}`) -+ } -+ return isOk -+ } catch (error) { -+ info(`Error fetching link: ${(error as Error).message}`) -+ return false -+ } -+} -+ -+/** -+ * Return either a file's content or a string -+ * @param {string} pathOrComment -+ */ -+async function getCommentBody(pathOrComment: string) { -+ try { -+ await access(pathOrComment) -+ return await readFile(pathOrComment, 'utf8') -+ } catch (error: any) { -+ if (error.code === 'ENOENT') return pathOrComment -+ throw error -+ } -+} -+ -+async function run() { -+ const { token, workspace, ...safeConfig } = config -+ info('Configuration:') -+ info(JSON.stringify(safeConfig, null, 2)) -+ -+ await checkValidReproduction() -+} -+ -+run().catch(setFailed) -diff --git a/.github/actions/triage/tsconfig.json b/.github/actions/triage/tsconfig.json -new file mode 100644 -index 000000000..5577737a9 ---- /dev/null -+++ b/.github/actions/triage/tsconfig.json -@@ -0,0 +1,15 @@ -+{ -+ "compilerOptions": { -+ "target": "es5", -+ "lib": ["es2020.string"], -+ "noEmit": true, -+ "strict": true, -+ "noUnusedLocals": false, // Undo this -+ "noImplicitReturns": true, -+ "noFallthroughCasesInSwitch": true, -+ "forceConsistentCasingInFileNames": true, -+ "downlevelIteration": true, -+ "skipLibCheck": true, -+ }, -+ "exclude": ["src/**/*.test.ts"] -+} -diff --git a/.github/pnpm-lock.yaml b/.github/pnpm-lock.yaml -index d4bb9fc0c..4974684cc 100644 ---- a/.github/pnpm-lock.yaml -+++ b/.github/pnpm-lock.yaml -@@ -55,6 +55,55 @@ importers: - specifier: ^4.9.5 - version: 4.9.5 - -+ actions/triage: -+ dependencies: -+ '@actions/core': -+ specifier: ^1.3.0 -+ version: 1.10.1 -+ '@actions/github': -+ specifier: ^5.0.0 -+ version: 5.1.1 -+ devDependencies: -+ '@octokit/webhooks-types': -+ specifier: ^7.5.1 -+ version: 7.5.1 -+ '@swc/jest': -+ specifier: ^0.2.36 -+ version: 0.2.36(@swc/core@1.7.23) -+ '@types/jest': -+ specifier: ^27.5.2 -+ version: 27.5.2 -+ '@types/node': -+ specifier: ^20.16.5 -+ version: 20.16.5 -+ '@typescript-eslint/eslint-plugin': -+ specifier: ^4.33.0 -+ version: 4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@4.9.5))(eslint@7.32.0)(typescript@4.9.5) -+ '@typescript-eslint/parser': -+ specifier: ^4.33.0 -+ version: 4.33.0(eslint@7.32.0)(typescript@4.9.5) -+ '@vercel/ncc': -+ specifier: 0.38.1 -+ version: 0.38.1 -+ concurrently: -+ specifier: ^8.2.2 -+ version: 8.2.2 -+ eslint: -+ specifier: ^7.32.0 -+ version: 7.32.0 -+ jest: -+ specifier: ^29.7.0 -+ version: 29.7.0(@types/node@20.16.5)(node-notifier@8.0.2) -+ prettier: -+ specifier: ^3.3.3 -+ version: 3.3.3 -+ ts-jest: -+ specifier: ^26.5.6 -+ version: 26.5.6(jest@29.7.0(@types/node@20.16.5)(node-notifier@8.0.2))(typescript@4.9.5) -+ typescript: -+ specifier: ^4.9.5 -+ version: 4.9.5 -+ - packages: - - '@actions/core@1.10.1': -diff --git a/.github/workflows/label-author.yml b/.github/workflows/label-author.yml -index 3a3db54ea..ef02f0b53 100644 ---- a/.github/workflows/label-author.yml -+++ b/.github/workflows/label-author.yml -@@ -22,6 +22,7 @@ jobs: - - label-created-by: - name: Label pr/issue on opening -+ if: false - runs-on: ubuntu-latest - steps: - - name: Tag with 'created-by' -diff --git a/.github/workflows/triage.yml b/.github/workflows/triage.yml -index c1d429470..dfead7715 100644 ---- a/.github/workflows/triage.yml -+++ b/.github/workflows/triage.yml -@@ -1,6 +1,9 @@ - name: triage - - on: -+ pull_request: -+ types: -+ - opened - issues: - types: - - opened -@@ -9,21 +12,106 @@ env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - permissions: -+ contents: read - issues: write -+ pull-requests: write -+ - - jobs: -+ debug-context: -+ runs-on: ubuntu-latest -+ steps: -+ - name: View context attributes -+ uses: actions/github-script@v7 -+ with: -+ script: console.log({ context }) -+ -+ label-created-by: -+ name: Label pr/issue on opening -+ runs-on: ubuntu-latest -+ steps: -+ - name: Tag with 'created-by' -+ uses: actions/github-script@v7 -+ if: github.event.action == 'opened' -+ with: -+ github-token: ${{ secrets.GITHUB_TOKEN }} -+ script: | -+ const payloadTeamUsernames = [ -+ 'denolfe', -+ 'jmikrut', -+ 'DanRibbens', -+ 'jacobsfletch', -+ 'JarrodMFlesch', -+ 'AlessioGr', -+ 'JessChowdhury', -+ 'kendelljoseph', -+ 'PatrikKozak', -+ 'tylandavis', -+ 'paulpopus', -+ 'GermanJablo', -+ ]; -+ -+ const type = context.payload.pull_request ? 'pull_request' : 'issue'; -+ -+ const isTeamMember = payloadTeamUsernames -+ .map(n => n.toLowerCase()) -+ .includes(context.payload[type].user.login.toLowerCase()); -+ -+ if (isTeamMember) { -+ github.rest.issues.addLabels({ -+ issue_number: context.issue.number, -+ owner: context.repo.owner, -+ repo: context.repo.repo, -+ labels: ['created-by: Payload team'], -+ }); -+ console.log(`Added 'created-by: Payload team' label`); -+ return; -+ } -+ -+ const association = context.payload[type].author_association; -+ let label = '' -+ if (association === 'MEMBER' || association === 'OWNER') { -+ label = 'created-by: Payload team'; -+ } else if (association === 'CONTRIBUTOR') { -+ label = 'created-by: Contributor'; -+ } -+ -+ if (!label) return; -+ -+ github.rest.issues.addLabels({ -+ issue_number: context.issue.number, -+ owner: context.repo.owner, -+ repo: context.repo.repo, -+ labels: [label], -+ }); -+ console.log(`Added '${label}' label.`); -+ - triage: -- name: nissuer -- if: false # Disable after adjusting scenarios which this should be applied -+ name: initial-triage -+ if: github.event_name == 'issues' - runs-on: ubuntu-latest - steps: -- - uses: balazsorban44/nissuer@1.10.0 -+ - uses: actions/checkout@v4 -+ with: -+ token: ${{ secrets.GITHUB_TOKEN }} -+ - uses: ./.github/actions/triage - with: -- label-area-prefix: "" -- label-area-match: "name" -- label-area-section: 'Which area\(s\) are affected\? \(Select all that apply\)(.*)### Environment Info' - reproduction-comment: '.github/comments/invalid-reproduction.md' -- reproduction-blocklist: 'github.com/\\w*/?$,github.com$' - reproduction-link-section: '### Link to the code that reproduces this issue(.*)### Reproduction Steps' -- reproduction-invalid-label: 'invalid-reproduction' -- reproduction-issue-labels: 'status: needs-triage,' -+ reproduction-issue-labels: 'validate-reproduction' -+ -+ # triage: -+ # name: nissuer -+ # if: false # Disable after adjusting scenarios which this should be applied -+ # runs-on: ubuntu-latest -+ # steps: -+ # - uses: balazsorban44/nissuer@1.10.0 -+ # with: -+ # label-area-prefix: "" -+ # label-area-match: "name" -+ # label-area-section: 'Which area\(s\) are affected\? \(Select all that apply\)(.*)### Environment Info' -+ # reproduction-comment: '.github/comments/invalid-reproduction.md' -+ # reproduction-blocklist: 'github.com/\\w*/?$,github.com$' -+ # reproduction-link-section: '### Link to the code that reproduces this issue(.*)### Reproduction Steps' -+ # reproduction-invalid-label: 'invalid-reproduction' -+ # reproduction-issue-labels: 'status: needs-triage,'