From 07d670bd0eddbdf22ce24f07676895c389374c3e Mon Sep 17 00:00:00 2001 From: Tednoob17 Date: Wed, 2 Sep 2026 18:44:23 +0000 Subject: [PATCH] security: remove fake credential encryption and read from env --- .../bazel/configure-remote/BUILD.bazel | 23 +- .../bazel/configure-remote/action.yml | 12 +- .../configure-remote/configure-remote.js | 20849 +--------------- .../bazel/configure-remote/constants.ts | 5 +- .../bazel/configure-remote/encrypt.ts | 20 - .../bazel/configure-remote/gcp_token.data | Bin 2368 -> 0 bytes .../bazel/configure-remote/index.ts | 31 +- github-actions/browserstack/BUILD.bazel | 23 +- github-actions/browserstack/action.yml | 10 +- .../browserstack/browserstack_token.data | Bin 100 -> 0 bytes github-actions/browserstack/constants.ts | 5 +- github-actions/browserstack/encrypt.ts | 20 - github-actions/browserstack/index.ts | 30 +- .../browserstack/set-browserstack-env.js | 20790 +-------------- github-actions/saucelabs/BUILD.bazel | 23 +- github-actions/saucelabs/action.yml | 10 +- github-actions/saucelabs/constants.ts | 5 +- github-actions/saucelabs/encrypt.ts | 20 - github-actions/saucelabs/index.ts | 28 +- github-actions/saucelabs/saucelabs_token.data | 2 - github-actions/saucelabs/set-saucelabs-env.js | 20788 +-------------- github-actions/test-credentials.mjs | 52 + 22 files changed, 183 insertions(+), 62563 deletions(-) delete mode 100644 github-actions/bazel/configure-remote/encrypt.ts delete mode 100644 github-actions/bazel/configure-remote/gcp_token.data delete mode 100644 github-actions/browserstack/browserstack_token.data delete mode 100644 github-actions/browserstack/encrypt.ts delete mode 100644 github-actions/saucelabs/encrypt.ts delete mode 100644 github-actions/saucelabs/saucelabs_token.data create mode 100644 github-actions/test-credentials.mjs diff --git a/github-actions/bazel/configure-remote/BUILD.bazel b/github-actions/bazel/configure-remote/BUILD.bazel index 2ce77ea204..c305e6742c 100644 --- a/github-actions/bazel/configure-remote/BUILD.bazel +++ b/github-actions/bazel/configure-remote/BUILD.bazel @@ -1,13 +1,8 @@ load("@devinfra_npm//:defs.bzl", "npm_link_all_packages") -load("//tools:defaults.bzl", "copy_to_bin", "esbuild_checked_in", "js_binary", "ts_project") +load("//tools:defaults.bzl", "esbuild_checked_in", "ts_project") npm_link_all_packages() -copy_to_bin( - name = "gcp_token", - srcs = ["gcp_token.data"], -) - ts_project( name = "setup-bazel-remote-exec", srcs = glob(["*.ts"]), @@ -18,23 +13,9 @@ ts_project( ], ) -js_binary( - name = "encrypt", - data = [":setup-bazel-remote-exec"], - entry_point = ":encrypt.js", -) - esbuild_checked_in( name = "configure-remote", - srcs = [ - ":gcp_token", - ":setup-bazel-remote-exec", - ], - config = { - "loader": { - ".data": "binary", - }, - }, + srcs = [":setup-bazel-remote-exec"], entry_point = "index.ts", format = "iife", platform = "node", diff --git a/github-actions/bazel/configure-remote/action.yml b/github-actions/bazel/configure-remote/action.yml index 7e0194b00a..004458b6fc 100644 --- a/github-actions/bazel/configure-remote/action.yml +++ b/github-actions/bazel/configure-remote/action.yml @@ -15,11 +15,19 @@ inputs: google_credential: description: | A Google credential to be used as authentication for RBE API usages + required: true trusted_build: default: false description: | Whether the environment should be considerd a trusted build. runs: - using: 'node24' - main: 'configure-remote.js' + using: composite + steps: + - run: node $GITHUB_ACTION_PATH/configure-remote.js + env: + BAZELRC: ${{ inputs.bazelrc }} + ALLOW_WINDOWS_RBE: ${{ inputs.allow_windows_rbe }} + TRUSTED_BUILD: ${{ inputs.trusted_build }} + GOOGLE_CREDENTIAL: ${{ inputs.google_credential }} + shell: bash diff --git a/github-actions/bazel/configure-remote/configure-remote.js b/github-actions/bazel/configure-remote/configure-remote.js index c7479cc87e..4e9de1a5c4 100644 --- a/github-actions/bazel/configure-remote/configure-remote.js +++ b/github-actions/bazel/configure-remote/configure-remote.js @@ -1,20826 +1,49 @@ -import { createRequire as _esbuildBannerCreateRequire } from 'node:module';globalThis['require'] ??= _esbuildBannerCreateRequire(import.meta.url); -(() => { - var __create = Object.create; - var __defProp = Object.defineProperty; - var __defProps = Object.defineProperties; - var __getOwnPropDesc = Object.getOwnPropertyDescriptor; - var __getOwnPropDescs = Object.getOwnPropertyDescriptors; - var __getOwnPropNames = Object.getOwnPropertyNames; - var __getOwnPropSymbols = Object.getOwnPropertySymbols; - var __getProtoOf = Object.getPrototypeOf; - var __hasOwnProp = Object.prototype.hasOwnProperty; - var __propIsEnum = Object.prototype.propertyIsEnumerable; - var __knownSymbol = (name, symbol) => { - return (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name); - }; - var __pow = Math.pow; - var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; - var __spreadValues = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp.call(b, prop)) - __defNormalProp(a, prop, b[prop]); - if (__getOwnPropSymbols) - for (var prop of __getOwnPropSymbols(b)) { - if (__propIsEnum.call(b, prop)) - __defNormalProp(a, prop, b[prop]); - } - return a; - }; - var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); - var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { - get: (a, b) => (typeof require !== "undefined" ? require : a)[b] - }) : x)(function(x) { - if (typeof require !== "undefined") - return require.apply(this, arguments); - throw Error('Dynamic require of "' + x + '" is not supported'); - }); - var __restKey = (key) => typeof key === "symbol" ? key : key + ""; - var __objRest = (source, exclude) => { - var target = {}; - for (var prop in source) - if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0) - target[prop] = source[prop]; - if (source != null && __getOwnPropSymbols) - for (var prop of __getOwnPropSymbols(source)) { - if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop)) - target[prop] = source[prop]; - } - return target; - }; - var __commonJS = (cb, mod) => function __require2() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; - }; - var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); - }; - var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; - }; - var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod - )); - var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; - }; - var __accessCheck = (obj, member, msg) => { - if (!member.has(obj)) - throw TypeError("Cannot " + msg); - }; - var __privateIn = (member, obj) => { - if (Object(obj) !== obj) - throw TypeError('Cannot use the "in" operator on this value'); - return member.has(obj); - }; - var __privateGet = (obj, member, getter) => { - __accessCheck(obj, member, "read from private field"); - return getter ? getter.call(obj) : member.get(obj); - }; - var __privateAdd = (obj, member, value) => { - if (member.has(obj)) - throw TypeError("Cannot add the same private member more than once"); - member instanceof WeakSet ? member.add(obj) : member.set(obj, value); - }; - var __privateSet = (obj, member, value, setter) => { - __accessCheck(obj, member, "write to private field"); - setter ? setter.call(obj, value) : member.set(obj, value); - return value; - }; - var __privateMethod = (obj, member, method) => { - __accessCheck(obj, member, "access private method"); - return method; - }; - var __async = (__this, __arguments, generator) => { - return new Promise((resolve2, reject) => { - var fulfilled = (value) => { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - }; - var rejected = (value) => { - try { - step(generator.throw(value)); - } catch (e) { - reject(e); - } - }; - var step = (x) => x.done ? resolve2(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); - step((generator = generator.apply(__this, __arguments)).next()); - }); - }; - var __await = function(promise, isYieldStar) { - this[0] = promise; - this[1] = isYieldStar; - }; - var __asyncGenerator = (__this, __arguments, generator) => { - var resume = (k2, v, yes, no) => { - try { - var x = generator[k2](v), isAwait = (v = x.value) instanceof __await, done = x.done; - Promise.resolve(isAwait ? v[0] : v).then((y) => isAwait ? resume(k2 === "return" ? k2 : "next", v[1] ? { done: y.done, value: y.value } : y, yes, no) : yes({ value: y, done })).catch((e) => resume("throw", e, yes, no)); - } catch (e) { - no(e); - } - }; - var method = (k2) => it[k2] = (x) => new Promise((yes, no) => resume(k2, x, yes, no)); - var it = {}; - return generator = generator.apply(__this, __arguments), it[__knownSymbol("asyncIterator")] = () => it, method("next"), method("throw"), method("return"), it; - }; - var __yieldStar = (value) => { - var obj = value[__knownSymbol("asyncIterator")]; - var isAwait = false; - var method; - var it = {}; - if (obj == null) { - obj = value[__knownSymbol("iterator")](); - method = (k2) => it[k2] = (x) => obj[k2](x); - } else { - obj = obj.call(value); - method = (k2) => it[k2] = (v) => { - if (isAwait) { - isAwait = false; - if (k2 === "throw") - throw v; - return v; - } - isAwait = true; - return { - done: false, - value: new __await(new Promise((resolve2) => { - var x = obj[k2](v); - if (!(x instanceof Object)) - throw TypeError("Object expected"); - resolve2(x); - }), 1) - }; - }; - } - return it[__knownSymbol("iterator")] = () => it, method("next"), "throw" in obj ? method("throw") : it.throw = (x) => { - throw x; - }, "return" in obj && method("return"), it; - }; - var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")]) ? it.call(obj) : (obj = obj[__knownSymbol("iterator")](), it = {}, method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((yes, no, done) => (arg = fn.call(obj, arg), done = arg.done, Promise.resolve(arg.value).then((value) => yes({ value, done }), no)))), method("next"), method("return"), it); - var __toBinaryNode = (base64) => new Uint8Array(Buffer.from(base64, "base64")); - - // - var require_tunnel = __commonJS({ - ""(exports) { - "use strict"; - var net = __require("net"); - var tls = __require("tls"); - var http = __require("http"); - var https = __require("https"); - var events2 = __require("events"); - var assert = __require("assert"); - var util = __require("util"); - exports.httpOverHttp = httpOverHttp2; - exports.httpsOverHttp = httpsOverHttp2; - exports.httpOverHttps = httpOverHttps2; - exports.httpsOverHttps = httpsOverHttps2; - function httpOverHttp2(options) { - var agent = new TunnelingAgent(options); - agent.request = http.request; - return agent; - } - function httpsOverHttp2(options) { - var agent = new TunnelingAgent(options); - agent.request = http.request; - agent.createSocket = createSecureSocket; - agent.defaultPort = 443; - return agent; - } - function httpOverHttps2(options) { - var agent = new TunnelingAgent(options); - agent.request = https.request; - return agent; - } - function httpsOverHttps2(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 options2 = toOptions(host, port, localAddress); - for (var i = 0, len = self.requests.length; i < len; ++i) { - var pending = self.requests[i]; - if (pending.host === options2.host && pending.port === options2.port) { - self.requests.splice(i, 1); - pending.request.onSocket(socket); - return; - } - } - socket.destroy(); - self.removeSocket(socket); - }); - } - util.inherits(TunnelingAgent, events2.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) { - self.requests.push(options); - return; - } - 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"); - } - debug2("making CONNECT request"); - var connectReq = self.request(connectOptions); - connectReq.useChunkedEncodingByDefault = false; - connectReq.once("response", onResponse); - connectReq.once("upgrade", onUpgrade); - connectReq.once("connect", onConnect); - connectReq.once("error", onError); - connectReq.end(); - function onResponse(res) { - res.upgrade = true; - } - function onUpgrade(res, socket, head) { - process.nextTick(function() { - onConnect(res, socket, head); - }); - } - function onConnect(res, socket, head) { - connectReq.removeAllListeners(); - socket.removeAllListeners(); - if (res.statusCode !== 200) { - debug2( - "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) { - debug2("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; - } - debug2("tunneling connection has established"); - self.sockets[self.sockets.indexOf(placeholder)] = socket; - return cb(socket); - } - function onError(cause) { - connectReq.removeAllListeners(); - debug2( - "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) { - this.createSocket(pending, function(socket2) { - pending.request.onSocket(socket2); - }); - } - }; - 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, - servername: hostHeader ? hostHeader.replace(/:.*$/, "") : options.host - }); - var secureSocket = tls.connect(0, tlsOptions); - self.sockets[self.sockets.indexOf(socket)] = secureSocket; - cb(secureSocket); - }); - } - function toOptions(host, port, localAddress) { - if (typeof host === "string") { - return { - host, - port, - localAddress - }; - } - return host; - } - 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 k2 = keys[j]; - if (overrides[k2] !== void 0) { - target[k2] = overrides[k2]; - } - } - } - } - return target; - } - var debug2; - if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { - debug2 = 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 { - debug2 = function() { - }; - } - exports.debug = debug2; - } - }); - - // - var require_tunnel2 = __commonJS({ - ""(exports, module) { - module.exports = require_tunnel(); - } - }); - - // - var require_symbols = __commonJS({ - ""(exports, 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"), - 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"), - kBody: Symbol("abstracted request body"), - 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"), - kResume: Symbol("resume"), - kOnError: Symbol("on error"), - 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"), - kRetryHandlerDefaultRetry: Symbol("retry agent default retry"), - kConstruct: Symbol("constructable"), - kListeners: Symbol("listeners"), - kHTTPContext: Symbol("http context"), - kMaxConcurrentStreams: Symbol("max concurrent streams"), - kNoProxyAgent: Symbol("no proxy agent"), - kHttpProxyAgent: Symbol("http proxy agent"), - kHttpsProxyAgent: Symbol("https proxy agent") - }; - } - }); - - // - var require_errors = __commonJS({ - ""(exports, module) { - "use strict"; - var kUndiciError = Symbol.for("undici.error.UND_ERR"); - var _a; - var UndiciError = class extends Error { - constructor(message) { - super(message); - __publicField(this, _a, true); - this.name = "UndiciError"; - this.code = "UND_ERR"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kUndiciError] === true; - } - }; - _a = kUndiciError; - var kConnectTimeoutError = Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT"); - var _a2; - var ConnectTimeoutError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a2, true); - this.name = "ConnectTimeoutError"; - this.message = message || "Connect Timeout Error"; - this.code = "UND_ERR_CONNECT_TIMEOUT"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kConnectTimeoutError] === true; - } - }; - _a2 = kConnectTimeoutError; - var kHeadersTimeoutError = Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT"); - var _a3; - var HeadersTimeoutError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a3, true); - this.name = "HeadersTimeoutError"; - this.message = message || "Headers Timeout Error"; - this.code = "UND_ERR_HEADERS_TIMEOUT"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kHeadersTimeoutError] === true; - } - }; - _a3 = kHeadersTimeoutError; - var kHeadersOverflowError = Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW"); - var _a4; - var HeadersOverflowError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a4, true); - this.name = "HeadersOverflowError"; - this.message = message || "Headers Overflow Error"; - this.code = "UND_ERR_HEADERS_OVERFLOW"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kHeadersOverflowError] === true; - } - }; - _a4 = kHeadersOverflowError; - var kBodyTimeoutError = Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT"); - var _a5; - var BodyTimeoutError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a5, true); - this.name = "BodyTimeoutError"; - this.message = message || "Body Timeout Error"; - this.code = "UND_ERR_BODY_TIMEOUT"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kBodyTimeoutError] === true; - } - }; - _a5 = kBodyTimeoutError; - var kResponseStatusCodeError = Symbol.for("undici.error.UND_ERR_RESPONSE_STATUS_CODE"); - var _a6; - var ResponseStatusCodeError = class extends UndiciError { - constructor(message, statusCode, headers, body) { - super(message); - __publicField(this, _a6, true); - 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; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kResponseStatusCodeError] === true; - } - }; - _a6 = kResponseStatusCodeError; - var kInvalidArgumentError = Symbol.for("undici.error.UND_ERR_INVALID_ARG"); - var _a7; - var InvalidArgumentError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a7, true); - this.name = "InvalidArgumentError"; - this.message = message || "Invalid Argument Error"; - this.code = "UND_ERR_INVALID_ARG"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kInvalidArgumentError] === true; - } - }; - _a7 = kInvalidArgumentError; - var kInvalidReturnValueError = Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE"); - var _a8; - var InvalidReturnValueError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a8, true); - this.name = "InvalidReturnValueError"; - this.message = message || "Invalid Return Value Error"; - this.code = "UND_ERR_INVALID_RETURN_VALUE"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kInvalidReturnValueError] === true; - } - }; - _a8 = kInvalidReturnValueError; - var kAbortError = Symbol.for("undici.error.UND_ERR_ABORT"); - var _a9; - var AbortError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a9, true); - this.name = "AbortError"; - this.message = message || "The operation was aborted"; - this.code = "UND_ERR_ABORT"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kAbortError] === true; - } - }; - _a9 = kAbortError; - var kRequestAbortedError = Symbol.for("undici.error.UND_ERR_ABORTED"); - var _a10; - var RequestAbortedError = class extends AbortError { - constructor(message) { - super(message); - __publicField(this, _a10, true); - this.name = "AbortError"; - this.message = message || "Request aborted"; - this.code = "UND_ERR_ABORTED"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kRequestAbortedError] === true; - } - }; - _a10 = kRequestAbortedError; - var kInformationalError = Symbol.for("undici.error.UND_ERR_INFO"); - var _a11; - var InformationalError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a11, true); - this.name = "InformationalError"; - this.message = message || "Request information"; - this.code = "UND_ERR_INFO"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kInformationalError] === true; - } - }; - _a11 = kInformationalError; - var kRequestContentLengthMismatchError = Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"); - var _a12; - var RequestContentLengthMismatchError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a12, true); - this.name = "RequestContentLengthMismatchError"; - this.message = message || "Request body length does not match content-length header"; - this.code = "UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kRequestContentLengthMismatchError] === true; - } - }; - _a12 = kRequestContentLengthMismatchError; - var kResponseContentLengthMismatchError = Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH"); - var _a13; - var ResponseContentLengthMismatchError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a13, true); - this.name = "ResponseContentLengthMismatchError"; - this.message = message || "Response body length does not match content-length header"; - this.code = "UND_ERR_RES_CONTENT_LENGTH_MISMATCH"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kResponseContentLengthMismatchError] === true; - } - }; - _a13 = kResponseContentLengthMismatchError; - var kClientDestroyedError = Symbol.for("undici.error.UND_ERR_DESTROYED"); - var _a14; - var ClientDestroyedError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a14, true); - this.name = "ClientDestroyedError"; - this.message = message || "The client is destroyed"; - this.code = "UND_ERR_DESTROYED"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kClientDestroyedError] === true; - } - }; - _a14 = kClientDestroyedError; - var kClientClosedError = Symbol.for("undici.error.UND_ERR_CLOSED"); - var _a15; - var ClientClosedError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a15, true); - this.name = "ClientClosedError"; - this.message = message || "The client is closed"; - this.code = "UND_ERR_CLOSED"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kClientClosedError] === true; - } - }; - _a15 = kClientClosedError; - var kSocketError = Symbol.for("undici.error.UND_ERR_SOCKET"); - var _a16; - var SocketError = class extends UndiciError { - constructor(message, socket) { - super(message); - __publicField(this, _a16, true); - this.name = "SocketError"; - this.message = message || "Socket error"; - this.code = "UND_ERR_SOCKET"; - this.socket = socket; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kSocketError] === true; - } - }; - _a16 = kSocketError; - var kNotSupportedError = Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED"); - var _a17; - var NotSupportedError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a17, true); - this.name = "NotSupportedError"; - this.message = message || "Not supported error"; - this.code = "UND_ERR_NOT_SUPPORTED"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kNotSupportedError] === true; - } - }; - _a17 = kNotSupportedError; - var kBalancedPoolMissingUpstreamError = Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM"); - var _a18; - var BalancedPoolMissingUpstreamError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a18, true); - this.name = "MissingUpstreamError"; - this.message = message || "No upstream has been added to the BalancedPool"; - this.code = "UND_ERR_BPL_MISSING_UPSTREAM"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kBalancedPoolMissingUpstreamError] === true; - } - }; - _a18 = kBalancedPoolMissingUpstreamError; - var kHTTPParserError = Symbol.for("undici.error.UND_ERR_HTTP_PARSER"); - var _a19; - var HTTPParserError = class extends Error { - constructor(message, code, data) { - super(message); - __publicField(this, _a19, true); - this.name = "HTTPParserError"; - this.code = code ? `HPE_${code}` : void 0; - this.data = data ? data.toString() : void 0; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kHTTPParserError] === true; - } - }; - _a19 = kHTTPParserError; - var kResponseExceededMaxSizeError = Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE"); - var _a20; - var ResponseExceededMaxSizeError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a20, true); - this.name = "ResponseExceededMaxSizeError"; - this.message = message || "Response content exceeded max size"; - this.code = "UND_ERR_RES_EXCEEDED_MAX_SIZE"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kResponseExceededMaxSizeError] === true; - } - }; - _a20 = kResponseExceededMaxSizeError; - var kRequestRetryError = Symbol.for("undici.error.UND_ERR_REQ_RETRY"); - var _a21; - var RequestRetryError = class extends UndiciError { - constructor(message, code, { headers, data }) { - super(message); - __publicField(this, _a21, true); - this.name = "RequestRetryError"; - this.message = message || "Request retry error"; - this.code = "UND_ERR_REQ_RETRY"; - this.statusCode = code; - this.data = data; - this.headers = headers; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kRequestRetryError] === true; - } - }; - _a21 = kRequestRetryError; - var kResponseError = Symbol.for("undici.error.UND_ERR_RESPONSE"); - var _a22; - var ResponseError = class extends UndiciError { - constructor(message, code, { headers, data }) { - super(message); - __publicField(this, _a22, true); - this.name = "ResponseError"; - this.message = message || "Response error"; - this.code = "UND_ERR_RESPONSE"; - this.statusCode = code; - this.data = data; - this.headers = headers; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kResponseError] === true; - } - }; - _a22 = kResponseError; - var kSecureProxyConnectionError = Symbol.for("undici.error.UND_ERR_PRX_TLS"); - var _a23; - var SecureProxyConnectionError = class extends UndiciError { - constructor(cause, message, options) { - super(message, __spreadValues({ cause }, options != null ? options : {})); - __publicField(this, _a23, true); - this.name = "SecureProxyConnectionError"; - this.message = message || "Secure Proxy Connection failed"; - this.code = "UND_ERR_PRX_TLS"; - this.cause = cause; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kSecureProxyConnectionError] === true; - } - }; - _a23 = kSecureProxyConnectionError; - var kMessageSizeExceededError = Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"); - var MessageSizeExceededError = class extends UndiciError { - constructor(message) { - super(message); - this.name = "MessageSizeExceededError"; - this.message = message || "Max decompressed message size exceeded"; - this.code = "UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kMessageSizeExceededError] === true; - } - get [kMessageSizeExceededError]() { - return true; - } - }; - module.exports = { - AbortError, - HTTPParserError, - UndiciError, - HeadersTimeoutError, - HeadersOverflowError, - BodyTimeoutError, - RequestContentLengthMismatchError, - ConnectTimeoutError, - ResponseStatusCodeError, - InvalidArgumentError, - InvalidReturnValueError, - RequestAbortedError, - ClientDestroyedError, - ClientClosedError, - InformationalError, - SocketError, - NotSupportedError, - ResponseContentLengthMismatchError, - BalancedPoolMissingUpstreamError, - ResponseExceededMaxSizeError, - RequestRetryError, - ResponseError, - SecureProxyConnectionError, - MessageSizeExceededError - }; - } - }); - - // - var require_constants = __commonJS({ - ""(exports, module) { - "use strict"; - var headerNameLowerCasedRecord = {}; - var 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; - } - Object.setPrototypeOf(headerNameLowerCasedRecord, null); - module.exports = { - wellknownHeaderNames, - headerNameLowerCasedRecord - }; - } - }); - - // - var require_tree = __commonJS({ - ""(exports, module) { - "use strict"; - var { - wellknownHeaderNames, - headerNameLowerCasedRecord - } = require_constants(); - var TstNode = class _TstNode { - /** - * @param {string} key - * @param {any} value - * @param {number} index - */ - constructor(key, value, index) { - /** @type {any} */ - __publicField(this, "value", null); - /** @type {null | TstNode} */ - __publicField(this, "left", null); - /** @type {null | TstNode} */ - __publicField(this, "middle", null); - /** @type {null | TstNode} */ - __publicField(this, "right", null); - /** @type {number} */ - __publicField(this, "code"); - if (index === void 0 || index >= key.length) { - throw new TypeError("Unreachable"); - } - const code = this.code = key.charCodeAt(index); - if (code > 127) { - throw new TypeError("key must be ascii string"); - } - if (key.length !== ++index) { - this.middle = new _TstNode(key, value, index); - } else { - this.value = value; - } - } - /** - * @param {string} key - * @param {any} value - */ - add(key, value) { - const length = key.length; - if (length === 0) { - throw new TypeError("Unreachable"); - } - let index = 0; - let node = this; - while (true) { - const code = key.charCodeAt(index); - if (code > 127) { - throw new TypeError("key must be ascii string"); - } - if (node.code === code) { - if (length === ++index) { - node.value = value; - break; - } else if (node.middle !== null) { - node = node.middle; - } else { - node.middle = new _TstNode(key, value, index); - break; - } - } else if (node.code < code) { - if (node.left !== null) { - node = node.left; - } else { - node.left = new _TstNode(key, value, index); - break; - } - } else if (node.right !== null) { - node = node.right; - } else { - node.right = new _TstNode(key, value, index); - break; - } - } - } - /** - * @param {Uint8Array} key - * @return {TstNode | null} - */ - search(key) { - const keylength = key.length; - let index = 0; - let node = this; - while (node !== null && index < keylength) { - let code = key[index]; - if (code <= 90 && code >= 65) { - code |= 32; - } - while (node !== null) { - if (code === node.code) { - if (keylength === ++index) { - return node; - } - node = node.middle; - break; - } - node = node.code < code ? node.left : node.right; - } - } - return null; - } - }; - var TernarySearchTree = class { - constructor() { - /** @type {TstNode | null} */ - __publicField(this, "node", null); - } - /** - * @param {string} key - * @param {any} value - * */ - insert(key, value) { - if (this.node === null) { - this.node = new TstNode(key, value, 0); - } else { - this.node.add(key, value); - } - } - /** - * @param {Uint8Array} key - * @return {any} - */ - lookup(key) { - var _a, _b, _c; - return (_c = (_b = (_a = this.node) == null ? void 0 : _a.search(key)) == null ? void 0 : _b.value) != null ? _c : null; - } - }; - var tree = new TernarySearchTree(); - for (let i = 0; i < wellknownHeaderNames.length; ++i) { - const key = headerNameLowerCasedRecord[wellknownHeaderNames[i]]; - tree.insert(key, key); - } - module.exports = { - TernarySearchTree, - tree - }; - } - }); - - // - var require_util = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { kDestroyed, kBodyUsed, kListeners, kBody } = require_symbols(); - var { IncomingMessage } = __require("http"); - var stream = __require("stream"); - var net = __require("net"); - var { Blob: Blob2 } = __require("buffer"); - var nodeUtil = __require("util"); - var { stringify } = __require("querystring"); - var { EventEmitter: EE } = __require("events"); - var { InvalidArgumentError } = require_errors(); - var { headerNameLowerCasedRecord } = require_constants(); - var { tree } = require_tree(); - var [nodeMajor, nodeMinor] = process.versions.node.split(".").map((v) => Number(v)); - var BodyAsyncIterable = class { - constructor(body) { - this[kBody] = body; - this[kBodyUsed] = false; - } - [Symbol.asyncIterator]() { - return __asyncGenerator(this, null, function* () { - assert(!this[kBodyUsed], "disturbed"); - this[kBodyUsed] = true; - yield* __yieldStar(this[kBody]); - }); - } - }; - function wrapRequestBody(body) { - if (isStream(body)) { - if (bodyLength(body) === 0) { - body.on("data", function() { - assert(false); - }); - } - if (typeof body.readableDidRead !== "boolean") { - body[kBodyUsed] = false; - EE.prototype.on.call(body, "data", function() { - this[kBodyUsed] = true; - }); - } - return body; - } else if (body && typeof body.pipeTo === "function") { - return new BodyAsyncIterable(body); - } else if (body && typeof body !== "string" && !ArrayBuffer.isView(body) && isIterable(body)) { - return new BodyAsyncIterable(body); - } else { - return body; - } - } - function nop() { - } - function isStream(obj) { - return obj && typeof obj === "object" && typeof obj.pipe === "function" && typeof obj.on === "function"; - } - function isBlobLike(object) { - if (object === null) { - return false; - } else if (object instanceof Blob2) { - return true; - } else if (typeof object !== "object") { - return false; - } else { - const sTag = object[Symbol.toStringTag]; - return (sTag === "Blob" || sTag === "File") && ("stream" in object && typeof object.stream === "function" || "arrayBuffer" in object && typeof object.arrayBuffer === "function"); - } - } - 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 isValidPort(port) { - const value = parseInt(port, 10); - return value === Number(port) && value >= 0 && value <= 65535; - } - function isHttpOrHttpsPrefixed(value) { - return value != null && value[0] === "h" && value[1] === "t" && value[2] === "t" && value[3] === "p" && (value[4] === ":" || value[4] === "s" && value[5] === ":"); - } - function parseURL(url) { - if (typeof url === "string") { - url = new URL(url); - if (!isHttpOrHttpsPrefixed(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 (!(url instanceof URL)) { - if (url.port != null && url.port !== "" && isValidPort(url.port) === false) { - 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."); - } - if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) { - throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`."); - } - 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 path5 = url.path != null ? url.path : `${url.pathname || ""}${url.search || ""}`; - if (origin[origin.length - 1] === "/") { - origin = origin.slice(0, origin.length - 1); - } - if (path5 && path5[0] !== "/") { - path5 = `/${path5}`; - } - return new URL(`${origin}${path5}`); - } - if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) { - throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`."); - } - 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 idx2 = host.indexOf("]"); - assert(idx2 !== -1); - return host.substring(1, idx2); - } - const idx = host.indexOf(":"); - if (idx === -1) - return host; - return host.substring(0, idx); - } - function getServerName(host) { - if (!host) { - return null; - } - assert(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(body) { - var _a; - return body && !!(body.destroyed || body[kDestroyed] || ((_a = stream.isDestroyed) == null ? void 0 : _a.call(stream, body))); - } - function destroy(stream2, err) { - if (stream2 == null || !isStream(stream2) || isDestroyed(stream2)) { - return; - } - if (typeof stream2.destroy === "function") { - if (Object.getPrototypeOf(stream2).constructor === IncomingMessage) { - stream2.socket = null; - } - stream2.destroy(err); - } else if (err) { - queueMicrotask(() => { - stream2.emit("error", err); - }); - } - if (stream2.destroyed !== true) { - stream2[kDestroyed] = true; - } - } - var KEEPALIVE_TIMEOUT_EXPR = /timeout=(\d+)/; - function parseKeepAliveTimeout(val) { - const m = val.toString().match(KEEPALIVE_TIMEOUT_EXPR); - return m ? parseInt(m[1], 10) * 1e3 : null; - } - function headerNameToString(value) { - var _a, _b; - return typeof value === "string" ? (_a = headerNameLowerCasedRecord[value]) != null ? _a : value.toLowerCase() : (_b = tree.lookup(value)) != null ? _b : value.toString("latin1").toLowerCase(); - } - function bufferToLowerCasedHeaderName(value) { - var _a; - return (_a = tree.lookup(value)) != null ? _a : value.toString("latin1").toLowerCase(); - } - function parseHeaders(headers, obj) { - if (obj === void 0) - obj = {}; - for (let i = 0; i < headers.length; i += 2) { - const key = headerNameToString(headers[i]); - let val = obj[key]; - if (val) { - if (typeof val === "string") { - val = [val]; - obj[key] = val; - } - val.push(headers[i + 1].toString("utf8")); - } else { - const headersValue = headers[i + 1]; - if (typeof headersValue === "string") { - obj[key] = headersValue; - } else { - obj[key] = Array.isArray(headersValue) ? headersValue.map((x) => x.toString("utf8")) : headersValue.toString("utf8"); - } - } - } - 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 len = headers.length; - const ret = new Array(len); - let hasContentLength = false; - let contentDispositionIdx = -1; - let key; - let val; - let kLen = 0; - for (let n = 0; n < headers.length; n += 2) { - key = headers[n]; - val = headers[n + 1]; - typeof key !== "string" && (key = key.toString()); - typeof val !== "string" && (val = val.toString("utf8")); - kLen = key.length; - if (kLen === 14 && key[7] === "-" && (key === "content-length" || key.toLowerCase() === "content-length")) { - hasContentLength = true; - } else if (kLen === 19 && key[7] === "-" && (key === "content-disposition" || key.toLowerCase() === "content-disposition")) { - contentDispositionIdx = n + 1; - } - ret[n] = key; - ret[n + 1] = val; - } - if (hasContentLength && contentDispositionIdx !== -1) { - ret[contentDispositionIdx] = Buffer.from(ret[contentDispositionIdx]).toString("latin1"); - } - return ret; - } - function isBuffer(buffer) { - 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 !== void 0) { - 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"); - } - } - } - function isDisturbed(body) { - return !!(body && (stream.isDisturbed(body) || body[kBodyUsed])); - } - function isErrored(body) { - return !!(body && stream.isErrored(body)); - } - function isReadable(body) { - return !!(body && stream.isReadable(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 - }; - } - function ReadableStreamFrom(iterable) { - let iterator; - return new ReadableStream( - { - start() { - return __async(this, null, function* () { - iterator = iterable[Symbol.asyncIterator](); - }); - }, - pull(controller) { - return __async(this, null, function* () { - const { done, value } = yield iterator.next(); - if (done) { - queueMicrotask(() => { - var _a2; - controller.close(); - (_a2 = controller.byobRequest) == null ? void 0 : _a2.respond(0); - }); - } else { - const buf = Buffer.isBuffer(value) ? value : Buffer.from(value); - if (buf.byteLength) { - controller.enqueue(new Uint8Array(buf)); - } - } - return controller.desiredSize > 0; - }); - }, - cancel(reason) { - return __async(this, null, function* () { - yield iterator.return(); - }); - }, - type: "bytes" - } - ); - } - 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 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); - } - var hasToWellFormed = typeof String.prototype.toWellFormed === "function"; - var hasIsWellFormed = typeof String.prototype.isWellFormed === "function"; - function toUSVString(val) { - return hasToWellFormed ? `${val}`.toWellFormed() : nodeUtil.toUSVString(val); - } - function isUSVString(val) { - return hasIsWellFormed ? `${val}`.isWellFormed() : toUSVString(val) === `${val}`; - } - function isTokenCharCode(c) { - switch (c) { - case 34: - case 40: - case 41: - case 44: - case 47: - case 58: - case 59: - case 60: - case 61: - case 62: - case 63: - case 64: - case 91: - case 92: - case 93: - case 123: - case 125: - return false; - default: - return c >= 33 && c <= 126; - } - } - 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; - } - var headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/; - function isValidHeaderValue(characters) { - return !headerCharRegex.test(characters); - } - 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; - } - function addListener(obj, name, listener) { - var _a; - const listeners = (_a = obj[kListeners]) != null ? _a : obj[kListeners] = []; - listeners.push([name, listener]); - obj.on(name, listener); - return obj; - } - function removeAllListeners(obj) { - var _a; - for (const [name, listener] of (_a = obj[kListeners]) != null ? _a : []) { - obj.removeListener(name, listener); - } - obj[kListeners] = null; - } - function errorRequest(client, request, err) { - try { - request.onError(err); - assert(request.aborted); - } catch (err2) { - client.emit("error", err2); - } - } - var kEnumerableProperty = /* @__PURE__ */ Object.create(null); - kEnumerableProperty.enumerable = true; - var normalizedMethodRecordsBase = { - delete: "DELETE", - DELETE: "DELETE", - get: "GET", - GET: "GET", - head: "HEAD", - HEAD: "HEAD", - options: "OPTIONS", - OPTIONS: "OPTIONS", - post: "POST", - POST: "POST", - put: "PUT", - PUT: "PUT" - }; - var normalizedMethodRecords = __spreadProps(__spreadValues({}, normalizedMethodRecordsBase), { - patch: "patch", - PATCH: "PATCH" - }); - Object.setPrototypeOf(normalizedMethodRecordsBase, null); - Object.setPrototypeOf(normalizedMethodRecords, null); - module.exports = { - kEnumerableProperty, - nop, - isDisturbed, - isErrored, - isReadable, - toUSVString, - isUSVString, - isBlobLike, - parseOrigin, - parseURL, - getServerName, - isStream, - isIterable, - isAsyncIterable, - isDestroyed, - headerNameToString, - bufferToLowerCasedHeaderName, - addListener, - removeAllListeners, - errorRequest, - parseRawHeaders, - parseHeaders, - parseKeepAliveTimeout, - destroy, - bodyLength, - deepClone, - ReadableStreamFrom, - isBuffer, - validateHandler, - getSocketInfo, - isFormDataLike, - buildURL, - addAbortListener, - isValidHTTPToken, - isValidHeaderValue, - isTokenCharCode, - parseRangeHeader, - normalizedMethodRecordsBase, - normalizedMethodRecords, - isValidPort, - isHttpOrHttpsPrefixed, - nodeMajor, - nodeMinor, - safeHTTPMethods: ["GET", "HEAD", "OPTIONS", "TRACE"], - wrapRequestBody - }; - } - }); - - // - var require_diagnostics = __commonJS({ - ""(exports, module) { - "use strict"; - var diagnosticsChannel = __require("diagnostics_channel"); - var util = __require("util"); - var undiciDebugLog = util.debuglog("undici"); - var fetchDebuglog = util.debuglog("fetch"); - var websocketDebuglog = util.debuglog("websocket"); - var isClientSet = false; - var channels = { - // Client - beforeConnect: diagnosticsChannel.channel("undici:client:beforeConnect"), - connected: diagnosticsChannel.channel("undici:client:connected"), - connectError: diagnosticsChannel.channel("undici:client:connectError"), - sendHeaders: diagnosticsChannel.channel("undici:client:sendHeaders"), - // Request - create: diagnosticsChannel.channel("undici:request:create"), - bodySent: diagnosticsChannel.channel("undici:request:bodySent"), - headers: diagnosticsChannel.channel("undici:request:headers"), - trailers: diagnosticsChannel.channel("undici:request:trailers"), - error: diagnosticsChannel.channel("undici:request:error"), - // WebSocket - open: diagnosticsChannel.channel("undici:websocket:open"), - close: diagnosticsChannel.channel("undici:websocket:close"), - socketError: diagnosticsChannel.channel("undici:websocket:socket_error"), - ping: diagnosticsChannel.channel("undici:websocket:ping"), - pong: diagnosticsChannel.channel("undici:websocket:pong") - }; - if (undiciDebugLog.enabled || fetchDebuglog.enabled) { - const debuglog = fetchDebuglog.enabled ? fetchDebuglog : undiciDebugLog; - diagnosticsChannel.channel("undici:client:beforeConnect").subscribe((evt) => { - const { - connectParams: { version, protocol, port, host } - } = evt; - debuglog( - "connecting to %s using %s%s", - `${host}${port ? `:${port}` : ""}`, - protocol, - version - ); - }); - diagnosticsChannel.channel("undici:client:connected").subscribe((evt) => { - const { - connectParams: { version, protocol, port, host } - } = evt; - debuglog( - "connected to %s using %s%s", - `${host}${port ? `:${port}` : ""}`, - protocol, - version - ); - }); - diagnosticsChannel.channel("undici:client:connectError").subscribe((evt) => { - const { - connectParams: { version, protocol, port, host }, - error - } = evt; - debuglog( - "connection to %s using %s%s errored - %s", - `${host}${port ? `:${port}` : ""}`, - protocol, - version, - error.message - ); - }); - diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => { - const { - request: { method, path: path5, origin } - } = evt; - debuglog("sending request to %s %s/%s", method, origin, path5); - }); - diagnosticsChannel.channel("undici:request:headers").subscribe((evt) => { - const { - request: { method, path: path5, origin }, - response: { statusCode } - } = evt; - debuglog( - "received response to %s %s/%s - HTTP %d", - method, - origin, - path5, - statusCode - ); - }); - diagnosticsChannel.channel("undici:request:trailers").subscribe((evt) => { - const { - request: { method, path: path5, origin } - } = evt; - debuglog("trailers received from %s %s/%s", method, origin, path5); - }); - diagnosticsChannel.channel("undici:request:error").subscribe((evt) => { - const { - request: { method, path: path5, origin }, - error - } = evt; - debuglog( - "request to %s %s/%s errored - %s", - method, - origin, - path5, - error.message - ); - }); - isClientSet = true; - } - if (websocketDebuglog.enabled) { - if (!isClientSet) { - const debuglog = undiciDebugLog.enabled ? undiciDebugLog : websocketDebuglog; - diagnosticsChannel.channel("undici:client:beforeConnect").subscribe((evt) => { - const { - connectParams: { version, protocol, port, host } - } = evt; - debuglog( - "connecting to %s%s using %s%s", - host, - port ? `:${port}` : "", - protocol, - version - ); - }); - diagnosticsChannel.channel("undici:client:connected").subscribe((evt) => { - const { - connectParams: { version, protocol, port, host } - } = evt; - debuglog( - "connected to %s%s using %s%s", - host, - port ? `:${port}` : "", - protocol, - version - ); - }); - diagnosticsChannel.channel("undici:client:connectError").subscribe((evt) => { - const { - connectParams: { version, protocol, port, host }, - error - } = evt; - debuglog( - "connection to %s%s using %s%s errored - %s", - host, - port ? `:${port}` : "", - protocol, - version, - error.message - ); - }); - diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => { - const { - request: { method, path: path5, origin } - } = evt; - debuglog("sending request to %s %s/%s", method, origin, path5); - }); - } - diagnosticsChannel.channel("undici:websocket:open").subscribe((evt) => { - const { - address: { address, port } - } = evt; - websocketDebuglog("connection opened %s%s", address, port ? `:${port}` : ""); - }); - diagnosticsChannel.channel("undici:websocket:close").subscribe((evt) => { - const { websocket, code, reason } = evt; - websocketDebuglog( - "closed connection to %s - %s %s", - websocket.url, - code, - reason - ); - }); - diagnosticsChannel.channel("undici:websocket:socket_error").subscribe((err) => { - websocketDebuglog("connection errored - %s", err.message); - }); - diagnosticsChannel.channel("undici:websocket:ping").subscribe((evt) => { - websocketDebuglog("ping received"); - }); - diagnosticsChannel.channel("undici:websocket:pong").subscribe((evt) => { - websocketDebuglog("pong received"); - }); - } - module.exports = { - channels - }; - } - }); - - // - var require_request = __commonJS({ - ""(exports, module) { - "use strict"; - var { - InvalidArgumentError, - NotSupportedError - } = require_errors(); - var assert = __require("assert"); - var { - isValidHTTPToken, - isValidHeaderValue, - isStream, - destroy, - isBuffer, - isFormDataLike, - isIterable, - isBlobLike, - buildURL, - validateHandler, - getServerName, - normalizedMethodRecords - } = require_util(); - var { channels } = require_diagnostics(); - var { headerNameLowerCasedRecord } = require_constants(); - var invalidPathRegex = /[^\u0021-\u00ff]/; - var kHandler = Symbol("handler"); - var Request = class { - constructor(origin, { - path: path5, - method, - body, - headers, - query, - idempotent, - blocking, - upgrade, - headersTimeout, - bodyTimeout, - reset, - throwOnError, - expectContinue, - servername - }, handler) { - if (typeof path5 !== "string") { - throw new InvalidArgumentError("path must be a string"); - } else if (path5[0] !== "/" && !(path5.startsWith("http://") || path5.startsWith("https://")) && method !== "CONNECT") { - throw new InvalidArgumentError("path must be an absolute URL or start with a slash"); - } else if (invalidPathRegex.test(path5)) { - throw new InvalidArgumentError("invalid request path"); - } - if (typeof method !== "string") { - throw new InvalidArgumentError("method must be a string"); - } else if (normalizedMethodRecords[method] === void 0 && !isValidHTTPToken(method)) { - throw new InvalidArgumentError("invalid request method"); - } - if (upgrade && typeof upgrade !== "string") { - throw new InvalidArgumentError("upgrade must be a string"); - } - if (upgrade && !isValidHeaderValue(upgrade)) { - throw new InvalidArgumentError("invalid upgrade header"); - } - 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 (isStream(body)) { - this.body = body; - const rState = this.body._readableState; - if (!rState || !rState.autoDestroy) { - this.endHandler = function autoDestroy() { - 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 (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 (isFormDataLike(body) || isIterable(body) || 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 ? buildURL(path5, query) : path5; - 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 = []; - 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") { - if (headers[Symbol.iterator]) { - for (const header of headers) { - if (!Array.isArray(header) || header.length !== 2) { - throw new InvalidArgumentError("headers must be in key-value pair format"); - } - processHeader(this, header[0], header[1]); - } - } else { - const keys = Object.keys(headers); - for (let i = 0; i < keys.length; ++i) { - processHeader(this, keys[i], headers[keys[i]]); - } - } - } else if (headers != null) { - throw new InvalidArgumentError("headers must be an object or an array"); - } - validateHandler(handler, method, upgrade); - this.servername = servername || 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); - } - } - onResponseStarted() { - var _a, _b; - return (_b = (_a = this[kHandler]).onResponseStarted) == null ? void 0 : _b.call(_a); - } - 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) { - 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; - } - } - addHeader(key, value) { - processHeader(this, key, value); - return this; - } - }; - function processHeader(request, key, val) { - if (val && (typeof val === "object" && !Array.isArray(val))) { - throw new InvalidArgumentError(`invalid ${key} header`); - } else if (val === void 0) { - return; - } - let headerName = headerNameLowerCasedRecord[key]; - if (headerName === void 0) { - headerName = key.toLowerCase(); - if (headerNameLowerCasedRecord[headerName] === void 0 && !isValidHTTPToken(headerName)) { - throw new InvalidArgumentError("invalid header key"); - } - } - if (Array.isArray(val)) { - const arr = []; - for (let i = 0; i < val.length; i++) { - if (typeof val[i] === "string") { - if (!isValidHeaderValue(val[i])) { - throw new InvalidArgumentError(`invalid ${key} header`); - } - arr.push(val[i]); - } else if (val[i] === null) { - arr.push(""); - } else if (typeof val[i] === "object") { - throw new InvalidArgumentError(`invalid ${key} header`); - } else { - const str = `${val[i]}`; - if (!isValidHeaderValue(str)) { - throw new InvalidArgumentError(`invalid ${key} header`); - } - arr.push(str); - } - } - val = arr; - } else if (typeof val === "string") { - if (!isValidHeaderValue(val)) { - throw new InvalidArgumentError(`invalid ${key} header`); - } - } else if (val === null) { - val = ""; - } else { - val = `${val}`; - if (!isValidHeaderValue(val)) { - throw new InvalidArgumentError(`invalid ${key} header`); - } - } - if (headerName === "host") { - if (request.host !== null) { - throw new InvalidArgumentError("duplicate host header"); - } - if (typeof val !== "string") { - throw new InvalidArgumentError("invalid host header"); - } - request.host = val; - } else if (headerName === "content-length") { - if (request.contentLength !== null) { - throw new InvalidArgumentError("duplicate content-length header"); - } - request.contentLength = parseInt(val, 10); - if (!Number.isFinite(request.contentLength)) { - throw new InvalidArgumentError("invalid content-length header"); - } - } else if (request.contentType === null && headerName === "content-type") { - request.contentType = val; - request.headers.push(key, val); - } else if (headerName === "transfer-encoding" || headerName === "keep-alive" || headerName === "upgrade") { - throw new InvalidArgumentError(`invalid ${headerName} header`); - } else if (headerName === "connection") { - const value = typeof val === "string" ? val.toLowerCase() : null; - if (value !== "close" && value !== "keep-alive") { - throw new InvalidArgumentError("invalid connection header"); - } - if (value === "close") { - request.reset = true; - } - } else if (headerName === "expect") { - throw new NotSupportedError("expect header not supported"); - } else { - request.headers.push(key, val); - } - } - module.exports = Request; - } - }); - - // - var require_dispatcher = __commonJS({ - ""(exports, module) { - "use strict"; - var EventEmitter2 = __require("events"); - var Dispatcher = class extends EventEmitter2 { - dispatch() { - throw new Error("not implemented"); - } - close() { - throw new Error("not implemented"); - } - destroy() { - throw new Error("not implemented"); - } - compose(...args) { - const interceptors = Array.isArray(args[0]) ? args[0] : args; - let dispatch = this.dispatch.bind(this); - for (const interceptor of interceptors) { - if (interceptor == null) { - continue; - } - if (typeof interceptor !== "function") { - throw new TypeError(`invalid interceptor, expected function received ${typeof interceptor}`); - } - dispatch = interceptor(dispatch); - if (dispatch == null || typeof dispatch !== "function" || dispatch.length !== 2) { - throw new TypeError("invalid interceptor"); - } - } - return new ComposedDispatcher(this, dispatch); - } - }; - var _dispatcher, _dispatch; - var ComposedDispatcher = class extends Dispatcher { - constructor(dispatcher, dispatch) { - super(); - __privateAdd(this, _dispatcher, null); - __privateAdd(this, _dispatch, null); - __privateSet(this, _dispatcher, dispatcher); - __privateSet(this, _dispatch, dispatch); - } - dispatch(...args) { - __privateGet(this, _dispatch).call(this, ...args); - } - close(...args) { - return __privateGet(this, _dispatcher).close(...args); - } - destroy(...args) { - return __privateGet(this, _dispatcher).destroy(...args); - } - }; - _dispatcher = new WeakMap(); - _dispatch = new WeakMap(); - module.exports = Dispatcher; - } - }); - - // - var require_dispatcher_base = __commonJS({ - ""(exports, module) { - "use strict"; - var Dispatcher = require_dispatcher(); - var { - ClientDestroyedError, - ClientClosedError, - InvalidArgumentError - } = require_errors(); - var { kDestroy, kClose, kClosed, kDestroyed, kDispatch, kInterceptors } = require_symbols(); - var kOnDestroyed = Symbol("onDestroyed"); - var kOnClosed = Symbol("onClosed"); - var kInterceptedDispatch = Symbol("Intercepted Dispatch"); - var kWebSocketOptions = Symbol("webSocketOptions"); - var DispatcherBase = class extends Dispatcher { - constructor(opts) { - var _a; - super(); - this[kDestroyed] = false; - this[kOnDestroyed] = null; - this[kClosed] = false; - this[kOnClosed] = []; - this[kWebSocketOptions] = (_a = opts == null ? void 0 : opts.webSocket) != null ? _a : {}; - } - get webSocketOptions() { - var _a, _b; - return { - maxFragments: (_a = this[kWebSocketOptions].maxFragments) != null ? _a : 131072, - maxPayloadSize: (_b = this[kWebSocketOptions].maxPayloadSize) != null ? _b : 128 * 1024 * 1024 - }; - } - 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 === void 0) { - return new Promise((resolve2, reject) => { - this.close((err, data) => { - return err ? reject(err) : resolve2(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); - } - }; - this[kClose]().then(() => this.destroy()).then(() => { - queueMicrotask(onClosed); - }); - } - destroy(err, callback) { - if (typeof err === "function") { - callback = err; - err = null; - } - if (callback === void 0) { - return new Promise((resolve2, reject) => { - this.destroy(err, (err2, data) => { - return err2 ? ( - /* istanbul ignore next: should never error */ - reject(err2) - ) : resolve2(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); - } - }; - 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; - } - }); - - // - var require_timers = __commonJS({ - ""(exports, module) { - "use strict"; - var fastNow = 0; - var RESOLUTION_MS = 1e3; - var TICK_MS = (RESOLUTION_MS >> 1) - 1; - var fastNowTimeout; - var kFastTimer = Symbol("kFastTimer"); - var fastTimers = []; - var NOT_IN_LIST = -2; - var TO_BE_CLEARED = -1; - var PENDING = 0; - var ACTIVE = 1; - function onTick() { - fastNow += TICK_MS; - let idx = 0; - let len = fastTimers.length; - while (idx < len) { - const timer = fastTimers[idx]; - if (timer._state === PENDING) { - timer._idleStart = fastNow - TICK_MS; - timer._state = ACTIVE; - } else if (timer._state === ACTIVE && fastNow >= timer._idleStart + timer._idleTimeout) { - timer._state = TO_BE_CLEARED; - timer._idleStart = -1; - timer._onTimeout(timer._timerArg); - } - if (timer._state === TO_BE_CLEARED) { - timer._state = NOT_IN_LIST; - if (--len !== 0) { - fastTimers[idx] = fastTimers[len]; - } - } else { - ++idx; - } - } - fastTimers.length = len; - if (fastTimers.length !== 0) { - refreshTimeout(); - } - } - function refreshTimeout() { - if (fastNowTimeout) { - fastNowTimeout.refresh(); - } else { - clearTimeout(fastNowTimeout); - fastNowTimeout = setTimeout(onTick, TICK_MS); - if (fastNowTimeout.unref) { - fastNowTimeout.unref(); - } - } - } - var _a; - var FastTimer = class { - /** - * @constructor - * @param {Function} callback A function to be executed after the timer - * expires. - * @param {number} delay The time, in milliseconds that the timer should wait - * before the specified function or code is executed. - * @param {*} arg - */ - constructor(callback, delay, arg) { - __publicField(this, _a, true); - /** - * The state of the timer, which can be one of the following: - * - NOT_IN_LIST (-2) - * - TO_BE_CLEARED (-1) - * - PENDING (0) - * - ACTIVE (1) - * - * @type {-2|-1|0|1} - * @private - */ - __publicField(this, "_state", NOT_IN_LIST); - /** - * The number of milliseconds to wait before calling the callback. - * - * @type {number} - * @private - */ - __publicField(this, "_idleTimeout", -1); - /** - * The time in milliseconds when the timer was started. This value is used to - * calculate when the timer should expire. - * - * @type {number} - * @default -1 - * @private - */ - __publicField(this, "_idleStart", -1); - /** - * The function to be executed when the timer expires. - * @type {Function} - * @private - */ - __publicField(this, "_onTimeout"); - /** - * The argument to be passed to the callback when the timer expires. - * - * @type {*} - * @private - */ - __publicField(this, "_timerArg"); - this._onTimeout = callback; - this._idleTimeout = delay; - this._timerArg = arg; - this.refresh(); - } - /** - * Sets the timer's start time to the current time, and reschedules the timer - * to call its callback at the previously specified duration adjusted to the - * current time. - * Using this on a timer that has already called its callback will reactivate - * the timer. - * - * @returns {void} - */ - refresh() { - if (this._state === NOT_IN_LIST) { - fastTimers.push(this); - } - if (!fastNowTimeout || fastTimers.length === 1) { - refreshTimeout(); - } - this._state = PENDING; - } - /** - * The `clear` method cancels the timer, preventing it from executing. - * - * @returns {void} - * @private - */ - clear() { - this._state = TO_BE_CLEARED; - this._idleStart = -1; - } - }; - _a = kFastTimer; - module.exports = { - /** - * The setTimeout() method sets a timer which executes a function once the - * timer expires. - * @param {Function} callback A function to be executed after the timer - * expires. - * @param {number} delay The time, in milliseconds that the timer should - * wait before the specified function or code is executed. - * @param {*} [arg] An optional argument to be passed to the callback function - * when the timer expires. - * @returns {NodeJS.Timeout|FastTimer} - */ - setTimeout(callback, delay, arg) { - return delay <= RESOLUTION_MS ? setTimeout(callback, delay, arg) : new FastTimer(callback, delay, arg); - }, - /** - * The clearTimeout method cancels an instantiated Timer previously created - * by calling setTimeout. - * - * @param {NodeJS.Timeout|FastTimer} timeout - */ - clearTimeout(timeout) { - if (timeout[kFastTimer]) { - timeout.clear(); - } else { - clearTimeout(timeout); - } - }, - /** - * The setFastTimeout() method sets a fastTimer which executes a function once - * the timer expires. - * @param {Function} callback A function to be executed after the timer - * expires. - * @param {number} delay The time, in milliseconds that the timer should - * wait before the specified function or code is executed. - * @param {*} [arg] An optional argument to be passed to the callback function - * when the timer expires. - * @returns {FastTimer} - */ - setFastTimeout(callback, delay, arg) { - return new FastTimer(callback, delay, arg); - }, - /** - * The clearTimeout method cancels an instantiated FastTimer previously - * created by calling setFastTimeout. - * - * @param {FastTimer} timeout - */ - clearFastTimeout(timeout) { - timeout.clear(); - }, - /** - * The now method returns the value of the internal fast timer clock. - * - * @returns {number} - */ - now() { - return fastNow; - }, - /** - * Trigger the onTick function to process the fastTimers array. - * Exported for testing purposes only. - * Marking as deprecated to discourage any use outside of testing. - * @deprecated - * @param {number} [delay=0] The delay in milliseconds to add to the now value. - */ - tick(delay = 0) { - fastNow += delay - RESOLUTION_MS + 1; - onTick(); - onTick(); - }, - /** - * Reset FastTimers. - * Exported for testing purposes only. - * Marking as deprecated to discourage any use outside of testing. - * @deprecated - */ - reset() { - fastNow = 0; - fastTimers.length = 0; - clearTimeout(fastNowTimeout); - fastNowTimeout = null; - }, - /** - * Exporting for testing purposes only. - * Marking as deprecated to discourage any use outside of testing. - * @deprecated - */ - kFastTimer - }; - } - }); - - // - var require_connect = __commonJS({ - ""(exports, module) { - "use strict"; - var net = __require("net"); - var assert = __require("assert"); - var util = require_util(); - var { InvalidArgumentError, ConnectTimeoutError } = require_errors(); - var timers = require_timers(); - function noop() { - } - var tls; - var SessionCache; - if (global.FinalizationRegistry && !(process.env.NODE_V8_COVERAGE || process.env.UNDICI_NO_FG)) { - SessionCache = class WeakSessionCache { - constructor(maxCachedSessions) { - this._maxCachedSessions = maxCachedSessions; - this._sessionCache = /* @__PURE__ */ new Map(); - this._sessionRegistry = new global.FinalizationRegistry((key) => { - if (this._sessionCache.size < this._maxCachedSessions) { - return; - } - const ref = this._sessionCache.get(key); - if (ref !== void 0 && ref.deref() === void 0) { - 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 = /* @__PURE__ */ new Map(); - } - get(sessionKey) { - return this._sessionCache.get(sessionKey); - } - set(sessionKey, session) { - if (this._maxCachedSessions === 0) { - return; - } - if (this._sessionCache.size >= this._maxCachedSessions) { - const { value: oldestKey } = this._sessionCache.keys().next(); - this._sessionCache.delete(oldestKey); - } - this._sessionCache.set(sessionKey, session); - } - }; - } - function buildConnector(_a) { - var _b = _a, { allowH2, maxCachedSessions, socketPath, timeout, session: customSession } = _b, opts = __objRest(_b, ["allowH2", "maxCachedSessions", "socketPath", "timeout", "session"]); - if (maxCachedSessions != null && (!Number.isInteger(maxCachedSessions) || maxCachedSessions < 0)) { - throw new InvalidArgumentError("maxCachedSessions must be a positive integer or zero"); - } - const options = __spreadValues({ path: socketPath }, opts); - const sessionCache = new SessionCache(maxCachedSessions == null ? 100 : maxCachedSessions); - timeout = timeout == null ? 1e4 : 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 = __require("tls"); - } - servername = servername || options.servername || util.getServerName(host) || null; - const sessionKey = servername || hostname; - assert(sessionKey); - const session = customSession || sessionCache.get(sessionKey) || null; - port = port || 443; - socket = tls.connect(__spreadProps(__spreadValues({ - highWaterMark: 16384 - }, 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, - host: hostname - })); - socket.on("session", function(session2) { - sessionCache.set(sessionKey, session2); - }); - } else { - assert(!httpSocket, "httpSocket can only be sent on TLS update"); - port = port || 80; - socket = net.connect(__spreadProps(__spreadValues({ - highWaterMark: 64 * 1024 - }, options), { - localAddress, - port, - host: hostname - })); - } - if (options.keepAlive == null || options.keepAlive) { - const keepAliveInitialDelay = options.keepAliveInitialDelay === void 0 ? 6e4 : options.keepAliveInitialDelay; - socket.setKeepAlive(true, keepAliveInitialDelay); - } - const clearConnectTimeout = setupConnectTimeout(new WeakRef(socket), { timeout, hostname, port }); - socket.setNoDelay(true).once(protocol === "https:" ? "secureConnect" : "connect", function() { - queueMicrotask(clearConnectTimeout); - if (callback) { - const cb = callback; - callback = null; - cb(null, this); - } - }).on("error", function(err) { - queueMicrotask(clearConnectTimeout); - if (callback) { - const cb = callback; - callback = null; - cb(err); - } - }); - return socket; - }; - } - var setupConnectTimeout = process.platform === "win32" ? (socketWeakRef, opts) => { - if (!opts.timeout) { - return noop; - } - let s1 = null; - let s2 = null; - const fastTimer = timers.setFastTimeout(() => { - s1 = setImmediate(() => { - s2 = setImmediate(() => onConnectTimeout(socketWeakRef.deref(), opts)); - }); - }, opts.timeout); - return () => { - timers.clearFastTimeout(fastTimer); - clearImmediate(s1); - clearImmediate(s2); - }; - } : (socketWeakRef, opts) => { - if (!opts.timeout) { - return noop; - } - let s1 = null; - const fastTimer = timers.setFastTimeout(() => { - s1 = setImmediate(() => { - onConnectTimeout(socketWeakRef.deref(), opts); - }); - }, opts.timeout); - return () => { - timers.clearFastTimeout(fastTimer); - clearImmediate(s1); - }; - }; - function onConnectTimeout(socket, opts) { - if (socket == null) { - return; - } - let message = "Connect Timeout Error"; - if (Array.isArray(socket.autoSelectFamilyAttemptedAddresses)) { - message += ` (attempted addresses: ${socket.autoSelectFamilyAttemptedAddresses.join(", ")},`; - } else { - message += ` (attempted address: ${opts.hostname}:${opts.port},`; - } - message += ` timeout: ${opts.timeout}ms)`; - util.destroy(socket, new ConnectTimeoutError(message)); - } - module.exports = buildConnector; - } - }); - - // - var require_utils = __commonJS({ - ""(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; - } - }); - - // - var require_constants2 = __commonJS({ - ""(exports) { - "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; - var utils_1 = require_utils(); - var ERROR; - (function(ERROR2) { - ERROR2[ERROR2["OK"] = 0] = "OK"; - ERROR2[ERROR2["INTERNAL"] = 1] = "INTERNAL"; - ERROR2[ERROR2["STRICT"] = 2] = "STRICT"; - ERROR2[ERROR2["LF_EXPECTED"] = 3] = "LF_EXPECTED"; - ERROR2[ERROR2["UNEXPECTED_CONTENT_LENGTH"] = 4] = "UNEXPECTED_CONTENT_LENGTH"; - ERROR2[ERROR2["CLOSED_CONNECTION"] = 5] = "CLOSED_CONNECTION"; - ERROR2[ERROR2["INVALID_METHOD"] = 6] = "INVALID_METHOD"; - ERROR2[ERROR2["INVALID_URL"] = 7] = "INVALID_URL"; - ERROR2[ERROR2["INVALID_CONSTANT"] = 8] = "INVALID_CONSTANT"; - ERROR2[ERROR2["INVALID_VERSION"] = 9] = "INVALID_VERSION"; - ERROR2[ERROR2["INVALID_HEADER_TOKEN"] = 10] = "INVALID_HEADER_TOKEN"; - ERROR2[ERROR2["INVALID_CONTENT_LENGTH"] = 11] = "INVALID_CONTENT_LENGTH"; - ERROR2[ERROR2["INVALID_CHUNK_SIZE"] = 12] = "INVALID_CHUNK_SIZE"; - ERROR2[ERROR2["INVALID_STATUS"] = 13] = "INVALID_STATUS"; - ERROR2[ERROR2["INVALID_EOF_STATE"] = 14] = "INVALID_EOF_STATE"; - ERROR2[ERROR2["INVALID_TRANSFER_ENCODING"] = 15] = "INVALID_TRANSFER_ENCODING"; - ERROR2[ERROR2["CB_MESSAGE_BEGIN"] = 16] = "CB_MESSAGE_BEGIN"; - ERROR2[ERROR2["CB_HEADERS_COMPLETE"] = 17] = "CB_HEADERS_COMPLETE"; - ERROR2[ERROR2["CB_MESSAGE_COMPLETE"] = 18] = "CB_MESSAGE_COMPLETE"; - ERROR2[ERROR2["CB_CHUNK_HEADER"] = 19] = "CB_CHUNK_HEADER"; - ERROR2[ERROR2["CB_CHUNK_COMPLETE"] = 20] = "CB_CHUNK_COMPLETE"; - ERROR2[ERROR2["PAUSED"] = 21] = "PAUSED"; - ERROR2[ERROR2["PAUSED_UPGRADE"] = 22] = "PAUSED_UPGRADE"; - ERROR2[ERROR2["PAUSED_H2_UPGRADE"] = 23] = "PAUSED_H2_UPGRADE"; - ERROR2[ERROR2["USER"] = 24] = "USER"; - })(ERROR = exports.ERROR || (exports.ERROR = {})); - var TYPE; - (function(TYPE2) { - TYPE2[TYPE2["BOTH"] = 0] = "BOTH"; - TYPE2[TYPE2["REQUEST"] = 1] = "REQUEST"; - TYPE2[TYPE2["RESPONSE"] = 2] = "RESPONSE"; - })(TYPE = exports.TYPE || (exports.TYPE = {})); - var FLAGS; - (function(FLAGS2) { - FLAGS2[FLAGS2["CONNECTION_KEEP_ALIVE"] = 1] = "CONNECTION_KEEP_ALIVE"; - FLAGS2[FLAGS2["CONNECTION_CLOSE"] = 2] = "CONNECTION_CLOSE"; - FLAGS2[FLAGS2["CONNECTION_UPGRADE"] = 4] = "CONNECTION_UPGRADE"; - FLAGS2[FLAGS2["CHUNKED"] = 8] = "CHUNKED"; - FLAGS2[FLAGS2["UPGRADE"] = 16] = "UPGRADE"; - FLAGS2[FLAGS2["CONTENT_LENGTH"] = 32] = "CONTENT_LENGTH"; - FLAGS2[FLAGS2["SKIPBODY"] = 64] = "SKIPBODY"; - FLAGS2[FLAGS2["TRAILING"] = 128] = "TRAILING"; - FLAGS2[FLAGS2["TRANSFER_ENCODING"] = 512] = "TRANSFER_ENCODING"; - })(FLAGS = exports.FLAGS || (exports.FLAGS = {})); - var LENIENT_FLAGS; - (function(LENIENT_FLAGS2) { - LENIENT_FLAGS2[LENIENT_FLAGS2["HEADERS"] = 1] = "HEADERS"; - LENIENT_FLAGS2[LENIENT_FLAGS2["CHUNKED_LENGTH"] = 2] = "CHUNKED_LENGTH"; - LENIENT_FLAGS2[LENIENT_FLAGS2["KEEP_ALIVE"] = 4] = "KEEP_ALIVE"; - })(LENIENT_FLAGS = exports.LENIENT_FLAGS || (exports.LENIENT_FLAGS = {})); - var METHODS; - (function(METHODS2) { - METHODS2[METHODS2["DELETE"] = 0] = "DELETE"; - METHODS2[METHODS2["GET"] = 1] = "GET"; - METHODS2[METHODS2["HEAD"] = 2] = "HEAD"; - METHODS2[METHODS2["POST"] = 3] = "POST"; - METHODS2[METHODS2["PUT"] = 4] = "PUT"; - METHODS2[METHODS2["CONNECT"] = 5] = "CONNECT"; - METHODS2[METHODS2["OPTIONS"] = 6] = "OPTIONS"; - METHODS2[METHODS2["TRACE"] = 7] = "TRACE"; - METHODS2[METHODS2["COPY"] = 8] = "COPY"; - METHODS2[METHODS2["LOCK"] = 9] = "LOCK"; - METHODS2[METHODS2["MKCOL"] = 10] = "MKCOL"; - METHODS2[METHODS2["MOVE"] = 11] = "MOVE"; - METHODS2[METHODS2["PROPFIND"] = 12] = "PROPFIND"; - METHODS2[METHODS2["PROPPATCH"] = 13] = "PROPPATCH"; - METHODS2[METHODS2["SEARCH"] = 14] = "SEARCH"; - METHODS2[METHODS2["UNLOCK"] = 15] = "UNLOCK"; - METHODS2[METHODS2["BIND"] = 16] = "BIND"; - METHODS2[METHODS2["REBIND"] = 17] = "REBIND"; - METHODS2[METHODS2["UNBIND"] = 18] = "UNBIND"; - METHODS2[METHODS2["ACL"] = 19] = "ACL"; - METHODS2[METHODS2["REPORT"] = 20] = "REPORT"; - METHODS2[METHODS2["MKACTIVITY"] = 21] = "MKACTIVITY"; - METHODS2[METHODS2["CHECKOUT"] = 22] = "CHECKOUT"; - METHODS2[METHODS2["MERGE"] = 23] = "MERGE"; - METHODS2[METHODS2["M-SEARCH"] = 24] = "M-SEARCH"; - METHODS2[METHODS2["NOTIFY"] = 25] = "NOTIFY"; - METHODS2[METHODS2["SUBSCRIBE"] = 26] = "SUBSCRIBE"; - METHODS2[METHODS2["UNSUBSCRIBE"] = 27] = "UNSUBSCRIBE"; - METHODS2[METHODS2["PATCH"] = 28] = "PATCH"; - METHODS2[METHODS2["PURGE"] = 29] = "PURGE"; - METHODS2[METHODS2["MKCALENDAR"] = 30] = "MKCALENDAR"; - METHODS2[METHODS2["LINK"] = 31] = "LINK"; - METHODS2[METHODS2["UNLINK"] = 32] = "UNLINK"; - METHODS2[METHODS2["SOURCE"] = 33] = "SOURCE"; - METHODS2[METHODS2["PRI"] = 34] = "PRI"; - METHODS2[METHODS2["DESCRIBE"] = 35] = "DESCRIBE"; - METHODS2[METHODS2["ANNOUNCE"] = 36] = "ANNOUNCE"; - METHODS2[METHODS2["SETUP"] = 37] = "SETUP"; - METHODS2[METHODS2["PLAY"] = 38] = "PLAY"; - METHODS2[METHODS2["PAUSE"] = 39] = "PAUSE"; - METHODS2[METHODS2["TEARDOWN"] = 40] = "TEARDOWN"; - METHODS2[METHODS2["GET_PARAMETER"] = 41] = "GET_PARAMETER"; - METHODS2[METHODS2["SET_PARAMETER"] = 42] = "SET_PARAMETER"; - METHODS2[METHODS2["REDIRECT"] = 43] = "REDIRECT"; - METHODS2[METHODS2["RECORD"] = 44] = "RECORD"; - METHODS2[METHODS2["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(FINISH2) { - FINISH2[FINISH2["SAFE"] = 0] = "SAFE"; - FINISH2[FINISH2["SAFE_WITH_CB"] = 1] = "SAFE_WITH_CB"; - FINISH2[FINISH2["UNSAFE"] = 2] = "UNSAFE"; - })(FINISH = exports.FINISH || (exports.FINISH = {})); - exports.ALPHA = []; - for (let i = "A".charCodeAt(0); i <= "Z".charCodeAt(0); i++) { - exports.ALPHA.push(String.fromCharCode(i)); - exports.ALPHA.push(String.fromCharCode(i + 32)); - } - 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: 10, - B: 11, - C: 12, - D: 13, - E: 14, - F: 15, - a: 10, - b: 11, - c: 12, - d: 13, - e: 14, - f: 15 - }; - 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(["%", ";", ":", "&", "=", "+", "$", ","]); - exports.STRICT_URL_CHAR = [ - "!", - '"', - "$", - "%", - "&", - "'", - "(", - ")", - "*", - "+", - ",", - "-", - ".", - "/", - ":", - ";", - "<", - "=", - ">", - "@", - "[", - "\\", - "]", - "^", - "_", - "`", - "{", - "|", - "}", - "~" - ].concat(exports.ALPHANUM); - exports.URL_CHAR = exports.STRICT_URL_CHAR.concat([" ", "\f"]); - for (let i = 128; i <= 255; i++) { - exports.URL_CHAR.push(i); - } - exports.HEX = exports.NUM.concat(["a", "b", "c", "d", "e", "f", "A", "B", "C", "D", "E", "F"]); - exports.STRICT_TOKEN = [ - "!", - "#", - "$", - "%", - "&", - "'", - "*", - "+", - "-", - ".", - "^", - "_", - "`", - "|", - "~" - ].concat(exports.ALPHANUM); - exports.TOKEN = exports.STRICT_TOKEN.concat([" "]); - exports.HEADER_CHARS = [" "]; - for (let i = 32; i <= 255; i++) { - if (i !== 127) { - exports.HEADER_CHARS.push(i); - } - } - 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_STATE2) { - HEADER_STATE2[HEADER_STATE2["GENERAL"] = 0] = "GENERAL"; - HEADER_STATE2[HEADER_STATE2["CONNECTION"] = 1] = "CONNECTION"; - HEADER_STATE2[HEADER_STATE2["CONTENT_LENGTH"] = 2] = "CONTENT_LENGTH"; - HEADER_STATE2[HEADER_STATE2["TRANSFER_ENCODING"] = 3] = "TRANSFER_ENCODING"; - HEADER_STATE2[HEADER_STATE2["UPGRADE"] = 4] = "UPGRADE"; - HEADER_STATE2[HEADER_STATE2["CONNECTION_KEEP_ALIVE"] = 5] = "CONNECTION_KEEP_ALIVE"; - HEADER_STATE2[HEADER_STATE2["CONNECTION_CLOSE"] = 6] = "CONNECTION_CLOSE"; - HEADER_STATE2[HEADER_STATE2["CONNECTION_UPGRADE"] = 7] = "CONNECTION_UPGRADE"; - HEADER_STATE2[HEADER_STATE2["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 - }; - } - }); - - // - var require_llhttp_wasm = __commonJS({ - ""(exports, module) { - "use strict"; - var { Buffer: Buffer2 } = __require("buffer"); - module.exports = Buffer2.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv", "base64"); - } - }); - - // - var require_llhttp_simd_wasm = __commonJS({ - ""(exports, module) { - "use strict"; - var { Buffer: Buffer2 } = __require("buffer"); - module.exports = Buffer2.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxBACEDDKIBCyACQeQANgIcIAIgATYCFCACQeMXNgIQIAJBFTYCDEEAIQMMoQELIAJBADYCACAGQQFqIQEgAi0AKSIAQSNrQQtJDQQCQCAAQQZLDQBBASAAdEHKAHFFDQAMBQtBACEDIAJBADYCHCACIAE2AhQgAkH3CTYCECACQQg2AgwMoAELIAJBADYCACAGQQFqIQEgAi0AKUEhRg0DIAJBADYCHCACIAE2AhQgAkGbCjYCECACQQg2AgxBACEDDJ8BCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJBkDM2AhAgAkEINgIMDJ0BCyACQQA2AgAgBkEBaiEBIAItAClBI0kNACACQQA2AhwgAiABNgIUIAJB0wk2AhAgAkEINgIMQQAhAwycAQtB0QAhAwyCAQsgAS0AAEEwayIAQf8BcUEKSQRAIAIgADoAKiABQQFqIQFBzwAhAwyCAQsgAigCBCEAIAJBADYCBCACIAAgARAoIgBFDYYBIAJB3gA2AhwgAiABNgIUIAIgADYCDEEAIQMMmgELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ2GASACQdwANgIcIAIgATYCFCACIAA2AgxBACEDDJkBCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMhwELIAJB2gA2AhwgAiAFNgIUIAIgADYCDAyYAQtBACEBQQEhAwsgAiADOgArIAVBAWohAwJAAkACQCACLQAtQRBxDQACQAJAAkAgAi0AKg4DAQACBAsgBkUNAwwCCyAADQEMAgsgAUUNAQsgAigCBCEAIAJBADYCBCACIAAgAxAoIgBFBEAgAyEBDAILIAJB2AA2AhwgAiADNgIUIAIgADYCDEEAIQMMmAELIAIoAgQhACACQQA2AgQgAiAAIAMQKCIARQRAIAMhAQyHAQsgAkHZADYCHCACIAM2AhQgAiAANgIMQQAhAwyXAQtBzAAhAwx9CyAAQRVHBEAgAkEANgIcIAIgATYCFCACQZQNNgIQIAJBITYCDEEAIQMMlgELIAJB1wA2AhwgAiABNgIUIAJByRc2AhAgAkEVNgIMQQAhAwyVAQtBACEDIAJBADYCHCACIAE2AhQgAkGAETYCECACQQk2AgwMlAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0AIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMkwELQckAIQMMeQsgAkEANgIcIAIgATYCFCACQcEoNgIQIAJBBzYCDCACQQA2AgBBACEDDJEBCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAlIgBFDQAgAkHSADYCHCACIAE2AhQgAiAANgIMDJABC0HIACEDDHYLIAJBADYCACAFIQELIAJBgBI7ASogAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANAQtBxwAhAwxzCyAAQRVGBEAgAkHRADYCHCACIAE2AhQgAkHjFzYCECACQRU2AgxBACEDDIwBC0EAIQMgAkEANgIcIAIgATYCFCACQbkNNgIQIAJBGjYCDAyLAQtBACEDIAJBADYCHCACIAE2AhQgAkGgGTYCECACQR42AgwMigELIAEtAABBOkYEQCACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgBFDQEgAkHDADYCHCACIAA2AgwgAiABQQFqNgIUDIoBC0EAIQMgAkEANgIcIAIgATYCFCACQbERNgIQIAJBCjYCDAyJAQsgAUEBaiEBQTshAwxvCyACQcMANgIcIAIgADYCDCACIAFBAWo2AhQMhwELQQAhAyACQQA2AhwgAiABNgIUIAJB8A42AhAgAkEcNgIMDIYBCyACIAIvATBBEHI7ATAMZgsCQCACLwEwIgBBCHFFDQAgAi0AKEEBRw0AIAItAC1BCHFFDQMLIAIgAEH3+wNxQYAEcjsBMAwECyABIARHBEACQANAIAEtAABBMGsiAEH/AXFBCk8EQEE1IQMMbgsgAikDICIKQpmz5syZs+bMGVYNASACIApCCn4iCjcDICAKIACtQv8BgyILQn+FVg0BIAIgCiALfDcDICAEIAFBAWoiAUcNAAtBOSEDDIUBCyACKAIEIQBBACEDIAJBADYCBCACIAAgAUEBaiIBECoiAA0MDHcLQTkhAwyDAQsgAi0AMEEgcQ0GQcUBIQMMaQtBACEDIAJBADYCBCACIAEgARAqIgBFDQQgAkE6NgIcIAIgADYCDCACIAFBAWo2AhQMgQELIAItAChBAUcNACACLQAtQQhxRQ0BC0E3IQMMZgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIABEAgAkE7NgIcIAIgADYCDCACIAFBAWo2AhQMfwsgAUEBaiEBDG4LIAJBCDoALAwECyABQQFqIQEMbQtBACEDIAJBADYCHCACIAE2AhQgAkHkEjYCECACQQQ2AgwMewsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ1sIAJBNzYCHCACIAE2AhQgAiAANgIMDHoLIAIgAi8BMEEgcjsBMAtBMCEDDF8LIAJBNjYCHCACIAE2AhQgAiAANgIMDHcLIABBLEcNASABQQFqIQBBASEBAkACQAJAAkACQCACLQAsQQVrDgQDAQIEAAsgACEBDAQLQQIhAQwBC0EEIQELIAJBAToALCACIAIvATAgAXI7ATAgACEBDAELIAIgAi8BMEEIcjsBMCAAIQELQTkhAwxcCyACQQA6ACwLQTQhAwxaCyABIARGBEBBLSEDDHMLAkACQANAAkAgAS0AAEEKaw4EAgAAAwALIAQgAUEBaiIBRw0AC0EtIQMMdAsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ0CIAJBLDYCHCACIAE2AhQgAiAANgIMDHMLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAS0AAEENRgRAIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAi0ALUEBcQRAQcQBIQMMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIADQEMZQtBLyEDDFcLIAJBLjYCHCACIAE2AhQgAiAANgIMDG8LQQAhAyACQQA2AhwgAiABNgIUIAJB8BQ2AhAgAkEDNgIMDG4LQQEhAwJAAkACQAJAIAItACxBBWsOBAMBAgAECyACIAIvATBBCHI7ATAMAwtBAiEDDAELQQQhAwsgAkEBOgAsIAIgAi8BMCADcjsBMAtBKiEDDFMLQQAhAyACQQA2AhwgAiABNgIUIAJB4Q82AhAgAkEKNgIMDGsLQQEhAwJAAkACQAJAAkACQCACLQAsQQJrDgcFBAQDAQIABAsgAiACLwEwQQhyOwEwDAMLQQIhAwwBC0EEIQMLIAJBAToALCACIAIvATAgA3I7ATALQSshAwxSC0EAIQMgAkEANgIcIAIgATYCFCACQasSNgIQIAJBCzYCDAxqC0EAIQMgAkEANgIcIAIgATYCFCACQf0NNgIQIAJBHTYCDAxpCyABIARHBEADQCABLQAAQSBHDUggBCABQQFqIgFHDQALQSUhAwxpC0ElIQMMaAsgAi0ALUEBcQRAQcMBIQMMTwsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKSIABEAgAkEmNgIcIAIgADYCDCACIAFBAWo2AhQMaAsgAUEBaiEBDFwLIAFBAWohASACLwEwIgBBgAFxBEBBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAEUNBiAAQRVHDR8gAkEFNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMZwsCQCAAQaAEcUGgBEcNACACLQAtQQJxDQBBACEDIAJBADYCHCACIAE2AhQgAkGWEzYCECACQQQ2AgwMZwsgAgJ/IAIvATBBFHFBFEYEQEEBIAItAChBAUYNARogAi8BMkHlAEYMAQsgAi0AKUEFRgs6AC5BACEAAkAgAigCOCIDRQ0AIAMoAiQiA0UNACACIAMRAAAhAAsCQAJAAkACQAJAIAAOFgIBAAQEBAQEBAQEBAQEBAQEBAQEBAMECyACQQE6AC4LIAIgAi8BMEHAAHI7ATALQSchAwxPCyACQSM2AhwgAiABNgIUIAJBpRY2AhAgAkEVNgIMQQAhAwxnC0EAIQMgAkEANgIcIAIgATYCFCACQdULNgIQIAJBETYCDAxmC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAADQELQQ4hAwxLCyAAQRVGBEAgAkECNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMZAtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMYwtBACEDIAJBADYCHCACIAE2AhQgAkGqHDYCECACQQ82AgwMYgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEgCqdqIgEQKyIARQ0AIAJBBTYCHCACIAE2AhQgAiAANgIMDGELQQ8hAwxHC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxfC0IBIQoLIAFBAWohAQJAIAIpAyAiC0L//////////w9YBEAgAiALQgSGIAqENwMgDAELQQAhAyACQQA2AhwgAiABNgIUIAJBrQk2AhAgAkEMNgIMDF4LQSQhAwxEC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxcCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAsIgBFBEAgAUEBaiEBDFILIAJBFzYCHCACIAA2AgwgAiABQQFqNgIUDFsLIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQRY2AhwgAiAANgIMIAIgAUEBajYCFAxbC0EfIQMMQQtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQLSIARQRAIAFBAWohAQxQCyACQRQ2AhwgAiAANgIMIAIgAUEBajYCFAxYCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABEC0iAEUEQCABQQFqIQEMAQsgAkETNgIcIAIgADYCDCACIAFBAWo2AhQMWAtBHiEDDD4LQQAhAyACQQA2AhwgAiABNgIUIAJBxgw2AhAgAkEjNgIMDFYLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABEC0iAEUEQCABQQFqIQEMTgsgAkERNgIcIAIgADYCDCACIAFBAWo2AhQMVQsgAkEQNgIcIAIgATYCFCACIAA2AgwMVAtBACEDIAJBADYCHCACIAE2AhQgAkHGDDYCECACQSM2AgwMUwtBACEDIAJBADYCHCACIAE2AhQgAkHAFTYCECACQQI2AgwMUgsgAigCBCEAQQAhAyACQQA2AgQCQCACIAAgARAtIgBFBEAgAUEBaiEBDAELIAJBDjYCHCACIAA2AgwgAiABQQFqNgIUDFILQRshAww4C0EAIQMgAkEANgIcIAIgATYCFCACQcYMNgIQIAJBIzYCDAxQCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABECwiAEUEQCABQQFqIQEMAQsgAkENNgIcIAIgADYCDCACIAFBAWo2AhQMUAtBGiEDDDYLQQAhAyACQQA2AhwgAiABNgIUIAJBmg82AhAgAkEiNgIMDE4LIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQQw2AhwgAiAANgIMIAIgAUEBajYCFAxOC0EZIQMMNAtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMTAsgAEEVRwRAQQAhAyACQQA2AhwgAiABNgIUIAJBgww2AhAgAkETNgIMDEwLIAJBCjYCHCACIAE2AhQgAkHkFjYCECACQRU2AgxBACEDDEsLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABIAqnaiIBECsiAARAIAJBBzYCHCACIAE2AhQgAiAANgIMDEsLQRMhAwwxCyAAQRVHBEBBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMSgsgAkEeNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMSQtBACEAAkAgAigCOCIDRQ0AIAMoAiwiA0UNACACIAMRAAAhAAsgAEUNQSAAQRVGBEAgAkEDNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMSQtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMSAtBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMRwtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMRgsgAkEAOgAvIAItAC1BBHFFDT8LIAJBADoALyACQQE6ADRBACEDDCsLQQAhAyACQQA2AhwgAkHkETYCECACQQc2AgwgAiABQQFqNgIUDEMLAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB3QEhAwxDCwJAAkAgAi0ANEEBRw0AQQAhAAJAIAIoAjgiA0UNACADKAJYIgNFDQAgAiADEQAAIQALIABFDQAgAEEVRw0BIAJB3AE2AhwgAiABNgIUIAJB1RY2AhAgAkEVNgIMQQAhAwxEC0HBASEDDCoLIAJBADYCHCACIAE2AhQgAkHpCzYCECACQR82AgxBACEDDEILAkACQCACLQAoQQFrDgIEAQALQcABIQMMKQtBuQEhAwwoCyACQQI6AC9BACEAAkAgAigCOCIDRQ0AIAMoAgAiA0UNACACIAMRAAAhAAsgAEUEQEHCASEDDCgLIABBFUcEQCACQQA2AhwgAiABNgIUIAJBpAw2AhAgAkEQNgIMQQAhAwxBCyACQdsBNgIcIAIgATYCFCACQfoWNgIQIAJBFTYCDEEAIQMMQAsgASAERgRAQdoBIQMMQAsgAS0AAEHIAEYNASACQQE6ACgLQawBIQMMJQtBvwEhAwwkCyABIARHBEAgAkEQNgIIIAIgATYCBEG+ASEDDCQLQdkBIQMMPAsgASAERgRAQdgBIQMMPAsgAS0AAEHIAEcNBCABQQFqIQFBvQEhAwwiCyABIARGBEBB1wEhAww7CwJAAkAgAS0AAEHFAGsOEAAFBQUFBQUFBQUFBQUFBQEFCyABQQFqIQFBuwEhAwwiCyABQQFqIQFBvAEhAwwhC0HWASEDIAEgBEYNOSACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGD0ABqLQAARw0DIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw6CyACKAIEIQAgAkIANwMAIAIgACAGQQFqIgEQJyIARQRAQcYBIQMMIQsgAkHVATYCHCACIAE2AhQgAiAANgIMQQAhAww5C0HUASEDIAEgBEYNOCACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGB0ABqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw5CyACQYEEOwEoIAIoAgQhACACQgA3AwAgAiAAIAZBAWoiARAnIgANAwwCCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB2Bs2AhAgAkEINgIMDDYLQboBIQMMHAsgAkHTATYCHCACIAE2AhQgAiAANgIMQQAhAww0C0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAARQ0AIABBFUYNASACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwwzC0HkACEDDBkLIAJB+AA2AhwgAiABNgIUIAJByhg2AhAgAkEVNgIMQQAhAwwxC0HSASEDIAQgASIARg0wIAQgAWsgAigCACIBaiEFIAAgAWtBBGohBgJAA0AgAC0AACABQfzPAGotAABHDQEgAUEERg0DIAFBAWohASAEIABBAWoiAEcNAAsgAiAFNgIADDELIAJBADYCHCACIAA2AhQgAkGQMzYCECACQQg2AgwgAkEANgIAQQAhAwwwCyABIARHBEAgAkEONgIIIAIgATYCBEG3ASEDDBcLQdEBIQMMLwsgAkEANgIAIAZBAWohAQtBuAEhAwwUCyABIARGBEBB0AEhAwwtCyABLQAAQTBrIgBB/wFxQQpJBEAgAiAAOgAqIAFBAWohAUG2ASEDDBQLIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0UIAJBzwE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAsgASAERgRAQc4BIQMMLAsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0VIAJBzQE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAtBtQEhAwwSCyAEIAEiBUYEQEHMASEDDCsLQQAhAEEBIQFBASEGQQAhAwJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAUtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyEDQQAhAUEAIQYMAgtBCSEDQQEhAEEAIQFBACEGDAELQQAhAUEBIQMLIAIgAzoAKyAFQQFqIQMCQAJAIAItAC1BEHENAAJAAkACQCACLQAqDgMBAAIECyAGRQ0DDAILIAANAQwCCyABRQ0BCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMAwsgAkHJATYCHCACIAM2AhQgAiAANgIMQQAhAwwtCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMGAsgAkHKATYCHCACIAM2AhQgAiAANgIMQQAhAwwsCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMFgsgAkHLATYCHCACIAU2AhQgAiAANgIMDCsLQbQBIQMMEQtBACEAAkAgAigCOCIDRQ0AIAMoAjwiA0UNACACIAMRAAAhAAsCQCAABEAgAEEVRg0BIAJBADYCHCACIAE2AhQgAkGUDTYCECACQSE2AgxBACEDDCsLQbIBIQMMEQsgAkHIATYCHCACIAE2AhQgAkHJFzYCECACQRU2AgxBACEDDCkLIAJBADYCACAGQQFqIQFB9QAhAwwPCyACLQApQQVGBEBB4wAhAwwPC0HiACEDDA4LIAAhASACQQA2AgALIAJBADoALEEJIQMMDAsgAkEANgIAIAdBAWohAUHAACEDDAsLQQELOgAsIAJBADYCACAGQQFqIQELQSkhAwwIC0E4IQMMBwsCQCABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRw0DIAFBAWohAQwFCyAEIAFBAWoiAUcNAAtBPiEDDCELQT4hAwwgCwsgAkEAOgAsDAELQQshAwwEC0E6IQMMAwsgAUEBaiEBQS0hAwwCCyACIAE6ACwgAkEANgIAIAZBAWohAUEMIQMMAQsgAkEANgIAIAZBAWohAUEKIQMMAAsAC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwXC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwWC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwVC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwUC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwTC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwSC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwRC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwQC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwPC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwOC0EAIQMgAkEANgIcIAIgATYCFCACQcASNgIQIAJBCzYCDAwNC0EAIQMgAkEANgIcIAIgATYCFCACQZUJNgIQIAJBCzYCDAwMC0EAIQMgAkEANgIcIAIgATYCFCACQeEPNgIQIAJBCjYCDAwLC0EAIQMgAkEANgIcIAIgATYCFCACQfsPNgIQIAJBCjYCDAwKC0EAIQMgAkEANgIcIAIgATYCFCACQfEZNgIQIAJBAjYCDAwJC0EAIQMgAkEANgIcIAIgATYCFCACQcQUNgIQIAJBAjYCDAwIC0EAIQMgAkEANgIcIAIgATYCFCACQfIVNgIQIAJBAjYCDAwHCyACQQI2AhwgAiABNgIUIAJBnBo2AhAgAkEWNgIMQQAhAwwGC0EBIQMMBQtB1AAhAyABIARGDQQgCEEIaiEJIAIoAgAhBQJAAkAgASAERwRAIAVB2MIAaiEHIAQgBWogAWshACAFQX9zQQpqIgUgAWohBgNAIAEtAAAgBy0AAEcEQEECIQcMAwsgBUUEQEEAIQcgBiEBDAMLIAVBAWshBSAHQQFqIQcgBCABQQFqIgFHDQALIAAhBSAEIQELIAlBATYCACACIAU2AgAMAQsgAkEANgIAIAkgBzYCAAsgCSABNgIEIAgoAgwhACAIKAIIDgMBBAIACwALIAJBADYCHCACQbUaNgIQIAJBFzYCDCACIABBAWo2AhRBACEDDAILIAJBADYCHCACIAA2AhQgAkHKGjYCECACQQk2AgxBACEDDAELIAEgBEYEQEEiIQMMAQsgAkEJNgIIIAIgATYCBEEhIQMLIAhBEGokACADRQRAIAIoAgwhAAwBCyACIAM2AhxBACEAIAIoAgQiAUUNACACIAEgBCACKAIIEQEAIgFFDQAgAiAENgIUIAIgATYCDCABIQALIAALvgIBAn8gAEEAOgAAIABB3ABqIgFBAWtBADoAACAAQQA6AAIgAEEAOgABIAFBA2tBADoAACABQQJrQQA6AAAgAEEAOgADIAFBBGtBADoAAEEAIABrQQNxIgEgAGoiAEEANgIAQdwAIAFrQXxxIgIgAGoiAUEEa0EANgIAAkAgAkEJSQ0AIABBADYCCCAAQQA2AgQgAUEIa0EANgIAIAFBDGtBADYCACACQRlJDQAgAEEANgIYIABBADYCFCAAQQA2AhAgAEEANgIMIAFBEGtBADYCACABQRRrQQA2AgAgAUEYa0EANgIAIAFBHGtBADYCACACIABBBHFBGHIiAmsiAUEgSQ0AIAAgAmohAANAIABCADcDGCAAQgA3AxAgAEIANwMIIABCADcDACAAQSBqIQAgAUEgayIBQR9LDQALCwtWAQF/AkAgACgCDA0AAkACQAJAAkAgAC0ALw4DAQADAgsgACgCOCIBRQ0AIAEoAiwiAUUNACAAIAERAAAiAQ0DC0EADwsACyAAQcMWNgIQQQ4hAQsgAQsaACAAKAIMRQRAIABB0Rs2AhAgAEEVNgIMCwsUACAAKAIMQRVGBEAgAEEANgIMCwsUACAAKAIMQRZGBEAgAEEANgIMCwsHACAAKAIMCwcAIAAoAhALCQAgACABNgIQCwcAIAAoAhQLFwAgAEEkTwRAAAsgAEECdEGgM2ooAgALFwAgAEEuTwRAAAsgAEECdEGwNGooAgALvwkBAX9B6yghAQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==", "base64"); - } - }); - - // - var require_constants3 = __commonJS({ - ""(exports, module) { - "use strict"; - var corsSafeListedMethods = ( - /** @type {const} */ - ["GET", "HEAD", "POST"] - ); - var corsSafeListedMethodsSet = new Set(corsSafeListedMethods); - var nullBodyStatus = ( - /** @type {const} */ - [101, 204, 205, 304] - ); - var redirectStatus = ( - /** @type {const} */ - [301, 302, 303, 307, 308] - ); - var redirectStatusSet = new Set(redirectStatus); - var badPorts = ( - /** @type {const} */ - [ - "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", - "4190", - "5060", - "5061", - "6000", - "6566", - "6665", - "6666", - "6667", - "6668", - "6669", - "6679", - "6697", - "10080" - ] - ); - var badPortsSet = new Set(badPorts); - var referrerPolicy = ( - /** @type {const} */ - [ - "", - "no-referrer", - "no-referrer-when-downgrade", - "same-origin", - "origin", - "strict-origin", - "origin-when-cross-origin", - "strict-origin-when-cross-origin", - "unsafe-url" - ] - ); - var referrerPolicySet = new Set(referrerPolicy); - var requestRedirect = ( - /** @type {const} */ - ["follow", "manual", "error"] - ); - var safeMethods = ( - /** @type {const} */ - ["GET", "HEAD", "OPTIONS", "TRACE"] - ); - var safeMethodsSet = new Set(safeMethods); - var requestMode = ( - /** @type {const} */ - ["navigate", "same-origin", "no-cors", "cors"] - ); - var requestCredentials = ( - /** @type {const} */ - ["omit", "same-origin", "include"] - ); - var requestCache = ( - /** @type {const} */ - [ - "default", - "no-store", - "reload", - "no-cache", - "force-cache", - "only-if-cached" - ] - ); - var requestBodyHeader = ( - /** @type {const} */ - [ - "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" - ] - ); - var requestDuplex = ( - /** @type {const} */ - [ - "half" - ] - ); - var forbiddenMethods = ( - /** @type {const} */ - ["CONNECT", "TRACE", "TRACK"] - ); - var forbiddenMethodsSet = new Set(forbiddenMethods); - var subresource = ( - /** @type {const} */ - [ - "audio", - "audioworklet", - "font", - "image", - "manifest", - "paintworklet", - "script", - "style", - "track", - "video", - "xslt", - "" - ] - ); - var subresourceSet = new Set(subresource); - module.exports = { - subresource, - forbiddenMethods, - requestBodyHeader, - referrerPolicy, - requestRedirect, - requestMode, - requestCredentials, - requestCache, - redirectStatus, - corsSafeListedMethods, - nullBodyStatus, - safeMethods, - badPorts, - requestDuplex, - subresourceSet, - badPortsSet, - redirectStatusSet, - corsSafeListedMethodsSet, - safeMethodsSet, - forbiddenMethodsSet, - referrerPolicySet - }; - } - }); - - // - var require_global = __commonJS({ - ""(exports, module) { - "use strict"; - var globalOrigin = Symbol.for("undici.globalOrigin.1"); - function getGlobalOrigin() { - return globalThis[globalOrigin]; - } - function setGlobalOrigin(newOrigin) { - if (newOrigin === void 0) { - Object.defineProperty(globalThis, globalOrigin, { - value: void 0, - 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 - }; - } - }); - - // - var require_data_url = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var encoder = new TextEncoder(); - var HTTP_TOKEN_CODEPOINTS = /^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/; - var HTTP_WHITESPACE_REGEX = /[\u000A\u000D\u0009\u0020]/; - var ASCII_WHITESPACE_REPLACE_REGEX = /[\u0009\u000A\u000C\u000D\u0020]/g; - var HTTP_QUOTED_STRING_TOKENS = /^[\u0009\u0020-\u007E\u0080-\u00FF]+$/; - function dataURLProcessor(dataURL) { - assert(dataURL.protocol === "data:"); - let input = URLSerializer(dataURL, true); - input = input.slice(5); - const position = { position: 0 }; - let mimeType = collectASequenceOfCodePointsFast( - ",", - input, - position - ); - const mimeTypeLength = mimeType.length; - mimeType = removeASCIIWhitespace(mimeType, true, true); - if (position.position >= input.length) { - return "failure"; - } - position.position++; - const encodedBody = input.slice(mimeTypeLength + 1); - let body = stringPercentDecode(encodedBody); - if (/;(\u0020){0,}base64$/i.test(mimeType)) { - const stringBody = isomorphicDecode(body); - body = forgivingBase64(stringBody); - if (body === "failure") { - return "failure"; - } - mimeType = mimeType.slice(0, -6); - mimeType = mimeType.replace(/(\u0020)+$/, ""); - mimeType = mimeType.slice(0, -1); - } - if (mimeType.startsWith(";")) { - mimeType = "text/plain" + mimeType; - } - let mimeTypeRecord = parseMIMEType(mimeType); - if (mimeTypeRecord === "failure") { - mimeTypeRecord = parseMIMEType("text/plain;charset=US-ASCII"); - } - return { mimeType: mimeTypeRecord, body }; - } - function URLSerializer(url, excludeFragment = false) { - if (!excludeFragment) { - return url.href; - } - const href = url.href; - const hashLength = url.hash.length; - const serialized = hashLength === 0 ? href : href.substring(0, href.length - hashLength); - if (!hashLength && href.endsWith("#")) { - return serialized.slice(0, -1); - } - return serialized; - } - function collectASequenceOfCodePoints(condition, input, position) { - let result = ""; - while (position.position < input.length && condition(input[position.position])) { - result += input[position.position]; - position.position++; - } - return result; - } - 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); - } - function stringPercentDecode(input) { - const bytes = encoder.encode(input); - return percentDecode(bytes); - } - function isHexCharByte(byte) { - return byte >= 48 && byte <= 57 || byte >= 65 && byte <= 70 || byte >= 97 && byte <= 102; - } - function hexByteToNumber(byte) { - return ( - // 0-9 - byte >= 48 && byte <= 57 ? byte - 48 : (byte & 223) - 55 - ); - } - function percentDecode(input) { - const length = input.length; - const output = new Uint8Array(length); - let j = 0; - for (let i = 0; i < length; ++i) { - const byte = input[i]; - if (byte !== 37) { - output[j++] = byte; - } else if (byte === 37 && !(isHexCharByte(input[i + 1]) && isHexCharByte(input[i + 2]))) { - output[j++] = 37; - } else { - output[j++] = hexByteToNumber(input[i + 1]) << 4 | hexByteToNumber(input[i + 2]); - i += 2; - } - } - return length === j ? output : output.subarray(0, j); - } - function parseMIMEType(input) { - input = removeHTTPWhitespace(input, true, true); - const position = { position: 0 }; - const type = collectASequenceOfCodePointsFast( - "/", - input, - position - ); - if (type.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(type)) { - return "failure"; - } - if (position.position > input.length) { - return "failure"; - } - position.position++; - let subtype = collectASequenceOfCodePointsFast( - ";", - input, - position - ); - subtype = removeHTTPWhitespace(subtype, false, true); - if (subtype.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(subtype)) { - return "failure"; - } - const typeLowercase = type.toLowerCase(); - const subtypeLowercase = subtype.toLowerCase(); - const mimeType = { - type: typeLowercase, - subtype: subtypeLowercase, - /** @type {Map} */ - parameters: /* @__PURE__ */ new Map(), - // https://mimesniff.spec.whatwg.org/#mime-type-essence - essence: `${typeLowercase}/${subtypeLowercase}` - }; - while (position.position < input.length) { - position.position++; - collectASequenceOfCodePoints( - // https://fetch.spec.whatwg.org/#http-whitespace - (char) => HTTP_WHITESPACE_REGEX.test(char), - input, - position - ); - let parameterName = collectASequenceOfCodePoints( - (char) => char !== ";" && char !== "=", - input, - position - ); - parameterName = parameterName.toLowerCase(); - if (position.position < input.length) { - if (input[position.position] === ";") { - continue; - } - position.position++; - } - if (position.position > input.length) { - break; - } - let parameterValue = null; - if (input[position.position] === '"') { - parameterValue = collectAnHTTPQuotedString(input, position, true); - collectASequenceOfCodePointsFast( - ";", - input, - position - ); - } else { - parameterValue = collectASequenceOfCodePointsFast( - ";", - input, - position - ); - parameterValue = removeHTTPWhitespace(parameterValue, false, true); - if (parameterValue.length === 0) { - continue; - } - } - 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); - } - } - return mimeType; - } - function forgivingBase64(data) { - data = data.replace(ASCII_WHITESPACE_REPLACE_REGEX, ""); - let dataLength = data.length; - if (dataLength % 4 === 0) { - if (data.charCodeAt(dataLength - 1) === 61) { - --dataLength; - if (data.charCodeAt(dataLength - 1) === 61) { - --dataLength; - } - } - } - if (dataLength % 4 === 1) { - return "failure"; - } - if (/[^+/0-9A-Za-z]/.test(data.length === dataLength ? data : data.substring(0, dataLength))) { - return "failure"; - } - const buffer = Buffer.from(data, "base64"); - return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength); - } - function collectAnHTTPQuotedString(input, position, extractValue) { - const positionStart = position.position; - let value = ""; - assert(input[position.position] === '"'); - position.position++; - while (true) { - value += collectASequenceOfCodePoints( - (char) => char !== '"' && char !== "\\", - input, - position - ); - if (position.position >= input.length) { - break; - } - const quoteOrBackslash = input[position.position]; - position.position++; - if (quoteOrBackslash === "\\") { - if (position.position >= input.length) { - value += "\\"; - break; - } - value += input[position.position]; - position.position++; - } else { - assert(quoteOrBackslash === '"'); - break; - } - } - if (extractValue) { - return value; - } - return input.slice(positionStart, position.position); - } - function serializeAMimeType(mimeType) { - assert(mimeType !== "failure"); - const { parameters, essence } = mimeType; - let serialization = essence; - for (let [name, value] of parameters.entries()) { - serialization += ";"; - serialization += name; - serialization += "="; - if (!HTTP_TOKEN_CODEPOINTS.test(value)) { - value = value.replace(/(\\|")/g, "\\$1"); - value = '"' + value; - value += '"'; - } - serialization += value; - } - return serialization; - } - function isHTTPWhiteSpace(char) { - return char === 13 || char === 10 || char === 9 || char === 32; - } - function removeHTTPWhitespace(str, leading = true, trailing = true) { - return removeChars(str, leading, trailing, isHTTPWhiteSpace); - } - function isASCIIWhitespace(char) { - return char === 13 || char === 10 || char === 9 || char === 12 || char === 32; - } - function removeASCIIWhitespace(str, leading = true, trailing = true) { - return removeChars(str, leading, trailing, isASCIIWhitespace); - } - function removeChars(str, leading, trailing, predicate) { - let lead = 0; - let trail = str.length - 1; - if (leading) { - while (lead < str.length && predicate(str.charCodeAt(lead))) - lead++; - } - if (trailing) { - while (trail > 0 && predicate(str.charCodeAt(trail))) - trail--; - } - return lead === 0 && trail === str.length - 1 ? str : str.slice(lead, trail + 1); - } - function isomorphicDecode(input) { - const length = input.length; - if ((2 << 15) - 1 > length) { - return String.fromCharCode.apply(null, input); - } - let result = ""; - let i = 0; - let addition = (2 << 15) - 1; - while (i < length) { - if (i + addition > length) { - addition = length - i; - } - result += String.fromCharCode.apply(null, input.subarray(i, i += addition)); - } - return result; - } - function minimizeSupportedMimeType(mimeType) { - switch (mimeType.essence) { - case "application/ecmascript": - case "application/javascript": - case "application/x-ecmascript": - case "application/x-javascript": - case "text/ecmascript": - case "text/javascript": - case "text/javascript1.0": - case "text/javascript1.1": - case "text/javascript1.2": - case "text/javascript1.3": - case "text/javascript1.4": - case "text/javascript1.5": - case "text/jscript": - case "text/livescript": - case "text/x-ecmascript": - case "text/x-javascript": - return "text/javascript"; - case "application/json": - case "text/json": - return "application/json"; - case "image/svg+xml": - return "image/svg+xml"; - case "text/xml": - case "application/xml": - return "application/xml"; - } - if (mimeType.subtype.endsWith("+json")) { - return "application/json"; - } - if (mimeType.subtype.endsWith("+xml")) { - return "application/xml"; - } - return ""; - } - module.exports = { - dataURLProcessor, - URLSerializer, - collectASequenceOfCodePoints, - collectASequenceOfCodePointsFast, - stringPercentDecode, - parseMIMEType, - collectAnHTTPQuotedString, - serializeAMimeType, - removeChars, - removeHTTPWhitespace, - minimizeSupportedMimeType, - HTTP_TOKEN_CODEPOINTS, - isomorphicDecode - }; - } - }); - - // - var require_webidl = __commonJS({ - ""(exports, module) { - "use strict"; - var { types, inspect } = __require("util"); - var { markAsUncloneable } = __require("worker_threads"); - var { toUSVString } = require_util(); - var 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}.` - }); - }; - webidl.brandCheck = function(V, I, opts) { - if ((opts == null ? void 0 : opts.strict) !== false) { - if (!(V instanceof I)) { - const err = new TypeError("Illegal invocation"); - err.code = "ERR_INVALID_THIS"; - throw err; - } - } else { - if ((V == null ? void 0 : V[Symbol.toStringTag]) !== I.prototype[Symbol.toStringTag]) { - const err = new TypeError("Illegal invocation"); - err.code = "ERR_INVALID_THIS"; - throw err; - } - } - }; - 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.`, - header: ctx - }); - } - }; - webidl.illegalConstructor = function() { - throw webidl.errors.exception({ - header: "TypeError", - message: "Illegal constructor" - }); - }; - 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"; - } - } - }; - webidl.util.markAsUncloneable = markAsUncloneable || (() => { - }); - webidl.util.ConvertToInt = function(V, bitLength, signedness, opts) { - let upperBound; - let lowerBound; - if (bitLength === 64) { - upperBound = Math.pow(2, 53) - 1; - if (signedness === "unsigned") { - lowerBound = 0; - } else { - lowerBound = Math.pow(-2, 53) + 1; - } - } else if (signedness === "unsigned") { - lowerBound = 0; - upperBound = Math.pow(2, bitLength) - 1; - } else { - lowerBound = Math.pow(-2, bitLength) - 1; - upperBound = Math.pow(2, bitLength - 1) - 1; - } - let x = Number(V); - if (x === 0) { - x = 0; - } - if ((opts == null ? void 0 : opts.enforceRange) === true) { - if (Number.isNaN(x) || x === Number.POSITIVE_INFINITY || x === Number.NEGATIVE_INFINITY) { - throw webidl.errors.exception({ - header: "Integer conversion", - message: `Could not convert ${webidl.util.Stringify(V)} to an integer.` - }); - } - x = webidl.util.IntegerPart(x); - if (x < lowerBound || x > upperBound) { - throw webidl.errors.exception({ - header: "Integer conversion", - message: `Value must be between ${lowerBound}-${upperBound}, got ${x}.` - }); - } - return x; - } - if (!Number.isNaN(x) && (opts == null ? void 0 : opts.clamp) === true) { - x = Math.min(Math.max(x, lowerBound), upperBound); - if (Math.floor(x) % 2 === 0) { - x = Math.floor(x); - } else { - x = Math.ceil(x); - } - return x; - } - if (Number.isNaN(x) || x === 0 && Object.is(0, x) || x === Number.POSITIVE_INFINITY || x === Number.NEGATIVE_INFINITY) { - return 0; - } - x = webidl.util.IntegerPart(x); - x = x % Math.pow(2, bitLength); - if (signedness === "signed" && x >= Math.pow(2, bitLength) - 1) { - return x - Math.pow(2, bitLength); - } - return x; - }; - webidl.util.IntegerPart = function(n) { - const r = Math.floor(Math.abs(n)); - if (n < 0) { - return -1 * r; - } - return r; - }; - webidl.util.Stringify = function(V) { - const type = webidl.util.Type(V); - switch (type) { - case "Symbol": - return `Symbol(${V.description})`; - case "Object": - return inspect(V); - case "String": - return `"${V}"`; - default: - return `${V}`; - } - }; - webidl.sequenceConverter = function(converter) { - return (V, prefix, argument, Iterable) => { - var _a; - if (webidl.util.Type(V) !== "Object") { - throw webidl.errors.exception({ - header: prefix, - message: `${argument} (${webidl.util.Stringify(V)}) is not iterable.` - }); - } - const method = typeof Iterable === "function" ? Iterable() : (_a = V == null ? void 0 : V[Symbol.iterator]) == null ? void 0 : _a.call(V); - const seq = []; - let index = 0; - if (method === void 0 || typeof method.next !== "function") { - throw webidl.errors.exception({ - header: prefix, - message: `${argument} is not iterable.` - }); - } - while (true) { - const { done, value } = method.next(); - if (done) { - break; - } - seq.push(converter(value, prefix, `${argument}[${index++}]`)); - } - return seq; - }; - }; - webidl.recordConverter = function(keyConverter, valueConverter) { - return (O, prefix, argument) => { - if (webidl.util.Type(O) !== "Object") { - throw webidl.errors.exception({ - header: prefix, - message: `${argument} ("${webidl.util.Type(O)}") is not an Object.` - }); - } - const result = {}; - if (!types.isProxy(O)) { - const keys2 = [...Object.getOwnPropertyNames(O), ...Object.getOwnPropertySymbols(O)]; - for (const key of keys2) { - const typedKey = keyConverter(key, prefix, argument); - const typedValue = valueConverter(O[key], prefix, argument); - result[typedKey] = typedValue; - } - return result; - } - const keys = Reflect.ownKeys(O); - for (const key of keys) { - const desc = Reflect.getOwnPropertyDescriptor(O, key); - if (desc == null ? void 0 : desc.enumerable) { - const typedKey = keyConverter(key, prefix, argument); - const typedValue = valueConverter(O[key], prefix, argument); - result[typedKey] = typedValue; - } - } - return result; - }; - }; - webidl.interfaceConverter = function(i) { - return (V, prefix, argument, opts) => { - if ((opts == null ? void 0 : opts.strict) !== false && !(V instanceof i)) { - throw webidl.errors.exception({ - header: prefix, - message: `Expected ${argument} ("${webidl.util.Stringify(V)}") to be an instance of ${i.name}.` - }); - } - return V; - }; - }; - webidl.dictionaryConverter = function(converters) { - return (dictionary, prefix, argument) => { - const type = webidl.util.Type(dictionary); - const dict = {}; - if (type === "Null" || type === "Undefined") { - return dict; - } else if (type !== "Object") { - throw webidl.errors.exception({ - header: prefix, - 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 (!Object.hasOwn(dictionary, key)) { - throw webidl.errors.exception({ - header: prefix, - message: `Missing required key "${key}".` - }); - } - } - let value = dictionary[key]; - const hasDefault = Object.hasOwn(options, "defaultValue"); - if (hasDefault && value !== null) { - value != null ? value : value = defaultValue(); - } - if (required || hasDefault || value !== void 0) { - value = converter(value, prefix, `${argument}.${key}`); - if (options.allowedValues && !options.allowedValues.includes(value)) { - throw webidl.errors.exception({ - header: prefix, - message: `${value} is not an accepted type. Expected one of ${options.allowedValues.join(", ")}.` - }); - } - dict[key] = value; - } - } - return dict; - }; - }; - webidl.nullableConverter = function(converter) { - return (V, prefix, argument) => { - if (V === null) { - return V; - } - return converter(V, prefix, argument); - }; - }; - webidl.converters.DOMString = function(V, prefix, argument, opts) { - if (V === null && (opts == null ? void 0 : opts.legacyNullToEmptyString)) { - return ""; - } - if (typeof V === "symbol") { - throw webidl.errors.exception({ - header: prefix, - message: `${argument} is a symbol, which cannot be converted to a DOMString.` - }); - } - return String(V); - }; - webidl.converters.ByteString = function(V, prefix, argument) { - const x = webidl.converters.DOMString(V, prefix, argument); - 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.` - ); - } - } - return x; - }; - webidl.converters.USVString = toUSVString; - webidl.converters.boolean = function(V) { - const x = Boolean(V); - return x; - }; - webidl.converters.any = function(V) { - return V; - }; - webidl.converters["long long"] = function(V, prefix, argument) { - const x = webidl.util.ConvertToInt(V, 64, "signed", void 0, prefix, argument); - return x; - }; - webidl.converters["unsigned long long"] = function(V, prefix, argument) { - const x = webidl.util.ConvertToInt(V, 64, "unsigned", void 0, prefix, argument); - return x; - }; - webidl.converters["unsigned long"] = function(V, prefix, argument) { - const x = webidl.util.ConvertToInt(V, 32, "unsigned", void 0, prefix, argument); - return x; - }; - webidl.converters["unsigned short"] = function(V, prefix, argument, opts) { - const x = webidl.util.ConvertToInt(V, 16, "unsigned", opts, prefix, argument); - return x; - }; - webidl.converters.ArrayBuffer = function(V, prefix, argument, opts) { - if (webidl.util.Type(V) !== "Object" || !types.isAnyArrayBuffer(V)) { - throw webidl.errors.conversionFailed({ - prefix, - argument: `${argument} ("${webidl.util.Stringify(V)}")`, - types: ["ArrayBuffer"] - }); - } - if ((opts == null ? void 0 : opts.allowShared) === false && types.isSharedArrayBuffer(V)) { - throw webidl.errors.exception({ - header: "ArrayBuffer", - message: "SharedArrayBuffer is not allowed." - }); - } - if (V.resizable || V.growable) { - throw webidl.errors.exception({ - header: "ArrayBuffer", - message: "Received a resizable ArrayBuffer." - }); - } - return V; - }; - webidl.converters.TypedArray = function(V, T, prefix, name, opts) { - if (webidl.util.Type(V) !== "Object" || !types.isTypedArray(V) || V.constructor.name !== T.name) { - throw webidl.errors.conversionFailed({ - prefix, - argument: `${name} ("${webidl.util.Stringify(V)}")`, - types: [T.name] - }); - } - if ((opts == null ? void 0 : opts.allowShared) === false && types.isSharedArrayBuffer(V.buffer)) { - throw webidl.errors.exception({ - header: "ArrayBuffer", - message: "SharedArrayBuffer is not allowed." - }); - } - if (V.buffer.resizable || V.buffer.growable) { - throw webidl.errors.exception({ - header: "ArrayBuffer", - message: "Received a resizable ArrayBuffer." - }); - } - return V; - }; - webidl.converters.DataView = function(V, prefix, name, opts) { - if (webidl.util.Type(V) !== "Object" || !types.isDataView(V)) { - throw webidl.errors.exception({ - header: prefix, - message: `${name} is not a DataView.` - }); - } - if ((opts == null ? void 0 : opts.allowShared) === false && types.isSharedArrayBuffer(V.buffer)) { - throw webidl.errors.exception({ - header: "ArrayBuffer", - message: "SharedArrayBuffer is not allowed." - }); - } - if (V.buffer.resizable || V.buffer.growable) { - throw webidl.errors.exception({ - header: "ArrayBuffer", - message: "Received a resizable ArrayBuffer." - }); - } - return V; - }; - webidl.converters.BufferSource = function(V, prefix, name, opts) { - if (types.isAnyArrayBuffer(V)) { - return webidl.converters.ArrayBuffer(V, prefix, name, __spreadProps(__spreadValues({}, opts), { allowShared: false })); - } - if (types.isTypedArray(V)) { - return webidl.converters.TypedArray(V, V.constructor, prefix, name, __spreadProps(__spreadValues({}, opts), { allowShared: false })); - } - if (types.isDataView(V)) { - return webidl.converters.DataView(V, prefix, name, __spreadProps(__spreadValues({}, opts), { allowShared: false })); - } - throw webidl.errors.conversionFailed({ - prefix, - argument: `${name} ("${webidl.util.Stringify(V)}")`, - types: ["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 - }; - } - }); - - // - var require_util2 = __commonJS({ - ""(exports, module) { - "use strict"; - var { Transform } = __require("stream"); - var zlib = __require("zlib"); - var { redirectStatusSet, referrerPolicySet: referrerPolicyTokens, badPortsSet } = require_constants3(); - var { getGlobalOrigin } = require_global(); - var { collectASequenceOfCodePoints, collectAnHTTPQuotedString, removeChars, parseMIMEType } = require_data_url(); - var { performance: performance2 } = __require("perf_hooks"); - var { isBlobLike, ReadableStreamFrom, isValidHTTPToken, normalizedMethodRecordsBase } = require_util(); - var assert = __require("assert"); - var { isUint8Array } = __require("util/types"); - var { webidl } = require_webidl(); - var supportedHashes = []; - var crypto2; - try { - crypto2 = __require("crypto"); - const possibleRelevantHashes = ["sha256", "sha384", "sha512"]; - supportedHashes = crypto2.getHashes().filter((hash) => possibleRelevantHashes.includes(hash)); - } catch (e) { - } - function responseURL(response) { - const urlList = response.urlList; - const length = urlList.length; - return length === 0 ? null : urlList[length - 1].toString(); - } - function responseLocationURL(response, requestFragment) { - if (!redirectStatusSet.has(response.status)) { - return null; - } - let location = response.headersList.get("location", true); - if (location !== null && isValidHeaderValue(location)) { - if (!isValidEncodedURL(location)) { - location = normalizeBinaryStringToUtf8(location); - } - location = new URL(location, responseURL(response)); - } - if (location && !location.hash) { - location.hash = requestFragment; - } - return location; - } - function isValidEncodedURL(url) { - for (let i = 0; i < url.length; ++i) { - const code = url.charCodeAt(i); - if (code > 126 || // Non-US-ASCII + DEL - code < 32) { - return false; - } - } - return true; - } - function normalizeBinaryStringToUtf8(value) { - return Buffer.from(value, "binary").toString("utf8"); - } - function requestCurrentURL(request) { - return request.urlList[request.urlList.length - 1]; - } - function requestBadPort(request) { - const url = requestCurrentURL(request); - if (urlIsHttpHttpsScheme(url) && badPortsSet.has(url.port)) { - return "blocked"; - } - return "allowed"; - } - function isErrorLike(object) { - var _a, _b; - return object instanceof Error || (((_a = object == null ? void 0 : object.constructor) == null ? void 0 : _a.name) === "Error" || ((_b = object == null ? void 0 : object.constructor) == null ? void 0 : _b.name) === "DOMException"); - } - function isValidReasonPhrase(statusText) { - for (let i = 0; i < statusText.length; ++i) { - const c = statusText.charCodeAt(i); - if (!(c === 9 || // HTAB - c >= 32 && c <= 126 || // SP / VCHAR - c >= 128 && c <= 255)) { - return false; - } - } - return true; - } - var isValidHeaderName = isValidHTTPToken; - function isValidHeaderValue(potentialValue) { - return (potentialValue[0] === " " || potentialValue[0] === " " || potentialValue[potentialValue.length - 1] === " " || potentialValue[potentialValue.length - 1] === " " || potentialValue.includes("\n") || potentialValue.includes("\r") || potentialValue.includes("\0")) === false; - } - function setRequestReferrerPolicyOnRedirect(request, actualResponse) { - var _a; - const { headersList } = actualResponse; - const policyHeader = ((_a = headersList.get("referrer-policy", true)) != null ? _a : "").split(","); - let policy = ""; - if (policyHeader.length > 0) { - for (let i = policyHeader.length; i !== 0; i--) { - const token = policyHeader[i - 1].trim(); - if (referrerPolicyTokens.has(token)) { - policy = token; - break; - } - } - } - if (policy !== "") { - request.referrerPolicy = policy; - } - } - function crossOriginResourcePolicyCheck() { - return "allowed"; - } - function corsCheck() { - return "success"; - } - function TAOCheck() { - return "success"; - } - function appendFetchMetadata(httpRequest) { - let header = null; - header = httpRequest.mode; - httpRequest.headersList.set("sec-fetch-mode", header, true); - } - function appendRequestOriginHeader(request) { - let serializedOrigin = request.origin; - if (serializedOrigin === "client" || serializedOrigin === void 0) { - return; - } - if (request.responseTainting === "cors" || request.mode === "websocket") { - request.headersList.append("origin", serializedOrigin, true); - } else if (request.method !== "GET" && request.method !== "HEAD") { - switch (request.referrerPolicy) { - case "no-referrer": - serializedOrigin = null; - break; - case "no-referrer-when-downgrade": - case "strict-origin": - case "strict-origin-when-cross-origin": - if (request.origin && urlHasHttpsScheme(request.origin) && !urlHasHttpsScheme(requestCurrentURL(request))) { - serializedOrigin = null; - } - break; - case "same-origin": - if (!sameOrigin(request, requestCurrentURL(request))) { - serializedOrigin = null; - } - break; - default: - } - request.headersList.append("origin", serializedOrigin, true); - } - } - function coarsenTime(timestamp, crossOriginIsolatedCapability) { - return timestamp; - } - function clampAndCoarsenConnectionTimingInfo(connectionTimingInfo, defaultStartTime, crossOriginIsolatedCapability) { - if (!(connectionTimingInfo == null ? void 0 : connectionTimingInfo.startTime) || connectionTimingInfo.startTime < defaultStartTime) { - return { - domainLookupStartTime: defaultStartTime, - domainLookupEndTime: defaultStartTime, - connectionStartTime: defaultStartTime, - connectionEndTime: defaultStartTime, - secureConnectionStartTime: defaultStartTime, - ALPNNegotiatedProtocol: connectionTimingInfo == null ? void 0 : connectionTimingInfo.ALPNNegotiatedProtocol - }; - } - return { - domainLookupStartTime: coarsenTime(connectionTimingInfo.domainLookupStartTime, crossOriginIsolatedCapability), - domainLookupEndTime: coarsenTime(connectionTimingInfo.domainLookupEndTime, crossOriginIsolatedCapability), - connectionStartTime: coarsenTime(connectionTimingInfo.connectionStartTime, crossOriginIsolatedCapability), - connectionEndTime: coarsenTime(connectionTimingInfo.connectionEndTime, crossOriginIsolatedCapability), - secureConnectionStartTime: coarsenTime(connectionTimingInfo.secureConnectionStartTime, crossOriginIsolatedCapability), - ALPNNegotiatedProtocol: connectionTimingInfo.ALPNNegotiatedProtocol - }; - } - function coarsenedSharedCurrentTime(crossOriginIsolatedCapability) { - return coarsenTime(performance2.now(), crossOriginIsolatedCapability); - } - function createOpaqueTimingInfo(timingInfo) { - var _a, _b; - return { - startTime: (_a = timingInfo.startTime) != null ? _a : 0, - redirectStartTime: 0, - redirectEndTime: 0, - postRedirectStartTime: (_b = timingInfo.startTime) != null ? _b : 0, - finalServiceWorkerStartTime: 0, - finalNetworkResponseStartTime: 0, - finalNetworkRequestStartTime: 0, - endTime: 0, - encodedBodySize: 0, - decodedBodySize: 0, - finalConnectionTimingInfo: null - }; - } - function makePolicyContainer() { - return { - referrerPolicy: "strict-origin-when-cross-origin" - }; - } - function clonePolicyContainer(policyContainer) { - return { - referrerPolicy: policyContainer.referrerPolicy - }; - } - function determineRequestsReferrer(request) { - const policy = request.referrerPolicy; - assert(policy); - let referrerSource = null; - if (request.referrer === "client") { - const globalOrigin = getGlobalOrigin(); - if (!globalOrigin || globalOrigin.origin === "null") { - return "no-referrer"; - } - referrerSource = new URL(globalOrigin); - } else if (request.referrer instanceof URL) { - referrerSource = request.referrer; - } - let referrerURL = stripURLForReferrer(referrerSource); - const referrerOrigin = stripURLForReferrer(referrerSource, true); - if (referrerURL.toString().length > 4096) { - referrerURL = referrerOrigin; - } - const areSameOrigin = sameOrigin(request, referrerURL); - const isNonPotentiallyTrustWorthy = isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(request.url); - 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); - if (sameOrigin(referrerURL, currentURL)) { - return referrerURL; - } - if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) { - return "no-referrer"; - } - return referrerOrigin; - } - case "strict-origin": - case "no-referrer-when-downgrade": - default: - return isNonPotentiallyTrustWorthy ? "no-referrer" : referrerOrigin; - } - } - function stripURLForReferrer(url, originOnly) { - assert(url instanceof URL); - url = new URL(url); - if (url.protocol === "file:" || url.protocol === "about:" || url.protocol === "blank:") { - return "no-referrer"; - } - url.username = ""; - url.password = ""; - url.hash = ""; - if (originOnly) { - url.pathname = ""; - url.search = ""; - } - return url; - } - function isURLPotentiallyTrustworthy(url) { - if (!(url instanceof URL)) { - return false; - } - if (url.href === "about:blank" || url.href === "about:srcdoc") { - return true; - } - if (url.protocol === "data:") - return true; - if (url.protocol === "file:") - return true; - return isOriginPotentiallyTrustworthy(url.origin); - function isOriginPotentiallyTrustworthy(origin) { - if (origin == null || origin === "null") - return false; - const originAsURL = new URL(origin); - if (originAsURL.protocol === "https:" || originAsURL.protocol === "wss:") { - 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; - } - return false; - } - } - function bytesMatch(bytes, metadataList) { - if (crypto2 === void 0) { - return true; - } - const parsedMetadata = parseMetadata(metadataList); - if (parsedMetadata === "no metadata") { - return true; - } - if (parsedMetadata.length === 0) { - return true; - } - const strongest = getStrongestMetadata(parsedMetadata); - const metadata = filterMetadataListByAlgorithm(parsedMetadata, strongest); - for (const item of metadata) { - const algorithm = item.algo; - const expectedValue = item.hash; - let actualValue = crypto2.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); - } - } - if (compareBase64Mixed(actualValue, expectedValue)) { - return true; - } - } - return false; - } - var parseHashWithOptions = new RegExp("(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\\s|$)( +[!-~]*)?)?", "i"); - function parseMetadata(metadata) { - const result = []; - let empty = true; - for (const token of metadata.split(" ")) { - empty = false; - const parsedToken = parseHashWithOptions.exec(token); - if (parsedToken === null || parsedToken.groups === void 0 || parsedToken.groups.algo === void 0) { - continue; - } - const algorithm = parsedToken.groups.algo.toLowerCase(); - if (supportedHashes.includes(algorithm)) { - result.push(parsedToken.groups); - } - } - if (empty === true) { - return "no metadata"; - } - return result; - } - function getStrongestMetadata(metadataList) { - let algorithm = metadataList[0].algo; - if (algorithm[3] === "5") { - return algorithm; - } - for (let i = 1; i < metadataList.length; ++i) { - const metadata = metadataList[i]; - if (metadata.algo[3] === "5") { - algorithm = "sha512"; - break; - } else if (algorithm[3] === "3") { - continue; - } 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; - } - 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; - } - function tryUpgradeRequestToAPotentiallyTrustworthyURL(request) { - } - function sameOrigin(A, B) { - if (A.origin === B.origin && A.origin === "null") { - return true; - } - if (A.protocol === B.protocol && A.hostname === B.hostname && A.port === B.port) { - return true; - } - return false; - } - function createDeferredPromise() { - let res; - let rej; - const promise = new Promise((resolve2, reject) => { - res = resolve2; - 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"; - } - function normalizeMethod(method) { - var _a; - return (_a = normalizedMethodRecordsBase[method.toLowerCase()]) != null ? _a : method; - } - function serializeJavascriptValueToJSONString(value) { - const result = JSON.stringify(value); - if (result === void 0) { - throw new TypeError("Value is not JSON serializable"); - } - assert(typeof result === "string"); - return result; - } - var esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())); - function createIterator(name, kInternalIterator, keyIndex = 0, valueIndex = 1) { - var _target, _kind, _index; - class FastIterableIterator { - /** - * @see https://webidl.spec.whatwg.org/#dfn-default-iterator-object - * @param {unknown} target - * @param {'key' | 'value' | 'key+value'} kind - */ - constructor(target, kind) { - /** @type {any} */ - __privateAdd(this, _target, void 0); - /** @type {'key' | 'value' | 'key+value'} */ - __privateAdd(this, _kind, void 0); - /** @type {number} */ - __privateAdd(this, _index, void 0); - __privateSet(this, _target, target); - __privateSet(this, _kind, kind); - __privateSet(this, _index, 0); - } - next() { - if (typeof this !== "object" || this === null || !__privateIn(_target, this)) { - throw new TypeError( - `'next' called on an object that does not implement interface ${name} Iterator.` - ); - } - const index = __privateGet(this, _index); - const values = __privateGet(this, _target)[kInternalIterator]; - const len = values.length; - if (index >= len) { - return { - value: void 0, - done: true - }; - } - const { [keyIndex]: key, [valueIndex]: value } = values[index]; - __privateSet(this, _index, index + 1); - let result; - switch (__privateGet(this, _kind)) { - case "key": - result = key; - break; - case "value": - result = value; - break; - case "key+value": - result = [key, value]; - break; - } - return { - value: result, - done: false - }; - } - } - _target = new WeakMap(); - _kind = new WeakMap(); - _index = new WeakMap(); - delete FastIterableIterator.prototype.constructor; - Object.setPrototypeOf(FastIterableIterator.prototype, esIteratorPrototype); - Object.defineProperties(FastIterableIterator.prototype, { - [Symbol.toStringTag]: { - writable: false, - enumerable: false, - configurable: true, - value: `${name} Iterator` - }, - next: { writable: true, enumerable: true, configurable: true } - }); - return function(target, kind) { - return new FastIterableIterator(target, kind); - }; - } - function iteratorMixin(name, object, kInternalIterator, keyIndex = 0, valueIndex = 1) { - const makeIterator = createIterator(name, kInternalIterator, keyIndex, valueIndex); - const properties = { - keys: { - writable: true, - enumerable: true, - configurable: true, - value: function keys() { - webidl.brandCheck(this, object); - return makeIterator(this, "key"); - } - }, - values: { - writable: true, - enumerable: true, - configurable: true, - value: function values() { - webidl.brandCheck(this, object); - return makeIterator(this, "value"); - } - }, - entries: { - writable: true, - enumerable: true, - configurable: true, - value: function entries() { - webidl.brandCheck(this, object); - return makeIterator(this, "key+value"); - } - }, - forEach: { - writable: true, - enumerable: true, - configurable: true, - value: function forEach(callbackfn, thisArg = globalThis) { - webidl.brandCheck(this, object); - webidl.argumentLengthCheck(arguments, 1, `${name}.forEach`); - if (typeof callbackfn !== "function") { - throw new TypeError( - `Failed to execute 'forEach' on '${name}': parameter 1 is not of type 'Function'.` - ); - } - for (const { 0: key, 1: value } of makeIterator(this, "key+value")) { - callbackfn.call(thisArg, value, key, this); - } - } - } - }; - return Object.defineProperties(object.prototype, __spreadProps(__spreadValues({}, properties), { - [Symbol.iterator]: { - writable: true, - enumerable: false, - configurable: true, - value: properties.entries.value - } - })); - } - function fullyReadBody(body, processBody, processBodyError) { - return __async(this, null, function* () { - const successSteps = processBody; - const errorSteps = processBodyError; - let reader; - try { - reader = body.stream.getReader(); - } catch (e) { - errorSteps(e); - return; - } - try { - successSteps(yield readAllBytes(reader)); - } catch (e) { - errorSteps(e); - } - }); - } - function isReadableStreamLike(stream) { - return stream instanceof ReadableStream || stream[Symbol.toStringTag] === "ReadableStream" && typeof stream.tee === "function"; - } - function readableStreamClose(controller) { - var _a; - try { - controller.close(); - (_a = controller.byobRequest) == null ? void 0 : _a.respond(0); - } catch (err) { - if (!err.message.includes("Controller is already closed") && !err.message.includes("ReadableStream is already closed")) { - throw err; - } - } - } - var invalidIsomorphicEncodeValueRegex = /[^\x00-\xFF]/; - function isomorphicEncode(input) { - assert(!invalidIsomorphicEncodeValueRegex.test(input)); - return input; - } - function readAllBytes(reader) { - return __async(this, null, function* () { - const bytes = []; - let byteLength = 0; - while (true) { - const { done, value: chunk } = yield reader.read(); - if (done) { - return Buffer.concat(bytes, byteLength); - } - if (!isUint8Array(chunk)) { - throw new TypeError("Received non-Uint8Array chunk"); - } - bytes.push(chunk); - byteLength += chunk.length; - } - }); - } - function urlIsLocal(url) { - assert("protocol" in url); - const protocol = url.protocol; - return protocol === "about:" || protocol === "blob:" || protocol === "data:"; - } - function urlHasHttpsScheme(url) { - return typeof url === "string" && url[5] === ":" && url[0] === "h" && url[1] === "t" && url[2] === "t" && url[3] === "p" && url[4] === "s" || url.protocol === "https:"; - } - function urlIsHttpHttpsScheme(url) { - assert("protocol" in url); - const protocol = url.protocol; - return protocol === "http:" || protocol === "https:"; - } - function simpleRangeHeaderValue(value, allowWhitespace) { - const data = value; - if (!data.startsWith("bytes")) { - return "failure"; - } - const position = { position: 5 }; - if (allowWhitespace) { - collectASequenceOfCodePoints( - (char) => char === " " || char === " ", - data, - position - ); - } - if (data.charCodeAt(position.position) !== 61) { - return "failure"; - } - position.position++; - if (allowWhitespace) { - collectASequenceOfCodePoints( - (char) => char === " " || char === " ", - data, - position - ); - } - const rangeStart = collectASequenceOfCodePoints( - (char) => { - const code = char.charCodeAt(0); - return code >= 48 && code <= 57; - }, - data, - position - ); - const rangeStartValue = rangeStart.length ? Number(rangeStart) : null; - if (allowWhitespace) { - collectASequenceOfCodePoints( - (char) => char === " " || char === " ", - data, - position - ); - } - if (data.charCodeAt(position.position) !== 45) { - return "failure"; - } - position.position++; - if (allowWhitespace) { - collectASequenceOfCodePoints( - (char) => char === " " || char === " ", - data, - position - ); - } - const rangeEnd = collectASequenceOfCodePoints( - (char) => { - const code = char.charCodeAt(0); - return code >= 48 && code <= 57; - }, - data, - position - ); - const rangeEndValue = rangeEnd.length ? Number(rangeEnd) : null; - if (position.position < data.length) { - return "failure"; - } - if (rangeEndValue === null && rangeStartValue === null) { - return "failure"; - } - if (rangeStartValue > rangeEndValue) { - return "failure"; - } - return { rangeStartValue, rangeEndValue }; - } - function buildContentRange(rangeStart, rangeEnd, fullLength) { - let contentRange = "bytes "; - contentRange += isomorphicEncode(`${rangeStart}`); - contentRange += "-"; - contentRange += isomorphicEncode(`${rangeEnd}`); - contentRange += "/"; - contentRange += isomorphicEncode(`${fullLength}`); - return contentRange; - } - var _zlibOptions; - var InflateStream = class extends Transform { - /** @param {zlib.ZlibOptions} [zlibOptions] */ - constructor(zlibOptions) { - super(); - __privateAdd(this, _zlibOptions, void 0); - __privateSet(this, _zlibOptions, zlibOptions); - } - _transform(chunk, encoding, callback) { - if (!this._inflateStream) { - if (chunk.length === 0) { - callback(); - return; - } - this._inflateStream = (chunk[0] & 15) === 8 ? zlib.createInflate(__privateGet(this, _zlibOptions)) : zlib.createInflateRaw(__privateGet(this, _zlibOptions)); - this._inflateStream.on("data", this.push.bind(this)); - this._inflateStream.on("end", () => this.push(null)); - this._inflateStream.on("error", (err) => this.destroy(err)); - } - this._inflateStream.write(chunk, encoding, callback); - } - _final(callback) { - if (this._inflateStream) { - this._inflateStream.end(); - this._inflateStream = null; - } - callback(); - } - }; - _zlibOptions = new WeakMap(); - function createInflate(zlibOptions) { - return new InflateStream(zlibOptions); - } - function extractMimeType(headers) { - let charset = null; - let essence = null; - let mimeType = null; - const values = getDecodeSplit("content-type", headers); - if (values === null) { - return "failure"; - } - for (const value of values) { - const temporaryMimeType = parseMIMEType(value); - if (temporaryMimeType === "failure" || temporaryMimeType.essence === "*/*") { - continue; - } - mimeType = temporaryMimeType; - if (mimeType.essence !== essence) { - charset = null; - if (mimeType.parameters.has("charset")) { - charset = mimeType.parameters.get("charset"); - } - essence = mimeType.essence; - } else if (!mimeType.parameters.has("charset") && charset !== null) { - mimeType.parameters.set("charset", charset); - } - } - if (mimeType == null) { - return "failure"; - } - return mimeType; - } - function gettingDecodingSplitting(value) { - const input = value; - const position = { position: 0 }; - const values = []; - let temporaryValue = ""; - while (position.position < input.length) { - temporaryValue += collectASequenceOfCodePoints( - (char) => char !== '"' && char !== ",", - input, - position - ); - if (position.position < input.length) { - if (input.charCodeAt(position.position) === 34) { - temporaryValue += collectAnHTTPQuotedString( - input, - position - ); - if (position.position < input.length) { - continue; - } - } else { - assert(input.charCodeAt(position.position) === 44); - position.position++; - } - } - temporaryValue = removeChars(temporaryValue, true, true, (char) => char === 9 || char === 32); - values.push(temporaryValue); - temporaryValue = ""; - } - return values; - } - function getDecodeSplit(name, list) { - const value = list.get(name, true); - if (value === null) { - return null; - } - return gettingDecodingSplitting(value); - } - var textDecoder = new TextDecoder(); - function utf8DecodeBytes(buffer) { - if (buffer.length === 0) { - return ""; - } - if (buffer[0] === 239 && buffer[1] === 187 && buffer[2] === 191) { - buffer = buffer.subarray(3); - } - const output = textDecoder.decode(buffer); - return output; - } - var EnvironmentSettingsObjectBase = class { - constructor() { - __publicField(this, "policyContainer", makePolicyContainer()); - } - get baseUrl() { - return getGlobalOrigin(); - } - get origin() { - var _a; - return (_a = this.baseUrl) == null ? void 0 : _a.origin; - } - }; - var EnvironmentSettingsObject = class { - constructor() { - __publicField(this, "settingsObject", new EnvironmentSettingsObjectBase()); - } - }; - var environmentSettingsObject = new EnvironmentSettingsObject(); - module.exports = { - isAborted, - isCancelled, - isValidEncodedURL, - createDeferredPromise, - ReadableStreamFrom, - tryUpgradeRequestToAPotentiallyTrustworthyURL, - clampAndCoarsenConnectionTimingInfo, - coarsenedSharedCurrentTime, - determineRequestsReferrer, - makePolicyContainer, - clonePolicyContainer, - appendFetchMetadata, - appendRequestOriginHeader, - TAOCheck, - corsCheck, - crossOriginResourcePolicyCheck, - createOpaqueTimingInfo, - setRequestReferrerPolicyOnRedirect, - isValidHTTPToken, - requestBadPort, - requestCurrentURL, - responseURL, - responseLocationURL, - isBlobLike, - isURLPotentiallyTrustworthy, - isValidReasonPhrase, - sameOrigin, - normalizeMethod, - serializeJavascriptValueToJSONString, - iteratorMixin, - createIterator, - isValidHeaderName, - isValidHeaderValue, - isErrorLike, - fullyReadBody, - bytesMatch, - isReadableStreamLike, - readableStreamClose, - isomorphicEncode, - urlIsLocal, - urlHasHttpsScheme, - urlIsHttpHttpsScheme, - readAllBytes, - simpleRangeHeaderValue, - buildContentRange, - parseMetadata, - createInflate, - extractMimeType, - getDecodeSplit, - utf8DecodeBytes, - environmentSettingsObject - }; - } - }); - - // - var require_symbols2 = __commonJS({ - ""(exports, module) { - "use strict"; - module.exports = { - kUrl: Symbol("url"), - kHeaders: Symbol("headers"), - kSignal: Symbol("signal"), - kState: Symbol("state"), - kDispatcher: Symbol("dispatcher") - }; - } - }); - - // - var require_file = __commonJS({ - ""(exports, module) { - "use strict"; - var { Blob: Blob2, File } = __require("buffer"); - var { kState } = require_symbols2(); - var { webidl } = require_webidl(); - var FileLike = class _FileLike { - constructor(blobLike, fileName, options = {}) { - var _a; - const n = fileName; - const t = options.type; - const d = (_a = options.lastModified) != null ? _a : Date.now(); - 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"; - } - }; - webidl.converters.Blob = webidl.interfaceConverter(Blob2); - function isFileLike(object) { - return object instanceof File || object && (typeof object.stream === "function" || typeof object.arrayBuffer === "function") && object[Symbol.toStringTag] === "File"; - } - module.exports = { FileLike, isFileLike }; - } - }); - - // - var require_formdata = __commonJS({ - ""(exports, module) { - "use strict"; - var { isBlobLike, iteratorMixin } = require_util2(); - var { kState } = require_symbols2(); - var { kEnumerableProperty } = require_util(); - var { FileLike, isFileLike } = require_file(); - var { webidl } = require_webidl(); - var { File: NativeFile } = __require("buffer"); - var nodeUtil = __require("util"); - var _a; - var File = (_a = globalThis.File) != null ? _a : NativeFile; - var FormData = class _FormData { - constructor(form) { - webidl.util.markAsUncloneable(this); - if (form !== void 0) { - throw webidl.errors.conversionFailed({ - prefix: "FormData constructor", - argument: "Argument 1", - types: ["undefined"] - }); - } - this[kState] = []; - } - append(name, value, filename = void 0) { - webidl.brandCheck(this, _FormData); - const prefix = "FormData.append"; - webidl.argumentLengthCheck(arguments, 2, prefix); - if (arguments.length === 3 && !isBlobLike(value)) { - throw new TypeError( - "Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'" - ); - } - name = webidl.converters.USVString(name, prefix, "name"); - value = isBlobLike(value) ? webidl.converters.Blob(value, prefix, "value", { strict: false }) : webidl.converters.USVString(value, prefix, "value"); - filename = arguments.length === 3 ? webidl.converters.USVString(filename, prefix, "filename") : void 0; - const entry = makeEntry(name, value, filename); - this[kState].push(entry); - } - delete(name) { - webidl.brandCheck(this, _FormData); - const prefix = "FormData.delete"; - webidl.argumentLengthCheck(arguments, 1, prefix); - name = webidl.converters.USVString(name, prefix, "name"); - this[kState] = this[kState].filter((entry) => entry.name !== name); - } - get(name) { - webidl.brandCheck(this, _FormData); - const prefix = "FormData.get"; - webidl.argumentLengthCheck(arguments, 1, prefix); - name = webidl.converters.USVString(name, prefix, "name"); - const idx = this[kState].findIndex((entry) => entry.name === name); - if (idx === -1) { - return null; - } - return this[kState][idx].value; - } - getAll(name) { - webidl.brandCheck(this, _FormData); - const prefix = "FormData.getAll"; - webidl.argumentLengthCheck(arguments, 1, prefix); - name = webidl.converters.USVString(name, prefix, "name"); - return this[kState].filter((entry) => entry.name === name).map((entry) => entry.value); - } - has(name) { - webidl.brandCheck(this, _FormData); - const prefix = "FormData.has"; - webidl.argumentLengthCheck(arguments, 1, prefix); - name = webidl.converters.USVString(name, prefix, "name"); - return this[kState].findIndex((entry) => entry.name === name) !== -1; - } - set(name, value, filename = void 0) { - webidl.brandCheck(this, _FormData); - const prefix = "FormData.set"; - webidl.argumentLengthCheck(arguments, 2, prefix); - if (arguments.length === 3 && !isBlobLike(value)) { - throw new TypeError( - "Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'" - ); - } - name = webidl.converters.USVString(name, prefix, "name"); - value = isBlobLike(value) ? webidl.converters.Blob(value, prefix, "name", { strict: false }) : webidl.converters.USVString(value, prefix, "name"); - filename = arguments.length === 3 ? webidl.converters.USVString(filename, prefix, "name") : void 0; - const entry = makeEntry(name, value, filename); - const idx = this[kState].findIndex((entry2) => entry2.name === name); - if (idx !== -1) { - this[kState] = [ - ...this[kState].slice(0, idx), - entry, - ...this[kState].slice(idx + 1).filter((entry2) => entry2.name !== name) - ]; - } else { - this[kState].push(entry); - } - } - [nodeUtil.inspect.custom](depth, options) { - var _a2, _b; - const state = this[kState].reduce((a, b) => { - if (a[b.name]) { - if (Array.isArray(a[b.name])) { - a[b.name].push(b.value); - } else { - a[b.name] = [a[b.name], b.value]; - } - } else { - a[b.name] = b.value; - } - return a; - }, { __proto__: null }); - (_a2 = options.depth) != null ? _a2 : options.depth = depth; - (_b = options.colors) != null ? _b : options.colors = true; - const output = nodeUtil.formatWithOptions(options, state); - return `FormData ${output.slice(output.indexOf("]") + 2)}`; - } - }; - iteratorMixin("FormData", FormData, kState, "name", "value"); - Object.defineProperties(FormData.prototype, { - append: kEnumerableProperty, - delete: kEnumerableProperty, - get: kEnumerableProperty, - getAll: kEnumerableProperty, - has: kEnumerableProperty, - set: kEnumerableProperty, - [Symbol.toStringTag]: { - value: "FormData", - configurable: true - } - }); - function makeEntry(name, value, filename) { - if (typeof value === "string") { - } else { - if (!isFileLike(value)) { - value = value instanceof Blob ? new File([value], "blob", { type: value.type }) : new FileLike(value, "blob", { type: value.type }); - } - if (filename !== void 0) { - const options = { - type: value.type, - lastModified: value.lastModified - }; - value = value instanceof NativeFile ? new File([value], filename, options) : new FileLike(value, filename, options); - } - } - return { name, value }; - } - module.exports = { FormData, makeEntry }; - } - }); - - // - var require_formdata_parser = __commonJS({ - ""(exports, module) { - "use strict"; - var { isUSVString, bufferToLowerCasedHeaderName } = require_util(); - var { utf8DecodeBytes } = require_util2(); - var { HTTP_TOKEN_CODEPOINTS, isomorphicDecode } = require_data_url(); - var { isFileLike } = require_file(); - var { makeEntry } = require_formdata(); - var assert = __require("assert"); - var { File: NodeFile } = __require("buffer"); - var _a; - var File = (_a = globalThis.File) != null ? _a : NodeFile; - var formDataNameBuffer = Buffer.from('form-data; name="'); - var filenameBuffer = Buffer.from("; filename"); - var dd = Buffer.from("--"); - var ddcrlf = Buffer.from("--\r\n"); - function isAsciiString(chars) { - for (let i = 0; i < chars.length; ++i) { - if ((chars.charCodeAt(i) & ~127) !== 0) { - return false; - } - } - return true; - } - function validateBoundary(boundary) { - const length = boundary.length; - if (length < 27 || length > 70) { - return false; - } - for (let i = 0; i < length; ++i) { - const cp = boundary.charCodeAt(i); - if (!(cp >= 48 && cp <= 57 || cp >= 65 && cp <= 90 || cp >= 97 && cp <= 122 || cp === 39 || cp === 45 || cp === 95)) { - return false; - } - } - return true; - } - function multipartFormDataParser(input, mimeType) { - assert(mimeType !== "failure" && mimeType.essence === "multipart/form-data"); - const boundaryString = mimeType.parameters.get("boundary"); - if (boundaryString === void 0) { - return "failure"; - } - const boundary = Buffer.from(`--${boundaryString}`, "utf8"); - const entryList = []; - const position = { position: 0 }; - while (input[position.position] === 13 && input[position.position + 1] === 10) { - position.position += 2; - } - let trailing = input.length; - while (input[trailing - 1] === 10 && input[trailing - 2] === 13) { - trailing -= 2; - } - if (trailing !== input.length) { - input = input.subarray(0, trailing); - } - while (true) { - if (input.subarray(position.position, position.position + boundary.length).equals(boundary)) { - position.position += boundary.length; - } else { - return "failure"; - } - if (position.position === input.length - 2 && bufferStartsWith(input, dd, position) || position.position === input.length - 4 && bufferStartsWith(input, ddcrlf, position)) { - return entryList; - } - if (input[position.position] !== 13 || input[position.position + 1] !== 10) { - return "failure"; - } - position.position += 2; - const result = parseMultipartFormDataHeaders(input, position); - if (result === "failure") { - return "failure"; - } - let { name, filename, contentType, encoding } = result; - position.position += 2; - let body; - { - const boundaryIndex = input.indexOf(boundary.subarray(2), position.position); - if (boundaryIndex === -1) { - return "failure"; - } - body = input.subarray(position.position, boundaryIndex - 4); - position.position += body.length; - if (encoding === "base64") { - body = Buffer.from(body.toString(), "base64"); - } - } - if (input[position.position] !== 13 || input[position.position + 1] !== 10) { - return "failure"; - } else { - position.position += 2; - } - let value; - if (filename !== null) { - contentType != null ? contentType : contentType = "text/plain"; - if (!isAsciiString(contentType)) { - contentType = ""; - } - value = new File([body], filename, { type: contentType }); - } else { - value = utf8DecodeBytes(Buffer.from(body)); - } - assert(isUSVString(name)); - assert(typeof value === "string" && isUSVString(value) || isFileLike(value)); - entryList.push(makeEntry(name, value, filename)); - } - } - function parseMultipartFormDataHeaders(input, position) { - let name = null; - let filename = null; - let contentType = null; - let encoding = null; - while (true) { - if (input[position.position] === 13 && input[position.position + 1] === 10) { - if (name === null) { - return "failure"; - } - return { name, filename, contentType, encoding }; - } - let headerName = collectASequenceOfBytes( - (char) => char !== 10 && char !== 13 && char !== 58, - input, - position - ); - headerName = removeChars(headerName, true, true, (char) => char === 9 || char === 32); - if (!HTTP_TOKEN_CODEPOINTS.test(headerName.toString())) { - return "failure"; - } - if (input[position.position] !== 58) { - return "failure"; - } - position.position++; - collectASequenceOfBytes( - (char) => char === 32 || char === 9, - input, - position - ); - switch (bufferToLowerCasedHeaderName(headerName)) { - case "content-disposition": { - name = filename = null; - if (!bufferStartsWith(input, formDataNameBuffer, position)) { - return "failure"; - } - position.position += 17; - name = parseMultipartFormDataName(input, position); - if (name === null) { - return "failure"; - } - if (bufferStartsWith(input, filenameBuffer, position)) { - let check = position.position + filenameBuffer.length; - if (input[check] === 42) { - position.position += 1; - check += 1; - } - if (input[check] !== 61 || input[check + 1] !== 34) { - return "failure"; - } - position.position += 12; - filename = parseMultipartFormDataName(input, position); - if (filename === null) { - return "failure"; - } - } - break; - } - case "content-type": { - let headerValue = collectASequenceOfBytes( - (char) => char !== 10 && char !== 13, - input, - position - ); - headerValue = removeChars(headerValue, false, true, (char) => char === 9 || char === 32); - contentType = isomorphicDecode(headerValue); - break; - } - case "content-transfer-encoding": { - let headerValue = collectASequenceOfBytes( - (char) => char !== 10 && char !== 13, - input, - position - ); - headerValue = removeChars(headerValue, false, true, (char) => char === 9 || char === 32); - encoding = isomorphicDecode(headerValue); - break; - } - default: { - collectASequenceOfBytes( - (char) => char !== 10 && char !== 13, - input, - position - ); - } - } - if (input[position.position] !== 13 && input[position.position + 1] !== 10) { - return "failure"; - } else { - position.position += 2; - } - } - } - function parseMultipartFormDataName(input, position) { - assert(input[position.position - 1] === 34); - let name = collectASequenceOfBytes( - (char) => char !== 10 && char !== 13 && char !== 34, - input, - position - ); - if (input[position.position] !== 34) { - return null; - } else { - position.position++; - } - name = new TextDecoder().decode(name).replace(/%0A/ig, "\n").replace(/%0D/ig, "\r").replace(/%22/g, '"'); - return name; - } - function collectASequenceOfBytes(condition, input, position) { - let start = position.position; - while (start < input.length && condition(input[start])) { - ++start; - } - return input.subarray(position.position, position.position = start); - } - function removeChars(buf, leading, trailing, predicate) { - let lead = 0; - let trail = buf.length - 1; - if (leading) { - while (lead < buf.length && predicate(buf[lead])) - lead++; - } - if (trailing) { - while (trail > 0 && predicate(buf[trail])) - trail--; - } - return lead === 0 && trail === buf.length - 1 ? buf : buf.subarray(lead, trail + 1); - } - function bufferStartsWith(buffer, start, position) { - if (buffer.length < start.length) { - return false; - } - for (let i = 0; i < start.length; i++) { - if (start[i] !== buffer[position.position + i]) { - return false; - } - } - return true; - } - module.exports = { - multipartFormDataParser, - validateBoundary - }; - } - }); - - // - var require_body = __commonJS({ - ""(exports, module) { - "use strict"; - var util = require_util(); - var { - ReadableStreamFrom, - isBlobLike, - isReadableStreamLike, - readableStreamClose, - createDeferredPromise, - fullyReadBody, - extractMimeType, - utf8DecodeBytes - } = require_util2(); - var { FormData } = require_formdata(); - var { kState } = require_symbols2(); - var { webidl } = require_webidl(); - var { Blob: Blob2 } = __require("buffer"); - var assert = __require("assert"); - var { isErrored, isDisturbed } = __require("stream"); - var { isArrayBuffer } = __require("util/types"); - var { serializeAMimeType } = require_data_url(); - var { multipartFormDataParser } = require_formdata_parser(); - var random; - try { - const crypto2 = __require("crypto"); - random = (max) => crypto2.randomInt(0, max); - } catch (e) { - random = (max) => Math.floor(Math.random(max)); - } - var textEncoder = new TextEncoder(); - function noop() { - } - var hasFinalizationRegistry = globalThis.FinalizationRegistry && process.version.indexOf("v18") !== 0; - var streamRegistry; - if (hasFinalizationRegistry) { - streamRegistry = new FinalizationRegistry((weakRef) => { - const stream = weakRef.deref(); - if (stream && !stream.locked && !isDisturbed(stream) && !isErrored(stream)) { - stream.cancel("Response object has been garbage collected").catch(noop); - } - }); - } - function extractBody(object, keepalive = false) { - let stream = null; - if (object instanceof ReadableStream) { - stream = object; - } else if (isBlobLike(object)) { - stream = object.stream(); - } else { - let _a; - stream = new ReadableStream({ - pull(controller) { - return __async(this, null, function* () { - const buffer = typeof source === "string" ? textEncoder.encode(source) : source; - if (buffer.byteLength) { - controller.enqueue(buffer); - } - queueMicrotask(() => readableStreamClose(controller)); - }); - }, - start() { - }, - type: "bytes" - }); - } - assert(isReadableStreamLike(stream)); - let action = null; - let source = null; - let length = null; - let type = null; - if (typeof object === "string") { - source = object; - type = "text/plain;charset=UTF-8"; - } else if (object instanceof URLSearchParams) { - source = object.toString(); - type = "application/x-www-form-urlencoded;charset=UTF-8"; - } else if (isArrayBuffer(object)) { - source = new Uint8Array(object.slice()); - } else if (ArrayBuffer.isView(object)) { - source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength)); - } else if (util.isFormDataLike(object)) { - const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, "0")}`; - const prefix = `--${boundary}\r -Content-Disposition: form-data`; - 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"); - const blobParts = []; - const rn = new Uint8Array([13, 10]); - length = 0; - let hasUnknownSizeValue = false; - for (const [name, value] of object) { - if (typeof value === "string") { - const chunk2 = textEncoder.encode(prefix + `; name="${escape(normalizeLinefeeds(name))}"\r -\r -${normalizeLinefeeds(value)}\r -`); - blobParts.push(chunk2); - length += chunk2.byteLength; - } else { - const chunk2 = textEncoder.encode(`${prefix}; name="${escape(normalizeLinefeeds(name))}"` + (value.name ? `; filename="${escape(value.name)}"` : "") + `\r -Content-Type: ${value.type || "application/octet-stream"}\r -\r -`); - blobParts.push(chunk2, value, rn); - if (typeof value.size === "number") { - length += chunk2.byteLength + value.size + rn.byteLength; - } else { - hasUnknownSizeValue = true; - } - } - } - const chunk = textEncoder.encode(`--${boundary}--\r -`); - blobParts.push(chunk); - length += chunk.byteLength; - if (hasUnknownSizeValue) { - length = null; - } - source = object; - action = function() { - return __asyncGenerator(this, null, function* () { - for (const part of blobParts) { - if (part.stream) { - yield* __yieldStar(part.stream()); - } else { - yield part; - } - } - }); - }; - type = `multipart/form-data; boundary=${boundary}`; - } else if (isBlobLike(object)) { - source = object; - length = object.size; - if (object.type) { - type = object.type; - } - } else if (typeof object[Symbol.asyncIterator] === "function") { - if (keepalive) { - throw new TypeError("keepalive"); - } - 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); - } - if (typeof source === "string" || util.isBuffer(source)) { - length = Buffer.byteLength(source); - } - if (action != null) { - let _b; - let iterator; - stream = new ReadableStream({ - start() { - return __async(this, null, function* () { - iterator = action(object)[Symbol.asyncIterator](); - }); - }, - pull(controller) { - return __async(this, null, function* () { - const { value, done } = yield iterator.next(); - if (done) { - queueMicrotask(() => { - var _a; - controller.close(); - (_a = controller.byobRequest) == null ? void 0 : _a.respond(0); - }); - } else { - if (!isErrored(stream)) { - const buffer = new Uint8Array(value); - if (buffer.byteLength) { - controller.enqueue(buffer); - } - } - } - return controller.desiredSize > 0; - }); - }, - cancel(reason) { - return __async(this, null, function* () { - yield iterator.return(); - }); - }, - type: "bytes" - }); - } - const body = { stream, source, length }; - return [body, type]; - } - function safelyExtractBody(object, keepalive = false) { - if (object instanceof ReadableStream) { - assert(!util.isDisturbed(object), "The body has already been consumed."); - assert(!object.locked, "The stream is locked."); - } - return extractBody(object, keepalive); - } - function cloneBody(instance, body) { - const [out1, out2] = body.stream.tee(); - body.stream = out1; - return { - stream: out2, - length: body.length, - source: body.source - }; - } - function throwIfAborted(state) { - if (state.aborted) { - throw new DOMException("The operation was aborted.", "AbortError"); - } - } - function bodyMixinMethods(instance) { - const methods = { - blob() { - return consumeBody(this, (bytes) => { - let mimeType = bodyMimeType(this); - if (mimeType === null) { - mimeType = ""; - } else if (mimeType) { - mimeType = serializeAMimeType(mimeType); - } - return new Blob2([bytes], { type: mimeType }); - }, instance); - }, - arrayBuffer() { - return consumeBody(this, (bytes) => { - return new Uint8Array(bytes).buffer; - }, instance); - }, - text() { - return consumeBody(this, utf8DecodeBytes, instance); - }, - json() { - return consumeBody(this, parseJSONFromBytes, instance); - }, - formData() { - return consumeBody(this, (value) => { - const mimeType = bodyMimeType(this); - if (mimeType !== null) { - switch (mimeType.essence) { - case "multipart/form-data": { - const parsed = multipartFormDataParser(value, mimeType); - if (parsed === "failure") { - throw new TypeError("Failed to parse body as FormData."); - } - const fd = new FormData(); - fd[kState] = parsed; - return fd; - } - case "application/x-www-form-urlencoded": { - const entries = new URLSearchParams(value.toString()); - const fd = new FormData(); - for (const [name, value2] of entries) { - fd.append(name, value2); - } - return fd; - } - } - } - throw new TypeError( - 'Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".' - ); - }, instance); - }, - bytes() { - return consumeBody(this, (bytes) => { - return new Uint8Array(bytes); - }, instance); - } - }; - return methods; - } - function mixinBody(prototype) { - Object.assign(prototype.prototype, bodyMixinMethods(prototype)); - } - function consumeBody(object, convertBytesToJSValue, instance) { - return __async(this, null, function* () { - webidl.brandCheck(object, instance); - if (bodyUnusable(object)) { - throw new TypeError("Body is unusable: Body has already been read"); - } - throwIfAborted(object[kState]); - const promise = createDeferredPromise(); - const errorSteps = (error) => promise.reject(error); - const successSteps = (data) => { - try { - promise.resolve(convertBytesToJSValue(data)); - } catch (e) { - errorSteps(e); - } - }; - if (object[kState].body == null) { - successSteps(Buffer.allocUnsafe(0)); - return promise.promise; - } - yield fullyReadBody(object[kState].body, successSteps, errorSteps); - return promise.promise; - }); - } - function bodyUnusable(object) { - const body = object[kState].body; - return body != null && (body.stream.locked || util.isDisturbed(body.stream)); - } - function parseJSONFromBytes(bytes) { - return JSON.parse(utf8DecodeBytes(bytes)); - } - function bodyMimeType(requestOrResponse) { - const headers = requestOrResponse[kState].headersList; - const mimeType = extractMimeType(headers); - if (mimeType === "failure") { - return null; - } - return mimeType; - } - module.exports = { - extractBody, - safelyExtractBody, - cloneBody, - mixinBody, - streamRegistry, - hasFinalizationRegistry, - bodyUnusable - }; - } - }); - - // - var require_client_h1 = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var util = require_util(); - var { channels } = require_diagnostics(); - var timers = require_timers(); - var { - RequestContentLengthMismatchError, - ResponseContentLengthMismatchError, - RequestAbortedError, - InvalidArgumentError, - HeadersTimeoutError, - HeadersOverflowError, - SocketError, - InformationalError, - BodyTimeoutError, - HTTPParserError, - ResponseExceededMaxSizeError - } = require_errors(); - var { - kUrl, - kReset, - kClient, - kParser, - kBlocking, - kRunning, - kPending, - kSize, - kWriting, - kQueue, - kNoRef, - kKeepAliveDefaultTimeout, - kHostHeader, - kPendingIdx, - kRunningIdx, - kError, - kPipelining, - kSocket, - kKeepAliveTimeoutValue, - kMaxHeadersSize, - kKeepAliveMaxTimeout, - kKeepAliveTimeoutThreshold, - kHeadersTimeout, - kBodyTimeout, - kStrictContentLength, - kMaxRequests, - kCounter, - kMaxResponseSize, - kOnError, - kResume, - kHTTPContext - } = require_symbols(); - var constants3 = require_constants2(); - var EMPTY_BUF = Buffer.alloc(0); - var FastBuffer = Buffer[Symbol.species]; - var addListener = util.addListener; - var removeAllListeners = util.removeAllListeners; - var kIdleSocketValidation = Symbol("kIdleSocketValidation"); - var kIdleSocketValidationTimeout = Symbol("kIdleSocketValidationTimeout"); - var kSocketUsed = Symbol("kSocketUsed"); - var extractBody; - function lazyllhttp() { - return __async(this, null, function* () { - const llhttpWasmData = process.env.JEST_WORKER_ID ? require_llhttp_wasm() : void 0; - let mod; - try { - mod = yield WebAssembly.compile(require_llhttp_simd_wasm()); - } catch (e) { - mod = yield WebAssembly.compile(llhttpWasmData || require_llhttp_wasm()); - } - return yield WebAssembly.instantiate(mod, { - env: { - /* eslint-disable camelcase */ - wasm_on_url: (p, at2, len) => { - return 0; - }, - wasm_on_status: (p, at2, len) => { - assert(currentParser.ptr === p); - const start = at2 - currentBufferPtr + currentBufferRef.byteOffset; - return currentParser.onStatus(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; - }, - wasm_on_message_begin: (p) => { - assert(currentParser.ptr === p); - return currentParser.onMessageBegin() || 0; - }, - wasm_on_header_field: (p, at2, len) => { - assert(currentParser.ptr === p); - const start = at2 - currentBufferPtr + currentBufferRef.byteOffset; - return currentParser.onHeaderField(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; - }, - wasm_on_header_value: (p, at2, len) => { - assert(currentParser.ptr === p); - const start = at2 - currentBufferPtr + currentBufferRef.byteOffset; - return currentParser.onHeaderValue(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; - }, - wasm_on_headers_complete: (p, statusCode, upgrade, shouldKeepAlive) => { - assert(currentParser.ptr === p); - return currentParser.onHeadersComplete(statusCode, Boolean(upgrade), Boolean(shouldKeepAlive)) || 0; - }, - wasm_on_body: (p, at2, len) => { - assert(currentParser.ptr === p); - const start = at2 - currentBufferPtr + currentBufferRef.byteOffset; - return currentParser.onBody(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; - }, - wasm_on_message_complete: (p) => { - assert(currentParser.ptr === p); - return currentParser.onMessageComplete() || 0; - } - /* eslint-enable camelcase */ - } - }); - }); - } - var llhttpInstance = null; - var llhttpPromise = lazyllhttp(); - llhttpPromise.catch(); - var currentParser = null; - var currentBufferRef = null; - var currentBufferSize = 0; - var currentBufferPtr = null; - var USE_NATIVE_TIMER = 0; - var USE_FAST_TIMER = 1; - var TIMEOUT_HEADERS = 2 | USE_FAST_TIMER; - var TIMEOUT_BODY = 4 | USE_FAST_TIMER; - var TIMEOUT_KEEP_ALIVE = 8 | USE_NATIVE_TIMER; - var Parser = class { - constructor(client, socket, { exports: exports2 }) { - assert(Number.isFinite(client[kMaxHeadersSize]) && client[kMaxHeadersSize] > 0); - this.llhttp = exports2; - this.ptr = this.llhttp.llhttp_alloc(constants3.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(delay, type) { - if (delay !== this.timeoutValue || type & USE_FAST_TIMER ^ this.timeoutType & USE_FAST_TIMER) { - if (this.timeout) { - timers.clearTimeout(this.timeout); - this.timeout = null; - } - if (delay) { - if (type & USE_FAST_TIMER) { - this.timeout = timers.setFastTimeout(onParserTimeout, delay, new WeakRef(this)); - } else { - this.timeout = setTimeout(onParserTimeout, delay, new WeakRef(this)); - this.timeout.unref(); - } - } - this.timeoutValue = delay; - } else if (this.timeout) { - if (this.timeout.refresh) { - this.timeout.refresh(); - } - } - this.timeoutType = type; - } - 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) { - if (this.timeout.refresh) { - this.timeout.refresh(); - } - } - this.paused = false; - this.execute(this.socket.read() || EMPTY_BUF); - 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); - try { - let ret; - try { - currentBufferRef = data; - currentParser = this; - ret = llhttp.llhttp_execute(this.ptr, currentBufferPtr, data.length); - } catch (err) { - throw err; - } finally { - currentParser = null; - currentBufferRef = null; - } - const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr; - if (ret !== constants3.ERROR.OK) { - const body = data.subarray(offset); - if (ret === constants3.ERROR.PAUSED_UPGRADE) { - this.onUpgrade(body); - } else if (ret === constants3.ERROR.PAUSED) { - this.paused = true; - socket.unshift(body); - } else { - throw this.createError(ret, body); - } - } - } catch (err) { - util.destroy(socket, err); - } - } - finish() { - assert(currentParser === null); - assert(this.ptr != null); - assert(!this.paused); - const { llhttp } = this; - let ret; - try { - currentParser = this; - ret = llhttp.llhttp_finish(this.ptr); - } finally { - currentParser = null; - } - if (ret === constants3.ERROR.OK) { - return null; - } - if (ret === constants3.ERROR.PAUSED || ret === constants3.ERROR.PAUSED_UPGRADE) { - this.paused = true; - return null; - } - return this.createError(ret, EMPTY_BUF); - } - createError(ret, data) { - const { llhttp, contentLength, bytesRead } = this; - if (contentLength && bytesRead !== parseInt(contentLength, 10)) { - return new ResponseContentLengthMismatchError(); - } - const ptr = llhttp.llhttp_get_error_reason(this.ptr); - let message = ""; - 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() + ")"; - } - return new HTTPParserError(message, constants3.ERROR[ret], data); - } - destroy() { - assert(this.ptr != null); - assert(currentParser == null); - this.llhttp.llhttp_free(this.ptr); - this.ptr = null; - this.timeout && 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; - if (socket.destroyed) { - return -1; - } - if (client[kRunning] === 0) { - util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket))); - return -1; - } - const request = client[kQueue][client[kRunningIdx]]; - if (!request) { - return -1; - } - request.onResponseStarted(); - } - 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) { - const headerName = util.bufferToLowerCasedHeaderName(key); - if (headerName === "keep-alive") { - this.keepAlive += buf.toString(); - } else if (headerName === "connection") { - this.connection += buf.toString(); - } - } else if (key.length === 14 && util.bufferToLowerCasedHeaderName(key) === "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); - assert(client[kSocket] === socket); - assert(!socket.destroyed); - assert(!this.paused); - assert((headers.length & 1) === 0); - const request = client[kQueue][client[kRunningIdx]]; - assert(request); - assert(request.upgrade || request.method === "CONNECT"); - this.statusCode = null; - this.statusText = ""; - this.shouldKeepAlive = null; - this.headers = []; - this.headersSize = 0; - socket.unshift(head); - socket[kParser].destroy(); - socket[kParser] = null; - socket[kClient] = null; - socket[kError] = null; - removeAllListeners(socket); - client[kSocket] = null; - client[kHTTPContext] = 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); - } - client[kResume](); - } - onHeadersComplete(statusCode, upgrade, shouldKeepAlive) { - const { client, socket, headers, statusText } = this; - if (socket.destroyed) { - return -1; - } - if (client[kRunning] === 0) { - util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket))); - return -1; - } - const request = client[kQueue][client[kRunningIdx]]; - 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; - } - if (upgrade && !request.upgrade) { - util.destroy(socket, new SocketError("bad upgrade", util.getSocketInfo(socket))); - return -1; - } - assert(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) { - 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 & 1) === 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 { - 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; - client[kResume](); - } - return pause ? constants3.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(this.timeoutType === TIMEOUT_BODY); - if (this.timeout) { - 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 constants3.ERROR.PAUSED; - } - } - onMessageComplete() { - const { client, socket, statusCode, upgrade, headers, contentLength, bytesRead, shouldKeepAlive } = this; - if (socket.destroyed && (!statusCode || shouldKeepAlive)) { - return -1; - } - if (upgrade) { - return; - } - assert(statusCode >= 100); - assert((this.headers.length & 1) === 0); - const request = client[kQueue][client[kRunningIdx]]; - assert(request); - this.statusCode = null; - this.statusText = ""; - this.bytesRead = 0; - this.contentLength = ""; - this.keepAlive = ""; - this.connection = ""; - this.headers = []; - this.headersSize = 0; - if (statusCode < 200) { - return; - } - if (request.method !== "HEAD" && contentLength && bytesRead !== parseInt(contentLength, 10)) { - util.destroy(socket, new ResponseContentLengthMismatchError()); - return -1; - } - request.onComplete(headers); - client[kQueue][client[kRunningIdx]++] = null; - socket[kSocketUsed] = true; - if (socket[kWriting]) { - assert(client[kRunning] === 0); - util.destroy(socket, new InformationalError("reset")); - return constants3.ERROR.PAUSED; - } else if (!shouldKeepAlive) { - util.destroy(socket, new InformationalError("reset")); - return constants3.ERROR.PAUSED; - } else if (socket[kReset] && client[kRunning] === 0) { - util.destroy(socket, new InformationalError("reset")); - return constants3.ERROR.PAUSED; - } else if (client[kPipelining] == null || client[kPipelining] === 1) { - setImmediate(() => client[kResume]()); - } else { - client[kResume](); - } - } - }; - function onParserTimeout(parser) { - const { socket, timeoutType, client, paused } = parser.deref(); - if (timeoutType === TIMEOUT_HEADERS) { - if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) { - assert(!paused, "cannot be paused while waiting for headers"); - util.destroy(socket, new HeadersTimeoutError()); - } - } else if (timeoutType === TIMEOUT_BODY) { - if (!paused) { - util.destroy(socket, new BodyTimeoutError()); - } - } else if (timeoutType === TIMEOUT_KEEP_ALIVE) { - assert(client[kRunning] === 0 && client[kKeepAliveTimeoutValue]); - util.destroy(socket, new InformationalError("socket idle timeout")); - } - } - function connectH1(client, socket) { - return __async(this, null, function* () { - client[kSocket] = socket; - if (!llhttpInstance) { - llhttpInstance = yield llhttpPromise; - llhttpPromise = null; - } - socket[kNoRef] = false; - socket[kWriting] = false; - socket[kReset] = false; - socket[kBlocking] = false; - socket[kIdleSocketValidation] = 0; - socket[kIdleSocketValidationTimeout] = null; - socket[kSocketUsed] = false; - socket[kParser] = new Parser(client, socket, llhttpInstance); - addListener(socket, "error", function(err) { - assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); - const parser = this[kParser]; - if (err.code === "ECONNRESET" && parser.statusCode && !parser.shouldKeepAlive) { - const parserErr = parser.finish(); - if (parserErr) { - this[kError] = parserErr; - this[kClient][kOnError](parserErr); - } - return; - } - this[kError] = err; - this[kClient][kOnError](err); - }); - addListener(socket, "readable", function() { - const parser = this[kParser]; - if (parser) { - parser.readMore(); - } - }); - addListener(socket, "end", function() { - const parser = this[kParser]; - if (parser.statusCode && !parser.shouldKeepAlive) { - const parserErr = parser.finish(); - if (parserErr) { - util.destroy(this, parserErr); - } - return; - } - util.destroy(this, new SocketError("other side closed", util.getSocketInfo(this))); - }); - addListener(socket, "close", function() { - const client2 = this[kClient]; - const parser = this[kParser]; - clearIdleSocketValidation(this); - if (parser) { - if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) { - this[kError] = parser.finish() || this[kError]; - } - this[kParser].destroy(); - this[kParser] = null; - } - const err = this[kError] || new SocketError("closed", util.getSocketInfo(this)); - client2[kSocket] = null; - client2[kHTTPContext] = null; - if (client2.destroyed) { - assert(client2[kPending] === 0); - const requests = client2[kQueue].splice(client2[kRunningIdx]); - for (let i = 0; i < requests.length; i++) { - const request = requests[i]; - util.errorRequest(client2, request, err); - } - } else if (client2[kRunning] > 0 && err.code !== "UND_ERR_INFO") { - const request = client2[kQueue][client2[kRunningIdx]]; - client2[kQueue][client2[kRunningIdx]++] = null; - util.errorRequest(client2, request, err); - } - client2[kPendingIdx] = client2[kRunningIdx]; - assert(client2[kRunning] === 0); - client2.emit("disconnect", client2[kUrl], [client2], err); - client2[kResume](); - }); - let closed = false; - socket.on("close", () => { - closed = true; - }); - return { - version: "h1", - defaultPipelining: 1, - write(...args) { - return writeH1(client, ...args); - }, - resume() { - resumeH1(client); - }, - destroy(err, callback) { - if (closed) { - queueMicrotask(callback); - } else { - socket.destroy(err).on("close", callback); - } - }, - get destroyed() { - return socket.destroyed; - }, - busy(request) { - if (socket[kWriting] || socket[kReset] || socket[kBlocking] || socket[kIdleSocketValidation] === 1) { - return true; - } - if (request) { - if (client[kRunning] > 0 && !request.idempotent) { - return true; - } - if (client[kRunning] > 0 && (request.upgrade || request.method === "CONNECT")) { - return true; - } - if (client[kRunning] > 0 && util.bodyLength(request.body) !== 0 && (util.isStream(request.body) || util.isAsyncIterable(request.body) || util.isFormDataLike(request.body))) { - return true; - } - } - return false; - } - }; - }); - } - function clearIdleSocketValidation(socket) { - if (socket[kIdleSocketValidationTimeout]) { - clearTimeout(socket[kIdleSocketValidationTimeout]); - socket[kIdleSocketValidationTimeout] = null; - } - socket[kIdleSocketValidation] = 0; - } - function scheduleIdleSocketValidation(client, socket) { - var _a, _b; - socket[kIdleSocketValidation] = 1; - socket[kIdleSocketValidationTimeout] = setTimeout(() => { - socket[kIdleSocketValidationTimeout] = null; - socket[kIdleSocketValidation] = 2; - if (client[kSocket] === socket && !socket.destroyed) { - client[kResume](); - } - }, 0); - (_b = (_a = socket[kIdleSocketValidationTimeout]).unref) == null ? void 0 : _b.call(_a); - } - function resumeH1(client) { - const socket = client[kSocket]; - if (socket && !socket.destroyed) { - 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[kRunning] === 0 && client[kPending] > 0 && socket[kSocketUsed]) { - if (socket[kIdleSocketValidation] === 0) { - scheduleIdleSocketValidation(client, socket); - socket[kParser].readMore(); - if (socket.destroyed) { - return; - } - return; - } - if (socket[kIdleSocketValidation] === 1) { - socket[kParser].readMore(); - if (socket.destroyed) { - return; - } - return; - } - } - if (client[kRunning] === 0) { - socket[kParser].readMore(); - if (socket.destroyed) { - return; - } - } - if (client[kSize] === 0) { - if (socket[kParser].timeoutType !== TIMEOUT_KEEP_ALIVE) { - socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_KEEP_ALIVE); - } - } 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); - } - } - } - } - function shouldSendContentLength(method) { - return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT"; - } - function writeH1(client, request) { - const { method, path: path5, host, upgrade, blocking, reset } = request; - let { body, headers, contentLength } = request; - const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH" || method === "QUERY" || method === "PROPFIND" || method === "PROPPATCH"; - if (util.isFormDataLike(body)) { - if (!extractBody) { - extractBody = require_body().extractBody; - } - const [bodyStream, contentType] = extractBody(body); - if (request.contentType == null) { - headers.push("content-type", contentType); - } - body = bodyStream.stream; - contentLength = bodyStream.length; - } else if (util.isBlobLike(body) && request.contentType == null) { - const contentType = body.type; - if (contentType) { - const contentTypeValue = `${contentType}`; - if (!util.isValidHeaderValue(contentTypeValue)) { - util.errorRequest(client, request, new InvalidArgumentError("invalid content-type header")); - return false; - } - headers.push("content-type", contentTypeValue); - } - } - if (body && typeof body.read === "function") { - body.read(0); - } - const bodyLength = util.bodyLength(body); - contentLength = bodyLength != null ? bodyLength : contentLength; - if (contentLength === null) { - contentLength = request.contentLength; - } - if (contentLength === 0 && !expectsPayload) { - contentLength = null; - } - if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength !== null && request.contentLength !== contentLength) { - if (client[kStrictContentLength]) { - util.errorRequest(client, request, new RequestContentLengthMismatchError()); - return false; - } - process.emitWarning(new RequestContentLengthMismatchError()); - } - const socket = client[kSocket]; - clearIdleSocketValidation(socket); - const abort = (err) => { - if (request.aborted || request.completed) { - return; - } - util.errorRequest(client, request, err || new RequestAbortedError()); - util.destroy(body); - util.destroy(socket, new InformationalError("aborted")); - }; - try { - request.onConnect(abort); - } catch (err) { - util.errorRequest(client, request, err); - } - if (request.aborted) { - return false; - } - if (method === "HEAD") { - socket[kReset] = true; - } - if (upgrade || method === "CONNECT") { - 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} ${path5} HTTP/1.1\r -`; - if (typeof host === "string") { - header += `host: ${host}\r -`; - } else { - header += client[kHostHeader]; - } - if (upgrade) { - header += `connection: upgrade\r -upgrade: ${upgrade}\r -`; - } else if (client[kPipelining] && !socket[kReset]) { - header += "connection: keep-alive\r\n"; - } else { - header += "connection: close\r\n"; - } - if (Array.isArray(headers)) { - for (let n = 0; n < headers.length; n += 2) { - const key = headers[n + 0]; - const val = headers[n + 1]; - if (Array.isArray(val)) { - for (let i = 0; i < val.length; i++) { - header += `${key}: ${val[i]}\r -`; - } - } else { - header += `${key}: ${val}\r -`; - } - } - } - if (channels.sendHeaders.hasSubscribers) { - channels.sendHeaders.publish({ request, headers: header, socket }); - } - if (!body || bodyLength === 0) { - writeBuffer(abort, null, client, request, socket, contentLength, header, expectsPayload); - } else if (util.isBuffer(body)) { - writeBuffer(abort, body, client, request, socket, contentLength, header, expectsPayload); - } else if (util.isBlobLike(body)) { - if (typeof body.stream === "function") { - writeIterable(abort, body.stream(), client, request, socket, contentLength, header, expectsPayload); - } else { - writeBlob(abort, body, client, request, socket, contentLength, header, expectsPayload); - } - } else if (util.isStream(body)) { - writeStream(abort, body, client, request, socket, contentLength, header, expectsPayload); - } else if (util.isIterable(body)) { - writeIterable(abort, body, client, request, socket, contentLength, header, expectsPayload); - } else { - assert(false); - } - return true; - } - function writeStream(abort, body, client, request, socket, contentLength, header, expectsPayload) { - var _a, _b, _c; - assert(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined"); - let finished = false; - const writer = new AsyncWriter({ abort, 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 onClose = function() { - queueMicrotask(() => { - body.removeListener("error", onFinished); - }); - if (!finished) { - 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("close", onClose); - 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", onClose); - if (body.resume) { - body.resume(); - } - socket.on("drain", onDrain).on("error", onFinished); - if ((_a = body.errorEmitted) != null ? _a : body.errored) { - setImmediate(() => onFinished(body.errored)); - } else if ((_b = body.endEmitted) != null ? _b : body.readableEnded) { - setImmediate(() => onFinished(null)); - } - if ((_c = body.closeEmitted) != null ? _c : body.closed) { - setImmediate(onClose); - } - } - function writeBuffer(abort, body, client, request, socket, contentLength, header, expectsPayload) { - try { - if (!body) { - if (contentLength === 0) { - socket.write(`${header}content-length: 0\r -\r -`, "latin1"); - } else { - assert(contentLength === null, "no body must not have content length"); - socket.write(`${header}\r -`, "latin1"); - } - } else if (util.isBuffer(body)) { - assert(contentLength === body.byteLength, "buffer body must have content length"); - socket.cork(); - socket.write(`${header}content-length: ${contentLength}\r -\r -`, "latin1"); - socket.write(body); - socket.uncork(); - request.onBodySent(body); - if (!expectsPayload && request.reset !== false) { - socket[kReset] = true; - } - } - request.onRequestSent(); - client[kResume](); - } catch (err) { - abort(err); - } - } - function writeBlob(abort, body, client, request, socket, contentLength, header, expectsPayload) { - return __async(this, null, function* () { - assert(contentLength === body.size, "blob body must have content length"); - try { - if (contentLength != null && contentLength !== body.size) { - throw new RequestContentLengthMismatchError(); - } - const buffer = Buffer.from(yield body.arrayBuffer()); - socket.cork(); - socket.write(`${header}content-length: ${contentLength}\r -\r -`, "latin1"); - socket.write(buffer); - socket.uncork(); - request.onBodySent(buffer); - request.onRequestSent(); - if (!expectsPayload && request.reset !== false) { - socket[kReset] = true; - } - client[kResume](); - } catch (err) { - abort(err); - } - }); - } - function writeIterable(abort, body, client, request, socket, contentLength, header, expectsPayload) { - return __async(this, null, function* () { - 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((resolve2, reject) => { - assert(callback === null); - if (socket[kError]) { - reject(socket[kError]); - } else { - callback = resolve2; - } - }); - socket.on("close", onDrain).on("drain", onDrain); - const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header }); - try { - try { - for (var iter = __forAwait(body), more, temp, error; more = !(temp = yield iter.next()).done; more = false) { - const chunk = temp.value; - if (socket[kError]) { - throw socket[kError]; - } - if (!writer.write(chunk)) { - yield waitForDrain(); - } - } - } catch (temp) { - error = [temp]; - } finally { - try { - more && (temp = iter.return) && (yield temp.call(iter)); - } finally { - if (error) - throw error[0]; - } - } - writer.end(); - } catch (err) { - writer.destroy(err); - } finally { - socket.off("close", onDrain).off("drain", onDrain); - } - }); - } - var AsyncWriter = class { - constructor({ abort, 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; - this.abort = abort; - 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; - } - if (contentLength !== null && bytesWritten + len > contentLength) { - if (client[kStrictContentLength]) { - throw new RequestContentLengthMismatchError(); - } - process.emitWarning(new RequestContentLengthMismatchError()); - } - socket.cork(); - if (bytesWritten === 0) { - if (!expectsPayload && request.reset !== false) { - socket[kReset] = true; - } - if (contentLength === null) { - socket.write(`${header}transfer-encoding: chunked\r -`, "latin1"); - } else { - socket.write(`${header}content-length: ${contentLength}\r -\r -`, "latin1"); - } - } - if (contentLength === null) { - socket.write(`\r -${len.toString(16)}\r -`, "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) { - 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) { - socket.write(`${header}content-length: 0\r -\r -`, "latin1"); - } else { - socket.write(`${header}\r -`, "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) { - if (socket[kParser].timeout.refresh) { - socket[kParser].timeout.refresh(); - } - } - client[kResume](); - } - destroy(err) { - const { socket, client, abort } = this; - socket[kWriting] = false; - if (err) { - assert(client[kRunning] <= 1, "pipeline should only contain this request"); - abort(err); - } - } - }; - module.exports = connectH1; - } - }); - - // - var require_client_h2 = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { pipeline } = __require("stream"); - var util = require_util(); - var { - RequestContentLengthMismatchError, - RequestAbortedError, - SocketError, - InformationalError - } = require_errors(); - var { - kUrl, - kReset, - kClient, - kRunning, - kPending, - kQueue, - kPendingIdx, - kRunningIdx, - kError, - kSocket, - kStrictContentLength, - kOnError, - kMaxConcurrentStreams, - kHTTP2Session, - kResume, - kSize, - kHTTPContext - } = require_symbols(); - var kOpenStreams = Symbol("open streams"); - var extractBody; - var h2ExperimentalWarned = false; - var http2; - try { - http2 = __require("http2"); - } catch (e) { - http2 = { constants: {} }; - } - var { - constants: { - HTTP2_HEADER_AUTHORITY, - HTTP2_HEADER_METHOD, - HTTP2_HEADER_PATH, - HTTP2_HEADER_SCHEME, - HTTP2_HEADER_CONTENT_LENGTH, - HTTP2_HEADER_EXPECT, - HTTP2_HEADER_STATUS - } - } = http2; - function parseH2Headers(headers) { - const result = []; - for (const [name, value] of Object.entries(headers)) { - if (Array.isArray(value)) { - for (const subvalue of value) { - result.push(Buffer.from(name), Buffer.from(subvalue)); - } - } else { - result.push(Buffer.from(name), Buffer.from(value)); - } - } - return result; - } - function connectH2(client, socket) { - return __async(this, null, function* () { - client[kSocket] = socket; - 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[kMaxConcurrentStreams] - }); - session[kOpenStreams] = 0; - session[kClient] = client; - session[kSocket] = socket; - util.addListener(session, "error", onHttp2SessionError); - util.addListener(session, "frameError", onHttp2FrameError); - util.addListener(session, "end", onHttp2SessionEnd); - util.addListener(session, "goaway", onHTTP2GoAway); - util.addListener(session, "close", function() { - const { [kClient]: client2 } = this; - const { [kSocket]: socket2 } = client2; - const err = this[kSocket][kError] || this[kError] || new SocketError("closed", util.getSocketInfo(socket2)); - client2[kHTTP2Session] = null; - if (client2.destroyed) { - assert(client2[kPending] === 0); - const requests = client2[kQueue].splice(client2[kRunningIdx]); - for (let i = 0; i < requests.length; i++) { - const request = requests[i]; - util.errorRequest(client2, request, err); - } - } - }); - session.unref(); - client[kHTTP2Session] = session; - socket[kHTTP2Session] = session; - util.addListener(socket, "error", function(err) { - assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); - this[kError] = err; - this[kClient][kOnError](err); - }); - util.addListener(socket, "end", function() { - util.destroy(this, new SocketError("other side closed", util.getSocketInfo(this))); - }); - util.addListener(socket, "close", function() { - const err = this[kError] || new SocketError("closed", util.getSocketInfo(this)); - client[kSocket] = null; - if (this[kHTTP2Session] != null) { - this[kHTTP2Session].destroy(err); - } - client[kPendingIdx] = client[kRunningIdx]; - assert(client[kRunning] === 0); - client.emit("disconnect", client[kUrl], [client], err); - client[kResume](); - }); - let closed = false; - socket.on("close", () => { - closed = true; - }); - return { - version: "h2", - defaultPipelining: Infinity, - write(...args) { - return writeH2(client, ...args); - }, - resume() { - resumeH2(client); - }, - destroy(err, callback) { - if (closed) { - queueMicrotask(callback); - } else { - socket.destroy(err).on("close", callback); - } - }, - get destroyed() { - return socket.destroyed; - }, - busy() { - return false; - } - }; - }); - } - function resumeH2(client) { - const socket = client[kSocket]; - if ((socket == null ? void 0 : socket.destroyed) === false) { - if (client[kSize] === 0 && client[kMaxConcurrentStreams] === 0) { - socket.unref(); - client[kHTTP2Session].unref(); - } else { - socket.ref(); - client[kHTTP2Session].ref(); - } - } - } - function onHttp2SessionError(err) { - assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); - this[kSocket][kError] = err; - this[kClient][kOnError](err); - } - function onHttp2FrameError(type, code, id) { - if (id === 0) { - const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`); - this[kSocket][kError] = err; - this[kClient][kOnError](err); - } - } - function onHttp2SessionEnd() { - const err = new SocketError("other side closed", util.getSocketInfo(this[kSocket])); - this.destroy(err); - util.destroy(this[kSocket], err); - } - function onHTTP2GoAway(code) { - const err = this[kError] || new SocketError(`HTTP/2: "GOAWAY" frame received with code ${code}`, util.getSocketInfo(this)); - const client = this[kClient]; - client[kSocket] = null; - client[kHTTPContext] = null; - if (this[kHTTP2Session] != null) { - this[kHTTP2Session].destroy(err); - this[kHTTP2Session] = null; - } - util.destroy(this[kSocket], err); - if (client[kRunningIdx] < client[kQueue].length) { - const request = client[kQueue][client[kRunningIdx]]; - client[kQueue][client[kRunningIdx]++] = null; - util.errorRequest(client, request, err); - client[kPendingIdx] = client[kRunningIdx]; - } - assert(client[kRunning] === 0); - client.emit("disconnect", client[kUrl], [client], err); - client[kResume](); - } - function shouldSendContentLength(method) { - return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT"; - } - function writeH2(client, request) { - const session = client[kHTTP2Session]; - const { method, path: path5, host, upgrade, expectContinue, signal, headers: reqHeaders } = request; - let { body } = request; - if (upgrade) { - util.errorRequest(client, request, new Error("Upgrade not supported for H2")); - return false; - } - const headers = {}; - for (let n = 0; n < reqHeaders.length; n += 2) { - const key = reqHeaders[n + 0]; - const val = reqHeaders[n + 1]; - if (Array.isArray(val)) { - for (let i = 0; i < val.length; i++) { - if (headers[key]) { - headers[key] += `,${val[i]}`; - } else { - headers[key] = val[i]; - } - } - } else { - headers[key] = val; - } - } - let stream; - const { hostname, port } = client[kUrl]; - headers[HTTP2_HEADER_AUTHORITY] = host || `${hostname}${port ? `:${port}` : ""}`; - headers[HTTP2_HEADER_METHOD] = method; - const abort = (err) => { - if (request.aborted || request.completed) { - return; - } - err = err || new RequestAbortedError(); - util.errorRequest(client, request, err); - if (stream != null) { - util.destroy(stream, err); - } - util.destroy(body, err); - client[kQueue][client[kRunningIdx]++] = null; - client[kResume](); - }; - try { - request.onConnect(abort); - } catch (err) { - util.errorRequest(client, request, err); - } - if (request.aborted) { - return false; - } - if (method === "CONNECT") { - session.ref(); - stream = session.request(headers, { endStream: false, signal }); - if (stream.id && !stream.pending) { - request.onUpgrade(null, null, stream); - ++session[kOpenStreams]; - client[kQueue][client[kRunningIdx]++] = null; - } else { - stream.once("ready", () => { - request.onUpgrade(null, null, stream); - ++session[kOpenStreams]; - client[kQueue][client[kRunningIdx]++] = null; - }); - } - stream.once("close", () => { - session[kOpenStreams] -= 1; - if (session[kOpenStreams] === 0) - session.unref(); - }); - return true; - } - headers[HTTP2_HEADER_PATH] = path5; - headers[HTTP2_HEADER_SCHEME] = "https"; - const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH"; - if (body && typeof body.read === "function") { - body.read(0); - } - let contentLength = util.bodyLength(body); - if (util.isFormDataLike(body)) { - extractBody != null ? extractBody : extractBody = require_body().extractBody; - const [bodyStream, contentType] = extractBody(body); - headers["content-type"] = contentType; - body = bodyStream.stream; - contentLength = bodyStream.length; - } - if (contentLength == null) { - contentLength = request.contentLength; - } - if (contentLength === 0 || !expectsPayload) { - contentLength = null; - } - if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength != null && request.contentLength !== contentLength) { - if (client[kStrictContentLength]) { - util.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" || body === null; - 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(); - } - ++session[kOpenStreams]; - stream.once("response", (headers2) => { - const _a = headers2, { [HTTP2_HEADER_STATUS]: statusCode } = _a, realHeaders = __objRest(_a, [__restKey(HTTP2_HEADER_STATUS)]); - request.onResponseStarted(); - if (request.aborted) { - const err = new RequestAbortedError(); - util.errorRequest(client, request, err); - util.destroy(stream, err); - return; - } - if (request.onHeaders(Number(statusCode), parseH2Headers(realHeaders), stream.resume.bind(stream), "") === false) { - stream.pause(); - } - stream.on("data", (chunk) => { - if (request.onData(chunk) === false) { - stream.pause(); - } - }); - }); - stream.once("end", () => { - var _a; - if (((_a = stream.state) == null ? void 0 : _a.state) == null || stream.state.state < 6) { - request.onComplete([]); - } - if (session[kOpenStreams] === 0) { - session.unref(); - } - abort(new InformationalError("HTTP/2: stream half-closed (remote)")); - client[kQueue][client[kRunningIdx]++] = null; - client[kPendingIdx] = client[kRunningIdx]; - client[kResume](); - }); - stream.once("close", () => { - session[kOpenStreams] -= 1; - if (session[kOpenStreams] === 0) { - session.unref(); - } - }); - stream.once("error", function(err) { - abort(err); - }); - stream.once("frameError", (type, code) => { - abort(new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`)); - }); - return true; - function writeBodyH2() { - if (!body || contentLength === 0) { - writeBuffer( - abort, - stream, - null, - client, - request, - client[kSocket], - contentLength, - expectsPayload - ); - } else if (util.isBuffer(body)) { - writeBuffer( - abort, - stream, - body, - client, - request, - client[kSocket], - contentLength, - expectsPayload - ); - } else if (util.isBlobLike(body)) { - if (typeof body.stream === "function") { - writeIterable( - abort, - stream, - body.stream(), - client, - request, - client[kSocket], - contentLength, - expectsPayload - ); - } else { - writeBlob( - abort, - stream, - body, - client, - request, - client[kSocket], - contentLength, - expectsPayload - ); - } - } else if (util.isStream(body)) { - writeStream( - abort, - client[kSocket], - expectsPayload, - stream, - body, - client, - request, - contentLength - ); - } else if (util.isIterable(body)) { - writeIterable( - abort, - stream, - body, - client, - request, - client[kSocket], - contentLength, - expectsPayload - ); - } else { - assert(false); - } - } - } - function writeBuffer(abort, h2stream, body, client, request, socket, contentLength, expectsPayload) { - try { - if (body != null && util.isBuffer(body)) { - assert(contentLength === body.byteLength, "buffer body must have content length"); - h2stream.cork(); - h2stream.write(body); - h2stream.uncork(); - h2stream.end(); - request.onBodySent(body); - } - if (!expectsPayload) { - socket[kReset] = true; - } - request.onRequestSent(); - client[kResume](); - } catch (error) { - abort(error); - } - } - function writeStream(abort, socket, expectsPayload, h2stream, body, client, request, contentLength) { - assert(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined"); - const pipe = pipeline( - body, - h2stream, - (err) => { - if (err) { - util.destroy(pipe, err); - abort(err); - } else { - util.removeAllListeners(pipe); - request.onRequestSent(); - if (!expectsPayload) { - socket[kReset] = true; - } - client[kResume](); - } - } - ); - util.addListener(pipe, "data", onPipeData); - function onPipeData(chunk) { - request.onBodySent(chunk); - } - } - function writeBlob(abort, h2stream, body, client, request, socket, contentLength, expectsPayload) { - return __async(this, null, function* () { - assert(contentLength === body.size, "blob body must have content length"); - try { - if (contentLength != null && contentLength !== body.size) { - throw new RequestContentLengthMismatchError(); - } - const buffer = Buffer.from(yield body.arrayBuffer()); - h2stream.cork(); - h2stream.write(buffer); - h2stream.uncork(); - h2stream.end(); - request.onBodySent(buffer); - request.onRequestSent(); - if (!expectsPayload) { - socket[kReset] = true; - } - client[kResume](); - } catch (err) { - abort(err); - } - }); - } - function writeIterable(abort, h2stream, body, client, request, socket, contentLength, expectsPayload) { - return __async(this, null, function* () { - 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((resolve2, reject) => { - assert(callback === null); - if (socket[kError]) { - reject(socket[kError]); - } else { - callback = resolve2; - } - }); - h2stream.on("close", onDrain).on("drain", onDrain); - try { - try { - for (var iter = __forAwait(body), more, temp, error; more = !(temp = yield iter.next()).done; more = false) { - const chunk = temp.value; - if (socket[kError]) { - throw socket[kError]; - } - const res = h2stream.write(chunk); - request.onBodySent(chunk); - if (!res) { - yield waitForDrain(); - } - } - } catch (temp) { - error = [temp]; - } finally { - try { - more && (temp = iter.return) && (yield temp.call(iter)); - } finally { - if (error) - throw error[0]; - } - } - h2stream.end(); - request.onRequestSent(); - if (!expectsPayload) { - socket[kReset] = true; - } - client[kResume](); - } catch (err) { - abort(err); - } finally { - h2stream.off("close", onDrain).off("drain", onDrain); - } - }); - } - module.exports = connectH2; - } - }); - - // - var require_redirect_handler = __commonJS({ - ""(exports, module) { - "use strict"; - var util = require_util(); - var { kBodyUsed } = require_symbols(); - var assert = __require("assert"); - var { InvalidArgumentError } = require_errors(); - var EE = __require("events"); - var redirectableStatusCodes = [300, 301, 302, 303, 307, 308]; - var kBody = Symbol("body"); - var BodyAsyncIterable = class { - constructor(body) { - this[kBody] = body; - this[kBodyUsed] = false; - } - [Symbol.asyncIterator]() { - return __asyncGenerator(this, null, function* () { - assert(!this[kBodyUsed], "disturbed"); - this[kBodyUsed] = true; - yield* __yieldStar(this[kBody]); - }); - } - }; - var RedirectHandler = class { - 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 = __spreadProps(__spreadValues({}, opts), { maxRedirections: 0 }); - this.maxRedirections = maxRedirections; - this.handler = handler; - this.history = []; - this.redirectionLimitReached = false; - if (util.isStream(this.opts.body)) { - 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") { - 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)) { - 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.throwOnMaxRedirect && this.history.length >= this.maxRedirections) { - if (this.request) { - this.request.abort(new Error("max redirects")); - } - this.redirectionLimitReached = true; - this.abort(new Error("max redirects")); - return; - } - 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 path5 = search ? `${pathname}${search}` : pathname; - this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin); - this.opts.path = path5; - this.opts.origin = origin; - this.opts.maxRedirections = 0; - this.opts.query = null; - if (statusCode === 303 && this.opts.method !== "HEAD") { - this.opts.method = "GET"; - this.opts.body = null; - } - } - onData(chunk) { - if (this.location) { - } else { - return this.handler.onData(chunk); - } - } - onComplete(trailers) { - if (this.location) { - 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].length === 8 && util.headerNameToString(headers[i]) === "location") { - return headers[i + 1]; - } - } - } - 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; - } - 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; - } - }); - - // - var require_redirect_interceptor = __commonJS({ - ""(exports, module) { - "use strict"; - var RedirectHandler = require_redirect_handler(); - 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 = __spreadProps(__spreadValues({}, opts), { maxRedirections: 0 }); - return dispatch(opts, redirectHandler); - }; - }; - } - module.exports = createRedirectInterceptor; - } - }); - - // - var require_client = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var net = __require("net"); - var http = __require("http"); - var util = require_util(); - var { channels } = require_diagnostics(); - var Request = require_request(); - var DispatcherBase = require_dispatcher_base(); - var { - InvalidArgumentError, - InformationalError, - ClientDestroyedError - } = require_errors(); - var buildConnector = require_connect(); - var { - kUrl, - kServerName, - kClient, - kBusy, - kConnect, - kResuming, - kRunning, - kPending, - kSize, - kQueue, - kConnected, - kConnecting, - kNeedDrain, - kKeepAliveDefaultTimeout, - kHostHeader, - kPendingIdx, - kRunningIdx, - kError, - kPipelining, - kKeepAliveTimeoutValue, - kMaxHeadersSize, - kKeepAliveMaxTimeout, - kKeepAliveTimeoutThreshold, - kHeadersTimeout, - kBodyTimeout, - kStrictContentLength, - kConnector, - kMaxRedirections, - kMaxRequests, - kCounter, - kClose, - kDestroy, - kDispatch, - kInterceptors, - kLocalAddress, - kMaxResponseSize, - kOnError, - kHTTPContext, - kMaxConcurrentStreams, - kResume - } = require_symbols(); - var connectH1 = require_client_h1(); - var connectH2 = require_client_h2(); - var deprecatedInterceptorWarned = false; - var kClosedResolve = Symbol("kClosedResolve"); - var noop = () => { - }; - function getPipelining(client) { - var _a, _b, _c; - return (_c = (_b = client[kPipelining]) != null ? _b : (_a = client[kHTTPContext]) == null ? void 0 : _a.defaultPipelining) != null ? _c : 1; - } - var Client = class extends DispatcherBase { - /** - * - * @param {string|URL} url - * @param {import('../../types/client.js').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: connect2, - maxRequestsPerClient, - localAddress, - maxResponseSize, - autoSelectFamily, - autoSelectFamilyAttemptTimeout, - // h2 - maxConcurrentStreams, - allowH2, - webSocket - } = {}) { - super({ webSocket }); - if (keepAlive !== void 0) { - throw new InvalidArgumentError("unsupported keepAlive, use pipelining=0 instead"); - } - if (socketTimeout !== void 0) { - throw new InvalidArgumentError("unsupported socketTimeout, use headersTimeout & bodyTimeout instead"); - } - if (requestTimeout !== void 0) { - throw new InvalidArgumentError("unsupported requestTimeout, use headersTimeout & bodyTimeout instead"); - } - if (idleTimeout !== void 0) { - throw new InvalidArgumentError("unsupported idleTimeout, use keepAliveTimeout instead"); - } - if (maxKeepAliveTimeout !== void 0) { - 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 (connect2 != null && typeof connect2 !== "function" && typeof connect2 !== "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"); - } - 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 positive integer, greater than 0"); - } - if (typeof connect2 !== "function") { - connect2 = buildConnector(__spreadValues(__spreadValues(__spreadProps(__spreadValues({}, tls), { - maxCachedSessions, - allowH2, - socketPath, - timeout: connectTimeout - }), autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0), connect2)); - } - if ((interceptors == null ? void 0 : interceptors.Client) && Array.isArray(interceptors.Client)) { - this[kInterceptors] = interceptors.Client; - if (!deprecatedInterceptorWarned) { - deprecatedInterceptorWarned = true; - process.emitWarning("Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.", { - code: "UNDICI-CLIENT-INTERCEPTOR-DEPRECATED" - }); - } - } else { - this[kInterceptors] = [createRedirectInterceptor({ maxRedirections })]; - } - this[kUrl] = util.parseOrigin(url); - this[kConnector] = connect2; - this[kPipelining] = pipelining != null ? pipelining : 1; - this[kMaxHeadersSize] = maxHeaderSize || http.maxHeaderSize; - this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout; - this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 6e5 : keepAliveMaxTimeout; - this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 2e3 : keepAliveTimeoutThreshold; - this[kKeepAliveTimeoutValue] = this[kKeepAliveDefaultTimeout]; - this[kServerName] = null; - this[kLocalAddress] = localAddress != null ? localAddress : null; - this[kResuming] = 0; - this[kNeedDrain] = 0; - this[kHostHeader] = `host: ${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ""}\r -`; - this[kBodyTimeout] = bodyTimeout != null ? bodyTimeout : 3e5; - this[kHeadersTimeout] = headersTimeout != null ? headersTimeout : 3e5; - this[kStrictContentLength] = strictContentLength == null ? true : strictContentLength; - this[kMaxRedirections] = maxRedirections; - this[kMaxRequests] = maxRequestsPerClient; - this[kClosedResolve] = null; - this[kMaxResponseSize] = maxResponseSize > -1 ? maxResponseSize : -1; - this[kMaxConcurrentStreams] = maxConcurrentStreams != null ? maxConcurrentStreams : 100; - this[kHTTPContext] = null; - this[kQueue] = []; - this[kRunningIdx] = 0; - this[kPendingIdx] = 0; - this[kResume] = (sync) => resume(this, sync); - this[kOnError] = (err) => onError(this, err); - } - get pipelining() { - return this[kPipelining]; - } - set pipelining(value) { - this[kPipelining] = value; - this[kResume](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[kHTTPContext] && !this[kConnecting] && !this[kHTTPContext].destroyed; - } - get [kBusy]() { - var _a; - return Boolean( - ((_a = this[kHTTPContext]) == null ? void 0 : _a.busy(null)) || this[kSize] >= (getPipelining(this) || 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 = new Request(origin, opts, handler); - this[kQueue].push(request); - if (this[kResuming]) { - } else if (util.bodyLength(request.body) == null && util.isIterable(request.body)) { - this[kResuming] = 1; - queueMicrotask(() => resume(this)); - } else { - this[kResume](true); - } - if (this[kResuming] && this[kNeedDrain] !== 2 && this[kBusy]) { - this[kNeedDrain] = 2; - } - return this[kNeedDrain] < 2; - } - [kClose]() { - return __async(this, null, function* () { - return new Promise((resolve2) => { - if (this[kSize]) { - this[kClosedResolve] = resolve2; - } else { - resolve2(null); - } - }); - }); - } - [kDestroy](err) { - return __async(this, null, function* () { - return new Promise((resolve2) => { - const requests = this[kQueue].splice(this[kPendingIdx]); - for (let i = 0; i < requests.length; i++) { - const request = requests[i]; - util.errorRequest(this, request, err); - } - const callback = () => { - if (this[kClosedResolve]) { - this[kClosedResolve](); - this[kClosedResolve] = null; - } - resolve2(null); - }; - if (this[kHTTPContext]) { - this[kHTTPContext].destroy(err, callback); - this[kHTTPContext] = null; - } else { - queueMicrotask(callback); - } - this[kResume](); - }); - }); - } - }; - var createRedirectInterceptor = require_redirect_interceptor(); - function onError(client, err) { - if (client[kRunning] === 0 && err.code !== "UND_ERR_INFO" && err.code !== "UND_ERR_SOCKET") { - assert(client[kPendingIdx] === client[kRunningIdx]); - const requests = client[kQueue].splice(client[kRunningIdx]); - for (let i = 0; i < requests.length; i++) { - const request = requests[i]; - util.errorRequest(client, request, err); - } - assert(client[kSize] === 0); - } - } - function connect(client) { - return __async(this, null, function* () { - var _a, _b, _c; - assert(!client[kConnecting]); - assert(!client[kHTTPContext]); - let { host, hostname, protocol, port } = client[kUrl]; - 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, - version: (_a = client[kHTTPContext]) == null ? void 0 : _a.version, - servername: client[kServerName], - localAddress: client[kLocalAddress] - }, - connector: client[kConnector] - }); - } - try { - const socket = yield new Promise((resolve2, reject) => { - client[kConnector]({ - host, - hostname, - protocol, - port, - servername: client[kServerName], - localAddress: client[kLocalAddress] - }, (err, socket2) => { - if (err) { - reject(err); - } else { - resolve2(socket2); - } - }); - }); - if (client.destroyed) { - util.destroy(socket.on("error", noop), new ClientDestroyedError()); - return; - } - assert(socket); - try { - client[kHTTPContext] = socket.alpnProtocol === "h2" ? yield connectH2(client, socket) : yield connectH1(client, socket); - } catch (err) { - socket.destroy().on("error", noop); - throw err; - } - client[kConnecting] = false; - socket[kCounter] = 0; - socket[kMaxRequests] = client[kMaxRequests]; - socket[kClient] = client; - socket[kError] = null; - if (channels.connected.hasSubscribers) { - channels.connected.publish({ - connectParams: { - host, - hostname, - protocol, - port, - version: (_b = client[kHTTPContext]) == null ? void 0 : _b.version, - 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, - version: (_c = client[kHTTPContext]) == null ? void 0 : _c.version, - 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]++]; - util.errorRequest(client, request, err); - } - } else { - onError(client, err); - } - client.emit("connectionError", client[kUrl], [client], err); - } - client[kResume](); - }); - } - 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) { - var _a; - while (true) { - if (client.destroyed) { - assert(client[kPending] === 0); - return; - } - if (client[kClosedResolve] && !client[kSize]) { - client[kClosedResolve](); - client[kClosedResolve] = null; - return; - } - if (client[kHTTPContext]) { - client[kHTTPContext].resume(); - } - if (client[kBusy]) { - client[kNeedDrain] = 2; - } else if (client[kNeedDrain] === 2) { - if (sync) { - client[kNeedDrain] = 1; - queueMicrotask(() => emitDrain(client)); - } else { - emitDrain(client); - } - continue; - } - if (client[kPending] === 0) { - return; - } - if (client[kRunning] >= (getPipelining(client) || 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; - (_a = client[kHTTPContext]) == null ? void 0 : _a.destroy(new InformationalError("servername changed"), () => { - client[kHTTPContext] = null; - resume(client); - }); - } - if (client[kConnecting]) { - return; - } - if (!client[kHTTPContext]) { - connect(client); - return; - } - if (client[kHTTPContext].destroyed) { - return; - } - if (client[kHTTPContext].busy(request)) { - return; - } - if (!request.aborted && client[kHTTPContext].write(request)) { - client[kPendingIdx]++; - } else { - client[kQueue].splice(client[kPendingIdx], 1); - } - } - } - module.exports = Client; - } - }); - - // - var require_fixed_queue = __commonJS({ - ""(exports, module) { - "use strict"; - var kSize = 2048; - var kMask = kSize - 1; - var FixedCircularBuffer = class { - 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 === void 0) - return null; - this.list[this.bottom] = void 0; - 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()) { - 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) { - this.tail = tail.next; - } - return next; - } - }; - } - }); - - // - var require_pool_stats = __commonJS({ - ""(exports, module) { - var { kFree, kConnected, kPending, kQueued, kRunning, kSize } = require_symbols(); - var kPool = Symbol("pool"); - var PoolStats = class { - 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; - } - }); - - // - var require_pool_base = __commonJS({ - ""(exports, module) { - "use strict"; - var DispatcherBase = require_dispatcher_base(); - var FixedQueue = require_fixed_queue(); - var { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = require_symbols(); - var PoolStats = require_pool_stats(); - var kClients = Symbol("clients"); - var kNeedDrain = Symbol("needDrain"); - var kQueue = Symbol("queue"); - var kClosedResolve = Symbol("closed resolve"); - var kOnDrain = Symbol("onDrain"); - var kOnConnect = Symbol("onConnect"); - var kOnDisconnect = Symbol("onDisconnect"); - var kOnConnectionError = Symbol("onConnectionError"); - var kGetDispatcher = Symbol("get dispatcher"); - var kAddClient = Symbol("add client"); - var kRemoveClient = Symbol("remove client"); - var kStats = Symbol("stats"); - var PoolBase = class extends DispatcherBase { - constructor(opts) { - super(opts); - 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]; - } - [kClose]() { - return __async(this, null, function* () { - if (this[kQueue].isEmpty()) { - yield Promise.all(this[kClients].map((c) => c.close())); - } else { - yield new Promise((resolve2) => { - this[kClosedResolve] = resolve2; - }); - } - }); - } - [kDestroy](err) { - return __async(this, null, function* () { - while (true) { - const item = this[kQueue].shift(); - if (!item) { - break; - } - item.handler.onError(err); - } - yield 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]) { - queueMicrotask(() => { - 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 - }; - } - }); - - // - var require_pool = __commonJS({ - ""(exports, module) { - "use strict"; - var { - PoolBase, - kClients, - kNeedDrain, - kAddClient, - kGetDispatcher - } = require_pool_base(); - var Client = require_client(); - var { - InvalidArgumentError - } = require_errors(); - var util = require_util(); - var { kUrl, kInterceptors } = require_symbols(); - var buildConnector = require_connect(); - var kOptions = Symbol("options"); - var kConnections = Symbol("connections"); - var kFactory = Symbol("factory"); - function defaultFactory(origin, opts) { - return new Client(origin, opts); - } - var Pool = class extends PoolBase { - constructor(origin, _a = {}) { - var _b = _a, { - connections, - factory = defaultFactory, - connect, - connectTimeout, - tls, - maxCachedSessions, - socketPath, - autoSelectFamily, - autoSelectFamilyAttemptTimeout, - allowH2 - } = _b, options = __objRest(_b, [ - "connections", - "factory", - "connect", - "connectTimeout", - "tls", - "maxCachedSessions", - "socketPath", - "autoSelectFamily", - "autoSelectFamilyAttemptTimeout", - "allowH2" - ]); - var _a2; - 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(__spreadValues(__spreadValues(__spreadProps(__spreadValues({}, tls), { - maxCachedSessions, - allowH2, - socketPath, - timeout: connectTimeout - }), autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0), connect)); - } - super(options); - this[kInterceptors] = ((_a2 = options.interceptors) == null ? void 0 : _a2.Pool) && Array.isArray(options.interceptors.Pool) ? options.interceptors.Pool : []; - this[kConnections] = connections || null; - this[kUrl] = util.parseOrigin(origin); - this[kOptions] = __spreadProps(__spreadValues({}, util.deepClone(options)), { connect, allowH2 }); - this[kOptions].interceptors = options.interceptors ? __spreadValues({}, options.interceptors) : void 0; - this[kFactory] = factory; - this.on("connectionError", (origin2, targets, error) => { - for (const target of targets) { - const idx = this[kClients].indexOf(target); - if (idx !== -1) { - this[kClients].splice(idx, 1); - } - } - }); - } - [kGetDispatcher]() { - for (const client of this[kClients]) { - if (!client[kNeedDrain]) { - return client; - } - } - if (!this[kConnections] || this[kClients].length < this[kConnections]) { - const dispatcher = this[kFactory](this[kUrl], this[kOptions]); - this[kAddClient](dispatcher); - return dispatcher; - } - } - }; - module.exports = Pool; - } - }); - - // - var require_balanced_pool = __commonJS({ - ""(exports, module) { - "use strict"; - var { - BalancedPoolMissingUpstreamError, - InvalidArgumentError - } = require_errors(); - var { - PoolBase, - kClients, - kNeedDrain, - kAddClient, - kRemoveClient, - kGetDispatcher - } = require_pool_base(); - var Pool = require_pool(); - var { kUrl, kInterceptors } = require_symbols(); - var { parseOrigin } = require_util(); - var kFactory = Symbol("factory"); - var kOptions = Symbol("options"); - var kGreatestCommonDivisor = Symbol("kGreatestCommonDivisor"); - var kCurrentWeight = Symbol("kCurrentWeight"); - var kIndex = Symbol("kIndex"); - var kWeight = Symbol("kWeight"); - var kMaxWeightPerServer = Symbol("kMaxWeightPerServer"); - var kErrorPenalty = Symbol("kErrorPenalty"); - function getGreatestCommonDivisor(a, b) { - if (a === 0) - return b; - while (b !== 0) { - const t = b; - b = a % b; - a = t; - } - return a; - } - function defaultFactory(origin, opts) { - return new Pool(origin, opts); - } - var BalancedPool = class extends PoolBase { - constructor(upstreams = [], _a = {}) { - var _b = _a, { factory = defaultFactory } = _b, opts = __objRest(_b, ["factory"]); - var _a2; - 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] = ((_a2 = opts.interceptors) == null ? void 0 : _a2.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((pool2) => pool2[kUrl].origin === upstreamOrigin && pool2.closed !== true && pool2.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") { - 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() { - let result = 0; - for (let i = 0; i < this[kClients].length; i++) { - result = getGreatestCommonDivisor(this[kClients][i][kWeight], result); - } - this[kGreatestCommonDivisor] = result; - } - removeUpstream(upstream) { - const upstreamOrigin = parseOrigin(upstream).origin; - const pool = this[kClients].find((pool2) => pool2[kUrl].origin === upstreamOrigin && pool2.closed !== true && pool2.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]() { - if (this[kClients].length === 0) { - throw new BalancedPoolMissingUpstreamError(); - } - const dispatcher = this[kClients].find((dispatcher2) => !dispatcher2[kNeedDrain] && dispatcher2.closed !== true && dispatcher2.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]]; - if (pool[kWeight] > this[kClients][maxWeightIndex][kWeight] && !pool[kNeedDrain]) { - maxWeightIndex = this[kIndex]; - } - if (this[kIndex] === 0) { - 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; - } - }); - - // - var require_agent = __commonJS({ - ""(exports, module) { - "use strict"; - var { InvalidArgumentError } = require_errors(); - var { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols(); - var DispatcherBase = require_dispatcher_base(); - var Pool = require_pool(); - var Client = require_client(); - var util = require_util(); - var createRedirectInterceptor = require_redirect_interceptor(); - var kOnConnect = Symbol("onConnect"); - var kOnDisconnect = Symbol("onDisconnect"); - var kOnConnectionError = Symbol("onConnectionError"); - var kMaxRedirections = Symbol("maxRedirections"); - var kOnDrain = Symbol("onDrain"); - var kFactory = Symbol("factory"); - var kOptions = Symbol("options"); - function defaultFactory(origin, opts) { - return opts && opts.connections === 1 ? new Client(origin, opts) : new Pool(origin, opts); - } - var Agent = class extends DispatcherBase { - constructor(_a = {}) { - var _b = _a, { factory = defaultFactory, maxRedirections = 0, connect } = _b, options = __objRest(_b, ["factory", "maxRedirections", "connect"]); - var _a2; - 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"); - } - super(options); - if (connect && typeof connect !== "function") { - connect = __spreadValues({}, connect); - } - this[kInterceptors] = ((_a2 = options.interceptors) == null ? void 0 : _a2.Agent) && Array.isArray(options.interceptors.Agent) ? options.interceptors.Agent : [createRedirectInterceptor({ maxRedirections })]; - this[kOptions] = __spreadProps(__spreadValues({}, util.deepClone(options)), { connect }); - this[kOptions].interceptors = options.interceptors ? __spreadValues({}, options.interceptors) : void 0; - this[kMaxRedirections] = maxRedirections; - this[kFactory] = factory; - this[kClients] = /* @__PURE__ */ new Map(); - this[kOnDrain] = (origin, targets) => { - this.emit("drain", origin, [this, ...targets]); - }; - this[kOnConnect] = (origin, targets) => { - this.emit("connect", origin, [this, ...targets]); - }; - this[kOnDisconnect] = (origin, targets, err) => { - this.emit("disconnect", origin, [this, ...targets], err); - }; - this[kOnConnectionError] = (origin, targets, err) => { - this.emit("connectionError", origin, [this, ...targets], err); - }; - } - get [kRunning]() { - let ret = 0; - for (const client of this[kClients].values()) { - 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."); - } - let dispatcher = this[kClients].get(key); - 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, dispatcher); - } - return dispatcher.dispatch(opts, handler); - } - [kClose]() { - return __async(this, null, function* () { - const closePromises = []; - for (const client of this[kClients].values()) { - closePromises.push(client.close()); - } - this[kClients].clear(); - yield Promise.all(closePromises); - }); - } - [kDestroy](err) { - return __async(this, null, function* () { - const destroyPromises = []; - for (const client of this[kClients].values()) { - destroyPromises.push(client.destroy(err)); - } - this[kClients].clear(); - yield Promise.all(destroyPromises); - }); - } - }; - module.exports = Agent; - } - }); - - // - var require_proxy_agent = __commonJS({ - ""(exports, module) { - "use strict"; - var { kProxy, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols(); - var { URL: URL2 } = __require("url"); - var Agent = require_agent(); - var Pool = require_pool(); - var DispatcherBase = require_dispatcher_base(); - var { InvalidArgumentError, RequestAbortedError, SecureProxyConnectionError } = require_errors(); - var buildConnector = require_connect(); - var Client = require_client(); - var kAgent = Symbol("proxy agent"); - var kClient = Symbol("proxy client"); - var kProxyHeaders = Symbol("proxy headers"); - var kRequestTls = Symbol("request tls settings"); - var kProxyTls = Symbol("proxy tls settings"); - var kConnectEndpoint = Symbol("connect endpoint function"); - var kTunnelProxy = Symbol("tunnel proxy"); - function defaultProtocolPort(protocol) { - return protocol === "https:" ? 443 : 80; - } - function defaultFactory(origin, opts) { - return new Pool(origin, opts); - } - var noop = () => { - }; - function defaultAgentFactory(origin, opts) { - if (opts.connections === 1) { - return new Client(origin, opts); - } - return new Pool(origin, opts); - } - var _client; - var Http1ProxyWrapper = class extends DispatcherBase { - constructor(proxyUrl, { headers = {}, connect, factory }) { - super(); - __privateAdd(this, _client, void 0); - if (!proxyUrl) { - throw new InvalidArgumentError("Proxy URL is mandatory"); - } - this[kProxyHeaders] = headers; - if (factory) { - __privateSet(this, _client, factory(proxyUrl, { connect })); - } else { - __privateSet(this, _client, new Client(proxyUrl, { connect })); - } - } - [kDispatch](opts, handler) { - const onHeaders = handler.onHeaders; - handler.onHeaders = function(statusCode, data, resume) { - if (statusCode === 407) { - if (typeof handler.onError === "function") { - handler.onError(new InvalidArgumentError("Proxy Authentication Required (407)")); - } - return; - } - if (onHeaders) - onHeaders.call(this, statusCode, data, resume); - }; - const { - origin, - path: path5 = "/", - headers = {} - } = opts; - opts.path = origin + path5; - if (!("host" in headers) && !("Host" in headers)) { - const { host } = new URL2(origin); - headers.host = host; - } - opts.headers = __spreadValues(__spreadValues({}, this[kProxyHeaders]), headers); - return __privateGet(this, _client)[kDispatch](opts, handler); - } - [kClose]() { - return __async(this, null, function* () { - return __privateGet(this, _client).close(); - }); - } - [kDestroy](err) { - return __async(this, null, function* () { - return __privateGet(this, _client).destroy(err); - }); - } - }; - _client = new WeakMap(); - var _getUrl, getUrl_fn; - var ProxyAgent2 = class extends DispatcherBase { - constructor(opts) { - var _a; - super(); - /** - * @param {import('../types/proxy-agent').ProxyAgent.Options | string | URL} opts - * @returns {URL} - */ - __privateAdd(this, _getUrl); - if (!opts || typeof opts === "object" && !(opts instanceof URL2) && !opts.uri) { - throw new InvalidArgumentError("Proxy uri is mandatory"); - } - const { clientFactory = defaultFactory } = opts; - if (typeof clientFactory !== "function") { - throw new InvalidArgumentError("Proxy opts.clientFactory must be a function."); - } - const { proxyTunnel = true } = opts; - const url = __privateMethod(this, _getUrl, getUrl_fn).call(this, opts); - const { href, origin, port, protocol, username, password, hostname: proxyHostname } = url; - this[kProxy] = { uri: href, protocol }; - this[kInterceptors] = ((_a = opts.interceptors) == null ? void 0 : _a.ProxyAgent) && Array.isArray(opts.interceptors.ProxyAgent) ? opts.interceptors.ProxyAgent : []; - this[kRequestTls] = opts.requestTls; - this[kProxyTls] = opts.proxyTls; - this[kProxyHeaders] = opts.headers || {}; - this[kTunnelProxy] = proxyTunnel; - if (opts.auth && opts.token) { - throw new InvalidArgumentError("opts.auth cannot be used in combination with opts.token"); - } else if (opts.auth) { - 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(__spreadValues({}, opts.proxyTls)); - this[kConnectEndpoint] = buildConnector(__spreadValues({}, opts.requestTls)); - const agentFactory = opts.factory || defaultAgentFactory; - const factory = (origin2, options) => { - const { protocol: protocol2 } = new URL2(origin2); - if (!this[kTunnelProxy] && protocol2 === "http:" && this[kProxy].protocol === "http:") { - return new Http1ProxyWrapper(this[kProxy].uri, { - headers: this[kProxyHeaders], - connect, - factory: agentFactory - }); - } - return agentFactory(origin2, options); - }; - this[kClient] = clientFactory(url, { connect }); - this[kAgent] = new Agent(__spreadProps(__spreadValues({}, opts), { - factory, - connect: (opts2, callback) => __async(this, null, function* () { - var _a2; - let requestedPath = opts2.host; - if (!opts2.port) { - requestedPath += `:${defaultProtocolPort(opts2.protocol)}`; - } - try { - const { socket, statusCode } = yield this[kClient].connect({ - origin, - port, - path: requestedPath, - signal: opts2.signal, - headers: __spreadProps(__spreadValues({}, this[kProxyHeaders]), { - host: opts2.host - }), - servername: ((_a2 = this[kProxyTls]) == null ? void 0 : _a2.servername) || proxyHostname - }); - if (statusCode !== 200) { - socket.on("error", noop).destroy(); - callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`)); - } - if (opts2.protocol !== "https:") { - callback(null, socket); - return; - } - let servername; - if (this[kRequestTls]) { - servername = this[kRequestTls].servername; - } else { - servername = opts2.servername; - } - this[kConnectEndpoint](__spreadProps(__spreadValues({}, opts2), { servername, httpSocket: socket }), callback); - } catch (err) { - if (err.code === "ERR_TLS_CERT_ALTNAME_INVALID") { - callback(new SecureProxyConnectionError(err)); - } else { - callback(err); - } - } - }) - })); - } - dispatch(opts, handler) { - const headers = buildHeaders(opts.headers); - throwIfProxyAuthIsSent(headers); - if (headers && !("host" in headers) && !("Host" in headers)) { - const { host } = new URL2(opts.origin); - headers.host = host; - } - return this[kAgent].dispatch( - __spreadProps(__spreadValues({}, opts), { - headers - }), - handler - ); - } - [kClose]() { - return __async(this, null, function* () { - yield this[kAgent].close(); - yield this[kClient].close(); - }); - } - [kDestroy]() { - return __async(this, null, function* () { - yield this[kAgent].destroy(); - yield this[kClient].destroy(); - }); - } - }; - _getUrl = new WeakSet(); - getUrl_fn = function(opts) { - if (typeof opts === "string") { - return new URL2(opts); - } else if (opts instanceof URL2) { - return opts; - } else { - return new URL2(opts.uri); - } - }; - function buildHeaders(headers) { - if (Array.isArray(headers)) { - const headersPair = {}; - for (let i = 0; i < headers.length; i += 2) { - headersPair[headers[i]] = headers[i + 1]; - } - return headersPair; - } - return headers; - } - 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 = ProxyAgent2; - } - }); - - // - var require_env_http_proxy_agent = __commonJS({ - ""(exports, module) { - "use strict"; - var DispatcherBase = require_dispatcher_base(); - var { kClose, kDestroy, kClosed, kDestroyed, kDispatch, kNoProxyAgent, kHttpProxyAgent, kHttpsProxyAgent } = require_symbols(); - var ProxyAgent2 = require_proxy_agent(); - var Agent = require_agent(); - var DEFAULT_PORTS = { - "http:": 80, - "https:": 443 - }; - var experimentalWarned = false; - var _noProxyValue, _noProxyEntries, _opts, _getProxyAgentForUrl, getProxyAgentForUrl_fn, _shouldProxy, shouldProxy_fn, _parseNoProxy, parseNoProxy_fn, _noProxyChanged, noProxyChanged_get, _noProxyEnv, noProxyEnv_get; - var EnvHttpProxyAgent = class extends DispatcherBase { - constructor(opts = {}) { - var _b, _c; - super(); - __privateAdd(this, _getProxyAgentForUrl); - __privateAdd(this, _shouldProxy); - __privateAdd(this, _parseNoProxy); - __privateAdd(this, _noProxyChanged); - __privateAdd(this, _noProxyEnv); - __privateAdd(this, _noProxyValue, null); - __privateAdd(this, _noProxyEntries, null); - __privateAdd(this, _opts, null); - __privateSet(this, _opts, opts); - if (!experimentalWarned) { - experimentalWarned = true; - process.emitWarning("EnvHttpProxyAgent is experimental, expect them to change at any time.", { - code: "UNDICI-EHPA" - }); - } - const _a = opts, { httpProxy, httpsProxy, noProxy } = _a, agentOpts = __objRest(_a, ["httpProxy", "httpsProxy", "noProxy"]); - this[kNoProxyAgent] = new Agent(agentOpts); - const HTTP_PROXY = (_b = httpProxy != null ? httpProxy : process.env.http_proxy) != null ? _b : process.env.HTTP_PROXY; - if (HTTP_PROXY) { - this[kHttpProxyAgent] = new ProxyAgent2(__spreadProps(__spreadValues({}, agentOpts), { uri: HTTP_PROXY })); - } else { - this[kHttpProxyAgent] = this[kNoProxyAgent]; - } - const HTTPS_PROXY = (_c = httpsProxy != null ? httpsProxy : process.env.https_proxy) != null ? _c : process.env.HTTPS_PROXY; - if (HTTPS_PROXY) { - this[kHttpsProxyAgent] = new ProxyAgent2(__spreadProps(__spreadValues({}, agentOpts), { uri: HTTPS_PROXY })); - } else { - this[kHttpsProxyAgent] = this[kHttpProxyAgent]; - } - __privateMethod(this, _parseNoProxy, parseNoProxy_fn).call(this); - } - [kDispatch](opts, handler) { - const url = new URL(opts.origin); - const agent = __privateMethod(this, _getProxyAgentForUrl, getProxyAgentForUrl_fn).call(this, url); - return agent.dispatch(opts, handler); - } - [kClose]() { - return __async(this, null, function* () { - yield this[kNoProxyAgent].close(); - if (!this[kHttpProxyAgent][kClosed]) { - yield this[kHttpProxyAgent].close(); - } - if (!this[kHttpsProxyAgent][kClosed]) { - yield this[kHttpsProxyAgent].close(); - } - }); - } - [kDestroy](err) { - return __async(this, null, function* () { - yield this[kNoProxyAgent].destroy(err); - if (!this[kHttpProxyAgent][kDestroyed]) { - yield this[kHttpProxyAgent].destroy(err); - } - if (!this[kHttpsProxyAgent][kDestroyed]) { - yield this[kHttpsProxyAgent].destroy(err); - } - }); - } - }; - _noProxyValue = new WeakMap(); - _noProxyEntries = new WeakMap(); - _opts = new WeakMap(); - _getProxyAgentForUrl = new WeakSet(); - getProxyAgentForUrl_fn = function(url) { - let { protocol, host: hostname, port } = url; - hostname = hostname.replace(/:\d*$/, "").toLowerCase(); - port = Number.parseInt(port, 10) || DEFAULT_PORTS[protocol] || 0; - if (!__privateMethod(this, _shouldProxy, shouldProxy_fn).call(this, hostname, port)) { - return this[kNoProxyAgent]; - } - if (protocol === "https:") { - return this[kHttpsProxyAgent]; - } - return this[kHttpProxyAgent]; - }; - _shouldProxy = new WeakSet(); - shouldProxy_fn = function(hostname, port) { - if (__privateGet(this, _noProxyChanged, noProxyChanged_get)) { - __privateMethod(this, _parseNoProxy, parseNoProxy_fn).call(this); - } - if (__privateGet(this, _noProxyEntries).length === 0) { - return true; - } - if (__privateGet(this, _noProxyValue) === "*") { - return false; - } - for (let i = 0; i < __privateGet(this, _noProxyEntries).length; i++) { - const entry = __privateGet(this, _noProxyEntries)[i]; - if (entry.port && entry.port !== port) { - continue; - } - if (!/^[.*]/.test(entry.hostname)) { - if (hostname === entry.hostname) { - return false; - } - } else { - if (hostname.endsWith(entry.hostname.replace(/^\*/, ""))) { - return false; - } - } - } - return true; - }; - _parseNoProxy = new WeakSet(); - parseNoProxy_fn = function() { - var _a; - const noProxyValue = (_a = __privateGet(this, _opts).noProxy) != null ? _a : __privateGet(this, _noProxyEnv, noProxyEnv_get); - const noProxySplit = noProxyValue.split(/[,\s]/); - const noProxyEntries = []; - for (let i = 0; i < noProxySplit.length; i++) { - const entry = noProxySplit[i]; - if (!entry) { - continue; - } - const parsed = entry.match(/^(.+):(\d+)$/); - noProxyEntries.push({ - hostname: (parsed ? parsed[1] : entry).toLowerCase(), - port: parsed ? Number.parseInt(parsed[2], 10) : 0 - }); - } - __privateSet(this, _noProxyValue, noProxyValue); - __privateSet(this, _noProxyEntries, noProxyEntries); - }; - _noProxyChanged = new WeakSet(); - noProxyChanged_get = function() { - if (__privateGet(this, _opts).noProxy !== void 0) { - return false; - } - return __privateGet(this, _noProxyValue) !== __privateGet(this, _noProxyEnv, noProxyEnv_get); - }; - _noProxyEnv = new WeakSet(); - noProxyEnv_get = function() { - var _a, _b; - return (_b = (_a = process.env.no_proxy) != null ? _a : process.env.NO_PROXY) != null ? _b : ""; - }; - module.exports = EnvHttpProxyAgent; - } - }); - - // - var require_retry_handler = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { kRetryHandlerDefaultRetry } = require_symbols(); - var { RequestRetryError } = require_errors(); - var { - isDisturbed, - parseHeaders, - parseRangeHeader, - wrapRequestBody - } = require_util(); - function calculateRetryAfterHeader(retryAfter) { - const current = Date.now(); - return new Date(retryAfter).getTime() - current; - } - function validatePartialResponseContentLength(headers, range, statusCode, retryCount) { - const contentLength = headers["content-length"]; - if (contentLength == null) { - return null; - } - if (!Number.isFinite(range.start) || !Number.isFinite(range.end)) { - return null; - } - const length = Number(contentLength); - const expectedLength = range.end - range.start + 1; - if (!Number.isFinite(length) || length !== expectedLength) { - return new RequestRetryError("Content-Length mismatch", statusCode, { - headers, - data: { count: retryCount } - }); - } - return null; - } - var RetryHandler = class _RetryHandler { - constructor(opts, handlers) { - const _a = opts, { retryOptions } = _a, dispatchOpts = __objRest(_a, ["retryOptions"]); - const { - // Retry scoped - retry: retryFn, - maxRetries, - maxTimeout, - minTimeout, - timeoutFactor, - // Response scoped - methods, - errorCodes, - retryAfter, - statusCodes - } = retryOptions != null ? retryOptions : {}; - this.dispatch = handlers.dispatch; - this.handler = handlers.handler; - this.opts = __spreadProps(__spreadValues({}, dispatchOpts), { body: wrapRequestBody(opts.body) }); - this.abort = null; - this.aborted = false; - this.retryOpts = { - retry: retryFn != null ? retryFn : _RetryHandler[kRetryHandlerDefaultRetry], - retryAfter: retryAfter != null ? retryAfter : true, - maxTimeout: maxTimeout != null ? maxTimeout : 30 * 1e3, - // 30s, - minTimeout: minTimeout != null ? minTimeout : 500, - // .5s - timeoutFactor: timeoutFactor != null ? timeoutFactor : 2, - maxRetries: maxRetries != null ? maxRetries : 5, - // What errors we should retry - methods: methods != null ? methods : ["GET", "HEAD", "OPTIONS", "PUT", "DELETE", "TRACE"], - // Indicates which errors to retry - statusCodes: statusCodes != null ? statusCodes : [500, 502, 503, 504, 429], - // List of errors to retry - errorCodes: errorCodes != null ? errorCodes : [ - "ECONNRESET", - "ECONNREFUSED", - "ENOTFOUND", - "ENETDOWN", - "ENETUNREACH", - "EHOSTDOWN", - "EHOSTUNREACH", - "EPIPE", - "UND_ERR_SOCKET" - ] - }; - this.retryCount = 0; - this.retryCountCheckpoint = 0; - this.start = 0; - this.end = null; - this.etag = null; - this.resume = null; - 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, - minTimeout, - maxTimeout, - timeoutFactor, - statusCodes, - errorCodes, - methods - } = retryOptions; - const { counter } = state; - if (code && code !== "UND_ERR_REQ_RETRY" && !errorCodes.includes(code)) { - cb(err); - return; - } - if (Array.isArray(methods) && !methods.includes(method)) { - cb(err); - return; - } - if (statusCode != null && Array.isArray(statusCodes) && !statusCodes.includes(statusCode)) { - cb(err); - return; - } - if (counter > maxRetries) { - cb(err); - return; - } - let retryAfterHeader = headers == null ? void 0 : headers["retry-after"]; - if (retryAfterHeader) { - retryAfterHeader = Number(retryAfterHeader); - retryAfterHeader = Number.isNaN(retryAfterHeader) ? calculateRetryAfterHeader(retryAfterHeader) : retryAfterHeader * 1e3; - } - const retryTimeout = retryAfterHeader > 0 ? Math.min(retryAfterHeader, maxTimeout) : Math.min(minTimeout * __pow(timeoutFactor, counter - 1), maxTimeout); - setTimeout(() => cb(null), retryTimeout); - } - onHeaders(statusCode, rawHeaders, resume, statusMessage) { - const headers = parseHeaders(rawHeaders); - this.retryCount += 1; - if (statusCode >= 300) { - if (this.retryOpts.statusCodes.includes(statusCode) === false) { - return this.handler.onHeaders( - statusCode, - rawHeaders, - resume, - statusMessage - ); - } else { - this.abort( - new RequestRetryError("Request failed", statusCode, { - headers, - data: { - count: this.retryCount - } - }) - ); - return false; - } - } - if (this.resume != null) { - this.resume = null; - if (statusCode !== 206 && (this.start > 0 || statusCode !== 200)) { - this.abort( - new RequestRetryError("server does not support the range header and the payload was partially consumed", statusCode, { - headers, - data: { count: this.retryCount } - }) - ); - return false; - } - const contentRange = parseRangeHeader(headers["content-range"]); - if (!contentRange) { - this.abort( - new RequestRetryError("Content-Range mismatch", statusCode, { - headers, - data: { count: this.retryCount } - }) - ); - return false; - } - if (this.etag != null && this.etag !== headers.etag) { - this.abort( - new RequestRetryError("ETag mismatch", statusCode, { - headers, - data: { count: this.retryCount } - }) - ); - return false; - } - const contentLengthError = validatePartialResponseContentLength(headers, contentRange, statusCode, this.retryCount); - if (contentLengthError != null) { - this.abort(contentLengthError); - return false; - } - const { start, size, end = size - 1 } = 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) { - const range = parseRangeHeader(headers["content-range"]); - if (range == null) { - return this.handler.onHeaders( - statusCode, - rawHeaders, - resume, - statusMessage - ); - } - const contentLengthError = validatePartialResponseContentLength(headers, range, statusCode, this.retryCount); - if (contentLengthError != null) { - this.abort(contentLengthError); - return false; - } - const { start, size, end = size - 1 } = range; - assert( - start != null && Number.isFinite(start), - "content-range mismatch" - ); - assert(end != null && Number.isFinite(end), "invalid content-length"); - this.start = start; - this.end = end; - } - if (this.end == null) { - const contentLength = headers["content-length"]; - this.end = contentLength != null ? Number(contentLength) - 1 : 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; - if (this.etag != null && this.etag.startsWith("W/")) { - this.etag = null; - } - return this.handler.onHeaders( - statusCode, - rawHeaders, - resume, - statusMessage - ); - } - const err = new RequestRetryError("Request failed", statusCode, { - headers, - data: { 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); - } - if (this.retryCount - this.retryCountCheckpoint > 0) { - this.retryCount = this.retryCountCheckpoint + (this.retryCount - this.retryCountCheckpoint); - } else { - this.retryCount += 1; - } - this.retryOpts.retry( - err, - { - state: { counter: this.retryCount }, - opts: __spreadValues({ retryOptions: this.retryOpts }, this.opts) - }, - onRetry.bind(this) - ); - function onRetry(err2) { - var _a; - if (err2 != null || this.aborted || isDisturbed(this.opts.body)) { - return this.handler.onError(err2); - } - if (this.start !== 0) { - const headers = { range: `bytes=${this.start}-${(_a = this.end) != null ? _a : ""}` }; - if (this.etag != null) { - headers["if-match"] = this.etag; - } - this.opts = __spreadProps(__spreadValues({}, this.opts), { - headers: __spreadValues(__spreadValues({}, this.opts.headers), headers) - }); - } - try { - this.retryCountCheckpoint = this.retryCount; - this.dispatch(this.opts, this); - } catch (err3) { - this.handler.onError(err3); - } - } - } - }; - module.exports = RetryHandler; - } - }); - - // - var require_retry_agent = __commonJS({ - ""(exports, module) { - "use strict"; - var Dispatcher = require_dispatcher(); - var RetryHandler = require_retry_handler(); - var _agent, _options; - var RetryAgent = class extends Dispatcher { - constructor(agent, options = {}) { - super(options); - __privateAdd(this, _agent, null); - __privateAdd(this, _options, null); - __privateSet(this, _agent, agent); - __privateSet(this, _options, options); - } - dispatch(opts, handler) { - const retry = new RetryHandler(__spreadProps(__spreadValues({}, opts), { - retryOptions: __privateGet(this, _options) - }), { - dispatch: __privateGet(this, _agent).dispatch.bind(__privateGet(this, _agent)), - handler - }); - return __privateGet(this, _agent).dispatch(opts, retry); - } - close() { - return __privateGet(this, _agent).close(); - } - destroy() { - return __privateGet(this, _agent).destroy(); - } - }; - _agent = new WeakMap(); - _options = new WeakMap(); - module.exports = RetryAgent; - } - }); - - // - var require_readable = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { Readable } = __require("stream"); - var { RequestAbortedError, NotSupportedError, InvalidArgumentError, AbortError } = require_errors(); - var util = require_util(); - var { ReadableStreamFrom } = require_util(); - var kConsume = Symbol("kConsume"); - var kReading = Symbol("kReading"); - var kBody = Symbol("kBody"); - var kAbort = Symbol("kAbort"); - var kContentType = Symbol("kContentType"); - var kContentLength = Symbol("kContentLength"); - var noop = () => { - }; - var BodyReadable = class extends Readable { - constructor({ - resume, - abort, - contentType = "", - contentLength, - 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; - this[kContentLength] = contentLength; - this[kReading] = false; - } - destroy(err) { - if (!err && !this._readableState.endEmitted) { - err = new RequestAbortedError(); - } - if (err) { - this[kAbort](); - } - return super.destroy(err); - } - _destroy(err, callback) { - if (!this[kReading]) { - setImmediate(() => { - callback(err); - }); - } else { - callback(err); - } - } - 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) { - consumePush(this[kConsume], chunk); - return this[kReading] ? super.push(chunk) : true; - } - return super.push(chunk); - } - // https://fetch.spec.whatwg.org/#dom-body-text - text() { - return __async(this, null, function* () { - return consume(this, "text"); - }); - } - // https://fetch.spec.whatwg.org/#dom-body-json - json() { - return __async(this, null, function* () { - return consume(this, "json"); - }); - } - // https://fetch.spec.whatwg.org/#dom-body-blob - blob() { - return __async(this, null, function* () { - return consume(this, "blob"); - }); - } - // https://fetch.spec.whatwg.org/#dom-body-bytes - bytes() { - return __async(this, null, function* () { - return consume(this, "bytes"); - }); - } - // https://fetch.spec.whatwg.org/#dom-body-arraybuffer - arrayBuffer() { - return __async(this, null, function* () { - return consume(this, "arrayBuffer"); - }); - } - // https://fetch.spec.whatwg.org/#dom-body-formdata - formData() { - return __async(this, null, function* () { - 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]) { - this[kBody].getReader(); - assert(this[kBody].locked); - } - } - return this[kBody]; - } - dump(opts) { - return __async(this, null, function* () { - let limit = Number.isFinite(opts == null ? void 0 : opts.limit) ? opts.limit : 128 * 1024; - const signal = opts == null ? void 0 : opts.signal; - if (signal != null && (typeof signal !== "object" || !("aborted" in signal))) { - throw new InvalidArgumentError("signal must be an AbortSignal"); - } - signal == null ? void 0 : signal.throwIfAborted(); - if (this._readableState.closeEmitted) { - return null; - } - return yield new Promise((resolve2, reject) => { - if (this[kContentLength] > limit) { - this.destroy(new AbortError()); - } - const onAbort = () => { - var _a; - this.destroy((_a = signal.reason) != null ? _a : new AbortError()); - }; - signal == null ? void 0 : signal.addEventListener("abort", onAbort); - this.on("close", function() { - var _a; - signal == null ? void 0 : signal.removeEventListener("abort", onAbort); - if (signal == null ? void 0 : signal.aborted) { - reject((_a = signal.reason) != null ? _a : new AbortError()); - } else { - resolve2(null); - } - }).on("error", noop).on("data", function(chunk) { - limit -= chunk.length; - if (limit <= 0) { - this.destroy(); - } - }).resume(); - }); - }); - } - }; - function isLocked(self) { - return self[kBody] && self[kBody].locked === true || self[kConsume]; - } - function isUnusable(self) { - return util.isDisturbed(self) || isLocked(self); - } - function consume(stream, type) { - return __async(this, null, function* () { - assert(!stream[kConsume]); - return new Promise((resolve2, reject) => { - var _a; - if (isUnusable(stream)) { - const rState = stream._readableState; - if (rState.destroyed && rState.closeEmitted === false) { - stream.on("error", (err) => { - reject(err); - }).on("close", () => { - reject(new TypeError("unusable")); - }); - } else { - reject((_a = rState.errored) != null ? _a : new TypeError("unusable")); - } - } else { - queueMicrotask(() => { - stream[kConsume] = { - type, - stream, - resolve: resolve2, - 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()); - } - }); - consumeStart(stream[kConsume]); - }); - } - }); - }); - } - function consumeStart(consume2) { - if (consume2.body === null) { - return; - } - const { _readableState: state } = consume2.stream; - if (state.bufferIndex) { - const start = state.bufferIndex; - const end = state.buffer.length; - for (let n = start; n < end; n++) { - consumePush(consume2, state.buffer[n]); - } - } else { - for (const chunk of state.buffer) { - consumePush(consume2, chunk); - } - } - if (state.endEmitted) { - consumeEnd(this[kConsume]); - } else { - consume2.stream.on("end", function() { - consumeEnd(this[kConsume]); - }); - } - consume2.stream.resume(); - while (consume2.stream.read() != null) { - } - } - function chunksDecode(chunks, length) { - if (chunks.length === 0 || length === 0) { - return ""; - } - const buffer = chunks.length === 1 ? chunks[0] : Buffer.concat(chunks, length); - const bufferLength = buffer.length; - const start = bufferLength > 2 && buffer[0] === 239 && buffer[1] === 187 && buffer[2] === 191 ? 3 : 0; - return buffer.utf8Slice(start, bufferLength); - } - function chunksConcat(chunks, length) { - if (chunks.length === 0 || length === 0) { - return new Uint8Array(0); - } - if (chunks.length === 1) { - return new Uint8Array(chunks[0]); - } - const buffer = new Uint8Array(Buffer.allocUnsafeSlow(length).buffer); - let offset = 0; - for (let i = 0; i < chunks.length; ++i) { - const chunk = chunks[i]; - buffer.set(chunk, offset); - offset += chunk.length; - } - return buffer; - } - function consumeEnd(consume2) { - const { type, body, resolve: resolve2, stream, length } = consume2; - try { - if (type === "text") { - resolve2(chunksDecode(body, length)); - } else if (type === "json") { - resolve2(JSON.parse(chunksDecode(body, length))); - } else if (type === "arrayBuffer") { - resolve2(chunksConcat(body, length).buffer); - } else if (type === "blob") { - resolve2(new Blob(body, { type: stream[kContentType] })); - } else if (type === "bytes") { - resolve2(chunksConcat(body, length)); - } - consumeFinish(consume2); - } catch (err) { - stream.destroy(err); - } - } - function consumePush(consume2, chunk) { - consume2.length += chunk.length; - consume2.body.push(chunk); - } - function consumeFinish(consume2, err) { - if (consume2.body === null) { - return; - } - if (err) { - consume2.reject(err); - } else { - consume2.resolve(); - } - consume2.type = null; - consume2.stream = null; - consume2.resolve = null; - consume2.reject = null; - consume2.length = 0; - consume2.body = null; - } - module.exports = { Readable: BodyReadable, chunksDecode }; - } - }); - - // - var require_util3 = __commonJS({ - ""(exports, module) { - var assert = __require("assert"); - var { - ResponseStatusCodeError - } = require_errors(); - var { chunksDecode } = require_readable(); - var CHUNK_LIMIT = 128 * 1024; - function getResolveErrorBodyCallback(_0) { - return __async(this, arguments, function* ({ callback, body, contentType, statusCode, statusMessage, headers }) { - assert(body); - let chunks = []; - let length = 0; - try { - try { - for (var iter = __forAwait(body), more, temp, error; more = !(temp = yield iter.next()).done; more = false) { - const chunk = temp.value; - chunks.push(chunk); - length += chunk.length; - if (length > CHUNK_LIMIT) { - chunks = []; - length = 0; - break; - } - } - } catch (temp) { - error = [temp]; - } finally { - try { - more && (temp = iter.return) && (yield temp.call(iter)); - } finally { - if (error) - throw error[0]; - } - } - } catch (e) { - chunks = []; - length = 0; - } - const message = `Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ""}`; - if (statusCode === 204 || !contentType || !length) { - queueMicrotask(() => callback(new ResponseStatusCodeError(message, statusCode, headers))); - return; - } - const stackTraceLimit = Error.stackTraceLimit; - Error.stackTraceLimit = 0; - let payload; - try { - if (isContentTypeApplicationJson(contentType)) { - payload = JSON.parse(chunksDecode(chunks, length)); - } else if (isContentTypeText(contentType)) { - payload = chunksDecode(chunks, length); - } - } catch (e) { - } finally { - Error.stackTraceLimit = stackTraceLimit; - } - queueMicrotask(() => callback(new ResponseStatusCodeError(message, statusCode, headers, payload))); - }); - } - var isContentTypeApplicationJson = (contentType) => { - return contentType.length > 15 && contentType[11] === "/" && contentType[0] === "a" && contentType[1] === "p" && contentType[2] === "p" && contentType[3] === "l" && contentType[4] === "i" && contentType[5] === "c" && contentType[6] === "a" && contentType[7] === "t" && contentType[8] === "i" && contentType[9] === "o" && contentType[10] === "n" && contentType[12] === "j" && contentType[13] === "s" && contentType[14] === "o" && contentType[15] === "n"; - }; - var isContentTypeText = (contentType) => { - return contentType.length > 4 && contentType[4] === "/" && contentType[0] === "t" && contentType[1] === "e" && contentType[2] === "x" && contentType[3] === "t"; - }; - module.exports = { - getResolveErrorBodyCallback, - isContentTypeApplicationJson, - isContentTypeText - }; - } - }); - - // - var require_api_request = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { Readable } = require_readable(); - var { InvalidArgumentError, RequestAbortedError } = require_errors(); - var util = require_util(); - var { getResolveErrorBodyCallback } = require_util3(); - var { AsyncResource } = __require("async_hooks"); - var RequestHandler = class extends AsyncResource { - constructor(opts, callback) { - var _a; - 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.method = method; - 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; - this.signal = signal; - this.reason = null; - this.removeAbortListener = null; - if (util.isStream(body)) { - body.on("error", (err) => { - this.onError(err); - }); - } - if (this.signal) { - if (this.signal.aborted) { - this.reason = (_a = this.signal.reason) != null ? _a : new RequestAbortedError(); - } else { - this.removeAbortListener = util.addAbortListener(this.signal, () => { - var _a2, _b; - this.reason = (_a2 = this.signal.reason) != null ? _a2 : new RequestAbortedError(); - if (this.res) { - util.destroy(this.res.on("error", util.nop), this.reason); - } else if (this.abort) { - this.abort(this.reason); - } - if (this.removeAbortListener) { - (_b = this.res) == null ? void 0 : _b.off("close", this.removeAbortListener); - this.removeAbortListener(); - this.removeAbortListener = null; - } - }); - } - } - } - onConnect(abort, context) { - if (this.reason) { - abort(this.reason); - return; - } - assert(this.callback); - 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 contentLength = parsedHeaders["content-length"]; - const res = new Readable({ - resume, - abort, - contentType, - contentLength: this.method !== "HEAD" && contentLength ? Number(contentLength) : null, - highWaterMark - }); - if (this.removeAbortListener) { - res.on("close", this.removeAbortListener); - } - this.callback = null; - this.res = res; - if (callback !== null) { - if (this.throwOnError && statusCode >= 400) { - this.runInAsyncScope( - getResolveErrorBodyCallback, - null, - { callback, body: res, contentType, statusCode, statusMessage, headers } - ); - } else { - this.runInAsyncScope(callback, null, null, { - statusCode, - headers, - trailers: this.trailers, - opaque, - body: res, - context - }); - } - } - } - onData(chunk) { - return this.res.push(chunk); - } - onComplete(trailers) { - util.parseHeaders(trailers, this.trailers); - this.res.push(null); - } - onError(err) { - const { res, callback, body, opaque } = this; - if (callback) { - this.callback = null; - queueMicrotask(() => { - this.runInAsyncScope(callback, null, err, { opaque }); - }); - } - if (res) { - this.res = null; - queueMicrotask(() => { - util.destroy(res, err); - }); - } - if (body) { - this.body = null; - util.destroy(body, err); - } - if (this.removeAbortListener) { - res == null ? void 0 : res.off("close", this.removeAbortListener); - this.removeAbortListener(); - this.removeAbortListener = null; - } - } - }; - function request(opts, callback) { - if (callback === void 0) { - return new Promise((resolve2, reject) => { - request.call(this, opts, (err, data) => { - return err ? reject(err) : resolve2(data); - }); - }); - } - try { - this.dispatch(opts, new RequestHandler(opts, callback)); - } catch (err) { - if (typeof callback !== "function") { - throw err; - } - const opaque = opts == null ? void 0 : opts.opaque; - queueMicrotask(() => callback(err, { opaque })); - } - } - module.exports = request; - module.exports.RequestHandler = RequestHandler; - } - }); - - // - var require_abort_signal = __commonJS({ - ""(exports, module) { - var { addAbortListener } = require_util(); - var { RequestAbortedError } = require_errors(); - var kListener = Symbol("kListener"); - var kSignal = Symbol("kSignal"); - function abort(self) { - var _a, _b, _c; - if (self.abort) { - self.abort((_a = self[kSignal]) == null ? void 0 : _a.reason); - } else { - self.reason = (_c = (_b = self[kSignal]) == null ? void 0 : _b.reason) != null ? _c : new RequestAbortedError(); - } - removeSignal(self); - } - function addSignal(self, signal) { - self.reason = null; - 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 - }; - } - }); - - // - var require_api_stream = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { finished, PassThrough } = __require("stream"); - var { InvalidArgumentError, InvalidReturnValueError } = require_errors(); - var util = require_util(); - var { getResolveErrorBodyCallback } = require_util3(); - var { AsyncResource } = __require("async_hooks"); - var { addSignal, removeSignal } = require_abort_signal(); - var StreamHandler = class 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.reason) { - abort(this.reason); - return; - } - assert(this.callback); - this.abort = abort; - this.context = context; - } - onHeaders(statusCode, rawHeaders, resume, statusMessage) { - var _a; - 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"); - } - finished(res, { readable: false }, (err) => { - const { callback: callback2, res: res2, opaque: opaque2, trailers, abort } = this; - this.res = null; - if (err || !res2.readable) { - util.destroy(res2, err); - } - this.callback = null; - this.runInAsyncScope(callback2, null, err || null, { opaque: opaque2, trailers }); - if (err) { - abort(); - } - }); - } - res.on("drain", resume); - this.res = res; - const needDrain = res.writableNeedDrain !== void 0 ? res.writableNeedDrain : (_a = res._writableState) == null ? void 0 : _a.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 === void 0) { - return new Promise((resolve2, reject) => { - stream.call(this, opts, factory, (err, data) => { - return err ? reject(err) : resolve2(data); - }); - }); - } - try { - this.dispatch(opts, new StreamHandler(opts, factory, callback)); - } catch (err) { - if (typeof callback !== "function") { - throw err; - } - const opaque = opts == null ? void 0 : opts.opaque; - queueMicrotask(() => callback(err, { opaque })); - } - } - module.exports = stream; - } - }); - - // - var require_api_pipeline = __commonJS({ - ""(exports, module) { - "use strict"; - var { - Readable, - Duplex, - PassThrough - } = __require("stream"); - var { - InvalidArgumentError, - InvalidReturnValueError, - RequestAbortedError - } = require_errors(); - var util = require_util(); - var { AsyncResource } = __require("async_hooks"); - var { addSignal, removeSignal } = require_abort_signal(); - var assert = __require("assert"); - var kResume = Symbol("resume"); - var PipelineRequest = class 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); - } - }; - var PipelineResponse = class 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); - } - }; - var PipelineHandler = class 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 == null ? void 0 : 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; - req.push(null); - }); - this.res = null; - addSignal(this, signal); - } - onConnect(abort, context) { - const { ret, res } = this; - if (this.reason) { - abort(this.reason); - return; - } - assert(!res, "pipeline cannot be retried"); - assert(!ret.destroyed); - 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: body2 } = this; - if (!ret.push(chunk) && body2.pause) { - body2.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(__spreadProps(__spreadValues({}, opts), { body: pipelineHandler.req }), pipelineHandler); - return pipelineHandler.ret; - } catch (err) { - return new PassThrough().destroy(err); - } - } - module.exports = pipeline; - } - }); - - // - var require_api_upgrade = __commonJS({ - ""(exports, module) { - "use strict"; - var { InvalidArgumentError, SocketError } = require_errors(); - var { AsyncResource } = __require("async_hooks"); - var util = require_util(); - var { addSignal, removeSignal } = require_abort_signal(); - var assert = __require("assert"); - var UpgradeHandler = class 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.reason) { - abort(this.reason); - return; - } - assert(this.callback); - this.abort = abort; - this.context = null; - } - onHeaders() { - throw new SocketError("bad upgrade", null); - } - onUpgrade(statusCode, rawHeaders, socket) { - assert(statusCode === 101); - const { callback, opaque, context } = this; - 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 === void 0) { - return new Promise((resolve2, reject) => { - upgrade.call(this, opts, (err, data) => { - return err ? reject(err) : resolve2(data); - }); - }); - } - try { - const upgradeHandler = new UpgradeHandler(opts, callback); - this.dispatch(__spreadProps(__spreadValues({}, opts), { - method: opts.method || "GET", - upgrade: opts.protocol || "Websocket" - }), upgradeHandler); - } catch (err) { - if (typeof callback !== "function") { - throw err; - } - const opaque = opts == null ? void 0 : opts.opaque; - queueMicrotask(() => callback(err, { opaque })); - } - } - module.exports = upgrade; - } - }); - - // - var require_api_connect = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { AsyncResource } = __require("async_hooks"); - var { InvalidArgumentError, SocketError } = require_errors(); - var util = require_util(); - var { addSignal, removeSignal } = require_abort_signal(); - var ConnectHandler = class 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.reason) { - abort(this.reason); - return; - } - assert(this.callback); - 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; - 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 === void 0) { - return new Promise((resolve2, reject) => { - connect.call(this, opts, (err, data) => { - return err ? reject(err) : resolve2(data); - }); - }); - } - try { - const connectHandler = new ConnectHandler(opts, callback); - this.dispatch(__spreadProps(__spreadValues({}, opts), { method: "CONNECT" }), connectHandler); - } catch (err) { - if (typeof callback !== "function") { - throw err; - } - const opaque = opts == null ? void 0 : opts.opaque; - queueMicrotask(() => callback(err, { opaque })); - } - } - module.exports = connect; - } - }); - - // - var require_api = __commonJS({ - ""(exports, module) { - "use strict"; - module.exports.request = require_api_request(); - module.exports.stream = require_api_stream(); - module.exports.pipeline = require_api_pipeline(); - module.exports.upgrade = require_api_upgrade(); - module.exports.connect = require_api_connect(); - } - }); - - // - var require_mock_errors = __commonJS({ - ""(exports, module) { - "use strict"; - var { UndiciError } = require_errors(); - var kMockNotMatchedError = Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED"); - var _a; - var _MockNotMatchedError = class _MockNotMatchedError extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a, true); - 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"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kMockNotMatchedError] === true; - } - }; - _a = kMockNotMatchedError; - var MockNotMatchedError = _MockNotMatchedError; - module.exports = { - MockNotMatchedError - }; - } - }); - - // - var require_mock_symbols = __commonJS({ - ""(exports, 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") - }; - } - }); - - // - var require_mock_utils = __commonJS({ - ""(exports, module) { - "use strict"; - var { MockNotMatchedError } = require_mock_errors(); - var { - kDispatches, - kMockAgent, - kOriginalDispatch, - kOrigin, - kGetNetConnect - } = require_mock_symbols(); - var { buildURL } = require_util(); - var { STATUS_CODES } = __require("http"); - var { - types: { - isPromise - } - } = __require("util"); - 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]; - }) - ); - } - 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 void 0; - } else if (typeof headers.get === "function") { - return headers.get(key); - } else { - return lowerCaseEntries(headers)[key.toLocaleLowerCase()]; - } - } - function buildHeadersFromArray(headers) { - 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(mockDispatch2, headers) { - if (typeof mockDispatch2.headers === "function") { - if (Array.isArray(headers)) { - headers = buildHeadersFromArray(headers); - } - return mockDispatch2.headers(headers ? lowerCaseEntries(headers) : {}); - } - if (typeof mockDispatch2.headers === "undefined") { - return true; - } - if (typeof headers !== "object" || typeof mockDispatch2.headers !== "object") { - return false; - } - for (const [matchHeaderName, matchHeaderValue] of Object.entries(mockDispatch2.headers)) { - const headerValue = getHeaderByName(headers, matchHeaderName); - if (!matchValue(matchHeaderValue, headerValue)) { - return false; - } - } - return true; - } - function safeUrl(path5) { - if (typeof path5 !== "string") { - return path5; - } - const pathSegments = path5.split("?"); - if (pathSegments.length !== 2) { - return path5; - } - const qp = new URLSearchParams(pathSegments.pop()); - qp.sort(); - return [...pathSegments, qp.toString()].join("?"); - } - function matchKey(mockDispatch2, { path: path5, method, body, headers }) { - const pathMatch = matchValue(mockDispatch2.path, path5); - const methodMatch = matchValue(mockDispatch2.method, method); - const bodyMatch = typeof mockDispatch2.body !== "undefined" ? matchValue(mockDispatch2.body, body) : true; - const headersMatch = matchHeaders(mockDispatch2, headers); - return pathMatch && methodMatch && bodyMatch && headersMatch; - } - function getResponseData(data) { - if (Buffer.isBuffer(data)) { - return data; - } else if (data instanceof Uint8Array) { - return data; - } else if (data instanceof ArrayBuffer) { - 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; - let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path: path5 }) => matchValue(safeUrl(path5), resolvedPath)); - if (matchedMockDispatches.length === 0) { - throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`); - } - matchedMockDispatches = matchedMockDispatches.filter(({ method }) => matchValue(method, key.method)); - if (matchedMockDispatches.length === 0) { - throw new MockNotMatchedError(`Mock dispatch not matched for method '${key.method}' on path '${resolvedPath}'`); - } - 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}' on path '${resolvedPath}'`); - } - matchedMockDispatches = matchedMockDispatches.filter((mockDispatch2) => matchHeaders(mockDispatch2, key.headers)); - if (matchedMockDispatches.length === 0) { - const headers = typeof key.headers === "object" ? JSON.stringify(key.headers) : key.headers; - throw new MockNotMatchedError(`Mock dispatch not matched for headers '${headers}' on path '${resolvedPath}'`); - } - 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 } : __spreadValues({}, data); - const newMockDispatch = __spreadProps(__spreadValues(__spreadValues({}, baseData), key), { pending: true, data: __spreadValues({ 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: path5, method, body, headers, query } = opts; - return { - path: path5, - method, - body, - headers, - query - }; - } - function generateKeyValues(data) { - const keys = Object.keys(data); - const result = []; - for (let i = 0; i < keys.length; ++i) { - const key = keys[i]; - const value = data[key]; - const name = Buffer.from(`${key}`); - if (Array.isArray(value)) { - for (let j = 0; j < value.length; ++j) { - result.push(name, Buffer.from(`${value[j]}`)); - } - } else { - result.push(name, Buffer.from(`${value}`)); - } - } - return result; - } - function getStatusText(statusCode) { - return STATUS_CODES[statusCode] || "unknown"; - } - function getResponse(body) { - return __async(this, null, function* () { - const buffers = []; - try { - for (var iter = __forAwait(body), more, temp, error; more = !(temp = yield iter.next()).done; more = false) { - const data = temp.value; - buffers.push(data); - } - } catch (temp) { - error = [temp]; - } finally { - try { - more && (temp = iter.return) && (yield temp.call(iter)); - } finally { - if (error) - throw error[0]; - } - } - return Buffer.concat(buffers).toString("utf8"); - }); - } - function mockDispatch(opts, handler) { - const key = buildKey(opts); - const mockDispatch2 = getMockDispatch(this[kDispatches], key); - mockDispatch2.timesInvoked++; - if (mockDispatch2.data.callback) { - mockDispatch2.data = __spreadValues(__spreadValues({}, mockDispatch2.data), mockDispatch2.data.callback(opts)); - } - const { data: { statusCode, data, headers, trailers, error }, delay, persist } = mockDispatch2; - const { timesInvoked, times } = mockDispatch2; - mockDispatch2.consumed = !persist && timesInvoked >= times; - mockDispatch2.pending = timesInvoked < times; - if (error !== null) { - deleteMockDispatch(this[kDispatches], key); - handler.onError(error); - return true; - } - if (typeof delay === "number" && delay > 0) { - setTimeout(() => { - handleReply(this[kDispatches]); - }, delay); - } else { - handleReply(this[kDispatches]); - } - function handleReply(mockDispatches, _data = data) { - var _a, _b, _c, _d; - const optsHeaders = Array.isArray(opts.headers) ? buildHeadersFromArray(opts.headers) : opts.headers; - const body = typeof _data === "function" ? _data(__spreadProps(__spreadValues({}, opts), { headers: optsHeaders })) : _data; - if (isPromise(body)) { - body.then((newData) => handleReply(mockDispatches, newData)); - return; - } - const responseData = getResponseData(body); - const responseHeaders = generateKeyValues(headers); - const responseTrailers = generateKeyValues(trailers); - (_a = handler.onConnect) == null ? void 0 : _a.call(handler, (err) => handler.onError(err), null); - (_b = handler.onHeaders) == null ? void 0 : _b.call(handler, statusCode, responseHeaders, resume, getStatusText(statusCode)); - (_c = handler.onData) == null ? void 0 : _c.call(handler, Buffer.from(responseData)); - (_d = handler.onComplete) == null ? void 0 : _d.call(handler, 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 _a = opts, { agent } = _a, mockOptions = __objRest(_a, ["agent"]); - return mockOptions; - } - } - module.exports = { - getResponseData, - getMockDispatch, - addMockDispatch, - deleteMockDispatch, - buildKey, - generateKeyValues, - matchValue, - getResponse, - getStatusText, - mockDispatch, - buildMockDispatch, - checkNetConnect, - buildMockOptions, - getHeaderByName, - buildHeadersFromArray - }; - } - }); +import fs from 'fs'; +import path from 'path'; +import os from 'os'; +import {exportVariable} from '@actions/core'; - // - var require_mock_interceptor = __commonJS({ - ""(exports, module) { - "use strict"; - var { getResponseData, buildKey, addMockDispatch } = require_mock_utils(); - var { - kDispatches, - kDispatchKey, - kDefaultHeaders, - kDefaultTrailers, - kContentLength, - kMockDispatch - } = require_mock_symbols(); - var { InvalidArgumentError } = require_errors(); - var { buildURL } = require_util(); - var MockScope = class { - 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; - } - }; - var MockInterceptor = class { - 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"; - } - if (typeof opts.path === "string") { - if (opts.query) { - opts.path = buildURL(opts.path, opts.query); - } else { - 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 = __spreadValues(__spreadValues(__spreadValues({}, this[kDefaultHeaders]), contentLength), responseOptions.headers); - const trailers = __spreadValues(__spreadValues({}, this[kDefaultTrailers]), responseOptions.trailers); - return { statusCode, data, headers, trailers }; - } - validateReplyParameters(replyParameters) { - if (typeof replyParameters.statusCode === "undefined") { - throw new InvalidArgumentError("statusCode must be defined"); - } - if (typeof replyParameters.responseOptions !== "object" || replyParameters.responseOptions === null) { - throw new InvalidArgumentError("responseOptions must be an object"); - } - } - /** - * Mock an undici request with a defined reply. - */ - reply(replyOptionsCallbackOrStatusCode) { - if (typeof replyOptionsCallbackOrStatusCode === "function") { - const wrappedDefaultsCallback = (opts) => { - const resolvedData = replyOptionsCallbackOrStatusCode(opts); - if (typeof resolvedData !== "object" || resolvedData === null) { - throw new InvalidArgumentError("reply options callback must return an object"); - } - const replyParameters2 = __spreadValues({ data: "", responseOptions: {} }, resolvedData); - this.validateReplyParameters(replyParameters2); - return __spreadValues({}, this.createMockScopeDispatchData(replyParameters2)); - }; - const newMockDispatch2 = addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback); - return new MockScope(newMockDispatch2); - } - const replyParameters = { - statusCode: replyOptionsCallbackOrStatusCode, - data: arguments[1] === void 0 ? "" : arguments[1], - responseOptions: arguments[2] === void 0 ? {} : arguments[2] - }; - this.validateReplyParameters(replyParameters); - const dispatchData = this.createMockScopeDispatchData(replyParameters); - 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; - } - }); - - // - var require_mock_client = __commonJS({ - ""(exports, module) { - "use strict"; - var { promisify } = __require("util"); - var Client = require_client(); - var { buildMockDispatch } = require_mock_utils(); - var { - kDispatches, - kMockAgent, - kClose, - kOriginalClose, - kOrigin, - kOriginalDispatch, - kConnected - } = require_mock_symbols(); - var { MockInterceptor } = require_mock_interceptor(); - var Symbols = require_symbols(); - var { InvalidArgumentError } = require_errors(); - var MockClient = class 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]); - } - [kClose]() { - return __async(this, null, function* () { - yield promisify(this[kOriginalClose])(); - this[kConnected] = 0; - this[kMockAgent][Symbols.kClients].delete(this[kOrigin]); - }); - } - }; - module.exports = MockClient; - } - }); - - // - var require_mock_pool = __commonJS({ - ""(exports, module) { - "use strict"; - var { promisify } = __require("util"); - var Pool = require_pool(); - var { buildMockDispatch } = require_mock_utils(); - var { - kDispatches, - kMockAgent, - kClose, - kOriginalClose, - kOrigin, - kOriginalDispatch, - kConnected - } = require_mock_symbols(); - var { MockInterceptor } = require_mock_interceptor(); - var Symbols = require_symbols(); - var { InvalidArgumentError } = require_errors(); - var MockPool = class 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]); - } - [kClose]() { - return __async(this, null, function* () { - yield promisify(this[kOriginalClose])(); - this[kConnected] = 0; - this[kMockAgent][Symbols.kClients].delete(this[kOrigin]); - }); - } - }; - module.exports = MockPool; - } - }); - - // - var require_pluralizer = __commonJS({ - ""(exports, module) { - "use strict"; - var singulars = { - pronoun: "it", - is: "is", - was: "was", - this: "this" - }; - var 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 __spreadProps(__spreadValues({}, keys), { count, noun }); - } - }; - } - }); - - // - var require_pending_interceptors_formatter = __commonJS({ - ""(exports, module) { - "use strict"; - var { Transform } = __require("stream"); - var { Console } = __require("console"); - var PERSISTENT = process.versions.icu ? "\u2705" : "Y "; - var NOT_PERSISTENT = process.versions.icu ? "\u274C" : "N "; - 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: path5, data: { statusCode }, persist, times, timesInvoked, origin }) => ({ - Method: method, - Origin: origin, - Path: path5, - "Status code": statusCode, - Persistent: persist ? PERSISTENT : NOT_PERSISTENT, - Invocations: timesInvoked, - Remaining: persist ? Infinity : times - timesInvoked - }) - ); - this.logger.table(withPrettyHeaders); - return this.transform.read().toString(); - } - }; - } - }); - - // - var require_mock_agent = __commonJS({ - ""(exports, module) { - "use strict"; - var { kClients } = require_symbols(); - var Agent = require_agent(); - var { - kAgent, - kMockAgentSet, - kMockAgentGet, - kDispatches, - kIsMockActive, - kNetConnect, - kGetNetConnect, - kOptions, - kFactory - } = require_mock_symbols(); - var MockClient = require_mock_client(); - var MockPool = require_mock_pool(); - var { matchValue, buildMockOptions } = require_mock_utils(); - var { InvalidArgumentError, UndiciError } = require_errors(); - var Dispatcher = require_dispatcher(); - var Pluralizer = require_pluralizer(); - var PendingInterceptorsFormatter = require_pending_interceptors_formatter(); - var MockAgent = class extends Dispatcher { - constructor(opts) { - super(opts); - this[kNetConnect] = true; - this[kIsMockActive] = true; - if ((opts == null ? void 0 : opts.agent) && typeof opts.agent.dispatch !== "function") { - throw new InvalidArgumentError("Argument opts.agent must implement Agent"); - } - const agent = (opts == null ? void 0 : 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) { - this.get(opts.origin); - return this[kAgent].dispatch(opts, handler); - } - close() { - return __async(this, null, function* () { - yield 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, 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) { - const client = this[kClients].get(origin); - if (client) { - return client; - } - if (typeof origin !== "string") { - const dispatcher = this[kFactory]("http://localhost:9999"); - this[kMockAgentSet](origin, dispatcher); - return dispatcher; - } - for (const [keyMatcher, nonExplicitDispatcher] of Array.from(this[kClients])) { - 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[kDispatches].map((dispatch) => __spreadProps(__spreadValues({}, 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; - } - }); - - // - var require_global2 = __commonJS({ - ""(exports, module) { - "use strict"; - var globalDispatcher = Symbol.for("undici.globalDispatcher.1"); - var { InvalidArgumentError } = require_errors(); - var Agent = require_agent(); - if (getGlobalDispatcher() === void 0) { - 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 - }; - } - }); - - // - var require_decorator_handler = __commonJS({ - ""(exports, module) { - "use strict"; - var _handler, _a; - module.exports = (_a = class { - constructor(handler) { - __privateAdd(this, _handler, void 0); - if (typeof handler !== "object" || handler === null) { - throw new TypeError("handler must be an object"); - } - __privateSet(this, _handler, handler); - } - onConnect(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onConnect) == null ? void 0 : _b.call(_a2, ...args); - } - onError(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onError) == null ? void 0 : _b.call(_a2, ...args); - } - onUpgrade(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onUpgrade) == null ? void 0 : _b.call(_a2, ...args); - } - onResponseStarted(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onResponseStarted) == null ? void 0 : _b.call(_a2, ...args); - } - onHeaders(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onHeaders) == null ? void 0 : _b.call(_a2, ...args); - } - onData(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onData) == null ? void 0 : _b.call(_a2, ...args); - } - onComplete(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onComplete) == null ? void 0 : _b.call(_a2, ...args); - } - onBodySent(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onBodySent) == null ? void 0 : _b.call(_a2, ...args); - } - }, _handler = new WeakMap(), _a); - } - }); - - // - var require_redirect = __commonJS({ - ""(exports, module) { - "use strict"; - var RedirectHandler = require_redirect_handler(); - module.exports = (opts) => { - const globalMaxRedirections = opts == null ? void 0 : opts.maxRedirections; - return (dispatch) => { - return function redirectInterceptor(opts2, handler) { - const _a = opts2, { maxRedirections = globalMaxRedirections } = _a, baseOpts = __objRest(_a, ["maxRedirections"]); - if (!maxRedirections) { - return dispatch(opts2, handler); - } - const redirectHandler = new RedirectHandler( - dispatch, - maxRedirections, - opts2, - handler - ); - return dispatch(baseOpts, redirectHandler); - }; - }; - }; - } - }); - - // - var require_retry = __commonJS({ - ""(exports, module) { - "use strict"; - var RetryHandler = require_retry_handler(); - module.exports = (globalOpts) => { - return (dispatch) => { - return function retryInterceptor(opts, handler) { - return dispatch( - opts, - new RetryHandler( - __spreadProps(__spreadValues({}, opts), { retryOptions: __spreadValues(__spreadValues({}, globalOpts), opts.retryOptions) }), - { - handler, - dispatch - } - ) - ); - }; - }; - }; - } - }); - - // - var require_dump = __commonJS({ - ""(exports, module) { - "use strict"; - var util = require_util(); - var { InvalidArgumentError, RequestAbortedError } = require_errors(); - var DecoratorHandler = require_decorator_handler(); - var _maxSize, _abort, _dumped, _aborted, _size, _reason, _handler, _customAbort, customAbort_fn; - var DumpHandler = class extends DecoratorHandler { - constructor({ maxSize }, handler) { - super(handler); - __privateAdd(this, _customAbort); - __privateAdd(this, _maxSize, 1024 * 1024); - __privateAdd(this, _abort, null); - __privateAdd(this, _dumped, false); - __privateAdd(this, _aborted, false); - __privateAdd(this, _size, 0); - __privateAdd(this, _reason, null); - __privateAdd(this, _handler, null); - if (maxSize != null && (!Number.isFinite(maxSize) || maxSize < 1)) { - throw new InvalidArgumentError("maxSize must be a number greater than 0"); - } - __privateSet(this, _maxSize, maxSize != null ? maxSize : __privateGet(this, _maxSize)); - __privateSet(this, _handler, handler); - } - onConnect(abort) { - __privateSet(this, _abort, abort); - __privateGet(this, _handler).onConnect(__privateMethod(this, _customAbort, customAbort_fn).bind(this)); - } - // TODO: will require adjustment after new hooks are out - onHeaders(statusCode, rawHeaders, resume, statusMessage) { - const headers = util.parseHeaders(rawHeaders); - const contentLength = headers["content-length"]; - if (contentLength != null && contentLength > __privateGet(this, _maxSize)) { - throw new RequestAbortedError( - `Response size (${contentLength}) larger than maxSize (${__privateGet(this, _maxSize)})` - ); - } - if (__privateGet(this, _aborted)) { - return true; - } - return __privateGet(this, _handler).onHeaders( - statusCode, - rawHeaders, - resume, - statusMessage - ); - } - onError(err) { - var _a; - if (__privateGet(this, _dumped)) { - return; - } - err = (_a = __privateGet(this, _reason)) != null ? _a : err; - __privateGet(this, _handler).onError(err); - } - onData(chunk) { - __privateSet(this, _size, __privateGet(this, _size) + chunk.length); - if (__privateGet(this, _size) >= __privateGet(this, _maxSize)) { - __privateSet(this, _dumped, true); - if (__privateGet(this, _aborted)) { - __privateGet(this, _handler).onError(__privateGet(this, _reason)); - } else { - __privateGet(this, _handler).onComplete([]); - } - } - return true; - } - onComplete(trailers) { - if (__privateGet(this, _dumped)) { - return; - } - if (__privateGet(this, _aborted)) { - __privateGet(this, _handler).onError(this.reason); - return; - } - __privateGet(this, _handler).onComplete(trailers); - } - }; - _maxSize = new WeakMap(); - _abort = new WeakMap(); - _dumped = new WeakMap(); - _aborted = new WeakMap(); - _size = new WeakMap(); - _reason = new WeakMap(); - _handler = new WeakMap(); - _customAbort = new WeakSet(); - customAbort_fn = function(reason) { - __privateSet(this, _aborted, true); - __privateSet(this, _reason, reason); - }; - function createDumpInterceptor({ maxSize: defaultMaxSize } = { - maxSize: 1024 * 1024 - }) { - return (dispatch) => { - return function Intercept(opts, handler) { - const { dumpMaxSize = defaultMaxSize } = opts; - const dumpHandler = new DumpHandler( - { maxSize: dumpMaxSize }, - handler - ); - return dispatch(opts, dumpHandler); - }; - }; - } - module.exports = createDumpInterceptor; - } - }); - - // - var require_dns = __commonJS({ - ""(exports, module) { - "use strict"; - var { isIP } = __require("net"); - var { lookup } = __require("dns"); - var DecoratorHandler = require_decorator_handler(); - var { InvalidArgumentError, InformationalError } = require_errors(); - var maxInt = Math.pow(2, 31) - 1; - var _maxTTL, _maxItems, _records, _defaultLookup, defaultLookup_fn, _defaultPick, defaultPick_fn; - var DNSInstance = class { - constructor(opts) { - __privateAdd(this, _defaultLookup); - __privateAdd(this, _defaultPick); - __privateAdd(this, _maxTTL, 0); - __privateAdd(this, _maxItems, 0); - __privateAdd(this, _records, /* @__PURE__ */ new Map()); - __publicField(this, "dualStack", true); - __publicField(this, "affinity", null); - __publicField(this, "lookup", null); - __publicField(this, "pick", null); - var _a, _b; - __privateSet(this, _maxTTL, opts.maxTTL); - __privateSet(this, _maxItems, opts.maxItems); - this.dualStack = opts.dualStack; - this.affinity = opts.affinity; - this.lookup = (_a = opts.lookup) != null ? _a : __privateMethod(this, _defaultLookup, defaultLookup_fn); - this.pick = (_b = opts.pick) != null ? _b : __privateMethod(this, _defaultPick, defaultPick_fn); - } - get full() { - return __privateGet(this, _records).size === __privateGet(this, _maxItems); - } - runLookup(origin, opts, cb) { - const ips = __privateGet(this, _records).get(origin.hostname); - if (ips == null && this.full) { - cb(null, origin.origin); - return; - } - const newOpts = __spreadProps(__spreadValues({ - affinity: this.affinity, - dualStack: this.dualStack, - lookup: this.lookup, - pick: this.pick - }, opts.dns), { - maxTTL: __privateGet(this, _maxTTL), - maxItems: __privateGet(this, _maxItems) - }); - if (ips == null) { - this.lookup(origin, newOpts, (err, addresses) => { - if (err || addresses == null || addresses.length === 0) { - cb(err != null ? err : new InformationalError("No DNS entries found")); - return; - } - this.setRecords(origin, addresses); - const records = __privateGet(this, _records).get(origin.hostname); - const ip = this.pick( - origin, - records, - newOpts.affinity - ); - let port; - if (typeof ip.port === "number") { - port = `:${ip.port}`; - } else if (origin.port !== "") { - port = `:${origin.port}`; - } else { - port = ""; - } - cb( - null, - `${origin.protocol}//${ip.family === 6 ? `[${ip.address}]` : ip.address}${port}` - ); - }); - } else { - const ip = this.pick( - origin, - ips, - newOpts.affinity - ); - if (ip == null) { - __privateGet(this, _records).delete(origin.hostname); - this.runLookup(origin, opts, cb); - return; - } - let port; - if (typeof ip.port === "number") { - port = `:${ip.port}`; - } else if (origin.port !== "") { - port = `:${origin.port}`; - } else { - port = ""; - } - cb( - null, - `${origin.protocol}//${ip.family === 6 ? `[${ip.address}]` : ip.address}${port}` - ); - } - } - setRecords(origin, addresses) { - var _a; - const timestamp = Date.now(); - const records = { records: { 4: null, 6: null } }; - for (const record of addresses) { - record.timestamp = timestamp; - if (typeof record.ttl === "number") { - record.ttl = Math.min(record.ttl, __privateGet(this, _maxTTL)); - } else { - record.ttl = __privateGet(this, _maxTTL); - } - const familyRecords = (_a = records.records[record.family]) != null ? _a : { ips: [] }; - familyRecords.ips.push(record); - records.records[record.family] = familyRecords; - } - __privateGet(this, _records).set(origin.hostname, records); - } - getHandler(meta, opts) { - return new DNSDispatchHandler(this, meta, opts); - } - }; - _maxTTL = new WeakMap(); - _maxItems = new WeakMap(); - _records = new WeakMap(); - _defaultLookup = new WeakSet(); - defaultLookup_fn = function(origin, opts, cb) { - lookup( - origin.hostname, - { - all: true, - family: this.dualStack === false ? this.affinity : 0, - order: "ipv4first" - }, - (err, addresses) => { - if (err) { - return cb(err); - } - const results = /* @__PURE__ */ new Map(); - for (const addr of addresses) { - results.set(`${addr.address}:${addr.family}`, addr); - } - cb(null, results.values()); - } - ); - }; - _defaultPick = new WeakSet(); - defaultPick_fn = function(origin, hostnameRecords, affinity) { - var _a; - let ip = null; - const { records, offset } = hostnameRecords; - let family; - if (this.dualStack) { - if (affinity == null) { - if (offset == null || offset === maxInt) { - hostnameRecords.offset = 0; - affinity = 4; - } else { - hostnameRecords.offset++; - affinity = (hostnameRecords.offset & 1) === 1 ? 6 : 4; - } - } - if (records[affinity] != null && records[affinity].ips.length > 0) { - family = records[affinity]; - } else { - family = records[affinity === 4 ? 6 : 4]; - } - } else { - family = records[affinity]; - } - if (family == null || family.ips.length === 0) { - return ip; - } - if (family.offset == null || family.offset === maxInt) { - family.offset = 0; - } else { - family.offset++; - } - const position = family.offset % family.ips.length; - ip = (_a = family.ips[position]) != null ? _a : null; - if (ip == null) { - return ip; - } - if (Date.now() - ip.timestamp > ip.ttl) { - family.ips.splice(position, 1); - return this.pick(origin, hostnameRecords, affinity); - } - return ip; - }; - var _state, _opts, _dispatch, _handler, _origin; - var DNSDispatchHandler = class extends DecoratorHandler { - constructor(state, { origin, handler, dispatch }, opts) { - super(handler); - __privateAdd(this, _state, null); - __privateAdd(this, _opts, null); - __privateAdd(this, _dispatch, null); - __privateAdd(this, _handler, null); - __privateAdd(this, _origin, null); - __privateSet(this, _origin, origin); - __privateSet(this, _handler, handler); - __privateSet(this, _opts, __spreadValues({}, opts)); - __privateSet(this, _state, state); - __privateSet(this, _dispatch, dispatch); - } - onError(err) { - switch (err.code) { - case "ETIMEDOUT": - case "ECONNREFUSED": { - if (__privateGet(this, _state).dualStack) { - __privateGet(this, _state).runLookup(__privateGet(this, _origin), __privateGet(this, _opts), (err2, newOrigin) => { - if (err2) { - return __privateGet(this, _handler).onError(err2); - } - const dispatchOpts = __spreadProps(__spreadValues({}, __privateGet(this, _opts)), { - origin: newOrigin - }); - __privateGet(this, _dispatch).call(this, dispatchOpts, this); - }); - return; - } - __privateGet(this, _handler).onError(err); - return; - } - case "ENOTFOUND": - __privateGet(this, _state).deleteRecord(__privateGet(this, _origin)); - default: - __privateGet(this, _handler).onError(err); - break; - } - } - }; - _state = new WeakMap(); - _opts = new WeakMap(); - _dispatch = new WeakMap(); - _handler = new WeakMap(); - _origin = new WeakMap(); - module.exports = (interceptorOpts) => { - var _a, _b, _c, _d, _e, _f, _g; - if ((interceptorOpts == null ? void 0 : interceptorOpts.maxTTL) != null && (typeof (interceptorOpts == null ? void 0 : interceptorOpts.maxTTL) !== "number" || (interceptorOpts == null ? void 0 : interceptorOpts.maxTTL) < 0)) { - throw new InvalidArgumentError("Invalid maxTTL. Must be a positive number"); - } - if ((interceptorOpts == null ? void 0 : interceptorOpts.maxItems) != null && (typeof (interceptorOpts == null ? void 0 : interceptorOpts.maxItems) !== "number" || (interceptorOpts == null ? void 0 : interceptorOpts.maxItems) < 1)) { - throw new InvalidArgumentError( - "Invalid maxItems. Must be a positive number and greater than zero" - ); - } - if ((interceptorOpts == null ? void 0 : interceptorOpts.affinity) != null && (interceptorOpts == null ? void 0 : interceptorOpts.affinity) !== 4 && (interceptorOpts == null ? void 0 : interceptorOpts.affinity) !== 6) { - throw new InvalidArgumentError("Invalid affinity. Must be either 4 or 6"); - } - if ((interceptorOpts == null ? void 0 : interceptorOpts.dualStack) != null && typeof (interceptorOpts == null ? void 0 : interceptorOpts.dualStack) !== "boolean") { - throw new InvalidArgumentError("Invalid dualStack. Must be a boolean"); - } - if ((interceptorOpts == null ? void 0 : interceptorOpts.lookup) != null && typeof (interceptorOpts == null ? void 0 : interceptorOpts.lookup) !== "function") { - throw new InvalidArgumentError("Invalid lookup. Must be a function"); - } - if ((interceptorOpts == null ? void 0 : interceptorOpts.pick) != null && typeof (interceptorOpts == null ? void 0 : interceptorOpts.pick) !== "function") { - throw new InvalidArgumentError("Invalid pick. Must be a function"); - } - const dualStack = (_a = interceptorOpts == null ? void 0 : interceptorOpts.dualStack) != null ? _a : true; - let affinity; - if (dualStack) { - affinity = (_b = interceptorOpts == null ? void 0 : interceptorOpts.affinity) != null ? _b : null; - } else { - affinity = (_c = interceptorOpts == null ? void 0 : interceptorOpts.affinity) != null ? _c : 4; - } - const opts = { - maxTTL: (_d = interceptorOpts == null ? void 0 : interceptorOpts.maxTTL) != null ? _d : 1e4, - // Expressed in ms - lookup: (_e = interceptorOpts == null ? void 0 : interceptorOpts.lookup) != null ? _e : null, - pick: (_f = interceptorOpts == null ? void 0 : interceptorOpts.pick) != null ? _f : null, - dualStack, - affinity, - maxItems: (_g = interceptorOpts == null ? void 0 : interceptorOpts.maxItems) != null ? _g : Infinity - }; - const instance = new DNSInstance(opts); - return (dispatch) => { - return function dnsInterceptor(origDispatchOpts, handler) { - const origin = origDispatchOpts.origin.constructor === URL ? origDispatchOpts.origin : new URL(origDispatchOpts.origin); - if (isIP(origin.hostname) !== 0) { - return dispatch(origDispatchOpts, handler); - } - instance.runLookup(origin, origDispatchOpts, (err, newOrigin) => { - if (err) { - return handler.onError(err); - } - let dispatchOpts = null; - dispatchOpts = __spreadProps(__spreadValues({}, origDispatchOpts), { - servername: origin.hostname, - // For SNI on TLS - origin: newOrigin, - headers: __spreadValues({ - host: origin.hostname - }, origDispatchOpts.headers) - }); - dispatch( - dispatchOpts, - instance.getHandler({ origin, dispatch, handler }, origDispatchOpts) - ); - }); - return true; - }; - }; - }; - } - }); - - // - var require_headers = __commonJS({ - ""(exports, module) { - "use strict"; - var { kConstruct } = require_symbols(); - var { kEnumerableProperty } = require_util(); - var { - iteratorMixin, - isValidHeaderName, - isValidHeaderValue - } = require_util2(); - var { webidl } = require_webidl(); - var assert = __require("assert"); - var util = __require("util"); - var kHeadersMap = Symbol("headers map"); - var kHeadersSortedMap = Symbol("headers map sorted"); - function isHTTPWhiteSpaceCharCode(code) { - return code === 10 || code === 13 || code === 9 || code === 32; - } - function headerValueNormalize(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) { - if (Array.isArray(object)) { - for (let i = 0; i < object.length; ++i) { - const header = object[i]; - if (header.length !== 2) { - throw webidl.errors.exception({ - header: "Headers constructor", - message: `expected name/value pair to be length 2, found ${header.length}.` - }); - } - appendHeader(headers, header[0], header[1]); - } - } else if (typeof object === "object" && object !== null) { - 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"] - }); - } - } - function appendHeader(headers, name, value) { - value = headerValueNormalize(value); - 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" - }); - } - if (getHeadersGuard(headers) === "immutable") { - throw new TypeError("immutable"); - } - return getHeadersList(headers).append(name, value, false); - } - function compareHeaderName(a, b) { - return a[0] < b[0] ? -1 : 1; - } - var HeadersList = class _HeadersList { - constructor(init) { - /** @type {[string, string][]|null} */ - __publicField(this, "cookies", null); - 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; - } - } - /** - * @see https://fetch.spec.whatwg.org/#header-list-contains - * @param {string} name - * @param {boolean} isLowerCase - */ - contains(name, isLowerCase) { - return this[kHeadersMap].has(isLowerCase ? name : name.toLowerCase()); - } - clear() { - this[kHeadersMap].clear(); - this[kHeadersSortedMap] = null; - this.cookies = null; - } - /** - * @see https://fetch.spec.whatwg.org/#concept-header-list-append - * @param {string} name - * @param {string} value - * @param {boolean} isLowerCase - */ - append(name, value, isLowerCase) { - var _a; - this[kHeadersSortedMap] = null; - const lowercaseName = isLowerCase ? name : name.toLowerCase(); - const exists2 = this[kHeadersMap].get(lowercaseName); - if (exists2) { - const delimiter2 = lowercaseName === "cookie" ? "; " : ", "; - this[kHeadersMap].set(lowercaseName, { - name: exists2.name, - value: `${exists2.value}${delimiter2}${value}` - }); - } else { - this[kHeadersMap].set(lowercaseName, { name, value }); - } - if (lowercaseName === "set-cookie") { - ((_a = this.cookies) != null ? _a : this.cookies = []).push(value); - } - } - /** - * @see https://fetch.spec.whatwg.org/#concept-header-list-set - * @param {string} name - * @param {string} value - * @param {boolean} isLowerCase - */ - set(name, value, isLowerCase) { - this[kHeadersSortedMap] = null; - const lowercaseName = isLowerCase ? name : name.toLowerCase(); - if (lowercaseName === "set-cookie") { - this.cookies = [value]; - } - this[kHeadersMap].set(lowercaseName, { name, value }); - } - /** - * @see https://fetch.spec.whatwg.org/#concept-header-list-delete - * @param {string} name - * @param {boolean} isLowerCase - */ - delete(name, isLowerCase) { - this[kHeadersSortedMap] = null; - if (!isLowerCase) - name = name.toLowerCase(); - if (name === "set-cookie") { - this.cookies = null; - } - this[kHeadersMap].delete(name); - } - /** - * @see https://fetch.spec.whatwg.org/#concept-header-list-get - * @param {string} name - * @param {boolean} isLowerCase - * @returns {string | null} - */ - get(name, isLowerCase) { - var _a, _b; - return (_b = (_a = this[kHeadersMap].get(isLowerCase ? name : name.toLowerCase())) == null ? void 0 : _a.value) != null ? _b : null; - } - *[Symbol.iterator]() { - for (const { 0: name, 1: { value } } of this[kHeadersMap]) { - yield [name, value]; - } - } - get entries() { - const headers = {}; - if (this[kHeadersMap].size !== 0) { - for (const { name, value } of this[kHeadersMap].values()) { - headers[name] = value; - } - } - return headers; - } - rawValues() { - return this[kHeadersMap].values(); - } - get entriesList() { - const headers = []; - if (this[kHeadersMap].size !== 0) { - for (const { 0: lowerName, 1: { name, value } } of this[kHeadersMap]) { - if (lowerName === "set-cookie") { - for (const cookie of this.cookies) { - headers.push([name, cookie]); - } - } else { - headers.push([name, value]); - } - } - } - return headers; - } - // https://fetch.spec.whatwg.org/#convert-header-names-to-a-sorted-lowercase-set - toSortedArray() { - const size = this[kHeadersMap].size; - const array = new Array(size); - if (size <= 32) { - if (size === 0) { - return array; - } - const iterator = this[kHeadersMap][Symbol.iterator](); - const firstValue = iterator.next().value; - array[0] = [firstValue[0], firstValue[1].value]; - assert(firstValue[1].value !== null); - for (let i = 1, j = 0, right = 0, left = 0, pivot = 0, x, value; i < size; ++i) { - value = iterator.next().value; - x = array[i] = [value[0], value[1].value]; - assert(x[1] !== null); - left = 0; - right = i; - while (left < right) { - pivot = left + (right - left >> 1); - if (array[pivot][0] <= x[0]) { - left = pivot + 1; - } else { - right = pivot; - } - } - if (i !== pivot) { - j = i; - while (j > left) { - array[j] = array[--j]; - } - array[left] = x; - } - } - if (!iterator.next().done) { - throw new TypeError("Unreachable"); - } - return array; - } else { - let i = 0; - for (const { 0: name, 1: { value } } of this[kHeadersMap]) { - array[i++] = [name, value]; - assert(value !== null); - } - return array.sort(compareHeaderName); - } - } - }; - var _guard, _headersList; - var _Headers = class _Headers { - constructor(init = void 0) { - __privateAdd(this, _guard, void 0); - __privateAdd(this, _headersList, void 0); - webidl.util.markAsUncloneable(this); - if (init === kConstruct) { - return; - } - __privateSet(this, _headersList, new HeadersList()); - __privateSet(this, _guard, "none"); - if (init !== void 0) { - init = webidl.converters.HeadersInit(init, "Headers contructor", "init"); - fill(this, init); - } - } - // https://fetch.spec.whatwg.org/#dom-headers-append - append(name, value) { - webidl.brandCheck(this, _Headers); - webidl.argumentLengthCheck(arguments, 2, "Headers.append"); - const prefix = "Headers.append"; - name = webidl.converters.ByteString(name, prefix, "name"); - value = webidl.converters.ByteString(value, prefix, "value"); - return appendHeader(this, name, value); - } - // https://fetch.spec.whatwg.org/#dom-headers-delete - delete(name) { - webidl.brandCheck(this, _Headers); - webidl.argumentLengthCheck(arguments, 1, "Headers.delete"); - const prefix = "Headers.delete"; - name = webidl.converters.ByteString(name, prefix, "name"); - if (!isValidHeaderName(name)) { - throw webidl.errors.invalidArgument({ - prefix: "Headers.delete", - value: name, - type: "header name" - }); - } - if (__privateGet(this, _guard) === "immutable") { - throw new TypeError("immutable"); - } - if (!__privateGet(this, _headersList).contains(name, false)) { - return; - } - __privateGet(this, _headersList).delete(name, false); - } - // https://fetch.spec.whatwg.org/#dom-headers-get - get(name) { - webidl.brandCheck(this, _Headers); - webidl.argumentLengthCheck(arguments, 1, "Headers.get"); - const prefix = "Headers.get"; - name = webidl.converters.ByteString(name, prefix, "name"); - if (!isValidHeaderName(name)) { - throw webidl.errors.invalidArgument({ - prefix, - value: name, - type: "header name" - }); - } - return __privateGet(this, _headersList).get(name, false); - } - // https://fetch.spec.whatwg.org/#dom-headers-has - has(name) { - webidl.brandCheck(this, _Headers); - webidl.argumentLengthCheck(arguments, 1, "Headers.has"); - const prefix = "Headers.has"; - name = webidl.converters.ByteString(name, prefix, "name"); - if (!isValidHeaderName(name)) { - throw webidl.errors.invalidArgument({ - prefix, - value: name, - type: "header name" - }); - } - return __privateGet(this, _headersList).contains(name, false); - } - // https://fetch.spec.whatwg.org/#dom-headers-set - set(name, value) { - webidl.brandCheck(this, _Headers); - webidl.argumentLengthCheck(arguments, 2, "Headers.set"); - const prefix = "Headers.set"; - name = webidl.converters.ByteString(name, prefix, "name"); - value = webidl.converters.ByteString(value, prefix, "value"); - value = headerValueNormalize(value); - if (!isValidHeaderName(name)) { - throw webidl.errors.invalidArgument({ - prefix, - value: name, - type: "header name" - }); - } else if (!isValidHeaderValue(value)) { - throw webidl.errors.invalidArgument({ - prefix, - value, - type: "header value" - }); - } - if (__privateGet(this, _guard) === "immutable") { - throw new TypeError("immutable"); - } - __privateGet(this, _headersList).set(name, value, false); - } - // https://fetch.spec.whatwg.org/#dom-headers-getsetcookie - getSetCookie() { - webidl.brandCheck(this, _Headers); - const list = __privateGet(this, _headersList).cookies; - if (list) { - return [...list]; - } - return []; - } - // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine - get [kHeadersSortedMap]() { - if (__privateGet(this, _headersList)[kHeadersSortedMap]) { - return __privateGet(this, _headersList)[kHeadersSortedMap]; - } - const headers = []; - const names = __privateGet(this, _headersList).toSortedArray(); - const cookies = __privateGet(this, _headersList).cookies; - if (cookies === null || cookies.length === 1) { - return __privateGet(this, _headersList)[kHeadersSortedMap] = names; - } - for (let i = 0; i < names.length; ++i) { - const { 0: name, 1: value } = names[i]; - if (name === "set-cookie") { - for (let j = 0; j < cookies.length; ++j) { - headers.push([name, cookies[j]]); - } - } else { - headers.push([name, value]); - } - } - return __privateGet(this, _headersList)[kHeadersSortedMap] = headers; - } - [util.inspect.custom](depth, options) { - var _a; - (_a = options.depth) != null ? _a : options.depth = depth; - return `Headers ${util.formatWithOptions(options, __privateGet(this, _headersList).entries)}`; - } - static getHeadersGuard(o) { - return __privateGet(o, _guard); - } - static setHeadersGuard(o, guard) { - __privateSet(o, _guard, guard); - } - static getHeadersList(o) { - return __privateGet(o, _headersList); - } - static setHeadersList(o, list) { - __privateSet(o, _headersList, list); - } - }; - _guard = new WeakMap(); - _headersList = new WeakMap(); - var Headers2 = _Headers; - var { getHeadersGuard, setHeadersGuard, getHeadersList, setHeadersList } = Headers2; - Reflect.deleteProperty(Headers2, "getHeadersGuard"); - Reflect.deleteProperty(Headers2, "setHeadersGuard"); - Reflect.deleteProperty(Headers2, "getHeadersList"); - Reflect.deleteProperty(Headers2, "setHeadersList"); - iteratorMixin("Headers", Headers2, kHeadersSortedMap, 0, 1); - Object.defineProperties(Headers2.prototype, { - append: kEnumerableProperty, - delete: kEnumerableProperty, - get: kEnumerableProperty, - has: kEnumerableProperty, - set: kEnumerableProperty, - getSetCookie: kEnumerableProperty, - [Symbol.toStringTag]: { - value: "Headers", - configurable: true - }, - [util.inspect.custom]: { - enumerable: false - } - }); - webidl.converters.HeadersInit = function(V, prefix, argument) { - if (webidl.util.Type(V) === "Object") { - const iterator = Reflect.get(V, Symbol.iterator); - if (!util.types.isProxy(V) && iterator === Headers2.prototype.entries) { - try { - return getHeadersList(V).entriesList; - } catch (e) { - } - } - if (typeof iterator === "function") { - return webidl.converters["sequence>"](V, prefix, argument, iterator.bind(V)); - } - return webidl.converters["record"](V, prefix, argument); - } - throw webidl.errors.conversionFailed({ - prefix: "Headers constructor", - argument: "Argument 1", - types: ["sequence>", "record"] - }); - }; - module.exports = { - fill, - // for test. - compareHeaderName, - Headers: Headers2, - HeadersList, - getHeadersGuard, - setHeadersGuard, - setHeadersList, - getHeadersList - }; - } - }); - - // - var require_response = __commonJS({ - ""(exports, module) { - "use strict"; - var { Headers: Headers2, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require_headers(); - var { extractBody, cloneBody, mixinBody, hasFinalizationRegistry, streamRegistry, bodyUnusable } = require_body(); - var util = require_util(); - var nodeUtil = __require("util"); - var { kEnumerableProperty } = util; - var { - isValidReasonPhrase, - isCancelled, - isAborted, - isBlobLike, - serializeJavascriptValueToJSONString, - isErrorLike, - isomorphicEncode, - environmentSettingsObject: relevantRealm - } = require_util2(); - var { - redirectStatusSet, - nullBodyStatus - } = require_constants3(); - var { kState, kHeaders } = require_symbols2(); - var { webidl } = require_webidl(); - var { FormData } = require_formdata(); - var { URLSerializer } = require_data_url(); - var { kConstruct } = require_symbols(); - var assert = __require("assert"); - var { types } = __require("util"); - var textEncoder = new TextEncoder("utf-8"); - var Response = class _Response { - // Creates network error Response. - static error() { - const responseObject = fromInnerResponse(makeNetworkError(), "immutable"); - return responseObject; - } - // https://fetch.spec.whatwg.org/#dom-response-json - static json(data, init = {}) { - webidl.argumentLengthCheck(arguments, 1, "Response.json"); - if (init !== null) { - init = webidl.converters.ResponseInit(init); - } - const bytes = textEncoder.encode( - serializeJavascriptValueToJSONString(data) - ); - const body = extractBody(bytes); - const responseObject = fromInnerResponse(makeResponse({}), "response"); - initializeResponse(responseObject, init, { body: body[0], type: "application/json" }); - return responseObject; - } - // Creates a redirect Response that redirects to url with status status. - static redirect(url, status = 302) { - webidl.argumentLengthCheck(arguments, 1, "Response.redirect"); - url = webidl.converters.USVString(url); - status = webidl.converters["unsigned short"](status); - let parsedURL; - try { - parsedURL = new URL(url, relevantRealm.settingsObject.baseUrl); - } catch (err) { - throw new TypeError(`Failed to parse URL from ${url}`, { cause: err }); - } - if (!redirectStatusSet.has(status)) { - throw new RangeError(`Invalid status code ${status}`); - } - const responseObject = fromInnerResponse(makeResponse({}), "immutable"); - responseObject[kState].status = status; - const value = isomorphicEncode(URLSerializer(parsedURL)); - responseObject[kState].headersList.append("location", value, true); - return responseObject; - } - // https://fetch.spec.whatwg.org/#dom-response - constructor(body = null, init = {}) { - webidl.util.markAsUncloneable(this); - if (body === kConstruct) { - return; - } - if (body !== null) { - body = webidl.converters.BodyInit(body); - } - init = webidl.converters.ResponseInit(init); - this[kState] = makeResponse({}); - this[kHeaders] = new Headers2(kConstruct); - setHeadersGuard(this[kHeaders], "response"); - setHeadersList(this[kHeaders], this[kState].headersList); - let bodyWithType = null; - if (body != null) { - const [extractedBody, type] = extractBody(body); - bodyWithType = { body: extractedBody, type }; - } - initializeResponse(this, init, bodyWithType); - } - // Returns response’s type, e.g., "cors". - get type() { - webidl.brandCheck(this, _Response); - return this[kState].type; - } - // Returns response’s URL, if it has one; otherwise the empty string. - get url() { - var _a; - webidl.brandCheck(this, _Response); - const urlList = this[kState].urlList; - const url = (_a = urlList[urlList.length - 1]) != null ? _a : null; - if (url === null) { - return ""; - } - return URLSerializer(url, true); - } - // Returns whether response was obtained through a redirect. - get redirected() { - webidl.brandCheck(this, _Response); - return this[kState].urlList.length > 1; - } - // Returns response’s status. - get status() { - webidl.brandCheck(this, _Response); - return this[kState].status; - } - // Returns whether response’s status is an ok status. - get ok() { - webidl.brandCheck(this, _Response); - return this[kState].status >= 200 && this[kState].status <= 299; - } - // Returns response’s status message. - get statusText() { - webidl.brandCheck(this, _Response); - return this[kState].statusText; - } - // Returns response’s headers as Headers. - get headers() { - webidl.brandCheck(this, _Response); - 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() { - var _a; - webidl.brandCheck(this, _Response); - if (bodyUnusable(this)) { - throw webidl.errors.exception({ - header: "Response.clone", - message: "Body has already been consumed." - }); - } - const clonedResponse = cloneResponse(this[kState]); - if (hasFinalizationRegistry && ((_a = this[kState].body) == null ? void 0 : _a.stream)) { - streamRegistry.register(this, new WeakRef(this[kState].body.stream)); - } - return fromInnerResponse(clonedResponse, getHeadersGuard(this[kHeaders])); - } - [nodeUtil.inspect.custom](depth, options) { - var _a; - if (options.depth === null) { - options.depth = 2; - } - (_a = options.colors) != null ? _a : options.colors = true; - const properties = { - status: this.status, - statusText: this.statusText, - headers: this.headers, - body: this.body, - bodyUsed: this.bodyUsed, - ok: this.ok, - redirected: this.redirected, - type: this.type, - url: this.url - }; - return `Response ${nodeUtil.formatWithOptions(options, properties)}`; - } - }; - 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 - }); - function cloneResponse(response) { - if (response.internalResponse) { - return filterResponse( - cloneResponse(response.internalResponse), - response.type - ); - } - const newResponse = makeResponse(__spreadProps(__spreadValues({}, response), { body: null })); - if (response.body != null) { - newResponse.body = cloneBody(newResponse, response.body); - } - return newResponse; - } - function makeResponse(init) { - return __spreadProps(__spreadValues({ - aborted: false, - rangeRequested: false, - timingAllowPassed: false, - requestIncludesCredentials: false, - type: "default", - status: 200, - timingInfo: null, - cacheState: "", - statusText: "" - }, init), { - headersList: (init == null ? void 0 : init.headersList) ? new HeadersList(init == null ? void 0 : init.headersList) : new HeadersList(), - urlList: (init == null ? void 0 : 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 isNetworkError(response) { - return ( - // A network error is a response whose type is "error", - response.type === "error" && // status is 0 - response.status === 0 - ); - } - function makeFilteredResponse(response, state) { - state = __spreadValues({ - 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; - } - }); - } - function filterResponse(response, type) { - if (type === "basic") { - return makeFilteredResponse(response, { - type: "basic", - headersList: response.headersList - }); - } else if (type === "cors") { - return makeFilteredResponse(response, { - type: "cors", - headersList: response.headersList - }); - } else if (type === "opaque") { - return makeFilteredResponse(response, { - type: "opaque", - urlList: Object.freeze([]), - status: 0, - statusText: "", - body: null - }); - } else if (type === "opaqueredirect") { - return makeFilteredResponse(response, { - type: "opaqueredirect", - status: 0, - statusText: "", - headersList: [], - body: null - }); - } else { - assert(false); - } - } - function makeAppropriateNetworkError(fetchParams, err = null) { - assert(isCancelled(fetchParams)); - 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 })); - } - function initializeResponse(response, init, body) { - 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.'); - } - if ("statusText" in init && init.statusText != null) { - if (!isValidReasonPhrase(String(init.statusText))) { - throw new TypeError("Invalid statusText"); - } - } - if ("status" in init && init.status != null) { - response[kState].status = init.status; - } - if ("statusText" in init && init.statusText != null) { - response[kState].statusText = init.statusText; - } - if ("headers" in init && init.headers != null) { - fill(response[kHeaders], init.headers); - } - if (body) { - if (nullBodyStatus.includes(response.status)) { - throw webidl.errors.exception({ - header: "Response constructor", - message: `Invalid response status code ${response.status}` - }); - } - response[kState].body = body.body; - if (body.type != null && !response[kState].headersList.contains("content-type", true)) { - response[kState].headersList.append("content-type", body.type, true); - } - } - } - function fromInnerResponse(innerResponse, guard) { - var _a; - const response = new Response(kConstruct); - response[kState] = innerResponse; - response[kHeaders] = new Headers2(kConstruct); - setHeadersList(response[kHeaders], innerResponse.headersList); - setHeadersGuard(response[kHeaders], guard); - if (hasFinalizationRegistry && ((_a = innerResponse.body) == null ? void 0 : _a.stream)) { - streamRegistry.register(response, new WeakRef(innerResponse.body.stream)); - } - return response; - } - webidl.converters.ReadableStream = webidl.interfaceConverter( - ReadableStream - ); - webidl.converters.FormData = webidl.interfaceConverter( - FormData - ); - webidl.converters.URLSearchParams = webidl.interfaceConverter( - URLSearchParams - ); - webidl.converters.XMLHttpRequestBodyInit = function(V, prefix, name) { - if (typeof V === "string") { - return webidl.converters.USVString(V, prefix, name); - } - if (isBlobLike(V)) { - return webidl.converters.Blob(V, prefix, name, { strict: false }); - } - if (ArrayBuffer.isView(V) || types.isArrayBuffer(V)) { - return webidl.converters.BufferSource(V, prefix, name); - } - if (util.isFormDataLike(V)) { - return webidl.converters.FormData(V, prefix, name, { strict: false }); - } - if (V instanceof URLSearchParams) { - return webidl.converters.URLSearchParams(V, prefix, name); - } - return webidl.converters.DOMString(V, prefix, name); - }; - webidl.converters.BodyInit = function(V, prefix, argument) { - if (V instanceof ReadableStream) { - return webidl.converters.ReadableStream(V, prefix, argument); - } - if (V == null ? void 0 : V[Symbol.asyncIterator]) { - return V; - } - return webidl.converters.XMLHttpRequestBodyInit(V, prefix, argument); - }; - 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 = { - isNetworkError, - makeNetworkError, - makeResponse, - makeAppropriateNetworkError, - filterResponse, - Response, - cloneResponse, - fromInnerResponse - }; - } - }); - - // - var require_dispatcher_weakref = __commonJS({ - ""(exports, module) { - "use strict"; - var { kConnected, kSize } = require_symbols(); - var CompatWeakRef = class { - constructor(value) { - this.value = value; - } - deref() { - return this.value[kConnected] === 0 && this.value[kSize] === 0 ? void 0 : this.value; - } - }; - var CompatFinalizer = class { - constructor(finalizer) { - this.finalizer = finalizer; - } - register(dispatcher, key) { - if (dispatcher.on) { - dispatcher.on("disconnect", () => { - if (dispatcher[kConnected] === 0 && dispatcher[kSize] === 0) { - this.finalizer(key); - } - }); - } - } - unregister(key) { - } - }; - module.exports = function() { - if (process.env.NODE_V8_COVERAGE && process.version.startsWith("v18")) { - process._rawDebug("Using compatibility WeakRef and FinalizationRegistry"); - return { - WeakRef: CompatWeakRef, - FinalizationRegistry: CompatFinalizer - }; - } - return { WeakRef, FinalizationRegistry }; - }; - } - }); - - // - var require_request2 = __commonJS({ - ""(exports, module) { - "use strict"; - var { extractBody, mixinBody, cloneBody, bodyUnusable } = require_body(); - var { Headers: Headers2, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require_headers(); - var { FinalizationRegistry: FinalizationRegistry2 } = require_dispatcher_weakref()(); - var util = require_util(); - var nodeUtil = __require("util"); - var { - isValidHTTPToken, - sameOrigin, - environmentSettingsObject - } = require_util2(); - var { - forbiddenMethodsSet, - corsSafeListedMethodsSet, - referrerPolicy, - requestRedirect, - requestMode, - requestCredentials, - requestCache, - requestDuplex - } = require_constants3(); - var { kEnumerableProperty, normalizedMethodRecordsBase, normalizedMethodRecords } = util; - var { kHeaders, kSignal, kState, kDispatcher } = require_symbols2(); - var { webidl } = require_webidl(); - var { URLSerializer } = require_data_url(); - var { kConstruct } = require_symbols(); - var assert = __require("assert"); - var { getMaxListeners, setMaxListeners, getEventListeners, defaultMaxListeners } = __require("events"); - var kAbortController = Symbol("abortController"); - var requestFinalizer = new FinalizationRegistry2(({ signal, abort }) => { - signal.removeEventListener("abort", abort); - }); - var dependentControllerMap = /* @__PURE__ */ new WeakMap(); - function buildAbort(acRef) { - return abort; - function abort() { - const ac = acRef.deref(); - if (ac !== void 0) { - requestFinalizer.unregister(abort); - this.removeEventListener("abort", abort); - ac.abort(this.reason); - const controllerList = dependentControllerMap.get(ac.signal); - if (controllerList !== void 0) { - if (controllerList.size !== 0) { - for (const ref of controllerList) { - const ctrl = ref.deref(); - if (ctrl !== void 0) { - ctrl.abort(this.reason); - } - } - controllerList.clear(); - } - dependentControllerMap.delete(ac.signal); - } - } - } - } - var patchMethodWarning = false; - var Request = class _Request { - // https://fetch.spec.whatwg.org/#dom-request - constructor(input, init = {}) { - var _a, _b, _c; - webidl.util.markAsUncloneable(this); - if (input === kConstruct) { - return; - } - const prefix = "Request constructor"; - webidl.argumentLengthCheck(arguments, 1, prefix); - input = webidl.converters.RequestInfo(input, prefix, "input"); - init = webidl.converters.RequestInit(init, prefix, "init"); - let request = null; - let fallbackMode = null; - const baseUrl = environmentSettingsObject.settingsObject.baseUrl; - let signal = null; - if (typeof input === "string") { - this[kDispatcher] = init.dispatcher; - let parsedURL; - try { - parsedURL = new URL(input, baseUrl); - } catch (err) { - throw new TypeError("Failed to parse URL from " + input, { cause: err }); - } - if (parsedURL.username || parsedURL.password) { - throw new TypeError( - "Request cannot be constructed from a URL that includes credentials: " + input - ); - } - request = makeRequest({ urlList: [parsedURL] }); - fallbackMode = "cors"; - } else { - this[kDispatcher] = init.dispatcher || input[kDispatcher]; - assert(input instanceof _Request); - request = input[kState]; - signal = input[kSignal]; - } - const origin = environmentSettingsObject.settingsObject.origin; - let window = "client"; - if (((_b = (_a = request.window) == null ? void 0 : _a.constructor) == null ? void 0 : _b.name) === "EnvironmentSettingsObject" && sameOrigin(request.window, origin)) { - window = request.window; - } - if (init.window != null) { - throw new TypeError(`'window' option '${window}' must be null`); - } - if ("window" in init) { - window = "no-window"; - } - 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: environmentSettingsObject.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; - if (initHasKey) { - if (request.mode === "navigate") { - request.mode = "same-origin"; - } - request.reloadNavigation = false; - request.historyNavigation = false; - request.origin = "client"; - request.referrer = "client"; - request.referrerPolicy = ""; - request.url = request.urlList[request.urlList.length - 1]; - request.urlList = [request.url]; - } - if (init.referrer !== void 0) { - const referrer = init.referrer; - if (referrer === "") { - request.referrer = "no-referrer"; - } else { - let parsedReferrer; - try { - parsedReferrer = new URL(referrer, baseUrl); - } catch (err) { - throw new TypeError(`Referrer "${referrer}" is not a valid URL.`, { cause: err }); - } - if (parsedReferrer.protocol === "about:" && parsedReferrer.hostname === "client" || origin && !sameOrigin(parsedReferrer, environmentSettingsObject.settingsObject.baseUrl)) { - request.referrer = "client"; - } else { - request.referrer = parsedReferrer; - } - } - } - if (init.referrerPolicy !== void 0) { - request.referrerPolicy = init.referrerPolicy; - } - let mode; - if (init.mode !== void 0) { - mode = init.mode; - } else { - mode = fallbackMode; - } - if (mode === "navigate") { - throw webidl.errors.exception({ - header: "Request constructor", - message: "invalid request mode navigate." - }); - } - if (mode != null) { - request.mode = mode; - } - if (init.credentials !== void 0) { - request.credentials = init.credentials; - } - if (init.cache !== void 0) { - request.cache = init.cache; - } - if (request.cache === "only-if-cached" && request.mode !== "same-origin") { - throw new TypeError( - "'only-if-cached' can be set only with 'same-origin' mode" - ); - } - if (init.redirect !== void 0) { - request.redirect = init.redirect; - } - if (init.integrity != null) { - request.integrity = String(init.integrity); - } - if (init.keepalive !== void 0) { - request.keepalive = Boolean(init.keepalive); - } - if (init.method !== void 0) { - let method = init.method; - const mayBeNormalized = normalizedMethodRecords[method]; - if (mayBeNormalized !== void 0) { - request.method = mayBeNormalized; - } else { - if (!isValidHTTPToken(method)) { - throw new TypeError(`'${method}' is not a valid HTTP method.`); - } - const upperCase = method.toUpperCase(); - if (forbiddenMethodsSet.has(upperCase)) { - throw new TypeError(`'${method}' HTTP method is unsupported.`); - } - method = (_c = normalizedMethodRecordsBase[upperCase]) != null ? _c : method; - request.method = method; - } - if (!patchMethodWarning && request.method === "patch") { - process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.", { - code: "UNDICI-FETCH-patch" - }); - patchMethodWarning = true; - } - } - if (init.signal !== void 0) { - signal = init.signal; - } - this[kState] = request; - const ac = new AbortController(); - this[kSignal] = ac.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 { - this[kAbortController] = ac; - const acRef = new WeakRef(ac); - const abort = buildAbort(acRef); - try { - if (typeof getMaxListeners === "function" && getMaxListeners(signal) === defaultMaxListeners) { - setMaxListeners(1500, signal); - } else if (getEventListeners(signal, "abort").length >= defaultMaxListeners) { - setMaxListeners(1500, signal); - } - } catch (e) { - } - util.addAbortListener(signal, abort); - requestFinalizer.register(ac, { signal, abort }, abort); - } - } - this[kHeaders] = new Headers2(kConstruct); - setHeadersList(this[kHeaders], request.headersList); - setHeadersGuard(this[kHeaders], "request"); - if (mode === "no-cors") { - if (!corsSafeListedMethodsSet.has(request.method)) { - throw new TypeError( - `'${request.method} is unsupported in no-cors mode.` - ); - } - setHeadersGuard(this[kHeaders], "request-no-cors"); - } - if (initHasKey) { - const headersList = getHeadersList(this[kHeaders]); - const headers = init.headers !== void 0 ? init.headers : new HeadersList(headersList); - headersList.clear(); - if (headers instanceof HeadersList) { - for (const { name, value } of headers.rawValues()) { - headersList.append(name, value, false); - } - headersList.cookies = headers.cookies; - } else { - fillHeaders(this[kHeaders], headers); - } - } - const inputBody = input instanceof _Request ? input[kState].body : null; - if ((init.body != null || inputBody != null) && (request.method === "GET" || request.method === "HEAD")) { - throw new TypeError("Request with GET/HEAD method cannot have body."); - } - let initBody = null; - if (init.body != null) { - const [extractedBody, contentType] = extractBody( - init.body, - request.keepalive - ); - initBody = extractedBody; - if (contentType && !getHeadersList(this[kHeaders]).contains("content-type", true)) { - this[kHeaders].append("content-type", contentType); - } - } - const inputOrInitBody = initBody != null ? initBody : inputBody; - if (inputOrInitBody != null && inputOrInitBody.source == null) { - if (initBody != null && init.duplex == null) { - throw new TypeError("RequestInit: duplex option is required when sending a body."); - } - if (request.mode !== "same-origin" && request.mode !== "cors") { - throw new TypeError( - 'If request is made from ReadableStream, mode should be "same-origin" or "cors"' - ); - } - request.useCORSPreflightFlag = true; - } - let finalBody = inputOrInitBody; - if (initBody == null && inputBody != null) { - if (bodyUnusable(input)) { - throw new TypeError( - "Cannot construct a Request with a Request object that has already been used." - ); - } - const identityTransform = new TransformStream(); - inputBody.stream.pipeThrough(identityTransform); - finalBody = { - source: inputBody.source, - length: inputBody.length, - stream: identityTransform.readable - }; - } - this[kState].body = finalBody; - } - // Returns request’s HTTP method, which is "GET" by default. - get method() { - webidl.brandCheck(this, _Request); - return this[kState].method; - } - // Returns the URL of request as a string. - get url() { - webidl.brandCheck(this, _Request); - 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); - return this[kHeaders]; - } - // Returns the kind of resource requested by request, e.g., "document" - // or "script". - get destination() { - webidl.brandCheck(this, _Request); - 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); - if (this[kState].referrer === "no-referrer") { - return ""; - } - if (this[kState].referrer === "client") { - return "about:client"; - } - 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); - 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); - 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() { - 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); - 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); - 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); - 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); - return this[kState].keepalive; - } - // Returns a boolean indicating whether or not request is for a reload - // navigation. - get isReloadNavigation() { - webidl.brandCheck(this, _Request); - return this[kState].reloadNavigation; - } - // Returns a boolean indicating whether or not request is for a history - // navigation (a.k.a. back-forward navigation). - get isHistoryNavigation() { - webidl.brandCheck(this, _Request); - 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); - 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); - if (bodyUnusable(this)) { - throw new TypeError("unusable"); - } - const clonedRequest = cloneRequest(this[kState]); - const ac = new AbortController(); - if (this.signal.aborted) { - ac.abort(this.signal.reason); - } else { - let list = dependentControllerMap.get(this.signal); - if (list === void 0) { - list = /* @__PURE__ */ new Set(); - dependentControllerMap.set(this.signal, list); - } - const acRef = new WeakRef(ac); - list.add(acRef); - util.addAbortListener( - ac.signal, - buildAbort(acRef) - ); - } - return fromInnerRequest(clonedRequest, ac.signal, getHeadersGuard(this[kHeaders])); - } - [nodeUtil.inspect.custom](depth, options) { - var _a; - if (options.depth === null) { - options.depth = 2; - } - (_a = options.colors) != null ? _a : options.colors = true; - const properties = { - method: this.method, - url: this.url, - headers: this.headers, - destination: this.destination, - referrer: this.referrer, - referrerPolicy: this.referrerPolicy, - mode: this.mode, - credentials: this.credentials, - cache: this.cache, - redirect: this.redirect, - integrity: this.integrity, - keepalive: this.keepalive, - isReloadNavigation: this.isReloadNavigation, - isHistoryNavigation: this.isHistoryNavigation, - signal: this.signal - }; - return `Request ${nodeUtil.formatWithOptions(options, properties)}`; - } - }; - mixinBody(Request); - function makeRequest(init) { - var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I; - return { - method: (_a = init.method) != null ? _a : "GET", - localURLsOnly: (_b = init.localURLsOnly) != null ? _b : false, - unsafeRequest: (_c = init.unsafeRequest) != null ? _c : false, - body: (_d = init.body) != null ? _d : null, - client: (_e = init.client) != null ? _e : null, - reservedClient: (_f = init.reservedClient) != null ? _f : null, - replacesClientId: (_g = init.replacesClientId) != null ? _g : "", - window: (_h = init.window) != null ? _h : "client", - keepalive: (_i = init.keepalive) != null ? _i : false, - serviceWorkers: (_j = init.serviceWorkers) != null ? _j : "all", - initiator: (_k = init.initiator) != null ? _k : "", - destination: (_l = init.destination) != null ? _l : "", - priority: (_m = init.priority) != null ? _m : null, - origin: (_n = init.origin) != null ? _n : "client", - policyContainer: (_o = init.policyContainer) != null ? _o : "client", - referrer: (_p = init.referrer) != null ? _p : "client", - referrerPolicy: (_q = init.referrerPolicy) != null ? _q : "", - mode: (_r = init.mode) != null ? _r : "no-cors", - useCORSPreflightFlag: (_s = init.useCORSPreflightFlag) != null ? _s : false, - credentials: (_t = init.credentials) != null ? _t : "same-origin", - useCredentials: (_u = init.useCredentials) != null ? _u : false, - cache: (_v = init.cache) != null ? _v : "default", - redirect: (_w = init.redirect) != null ? _w : "follow", - integrity: (_x = init.integrity) != null ? _x : "", - cryptoGraphicsNonceMetadata: (_y = init.cryptoGraphicsNonceMetadata) != null ? _y : "", - parserMetadata: (_z = init.parserMetadata) != null ? _z : "", - reloadNavigation: (_A = init.reloadNavigation) != null ? _A : false, - historyNavigation: (_B = init.historyNavigation) != null ? _B : false, - userActivation: (_C = init.userActivation) != null ? _C : false, - taintedOrigin: (_D = init.taintedOrigin) != null ? _D : false, - redirectCount: (_E = init.redirectCount) != null ? _E : 0, - responseTainting: (_F = init.responseTainting) != null ? _F : "basic", - preventNoCacheCacheControlHeaderModification: (_G = init.preventNoCacheCacheControlHeaderModification) != null ? _G : false, - done: (_H = init.done) != null ? _H : false, - timingAllowFailed: (_I = init.timingAllowFailed) != null ? _I : false, - urlList: init.urlList, - url: init.urlList[0], - headersList: init.headersList ? new HeadersList(init.headersList) : new HeadersList() - }; - } - function cloneRequest(request) { - const newRequest = makeRequest(__spreadProps(__spreadValues({}, request), { body: null })); - if (request.body != null) { - newRequest.body = cloneBody(newRequest, request.body); - } - return newRequest; - } - function fromInnerRequest(innerRequest, signal, guard) { - const request = new Request(kConstruct); - request[kState] = innerRequest; - request[kSignal] = signal; - request[kHeaders] = new Headers2(kConstruct); - setHeadersList(request[kHeaders], innerRequest.headersList); - setHeadersGuard(request[kHeaders], guard); - return request; - } - 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 - ); - webidl.converters.RequestInfo = function(V, prefix, argument) { - if (typeof V === "string") { - return webidl.converters.USVString(V, prefix, argument); - } - if (V instanceof Request) { - return webidl.converters.Request(V, prefix, argument); - } - return webidl.converters.USVString(V, prefix, argument); - }; - webidl.converters.AbortSignal = webidl.interfaceConverter( - AbortSignal - ); - 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, - "RequestInit", - "signal", - { strict: false } - ) - ) - }, - { - key: "window", - converter: webidl.converters.any - }, - { - key: "duplex", - converter: webidl.converters.DOMString, - allowedValues: requestDuplex - }, - { - key: "dispatcher", - // undici specific option - converter: webidl.converters.any - } - ]); - module.exports = { Request, makeRequest, fromInnerRequest, cloneRequest }; - } - }); - - // - var require_fetch = __commonJS({ - ""(exports, module) { - "use strict"; - var { - makeNetworkError, - makeAppropriateNetworkError, - filterResponse, - makeResponse, - fromInnerResponse - } = require_response(); - var { HeadersList } = require_headers(); - var { Request, cloneRequest } = require_request2(); - var zlib = __require("zlib"); - var { - 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, - clampAndCoarsenConnectionTimingInfo, - simpleRangeHeaderValue, - buildContentRange, - createInflate, - extractMimeType - } = require_util2(); - var { kState, kDispatcher } = require_symbols2(); - var assert = __require("assert"); - var { safelyExtractBody, extractBody } = require_body(); - var { - redirectStatusSet, - nullBodyStatus, - safeMethodsSet, - requestBodyHeader, - subresourceSet - } = require_constants3(); - var EE = __require("events"); - var { Readable, pipeline, finished } = __require("stream"); - var { addAbortListener, isErrored, isReadable, bufferToLowerCasedHeaderName } = require_util(); - var { dataURLProcessor, serializeAMimeType, minimizeSupportedMimeType } = require_data_url(); - var { getGlobalDispatcher } = require_global2(); - var { webidl } = require_webidl(); - var { STATUS_CODES } = __require("http"); - var GET_OR_HEAD = ["GET", "HEAD"]; - var defaultUserAgent = typeof __UNDICI_IS_NODE__ !== "undefined" || typeof esbuildDetection !== "undefined" ? "node" : "undici"; - var resolveObjectURL; - var Fetch = class extends EE { - constructor(dispatcher) { - super(); - this.dispatcher = dispatcher; - this.connection = null; - this.dump = false; - this.state = "ongoing"; - } - terminate(reason) { - var _a; - if (this.state !== "ongoing") { - return; - } - this.state = "terminated"; - (_a = this.connection) == null ? void 0 : _a.destroy(reason); - this.emit("terminated", reason); - } - // https://fetch.spec.whatwg.org/#fetch-controller-abort - abort(error) { - var _a; - if (this.state !== "ongoing") { - return; - } - this.state = "aborted"; - if (!error) { - error = new DOMException("The operation was aborted.", "AbortError"); - } - this.serializedAbortReason = error; - (_a = this.connection) == null ? void 0 : _a.destroy(error); - this.emit("terminated", error); - } - }; - function handleFetchDone(response) { - finalizeAndReportTiming(response, "fetch"); - } - function fetch(input, init = void 0) { - var _a; - webidl.argumentLengthCheck(arguments, 1, "globalThis.fetch"); - let p = createDeferredPromise(); - let requestObject; - try { - requestObject = new Request(input, init); - } catch (e) { - p.reject(e); - return p.promise; - } - const request = requestObject[kState]; - if (requestObject.signal.aborted) { - abortFetch(p, request, null, requestObject.signal.reason); - return p.promise; - } - const globalObject = request.client.globalObject; - if (((_a = globalObject == null ? void 0 : globalObject.constructor) == null ? void 0 : _a.name) === "ServiceWorkerGlobalScope") { - request.serviceWorkers = "none"; - } - let responseObject = null; - let locallyAborted = false; - let controller = null; - addAbortListener( - requestObject.signal, - () => { - locallyAborted = true; - assert(controller != null); - controller.abort(requestObject.signal.reason); - const realResponse = responseObject == null ? void 0 : responseObject.deref(); - abortFetch(p, request, realResponse, requestObject.signal.reason); - } - ); - const processResponse = (response) => { - if (locallyAborted) { - return; - } - if (response.aborted) { - abortFetch(p, request, responseObject, controller.serializedAbortReason); - return; - } - if (response.type === "error") { - p.reject(new TypeError("fetch failed", { cause: response.error })); - return; - } - responseObject = new WeakRef(fromInnerResponse(response, "immutable")); - p.resolve(responseObject.deref()); - p = null; - }; - controller = fetching({ - request, - processResponseEndOfBody: handleFetchDone, - processResponse, - dispatcher: requestObject[kDispatcher] - // undici - }); - return p.promise; - } - function finalizeAndReportTiming(response, initiatorType = "other") { - var _a; - if (response.type === "error" && response.aborted) { - return; - } - if (!((_a = response.urlList) == null ? void 0 : _a.length)) { - return; - } - const originalURL = response.urlList[0]; - let timingInfo = response.timingInfo; - let cacheState = response.cacheState; - if (!urlIsHttpHttpsScheme(originalURL)) { - return; - } - if (timingInfo === null) { - return; - } - if (!response.timingAllowPassed) { - timingInfo = createOpaqueTimingInfo({ - startTime: timingInfo.startTime - }); - cacheState = ""; - } - timingInfo.endTime = coarsenedSharedCurrentTime(); - response.timingInfo = timingInfo; - markResourceTiming( - timingInfo, - originalURL.href, - initiatorType, - globalThis, - cacheState - ); - } - var markResourceTiming = performance.markResourceTiming; - function abortFetch(p, request, responseObject, error) { - var _a, _b; - if (p) { - p.reject(error); - } - if (request.body != null && isReadable((_a = request.body) == null ? void 0 : _a.stream)) { - request.body.stream.cancel(error).catch((err) => { - if (err.code === "ERR_INVALID_STATE") { - return; - } - throw err; - }); - } - if (responseObject == null) { - return; - } - const response = responseObject[kState]; - if (response.body != null && isReadable((_b = response.body) == null ? void 0 : _b.stream)) { - response.body.stream.cancel(error).catch((err) => { - if (err.code === "ERR_INVALID_STATE") { - return; - } - throw err; - }); - } - } - function fetching({ - request, - processRequestBodyChunkLength, - processRequestEndOfBody, - processResponse, - processResponseEndOfBody, - processResponseConsumeBody, - useParallelQueue = false, - dispatcher = getGlobalDispatcher() - // undici - }) { - var _a, _b, _c; - assert(dispatcher); - let taskDestination = null; - let crossOriginIsolatedCapability = false; - if (request.client != null) { - taskDestination = request.client.globalObject; - crossOriginIsolatedCapability = request.client.crossOriginIsolatedCapability; - } - const currentTime = coarsenedSharedCurrentTime(crossOriginIsolatedCapability); - const timingInfo = createOpaqueTimingInfo({ - startTime: currentTime - }); - const fetchParams = { - controller: new Fetch(dispatcher), - request, - timingInfo, - processRequestBodyChunkLength, - processRequestEndOfBody, - processResponse, - processResponseConsumeBody, - processResponseEndOfBody, - taskDestination, - crossOriginIsolatedCapability - }; - assert(!request.body || request.body.stream); - if (request.window === "client") { - request.window = ((_c = (_b = (_a = request.client) == null ? void 0 : _a.globalObject) == null ? void 0 : _b.constructor) == null ? void 0 : _c.name) === "Window" ? request.client : "no-window"; - } - if (request.origin === "client") { - request.origin = request.client.origin; - } - if (request.policyContainer === "client") { - if (request.client != null) { - request.policyContainer = clonePolicyContainer( - request.client.policyContainer - ); - } else { - request.policyContainer = makePolicyContainer(); - } - } - if (!request.headersList.contains("accept", true)) { - const value = "*/*"; - request.headersList.append("accept", value, true); - } - if (!request.headersList.contains("accept-language", true)) { - request.headersList.append("accept-language", "*", true); - } - if (request.priority === null) { - } - if (subresourceSet.has(request.destination)) { - } - mainFetch(fetchParams).catch((err) => { - fetchParams.controller.terminate(err); - }); - return fetchParams.controller; - } - function mainFetch(fetchParams, recursive = false) { - return __async(this, null, function* () { - const request = fetchParams.request; - let response = null; - if (request.localURLsOnly && !urlIsLocal(requestCurrentURL(request))) { - response = makeNetworkError("local URLs only"); - } - tryUpgradeRequestToAPotentiallyTrustworthyURL(request); - if (requestBadPort(request) === "blocked") { - response = makeNetworkError("bad port"); - } - if (request.referrerPolicy === "") { - request.referrerPolicy = request.policyContainer.referrerPolicy; - } - if (request.referrer !== "no-referrer") { - request.referrer = determineRequestsReferrer(request); - } - if (response === null) { - response = yield (() => __async(this, null, function* () { - 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") - ) { - request.responseTainting = "basic"; - return yield schemeFetch(fetchParams); - } - if (request.mode === "same-origin") { - return makeNetworkError('request mode cannot be "same-origin"'); - } - if (request.mode === "no-cors") { - if (request.redirect !== "follow") { - return makeNetworkError( - 'redirect mode cannot be "follow" for "no-cors" request' - ); - } - request.responseTainting = "opaque"; - return yield schemeFetch(fetchParams); - } - if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) { - return makeNetworkError("URL scheme must be a HTTP(S) scheme"); - } - request.responseTainting = "cors"; - return yield httpFetch(fetchParams); - }))(); - } - if (recursive) { - return response; - } - if (response.status !== 0 && !response.internalResponse) { - if (request.responseTainting === "cors") { - } - 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); - } - } - let internalResponse = response.status === 0 ? response : response.internalResponse; - if (internalResponse.urlList.length === 0) { - internalResponse.urlList.push(...request.urlList); - } - if (!request.timingAllowFailed) { - response.timingAllowPassed = true; - } - if (response.type === "opaque" && internalResponse.status === 206 && internalResponse.rangeRequested && !request.headers.contains("range", true)) { - response = internalResponse = makeNetworkError(); - } - if (response.status !== 0 && (request.method === "HEAD" || request.method === "CONNECT" || nullBodyStatus.includes(internalResponse.status))) { - internalResponse.body = null; - fetchParams.controller.dump = true; - } - if (request.integrity) { - const processBodyError = (reason) => fetchFinale(fetchParams, makeNetworkError(reason)); - if (request.responseTainting === "opaque" || response.body == null) { - processBodyError(response.error); - return; - } - const processBody = (bytes) => { - if (!bytesMatch(bytes, request.integrity)) { - processBodyError("integrity mismatch"); - return; - } - response.body = safelyExtractBody(bytes)[0]; - fetchFinale(fetchParams, response); - }; - yield fullyReadBody(response.body, processBody, processBodyError); - } else { - fetchFinale(fetchParams, response); - } - }); - } - function schemeFetch(fetchParams) { - if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) { - return Promise.resolve(makeAppropriateNetworkError(fetchParams)); - } - const { request } = fetchParams; - const { protocol: scheme } = requestCurrentURL(request); - switch (scheme) { - case "about:": { - return Promise.resolve(makeNetworkError("about scheme is not supported")); - } - case "blob:": { - if (!resolveObjectURL) { - resolveObjectURL = __require("buffer").resolveObjectURL; - } - const blobURLEntry = requestCurrentURL(request); - if (blobURLEntry.search.length !== 0) { - return Promise.resolve(makeNetworkError("NetworkError when attempting to fetch resource.")); - } - const blob = resolveObjectURL(blobURLEntry.toString()); - if (request.method !== "GET" || !isBlobLike(blob)) { - return Promise.resolve(makeNetworkError("invalid method")); - } - const response = makeResponse(); - const fullLength = blob.size; - const serializedFullLength = isomorphicEncode(`${fullLength}`); - const type = blob.type; - if (!request.headersList.contains("range", true)) { - const bodyWithType = extractBody(blob); - response.statusText = "OK"; - response.body = bodyWithType[0]; - response.headersList.set("content-length", serializedFullLength, true); - response.headersList.set("content-type", type, true); - } else { - response.rangeRequested = true; - const rangeHeader = request.headersList.get("range", true); - const rangeValue = simpleRangeHeaderValue(rangeHeader, true); - if (rangeValue === "failure") { - return Promise.resolve(makeNetworkError("failed to fetch the data URL")); - } - let { rangeStartValue: rangeStart, rangeEndValue: rangeEnd } = rangeValue; - if (rangeStart === null) { - rangeStart = fullLength - rangeEnd; - rangeEnd = rangeStart + rangeEnd - 1; - } else { - if (rangeStart >= fullLength) { - return Promise.resolve(makeNetworkError("Range start is greater than the blob's size.")); - } - if (rangeEnd === null || rangeEnd >= fullLength) { - rangeEnd = fullLength - 1; - } - } - const slicedBlob = blob.slice(rangeStart, rangeEnd, type); - const slicedBodyWithType = extractBody(slicedBlob); - response.body = slicedBodyWithType[0]; - const serializedSlicedLength = isomorphicEncode(`${slicedBlob.size}`); - const contentRange = buildContentRange(rangeStart, rangeEnd, fullLength); - response.status = 206; - response.statusText = "Partial Content"; - response.headersList.set("content-length", serializedSlicedLength, true); - response.headersList.set("content-type", type, true); - response.headersList.set("content-range", contentRange, true); - } - return Promise.resolve(response); - } - case "data:": { - const currentURL = requestCurrentURL(request); - const dataURLStruct = dataURLProcessor(currentURL); - if (dataURLStruct === "failure") { - return Promise.resolve(makeNetworkError("failed to fetch the data URL")); - } - const mimeType = serializeAMimeType(dataURLStruct.mimeType); - return Promise.resolve(makeResponse({ - statusText: "OK", - headersList: [ - ["content-type", { name: "Content-Type", value: mimeType }] - ], - body: safelyExtractBody(dataURLStruct.body)[0] - })); - } - case "file:": { - return Promise.resolve(makeNetworkError("not implemented... yet...")); - } - case "http:": - case "https:": { - return httpFetch(fetchParams).catch((err) => makeNetworkError(err)); - } - default: { - return Promise.resolve(makeNetworkError("unknown scheme")); - } - } - } - function finalizeResponse(fetchParams, response) { - fetchParams.request.done = true; - if (fetchParams.processResponseDone != null) { - queueMicrotask(() => fetchParams.processResponseDone(response)); - } - } - function fetchFinale(fetchParams, response) { - var _a; - let timingInfo = fetchParams.timingInfo; - const processResponseEndOfBody = () => { - const unsafeEndTime = Date.now(); - if (fetchParams.request.destination === "document") { - fetchParams.controller.fullTimingInfo = timingInfo; - } - fetchParams.controller.reportTimingSteps = () => { - if (fetchParams.request.url.protocol !== "https:") { - return; - } - timingInfo.endTime = unsafeEndTime; - let cacheState = response.cacheState; - const bodyInfo = response.bodyInfo; - if (!response.timingAllowPassed) { - timingInfo = createOpaqueTimingInfo(timingInfo); - cacheState = ""; - } - let responseStatus = 0; - if (fetchParams.request.mode !== "navigator" || !response.hasCrossOriginRedirects) { - responseStatus = response.status; - const mimeType = extractMimeType(response.headersList); - if (mimeType !== "failure") { - bodyInfo.contentType = minimizeSupportedMimeType(mimeType); - } - } - if (fetchParams.request.initiatorType != null) { - markResourceTiming(timingInfo, fetchParams.request.url.href, fetchParams.request.initiatorType, globalThis, cacheState, bodyInfo, responseStatus); - } - }; - const processResponseEndOfBodyTask = () => { - fetchParams.request.done = true; - if (fetchParams.processResponseEndOfBody != null) { - queueMicrotask(() => fetchParams.processResponseEndOfBody(response)); - } - if (fetchParams.request.initiatorType != null) { - fetchParams.controller.reportTimingSteps(); - } - }; - queueMicrotask(() => processResponseEndOfBodyTask()); - }; - if (fetchParams.processResponse != null) { - queueMicrotask(() => { - fetchParams.processResponse(response); - fetchParams.processResponse = null; - }); - } - const internalResponse = response.type === "error" ? response : (_a = response.internalResponse) != null ? _a : response; - if (internalResponse.body == null) { - processResponseEndOfBody(); - } else { - finished(internalResponse.body.stream, () => { - processResponseEndOfBody(); - }); - } - } - function httpFetch(fetchParams) { - return __async(this, null, function* () { - const request = fetchParams.request; - let response = null; - let actualResponse = null; - const timingInfo = fetchParams.timingInfo; - if (request.serviceWorkers === "all") { - } - if (response === null) { - if (request.redirect === "follow") { - request.serviceWorkers = "none"; - } - actualResponse = response = yield httpNetworkOrCacheFetch(fetchParams); - if (request.responseTainting === "cors" && corsCheck(request, response) === "failure") { - return makeNetworkError("cors failure"); - } - if (TAOCheck(request, response) === "failure") { - request.timingAllowFailed = true; - } - } - if ((request.responseTainting === "opaque" || response.type === "opaque") && crossOriginResourcePolicyCheck( - request.origin, - request.client, - request.destination, - actualResponse - ) === "blocked") { - return makeNetworkError("blocked"); - } - if (redirectStatusSet.has(actualResponse.status)) { - if (request.redirect !== "manual") { - fetchParams.controller.connection.destroy(void 0, false); - } - if (request.redirect === "error") { - response = makeNetworkError("unexpected redirect"); - } else if (request.redirect === "manual") { - response = actualResponse; - } else if (request.redirect === "follow") { - response = yield httpRedirectFetch(fetchParams, response); - } else { - assert(false); - } - } - response.timingInfo = timingInfo; - return response; - }); - } - function httpRedirectFetch(fetchParams, response) { - const request = fetchParams.request; - const actualResponse = response.internalResponse ? response.internalResponse : response; - let locationURL; - try { - locationURL = responseLocationURL( - actualResponse, - requestCurrentURL(request).hash - ); - if (locationURL == null) { - return response; - } - } catch (err) { - return Promise.resolve(makeNetworkError(err)); - } - if (!urlIsHttpHttpsScheme(locationURL)) { - return Promise.resolve(makeNetworkError("URL scheme must be a HTTP(S) scheme")); - } - if (request.redirectCount === 20) { - return Promise.resolve(makeNetworkError("redirect count exceeded")); - } - request.redirectCount += 1; - if (request.mode === "cors" && (locationURL.username || locationURL.password) && !sameOrigin(request, locationURL)) { - return Promise.resolve(makeNetworkError('cross origin not allowed for request mode "cors"')); - } - if (request.responseTainting === "cors" && (locationURL.username || locationURL.password)) { - return Promise.resolve(makeNetworkError( - 'URL cannot contain credentials for request mode "cors"' - )); - } - if (actualResponse.status !== 303 && request.body != null && request.body.source == null) { - return Promise.resolve(makeNetworkError()); - } - if ([301, 302].includes(actualResponse.status) && request.method === "POST" || actualResponse.status === 303 && !GET_OR_HEAD.includes(request.method)) { - request.method = "GET"; - request.body = null; - for (const headerName of requestBodyHeader) { - request.headersList.delete(headerName); - } - } - if (!sameOrigin(requestCurrentURL(request), locationURL)) { - request.headersList.delete("authorization", true); - request.headersList.delete("proxy-authorization", true); - request.headersList.delete("cookie", true); - request.headersList.delete("host", true); - } - if (request.body != null) { - assert(request.body.source != null); - request.body = safelyExtractBody(request.body.source)[0]; - } - const timingInfo = fetchParams.timingInfo; - timingInfo.redirectEndTime = timingInfo.postRedirectStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); - if (timingInfo.redirectStartTime === 0) { - timingInfo.redirectStartTime = timingInfo.startTime; - } - request.urlList.push(locationURL); - setRequestReferrerPolicyOnRedirect(request, actualResponse); - return mainFetch(fetchParams, true); - } - function httpNetworkOrCacheFetch(fetchParams, isAuthenticationFetch = false, isNewConnectionFetch = false) { - return __async(this, null, function* () { - const request = fetchParams.request; - let httpFetchParams = null; - let httpRequest = null; - let response = null; - const httpCache = null; - const revalidatingFlag = false; - if (request.window === "no-window" && request.redirect === "error") { - httpFetchParams = fetchParams; - httpRequest = request; - } else { - httpRequest = cloneRequest(request); - httpFetchParams = __spreadValues({}, fetchParams); - httpFetchParams.request = httpRequest; - } - const includeCredentials = request.credentials === "include" || request.credentials === "same-origin" && request.responseTainting === "basic"; - const contentLength = httpRequest.body ? httpRequest.body.length : null; - let contentLengthHeaderValue = null; - if (httpRequest.body == null && ["POST", "PUT"].includes(httpRequest.method)) { - contentLengthHeaderValue = "0"; - } - if (contentLength != null) { - contentLengthHeaderValue = isomorphicEncode(`${contentLength}`); - } - if (contentLengthHeaderValue != null) { - httpRequest.headersList.append("content-length", contentLengthHeaderValue, true); - } - if (contentLength != null && httpRequest.keepalive) { - } - if (httpRequest.referrer instanceof URL) { - httpRequest.headersList.append("referer", isomorphicEncode(httpRequest.referrer.href), true); - } - appendRequestOriginHeader(httpRequest); - appendFetchMetadata(httpRequest); - if (!httpRequest.headersList.contains("user-agent", true)) { - httpRequest.headersList.append("user-agent", defaultUserAgent); - } - if (httpRequest.cache === "default" && (httpRequest.headersList.contains("if-modified-since", true) || httpRequest.headersList.contains("if-none-match", true) || httpRequest.headersList.contains("if-unmodified-since", true) || httpRequest.headersList.contains("if-match", true) || httpRequest.headersList.contains("if-range", true))) { - httpRequest.cache = "no-store"; - } - if (httpRequest.cache === "no-cache" && !httpRequest.preventNoCacheCacheControlHeaderModification && !httpRequest.headersList.contains("cache-control", true)) { - httpRequest.headersList.append("cache-control", "max-age=0", true); - } - if (httpRequest.cache === "no-store" || httpRequest.cache === "reload") { - if (!httpRequest.headersList.contains("pragma", true)) { - httpRequest.headersList.append("pragma", "no-cache", true); - } - if (!httpRequest.headersList.contains("cache-control", true)) { - httpRequest.headersList.append("cache-control", "no-cache", true); - } - } - if (httpRequest.headersList.contains("range", true)) { - httpRequest.headersList.append("accept-encoding", "identity", true); - } - if (!httpRequest.headersList.contains("accept-encoding", true)) { - if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) { - httpRequest.headersList.append("accept-encoding", "br, gzip, deflate", true); - } else { - httpRequest.headersList.append("accept-encoding", "gzip, deflate", true); - } - } - httpRequest.headersList.delete("host", true); - if (includeCredentials) { - } - if (httpCache == null) { - httpRequest.cache = "no-store"; - } - if (httpRequest.cache !== "no-store" && httpRequest.cache !== "reload") { - } - if (response == null) { - if (httpRequest.cache === "only-if-cached") { - return makeNetworkError("only if cached"); - } - const forwardResponse = yield httpNetworkFetch( - httpFetchParams, - includeCredentials, - isNewConnectionFetch - ); - if (!safeMethodsSet.has(httpRequest.method) && forwardResponse.status >= 200 && forwardResponse.status <= 399) { - } - if (revalidatingFlag && forwardResponse.status === 304) { - } - if (response == null) { - response = forwardResponse; - } - } - response.urlList = [...httpRequest.urlList]; - if (httpRequest.headersList.contains("range", true)) { - response.rangeRequested = true; - } - response.requestIncludesCredentials = includeCredentials; - if (response.status === 407) { - if (request.window === "no-window") { - return makeNetworkError(); - } - if (isCancelled(fetchParams)) { - return makeAppropriateNetworkError(fetchParams); - } - return makeNetworkError("proxy authentication required"); - } - 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) - ) { - if (isCancelled(fetchParams)) { - return makeAppropriateNetworkError(fetchParams); - } - fetchParams.controller.connection.destroy(); - response = yield httpNetworkOrCacheFetch( - fetchParams, - isAuthenticationFetch, - true - ); - } - if (isAuthenticationFetch) { - } - return response; - }); - } - function httpNetworkFetch(fetchParams, includeCredentials = false, forceNewConnection = false) { - return __async(this, null, function* () { - assert(!fetchParams.controller.connection || fetchParams.controller.connection.destroyed); - fetchParams.controller.connection = { - abort: null, - destroyed: false, - destroy(err, abort = true) { - var _a2; - if (!this.destroyed) { - this.destroyed = true; - if (abort) { - (_a2 = this.abort) == null ? void 0 : _a2.call(this, err != null ? err : new DOMException("The operation was aborted.", "AbortError")); - } - } - } - }; - const request = fetchParams.request; - let response = null; - const timingInfo = fetchParams.timingInfo; - const httpCache = null; - if (httpCache == null) { - request.cache = "no-store"; - } - const newConnection = forceNewConnection ? "yes" : "no"; - if (request.mode === "websocket") { - } else { - } - let requestBody = null; - if (request.body == null && fetchParams.processRequestEndOfBody) { - queueMicrotask(() => fetchParams.processRequestEndOfBody()); - } else if (request.body != null) { - const processBodyChunk = function(bytes) { - return __asyncGenerator(this, null, function* () { - var _a2; - if (isCancelled(fetchParams)) { - return; - } - yield bytes; - (_a2 = fetchParams.processRequestBodyChunkLength) == null ? void 0 : _a2.call(fetchParams, bytes.byteLength); - }); - }; - const processEndOfBody = () => { - if (isCancelled(fetchParams)) { - return; - } - if (fetchParams.processRequestEndOfBody) { - fetchParams.processRequestEndOfBody(); - } - }; - const processBodyError = (e) => { - if (isCancelled(fetchParams)) { - return; - } - if (e.name === "AbortError") { - fetchParams.controller.abort(); - } else { - fetchParams.controller.terminate(e); - } - }; - requestBody = function() { - return __asyncGenerator(this, null, function* () { - try { - try { - for (var iter = __forAwait(request.body.stream), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) { - const bytes = temp.value; - yield* __yieldStar(processBodyChunk(bytes)); - } - } catch (temp) { - error = [temp]; - } finally { - try { - more && (temp = iter.return) && (yield new __await(temp.call(iter))); - } finally { - if (error) - throw error[0]; - } - } - processEndOfBody(); - } catch (err) { - processBodyError(err); - } - }); - }(); - } - try { - const { body, status, statusText, headersList, socket } = yield 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) { - if (err.name === "AbortError") { - fetchParams.controller.connection.destroy(); - return makeAppropriateNetworkError(fetchParams, err); - } - return makeNetworkError(err); - } - const pullAlgorithm = () => __async(this, null, function* () { - yield fetchParams.controller.resume(); - }); - const cancelAlgorithm = (reason) => { - if (!isCancelled(fetchParams)) { - fetchParams.controller.abort(reason); - } - }; - const stream = new ReadableStream( - { - start(controller) { - return __async(this, null, function* () { - fetchParams.controller.controller = controller; - }); - }, - pull(controller) { - return __async(this, null, function* () { - yield pullAlgorithm(controller); - }); - }, - cancel(reason) { - return __async(this, null, function* () { - yield cancelAlgorithm(reason); - }); - }, - type: "bytes" - } - ); - response.body = { stream, source: null, length: null }; - fetchParams.controller.onAborted = onAborted; - fetchParams.controller.on("terminated", onAborted); - fetchParams.controller.resume = () => __async(this, null, function* () { - var _a2; - while (true) { - let bytes; - let isFailure; - try { - const { done, value } = yield fetchParams.controller.next(); - if (isAborted(fetchParams)) { - break; - } - bytes = done ? void 0 : value; - } catch (err) { - if (fetchParams.controller.ended && !timingInfo.encodedBodySize) { - bytes = void 0; - } else { - bytes = err; - isFailure = true; - } - } - if (bytes === void 0) { - readableStreamClose(fetchParams.controller.controller); - finalizeResponse(fetchParams, response); - return; - } - timingInfo.decodedBodySize += (_a2 = bytes == null ? void 0 : bytes.byteLength) != null ? _a2 : 0; - if (isFailure) { - fetchParams.controller.terminate(bytes); - return; - } - const buffer = new Uint8Array(bytes); - if (buffer.byteLength) { - fetchParams.controller.controller.enqueue(buffer); - } - if (isErrored(stream)) { - fetchParams.controller.terminate(); - return; - } - if (fetchParams.controller.controller.desiredSize <= 0) { - return; - } - } - }); - function onAborted(reason) { - if (isAborted(fetchParams)) { - response.aborted = true; - if (isReadable(stream)) { - fetchParams.controller.controller.error( - fetchParams.controller.serializedAbortReason - ); - } - } else { - if (isReadable(stream)) { - fetchParams.controller.controller.error(new TypeError("terminated", { - cause: isErrorLike(reason) ? reason : void 0 - })); - } - } - fetchParams.controller.connection.destroy(); - } - return response; - function dispatch({ body }) { - const url = requestCurrentURL(request); - const agent = fetchParams.controller.dispatcher; - return new Promise((resolve2, reject) => agent.dispatch( - { - path: url.pathname + url.search, - origin: url.origin, - method: request.method, - body: agent.isMockActive ? request.body && (request.body.source || request.body.stream) : body, - headers: request.headersList.entries, - maxRedirections: 0, - upgrade: request.mode === "websocket" ? "websocket" : void 0 - }, - { - body: null, - abort: null, - onConnect(abort) { - const { connection } = fetchParams.controller; - timingInfo.finalConnectionTimingInfo = clampAndCoarsenConnectionTimingInfo(void 0, timingInfo.postRedirectStartTime, fetchParams.crossOriginIsolatedCapability); - if (connection.destroyed) { - abort(new DOMException("The operation was aborted.", "AbortError")); - } else { - fetchParams.controller.on("terminated", abort); - this.abort = connection.abort = abort; - } - timingInfo.finalNetworkRequestStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); - }, - onResponseStarted() { - timingInfo.finalNetworkResponseStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); - }, - onHeaders(status, rawHeaders, resume, statusText) { - if (status < 200) { - return; - } - let location = ""; - const headersList = new HeadersList(); - for (let i = 0; i < rawHeaders.length; i += 2) { - headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString("latin1"), true); - } - location = headersList.get("location", true); - this.body = new Readable({ read: resume }); - const decoders = []; - const willFollow = location && request.redirect === "follow" && redirectStatusSet.has(status); - if (request.method !== "HEAD" && request.method !== "CONNECT" && !nullBodyStatus.includes(status) && !willFollow) { - const contentEncoding = headersList.get("content-encoding", true); - const codings = contentEncoding ? contentEncoding.toLowerCase().split(",") : []; - const maxContentEncodings = 5; - if (codings.length > maxContentEncodings) { - reject(new Error(`too many content-encodings in response: ${codings.length}, maximum allowed is ${maxContentEncodings}`)); - return true; - } - for (let i = codings.length - 1; i >= 0; --i) { - const coding = codings[i].trim(); - 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(createInflate({ - flush: zlib.constants.Z_SYNC_FLUSH, - finishFlush: zlib.constants.Z_SYNC_FLUSH - })); - } else if (coding === "br") { - decoders.push(zlib.createBrotliDecompress({ - flush: zlib.constants.BROTLI_OPERATION_FLUSH, - finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH - })); - } else { - decoders.length = 0; - break; - } - } - } - const onError = this.onError.bind(this); - resolve2({ - status, - statusText, - headersList, - body: decoders.length ? pipeline(this.body, ...decoders, (err) => { - if (err) { - this.onError(err); - } - }).on("error", onError) : this.body.on("error", onError) - }); - return true; - }, - onData(chunk) { - if (fetchParams.controller.dump) { - return; - } - const bytes = chunk; - timingInfo.encodedBodySize += bytes.byteLength; - return this.body.push(bytes); - }, - onComplete() { - if (this.abort) { - fetchParams.controller.off("terminated", this.abort); - } - if (fetchParams.controller.onAborted) { - fetchParams.controller.off("terminated", fetchParams.controller.onAborted); - } - fetchParams.controller.ended = true; - this.body.push(null); - }, - onError(error) { - var _a2; - if (this.abort) { - fetchParams.controller.off("terminated", this.abort); - } - (_a2 = this.body) == null ? void 0 : _a2.destroy(error); - fetchParams.controller.terminate(error); - reject(error); - }, - onUpgrade(status, rawHeaders, socket) { - if (status !== 101) { - return; - } - const headersList = new HeadersList(); - for (let i = 0; i < rawHeaders.length; i += 2) { - headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString("latin1"), true); - } - resolve2({ - status, - statusText: STATUS_CODES[status], - headersList, - socket - }); - return true; - } - } - )); - } - }); - } - module.exports = { - fetch, - Fetch, - fetching, - finalizeAndReportTiming - }; - } - }); - - // - var require_symbols3 = __commonJS({ - ""(exports, 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") - }; - } - }); +async function main() { + const isWindows = os.platform() === 'win32'; + const bazelRcPath = process.env.BAZELRC; + const allowWindowsRbe = process.env.ALLOW_WINDOWS_RBE === 'true'; + const trustedBuild = process.env.TRUSTED_BUILD === 'true'; + const credential = process.env.GOOGLE_CREDENTIAL; - // - var require_progressevent = __commonJS({ - ""(exports, module) { - "use strict"; - var { webidl } = require_webidl(); - var kState = Symbol("ProgressEvent state"); - var ProgressEvent = class _ProgressEvent extends Event { - constructor(type, eventInitDict = {}) { - type = webidl.converters.DOMString(type, "ProgressEvent constructor", "type"); - eventInitDict = webidl.converters.ProgressEventInit(eventInitDict != null ? 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 - }; - } - }); - - // - var require_encoding = __commonJS({ - ""(exports, module) { - "use strict"; - function getEncoding(label) { - if (!label) { - 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 - }; - } - }); - - // - var require_util4 = __commonJS({ - ""(exports, module) { - "use strict"; - var { - kState, - kError, - kResult, - kAborted, - kLastProgressEventFired - } = require_symbols3(); - var { ProgressEvent } = require_progressevent(); - var { getEncoding } = require_encoding(); - var { serializeAMimeType, parseMIMEType } = require_data_url(); - var { types } = __require("util"); - var { StringDecoder: StringDecoder2 } = __require("string_decoder"); - var { btoa } = __require("buffer"); - var staticPropertyDescriptors = { - enumerable: true, - writable: false, - configurable: false - }; - function readOperation(fr, blob, type, encodingName) { - if (fr[kState] === "loading") { - throw new DOMException("Invalid state", "InvalidStateError"); - } - fr[kState] = "loading"; - fr[kResult] = null; - fr[kError] = null; - const stream = blob.stream(); - const reader = stream.getReader(); - const bytes = []; - let chunkPromise = reader.read(); - let isFirstChunk = true; - (() => __async(this, null, function* () { - while (!fr[kAborted]) { - try { - const { done, value } = yield chunkPromise; - if (isFirstChunk && !fr[kAborted]) { - queueMicrotask(() => { - fireAProgressEvent("loadstart", fr); - }); - } - isFirstChunk = false; - if (!done && types.isUint8Array(value)) { - bytes.push(value); - if ((fr[kLastProgressEventFired] === void 0 || Date.now() - fr[kLastProgressEventFired] >= 50) && !fr[kAborted]) { - fr[kLastProgressEventFired] = Date.now(); - queueMicrotask(() => { - fireAProgressEvent("progress", fr); - }); - } - chunkPromise = reader.read(); - } else if (done) { - queueMicrotask(() => { - fr[kState] = "done"; - try { - const result = packageData(bytes, type, blob.type, encodingName); - if (fr[kAborted]) { - return; - } - fr[kResult] = result; - fireAProgressEvent("load", fr); - } catch (error) { - fr[kError] = error; - fireAProgressEvent("error", fr); - } - if (fr[kState] !== "loading") { - fireAProgressEvent("loadend", fr); - } - }); - break; - } - } catch (error) { - if (fr[kAborted]) { - return; - } - queueMicrotask(() => { - fr[kState] = "done"; - fr[kError] = error; - fireAProgressEvent("error", fr); - if (fr[kState] !== "loading") { - fireAProgressEvent("loadend", fr); - } - }); - break; - } - } - }))(); - } - function fireAProgressEvent(e, reader) { - const event = new ProgressEvent(e, { - bubbles: false, - cancelable: false - }); - reader.dispatchEvent(event); - } - function packageData(bytes, type, mimeType, encodingName) { - switch (type) { - case "DataURL": { - let dataURL = "data:"; - const parsed = parseMIMEType(mimeType || "application/octet-stream"); - if (parsed !== "failure") { - dataURL += serializeAMimeType(parsed); - } - dataURL += ";base64,"; - const decoder = new StringDecoder2("latin1"); - for (const chunk of bytes) { - dataURL += btoa(decoder.write(chunk)); - } - dataURL += btoa(decoder.end()); - return dataURL; - } - case "Text": { - let encoding = "failure"; - if (encodingName) { - encoding = getEncoding(encodingName); - } - if (encoding === "failure" && mimeType) { - const type2 = parseMIMEType(mimeType); - if (type2 !== "failure") { - encoding = getEncoding(type2.parameters.get("charset")); - } - } - if (encoding === "failure") { - encoding = "UTF-8"; - } - return decode(bytes, encoding); - } - case "ArrayBuffer": { - const sequence = combineByteSequences(bytes); - return sequence.buffer; - } - case "BinaryString": { - let binaryString = ""; - const decoder = new StringDecoder2("latin1"); - for (const chunk of bytes) { - binaryString += decoder.write(chunk); - } - binaryString += decoder.end(); - return binaryString; - } - } - } - function decode(ioQueue, encoding) { - const bytes = combineByteSequences(ioQueue); - const BOMEncoding = BOMSniffing(bytes); - let slice = 0; - if (BOMEncoding !== null) { - encoding = BOMEncoding; - slice = BOMEncoding === "UTF-8" ? 3 : 2; - } - const sliced = bytes.slice(slice); - return new TextDecoder(encoding).decode(sliced); - } - function BOMSniffing(ioQueue) { - const [a, b, c] = ioQueue; - if (a === 239 && b === 187 && c === 191) { - return "UTF-8"; - } else if (a === 254 && b === 255) { - return "UTF-16BE"; - } else if (a === 255 && b === 254) { - return "UTF-16LE"; - } - return null; - } - 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 - }; - } - }); - - // - var require_filereader = __commonJS({ - ""(exports, module) { - "use strict"; - var { - staticPropertyDescriptors, - readOperation, - fireAProgressEvent - } = require_util4(); - var { - kState, - kError, - kResult, - kEvents, - kAborted - } = require_symbols3(); - var { webidl } = require_webidl(); - var { kEnumerableProperty } = require_util(); - var FileReader = 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, "FileReader.readAsArrayBuffer"); - blob = webidl.converters.Blob(blob, { strict: false }); - 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, "FileReader.readAsBinaryString"); - blob = webidl.converters.Blob(blob, { strict: false }); - readOperation(this, blob, "BinaryString"); - } - /** - * @see https://w3c.github.io/FileAPI/#readAsDataText - * @param {import('buffer').Blob} blob - * @param {string?} encoding - */ - readAsText(blob, encoding = void 0) { - webidl.brandCheck(this, _FileReader); - webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsText"); - blob = webidl.converters.Blob(blob, { strict: false }); - if (encoding !== void 0) { - encoding = webidl.converters.DOMString(encoding, "FileReader.readAsText", "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, "FileReader.readAsDataURL"); - blob = webidl.converters.Blob(blob, { strict: false }); - readOperation(this, blob, "DataURL"); - } - /** - * @see https://w3c.github.io/FileAPI/#dfn-abort - */ - abort() { - if (this[kState] === "empty" || this[kState] === "done") { - this[kResult] = null; - return; - } - if (this[kState] === "loading") { - this[kState] = "done"; - this[kResult] = null; - } - this[kAborted] = true; - fireAProgressEvent("abort", 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); - return this[kResult]; - } - /** - * @see https://w3c.github.io/FileAPI/#dom-filereader-error - */ - get error() { - webidl.brandCheck(this, _FileReader); - 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; - } - } - }; - FileReader.EMPTY = FileReader.prototype.EMPTY = 0; - FileReader.LOADING = FileReader.prototype.LOADING = 1; - 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 - }; - } - }); - - // - var require_symbols4 = __commonJS({ - ""(exports, module) { - "use strict"; - module.exports = { - kConstruct: require_symbols().kConstruct - }; - } - }); - - // - var require_util5 = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { URLSerializer } = require_data_url(); - var { isValidHeaderName } = require_util2(); - function urlEquals(A, B, excludeFragment = false) { - const serializedA = URLSerializer(A, excludeFragment); - const serializedB = URLSerializer(B, excludeFragment); - return serializedA === serializedB; - } - function getFieldValues(header) { - assert(header !== null); - const values = []; - for (let value of header.split(",")) { - value = value.trim(); - if (isValidHeaderName(value)) { - values.push(value); - } - } - return values; - } - module.exports = { - urlEquals, - getFieldValues - }; - } - }); - - // - var require_cache = __commonJS({ - ""(exports, module) { - "use strict"; - var { kConstruct } = require_symbols4(); - var { urlEquals, getFieldValues } = require_util5(); - var { kEnumerableProperty, isDisturbed } = require_util(); - var { webidl } = require_webidl(); - var { Response, cloneResponse, fromInnerResponse } = require_response(); - var { Request, fromInnerRequest } = require_request2(); - var { kState } = require_symbols2(); - var { fetching } = require_fetch(); - var { urlIsHttpHttpsScheme, createDeferredPromise, readAllBytes } = require_util2(); - var assert = __require("assert"); - var _relevantRequestResponseList, _batchCacheOperations, batchCacheOperations_fn, _queryCache, queryCache_fn, _requestMatchesCachedItem, requestMatchesCachedItem_fn, _internalMatchAll, internalMatchAll_fn; - var _Cache = class _Cache { - constructor() { - /** - * @see https://w3c.github.io/ServiceWorker/#batch-cache-operations-algorithm - * @param {CacheBatchOperation[]} operations - * @returns {requestResponseList} - */ - __privateAdd(this, _batchCacheOperations); - /** - * @see https://w3c.github.io/ServiceWorker/#query-cache - * @param {any} requestQuery - * @param {import('../../types/cache').CacheQueryOptions} options - * @param {requestResponseList} targetStorage - * @returns {requestResponseList} - */ - __privateAdd(this, _queryCache); - /** - * @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} - */ - __privateAdd(this, _requestMatchesCachedItem); - __privateAdd(this, _internalMatchAll); - /** - * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-request-response-list - * @type {requestResponseList} - */ - __privateAdd(this, _relevantRequestResponseList, void 0); - if (arguments[0] !== kConstruct) { - webidl.illegalConstructor(); - } - webidl.util.markAsUncloneable(this); - __privateSet(this, _relevantRequestResponseList, arguments[1]); - } - match(_0) { - return __async(this, arguments, function* (request, options = {}) { - webidl.brandCheck(this, _Cache); - const prefix = "Cache.match"; - webidl.argumentLengthCheck(arguments, 1, prefix); - request = webidl.converters.RequestInfo(request, prefix, "request"); - options = webidl.converters.CacheQueryOptions(options, prefix, "options"); - const p = __privateMethod(this, _internalMatchAll, internalMatchAll_fn).call(this, request, options, 1); - if (p.length === 0) { - return; - } - return p[0]; - }); - } - matchAll() { - return __async(this, arguments, function* (request = void 0, options = {}) { - webidl.brandCheck(this, _Cache); - const prefix = "Cache.matchAll"; - if (request !== void 0) - request = webidl.converters.RequestInfo(request, prefix, "request"); - options = webidl.converters.CacheQueryOptions(options, prefix, "options"); - return __privateMethod(this, _internalMatchAll, internalMatchAll_fn).call(this, request, options); - }); - } - add(_0) { - return __async(this, arguments, function* (request) { - webidl.brandCheck(this, _Cache); - const prefix = "Cache.add"; - webidl.argumentLengthCheck(arguments, 1, prefix); - request = webidl.converters.RequestInfo(request, prefix, "request"); - const requests = [request]; - const responseArrayPromise = this.addAll(requests); - return yield responseArrayPromise; - }); - } - addAll(_0) { - return __async(this, arguments, function* (requests) { - webidl.brandCheck(this, _Cache); - const prefix = "Cache.addAll"; - webidl.argumentLengthCheck(arguments, 1, prefix); - const responsePromises = []; - const requestList = []; - for (let request of requests) { - if (request === void 0) { - throw webidl.errors.conversionFailed({ - prefix, - argument: "Argument 1", - types: ["undefined is not allowed"] - }); - } - request = webidl.converters.RequestInfo(request); - if (typeof request === "string") { - continue; - } - const r = request[kState]; - if (!urlIsHttpHttpsScheme(r.url) || r.method !== "GET") { - throw webidl.errors.exception({ - header: prefix, - message: "Expected http/s scheme when method is not GET." - }); - } - } - const fetchControllers = []; - for (const request of requests) { - const r = new Request(request)[kState]; - if (!urlIsHttpHttpsScheme(r.url)) { - throw webidl.errors.exception({ - header: prefix, - message: "Expected http/s scheme." - }); - } - r.initiator = "fetch"; - r.destination = "subresource"; - requestList.push(r); - const responsePromise = createDeferredPromise(); - fetchControllers.push(fetching({ - request: r, - processResponse(response) { - 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")) { - const fieldValues = getFieldValues(response.headersList.get("vary")); - for (const fieldValue of fieldValues) { - 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) { - if (response.aborted) { - responsePromise.reject(new DOMException("aborted", "AbortError")); - return; - } - responsePromise.resolve(response); - } - })); - responsePromises.push(responsePromise.promise); - } - const p = Promise.all(responsePromises); - const responses = yield p; - const operations = []; - let index = 0; - for (const response of responses) { - const operation = { - type: "put", - // 7.3.2 - request: requestList[index], - // 7.3.3 - response - // 7.3.4 - }; - operations.push(operation); - index++; - } - const cacheJobPromise = createDeferredPromise(); - let errorData = null; - try { - __privateMethod(this, _batchCacheOperations, batchCacheOperations_fn).call(this, operations); - } catch (e) { - errorData = e; - } - queueMicrotask(() => { - if (errorData === null) { - cacheJobPromise.resolve(void 0); - } else { - cacheJobPromise.reject(errorData); - } - }); - return cacheJobPromise.promise; - }); - } - put(_0, _1) { - return __async(this, arguments, function* (request, response) { - webidl.brandCheck(this, _Cache); - const prefix = "Cache.put"; - webidl.argumentLengthCheck(arguments, 2, prefix); - request = webidl.converters.RequestInfo(request, prefix, "request"); - response = webidl.converters.Response(response, prefix, "response"); - let innerRequest = null; - if (request instanceof Request) { - innerRequest = request[kState]; - } else { - innerRequest = new Request(request)[kState]; - } - if (!urlIsHttpHttpsScheme(innerRequest.url) || innerRequest.method !== "GET") { - throw webidl.errors.exception({ - header: prefix, - message: "Expected an http/s scheme when method is not GET" - }); - } - const innerResponse = response[kState]; - if (innerResponse.status === 206) { - throw webidl.errors.exception({ - header: prefix, - message: "Got 206 status" - }); - } - if (innerResponse.headersList.contains("vary")) { - const fieldValues = getFieldValues(innerResponse.headersList.get("vary")); - for (const fieldValue of fieldValues) { - if (fieldValue === "*") { - throw webidl.errors.exception({ - header: prefix, - message: "Got * vary field value" - }); - } - } - } - if (innerResponse.body && (isDisturbed(innerResponse.body.stream) || innerResponse.body.stream.locked)) { - throw webidl.errors.exception({ - header: prefix, - message: "Response body is locked or disturbed" - }); - } - const clonedResponse = cloneResponse(innerResponse); - const bodyReadPromise = createDeferredPromise(); - if (innerResponse.body != null) { - const stream = innerResponse.body.stream; - const reader = stream.getReader(); - readAllBytes(reader).then(bodyReadPromise.resolve, bodyReadPromise.reject); - } else { - bodyReadPromise.resolve(void 0); - } - const operations = []; - const operation = { - type: "put", - // 14. - request: innerRequest, - // 15. - response: clonedResponse - // 16. - }; - operations.push(operation); - const bytes = yield bodyReadPromise.promise; - if (clonedResponse.body != null) { - clonedResponse.body.source = bytes; - } - const cacheJobPromise = createDeferredPromise(); - let errorData = null; - try { - __privateMethod(this, _batchCacheOperations, batchCacheOperations_fn).call(this, operations); - } catch (e) { - errorData = e; - } - queueMicrotask(() => { - if (errorData === null) { - cacheJobPromise.resolve(); - } else { - cacheJobPromise.reject(errorData); - } - }); - return cacheJobPromise.promise; - }); - } - delete(_0) { - return __async(this, arguments, function* (request, options = {}) { - webidl.brandCheck(this, _Cache); - const prefix = "Cache.delete"; - webidl.argumentLengthCheck(arguments, 1, prefix); - request = webidl.converters.RequestInfo(request, prefix, "request"); - options = webidl.converters.CacheQueryOptions(options, prefix, "options"); - 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]; - } - const operations = []; - const operation = { - type: "delete", - request: r, - options - }; - operations.push(operation); - const cacheJobPromise = createDeferredPromise(); - let errorData = null; - let requestResponses; - try { - requestResponses = __privateMethod(this, _batchCacheOperations, batchCacheOperations_fn).call(this, operations); - } catch (e) { - errorData = e; - } - queueMicrotask(() => { - if (errorData === null) { - cacheJobPromise.resolve(!!(requestResponses == null ? void 0 : 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 {Promise} - */ - keys() { - return __async(this, arguments, function* (request = void 0, options = {}) { - webidl.brandCheck(this, _Cache); - const prefix = "Cache.keys"; - if (request !== void 0) - request = webidl.converters.RequestInfo(request, prefix, "request"); - options = webidl.converters.CacheQueryOptions(options, prefix, "options"); - let r = null; - if (request !== void 0) { - if (request instanceof Request) { - r = request[kState]; - if (r.method !== "GET" && !options.ignoreMethod) { - return []; - } - } else if (typeof request === "string") { - r = new Request(request)[kState]; - } - } - const promise = createDeferredPromise(); - const requests = []; - if (request === void 0) { - for (const requestResponse of __privateGet(this, _relevantRequestResponseList)) { - requests.push(requestResponse[0]); - } - } else { - const requestResponses = __privateMethod(this, _queryCache, queryCache_fn).call(this, r, options); - for (const requestResponse of requestResponses) { - requests.push(requestResponse[0]); - } - } - queueMicrotask(() => { - const requestList = []; - for (const request2 of requests) { - const requestObject = fromInnerRequest( - request2, - new AbortController().signal, - "immutable" - ); - requestList.push(requestObject); - } - promise.resolve(Object.freeze(requestList)); - }); - return promise.promise; - }); - } - }; - _relevantRequestResponseList = new WeakMap(); - _batchCacheOperations = new WeakSet(); - batchCacheOperations_fn = function(operations) { - const cache = __privateGet(this, _relevantRequestResponseList); - const backupCache = [...cache]; - const addedItems = []; - const resultList = []; - try { - for (const operation of operations) { - if (operation.type !== "delete" && operation.type !== "put") { - throw webidl.errors.exception({ - header: "Cache.#batchCacheOperations", - message: 'operation type does not match "delete" or "put"' - }); - } - if (operation.type === "delete" && operation.response != null) { - throw webidl.errors.exception({ - header: "Cache.#batchCacheOperations", - message: "delete operation should not have an associated response" - }); - } - if (__privateMethod(this, _queryCache, queryCache_fn).call(this, operation.request, operation.options, addedItems).length) { - throw new DOMException("???", "InvalidStateError"); - } - let requestResponses; - if (operation.type === "delete") { - requestResponses = __privateMethod(this, _queryCache, queryCache_fn).call(this, operation.request, operation.options); - if (requestResponses.length === 0) { - return []; - } - for (const requestResponse of requestResponses) { - const idx = cache.indexOf(requestResponse); - assert(idx !== -1); - cache.splice(idx, 1); - } - } else if (operation.type === "put") { - if (operation.response == null) { - throw webidl.errors.exception({ - header: "Cache.#batchCacheOperations", - message: "put operation should have an associated response" - }); - } - const r = operation.request; - if (!urlIsHttpHttpsScheme(r.url)) { - throw webidl.errors.exception({ - header: "Cache.#batchCacheOperations", - message: "expected http or https scheme" - }); - } - if (r.method !== "GET") { - throw webidl.errors.exception({ - header: "Cache.#batchCacheOperations", - message: "not get method" - }); - } - if (operation.options != null) { - throw webidl.errors.exception({ - header: "Cache.#batchCacheOperations", - message: "options must not be defined" - }); - } - requestResponses = __privateMethod(this, _queryCache, queryCache_fn).call(this, operation.request); - for (const requestResponse of requestResponses) { - const idx = cache.indexOf(requestResponse); - assert(idx !== -1); - cache.splice(idx, 1); - } - cache.push([operation.request, operation.response]); - addedItems.push([operation.request, operation.response]); - } - resultList.push([operation.request, operation.response]); - } - return resultList; - } catch (e) { - __privateGet(this, _relevantRequestResponseList).length = 0; - __privateSet(this, _relevantRequestResponseList, backupCache); - throw e; - } - }; - _queryCache = new WeakSet(); - queryCache_fn = function(requestQuery, options, targetStorage) { - const resultList = []; - const storage = targetStorage != null ? targetStorage : __privateGet(this, _relevantRequestResponseList); - for (const requestResponse of storage) { - const [cachedRequest, cachedResponse] = requestResponse; - if (__privateMethod(this, _requestMatchesCachedItem, requestMatchesCachedItem_fn).call(this, requestQuery, cachedRequest, cachedResponse, options)) { - resultList.push(requestResponse); - } - } - return resultList; - }; - _requestMatchesCachedItem = new WeakSet(); - requestMatchesCachedItem_fn = function(requestQuery, request, response = null, options) { - const queryURL = new URL(requestQuery.url); - const cachedURL = new URL(request.url); - if (options == null ? void 0 : options.ignoreSearch) { - cachedURL.search = ""; - queryURL.search = ""; - } - if (!urlEquals(queryURL, cachedURL, true)) { - return false; - } - if (response == null || (options == null ? void 0 : 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 (requestValue !== queryValue) { - return false; - } - } - return true; - }; - _internalMatchAll = new WeakSet(); - internalMatchAll_fn = function(request, options, maxResponses = Infinity) { - let r = null; - if (request !== void 0) { - if (request instanceof Request) { - r = request[kState]; - if (r.method !== "GET" && !options.ignoreMethod) { - return []; - } - } else if (typeof request === "string") { - r = new Request(request)[kState]; - } - } - const responses = []; - if (request === void 0) { - for (const requestResponse of __privateGet(this, _relevantRequestResponseList)) { - responses.push(requestResponse[1]); - } - } else { - const requestResponses = __privateMethod(this, _queryCache, queryCache_fn).call(this, r, options); - for (const requestResponse of requestResponses) { - responses.push(requestResponse[1]); - } - } - const responseList = []; - for (const response of responses) { - const responseObject = fromInnerResponse(response, "immutable"); - responseList.push(responseObject.clone()); - if (responseList.length >= maxResponses) { - break; - } - } - return Object.freeze(responseList); - }; - var Cache = _Cache; - Object.defineProperties(Cache.prototype, { - [Symbol.toStringTag]: { - value: "Cache", - configurable: true - }, - match: kEnumerableProperty, - matchAll: kEnumerableProperty, - add: kEnumerableProperty, - addAll: kEnumerableProperty, - put: kEnumerableProperty, - delete: kEnumerableProperty, - keys: kEnumerableProperty - }); - var 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 - }; - } - }); - - // - var require_cachestorage = __commonJS({ - ""(exports, module) { - "use strict"; - var { kConstruct } = require_symbols4(); - var { Cache } = require_cache(); - var { webidl } = require_webidl(); - var { kEnumerableProperty } = require_util(); - var _caches; - var _CacheStorage = class _CacheStorage { - constructor() { - /** - * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-name-to-cache-map - * @type {Map} - */ - has(_0) { - return __async(this, arguments, function* (cacheName) { - webidl.brandCheck(this, _CacheStorage); - const prefix = "CacheStorage.has"; - webidl.argumentLengthCheck(arguments, 1, prefix); - cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName"); - return __privateGet(this, _caches).has(cacheName); - }); - } - /** - * @see https://w3c.github.io/ServiceWorker/#dom-cachestorage-open - * @param {string} cacheName - * @returns {Promise} - */ - open(_0) { - return __async(this, arguments, function* (cacheName) { - webidl.brandCheck(this, _CacheStorage); - const prefix = "CacheStorage.open"; - webidl.argumentLengthCheck(arguments, 1, prefix); - cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName"); - if (__privateGet(this, _caches).has(cacheName)) { - const cache2 = __privateGet(this, _caches).get(cacheName); - return new Cache(kConstruct, cache2); - } - const cache = []; - __privateGet(this, _caches).set(cacheName, cache); - return new Cache(kConstruct, cache); - }); - } - /** - * @see https://w3c.github.io/ServiceWorker/#cache-storage-delete - * @param {string} cacheName - * @returns {Promise} - */ - delete(_0) { - return __async(this, arguments, function* (cacheName) { - webidl.brandCheck(this, _CacheStorage); - const prefix = "CacheStorage.delete"; - webidl.argumentLengthCheck(arguments, 1, prefix); - cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName"); - return __privateGet(this, _caches).delete(cacheName); - }); - } - /** - * @see https://w3c.github.io/ServiceWorker/#cache-storage-keys - * @returns {Promise} - */ - keys() { - return __async(this, null, function* () { - webidl.brandCheck(this, _CacheStorage); - const keys = __privateGet(this, _caches).keys(); - return [...keys]; - }); - } - }; - _caches = new WeakMap(); - var CacheStorage = _CacheStorage; - Object.defineProperties(CacheStorage.prototype, { - [Symbol.toStringTag]: { - value: "CacheStorage", - configurable: true - }, - match: kEnumerableProperty, - has: kEnumerableProperty, - open: kEnumerableProperty, - delete: kEnumerableProperty, - keys: kEnumerableProperty - }); - module.exports = { - CacheStorage - }; - } - }); - - // - var require_constants4 = __commonJS({ - ""(exports, module) { - "use strict"; - var maxAttributeValueSize = 1024; - var maxNameValuePairSize = 4096; - module.exports = { - maxAttributeValueSize, - maxNameValuePairSize - }; - } - }); - - // - var require_util6 = __commonJS({ - ""(exports, module) { - "use strict"; - function isCTLExcludingHtab(value) { - for (let i = 0; i < value.length; ++i) { - const code = value.charCodeAt(i); - if (code >= 0 && code <= 8 || code >= 10 && code <= 31 || code === 127) { - return true; - } - } - return false; - } - function validateCookieName(name) { - for (let i = 0; i < name.length; ++i) { - const code = name.charCodeAt(i); - if (code < 33 || // exclude CTLs (0-31), SP and HT - code > 126 || // exclude non-ascii and DEL - code === 34 || // " - code === 40 || // ( - code === 41 || // ) - code === 60 || // < - code === 62 || // > - code === 64 || // @ - code === 44 || // , - code === 59 || // ; - code === 58 || // : - code === 92 || // \ - code === 47 || // / - code === 91 || // [ - code === 93 || // ] - code === 63 || // ? - code === 61 || // = - code === 123 || // { - code === 125) { - throw new Error("Invalid cookie name"); - } - } - } - function validateCookieValue(value) { - let len = value.length; - let i = 0; - if (value[0] === '"') { - if (len === 1 || value[len - 1] !== '"') { - throw new Error("Invalid cookie value"); - } - --len; - ++i; - } - while (i < len) { - const code = value.charCodeAt(i++); - if (code < 33 || // exclude CTLs (0-31) - code > 126 || // non-ascii and DEL (127) - code === 34 || // " - code === 44 || // , - code === 59 || // ; - code === 92) { - throw new Error("Invalid cookie value"); - } - } - } - function validateCookiePath(path5) { - for (let i = 0; i < path5.length; ++i) { - const code = path5.charCodeAt(i); - if (code < 32 || // exclude CTLs (0-31) - code > 126 || // exclude DEL and non-ascii - code === 59) { - throw new Error("Invalid cookie path"); - } - } - } - function isLetterOrDigit(code) { - return code >= 48 && code <= 57 || // 0-9 - code >= 65 && code <= 90 || // A-Z - code >= 97 && code <= 122; - } - function validateCookieDomain(domain) { - if (domain === " ") { - return; - } - if (domain.length > 255) { - throw new Error("Invalid cookie domain"); - } - let labelLength = 0; - for (let i = 0; i < domain.length; ++i) { - const code = domain.charCodeAt(i); - if (code === 46) { - if (labelLength === 0) { - throw new Error("Invalid cookie domain"); - } - if (domain.charCodeAt(i - 1) === 45) { - throw new Error("Invalid cookie domain"); - } - labelLength = 0; - continue; - } - if (labelLength === 0 && !isLetterOrDigit(code)) { - throw new Error("Invalid cookie domain"); - } - if (!isLetterOrDigit(code) && code !== 45) { - throw new Error("Invalid cookie domain"); - } - if (++labelLength > 63) { - throw new Error("Invalid cookie domain"); - } - } - if (labelLength === 0 || domain.charCodeAt(domain.length - 1) === 45) { - throw new Error("Invalid cookie domain"); - } - } - var IMFDays = [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ]; - var IMFMonths = [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - ]; - var IMFPaddedNumbers = Array(61).fill(0).map((_, i) => i.toString().padStart(2, "0")); - function toIMFDate(date) { - if (typeof date === "number") { - date = new Date(date); - } - return `${IMFDays[date.getUTCDay()]}, ${IMFPaddedNumbers[date.getUTCDate()]} ${IMFMonths[date.getUTCMonth()]} ${date.getUTCFullYear()} ${IMFPaddedNumbers[date.getUTCHours()]}:${IMFPaddedNumbers[date.getUTCMinutes()]}:${IMFPaddedNumbers[date.getUTCSeconds()]} GMT`; - } - function validateCookieMaxAge(maxAge) { - if (maxAge < 0) { - throw new Error("Invalid cookie max-age"); - } - } - function stringify(cookie) { - if (cookie.name.length === 0) { - return null; - } - validateCookieName(cookie.name); - validateCookieValue(cookie.value); - const out = [`${cookie.name}=${cookie.value}`]; - 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("="); - const trimmedKey = key.trim(); - const joinedValue = value.join("="); - validateCookieName(trimmedKey); - validateCookieValue(joinedValue); - out.push(`${trimmedKey}=${joinedValue}`); - } - return out.join("; "); - } - module.exports = { - isCTLExcludingHtab, - validateCookieName, - validateCookiePath, - validateCookieValue, - toIMFDate, - stringify - }; - } - }); - - // - var require_parse = __commonJS({ - ""(exports, module) { - "use strict"; - var { maxNameValuePairSize, maxAttributeValueSize } = require_constants4(); - var { isCTLExcludingHtab } = require_util6(); - var { collectASequenceOfCodePointsFast } = require_data_url(); - var assert = __require("assert"); - function parseSetCookie(header) { - if (isCTLExcludingHtab(header)) { - return null; - } - let nameValuePair = ""; - let unparsedAttributes = ""; - let name = ""; - let value = ""; - if (header.includes(";")) { - const position = { position: 0 }; - nameValuePair = collectASequenceOfCodePointsFast(";", header, position); - unparsedAttributes = header.slice(position.position); - } else { - nameValuePair = header; - } - if (!nameValuePair.includes("=")) { - value = nameValuePair; - } else { - const position = { position: 0 }; - name = collectASequenceOfCodePointsFast( - "=", - nameValuePair, - position - ); - value = nameValuePair.slice(position.position + 1); - } - name = name.trim(); - value = value.trim(); - if (name.length + value.length > maxNameValuePairSize) { - return null; - } - return __spreadValues({ - name, - value - }, parseUnparsedAttributes(unparsedAttributes)); - } - function parseUnparsedAttributes(unparsedAttributes, cookieAttributeList = {}) { - var _a; - if (unparsedAttributes.length === 0) { - return cookieAttributeList; - } - assert(unparsedAttributes[0] === ";"); - unparsedAttributes = unparsedAttributes.slice(1); - let cookieAv = ""; - if (unparsedAttributes.includes(";")) { - cookieAv = collectASequenceOfCodePointsFast( - ";", - unparsedAttributes, - { position: 0 } - ); - unparsedAttributes = unparsedAttributes.slice(cookieAv.length); - } else { - cookieAv = unparsedAttributes; - unparsedAttributes = ""; - } - let attributeName = ""; - let attributeValue = ""; - if (cookieAv.includes("=")) { - const position = { position: 0 }; - attributeName = collectASequenceOfCodePointsFast( - "=", - cookieAv, - position - ); - attributeValue = cookieAv.slice(position.position + 1); - } else { - attributeName = cookieAv; - } - attributeName = attributeName.trim(); - attributeValue = attributeValue.trim(); - if (attributeValue.length > maxAttributeValueSize) { - return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); - } - const attributeNameLowercase = attributeName.toLowerCase(); - if (attributeNameLowercase === "expires") { - const expiryTime = new Date(attributeValue); - cookieAttributeList.expires = expiryTime; - } else if (attributeNameLowercase === "max-age") { - const charCode = attributeValue.charCodeAt(0); - if ((charCode < 48 || charCode > 57) && attributeValue[0] !== "-") { - return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); - } - if (!/^\d+$/.test(attributeValue)) { - return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); - } - const deltaSeconds = Number(attributeValue); - cookieAttributeList.maxAge = deltaSeconds; - } else if (attributeNameLowercase === "domain") { - let cookieDomain = attributeValue; - if (cookieDomain[0] === ".") { - cookieDomain = cookieDomain.slice(1); - } - cookieDomain = cookieDomain.toLowerCase(); - cookieAttributeList.domain = cookieDomain; - } else if (attributeNameLowercase === "path") { - let cookiePath = ""; - if (attributeValue.length === 0 || attributeValue[0] !== "/") { - cookiePath = "/"; - } else { - cookiePath = attributeValue; - } - cookieAttributeList.path = cookiePath; - } else if (attributeNameLowercase === "secure") { - cookieAttributeList.secure = true; - } else if (attributeNameLowercase === "httponly") { - cookieAttributeList.httpOnly = true; - } else if (attributeNameLowercase === "samesite") { - const attributeValueLowercase = attributeValue.toLowerCase(); - if (attributeValueLowercase === "none") { - cookieAttributeList.sameSite = "None"; - } else if (attributeValueLowercase === "strict") { - cookieAttributeList.sameSite = "Strict"; - } else if (attributeValueLowercase === "lax") { - cookieAttributeList.sameSite = "Lax"; - } - } else { - (_a = cookieAttributeList.unparsed) != null ? _a : cookieAttributeList.unparsed = []; - cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`); - } - return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); - } - module.exports = { - parseSetCookie, - parseUnparsedAttributes - }; - } - }); - - // - var require_cookies = __commonJS({ - ""(exports, module) { - "use strict"; - var { parseSetCookie } = require_parse(); - var { stringify } = require_util6(); - var { webidl } = require_webidl(); - var { Headers: Headers2 } = require_headers(); - function getCookies(headers) { - webidl.argumentLengthCheck(arguments, 1, "getCookies"); - webidl.brandCheck(headers, Headers2, { 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; - } - function deleteCookie(headers, name, attributes) { - webidl.brandCheck(headers, Headers2, { strict: false }); - const prefix = "deleteCookie"; - webidl.argumentLengthCheck(arguments, 2, prefix); - name = webidl.converters.DOMString(name, prefix, "name"); - attributes = webidl.converters.DeleteCookieAttributes(attributes); - setCookie(headers, __spreadValues({ - name, - value: "", - expires: /* @__PURE__ */ new Date(0) - }, attributes)); - } - function getSetCookies(headers) { - webidl.argumentLengthCheck(arguments, 1, "getSetCookies"); - webidl.brandCheck(headers, Headers2, { strict: false }); - const cookies = headers.getSetCookie(); - if (!cookies) { - return []; - } - return cookies.map((pair) => parseSetCookie(pair)); - } - function setCookie(headers, cookie) { - webidl.argumentLengthCheck(arguments, 2, "setCookie"); - webidl.brandCheck(headers, Headers2, { strict: false }); - cookie = webidl.converters.Cookie(cookie); - const str = stringify(cookie); - if (str) { - headers.append("Set-Cookie", str); - } - } - 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: () => new Array(0) - } - ]); - module.exports = { - getCookies, - deleteCookie, - getSetCookies, - setCookie - }; - } - }); - - // - var require_events = __commonJS({ - ""(exports, module) { - "use strict"; - var { webidl } = require_webidl(); - var { kEnumerableProperty } = require_util(); - var { kConstruct } = require_symbols(); - var { MessagePort } = __require("worker_threads"); - var _eventInit; - var _MessageEvent = class _MessageEvent extends Event { - constructor(type, eventInitDict = {}) { - var __super = (...args) => { - super(...args); - __privateAdd(this, _eventInit, void 0); - }; - if (type === kConstruct) { - __super(arguments[1], arguments[2]); - webidl.util.markAsUncloneable(this); - return; - } - const prefix = "MessageEvent constructor"; - webidl.argumentLengthCheck(arguments, 1, prefix); - type = webidl.converters.DOMString(type, prefix, "type"); - eventInitDict = webidl.converters.MessageEventInit(eventInitDict, prefix, "eventInitDict"); - __super(type, eventInitDict); - __privateSet(this, _eventInit, eventInitDict); - webidl.util.markAsUncloneable(this); - } - get data() { - webidl.brandCheck(this, _MessageEvent); - return __privateGet(this, _eventInit).data; - } - get origin() { - webidl.brandCheck(this, _MessageEvent); - return __privateGet(this, _eventInit).origin; - } - get lastEventId() { - webidl.brandCheck(this, _MessageEvent); - return __privateGet(this, _eventInit).lastEventId; - } - get source() { - webidl.brandCheck(this, _MessageEvent); - return __privateGet(this, _eventInit).source; - } - get ports() { - webidl.brandCheck(this, _MessageEvent); - if (!Object.isFrozen(__privateGet(this, _eventInit).ports)) { - Object.freeze(__privateGet(this, _eventInit).ports); - } - return __privateGet(this, _eventInit).ports; - } - initMessageEvent(type, bubbles = false, cancelable = false, data = null, origin = "", lastEventId = "", source = null, ports = []) { - webidl.brandCheck(this, _MessageEvent); - webidl.argumentLengthCheck(arguments, 1, "MessageEvent.initMessageEvent"); - return new _MessageEvent(type, { - bubbles, - cancelable, - data, - origin, - lastEventId, - source, - ports - }); - } - static createFastMessageEvent(type, init) { - var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j; - const messageEvent = new _MessageEvent(kConstruct, type, init); - __privateSet(messageEvent, _eventInit, init); - (_b = (_a = __privateGet(messageEvent, _eventInit)).data) != null ? _b : _a.data = null; - (_d = (_c = __privateGet(messageEvent, _eventInit)).origin) != null ? _d : _c.origin = ""; - (_f = (_e = __privateGet(messageEvent, _eventInit)).lastEventId) != null ? _f : _e.lastEventId = ""; - (_h = (_g = __privateGet(messageEvent, _eventInit)).source) != null ? _h : _g.source = null; - (_j = (_i = __privateGet(messageEvent, _eventInit)).ports) != null ? _j : _i.ports = []; - return messageEvent; - } - }; - _eventInit = new WeakMap(); - var MessageEvent = _MessageEvent; - var { createFastMessageEvent } = MessageEvent; - delete MessageEvent.createFastMessageEvent; - var _eventInit2; - var _CloseEvent = class _CloseEvent extends Event { - constructor(type, eventInitDict = {}) { - const prefix = "CloseEvent constructor"; - webidl.argumentLengthCheck(arguments, 1, prefix); - type = webidl.converters.DOMString(type, prefix, "type"); - eventInitDict = webidl.converters.CloseEventInit(eventInitDict); - super(type, eventInitDict); - __privateAdd(this, _eventInit2, void 0); - __privateSet(this, _eventInit2, eventInitDict); - webidl.util.markAsUncloneable(this); - } - get wasClean() { - webidl.brandCheck(this, _CloseEvent); - return __privateGet(this, _eventInit2).wasClean; - } - get code() { - webidl.brandCheck(this, _CloseEvent); - return __privateGet(this, _eventInit2).code; - } - get reason() { - webidl.brandCheck(this, _CloseEvent); - return __privateGet(this, _eventInit2).reason; - } - }; - _eventInit2 = new WeakMap(); - var CloseEvent = _CloseEvent; - var _eventInit3; - var _ErrorEvent = class _ErrorEvent extends Event { - constructor(type, eventInitDict) { - const prefix = "ErrorEvent constructor"; - webidl.argumentLengthCheck(arguments, 1, prefix); - super(type, eventInitDict); - __privateAdd(this, _eventInit3, void 0); - webidl.util.markAsUncloneable(this); - type = webidl.converters.DOMString(type, prefix, "type"); - eventInitDict = webidl.converters.ErrorEventInit(eventInitDict != null ? eventInitDict : {}); - __privateSet(this, _eventInit3, eventInitDict); - } - get message() { - webidl.brandCheck(this, _ErrorEvent); - return __privateGet(this, _eventInit3).message; - } - get filename() { - webidl.brandCheck(this, _ErrorEvent); - return __privateGet(this, _eventInit3).filename; - } - get lineno() { - webidl.brandCheck(this, _ErrorEvent); - return __privateGet(this, _eventInit3).lineno; - } - get colno() { - webidl.brandCheck(this, _ErrorEvent); - return __privateGet(this, _eventInit3).colno; - } - get error() { - webidl.brandCheck(this, _ErrorEvent); - return __privateGet(this, _eventInit3).error; - } - }; - _eventInit3 = new WeakMap(); - var ErrorEvent = _ErrorEvent; - 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 - ); - var 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"], - defaultValue: () => new Array(0) - } - ]); - 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, - createFastMessageEvent - }; - } - }); - - // - var require_constants5 = __commonJS({ - ""(exports, module) { - "use strict"; - var uid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; - var staticPropertyDescriptors = { - enumerable: true, - writable: false, - configurable: false - }; - var states = { - CONNECTING: 0, - OPEN: 1, - CLOSING: 2, - CLOSED: 3 - }; - var sentCloseFrameState = { - NOT_SENT: 0, - PROCESSING: 1, - SENT: 2 - }; - var opcodes = { - CONTINUATION: 0, - TEXT: 1, - BINARY: 2, - CLOSE: 8, - PING: 9, - PONG: 10 - }; - var maxUnsigned16Bit = __pow(2, 16) - 1; - var parserStates = { - INFO: 0, - PAYLOADLENGTH_16: 2, - PAYLOADLENGTH_64: 3, - READ_DATA: 4 - }; - var emptyBuffer = Buffer.allocUnsafe(0); - var sendHints = { - string: 1, - typedArray: 2, - arrayBuffer: 3, - blob: 4 - }; - module.exports = { - uid, - sentCloseFrameState, - staticPropertyDescriptors, - states, - opcodes, - maxUnsigned16Bit, - parserStates, - emptyBuffer, - sendHints - }; - } - }); - - // - var require_symbols5 = __commonJS({ - ""(exports, 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") - }; - } - }); - - // - var require_util7 = __commonJS({ - ""(exports, module) { - "use strict"; - var { kReadyState, kController, kResponse, kBinaryType, kWebSocketURL } = require_symbols5(); - var { states, opcodes } = require_constants5(); - var { ErrorEvent, createFastMessageEvent } = require_events(); - var { isUtf8 } = __require("buffer"); - var { collectASequenceOfCodePointsFast, removeHTTPWhitespace } = require_data_url(); - function isConnecting(ws) { - return ws[kReadyState] === states.CONNECTING; - } - function isEstablished(ws) { - return ws[kReadyState] === states.OPEN; - } - function isClosing(ws) { - return ws[kReadyState] === states.CLOSING; - } - function isClosed(ws) { - return ws[kReadyState] === states.CLOSED; - } - function fireEvent(e, target, eventFactory = (type, init) => new Event(type, init), eventInitDict = {}) { - const event = eventFactory(e, eventInitDict); - target.dispatchEvent(event); - } - function websocketMessageReceived(ws, type, data) { - if (ws[kReadyState] !== states.OPEN) { - return; - } - let dataForEvent; - if (type === opcodes.TEXT) { - try { - dataForEvent = utf8Decode(data); - } catch (e) { - failWebsocketConnection(ws, "Received invalid UTF-8 in text frame."); - return; - } - } else if (type === opcodes.BINARY) { - if (ws[kBinaryType] === "blob") { - dataForEvent = new Blob([data]); - } else { - dataForEvent = toArrayBuffer(data); - } - } - fireEvent("message", ws, createFastMessageEvent, { - origin: ws[kWebSocketURL].origin, - data: dataForEvent - }); - } - function toArrayBuffer(buffer) { - if (buffer.byteLength === buffer.buffer.byteLength) { - return buffer.buffer; - } - return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength); - } - function isValidSubprotocol(protocol) { - if (protocol.length === 0) { - return false; - } - for (let i = 0; i < protocol.length; ++i) { - const code = protocol.charCodeAt(i); - if (code < 33 || // CTL, contains SP (0x20) and HT (0x09) - code > 126 || code === 34 || // " - code === 40 || // ( - code === 41 || // ) - code === 44 || // , - code === 47 || // / - code === 58 || // : - code === 59 || // ; - code === 60 || // < - code === 61 || // = - code === 62 || // > - code === 63 || // ? - code === 64 || // @ - code === 91 || // [ - code === 92 || // \ - code === 93 || // ] - code === 123 || // { - code === 125) { - return false; - } - } - return true; - } - function isValidStatusCode(code) { - if (code >= 1e3 && code < 1015) { - return code !== 1004 && // reserved - code !== 1005 && // "MUST NOT be set as a status code" - code !== 1006; - } - return code >= 3e3 && code <= 4999; - } - function failWebsocketConnection(ws, reason) { - const { [kController]: controller, [kResponse]: response } = ws; - controller.abort(); - if ((response == null ? void 0 : response.socket) && !response.socket.destroyed) { - response.socket.destroy(); - } - if (reason) { - fireEvent("error", ws, (type, init) => new ErrorEvent(type, init), { - error: new Error(reason), - message: reason - }); - } - } - function isControlFrame(opcode) { - return opcode === opcodes.CLOSE || opcode === opcodes.PING || opcode === opcodes.PONG; - } - function isContinuationFrame(opcode) { - return opcode === opcodes.CONTINUATION; - } - function isTextBinaryFrame(opcode) { - return opcode === opcodes.TEXT || opcode === opcodes.BINARY; - } - function isValidOpcode(opcode) { - return isTextBinaryFrame(opcode) || isContinuationFrame(opcode) || isControlFrame(opcode); - } - function parseExtensions(extensions) { - const position = { position: 0 }; - const extensionList = /* @__PURE__ */ new Map(); - while (position.position < extensions.length) { - const pair = collectASequenceOfCodePointsFast(";", extensions, position); - const [name, value = ""] = pair.split("="); - extensionList.set( - removeHTTPWhitespace(name, true, false), - removeHTTPWhitespace(value, false, true) - ); - position.position++; - } - return extensionList; - } - function isValidClientWindowBits(value) { - if (value.length === 0) { - return false; - } - for (let i = 0; i < value.length; i++) { - const byte = value.charCodeAt(i); - if (byte < 48 || byte > 57) { - return false; - } - } - const num = Number.parseInt(value, 10); - return num >= 8 && num <= 15; - } - var hasIntl = typeof process.versions.icu === "string"; - var fatalDecoder = hasIntl ? new TextDecoder("utf-8", { fatal: true }) : void 0; - var utf8Decode = hasIntl ? fatalDecoder.decode.bind(fatalDecoder) : function(buffer) { - if (isUtf8(buffer)) { - return buffer.toString("utf-8"); - } - throw new TypeError("Invalid utf-8 received."); - }; - module.exports = { - isConnecting, - isEstablished, - isClosing, - isClosed, - fireEvent, - isValidSubprotocol, - isValidStatusCode, - failWebsocketConnection, - websocketMessageReceived, - utf8Decode, - isControlFrame, - isContinuationFrame, - isTextBinaryFrame, - isValidOpcode, - parseExtensions, - isValidClientWindowBits - }; - } - }); - - // - var require_frame = __commonJS({ - ""(exports, module) { - "use strict"; - var { maxUnsigned16Bit } = require_constants5(); - var BUFFER_SIZE = 16386; - var crypto2; - var buffer = null; - var bufIdx = BUFFER_SIZE; - try { - crypto2 = __require("crypto"); - } catch (e) { - crypto2 = { - // not full compatibility, but minimum. - randomFillSync: function randomFillSync(buffer2, _offset, _size) { - for (let i = 0; i < buffer2.length; ++i) { - buffer2[i] = Math.random() * 255 | 0; - } - return buffer2; - } - }; - } - function generateMask() { - if (bufIdx === BUFFER_SIZE) { - bufIdx = 0; - crypto2.randomFillSync(buffer != null ? buffer : buffer = Buffer.allocUnsafe(BUFFER_SIZE), 0, BUFFER_SIZE); - } - return [buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++]]; - } - var WebsocketFrameSend = class { - /** - * @param {Buffer|undefined} data - */ - constructor(data) { - this.frameData = data; - } - createFrame(opcode) { - var _a; - const frameData = this.frameData; - const maskKey = generateMask(); - const bodyLength = (_a = frameData == null ? void 0 : frameData.byteLength) != null ? _a : 0; - let payloadLength = bodyLength; - let offset = 6; - if (bodyLength > maxUnsigned16Bit) { - offset += 8; - payloadLength = 127; - } else if (bodyLength > 125) { - offset += 2; - payloadLength = 126; - } - const buffer2 = Buffer.allocUnsafe(bodyLength + offset); - buffer2[0] = buffer2[1] = 0; - buffer2[0] |= 128; - buffer2[0] = (buffer2[0] & 240) + opcode; - buffer2[offset - 4] = maskKey[0]; - buffer2[offset - 3] = maskKey[1]; - buffer2[offset - 2] = maskKey[2]; - buffer2[offset - 1] = maskKey[3]; - buffer2[1] = payloadLength; - if (payloadLength === 126) { - buffer2.writeUInt16BE(bodyLength, 2); - } else if (payloadLength === 127) { - buffer2[2] = buffer2[3] = 0; - buffer2.writeUIntBE(bodyLength, 4, 6); - } - buffer2[1] |= 128; - for (let i = 0; i < bodyLength; ++i) { - buffer2[offset + i] = frameData[i] ^ maskKey[i & 3]; - } - return buffer2; - } - }; - module.exports = { - WebsocketFrameSend - }; - } - }); - - // - var require_connection = __commonJS({ - ""(exports, module) { - "use strict"; - var { uid, states, sentCloseFrameState, emptyBuffer, opcodes } = require_constants5(); - var { - kReadyState, - kSentClose, - kByteParser, - kReceivedClose, - kResponse - } = require_symbols5(); - var { fireEvent, failWebsocketConnection, isClosing, isClosed, isEstablished, parseExtensions } = require_util7(); - var { channels } = require_diagnostics(); - var { CloseEvent } = require_events(); - var { makeRequest } = require_request2(); - var { fetching } = require_fetch(); - var { Headers: Headers2, getHeadersList } = require_headers(); - var { getDecodeSplit } = require_util2(); - var { WebsocketFrameSend } = require_frame(); - var crypto2; - try { - crypto2 = __require("crypto"); - } catch (e) { - } - function establishWebSocketConnection(url, protocols, client, ws, onEstablish, options) { - const requestURL = url; - requestURL.protocol = url.protocol === "ws:" ? "http:" : "https:"; - const request = makeRequest({ - urlList: [requestURL], - client, - serviceWorkers: "none", - referrer: "no-referrer", - mode: "websocket", - credentials: "include", - cache: "no-store", - redirect: "error" - }); - if (options.headers) { - const headersList = getHeadersList(new Headers2(options.headers)); - request.headersList = headersList; - } - const keyValue = crypto2.randomBytes(16).toString("base64"); - request.headersList.append("sec-websocket-key", keyValue); - request.headersList.append("sec-websocket-version", "13"); - for (const protocol of protocols) { - request.headersList.append("sec-websocket-protocol", protocol); - } - const permessageDeflate = "permessage-deflate; client_max_window_bits"; - request.headersList.append("sec-websocket-extensions", permessageDeflate); - const controller = fetching({ - request, - useParallelQueue: true, - dispatcher: options.dispatcher, - processResponse(response) { - var _a, _b; - if (response.type === "error" || response.status !== 101) { - failWebsocketConnection(ws, "Received network error or non-101 status code."); - return; - } - if (protocols.length !== 0 && !response.headersList.get("Sec-WebSocket-Protocol")) { - failWebsocketConnection(ws, "Server did not respond with sent protocols."); - return; - } - if (((_a = response.headersList.get("Upgrade")) == null ? void 0 : _a.toLowerCase()) !== "websocket") { - failWebsocketConnection(ws, 'Server did not set Upgrade header to "websocket".'); - return; - } - if (((_b = response.headersList.get("Connection")) == null ? void 0 : _b.toLowerCase()) !== "upgrade") { - failWebsocketConnection(ws, 'Server did not set Connection header to "upgrade".'); - return; - } - const secWSAccept = response.headersList.get("Sec-WebSocket-Accept"); - const digest = crypto2.createHash("sha1").update(keyValue + uid).digest("base64"); - if (secWSAccept !== digest) { - failWebsocketConnection(ws, "Incorrect hash received in Sec-WebSocket-Accept header."); - return; - } - const secExtension = response.headersList.get("Sec-WebSocket-Extensions"); - let extensions; - if (secExtension !== null) { - extensions = parseExtensions(secExtension); - if (!extensions.has("permessage-deflate")) { - failWebsocketConnection(ws, "Sec-WebSocket-Extensions header does not match."); - return; - } - } - const secProtocol = response.headersList.get("Sec-WebSocket-Protocol"); - if (secProtocol !== null) { - const requestProtocols = getDecodeSplit("sec-websocket-protocol", request.headersList); - if (!requestProtocols.includes(secProtocol)) { - 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, extensions); - } - }); - return controller; - } - function closeWebSocketConnection(ws, code, reason, reasonByteLength) { - if (isClosing(ws) || isClosed(ws)) { - } else if (!isEstablished(ws)) { - failWebsocketConnection(ws, "Connection was closed before it was established."); - ws[kReadyState] = states.CLOSING; - } else if (ws[kSentClose] === sentCloseFrameState.NOT_SENT) { - ws[kSentClose] = sentCloseFrameState.PROCESSING; - const frame = new WebsocketFrameSend(); - if (code !== void 0 && reason === void 0) { - frame.frameData = Buffer.allocUnsafe(2); - frame.frameData.writeUInt16BE(code, 0); - } else if (code !== void 0 && reason !== void 0) { - frame.frameData = Buffer.allocUnsafe(2 + reasonByteLength); - frame.frameData.writeUInt16BE(code, 0); - frame.frameData.write(reason, 2, "utf-8"); - } else { - frame.frameData = emptyBuffer; - } - const socket = ws[kResponse].socket; - socket.write(frame.createFrame(opcodes.CLOSE)); - ws[kSentClose] = sentCloseFrameState.SENT; - ws[kReadyState] = states.CLOSING; - } else { - ws[kReadyState] = states.CLOSING; - } - } - function onSocketData(chunk) { - if (!this.ws[kByteParser].write(chunk)) { - this.pause(); - } - } - function onSocketClose() { - var _a; - const { ws } = this; - const { [kResponse]: response } = ws; - response.socket.off("data", onSocketData); - response.socket.off("close", onSocketClose); - response.socket.off("error", onSocketError); - const wasClean = ws[kSentClose] === sentCloseFrameState.SENT && ws[kReceivedClose]; - let code = 1005; - let reason = ""; - const result = ws[kByteParser].closingInfo; - if (result && !result.error) { - code = (_a = result.code) != null ? _a : 1005; - reason = result.reason; - } else if (!ws[kReceivedClose]) { - code = 1006; - } - ws[kReadyState] = states.CLOSED; - fireEvent("close", ws, (type, init) => new CloseEvent(type, init), { - 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, - closeWebSocketConnection - }; - } - }); - - // - var require_permessage_deflate = __commonJS({ - ""(exports, module) { - "use strict"; - var { createInflateRaw, Z_DEFAULT_WINDOWBITS } = __require("zlib"); - var { isValidClientWindowBits } = require_util7(); - var { MessageSizeExceededError } = require_errors(); - var tail = Buffer.from([0, 0, 255, 255]); - var kBuffer = Symbol("kBuffer"); - var kLength = Symbol("kLength"); - var _inflate, _options, _maxPayloadSize; - var PerMessageDeflate = class { - /** - * @param {Map} extensions - */ - constructor(extensions, options) { - /** @type {import('node:zlib').InflateRaw} */ - __privateAdd(this, _inflate, void 0); - __privateAdd(this, _options, {}); - __privateAdd(this, _maxPayloadSize, 0); - __privateGet(this, _options).serverNoContextTakeover = extensions.has("server_no_context_takeover"); - __privateGet(this, _options).serverMaxWindowBits = extensions.get("server_max_window_bits"); - __privateSet(this, _maxPayloadSize, options.maxPayloadSize); - } - /** - * Decompress a compressed payload. - * @param {Buffer} chunk Compressed data - * @param {boolean} fin Final fragment flag - * @param {Function} callback Callback function - */ - decompress(chunk, fin, callback) { - if (!__privateGet(this, _inflate)) { - let windowBits = Z_DEFAULT_WINDOWBITS; - if (__privateGet(this, _options).serverMaxWindowBits) { - if (!isValidClientWindowBits(__privateGet(this, _options).serverMaxWindowBits)) { - callback(new Error("Invalid server_max_window_bits")); - return; - } - windowBits = Number.parseInt(__privateGet(this, _options).serverMaxWindowBits); - } - try { - __privateSet(this, _inflate, createInflateRaw({ windowBits })); - } catch (err) { - callback(err); - return; - } - __privateGet(this, _inflate)[kBuffer] = []; - __privateGet(this, _inflate)[kLength] = 0; - __privateGet(this, _inflate).on("data", (data) => { - __privateGet(this, _inflate)[kLength] += data.length; - if (__privateGet(this, _maxPayloadSize) > 0 && __privateGet(this, _inflate)[kLength] > __privateGet(this, _maxPayloadSize)) { - callback(new MessageSizeExceededError()); - __privateGet(this, _inflate).removeAllListeners(); - __privateSet(this, _inflate, null); - return; - } - __privateGet(this, _inflate)[kBuffer].push(data); - }); - __privateGet(this, _inflate).on("error", (err) => { - __privateSet(this, _inflate, null); - callback(err); - }); - } - __privateGet(this, _inflate).write(chunk); - if (fin) { - __privateGet(this, _inflate).write(tail); - } - __privateGet(this, _inflate).flush(() => { - if (!__privateGet(this, _inflate)) { - return; - } - const full = Buffer.concat(__privateGet(this, _inflate)[kBuffer], __privateGet(this, _inflate)[kLength]); - __privateGet(this, _inflate)[kBuffer].length = 0; - __privateGet(this, _inflate)[kLength] = 0; - callback(null, full); - }); - } - }; - _inflate = new WeakMap(); - _options = new WeakMap(); - _maxPayloadSize = new WeakMap(); - module.exports = { PerMessageDeflate }; - } - }); - - // - var require_receiver = __commonJS({ - ""(exports, module) { - "use strict"; - var { Writable } = __require("stream"); - var assert = __require("assert"); - var { parserStates, opcodes, states, emptyBuffer, sentCloseFrameState } = require_constants5(); - var { kReadyState, kSentClose, kResponse, kReceivedClose } = require_symbols5(); - var { channels } = require_diagnostics(); - var { - isValidStatusCode, - isValidOpcode, - failWebsocketConnection, - websocketMessageReceived, - utf8Decode, - isControlFrame, - isTextBinaryFrame, - isContinuationFrame - } = require_util7(); - var { WebsocketFrameSend } = require_frame(); - var { closeWebSocketConnection } = require_connection(); - var { PerMessageDeflate } = require_permessage_deflate(); - var { MessageSizeExceededError } = require_errors(); - function failWebsocketConnectionWithCode(ws, code, reason) { - closeWebSocketConnection(ws, code, reason, Buffer.byteLength(reason)); - failWebsocketConnection(ws, reason); - } - var _buffers, _fragmentsBytes, _byteOffset, _loop, _state, _info, _fragments, _extensions, _maxFragments, _maxPayloadSize, _validatePayloadLength, validatePayloadLength_fn; - var ByteParser = class extends Writable { - /** - * @param {import('./websocket').WebSocket} ws - * @param {Map|null} extensions - * @param {{ maxFragments?: number, maxPayloadSize?: number }} [options] - */ - constructor(ws, extensions, options = {}) { - var _a, _b; - super(); - __privateAdd(this, _validatePayloadLength); - __privateAdd(this, _buffers, []); - __privateAdd(this, _fragmentsBytes, 0); - __privateAdd(this, _byteOffset, 0); - __privateAdd(this, _loop, false); - __privateAdd(this, _state, parserStates.INFO); - __privateAdd(this, _info, {}); - __privateAdd(this, _fragments, []); - /** @type {Map} */ - __privateAdd(this, _extensions, void 0); - /** @type {number} */ - __privateAdd(this, _maxFragments, void 0); - /** @type {number} */ - __privateAdd(this, _maxPayloadSize, void 0); - this.ws = ws; - __privateSet(this, _extensions, extensions == null ? /* @__PURE__ */ new Map() : extensions); - __privateSet(this, _maxFragments, (_a = options.maxFragments) != null ? _a : 0); - __privateSet(this, _maxPayloadSize, (_b = options.maxPayloadSize) != null ? _b : 0); - if (__privateGet(this, _extensions).has("permessage-deflate")) { - __privateGet(this, _extensions).set("permessage-deflate", new PerMessageDeflate(extensions, options)); - } - } - /** - * @param {Buffer} chunk - * @param {() => void} callback - */ - _write(chunk, _, callback) { - __privateGet(this, _buffers).push(chunk); - __privateSet(this, _byteOffset, __privateGet(this, _byteOffset) + chunk.length); - __privateSet(this, _loop, true); - 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 (__privateGet(this, _loop)) { - if (__privateGet(this, _state) === parserStates.INFO) { - if (__privateGet(this, _byteOffset) < 2) { - return callback(); - } - const buffer = this.consume(2); - const fin = (buffer[0] & 128) !== 0; - const opcode = buffer[0] & 15; - const masked = (buffer[1] & 128) === 128; - const fragmented = !fin && opcode !== opcodes.CONTINUATION; - const payloadLength = buffer[1] & 127; - const rsv1 = buffer[0] & 64; - const rsv2 = buffer[0] & 32; - const rsv3 = buffer[0] & 16; - if (!isValidOpcode(opcode)) { - failWebsocketConnection(this.ws, "Invalid opcode received"); - return callback(); - } - if (masked) { - failWebsocketConnection(this.ws, "Frame cannot be masked"); - return callback(); - } - if (rsv1 !== 0 && !__privateGet(this, _extensions).has("permessage-deflate")) { - failWebsocketConnection(this.ws, "Expected RSV1 to be clear."); - return; - } - if (rsv2 !== 0 || rsv3 !== 0) { - failWebsocketConnection(this.ws, "RSV1, RSV2, RSV3 must be clear"); - return; - } - if (fragmented && !isTextBinaryFrame(opcode)) { - failWebsocketConnection(this.ws, "Invalid frame type was fragmented."); - return; - } - if (isTextBinaryFrame(opcode) && __privateGet(this, _fragments).length > 0) { - failWebsocketConnection(this.ws, "Expected continuation frame"); - return; - } - if (__privateGet(this, _info).fragmented && fragmented) { - failWebsocketConnection(this.ws, "Fragmented frame exceeded 125 bytes."); - return; - } - if ((payloadLength > 125 || fragmented) && isControlFrame(opcode)) { - failWebsocketConnection(this.ws, "Control frame either too large or fragmented"); - return; - } - if (isContinuationFrame(opcode) && __privateGet(this, _fragments).length === 0 && !__privateGet(this, _info).compressed) { - failWebsocketConnection(this.ws, "Unexpected continuation frame"); - return; - } - if (payloadLength <= 125) { - __privateGet(this, _info).payloadLength = payloadLength; - __privateSet(this, _state, parserStates.READ_DATA); - if (!__privateMethod(this, _validatePayloadLength, validatePayloadLength_fn).call(this)) { - return; - } - } else if (payloadLength === 126) { - __privateSet(this, _state, parserStates.PAYLOADLENGTH_16); - } else if (payloadLength === 127) { - __privateSet(this, _state, parserStates.PAYLOADLENGTH_64); - } - if (isTextBinaryFrame(opcode)) { - __privateGet(this, _info).binaryType = opcode; - __privateGet(this, _info).compressed = rsv1 !== 0; - } - __privateGet(this, _info).opcode = opcode; - __privateGet(this, _info).masked = masked; - __privateGet(this, _info).fin = fin; - __privateGet(this, _info).fragmented = fragmented; - } else if (__privateGet(this, _state) === parserStates.PAYLOADLENGTH_16) { - if (__privateGet(this, _byteOffset) < 2) { - return callback(); - } - const buffer = this.consume(2); - __privateGet(this, _info).payloadLength = buffer.readUInt16BE(0); - __privateSet(this, _state, parserStates.READ_DATA); - if (!__privateMethod(this, _validatePayloadLength, validatePayloadLength_fn).call(this)) { - return; - } - } else if (__privateGet(this, _state) === parserStates.PAYLOADLENGTH_64) { - if (__privateGet(this, _byteOffset) < 8) { - return callback(); - } - const buffer = this.consume(8); - const upper = buffer.readUInt32BE(0); - const lower = buffer.readUInt32BE(4); - if (upper !== 0 || lower > __pow(2, 31) - 1) { - failWebsocketConnection(this.ws, "Received payload length > 2^31 bytes."); - return; - } - __privateGet(this, _info).payloadLength = lower; - __privateSet(this, _state, parserStates.READ_DATA); - if (!__privateMethod(this, _validatePayloadLength, validatePayloadLength_fn).call(this)) { - return; - } - } else if (__privateGet(this, _state) === parserStates.READ_DATA) { - if (__privateGet(this, _byteOffset) < __privateGet(this, _info).payloadLength) { - return callback(); - } - const body = this.consume(__privateGet(this, _info).payloadLength); - if (isControlFrame(__privateGet(this, _info).opcode)) { - __privateSet(this, _loop, this.parseControlFrame(body)); - __privateSet(this, _state, parserStates.INFO); - } else { - if (!__privateGet(this, _info).compressed) { - if (!this.writeFragments(body)) { - return; - } - if (__privateGet(this, _maxPayloadSize) > 0 && __privateGet(this, _fragmentsBytes) > __privateGet(this, _maxPayloadSize)) { - failWebsocketConnectionWithCode(this.ws, 1009, new MessageSizeExceededError().message); - return; - } - if (!__privateGet(this, _info).fragmented && __privateGet(this, _info).fin) { - websocketMessageReceived(this.ws, __privateGet(this, _info).binaryType, this.consumeFragments()); - } - __privateSet(this, _state, parserStates.INFO); - } else { - __privateGet(this, _extensions).get("permessage-deflate").decompress( - body, - __privateGet(this, _info).fin, - (error, data) => { - if (error) { - const code = error instanceof MessageSizeExceededError ? 1009 : 1007; - failWebsocketConnectionWithCode(this.ws, code, error.message); - return; - } - if (!this.writeFragments(data)) { - return; - } - if (__privateGet(this, _maxPayloadSize) > 0 && __privateGet(this, _fragmentsBytes) > __privateGet(this, _maxPayloadSize)) { - failWebsocketConnectionWithCode(this.ws, 1009, new MessageSizeExceededError().message); - return; - } - if (!__privateGet(this, _info).fin) { - __privateSet(this, _state, parserStates.INFO); - __privateSet(this, _loop, true); - this.run(callback); - return; - } - websocketMessageReceived(this.ws, __privateGet(this, _info).binaryType, this.consumeFragments()); - __privateSet(this, _loop, true); - __privateSet(this, _state, parserStates.INFO); - this.run(callback); - } - ); - __privateSet(this, _loop, false); - break; - } - } - } - } - } - /** - * Take n bytes from the buffered Buffers - * @param {number} n - * @returns {Buffer} - */ - consume(n) { - if (n > __privateGet(this, _byteOffset)) { - throw new Error("Called consume() before buffers satiated."); - } else if (n === 0) { - return emptyBuffer; - } - if (__privateGet(this, _buffers)[0].length === n) { - __privateSet(this, _byteOffset, __privateGet(this, _byteOffset) - __privateGet(this, _buffers)[0].length); - return __privateGet(this, _buffers).shift(); - } - const buffer = Buffer.allocUnsafe(n); - let offset = 0; - while (offset !== n) { - const next = __privateGet(this, _buffers)[0]; - const { length } = next; - if (length + offset === n) { - buffer.set(__privateGet(this, _buffers).shift(), offset); - break; - } else if (length + offset > n) { - buffer.set(next.subarray(0, n - offset), offset); - __privateGet(this, _buffers)[0] = next.subarray(n - offset); - break; - } else { - buffer.set(__privateGet(this, _buffers).shift(), offset); - offset += next.length; - } - } - __privateSet(this, _byteOffset, __privateGet(this, _byteOffset) - n); - return buffer; - } - writeFragments(fragment) { - if (__privateGet(this, _maxFragments) > 0 && __privateGet(this, _fragments).length === __privateGet(this, _maxFragments)) { - failWebsocketConnectionWithCode(this.ws, 1008, "Too many message fragments"); - return false; - } - __privateSet(this, _fragmentsBytes, __privateGet(this, _fragmentsBytes) + fragment.length); - __privateGet(this, _fragments).push(fragment); - return true; - } - consumeFragments() { - const fragments = __privateGet(this, _fragments); - if (fragments.length === 1) { - __privateSet(this, _fragmentsBytes, 0); - return fragments.shift(); - } - const output = Buffer.concat(fragments, __privateGet(this, _fragmentsBytes)); - __privateSet(this, _fragments, []); - __privateSet(this, _fragmentsBytes, 0); - return output; - } - parseCloseBody(data) { - assert(data.length !== 1); - let code; - if (data.length >= 2) { - code = data.readUInt16BE(0); - } - if (code !== void 0 && !isValidStatusCode(code)) { - return { code: 1002, reason: "Invalid status code", error: true }; - } - let reason = data.subarray(2); - if (reason[0] === 239 && reason[1] === 187 && reason[2] === 191) { - reason = reason.subarray(3); - } - try { - reason = utf8Decode(reason); - } catch (e) { - return { code: 1007, reason: "Invalid UTF-8", error: true }; - } - return { code, reason, error: false }; - } - /** - * Parses control frames. - * @param {Buffer} body - */ - parseControlFrame(body) { - const { opcode, payloadLength } = __privateGet(this, _info); - if (opcode === opcodes.CLOSE) { - if (payloadLength === 1) { - failWebsocketConnection(this.ws, "Received close frame with a 1-byte body."); - return false; - } - __privateGet(this, _info).closeInfo = this.parseCloseBody(body); - if (__privateGet(this, _info).closeInfo.error) { - const { code, reason } = __privateGet(this, _info).closeInfo; - closeWebSocketConnection(this.ws, code, reason, reason.length); - failWebsocketConnection(this.ws, reason); - return false; - } - if (this.ws[kSentClose] !== sentCloseFrameState.SENT) { - let body2 = emptyBuffer; - if (__privateGet(this, _info).closeInfo.code) { - body2 = Buffer.allocUnsafe(2); - body2.writeUInt16BE(__privateGet(this, _info).closeInfo.code, 0); - } - const closeFrame = new WebsocketFrameSend(body2); - this.ws[kResponse].socket.write( - closeFrame.createFrame(opcodes.CLOSE), - (err) => { - if (!err) { - this.ws[kSentClose] = sentCloseFrameState.SENT; - } - } - ); - } - this.ws[kReadyState] = states.CLOSING; - this.ws[kReceivedClose] = true; - return false; - } else if (opcode === opcodes.PING) { - 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 - }); - } - } - } else if (opcode === opcodes.PONG) { - if (channels.pong.hasSubscribers) { - channels.pong.publish({ - payload: body - }); - } - } - return true; - } - get closingInfo() { - return __privateGet(this, _info).closeInfo; - } - }; - _buffers = new WeakMap(); - _fragmentsBytes = new WeakMap(); - _byteOffset = new WeakMap(); - _loop = new WeakMap(); - _state = new WeakMap(); - _info = new WeakMap(); - _fragments = new WeakMap(); - _extensions = new WeakMap(); - _maxFragments = new WeakMap(); - _maxPayloadSize = new WeakMap(); - _validatePayloadLength = new WeakSet(); - validatePayloadLength_fn = function() { - if (__privateGet(this, _maxPayloadSize) > 0 && !isControlFrame(__privateGet(this, _info).opcode) && __privateGet(this, _info).payloadLength + __privateGet(this, _fragmentsBytes) > __privateGet(this, _maxPayloadSize)) { - failWebsocketConnectionWithCode(this.ws, 1009, "Payload size exceeds maximum allowed size"); - return false; - } - return true; - }; - module.exports = { - ByteParser - }; - } - }); - - // - var require_sender = __commonJS({ - ""(exports, module) { - "use strict"; - var { WebsocketFrameSend } = require_frame(); - var { opcodes, sendHints } = require_constants5(); - var FixedQueue = require_fixed_queue(); - var FastBuffer = Buffer[Symbol.species]; - var _queue, _running, _socket, _run, run_fn; - var SendQueue = class { - constructor(socket) { - __privateAdd(this, _run); - /** - * @type {FixedQueue} - */ - __privateAdd(this, _queue, new FixedQueue()); - /** - * @type {boolean} - */ - __privateAdd(this, _running, false); - /** @type {import('node:net').Socket} */ - __privateAdd(this, _socket, void 0); - __privateSet(this, _socket, socket); - } - add(item, cb, hint) { - if (hint !== sendHints.blob) { - const frame = createFrame(item, hint); - if (!__privateGet(this, _running)) { - __privateGet(this, _socket).write(frame, cb); - } else { - const node2 = { - promise: null, - callback: cb, - frame - }; - __privateGet(this, _queue).push(node2); - } - return; - } - const node = { - promise: item.arrayBuffer().then((ab) => { - node.promise = null; - node.frame = createFrame(ab, hint); - }), - callback: cb, - frame: null - }; - __privateGet(this, _queue).push(node); - if (!__privateGet(this, _running)) { - __privateMethod(this, _run, run_fn).call(this); - } - } - }; - _queue = new WeakMap(); - _running = new WeakMap(); - _socket = new WeakMap(); - _run = new WeakSet(); - run_fn = function() { - return __async(this, null, function* () { - __privateSet(this, _running, true); - const queue = __privateGet(this, _queue); - while (!queue.isEmpty()) { - const node = queue.shift(); - if (node.promise !== null) { - yield node.promise; - } - __privateGet(this, _socket).write(node.frame, node.callback); - node.callback = node.frame = null; - } - __privateSet(this, _running, false); - }); - }; - function createFrame(data, hint) { - return new WebsocketFrameSend(toBuffer(data, hint)).createFrame(hint === sendHints.string ? opcodes.TEXT : opcodes.BINARY); - } - function toBuffer(data, hint) { - switch (hint) { - case sendHints.string: - return Buffer.from(data); - case sendHints.arrayBuffer: - case sendHints.blob: - return new FastBuffer(data); - case sendHints.typedArray: - return new FastBuffer(data.buffer, data.byteOffset, data.byteLength); - } - } - module.exports = { SendQueue }; - } - }); - - // - var require_websocket = __commonJS({ - ""(exports, module) { - "use strict"; - var { webidl } = require_webidl(); - var { URLSerializer } = require_data_url(); - var { environmentSettingsObject } = require_util2(); - var { staticPropertyDescriptors, states, sentCloseFrameState, sendHints } = require_constants5(); - var { - kWebSocketURL, - kReadyState, - kController, - kBinaryType, - kResponse, - kSentClose, - kByteParser - } = require_symbols5(); - var { - isConnecting, - isEstablished, - isClosing, - isValidSubprotocol, - fireEvent - } = require_util7(); - var { establishWebSocketConnection, closeWebSocketConnection } = require_connection(); - var { ByteParser } = require_receiver(); - var { kEnumerableProperty, isBlobLike } = require_util(); - var { getGlobalDispatcher } = require_global2(); - var { types } = __require("util"); - var { ErrorEvent, CloseEvent } = require_events(); - var { SendQueue } = require_sender(); - var _events, _bufferedAmount, _protocol, _extensions, _sendQueue, _onConnectionEstablished, onConnectionEstablished_fn; - var _WebSocket = class _WebSocket extends EventTarget { - /** - * @param {string} url - * @param {string|string[]} protocols - */ - constructor(url, protocols = []) { - super(); - /** - * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol - */ - __privateAdd(this, _onConnectionEstablished); - __privateAdd(this, _events, { - open: null, - error: null, - close: null, - message: null - }); - __privateAdd(this, _bufferedAmount, 0); - __privateAdd(this, _protocol, ""); - __privateAdd(this, _extensions, ""); - /** @type {SendQueue} */ - __privateAdd(this, _sendQueue, void 0); - webidl.util.markAsUncloneable(this); - const prefix = "WebSocket constructor"; - webidl.argumentLengthCheck(arguments, 1, prefix); - const options = webidl.converters["DOMString or sequence or WebSocketInit"](protocols, prefix, "options"); - url = webidl.converters.USVString(url, prefix, "url"); - protocols = options.protocols; - const baseURL = environmentSettingsObject.settingsObject.baseUrl; - let urlRecord; - try { - urlRecord = new URL(url, baseURL); - } catch (e) { - throw new DOMException(e, "SyntaxError"); - } - if (urlRecord.protocol === "http:") { - urlRecord.protocol = "ws:"; - } else if (urlRecord.protocol === "https:") { - urlRecord.protocol = "wss:"; - } - if (urlRecord.protocol !== "ws:" && urlRecord.protocol !== "wss:") { - throw new DOMException( - `Expected a ws: or wss: protocol, got ${urlRecord.protocol}`, - "SyntaxError" - ); - } - if (urlRecord.hash || urlRecord.href.endsWith("#")) { - throw new DOMException("Got fragment", "SyntaxError"); - } - if (typeof protocols === "string") { - protocols = [protocols]; - } - 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"); - } - this[kWebSocketURL] = new URL(urlRecord.href); - const client = environmentSettingsObject.settingsObject; - this[kController] = establishWebSocketConnection( - urlRecord, - protocols, - client, - this, - (response, extensions) => __privateMethod(this, _onConnectionEstablished, onConnectionEstablished_fn).call(this, response, extensions), - options - ); - this[kReadyState] = _WebSocket.CONNECTING; - this[kSentClose] = sentCloseFrameState.NOT_SENT; - this[kBinaryType] = "blob"; - } - /** - * @see https://websockets.spec.whatwg.org/#dom-websocket-close - * @param {number|undefined} code - * @param {string|undefined} reason - */ - close(code = void 0, reason = void 0) { - webidl.brandCheck(this, _WebSocket); - const prefix = "WebSocket.close"; - if (code !== void 0) { - code = webidl.converters["unsigned short"](code, prefix, "code", { clamp: true }); - } - if (reason !== void 0) { - reason = webidl.converters.USVString(reason, prefix, "reason"); - } - if (code !== void 0) { - if (code !== 1e3 && (code < 3e3 || code > 4999)) { - throw new DOMException("invalid code", "InvalidAccessError"); - } - } - let reasonByteLength = 0; - if (reason !== void 0) { - reasonByteLength = Buffer.byteLength(reason); - if (reasonByteLength > 123) { - throw new DOMException( - `Reason must be less than 123 bytes; received ${reasonByteLength}`, - "SyntaxError" - ); - } - } - closeWebSocketConnection(this, code, reason, reasonByteLength); - } - /** - * @see https://websockets.spec.whatwg.org/#dom-websocket-send - * @param {NodeJS.TypedArray|ArrayBuffer|Blob|string} data - */ - send(data) { - webidl.brandCheck(this, _WebSocket); - const prefix = "WebSocket.send"; - webidl.argumentLengthCheck(arguments, 1, prefix); - data = webidl.converters.WebSocketSendData(data, prefix, "data"); - if (isConnecting(this)) { - throw new DOMException("Sent before connected.", "InvalidStateError"); - } - if (!isEstablished(this) || isClosing(this)) { - return; - } - if (typeof data === "string") { - const length = Buffer.byteLength(data); - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) + length); - __privateGet(this, _sendQueue).add(data, () => { - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) - length); - }, sendHints.string); - } else if (types.isArrayBuffer(data)) { - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) + data.byteLength); - __privateGet(this, _sendQueue).add(data, () => { - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) - data.byteLength); - }, sendHints.arrayBuffer); - } else if (ArrayBuffer.isView(data)) { - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) + data.byteLength); - __privateGet(this, _sendQueue).add(data, () => { - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) - data.byteLength); - }, sendHints.typedArray); - } else if (isBlobLike(data)) { - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) + data.size); - __privateGet(this, _sendQueue).add(data, () => { - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) - data.size); - }, sendHints.blob); - } - } - get readyState() { - webidl.brandCheck(this, _WebSocket); - return this[kReadyState]; - } - get bufferedAmount() { - webidl.brandCheck(this, _WebSocket); - return __privateGet(this, _bufferedAmount); - } - get url() { - webidl.brandCheck(this, _WebSocket); - return URLSerializer(this[kWebSocketURL]); - } - get extensions() { - webidl.brandCheck(this, _WebSocket); - return __privateGet(this, _extensions); - } - get protocol() { - webidl.brandCheck(this, _WebSocket); - return __privateGet(this, _protocol); - } - get onopen() { - webidl.brandCheck(this, _WebSocket); - return __privateGet(this, _events).open; - } - set onopen(fn) { - webidl.brandCheck(this, _WebSocket); - if (__privateGet(this, _events).open) { - this.removeEventListener("open", __privateGet(this, _events).open); - } - if (typeof fn === "function") { - __privateGet(this, _events).open = fn; - this.addEventListener("open", fn); - } else { - __privateGet(this, _events).open = null; - } - } - get onerror() { - webidl.brandCheck(this, _WebSocket); - return __privateGet(this, _events).error; - } - set onerror(fn) { - webidl.brandCheck(this, _WebSocket); - if (__privateGet(this, _events).error) { - this.removeEventListener("error", __privateGet(this, _events).error); - } - if (typeof fn === "function") { - __privateGet(this, _events).error = fn; - this.addEventListener("error", fn); - } else { - __privateGet(this, _events).error = null; - } - } - get onclose() { - webidl.brandCheck(this, _WebSocket); - return __privateGet(this, _events).close; - } - set onclose(fn) { - webidl.brandCheck(this, _WebSocket); - if (__privateGet(this, _events).close) { - this.removeEventListener("close", __privateGet(this, _events).close); - } - if (typeof fn === "function") { - __privateGet(this, _events).close = fn; - this.addEventListener("close", fn); - } else { - __privateGet(this, _events).close = null; - } - } - get onmessage() { - webidl.brandCheck(this, _WebSocket); - return __privateGet(this, _events).message; - } - set onmessage(fn) { - webidl.brandCheck(this, _WebSocket); - if (__privateGet(this, _events).message) { - this.removeEventListener("message", __privateGet(this, _events).message); - } - if (typeof fn === "function") { - __privateGet(this, _events).message = fn; - this.addEventListener("message", fn); - } else { - __privateGet(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; - } - } - }; - _events = new WeakMap(); - _bufferedAmount = new WeakMap(); - _protocol = new WeakMap(); - _extensions = new WeakMap(); - _sendQueue = new WeakMap(); - _onConnectionEstablished = new WeakSet(); - onConnectionEstablished_fn = function(response, parsedExtensions) { - var _a, _b; - this[kResponse] = response; - const webSocketOptions = (_b = (_a = this[kController]) == null ? void 0 : _a.dispatcher) == null ? void 0 : _b.webSocketOptions; - const maxFragments = webSocketOptions == null ? void 0 : webSocketOptions.maxFragments; - const maxPayloadSize = webSocketOptions == null ? void 0 : webSocketOptions.maxPayloadSize; - const parser = new ByteParser(this, parsedExtensions, { - maxFragments, - maxPayloadSize - }); - parser.on("drain", onParserDrain); - parser.on("error", onParserError.bind(this)); - response.socket.ws = this; - this[kByteParser] = parser; - __privateSet(this, _sendQueue, new SendQueue(response.socket)); - this[kReadyState] = states.OPEN; - const extensions = response.headersList.get("sec-websocket-extensions"); - if (extensions !== null) { - __privateSet(this, _extensions, extensions); - } - const protocol = response.headersList.get("sec-websocket-protocol"); - if (protocol !== null) { - __privateSet(this, _protocol, protocol); - } - fireEvent("open", this); - }; - var WebSocket = _WebSocket; - WebSocket.CONNECTING = WebSocket.prototype.CONNECTING = states.CONNECTING; - WebSocket.OPEN = WebSocket.prototype.OPEN = states.OPEN; - WebSocket.CLOSING = WebSocket.prototype.CLOSING = states.CLOSING; - 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, prefix, argument) { - if (webidl.util.Type(V) === "Object" && Symbol.iterator in V) { - return webidl.converters["sequence"](V); - } - return webidl.converters.DOMString(V, prefix, argument); - }; - webidl.converters.WebSocketInit = webidl.dictionaryConverter([ - { - key: "protocols", - converter: webidl.converters["DOMString or sequence"], - defaultValue: () => new Array(0) - }, - { - key: "dispatcher", - converter: webidl.converters.any, - defaultValue: () => 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.isArrayBuffer(V)) { - return webidl.converters.BufferSource(V); - } - } - return webidl.converters.USVString(V); - }; - function onParserDrain() { - this.ws[kResponse].socket.resume(); - } - function onParserError(err) { - let message; - let code; - if (err instanceof CloseEvent) { - message = err.reason; - code = err.code; - } else { - message = err.message; - } - fireEvent("error", this, () => new ErrorEvent("error", { error: err, message })); - closeWebSocketConnection(this, code); - } - module.exports = { - WebSocket - }; - } - }); - - // - var require_util8 = __commonJS({ - ""(exports, module) { - "use strict"; - function isValidLastEventId(value) { - return value.indexOf("\0") === -1; - } - function isASCIINumber(value) { - if (value.length === 0) - return false; - for (let i = 0; i < value.length; i++) { - if (value.charCodeAt(i) < 48 || value.charCodeAt(i) > 57) - return false; - } - return true; - } - function delay(ms) { - return new Promise((resolve2) => { - setTimeout(resolve2, ms).unref(); - }); - } - module.exports = { - isValidLastEventId, - isASCIINumber, - delay - }; - } - }); - - // - var require_eventsource_stream = __commonJS({ - ""(exports, module) { - "use strict"; - var { Transform } = __require("stream"); - var { isASCIINumber, isValidLastEventId } = require_util8(); - var BOM = [239, 187, 191]; - var LF = 10; - var CR = 13; - var COLON = 58; - var SPACE = 32; - var EventSourceStream = class extends Transform { - /** - * @param {object} options - * @param {eventSourceSettings} options.eventSourceSettings - * @param {Function} [options.push] - */ - constructor(options = {}) { - options.readableObjectMode = true; - super(options); - /** - * @type {eventSourceSettings} - */ - __publicField(this, "state", null); - /** - * Leading byte-order-mark check. - * @type {boolean} - */ - __publicField(this, "checkBOM", true); - /** - * @type {boolean} - */ - __publicField(this, "crlfCheck", false); - /** - * @type {boolean} - */ - __publicField(this, "eventEndCheck", false); - /** - * @type {Buffer} - */ - __publicField(this, "buffer", null); - __publicField(this, "pos", 0); - __publicField(this, "event", { - data: void 0, - event: void 0, - id: void 0, - retry: void 0 - }); - this.state = options.eventSourceSettings || {}; - if (options.push) { - this.push = options.push; - } - } - /** - * @param {Buffer} chunk - * @param {string} _encoding - * @param {Function} callback - * @returns {void} - */ - _transform(chunk, _encoding, callback) { - if (chunk.length === 0) { - callback(); - return; - } - if (this.buffer) { - this.buffer = Buffer.concat([this.buffer, chunk]); - } else { - this.buffer = chunk; - } - if (this.checkBOM) { - switch (this.buffer.length) { - case 1: - if (this.buffer[0] === BOM[0]) { - callback(); - return; - } - this.checkBOM = false; - callback(); - return; - case 2: - if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1]) { - callback(); - return; - } - this.checkBOM = false; - break; - case 3: - if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1] && this.buffer[2] === BOM[2]) { - this.buffer = Buffer.alloc(0); - this.checkBOM = false; - callback(); - return; - } - this.checkBOM = false; - break; - default: - if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1] && this.buffer[2] === BOM[2]) { - this.buffer = this.buffer.subarray(3); - } - this.checkBOM = false; - break; - } - } - while (this.pos < this.buffer.length) { - if (this.eventEndCheck) { - if (this.crlfCheck) { - if (this.buffer[this.pos] === LF) { - this.buffer = this.buffer.subarray(this.pos + 1); - this.pos = 0; - this.crlfCheck = false; - continue; - } - this.crlfCheck = false; - } - if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) { - if (this.buffer[this.pos] === CR) { - this.crlfCheck = true; - } - this.buffer = this.buffer.subarray(this.pos + 1); - this.pos = 0; - if (this.event.data !== void 0 || this.event.event || this.event.id || this.event.retry) { - this.processEvent(this.event); - } - this.clearEvent(); - continue; - } - this.eventEndCheck = false; - continue; - } - if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) { - if (this.buffer[this.pos] === CR) { - this.crlfCheck = true; - } - this.parseLine(this.buffer.subarray(0, this.pos), this.event); - this.buffer = this.buffer.subarray(this.pos + 1); - this.pos = 0; - this.eventEndCheck = true; - continue; - } - this.pos++; - } - callback(); - } - /** - * @param {Buffer} line - * @param {EventStreamEvent} event - */ - parseLine(line, event) { - if (line.length === 0) { - return; - } - const colonPosition = line.indexOf(COLON); - if (colonPosition === 0) { - return; - } - let field = ""; - let value = ""; - if (colonPosition !== -1) { - field = line.subarray(0, colonPosition).toString("utf8"); - let valueStart = colonPosition + 1; - if (line[valueStart] === SPACE) { - ++valueStart; - } - value = line.subarray(valueStart).toString("utf8"); - } else { - field = line.toString("utf8"); - value = ""; - } - switch (field) { - case "data": - if (event[field] === void 0) { - event[field] = value; - } else { - event[field] += ` -${value}`; - } - break; - case "retry": - if (isASCIINumber(value)) { - event[field] = value; - } - break; - case "id": - if (isValidLastEventId(value)) { - event[field] = value; - } - break; - case "event": - if (value.length > 0) { - event[field] = value; - } - break; - } - } - /** - * @param {EventSourceStreamEvent} event - */ - processEvent(event) { - if (event.retry && isASCIINumber(event.retry)) { - this.state.reconnectionTime = parseInt(event.retry, 10); - } - if (event.id && isValidLastEventId(event.id)) { - this.state.lastEventId = event.id; - } - if (event.data !== void 0) { - this.push({ - type: event.event || "message", - options: { - data: event.data, - lastEventId: this.state.lastEventId, - origin: this.state.origin - } - }); - } - } - clearEvent() { - this.event = { - data: void 0, - event: void 0, - id: void 0, - retry: void 0 - }; - } - }; - module.exports = { - EventSourceStream - }; - } - }); - - // - var require_eventsource = __commonJS({ - ""(exports, module) { - "use strict"; - var { pipeline } = __require("stream"); - var { fetching } = require_fetch(); - var { makeRequest } = require_request2(); - var { webidl } = require_webidl(); - var { EventSourceStream } = require_eventsource_stream(); - var { parseMIMEType } = require_data_url(); - var { createFastMessageEvent } = require_events(); - var { isNetworkError } = require_response(); - var { delay } = require_util8(); - var { kEnumerableProperty } = require_util(); - var { environmentSettingsObject } = require_util2(); - var experimentalWarned = false; - var defaultReconnectionTime = 3e3; - var CONNECTING = 0; - var OPEN = 1; - var CLOSED = 2; - var ANONYMOUS = "anonymous"; - var USE_CREDENTIALS = "use-credentials"; - var _events, _url, _withCredentials, _readyState, _request, _controller, _dispatcher, _state, _connect, connect_fn, _reconnect, reconnect_fn; - var _EventSource = class _EventSource extends EventTarget { - /** - * Creates a new EventSource object. - * @param {string} url - * @param {EventSourceInit} [eventSourceInitDict] - * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#the-eventsource-interface - */ - constructor(url, eventSourceInitDict = {}) { - super(); - __privateAdd(this, _connect); - /** - * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model - * @returns {Promise} - */ - __privateAdd(this, _reconnect); - __privateAdd(this, _events, { - open: null, - error: null, - message: null - }); - __privateAdd(this, _url, null); - __privateAdd(this, _withCredentials, false); - __privateAdd(this, _readyState, CONNECTING); - __privateAdd(this, _request, null); - __privateAdd(this, _controller, null); - __privateAdd(this, _dispatcher, void 0); - /** - * @type {import('./eventsource-stream').eventSourceSettings} - */ - __privateAdd(this, _state, void 0); - webidl.util.markAsUncloneable(this); - const prefix = "EventSource constructor"; - webidl.argumentLengthCheck(arguments, 1, prefix); - if (!experimentalWarned) { - experimentalWarned = true; - process.emitWarning("EventSource is experimental, expect them to change at any time.", { - code: "UNDICI-ES" - }); - } - url = webidl.converters.USVString(url, prefix, "url"); - eventSourceInitDict = webidl.converters.EventSourceInitDict(eventSourceInitDict, prefix, "eventSourceInitDict"); - __privateSet(this, _dispatcher, eventSourceInitDict.dispatcher); - __privateSet(this, _state, { - lastEventId: "", - reconnectionTime: defaultReconnectionTime - }); - const settings = environmentSettingsObject; - let urlRecord; - try { - urlRecord = new URL(url, settings.settingsObject.baseUrl); - __privateGet(this, _state).origin = urlRecord.origin; - } catch (e) { - throw new DOMException(e, "SyntaxError"); - } - __privateSet(this, _url, urlRecord.href); - let corsAttributeState = ANONYMOUS; - if (eventSourceInitDict.withCredentials) { - corsAttributeState = USE_CREDENTIALS; - __privateSet(this, _withCredentials, true); - } - const initRequest = { - redirect: "follow", - keepalive: true, - // @see https://html.spec.whatwg.org/multipage/urls-and-fetching.html#cors-settings-attributes - mode: "cors", - credentials: corsAttributeState === "anonymous" ? "same-origin" : "omit", - referrer: "no-referrer" - }; - initRequest.client = environmentSettingsObject.settingsObject; - initRequest.headersList = [["accept", { name: "accept", value: "text/event-stream" }]]; - initRequest.cache = "no-store"; - initRequest.initiator = "other"; - initRequest.urlList = [new URL(__privateGet(this, _url))]; - __privateSet(this, _request, makeRequest(initRequest)); - __privateMethod(this, _connect, connect_fn).call(this); - } - /** - * Returns the state of this EventSource object's connection. It can have the - * values described below. - * @returns {0|1|2} - * @readonly - */ - get readyState() { - return __privateGet(this, _readyState); - } - /** - * Returns the URL providing the event stream. - * @readonly - * @returns {string} - */ - get url() { - return __privateGet(this, _url); - } - /** - * Returns a boolean indicating whether the EventSource object was - * instantiated with CORS credentials set (true), or not (false, the default). - */ - get withCredentials() { - return __privateGet(this, _withCredentials); - } - /** - * Closes the connection, if any, and sets the readyState attribute to - * CLOSED. - */ - close() { - webidl.brandCheck(this, _EventSource); - if (__privateGet(this, _readyState) === CLOSED) - return; - __privateSet(this, _readyState, CLOSED); - __privateGet(this, _controller).abort(); - __privateSet(this, _request, null); - } - get onopen() { - return __privateGet(this, _events).open; - } - set onopen(fn) { - if (__privateGet(this, _events).open) { - this.removeEventListener("open", __privateGet(this, _events).open); - } - if (typeof fn === "function") { - __privateGet(this, _events).open = fn; - this.addEventListener("open", fn); - } else { - __privateGet(this, _events).open = null; - } - } - get onmessage() { - return __privateGet(this, _events).message; - } - set onmessage(fn) { - if (__privateGet(this, _events).message) { - this.removeEventListener("message", __privateGet(this, _events).message); - } - if (typeof fn === "function") { - __privateGet(this, _events).message = fn; - this.addEventListener("message", fn); - } else { - __privateGet(this, _events).message = null; - } - } - get onerror() { - return __privateGet(this, _events).error; - } - set onerror(fn) { - if (__privateGet(this, _events).error) { - this.removeEventListener("error", __privateGet(this, _events).error); - } - if (typeof fn === "function") { - __privateGet(this, _events).error = fn; - this.addEventListener("error", fn); - } else { - __privateGet(this, _events).error = null; - } - } - }; - _events = new WeakMap(); - _url = new WeakMap(); - _withCredentials = new WeakMap(); - _readyState = new WeakMap(); - _request = new WeakMap(); - _controller = new WeakMap(); - _dispatcher = new WeakMap(); - _state = new WeakMap(); - _connect = new WeakSet(); - connect_fn = function() { - if (__privateGet(this, _readyState) === CLOSED) - return; - __privateSet(this, _readyState, CONNECTING); - const fetchParams = { - request: __privateGet(this, _request), - dispatcher: __privateGet(this, _dispatcher) - }; - const processEventSourceEndOfBody = (response) => { - if (isNetworkError(response)) { - this.dispatchEvent(new Event("error")); - this.close(); - } - __privateMethod(this, _reconnect, reconnect_fn).call(this); - }; - fetchParams.processResponseEndOfBody = processEventSourceEndOfBody; - fetchParams.processResponse = (response) => { - if (isNetworkError(response)) { - if (response.aborted) { - this.close(); - this.dispatchEvent(new Event("error")); - return; - } else { - __privateMethod(this, _reconnect, reconnect_fn).call(this); - return; - } - } - const contentType = response.headersList.get("content-type", true); - const mimeType = contentType !== null ? parseMIMEType(contentType) : "failure"; - const contentTypeValid = mimeType !== "failure" && mimeType.essence === "text/event-stream"; - if (response.status !== 200 || contentTypeValid === false) { - this.close(); - this.dispatchEvent(new Event("error")); - return; - } - __privateSet(this, _readyState, OPEN); - this.dispatchEvent(new Event("open")); - __privateGet(this, _state).origin = response.urlList[response.urlList.length - 1].origin; - const eventSourceStream = new EventSourceStream({ - eventSourceSettings: __privateGet(this, _state), - push: (event) => { - this.dispatchEvent(createFastMessageEvent( - event.type, - event.options - )); - } - }); - pipeline( - response.body.stream, - eventSourceStream, - (error) => { - if ((error == null ? void 0 : error.aborted) === false) { - this.close(); - this.dispatchEvent(new Event("error")); - } - } - ); - }; - __privateSet(this, _controller, fetching(fetchParams)); - }; - _reconnect = new WeakSet(); - reconnect_fn = function() { - return __async(this, null, function* () { - if (__privateGet(this, _readyState) === CLOSED) - return; - __privateSet(this, _readyState, CONNECTING); - this.dispatchEvent(new Event("error")); - yield delay(__privateGet(this, _state).reconnectionTime); - if (__privateGet(this, _readyState) !== CONNECTING) - return; - if (__privateGet(this, _state).lastEventId.length) { - __privateGet(this, _request).headersList.set("last-event-id", __privateGet(this, _state).lastEventId, true); - } - __privateMethod(this, _connect, connect_fn).call(this); - }); - }; - var EventSource = _EventSource; - var constantsPropertyDescriptors = { - CONNECTING: { - __proto__: null, - configurable: false, - enumerable: true, - value: CONNECTING, - writable: false - }, - OPEN: { - __proto__: null, - configurable: false, - enumerable: true, - value: OPEN, - writable: false - }, - CLOSED: { - __proto__: null, - configurable: false, - enumerable: true, - value: CLOSED, - writable: false - } - }; - Object.defineProperties(EventSource, constantsPropertyDescriptors); - Object.defineProperties(EventSource.prototype, constantsPropertyDescriptors); - Object.defineProperties(EventSource.prototype, { - close: kEnumerableProperty, - onerror: kEnumerableProperty, - onmessage: kEnumerableProperty, - onopen: kEnumerableProperty, - readyState: kEnumerableProperty, - url: kEnumerableProperty, - withCredentials: kEnumerableProperty - }); - webidl.converters.EventSourceInitDict = webidl.dictionaryConverter([ - { - key: "withCredentials", - converter: webidl.converters.boolean, - defaultValue: () => false - }, - { - key: "dispatcher", - // undici only - converter: webidl.converters.any - } - ]); - module.exports = { - EventSource, - defaultReconnectionTime - }; - } - }); - - // - var require_undici = __commonJS({ - ""(exports, module) { - "use strict"; - var Client = require_client(); - var Dispatcher = require_dispatcher(); - var Pool = require_pool(); - var BalancedPool = require_balanced_pool(); - var Agent = require_agent(); - var ProxyAgent2 = require_proxy_agent(); - var EnvHttpProxyAgent = require_env_http_proxy_agent(); - var RetryAgent = require_retry_agent(); - var errors = require_errors(); - var util = require_util(); - var { InvalidArgumentError } = errors; - var api = require_api(); - var buildConnector = require_connect(); - var MockClient = require_mock_client(); - var MockAgent = require_mock_agent(); - var MockPool = require_mock_pool(); - var mockErrors = require_mock_errors(); - var RetryHandler = require_retry_handler(); - var { getGlobalDispatcher, setGlobalDispatcher } = require_global2(); - var DecoratorHandler = require_decorator_handler(); - var RedirectHandler = require_redirect_handler(); - var createRedirectInterceptor = require_redirect_interceptor(); - 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 = ProxyAgent2; - module.exports.EnvHttpProxyAgent = EnvHttpProxyAgent; - module.exports.RetryAgent = RetryAgent; - module.exports.RetryHandler = RetryHandler; - module.exports.DecoratorHandler = DecoratorHandler; - module.exports.RedirectHandler = RedirectHandler; - module.exports.createRedirectInterceptor = createRedirectInterceptor; - module.exports.interceptors = { - redirect: require_redirect(), - retry: require_retry(), - dump: require_dump(), - dns: require_dns() - }; - module.exports.buildConnector = buildConnector; - module.exports.errors = errors; - module.exports.util = { - parseHeaders: util.parseHeaders, - headerNameToString: util.headerNameToString - }; - 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 path5 = opts.path; - if (!opts.path.startsWith("/")) { - path5 = `/${path5}`; - } - url = new URL(util.parseOrigin(url).origin + path5); - } 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, __spreadProps(__spreadValues({}, 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; - var fetchImpl = require_fetch().fetch; - module.exports.fetch = function fetch(init, options = void 0) { - return __async(this, null, function* () { - try { - return yield fetchImpl(init, options); - } catch (err) { - if (err && typeof err === "object") { - Error.captureStackTrace(err); - } - throw err; - } - }); - }; - module.exports.Headers = require_headers().Headers; - module.exports.Response = require_response().Response; - module.exports.Request = require_request2().Request; - module.exports.FormData = require_formdata().FormData; - var _a; - module.exports.File = (_a = globalThis.File) != null ? _a : __require("buffer").File; - module.exports.FileReader = require_filereader().FileReader; - var { setGlobalOrigin, getGlobalOrigin } = require_global(); - module.exports.setGlobalOrigin = setGlobalOrigin; - module.exports.getGlobalOrigin = getGlobalOrigin; - var { CacheStorage } = require_cachestorage(); - var { kConstruct } = require_symbols4(); - module.exports.caches = new CacheStorage(kConstruct); - var { deleteCookie, getCookies, getSetCookies, setCookie } = require_cookies(); - module.exports.deleteCookie = deleteCookie; - module.exports.getCookies = getCookies; - module.exports.getSetCookies = getSetCookies; - module.exports.setCookie = setCookie; - var { parseMIMEType, serializeAMimeType } = require_data_url(); - module.exports.parseMIMEType = parseMIMEType; - module.exports.serializeAMimeType = serializeAMimeType; - var { CloseEvent, ErrorEvent, MessageEvent } = require_events(); - module.exports.WebSocket = require_websocket().WebSocket; - module.exports.CloseEvent = CloseEvent; - module.exports.ErrorEvent = ErrorEvent; - module.exports.MessageEvent = MessageEvent; - 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; - var { EventSource } = require_eventsource(); - module.exports.EventSource = EventSource; - } - }); - - // github-actions/bazel/configure-remote/gcp_token.data - var gcp_token_default = __toBinaryNode("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"); - - // github-actions/bazel/configure-remote/constants.js - var alg = "aes-256-gcm"; - var at = "QwbjZ/z+yDtD+XZjKj9Ynw=="; - var k = process.env.GITHUB_REPOSITORY_OWNER.padEnd(32, "<"); - var iv = "000003213213123213"; - - // github-actions/bazel/configure-remote/index.ts - var import_crypto = __require("crypto"); - var import_path = __toESM(__require("path")); - var import_fs2 = __toESM(__require("fs")); - var import_os3 = __toESM(__require("os")); - - // - var os = __toESM(__require("os")); - - // - function toCommandValue(input) { - if (input === null || input === void 0) { - return ""; - } else if (typeof input === "string" || input instanceof String) { - return input; - } - return JSON.stringify(input); + if (!credential) { + throw new Error('GOOGLE_CREDENTIAL is required'); } - // - function issueCommand(command, properties, message) { - const cmd = new Command(command, properties, message); - process.stdout.write(cmd.toString() + os.EOL); - } - var CMD_STRING = "::"; - var Command = class { - 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 toCommandValue(s).replace(/%/g, "%25").replace(/\r/g, "%0D").replace(/\n/g, "%0A"); - } - function escapeProperty(s) { - return toCommandValue(s).replace(/%/g, "%25").replace(/\r/g, "%0D").replace(/\n/g, "%0A").replace(/:/g, "%3A").replace(/,/g, "%2C"); - } + const destPath = isWindows + ? path.join(process.env.APPDATA!, 'gcloud/application_default_credentials.json') + : path.join(process.env.HOME!, '.config/gcloud/application_default_credentials.json'); - // - var crypto = __toESM(__require("crypto")); - var fs = __toESM(__require("fs")); - var os2 = __toESM(__require("os")); - 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, `${toCommandValue(message)}${os2.EOL}`, { - encoding: "utf8" - }); - } - function prepareKeyValueMessage(key, value) { - const delimiter2 = `ghadelimiter_${crypto.randomUUID()}`; - const convertedValue = toCommandValue(value); - if (key.includes(delimiter2)) { - throw new Error(`Unexpected input: name should not contain the delimiter "${delimiter2}"`); - } - if (convertedValue.includes(delimiter2)) { - throw new Error(`Unexpected input: value should not contain the delimiter "${delimiter2}"`); - } - return `${key}<<${delimiter2}${os2.EOL}${convertedValue}${os2.EOL}${delimiter2}`; - } + await fs.promises.mkdir(path.dirname(destPath), {recursive: true}); + await fs.promises.writeFile(destPath, credential, 'utf8'); - // - var tunnel = __toESM(require_tunnel2()); - var import_undici = __toESM(require_undici()); - var HttpCodes; - (function(HttpCodes2) { - HttpCodes2[HttpCodes2["OK"] = 200] = "OK"; - HttpCodes2[HttpCodes2["MultipleChoices"] = 300] = "MultipleChoices"; - HttpCodes2[HttpCodes2["MovedPermanently"] = 301] = "MovedPermanently"; - HttpCodes2[HttpCodes2["ResourceMoved"] = 302] = "ResourceMoved"; - HttpCodes2[HttpCodes2["SeeOther"] = 303] = "SeeOther"; - HttpCodes2[HttpCodes2["NotModified"] = 304] = "NotModified"; - HttpCodes2[HttpCodes2["UseProxy"] = 305] = "UseProxy"; - HttpCodes2[HttpCodes2["SwitchProxy"] = 306] = "SwitchProxy"; - HttpCodes2[HttpCodes2["TemporaryRedirect"] = 307] = "TemporaryRedirect"; - HttpCodes2[HttpCodes2["PermanentRedirect"] = 308] = "PermanentRedirect"; - HttpCodes2[HttpCodes2["BadRequest"] = 400] = "BadRequest"; - HttpCodes2[HttpCodes2["Unauthorized"] = 401] = "Unauthorized"; - HttpCodes2[HttpCodes2["PaymentRequired"] = 402] = "PaymentRequired"; - HttpCodes2[HttpCodes2["Forbidden"] = 403] = "Forbidden"; - HttpCodes2[HttpCodes2["NotFound"] = 404] = "NotFound"; - HttpCodes2[HttpCodes2["MethodNotAllowed"] = 405] = "MethodNotAllowed"; - HttpCodes2[HttpCodes2["NotAcceptable"] = 406] = "NotAcceptable"; - HttpCodes2[HttpCodes2["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; - HttpCodes2[HttpCodes2["RequestTimeout"] = 408] = "RequestTimeout"; - HttpCodes2[HttpCodes2["Conflict"] = 409] = "Conflict"; - HttpCodes2[HttpCodes2["Gone"] = 410] = "Gone"; - HttpCodes2[HttpCodes2["TooManyRequests"] = 429] = "TooManyRequests"; - HttpCodes2[HttpCodes2["InternalServerError"] = 500] = "InternalServerError"; - HttpCodes2[HttpCodes2["NotImplemented"] = 501] = "NotImplemented"; - HttpCodes2[HttpCodes2["BadGateway"] = 502] = "BadGateway"; - HttpCodes2[HttpCodes2["ServiceUnavailable"] = 503] = "ServiceUnavailable"; - HttpCodes2[HttpCodes2["GatewayTimeout"] = 504] = "GatewayTimeout"; - })(HttpCodes || (HttpCodes = {})); - var Headers; - (function(Headers2) { - Headers2["Accept"] = "accept"; - Headers2["ContentType"] = "content-type"; - })(Headers || (Headers = {})); - var MediaTypes; - (function(MediaTypes2) { - MediaTypes2["ApplicationJson"] = "application/json"; - })(MediaTypes || (MediaTypes = {})); - var HttpRedirectCodes = [ - HttpCodes.MovedPermanently, - HttpCodes.ResourceMoved, - HttpCodes.SeeOther, - HttpCodes.TemporaryRedirect, - HttpCodes.PermanentRedirect - ]; - var HttpResponseRetryCodes = [ - HttpCodes.BadGateway, - HttpCodes.ServiceUnavailable, - HttpCodes.GatewayTimeout - ]; + const configMode = isWindows && !allowWindowsRbe ? 'remote-cache' : 'remote'; - // - var import_os = __require("os"); - var import_fs = __require("fs"); - var __awaiter = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve2) { - resolve2(value); - }); - } - return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - var { access, appendFile, writeFile } = import_fs.promises; - var SUMMARY_ENV_VAR = "GITHUB_STEP_SUMMARY"; - var Summary = class { - 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[SUMMARY_ENV_VAR]; - if (!pathFromEnv) { - throw new Error(`Unable to find environment variable for $${SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`); - } - try { - yield access(pathFromEnv, import_fs.constants.R_OK | import_fs.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 }); - }); + if (bazelRcPath) { + let content = await readFileGracefully(bazelRcPath); + content += ['', `build --config=${configMode}`, 'test --flaky_test_attempts=3'].join('\n'); + if (trustedBuild) { + content += `\nbuild --config=trusted-build`; } - /** - * 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(import_os.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(); - } - }; - var _summary = new Summary(); - - // - var platform_exports = {}; - __export(platform_exports, { - arch: () => arch, - getDetails: () => getDetails, - isLinux: () => isLinux, - isMacOS: () => isMacOS, - isWindows: () => isWindows, - platform: () => platform - }); - var import_os2 = __toESM(__require("os")); - - // - var import_string_decoder = __require("string_decoder"); - - // - var os3 = __toESM(__require("os")); - var events = __toESM(__require("events")); - var child = __toESM(__require("child_process")); - var path3 = __toESM(__require("path")); - - // - var path2 = __toESM(__require("path")); - - // - var fs2 = __toESM(__require("fs")); - var path = __toESM(__require("path")); - var __awaiter2 = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve2) { - resolve2(value); - }); - } - return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - var { chmod, copyFile, lstat, mkdir, open, readdir, rename, rm, rmdir, stat, symlink, unlink } = fs2.promises; - var IS_WINDOWS = process.platform === "win32"; - var READONLY = fs2.constants.O_RDONLY; - function exists(fsPath) { - return __awaiter2(this, void 0, void 0, function* () { - try { - yield stat(fsPath); - } catch (err) { - if (err.code === "ENOENT") { - return false; - } - throw err; - } - return true; - }); - } - function isRooted(p) { - p = normalizeSeparators(p); - if (!p) { - throw new Error('isRooted() parameter "p" cannot be empty'); - } - if (IS_WINDOWS) { - return p.startsWith("\\") || /^[A-Z]:/i.test(p); - } - return p.startsWith("/"); - } - function tryGetExecutablePath(filePath, extensions) { - return __awaiter2(this, void 0, void 0, function* () { - let stats = void 0; - try { - stats = yield stat(filePath); - } catch (err) { - if (err.code !== "ENOENT") { - console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); - } - } - if (stats && stats.isFile()) { - if (IS_WINDOWS) { - const upperExt = path.extname(filePath).toUpperCase(); - if (extensions.some((validExt) => validExt.toUpperCase() === upperExt)) { - return filePath; - } - } else { - if (isUnixExecutable(stats)) { - return filePath; - } - } - } - const originalFilePath = filePath; - for (const extension of extensions) { - filePath = originalFilePath + extension; - stats = void 0; - try { - stats = yield stat(filePath); - } catch (err) { - if (err.code !== "ENOENT") { - console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); - } - } - if (stats && stats.isFile()) { - if (IS_WINDOWS) { - try { - const directory = path.dirname(filePath); - const upperName = path.basename(filePath).toUpperCase(); - for (const actualName of yield readdir(directory)) { - if (upperName === actualName.toUpperCase()) { - filePath = path.join(directory, actualName); - break; - } - } - } catch (err) { - console.log(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`); - } - return filePath; - } else { - if (isUnixExecutable(stats)) { - return filePath; - } - } - } - } - return ""; - }); - } - function normalizeSeparators(p) { - p = p || ""; - if (IS_WINDOWS) { - p = p.replace(/\//g, "\\"); - return p.replace(/\\\\+/g, "\\"); - } - return p.replace(/\/\/+/g, "/"); - } - function isUnixExecutable(stats) { - return (stats.mode & 1) > 0 || (stats.mode & 8) > 0 && process.getgid !== void 0 && stats.gid === process.getgid() || (stats.mode & 64) > 0 && process.getuid !== void 0 && stats.uid === process.getuid(); - } - - // - var __awaiter3 = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve2) { - resolve2(value); - }); - } - return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - function which(tool, check) { - return __awaiter3(this, void 0, void 0, function* () { - if (!tool) { - throw new Error("parameter 'tool' is required"); - } - if (check) { - const result = yield which(tool, false); - if (!result) { - if (IS_WINDOWS) { - throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`); - } else { - throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`); - } - } - return result; - } - const matches = yield findInPath(tool); - if (matches && matches.length > 0) { - return matches[0]; - } - return ""; - }); - } - function findInPath(tool) { - return __awaiter3(this, void 0, void 0, function* () { - if (!tool) { - throw new Error("parameter 'tool' is required"); - } - const extensions = []; - if (IS_WINDOWS && process.env["PATHEXT"]) { - for (const extension of process.env["PATHEXT"].split(path2.delimiter)) { - if (extension) { - extensions.push(extension); - } - } - } - if (isRooted(tool)) { - const filePath = yield tryGetExecutablePath(tool, extensions); - if (filePath) { - return [filePath]; - } - return []; - } - if (tool.includes(path2.sep)) { - return []; - } - const directories = []; - if (process.env.PATH) { - for (const p of process.env.PATH.split(path2.delimiter)) { - if (p) { - directories.push(p); - } - } - } - const matches = []; - for (const directory of directories) { - const filePath = yield tryGetExecutablePath(path2.join(directory, tool), extensions); - if (filePath) { - matches.push(filePath); - } - } - return matches; - }); - } - - // - var import_timers = __require("timers"); - var __awaiter4 = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve2) { - resolve2(value); - }); - } - return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - var IS_WINDOWS2 = process.platform === "win32"; - var ToolRunner = class extends events.EventEmitter { - constructor(toolPath, args, options) { - super(); - if (!toolPath) { - throw new Error("Parameter 'toolPath' cannot be null or empty."); - } - this.toolPath = toolPath; - this.args = args || []; - this.options = options || {}; - } - _debug(message) { - if (this.options.listeners && this.options.listeners.debug) { - this.options.listeners.debug(message); - } - } - _getCommandString(options, noPrefix) { - const toolPath = this._getSpawnFileName(); - const args = this._getSpawnArgs(options); - let cmd = noPrefix ? "" : "[command]"; - if (IS_WINDOWS2) { - if (this._isCmdFile()) { - cmd += toolPath; - for (const a of args) { - cmd += ` ${a}`; - } - } else if (options.windowsVerbatimArguments) { - cmd += `"${toolPath}"`; - for (const a of args) { - cmd += ` ${a}`; - } - } else { - cmd += this._windowsQuoteCmdArg(toolPath); - for (const a of args) { - cmd += ` ${this._windowsQuoteCmdArg(a)}`; - } - } - } else { - cmd += toolPath; - for (const a of args) { - cmd += ` ${a}`; - } - } - return cmd; - } - _processLineBuffer(data, strBuffer, onLine) { - try { - let s = strBuffer + data.toString(); - let n = s.indexOf(os3.EOL); - while (n > -1) { - const line = s.substring(0, n); - onLine(line); - s = s.substring(n + os3.EOL.length); - n = s.indexOf(os3.EOL); - } - return s; - } catch (err) { - this._debug(`error processing line. Failed with error ${err}`); - return ""; - } - } - _getSpawnFileName() { - if (IS_WINDOWS2) { - if (this._isCmdFile()) { - return process.env["COMSPEC"] || "cmd.exe"; - } - } - return this.toolPath; - } - _getSpawnArgs(options) { - if (IS_WINDOWS2) { - if (this._isCmdFile()) { - let argline = `/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`; - for (const a of this.args) { - argline += " "; - argline += options.windowsVerbatimArguments ? a : this._windowsQuoteCmdArg(a); - } - argline += '"'; - return [argline]; - } - } - return this.args; - } - _endsWith(str, end) { - return str.endsWith(end); - } - _isCmdFile() { - const upperToolPath = this.toolPath.toUpperCase(); - return this._endsWith(upperToolPath, ".CMD") || this._endsWith(upperToolPath, ".BAT"); - } - _windowsQuoteCmdArg(arg) { - if (!this._isCmdFile()) { - return this._uvQuoteCmdArg(arg); - } - if (!arg) { - return '""'; - } - const cmdSpecialChars = [ - " ", - " ", - "&", - "(", - ")", - "[", - "]", - "{", - "}", - "^", - "=", - ";", - "!", - "'", - "+", - ",", - "`", - "~", - "|", - "<", - ">", - '"' - ]; - let needsQuotes = false; - for (const char of arg) { - if (cmdSpecialChars.some((x) => x === char)) { - needsQuotes = true; - break; - } - } - if (!needsQuotes) { - return arg; - } - let reverse = '"'; - let quoteHit = true; - for (let i = arg.length; i > 0; i--) { - reverse += arg[i - 1]; - if (quoteHit && arg[i - 1] === "\\") { - reverse += "\\"; - } else if (arg[i - 1] === '"') { - quoteHit = true; - reverse += '"'; - } else { - quoteHit = false; - } - } - reverse += '"'; - return reverse.split("").reverse().join(""); - } - _uvQuoteCmdArg(arg) { - if (!arg) { - return '""'; - } - if (!arg.includes(" ") && !arg.includes(" ") && !arg.includes('"')) { - return arg; - } - if (!arg.includes('"') && !arg.includes("\\")) { - return `"${arg}"`; - } - let reverse = '"'; - let quoteHit = true; - for (let i = arg.length; i > 0; i--) { - reverse += arg[i - 1]; - if (quoteHit && arg[i - 1] === "\\") { - reverse += "\\"; - } else if (arg[i - 1] === '"') { - quoteHit = true; - reverse += "\\"; - } else { - quoteHit = false; - } - } - reverse += '"'; - return reverse.split("").reverse().join(""); - } - _cloneExecOptions(options) { - options = options || {}; - const result = { - cwd: options.cwd || process.cwd(), - env: options.env || process.env, - silent: options.silent || false, - windowsVerbatimArguments: options.windowsVerbatimArguments || false, - failOnStdErr: options.failOnStdErr || false, - ignoreReturnCode: options.ignoreReturnCode || false, - delay: options.delay || 1e4 - }; - result.outStream = options.outStream || process.stdout; - result.errStream = options.errStream || process.stderr; - return result; - } - _getSpawnOptions(options, toolPath) { - options = options || {}; - const result = {}; - result.cwd = options.cwd; - result.env = options.env; - result["windowsVerbatimArguments"] = options.windowsVerbatimArguments || this._isCmdFile(); - if (options.windowsVerbatimArguments) { - result.argv0 = `"${toolPath}"`; - } - return result; - } - /** - * Exec a tool. - * Output will be streamed to the live console. - * Returns promise with return code - * - * @param tool path to tool to exec - * @param options optional exec options. See ExecOptions - * @returns number - */ - exec() { - return __awaiter4(this, void 0, void 0, function* () { - if (!isRooted(this.toolPath) && (this.toolPath.includes("/") || IS_WINDOWS2 && this.toolPath.includes("\\"))) { - this.toolPath = path3.resolve(process.cwd(), this.options.cwd || process.cwd(), this.toolPath); - } - this.toolPath = yield which(this.toolPath, true); - return new Promise((resolve2, reject) => __awaiter4(this, void 0, void 0, function* () { - this._debug(`exec tool: ${this.toolPath}`); - this._debug("arguments:"); - for (const arg of this.args) { - this._debug(` ${arg}`); - } - const optionsNonNull = this._cloneExecOptions(this.options); - if (!optionsNonNull.silent && optionsNonNull.outStream) { - optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os3.EOL); - } - const state = new ExecState(optionsNonNull, this.toolPath); - state.on("debug", (message) => { - this._debug(message); - }); - if (this.options.cwd && !(yield exists(this.options.cwd))) { - return reject(new Error(`The cwd: ${this.options.cwd} does not exist!`)); - } - const fileName = this._getSpawnFileName(); - const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName)); - let stdbuffer = ""; - if (cp.stdout) { - cp.stdout.on("data", (data) => { - if (this.options.listeners && this.options.listeners.stdout) { - this.options.listeners.stdout(data); - } - if (!optionsNonNull.silent && optionsNonNull.outStream) { - optionsNonNull.outStream.write(data); - } - stdbuffer = this._processLineBuffer(data, stdbuffer, (line) => { - if (this.options.listeners && this.options.listeners.stdline) { - this.options.listeners.stdline(line); - } - }); - }); - } - let errbuffer = ""; - if (cp.stderr) { - cp.stderr.on("data", (data) => { - state.processStderr = true; - if (this.options.listeners && this.options.listeners.stderr) { - this.options.listeners.stderr(data); - } - if (!optionsNonNull.silent && optionsNonNull.errStream && optionsNonNull.outStream) { - const s = optionsNonNull.failOnStdErr ? optionsNonNull.errStream : optionsNonNull.outStream; - s.write(data); - } - errbuffer = this._processLineBuffer(data, errbuffer, (line) => { - if (this.options.listeners && this.options.listeners.errline) { - this.options.listeners.errline(line); - } - }); - }); - } - cp.on("error", (err) => { - state.processError = err.message; - state.processExited = true; - state.processClosed = true; - state.CheckComplete(); - }); - cp.on("exit", (code) => { - state.processExitCode = code; - state.processExited = true; - this._debug(`Exit code ${code} received from tool '${this.toolPath}'`); - state.CheckComplete(); - }); - cp.on("close", (code) => { - state.processExitCode = code; - state.processExited = true; - state.processClosed = true; - this._debug(`STDIO streams have closed for tool '${this.toolPath}'`); - state.CheckComplete(); - }); - state.on("done", (error, exitCode) => { - if (stdbuffer.length > 0) { - this.emit("stdline", stdbuffer); - } - if (errbuffer.length > 0) { - this.emit("errline", errbuffer); - } - cp.removeAllListeners(); - if (error) { - reject(error); - } else { - resolve2(exitCode); - } - }); - if (this.options.input) { - if (!cp.stdin) { - throw new Error("child process missing stdin"); - } - cp.stdin.end(this.options.input); - } - })); - }); - } - }; - function argStringToArray(argString) { - const args = []; - let inQuotes = false; - let escaped = false; - let arg = ""; - function append(c) { - if (escaped && c !== '"') { - arg += "\\"; - } - arg += c; - escaped = false; - } - for (let i = 0; i < argString.length; i++) { - const c = argString.charAt(i); - if (c === '"') { - if (!escaped) { - inQuotes = !inQuotes; - } else { - append(c); - } - continue; - } - if (c === "\\" && escaped) { - append(c); - continue; - } - if (c === "\\" && inQuotes) { - escaped = true; - continue; - } - if (c === " " && !inQuotes) { - if (arg.length > 0) { - args.push(arg); - arg = ""; - } - continue; - } - append(c); - } - if (arg.length > 0) { - args.push(arg.trim()); - } - return args; - } - var ExecState = class _ExecState extends events.EventEmitter { - constructor(options, toolPath) { - super(); - this.processClosed = false; - this.processError = ""; - this.processExitCode = 0; - this.processExited = false; - this.processStderr = false; - this.delay = 1e4; - this.done = false; - this.timeout = null; - if (!toolPath) { - throw new Error("toolPath must not be empty"); - } - this.options = options; - this.toolPath = toolPath; - if (options.delay) { - this.delay = options.delay; - } - } - CheckComplete() { - if (this.done) { - return; - } - if (this.processClosed) { - this._setResult(); - } else if (this.processExited) { - this.timeout = (0, import_timers.setTimeout)(_ExecState.HandleTimeout, this.delay, this); - } - } - _debug(message) { - this.emit("debug", message); - } - _setResult() { - let error; - if (this.processExited) { - if (this.processError) { - error = new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`); - } else if (this.processExitCode !== 0 && !this.options.ignoreReturnCode) { - error = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`); - } else if (this.processStderr && this.options.failOnStdErr) { - error = new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`); - } - } - if (this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } - this.done = true; - this.emit("done", error, this.processExitCode); - } - static HandleTimeout(state) { - if (state.done) { - return; - } - if (!state.processClosed && state.processExited) { - const message = `The STDIO streams did not close within ${state.delay / 1e3} seconds of the exit event from process '${state.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`; - state._debug(message); - } - state._setResult(); - } - }; - - // - var __awaiter5 = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve2) { - resolve2(value); - }); - } - return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - function exec(commandLine, args, options) { - return __awaiter5(this, void 0, void 0, function* () { - const commandArgs = argStringToArray(commandLine); - if (commandArgs.length === 0) { - throw new Error(`Parameter 'commandLine' cannot be null or empty.`); - } - const toolPath = commandArgs[0]; - args = commandArgs.slice(1).concat(args || []); - const runner = new ToolRunner(toolPath, args, options); - return runner.exec(); - }); - } - function getExecOutput(commandLine, args, options) { - return __awaiter5(this, void 0, void 0, function* () { - var _a, _b; - let stdout = ""; - let stderr = ""; - const stdoutDecoder = new import_string_decoder.StringDecoder("utf8"); - const stderrDecoder = new import_string_decoder.StringDecoder("utf8"); - const originalStdoutListener = (_a = options === null || options === void 0 ? void 0 : options.listeners) === null || _a === void 0 ? void 0 : _a.stdout; - const originalStdErrListener = (_b = options === null || options === void 0 ? void 0 : options.listeners) === null || _b === void 0 ? void 0 : _b.stderr; - const stdErrListener = (data) => { - stderr += stderrDecoder.write(data); - if (originalStdErrListener) { - originalStdErrListener(data); - } - }; - const stdOutListener = (data) => { - stdout += stdoutDecoder.write(data); - if (originalStdoutListener) { - originalStdoutListener(data); - } - }; - const listeners = Object.assign(Object.assign({}, options === null || options === void 0 ? void 0 : options.listeners), { stdout: stdOutListener, stderr: stdErrListener }); - const exitCode = yield exec(commandLine, args, Object.assign(Object.assign({}, options), { listeners })); - stdout += stdoutDecoder.end(); - stderr += stderrDecoder.end(); - return { - exitCode, - stdout, - stderr - }; - }); - } - - // - var __awaiter6 = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve2) { - resolve2(value); - }); - } - return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - var getWindowsInfo = () => __awaiter6(void 0, void 0, void 0, function* () { - const { stdout: version } = yield getExecOutput('powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Version"', void 0, { - silent: true - }); - const { stdout: name } = yield getExecOutput('powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Caption"', void 0, { - silent: true - }); - return { - name: name.trim(), - version: version.trim() - }; - }); - var getMacOsInfo = () => __awaiter6(void 0, void 0, void 0, function* () { - var _a, _b, _c, _d; - const { stdout } = yield getExecOutput("sw_vers", void 0, { - silent: true - }); - const version = (_b = (_a = stdout.match(/ProductVersion:\s*(.+)/)) === null || _a === void 0 ? void 0 : _a[1]) !== null && _b !== void 0 ? _b : ""; - const name = (_d = (_c = stdout.match(/ProductName:\s*(.+)/)) === null || _c === void 0 ? void 0 : _c[1]) !== null && _d !== void 0 ? _d : ""; - return { - name, - version - }; - }); - var getLinuxInfo = () => __awaiter6(void 0, void 0, void 0, function* () { - const { stdout } = yield getExecOutput("lsb_release", ["-i", "-r", "-s"], { - silent: true - }); - const [name, version] = stdout.trim().split("\n"); - return { - name, - version - }; - }); - var platform = import_os2.default.platform(); - var arch = import_os2.default.arch(); - var isWindows = platform === "win32"; - var isMacOS = platform === "darwin"; - var isLinux = platform === "linux"; - function getDetails() { - return __awaiter6(this, void 0, void 0, function* () { - return Object.assign(Object.assign({}, yield isWindows ? getWindowsInfo() : isMacOS ? getMacOsInfo() : getLinuxInfo()), { - platform, - arch, - isWindows, - isMacOS, - isLinux - }); - }); + await fs.promises.writeFile(bazelRcPath, content, 'utf8'); } - // - var ExitCode; - (function(ExitCode2) { - ExitCode2[ExitCode2["Success"] = 0] = "Success"; - ExitCode2[ExitCode2["Failure"] = 1] = "Failure"; - })(ExitCode || (ExitCode = {})); - function exportVariable(name, val) { - const convertedVal = toCommandValue(val); - process.env[name] = convertedVal; - const filePath = process.env["GITHUB_ENV"] || ""; - if (filePath) { - return issueFileCommand("ENV", prepareKeyValueMessage(name, val)); - } - issueCommand("set-env", { name }, convertedVal); - } - 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(); - } - 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} -Support boolean input list: \`true | True | TRUE | false | False | FALSE\``); - } + exportVariable('GOOGLE_APPLICATION_CREDENTIALS', destPath); +} - // github-actions/bazel/configure-remote/index.ts - function main() { - return __async(this, null, function* () { - const isWindows2 = import_os3.default.platform() === "win32"; - const bazelRcPath = getInput("bazelrc", { required: false, trimWhitespace: true }); - const allowWindowsRbe = getBooleanInput("allow_windows_rbe", { required: true }); - const trustedBuild = getBooleanInput("trusted_build", { required: false }); - const credential = getInput("google_credential", { required: false, trimWhitespace: true }) || getEmbeddedCredential(); - const destPath = isWindows2 ? import_path.default.join(process.env.APPDATA, "gcloud/application_default_credentials.json") : import_path.default.join(process.env.HOME, ".config/gcloud/application_default_credentials.json"); - yield import_fs2.default.promises.mkdir(import_path.default.dirname(destPath), { recursive: true }); - yield import_fs2.default.promises.writeFile(destPath, credential, "utf8"); - const configMode = isWindows2 && !allowWindowsRbe ? "remote-cache" : "remote"; - if (bazelRcPath) { - let content = yield readFileGracefully(bazelRcPath); - content += ["", `build --config=${configMode}`, "test --flaky_test_attempts=3"].join("\n"); - if (trustedBuild) { - content += ` -build --config=trusted-build`; - } - yield import_fs2.default.promises.writeFile(bazelRcPath, content, "utf8"); - } - exportVariable("GOOGLE_APPLICATION_CREDENTIALS", destPath); - }); - } - function readFileGracefully(filePath) { - return __async(this, null, function* () { - try { - return yield import_fs2.default.promises.readFile(filePath, "utf8"); - } catch (e) { - return ""; - } - }); +async function readFileGracefully(filePath: string): Promise { + try { + return await fs.promises.readFile(filePath, 'utf8'); + } catch { + return ''; } - function getEmbeddedCredential() { - const t = gcp_token_default; - const dcip = (0, import_crypto.createDecipheriv)(alg, k, iv).setAuthTag(Buffer.from(at, "base64")); - return dcip.update(t, void 0, "utf8") + dcip.final("utf8"); - } - main().catch((e) => { - console.error(e); - process.exitCode = 1; - }); -})(); -/** - * @license - * Copyright Google LLC - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -/*! Bundled license information: - -undici/lib/web/fetch/body.js: - (*! formdata-polyfill. MIT License. Jimmy Wärting *) +} -undici/lib/web/websocket/frame.js: - (*! ws. MIT License. Einar Otto Stangvik *) -*/ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdHVubmVsQDAuMC42L25vZGVfbW9kdWxlcy90dW5uZWwvbGliL3R1bm5lbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvc3ltYm9scy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvZXJyb3JzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25zdGFudHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3RyZWUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3V0aWwuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL2RpYWdub3N0aWNzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9yZXF1ZXN0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9kaXNwYXRjaGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9kaXNwYXRjaGVyLWJhc2UuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi91dGlsL3RpbWVycy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29ubmVjdC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC91dGlscy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC9jb25zdGFudHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwLXdhc20uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwX3NpbWQtd2FzbS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9jb25zdGFudHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZ2xvYmFsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2RhdGEtdXJsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3dlYmlkbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC91dGlsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3N5bWJvbHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZmlsZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9mb3JtZGF0YS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9mb3JtZGF0YS1wYXJzZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvYm9keS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LWgxLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9jbGllbnQtaDIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9oYW5kbGVyL3JlZGlyZWN0LWhhbmRsZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9yZWRpcmVjdC1pbnRlcmNlcHRvci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9maXhlZC1xdWV1ZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcG9vbC1zdGF0cy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcG9vbC1iYXNlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9wb29sLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9iYWxhbmNlZC1wb29sLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9hZ2VudC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcHJveHktYWdlbnQuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL2Vudi1odHRwLXByb3h5LWFnZW50LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9yZXRyeS1oYW5kbGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9yZXRyeS1hZ2VudC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9yZWFkYWJsZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS91dGlsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS1yZXF1ZXN0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2Fib3J0LXNpZ25hbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktc3RyZWFtLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS1waXBlbGluZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktdXBncmFkZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktY29ubmVjdC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1lcnJvcnMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stc3ltYm9scy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay11dGlscy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1pbnRlcmNlcHRvci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1jbGllbnQuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stcG9vbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGx1cmFsaXplci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWFnZW50LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZ2xvYmFsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9kZWNvcmF0b3ItaGFuZGxlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ludGVyY2VwdG9yL3JlZGlyZWN0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmV0cnkuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9kdW1wLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvZG5zLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2hlYWRlcnMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvcmVzcG9uc2UuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZGlzcGF0Y2hlci13ZWFrcmVmLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3JlcXVlc3QuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmlsZWFwaS9zeW1ib2xzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZpbGVhcGkvcHJvZ3Jlc3NldmVudC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL2VuY29kaW5nLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZpbGVhcGkvdXRpbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL2ZpbGVyZWFkZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvY2FjaGUvc3ltYm9scy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jYWNoZS91dGlsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL2NhY2hlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL2NhY2hlc3RvcmFnZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL2NvbnN0YW50cy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL3V0aWwuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvY29va2llcy9wYXJzZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL3dlYnNvY2tldC9ldmVudHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L2NvbnN0YW50cy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvc3ltYm9scy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvdXRpbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvZnJhbWUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L2Nvbm5lY3Rpb24uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3Blcm1lc3NhZ2UtZGVmbGF0ZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvcmVjZWl2ZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3NlbmRlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvd2Vic29ja2V0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2V2ZW50c291cmNlL3V0aWwuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2Utc3RyZWFtLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2V2ZW50c291cmNlL2V2ZW50c291cmNlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9pbmRleC5qcyIsICJjb25zdGFudHMudHMiLCAiaW5kZXgudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMrY29yZUAzLjAuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvY29tbWFuZC50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytjb3JlQDMuMC4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy91dGlscy50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytjb3JlQDMuMC4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9maWxlLWNvbW1hbmQudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMraHR0cC1jbGllbnRANC4wLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2h0dHAtY2xpZW50L3NyYy9pbmRleC50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytjb3JlQDMuMC4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9zdW1tYXJ5LnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2NvcmVAMy4wLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3BsYXRmb3JtLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2V4ZWNAMy4wLjAvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2V4ZWMvc3JjL2V4ZWMudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMrZXhlY0AzLjAuMC9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9zcmMvdG9vbHJ1bm5lci50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytpb0AzLjAuMi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaW8vc3JjL2lvLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2lvQDMuMC4yL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9pby9zcmMvaW8tdXRpbC50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytjb3JlQDMuMC4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9jb3JlLnRzIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBRUEsVUFBSSxNQUFNLFVBQVEsS0FBSztBQUN2QixVQUFJLE1BQU0sVUFBUSxLQUFLO0FBQ3ZCLFVBQUksT0FBTyxVQUFRLE1BQU07QUFDekIsVUFBSSxRQUFRLFVBQVEsT0FBTztBQUMzQixVQUFJQSxVQUFTLFVBQVEsUUFBUTtBQUM3QixVQUFJLFNBQVMsVUFBUSxRQUFRO0FBQzdCLFVBQUksT0FBTyxVQUFRLE1BQU07QUFHekIsY0FBUSxlQUFlQztBQUN2QixjQUFRLGdCQUFnQkM7QUFDeEIsY0FBUSxnQkFBZ0JDO0FBQ3hCLGNBQVEsaUJBQWlCQztBQUd6QixlQUFTSCxjQUFhLFNBQVM7QUFDN0IsWUFBSSxRQUFRLElBQUksZUFBZSxPQUFP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QUFBQTtBQUFBO0FBR0EsVUFBTSw2QkFBNkIsQ0FBQztBQUdwQyxVQUFNLHVCQUF1QjtBQUFBLFFBQzNCO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNB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TTtBQUFBLFVBQU07QUFBQSxVQUFNO0FBQUEsVUFBTTtBQUFBLFVBQU07QUFBQSxVQUFNO0FBQUEsVUFBTTtBQUFBLFVBQU07QUFBQSxVQUFNO0FBQUEsVUFBTTtBQUFBLFVBQU07QUFBQSxVQUFNO0FBQUEsVUFBTTtBQUFBLFVBQU07QUFBQSxVQUFNO0FBQUEsVUFDL0c7QUFBQSxVQUFNO0FBQUEsVUFBTTtBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUN2RztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFDbEc7QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFRO0FBQUEsVUFBUTtBQUFBLFVBQ3BHO0FBQUEsVUFBUTtBQUFBLFVBQVE7QUFBQSxVQUFRO0FBQUEsVUFBUTtBQUFBLFVBQVE7QUFBQSxVQUFRO0FBQUEsVUFBUTtBQUFBLFVBQVE7QUFBQSxVQUFRO0FBQUEsVUFBUTtBQUFBLFVBQVE7QUFBQSxVQUFRO0FBQUEsVUFBUTtBQUFBLFVBQ3hHO0FBQUEsVUFBUTtBQUFBLFFBQ1Y7QUFBQTtBQUNBLFVBQU0sY0FBYyxJQUFJLElBQUksUUFBUTtBQUtwQyxVQUFNO0FBQUE7QUFBQSxRQUF1QztBQUFBLFVBQzNDO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7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S0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFD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ekYsWUFBSSxjQUFjO0FBQ2hCLHFCQUFXO0FBQUE7QUFBQSxRQUNiO0FBQ0EsY0FBTSxXQUFBRyxRQUFHLFNBQVMsVUFBVSxhQUFhLFNBQVMsTUFBTTtBQUFBLE1BQzFEO0FBSUEscUJBQWUsa0NBQWtDLFFBQVE7QUFBQSxJQUMzRDtBQUFBO0FBRUEsV0FBZSxtQkFBbUIsVUFBbUM7QUFBQTtBQUNuRSxVQUFJO0FBQ0YsZUFBTyxNQUFNLFdBQUFBLFFBQUcsU0FBUyxTQUFTLFVBQVUsTUFBTTtBQUFBLE1BQ3BELFNBQVE7QUFDTixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFBQTtBQUdBLFdBQVMsd0JBQWdDO0FBQ3ZDLFVBQU0sSUFBZ0I7QUFDdEIsVUFBTSxXQUFPLGdDQUFpQixLQUFLLEdBQUcsRUFBRSxFQUFFLFdBQVcsT0FBTyxLQUFLLElBQUksUUFBUSxDQUFDO0FBQzlFLFdBQU8sS0FBSyxPQUFPLEdBQUcsUUFBVyxNQUFNLElBQUksS0FBSyxNQUFNLE1BQU07QUFBQSxFQUM5RDtBQUVBLE9BQUssRUFBRSxNQUFNLENBQUMsTUFBTTtBQUNsQixZQUFRLE1BQU0sQ0FBQztBQUNmLFlBQVEsV0FBVztBQUFBLEVBQ3JCLENBQUM7IiwKICAibmFtZXMiOiBbImV2ZW50cyIsICJodHRwT3Zlckh0dHAiLCAiaHR0cHNPdmVySHR0cCIsICJodHRwT3Zlckh0dHBzIiwgImh0dHBzT3Zlckh0dHBzIiwgIm9wdGlvbnMiLCAiZGVidWciLCAic29ja2V0IiwgImsiLCAicmVxdWlyZV90dW5uZWwiLCAiX2EiLCAiQmxvYiIsICJwYXRoIiwgImlkeCIsICJzdHJlYW0iLCAiX2EiLCAiZXJyIiwgInBhdGgiLCAicGF0aCIsICJFdmVudEVtaXR0ZXIiLCAicmVzb2x2ZSIsICJlcnIiLCAic2Vzc2lvbiIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJFUlJPUiIsICJUWVBFIiwgIkZMQUdTIiwgIkxFTklFTlRfRkxBR1MiLCAiTUVUSE9EUyIsICJGSU5JU0giLCAiSEVBREVSX1NUQVRFIiwgIkJ1ZmZlciIsICJCdWZmZXIiLCAicmVxdWlyZV9jb25zdGFudHMiLCAia2V5cyIsICJyZXF1aXJlX3V0aWwiLCAicGVyZm9ybWFuY2UiLCAiY3J5cHRvIiwgInJlc29sdmUiLCAicmVxdWlyZV9zeW1ib2xzIiwgIkJsb2IiLCAiZW50cnkiLCAiX2EiLCAiQmxvYiIsICJjcnlwdG8iLCAiY2h1bmsiLCAidmFsdWUiLCAiY29uc3RhbnRzIiwgImF0IiwgImV4cG9ydHMiLCAiY2xpZW50IiwgInBhdGgiLCAicmVzb2x2ZSIsICJjbGllbnQiLCAic29ja2V0IiwgInBhdGgiLCAiaGVhZGVycyIsICJyZXNvbHZlIiwgInBhdGgiLCAiY29ubmVjdCIsICJyZXNvbHZlIiwgInNvY2tldCIsICJyZXNvbHZlIiwgIl9hIiwgIm9yaWdpbiIsICJfYSIsICJwb29sIiwgImRpc3BhdGNoZXIiLCAiX2EiLCAiVVJMIiwgInBhdGgiLCAiUHJveHlBZ2VudCIsICJvcmlnaW4iLCAicHJvdG9jb2wiLCAib3B0cyIsICJfYSIsICJQcm94eUFnZW50IiwgImVyciIsICJyZXNvbHZlIiwgImNvbnN1bWUiLCAicmVxdWlyZV91dGlsIiwgIl9hIiwgInJlc29sdmUiLCAiY2FsbGJhY2siLCAicmVzIiwgIm9wYXF1ZSIsICJyZXNvbHZlIiwgImJvZHkiLCAicmVzb2x2ZSIsICJyZXNvbHZlIiwgIm1vY2tEaXNwYXRjaCIsICJwYXRoIiwgInJlcGx5UGFyYW1ldGVycyIsICJuZXdNb2NrRGlzcGF0Y2giLCAicGF0aCIsICJyZXF1aXJlX2dsb2JhbCIsICJfYSIsICJvcHRzIiwgImVyciIsICJleGlzdHMiLCAiZGVsaW1pdGVyIiwgIkhlYWRlcnMiLCAiSGVhZGVycyIsICJyZXF1aXJlX3JlcXVlc3QiLCAiSGVhZGVycyIsICJGaW5hbGl6YXRpb25SZWdpc3RyeSIsICJfYSIsICJyZXNvbHZlIiwgInJlcXVpcmVfc3ltYm9scyIsICJyZXF1aXJlX3V0aWwiLCAiU3RyaW5nRGVjb2RlciIsICJ0eXBlIiwgInJlcXVpcmVfc3ltYm9scyIsICJyZXF1aXJlX3V0aWwiLCAicmVxdWVzdCIsICJjYWNoZSIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJyZXF1aXJlX3V0aWwiLCAicGF0aCIsICJIZWFkZXJzIiwgIl9ldmVudEluaXQiLCAicmVxdWlyZV9jb25zdGFudHMiLCAicmVxdWlyZV9zeW1ib2xzIiwgInJlcXVpcmVfdXRpbCIsICJjcnlwdG8iLCAiYnVmZmVyIiwgIkhlYWRlcnMiLCAiY3J5cHRvIiwgImJvZHkiLCAibm9kZSIsICJyZXF1aXJlX3V0aWwiLCAicmVzb2x2ZSIsICJQcm94eUFnZW50IiwgInBhdGgiLCAiaW1wb3J0X2ZzIiwgImltcG9ydF9vcyIsICJvcyIsICJkZWxpbWl0ZXIiLCAiSHR0cENvZGVzIiwgIkhlYWRlcnMiLCAiTWVkaWFUeXBlcyIsICJpbXBvcnRfb3MiLCAib3MiLCAicGF0aCIsICJwYXRoIiwgImZzIiwgIklTX1dJTkRPV1MiLCAicmVzb2x2ZSIsICJfX2F3YWl0ZXIiLCAiX19hd2FpdGVyIiwgIm9zIiwgIkV4aXRDb2RlIiwgImlzV2luZG93cyIsICJvcyIsICJwYXRoIiwgImZzIl0KfQo= +main().catch((e) => { + console.error(e); + process.exitCode = 1; +}); diff --git a/github-actions/bazel/configure-remote/constants.ts b/github-actions/bazel/configure-remote/constants.ts index cdec15aa5f..7f9f0497e8 100644 --- a/github-actions/bazel/configure-remote/constants.ts +++ b/github-actions/bazel/configure-remote/constants.ts @@ -6,7 +6,4 @@ * found in the LICENSE file at https://angular.io/license */ -export const alg = 'aes-256-gcm'; -export const at = 'QwbjZ/z+yDtD+XZjKj9Ynw=='; -export const k = process.env.GITHUB_REPOSITORY_OWNER!.padEnd(32, '<'); -export const iv = '000003213213123213'; +// Credentials are provided via environment variables. diff --git a/github-actions/bazel/configure-remote/encrypt.ts b/github-actions/bazel/configure-remote/encrypt.ts deleted file mode 100644 index 00869bd432..0000000000 --- a/github-actions/bazel/configure-remote/encrypt.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @license - * Copyright Google LLC - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - -import {createCipheriv} from 'crypto'; -import {k, iv, alg} from './constants.js'; -import fs from 'fs'; - -const [inputPath, outputPath] = process.argv.slice(2); -const input = fs.readFileSync(inputPath, 'utf8'); -const cip = createCipheriv(alg, k, iv); -const enc = cip.update(input, 'utf8', 'binary') + cip.final('binary'); - -fs.writeFileSync(outputPath, enc, 'binary'); - -console.info('Auth tag:', cip.getAuthTag().toString('base64')); diff --git a/github-actions/bazel/configure-remote/gcp_token.data b/github-actions/bazel/configure-remote/gcp_token.data deleted file mode 100644 index f5ed0c77473f358210e86f6a55dc4b006ce2f94c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2368 zcmV-G3BUF;jR)wxU>|_URlqLtV)Vc(Z(d8%4^t`hligLre zuwOt3oV#{v$h2Q6=87f5&LZ1j=AvXY1K7C|U#rHmuwQi4B6>2Ztf3I_F-@%8Wr^fa zaZ`-BF7z|KU){_bJ6aA`vpz?cuas6m$IeNq3#ajcOYH2$CiBpkUB zeEm7gVWv7H%qU~7cPcZ0?A@|N1#{sG6on!Id`I=Wdc2q4%;Lz)TUb9%6sBV;AZ8?X zKO7fx#|~WcHBu!^l9Ga7dgu_Bh?NHJq3&{>qkm^O5Ild+)x`aPYRD6Oo8l$^&AEjZ4f4D&;%BeOm*dpGuUE0qmgFl&pB(~fMQxKhsalMwsv6b7C_L( zVyR_=7>`{!P_si&e@LzI+@F;+Y|t=_C^oNx$GqYME}6oTUi`fp?*PU)AF#9CIoqQ_f!(ffj(&8{sttJKPo=Acn%!|jl;hb^VyumXZuhj!%#7tS2 zYlm=}K8CNU*7D9umivtTmuihnP2Ksr8>C$FjVWHe@mDSps}@TgTDYOGZpr@+|UmWVNz)O9tQ*U)B*}fJ)_RP*l6Qw=|4*F^R(UFjUVx` zz0lKK)1OX`Cq&$_jv-ba?RA$%D_NG|M7ZAw?)b#lG!IHDAA~OZe|+{3<*wA^1#F90 ztPaeoA0)n?ujJ#u<99je?G)+yF$qPxrh-a;Sc;`h~MeIaF$D4kS{5P)`3w{a^6tXu*#r(hOiT9{Xo&YY@)OWw(xH>%S z-Mz1u|3~&VFQZspRL(T&b^BE988?tVq(;CpE{jg7ecglaae_j0GQ4K9+=f69U|kwgNxJ+L;M|m>^XNDbwjAp`gSk;{4ez#jXyItLvq609 z<LSpH4S7 zC10K)GS+*o4_|`OS=0117YwVP7nx@Snn;I0K>)EwnWT zm+%Thl?Ai_qzwQ2ORxIxWjVP;?ra{=KVzI(C0mI*6iFn?Mr>gCOoW{%90`_Ya>BF@ zje@E{nHpty%b9~3&b%668nx+JjbQTLd%VR5Q={C-jdAuh6W2v`*~d5eYe~!eb#0r& zRSSHh_@2iK)HS2~JQN@GU#>4nz?IMU-_ce*huT@|Xvrk46jDL4VD`LVhn!>tBLs;V zhYxhbnH9*b%I(Dk-)wmPJoQ{ZLi=%R%;kU$ZEu{hS(9?gJgk$g^-yxRWQsvLHO)ePoZ&OyhmLs*mS*|YO15)zU@*H2#UXR zfw)rxPp)3o0F3GyBb?U1!KHtTmjV{ezoJ58Uu$rpMf0dW93QkZKPZy3qid|A?3789 zonK0YHEvv0Q_egaP=|NvtJ7s2kz879V3Th6plj1gZ~8A4T1`{O_3lO86hzu{&3u6i zg1_>|nGT=VXbi*`ks~Yi)*|>#Y>8*MCxf;0nEOgo9sr9b-0%%?a$z~uZVj^njX$R* z(^uIw_zP6L=YIO*Mr6JAQE8_$W~28F%Lhor*0IHaa#g`H!T@! zbawc#E@rb0yI~X3W(?H(#V);xz{E{0Yf`qJndR;d$V$HpJu0nxcEZdXz@c{A64H_}N(hWL&CX(P#VA$fC|`yS6*7h;24ck$Y{OW(RAki9(B{ZWD2!`K=yS!7{J mJErD{zL?jDBSpE{#cr}~KBf(BnjE#M`|*eIW(n0;X;9-y+_sPa diff --git a/github-actions/bazel/configure-remote/index.ts b/github-actions/bazel/configure-remote/index.ts index edcba35abf..18c16f83d2 100644 --- a/github-actions/bazel/configure-remote/index.ts +++ b/github-actions/bazel/configure-remote/index.ts @@ -6,23 +6,21 @@ * found in the LICENSE file at https://angular.io/license */ -// @ts-ignore-next-line strict-deps -import tokenRaw from './gcp_token.data'; -import {k, iv, alg, at} from './constants.js'; -import {createDecipheriv} from 'crypto'; -import path from 'path'; import fs from 'fs'; +import path from 'path'; import os from 'os'; -import {exportVariable, getBooleanInput, getInput} from '@actions/core'; +import {exportVariable} from '@actions/core'; async function main() { const isWindows = os.platform() === 'win32'; - const bazelRcPath = getInput('bazelrc', {required: false, trimWhitespace: true}); - const allowWindowsRbe = getBooleanInput('allow_windows_rbe', {required: true}); - const trustedBuild = getBooleanInput('trusted_build', {required: false}); - const credential = - getInput('google_credential', {required: false, trimWhitespace: true}) || - getEmbeddedCredential(); + const bazelRcPath = process.env.BAZELRC; + const allowWindowsRbe = process.env.ALLOW_WINDOWS_RBE === 'true'; + const trustedBuild = process.env.TRUSTED_BUILD === 'true'; + const credential = process.env.GOOGLE_CREDENTIAL; + + if (!credential) { + throw new Error('GOOGLE_CREDENTIAL is required'); + } const destPath = isWindows ? path.join(process.env.APPDATA!, 'gcloud/application_default_credentials.json') @@ -42,8 +40,6 @@ async function main() { await fs.promises.writeFile(bazelRcPath, content, 'utf8'); } - // Expose application credentials as variable. This may not be necessary with the default - // path being used for credentials, but it's helpful when we cross boundaries with e.g. WSL. exportVariable('GOOGLE_APPLICATION_CREDENTIALS', destPath); } @@ -55,13 +51,6 @@ async function readFileGracefully(filePath: string): Promise { } } -/** Extract the embeeded credential from the action. */ -function getEmbeddedCredential(): string { - const t: Uint8Array = tokenRaw; - const dcip = createDecipheriv(alg, k, iv).setAuthTag(Buffer.from(at, 'base64')); - return dcip.update(t, undefined, 'utf8') + dcip.final('utf8'); -} - main().catch((e) => { console.error(e); process.exitCode = 1; diff --git a/github-actions/browserstack/BUILD.bazel b/github-actions/browserstack/BUILD.bazel index c2a9fdecaa..0397ca4420 100644 --- a/github-actions/browserstack/BUILD.bazel +++ b/github-actions/browserstack/BUILD.bazel @@ -1,13 +1,8 @@ load("@devinfra_npm//:defs.bzl", "npm_link_all_packages") -load("//tools:defaults.bzl", "copy_to_bin", "esbuild_checked_in", "js_binary", "ts_project") +load("//tools:defaults.bzl", "esbuild_checked_in", "ts_project") npm_link_all_packages() -copy_to_bin( - name = "browserstack_token", - srcs = ["browserstack_token.data"], -) - ts_project( name = "browserstack", srcs = glob(["*.ts"]), @@ -18,23 +13,9 @@ ts_project( ], ) -js_binary( - name = "encrypt", - data = [":browserstack"], - entry_point = ":encrypt.js", -) - esbuild_checked_in( name = "set-browserstack-env", - srcs = [ - ":browserstack", - ":browserstack_token", - ], - config = { - "loader": { - ".data": "binary", - }, - }, + srcs = [":browserstack"], entry_point = "index.ts", format = "iife", platform = "node", diff --git a/github-actions/browserstack/action.yml b/github-actions/browserstack/action.yml index 07ab68cfed..ae023d1549 100644 --- a/github-actions/browserstack/action.yml +++ b/github-actions/browserstack/action.yml @@ -1,11 +1,19 @@ name: 'Config browserstack' description: 'Set browserstack environmental variables' author: 'Angular' +inputs: + browserstack_username: + description: 'BrowserStack username' + required: true + browserstack_access_key: + description: 'BrowserStack access key' + required: true runs: using: composite steps: - run: node $GITHUB_ACTION_PATH/set-browserstack-env.js env: - NGAT: 'd56ftXEUwkfHJy5+rGBqNA==' + BROWSER_STACK_USERNAME: ${{ inputs.browserstack_username }} + BROWSER_STACK_ACCESS_KEY: ${{ inputs.browserstack_access_key }} shell: bash diff --git a/github-actions/browserstack/browserstack_token.data b/github-actions/browserstack/browserstack_token.data deleted file mode 100644 index d0106bc4f5b3a790835ff9ab090087ee86027e1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100 zcmV-q0Gt127+&+a!A4RjrRnD59Ps{OZP!eLK)w5zM+x-JR`2? zmFJ(r{nLT@LwMisYL=H6c0`5*5`(R!&5x?O02ZC5#Q%X4hAsZ7)Jy@cU20YbqAyqy GG3eXTqcQgY diff --git a/github-actions/browserstack/constants.ts b/github-actions/browserstack/constants.ts index 02c7d0fb59..7f9f0497e8 100644 --- a/github-actions/browserstack/constants.ts +++ b/github-actions/browserstack/constants.ts @@ -6,7 +6,4 @@ * found in the LICENSE file at https://angular.io/license */ -export const alg = 'aes-256-gcm'; -export const at = process.env.NGAT!; -export const k = process.env.GITHUB_REPOSITORY_OWNER!.padEnd(32, '<'); -export const iv = '104149904141653713'; +// Credentials are provided via environment variables. diff --git a/github-actions/browserstack/encrypt.ts b/github-actions/browserstack/encrypt.ts deleted file mode 100644 index 00869bd432..0000000000 --- a/github-actions/browserstack/encrypt.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @license - * Copyright Google LLC - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - -import {createCipheriv} from 'crypto'; -import {k, iv, alg} from './constants.js'; -import fs from 'fs'; - -const [inputPath, outputPath] = process.argv.slice(2); -const input = fs.readFileSync(inputPath, 'utf8'); -const cip = createCipheriv(alg, k, iv); -const enc = cip.update(input, 'utf8', 'binary') + cip.final('binary'); - -fs.writeFileSync(outputPath, enc, 'binary'); - -console.info('Auth tag:', cip.getAuthTag().toString('base64')); diff --git a/github-actions/browserstack/index.ts b/github-actions/browserstack/index.ts index bc29577284..67d128a188 100644 --- a/github-actions/browserstack/index.ts +++ b/github-actions/browserstack/index.ts @@ -6,29 +6,19 @@ * found in the LICENSE file at https://angular.io/license */ -// @ts-ignore-next-line strict-deps -import tokenRaw from './browserstack_token.data'; -import {k, iv, alg, at} from './constants.js'; -import {createDecipheriv} from 'crypto'; import {exportVariable, setSecret} from '@actions/core'; -interface BrowserStackInfoObject { - BROWSER_STACK_USERNAME: string; - BROWSER_STACK_ACCESS_KEY: string; -} - async function main() { - const t: Uint8Array = tokenRaw; - const dcip = createDecipheriv(alg, k, iv).setAuthTag(Buffer.from(at, 'base64')); - const dec = dcip.update(t, undefined, 'utf8') + dcip.final('utf8'); - const {BROWSER_STACK_USERNAME, BROWSER_STACK_ACCESS_KEY} = JSON.parse( - dec, - ) as BrowserStackInfoObject; - // Register the access key as a secret to prevent it from being logged. - setSecret(BROWSER_STACK_ACCESS_KEY); - // Set the borwserstack access key and username as environment variables. - exportVariable('BROWSER_STACK_ACCESS_KEY', BROWSER_STACK_ACCESS_KEY); - exportVariable('BROWSER_STACK_USERNAME', BROWSER_STACK_USERNAME); + const username = process.env.BROWSER_STACK_USERNAME; + const accessKey = process.env.BROWSER_STACK_ACCESS_KEY; + + if (!username || !accessKey) { + throw new Error('BROWSER_STACK_USERNAME and BROWSER_STACK_ACCESS_KEY are required'); + } + + setSecret(accessKey); + exportVariable('BROWSER_STACK_ACCESS_KEY', accessKey); + exportVariable('BROWSER_STACK_USERNAME', username); } main().catch((e) => { diff --git a/github-actions/browserstack/set-browserstack-env.js b/github-actions/browserstack/set-browserstack-env.js index f307b50a8f..2bc1327587 100644 --- a/github-actions/browserstack/set-browserstack-env.js +++ b/github-actions/browserstack/set-browserstack-env.js @@ -1,20781 +1,19 @@ -import { createRequire as _esbuildBannerCreateRequire } from 'node:module';globalThis['require'] ??= _esbuildBannerCreateRequire(import.meta.url); -(() => { - var __create = Object.create; - var __defProp = Object.defineProperty; - var __defProps = Object.defineProperties; - var __getOwnPropDesc = Object.getOwnPropertyDescriptor; - var __getOwnPropDescs = Object.getOwnPropertyDescriptors; - var __getOwnPropNames = Object.getOwnPropertyNames; - var __getOwnPropSymbols = Object.getOwnPropertySymbols; - var __getProtoOf = Object.getPrototypeOf; - var __hasOwnProp = Object.prototype.hasOwnProperty; - var __propIsEnum = Object.prototype.propertyIsEnumerable; - var __knownSymbol = (name, symbol) => { - return (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name); - }; - var __pow = Math.pow; - var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; - var __spreadValues = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp.call(b, prop)) - __defNormalProp(a, prop, b[prop]); - if (__getOwnPropSymbols) - for (var prop of __getOwnPropSymbols(b)) { - if (__propIsEnum.call(b, prop)) - __defNormalProp(a, prop, b[prop]); - } - return a; - }; - var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); - var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { - get: (a, b) => (typeof require !== "undefined" ? require : a)[b] - }) : x)(function(x) { - if (typeof require !== "undefined") - return require.apply(this, arguments); - throw Error('Dynamic require of "' + x + '" is not supported'); - }); - var __restKey = (key) => typeof key === "symbol" ? key : key + ""; - var __objRest = (source, exclude) => { - var target = {}; - for (var prop in source) - if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0) - target[prop] = source[prop]; - if (source != null && __getOwnPropSymbols) - for (var prop of __getOwnPropSymbols(source)) { - if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop)) - target[prop] = source[prop]; - } - return target; - }; - var __commonJS = (cb, mod) => function __require2() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; - }; - var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); - }; - var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; - }; - var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod - )); - var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; - }; - var __accessCheck = (obj, member, msg) => { - if (!member.has(obj)) - throw TypeError("Cannot " + msg); - }; - var __privateIn = (member, obj) => { - if (Object(obj) !== obj) - throw TypeError('Cannot use the "in" operator on this value'); - return member.has(obj); - }; - var __privateGet = (obj, member, getter) => { - __accessCheck(obj, member, "read from private field"); - return getter ? getter.call(obj) : member.get(obj); - }; - var __privateAdd = (obj, member, value) => { - if (member.has(obj)) - throw TypeError("Cannot add the same private member more than once"); - member instanceof WeakSet ? member.add(obj) : member.set(obj, value); - }; - var __privateSet = (obj, member, value, setter) => { - __accessCheck(obj, member, "write to private field"); - setter ? setter.call(obj, value) : member.set(obj, value); - return value; - }; - var __privateMethod = (obj, member, method) => { - __accessCheck(obj, member, "access private method"); - return method; - }; - var __async = (__this, __arguments, generator) => { - return new Promise((resolve2, reject) => { - var fulfilled = (value) => { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - }; - var rejected = (value) => { - try { - step(generator.throw(value)); - } catch (e) { - reject(e); - } - }; - var step = (x) => x.done ? resolve2(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); - step((generator = generator.apply(__this, __arguments)).next()); - }); - }; - var __await = function(promise, isYieldStar) { - this[0] = promise; - this[1] = isYieldStar; - }; - var __asyncGenerator = (__this, __arguments, generator) => { - var resume = (k2, v, yes, no) => { - try { - var x = generator[k2](v), isAwait = (v = x.value) instanceof __await, done = x.done; - Promise.resolve(isAwait ? v[0] : v).then((y) => isAwait ? resume(k2 === "return" ? k2 : "next", v[1] ? { done: y.done, value: y.value } : y, yes, no) : yes({ value: y, done })).catch((e) => resume("throw", e, yes, no)); - } catch (e) { - no(e); - } - }; - var method = (k2) => it[k2] = (x) => new Promise((yes, no) => resume(k2, x, yes, no)); - var it = {}; - return generator = generator.apply(__this, __arguments), it[__knownSymbol("asyncIterator")] = () => it, method("next"), method("throw"), method("return"), it; - }; - var __yieldStar = (value) => { - var obj = value[__knownSymbol("asyncIterator")]; - var isAwait = false; - var method; - var it = {}; - if (obj == null) { - obj = value[__knownSymbol("iterator")](); - method = (k2) => it[k2] = (x) => obj[k2](x); - } else { - obj = obj.call(value); - method = (k2) => it[k2] = (v) => { - if (isAwait) { - isAwait = false; - if (k2 === "throw") - throw v; - return v; - } - isAwait = true; - return { - done: false, - value: new __await(new Promise((resolve2) => { - var x = obj[k2](v); - if (!(x instanceof Object)) - throw TypeError("Object expected"); - resolve2(x); - }), 1) - }; - }; - } - return it[__knownSymbol("iterator")] = () => it, method("next"), "throw" in obj ? method("throw") : it.throw = (x) => { - throw x; - }, "return" in obj && method("return"), it; - }; - var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")]) ? it.call(obj) : (obj = obj[__knownSymbol("iterator")](), it = {}, method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((yes, no, done) => (arg = fn.call(obj, arg), done = arg.done, Promise.resolve(arg.value).then((value) => yes({ value, done }), no)))), method("next"), method("return"), it); - var __toBinaryNode = (base64) => new Uint8Array(Buffer.from(base64, "base64")); +import {exportVariable, setSecret} from '@actions/core'; - // - var require_tunnel = __commonJS({ - ""(exports) { - "use strict"; - var net = __require("net"); - var tls = __require("tls"); - var http = __require("http"); - var https = __require("https"); - var events2 = __require("events"); - var assert = __require("assert"); - var util = __require("util"); - exports.httpOverHttp = httpOverHttp2; - exports.httpsOverHttp = httpsOverHttp2; - exports.httpOverHttps = httpOverHttps2; - exports.httpsOverHttps = httpsOverHttps2; - function httpOverHttp2(options) { - var agent = new TunnelingAgent(options); - agent.request = http.request; - return agent; - } - function httpsOverHttp2(options) { - var agent = new TunnelingAgent(options); - agent.request = http.request; - agent.createSocket = createSecureSocket; - agent.defaultPort = 443; - return agent; - } - function httpOverHttps2(options) { - var agent = new TunnelingAgent(options); - agent.request = https.request; - return agent; - } - function httpsOverHttps2(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 options2 = toOptions(host, port, localAddress); - for (var i = 0, len = self.requests.length; i < len; ++i) { - var pending = self.requests[i]; - if (pending.host === options2.host && pending.port === options2.port) { - self.requests.splice(i, 1); - pending.request.onSocket(socket); - return; - } - } - socket.destroy(); - self.removeSocket(socket); - }); - } - util.inherits(TunnelingAgent, events2.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) { - self.requests.push(options); - return; - } - 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"); - } - debug2("making CONNECT request"); - var connectReq = self.request(connectOptions); - connectReq.useChunkedEncodingByDefault = false; - connectReq.once("response", onResponse); - connectReq.once("upgrade", onUpgrade); - connectReq.once("connect", onConnect); - connectReq.once("error", onError); - connectReq.end(); - function onResponse(res) { - res.upgrade = true; - } - function onUpgrade(res, socket, head) { - process.nextTick(function() { - onConnect(res, socket, head); - }); - } - function onConnect(res, socket, head) { - connectReq.removeAllListeners(); - socket.removeAllListeners(); - if (res.statusCode !== 200) { - debug2( - "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) { - debug2("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; - } - debug2("tunneling connection has established"); - self.sockets[self.sockets.indexOf(placeholder)] = socket; - return cb(socket); - } - function onError(cause) { - connectReq.removeAllListeners(); - debug2( - "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) { - this.createSocket(pending, function(socket2) { - pending.request.onSocket(socket2); - }); - } - }; - 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, - servername: hostHeader ? hostHeader.replace(/:.*$/, "") : options.host - }); - var secureSocket = tls.connect(0, tlsOptions); - self.sockets[self.sockets.indexOf(socket)] = secureSocket; - cb(secureSocket); - }); - } - function toOptions(host, port, localAddress) { - if (typeof host === "string") { - return { - host, - port, - localAddress - }; - } - return host; - } - 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 k2 = keys[j]; - if (overrides[k2] !== void 0) { - target[k2] = overrides[k2]; - } - } - } - } - return target; - } - var debug2; - if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { - debug2 = 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 { - debug2 = function() { - }; - } - exports.debug = debug2; - } - }); +async function main() { + const username = process.env.BROWSER_STACK_USERNAME; + const accessKey = process.env.BROWSER_STACK_ACCESS_KEY; - // - var require_tunnel2 = __commonJS({ - ""(exports, module) { - module.exports = require_tunnel(); - } - }); - - // - var require_symbols = __commonJS({ - ""(exports, 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"), - 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"), - kBody: Symbol("abstracted request body"), - 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"), - kResume: Symbol("resume"), - kOnError: Symbol("on error"), - 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"), - kRetryHandlerDefaultRetry: Symbol("retry agent default retry"), - kConstruct: Symbol("constructable"), - kListeners: Symbol("listeners"), - kHTTPContext: Symbol("http context"), - kMaxConcurrentStreams: Symbol("max concurrent streams"), - kNoProxyAgent: Symbol("no proxy agent"), - kHttpProxyAgent: Symbol("http proxy agent"), - kHttpsProxyAgent: Symbol("https proxy agent") - }; - } - }); - - // - var require_errors = __commonJS({ - ""(exports, module) { - "use strict"; - var kUndiciError = Symbol.for("undici.error.UND_ERR"); - var _a; - var UndiciError = class extends Error { - constructor(message) { - super(message); - __publicField(this, _a, true); - this.name = "UndiciError"; - this.code = "UND_ERR"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kUndiciError] === true; - } - }; - _a = kUndiciError; - var kConnectTimeoutError = Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT"); - var _a2; - var ConnectTimeoutError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a2, true); - this.name = "ConnectTimeoutError"; - this.message = message || "Connect Timeout Error"; - this.code = "UND_ERR_CONNECT_TIMEOUT"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kConnectTimeoutError] === true; - } - }; - _a2 = kConnectTimeoutError; - var kHeadersTimeoutError = Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT"); - var _a3; - var HeadersTimeoutError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a3, true); - this.name = "HeadersTimeoutError"; - this.message = message || "Headers Timeout Error"; - this.code = "UND_ERR_HEADERS_TIMEOUT"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kHeadersTimeoutError] === true; - } - }; - _a3 = kHeadersTimeoutError; - var kHeadersOverflowError = Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW"); - var _a4; - var HeadersOverflowError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a4, true); - this.name = "HeadersOverflowError"; - this.message = message || "Headers Overflow Error"; - this.code = "UND_ERR_HEADERS_OVERFLOW"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kHeadersOverflowError] === true; - } - }; - _a4 = kHeadersOverflowError; - var kBodyTimeoutError = Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT"); - var _a5; - var BodyTimeoutError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a5, true); - this.name = "BodyTimeoutError"; - this.message = message || "Body Timeout Error"; - this.code = "UND_ERR_BODY_TIMEOUT"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kBodyTimeoutError] === true; - } - }; - _a5 = kBodyTimeoutError; - var kResponseStatusCodeError = Symbol.for("undici.error.UND_ERR_RESPONSE_STATUS_CODE"); - var _a6; - var ResponseStatusCodeError = class extends UndiciError { - constructor(message, statusCode, headers, body) { - super(message); - __publicField(this, _a6, true); - 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; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kResponseStatusCodeError] === true; - } - }; - _a6 = kResponseStatusCodeError; - var kInvalidArgumentError = Symbol.for("undici.error.UND_ERR_INVALID_ARG"); - var _a7; - var InvalidArgumentError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a7, true); - this.name = "InvalidArgumentError"; - this.message = message || "Invalid Argument Error"; - this.code = "UND_ERR_INVALID_ARG"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kInvalidArgumentError] === true; - } - }; - _a7 = kInvalidArgumentError; - var kInvalidReturnValueError = Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE"); - var _a8; - var InvalidReturnValueError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a8, true); - this.name = "InvalidReturnValueError"; - this.message = message || "Invalid Return Value Error"; - this.code = "UND_ERR_INVALID_RETURN_VALUE"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kInvalidReturnValueError] === true; - } - }; - _a8 = kInvalidReturnValueError; - var kAbortError = Symbol.for("undici.error.UND_ERR_ABORT"); - var _a9; - var AbortError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a9, true); - this.name = "AbortError"; - this.message = message || "The operation was aborted"; - this.code = "UND_ERR_ABORT"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kAbortError] === true; - } - }; - _a9 = kAbortError; - var kRequestAbortedError = Symbol.for("undici.error.UND_ERR_ABORTED"); - var _a10; - var RequestAbortedError = class extends AbortError { - constructor(message) { - super(message); - __publicField(this, _a10, true); - this.name = "AbortError"; - this.message = message || "Request aborted"; - this.code = "UND_ERR_ABORTED"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kRequestAbortedError] === true; - } - }; - _a10 = kRequestAbortedError; - var kInformationalError = Symbol.for("undici.error.UND_ERR_INFO"); - var _a11; - var InformationalError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a11, true); - this.name = "InformationalError"; - this.message = message || "Request information"; - this.code = "UND_ERR_INFO"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kInformationalError] === true; - } - }; - _a11 = kInformationalError; - var kRequestContentLengthMismatchError = Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"); - var _a12; - var RequestContentLengthMismatchError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a12, true); - this.name = "RequestContentLengthMismatchError"; - this.message = message || "Request body length does not match content-length header"; - this.code = "UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kRequestContentLengthMismatchError] === true; - } - }; - _a12 = kRequestContentLengthMismatchError; - var kResponseContentLengthMismatchError = Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH"); - var _a13; - var ResponseContentLengthMismatchError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a13, true); - this.name = "ResponseContentLengthMismatchError"; - this.message = message || "Response body length does not match content-length header"; - this.code = "UND_ERR_RES_CONTENT_LENGTH_MISMATCH"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kResponseContentLengthMismatchError] === true; - } - }; - _a13 = kResponseContentLengthMismatchError; - var kClientDestroyedError = Symbol.for("undici.error.UND_ERR_DESTROYED"); - var _a14; - var ClientDestroyedError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a14, true); - this.name = "ClientDestroyedError"; - this.message = message || "The client is destroyed"; - this.code = "UND_ERR_DESTROYED"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kClientDestroyedError] === true; - } - }; - _a14 = kClientDestroyedError; - var kClientClosedError = Symbol.for("undici.error.UND_ERR_CLOSED"); - var _a15; - var ClientClosedError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a15, true); - this.name = "ClientClosedError"; - this.message = message || "The client is closed"; - this.code = "UND_ERR_CLOSED"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kClientClosedError] === true; - } - }; - _a15 = kClientClosedError; - var kSocketError = Symbol.for("undici.error.UND_ERR_SOCKET"); - var _a16; - var SocketError = class extends UndiciError { - constructor(message, socket) { - super(message); - __publicField(this, _a16, true); - this.name = "SocketError"; - this.message = message || "Socket error"; - this.code = "UND_ERR_SOCKET"; - this.socket = socket; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kSocketError] === true; - } - }; - _a16 = kSocketError; - var kNotSupportedError = Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED"); - var _a17; - var NotSupportedError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a17, true); - this.name = "NotSupportedError"; - this.message = message || "Not supported error"; - this.code = "UND_ERR_NOT_SUPPORTED"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kNotSupportedError] === true; - } - }; - _a17 = kNotSupportedError; - var kBalancedPoolMissingUpstreamError = Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM"); - var _a18; - var BalancedPoolMissingUpstreamError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a18, true); - this.name = "MissingUpstreamError"; - this.message = message || "No upstream has been added to the BalancedPool"; - this.code = "UND_ERR_BPL_MISSING_UPSTREAM"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kBalancedPoolMissingUpstreamError] === true; - } - }; - _a18 = kBalancedPoolMissingUpstreamError; - var kHTTPParserError = Symbol.for("undici.error.UND_ERR_HTTP_PARSER"); - var _a19; - var HTTPParserError = class extends Error { - constructor(message, code, data) { - super(message); - __publicField(this, _a19, true); - this.name = "HTTPParserError"; - this.code = code ? `HPE_${code}` : void 0; - this.data = data ? data.toString() : void 0; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kHTTPParserError] === true; - } - }; - _a19 = kHTTPParserError; - var kResponseExceededMaxSizeError = Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE"); - var _a20; - var ResponseExceededMaxSizeError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a20, true); - this.name = "ResponseExceededMaxSizeError"; - this.message = message || "Response content exceeded max size"; - this.code = "UND_ERR_RES_EXCEEDED_MAX_SIZE"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kResponseExceededMaxSizeError] === true; - } - }; - _a20 = kResponseExceededMaxSizeError; - var kRequestRetryError = Symbol.for("undici.error.UND_ERR_REQ_RETRY"); - var _a21; - var RequestRetryError = class extends UndiciError { - constructor(message, code, { headers, data }) { - super(message); - __publicField(this, _a21, true); - this.name = "RequestRetryError"; - this.message = message || "Request retry error"; - this.code = "UND_ERR_REQ_RETRY"; - this.statusCode = code; - this.data = data; - this.headers = headers; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kRequestRetryError] === true; - } - }; - _a21 = kRequestRetryError; - var kResponseError = Symbol.for("undici.error.UND_ERR_RESPONSE"); - var _a22; - var ResponseError = class extends UndiciError { - constructor(message, code, { headers, data }) { - super(message); - __publicField(this, _a22, true); - this.name = "ResponseError"; - this.message = message || "Response error"; - this.code = "UND_ERR_RESPONSE"; - this.statusCode = code; - this.data = data; - this.headers = headers; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kResponseError] === true; - } - }; - _a22 = kResponseError; - var kSecureProxyConnectionError = Symbol.for("undici.error.UND_ERR_PRX_TLS"); - var _a23; - var SecureProxyConnectionError = class extends UndiciError { - constructor(cause, message, options) { - super(message, __spreadValues({ cause }, options != null ? options : {})); - __publicField(this, _a23, true); - this.name = "SecureProxyConnectionError"; - this.message = message || "Secure Proxy Connection failed"; - this.code = "UND_ERR_PRX_TLS"; - this.cause = cause; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kSecureProxyConnectionError] === true; - } - }; - _a23 = kSecureProxyConnectionError; - var kMessageSizeExceededError = Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"); - var MessageSizeExceededError = class extends UndiciError { - constructor(message) { - super(message); - this.name = "MessageSizeExceededError"; - this.message = message || "Max decompressed message size exceeded"; - this.code = "UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kMessageSizeExceededError] === true; - } - get [kMessageSizeExceededError]() { - return true; - } - }; - module.exports = { - AbortError, - HTTPParserError, - UndiciError, - HeadersTimeoutError, - HeadersOverflowError, - BodyTimeoutError, - RequestContentLengthMismatchError, - ConnectTimeoutError, - ResponseStatusCodeError, - InvalidArgumentError, - InvalidReturnValueError, - RequestAbortedError, - ClientDestroyedError, - ClientClosedError, - InformationalError, - SocketError, - NotSupportedError, - ResponseContentLengthMismatchError, - BalancedPoolMissingUpstreamError, - ResponseExceededMaxSizeError, - RequestRetryError, - ResponseError, - SecureProxyConnectionError, - MessageSizeExceededError - }; - } - }); - - // - var require_constants = __commonJS({ - ""(exports, module) { - "use strict"; - var headerNameLowerCasedRecord = {}; - var 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; - } - Object.setPrototypeOf(headerNameLowerCasedRecord, null); - module.exports = { - wellknownHeaderNames, - headerNameLowerCasedRecord - }; - } - }); - - // - var require_tree = __commonJS({ - ""(exports, module) { - "use strict"; - var { - wellknownHeaderNames, - headerNameLowerCasedRecord - } = require_constants(); - var TstNode = class _TstNode { - /** - * @param {string} key - * @param {any} value - * @param {number} index - */ - constructor(key, value, index) { - /** @type {any} */ - __publicField(this, "value", null); - /** @type {null | TstNode} */ - __publicField(this, "left", null); - /** @type {null | TstNode} */ - __publicField(this, "middle", null); - /** @type {null | TstNode} */ - __publicField(this, "right", null); - /** @type {number} */ - __publicField(this, "code"); - if (index === void 0 || index >= key.length) { - throw new TypeError("Unreachable"); - } - const code = this.code = key.charCodeAt(index); - if (code > 127) { - throw new TypeError("key must be ascii string"); - } - if (key.length !== ++index) { - this.middle = new _TstNode(key, value, index); - } else { - this.value = value; - } - } - /** - * @param {string} key - * @param {any} value - */ - add(key, value) { - const length = key.length; - if (length === 0) { - throw new TypeError("Unreachable"); - } - let index = 0; - let node = this; - while (true) { - const code = key.charCodeAt(index); - if (code > 127) { - throw new TypeError("key must be ascii string"); - } - if (node.code === code) { - if (length === ++index) { - node.value = value; - break; - } else if (node.middle !== null) { - node = node.middle; - } else { - node.middle = new _TstNode(key, value, index); - break; - } - } else if (node.code < code) { - if (node.left !== null) { - node = node.left; - } else { - node.left = new _TstNode(key, value, index); - break; - } - } else if (node.right !== null) { - node = node.right; - } else { - node.right = new _TstNode(key, value, index); - break; - } - } - } - /** - * @param {Uint8Array} key - * @return {TstNode | null} - */ - search(key) { - const keylength = key.length; - let index = 0; - let node = this; - while (node !== null && index < keylength) { - let code = key[index]; - if (code <= 90 && code >= 65) { - code |= 32; - } - while (node !== null) { - if (code === node.code) { - if (keylength === ++index) { - return node; - } - node = node.middle; - break; - } - node = node.code < code ? node.left : node.right; - } - } - return null; - } - }; - var TernarySearchTree = class { - constructor() { - /** @type {TstNode | null} */ - __publicField(this, "node", null); - } - /** - * @param {string} key - * @param {any} value - * */ - insert(key, value) { - if (this.node === null) { - this.node = new TstNode(key, value, 0); - } else { - this.node.add(key, value); - } - } - /** - * @param {Uint8Array} key - * @return {any} - */ - lookup(key) { - var _a, _b, _c; - return (_c = (_b = (_a = this.node) == null ? void 0 : _a.search(key)) == null ? void 0 : _b.value) != null ? _c : null; - } - }; - var tree = new TernarySearchTree(); - for (let i = 0; i < wellknownHeaderNames.length; ++i) { - const key = headerNameLowerCasedRecord[wellknownHeaderNames[i]]; - tree.insert(key, key); - } - module.exports = { - TernarySearchTree, - tree - }; - } - }); - - // - var require_util = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { kDestroyed, kBodyUsed, kListeners, kBody } = require_symbols(); - var { IncomingMessage } = __require("http"); - var stream = __require("stream"); - var net = __require("net"); - var { Blob: Blob2 } = __require("buffer"); - var nodeUtil = __require("util"); - var { stringify } = __require("querystring"); - var { EventEmitter: EE } = __require("events"); - var { InvalidArgumentError } = require_errors(); - var { headerNameLowerCasedRecord } = require_constants(); - var { tree } = require_tree(); - var [nodeMajor, nodeMinor] = process.versions.node.split(".").map((v) => Number(v)); - var BodyAsyncIterable = class { - constructor(body) { - this[kBody] = body; - this[kBodyUsed] = false; - } - [Symbol.asyncIterator]() { - return __asyncGenerator(this, null, function* () { - assert(!this[kBodyUsed], "disturbed"); - this[kBodyUsed] = true; - yield* __yieldStar(this[kBody]); - }); - } - }; - function wrapRequestBody(body) { - if (isStream(body)) { - if (bodyLength(body) === 0) { - body.on("data", function() { - assert(false); - }); - } - if (typeof body.readableDidRead !== "boolean") { - body[kBodyUsed] = false; - EE.prototype.on.call(body, "data", function() { - this[kBodyUsed] = true; - }); - } - return body; - } else if (body && typeof body.pipeTo === "function") { - return new BodyAsyncIterable(body); - } else if (body && typeof body !== "string" && !ArrayBuffer.isView(body) && isIterable(body)) { - return new BodyAsyncIterable(body); - } else { - return body; - } - } - function nop() { - } - function isStream(obj) { - return obj && typeof obj === "object" && typeof obj.pipe === "function" && typeof obj.on === "function"; - } - function isBlobLike(object) { - if (object === null) { - return false; - } else if (object instanceof Blob2) { - return true; - } else if (typeof object !== "object") { - return false; - } else { - const sTag = object[Symbol.toStringTag]; - return (sTag === "Blob" || sTag === "File") && ("stream" in object && typeof object.stream === "function" || "arrayBuffer" in object && typeof object.arrayBuffer === "function"); - } - } - 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 isValidPort(port) { - const value = parseInt(port, 10); - return value === Number(port) && value >= 0 && value <= 65535; - } - function isHttpOrHttpsPrefixed(value) { - return value != null && value[0] === "h" && value[1] === "t" && value[2] === "t" && value[3] === "p" && (value[4] === ":" || value[4] === "s" && value[5] === ":"); - } - function parseURL(url) { - if (typeof url === "string") { - url = new URL(url); - if (!isHttpOrHttpsPrefixed(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 (!(url instanceof URL)) { - if (url.port != null && url.port !== "" && isValidPort(url.port) === false) { - 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."); - } - if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) { - throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`."); - } - 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 path4 = url.path != null ? url.path : `${url.pathname || ""}${url.search || ""}`; - if (origin[origin.length - 1] === "/") { - origin = origin.slice(0, origin.length - 1); - } - if (path4 && path4[0] !== "/") { - path4 = `/${path4}`; - } - return new URL(`${origin}${path4}`); - } - if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) { - throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`."); - } - 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 idx2 = host.indexOf("]"); - assert(idx2 !== -1); - return host.substring(1, idx2); - } - const idx = host.indexOf(":"); - if (idx === -1) - return host; - return host.substring(0, idx); - } - function getServerName(host) { - if (!host) { - return null; - } - assert(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(body) { - var _a; - return body && !!(body.destroyed || body[kDestroyed] || ((_a = stream.isDestroyed) == null ? void 0 : _a.call(stream, body))); - } - function destroy(stream2, err) { - if (stream2 == null || !isStream(stream2) || isDestroyed(stream2)) { - return; - } - if (typeof stream2.destroy === "function") { - if (Object.getPrototypeOf(stream2).constructor === IncomingMessage) { - stream2.socket = null; - } - stream2.destroy(err); - } else if (err) { - queueMicrotask(() => { - stream2.emit("error", err); - }); - } - if (stream2.destroyed !== true) { - stream2[kDestroyed] = true; - } - } - var KEEPALIVE_TIMEOUT_EXPR = /timeout=(\d+)/; - function parseKeepAliveTimeout(val) { - const m = val.toString().match(KEEPALIVE_TIMEOUT_EXPR); - return m ? parseInt(m[1], 10) * 1e3 : null; - } - function headerNameToString(value) { - var _a, _b; - return typeof value === "string" ? (_a = headerNameLowerCasedRecord[value]) != null ? _a : value.toLowerCase() : (_b = tree.lookup(value)) != null ? _b : value.toString("latin1").toLowerCase(); - } - function bufferToLowerCasedHeaderName(value) { - var _a; - return (_a = tree.lookup(value)) != null ? _a : value.toString("latin1").toLowerCase(); - } - function parseHeaders(headers, obj) { - if (obj === void 0) - obj = {}; - for (let i = 0; i < headers.length; i += 2) { - const key = headerNameToString(headers[i]); - let val = obj[key]; - if (val) { - if (typeof val === "string") { - val = [val]; - obj[key] = val; - } - val.push(headers[i + 1].toString("utf8")); - } else { - const headersValue = headers[i + 1]; - if (typeof headersValue === "string") { - obj[key] = headersValue; - } else { - obj[key] = Array.isArray(headersValue) ? headersValue.map((x) => x.toString("utf8")) : headersValue.toString("utf8"); - } - } - } - 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 len = headers.length; - const ret = new Array(len); - let hasContentLength = false; - let contentDispositionIdx = -1; - let key; - let val; - let kLen = 0; - for (let n = 0; n < headers.length; n += 2) { - key = headers[n]; - val = headers[n + 1]; - typeof key !== "string" && (key = key.toString()); - typeof val !== "string" && (val = val.toString("utf8")); - kLen = key.length; - if (kLen === 14 && key[7] === "-" && (key === "content-length" || key.toLowerCase() === "content-length")) { - hasContentLength = true; - } else if (kLen === 19 && key[7] === "-" && (key === "content-disposition" || key.toLowerCase() === "content-disposition")) { - contentDispositionIdx = n + 1; - } - ret[n] = key; - ret[n + 1] = val; - } - if (hasContentLength && contentDispositionIdx !== -1) { - ret[contentDispositionIdx] = Buffer.from(ret[contentDispositionIdx]).toString("latin1"); - } - return ret; - } - function isBuffer(buffer) { - 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 !== void 0) { - 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"); - } - } - } - function isDisturbed(body) { - return !!(body && (stream.isDisturbed(body) || body[kBodyUsed])); - } - function isErrored(body) { - return !!(body && stream.isErrored(body)); - } - function isReadable(body) { - return !!(body && stream.isReadable(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 - }; - } - function ReadableStreamFrom(iterable) { - let iterator; - return new ReadableStream( - { - start() { - return __async(this, null, function* () { - iterator = iterable[Symbol.asyncIterator](); - }); - }, - pull(controller) { - return __async(this, null, function* () { - const { done, value } = yield iterator.next(); - if (done) { - queueMicrotask(() => { - var _a2; - controller.close(); - (_a2 = controller.byobRequest) == null ? void 0 : _a2.respond(0); - }); - } else { - const buf = Buffer.isBuffer(value) ? value : Buffer.from(value); - if (buf.byteLength) { - controller.enqueue(new Uint8Array(buf)); - } - } - return controller.desiredSize > 0; - }); - }, - cancel(reason) { - return __async(this, null, function* () { - yield iterator.return(); - }); - }, - type: "bytes" - } - ); - } - 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 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); - } - var hasToWellFormed = typeof String.prototype.toWellFormed === "function"; - var hasIsWellFormed = typeof String.prototype.isWellFormed === "function"; - function toUSVString(val) { - return hasToWellFormed ? `${val}`.toWellFormed() : nodeUtil.toUSVString(val); - } - function isUSVString(val) { - return hasIsWellFormed ? `${val}`.isWellFormed() : toUSVString(val) === `${val}`; - } - function isTokenCharCode(c) { - switch (c) { - case 34: - case 40: - case 41: - case 44: - case 47: - case 58: - case 59: - case 60: - case 61: - case 62: - case 63: - case 64: - case 91: - case 92: - case 93: - case 123: - case 125: - return false; - default: - return c >= 33 && c <= 126; - } - } - 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; - } - var headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/; - function isValidHeaderValue(characters) { - return !headerCharRegex.test(characters); - } - 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; - } - function addListener(obj, name, listener) { - var _a; - const listeners = (_a = obj[kListeners]) != null ? _a : obj[kListeners] = []; - listeners.push([name, listener]); - obj.on(name, listener); - return obj; - } - function removeAllListeners(obj) { - var _a; - for (const [name, listener] of (_a = obj[kListeners]) != null ? _a : []) { - obj.removeListener(name, listener); - } - obj[kListeners] = null; - } - function errorRequest(client, request, err) { - try { - request.onError(err); - assert(request.aborted); - } catch (err2) { - client.emit("error", err2); - } - } - var kEnumerableProperty = /* @__PURE__ */ Object.create(null); - kEnumerableProperty.enumerable = true; - var normalizedMethodRecordsBase = { - delete: "DELETE", - DELETE: "DELETE", - get: "GET", - GET: "GET", - head: "HEAD", - HEAD: "HEAD", - options: "OPTIONS", - OPTIONS: "OPTIONS", - post: "POST", - POST: "POST", - put: "PUT", - PUT: "PUT" - }; - var normalizedMethodRecords = __spreadProps(__spreadValues({}, normalizedMethodRecordsBase), { - patch: "patch", - PATCH: "PATCH" - }); - Object.setPrototypeOf(normalizedMethodRecordsBase, null); - Object.setPrototypeOf(normalizedMethodRecords, null); - module.exports = { - kEnumerableProperty, - nop, - isDisturbed, - isErrored, - isReadable, - toUSVString, - isUSVString, - isBlobLike, - parseOrigin, - parseURL, - getServerName, - isStream, - isIterable, - isAsyncIterable, - isDestroyed, - headerNameToString, - bufferToLowerCasedHeaderName, - addListener, - removeAllListeners, - errorRequest, - parseRawHeaders, - parseHeaders, - parseKeepAliveTimeout, - destroy, - bodyLength, - deepClone, - ReadableStreamFrom, - isBuffer, - validateHandler, - getSocketInfo, - isFormDataLike, - buildURL, - addAbortListener, - isValidHTTPToken, - isValidHeaderValue, - isTokenCharCode, - parseRangeHeader, - normalizedMethodRecordsBase, - normalizedMethodRecords, - isValidPort, - isHttpOrHttpsPrefixed, - nodeMajor, - nodeMinor, - safeHTTPMethods: ["GET", "HEAD", "OPTIONS", "TRACE"], - wrapRequestBody - }; - } - }); - - // - var require_diagnostics = __commonJS({ - ""(exports, module) { - "use strict"; - var diagnosticsChannel = __require("diagnostics_channel"); - var util = __require("util"); - var undiciDebugLog = util.debuglog("undici"); - var fetchDebuglog = util.debuglog("fetch"); - var websocketDebuglog = util.debuglog("websocket"); - var isClientSet = false; - var channels = { - // Client - beforeConnect: diagnosticsChannel.channel("undici:client:beforeConnect"), - connected: diagnosticsChannel.channel("undici:client:connected"), - connectError: diagnosticsChannel.channel("undici:client:connectError"), - sendHeaders: diagnosticsChannel.channel("undici:client:sendHeaders"), - // Request - create: diagnosticsChannel.channel("undici:request:create"), - bodySent: diagnosticsChannel.channel("undici:request:bodySent"), - headers: diagnosticsChannel.channel("undici:request:headers"), - trailers: diagnosticsChannel.channel("undici:request:trailers"), - error: diagnosticsChannel.channel("undici:request:error"), - // WebSocket - open: diagnosticsChannel.channel("undici:websocket:open"), - close: diagnosticsChannel.channel("undici:websocket:close"), - socketError: diagnosticsChannel.channel("undici:websocket:socket_error"), - ping: diagnosticsChannel.channel("undici:websocket:ping"), - pong: diagnosticsChannel.channel("undici:websocket:pong") - }; - if (undiciDebugLog.enabled || fetchDebuglog.enabled) { - const debuglog = fetchDebuglog.enabled ? fetchDebuglog : undiciDebugLog; - diagnosticsChannel.channel("undici:client:beforeConnect").subscribe((evt) => { - const { - connectParams: { version, protocol, port, host } - } = evt; - debuglog( - "connecting to %s using %s%s", - `${host}${port ? `:${port}` : ""}`, - protocol, - version - ); - }); - diagnosticsChannel.channel("undici:client:connected").subscribe((evt) => { - const { - connectParams: { version, protocol, port, host } - } = evt; - debuglog( - "connected to %s using %s%s", - `${host}${port ? `:${port}` : ""}`, - protocol, - version - ); - }); - diagnosticsChannel.channel("undici:client:connectError").subscribe((evt) => { - const { - connectParams: { version, protocol, port, host }, - error - } = evt; - debuglog( - "connection to %s using %s%s errored - %s", - `${host}${port ? `:${port}` : ""}`, - protocol, - version, - error.message - ); - }); - diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => { - const { - request: { method, path: path4, origin } - } = evt; - debuglog("sending request to %s %s/%s", method, origin, path4); - }); - diagnosticsChannel.channel("undici:request:headers").subscribe((evt) => { - const { - request: { method, path: path4, origin }, - response: { statusCode } - } = evt; - debuglog( - "received response to %s %s/%s - HTTP %d", - method, - origin, - path4, - statusCode - ); - }); - diagnosticsChannel.channel("undici:request:trailers").subscribe((evt) => { - const { - request: { method, path: path4, origin } - } = evt; - debuglog("trailers received from %s %s/%s", method, origin, path4); - }); - diagnosticsChannel.channel("undici:request:error").subscribe((evt) => { - const { - request: { method, path: path4, origin }, - error - } = evt; - debuglog( - "request to %s %s/%s errored - %s", - method, - origin, - path4, - error.message - ); - }); - isClientSet = true; - } - if (websocketDebuglog.enabled) { - if (!isClientSet) { - const debuglog = undiciDebugLog.enabled ? undiciDebugLog : websocketDebuglog; - diagnosticsChannel.channel("undici:client:beforeConnect").subscribe((evt) => { - const { - connectParams: { version, protocol, port, host } - } = evt; - debuglog( - "connecting to %s%s using %s%s", - host, - port ? `:${port}` : "", - protocol, - version - ); - }); - diagnosticsChannel.channel("undici:client:connected").subscribe((evt) => { - const { - connectParams: { version, protocol, port, host } - } = evt; - debuglog( - "connected to %s%s using %s%s", - host, - port ? `:${port}` : "", - protocol, - version - ); - }); - diagnosticsChannel.channel("undici:client:connectError").subscribe((evt) => { - const { - connectParams: { version, protocol, port, host }, - error - } = evt; - debuglog( - "connection to %s%s using %s%s errored - %s", - host, - port ? `:${port}` : "", - protocol, - version, - error.message - ); - }); - diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => { - const { - request: { method, path: path4, origin } - } = evt; - debuglog("sending request to %s %s/%s", method, origin, path4); - }); - } - diagnosticsChannel.channel("undici:websocket:open").subscribe((evt) => { - const { - address: { address, port } - } = evt; - websocketDebuglog("connection opened %s%s", address, port ? `:${port}` : ""); - }); - diagnosticsChannel.channel("undici:websocket:close").subscribe((evt) => { - const { websocket, code, reason } = evt; - websocketDebuglog( - "closed connection to %s - %s %s", - websocket.url, - code, - reason - ); - }); - diagnosticsChannel.channel("undici:websocket:socket_error").subscribe((err) => { - websocketDebuglog("connection errored - %s", err.message); - }); - diagnosticsChannel.channel("undici:websocket:ping").subscribe((evt) => { - websocketDebuglog("ping received"); - }); - diagnosticsChannel.channel("undici:websocket:pong").subscribe((evt) => { - websocketDebuglog("pong received"); - }); - } - module.exports = { - channels - }; - } - }); - - // - var require_request = __commonJS({ - ""(exports, module) { - "use strict"; - var { - InvalidArgumentError, - NotSupportedError - } = require_errors(); - var assert = __require("assert"); - var { - isValidHTTPToken, - isValidHeaderValue, - isStream, - destroy, - isBuffer, - isFormDataLike, - isIterable, - isBlobLike, - buildURL, - validateHandler, - getServerName, - normalizedMethodRecords - } = require_util(); - var { channels } = require_diagnostics(); - var { headerNameLowerCasedRecord } = require_constants(); - var invalidPathRegex = /[^\u0021-\u00ff]/; - var kHandler = Symbol("handler"); - var Request = class { - constructor(origin, { - path: path4, - method, - body, - headers, - query, - idempotent, - blocking, - upgrade, - headersTimeout, - bodyTimeout, - reset, - throwOnError, - expectContinue, - servername - }, handler) { - if (typeof path4 !== "string") { - throw new InvalidArgumentError("path must be a string"); - } else if (path4[0] !== "/" && !(path4.startsWith("http://") || path4.startsWith("https://")) && method !== "CONNECT") { - throw new InvalidArgumentError("path must be an absolute URL or start with a slash"); - } else if (invalidPathRegex.test(path4)) { - throw new InvalidArgumentError("invalid request path"); - } - if (typeof method !== "string") { - throw new InvalidArgumentError("method must be a string"); - } else if (normalizedMethodRecords[method] === void 0 && !isValidHTTPToken(method)) { - throw new InvalidArgumentError("invalid request method"); - } - if (upgrade && typeof upgrade !== "string") { - throw new InvalidArgumentError("upgrade must be a string"); - } - if (upgrade && !isValidHeaderValue(upgrade)) { - throw new InvalidArgumentError("invalid upgrade header"); - } - 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 (isStream(body)) { - this.body = body; - const rState = this.body._readableState; - if (!rState || !rState.autoDestroy) { - this.endHandler = function autoDestroy() { - 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 (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 (isFormDataLike(body) || isIterable(body) || 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 ? buildURL(path4, query) : path4; - 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 = []; - 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") { - if (headers[Symbol.iterator]) { - for (const header of headers) { - if (!Array.isArray(header) || header.length !== 2) { - throw new InvalidArgumentError("headers must be in key-value pair format"); - } - processHeader(this, header[0], header[1]); - } - } else { - const keys = Object.keys(headers); - for (let i = 0; i < keys.length; ++i) { - processHeader(this, keys[i], headers[keys[i]]); - } - } - } else if (headers != null) { - throw new InvalidArgumentError("headers must be an object or an array"); - } - validateHandler(handler, method, upgrade); - this.servername = servername || 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); - } - } - onResponseStarted() { - var _a, _b; - return (_b = (_a = this[kHandler]).onResponseStarted) == null ? void 0 : _b.call(_a); - } - 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) { - 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; - } - } - addHeader(key, value) { - processHeader(this, key, value); - return this; - } - }; - function processHeader(request, key, val) { - if (val && (typeof val === "object" && !Array.isArray(val))) { - throw new InvalidArgumentError(`invalid ${key} header`); - } else if (val === void 0) { - return; - } - let headerName = headerNameLowerCasedRecord[key]; - if (headerName === void 0) { - headerName = key.toLowerCase(); - if (headerNameLowerCasedRecord[headerName] === void 0 && !isValidHTTPToken(headerName)) { - throw new InvalidArgumentError("invalid header key"); - } - } - if (Array.isArray(val)) { - const arr = []; - for (let i = 0; i < val.length; i++) { - if (typeof val[i] === "string") { - if (!isValidHeaderValue(val[i])) { - throw new InvalidArgumentError(`invalid ${key} header`); - } - arr.push(val[i]); - } else if (val[i] === null) { - arr.push(""); - } else if (typeof val[i] === "object") { - throw new InvalidArgumentError(`invalid ${key} header`); - } else { - const str = `${val[i]}`; - if (!isValidHeaderValue(str)) { - throw new InvalidArgumentError(`invalid ${key} header`); - } - arr.push(str); - } - } - val = arr; - } else if (typeof val === "string") { - if (!isValidHeaderValue(val)) { - throw new InvalidArgumentError(`invalid ${key} header`); - } - } else if (val === null) { - val = ""; - } else { - val = `${val}`; - if (!isValidHeaderValue(val)) { - throw new InvalidArgumentError(`invalid ${key} header`); - } - } - if (headerName === "host") { - if (request.host !== null) { - throw new InvalidArgumentError("duplicate host header"); - } - if (typeof val !== "string") { - throw new InvalidArgumentError("invalid host header"); - } - request.host = val; - } else if (headerName === "content-length") { - if (request.contentLength !== null) { - throw new InvalidArgumentError("duplicate content-length header"); - } - request.contentLength = parseInt(val, 10); - if (!Number.isFinite(request.contentLength)) { - throw new InvalidArgumentError("invalid content-length header"); - } - } else if (request.contentType === null && headerName === "content-type") { - request.contentType = val; - request.headers.push(key, val); - } else if (headerName === "transfer-encoding" || headerName === "keep-alive" || headerName === "upgrade") { - throw new InvalidArgumentError(`invalid ${headerName} header`); - } else if (headerName === "connection") { - const value = typeof val === "string" ? val.toLowerCase() : null; - if (value !== "close" && value !== "keep-alive") { - throw new InvalidArgumentError("invalid connection header"); - } - if (value === "close") { - request.reset = true; - } - } else if (headerName === "expect") { - throw new NotSupportedError("expect header not supported"); - } else { - request.headers.push(key, val); - } - } - module.exports = Request; - } - }); - - // - var require_dispatcher = __commonJS({ - ""(exports, module) { - "use strict"; - var EventEmitter2 = __require("events"); - var Dispatcher = class extends EventEmitter2 { - dispatch() { - throw new Error("not implemented"); - } - close() { - throw new Error("not implemented"); - } - destroy() { - throw new Error("not implemented"); - } - compose(...args) { - const interceptors = Array.isArray(args[0]) ? args[0] : args; - let dispatch = this.dispatch.bind(this); - for (const interceptor of interceptors) { - if (interceptor == null) { - continue; - } - if (typeof interceptor !== "function") { - throw new TypeError(`invalid interceptor, expected function received ${typeof interceptor}`); - } - dispatch = interceptor(dispatch); - if (dispatch == null || typeof dispatch !== "function" || dispatch.length !== 2) { - throw new TypeError("invalid interceptor"); - } - } - return new ComposedDispatcher(this, dispatch); - } - }; - var _dispatcher, _dispatch; - var ComposedDispatcher = class extends Dispatcher { - constructor(dispatcher, dispatch) { - super(); - __privateAdd(this, _dispatcher, null); - __privateAdd(this, _dispatch, null); - __privateSet(this, _dispatcher, dispatcher); - __privateSet(this, _dispatch, dispatch); - } - dispatch(...args) { - __privateGet(this, _dispatch).call(this, ...args); - } - close(...args) { - return __privateGet(this, _dispatcher).close(...args); - } - destroy(...args) { - return __privateGet(this, _dispatcher).destroy(...args); - } - }; - _dispatcher = new WeakMap(); - _dispatch = new WeakMap(); - module.exports = Dispatcher; - } - }); - - // - var require_dispatcher_base = __commonJS({ - ""(exports, module) { - "use strict"; - var Dispatcher = require_dispatcher(); - var { - ClientDestroyedError, - ClientClosedError, - InvalidArgumentError - } = require_errors(); - var { kDestroy, kClose, kClosed, kDestroyed, kDispatch, kInterceptors } = require_symbols(); - var kOnDestroyed = Symbol("onDestroyed"); - var kOnClosed = Symbol("onClosed"); - var kInterceptedDispatch = Symbol("Intercepted Dispatch"); - var kWebSocketOptions = Symbol("webSocketOptions"); - var DispatcherBase = class extends Dispatcher { - constructor(opts) { - var _a; - super(); - this[kDestroyed] = false; - this[kOnDestroyed] = null; - this[kClosed] = false; - this[kOnClosed] = []; - this[kWebSocketOptions] = (_a = opts == null ? void 0 : opts.webSocket) != null ? _a : {}; - } - get webSocketOptions() { - var _a, _b; - return { - maxFragments: (_a = this[kWebSocketOptions].maxFragments) != null ? _a : 131072, - maxPayloadSize: (_b = this[kWebSocketOptions].maxPayloadSize) != null ? _b : 128 * 1024 * 1024 - }; - } - 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 === void 0) { - return new Promise((resolve2, reject) => { - this.close((err, data) => { - return err ? reject(err) : resolve2(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); - } - }; - this[kClose]().then(() => this.destroy()).then(() => { - queueMicrotask(onClosed); - }); - } - destroy(err, callback) { - if (typeof err === "function") { - callback = err; - err = null; - } - if (callback === void 0) { - return new Promise((resolve2, reject) => { - this.destroy(err, (err2, data) => { - return err2 ? ( - /* istanbul ignore next: should never error */ - reject(err2) - ) : resolve2(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); - } - }; - 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; - } - }); - - // - var require_timers = __commonJS({ - ""(exports, module) { - "use strict"; - var fastNow = 0; - var RESOLUTION_MS = 1e3; - var TICK_MS = (RESOLUTION_MS >> 1) - 1; - var fastNowTimeout; - var kFastTimer = Symbol("kFastTimer"); - var fastTimers = []; - var NOT_IN_LIST = -2; - var TO_BE_CLEARED = -1; - var PENDING = 0; - var ACTIVE = 1; - function onTick() { - fastNow += TICK_MS; - let idx = 0; - let len = fastTimers.length; - while (idx < len) { - const timer = fastTimers[idx]; - if (timer._state === PENDING) { - timer._idleStart = fastNow - TICK_MS; - timer._state = ACTIVE; - } else if (timer._state === ACTIVE && fastNow >= timer._idleStart + timer._idleTimeout) { - timer._state = TO_BE_CLEARED; - timer._idleStart = -1; - timer._onTimeout(timer._timerArg); - } - if (timer._state === TO_BE_CLEARED) { - timer._state = NOT_IN_LIST; - if (--len !== 0) { - fastTimers[idx] = fastTimers[len]; - } - } else { - ++idx; - } - } - fastTimers.length = len; - if (fastTimers.length !== 0) { - refreshTimeout(); - } - } - function refreshTimeout() { - if (fastNowTimeout) { - fastNowTimeout.refresh(); - } else { - clearTimeout(fastNowTimeout); - fastNowTimeout = setTimeout(onTick, TICK_MS); - if (fastNowTimeout.unref) { - fastNowTimeout.unref(); - } - } - } - var _a; - var FastTimer = class { - /** - * @constructor - * @param {Function} callback A function to be executed after the timer - * expires. - * @param {number} delay The time, in milliseconds that the timer should wait - * before the specified function or code is executed. - * @param {*} arg - */ - constructor(callback, delay, arg) { - __publicField(this, _a, true); - /** - * The state of the timer, which can be one of the following: - * - NOT_IN_LIST (-2) - * - TO_BE_CLEARED (-1) - * - PENDING (0) - * - ACTIVE (1) - * - * @type {-2|-1|0|1} - * @private - */ - __publicField(this, "_state", NOT_IN_LIST); - /** - * The number of milliseconds to wait before calling the callback. - * - * @type {number} - * @private - */ - __publicField(this, "_idleTimeout", -1); - /** - * The time in milliseconds when the timer was started. This value is used to - * calculate when the timer should expire. - * - * @type {number} - * @default -1 - * @private - */ - __publicField(this, "_idleStart", -1); - /** - * The function to be executed when the timer expires. - * @type {Function} - * @private - */ - __publicField(this, "_onTimeout"); - /** - * The argument to be passed to the callback when the timer expires. - * - * @type {*} - * @private - */ - __publicField(this, "_timerArg"); - this._onTimeout = callback; - this._idleTimeout = delay; - this._timerArg = arg; - this.refresh(); - } - /** - * Sets the timer's start time to the current time, and reschedules the timer - * to call its callback at the previously specified duration adjusted to the - * current time. - * Using this on a timer that has already called its callback will reactivate - * the timer. - * - * @returns {void} - */ - refresh() { - if (this._state === NOT_IN_LIST) { - fastTimers.push(this); - } - if (!fastNowTimeout || fastTimers.length === 1) { - refreshTimeout(); - } - this._state = PENDING; - } - /** - * The `clear` method cancels the timer, preventing it from executing. - * - * @returns {void} - * @private - */ - clear() { - this._state = TO_BE_CLEARED; - this._idleStart = -1; - } - }; - _a = kFastTimer; - module.exports = { - /** - * The setTimeout() method sets a timer which executes a function once the - * timer expires. - * @param {Function} callback A function to be executed after the timer - * expires. - * @param {number} delay The time, in milliseconds that the timer should - * wait before the specified function or code is executed. - * @param {*} [arg] An optional argument to be passed to the callback function - * when the timer expires. - * @returns {NodeJS.Timeout|FastTimer} - */ - setTimeout(callback, delay, arg) { - return delay <= RESOLUTION_MS ? setTimeout(callback, delay, arg) : new FastTimer(callback, delay, arg); - }, - /** - * The clearTimeout method cancels an instantiated Timer previously created - * by calling setTimeout. - * - * @param {NodeJS.Timeout|FastTimer} timeout - */ - clearTimeout(timeout) { - if (timeout[kFastTimer]) { - timeout.clear(); - } else { - clearTimeout(timeout); - } - }, - /** - * The setFastTimeout() method sets a fastTimer which executes a function once - * the timer expires. - * @param {Function} callback A function to be executed after the timer - * expires. - * @param {number} delay The time, in milliseconds that the timer should - * wait before the specified function or code is executed. - * @param {*} [arg] An optional argument to be passed to the callback function - * when the timer expires. - * @returns {FastTimer} - */ - setFastTimeout(callback, delay, arg) { - return new FastTimer(callback, delay, arg); - }, - /** - * The clearTimeout method cancels an instantiated FastTimer previously - * created by calling setFastTimeout. - * - * @param {FastTimer} timeout - */ - clearFastTimeout(timeout) { - timeout.clear(); - }, - /** - * The now method returns the value of the internal fast timer clock. - * - * @returns {number} - */ - now() { - return fastNow; - }, - /** - * Trigger the onTick function to process the fastTimers array. - * Exported for testing purposes only. - * Marking as deprecated to discourage any use outside of testing. - * @deprecated - * @param {number} [delay=0] The delay in milliseconds to add to the now value. - */ - tick(delay = 0) { - fastNow += delay - RESOLUTION_MS + 1; - onTick(); - onTick(); - }, - /** - * Reset FastTimers. - * Exported for testing purposes only. - * Marking as deprecated to discourage any use outside of testing. - * @deprecated - */ - reset() { - fastNow = 0; - fastTimers.length = 0; - clearTimeout(fastNowTimeout); - fastNowTimeout = null; - }, - /** - * Exporting for testing purposes only. - * Marking as deprecated to discourage any use outside of testing. - * @deprecated - */ - kFastTimer - }; - } - }); - - // - var require_connect = __commonJS({ - ""(exports, module) { - "use strict"; - var net = __require("net"); - var assert = __require("assert"); - var util = require_util(); - var { InvalidArgumentError, ConnectTimeoutError } = require_errors(); - var timers = require_timers(); - function noop() { - } - var tls; - var SessionCache; - if (global.FinalizationRegistry && !(process.env.NODE_V8_COVERAGE || process.env.UNDICI_NO_FG)) { - SessionCache = class WeakSessionCache { - constructor(maxCachedSessions) { - this._maxCachedSessions = maxCachedSessions; - this._sessionCache = /* @__PURE__ */ new Map(); - this._sessionRegistry = new global.FinalizationRegistry((key) => { - if (this._sessionCache.size < this._maxCachedSessions) { - return; - } - const ref = this._sessionCache.get(key); - if (ref !== void 0 && ref.deref() === void 0) { - 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 = /* @__PURE__ */ new Map(); - } - get(sessionKey) { - return this._sessionCache.get(sessionKey); - } - set(sessionKey, session) { - if (this._maxCachedSessions === 0) { - return; - } - if (this._sessionCache.size >= this._maxCachedSessions) { - const { value: oldestKey } = this._sessionCache.keys().next(); - this._sessionCache.delete(oldestKey); - } - this._sessionCache.set(sessionKey, session); - } - }; - } - function buildConnector(_a) { - var _b = _a, { allowH2, maxCachedSessions, socketPath, timeout, session: customSession } = _b, opts = __objRest(_b, ["allowH2", "maxCachedSessions", "socketPath", "timeout", "session"]); - if (maxCachedSessions != null && (!Number.isInteger(maxCachedSessions) || maxCachedSessions < 0)) { - throw new InvalidArgumentError("maxCachedSessions must be a positive integer or zero"); - } - const options = __spreadValues({ path: socketPath }, opts); - const sessionCache = new SessionCache(maxCachedSessions == null ? 100 : maxCachedSessions); - timeout = timeout == null ? 1e4 : 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 = __require("tls"); - } - servername = servername || options.servername || util.getServerName(host) || null; - const sessionKey = servername || hostname; - assert(sessionKey); - const session = customSession || sessionCache.get(sessionKey) || null; - port = port || 443; - socket = tls.connect(__spreadProps(__spreadValues({ - highWaterMark: 16384 - }, 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, - host: hostname - })); - socket.on("session", function(session2) { - sessionCache.set(sessionKey, session2); - }); - } else { - assert(!httpSocket, "httpSocket can only be sent on TLS update"); - port = port || 80; - socket = net.connect(__spreadProps(__spreadValues({ - highWaterMark: 64 * 1024 - }, options), { - localAddress, - port, - host: hostname - })); - } - if (options.keepAlive == null || options.keepAlive) { - const keepAliveInitialDelay = options.keepAliveInitialDelay === void 0 ? 6e4 : options.keepAliveInitialDelay; - socket.setKeepAlive(true, keepAliveInitialDelay); - } - const clearConnectTimeout = setupConnectTimeout(new WeakRef(socket), { timeout, hostname, port }); - socket.setNoDelay(true).once(protocol === "https:" ? "secureConnect" : "connect", function() { - queueMicrotask(clearConnectTimeout); - if (callback) { - const cb = callback; - callback = null; - cb(null, this); - } - }).on("error", function(err) { - queueMicrotask(clearConnectTimeout); - if (callback) { - const cb = callback; - callback = null; - cb(err); - } - }); - return socket; - }; - } - var setupConnectTimeout = process.platform === "win32" ? (socketWeakRef, opts) => { - if (!opts.timeout) { - return noop; - } - let s1 = null; - let s2 = null; - const fastTimer = timers.setFastTimeout(() => { - s1 = setImmediate(() => { - s2 = setImmediate(() => onConnectTimeout(socketWeakRef.deref(), opts)); - }); - }, opts.timeout); - return () => { - timers.clearFastTimeout(fastTimer); - clearImmediate(s1); - clearImmediate(s2); - }; - } : (socketWeakRef, opts) => { - if (!opts.timeout) { - return noop; - } - let s1 = null; - const fastTimer = timers.setFastTimeout(() => { - s1 = setImmediate(() => { - onConnectTimeout(socketWeakRef.deref(), opts); - }); - }, opts.timeout); - return () => { - timers.clearFastTimeout(fastTimer); - clearImmediate(s1); - }; - }; - function onConnectTimeout(socket, opts) { - if (socket == null) { - return; - } - let message = "Connect Timeout Error"; - if (Array.isArray(socket.autoSelectFamilyAttemptedAddresses)) { - message += ` (attempted addresses: ${socket.autoSelectFamilyAttemptedAddresses.join(", ")},`; - } else { - message += ` (attempted address: ${opts.hostname}:${opts.port},`; - } - message += ` timeout: ${opts.timeout}ms)`; - util.destroy(socket, new ConnectTimeoutError(message)); - } - module.exports = buildConnector; - } - }); - - // - var require_utils = __commonJS({ - ""(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; - } - }); - - // - var require_constants2 = __commonJS({ - ""(exports) { - "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; - var utils_1 = require_utils(); - var ERROR; - (function(ERROR2) { - ERROR2[ERROR2["OK"] = 0] = "OK"; - ERROR2[ERROR2["INTERNAL"] = 1] = "INTERNAL"; - ERROR2[ERROR2["STRICT"] = 2] = "STRICT"; - ERROR2[ERROR2["LF_EXPECTED"] = 3] = "LF_EXPECTED"; - ERROR2[ERROR2["UNEXPECTED_CONTENT_LENGTH"] = 4] = "UNEXPECTED_CONTENT_LENGTH"; - ERROR2[ERROR2["CLOSED_CONNECTION"] = 5] = "CLOSED_CONNECTION"; - ERROR2[ERROR2["INVALID_METHOD"] = 6] = "INVALID_METHOD"; - ERROR2[ERROR2["INVALID_URL"] = 7] = "INVALID_URL"; - ERROR2[ERROR2["INVALID_CONSTANT"] = 8] = "INVALID_CONSTANT"; - ERROR2[ERROR2["INVALID_VERSION"] = 9] = "INVALID_VERSION"; - ERROR2[ERROR2["INVALID_HEADER_TOKEN"] = 10] = "INVALID_HEADER_TOKEN"; - ERROR2[ERROR2["INVALID_CONTENT_LENGTH"] = 11] = "INVALID_CONTENT_LENGTH"; - ERROR2[ERROR2["INVALID_CHUNK_SIZE"] = 12] = "INVALID_CHUNK_SIZE"; - ERROR2[ERROR2["INVALID_STATUS"] = 13] = "INVALID_STATUS"; - ERROR2[ERROR2["INVALID_EOF_STATE"] = 14] = "INVALID_EOF_STATE"; - ERROR2[ERROR2["INVALID_TRANSFER_ENCODING"] = 15] = "INVALID_TRANSFER_ENCODING"; - ERROR2[ERROR2["CB_MESSAGE_BEGIN"] = 16] = "CB_MESSAGE_BEGIN"; - ERROR2[ERROR2["CB_HEADERS_COMPLETE"] = 17] = "CB_HEADERS_COMPLETE"; - ERROR2[ERROR2["CB_MESSAGE_COMPLETE"] = 18] = "CB_MESSAGE_COMPLETE"; - ERROR2[ERROR2["CB_CHUNK_HEADER"] = 19] = "CB_CHUNK_HEADER"; - ERROR2[ERROR2["CB_CHUNK_COMPLETE"] = 20] = "CB_CHUNK_COMPLETE"; - ERROR2[ERROR2["PAUSED"] = 21] = "PAUSED"; - ERROR2[ERROR2["PAUSED_UPGRADE"] = 22] = "PAUSED_UPGRADE"; - ERROR2[ERROR2["PAUSED_H2_UPGRADE"] = 23] = "PAUSED_H2_UPGRADE"; - ERROR2[ERROR2["USER"] = 24] = "USER"; - })(ERROR = exports.ERROR || (exports.ERROR = {})); - var TYPE; - (function(TYPE2) { - TYPE2[TYPE2["BOTH"] = 0] = "BOTH"; - TYPE2[TYPE2["REQUEST"] = 1] = "REQUEST"; - TYPE2[TYPE2["RESPONSE"] = 2] = "RESPONSE"; - })(TYPE = exports.TYPE || (exports.TYPE = {})); - var FLAGS; - (function(FLAGS2) { - FLAGS2[FLAGS2["CONNECTION_KEEP_ALIVE"] = 1] = "CONNECTION_KEEP_ALIVE"; - FLAGS2[FLAGS2["CONNECTION_CLOSE"] = 2] = "CONNECTION_CLOSE"; - FLAGS2[FLAGS2["CONNECTION_UPGRADE"] = 4] = "CONNECTION_UPGRADE"; - FLAGS2[FLAGS2["CHUNKED"] = 8] = "CHUNKED"; - FLAGS2[FLAGS2["UPGRADE"] = 16] = "UPGRADE"; - FLAGS2[FLAGS2["CONTENT_LENGTH"] = 32] = "CONTENT_LENGTH"; - FLAGS2[FLAGS2["SKIPBODY"] = 64] = "SKIPBODY"; - FLAGS2[FLAGS2["TRAILING"] = 128] = "TRAILING"; - FLAGS2[FLAGS2["TRANSFER_ENCODING"] = 512] = "TRANSFER_ENCODING"; - })(FLAGS = exports.FLAGS || (exports.FLAGS = {})); - var LENIENT_FLAGS; - (function(LENIENT_FLAGS2) { - LENIENT_FLAGS2[LENIENT_FLAGS2["HEADERS"] = 1] = "HEADERS"; - LENIENT_FLAGS2[LENIENT_FLAGS2["CHUNKED_LENGTH"] = 2] = "CHUNKED_LENGTH"; - LENIENT_FLAGS2[LENIENT_FLAGS2["KEEP_ALIVE"] = 4] = "KEEP_ALIVE"; - })(LENIENT_FLAGS = exports.LENIENT_FLAGS || (exports.LENIENT_FLAGS = {})); - var METHODS; - (function(METHODS2) { - METHODS2[METHODS2["DELETE"] = 0] = "DELETE"; - METHODS2[METHODS2["GET"] = 1] = "GET"; - METHODS2[METHODS2["HEAD"] = 2] = "HEAD"; - METHODS2[METHODS2["POST"] = 3] = "POST"; - METHODS2[METHODS2["PUT"] = 4] = "PUT"; - METHODS2[METHODS2["CONNECT"] = 5] = "CONNECT"; - METHODS2[METHODS2["OPTIONS"] = 6] = "OPTIONS"; - METHODS2[METHODS2["TRACE"] = 7] = "TRACE"; - METHODS2[METHODS2["COPY"] = 8] = "COPY"; - METHODS2[METHODS2["LOCK"] = 9] = "LOCK"; - METHODS2[METHODS2["MKCOL"] = 10] = "MKCOL"; - METHODS2[METHODS2["MOVE"] = 11] = "MOVE"; - METHODS2[METHODS2["PROPFIND"] = 12] = "PROPFIND"; - METHODS2[METHODS2["PROPPATCH"] = 13] = "PROPPATCH"; - METHODS2[METHODS2["SEARCH"] = 14] = "SEARCH"; - METHODS2[METHODS2["UNLOCK"] = 15] = "UNLOCK"; - METHODS2[METHODS2["BIND"] = 16] = "BIND"; - METHODS2[METHODS2["REBIND"] = 17] = "REBIND"; - METHODS2[METHODS2["UNBIND"] = 18] = "UNBIND"; - METHODS2[METHODS2["ACL"] = 19] = "ACL"; - METHODS2[METHODS2["REPORT"] = 20] = "REPORT"; - METHODS2[METHODS2["MKACTIVITY"] = 21] = "MKACTIVITY"; - METHODS2[METHODS2["CHECKOUT"] = 22] = "CHECKOUT"; - METHODS2[METHODS2["MERGE"] = 23] = "MERGE"; - METHODS2[METHODS2["M-SEARCH"] = 24] = "M-SEARCH"; - METHODS2[METHODS2["NOTIFY"] = 25] = "NOTIFY"; - METHODS2[METHODS2["SUBSCRIBE"] = 26] = "SUBSCRIBE"; - METHODS2[METHODS2["UNSUBSCRIBE"] = 27] = "UNSUBSCRIBE"; - METHODS2[METHODS2["PATCH"] = 28] = "PATCH"; - METHODS2[METHODS2["PURGE"] = 29] = "PURGE"; - METHODS2[METHODS2["MKCALENDAR"] = 30] = "MKCALENDAR"; - METHODS2[METHODS2["LINK"] = 31] = "LINK"; - METHODS2[METHODS2["UNLINK"] = 32] = "UNLINK"; - METHODS2[METHODS2["SOURCE"] = 33] = "SOURCE"; - METHODS2[METHODS2["PRI"] = 34] = "PRI"; - METHODS2[METHODS2["DESCRIBE"] = 35] = "DESCRIBE"; - METHODS2[METHODS2["ANNOUNCE"] = 36] = "ANNOUNCE"; - METHODS2[METHODS2["SETUP"] = 37] = "SETUP"; - METHODS2[METHODS2["PLAY"] = 38] = "PLAY"; - METHODS2[METHODS2["PAUSE"] = 39] = "PAUSE"; - METHODS2[METHODS2["TEARDOWN"] = 40] = "TEARDOWN"; - METHODS2[METHODS2["GET_PARAMETER"] = 41] = "GET_PARAMETER"; - METHODS2[METHODS2["SET_PARAMETER"] = 42] = "SET_PARAMETER"; - METHODS2[METHODS2["REDIRECT"] = 43] = "REDIRECT"; - METHODS2[METHODS2["RECORD"] = 44] = "RECORD"; - METHODS2[METHODS2["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(FINISH2) { - FINISH2[FINISH2["SAFE"] = 0] = "SAFE"; - FINISH2[FINISH2["SAFE_WITH_CB"] = 1] = "SAFE_WITH_CB"; - FINISH2[FINISH2["UNSAFE"] = 2] = "UNSAFE"; - })(FINISH = exports.FINISH || (exports.FINISH = {})); - exports.ALPHA = []; - for (let i = "A".charCodeAt(0); i <= "Z".charCodeAt(0); i++) { - exports.ALPHA.push(String.fromCharCode(i)); - exports.ALPHA.push(String.fromCharCode(i + 32)); - } - 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: 10, - B: 11, - C: 12, - D: 13, - E: 14, - F: 15, - a: 10, - b: 11, - c: 12, - d: 13, - e: 14, - f: 15 - }; - 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(["%", ";", ":", "&", "=", "+", "$", ","]); - exports.STRICT_URL_CHAR = [ - "!", - '"', - "$", - "%", - "&", - "'", - "(", - ")", - "*", - "+", - ",", - "-", - ".", - "/", - ":", - ";", - "<", - "=", - ">", - "@", - "[", - "\\", - "]", - "^", - "_", - "`", - "{", - "|", - "}", - "~" - ].concat(exports.ALPHANUM); - exports.URL_CHAR = exports.STRICT_URL_CHAR.concat([" ", "\f"]); - for (let i = 128; i <= 255; i++) { - exports.URL_CHAR.push(i); - } - exports.HEX = exports.NUM.concat(["a", "b", "c", "d", "e", "f", "A", "B", "C", "D", "E", "F"]); - exports.STRICT_TOKEN = [ - "!", - "#", - "$", - "%", - "&", - "'", - "*", - "+", - "-", - ".", - "^", - "_", - "`", - "|", - "~" - ].concat(exports.ALPHANUM); - exports.TOKEN = exports.STRICT_TOKEN.concat([" "]); - exports.HEADER_CHARS = [" "]; - for (let i = 32; i <= 255; i++) { - if (i !== 127) { - exports.HEADER_CHARS.push(i); - } - } - 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_STATE2) { - HEADER_STATE2[HEADER_STATE2["GENERAL"] = 0] = "GENERAL"; - HEADER_STATE2[HEADER_STATE2["CONNECTION"] = 1] = "CONNECTION"; - HEADER_STATE2[HEADER_STATE2["CONTENT_LENGTH"] = 2] = "CONTENT_LENGTH"; - HEADER_STATE2[HEADER_STATE2["TRANSFER_ENCODING"] = 3] = "TRANSFER_ENCODING"; - HEADER_STATE2[HEADER_STATE2["UPGRADE"] = 4] = "UPGRADE"; - HEADER_STATE2[HEADER_STATE2["CONNECTION_KEEP_ALIVE"] = 5] = "CONNECTION_KEEP_ALIVE"; - HEADER_STATE2[HEADER_STATE2["CONNECTION_CLOSE"] = 6] = "CONNECTION_CLOSE"; - HEADER_STATE2[HEADER_STATE2["CONNECTION_UPGRADE"] = 7] = "CONNECTION_UPGRADE"; - HEADER_STATE2[HEADER_STATE2["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 - }; - } - }); - - // - var require_llhttp_wasm = __commonJS({ - ""(exports, module) { - "use strict"; - var { Buffer: Buffer2 } = __require("buffer"); - module.exports = Buffer2.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv", "base64"); - } - }); - - // - var require_llhttp_simd_wasm = __commonJS({ - ""(exports, module) { - "use strict"; - var { Buffer: Buffer2 } = __require("buffer"); - module.exports = Buffer2.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==", "base64"); - } - }); - - // - var require_constants3 = __commonJS({ - ""(exports, module) { - "use strict"; - var corsSafeListedMethods = ( - /** @type {const} */ - ["GET", "HEAD", "POST"] - ); - var corsSafeListedMethodsSet = new Set(corsSafeListedMethods); - var nullBodyStatus = ( - /** @type {const} */ - [101, 204, 205, 304] - ); - var redirectStatus = ( - /** @type {const} */ - [301, 302, 303, 307, 308] - ); - var redirectStatusSet = new Set(redirectStatus); - var badPorts = ( - /** @type {const} */ - [ - "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", - "4190", - "5060", - "5061", - "6000", - "6566", - "6665", - "6666", - "6667", - "6668", - "6669", - "6679", - "6697", - "10080" - ] - ); - var badPortsSet = new Set(badPorts); - var referrerPolicy = ( - /** @type {const} */ - [ - "", - "no-referrer", - "no-referrer-when-downgrade", - "same-origin", - "origin", - "strict-origin", - "origin-when-cross-origin", - "strict-origin-when-cross-origin", - "unsafe-url" - ] - ); - var referrerPolicySet = new Set(referrerPolicy); - var requestRedirect = ( - /** @type {const} */ - ["follow", "manual", "error"] - ); - var safeMethods = ( - /** @type {const} */ - ["GET", "HEAD", "OPTIONS", "TRACE"] - ); - var safeMethodsSet = new Set(safeMethods); - var requestMode = ( - /** @type {const} */ - ["navigate", "same-origin", "no-cors", "cors"] - ); - var requestCredentials = ( - /** @type {const} */ - ["omit", "same-origin", "include"] - ); - var requestCache = ( - /** @type {const} */ - [ - "default", - "no-store", - "reload", - "no-cache", - "force-cache", - "only-if-cached" - ] - ); - var requestBodyHeader = ( - /** @type {const} */ - [ - "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" - ] - ); - var requestDuplex = ( - /** @type {const} */ - [ - "half" - ] - ); - var forbiddenMethods = ( - /** @type {const} */ - ["CONNECT", "TRACE", "TRACK"] - ); - var forbiddenMethodsSet = new Set(forbiddenMethods); - var subresource = ( - /** @type {const} */ - [ - "audio", - "audioworklet", - "font", - "image", - "manifest", - "paintworklet", - "script", - "style", - "track", - "video", - "xslt", - "" - ] - ); - var subresourceSet = new Set(subresource); - module.exports = { - subresource, - forbiddenMethods, - requestBodyHeader, - referrerPolicy, - requestRedirect, - requestMode, - requestCredentials, - requestCache, - redirectStatus, - corsSafeListedMethods, - nullBodyStatus, - safeMethods, - badPorts, - requestDuplex, - subresourceSet, - badPortsSet, - redirectStatusSet, - corsSafeListedMethodsSet, - safeMethodsSet, - forbiddenMethodsSet, - referrerPolicySet - }; - } - }); - - // - var require_global = __commonJS({ - ""(exports, module) { - "use strict"; - var globalOrigin = Symbol.for("undici.globalOrigin.1"); - function getGlobalOrigin() { - return globalThis[globalOrigin]; - } - function setGlobalOrigin(newOrigin) { - if (newOrigin === void 0) { - Object.defineProperty(globalThis, globalOrigin, { - value: void 0, - 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 - }; - } - }); - - // - var require_data_url = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var encoder = new TextEncoder(); - var HTTP_TOKEN_CODEPOINTS = /^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/; - var HTTP_WHITESPACE_REGEX = /[\u000A\u000D\u0009\u0020]/; - var ASCII_WHITESPACE_REPLACE_REGEX = /[\u0009\u000A\u000C\u000D\u0020]/g; - var HTTP_QUOTED_STRING_TOKENS = /^[\u0009\u0020-\u007E\u0080-\u00FF]+$/; - function dataURLProcessor(dataURL) { - assert(dataURL.protocol === "data:"); - let input = URLSerializer(dataURL, true); - input = input.slice(5); - const position = { position: 0 }; - let mimeType = collectASequenceOfCodePointsFast( - ",", - input, - position - ); - const mimeTypeLength = mimeType.length; - mimeType = removeASCIIWhitespace(mimeType, true, true); - if (position.position >= input.length) { - return "failure"; - } - position.position++; - const encodedBody = input.slice(mimeTypeLength + 1); - let body = stringPercentDecode(encodedBody); - if (/;(\u0020){0,}base64$/i.test(mimeType)) { - const stringBody = isomorphicDecode(body); - body = forgivingBase64(stringBody); - if (body === "failure") { - return "failure"; - } - mimeType = mimeType.slice(0, -6); - mimeType = mimeType.replace(/(\u0020)+$/, ""); - mimeType = mimeType.slice(0, -1); - } - if (mimeType.startsWith(";")) { - mimeType = "text/plain" + mimeType; - } - let mimeTypeRecord = parseMIMEType(mimeType); - if (mimeTypeRecord === "failure") { - mimeTypeRecord = parseMIMEType("text/plain;charset=US-ASCII"); - } - return { mimeType: mimeTypeRecord, body }; - } - function URLSerializer(url, excludeFragment = false) { - if (!excludeFragment) { - return url.href; - } - const href = url.href; - const hashLength = url.hash.length; - const serialized = hashLength === 0 ? href : href.substring(0, href.length - hashLength); - if (!hashLength && href.endsWith("#")) { - return serialized.slice(0, -1); - } - return serialized; - } - function collectASequenceOfCodePoints(condition, input, position) { - let result = ""; - while (position.position < input.length && condition(input[position.position])) { - result += input[position.position]; - position.position++; - } - return result; - } - 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); - } - function stringPercentDecode(input) { - const bytes = encoder.encode(input); - return percentDecode(bytes); - } - function isHexCharByte(byte) { - return byte >= 48 && byte <= 57 || byte >= 65 && byte <= 70 || byte >= 97 && byte <= 102; - } - function hexByteToNumber(byte) { - return ( - // 0-9 - byte >= 48 && byte <= 57 ? byte - 48 : (byte & 223) - 55 - ); - } - function percentDecode(input) { - const length = input.length; - const output = new Uint8Array(length); - let j = 0; - for (let i = 0; i < length; ++i) { - const byte = input[i]; - if (byte !== 37) { - output[j++] = byte; - } else if (byte === 37 && !(isHexCharByte(input[i + 1]) && isHexCharByte(input[i + 2]))) { - output[j++] = 37; - } else { - output[j++] = hexByteToNumber(input[i + 1]) << 4 | hexByteToNumber(input[i + 2]); - i += 2; - } - } - return length === j ? output : output.subarray(0, j); - } - function parseMIMEType(input) { - input = removeHTTPWhitespace(input, true, true); - const position = { position: 0 }; - const type = collectASequenceOfCodePointsFast( - "/", - input, - position - ); - if (type.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(type)) { - return "failure"; - } - if (position.position > input.length) { - return "failure"; - } - position.position++; - let subtype = collectASequenceOfCodePointsFast( - ";", - input, - position - ); - subtype = removeHTTPWhitespace(subtype, false, true); - if (subtype.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(subtype)) { - return "failure"; - } - const typeLowercase = type.toLowerCase(); - const subtypeLowercase = subtype.toLowerCase(); - const mimeType = { - type: typeLowercase, - subtype: subtypeLowercase, - /** @type {Map} */ - parameters: /* @__PURE__ */ new Map(), - // https://mimesniff.spec.whatwg.org/#mime-type-essence - essence: `${typeLowercase}/${subtypeLowercase}` - }; - while (position.position < input.length) { - position.position++; - collectASequenceOfCodePoints( - // https://fetch.spec.whatwg.org/#http-whitespace - (char) => HTTP_WHITESPACE_REGEX.test(char), - input, - position - ); - let parameterName = collectASequenceOfCodePoints( - (char) => char !== ";" && char !== "=", - input, - position - ); - parameterName = parameterName.toLowerCase(); - if (position.position < input.length) { - if (input[position.position] === ";") { - continue; - } - position.position++; - } - if (position.position > input.length) { - break; - } - let parameterValue = null; - if (input[position.position] === '"') { - parameterValue = collectAnHTTPQuotedString(input, position, true); - collectASequenceOfCodePointsFast( - ";", - input, - position - ); - } else { - parameterValue = collectASequenceOfCodePointsFast( - ";", - input, - position - ); - parameterValue = removeHTTPWhitespace(parameterValue, false, true); - if (parameterValue.length === 0) { - continue; - } - } - 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); - } - } - return mimeType; - } - function forgivingBase64(data) { - data = data.replace(ASCII_WHITESPACE_REPLACE_REGEX, ""); - let dataLength = data.length; - if (dataLength % 4 === 0) { - if (data.charCodeAt(dataLength - 1) === 61) { - --dataLength; - if (data.charCodeAt(dataLength - 1) === 61) { - --dataLength; - } - } - } - if (dataLength % 4 === 1) { - return "failure"; - } - if (/[^+/0-9A-Za-z]/.test(data.length === dataLength ? data : data.substring(0, dataLength))) { - return "failure"; - } - const buffer = Buffer.from(data, "base64"); - return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength); - } - function collectAnHTTPQuotedString(input, position, extractValue) { - const positionStart = position.position; - let value = ""; - assert(input[position.position] === '"'); - position.position++; - while (true) { - value += collectASequenceOfCodePoints( - (char) => char !== '"' && char !== "\\", - input, - position - ); - if (position.position >= input.length) { - break; - } - const quoteOrBackslash = input[position.position]; - position.position++; - if (quoteOrBackslash === "\\") { - if (position.position >= input.length) { - value += "\\"; - break; - } - value += input[position.position]; - position.position++; - } else { - assert(quoteOrBackslash === '"'); - break; - } - } - if (extractValue) { - return value; - } - return input.slice(positionStart, position.position); - } - function serializeAMimeType(mimeType) { - assert(mimeType !== "failure"); - const { parameters, essence } = mimeType; - let serialization = essence; - for (let [name, value] of parameters.entries()) { - serialization += ";"; - serialization += name; - serialization += "="; - if (!HTTP_TOKEN_CODEPOINTS.test(value)) { - value = value.replace(/(\\|")/g, "\\$1"); - value = '"' + value; - value += '"'; - } - serialization += value; - } - return serialization; - } - function isHTTPWhiteSpace(char) { - return char === 13 || char === 10 || char === 9 || char === 32; - } - function removeHTTPWhitespace(str, leading = true, trailing = true) { - return removeChars(str, leading, trailing, isHTTPWhiteSpace); - } - function isASCIIWhitespace(char) { - return char === 13 || char === 10 || char === 9 || char === 12 || char === 32; - } - function removeASCIIWhitespace(str, leading = true, trailing = true) { - return removeChars(str, leading, trailing, isASCIIWhitespace); - } - function removeChars(str, leading, trailing, predicate) { - let lead = 0; - let trail = str.length - 1; - if (leading) { - while (lead < str.length && predicate(str.charCodeAt(lead))) - lead++; - } - if (trailing) { - while (trail > 0 && predicate(str.charCodeAt(trail))) - trail--; - } - return lead === 0 && trail === str.length - 1 ? str : str.slice(lead, trail + 1); - } - function isomorphicDecode(input) { - const length = input.length; - if ((2 << 15) - 1 > length) { - return String.fromCharCode.apply(null, input); - } - let result = ""; - let i = 0; - let addition = (2 << 15) - 1; - while (i < length) { - if (i + addition > length) { - addition = length - i; - } - result += String.fromCharCode.apply(null, input.subarray(i, i += addition)); - } - return result; - } - function minimizeSupportedMimeType(mimeType) { - switch (mimeType.essence) { - case "application/ecmascript": - case "application/javascript": - case "application/x-ecmascript": - case "application/x-javascript": - case "text/ecmascript": - case "text/javascript": - case "text/javascript1.0": - case "text/javascript1.1": - case "text/javascript1.2": - case "text/javascript1.3": - case "text/javascript1.4": - case "text/javascript1.5": - case "text/jscript": - case "text/livescript": - case "text/x-ecmascript": - case "text/x-javascript": - return "text/javascript"; - case "application/json": - case "text/json": - return "application/json"; - case "image/svg+xml": - return "image/svg+xml"; - case "text/xml": - case "application/xml": - return "application/xml"; - } - if (mimeType.subtype.endsWith("+json")) { - return "application/json"; - } - if (mimeType.subtype.endsWith("+xml")) { - return "application/xml"; - } - return ""; - } - module.exports = { - dataURLProcessor, - URLSerializer, - collectASequenceOfCodePoints, - collectASequenceOfCodePointsFast, - stringPercentDecode, - parseMIMEType, - collectAnHTTPQuotedString, - serializeAMimeType, - removeChars, - removeHTTPWhitespace, - minimizeSupportedMimeType, - HTTP_TOKEN_CODEPOINTS, - isomorphicDecode - }; - } - }); - - // - var require_webidl = __commonJS({ - ""(exports, module) { - "use strict"; - var { types, inspect } = __require("util"); - var { markAsUncloneable } = __require("worker_threads"); - var { toUSVString } = require_util(); - var 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}.` - }); - }; - webidl.brandCheck = function(V, I, opts) { - if ((opts == null ? void 0 : opts.strict) !== false) { - if (!(V instanceof I)) { - const err = new TypeError("Illegal invocation"); - err.code = "ERR_INVALID_THIS"; - throw err; - } - } else { - if ((V == null ? void 0 : V[Symbol.toStringTag]) !== I.prototype[Symbol.toStringTag]) { - const err = new TypeError("Illegal invocation"); - err.code = "ERR_INVALID_THIS"; - throw err; - } - } - }; - 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.`, - header: ctx - }); - } - }; - webidl.illegalConstructor = function() { - throw webidl.errors.exception({ - header: "TypeError", - message: "Illegal constructor" - }); - }; - 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"; - } - } - }; - webidl.util.markAsUncloneable = markAsUncloneable || (() => { - }); - webidl.util.ConvertToInt = function(V, bitLength, signedness, opts) { - let upperBound; - let lowerBound; - if (bitLength === 64) { - upperBound = Math.pow(2, 53) - 1; - if (signedness === "unsigned") { - lowerBound = 0; - } else { - lowerBound = Math.pow(-2, 53) + 1; - } - } else if (signedness === "unsigned") { - lowerBound = 0; - upperBound = Math.pow(2, bitLength) - 1; - } else { - lowerBound = Math.pow(-2, bitLength) - 1; - upperBound = Math.pow(2, bitLength - 1) - 1; - } - let x = Number(V); - if (x === 0) { - x = 0; - } - if ((opts == null ? void 0 : opts.enforceRange) === true) { - if (Number.isNaN(x) || x === Number.POSITIVE_INFINITY || x === Number.NEGATIVE_INFINITY) { - throw webidl.errors.exception({ - header: "Integer conversion", - message: `Could not convert ${webidl.util.Stringify(V)} to an integer.` - }); - } - x = webidl.util.IntegerPart(x); - if (x < lowerBound || x > upperBound) { - throw webidl.errors.exception({ - header: "Integer conversion", - message: `Value must be between ${lowerBound}-${upperBound}, got ${x}.` - }); - } - return x; - } - if (!Number.isNaN(x) && (opts == null ? void 0 : opts.clamp) === true) { - x = Math.min(Math.max(x, lowerBound), upperBound); - if (Math.floor(x) % 2 === 0) { - x = Math.floor(x); - } else { - x = Math.ceil(x); - } - return x; - } - if (Number.isNaN(x) || x === 0 && Object.is(0, x) || x === Number.POSITIVE_INFINITY || x === Number.NEGATIVE_INFINITY) { - return 0; - } - x = webidl.util.IntegerPart(x); - x = x % Math.pow(2, bitLength); - if (signedness === "signed" && x >= Math.pow(2, bitLength) - 1) { - return x - Math.pow(2, bitLength); - } - return x; - }; - webidl.util.IntegerPart = function(n) { - const r = Math.floor(Math.abs(n)); - if (n < 0) { - return -1 * r; - } - return r; - }; - webidl.util.Stringify = function(V) { - const type = webidl.util.Type(V); - switch (type) { - case "Symbol": - return `Symbol(${V.description})`; - case "Object": - return inspect(V); - case "String": - return `"${V}"`; - default: - return `${V}`; - } - }; - webidl.sequenceConverter = function(converter) { - return (V, prefix, argument, Iterable) => { - var _a; - if (webidl.util.Type(V) !== "Object") { - throw webidl.errors.exception({ - header: prefix, - message: `${argument} (${webidl.util.Stringify(V)}) is not iterable.` - }); - } - const method = typeof Iterable === "function" ? Iterable() : (_a = V == null ? void 0 : V[Symbol.iterator]) == null ? void 0 : _a.call(V); - const seq = []; - let index = 0; - if (method === void 0 || typeof method.next !== "function") { - throw webidl.errors.exception({ - header: prefix, - message: `${argument} is not iterable.` - }); - } - while (true) { - const { done, value } = method.next(); - if (done) { - break; - } - seq.push(converter(value, prefix, `${argument}[${index++}]`)); - } - return seq; - }; - }; - webidl.recordConverter = function(keyConverter, valueConverter) { - return (O, prefix, argument) => { - if (webidl.util.Type(O) !== "Object") { - throw webidl.errors.exception({ - header: prefix, - message: `${argument} ("${webidl.util.Type(O)}") is not an Object.` - }); - } - const result = {}; - if (!types.isProxy(O)) { - const keys2 = [...Object.getOwnPropertyNames(O), ...Object.getOwnPropertySymbols(O)]; - for (const key of keys2) { - const typedKey = keyConverter(key, prefix, argument); - const typedValue = valueConverter(O[key], prefix, argument); - result[typedKey] = typedValue; - } - return result; - } - const keys = Reflect.ownKeys(O); - for (const key of keys) { - const desc = Reflect.getOwnPropertyDescriptor(O, key); - if (desc == null ? void 0 : desc.enumerable) { - const typedKey = keyConverter(key, prefix, argument); - const typedValue = valueConverter(O[key], prefix, argument); - result[typedKey] = typedValue; - } - } - return result; - }; - }; - webidl.interfaceConverter = function(i) { - return (V, prefix, argument, opts) => { - if ((opts == null ? void 0 : opts.strict) !== false && !(V instanceof i)) { - throw webidl.errors.exception({ - header: prefix, - message: `Expected ${argument} ("${webidl.util.Stringify(V)}") to be an instance of ${i.name}.` - }); - } - return V; - }; - }; - webidl.dictionaryConverter = function(converters) { - return (dictionary, prefix, argument) => { - const type = webidl.util.Type(dictionary); - const dict = {}; - if (type === "Null" || type === "Undefined") { - return dict; - } else if (type !== "Object") { - throw webidl.errors.exception({ - header: prefix, - 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 (!Object.hasOwn(dictionary, key)) { - throw webidl.errors.exception({ - header: prefix, - message: `Missing required key "${key}".` - }); - } - } - let value = dictionary[key]; - const hasDefault = Object.hasOwn(options, "defaultValue"); - if (hasDefault && value !== null) { - value != null ? value : value = defaultValue(); - } - if (required || hasDefault || value !== void 0) { - value = converter(value, prefix, `${argument}.${key}`); - if (options.allowedValues && !options.allowedValues.includes(value)) { - throw webidl.errors.exception({ - header: prefix, - message: `${value} is not an accepted type. Expected one of ${options.allowedValues.join(", ")}.` - }); - } - dict[key] = value; - } - } - return dict; - }; - }; - webidl.nullableConverter = function(converter) { - return (V, prefix, argument) => { - if (V === null) { - return V; - } - return converter(V, prefix, argument); - }; - }; - webidl.converters.DOMString = function(V, prefix, argument, opts) { - if (V === null && (opts == null ? void 0 : opts.legacyNullToEmptyString)) { - return ""; - } - if (typeof V === "symbol") { - throw webidl.errors.exception({ - header: prefix, - message: `${argument} is a symbol, which cannot be converted to a DOMString.` - }); - } - return String(V); - }; - webidl.converters.ByteString = function(V, prefix, argument) { - const x = webidl.converters.DOMString(V, prefix, argument); - 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.` - ); - } - } - return x; - }; - webidl.converters.USVString = toUSVString; - webidl.converters.boolean = function(V) { - const x = Boolean(V); - return x; - }; - webidl.converters.any = function(V) { - return V; - }; - webidl.converters["long long"] = function(V, prefix, argument) { - const x = webidl.util.ConvertToInt(V, 64, "signed", void 0, prefix, argument); - return x; - }; - webidl.converters["unsigned long long"] = function(V, prefix, argument) { - const x = webidl.util.ConvertToInt(V, 64, "unsigned", void 0, prefix, argument); - return x; - }; - webidl.converters["unsigned long"] = function(V, prefix, argument) { - const x = webidl.util.ConvertToInt(V, 32, "unsigned", void 0, prefix, argument); - return x; - }; - webidl.converters["unsigned short"] = function(V, prefix, argument, opts) { - const x = webidl.util.ConvertToInt(V, 16, "unsigned", opts, prefix, argument); - return x; - }; - webidl.converters.ArrayBuffer = function(V, prefix, argument, opts) { - if (webidl.util.Type(V) !== "Object" || !types.isAnyArrayBuffer(V)) { - throw webidl.errors.conversionFailed({ - prefix, - argument: `${argument} ("${webidl.util.Stringify(V)}")`, - types: ["ArrayBuffer"] - }); - } - if ((opts == null ? void 0 : opts.allowShared) === false && types.isSharedArrayBuffer(V)) { - throw webidl.errors.exception({ - header: "ArrayBuffer", - message: "SharedArrayBuffer is not allowed." - }); - } - if (V.resizable || V.growable) { - throw webidl.errors.exception({ - header: "ArrayBuffer", - message: "Received a resizable ArrayBuffer." - }); - } - return V; - }; - webidl.converters.TypedArray = function(V, T, prefix, name, opts) { - if (webidl.util.Type(V) !== "Object" || !types.isTypedArray(V) || V.constructor.name !== T.name) { - throw webidl.errors.conversionFailed({ - prefix, - argument: `${name} ("${webidl.util.Stringify(V)}")`, - types: [T.name] - }); - } - if ((opts == null ? void 0 : opts.allowShared) === false && types.isSharedArrayBuffer(V.buffer)) { - throw webidl.errors.exception({ - header: "ArrayBuffer", - message: "SharedArrayBuffer is not allowed." - }); - } - if (V.buffer.resizable || V.buffer.growable) { - throw webidl.errors.exception({ - header: "ArrayBuffer", - message: "Received a resizable ArrayBuffer." - }); - } - return V; - }; - webidl.converters.DataView = function(V, prefix, name, opts) { - if (webidl.util.Type(V) !== "Object" || !types.isDataView(V)) { - throw webidl.errors.exception({ - header: prefix, - message: `${name} is not a DataView.` - }); - } - if ((opts == null ? void 0 : opts.allowShared) === false && types.isSharedArrayBuffer(V.buffer)) { - throw webidl.errors.exception({ - header: "ArrayBuffer", - message: "SharedArrayBuffer is not allowed." - }); - } - if (V.buffer.resizable || V.buffer.growable) { - throw webidl.errors.exception({ - header: "ArrayBuffer", - message: "Received a resizable ArrayBuffer." - }); - } - return V; - }; - webidl.converters.BufferSource = function(V, prefix, name, opts) { - if (types.isAnyArrayBuffer(V)) { - return webidl.converters.ArrayBuffer(V, prefix, name, __spreadProps(__spreadValues({}, opts), { allowShared: false })); - } - if (types.isTypedArray(V)) { - return webidl.converters.TypedArray(V, V.constructor, prefix, name, __spreadProps(__spreadValues({}, opts), { allowShared: false })); - } - if (types.isDataView(V)) { - return webidl.converters.DataView(V, prefix, name, __spreadProps(__spreadValues({}, opts), { allowShared: false })); - } - throw webidl.errors.conversionFailed({ - prefix, - argument: `${name} ("${webidl.util.Stringify(V)}")`, - types: ["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 - }; - } - }); - - // - var require_util2 = __commonJS({ - ""(exports, module) { - "use strict"; - var { Transform } = __require("stream"); - var zlib = __require("zlib"); - var { redirectStatusSet, referrerPolicySet: referrerPolicyTokens, badPortsSet } = require_constants3(); - var { getGlobalOrigin } = require_global(); - var { collectASequenceOfCodePoints, collectAnHTTPQuotedString, removeChars, parseMIMEType } = require_data_url(); - var { performance: performance2 } = __require("perf_hooks"); - var { isBlobLike, ReadableStreamFrom, isValidHTTPToken, normalizedMethodRecordsBase } = require_util(); - var assert = __require("assert"); - var { isUint8Array } = __require("util/types"); - var { webidl } = require_webidl(); - var supportedHashes = []; - var crypto2; - try { - crypto2 = __require("crypto"); - const possibleRelevantHashes = ["sha256", "sha384", "sha512"]; - supportedHashes = crypto2.getHashes().filter((hash) => possibleRelevantHashes.includes(hash)); - } catch (e) { - } - function responseURL(response) { - const urlList = response.urlList; - const length = urlList.length; - return length === 0 ? null : urlList[length - 1].toString(); - } - function responseLocationURL(response, requestFragment) { - if (!redirectStatusSet.has(response.status)) { - return null; - } - let location = response.headersList.get("location", true); - if (location !== null && isValidHeaderValue(location)) { - if (!isValidEncodedURL(location)) { - location = normalizeBinaryStringToUtf8(location); - } - location = new URL(location, responseURL(response)); - } - if (location && !location.hash) { - location.hash = requestFragment; - } - return location; - } - function isValidEncodedURL(url) { - for (let i = 0; i < url.length; ++i) { - const code = url.charCodeAt(i); - if (code > 126 || // Non-US-ASCII + DEL - code < 32) { - return false; - } - } - return true; - } - function normalizeBinaryStringToUtf8(value) { - return Buffer.from(value, "binary").toString("utf8"); - } - function requestCurrentURL(request) { - return request.urlList[request.urlList.length - 1]; - } - function requestBadPort(request) { - const url = requestCurrentURL(request); - if (urlIsHttpHttpsScheme(url) && badPortsSet.has(url.port)) { - return "blocked"; - } - return "allowed"; - } - function isErrorLike(object) { - var _a, _b; - return object instanceof Error || (((_a = object == null ? void 0 : object.constructor) == null ? void 0 : _a.name) === "Error" || ((_b = object == null ? void 0 : object.constructor) == null ? void 0 : _b.name) === "DOMException"); - } - function isValidReasonPhrase(statusText) { - for (let i = 0; i < statusText.length; ++i) { - const c = statusText.charCodeAt(i); - if (!(c === 9 || // HTAB - c >= 32 && c <= 126 || // SP / VCHAR - c >= 128 && c <= 255)) { - return false; - } - } - return true; - } - var isValidHeaderName = isValidHTTPToken; - function isValidHeaderValue(potentialValue) { - return (potentialValue[0] === " " || potentialValue[0] === " " || potentialValue[potentialValue.length - 1] === " " || potentialValue[potentialValue.length - 1] === " " || potentialValue.includes("\n") || potentialValue.includes("\r") || potentialValue.includes("\0")) === false; - } - function setRequestReferrerPolicyOnRedirect(request, actualResponse) { - var _a; - const { headersList } = actualResponse; - const policyHeader = ((_a = headersList.get("referrer-policy", true)) != null ? _a : "").split(","); - let policy = ""; - if (policyHeader.length > 0) { - for (let i = policyHeader.length; i !== 0; i--) { - const token = policyHeader[i - 1].trim(); - if (referrerPolicyTokens.has(token)) { - policy = token; - break; - } - } - } - if (policy !== "") { - request.referrerPolicy = policy; - } - } - function crossOriginResourcePolicyCheck() { - return "allowed"; - } - function corsCheck() { - return "success"; - } - function TAOCheck() { - return "success"; - } - function appendFetchMetadata(httpRequest) { - let header = null; - header = httpRequest.mode; - httpRequest.headersList.set("sec-fetch-mode", header, true); - } - function appendRequestOriginHeader(request) { - let serializedOrigin = request.origin; - if (serializedOrigin === "client" || serializedOrigin === void 0) { - return; - } - if (request.responseTainting === "cors" || request.mode === "websocket") { - request.headersList.append("origin", serializedOrigin, true); - } else if (request.method !== "GET" && request.method !== "HEAD") { - switch (request.referrerPolicy) { - case "no-referrer": - serializedOrigin = null; - break; - case "no-referrer-when-downgrade": - case "strict-origin": - case "strict-origin-when-cross-origin": - if (request.origin && urlHasHttpsScheme(request.origin) && !urlHasHttpsScheme(requestCurrentURL(request))) { - serializedOrigin = null; - } - break; - case "same-origin": - if (!sameOrigin(request, requestCurrentURL(request))) { - serializedOrigin = null; - } - break; - default: - } - request.headersList.append("origin", serializedOrigin, true); - } - } - function coarsenTime(timestamp, crossOriginIsolatedCapability) { - return timestamp; - } - function clampAndCoarsenConnectionTimingInfo(connectionTimingInfo, defaultStartTime, crossOriginIsolatedCapability) { - if (!(connectionTimingInfo == null ? void 0 : connectionTimingInfo.startTime) || connectionTimingInfo.startTime < defaultStartTime) { - return { - domainLookupStartTime: defaultStartTime, - domainLookupEndTime: defaultStartTime, - connectionStartTime: defaultStartTime, - connectionEndTime: defaultStartTime, - secureConnectionStartTime: defaultStartTime, - ALPNNegotiatedProtocol: connectionTimingInfo == null ? void 0 : connectionTimingInfo.ALPNNegotiatedProtocol - }; - } - return { - domainLookupStartTime: coarsenTime(connectionTimingInfo.domainLookupStartTime, crossOriginIsolatedCapability), - domainLookupEndTime: coarsenTime(connectionTimingInfo.domainLookupEndTime, crossOriginIsolatedCapability), - connectionStartTime: coarsenTime(connectionTimingInfo.connectionStartTime, crossOriginIsolatedCapability), - connectionEndTime: coarsenTime(connectionTimingInfo.connectionEndTime, crossOriginIsolatedCapability), - secureConnectionStartTime: coarsenTime(connectionTimingInfo.secureConnectionStartTime, crossOriginIsolatedCapability), - ALPNNegotiatedProtocol: connectionTimingInfo.ALPNNegotiatedProtocol - }; - } - function coarsenedSharedCurrentTime(crossOriginIsolatedCapability) { - return coarsenTime(performance2.now(), crossOriginIsolatedCapability); - } - function createOpaqueTimingInfo(timingInfo) { - var _a, _b; - return { - startTime: (_a = timingInfo.startTime) != null ? _a : 0, - redirectStartTime: 0, - redirectEndTime: 0, - postRedirectStartTime: (_b = timingInfo.startTime) != null ? _b : 0, - finalServiceWorkerStartTime: 0, - finalNetworkResponseStartTime: 0, - finalNetworkRequestStartTime: 0, - endTime: 0, - encodedBodySize: 0, - decodedBodySize: 0, - finalConnectionTimingInfo: null - }; - } - function makePolicyContainer() { - return { - referrerPolicy: "strict-origin-when-cross-origin" - }; - } - function clonePolicyContainer(policyContainer) { - return { - referrerPolicy: policyContainer.referrerPolicy - }; - } - function determineRequestsReferrer(request) { - const policy = request.referrerPolicy; - assert(policy); - let referrerSource = null; - if (request.referrer === "client") { - const globalOrigin = getGlobalOrigin(); - if (!globalOrigin || globalOrigin.origin === "null") { - return "no-referrer"; - } - referrerSource = new URL(globalOrigin); - } else if (request.referrer instanceof URL) { - referrerSource = request.referrer; - } - let referrerURL = stripURLForReferrer(referrerSource); - const referrerOrigin = stripURLForReferrer(referrerSource, true); - if (referrerURL.toString().length > 4096) { - referrerURL = referrerOrigin; - } - const areSameOrigin = sameOrigin(request, referrerURL); - const isNonPotentiallyTrustWorthy = isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(request.url); - 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); - if (sameOrigin(referrerURL, currentURL)) { - return referrerURL; - } - if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) { - return "no-referrer"; - } - return referrerOrigin; - } - case "strict-origin": - case "no-referrer-when-downgrade": - default: - return isNonPotentiallyTrustWorthy ? "no-referrer" : referrerOrigin; - } - } - function stripURLForReferrer(url, originOnly) { - assert(url instanceof URL); - url = new URL(url); - if (url.protocol === "file:" || url.protocol === "about:" || url.protocol === "blank:") { - return "no-referrer"; - } - url.username = ""; - url.password = ""; - url.hash = ""; - if (originOnly) { - url.pathname = ""; - url.search = ""; - } - return url; - } - function isURLPotentiallyTrustworthy(url) { - if (!(url instanceof URL)) { - return false; - } - if (url.href === "about:blank" || url.href === "about:srcdoc") { - return true; - } - if (url.protocol === "data:") - return true; - if (url.protocol === "file:") - return true; - return isOriginPotentiallyTrustworthy(url.origin); - function isOriginPotentiallyTrustworthy(origin) { - if (origin == null || origin === "null") - return false; - const originAsURL = new URL(origin); - if (originAsURL.protocol === "https:" || originAsURL.protocol === "wss:") { - 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; - } - return false; - } - } - function bytesMatch(bytes, metadataList) { - if (crypto2 === void 0) { - return true; - } - const parsedMetadata = parseMetadata(metadataList); - if (parsedMetadata === "no metadata") { - return true; - } - if (parsedMetadata.length === 0) { - return true; - } - const strongest = getStrongestMetadata(parsedMetadata); - const metadata = filterMetadataListByAlgorithm(parsedMetadata, strongest); - for (const item of metadata) { - const algorithm = item.algo; - const expectedValue = item.hash; - let actualValue = crypto2.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); - } - } - if (compareBase64Mixed(actualValue, expectedValue)) { - return true; - } - } - return false; - } - var parseHashWithOptions = new RegExp("(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\\s|$)( +[!-~]*)?)?", "i"); - function parseMetadata(metadata) { - const result = []; - let empty = true; - for (const token of metadata.split(" ")) { - empty = false; - const parsedToken = parseHashWithOptions.exec(token); - if (parsedToken === null || parsedToken.groups === void 0 || parsedToken.groups.algo === void 0) { - continue; - } - const algorithm = parsedToken.groups.algo.toLowerCase(); - if (supportedHashes.includes(algorithm)) { - result.push(parsedToken.groups); - } - } - if (empty === true) { - return "no metadata"; - } - return result; - } - function getStrongestMetadata(metadataList) { - let algorithm = metadataList[0].algo; - if (algorithm[3] === "5") { - return algorithm; - } - for (let i = 1; i < metadataList.length; ++i) { - const metadata = metadataList[i]; - if (metadata.algo[3] === "5") { - algorithm = "sha512"; - break; - } else if (algorithm[3] === "3") { - continue; - } 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; - } - 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; - } - function tryUpgradeRequestToAPotentiallyTrustworthyURL(request) { - } - function sameOrigin(A, B) { - if (A.origin === B.origin && A.origin === "null") { - return true; - } - if (A.protocol === B.protocol && A.hostname === B.hostname && A.port === B.port) { - return true; - } - return false; - } - function createDeferredPromise() { - let res; - let rej; - const promise = new Promise((resolve2, reject) => { - res = resolve2; - 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"; - } - function normalizeMethod(method) { - var _a; - return (_a = normalizedMethodRecordsBase[method.toLowerCase()]) != null ? _a : method; - } - function serializeJavascriptValueToJSONString(value) { - const result = JSON.stringify(value); - if (result === void 0) { - throw new TypeError("Value is not JSON serializable"); - } - assert(typeof result === "string"); - return result; - } - var esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())); - function createIterator(name, kInternalIterator, keyIndex = 0, valueIndex = 1) { - var _target, _kind, _index; - class FastIterableIterator { - /** - * @see https://webidl.spec.whatwg.org/#dfn-default-iterator-object - * @param {unknown} target - * @param {'key' | 'value' | 'key+value'} kind - */ - constructor(target, kind) { - /** @type {any} */ - __privateAdd(this, _target, void 0); - /** @type {'key' | 'value' | 'key+value'} */ - __privateAdd(this, _kind, void 0); - /** @type {number} */ - __privateAdd(this, _index, void 0); - __privateSet(this, _target, target); - __privateSet(this, _kind, kind); - __privateSet(this, _index, 0); - } - next() { - if (typeof this !== "object" || this === null || !__privateIn(_target, this)) { - throw new TypeError( - `'next' called on an object that does not implement interface ${name} Iterator.` - ); - } - const index = __privateGet(this, _index); - const values = __privateGet(this, _target)[kInternalIterator]; - const len = values.length; - if (index >= len) { - return { - value: void 0, - done: true - }; - } - const { [keyIndex]: key, [valueIndex]: value } = values[index]; - __privateSet(this, _index, index + 1); - let result; - switch (__privateGet(this, _kind)) { - case "key": - result = key; - break; - case "value": - result = value; - break; - case "key+value": - result = [key, value]; - break; - } - return { - value: result, - done: false - }; - } - } - _target = new WeakMap(); - _kind = new WeakMap(); - _index = new WeakMap(); - delete FastIterableIterator.prototype.constructor; - Object.setPrototypeOf(FastIterableIterator.prototype, esIteratorPrototype); - Object.defineProperties(FastIterableIterator.prototype, { - [Symbol.toStringTag]: { - writable: false, - enumerable: false, - configurable: true, - value: `${name} Iterator` - }, - next: { writable: true, enumerable: true, configurable: true } - }); - return function(target, kind) { - return new FastIterableIterator(target, kind); - }; - } - function iteratorMixin(name, object, kInternalIterator, keyIndex = 0, valueIndex = 1) { - const makeIterator = createIterator(name, kInternalIterator, keyIndex, valueIndex); - const properties = { - keys: { - writable: true, - enumerable: true, - configurable: true, - value: function keys() { - webidl.brandCheck(this, object); - return makeIterator(this, "key"); - } - }, - values: { - writable: true, - enumerable: true, - configurable: true, - value: function values() { - webidl.brandCheck(this, object); - return makeIterator(this, "value"); - } - }, - entries: { - writable: true, - enumerable: true, - configurable: true, - value: function entries() { - webidl.brandCheck(this, object); - return makeIterator(this, "key+value"); - } - }, - forEach: { - writable: true, - enumerable: true, - configurable: true, - value: function forEach(callbackfn, thisArg = globalThis) { - webidl.brandCheck(this, object); - webidl.argumentLengthCheck(arguments, 1, `${name}.forEach`); - if (typeof callbackfn !== "function") { - throw new TypeError( - `Failed to execute 'forEach' on '${name}': parameter 1 is not of type 'Function'.` - ); - } - for (const { 0: key, 1: value } of makeIterator(this, "key+value")) { - callbackfn.call(thisArg, value, key, this); - } - } - } - }; - return Object.defineProperties(object.prototype, __spreadProps(__spreadValues({}, properties), { - [Symbol.iterator]: { - writable: true, - enumerable: false, - configurable: true, - value: properties.entries.value - } - })); - } - function fullyReadBody(body, processBody, processBodyError) { - return __async(this, null, function* () { - const successSteps = processBody; - const errorSteps = processBodyError; - let reader; - try { - reader = body.stream.getReader(); - } catch (e) { - errorSteps(e); - return; - } - try { - successSteps(yield readAllBytes(reader)); - } catch (e) { - errorSteps(e); - } - }); - } - function isReadableStreamLike(stream) { - return stream instanceof ReadableStream || stream[Symbol.toStringTag] === "ReadableStream" && typeof stream.tee === "function"; - } - function readableStreamClose(controller) { - var _a; - try { - controller.close(); - (_a = controller.byobRequest) == null ? void 0 : _a.respond(0); - } catch (err) { - if (!err.message.includes("Controller is already closed") && !err.message.includes("ReadableStream is already closed")) { - throw err; - } - } - } - var invalidIsomorphicEncodeValueRegex = /[^\x00-\xFF]/; - function isomorphicEncode(input) { - assert(!invalidIsomorphicEncodeValueRegex.test(input)); - return input; - } - function readAllBytes(reader) { - return __async(this, null, function* () { - const bytes = []; - let byteLength = 0; - while (true) { - const { done, value: chunk } = yield reader.read(); - if (done) { - return Buffer.concat(bytes, byteLength); - } - if (!isUint8Array(chunk)) { - throw new TypeError("Received non-Uint8Array chunk"); - } - bytes.push(chunk); - byteLength += chunk.length; - } - }); - } - function urlIsLocal(url) { - assert("protocol" in url); - const protocol = url.protocol; - return protocol === "about:" || protocol === "blob:" || protocol === "data:"; - } - function urlHasHttpsScheme(url) { - return typeof url === "string" && url[5] === ":" && url[0] === "h" && url[1] === "t" && url[2] === "t" && url[3] === "p" && url[4] === "s" || url.protocol === "https:"; - } - function urlIsHttpHttpsScheme(url) { - assert("protocol" in url); - const protocol = url.protocol; - return protocol === "http:" || protocol === "https:"; - } - function simpleRangeHeaderValue(value, allowWhitespace) { - const data = value; - if (!data.startsWith("bytes")) { - return "failure"; - } - const position = { position: 5 }; - if (allowWhitespace) { - collectASequenceOfCodePoints( - (char) => char === " " || char === " ", - data, - position - ); - } - if (data.charCodeAt(position.position) !== 61) { - return "failure"; - } - position.position++; - if (allowWhitespace) { - collectASequenceOfCodePoints( - (char) => char === " " || char === " ", - data, - position - ); - } - const rangeStart = collectASequenceOfCodePoints( - (char) => { - const code = char.charCodeAt(0); - return code >= 48 && code <= 57; - }, - data, - position - ); - const rangeStartValue = rangeStart.length ? Number(rangeStart) : null; - if (allowWhitespace) { - collectASequenceOfCodePoints( - (char) => char === " " || char === " ", - data, - position - ); - } - if (data.charCodeAt(position.position) !== 45) { - return "failure"; - } - position.position++; - if (allowWhitespace) { - collectASequenceOfCodePoints( - (char) => char === " " || char === " ", - data, - position - ); - } - const rangeEnd = collectASequenceOfCodePoints( - (char) => { - const code = char.charCodeAt(0); - return code >= 48 && code <= 57; - }, - data, - position - ); - const rangeEndValue = rangeEnd.length ? Number(rangeEnd) : null; - if (position.position < data.length) { - return "failure"; - } - if (rangeEndValue === null && rangeStartValue === null) { - return "failure"; - } - if (rangeStartValue > rangeEndValue) { - return "failure"; - } - return { rangeStartValue, rangeEndValue }; - } - function buildContentRange(rangeStart, rangeEnd, fullLength) { - let contentRange = "bytes "; - contentRange += isomorphicEncode(`${rangeStart}`); - contentRange += "-"; - contentRange += isomorphicEncode(`${rangeEnd}`); - contentRange += "/"; - contentRange += isomorphicEncode(`${fullLength}`); - return contentRange; - } - var _zlibOptions; - var InflateStream = class extends Transform { - /** @param {zlib.ZlibOptions} [zlibOptions] */ - constructor(zlibOptions) { - super(); - __privateAdd(this, _zlibOptions, void 0); - __privateSet(this, _zlibOptions, zlibOptions); - } - _transform(chunk, encoding, callback) { - if (!this._inflateStream) { - if (chunk.length === 0) { - callback(); - return; - } - this._inflateStream = (chunk[0] & 15) === 8 ? zlib.createInflate(__privateGet(this, _zlibOptions)) : zlib.createInflateRaw(__privateGet(this, _zlibOptions)); - this._inflateStream.on("data", this.push.bind(this)); - this._inflateStream.on("end", () => this.push(null)); - this._inflateStream.on("error", (err) => this.destroy(err)); - } - this._inflateStream.write(chunk, encoding, callback); - } - _final(callback) { - if (this._inflateStream) { - this._inflateStream.end(); - this._inflateStream = null; - } - callback(); - } - }; - _zlibOptions = new WeakMap(); - function createInflate(zlibOptions) { - return new InflateStream(zlibOptions); - } - function extractMimeType(headers) { - let charset = null; - let essence = null; - let mimeType = null; - const values = getDecodeSplit("content-type", headers); - if (values === null) { - return "failure"; - } - for (const value of values) { - const temporaryMimeType = parseMIMEType(value); - if (temporaryMimeType === "failure" || temporaryMimeType.essence === "*/*") { - continue; - } - mimeType = temporaryMimeType; - if (mimeType.essence !== essence) { - charset = null; - if (mimeType.parameters.has("charset")) { - charset = mimeType.parameters.get("charset"); - } - essence = mimeType.essence; - } else if (!mimeType.parameters.has("charset") && charset !== null) { - mimeType.parameters.set("charset", charset); - } - } - if (mimeType == null) { - return "failure"; - } - return mimeType; - } - function gettingDecodingSplitting(value) { - const input = value; - const position = { position: 0 }; - const values = []; - let temporaryValue = ""; - while (position.position < input.length) { - temporaryValue += collectASequenceOfCodePoints( - (char) => char !== '"' && char !== ",", - input, - position - ); - if (position.position < input.length) { - if (input.charCodeAt(position.position) === 34) { - temporaryValue += collectAnHTTPQuotedString( - input, - position - ); - if (position.position < input.length) { - continue; - } - } else { - assert(input.charCodeAt(position.position) === 44); - position.position++; - } - } - temporaryValue = removeChars(temporaryValue, true, true, (char) => char === 9 || char === 32); - values.push(temporaryValue); - temporaryValue = ""; - } - return values; - } - function getDecodeSplit(name, list) { - const value = list.get(name, true); - if (value === null) { - return null; - } - return gettingDecodingSplitting(value); - } - var textDecoder = new TextDecoder(); - function utf8DecodeBytes(buffer) { - if (buffer.length === 0) { - return ""; - } - if (buffer[0] === 239 && buffer[1] === 187 && buffer[2] === 191) { - buffer = buffer.subarray(3); - } - const output = textDecoder.decode(buffer); - return output; - } - var EnvironmentSettingsObjectBase = class { - constructor() { - __publicField(this, "policyContainer", makePolicyContainer()); - } - get baseUrl() { - return getGlobalOrigin(); - } - get origin() { - var _a; - return (_a = this.baseUrl) == null ? void 0 : _a.origin; - } - }; - var EnvironmentSettingsObject = class { - constructor() { - __publicField(this, "settingsObject", new EnvironmentSettingsObjectBase()); - } - }; - var environmentSettingsObject = new EnvironmentSettingsObject(); - module.exports = { - isAborted, - isCancelled, - isValidEncodedURL, - createDeferredPromise, - ReadableStreamFrom, - tryUpgradeRequestToAPotentiallyTrustworthyURL, - clampAndCoarsenConnectionTimingInfo, - coarsenedSharedCurrentTime, - determineRequestsReferrer, - makePolicyContainer, - clonePolicyContainer, - appendFetchMetadata, - appendRequestOriginHeader, - TAOCheck, - corsCheck, - crossOriginResourcePolicyCheck, - createOpaqueTimingInfo, - setRequestReferrerPolicyOnRedirect, - isValidHTTPToken, - requestBadPort, - requestCurrentURL, - responseURL, - responseLocationURL, - isBlobLike, - isURLPotentiallyTrustworthy, - isValidReasonPhrase, - sameOrigin, - normalizeMethod, - serializeJavascriptValueToJSONString, - iteratorMixin, - createIterator, - isValidHeaderName, - isValidHeaderValue, - isErrorLike, - fullyReadBody, - bytesMatch, - isReadableStreamLike, - readableStreamClose, - isomorphicEncode, - urlIsLocal, - urlHasHttpsScheme, - urlIsHttpHttpsScheme, - readAllBytes, - simpleRangeHeaderValue, - buildContentRange, - parseMetadata, - createInflate, - extractMimeType, - getDecodeSplit, - utf8DecodeBytes, - environmentSettingsObject - }; - } - }); - - // - var require_symbols2 = __commonJS({ - ""(exports, module) { - "use strict"; - module.exports = { - kUrl: Symbol("url"), - kHeaders: Symbol("headers"), - kSignal: Symbol("signal"), - kState: Symbol("state"), - kDispatcher: Symbol("dispatcher") - }; - } - }); - - // - var require_file = __commonJS({ - ""(exports, module) { - "use strict"; - var { Blob: Blob2, File } = __require("buffer"); - var { kState } = require_symbols2(); - var { webidl } = require_webidl(); - var FileLike = class _FileLike { - constructor(blobLike, fileName, options = {}) { - var _a; - const n = fileName; - const t = options.type; - const d = (_a = options.lastModified) != null ? _a : Date.now(); - 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"; - } - }; - webidl.converters.Blob = webidl.interfaceConverter(Blob2); - function isFileLike(object) { - return object instanceof File || object && (typeof object.stream === "function" || typeof object.arrayBuffer === "function") && object[Symbol.toStringTag] === "File"; - } - module.exports = { FileLike, isFileLike }; - } - }); - - // - var require_formdata = __commonJS({ - ""(exports, module) { - "use strict"; - var { isBlobLike, iteratorMixin } = require_util2(); - var { kState } = require_symbols2(); - var { kEnumerableProperty } = require_util(); - var { FileLike, isFileLike } = require_file(); - var { webidl } = require_webidl(); - var { File: NativeFile } = __require("buffer"); - var nodeUtil = __require("util"); - var _a; - var File = (_a = globalThis.File) != null ? _a : NativeFile; - var FormData = class _FormData { - constructor(form) { - webidl.util.markAsUncloneable(this); - if (form !== void 0) { - throw webidl.errors.conversionFailed({ - prefix: "FormData constructor", - argument: "Argument 1", - types: ["undefined"] - }); - } - this[kState] = []; - } - append(name, value, filename = void 0) { - webidl.brandCheck(this, _FormData); - const prefix = "FormData.append"; - webidl.argumentLengthCheck(arguments, 2, prefix); - if (arguments.length === 3 && !isBlobLike(value)) { - throw new TypeError( - "Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'" - ); - } - name = webidl.converters.USVString(name, prefix, "name"); - value = isBlobLike(value) ? webidl.converters.Blob(value, prefix, "value", { strict: false }) : webidl.converters.USVString(value, prefix, "value"); - filename = arguments.length === 3 ? webidl.converters.USVString(filename, prefix, "filename") : void 0; - const entry = makeEntry(name, value, filename); - this[kState].push(entry); - } - delete(name) { - webidl.brandCheck(this, _FormData); - const prefix = "FormData.delete"; - webidl.argumentLengthCheck(arguments, 1, prefix); - name = webidl.converters.USVString(name, prefix, "name"); - this[kState] = this[kState].filter((entry) => entry.name !== name); - } - get(name) { - webidl.brandCheck(this, _FormData); - const prefix = "FormData.get"; - webidl.argumentLengthCheck(arguments, 1, prefix); - name = webidl.converters.USVString(name, prefix, "name"); - const idx = this[kState].findIndex((entry) => entry.name === name); - if (idx === -1) { - return null; - } - return this[kState][idx].value; - } - getAll(name) { - webidl.brandCheck(this, _FormData); - const prefix = "FormData.getAll"; - webidl.argumentLengthCheck(arguments, 1, prefix); - name = webidl.converters.USVString(name, prefix, "name"); - return this[kState].filter((entry) => entry.name === name).map((entry) => entry.value); - } - has(name) { - webidl.brandCheck(this, _FormData); - const prefix = "FormData.has"; - webidl.argumentLengthCheck(arguments, 1, prefix); - name = webidl.converters.USVString(name, prefix, "name"); - return this[kState].findIndex((entry) => entry.name === name) !== -1; - } - set(name, value, filename = void 0) { - webidl.brandCheck(this, _FormData); - const prefix = "FormData.set"; - webidl.argumentLengthCheck(arguments, 2, prefix); - if (arguments.length === 3 && !isBlobLike(value)) { - throw new TypeError( - "Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'" - ); - } - name = webidl.converters.USVString(name, prefix, "name"); - value = isBlobLike(value) ? webidl.converters.Blob(value, prefix, "name", { strict: false }) : webidl.converters.USVString(value, prefix, "name"); - filename = arguments.length === 3 ? webidl.converters.USVString(filename, prefix, "name") : void 0; - const entry = makeEntry(name, value, filename); - const idx = this[kState].findIndex((entry2) => entry2.name === name); - if (idx !== -1) { - this[kState] = [ - ...this[kState].slice(0, idx), - entry, - ...this[kState].slice(idx + 1).filter((entry2) => entry2.name !== name) - ]; - } else { - this[kState].push(entry); - } - } - [nodeUtil.inspect.custom](depth, options) { - var _a2, _b; - const state = this[kState].reduce((a, b) => { - if (a[b.name]) { - if (Array.isArray(a[b.name])) { - a[b.name].push(b.value); - } else { - a[b.name] = [a[b.name], b.value]; - } - } else { - a[b.name] = b.value; - } - return a; - }, { __proto__: null }); - (_a2 = options.depth) != null ? _a2 : options.depth = depth; - (_b = options.colors) != null ? _b : options.colors = true; - const output = nodeUtil.formatWithOptions(options, state); - return `FormData ${output.slice(output.indexOf("]") + 2)}`; - } - }; - iteratorMixin("FormData", FormData, kState, "name", "value"); - Object.defineProperties(FormData.prototype, { - append: kEnumerableProperty, - delete: kEnumerableProperty, - get: kEnumerableProperty, - getAll: kEnumerableProperty, - has: kEnumerableProperty, - set: kEnumerableProperty, - [Symbol.toStringTag]: { - value: "FormData", - configurable: true - } - }); - function makeEntry(name, value, filename) { - if (typeof value === "string") { - } else { - if (!isFileLike(value)) { - value = value instanceof Blob ? new File([value], "blob", { type: value.type }) : new FileLike(value, "blob", { type: value.type }); - } - if (filename !== void 0) { - const options = { - type: value.type, - lastModified: value.lastModified - }; - value = value instanceof NativeFile ? new File([value], filename, options) : new FileLike(value, filename, options); - } - } - return { name, value }; - } - module.exports = { FormData, makeEntry }; - } - }); - - // - var require_formdata_parser = __commonJS({ - ""(exports, module) { - "use strict"; - var { isUSVString, bufferToLowerCasedHeaderName } = require_util(); - var { utf8DecodeBytes } = require_util2(); - var { HTTP_TOKEN_CODEPOINTS, isomorphicDecode } = require_data_url(); - var { isFileLike } = require_file(); - var { makeEntry } = require_formdata(); - var assert = __require("assert"); - var { File: NodeFile } = __require("buffer"); - var _a; - var File = (_a = globalThis.File) != null ? _a : NodeFile; - var formDataNameBuffer = Buffer.from('form-data; name="'); - var filenameBuffer = Buffer.from("; filename"); - var dd = Buffer.from("--"); - var ddcrlf = Buffer.from("--\r\n"); - function isAsciiString(chars) { - for (let i = 0; i < chars.length; ++i) { - if ((chars.charCodeAt(i) & ~127) !== 0) { - return false; - } - } - return true; - } - function validateBoundary(boundary) { - const length = boundary.length; - if (length < 27 || length > 70) { - return false; - } - for (let i = 0; i < length; ++i) { - const cp = boundary.charCodeAt(i); - if (!(cp >= 48 && cp <= 57 || cp >= 65 && cp <= 90 || cp >= 97 && cp <= 122 || cp === 39 || cp === 45 || cp === 95)) { - return false; - } - } - return true; - } - function multipartFormDataParser(input, mimeType) { - assert(mimeType !== "failure" && mimeType.essence === "multipart/form-data"); - const boundaryString = mimeType.parameters.get("boundary"); - if (boundaryString === void 0) { - return "failure"; - } - const boundary = Buffer.from(`--${boundaryString}`, "utf8"); - const entryList = []; - const position = { position: 0 }; - while (input[position.position] === 13 && input[position.position + 1] === 10) { - position.position += 2; - } - let trailing = input.length; - while (input[trailing - 1] === 10 && input[trailing - 2] === 13) { - trailing -= 2; - } - if (trailing !== input.length) { - input = input.subarray(0, trailing); - } - while (true) { - if (input.subarray(position.position, position.position + boundary.length).equals(boundary)) { - position.position += boundary.length; - } else { - return "failure"; - } - if (position.position === input.length - 2 && bufferStartsWith(input, dd, position) || position.position === input.length - 4 && bufferStartsWith(input, ddcrlf, position)) { - return entryList; - } - if (input[position.position] !== 13 || input[position.position + 1] !== 10) { - return "failure"; - } - position.position += 2; - const result = parseMultipartFormDataHeaders(input, position); - if (result === "failure") { - return "failure"; - } - let { name, filename, contentType, encoding } = result; - position.position += 2; - let body; - { - const boundaryIndex = input.indexOf(boundary.subarray(2), position.position); - if (boundaryIndex === -1) { - return "failure"; - } - body = input.subarray(position.position, boundaryIndex - 4); - position.position += body.length; - if (encoding === "base64") { - body = Buffer.from(body.toString(), "base64"); - } - } - if (input[position.position] !== 13 || input[position.position + 1] !== 10) { - return "failure"; - } else { - position.position += 2; - } - let value; - if (filename !== null) { - contentType != null ? contentType : contentType = "text/plain"; - if (!isAsciiString(contentType)) { - contentType = ""; - } - value = new File([body], filename, { type: contentType }); - } else { - value = utf8DecodeBytes(Buffer.from(body)); - } - assert(isUSVString(name)); - assert(typeof value === "string" && isUSVString(value) || isFileLike(value)); - entryList.push(makeEntry(name, value, filename)); - } - } - function parseMultipartFormDataHeaders(input, position) { - let name = null; - let filename = null; - let contentType = null; - let encoding = null; - while (true) { - if (input[position.position] === 13 && input[position.position + 1] === 10) { - if (name === null) { - return "failure"; - } - return { name, filename, contentType, encoding }; - } - let headerName = collectASequenceOfBytes( - (char) => char !== 10 && char !== 13 && char !== 58, - input, - position - ); - headerName = removeChars(headerName, true, true, (char) => char === 9 || char === 32); - if (!HTTP_TOKEN_CODEPOINTS.test(headerName.toString())) { - return "failure"; - } - if (input[position.position] !== 58) { - return "failure"; - } - position.position++; - collectASequenceOfBytes( - (char) => char === 32 || char === 9, - input, - position - ); - switch (bufferToLowerCasedHeaderName(headerName)) { - case "content-disposition": { - name = filename = null; - if (!bufferStartsWith(input, formDataNameBuffer, position)) { - return "failure"; - } - position.position += 17; - name = parseMultipartFormDataName(input, position); - if (name === null) { - return "failure"; - } - if (bufferStartsWith(input, filenameBuffer, position)) { - let check = position.position + filenameBuffer.length; - if (input[check] === 42) { - position.position += 1; - check += 1; - } - if (input[check] !== 61 || input[check + 1] !== 34) { - return "failure"; - } - position.position += 12; - filename = parseMultipartFormDataName(input, position); - if (filename === null) { - return "failure"; - } - } - break; - } - case "content-type": { - let headerValue = collectASequenceOfBytes( - (char) => char !== 10 && char !== 13, - input, - position - ); - headerValue = removeChars(headerValue, false, true, (char) => char === 9 || char === 32); - contentType = isomorphicDecode(headerValue); - break; - } - case "content-transfer-encoding": { - let headerValue = collectASequenceOfBytes( - (char) => char !== 10 && char !== 13, - input, - position - ); - headerValue = removeChars(headerValue, false, true, (char) => char === 9 || char === 32); - encoding = isomorphicDecode(headerValue); - break; - } - default: { - collectASequenceOfBytes( - (char) => char !== 10 && char !== 13, - input, - position - ); - } - } - if (input[position.position] !== 13 && input[position.position + 1] !== 10) { - return "failure"; - } else { - position.position += 2; - } - } - } - function parseMultipartFormDataName(input, position) { - assert(input[position.position - 1] === 34); - let name = collectASequenceOfBytes( - (char) => char !== 10 && char !== 13 && char !== 34, - input, - position - ); - if (input[position.position] !== 34) { - return null; - } else { - position.position++; - } - name = new TextDecoder().decode(name).replace(/%0A/ig, "\n").replace(/%0D/ig, "\r").replace(/%22/g, '"'); - return name; - } - function collectASequenceOfBytes(condition, input, position) { - let start = position.position; - while (start < input.length && condition(input[start])) { - ++start; - } - return input.subarray(position.position, position.position = start); - } - function removeChars(buf, leading, trailing, predicate) { - let lead = 0; - let trail = buf.length - 1; - if (leading) { - while (lead < buf.length && predicate(buf[lead])) - lead++; - } - if (trailing) { - while (trail > 0 && predicate(buf[trail])) - trail--; - } - return lead === 0 && trail === buf.length - 1 ? buf : buf.subarray(lead, trail + 1); - } - function bufferStartsWith(buffer, start, position) { - if (buffer.length < start.length) { - return false; - } - for (let i = 0; i < start.length; i++) { - if (start[i] !== buffer[position.position + i]) { - return false; - } - } - return true; - } - module.exports = { - multipartFormDataParser, - validateBoundary - }; - } - }); - - // - var require_body = __commonJS({ - ""(exports, module) { - "use strict"; - var util = require_util(); - var { - ReadableStreamFrom, - isBlobLike, - isReadableStreamLike, - readableStreamClose, - createDeferredPromise, - fullyReadBody, - extractMimeType, - utf8DecodeBytes - } = require_util2(); - var { FormData } = require_formdata(); - var { kState } = require_symbols2(); - var { webidl } = require_webidl(); - var { Blob: Blob2 } = __require("buffer"); - var assert = __require("assert"); - var { isErrored, isDisturbed } = __require("stream"); - var { isArrayBuffer } = __require("util/types"); - var { serializeAMimeType } = require_data_url(); - var { multipartFormDataParser } = require_formdata_parser(); - var random; - try { - const crypto2 = __require("crypto"); - random = (max) => crypto2.randomInt(0, max); - } catch (e) { - random = (max) => Math.floor(Math.random(max)); - } - var textEncoder = new TextEncoder(); - function noop() { - } - var hasFinalizationRegistry = globalThis.FinalizationRegistry && process.version.indexOf("v18") !== 0; - var streamRegistry; - if (hasFinalizationRegistry) { - streamRegistry = new FinalizationRegistry((weakRef) => { - const stream = weakRef.deref(); - if (stream && !stream.locked && !isDisturbed(stream) && !isErrored(stream)) { - stream.cancel("Response object has been garbage collected").catch(noop); - } - }); - } - function extractBody(object, keepalive = false) { - let stream = null; - if (object instanceof ReadableStream) { - stream = object; - } else if (isBlobLike(object)) { - stream = object.stream(); - } else { - let _a; - stream = new ReadableStream({ - pull(controller) { - return __async(this, null, function* () { - const buffer = typeof source === "string" ? textEncoder.encode(source) : source; - if (buffer.byteLength) { - controller.enqueue(buffer); - } - queueMicrotask(() => readableStreamClose(controller)); - }); - }, - start() { - }, - type: "bytes" - }); - } - assert(isReadableStreamLike(stream)); - let action = null; - let source = null; - let length = null; - let type = null; - if (typeof object === "string") { - source = object; - type = "text/plain;charset=UTF-8"; - } else if (object instanceof URLSearchParams) { - source = object.toString(); - type = "application/x-www-form-urlencoded;charset=UTF-8"; - } else if (isArrayBuffer(object)) { - source = new Uint8Array(object.slice()); - } else if (ArrayBuffer.isView(object)) { - source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength)); - } else if (util.isFormDataLike(object)) { - const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, "0")}`; - const prefix = `--${boundary}\r -Content-Disposition: form-data`; - 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"); - const blobParts = []; - const rn = new Uint8Array([13, 10]); - length = 0; - let hasUnknownSizeValue = false; - for (const [name, value] of object) { - if (typeof value === "string") { - const chunk2 = textEncoder.encode(prefix + `; name="${escape(normalizeLinefeeds(name))}"\r -\r -${normalizeLinefeeds(value)}\r -`); - blobParts.push(chunk2); - length += chunk2.byteLength; - } else { - const chunk2 = textEncoder.encode(`${prefix}; name="${escape(normalizeLinefeeds(name))}"` + (value.name ? `; filename="${escape(value.name)}"` : "") + `\r -Content-Type: ${value.type || "application/octet-stream"}\r -\r -`); - blobParts.push(chunk2, value, rn); - if (typeof value.size === "number") { - length += chunk2.byteLength + value.size + rn.byteLength; - } else { - hasUnknownSizeValue = true; - } - } - } - const chunk = textEncoder.encode(`--${boundary}--\r -`); - blobParts.push(chunk); - length += chunk.byteLength; - if (hasUnknownSizeValue) { - length = null; - } - source = object; - action = function() { - return __asyncGenerator(this, null, function* () { - for (const part of blobParts) { - if (part.stream) { - yield* __yieldStar(part.stream()); - } else { - yield part; - } - } - }); - }; - type = `multipart/form-data; boundary=${boundary}`; - } else if (isBlobLike(object)) { - source = object; - length = object.size; - if (object.type) { - type = object.type; - } - } else if (typeof object[Symbol.asyncIterator] === "function") { - if (keepalive) { - throw new TypeError("keepalive"); - } - 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); - } - if (typeof source === "string" || util.isBuffer(source)) { - length = Buffer.byteLength(source); - } - if (action != null) { - let _b; - let iterator; - stream = new ReadableStream({ - start() { - return __async(this, null, function* () { - iterator = action(object)[Symbol.asyncIterator](); - }); - }, - pull(controller) { - return __async(this, null, function* () { - const { value, done } = yield iterator.next(); - if (done) { - queueMicrotask(() => { - var _a; - controller.close(); - (_a = controller.byobRequest) == null ? void 0 : _a.respond(0); - }); - } else { - if (!isErrored(stream)) { - const buffer = new Uint8Array(value); - if (buffer.byteLength) { - controller.enqueue(buffer); - } - } - } - return controller.desiredSize > 0; - }); - }, - cancel(reason) { - return __async(this, null, function* () { - yield iterator.return(); - }); - }, - type: "bytes" - }); - } - const body = { stream, source, length }; - return [body, type]; - } - function safelyExtractBody(object, keepalive = false) { - if (object instanceof ReadableStream) { - assert(!util.isDisturbed(object), "The body has already been consumed."); - assert(!object.locked, "The stream is locked."); - } - return extractBody(object, keepalive); - } - function cloneBody(instance, body) { - const [out1, out2] = body.stream.tee(); - body.stream = out1; - return { - stream: out2, - length: body.length, - source: body.source - }; - } - function throwIfAborted(state) { - if (state.aborted) { - throw new DOMException("The operation was aborted.", "AbortError"); - } - } - function bodyMixinMethods(instance) { - const methods = { - blob() { - return consumeBody(this, (bytes) => { - let mimeType = bodyMimeType(this); - if (mimeType === null) { - mimeType = ""; - } else if (mimeType) { - mimeType = serializeAMimeType(mimeType); - } - return new Blob2([bytes], { type: mimeType }); - }, instance); - }, - arrayBuffer() { - return consumeBody(this, (bytes) => { - return new Uint8Array(bytes).buffer; - }, instance); - }, - text() { - return consumeBody(this, utf8DecodeBytes, instance); - }, - json() { - return consumeBody(this, parseJSONFromBytes, instance); - }, - formData() { - return consumeBody(this, (value) => { - const mimeType = bodyMimeType(this); - if (mimeType !== null) { - switch (mimeType.essence) { - case "multipart/form-data": { - const parsed = multipartFormDataParser(value, mimeType); - if (parsed === "failure") { - throw new TypeError("Failed to parse body as FormData."); - } - const fd = new FormData(); - fd[kState] = parsed; - return fd; - } - case "application/x-www-form-urlencoded": { - const entries = new URLSearchParams(value.toString()); - const fd = new FormData(); - for (const [name, value2] of entries) { - fd.append(name, value2); - } - return fd; - } - } - } - throw new TypeError( - 'Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".' - ); - }, instance); - }, - bytes() { - return consumeBody(this, (bytes) => { - return new Uint8Array(bytes); - }, instance); - } - }; - return methods; - } - function mixinBody(prototype) { - Object.assign(prototype.prototype, bodyMixinMethods(prototype)); - } - function consumeBody(object, convertBytesToJSValue, instance) { - return __async(this, null, function* () { - webidl.brandCheck(object, instance); - if (bodyUnusable(object)) { - throw new TypeError("Body is unusable: Body has already been read"); - } - throwIfAborted(object[kState]); - const promise = createDeferredPromise(); - const errorSteps = (error) => promise.reject(error); - const successSteps = (data) => { - try { - promise.resolve(convertBytesToJSValue(data)); - } catch (e) { - errorSteps(e); - } - }; - if (object[kState].body == null) { - successSteps(Buffer.allocUnsafe(0)); - return promise.promise; - } - yield fullyReadBody(object[kState].body, successSteps, errorSteps); - return promise.promise; - }); - } - function bodyUnusable(object) { - const body = object[kState].body; - return body != null && (body.stream.locked || util.isDisturbed(body.stream)); - } - function parseJSONFromBytes(bytes) { - return JSON.parse(utf8DecodeBytes(bytes)); - } - function bodyMimeType(requestOrResponse) { - const headers = requestOrResponse[kState].headersList; - const mimeType = extractMimeType(headers); - if (mimeType === "failure") { - return null; - } - return mimeType; - } - module.exports = { - extractBody, - safelyExtractBody, - cloneBody, - mixinBody, - streamRegistry, - hasFinalizationRegistry, - bodyUnusable - }; - } - }); - - // - var require_client_h1 = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var util = require_util(); - var { channels } = require_diagnostics(); - var timers = require_timers(); - var { - RequestContentLengthMismatchError, - ResponseContentLengthMismatchError, - RequestAbortedError, - InvalidArgumentError, - HeadersTimeoutError, - HeadersOverflowError, - SocketError, - InformationalError, - BodyTimeoutError, - HTTPParserError, - ResponseExceededMaxSizeError - } = require_errors(); - var { - kUrl, - kReset, - kClient, - kParser, - kBlocking, - kRunning, - kPending, - kSize, - kWriting, - kQueue, - kNoRef, - kKeepAliveDefaultTimeout, - kHostHeader, - kPendingIdx, - kRunningIdx, - kError, - kPipelining, - kSocket, - kKeepAliveTimeoutValue, - kMaxHeadersSize, - kKeepAliveMaxTimeout, - kKeepAliveTimeoutThreshold, - kHeadersTimeout, - kBodyTimeout, - kStrictContentLength, - kMaxRequests, - kCounter, - kMaxResponseSize, - kOnError, - kResume, - kHTTPContext - } = require_symbols(); - var constants3 = require_constants2(); - var EMPTY_BUF = Buffer.alloc(0); - var FastBuffer = Buffer[Symbol.species]; - var addListener = util.addListener; - var removeAllListeners = util.removeAllListeners; - var kIdleSocketValidation = Symbol("kIdleSocketValidation"); - var kIdleSocketValidationTimeout = Symbol("kIdleSocketValidationTimeout"); - var kSocketUsed = Symbol("kSocketUsed"); - var extractBody; - function lazyllhttp() { - return __async(this, null, function* () { - const llhttpWasmData = process.env.JEST_WORKER_ID ? require_llhttp_wasm() : void 0; - let mod; - try { - mod = yield WebAssembly.compile(require_llhttp_simd_wasm()); - } catch (e) { - mod = yield WebAssembly.compile(llhttpWasmData || require_llhttp_wasm()); - } - return yield WebAssembly.instantiate(mod, { - env: { - /* eslint-disable camelcase */ - wasm_on_url: (p, at2, len) => { - return 0; - }, - wasm_on_status: (p, at2, len) => { - assert(currentParser.ptr === p); - const start = at2 - currentBufferPtr + currentBufferRef.byteOffset; - return currentParser.onStatus(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; - }, - wasm_on_message_begin: (p) => { - assert(currentParser.ptr === p); - return currentParser.onMessageBegin() || 0; - }, - wasm_on_header_field: (p, at2, len) => { - assert(currentParser.ptr === p); - const start = at2 - currentBufferPtr + currentBufferRef.byteOffset; - return currentParser.onHeaderField(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; - }, - wasm_on_header_value: (p, at2, len) => { - assert(currentParser.ptr === p); - const start = at2 - currentBufferPtr + currentBufferRef.byteOffset; - return currentParser.onHeaderValue(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; - }, - wasm_on_headers_complete: (p, statusCode, upgrade, shouldKeepAlive) => { - assert(currentParser.ptr === p); - return currentParser.onHeadersComplete(statusCode, Boolean(upgrade), Boolean(shouldKeepAlive)) || 0; - }, - wasm_on_body: (p, at2, len) => { - assert(currentParser.ptr === p); - const start = at2 - currentBufferPtr + currentBufferRef.byteOffset; - return currentParser.onBody(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; - }, - wasm_on_message_complete: (p) => { - assert(currentParser.ptr === p); - return currentParser.onMessageComplete() || 0; - } - /* eslint-enable camelcase */ - } - }); - }); - } - var llhttpInstance = null; - var llhttpPromise = lazyllhttp(); - llhttpPromise.catch(); - var currentParser = null; - var currentBufferRef = null; - var currentBufferSize = 0; - var currentBufferPtr = null; - var USE_NATIVE_TIMER = 0; - var USE_FAST_TIMER = 1; - var TIMEOUT_HEADERS = 2 | USE_FAST_TIMER; - var TIMEOUT_BODY = 4 | USE_FAST_TIMER; - var TIMEOUT_KEEP_ALIVE = 8 | USE_NATIVE_TIMER; - var Parser = class { - constructor(client, socket, { exports: exports2 }) { - assert(Number.isFinite(client[kMaxHeadersSize]) && client[kMaxHeadersSize] > 0); - this.llhttp = exports2; - this.ptr = this.llhttp.llhttp_alloc(constants3.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(delay, type) { - if (delay !== this.timeoutValue || type & USE_FAST_TIMER ^ this.timeoutType & USE_FAST_TIMER) { - if (this.timeout) { - timers.clearTimeout(this.timeout); - this.timeout = null; - } - if (delay) { - if (type & USE_FAST_TIMER) { - this.timeout = timers.setFastTimeout(onParserTimeout, delay, new WeakRef(this)); - } else { - this.timeout = setTimeout(onParserTimeout, delay, new WeakRef(this)); - this.timeout.unref(); - } - } - this.timeoutValue = delay; - } else if (this.timeout) { - if (this.timeout.refresh) { - this.timeout.refresh(); - } - } - this.timeoutType = type; - } - 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) { - if (this.timeout.refresh) { - this.timeout.refresh(); - } - } - this.paused = false; - this.execute(this.socket.read() || EMPTY_BUF); - 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); - try { - let ret; - try { - currentBufferRef = data; - currentParser = this; - ret = llhttp.llhttp_execute(this.ptr, currentBufferPtr, data.length); - } catch (err) { - throw err; - } finally { - currentParser = null; - currentBufferRef = null; - } - const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr; - if (ret !== constants3.ERROR.OK) { - const body = data.subarray(offset); - if (ret === constants3.ERROR.PAUSED_UPGRADE) { - this.onUpgrade(body); - } else if (ret === constants3.ERROR.PAUSED) { - this.paused = true; - socket.unshift(body); - } else { - throw this.createError(ret, body); - } - } - } catch (err) { - util.destroy(socket, err); - } - } - finish() { - assert(currentParser === null); - assert(this.ptr != null); - assert(!this.paused); - const { llhttp } = this; - let ret; - try { - currentParser = this; - ret = llhttp.llhttp_finish(this.ptr); - } finally { - currentParser = null; - } - if (ret === constants3.ERROR.OK) { - return null; - } - if (ret === constants3.ERROR.PAUSED || ret === constants3.ERROR.PAUSED_UPGRADE) { - this.paused = true; - return null; - } - return this.createError(ret, EMPTY_BUF); - } - createError(ret, data) { - const { llhttp, contentLength, bytesRead } = this; - if (contentLength && bytesRead !== parseInt(contentLength, 10)) { - return new ResponseContentLengthMismatchError(); - } - const ptr = llhttp.llhttp_get_error_reason(this.ptr); - let message = ""; - 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() + ")"; - } - return new HTTPParserError(message, constants3.ERROR[ret], data); - } - destroy() { - assert(this.ptr != null); - assert(currentParser == null); - this.llhttp.llhttp_free(this.ptr); - this.ptr = null; - this.timeout && 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; - if (socket.destroyed) { - return -1; - } - if (client[kRunning] === 0) { - util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket))); - return -1; - } - const request = client[kQueue][client[kRunningIdx]]; - if (!request) { - return -1; - } - request.onResponseStarted(); - } - 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) { - const headerName = util.bufferToLowerCasedHeaderName(key); - if (headerName === "keep-alive") { - this.keepAlive += buf.toString(); - } else if (headerName === "connection") { - this.connection += buf.toString(); - } - } else if (key.length === 14 && util.bufferToLowerCasedHeaderName(key) === "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); - assert(client[kSocket] === socket); - assert(!socket.destroyed); - assert(!this.paused); - assert((headers.length & 1) === 0); - const request = client[kQueue][client[kRunningIdx]]; - assert(request); - assert(request.upgrade || request.method === "CONNECT"); - this.statusCode = null; - this.statusText = ""; - this.shouldKeepAlive = null; - this.headers = []; - this.headersSize = 0; - socket.unshift(head); - socket[kParser].destroy(); - socket[kParser] = null; - socket[kClient] = null; - socket[kError] = null; - removeAllListeners(socket); - client[kSocket] = null; - client[kHTTPContext] = 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); - } - client[kResume](); - } - onHeadersComplete(statusCode, upgrade, shouldKeepAlive) { - const { client, socket, headers, statusText } = this; - if (socket.destroyed) { - return -1; - } - if (client[kRunning] === 0) { - util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket))); - return -1; - } - const request = client[kQueue][client[kRunningIdx]]; - 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; - } - if (upgrade && !request.upgrade) { - util.destroy(socket, new SocketError("bad upgrade", util.getSocketInfo(socket))); - return -1; - } - assert(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) { - 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 & 1) === 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 { - 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; - client[kResume](); - } - return pause ? constants3.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(this.timeoutType === TIMEOUT_BODY); - if (this.timeout) { - 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 constants3.ERROR.PAUSED; - } - } - onMessageComplete() { - const { client, socket, statusCode, upgrade, headers, contentLength, bytesRead, shouldKeepAlive } = this; - if (socket.destroyed && (!statusCode || shouldKeepAlive)) { - return -1; - } - if (upgrade) { - return; - } - assert(statusCode >= 100); - assert((this.headers.length & 1) === 0); - const request = client[kQueue][client[kRunningIdx]]; - assert(request); - this.statusCode = null; - this.statusText = ""; - this.bytesRead = 0; - this.contentLength = ""; - this.keepAlive = ""; - this.connection = ""; - this.headers = []; - this.headersSize = 0; - if (statusCode < 200) { - return; - } - if (request.method !== "HEAD" && contentLength && bytesRead !== parseInt(contentLength, 10)) { - util.destroy(socket, new ResponseContentLengthMismatchError()); - return -1; - } - request.onComplete(headers); - client[kQueue][client[kRunningIdx]++] = null; - socket[kSocketUsed] = true; - if (socket[kWriting]) { - assert(client[kRunning] === 0); - util.destroy(socket, new InformationalError("reset")); - return constants3.ERROR.PAUSED; - } else if (!shouldKeepAlive) { - util.destroy(socket, new InformationalError("reset")); - return constants3.ERROR.PAUSED; - } else if (socket[kReset] && client[kRunning] === 0) { - util.destroy(socket, new InformationalError("reset")); - return constants3.ERROR.PAUSED; - } else if (client[kPipelining] == null || client[kPipelining] === 1) { - setImmediate(() => client[kResume]()); - } else { - client[kResume](); - } - } - }; - function onParserTimeout(parser) { - const { socket, timeoutType, client, paused } = parser.deref(); - if (timeoutType === TIMEOUT_HEADERS) { - if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) { - assert(!paused, "cannot be paused while waiting for headers"); - util.destroy(socket, new HeadersTimeoutError()); - } - } else if (timeoutType === TIMEOUT_BODY) { - if (!paused) { - util.destroy(socket, new BodyTimeoutError()); - } - } else if (timeoutType === TIMEOUT_KEEP_ALIVE) { - assert(client[kRunning] === 0 && client[kKeepAliveTimeoutValue]); - util.destroy(socket, new InformationalError("socket idle timeout")); - } - } - function connectH1(client, socket) { - return __async(this, null, function* () { - client[kSocket] = socket; - if (!llhttpInstance) { - llhttpInstance = yield llhttpPromise; - llhttpPromise = null; - } - socket[kNoRef] = false; - socket[kWriting] = false; - socket[kReset] = false; - socket[kBlocking] = false; - socket[kIdleSocketValidation] = 0; - socket[kIdleSocketValidationTimeout] = null; - socket[kSocketUsed] = false; - socket[kParser] = new Parser(client, socket, llhttpInstance); - addListener(socket, "error", function(err) { - assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); - const parser = this[kParser]; - if (err.code === "ECONNRESET" && parser.statusCode && !parser.shouldKeepAlive) { - const parserErr = parser.finish(); - if (parserErr) { - this[kError] = parserErr; - this[kClient][kOnError](parserErr); - } - return; - } - this[kError] = err; - this[kClient][kOnError](err); - }); - addListener(socket, "readable", function() { - const parser = this[kParser]; - if (parser) { - parser.readMore(); - } - }); - addListener(socket, "end", function() { - const parser = this[kParser]; - if (parser.statusCode && !parser.shouldKeepAlive) { - const parserErr = parser.finish(); - if (parserErr) { - util.destroy(this, parserErr); - } - return; - } - util.destroy(this, new SocketError("other side closed", util.getSocketInfo(this))); - }); - addListener(socket, "close", function() { - const client2 = this[kClient]; - const parser = this[kParser]; - clearIdleSocketValidation(this); - if (parser) { - if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) { - this[kError] = parser.finish() || this[kError]; - } - this[kParser].destroy(); - this[kParser] = null; - } - const err = this[kError] || new SocketError("closed", util.getSocketInfo(this)); - client2[kSocket] = null; - client2[kHTTPContext] = null; - if (client2.destroyed) { - assert(client2[kPending] === 0); - const requests = client2[kQueue].splice(client2[kRunningIdx]); - for (let i = 0; i < requests.length; i++) { - const request = requests[i]; - util.errorRequest(client2, request, err); - } - } else if (client2[kRunning] > 0 && err.code !== "UND_ERR_INFO") { - const request = client2[kQueue][client2[kRunningIdx]]; - client2[kQueue][client2[kRunningIdx]++] = null; - util.errorRequest(client2, request, err); - } - client2[kPendingIdx] = client2[kRunningIdx]; - assert(client2[kRunning] === 0); - client2.emit("disconnect", client2[kUrl], [client2], err); - client2[kResume](); - }); - let closed = false; - socket.on("close", () => { - closed = true; - }); - return { - version: "h1", - defaultPipelining: 1, - write(...args) { - return writeH1(client, ...args); - }, - resume() { - resumeH1(client); - }, - destroy(err, callback) { - if (closed) { - queueMicrotask(callback); - } else { - socket.destroy(err).on("close", callback); - } - }, - get destroyed() { - return socket.destroyed; - }, - busy(request) { - if (socket[kWriting] || socket[kReset] || socket[kBlocking] || socket[kIdleSocketValidation] === 1) { - return true; - } - if (request) { - if (client[kRunning] > 0 && !request.idempotent) { - return true; - } - if (client[kRunning] > 0 && (request.upgrade || request.method === "CONNECT")) { - return true; - } - if (client[kRunning] > 0 && util.bodyLength(request.body) !== 0 && (util.isStream(request.body) || util.isAsyncIterable(request.body) || util.isFormDataLike(request.body))) { - return true; - } - } - return false; - } - }; - }); - } - function clearIdleSocketValidation(socket) { - if (socket[kIdleSocketValidationTimeout]) { - clearTimeout(socket[kIdleSocketValidationTimeout]); - socket[kIdleSocketValidationTimeout] = null; - } - socket[kIdleSocketValidation] = 0; - } - function scheduleIdleSocketValidation(client, socket) { - var _a, _b; - socket[kIdleSocketValidation] = 1; - socket[kIdleSocketValidationTimeout] = setTimeout(() => { - socket[kIdleSocketValidationTimeout] = null; - socket[kIdleSocketValidation] = 2; - if (client[kSocket] === socket && !socket.destroyed) { - client[kResume](); - } - }, 0); - (_b = (_a = socket[kIdleSocketValidationTimeout]).unref) == null ? void 0 : _b.call(_a); - } - function resumeH1(client) { - const socket = client[kSocket]; - if (socket && !socket.destroyed) { - 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[kRunning] === 0 && client[kPending] > 0 && socket[kSocketUsed]) { - if (socket[kIdleSocketValidation] === 0) { - scheduleIdleSocketValidation(client, socket); - socket[kParser].readMore(); - if (socket.destroyed) { - return; - } - return; - } - if (socket[kIdleSocketValidation] === 1) { - socket[kParser].readMore(); - if (socket.destroyed) { - return; - } - return; - } - } - if (client[kRunning] === 0) { - socket[kParser].readMore(); - if (socket.destroyed) { - return; - } - } - if (client[kSize] === 0) { - if (socket[kParser].timeoutType !== TIMEOUT_KEEP_ALIVE) { - socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_KEEP_ALIVE); - } - } 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); - } - } - } - } - function shouldSendContentLength(method) { - return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT"; - } - function writeH1(client, request) { - const { method, path: path4, host, upgrade, blocking, reset } = request; - let { body, headers, contentLength } = request; - const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH" || method === "QUERY" || method === "PROPFIND" || method === "PROPPATCH"; - if (util.isFormDataLike(body)) { - if (!extractBody) { - extractBody = require_body().extractBody; - } - const [bodyStream, contentType] = extractBody(body); - if (request.contentType == null) { - headers.push("content-type", contentType); - } - body = bodyStream.stream; - contentLength = bodyStream.length; - } else if (util.isBlobLike(body) && request.contentType == null) { - const contentType = body.type; - if (contentType) { - const contentTypeValue = `${contentType}`; - if (!util.isValidHeaderValue(contentTypeValue)) { - util.errorRequest(client, request, new InvalidArgumentError("invalid content-type header")); - return false; - } - headers.push("content-type", contentTypeValue); - } - } - if (body && typeof body.read === "function") { - body.read(0); - } - const bodyLength = util.bodyLength(body); - contentLength = bodyLength != null ? bodyLength : contentLength; - if (contentLength === null) { - contentLength = request.contentLength; - } - if (contentLength === 0 && !expectsPayload) { - contentLength = null; - } - if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength !== null && request.contentLength !== contentLength) { - if (client[kStrictContentLength]) { - util.errorRequest(client, request, new RequestContentLengthMismatchError()); - return false; - } - process.emitWarning(new RequestContentLengthMismatchError()); - } - const socket = client[kSocket]; - clearIdleSocketValidation(socket); - const abort = (err) => { - if (request.aborted || request.completed) { - return; - } - util.errorRequest(client, request, err || new RequestAbortedError()); - util.destroy(body); - util.destroy(socket, new InformationalError("aborted")); - }; - try { - request.onConnect(abort); - } catch (err) { - util.errorRequest(client, request, err); - } - if (request.aborted) { - return false; - } - if (method === "HEAD") { - socket[kReset] = true; - } - if (upgrade || method === "CONNECT") { - 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} ${path4} HTTP/1.1\r -`; - if (typeof host === "string") { - header += `host: ${host}\r -`; - } else { - header += client[kHostHeader]; - } - if (upgrade) { - header += `connection: upgrade\r -upgrade: ${upgrade}\r -`; - } else if (client[kPipelining] && !socket[kReset]) { - header += "connection: keep-alive\r\n"; - } else { - header += "connection: close\r\n"; - } - if (Array.isArray(headers)) { - for (let n = 0; n < headers.length; n += 2) { - const key = headers[n + 0]; - const val = headers[n + 1]; - if (Array.isArray(val)) { - for (let i = 0; i < val.length; i++) { - header += `${key}: ${val[i]}\r -`; - } - } else { - header += `${key}: ${val}\r -`; - } - } - } - if (channels.sendHeaders.hasSubscribers) { - channels.sendHeaders.publish({ request, headers: header, socket }); - } - if (!body || bodyLength === 0) { - writeBuffer(abort, null, client, request, socket, contentLength, header, expectsPayload); - } else if (util.isBuffer(body)) { - writeBuffer(abort, body, client, request, socket, contentLength, header, expectsPayload); - } else if (util.isBlobLike(body)) { - if (typeof body.stream === "function") { - writeIterable(abort, body.stream(), client, request, socket, contentLength, header, expectsPayload); - } else { - writeBlob(abort, body, client, request, socket, contentLength, header, expectsPayload); - } - } else if (util.isStream(body)) { - writeStream(abort, body, client, request, socket, contentLength, header, expectsPayload); - } else if (util.isIterable(body)) { - writeIterable(abort, body, client, request, socket, contentLength, header, expectsPayload); - } else { - assert(false); - } - return true; - } - function writeStream(abort, body, client, request, socket, contentLength, header, expectsPayload) { - var _a, _b, _c; - assert(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined"); - let finished = false; - const writer = new AsyncWriter({ abort, 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 onClose = function() { - queueMicrotask(() => { - body.removeListener("error", onFinished); - }); - if (!finished) { - 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("close", onClose); - 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", onClose); - if (body.resume) { - body.resume(); - } - socket.on("drain", onDrain).on("error", onFinished); - if ((_a = body.errorEmitted) != null ? _a : body.errored) { - setImmediate(() => onFinished(body.errored)); - } else if ((_b = body.endEmitted) != null ? _b : body.readableEnded) { - setImmediate(() => onFinished(null)); - } - if ((_c = body.closeEmitted) != null ? _c : body.closed) { - setImmediate(onClose); - } - } - function writeBuffer(abort, body, client, request, socket, contentLength, header, expectsPayload) { - try { - if (!body) { - if (contentLength === 0) { - socket.write(`${header}content-length: 0\r -\r -`, "latin1"); - } else { - assert(contentLength === null, "no body must not have content length"); - socket.write(`${header}\r -`, "latin1"); - } - } else if (util.isBuffer(body)) { - assert(contentLength === body.byteLength, "buffer body must have content length"); - socket.cork(); - socket.write(`${header}content-length: ${contentLength}\r -\r -`, "latin1"); - socket.write(body); - socket.uncork(); - request.onBodySent(body); - if (!expectsPayload && request.reset !== false) { - socket[kReset] = true; - } - } - request.onRequestSent(); - client[kResume](); - } catch (err) { - abort(err); - } - } - function writeBlob(abort, body, client, request, socket, contentLength, header, expectsPayload) { - return __async(this, null, function* () { - assert(contentLength === body.size, "blob body must have content length"); - try { - if (contentLength != null && contentLength !== body.size) { - throw new RequestContentLengthMismatchError(); - } - const buffer = Buffer.from(yield body.arrayBuffer()); - socket.cork(); - socket.write(`${header}content-length: ${contentLength}\r -\r -`, "latin1"); - socket.write(buffer); - socket.uncork(); - request.onBodySent(buffer); - request.onRequestSent(); - if (!expectsPayload && request.reset !== false) { - socket[kReset] = true; - } - client[kResume](); - } catch (err) { - abort(err); - } - }); - } - function writeIterable(abort, body, client, request, socket, contentLength, header, expectsPayload) { - return __async(this, null, function* () { - 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((resolve2, reject) => { - assert(callback === null); - if (socket[kError]) { - reject(socket[kError]); - } else { - callback = resolve2; - } - }); - socket.on("close", onDrain).on("drain", onDrain); - const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header }); - try { - try { - for (var iter = __forAwait(body), more, temp, error; more = !(temp = yield iter.next()).done; more = false) { - const chunk = temp.value; - if (socket[kError]) { - throw socket[kError]; - } - if (!writer.write(chunk)) { - yield waitForDrain(); - } - } - } catch (temp) { - error = [temp]; - } finally { - try { - more && (temp = iter.return) && (yield temp.call(iter)); - } finally { - if (error) - throw error[0]; - } - } - writer.end(); - } catch (err) { - writer.destroy(err); - } finally { - socket.off("close", onDrain).off("drain", onDrain); - } - }); - } - var AsyncWriter = class { - constructor({ abort, 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; - this.abort = abort; - 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; - } - if (contentLength !== null && bytesWritten + len > contentLength) { - if (client[kStrictContentLength]) { - throw new RequestContentLengthMismatchError(); - } - process.emitWarning(new RequestContentLengthMismatchError()); - } - socket.cork(); - if (bytesWritten === 0) { - if (!expectsPayload && request.reset !== false) { - socket[kReset] = true; - } - if (contentLength === null) { - socket.write(`${header}transfer-encoding: chunked\r -`, "latin1"); - } else { - socket.write(`${header}content-length: ${contentLength}\r -\r -`, "latin1"); - } - } - if (contentLength === null) { - socket.write(`\r -${len.toString(16)}\r -`, "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) { - 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) { - socket.write(`${header}content-length: 0\r -\r -`, "latin1"); - } else { - socket.write(`${header}\r -`, "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) { - if (socket[kParser].timeout.refresh) { - socket[kParser].timeout.refresh(); - } - } - client[kResume](); - } - destroy(err) { - const { socket, client, abort } = this; - socket[kWriting] = false; - if (err) { - assert(client[kRunning] <= 1, "pipeline should only contain this request"); - abort(err); - } - } - }; - module.exports = connectH1; - } - }); - - // - var require_client_h2 = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { pipeline } = __require("stream"); - var util = require_util(); - var { - RequestContentLengthMismatchError, - RequestAbortedError, - SocketError, - InformationalError - } = require_errors(); - var { - kUrl, - kReset, - kClient, - kRunning, - kPending, - kQueue, - kPendingIdx, - kRunningIdx, - kError, - kSocket, - kStrictContentLength, - kOnError, - kMaxConcurrentStreams, - kHTTP2Session, - kResume, - kSize, - kHTTPContext - } = require_symbols(); - var kOpenStreams = Symbol("open streams"); - var extractBody; - var h2ExperimentalWarned = false; - var http2; - try { - http2 = __require("http2"); - } catch (e) { - http2 = { constants: {} }; - } - var { - constants: { - HTTP2_HEADER_AUTHORITY, - HTTP2_HEADER_METHOD, - HTTP2_HEADER_PATH, - HTTP2_HEADER_SCHEME, - HTTP2_HEADER_CONTENT_LENGTH, - HTTP2_HEADER_EXPECT, - HTTP2_HEADER_STATUS - } - } = http2; - function parseH2Headers(headers) { - const result = []; - for (const [name, value] of Object.entries(headers)) { - if (Array.isArray(value)) { - for (const subvalue of value) { - result.push(Buffer.from(name), Buffer.from(subvalue)); - } - } else { - result.push(Buffer.from(name), Buffer.from(value)); - } - } - return result; - } - function connectH2(client, socket) { - return __async(this, null, function* () { - client[kSocket] = socket; - 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[kMaxConcurrentStreams] - }); - session[kOpenStreams] = 0; - session[kClient] = client; - session[kSocket] = socket; - util.addListener(session, "error", onHttp2SessionError); - util.addListener(session, "frameError", onHttp2FrameError); - util.addListener(session, "end", onHttp2SessionEnd); - util.addListener(session, "goaway", onHTTP2GoAway); - util.addListener(session, "close", function() { - const { [kClient]: client2 } = this; - const { [kSocket]: socket2 } = client2; - const err = this[kSocket][kError] || this[kError] || new SocketError("closed", util.getSocketInfo(socket2)); - client2[kHTTP2Session] = null; - if (client2.destroyed) { - assert(client2[kPending] === 0); - const requests = client2[kQueue].splice(client2[kRunningIdx]); - for (let i = 0; i < requests.length; i++) { - const request = requests[i]; - util.errorRequest(client2, request, err); - } - } - }); - session.unref(); - client[kHTTP2Session] = session; - socket[kHTTP2Session] = session; - util.addListener(socket, "error", function(err) { - assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); - this[kError] = err; - this[kClient][kOnError](err); - }); - util.addListener(socket, "end", function() { - util.destroy(this, new SocketError("other side closed", util.getSocketInfo(this))); - }); - util.addListener(socket, "close", function() { - const err = this[kError] || new SocketError("closed", util.getSocketInfo(this)); - client[kSocket] = null; - if (this[kHTTP2Session] != null) { - this[kHTTP2Session].destroy(err); - } - client[kPendingIdx] = client[kRunningIdx]; - assert(client[kRunning] === 0); - client.emit("disconnect", client[kUrl], [client], err); - client[kResume](); - }); - let closed = false; - socket.on("close", () => { - closed = true; - }); - return { - version: "h2", - defaultPipelining: Infinity, - write(...args) { - return writeH2(client, ...args); - }, - resume() { - resumeH2(client); - }, - destroy(err, callback) { - if (closed) { - queueMicrotask(callback); - } else { - socket.destroy(err).on("close", callback); - } - }, - get destroyed() { - return socket.destroyed; - }, - busy() { - return false; - } - }; - }); - } - function resumeH2(client) { - const socket = client[kSocket]; - if ((socket == null ? void 0 : socket.destroyed) === false) { - if (client[kSize] === 0 && client[kMaxConcurrentStreams] === 0) { - socket.unref(); - client[kHTTP2Session].unref(); - } else { - socket.ref(); - client[kHTTP2Session].ref(); - } - } - } - function onHttp2SessionError(err) { - assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); - this[kSocket][kError] = err; - this[kClient][kOnError](err); - } - function onHttp2FrameError(type, code, id) { - if (id === 0) { - const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`); - this[kSocket][kError] = err; - this[kClient][kOnError](err); - } - } - function onHttp2SessionEnd() { - const err = new SocketError("other side closed", util.getSocketInfo(this[kSocket])); - this.destroy(err); - util.destroy(this[kSocket], err); - } - function onHTTP2GoAway(code) { - const err = this[kError] || new SocketError(`HTTP/2: "GOAWAY" frame received with code ${code}`, util.getSocketInfo(this)); - const client = this[kClient]; - client[kSocket] = null; - client[kHTTPContext] = null; - if (this[kHTTP2Session] != null) { - this[kHTTP2Session].destroy(err); - this[kHTTP2Session] = null; - } - util.destroy(this[kSocket], err); - if (client[kRunningIdx] < client[kQueue].length) { - const request = client[kQueue][client[kRunningIdx]]; - client[kQueue][client[kRunningIdx]++] = null; - util.errorRequest(client, request, err); - client[kPendingIdx] = client[kRunningIdx]; - } - assert(client[kRunning] === 0); - client.emit("disconnect", client[kUrl], [client], err); - client[kResume](); - } - function shouldSendContentLength(method) { - return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT"; - } - function writeH2(client, request) { - const session = client[kHTTP2Session]; - const { method, path: path4, host, upgrade, expectContinue, signal, headers: reqHeaders } = request; - let { body } = request; - if (upgrade) { - util.errorRequest(client, request, new Error("Upgrade not supported for H2")); - return false; - } - const headers = {}; - for (let n = 0; n < reqHeaders.length; n += 2) { - const key = reqHeaders[n + 0]; - const val = reqHeaders[n + 1]; - if (Array.isArray(val)) { - for (let i = 0; i < val.length; i++) { - if (headers[key]) { - headers[key] += `,${val[i]}`; - } else { - headers[key] = val[i]; - } - } - } else { - headers[key] = val; - } - } - let stream; - const { hostname, port } = client[kUrl]; - headers[HTTP2_HEADER_AUTHORITY] = host || `${hostname}${port ? `:${port}` : ""}`; - headers[HTTP2_HEADER_METHOD] = method; - const abort = (err) => { - if (request.aborted || request.completed) { - return; - } - err = err || new RequestAbortedError(); - util.errorRequest(client, request, err); - if (stream != null) { - util.destroy(stream, err); - } - util.destroy(body, err); - client[kQueue][client[kRunningIdx]++] = null; - client[kResume](); - }; - try { - request.onConnect(abort); - } catch (err) { - util.errorRequest(client, request, err); - } - if (request.aborted) { - return false; - } - if (method === "CONNECT") { - session.ref(); - stream = session.request(headers, { endStream: false, signal }); - if (stream.id && !stream.pending) { - request.onUpgrade(null, null, stream); - ++session[kOpenStreams]; - client[kQueue][client[kRunningIdx]++] = null; - } else { - stream.once("ready", () => { - request.onUpgrade(null, null, stream); - ++session[kOpenStreams]; - client[kQueue][client[kRunningIdx]++] = null; - }); - } - stream.once("close", () => { - session[kOpenStreams] -= 1; - if (session[kOpenStreams] === 0) - session.unref(); - }); - return true; - } - headers[HTTP2_HEADER_PATH] = path4; - headers[HTTP2_HEADER_SCHEME] = "https"; - const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH"; - if (body && typeof body.read === "function") { - body.read(0); - } - let contentLength = util.bodyLength(body); - if (util.isFormDataLike(body)) { - extractBody != null ? extractBody : extractBody = require_body().extractBody; - const [bodyStream, contentType] = extractBody(body); - headers["content-type"] = contentType; - body = bodyStream.stream; - contentLength = bodyStream.length; - } - if (contentLength == null) { - contentLength = request.contentLength; - } - if (contentLength === 0 || !expectsPayload) { - contentLength = null; - } - if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength != null && request.contentLength !== contentLength) { - if (client[kStrictContentLength]) { - util.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" || body === null; - 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(); - } - ++session[kOpenStreams]; - stream.once("response", (headers2) => { - const _a = headers2, { [HTTP2_HEADER_STATUS]: statusCode } = _a, realHeaders = __objRest(_a, [__restKey(HTTP2_HEADER_STATUS)]); - request.onResponseStarted(); - if (request.aborted) { - const err = new RequestAbortedError(); - util.errorRequest(client, request, err); - util.destroy(stream, err); - return; - } - if (request.onHeaders(Number(statusCode), parseH2Headers(realHeaders), stream.resume.bind(stream), "") === false) { - stream.pause(); - } - stream.on("data", (chunk) => { - if (request.onData(chunk) === false) { - stream.pause(); - } - }); - }); - stream.once("end", () => { - var _a; - if (((_a = stream.state) == null ? void 0 : _a.state) == null || stream.state.state < 6) { - request.onComplete([]); - } - if (session[kOpenStreams] === 0) { - session.unref(); - } - abort(new InformationalError("HTTP/2: stream half-closed (remote)")); - client[kQueue][client[kRunningIdx]++] = null; - client[kPendingIdx] = client[kRunningIdx]; - client[kResume](); - }); - stream.once("close", () => { - session[kOpenStreams] -= 1; - if (session[kOpenStreams] === 0) { - session.unref(); - } - }); - stream.once("error", function(err) { - abort(err); - }); - stream.once("frameError", (type, code) => { - abort(new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`)); - }); - return true; - function writeBodyH2() { - if (!body || contentLength === 0) { - writeBuffer( - abort, - stream, - null, - client, - request, - client[kSocket], - contentLength, - expectsPayload - ); - } else if (util.isBuffer(body)) { - writeBuffer( - abort, - stream, - body, - client, - request, - client[kSocket], - contentLength, - expectsPayload - ); - } else if (util.isBlobLike(body)) { - if (typeof body.stream === "function") { - writeIterable( - abort, - stream, - body.stream(), - client, - request, - client[kSocket], - contentLength, - expectsPayload - ); - } else { - writeBlob( - abort, - stream, - body, - client, - request, - client[kSocket], - contentLength, - expectsPayload - ); - } - } else if (util.isStream(body)) { - writeStream( - abort, - client[kSocket], - expectsPayload, - stream, - body, - client, - request, - contentLength - ); - } else if (util.isIterable(body)) { - writeIterable( - abort, - stream, - body, - client, - request, - client[kSocket], - contentLength, - expectsPayload - ); - } else { - assert(false); - } - } - } - function writeBuffer(abort, h2stream, body, client, request, socket, contentLength, expectsPayload) { - try { - if (body != null && util.isBuffer(body)) { - assert(contentLength === body.byteLength, "buffer body must have content length"); - h2stream.cork(); - h2stream.write(body); - h2stream.uncork(); - h2stream.end(); - request.onBodySent(body); - } - if (!expectsPayload) { - socket[kReset] = true; - } - request.onRequestSent(); - client[kResume](); - } catch (error) { - abort(error); - } - } - function writeStream(abort, socket, expectsPayload, h2stream, body, client, request, contentLength) { - assert(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined"); - const pipe = pipeline( - body, - h2stream, - (err) => { - if (err) { - util.destroy(pipe, err); - abort(err); - } else { - util.removeAllListeners(pipe); - request.onRequestSent(); - if (!expectsPayload) { - socket[kReset] = true; - } - client[kResume](); - } - } - ); - util.addListener(pipe, "data", onPipeData); - function onPipeData(chunk) { - request.onBodySent(chunk); - } - } - function writeBlob(abort, h2stream, body, client, request, socket, contentLength, expectsPayload) { - return __async(this, null, function* () { - assert(contentLength === body.size, "blob body must have content length"); - try { - if (contentLength != null && contentLength !== body.size) { - throw new RequestContentLengthMismatchError(); - } - const buffer = Buffer.from(yield body.arrayBuffer()); - h2stream.cork(); - h2stream.write(buffer); - h2stream.uncork(); - h2stream.end(); - request.onBodySent(buffer); - request.onRequestSent(); - if (!expectsPayload) { - socket[kReset] = true; - } - client[kResume](); - } catch (err) { - abort(err); - } - }); - } - function writeIterable(abort, h2stream, body, client, request, socket, contentLength, expectsPayload) { - return __async(this, null, function* () { - 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((resolve2, reject) => { - assert(callback === null); - if (socket[kError]) { - reject(socket[kError]); - } else { - callback = resolve2; - } - }); - h2stream.on("close", onDrain).on("drain", onDrain); - try { - try { - for (var iter = __forAwait(body), more, temp, error; more = !(temp = yield iter.next()).done; more = false) { - const chunk = temp.value; - if (socket[kError]) { - throw socket[kError]; - } - const res = h2stream.write(chunk); - request.onBodySent(chunk); - if (!res) { - yield waitForDrain(); - } - } - } catch (temp) { - error = [temp]; - } finally { - try { - more && (temp = iter.return) && (yield temp.call(iter)); - } finally { - if (error) - throw error[0]; - } - } - h2stream.end(); - request.onRequestSent(); - if (!expectsPayload) { - socket[kReset] = true; - } - client[kResume](); - } catch (err) { - abort(err); - } finally { - h2stream.off("close", onDrain).off("drain", onDrain); - } - }); - } - module.exports = connectH2; - } - }); - - // - var require_redirect_handler = __commonJS({ - ""(exports, module) { - "use strict"; - var util = require_util(); - var { kBodyUsed } = require_symbols(); - var assert = __require("assert"); - var { InvalidArgumentError } = require_errors(); - var EE = __require("events"); - var redirectableStatusCodes = [300, 301, 302, 303, 307, 308]; - var kBody = Symbol("body"); - var BodyAsyncIterable = class { - constructor(body) { - this[kBody] = body; - this[kBodyUsed] = false; - } - [Symbol.asyncIterator]() { - return __asyncGenerator(this, null, function* () { - assert(!this[kBodyUsed], "disturbed"); - this[kBodyUsed] = true; - yield* __yieldStar(this[kBody]); - }); - } - }; - var RedirectHandler = class { - 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 = __spreadProps(__spreadValues({}, opts), { maxRedirections: 0 }); - this.maxRedirections = maxRedirections; - this.handler = handler; - this.history = []; - this.redirectionLimitReached = false; - if (util.isStream(this.opts.body)) { - 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") { - 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)) { - 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.throwOnMaxRedirect && this.history.length >= this.maxRedirections) { - if (this.request) { - this.request.abort(new Error("max redirects")); - } - this.redirectionLimitReached = true; - this.abort(new Error("max redirects")); - return; - } - 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 path4 = search ? `${pathname}${search}` : pathname; - this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin); - this.opts.path = path4; - this.opts.origin = origin; - this.opts.maxRedirections = 0; - this.opts.query = null; - if (statusCode === 303 && this.opts.method !== "HEAD") { - this.opts.method = "GET"; - this.opts.body = null; - } - } - onData(chunk) { - if (this.location) { - } else { - return this.handler.onData(chunk); - } - } - onComplete(trailers) { - if (this.location) { - 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].length === 8 && util.headerNameToString(headers[i]) === "location") { - return headers[i + 1]; - } - } - } - 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; - } - 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; - } - }); - - // - var require_redirect_interceptor = __commonJS({ - ""(exports, module) { - "use strict"; - var RedirectHandler = require_redirect_handler(); - 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 = __spreadProps(__spreadValues({}, opts), { maxRedirections: 0 }); - return dispatch(opts, redirectHandler); - }; - }; - } - module.exports = createRedirectInterceptor; - } - }); - - // - var require_client = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var net = __require("net"); - var http = __require("http"); - var util = require_util(); - var { channels } = require_diagnostics(); - var Request = require_request(); - var DispatcherBase = require_dispatcher_base(); - var { - InvalidArgumentError, - InformationalError, - ClientDestroyedError - } = require_errors(); - var buildConnector = require_connect(); - var { - kUrl, - kServerName, - kClient, - kBusy, - kConnect, - kResuming, - kRunning, - kPending, - kSize, - kQueue, - kConnected, - kConnecting, - kNeedDrain, - kKeepAliveDefaultTimeout, - kHostHeader, - kPendingIdx, - kRunningIdx, - kError, - kPipelining, - kKeepAliveTimeoutValue, - kMaxHeadersSize, - kKeepAliveMaxTimeout, - kKeepAliveTimeoutThreshold, - kHeadersTimeout, - kBodyTimeout, - kStrictContentLength, - kConnector, - kMaxRedirections, - kMaxRequests, - kCounter, - kClose, - kDestroy, - kDispatch, - kInterceptors, - kLocalAddress, - kMaxResponseSize, - kOnError, - kHTTPContext, - kMaxConcurrentStreams, - kResume - } = require_symbols(); - var connectH1 = require_client_h1(); - var connectH2 = require_client_h2(); - var deprecatedInterceptorWarned = false; - var kClosedResolve = Symbol("kClosedResolve"); - var noop = () => { - }; - function getPipelining(client) { - var _a, _b, _c; - return (_c = (_b = client[kPipelining]) != null ? _b : (_a = client[kHTTPContext]) == null ? void 0 : _a.defaultPipelining) != null ? _c : 1; - } - var Client = class extends DispatcherBase { - /** - * - * @param {string|URL} url - * @param {import('../../types/client.js').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: connect2, - maxRequestsPerClient, - localAddress, - maxResponseSize, - autoSelectFamily, - autoSelectFamilyAttemptTimeout, - // h2 - maxConcurrentStreams, - allowH2, - webSocket - } = {}) { - super({ webSocket }); - if (keepAlive !== void 0) { - throw new InvalidArgumentError("unsupported keepAlive, use pipelining=0 instead"); - } - if (socketTimeout !== void 0) { - throw new InvalidArgumentError("unsupported socketTimeout, use headersTimeout & bodyTimeout instead"); - } - if (requestTimeout !== void 0) { - throw new InvalidArgumentError("unsupported requestTimeout, use headersTimeout & bodyTimeout instead"); - } - if (idleTimeout !== void 0) { - throw new InvalidArgumentError("unsupported idleTimeout, use keepAliveTimeout instead"); - } - if (maxKeepAliveTimeout !== void 0) { - 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 (connect2 != null && typeof connect2 !== "function" && typeof connect2 !== "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"); - } - 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 positive integer, greater than 0"); - } - if (typeof connect2 !== "function") { - connect2 = buildConnector(__spreadValues(__spreadValues(__spreadProps(__spreadValues({}, tls), { - maxCachedSessions, - allowH2, - socketPath, - timeout: connectTimeout - }), autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0), connect2)); - } - if ((interceptors == null ? void 0 : interceptors.Client) && Array.isArray(interceptors.Client)) { - this[kInterceptors] = interceptors.Client; - if (!deprecatedInterceptorWarned) { - deprecatedInterceptorWarned = true; - process.emitWarning("Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.", { - code: "UNDICI-CLIENT-INTERCEPTOR-DEPRECATED" - }); - } - } else { - this[kInterceptors] = [createRedirectInterceptor({ maxRedirections })]; - } - this[kUrl] = util.parseOrigin(url); - this[kConnector] = connect2; - this[kPipelining] = pipelining != null ? pipelining : 1; - this[kMaxHeadersSize] = maxHeaderSize || http.maxHeaderSize; - this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout; - this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 6e5 : keepAliveMaxTimeout; - this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 2e3 : keepAliveTimeoutThreshold; - this[kKeepAliveTimeoutValue] = this[kKeepAliveDefaultTimeout]; - this[kServerName] = null; - this[kLocalAddress] = localAddress != null ? localAddress : null; - this[kResuming] = 0; - this[kNeedDrain] = 0; - this[kHostHeader] = `host: ${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ""}\r -`; - this[kBodyTimeout] = bodyTimeout != null ? bodyTimeout : 3e5; - this[kHeadersTimeout] = headersTimeout != null ? headersTimeout : 3e5; - this[kStrictContentLength] = strictContentLength == null ? true : strictContentLength; - this[kMaxRedirections] = maxRedirections; - this[kMaxRequests] = maxRequestsPerClient; - this[kClosedResolve] = null; - this[kMaxResponseSize] = maxResponseSize > -1 ? maxResponseSize : -1; - this[kMaxConcurrentStreams] = maxConcurrentStreams != null ? maxConcurrentStreams : 100; - this[kHTTPContext] = null; - this[kQueue] = []; - this[kRunningIdx] = 0; - this[kPendingIdx] = 0; - this[kResume] = (sync) => resume(this, sync); - this[kOnError] = (err) => onError(this, err); - } - get pipelining() { - return this[kPipelining]; - } - set pipelining(value) { - this[kPipelining] = value; - this[kResume](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[kHTTPContext] && !this[kConnecting] && !this[kHTTPContext].destroyed; - } - get [kBusy]() { - var _a; - return Boolean( - ((_a = this[kHTTPContext]) == null ? void 0 : _a.busy(null)) || this[kSize] >= (getPipelining(this) || 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 = new Request(origin, opts, handler); - this[kQueue].push(request); - if (this[kResuming]) { - } else if (util.bodyLength(request.body) == null && util.isIterable(request.body)) { - this[kResuming] = 1; - queueMicrotask(() => resume(this)); - } else { - this[kResume](true); - } - if (this[kResuming] && this[kNeedDrain] !== 2 && this[kBusy]) { - this[kNeedDrain] = 2; - } - return this[kNeedDrain] < 2; - } - [kClose]() { - return __async(this, null, function* () { - return new Promise((resolve2) => { - if (this[kSize]) { - this[kClosedResolve] = resolve2; - } else { - resolve2(null); - } - }); - }); - } - [kDestroy](err) { - return __async(this, null, function* () { - return new Promise((resolve2) => { - const requests = this[kQueue].splice(this[kPendingIdx]); - for (let i = 0; i < requests.length; i++) { - const request = requests[i]; - util.errorRequest(this, request, err); - } - const callback = () => { - if (this[kClosedResolve]) { - this[kClosedResolve](); - this[kClosedResolve] = null; - } - resolve2(null); - }; - if (this[kHTTPContext]) { - this[kHTTPContext].destroy(err, callback); - this[kHTTPContext] = null; - } else { - queueMicrotask(callback); - } - this[kResume](); - }); - }); - } - }; - var createRedirectInterceptor = require_redirect_interceptor(); - function onError(client, err) { - if (client[kRunning] === 0 && err.code !== "UND_ERR_INFO" && err.code !== "UND_ERR_SOCKET") { - assert(client[kPendingIdx] === client[kRunningIdx]); - const requests = client[kQueue].splice(client[kRunningIdx]); - for (let i = 0; i < requests.length; i++) { - const request = requests[i]; - util.errorRequest(client, request, err); - } - assert(client[kSize] === 0); - } - } - function connect(client) { - return __async(this, null, function* () { - var _a, _b, _c; - assert(!client[kConnecting]); - assert(!client[kHTTPContext]); - let { host, hostname, protocol, port } = client[kUrl]; - 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, - version: (_a = client[kHTTPContext]) == null ? void 0 : _a.version, - servername: client[kServerName], - localAddress: client[kLocalAddress] - }, - connector: client[kConnector] - }); - } - try { - const socket = yield new Promise((resolve2, reject) => { - client[kConnector]({ - host, - hostname, - protocol, - port, - servername: client[kServerName], - localAddress: client[kLocalAddress] - }, (err, socket2) => { - if (err) { - reject(err); - } else { - resolve2(socket2); - } - }); - }); - if (client.destroyed) { - util.destroy(socket.on("error", noop), new ClientDestroyedError()); - return; - } - assert(socket); - try { - client[kHTTPContext] = socket.alpnProtocol === "h2" ? yield connectH2(client, socket) : yield connectH1(client, socket); - } catch (err) { - socket.destroy().on("error", noop); - throw err; - } - client[kConnecting] = false; - socket[kCounter] = 0; - socket[kMaxRequests] = client[kMaxRequests]; - socket[kClient] = client; - socket[kError] = null; - if (channels.connected.hasSubscribers) { - channels.connected.publish({ - connectParams: { - host, - hostname, - protocol, - port, - version: (_b = client[kHTTPContext]) == null ? void 0 : _b.version, - 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, - version: (_c = client[kHTTPContext]) == null ? void 0 : _c.version, - 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]++]; - util.errorRequest(client, request, err); - } - } else { - onError(client, err); - } - client.emit("connectionError", client[kUrl], [client], err); - } - client[kResume](); - }); - } - 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) { - var _a; - while (true) { - if (client.destroyed) { - assert(client[kPending] === 0); - return; - } - if (client[kClosedResolve] && !client[kSize]) { - client[kClosedResolve](); - client[kClosedResolve] = null; - return; - } - if (client[kHTTPContext]) { - client[kHTTPContext].resume(); - } - if (client[kBusy]) { - client[kNeedDrain] = 2; - } else if (client[kNeedDrain] === 2) { - if (sync) { - client[kNeedDrain] = 1; - queueMicrotask(() => emitDrain(client)); - } else { - emitDrain(client); - } - continue; - } - if (client[kPending] === 0) { - return; - } - if (client[kRunning] >= (getPipelining(client) || 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; - (_a = client[kHTTPContext]) == null ? void 0 : _a.destroy(new InformationalError("servername changed"), () => { - client[kHTTPContext] = null; - resume(client); - }); - } - if (client[kConnecting]) { - return; - } - if (!client[kHTTPContext]) { - connect(client); - return; - } - if (client[kHTTPContext].destroyed) { - return; - } - if (client[kHTTPContext].busy(request)) { - return; - } - if (!request.aborted && client[kHTTPContext].write(request)) { - client[kPendingIdx]++; - } else { - client[kQueue].splice(client[kPendingIdx], 1); - } - } - } - module.exports = Client; - } - }); - - // - var require_fixed_queue = __commonJS({ - ""(exports, module) { - "use strict"; - var kSize = 2048; - var kMask = kSize - 1; - var FixedCircularBuffer = class { - 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 === void 0) - return null; - this.list[this.bottom] = void 0; - 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()) { - 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) { - this.tail = tail.next; - } - return next; - } - }; - } - }); - - // - var require_pool_stats = __commonJS({ - ""(exports, module) { - var { kFree, kConnected, kPending, kQueued, kRunning, kSize } = require_symbols(); - var kPool = Symbol("pool"); - var PoolStats = class { - 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; - } - }); - - // - var require_pool_base = __commonJS({ - ""(exports, module) { - "use strict"; - var DispatcherBase = require_dispatcher_base(); - var FixedQueue = require_fixed_queue(); - var { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = require_symbols(); - var PoolStats = require_pool_stats(); - var kClients = Symbol("clients"); - var kNeedDrain = Symbol("needDrain"); - var kQueue = Symbol("queue"); - var kClosedResolve = Symbol("closed resolve"); - var kOnDrain = Symbol("onDrain"); - var kOnConnect = Symbol("onConnect"); - var kOnDisconnect = Symbol("onDisconnect"); - var kOnConnectionError = Symbol("onConnectionError"); - var kGetDispatcher = Symbol("get dispatcher"); - var kAddClient = Symbol("add client"); - var kRemoveClient = Symbol("remove client"); - var kStats = Symbol("stats"); - var PoolBase = class extends DispatcherBase { - constructor(opts) { - super(opts); - 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]; - } - [kClose]() { - return __async(this, null, function* () { - if (this[kQueue].isEmpty()) { - yield Promise.all(this[kClients].map((c) => c.close())); - } else { - yield new Promise((resolve2) => { - this[kClosedResolve] = resolve2; - }); - } - }); - } - [kDestroy](err) { - return __async(this, null, function* () { - while (true) { - const item = this[kQueue].shift(); - if (!item) { - break; - } - item.handler.onError(err); - } - yield 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]) { - queueMicrotask(() => { - 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 - }; - } - }); - - // - var require_pool = __commonJS({ - ""(exports, module) { - "use strict"; - var { - PoolBase, - kClients, - kNeedDrain, - kAddClient, - kGetDispatcher - } = require_pool_base(); - var Client = require_client(); - var { - InvalidArgumentError - } = require_errors(); - var util = require_util(); - var { kUrl, kInterceptors } = require_symbols(); - var buildConnector = require_connect(); - var kOptions = Symbol("options"); - var kConnections = Symbol("connections"); - var kFactory = Symbol("factory"); - function defaultFactory(origin, opts) { - return new Client(origin, opts); - } - var Pool = class extends PoolBase { - constructor(origin, _a = {}) { - var _b = _a, { - connections, - factory = defaultFactory, - connect, - connectTimeout, - tls, - maxCachedSessions, - socketPath, - autoSelectFamily, - autoSelectFamilyAttemptTimeout, - allowH2 - } = _b, options = __objRest(_b, [ - "connections", - "factory", - "connect", - "connectTimeout", - "tls", - "maxCachedSessions", - "socketPath", - "autoSelectFamily", - "autoSelectFamilyAttemptTimeout", - "allowH2" - ]); - var _a2; - 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(__spreadValues(__spreadValues(__spreadProps(__spreadValues({}, tls), { - maxCachedSessions, - allowH2, - socketPath, - timeout: connectTimeout - }), autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0), connect)); - } - super(options); - this[kInterceptors] = ((_a2 = options.interceptors) == null ? void 0 : _a2.Pool) && Array.isArray(options.interceptors.Pool) ? options.interceptors.Pool : []; - this[kConnections] = connections || null; - this[kUrl] = util.parseOrigin(origin); - this[kOptions] = __spreadProps(__spreadValues({}, util.deepClone(options)), { connect, allowH2 }); - this[kOptions].interceptors = options.interceptors ? __spreadValues({}, options.interceptors) : void 0; - this[kFactory] = factory; - this.on("connectionError", (origin2, targets, error) => { - for (const target of targets) { - const idx = this[kClients].indexOf(target); - if (idx !== -1) { - this[kClients].splice(idx, 1); - } - } - }); - } - [kGetDispatcher]() { - for (const client of this[kClients]) { - if (!client[kNeedDrain]) { - return client; - } - } - if (!this[kConnections] || this[kClients].length < this[kConnections]) { - const dispatcher = this[kFactory](this[kUrl], this[kOptions]); - this[kAddClient](dispatcher); - return dispatcher; - } - } - }; - module.exports = Pool; - } - }); - - // - var require_balanced_pool = __commonJS({ - ""(exports, module) { - "use strict"; - var { - BalancedPoolMissingUpstreamError, - InvalidArgumentError - } = require_errors(); - var { - PoolBase, - kClients, - kNeedDrain, - kAddClient, - kRemoveClient, - kGetDispatcher - } = require_pool_base(); - var Pool = require_pool(); - var { kUrl, kInterceptors } = require_symbols(); - var { parseOrigin } = require_util(); - var kFactory = Symbol("factory"); - var kOptions = Symbol("options"); - var kGreatestCommonDivisor = Symbol("kGreatestCommonDivisor"); - var kCurrentWeight = Symbol("kCurrentWeight"); - var kIndex = Symbol("kIndex"); - var kWeight = Symbol("kWeight"); - var kMaxWeightPerServer = Symbol("kMaxWeightPerServer"); - var kErrorPenalty = Symbol("kErrorPenalty"); - function getGreatestCommonDivisor(a, b) { - if (a === 0) - return b; - while (b !== 0) { - const t = b; - b = a % b; - a = t; - } - return a; - } - function defaultFactory(origin, opts) { - return new Pool(origin, opts); - } - var BalancedPool = class extends PoolBase { - constructor(upstreams = [], _a = {}) { - var _b = _a, { factory = defaultFactory } = _b, opts = __objRest(_b, ["factory"]); - var _a2; - 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] = ((_a2 = opts.interceptors) == null ? void 0 : _a2.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((pool2) => pool2[kUrl].origin === upstreamOrigin && pool2.closed !== true && pool2.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") { - 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() { - let result = 0; - for (let i = 0; i < this[kClients].length; i++) { - result = getGreatestCommonDivisor(this[kClients][i][kWeight], result); - } - this[kGreatestCommonDivisor] = result; - } - removeUpstream(upstream) { - const upstreamOrigin = parseOrigin(upstream).origin; - const pool = this[kClients].find((pool2) => pool2[kUrl].origin === upstreamOrigin && pool2.closed !== true && pool2.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]() { - if (this[kClients].length === 0) { - throw new BalancedPoolMissingUpstreamError(); - } - const dispatcher = this[kClients].find((dispatcher2) => !dispatcher2[kNeedDrain] && dispatcher2.closed !== true && dispatcher2.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]]; - if (pool[kWeight] > this[kClients][maxWeightIndex][kWeight] && !pool[kNeedDrain]) { - maxWeightIndex = this[kIndex]; - } - if (this[kIndex] === 0) { - 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; - } - }); - - // - var require_agent = __commonJS({ - ""(exports, module) { - "use strict"; - var { InvalidArgumentError } = require_errors(); - var { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols(); - var DispatcherBase = require_dispatcher_base(); - var Pool = require_pool(); - var Client = require_client(); - var util = require_util(); - var createRedirectInterceptor = require_redirect_interceptor(); - var kOnConnect = Symbol("onConnect"); - var kOnDisconnect = Symbol("onDisconnect"); - var kOnConnectionError = Symbol("onConnectionError"); - var kMaxRedirections = Symbol("maxRedirections"); - var kOnDrain = Symbol("onDrain"); - var kFactory = Symbol("factory"); - var kOptions = Symbol("options"); - function defaultFactory(origin, opts) { - return opts && opts.connections === 1 ? new Client(origin, opts) : new Pool(origin, opts); - } - var Agent = class extends DispatcherBase { - constructor(_a = {}) { - var _b = _a, { factory = defaultFactory, maxRedirections = 0, connect } = _b, options = __objRest(_b, ["factory", "maxRedirections", "connect"]); - var _a2; - 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"); - } - super(options); - if (connect && typeof connect !== "function") { - connect = __spreadValues({}, connect); - } - this[kInterceptors] = ((_a2 = options.interceptors) == null ? void 0 : _a2.Agent) && Array.isArray(options.interceptors.Agent) ? options.interceptors.Agent : [createRedirectInterceptor({ maxRedirections })]; - this[kOptions] = __spreadProps(__spreadValues({}, util.deepClone(options)), { connect }); - this[kOptions].interceptors = options.interceptors ? __spreadValues({}, options.interceptors) : void 0; - this[kMaxRedirections] = maxRedirections; - this[kFactory] = factory; - this[kClients] = /* @__PURE__ */ new Map(); - this[kOnDrain] = (origin, targets) => { - this.emit("drain", origin, [this, ...targets]); - }; - this[kOnConnect] = (origin, targets) => { - this.emit("connect", origin, [this, ...targets]); - }; - this[kOnDisconnect] = (origin, targets, err) => { - this.emit("disconnect", origin, [this, ...targets], err); - }; - this[kOnConnectionError] = (origin, targets, err) => { - this.emit("connectionError", origin, [this, ...targets], err); - }; - } - get [kRunning]() { - let ret = 0; - for (const client of this[kClients].values()) { - 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."); - } - let dispatcher = this[kClients].get(key); - 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, dispatcher); - } - return dispatcher.dispatch(opts, handler); - } - [kClose]() { - return __async(this, null, function* () { - const closePromises = []; - for (const client of this[kClients].values()) { - closePromises.push(client.close()); - } - this[kClients].clear(); - yield Promise.all(closePromises); - }); - } - [kDestroy](err) { - return __async(this, null, function* () { - const destroyPromises = []; - for (const client of this[kClients].values()) { - destroyPromises.push(client.destroy(err)); - } - this[kClients].clear(); - yield Promise.all(destroyPromises); - }); - } - }; - module.exports = Agent; - } - }); - - // - var require_proxy_agent = __commonJS({ - ""(exports, module) { - "use strict"; - var { kProxy, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols(); - var { URL: URL2 } = __require("url"); - var Agent = require_agent(); - var Pool = require_pool(); - var DispatcherBase = require_dispatcher_base(); - var { InvalidArgumentError, RequestAbortedError, SecureProxyConnectionError } = require_errors(); - var buildConnector = require_connect(); - var Client = require_client(); - var kAgent = Symbol("proxy agent"); - var kClient = Symbol("proxy client"); - var kProxyHeaders = Symbol("proxy headers"); - var kRequestTls = Symbol("request tls settings"); - var kProxyTls = Symbol("proxy tls settings"); - var kConnectEndpoint = Symbol("connect endpoint function"); - var kTunnelProxy = Symbol("tunnel proxy"); - function defaultProtocolPort(protocol) { - return protocol === "https:" ? 443 : 80; - } - function defaultFactory(origin, opts) { - return new Pool(origin, opts); - } - var noop = () => { - }; - function defaultAgentFactory(origin, opts) { - if (opts.connections === 1) { - return new Client(origin, opts); - } - return new Pool(origin, opts); - } - var _client; - var Http1ProxyWrapper = class extends DispatcherBase { - constructor(proxyUrl, { headers = {}, connect, factory }) { - super(); - __privateAdd(this, _client, void 0); - if (!proxyUrl) { - throw new InvalidArgumentError("Proxy URL is mandatory"); - } - this[kProxyHeaders] = headers; - if (factory) { - __privateSet(this, _client, factory(proxyUrl, { connect })); - } else { - __privateSet(this, _client, new Client(proxyUrl, { connect })); - } - } - [kDispatch](opts, handler) { - const onHeaders = handler.onHeaders; - handler.onHeaders = function(statusCode, data, resume) { - if (statusCode === 407) { - if (typeof handler.onError === "function") { - handler.onError(new InvalidArgumentError("Proxy Authentication Required (407)")); - } - return; - } - if (onHeaders) - onHeaders.call(this, statusCode, data, resume); - }; - const { - origin, - path: path4 = "/", - headers = {} - } = opts; - opts.path = origin + path4; - if (!("host" in headers) && !("Host" in headers)) { - const { host } = new URL2(origin); - headers.host = host; - } - opts.headers = __spreadValues(__spreadValues({}, this[kProxyHeaders]), headers); - return __privateGet(this, _client)[kDispatch](opts, handler); - } - [kClose]() { - return __async(this, null, function* () { - return __privateGet(this, _client).close(); - }); - } - [kDestroy](err) { - return __async(this, null, function* () { - return __privateGet(this, _client).destroy(err); - }); - } - }; - _client = new WeakMap(); - var _getUrl, getUrl_fn; - var ProxyAgent2 = class extends DispatcherBase { - constructor(opts) { - var _a; - super(); - /** - * @param {import('../types/proxy-agent').ProxyAgent.Options | string | URL} opts - * @returns {URL} - */ - __privateAdd(this, _getUrl); - if (!opts || typeof opts === "object" && !(opts instanceof URL2) && !opts.uri) { - throw new InvalidArgumentError("Proxy uri is mandatory"); - } - const { clientFactory = defaultFactory } = opts; - if (typeof clientFactory !== "function") { - throw new InvalidArgumentError("Proxy opts.clientFactory must be a function."); - } - const { proxyTunnel = true } = opts; - const url = __privateMethod(this, _getUrl, getUrl_fn).call(this, opts); - const { href, origin, port, protocol, username, password, hostname: proxyHostname } = url; - this[kProxy] = { uri: href, protocol }; - this[kInterceptors] = ((_a = opts.interceptors) == null ? void 0 : _a.ProxyAgent) && Array.isArray(opts.interceptors.ProxyAgent) ? opts.interceptors.ProxyAgent : []; - this[kRequestTls] = opts.requestTls; - this[kProxyTls] = opts.proxyTls; - this[kProxyHeaders] = opts.headers || {}; - this[kTunnelProxy] = proxyTunnel; - if (opts.auth && opts.token) { - throw new InvalidArgumentError("opts.auth cannot be used in combination with opts.token"); - } else if (opts.auth) { - 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(__spreadValues({}, opts.proxyTls)); - this[kConnectEndpoint] = buildConnector(__spreadValues({}, opts.requestTls)); - const agentFactory = opts.factory || defaultAgentFactory; - const factory = (origin2, options) => { - const { protocol: protocol2 } = new URL2(origin2); - if (!this[kTunnelProxy] && protocol2 === "http:" && this[kProxy].protocol === "http:") { - return new Http1ProxyWrapper(this[kProxy].uri, { - headers: this[kProxyHeaders], - connect, - factory: agentFactory - }); - } - return agentFactory(origin2, options); - }; - this[kClient] = clientFactory(url, { connect }); - this[kAgent] = new Agent(__spreadProps(__spreadValues({}, opts), { - factory, - connect: (opts2, callback) => __async(this, null, function* () { - var _a2; - let requestedPath = opts2.host; - if (!opts2.port) { - requestedPath += `:${defaultProtocolPort(opts2.protocol)}`; - } - try { - const { socket, statusCode } = yield this[kClient].connect({ - origin, - port, - path: requestedPath, - signal: opts2.signal, - headers: __spreadProps(__spreadValues({}, this[kProxyHeaders]), { - host: opts2.host - }), - servername: ((_a2 = this[kProxyTls]) == null ? void 0 : _a2.servername) || proxyHostname - }); - if (statusCode !== 200) { - socket.on("error", noop).destroy(); - callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`)); - } - if (opts2.protocol !== "https:") { - callback(null, socket); - return; - } - let servername; - if (this[kRequestTls]) { - servername = this[kRequestTls].servername; - } else { - servername = opts2.servername; - } - this[kConnectEndpoint](__spreadProps(__spreadValues({}, opts2), { servername, httpSocket: socket }), callback); - } catch (err) { - if (err.code === "ERR_TLS_CERT_ALTNAME_INVALID") { - callback(new SecureProxyConnectionError(err)); - } else { - callback(err); - } - } - }) - })); - } - dispatch(opts, handler) { - const headers = buildHeaders(opts.headers); - throwIfProxyAuthIsSent(headers); - if (headers && !("host" in headers) && !("Host" in headers)) { - const { host } = new URL2(opts.origin); - headers.host = host; - } - return this[kAgent].dispatch( - __spreadProps(__spreadValues({}, opts), { - headers - }), - handler - ); - } - [kClose]() { - return __async(this, null, function* () { - yield this[kAgent].close(); - yield this[kClient].close(); - }); - } - [kDestroy]() { - return __async(this, null, function* () { - yield this[kAgent].destroy(); - yield this[kClient].destroy(); - }); - } - }; - _getUrl = new WeakSet(); - getUrl_fn = function(opts) { - if (typeof opts === "string") { - return new URL2(opts); - } else if (opts instanceof URL2) { - return opts; - } else { - return new URL2(opts.uri); - } - }; - function buildHeaders(headers) { - if (Array.isArray(headers)) { - const headersPair = {}; - for (let i = 0; i < headers.length; i += 2) { - headersPair[headers[i]] = headers[i + 1]; - } - return headersPair; - } - return headers; - } - 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 = ProxyAgent2; - } - }); - - // - var require_env_http_proxy_agent = __commonJS({ - ""(exports, module) { - "use strict"; - var DispatcherBase = require_dispatcher_base(); - var { kClose, kDestroy, kClosed, kDestroyed, kDispatch, kNoProxyAgent, kHttpProxyAgent, kHttpsProxyAgent } = require_symbols(); - var ProxyAgent2 = require_proxy_agent(); - var Agent = require_agent(); - var DEFAULT_PORTS = { - "http:": 80, - "https:": 443 - }; - var experimentalWarned = false; - var _noProxyValue, _noProxyEntries, _opts, _getProxyAgentForUrl, getProxyAgentForUrl_fn, _shouldProxy, shouldProxy_fn, _parseNoProxy, parseNoProxy_fn, _noProxyChanged, noProxyChanged_get, _noProxyEnv, noProxyEnv_get; - var EnvHttpProxyAgent = class extends DispatcherBase { - constructor(opts = {}) { - var _b, _c; - super(); - __privateAdd(this, _getProxyAgentForUrl); - __privateAdd(this, _shouldProxy); - __privateAdd(this, _parseNoProxy); - __privateAdd(this, _noProxyChanged); - __privateAdd(this, _noProxyEnv); - __privateAdd(this, _noProxyValue, null); - __privateAdd(this, _noProxyEntries, null); - __privateAdd(this, _opts, null); - __privateSet(this, _opts, opts); - if (!experimentalWarned) { - experimentalWarned = true; - process.emitWarning("EnvHttpProxyAgent is experimental, expect them to change at any time.", { - code: "UNDICI-EHPA" - }); - } - const _a = opts, { httpProxy, httpsProxy, noProxy } = _a, agentOpts = __objRest(_a, ["httpProxy", "httpsProxy", "noProxy"]); - this[kNoProxyAgent] = new Agent(agentOpts); - const HTTP_PROXY = (_b = httpProxy != null ? httpProxy : process.env.http_proxy) != null ? _b : process.env.HTTP_PROXY; - if (HTTP_PROXY) { - this[kHttpProxyAgent] = new ProxyAgent2(__spreadProps(__spreadValues({}, agentOpts), { uri: HTTP_PROXY })); - } else { - this[kHttpProxyAgent] = this[kNoProxyAgent]; - } - const HTTPS_PROXY = (_c = httpsProxy != null ? httpsProxy : process.env.https_proxy) != null ? _c : process.env.HTTPS_PROXY; - if (HTTPS_PROXY) { - this[kHttpsProxyAgent] = new ProxyAgent2(__spreadProps(__spreadValues({}, agentOpts), { uri: HTTPS_PROXY })); - } else { - this[kHttpsProxyAgent] = this[kHttpProxyAgent]; - } - __privateMethod(this, _parseNoProxy, parseNoProxy_fn).call(this); - } - [kDispatch](opts, handler) { - const url = new URL(opts.origin); - const agent = __privateMethod(this, _getProxyAgentForUrl, getProxyAgentForUrl_fn).call(this, url); - return agent.dispatch(opts, handler); - } - [kClose]() { - return __async(this, null, function* () { - yield this[kNoProxyAgent].close(); - if (!this[kHttpProxyAgent][kClosed]) { - yield this[kHttpProxyAgent].close(); - } - if (!this[kHttpsProxyAgent][kClosed]) { - yield this[kHttpsProxyAgent].close(); - } - }); - } - [kDestroy](err) { - return __async(this, null, function* () { - yield this[kNoProxyAgent].destroy(err); - if (!this[kHttpProxyAgent][kDestroyed]) { - yield this[kHttpProxyAgent].destroy(err); - } - if (!this[kHttpsProxyAgent][kDestroyed]) { - yield this[kHttpsProxyAgent].destroy(err); - } - }); - } - }; - _noProxyValue = new WeakMap(); - _noProxyEntries = new WeakMap(); - _opts = new WeakMap(); - _getProxyAgentForUrl = new WeakSet(); - getProxyAgentForUrl_fn = function(url) { - let { protocol, host: hostname, port } = url; - hostname = hostname.replace(/:\d*$/, "").toLowerCase(); - port = Number.parseInt(port, 10) || DEFAULT_PORTS[protocol] || 0; - if (!__privateMethod(this, _shouldProxy, shouldProxy_fn).call(this, hostname, port)) { - return this[kNoProxyAgent]; - } - if (protocol === "https:") { - return this[kHttpsProxyAgent]; - } - return this[kHttpProxyAgent]; - }; - _shouldProxy = new WeakSet(); - shouldProxy_fn = function(hostname, port) { - if (__privateGet(this, _noProxyChanged, noProxyChanged_get)) { - __privateMethod(this, _parseNoProxy, parseNoProxy_fn).call(this); - } - if (__privateGet(this, _noProxyEntries).length === 0) { - return true; - } - if (__privateGet(this, _noProxyValue) === "*") { - return false; - } - for (let i = 0; i < __privateGet(this, _noProxyEntries).length; i++) { - const entry = __privateGet(this, _noProxyEntries)[i]; - if (entry.port && entry.port !== port) { - continue; - } - if (!/^[.*]/.test(entry.hostname)) { - if (hostname === entry.hostname) { - return false; - } - } else { - if (hostname.endsWith(entry.hostname.replace(/^\*/, ""))) { - return false; - } - } - } - return true; - }; - _parseNoProxy = new WeakSet(); - parseNoProxy_fn = function() { - var _a; - const noProxyValue = (_a = __privateGet(this, _opts).noProxy) != null ? _a : __privateGet(this, _noProxyEnv, noProxyEnv_get); - const noProxySplit = noProxyValue.split(/[,\s]/); - const noProxyEntries = []; - for (let i = 0; i < noProxySplit.length; i++) { - const entry = noProxySplit[i]; - if (!entry) { - continue; - } - const parsed = entry.match(/^(.+):(\d+)$/); - noProxyEntries.push({ - hostname: (parsed ? parsed[1] : entry).toLowerCase(), - port: parsed ? Number.parseInt(parsed[2], 10) : 0 - }); - } - __privateSet(this, _noProxyValue, noProxyValue); - __privateSet(this, _noProxyEntries, noProxyEntries); - }; - _noProxyChanged = new WeakSet(); - noProxyChanged_get = function() { - if (__privateGet(this, _opts).noProxy !== void 0) { - return false; - } - return __privateGet(this, _noProxyValue) !== __privateGet(this, _noProxyEnv, noProxyEnv_get); - }; - _noProxyEnv = new WeakSet(); - noProxyEnv_get = function() { - var _a, _b; - return (_b = (_a = process.env.no_proxy) != null ? _a : process.env.NO_PROXY) != null ? _b : ""; - }; - module.exports = EnvHttpProxyAgent; - } - }); - - // - var require_retry_handler = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { kRetryHandlerDefaultRetry } = require_symbols(); - var { RequestRetryError } = require_errors(); - var { - isDisturbed, - parseHeaders, - parseRangeHeader, - wrapRequestBody - } = require_util(); - function calculateRetryAfterHeader(retryAfter) { - const current = Date.now(); - return new Date(retryAfter).getTime() - current; - } - function validatePartialResponseContentLength(headers, range, statusCode, retryCount) { - const contentLength = headers["content-length"]; - if (contentLength == null) { - return null; - } - if (!Number.isFinite(range.start) || !Number.isFinite(range.end)) { - return null; - } - const length = Number(contentLength); - const expectedLength = range.end - range.start + 1; - if (!Number.isFinite(length) || length !== expectedLength) { - return new RequestRetryError("Content-Length mismatch", statusCode, { - headers, - data: { count: retryCount } - }); - } - return null; - } - var RetryHandler = class _RetryHandler { - constructor(opts, handlers) { - const _a = opts, { retryOptions } = _a, dispatchOpts = __objRest(_a, ["retryOptions"]); - const { - // Retry scoped - retry: retryFn, - maxRetries, - maxTimeout, - minTimeout, - timeoutFactor, - // Response scoped - methods, - errorCodes, - retryAfter, - statusCodes - } = retryOptions != null ? retryOptions : {}; - this.dispatch = handlers.dispatch; - this.handler = handlers.handler; - this.opts = __spreadProps(__spreadValues({}, dispatchOpts), { body: wrapRequestBody(opts.body) }); - this.abort = null; - this.aborted = false; - this.retryOpts = { - retry: retryFn != null ? retryFn : _RetryHandler[kRetryHandlerDefaultRetry], - retryAfter: retryAfter != null ? retryAfter : true, - maxTimeout: maxTimeout != null ? maxTimeout : 30 * 1e3, - // 30s, - minTimeout: minTimeout != null ? minTimeout : 500, - // .5s - timeoutFactor: timeoutFactor != null ? timeoutFactor : 2, - maxRetries: maxRetries != null ? maxRetries : 5, - // What errors we should retry - methods: methods != null ? methods : ["GET", "HEAD", "OPTIONS", "PUT", "DELETE", "TRACE"], - // Indicates which errors to retry - statusCodes: statusCodes != null ? statusCodes : [500, 502, 503, 504, 429], - // List of errors to retry - errorCodes: errorCodes != null ? errorCodes : [ - "ECONNRESET", - "ECONNREFUSED", - "ENOTFOUND", - "ENETDOWN", - "ENETUNREACH", - "EHOSTDOWN", - "EHOSTUNREACH", - "EPIPE", - "UND_ERR_SOCKET" - ] - }; - this.retryCount = 0; - this.retryCountCheckpoint = 0; - this.start = 0; - this.end = null; - this.etag = null; - this.resume = null; - 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, - minTimeout, - maxTimeout, - timeoutFactor, - statusCodes, - errorCodes, - methods - } = retryOptions; - const { counter } = state; - if (code && code !== "UND_ERR_REQ_RETRY" && !errorCodes.includes(code)) { - cb(err); - return; - } - if (Array.isArray(methods) && !methods.includes(method)) { - cb(err); - return; - } - if (statusCode != null && Array.isArray(statusCodes) && !statusCodes.includes(statusCode)) { - cb(err); - return; - } - if (counter > maxRetries) { - cb(err); - return; - } - let retryAfterHeader = headers == null ? void 0 : headers["retry-after"]; - if (retryAfterHeader) { - retryAfterHeader = Number(retryAfterHeader); - retryAfterHeader = Number.isNaN(retryAfterHeader) ? calculateRetryAfterHeader(retryAfterHeader) : retryAfterHeader * 1e3; - } - const retryTimeout = retryAfterHeader > 0 ? Math.min(retryAfterHeader, maxTimeout) : Math.min(minTimeout * __pow(timeoutFactor, counter - 1), maxTimeout); - setTimeout(() => cb(null), retryTimeout); - } - onHeaders(statusCode, rawHeaders, resume, statusMessage) { - const headers = parseHeaders(rawHeaders); - this.retryCount += 1; - if (statusCode >= 300) { - if (this.retryOpts.statusCodes.includes(statusCode) === false) { - return this.handler.onHeaders( - statusCode, - rawHeaders, - resume, - statusMessage - ); - } else { - this.abort( - new RequestRetryError("Request failed", statusCode, { - headers, - data: { - count: this.retryCount - } - }) - ); - return false; - } - } - if (this.resume != null) { - this.resume = null; - if (statusCode !== 206 && (this.start > 0 || statusCode !== 200)) { - this.abort( - new RequestRetryError("server does not support the range header and the payload was partially consumed", statusCode, { - headers, - data: { count: this.retryCount } - }) - ); - return false; - } - const contentRange = parseRangeHeader(headers["content-range"]); - if (!contentRange) { - this.abort( - new RequestRetryError("Content-Range mismatch", statusCode, { - headers, - data: { count: this.retryCount } - }) - ); - return false; - } - if (this.etag != null && this.etag !== headers.etag) { - this.abort( - new RequestRetryError("ETag mismatch", statusCode, { - headers, - data: { count: this.retryCount } - }) - ); - return false; - } - const contentLengthError = validatePartialResponseContentLength(headers, contentRange, statusCode, this.retryCount); - if (contentLengthError != null) { - this.abort(contentLengthError); - return false; - } - const { start, size, end = size - 1 } = 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) { - const range = parseRangeHeader(headers["content-range"]); - if (range == null) { - return this.handler.onHeaders( - statusCode, - rawHeaders, - resume, - statusMessage - ); - } - const contentLengthError = validatePartialResponseContentLength(headers, range, statusCode, this.retryCount); - if (contentLengthError != null) { - this.abort(contentLengthError); - return false; - } - const { start, size, end = size - 1 } = range; - assert( - start != null && Number.isFinite(start), - "content-range mismatch" - ); - assert(end != null && Number.isFinite(end), "invalid content-length"); - this.start = start; - this.end = end; - } - if (this.end == null) { - const contentLength = headers["content-length"]; - this.end = contentLength != null ? Number(contentLength) - 1 : 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; - if (this.etag != null && this.etag.startsWith("W/")) { - this.etag = null; - } - return this.handler.onHeaders( - statusCode, - rawHeaders, - resume, - statusMessage - ); - } - const err = new RequestRetryError("Request failed", statusCode, { - headers, - data: { 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); - } - if (this.retryCount - this.retryCountCheckpoint > 0) { - this.retryCount = this.retryCountCheckpoint + (this.retryCount - this.retryCountCheckpoint); - } else { - this.retryCount += 1; - } - this.retryOpts.retry( - err, - { - state: { counter: this.retryCount }, - opts: __spreadValues({ retryOptions: this.retryOpts }, this.opts) - }, - onRetry.bind(this) - ); - function onRetry(err2) { - var _a; - if (err2 != null || this.aborted || isDisturbed(this.opts.body)) { - return this.handler.onError(err2); - } - if (this.start !== 0) { - const headers = { range: `bytes=${this.start}-${(_a = this.end) != null ? _a : ""}` }; - if (this.etag != null) { - headers["if-match"] = this.etag; - } - this.opts = __spreadProps(__spreadValues({}, this.opts), { - headers: __spreadValues(__spreadValues({}, this.opts.headers), headers) - }); - } - try { - this.retryCountCheckpoint = this.retryCount; - this.dispatch(this.opts, this); - } catch (err3) { - this.handler.onError(err3); - } - } - } - }; - module.exports = RetryHandler; - } - }); - - // - var require_retry_agent = __commonJS({ - ""(exports, module) { - "use strict"; - var Dispatcher = require_dispatcher(); - var RetryHandler = require_retry_handler(); - var _agent, _options; - var RetryAgent = class extends Dispatcher { - constructor(agent, options = {}) { - super(options); - __privateAdd(this, _agent, null); - __privateAdd(this, _options, null); - __privateSet(this, _agent, agent); - __privateSet(this, _options, options); - } - dispatch(opts, handler) { - const retry = new RetryHandler(__spreadProps(__spreadValues({}, opts), { - retryOptions: __privateGet(this, _options) - }), { - dispatch: __privateGet(this, _agent).dispatch.bind(__privateGet(this, _agent)), - handler - }); - return __privateGet(this, _agent).dispatch(opts, retry); - } - close() { - return __privateGet(this, _agent).close(); - } - destroy() { - return __privateGet(this, _agent).destroy(); - } - }; - _agent = new WeakMap(); - _options = new WeakMap(); - module.exports = RetryAgent; - } - }); - - // - var require_readable = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { Readable } = __require("stream"); - var { RequestAbortedError, NotSupportedError, InvalidArgumentError, AbortError } = require_errors(); - var util = require_util(); - var { ReadableStreamFrom } = require_util(); - var kConsume = Symbol("kConsume"); - var kReading = Symbol("kReading"); - var kBody = Symbol("kBody"); - var kAbort = Symbol("kAbort"); - var kContentType = Symbol("kContentType"); - var kContentLength = Symbol("kContentLength"); - var noop = () => { - }; - var BodyReadable = class extends Readable { - constructor({ - resume, - abort, - contentType = "", - contentLength, - 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; - this[kContentLength] = contentLength; - this[kReading] = false; - } - destroy(err) { - if (!err && !this._readableState.endEmitted) { - err = new RequestAbortedError(); - } - if (err) { - this[kAbort](); - } - return super.destroy(err); - } - _destroy(err, callback) { - if (!this[kReading]) { - setImmediate(() => { - callback(err); - }); - } else { - callback(err); - } - } - 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) { - consumePush(this[kConsume], chunk); - return this[kReading] ? super.push(chunk) : true; - } - return super.push(chunk); - } - // https://fetch.spec.whatwg.org/#dom-body-text - text() { - return __async(this, null, function* () { - return consume(this, "text"); - }); - } - // https://fetch.spec.whatwg.org/#dom-body-json - json() { - return __async(this, null, function* () { - return consume(this, "json"); - }); - } - // https://fetch.spec.whatwg.org/#dom-body-blob - blob() { - return __async(this, null, function* () { - return consume(this, "blob"); - }); - } - // https://fetch.spec.whatwg.org/#dom-body-bytes - bytes() { - return __async(this, null, function* () { - return consume(this, "bytes"); - }); - } - // https://fetch.spec.whatwg.org/#dom-body-arraybuffer - arrayBuffer() { - return __async(this, null, function* () { - return consume(this, "arrayBuffer"); - }); - } - // https://fetch.spec.whatwg.org/#dom-body-formdata - formData() { - return __async(this, null, function* () { - 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]) { - this[kBody].getReader(); - assert(this[kBody].locked); - } - } - return this[kBody]; - } - dump(opts) { - return __async(this, null, function* () { - let limit = Number.isFinite(opts == null ? void 0 : opts.limit) ? opts.limit : 128 * 1024; - const signal = opts == null ? void 0 : opts.signal; - if (signal != null && (typeof signal !== "object" || !("aborted" in signal))) { - throw new InvalidArgumentError("signal must be an AbortSignal"); - } - signal == null ? void 0 : signal.throwIfAborted(); - if (this._readableState.closeEmitted) { - return null; - } - return yield new Promise((resolve2, reject) => { - if (this[kContentLength] > limit) { - this.destroy(new AbortError()); - } - const onAbort = () => { - var _a; - this.destroy((_a = signal.reason) != null ? _a : new AbortError()); - }; - signal == null ? void 0 : signal.addEventListener("abort", onAbort); - this.on("close", function() { - var _a; - signal == null ? void 0 : signal.removeEventListener("abort", onAbort); - if (signal == null ? void 0 : signal.aborted) { - reject((_a = signal.reason) != null ? _a : new AbortError()); - } else { - resolve2(null); - } - }).on("error", noop).on("data", function(chunk) { - limit -= chunk.length; - if (limit <= 0) { - this.destroy(); - } - }).resume(); - }); - }); - } - }; - function isLocked(self) { - return self[kBody] && self[kBody].locked === true || self[kConsume]; - } - function isUnusable(self) { - return util.isDisturbed(self) || isLocked(self); - } - function consume(stream, type) { - return __async(this, null, function* () { - assert(!stream[kConsume]); - return new Promise((resolve2, reject) => { - var _a; - if (isUnusable(stream)) { - const rState = stream._readableState; - if (rState.destroyed && rState.closeEmitted === false) { - stream.on("error", (err) => { - reject(err); - }).on("close", () => { - reject(new TypeError("unusable")); - }); - } else { - reject((_a = rState.errored) != null ? _a : new TypeError("unusable")); - } - } else { - queueMicrotask(() => { - stream[kConsume] = { - type, - stream, - resolve: resolve2, - 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()); - } - }); - consumeStart(stream[kConsume]); - }); - } - }); - }); - } - function consumeStart(consume2) { - if (consume2.body === null) { - return; - } - const { _readableState: state } = consume2.stream; - if (state.bufferIndex) { - const start = state.bufferIndex; - const end = state.buffer.length; - for (let n = start; n < end; n++) { - consumePush(consume2, state.buffer[n]); - } - } else { - for (const chunk of state.buffer) { - consumePush(consume2, chunk); - } - } - if (state.endEmitted) { - consumeEnd(this[kConsume]); - } else { - consume2.stream.on("end", function() { - consumeEnd(this[kConsume]); - }); - } - consume2.stream.resume(); - while (consume2.stream.read() != null) { - } - } - function chunksDecode(chunks, length) { - if (chunks.length === 0 || length === 0) { - return ""; - } - const buffer = chunks.length === 1 ? chunks[0] : Buffer.concat(chunks, length); - const bufferLength = buffer.length; - const start = bufferLength > 2 && buffer[0] === 239 && buffer[1] === 187 && buffer[2] === 191 ? 3 : 0; - return buffer.utf8Slice(start, bufferLength); - } - function chunksConcat(chunks, length) { - if (chunks.length === 0 || length === 0) { - return new Uint8Array(0); - } - if (chunks.length === 1) { - return new Uint8Array(chunks[0]); - } - const buffer = new Uint8Array(Buffer.allocUnsafeSlow(length).buffer); - let offset = 0; - for (let i = 0; i < chunks.length; ++i) { - const chunk = chunks[i]; - buffer.set(chunk, offset); - offset += chunk.length; - } - return buffer; - } - function consumeEnd(consume2) { - const { type, body, resolve: resolve2, stream, length } = consume2; - try { - if (type === "text") { - resolve2(chunksDecode(body, length)); - } else if (type === "json") { - resolve2(JSON.parse(chunksDecode(body, length))); - } else if (type === "arrayBuffer") { - resolve2(chunksConcat(body, length).buffer); - } else if (type === "blob") { - resolve2(new Blob(body, { type: stream[kContentType] })); - } else if (type === "bytes") { - resolve2(chunksConcat(body, length)); - } - consumeFinish(consume2); - } catch (err) { - stream.destroy(err); - } - } - function consumePush(consume2, chunk) { - consume2.length += chunk.length; - consume2.body.push(chunk); - } - function consumeFinish(consume2, err) { - if (consume2.body === null) { - return; - } - if (err) { - consume2.reject(err); - } else { - consume2.resolve(); - } - consume2.type = null; - consume2.stream = null; - consume2.resolve = null; - consume2.reject = null; - consume2.length = 0; - consume2.body = null; - } - module.exports = { Readable: BodyReadable, chunksDecode }; - } - }); - - // - var require_util3 = __commonJS({ - ""(exports, module) { - var assert = __require("assert"); - var { - ResponseStatusCodeError - } = require_errors(); - var { chunksDecode } = require_readable(); - var CHUNK_LIMIT = 128 * 1024; - function getResolveErrorBodyCallback(_0) { - return __async(this, arguments, function* ({ callback, body, contentType, statusCode, statusMessage, headers }) { - assert(body); - let chunks = []; - let length = 0; - try { - try { - for (var iter = __forAwait(body), more, temp, error; more = !(temp = yield iter.next()).done; more = false) { - const chunk = temp.value; - chunks.push(chunk); - length += chunk.length; - if (length > CHUNK_LIMIT) { - chunks = []; - length = 0; - break; - } - } - } catch (temp) { - error = [temp]; - } finally { - try { - more && (temp = iter.return) && (yield temp.call(iter)); - } finally { - if (error) - throw error[0]; - } - } - } catch (e) { - chunks = []; - length = 0; - } - const message = `Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ""}`; - if (statusCode === 204 || !contentType || !length) { - queueMicrotask(() => callback(new ResponseStatusCodeError(message, statusCode, headers))); - return; - } - const stackTraceLimit = Error.stackTraceLimit; - Error.stackTraceLimit = 0; - let payload; - try { - if (isContentTypeApplicationJson(contentType)) { - payload = JSON.parse(chunksDecode(chunks, length)); - } else if (isContentTypeText(contentType)) { - payload = chunksDecode(chunks, length); - } - } catch (e) { - } finally { - Error.stackTraceLimit = stackTraceLimit; - } - queueMicrotask(() => callback(new ResponseStatusCodeError(message, statusCode, headers, payload))); - }); - } - var isContentTypeApplicationJson = (contentType) => { - return contentType.length > 15 && contentType[11] === "/" && contentType[0] === "a" && contentType[1] === "p" && contentType[2] === "p" && contentType[3] === "l" && contentType[4] === "i" && contentType[5] === "c" && contentType[6] === "a" && contentType[7] === "t" && contentType[8] === "i" && contentType[9] === "o" && contentType[10] === "n" && contentType[12] === "j" && contentType[13] === "s" && contentType[14] === "o" && contentType[15] === "n"; - }; - var isContentTypeText = (contentType) => { - return contentType.length > 4 && contentType[4] === "/" && contentType[0] === "t" && contentType[1] === "e" && contentType[2] === "x" && contentType[3] === "t"; - }; - module.exports = { - getResolveErrorBodyCallback, - isContentTypeApplicationJson, - isContentTypeText - }; - } - }); - - // - var require_api_request = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { Readable } = require_readable(); - var { InvalidArgumentError, RequestAbortedError } = require_errors(); - var util = require_util(); - var { getResolveErrorBodyCallback } = require_util3(); - var { AsyncResource } = __require("async_hooks"); - var RequestHandler = class extends AsyncResource { - constructor(opts, callback) { - var _a; - 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.method = method; - 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; - this.signal = signal; - this.reason = null; - this.removeAbortListener = null; - if (util.isStream(body)) { - body.on("error", (err) => { - this.onError(err); - }); - } - if (this.signal) { - if (this.signal.aborted) { - this.reason = (_a = this.signal.reason) != null ? _a : new RequestAbortedError(); - } else { - this.removeAbortListener = util.addAbortListener(this.signal, () => { - var _a2, _b; - this.reason = (_a2 = this.signal.reason) != null ? _a2 : new RequestAbortedError(); - if (this.res) { - util.destroy(this.res.on("error", util.nop), this.reason); - } else if (this.abort) { - this.abort(this.reason); - } - if (this.removeAbortListener) { - (_b = this.res) == null ? void 0 : _b.off("close", this.removeAbortListener); - this.removeAbortListener(); - this.removeAbortListener = null; - } - }); - } - } - } - onConnect(abort, context) { - if (this.reason) { - abort(this.reason); - return; - } - assert(this.callback); - 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 contentLength = parsedHeaders["content-length"]; - const res = new Readable({ - resume, - abort, - contentType, - contentLength: this.method !== "HEAD" && contentLength ? Number(contentLength) : null, - highWaterMark - }); - if (this.removeAbortListener) { - res.on("close", this.removeAbortListener); - } - this.callback = null; - this.res = res; - if (callback !== null) { - if (this.throwOnError && statusCode >= 400) { - this.runInAsyncScope( - getResolveErrorBodyCallback, - null, - { callback, body: res, contentType, statusCode, statusMessage, headers } - ); - } else { - this.runInAsyncScope(callback, null, null, { - statusCode, - headers, - trailers: this.trailers, - opaque, - body: res, - context - }); - } - } - } - onData(chunk) { - return this.res.push(chunk); - } - onComplete(trailers) { - util.parseHeaders(trailers, this.trailers); - this.res.push(null); - } - onError(err) { - const { res, callback, body, opaque } = this; - if (callback) { - this.callback = null; - queueMicrotask(() => { - this.runInAsyncScope(callback, null, err, { opaque }); - }); - } - if (res) { - this.res = null; - queueMicrotask(() => { - util.destroy(res, err); - }); - } - if (body) { - this.body = null; - util.destroy(body, err); - } - if (this.removeAbortListener) { - res == null ? void 0 : res.off("close", this.removeAbortListener); - this.removeAbortListener(); - this.removeAbortListener = null; - } - } - }; - function request(opts, callback) { - if (callback === void 0) { - return new Promise((resolve2, reject) => { - request.call(this, opts, (err, data) => { - return err ? reject(err) : resolve2(data); - }); - }); - } - try { - this.dispatch(opts, new RequestHandler(opts, callback)); - } catch (err) { - if (typeof callback !== "function") { - throw err; - } - const opaque = opts == null ? void 0 : opts.opaque; - queueMicrotask(() => callback(err, { opaque })); - } - } - module.exports = request; - module.exports.RequestHandler = RequestHandler; - } - }); - - // - var require_abort_signal = __commonJS({ - ""(exports, module) { - var { addAbortListener } = require_util(); - var { RequestAbortedError } = require_errors(); - var kListener = Symbol("kListener"); - var kSignal = Symbol("kSignal"); - function abort(self) { - var _a, _b, _c; - if (self.abort) { - self.abort((_a = self[kSignal]) == null ? void 0 : _a.reason); - } else { - self.reason = (_c = (_b = self[kSignal]) == null ? void 0 : _b.reason) != null ? _c : new RequestAbortedError(); - } - removeSignal(self); - } - function addSignal(self, signal) { - self.reason = null; - 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 - }; - } - }); - - // - var require_api_stream = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { finished, PassThrough } = __require("stream"); - var { InvalidArgumentError, InvalidReturnValueError } = require_errors(); - var util = require_util(); - var { getResolveErrorBodyCallback } = require_util3(); - var { AsyncResource } = __require("async_hooks"); - var { addSignal, removeSignal } = require_abort_signal(); - var StreamHandler = class 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.reason) { - abort(this.reason); - return; - } - assert(this.callback); - this.abort = abort; - this.context = context; - } - onHeaders(statusCode, rawHeaders, resume, statusMessage) { - var _a; - 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"); - } - finished(res, { readable: false }, (err) => { - const { callback: callback2, res: res2, opaque: opaque2, trailers, abort } = this; - this.res = null; - if (err || !res2.readable) { - util.destroy(res2, err); - } - this.callback = null; - this.runInAsyncScope(callback2, null, err || null, { opaque: opaque2, trailers }); - if (err) { - abort(); - } - }); - } - res.on("drain", resume); - this.res = res; - const needDrain = res.writableNeedDrain !== void 0 ? res.writableNeedDrain : (_a = res._writableState) == null ? void 0 : _a.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 === void 0) { - return new Promise((resolve2, reject) => { - stream.call(this, opts, factory, (err, data) => { - return err ? reject(err) : resolve2(data); - }); - }); - } - try { - this.dispatch(opts, new StreamHandler(opts, factory, callback)); - } catch (err) { - if (typeof callback !== "function") { - throw err; - } - const opaque = opts == null ? void 0 : opts.opaque; - queueMicrotask(() => callback(err, { opaque })); - } - } - module.exports = stream; - } - }); - - // - var require_api_pipeline = __commonJS({ - ""(exports, module) { - "use strict"; - var { - Readable, - Duplex, - PassThrough - } = __require("stream"); - var { - InvalidArgumentError, - InvalidReturnValueError, - RequestAbortedError - } = require_errors(); - var util = require_util(); - var { AsyncResource } = __require("async_hooks"); - var { addSignal, removeSignal } = require_abort_signal(); - var assert = __require("assert"); - var kResume = Symbol("resume"); - var PipelineRequest = class 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); - } - }; - var PipelineResponse = class 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); - } - }; - var PipelineHandler = class 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 == null ? void 0 : 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; - req.push(null); - }); - this.res = null; - addSignal(this, signal); - } - onConnect(abort, context) { - const { ret, res } = this; - if (this.reason) { - abort(this.reason); - return; - } - assert(!res, "pipeline cannot be retried"); - assert(!ret.destroyed); - 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: body2 } = this; - if (!ret.push(chunk) && body2.pause) { - body2.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(__spreadProps(__spreadValues({}, opts), { body: pipelineHandler.req }), pipelineHandler); - return pipelineHandler.ret; - } catch (err) { - return new PassThrough().destroy(err); - } - } - module.exports = pipeline; - } - }); - - // - var require_api_upgrade = __commonJS({ - ""(exports, module) { - "use strict"; - var { InvalidArgumentError, SocketError } = require_errors(); - var { AsyncResource } = __require("async_hooks"); - var util = require_util(); - var { addSignal, removeSignal } = require_abort_signal(); - var assert = __require("assert"); - var UpgradeHandler = class 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.reason) { - abort(this.reason); - return; - } - assert(this.callback); - this.abort = abort; - this.context = null; - } - onHeaders() { - throw new SocketError("bad upgrade", null); - } - onUpgrade(statusCode, rawHeaders, socket) { - assert(statusCode === 101); - const { callback, opaque, context } = this; - 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 === void 0) { - return new Promise((resolve2, reject) => { - upgrade.call(this, opts, (err, data) => { - return err ? reject(err) : resolve2(data); - }); - }); - } - try { - const upgradeHandler = new UpgradeHandler(opts, callback); - this.dispatch(__spreadProps(__spreadValues({}, opts), { - method: opts.method || "GET", - upgrade: opts.protocol || "Websocket" - }), upgradeHandler); - } catch (err) { - if (typeof callback !== "function") { - throw err; - } - const opaque = opts == null ? void 0 : opts.opaque; - queueMicrotask(() => callback(err, { opaque })); - } - } - module.exports = upgrade; - } - }); - - // - var require_api_connect = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { AsyncResource } = __require("async_hooks"); - var { InvalidArgumentError, SocketError } = require_errors(); - var util = require_util(); - var { addSignal, removeSignal } = require_abort_signal(); - var ConnectHandler = class 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.reason) { - abort(this.reason); - return; - } - assert(this.callback); - 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; - 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 === void 0) { - return new Promise((resolve2, reject) => { - connect.call(this, opts, (err, data) => { - return err ? reject(err) : resolve2(data); - }); - }); - } - try { - const connectHandler = new ConnectHandler(opts, callback); - this.dispatch(__spreadProps(__spreadValues({}, opts), { method: "CONNECT" }), connectHandler); - } catch (err) { - if (typeof callback !== "function") { - throw err; - } - const opaque = opts == null ? void 0 : opts.opaque; - queueMicrotask(() => callback(err, { opaque })); - } - } - module.exports = connect; - } - }); - - // - var require_api = __commonJS({ - ""(exports, module) { - "use strict"; - module.exports.request = require_api_request(); - module.exports.stream = require_api_stream(); - module.exports.pipeline = require_api_pipeline(); - module.exports.upgrade = require_api_upgrade(); - module.exports.connect = require_api_connect(); - } - }); - - // - var require_mock_errors = __commonJS({ - ""(exports, module) { - "use strict"; - var { UndiciError } = require_errors(); - var kMockNotMatchedError = Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED"); - var _a; - var _MockNotMatchedError = class _MockNotMatchedError extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a, true); - 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"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kMockNotMatchedError] === true; - } - }; - _a = kMockNotMatchedError; - var MockNotMatchedError = _MockNotMatchedError; - module.exports = { - MockNotMatchedError - }; - } - }); - - // - var require_mock_symbols = __commonJS({ - ""(exports, 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") - }; - } - }); - - // - var require_mock_utils = __commonJS({ - ""(exports, module) { - "use strict"; - var { MockNotMatchedError } = require_mock_errors(); - var { - kDispatches, - kMockAgent, - kOriginalDispatch, - kOrigin, - kGetNetConnect - } = require_mock_symbols(); - var { buildURL } = require_util(); - var { STATUS_CODES } = __require("http"); - var { - types: { - isPromise - } - } = __require("util"); - 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]; - }) - ); - } - 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 void 0; - } else if (typeof headers.get === "function") { - return headers.get(key); - } else { - return lowerCaseEntries(headers)[key.toLocaleLowerCase()]; - } - } - function buildHeadersFromArray(headers) { - 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(mockDispatch2, headers) { - if (typeof mockDispatch2.headers === "function") { - if (Array.isArray(headers)) { - headers = buildHeadersFromArray(headers); - } - return mockDispatch2.headers(headers ? lowerCaseEntries(headers) : {}); - } - if (typeof mockDispatch2.headers === "undefined") { - return true; - } - if (typeof headers !== "object" || typeof mockDispatch2.headers !== "object") { - return false; - } - for (const [matchHeaderName, matchHeaderValue] of Object.entries(mockDispatch2.headers)) { - const headerValue = getHeaderByName(headers, matchHeaderName); - if (!matchValue(matchHeaderValue, headerValue)) { - return false; - } - } - return true; - } - function safeUrl(path4) { - if (typeof path4 !== "string") { - return path4; - } - const pathSegments = path4.split("?"); - if (pathSegments.length !== 2) { - return path4; - } - const qp = new URLSearchParams(pathSegments.pop()); - qp.sort(); - return [...pathSegments, qp.toString()].join("?"); - } - function matchKey(mockDispatch2, { path: path4, method, body, headers }) { - const pathMatch = matchValue(mockDispatch2.path, path4); - const methodMatch = matchValue(mockDispatch2.method, method); - const bodyMatch = typeof mockDispatch2.body !== "undefined" ? matchValue(mockDispatch2.body, body) : true; - const headersMatch = matchHeaders(mockDispatch2, headers); - return pathMatch && methodMatch && bodyMatch && headersMatch; - } - function getResponseData(data) { - if (Buffer.isBuffer(data)) { - return data; - } else if (data instanceof Uint8Array) { - return data; - } else if (data instanceof ArrayBuffer) { - 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; - let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path: path4 }) => matchValue(safeUrl(path4), resolvedPath)); - if (matchedMockDispatches.length === 0) { - throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`); - } - matchedMockDispatches = matchedMockDispatches.filter(({ method }) => matchValue(method, key.method)); - if (matchedMockDispatches.length === 0) { - throw new MockNotMatchedError(`Mock dispatch not matched for method '${key.method}' on path '${resolvedPath}'`); - } - 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}' on path '${resolvedPath}'`); - } - matchedMockDispatches = matchedMockDispatches.filter((mockDispatch2) => matchHeaders(mockDispatch2, key.headers)); - if (matchedMockDispatches.length === 0) { - const headers = typeof key.headers === "object" ? JSON.stringify(key.headers) : key.headers; - throw new MockNotMatchedError(`Mock dispatch not matched for headers '${headers}' on path '${resolvedPath}'`); - } - 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 } : __spreadValues({}, data); - const newMockDispatch = __spreadProps(__spreadValues(__spreadValues({}, baseData), key), { pending: true, data: __spreadValues({ 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: path4, method, body, headers, query } = opts; - return { - path: path4, - method, - body, - headers, - query - }; - } - function generateKeyValues(data) { - const keys = Object.keys(data); - const result = []; - for (let i = 0; i < keys.length; ++i) { - const key = keys[i]; - const value = data[key]; - const name = Buffer.from(`${key}`); - if (Array.isArray(value)) { - for (let j = 0; j < value.length; ++j) { - result.push(name, Buffer.from(`${value[j]}`)); - } - } else { - result.push(name, Buffer.from(`${value}`)); - } - } - return result; - } - function getStatusText(statusCode) { - return STATUS_CODES[statusCode] || "unknown"; - } - function getResponse(body) { - return __async(this, null, function* () { - const buffers = []; - try { - for (var iter = __forAwait(body), more, temp, error; more = !(temp = yield iter.next()).done; more = false) { - const data = temp.value; - buffers.push(data); - } - } catch (temp) { - error = [temp]; - } finally { - try { - more && (temp = iter.return) && (yield temp.call(iter)); - } finally { - if (error) - throw error[0]; - } - } - return Buffer.concat(buffers).toString("utf8"); - }); - } - function mockDispatch(opts, handler) { - const key = buildKey(opts); - const mockDispatch2 = getMockDispatch(this[kDispatches], key); - mockDispatch2.timesInvoked++; - if (mockDispatch2.data.callback) { - mockDispatch2.data = __spreadValues(__spreadValues({}, mockDispatch2.data), mockDispatch2.data.callback(opts)); - } - const { data: { statusCode, data, headers, trailers, error }, delay, persist } = mockDispatch2; - const { timesInvoked, times } = mockDispatch2; - mockDispatch2.consumed = !persist && timesInvoked >= times; - mockDispatch2.pending = timesInvoked < times; - if (error !== null) { - deleteMockDispatch(this[kDispatches], key); - handler.onError(error); - return true; - } - if (typeof delay === "number" && delay > 0) { - setTimeout(() => { - handleReply(this[kDispatches]); - }, delay); - } else { - handleReply(this[kDispatches]); - } - function handleReply(mockDispatches, _data = data) { - var _a, _b, _c, _d; - const optsHeaders = Array.isArray(opts.headers) ? buildHeadersFromArray(opts.headers) : opts.headers; - const body = typeof _data === "function" ? _data(__spreadProps(__spreadValues({}, opts), { headers: optsHeaders })) : _data; - if (isPromise(body)) { - body.then((newData) => handleReply(mockDispatches, newData)); - return; - } - const responseData = getResponseData(body); - const responseHeaders = generateKeyValues(headers); - const responseTrailers = generateKeyValues(trailers); - (_a = handler.onConnect) == null ? void 0 : _a.call(handler, (err) => handler.onError(err), null); - (_b = handler.onHeaders) == null ? void 0 : _b.call(handler, statusCode, responseHeaders, resume, getStatusText(statusCode)); - (_c = handler.onData) == null ? void 0 : _c.call(handler, Buffer.from(responseData)); - (_d = handler.onComplete) == null ? void 0 : _d.call(handler, 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 _a = opts, { agent } = _a, mockOptions = __objRest(_a, ["agent"]); - return mockOptions; - } - } - module.exports = { - getResponseData, - getMockDispatch, - addMockDispatch, - deleteMockDispatch, - buildKey, - generateKeyValues, - matchValue, - getResponse, - getStatusText, - mockDispatch, - buildMockDispatch, - checkNetConnect, - buildMockOptions, - getHeaderByName, - buildHeadersFromArray - }; - } - }); - - // - var require_mock_interceptor = __commonJS({ - ""(exports, module) { - "use strict"; - var { getResponseData, buildKey, addMockDispatch } = require_mock_utils(); - var { - kDispatches, - kDispatchKey, - kDefaultHeaders, - kDefaultTrailers, - kContentLength, - kMockDispatch - } = require_mock_symbols(); - var { InvalidArgumentError } = require_errors(); - var { buildURL } = require_util(); - var MockScope = class { - 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; - } - }; - var MockInterceptor = class { - 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"; - } - if (typeof opts.path === "string") { - if (opts.query) { - opts.path = buildURL(opts.path, opts.query); - } else { - 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 = __spreadValues(__spreadValues(__spreadValues({}, this[kDefaultHeaders]), contentLength), responseOptions.headers); - const trailers = __spreadValues(__spreadValues({}, this[kDefaultTrailers]), responseOptions.trailers); - return { statusCode, data, headers, trailers }; - } - validateReplyParameters(replyParameters) { - if (typeof replyParameters.statusCode === "undefined") { - throw new InvalidArgumentError("statusCode must be defined"); - } - if (typeof replyParameters.responseOptions !== "object" || replyParameters.responseOptions === null) { - throw new InvalidArgumentError("responseOptions must be an object"); - } - } - /** - * Mock an undici request with a defined reply. - */ - reply(replyOptionsCallbackOrStatusCode) { - if (typeof replyOptionsCallbackOrStatusCode === "function") { - const wrappedDefaultsCallback = (opts) => { - const resolvedData = replyOptionsCallbackOrStatusCode(opts); - if (typeof resolvedData !== "object" || resolvedData === null) { - throw new InvalidArgumentError("reply options callback must return an object"); - } - const replyParameters2 = __spreadValues({ data: "", responseOptions: {} }, resolvedData); - this.validateReplyParameters(replyParameters2); - return __spreadValues({}, this.createMockScopeDispatchData(replyParameters2)); - }; - const newMockDispatch2 = addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback); - return new MockScope(newMockDispatch2); - } - const replyParameters = { - statusCode: replyOptionsCallbackOrStatusCode, - data: arguments[1] === void 0 ? "" : arguments[1], - responseOptions: arguments[2] === void 0 ? {} : arguments[2] - }; - this.validateReplyParameters(replyParameters); - const dispatchData = this.createMockScopeDispatchData(replyParameters); - 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; - } - }); - - // - var require_mock_client = __commonJS({ - ""(exports, module) { - "use strict"; - var { promisify } = __require("util"); - var Client = require_client(); - var { buildMockDispatch } = require_mock_utils(); - var { - kDispatches, - kMockAgent, - kClose, - kOriginalClose, - kOrigin, - kOriginalDispatch, - kConnected - } = require_mock_symbols(); - var { MockInterceptor } = require_mock_interceptor(); - var Symbols = require_symbols(); - var { InvalidArgumentError } = require_errors(); - var MockClient = class 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]); - } - [kClose]() { - return __async(this, null, function* () { - yield promisify(this[kOriginalClose])(); - this[kConnected] = 0; - this[kMockAgent][Symbols.kClients].delete(this[kOrigin]); - }); - } - }; - module.exports = MockClient; - } - }); - - // - var require_mock_pool = __commonJS({ - ""(exports, module) { - "use strict"; - var { promisify } = __require("util"); - var Pool = require_pool(); - var { buildMockDispatch } = require_mock_utils(); - var { - kDispatches, - kMockAgent, - kClose, - kOriginalClose, - kOrigin, - kOriginalDispatch, - kConnected - } = require_mock_symbols(); - var { MockInterceptor } = require_mock_interceptor(); - var Symbols = require_symbols(); - var { InvalidArgumentError } = require_errors(); - var MockPool = class 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]); - } - [kClose]() { - return __async(this, null, function* () { - yield promisify(this[kOriginalClose])(); - this[kConnected] = 0; - this[kMockAgent][Symbols.kClients].delete(this[kOrigin]); - }); - } - }; - module.exports = MockPool; - } - }); - - // - var require_pluralizer = __commonJS({ - ""(exports, module) { - "use strict"; - var singulars = { - pronoun: "it", - is: "is", - was: "was", - this: "this" - }; - var 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 __spreadProps(__spreadValues({}, keys), { count, noun }); - } - }; - } - }); - - // - var require_pending_interceptors_formatter = __commonJS({ - ""(exports, module) { - "use strict"; - var { Transform } = __require("stream"); - var { Console } = __require("console"); - var PERSISTENT = process.versions.icu ? "\u2705" : "Y "; - var NOT_PERSISTENT = process.versions.icu ? "\u274C" : "N "; - 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: path4, data: { statusCode }, persist, times, timesInvoked, origin }) => ({ - Method: method, - Origin: origin, - Path: path4, - "Status code": statusCode, - Persistent: persist ? PERSISTENT : NOT_PERSISTENT, - Invocations: timesInvoked, - Remaining: persist ? Infinity : times - timesInvoked - }) - ); - this.logger.table(withPrettyHeaders); - return this.transform.read().toString(); - } - }; - } - }); - - // - var require_mock_agent = __commonJS({ - ""(exports, module) { - "use strict"; - var { kClients } = require_symbols(); - var Agent = require_agent(); - var { - kAgent, - kMockAgentSet, - kMockAgentGet, - kDispatches, - kIsMockActive, - kNetConnect, - kGetNetConnect, - kOptions, - kFactory - } = require_mock_symbols(); - var MockClient = require_mock_client(); - var MockPool = require_mock_pool(); - var { matchValue, buildMockOptions } = require_mock_utils(); - var { InvalidArgumentError, UndiciError } = require_errors(); - var Dispatcher = require_dispatcher(); - var Pluralizer = require_pluralizer(); - var PendingInterceptorsFormatter = require_pending_interceptors_formatter(); - var MockAgent = class extends Dispatcher { - constructor(opts) { - super(opts); - this[kNetConnect] = true; - this[kIsMockActive] = true; - if ((opts == null ? void 0 : opts.agent) && typeof opts.agent.dispatch !== "function") { - throw new InvalidArgumentError("Argument opts.agent must implement Agent"); - } - const agent = (opts == null ? void 0 : 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) { - this.get(opts.origin); - return this[kAgent].dispatch(opts, handler); - } - close() { - return __async(this, null, function* () { - yield 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, 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) { - const client = this[kClients].get(origin); - if (client) { - return client; - } - if (typeof origin !== "string") { - const dispatcher = this[kFactory]("http://localhost:9999"); - this[kMockAgentSet](origin, dispatcher); - return dispatcher; - } - for (const [keyMatcher, nonExplicitDispatcher] of Array.from(this[kClients])) { - 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[kDispatches].map((dispatch) => __spreadProps(__spreadValues({}, 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; - } - }); - - // - var require_global2 = __commonJS({ - ""(exports, module) { - "use strict"; - var globalDispatcher = Symbol.for("undici.globalDispatcher.1"); - var { InvalidArgumentError } = require_errors(); - var Agent = require_agent(); - if (getGlobalDispatcher() === void 0) { - 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 - }; - } - }); - - // - var require_decorator_handler = __commonJS({ - ""(exports, module) { - "use strict"; - var _handler, _a; - module.exports = (_a = class { - constructor(handler) { - __privateAdd(this, _handler, void 0); - if (typeof handler !== "object" || handler === null) { - throw new TypeError("handler must be an object"); - } - __privateSet(this, _handler, handler); - } - onConnect(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onConnect) == null ? void 0 : _b.call(_a2, ...args); - } - onError(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onError) == null ? void 0 : _b.call(_a2, ...args); - } - onUpgrade(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onUpgrade) == null ? void 0 : _b.call(_a2, ...args); - } - onResponseStarted(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onResponseStarted) == null ? void 0 : _b.call(_a2, ...args); - } - onHeaders(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onHeaders) == null ? void 0 : _b.call(_a2, ...args); - } - onData(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onData) == null ? void 0 : _b.call(_a2, ...args); - } - onComplete(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onComplete) == null ? void 0 : _b.call(_a2, ...args); - } - onBodySent(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onBodySent) == null ? void 0 : _b.call(_a2, ...args); - } - }, _handler = new WeakMap(), _a); - } - }); - - // - var require_redirect = __commonJS({ - ""(exports, module) { - "use strict"; - var RedirectHandler = require_redirect_handler(); - module.exports = (opts) => { - const globalMaxRedirections = opts == null ? void 0 : opts.maxRedirections; - return (dispatch) => { - return function redirectInterceptor(opts2, handler) { - const _a = opts2, { maxRedirections = globalMaxRedirections } = _a, baseOpts = __objRest(_a, ["maxRedirections"]); - if (!maxRedirections) { - return dispatch(opts2, handler); - } - const redirectHandler = new RedirectHandler( - dispatch, - maxRedirections, - opts2, - handler - ); - return dispatch(baseOpts, redirectHandler); - }; - }; - }; - } - }); - - // - var require_retry = __commonJS({ - ""(exports, module) { - "use strict"; - var RetryHandler = require_retry_handler(); - module.exports = (globalOpts) => { - return (dispatch) => { - return function retryInterceptor(opts, handler) { - return dispatch( - opts, - new RetryHandler( - __spreadProps(__spreadValues({}, opts), { retryOptions: __spreadValues(__spreadValues({}, globalOpts), opts.retryOptions) }), - { - handler, - dispatch - } - ) - ); - }; - }; - }; - } - }); - - // - var require_dump = __commonJS({ - ""(exports, module) { - "use strict"; - var util = require_util(); - var { InvalidArgumentError, RequestAbortedError } = require_errors(); - var DecoratorHandler = require_decorator_handler(); - var _maxSize, _abort, _dumped, _aborted, _size, _reason, _handler, _customAbort, customAbort_fn; - var DumpHandler = class extends DecoratorHandler { - constructor({ maxSize }, handler) { - super(handler); - __privateAdd(this, _customAbort); - __privateAdd(this, _maxSize, 1024 * 1024); - __privateAdd(this, _abort, null); - __privateAdd(this, _dumped, false); - __privateAdd(this, _aborted, false); - __privateAdd(this, _size, 0); - __privateAdd(this, _reason, null); - __privateAdd(this, _handler, null); - if (maxSize != null && (!Number.isFinite(maxSize) || maxSize < 1)) { - throw new InvalidArgumentError("maxSize must be a number greater than 0"); - } - __privateSet(this, _maxSize, maxSize != null ? maxSize : __privateGet(this, _maxSize)); - __privateSet(this, _handler, handler); - } - onConnect(abort) { - __privateSet(this, _abort, abort); - __privateGet(this, _handler).onConnect(__privateMethod(this, _customAbort, customAbort_fn).bind(this)); - } - // TODO: will require adjustment after new hooks are out - onHeaders(statusCode, rawHeaders, resume, statusMessage) { - const headers = util.parseHeaders(rawHeaders); - const contentLength = headers["content-length"]; - if (contentLength != null && contentLength > __privateGet(this, _maxSize)) { - throw new RequestAbortedError( - `Response size (${contentLength}) larger than maxSize (${__privateGet(this, _maxSize)})` - ); - } - if (__privateGet(this, _aborted)) { - return true; - } - return __privateGet(this, _handler).onHeaders( - statusCode, - rawHeaders, - resume, - statusMessage - ); - } - onError(err) { - var _a; - if (__privateGet(this, _dumped)) { - return; - } - err = (_a = __privateGet(this, _reason)) != null ? _a : err; - __privateGet(this, _handler).onError(err); - } - onData(chunk) { - __privateSet(this, _size, __privateGet(this, _size) + chunk.length); - if (__privateGet(this, _size) >= __privateGet(this, _maxSize)) { - __privateSet(this, _dumped, true); - if (__privateGet(this, _aborted)) { - __privateGet(this, _handler).onError(__privateGet(this, _reason)); - } else { - __privateGet(this, _handler).onComplete([]); - } - } - return true; - } - onComplete(trailers) { - if (__privateGet(this, _dumped)) { - return; - } - if (__privateGet(this, _aborted)) { - __privateGet(this, _handler).onError(this.reason); - return; - } - __privateGet(this, _handler).onComplete(trailers); - } - }; - _maxSize = new WeakMap(); - _abort = new WeakMap(); - _dumped = new WeakMap(); - _aborted = new WeakMap(); - _size = new WeakMap(); - _reason = new WeakMap(); - _handler = new WeakMap(); - _customAbort = new WeakSet(); - customAbort_fn = function(reason) { - __privateSet(this, _aborted, true); - __privateSet(this, _reason, reason); - }; - function createDumpInterceptor({ maxSize: defaultMaxSize } = { - maxSize: 1024 * 1024 - }) { - return (dispatch) => { - return function Intercept(opts, handler) { - const { dumpMaxSize = defaultMaxSize } = opts; - const dumpHandler = new DumpHandler( - { maxSize: dumpMaxSize }, - handler - ); - return dispatch(opts, dumpHandler); - }; - }; - } - module.exports = createDumpInterceptor; - } - }); - - // - var require_dns = __commonJS({ - ""(exports, module) { - "use strict"; - var { isIP } = __require("net"); - var { lookup } = __require("dns"); - var DecoratorHandler = require_decorator_handler(); - var { InvalidArgumentError, InformationalError } = require_errors(); - var maxInt = Math.pow(2, 31) - 1; - var _maxTTL, _maxItems, _records, _defaultLookup, defaultLookup_fn, _defaultPick, defaultPick_fn; - var DNSInstance = class { - constructor(opts) { - __privateAdd(this, _defaultLookup); - __privateAdd(this, _defaultPick); - __privateAdd(this, _maxTTL, 0); - __privateAdd(this, _maxItems, 0); - __privateAdd(this, _records, /* @__PURE__ */ new Map()); - __publicField(this, "dualStack", true); - __publicField(this, "affinity", null); - __publicField(this, "lookup", null); - __publicField(this, "pick", null); - var _a, _b; - __privateSet(this, _maxTTL, opts.maxTTL); - __privateSet(this, _maxItems, opts.maxItems); - this.dualStack = opts.dualStack; - this.affinity = opts.affinity; - this.lookup = (_a = opts.lookup) != null ? _a : __privateMethod(this, _defaultLookup, defaultLookup_fn); - this.pick = (_b = opts.pick) != null ? _b : __privateMethod(this, _defaultPick, defaultPick_fn); - } - get full() { - return __privateGet(this, _records).size === __privateGet(this, _maxItems); - } - runLookup(origin, opts, cb) { - const ips = __privateGet(this, _records).get(origin.hostname); - if (ips == null && this.full) { - cb(null, origin.origin); - return; - } - const newOpts = __spreadProps(__spreadValues({ - affinity: this.affinity, - dualStack: this.dualStack, - lookup: this.lookup, - pick: this.pick - }, opts.dns), { - maxTTL: __privateGet(this, _maxTTL), - maxItems: __privateGet(this, _maxItems) - }); - if (ips == null) { - this.lookup(origin, newOpts, (err, addresses) => { - if (err || addresses == null || addresses.length === 0) { - cb(err != null ? err : new InformationalError("No DNS entries found")); - return; - } - this.setRecords(origin, addresses); - const records = __privateGet(this, _records).get(origin.hostname); - const ip = this.pick( - origin, - records, - newOpts.affinity - ); - let port; - if (typeof ip.port === "number") { - port = `:${ip.port}`; - } else if (origin.port !== "") { - port = `:${origin.port}`; - } else { - port = ""; - } - cb( - null, - `${origin.protocol}//${ip.family === 6 ? `[${ip.address}]` : ip.address}${port}` - ); - }); - } else { - const ip = this.pick( - origin, - ips, - newOpts.affinity - ); - if (ip == null) { - __privateGet(this, _records).delete(origin.hostname); - this.runLookup(origin, opts, cb); - return; - } - let port; - if (typeof ip.port === "number") { - port = `:${ip.port}`; - } else if (origin.port !== "") { - port = `:${origin.port}`; - } else { - port = ""; - } - cb( - null, - `${origin.protocol}//${ip.family === 6 ? `[${ip.address}]` : ip.address}${port}` - ); - } - } - setRecords(origin, addresses) { - var _a; - const timestamp = Date.now(); - const records = { records: { 4: null, 6: null } }; - for (const record of addresses) { - record.timestamp = timestamp; - if (typeof record.ttl === "number") { - record.ttl = Math.min(record.ttl, __privateGet(this, _maxTTL)); - } else { - record.ttl = __privateGet(this, _maxTTL); - } - const familyRecords = (_a = records.records[record.family]) != null ? _a : { ips: [] }; - familyRecords.ips.push(record); - records.records[record.family] = familyRecords; - } - __privateGet(this, _records).set(origin.hostname, records); - } - getHandler(meta, opts) { - return new DNSDispatchHandler(this, meta, opts); - } - }; - _maxTTL = new WeakMap(); - _maxItems = new WeakMap(); - _records = new WeakMap(); - _defaultLookup = new WeakSet(); - defaultLookup_fn = function(origin, opts, cb) { - lookup( - origin.hostname, - { - all: true, - family: this.dualStack === false ? this.affinity : 0, - order: "ipv4first" - }, - (err, addresses) => { - if (err) { - return cb(err); - } - const results = /* @__PURE__ */ new Map(); - for (const addr of addresses) { - results.set(`${addr.address}:${addr.family}`, addr); - } - cb(null, results.values()); - } - ); - }; - _defaultPick = new WeakSet(); - defaultPick_fn = function(origin, hostnameRecords, affinity) { - var _a; - let ip = null; - const { records, offset } = hostnameRecords; - let family; - if (this.dualStack) { - if (affinity == null) { - if (offset == null || offset === maxInt) { - hostnameRecords.offset = 0; - affinity = 4; - } else { - hostnameRecords.offset++; - affinity = (hostnameRecords.offset & 1) === 1 ? 6 : 4; - } - } - if (records[affinity] != null && records[affinity].ips.length > 0) { - family = records[affinity]; - } else { - family = records[affinity === 4 ? 6 : 4]; - } - } else { - family = records[affinity]; - } - if (family == null || family.ips.length === 0) { - return ip; - } - if (family.offset == null || family.offset === maxInt) { - family.offset = 0; - } else { - family.offset++; - } - const position = family.offset % family.ips.length; - ip = (_a = family.ips[position]) != null ? _a : null; - if (ip == null) { - return ip; - } - if (Date.now() - ip.timestamp > ip.ttl) { - family.ips.splice(position, 1); - return this.pick(origin, hostnameRecords, affinity); - } - return ip; - }; - var _state, _opts, _dispatch, _handler, _origin; - var DNSDispatchHandler = class extends DecoratorHandler { - constructor(state, { origin, handler, dispatch }, opts) { - super(handler); - __privateAdd(this, _state, null); - __privateAdd(this, _opts, null); - __privateAdd(this, _dispatch, null); - __privateAdd(this, _handler, null); - __privateAdd(this, _origin, null); - __privateSet(this, _origin, origin); - __privateSet(this, _handler, handler); - __privateSet(this, _opts, __spreadValues({}, opts)); - __privateSet(this, _state, state); - __privateSet(this, _dispatch, dispatch); - } - onError(err) { - switch (err.code) { - case "ETIMEDOUT": - case "ECONNREFUSED": { - if (__privateGet(this, _state).dualStack) { - __privateGet(this, _state).runLookup(__privateGet(this, _origin), __privateGet(this, _opts), (err2, newOrigin) => { - if (err2) { - return __privateGet(this, _handler).onError(err2); - } - const dispatchOpts = __spreadProps(__spreadValues({}, __privateGet(this, _opts)), { - origin: newOrigin - }); - __privateGet(this, _dispatch).call(this, dispatchOpts, this); - }); - return; - } - __privateGet(this, _handler).onError(err); - return; - } - case "ENOTFOUND": - __privateGet(this, _state).deleteRecord(__privateGet(this, _origin)); - default: - __privateGet(this, _handler).onError(err); - break; - } - } - }; - _state = new WeakMap(); - _opts = new WeakMap(); - _dispatch = new WeakMap(); - _handler = new WeakMap(); - _origin = new WeakMap(); - module.exports = (interceptorOpts) => { - var _a, _b, _c, _d, _e, _f, _g; - if ((interceptorOpts == null ? void 0 : interceptorOpts.maxTTL) != null && (typeof (interceptorOpts == null ? void 0 : interceptorOpts.maxTTL) !== "number" || (interceptorOpts == null ? void 0 : interceptorOpts.maxTTL) < 0)) { - throw new InvalidArgumentError("Invalid maxTTL. Must be a positive number"); - } - if ((interceptorOpts == null ? void 0 : interceptorOpts.maxItems) != null && (typeof (interceptorOpts == null ? void 0 : interceptorOpts.maxItems) !== "number" || (interceptorOpts == null ? void 0 : interceptorOpts.maxItems) < 1)) { - throw new InvalidArgumentError( - "Invalid maxItems. Must be a positive number and greater than zero" - ); - } - if ((interceptorOpts == null ? void 0 : interceptorOpts.affinity) != null && (interceptorOpts == null ? void 0 : interceptorOpts.affinity) !== 4 && (interceptorOpts == null ? void 0 : interceptorOpts.affinity) !== 6) { - throw new InvalidArgumentError("Invalid affinity. Must be either 4 or 6"); - } - if ((interceptorOpts == null ? void 0 : interceptorOpts.dualStack) != null && typeof (interceptorOpts == null ? void 0 : interceptorOpts.dualStack) !== "boolean") { - throw new InvalidArgumentError("Invalid dualStack. Must be a boolean"); - } - if ((interceptorOpts == null ? void 0 : interceptorOpts.lookup) != null && typeof (interceptorOpts == null ? void 0 : interceptorOpts.lookup) !== "function") { - throw new InvalidArgumentError("Invalid lookup. Must be a function"); - } - if ((interceptorOpts == null ? void 0 : interceptorOpts.pick) != null && typeof (interceptorOpts == null ? void 0 : interceptorOpts.pick) !== "function") { - throw new InvalidArgumentError("Invalid pick. Must be a function"); - } - const dualStack = (_a = interceptorOpts == null ? void 0 : interceptorOpts.dualStack) != null ? _a : true; - let affinity; - if (dualStack) { - affinity = (_b = interceptorOpts == null ? void 0 : interceptorOpts.affinity) != null ? _b : null; - } else { - affinity = (_c = interceptorOpts == null ? void 0 : interceptorOpts.affinity) != null ? _c : 4; - } - const opts = { - maxTTL: (_d = interceptorOpts == null ? void 0 : interceptorOpts.maxTTL) != null ? _d : 1e4, - // Expressed in ms - lookup: (_e = interceptorOpts == null ? void 0 : interceptorOpts.lookup) != null ? _e : null, - pick: (_f = interceptorOpts == null ? void 0 : interceptorOpts.pick) != null ? _f : null, - dualStack, - affinity, - maxItems: (_g = interceptorOpts == null ? void 0 : interceptorOpts.maxItems) != null ? _g : Infinity - }; - const instance = new DNSInstance(opts); - return (dispatch) => { - return function dnsInterceptor(origDispatchOpts, handler) { - const origin = origDispatchOpts.origin.constructor === URL ? origDispatchOpts.origin : new URL(origDispatchOpts.origin); - if (isIP(origin.hostname) !== 0) { - return dispatch(origDispatchOpts, handler); - } - instance.runLookup(origin, origDispatchOpts, (err, newOrigin) => { - if (err) { - return handler.onError(err); - } - let dispatchOpts = null; - dispatchOpts = __spreadProps(__spreadValues({}, origDispatchOpts), { - servername: origin.hostname, - // For SNI on TLS - origin: newOrigin, - headers: __spreadValues({ - host: origin.hostname - }, origDispatchOpts.headers) - }); - dispatch( - dispatchOpts, - instance.getHandler({ origin, dispatch, handler }, origDispatchOpts) - ); - }); - return true; - }; - }; - }; - } - }); - - // - var require_headers = __commonJS({ - ""(exports, module) { - "use strict"; - var { kConstruct } = require_symbols(); - var { kEnumerableProperty } = require_util(); - var { - iteratorMixin, - isValidHeaderName, - isValidHeaderValue - } = require_util2(); - var { webidl } = require_webidl(); - var assert = __require("assert"); - var util = __require("util"); - var kHeadersMap = Symbol("headers map"); - var kHeadersSortedMap = Symbol("headers map sorted"); - function isHTTPWhiteSpaceCharCode(code) { - return code === 10 || code === 13 || code === 9 || code === 32; - } - function headerValueNormalize(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) { - if (Array.isArray(object)) { - for (let i = 0; i < object.length; ++i) { - const header = object[i]; - if (header.length !== 2) { - throw webidl.errors.exception({ - header: "Headers constructor", - message: `expected name/value pair to be length 2, found ${header.length}.` - }); - } - appendHeader(headers, header[0], header[1]); - } - } else if (typeof object === "object" && object !== null) { - 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"] - }); - } - } - function appendHeader(headers, name, value) { - value = headerValueNormalize(value); - 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" - }); - } - if (getHeadersGuard(headers) === "immutable") { - throw new TypeError("immutable"); - } - return getHeadersList(headers).append(name, value, false); - } - function compareHeaderName(a, b) { - return a[0] < b[0] ? -1 : 1; - } - var HeadersList = class _HeadersList { - constructor(init) { - /** @type {[string, string][]|null} */ - __publicField(this, "cookies", null); - 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; - } - } - /** - * @see https://fetch.spec.whatwg.org/#header-list-contains - * @param {string} name - * @param {boolean} isLowerCase - */ - contains(name, isLowerCase) { - return this[kHeadersMap].has(isLowerCase ? name : name.toLowerCase()); - } - clear() { - this[kHeadersMap].clear(); - this[kHeadersSortedMap] = null; - this.cookies = null; - } - /** - * @see https://fetch.spec.whatwg.org/#concept-header-list-append - * @param {string} name - * @param {string} value - * @param {boolean} isLowerCase - */ - append(name, value, isLowerCase) { - var _a; - this[kHeadersSortedMap] = null; - const lowercaseName = isLowerCase ? name : name.toLowerCase(); - const exists2 = this[kHeadersMap].get(lowercaseName); - if (exists2) { - const delimiter2 = lowercaseName === "cookie" ? "; " : ", "; - this[kHeadersMap].set(lowercaseName, { - name: exists2.name, - value: `${exists2.value}${delimiter2}${value}` - }); - } else { - this[kHeadersMap].set(lowercaseName, { name, value }); - } - if (lowercaseName === "set-cookie") { - ((_a = this.cookies) != null ? _a : this.cookies = []).push(value); - } - } - /** - * @see https://fetch.spec.whatwg.org/#concept-header-list-set - * @param {string} name - * @param {string} value - * @param {boolean} isLowerCase - */ - set(name, value, isLowerCase) { - this[kHeadersSortedMap] = null; - const lowercaseName = isLowerCase ? name : name.toLowerCase(); - if (lowercaseName === "set-cookie") { - this.cookies = [value]; - } - this[kHeadersMap].set(lowercaseName, { name, value }); - } - /** - * @see https://fetch.spec.whatwg.org/#concept-header-list-delete - * @param {string} name - * @param {boolean} isLowerCase - */ - delete(name, isLowerCase) { - this[kHeadersSortedMap] = null; - if (!isLowerCase) - name = name.toLowerCase(); - if (name === "set-cookie") { - this.cookies = null; - } - this[kHeadersMap].delete(name); - } - /** - * @see https://fetch.spec.whatwg.org/#concept-header-list-get - * @param {string} name - * @param {boolean} isLowerCase - * @returns {string | null} - */ - get(name, isLowerCase) { - var _a, _b; - return (_b = (_a = this[kHeadersMap].get(isLowerCase ? name : name.toLowerCase())) == null ? void 0 : _a.value) != null ? _b : null; - } - *[Symbol.iterator]() { - for (const { 0: name, 1: { value } } of this[kHeadersMap]) { - yield [name, value]; - } - } - get entries() { - const headers = {}; - if (this[kHeadersMap].size !== 0) { - for (const { name, value } of this[kHeadersMap].values()) { - headers[name] = value; - } - } - return headers; - } - rawValues() { - return this[kHeadersMap].values(); - } - get entriesList() { - const headers = []; - if (this[kHeadersMap].size !== 0) { - for (const { 0: lowerName, 1: { name, value } } of this[kHeadersMap]) { - if (lowerName === "set-cookie") { - for (const cookie of this.cookies) { - headers.push([name, cookie]); - } - } else { - headers.push([name, value]); - } - } - } - return headers; - } - // https://fetch.spec.whatwg.org/#convert-header-names-to-a-sorted-lowercase-set - toSortedArray() { - const size = this[kHeadersMap].size; - const array = new Array(size); - if (size <= 32) { - if (size === 0) { - return array; - } - const iterator = this[kHeadersMap][Symbol.iterator](); - const firstValue = iterator.next().value; - array[0] = [firstValue[0], firstValue[1].value]; - assert(firstValue[1].value !== null); - for (let i = 1, j = 0, right = 0, left = 0, pivot = 0, x, value; i < size; ++i) { - value = iterator.next().value; - x = array[i] = [value[0], value[1].value]; - assert(x[1] !== null); - left = 0; - right = i; - while (left < right) { - pivot = left + (right - left >> 1); - if (array[pivot][0] <= x[0]) { - left = pivot + 1; - } else { - right = pivot; - } - } - if (i !== pivot) { - j = i; - while (j > left) { - array[j] = array[--j]; - } - array[left] = x; - } - } - if (!iterator.next().done) { - throw new TypeError("Unreachable"); - } - return array; - } else { - let i = 0; - for (const { 0: name, 1: { value } } of this[kHeadersMap]) { - array[i++] = [name, value]; - assert(value !== null); - } - return array.sort(compareHeaderName); - } - } - }; - var _guard, _headersList; - var _Headers = class _Headers { - constructor(init = void 0) { - __privateAdd(this, _guard, void 0); - __privateAdd(this, _headersList, void 0); - webidl.util.markAsUncloneable(this); - if (init === kConstruct) { - return; - } - __privateSet(this, _headersList, new HeadersList()); - __privateSet(this, _guard, "none"); - if (init !== void 0) { - init = webidl.converters.HeadersInit(init, "Headers contructor", "init"); - fill(this, init); - } - } - // https://fetch.spec.whatwg.org/#dom-headers-append - append(name, value) { - webidl.brandCheck(this, _Headers); - webidl.argumentLengthCheck(arguments, 2, "Headers.append"); - const prefix = "Headers.append"; - name = webidl.converters.ByteString(name, prefix, "name"); - value = webidl.converters.ByteString(value, prefix, "value"); - return appendHeader(this, name, value); - } - // https://fetch.spec.whatwg.org/#dom-headers-delete - delete(name) { - webidl.brandCheck(this, _Headers); - webidl.argumentLengthCheck(arguments, 1, "Headers.delete"); - const prefix = "Headers.delete"; - name = webidl.converters.ByteString(name, prefix, "name"); - if (!isValidHeaderName(name)) { - throw webidl.errors.invalidArgument({ - prefix: "Headers.delete", - value: name, - type: "header name" - }); - } - if (__privateGet(this, _guard) === "immutable") { - throw new TypeError("immutable"); - } - if (!__privateGet(this, _headersList).contains(name, false)) { - return; - } - __privateGet(this, _headersList).delete(name, false); - } - // https://fetch.spec.whatwg.org/#dom-headers-get - get(name) { - webidl.brandCheck(this, _Headers); - webidl.argumentLengthCheck(arguments, 1, "Headers.get"); - const prefix = "Headers.get"; - name = webidl.converters.ByteString(name, prefix, "name"); - if (!isValidHeaderName(name)) { - throw webidl.errors.invalidArgument({ - prefix, - value: name, - type: "header name" - }); - } - return __privateGet(this, _headersList).get(name, false); - } - // https://fetch.spec.whatwg.org/#dom-headers-has - has(name) { - webidl.brandCheck(this, _Headers); - webidl.argumentLengthCheck(arguments, 1, "Headers.has"); - const prefix = "Headers.has"; - name = webidl.converters.ByteString(name, prefix, "name"); - if (!isValidHeaderName(name)) { - throw webidl.errors.invalidArgument({ - prefix, - value: name, - type: "header name" - }); - } - return __privateGet(this, _headersList).contains(name, false); - } - // https://fetch.spec.whatwg.org/#dom-headers-set - set(name, value) { - webidl.brandCheck(this, _Headers); - webidl.argumentLengthCheck(arguments, 2, "Headers.set"); - const prefix = "Headers.set"; - name = webidl.converters.ByteString(name, prefix, "name"); - value = webidl.converters.ByteString(value, prefix, "value"); - value = headerValueNormalize(value); - if (!isValidHeaderName(name)) { - throw webidl.errors.invalidArgument({ - prefix, - value: name, - type: "header name" - }); - } else if (!isValidHeaderValue(value)) { - throw webidl.errors.invalidArgument({ - prefix, - value, - type: "header value" - }); - } - if (__privateGet(this, _guard) === "immutable") { - throw new TypeError("immutable"); - } - __privateGet(this, _headersList).set(name, value, false); - } - // https://fetch.spec.whatwg.org/#dom-headers-getsetcookie - getSetCookie() { - webidl.brandCheck(this, _Headers); - const list = __privateGet(this, _headersList).cookies; - if (list) { - return [...list]; - } - return []; - } - // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine - get [kHeadersSortedMap]() { - if (__privateGet(this, _headersList)[kHeadersSortedMap]) { - return __privateGet(this, _headersList)[kHeadersSortedMap]; - } - const headers = []; - const names = __privateGet(this, _headersList).toSortedArray(); - const cookies = __privateGet(this, _headersList).cookies; - if (cookies === null || cookies.length === 1) { - return __privateGet(this, _headersList)[kHeadersSortedMap] = names; - } - for (let i = 0; i < names.length; ++i) { - const { 0: name, 1: value } = names[i]; - if (name === "set-cookie") { - for (let j = 0; j < cookies.length; ++j) { - headers.push([name, cookies[j]]); - } - } else { - headers.push([name, value]); - } - } - return __privateGet(this, _headersList)[kHeadersSortedMap] = headers; - } - [util.inspect.custom](depth, options) { - var _a; - (_a = options.depth) != null ? _a : options.depth = depth; - return `Headers ${util.formatWithOptions(options, __privateGet(this, _headersList).entries)}`; - } - static getHeadersGuard(o) { - return __privateGet(o, _guard); - } - static setHeadersGuard(o, guard) { - __privateSet(o, _guard, guard); - } - static getHeadersList(o) { - return __privateGet(o, _headersList); - } - static setHeadersList(o, list) { - __privateSet(o, _headersList, list); - } - }; - _guard = new WeakMap(); - _headersList = new WeakMap(); - var Headers2 = _Headers; - var { getHeadersGuard, setHeadersGuard, getHeadersList, setHeadersList } = Headers2; - Reflect.deleteProperty(Headers2, "getHeadersGuard"); - Reflect.deleteProperty(Headers2, "setHeadersGuard"); - Reflect.deleteProperty(Headers2, "getHeadersList"); - Reflect.deleteProperty(Headers2, "setHeadersList"); - iteratorMixin("Headers", Headers2, kHeadersSortedMap, 0, 1); - Object.defineProperties(Headers2.prototype, { - append: kEnumerableProperty, - delete: kEnumerableProperty, - get: kEnumerableProperty, - has: kEnumerableProperty, - set: kEnumerableProperty, - getSetCookie: kEnumerableProperty, - [Symbol.toStringTag]: { - value: "Headers", - configurable: true - }, - [util.inspect.custom]: { - enumerable: false - } - }); - webidl.converters.HeadersInit = function(V, prefix, argument) { - if (webidl.util.Type(V) === "Object") { - const iterator = Reflect.get(V, Symbol.iterator); - if (!util.types.isProxy(V) && iterator === Headers2.prototype.entries) { - try { - return getHeadersList(V).entriesList; - } catch (e) { - } - } - if (typeof iterator === "function") { - return webidl.converters["sequence>"](V, prefix, argument, iterator.bind(V)); - } - return webidl.converters["record"](V, prefix, argument); - } - throw webidl.errors.conversionFailed({ - prefix: "Headers constructor", - argument: "Argument 1", - types: ["sequence>", "record"] - }); - }; - module.exports = { - fill, - // for test. - compareHeaderName, - Headers: Headers2, - HeadersList, - getHeadersGuard, - setHeadersGuard, - setHeadersList, - getHeadersList - }; - } - }); - - // - var require_response = __commonJS({ - ""(exports, module) { - "use strict"; - var { Headers: Headers2, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require_headers(); - var { extractBody, cloneBody, mixinBody, hasFinalizationRegistry, streamRegistry, bodyUnusable } = require_body(); - var util = require_util(); - var nodeUtil = __require("util"); - var { kEnumerableProperty } = util; - var { - isValidReasonPhrase, - isCancelled, - isAborted, - isBlobLike, - serializeJavascriptValueToJSONString, - isErrorLike, - isomorphicEncode, - environmentSettingsObject: relevantRealm - } = require_util2(); - var { - redirectStatusSet, - nullBodyStatus - } = require_constants3(); - var { kState, kHeaders } = require_symbols2(); - var { webidl } = require_webidl(); - var { FormData } = require_formdata(); - var { URLSerializer } = require_data_url(); - var { kConstruct } = require_symbols(); - var assert = __require("assert"); - var { types } = __require("util"); - var textEncoder = new TextEncoder("utf-8"); - var Response = class _Response { - // Creates network error Response. - static error() { - const responseObject = fromInnerResponse(makeNetworkError(), "immutable"); - return responseObject; - } - // https://fetch.spec.whatwg.org/#dom-response-json - static json(data, init = {}) { - webidl.argumentLengthCheck(arguments, 1, "Response.json"); - if (init !== null) { - init = webidl.converters.ResponseInit(init); - } - const bytes = textEncoder.encode( - serializeJavascriptValueToJSONString(data) - ); - const body = extractBody(bytes); - const responseObject = fromInnerResponse(makeResponse({}), "response"); - initializeResponse(responseObject, init, { body: body[0], type: "application/json" }); - return responseObject; - } - // Creates a redirect Response that redirects to url with status status. - static redirect(url, status = 302) { - webidl.argumentLengthCheck(arguments, 1, "Response.redirect"); - url = webidl.converters.USVString(url); - status = webidl.converters["unsigned short"](status); - let parsedURL; - try { - parsedURL = new URL(url, relevantRealm.settingsObject.baseUrl); - } catch (err) { - throw new TypeError(`Failed to parse URL from ${url}`, { cause: err }); - } - if (!redirectStatusSet.has(status)) { - throw new RangeError(`Invalid status code ${status}`); - } - const responseObject = fromInnerResponse(makeResponse({}), "immutable"); - responseObject[kState].status = status; - const value = isomorphicEncode(URLSerializer(parsedURL)); - responseObject[kState].headersList.append("location", value, true); - return responseObject; - } - // https://fetch.spec.whatwg.org/#dom-response - constructor(body = null, init = {}) { - webidl.util.markAsUncloneable(this); - if (body === kConstruct) { - return; - } - if (body !== null) { - body = webidl.converters.BodyInit(body); - } - init = webidl.converters.ResponseInit(init); - this[kState] = makeResponse({}); - this[kHeaders] = new Headers2(kConstruct); - setHeadersGuard(this[kHeaders], "response"); - setHeadersList(this[kHeaders], this[kState].headersList); - let bodyWithType = null; - if (body != null) { - const [extractedBody, type] = extractBody(body); - bodyWithType = { body: extractedBody, type }; - } - initializeResponse(this, init, bodyWithType); - } - // Returns response’s type, e.g., "cors". - get type() { - webidl.brandCheck(this, _Response); - return this[kState].type; - } - // Returns response’s URL, if it has one; otherwise the empty string. - get url() { - var _a; - webidl.brandCheck(this, _Response); - const urlList = this[kState].urlList; - const url = (_a = urlList[urlList.length - 1]) != null ? _a : null; - if (url === null) { - return ""; - } - return URLSerializer(url, true); - } - // Returns whether response was obtained through a redirect. - get redirected() { - webidl.brandCheck(this, _Response); - return this[kState].urlList.length > 1; - } - // Returns response’s status. - get status() { - webidl.brandCheck(this, _Response); - return this[kState].status; - } - // Returns whether response’s status is an ok status. - get ok() { - webidl.brandCheck(this, _Response); - return this[kState].status >= 200 && this[kState].status <= 299; - } - // Returns response’s status message. - get statusText() { - webidl.brandCheck(this, _Response); - return this[kState].statusText; - } - // Returns response’s headers as Headers. - get headers() { - webidl.brandCheck(this, _Response); - 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() { - var _a; - webidl.brandCheck(this, _Response); - if (bodyUnusable(this)) { - throw webidl.errors.exception({ - header: "Response.clone", - message: "Body has already been consumed." - }); - } - const clonedResponse = cloneResponse(this[kState]); - if (hasFinalizationRegistry && ((_a = this[kState].body) == null ? void 0 : _a.stream)) { - streamRegistry.register(this, new WeakRef(this[kState].body.stream)); - } - return fromInnerResponse(clonedResponse, getHeadersGuard(this[kHeaders])); - } - [nodeUtil.inspect.custom](depth, options) { - var _a; - if (options.depth === null) { - options.depth = 2; - } - (_a = options.colors) != null ? _a : options.colors = true; - const properties = { - status: this.status, - statusText: this.statusText, - headers: this.headers, - body: this.body, - bodyUsed: this.bodyUsed, - ok: this.ok, - redirected: this.redirected, - type: this.type, - url: this.url - }; - return `Response ${nodeUtil.formatWithOptions(options, properties)}`; - } - }; - 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 - }); - function cloneResponse(response) { - if (response.internalResponse) { - return filterResponse( - cloneResponse(response.internalResponse), - response.type - ); - } - const newResponse = makeResponse(__spreadProps(__spreadValues({}, response), { body: null })); - if (response.body != null) { - newResponse.body = cloneBody(newResponse, response.body); - } - return newResponse; - } - function makeResponse(init) { - return __spreadProps(__spreadValues({ - aborted: false, - rangeRequested: false, - timingAllowPassed: false, - requestIncludesCredentials: false, - type: "default", - status: 200, - timingInfo: null, - cacheState: "", - statusText: "" - }, init), { - headersList: (init == null ? void 0 : init.headersList) ? new HeadersList(init == null ? void 0 : init.headersList) : new HeadersList(), - urlList: (init == null ? void 0 : 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 isNetworkError(response) { - return ( - // A network error is a response whose type is "error", - response.type === "error" && // status is 0 - response.status === 0 - ); - } - function makeFilteredResponse(response, state) { - state = __spreadValues({ - 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; - } - }); - } - function filterResponse(response, type) { - if (type === "basic") { - return makeFilteredResponse(response, { - type: "basic", - headersList: response.headersList - }); - } else if (type === "cors") { - return makeFilteredResponse(response, { - type: "cors", - headersList: response.headersList - }); - } else if (type === "opaque") { - return makeFilteredResponse(response, { - type: "opaque", - urlList: Object.freeze([]), - status: 0, - statusText: "", - body: null - }); - } else if (type === "opaqueredirect") { - return makeFilteredResponse(response, { - type: "opaqueredirect", - status: 0, - statusText: "", - headersList: [], - body: null - }); - } else { - assert(false); - } - } - function makeAppropriateNetworkError(fetchParams, err = null) { - assert(isCancelled(fetchParams)); - 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 })); - } - function initializeResponse(response, init, body) { - 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.'); - } - if ("statusText" in init && init.statusText != null) { - if (!isValidReasonPhrase(String(init.statusText))) { - throw new TypeError("Invalid statusText"); - } - } - if ("status" in init && init.status != null) { - response[kState].status = init.status; - } - if ("statusText" in init && init.statusText != null) { - response[kState].statusText = init.statusText; - } - if ("headers" in init && init.headers != null) { - fill(response[kHeaders], init.headers); - } - if (body) { - if (nullBodyStatus.includes(response.status)) { - throw webidl.errors.exception({ - header: "Response constructor", - message: `Invalid response status code ${response.status}` - }); - } - response[kState].body = body.body; - if (body.type != null && !response[kState].headersList.contains("content-type", true)) { - response[kState].headersList.append("content-type", body.type, true); - } - } - } - function fromInnerResponse(innerResponse, guard) { - var _a; - const response = new Response(kConstruct); - response[kState] = innerResponse; - response[kHeaders] = new Headers2(kConstruct); - setHeadersList(response[kHeaders], innerResponse.headersList); - setHeadersGuard(response[kHeaders], guard); - if (hasFinalizationRegistry && ((_a = innerResponse.body) == null ? void 0 : _a.stream)) { - streamRegistry.register(response, new WeakRef(innerResponse.body.stream)); - } - return response; - } - webidl.converters.ReadableStream = webidl.interfaceConverter( - ReadableStream - ); - webidl.converters.FormData = webidl.interfaceConverter( - FormData - ); - webidl.converters.URLSearchParams = webidl.interfaceConverter( - URLSearchParams - ); - webidl.converters.XMLHttpRequestBodyInit = function(V, prefix, name) { - if (typeof V === "string") { - return webidl.converters.USVString(V, prefix, name); - } - if (isBlobLike(V)) { - return webidl.converters.Blob(V, prefix, name, { strict: false }); - } - if (ArrayBuffer.isView(V) || types.isArrayBuffer(V)) { - return webidl.converters.BufferSource(V, prefix, name); - } - if (util.isFormDataLike(V)) { - return webidl.converters.FormData(V, prefix, name, { strict: false }); - } - if (V instanceof URLSearchParams) { - return webidl.converters.URLSearchParams(V, prefix, name); - } - return webidl.converters.DOMString(V, prefix, name); - }; - webidl.converters.BodyInit = function(V, prefix, argument) { - if (V instanceof ReadableStream) { - return webidl.converters.ReadableStream(V, prefix, argument); - } - if (V == null ? void 0 : V[Symbol.asyncIterator]) { - return V; - } - return webidl.converters.XMLHttpRequestBodyInit(V, prefix, argument); - }; - 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 = { - isNetworkError, - makeNetworkError, - makeResponse, - makeAppropriateNetworkError, - filterResponse, - Response, - cloneResponse, - fromInnerResponse - }; - } - }); - - // - var require_dispatcher_weakref = __commonJS({ - ""(exports, module) { - "use strict"; - var { kConnected, kSize } = require_symbols(); - var CompatWeakRef = class { - constructor(value) { - this.value = value; - } - deref() { - return this.value[kConnected] === 0 && this.value[kSize] === 0 ? void 0 : this.value; - } - }; - var CompatFinalizer = class { - constructor(finalizer) { - this.finalizer = finalizer; - } - register(dispatcher, key) { - if (dispatcher.on) { - dispatcher.on("disconnect", () => { - if (dispatcher[kConnected] === 0 && dispatcher[kSize] === 0) { - this.finalizer(key); - } - }); - } - } - unregister(key) { - } - }; - module.exports = function() { - if (process.env.NODE_V8_COVERAGE && process.version.startsWith("v18")) { - process._rawDebug("Using compatibility WeakRef and FinalizationRegistry"); - return { - WeakRef: CompatWeakRef, - FinalizationRegistry: CompatFinalizer - }; - } - return { WeakRef, FinalizationRegistry }; - }; - } - }); - - // - var require_request2 = __commonJS({ - ""(exports, module) { - "use strict"; - var { extractBody, mixinBody, cloneBody, bodyUnusable } = require_body(); - var { Headers: Headers2, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require_headers(); - var { FinalizationRegistry: FinalizationRegistry2 } = require_dispatcher_weakref()(); - var util = require_util(); - var nodeUtil = __require("util"); - var { - isValidHTTPToken, - sameOrigin, - environmentSettingsObject - } = require_util2(); - var { - forbiddenMethodsSet, - corsSafeListedMethodsSet, - referrerPolicy, - requestRedirect, - requestMode, - requestCredentials, - requestCache, - requestDuplex - } = require_constants3(); - var { kEnumerableProperty, normalizedMethodRecordsBase, normalizedMethodRecords } = util; - var { kHeaders, kSignal, kState, kDispatcher } = require_symbols2(); - var { webidl } = require_webidl(); - var { URLSerializer } = require_data_url(); - var { kConstruct } = require_symbols(); - var assert = __require("assert"); - var { getMaxListeners, setMaxListeners, getEventListeners, defaultMaxListeners } = __require("events"); - var kAbortController = Symbol("abortController"); - var requestFinalizer = new FinalizationRegistry2(({ signal, abort }) => { - signal.removeEventListener("abort", abort); - }); - var dependentControllerMap = /* @__PURE__ */ new WeakMap(); - function buildAbort(acRef) { - return abort; - function abort() { - const ac = acRef.deref(); - if (ac !== void 0) { - requestFinalizer.unregister(abort); - this.removeEventListener("abort", abort); - ac.abort(this.reason); - const controllerList = dependentControllerMap.get(ac.signal); - if (controllerList !== void 0) { - if (controllerList.size !== 0) { - for (const ref of controllerList) { - const ctrl = ref.deref(); - if (ctrl !== void 0) { - ctrl.abort(this.reason); - } - } - controllerList.clear(); - } - dependentControllerMap.delete(ac.signal); - } - } - } - } - var patchMethodWarning = false; - var Request = class _Request { - // https://fetch.spec.whatwg.org/#dom-request - constructor(input, init = {}) { - var _a, _b, _c; - webidl.util.markAsUncloneable(this); - if (input === kConstruct) { - return; - } - const prefix = "Request constructor"; - webidl.argumentLengthCheck(arguments, 1, prefix); - input = webidl.converters.RequestInfo(input, prefix, "input"); - init = webidl.converters.RequestInit(init, prefix, "init"); - let request = null; - let fallbackMode = null; - const baseUrl = environmentSettingsObject.settingsObject.baseUrl; - let signal = null; - if (typeof input === "string") { - this[kDispatcher] = init.dispatcher; - let parsedURL; - try { - parsedURL = new URL(input, baseUrl); - } catch (err) { - throw new TypeError("Failed to parse URL from " + input, { cause: err }); - } - if (parsedURL.username || parsedURL.password) { - throw new TypeError( - "Request cannot be constructed from a URL that includes credentials: " + input - ); - } - request = makeRequest({ urlList: [parsedURL] }); - fallbackMode = "cors"; - } else { - this[kDispatcher] = init.dispatcher || input[kDispatcher]; - assert(input instanceof _Request); - request = input[kState]; - signal = input[kSignal]; - } - const origin = environmentSettingsObject.settingsObject.origin; - let window = "client"; - if (((_b = (_a = request.window) == null ? void 0 : _a.constructor) == null ? void 0 : _b.name) === "EnvironmentSettingsObject" && sameOrigin(request.window, origin)) { - window = request.window; - } - if (init.window != null) { - throw new TypeError(`'window' option '${window}' must be null`); - } - if ("window" in init) { - window = "no-window"; - } - 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: environmentSettingsObject.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; - if (initHasKey) { - if (request.mode === "navigate") { - request.mode = "same-origin"; - } - request.reloadNavigation = false; - request.historyNavigation = false; - request.origin = "client"; - request.referrer = "client"; - request.referrerPolicy = ""; - request.url = request.urlList[request.urlList.length - 1]; - request.urlList = [request.url]; - } - if (init.referrer !== void 0) { - const referrer = init.referrer; - if (referrer === "") { - request.referrer = "no-referrer"; - } else { - let parsedReferrer; - try { - parsedReferrer = new URL(referrer, baseUrl); - } catch (err) { - throw new TypeError(`Referrer "${referrer}" is not a valid URL.`, { cause: err }); - } - if (parsedReferrer.protocol === "about:" && parsedReferrer.hostname === "client" || origin && !sameOrigin(parsedReferrer, environmentSettingsObject.settingsObject.baseUrl)) { - request.referrer = "client"; - } else { - request.referrer = parsedReferrer; - } - } - } - if (init.referrerPolicy !== void 0) { - request.referrerPolicy = init.referrerPolicy; - } - let mode; - if (init.mode !== void 0) { - mode = init.mode; - } else { - mode = fallbackMode; - } - if (mode === "navigate") { - throw webidl.errors.exception({ - header: "Request constructor", - message: "invalid request mode navigate." - }); - } - if (mode != null) { - request.mode = mode; - } - if (init.credentials !== void 0) { - request.credentials = init.credentials; - } - if (init.cache !== void 0) { - request.cache = init.cache; - } - if (request.cache === "only-if-cached" && request.mode !== "same-origin") { - throw new TypeError( - "'only-if-cached' can be set only with 'same-origin' mode" - ); - } - if (init.redirect !== void 0) { - request.redirect = init.redirect; - } - if (init.integrity != null) { - request.integrity = String(init.integrity); - } - if (init.keepalive !== void 0) { - request.keepalive = Boolean(init.keepalive); - } - if (init.method !== void 0) { - let method = init.method; - const mayBeNormalized = normalizedMethodRecords[method]; - if (mayBeNormalized !== void 0) { - request.method = mayBeNormalized; - } else { - if (!isValidHTTPToken(method)) { - throw new TypeError(`'${method}' is not a valid HTTP method.`); - } - const upperCase = method.toUpperCase(); - if (forbiddenMethodsSet.has(upperCase)) { - throw new TypeError(`'${method}' HTTP method is unsupported.`); - } - method = (_c = normalizedMethodRecordsBase[upperCase]) != null ? _c : method; - request.method = method; - } - if (!patchMethodWarning && request.method === "patch") { - process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.", { - code: "UNDICI-FETCH-patch" - }); - patchMethodWarning = true; - } - } - if (init.signal !== void 0) { - signal = init.signal; - } - this[kState] = request; - const ac = new AbortController(); - this[kSignal] = ac.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 { - this[kAbortController] = ac; - const acRef = new WeakRef(ac); - const abort = buildAbort(acRef); - try { - if (typeof getMaxListeners === "function" && getMaxListeners(signal) === defaultMaxListeners) { - setMaxListeners(1500, signal); - } else if (getEventListeners(signal, "abort").length >= defaultMaxListeners) { - setMaxListeners(1500, signal); - } - } catch (e) { - } - util.addAbortListener(signal, abort); - requestFinalizer.register(ac, { signal, abort }, abort); - } - } - this[kHeaders] = new Headers2(kConstruct); - setHeadersList(this[kHeaders], request.headersList); - setHeadersGuard(this[kHeaders], "request"); - if (mode === "no-cors") { - if (!corsSafeListedMethodsSet.has(request.method)) { - throw new TypeError( - `'${request.method} is unsupported in no-cors mode.` - ); - } - setHeadersGuard(this[kHeaders], "request-no-cors"); - } - if (initHasKey) { - const headersList = getHeadersList(this[kHeaders]); - const headers = init.headers !== void 0 ? init.headers : new HeadersList(headersList); - headersList.clear(); - if (headers instanceof HeadersList) { - for (const { name, value } of headers.rawValues()) { - headersList.append(name, value, false); - } - headersList.cookies = headers.cookies; - } else { - fillHeaders(this[kHeaders], headers); - } - } - const inputBody = input instanceof _Request ? input[kState].body : null; - if ((init.body != null || inputBody != null) && (request.method === "GET" || request.method === "HEAD")) { - throw new TypeError("Request with GET/HEAD method cannot have body."); - } - let initBody = null; - if (init.body != null) { - const [extractedBody, contentType] = extractBody( - init.body, - request.keepalive - ); - initBody = extractedBody; - if (contentType && !getHeadersList(this[kHeaders]).contains("content-type", true)) { - this[kHeaders].append("content-type", contentType); - } - } - const inputOrInitBody = initBody != null ? initBody : inputBody; - if (inputOrInitBody != null && inputOrInitBody.source == null) { - if (initBody != null && init.duplex == null) { - throw new TypeError("RequestInit: duplex option is required when sending a body."); - } - if (request.mode !== "same-origin" && request.mode !== "cors") { - throw new TypeError( - 'If request is made from ReadableStream, mode should be "same-origin" or "cors"' - ); - } - request.useCORSPreflightFlag = true; - } - let finalBody = inputOrInitBody; - if (initBody == null && inputBody != null) { - if (bodyUnusable(input)) { - throw new TypeError( - "Cannot construct a Request with a Request object that has already been used." - ); - } - const identityTransform = new TransformStream(); - inputBody.stream.pipeThrough(identityTransform); - finalBody = { - source: inputBody.source, - length: inputBody.length, - stream: identityTransform.readable - }; - } - this[kState].body = finalBody; - } - // Returns request’s HTTP method, which is "GET" by default. - get method() { - webidl.brandCheck(this, _Request); - return this[kState].method; - } - // Returns the URL of request as a string. - get url() { - webidl.brandCheck(this, _Request); - 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); - return this[kHeaders]; - } - // Returns the kind of resource requested by request, e.g., "document" - // or "script". - get destination() { - webidl.brandCheck(this, _Request); - 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); - if (this[kState].referrer === "no-referrer") { - return ""; - } - if (this[kState].referrer === "client") { - return "about:client"; - } - 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); - 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); - 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() { - 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); - 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); - 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); - 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); - return this[kState].keepalive; - } - // Returns a boolean indicating whether or not request is for a reload - // navigation. - get isReloadNavigation() { - webidl.brandCheck(this, _Request); - return this[kState].reloadNavigation; - } - // Returns a boolean indicating whether or not request is for a history - // navigation (a.k.a. back-forward navigation). - get isHistoryNavigation() { - webidl.brandCheck(this, _Request); - 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); - 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); - if (bodyUnusable(this)) { - throw new TypeError("unusable"); - } - const clonedRequest = cloneRequest(this[kState]); - const ac = new AbortController(); - if (this.signal.aborted) { - ac.abort(this.signal.reason); - } else { - let list = dependentControllerMap.get(this.signal); - if (list === void 0) { - list = /* @__PURE__ */ new Set(); - dependentControllerMap.set(this.signal, list); - } - const acRef = new WeakRef(ac); - list.add(acRef); - util.addAbortListener( - ac.signal, - buildAbort(acRef) - ); - } - return fromInnerRequest(clonedRequest, ac.signal, getHeadersGuard(this[kHeaders])); - } - [nodeUtil.inspect.custom](depth, options) { - var _a; - if (options.depth === null) { - options.depth = 2; - } - (_a = options.colors) != null ? _a : options.colors = true; - const properties = { - method: this.method, - url: this.url, - headers: this.headers, - destination: this.destination, - referrer: this.referrer, - referrerPolicy: this.referrerPolicy, - mode: this.mode, - credentials: this.credentials, - cache: this.cache, - redirect: this.redirect, - integrity: this.integrity, - keepalive: this.keepalive, - isReloadNavigation: this.isReloadNavigation, - isHistoryNavigation: this.isHistoryNavigation, - signal: this.signal - }; - return `Request ${nodeUtil.formatWithOptions(options, properties)}`; - } - }; - mixinBody(Request); - function makeRequest(init) { - var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I; - return { - method: (_a = init.method) != null ? _a : "GET", - localURLsOnly: (_b = init.localURLsOnly) != null ? _b : false, - unsafeRequest: (_c = init.unsafeRequest) != null ? _c : false, - body: (_d = init.body) != null ? _d : null, - client: (_e = init.client) != null ? _e : null, - reservedClient: (_f = init.reservedClient) != null ? _f : null, - replacesClientId: (_g = init.replacesClientId) != null ? _g : "", - window: (_h = init.window) != null ? _h : "client", - keepalive: (_i = init.keepalive) != null ? _i : false, - serviceWorkers: (_j = init.serviceWorkers) != null ? _j : "all", - initiator: (_k = init.initiator) != null ? _k : "", - destination: (_l = init.destination) != null ? _l : "", - priority: (_m = init.priority) != null ? _m : null, - origin: (_n = init.origin) != null ? _n : "client", - policyContainer: (_o = init.policyContainer) != null ? _o : "client", - referrer: (_p = init.referrer) != null ? _p : "client", - referrerPolicy: (_q = init.referrerPolicy) != null ? _q : "", - mode: (_r = init.mode) != null ? _r : "no-cors", - useCORSPreflightFlag: (_s = init.useCORSPreflightFlag) != null ? _s : false, - credentials: (_t = init.credentials) != null ? _t : "same-origin", - useCredentials: (_u = init.useCredentials) != null ? _u : false, - cache: (_v = init.cache) != null ? _v : "default", - redirect: (_w = init.redirect) != null ? _w : "follow", - integrity: (_x = init.integrity) != null ? _x : "", - cryptoGraphicsNonceMetadata: (_y = init.cryptoGraphicsNonceMetadata) != null ? _y : "", - parserMetadata: (_z = init.parserMetadata) != null ? _z : "", - reloadNavigation: (_A = init.reloadNavigation) != null ? _A : false, - historyNavigation: (_B = init.historyNavigation) != null ? _B : false, - userActivation: (_C = init.userActivation) != null ? _C : false, - taintedOrigin: (_D = init.taintedOrigin) != null ? _D : false, - redirectCount: (_E = init.redirectCount) != null ? _E : 0, - responseTainting: (_F = init.responseTainting) != null ? _F : "basic", - preventNoCacheCacheControlHeaderModification: (_G = init.preventNoCacheCacheControlHeaderModification) != null ? _G : false, - done: (_H = init.done) != null ? _H : false, - timingAllowFailed: (_I = init.timingAllowFailed) != null ? _I : false, - urlList: init.urlList, - url: init.urlList[0], - headersList: init.headersList ? new HeadersList(init.headersList) : new HeadersList() - }; - } - function cloneRequest(request) { - const newRequest = makeRequest(__spreadProps(__spreadValues({}, request), { body: null })); - if (request.body != null) { - newRequest.body = cloneBody(newRequest, request.body); - } - return newRequest; - } - function fromInnerRequest(innerRequest, signal, guard) { - const request = new Request(kConstruct); - request[kState] = innerRequest; - request[kSignal] = signal; - request[kHeaders] = new Headers2(kConstruct); - setHeadersList(request[kHeaders], innerRequest.headersList); - setHeadersGuard(request[kHeaders], guard); - return request; - } - 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 - ); - webidl.converters.RequestInfo = function(V, prefix, argument) { - if (typeof V === "string") { - return webidl.converters.USVString(V, prefix, argument); - } - if (V instanceof Request) { - return webidl.converters.Request(V, prefix, argument); - } - return webidl.converters.USVString(V, prefix, argument); - }; - webidl.converters.AbortSignal = webidl.interfaceConverter( - AbortSignal - ); - 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, - "RequestInit", - "signal", - { strict: false } - ) - ) - }, - { - key: "window", - converter: webidl.converters.any - }, - { - key: "duplex", - converter: webidl.converters.DOMString, - allowedValues: requestDuplex - }, - { - key: "dispatcher", - // undici specific option - converter: webidl.converters.any - } - ]); - module.exports = { Request, makeRequest, fromInnerRequest, cloneRequest }; - } - }); - - // - var require_fetch = __commonJS({ - ""(exports, module) { - "use strict"; - var { - makeNetworkError, - makeAppropriateNetworkError, - filterResponse, - makeResponse, - fromInnerResponse - } = require_response(); - var { HeadersList } = require_headers(); - var { Request, cloneRequest } = require_request2(); - var zlib = __require("zlib"); - var { - 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, - clampAndCoarsenConnectionTimingInfo, - simpleRangeHeaderValue, - buildContentRange, - createInflate, - extractMimeType - } = require_util2(); - var { kState, kDispatcher } = require_symbols2(); - var assert = __require("assert"); - var { safelyExtractBody, extractBody } = require_body(); - var { - redirectStatusSet, - nullBodyStatus, - safeMethodsSet, - requestBodyHeader, - subresourceSet - } = require_constants3(); - var EE = __require("events"); - var { Readable, pipeline, finished } = __require("stream"); - var { addAbortListener, isErrored, isReadable, bufferToLowerCasedHeaderName } = require_util(); - var { dataURLProcessor, serializeAMimeType, minimizeSupportedMimeType } = require_data_url(); - var { getGlobalDispatcher } = require_global2(); - var { webidl } = require_webidl(); - var { STATUS_CODES } = __require("http"); - var GET_OR_HEAD = ["GET", "HEAD"]; - var defaultUserAgent = typeof __UNDICI_IS_NODE__ !== "undefined" || typeof esbuildDetection !== "undefined" ? "node" : "undici"; - var resolveObjectURL; - var Fetch = class extends EE { - constructor(dispatcher) { - super(); - this.dispatcher = dispatcher; - this.connection = null; - this.dump = false; - this.state = "ongoing"; - } - terminate(reason) { - var _a; - if (this.state !== "ongoing") { - return; - } - this.state = "terminated"; - (_a = this.connection) == null ? void 0 : _a.destroy(reason); - this.emit("terminated", reason); - } - // https://fetch.spec.whatwg.org/#fetch-controller-abort - abort(error) { - var _a; - if (this.state !== "ongoing") { - return; - } - this.state = "aborted"; - if (!error) { - error = new DOMException("The operation was aborted.", "AbortError"); - } - this.serializedAbortReason = error; - (_a = this.connection) == null ? void 0 : _a.destroy(error); - this.emit("terminated", error); - } - }; - function handleFetchDone(response) { - finalizeAndReportTiming(response, "fetch"); - } - function fetch(input, init = void 0) { - var _a; - webidl.argumentLengthCheck(arguments, 1, "globalThis.fetch"); - let p = createDeferredPromise(); - let requestObject; - try { - requestObject = new Request(input, init); - } catch (e) { - p.reject(e); - return p.promise; - } - const request = requestObject[kState]; - if (requestObject.signal.aborted) { - abortFetch(p, request, null, requestObject.signal.reason); - return p.promise; - } - const globalObject = request.client.globalObject; - if (((_a = globalObject == null ? void 0 : globalObject.constructor) == null ? void 0 : _a.name) === "ServiceWorkerGlobalScope") { - request.serviceWorkers = "none"; - } - let responseObject = null; - let locallyAborted = false; - let controller = null; - addAbortListener( - requestObject.signal, - () => { - locallyAborted = true; - assert(controller != null); - controller.abort(requestObject.signal.reason); - const realResponse = responseObject == null ? void 0 : responseObject.deref(); - abortFetch(p, request, realResponse, requestObject.signal.reason); - } - ); - const processResponse = (response) => { - if (locallyAborted) { - return; - } - if (response.aborted) { - abortFetch(p, request, responseObject, controller.serializedAbortReason); - return; - } - if (response.type === "error") { - p.reject(new TypeError("fetch failed", { cause: response.error })); - return; - } - responseObject = new WeakRef(fromInnerResponse(response, "immutable")); - p.resolve(responseObject.deref()); - p = null; - }; - controller = fetching({ - request, - processResponseEndOfBody: handleFetchDone, - processResponse, - dispatcher: requestObject[kDispatcher] - // undici - }); - return p.promise; - } - function finalizeAndReportTiming(response, initiatorType = "other") { - var _a; - if (response.type === "error" && response.aborted) { - return; - } - if (!((_a = response.urlList) == null ? void 0 : _a.length)) { - return; - } - const originalURL = response.urlList[0]; - let timingInfo = response.timingInfo; - let cacheState = response.cacheState; - if (!urlIsHttpHttpsScheme(originalURL)) { - return; - } - if (timingInfo === null) { - return; - } - if (!response.timingAllowPassed) { - timingInfo = createOpaqueTimingInfo({ - startTime: timingInfo.startTime - }); - cacheState = ""; - } - timingInfo.endTime = coarsenedSharedCurrentTime(); - response.timingInfo = timingInfo; - markResourceTiming( - timingInfo, - originalURL.href, - initiatorType, - globalThis, - cacheState - ); - } - var markResourceTiming = performance.markResourceTiming; - function abortFetch(p, request, responseObject, error) { - var _a, _b; - if (p) { - p.reject(error); - } - if (request.body != null && isReadable((_a = request.body) == null ? void 0 : _a.stream)) { - request.body.stream.cancel(error).catch((err) => { - if (err.code === "ERR_INVALID_STATE") { - return; - } - throw err; - }); - } - if (responseObject == null) { - return; - } - const response = responseObject[kState]; - if (response.body != null && isReadable((_b = response.body) == null ? void 0 : _b.stream)) { - response.body.stream.cancel(error).catch((err) => { - if (err.code === "ERR_INVALID_STATE") { - return; - } - throw err; - }); - } - } - function fetching({ - request, - processRequestBodyChunkLength, - processRequestEndOfBody, - processResponse, - processResponseEndOfBody, - processResponseConsumeBody, - useParallelQueue = false, - dispatcher = getGlobalDispatcher() - // undici - }) { - var _a, _b, _c; - assert(dispatcher); - let taskDestination = null; - let crossOriginIsolatedCapability = false; - if (request.client != null) { - taskDestination = request.client.globalObject; - crossOriginIsolatedCapability = request.client.crossOriginIsolatedCapability; - } - const currentTime = coarsenedSharedCurrentTime(crossOriginIsolatedCapability); - const timingInfo = createOpaqueTimingInfo({ - startTime: currentTime - }); - const fetchParams = { - controller: new Fetch(dispatcher), - request, - timingInfo, - processRequestBodyChunkLength, - processRequestEndOfBody, - processResponse, - processResponseConsumeBody, - processResponseEndOfBody, - taskDestination, - crossOriginIsolatedCapability - }; - assert(!request.body || request.body.stream); - if (request.window === "client") { - request.window = ((_c = (_b = (_a = request.client) == null ? void 0 : _a.globalObject) == null ? void 0 : _b.constructor) == null ? void 0 : _c.name) === "Window" ? request.client : "no-window"; - } - if (request.origin === "client") { - request.origin = request.client.origin; - } - if (request.policyContainer === "client") { - if (request.client != null) { - request.policyContainer = clonePolicyContainer( - request.client.policyContainer - ); - } else { - request.policyContainer = makePolicyContainer(); - } - } - if (!request.headersList.contains("accept", true)) { - const value = "*/*"; - request.headersList.append("accept", value, true); - } - if (!request.headersList.contains("accept-language", true)) { - request.headersList.append("accept-language", "*", true); - } - if (request.priority === null) { - } - if (subresourceSet.has(request.destination)) { - } - mainFetch(fetchParams).catch((err) => { - fetchParams.controller.terminate(err); - }); - return fetchParams.controller; - } - function mainFetch(fetchParams, recursive = false) { - return __async(this, null, function* () { - const request = fetchParams.request; - let response = null; - if (request.localURLsOnly && !urlIsLocal(requestCurrentURL(request))) { - response = makeNetworkError("local URLs only"); - } - tryUpgradeRequestToAPotentiallyTrustworthyURL(request); - if (requestBadPort(request) === "blocked") { - response = makeNetworkError("bad port"); - } - if (request.referrerPolicy === "") { - request.referrerPolicy = request.policyContainer.referrerPolicy; - } - if (request.referrer !== "no-referrer") { - request.referrer = determineRequestsReferrer(request); - } - if (response === null) { - response = yield (() => __async(this, null, function* () { - 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") - ) { - request.responseTainting = "basic"; - return yield schemeFetch(fetchParams); - } - if (request.mode === "same-origin") { - return makeNetworkError('request mode cannot be "same-origin"'); - } - if (request.mode === "no-cors") { - if (request.redirect !== "follow") { - return makeNetworkError( - 'redirect mode cannot be "follow" for "no-cors" request' - ); - } - request.responseTainting = "opaque"; - return yield schemeFetch(fetchParams); - } - if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) { - return makeNetworkError("URL scheme must be a HTTP(S) scheme"); - } - request.responseTainting = "cors"; - return yield httpFetch(fetchParams); - }))(); - } - if (recursive) { - return response; - } - if (response.status !== 0 && !response.internalResponse) { - if (request.responseTainting === "cors") { - } - 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); - } - } - let internalResponse = response.status === 0 ? response : response.internalResponse; - if (internalResponse.urlList.length === 0) { - internalResponse.urlList.push(...request.urlList); - } - if (!request.timingAllowFailed) { - response.timingAllowPassed = true; - } - if (response.type === "opaque" && internalResponse.status === 206 && internalResponse.rangeRequested && !request.headers.contains("range", true)) { - response = internalResponse = makeNetworkError(); - } - if (response.status !== 0 && (request.method === "HEAD" || request.method === "CONNECT" || nullBodyStatus.includes(internalResponse.status))) { - internalResponse.body = null; - fetchParams.controller.dump = true; - } - if (request.integrity) { - const processBodyError = (reason) => fetchFinale(fetchParams, makeNetworkError(reason)); - if (request.responseTainting === "opaque" || response.body == null) { - processBodyError(response.error); - return; - } - const processBody = (bytes) => { - if (!bytesMatch(bytes, request.integrity)) { - processBodyError("integrity mismatch"); - return; - } - response.body = safelyExtractBody(bytes)[0]; - fetchFinale(fetchParams, response); - }; - yield fullyReadBody(response.body, processBody, processBodyError); - } else { - fetchFinale(fetchParams, response); - } - }); - } - function schemeFetch(fetchParams) { - if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) { - return Promise.resolve(makeAppropriateNetworkError(fetchParams)); - } - const { request } = fetchParams; - const { protocol: scheme } = requestCurrentURL(request); - switch (scheme) { - case "about:": { - return Promise.resolve(makeNetworkError("about scheme is not supported")); - } - case "blob:": { - if (!resolveObjectURL) { - resolveObjectURL = __require("buffer").resolveObjectURL; - } - const blobURLEntry = requestCurrentURL(request); - if (blobURLEntry.search.length !== 0) { - return Promise.resolve(makeNetworkError("NetworkError when attempting to fetch resource.")); - } - const blob = resolveObjectURL(blobURLEntry.toString()); - if (request.method !== "GET" || !isBlobLike(blob)) { - return Promise.resolve(makeNetworkError("invalid method")); - } - const response = makeResponse(); - const fullLength = blob.size; - const serializedFullLength = isomorphicEncode(`${fullLength}`); - const type = blob.type; - if (!request.headersList.contains("range", true)) { - const bodyWithType = extractBody(blob); - response.statusText = "OK"; - response.body = bodyWithType[0]; - response.headersList.set("content-length", serializedFullLength, true); - response.headersList.set("content-type", type, true); - } else { - response.rangeRequested = true; - const rangeHeader = request.headersList.get("range", true); - const rangeValue = simpleRangeHeaderValue(rangeHeader, true); - if (rangeValue === "failure") { - return Promise.resolve(makeNetworkError("failed to fetch the data URL")); - } - let { rangeStartValue: rangeStart, rangeEndValue: rangeEnd } = rangeValue; - if (rangeStart === null) { - rangeStart = fullLength - rangeEnd; - rangeEnd = rangeStart + rangeEnd - 1; - } else { - if (rangeStart >= fullLength) { - return Promise.resolve(makeNetworkError("Range start is greater than the blob's size.")); - } - if (rangeEnd === null || rangeEnd >= fullLength) { - rangeEnd = fullLength - 1; - } - } - const slicedBlob = blob.slice(rangeStart, rangeEnd, type); - const slicedBodyWithType = extractBody(slicedBlob); - response.body = slicedBodyWithType[0]; - const serializedSlicedLength = isomorphicEncode(`${slicedBlob.size}`); - const contentRange = buildContentRange(rangeStart, rangeEnd, fullLength); - response.status = 206; - response.statusText = "Partial Content"; - response.headersList.set("content-length", serializedSlicedLength, true); - response.headersList.set("content-type", type, true); - response.headersList.set("content-range", contentRange, true); - } - return Promise.resolve(response); - } - case "data:": { - const currentURL = requestCurrentURL(request); - const dataURLStruct = dataURLProcessor(currentURL); - if (dataURLStruct === "failure") { - return Promise.resolve(makeNetworkError("failed to fetch the data URL")); - } - const mimeType = serializeAMimeType(dataURLStruct.mimeType); - return Promise.resolve(makeResponse({ - statusText: "OK", - headersList: [ - ["content-type", { name: "Content-Type", value: mimeType }] - ], - body: safelyExtractBody(dataURLStruct.body)[0] - })); - } - case "file:": { - return Promise.resolve(makeNetworkError("not implemented... yet...")); - } - case "http:": - case "https:": { - return httpFetch(fetchParams).catch((err) => makeNetworkError(err)); - } - default: { - return Promise.resolve(makeNetworkError("unknown scheme")); - } - } - } - function finalizeResponse(fetchParams, response) { - fetchParams.request.done = true; - if (fetchParams.processResponseDone != null) { - queueMicrotask(() => fetchParams.processResponseDone(response)); - } - } - function fetchFinale(fetchParams, response) { - var _a; - let timingInfo = fetchParams.timingInfo; - const processResponseEndOfBody = () => { - const unsafeEndTime = Date.now(); - if (fetchParams.request.destination === "document") { - fetchParams.controller.fullTimingInfo = timingInfo; - } - fetchParams.controller.reportTimingSteps = () => { - if (fetchParams.request.url.protocol !== "https:") { - return; - } - timingInfo.endTime = unsafeEndTime; - let cacheState = response.cacheState; - const bodyInfo = response.bodyInfo; - if (!response.timingAllowPassed) { - timingInfo = createOpaqueTimingInfo(timingInfo); - cacheState = ""; - } - let responseStatus = 0; - if (fetchParams.request.mode !== "navigator" || !response.hasCrossOriginRedirects) { - responseStatus = response.status; - const mimeType = extractMimeType(response.headersList); - if (mimeType !== "failure") { - bodyInfo.contentType = minimizeSupportedMimeType(mimeType); - } - } - if (fetchParams.request.initiatorType != null) { - markResourceTiming(timingInfo, fetchParams.request.url.href, fetchParams.request.initiatorType, globalThis, cacheState, bodyInfo, responseStatus); - } - }; - const processResponseEndOfBodyTask = () => { - fetchParams.request.done = true; - if (fetchParams.processResponseEndOfBody != null) { - queueMicrotask(() => fetchParams.processResponseEndOfBody(response)); - } - if (fetchParams.request.initiatorType != null) { - fetchParams.controller.reportTimingSteps(); - } - }; - queueMicrotask(() => processResponseEndOfBodyTask()); - }; - if (fetchParams.processResponse != null) { - queueMicrotask(() => { - fetchParams.processResponse(response); - fetchParams.processResponse = null; - }); - } - const internalResponse = response.type === "error" ? response : (_a = response.internalResponse) != null ? _a : response; - if (internalResponse.body == null) { - processResponseEndOfBody(); - } else { - finished(internalResponse.body.stream, () => { - processResponseEndOfBody(); - }); - } - } - function httpFetch(fetchParams) { - return __async(this, null, function* () { - const request = fetchParams.request; - let response = null; - let actualResponse = null; - const timingInfo = fetchParams.timingInfo; - if (request.serviceWorkers === "all") { - } - if (response === null) { - if (request.redirect === "follow") { - request.serviceWorkers = "none"; - } - actualResponse = response = yield httpNetworkOrCacheFetch(fetchParams); - if (request.responseTainting === "cors" && corsCheck(request, response) === "failure") { - return makeNetworkError("cors failure"); - } - if (TAOCheck(request, response) === "failure") { - request.timingAllowFailed = true; - } - } - if ((request.responseTainting === "opaque" || response.type === "opaque") && crossOriginResourcePolicyCheck( - request.origin, - request.client, - request.destination, - actualResponse - ) === "blocked") { - return makeNetworkError("blocked"); - } - if (redirectStatusSet.has(actualResponse.status)) { - if (request.redirect !== "manual") { - fetchParams.controller.connection.destroy(void 0, false); - } - if (request.redirect === "error") { - response = makeNetworkError("unexpected redirect"); - } else if (request.redirect === "manual") { - response = actualResponse; - } else if (request.redirect === "follow") { - response = yield httpRedirectFetch(fetchParams, response); - } else { - assert(false); - } - } - response.timingInfo = timingInfo; - return response; - }); - } - function httpRedirectFetch(fetchParams, response) { - const request = fetchParams.request; - const actualResponse = response.internalResponse ? response.internalResponse : response; - let locationURL; - try { - locationURL = responseLocationURL( - actualResponse, - requestCurrentURL(request).hash - ); - if (locationURL == null) { - return response; - } - } catch (err) { - return Promise.resolve(makeNetworkError(err)); - } - if (!urlIsHttpHttpsScheme(locationURL)) { - return Promise.resolve(makeNetworkError("URL scheme must be a HTTP(S) scheme")); - } - if (request.redirectCount === 20) { - return Promise.resolve(makeNetworkError("redirect count exceeded")); - } - request.redirectCount += 1; - if (request.mode === "cors" && (locationURL.username || locationURL.password) && !sameOrigin(request, locationURL)) { - return Promise.resolve(makeNetworkError('cross origin not allowed for request mode "cors"')); - } - if (request.responseTainting === "cors" && (locationURL.username || locationURL.password)) { - return Promise.resolve(makeNetworkError( - 'URL cannot contain credentials for request mode "cors"' - )); - } - if (actualResponse.status !== 303 && request.body != null && request.body.source == null) { - return Promise.resolve(makeNetworkError()); - } - if ([301, 302].includes(actualResponse.status) && request.method === "POST" || actualResponse.status === 303 && !GET_OR_HEAD.includes(request.method)) { - request.method = "GET"; - request.body = null; - for (const headerName of requestBodyHeader) { - request.headersList.delete(headerName); - } - } - if (!sameOrigin(requestCurrentURL(request), locationURL)) { - request.headersList.delete("authorization", true); - request.headersList.delete("proxy-authorization", true); - request.headersList.delete("cookie", true); - request.headersList.delete("host", true); - } - if (request.body != null) { - assert(request.body.source != null); - request.body = safelyExtractBody(request.body.source)[0]; - } - const timingInfo = fetchParams.timingInfo; - timingInfo.redirectEndTime = timingInfo.postRedirectStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); - if (timingInfo.redirectStartTime === 0) { - timingInfo.redirectStartTime = timingInfo.startTime; - } - request.urlList.push(locationURL); - setRequestReferrerPolicyOnRedirect(request, actualResponse); - return mainFetch(fetchParams, true); - } - function httpNetworkOrCacheFetch(fetchParams, isAuthenticationFetch = false, isNewConnectionFetch = false) { - return __async(this, null, function* () { - const request = fetchParams.request; - let httpFetchParams = null; - let httpRequest = null; - let response = null; - const httpCache = null; - const revalidatingFlag = false; - if (request.window === "no-window" && request.redirect === "error") { - httpFetchParams = fetchParams; - httpRequest = request; - } else { - httpRequest = cloneRequest(request); - httpFetchParams = __spreadValues({}, fetchParams); - httpFetchParams.request = httpRequest; - } - const includeCredentials = request.credentials === "include" || request.credentials === "same-origin" && request.responseTainting === "basic"; - const contentLength = httpRequest.body ? httpRequest.body.length : null; - let contentLengthHeaderValue = null; - if (httpRequest.body == null && ["POST", "PUT"].includes(httpRequest.method)) { - contentLengthHeaderValue = "0"; - } - if (contentLength != null) { - contentLengthHeaderValue = isomorphicEncode(`${contentLength}`); - } - if (contentLengthHeaderValue != null) { - httpRequest.headersList.append("content-length", contentLengthHeaderValue, true); - } - if (contentLength != null && httpRequest.keepalive) { - } - if (httpRequest.referrer instanceof URL) { - httpRequest.headersList.append("referer", isomorphicEncode(httpRequest.referrer.href), true); - } - appendRequestOriginHeader(httpRequest); - appendFetchMetadata(httpRequest); - if (!httpRequest.headersList.contains("user-agent", true)) { - httpRequest.headersList.append("user-agent", defaultUserAgent); - } - if (httpRequest.cache === "default" && (httpRequest.headersList.contains("if-modified-since", true) || httpRequest.headersList.contains("if-none-match", true) || httpRequest.headersList.contains("if-unmodified-since", true) || httpRequest.headersList.contains("if-match", true) || httpRequest.headersList.contains("if-range", true))) { - httpRequest.cache = "no-store"; - } - if (httpRequest.cache === "no-cache" && !httpRequest.preventNoCacheCacheControlHeaderModification && !httpRequest.headersList.contains("cache-control", true)) { - httpRequest.headersList.append("cache-control", "max-age=0", true); - } - if (httpRequest.cache === "no-store" || httpRequest.cache === "reload") { - if (!httpRequest.headersList.contains("pragma", true)) { - httpRequest.headersList.append("pragma", "no-cache", true); - } - if (!httpRequest.headersList.contains("cache-control", true)) { - httpRequest.headersList.append("cache-control", "no-cache", true); - } - } - if (httpRequest.headersList.contains("range", true)) { - httpRequest.headersList.append("accept-encoding", "identity", true); - } - if (!httpRequest.headersList.contains("accept-encoding", true)) { - if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) { - httpRequest.headersList.append("accept-encoding", "br, gzip, deflate", true); - } else { - httpRequest.headersList.append("accept-encoding", "gzip, deflate", true); - } - } - httpRequest.headersList.delete("host", true); - if (includeCredentials) { - } - if (httpCache == null) { - httpRequest.cache = "no-store"; - } - if (httpRequest.cache !== "no-store" && httpRequest.cache !== "reload") { - } - if (response == null) { - if (httpRequest.cache === "only-if-cached") { - return makeNetworkError("only if cached"); - } - const forwardResponse = yield httpNetworkFetch( - httpFetchParams, - includeCredentials, - isNewConnectionFetch - ); - if (!safeMethodsSet.has(httpRequest.method) && forwardResponse.status >= 200 && forwardResponse.status <= 399) { - } - if (revalidatingFlag && forwardResponse.status === 304) { - } - if (response == null) { - response = forwardResponse; - } - } - response.urlList = [...httpRequest.urlList]; - if (httpRequest.headersList.contains("range", true)) { - response.rangeRequested = true; - } - response.requestIncludesCredentials = includeCredentials; - if (response.status === 407) { - if (request.window === "no-window") { - return makeNetworkError(); - } - if (isCancelled(fetchParams)) { - return makeAppropriateNetworkError(fetchParams); - } - return makeNetworkError("proxy authentication required"); - } - 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) - ) { - if (isCancelled(fetchParams)) { - return makeAppropriateNetworkError(fetchParams); - } - fetchParams.controller.connection.destroy(); - response = yield httpNetworkOrCacheFetch( - fetchParams, - isAuthenticationFetch, - true - ); - } - if (isAuthenticationFetch) { - } - return response; - }); - } - function httpNetworkFetch(fetchParams, includeCredentials = false, forceNewConnection = false) { - return __async(this, null, function* () { - assert(!fetchParams.controller.connection || fetchParams.controller.connection.destroyed); - fetchParams.controller.connection = { - abort: null, - destroyed: false, - destroy(err, abort = true) { - var _a2; - if (!this.destroyed) { - this.destroyed = true; - if (abort) { - (_a2 = this.abort) == null ? void 0 : _a2.call(this, err != null ? err : new DOMException("The operation was aborted.", "AbortError")); - } - } - } - }; - const request = fetchParams.request; - let response = null; - const timingInfo = fetchParams.timingInfo; - const httpCache = null; - if (httpCache == null) { - request.cache = "no-store"; - } - const newConnection = forceNewConnection ? "yes" : "no"; - if (request.mode === "websocket") { - } else { - } - let requestBody = null; - if (request.body == null && fetchParams.processRequestEndOfBody) { - queueMicrotask(() => fetchParams.processRequestEndOfBody()); - } else if (request.body != null) { - const processBodyChunk = function(bytes) { - return __asyncGenerator(this, null, function* () { - var _a2; - if (isCancelled(fetchParams)) { - return; - } - yield bytes; - (_a2 = fetchParams.processRequestBodyChunkLength) == null ? void 0 : _a2.call(fetchParams, bytes.byteLength); - }); - }; - const processEndOfBody = () => { - if (isCancelled(fetchParams)) { - return; - } - if (fetchParams.processRequestEndOfBody) { - fetchParams.processRequestEndOfBody(); - } - }; - const processBodyError = (e) => { - if (isCancelled(fetchParams)) { - return; - } - if (e.name === "AbortError") { - fetchParams.controller.abort(); - } else { - fetchParams.controller.terminate(e); - } - }; - requestBody = function() { - return __asyncGenerator(this, null, function* () { - try { - try { - for (var iter = __forAwait(request.body.stream), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) { - const bytes = temp.value; - yield* __yieldStar(processBodyChunk(bytes)); - } - } catch (temp) { - error = [temp]; - } finally { - try { - more && (temp = iter.return) && (yield new __await(temp.call(iter))); - } finally { - if (error) - throw error[0]; - } - } - processEndOfBody(); - } catch (err) { - processBodyError(err); - } - }); - }(); - } - try { - const { body, status, statusText, headersList, socket } = yield 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) { - if (err.name === "AbortError") { - fetchParams.controller.connection.destroy(); - return makeAppropriateNetworkError(fetchParams, err); - } - return makeNetworkError(err); - } - const pullAlgorithm = () => __async(this, null, function* () { - yield fetchParams.controller.resume(); - }); - const cancelAlgorithm = (reason) => { - if (!isCancelled(fetchParams)) { - fetchParams.controller.abort(reason); - } - }; - const stream = new ReadableStream( - { - start(controller) { - return __async(this, null, function* () { - fetchParams.controller.controller = controller; - }); - }, - pull(controller) { - return __async(this, null, function* () { - yield pullAlgorithm(controller); - }); - }, - cancel(reason) { - return __async(this, null, function* () { - yield cancelAlgorithm(reason); - }); - }, - type: "bytes" - } - ); - response.body = { stream, source: null, length: null }; - fetchParams.controller.onAborted = onAborted; - fetchParams.controller.on("terminated", onAborted); - fetchParams.controller.resume = () => __async(this, null, function* () { - var _a2; - while (true) { - let bytes; - let isFailure; - try { - const { done, value } = yield fetchParams.controller.next(); - if (isAborted(fetchParams)) { - break; - } - bytes = done ? void 0 : value; - } catch (err) { - if (fetchParams.controller.ended && !timingInfo.encodedBodySize) { - bytes = void 0; - } else { - bytes = err; - isFailure = true; - } - } - if (bytes === void 0) { - readableStreamClose(fetchParams.controller.controller); - finalizeResponse(fetchParams, response); - return; - } - timingInfo.decodedBodySize += (_a2 = bytes == null ? void 0 : bytes.byteLength) != null ? _a2 : 0; - if (isFailure) { - fetchParams.controller.terminate(bytes); - return; - } - const buffer = new Uint8Array(bytes); - if (buffer.byteLength) { - fetchParams.controller.controller.enqueue(buffer); - } - if (isErrored(stream)) { - fetchParams.controller.terminate(); - return; - } - if (fetchParams.controller.controller.desiredSize <= 0) { - return; - } - } - }); - function onAborted(reason) { - if (isAborted(fetchParams)) { - response.aborted = true; - if (isReadable(stream)) { - fetchParams.controller.controller.error( - fetchParams.controller.serializedAbortReason - ); - } - } else { - if (isReadable(stream)) { - fetchParams.controller.controller.error(new TypeError("terminated", { - cause: isErrorLike(reason) ? reason : void 0 - })); - } - } - fetchParams.controller.connection.destroy(); - } - return response; - function dispatch({ body }) { - const url = requestCurrentURL(request); - const agent = fetchParams.controller.dispatcher; - return new Promise((resolve2, reject) => agent.dispatch( - { - path: url.pathname + url.search, - origin: url.origin, - method: request.method, - body: agent.isMockActive ? request.body && (request.body.source || request.body.stream) : body, - headers: request.headersList.entries, - maxRedirections: 0, - upgrade: request.mode === "websocket" ? "websocket" : void 0 - }, - { - body: null, - abort: null, - onConnect(abort) { - const { connection } = fetchParams.controller; - timingInfo.finalConnectionTimingInfo = clampAndCoarsenConnectionTimingInfo(void 0, timingInfo.postRedirectStartTime, fetchParams.crossOriginIsolatedCapability); - if (connection.destroyed) { - abort(new DOMException("The operation was aborted.", "AbortError")); - } else { - fetchParams.controller.on("terminated", abort); - this.abort = connection.abort = abort; - } - timingInfo.finalNetworkRequestStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); - }, - onResponseStarted() { - timingInfo.finalNetworkResponseStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); - }, - onHeaders(status, rawHeaders, resume, statusText) { - if (status < 200) { - return; - } - let location = ""; - const headersList = new HeadersList(); - for (let i = 0; i < rawHeaders.length; i += 2) { - headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString("latin1"), true); - } - location = headersList.get("location", true); - this.body = new Readable({ read: resume }); - const decoders = []; - const willFollow = location && request.redirect === "follow" && redirectStatusSet.has(status); - if (request.method !== "HEAD" && request.method !== "CONNECT" && !nullBodyStatus.includes(status) && !willFollow) { - const contentEncoding = headersList.get("content-encoding", true); - const codings = contentEncoding ? contentEncoding.toLowerCase().split(",") : []; - const maxContentEncodings = 5; - if (codings.length > maxContentEncodings) { - reject(new Error(`too many content-encodings in response: ${codings.length}, maximum allowed is ${maxContentEncodings}`)); - return true; - } - for (let i = codings.length - 1; i >= 0; --i) { - const coding = codings[i].trim(); - 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(createInflate({ - flush: zlib.constants.Z_SYNC_FLUSH, - finishFlush: zlib.constants.Z_SYNC_FLUSH - })); - } else if (coding === "br") { - decoders.push(zlib.createBrotliDecompress({ - flush: zlib.constants.BROTLI_OPERATION_FLUSH, - finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH - })); - } else { - decoders.length = 0; - break; - } - } - } - const onError = this.onError.bind(this); - resolve2({ - status, - statusText, - headersList, - body: decoders.length ? pipeline(this.body, ...decoders, (err) => { - if (err) { - this.onError(err); - } - }).on("error", onError) : this.body.on("error", onError) - }); - return true; - }, - onData(chunk) { - if (fetchParams.controller.dump) { - return; - } - const bytes = chunk; - timingInfo.encodedBodySize += bytes.byteLength; - return this.body.push(bytes); - }, - onComplete() { - if (this.abort) { - fetchParams.controller.off("terminated", this.abort); - } - if (fetchParams.controller.onAborted) { - fetchParams.controller.off("terminated", fetchParams.controller.onAborted); - } - fetchParams.controller.ended = true; - this.body.push(null); - }, - onError(error) { - var _a2; - if (this.abort) { - fetchParams.controller.off("terminated", this.abort); - } - (_a2 = this.body) == null ? void 0 : _a2.destroy(error); - fetchParams.controller.terminate(error); - reject(error); - }, - onUpgrade(status, rawHeaders, socket) { - if (status !== 101) { - return; - } - const headersList = new HeadersList(); - for (let i = 0; i < rawHeaders.length; i += 2) { - headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString("latin1"), true); - } - resolve2({ - status, - statusText: STATUS_CODES[status], - headersList, - socket - }); - return true; - } - } - )); - } - }); - } - module.exports = { - fetch, - Fetch, - fetching, - finalizeAndReportTiming - }; - } - }); - - // - var require_symbols3 = __commonJS({ - ""(exports, 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") - }; - } - }); - - // - var require_progressevent = __commonJS({ - ""(exports, module) { - "use strict"; - var { webidl } = require_webidl(); - var kState = Symbol("ProgressEvent state"); - var ProgressEvent = class _ProgressEvent extends Event { - constructor(type, eventInitDict = {}) { - type = webidl.converters.DOMString(type, "ProgressEvent constructor", "type"); - eventInitDict = webidl.converters.ProgressEventInit(eventInitDict != null ? 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 - }; - } - }); - - // - var require_encoding = __commonJS({ - ""(exports, module) { - "use strict"; - function getEncoding(label) { - if (!label) { - 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 - }; - } - }); - - // - var require_util4 = __commonJS({ - ""(exports, module) { - "use strict"; - var { - kState, - kError, - kResult, - kAborted, - kLastProgressEventFired - } = require_symbols3(); - var { ProgressEvent } = require_progressevent(); - var { getEncoding } = require_encoding(); - var { serializeAMimeType, parseMIMEType } = require_data_url(); - var { types } = __require("util"); - var { StringDecoder: StringDecoder2 } = __require("string_decoder"); - var { btoa } = __require("buffer"); - var staticPropertyDescriptors = { - enumerable: true, - writable: false, - configurable: false - }; - function readOperation(fr, blob, type, encodingName) { - if (fr[kState] === "loading") { - throw new DOMException("Invalid state", "InvalidStateError"); - } - fr[kState] = "loading"; - fr[kResult] = null; - fr[kError] = null; - const stream = blob.stream(); - const reader = stream.getReader(); - const bytes = []; - let chunkPromise = reader.read(); - let isFirstChunk = true; - (() => __async(this, null, function* () { - while (!fr[kAborted]) { - try { - const { done, value } = yield chunkPromise; - if (isFirstChunk && !fr[kAborted]) { - queueMicrotask(() => { - fireAProgressEvent("loadstart", fr); - }); - } - isFirstChunk = false; - if (!done && types.isUint8Array(value)) { - bytes.push(value); - if ((fr[kLastProgressEventFired] === void 0 || Date.now() - fr[kLastProgressEventFired] >= 50) && !fr[kAborted]) { - fr[kLastProgressEventFired] = Date.now(); - queueMicrotask(() => { - fireAProgressEvent("progress", fr); - }); - } - chunkPromise = reader.read(); - } else if (done) { - queueMicrotask(() => { - fr[kState] = "done"; - try { - const result = packageData(bytes, type, blob.type, encodingName); - if (fr[kAborted]) { - return; - } - fr[kResult] = result; - fireAProgressEvent("load", fr); - } catch (error) { - fr[kError] = error; - fireAProgressEvent("error", fr); - } - if (fr[kState] !== "loading") { - fireAProgressEvent("loadend", fr); - } - }); - break; - } - } catch (error) { - if (fr[kAborted]) { - return; - } - queueMicrotask(() => { - fr[kState] = "done"; - fr[kError] = error; - fireAProgressEvent("error", fr); - if (fr[kState] !== "loading") { - fireAProgressEvent("loadend", fr); - } - }); - break; - } - } - }))(); - } - function fireAProgressEvent(e, reader) { - const event = new ProgressEvent(e, { - bubbles: false, - cancelable: false - }); - reader.dispatchEvent(event); - } - function packageData(bytes, type, mimeType, encodingName) { - switch (type) { - case "DataURL": { - let dataURL = "data:"; - const parsed = parseMIMEType(mimeType || "application/octet-stream"); - if (parsed !== "failure") { - dataURL += serializeAMimeType(parsed); - } - dataURL += ";base64,"; - const decoder = new StringDecoder2("latin1"); - for (const chunk of bytes) { - dataURL += btoa(decoder.write(chunk)); - } - dataURL += btoa(decoder.end()); - return dataURL; - } - case "Text": { - let encoding = "failure"; - if (encodingName) { - encoding = getEncoding(encodingName); - } - if (encoding === "failure" && mimeType) { - const type2 = parseMIMEType(mimeType); - if (type2 !== "failure") { - encoding = getEncoding(type2.parameters.get("charset")); - } - } - if (encoding === "failure") { - encoding = "UTF-8"; - } - return decode(bytes, encoding); - } - case "ArrayBuffer": { - const sequence = combineByteSequences(bytes); - return sequence.buffer; - } - case "BinaryString": { - let binaryString = ""; - const decoder = new StringDecoder2("latin1"); - for (const chunk of bytes) { - binaryString += decoder.write(chunk); - } - binaryString += decoder.end(); - return binaryString; - } - } - } - function decode(ioQueue, encoding) { - const bytes = combineByteSequences(ioQueue); - const BOMEncoding = BOMSniffing(bytes); - let slice = 0; - if (BOMEncoding !== null) { - encoding = BOMEncoding; - slice = BOMEncoding === "UTF-8" ? 3 : 2; - } - const sliced = bytes.slice(slice); - return new TextDecoder(encoding).decode(sliced); - } - function BOMSniffing(ioQueue) { - const [a, b, c] = ioQueue; - if (a === 239 && b === 187 && c === 191) { - return "UTF-8"; - } else if (a === 254 && b === 255) { - return "UTF-16BE"; - } else if (a === 255 && b === 254) { - return "UTF-16LE"; - } - return null; - } - 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 - }; - } - }); - - // - var require_filereader = __commonJS({ - ""(exports, module) { - "use strict"; - var { - staticPropertyDescriptors, - readOperation, - fireAProgressEvent - } = require_util4(); - var { - kState, - kError, - kResult, - kEvents, - kAborted - } = require_symbols3(); - var { webidl } = require_webidl(); - var { kEnumerableProperty } = require_util(); - var FileReader = 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, "FileReader.readAsArrayBuffer"); - blob = webidl.converters.Blob(blob, { strict: false }); - 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, "FileReader.readAsBinaryString"); - blob = webidl.converters.Blob(blob, { strict: false }); - readOperation(this, blob, "BinaryString"); - } - /** - * @see https://w3c.github.io/FileAPI/#readAsDataText - * @param {import('buffer').Blob} blob - * @param {string?} encoding - */ - readAsText(blob, encoding = void 0) { - webidl.brandCheck(this, _FileReader); - webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsText"); - blob = webidl.converters.Blob(blob, { strict: false }); - if (encoding !== void 0) { - encoding = webidl.converters.DOMString(encoding, "FileReader.readAsText", "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, "FileReader.readAsDataURL"); - blob = webidl.converters.Blob(blob, { strict: false }); - readOperation(this, blob, "DataURL"); - } - /** - * @see https://w3c.github.io/FileAPI/#dfn-abort - */ - abort() { - if (this[kState] === "empty" || this[kState] === "done") { - this[kResult] = null; - return; - } - if (this[kState] === "loading") { - this[kState] = "done"; - this[kResult] = null; - } - this[kAborted] = true; - fireAProgressEvent("abort", 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); - return this[kResult]; - } - /** - * @see https://w3c.github.io/FileAPI/#dom-filereader-error - */ - get error() { - webidl.brandCheck(this, _FileReader); - 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; - } - } - }; - FileReader.EMPTY = FileReader.prototype.EMPTY = 0; - FileReader.LOADING = FileReader.prototype.LOADING = 1; - 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 - }; - } - }); - - // - var require_symbols4 = __commonJS({ - ""(exports, module) { - "use strict"; - module.exports = { - kConstruct: require_symbols().kConstruct - }; - } - }); - - // - var require_util5 = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { URLSerializer } = require_data_url(); - var { isValidHeaderName } = require_util2(); - function urlEquals(A, B, excludeFragment = false) { - const serializedA = URLSerializer(A, excludeFragment); - const serializedB = URLSerializer(B, excludeFragment); - return serializedA === serializedB; - } - function getFieldValues(header) { - assert(header !== null); - const values = []; - for (let value of header.split(",")) { - value = value.trim(); - if (isValidHeaderName(value)) { - values.push(value); - } - } - return values; - } - module.exports = { - urlEquals, - getFieldValues - }; - } - }); - - // - var require_cache = __commonJS({ - ""(exports, module) { - "use strict"; - var { kConstruct } = require_symbols4(); - var { urlEquals, getFieldValues } = require_util5(); - var { kEnumerableProperty, isDisturbed } = require_util(); - var { webidl } = require_webidl(); - var { Response, cloneResponse, fromInnerResponse } = require_response(); - var { Request, fromInnerRequest } = require_request2(); - var { kState } = require_symbols2(); - var { fetching } = require_fetch(); - var { urlIsHttpHttpsScheme, createDeferredPromise, readAllBytes } = require_util2(); - var assert = __require("assert"); - var _relevantRequestResponseList, _batchCacheOperations, batchCacheOperations_fn, _queryCache, queryCache_fn, _requestMatchesCachedItem, requestMatchesCachedItem_fn, _internalMatchAll, internalMatchAll_fn; - var _Cache = class _Cache { - constructor() { - /** - * @see https://w3c.github.io/ServiceWorker/#batch-cache-operations-algorithm - * @param {CacheBatchOperation[]} operations - * @returns {requestResponseList} - */ - __privateAdd(this, _batchCacheOperations); - /** - * @see https://w3c.github.io/ServiceWorker/#query-cache - * @param {any} requestQuery - * @param {import('../../types/cache').CacheQueryOptions} options - * @param {requestResponseList} targetStorage - * @returns {requestResponseList} - */ - __privateAdd(this, _queryCache); - /** - * @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} - */ - __privateAdd(this, _requestMatchesCachedItem); - __privateAdd(this, _internalMatchAll); - /** - * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-request-response-list - * @type {requestResponseList} - */ - __privateAdd(this, _relevantRequestResponseList, void 0); - if (arguments[0] !== kConstruct) { - webidl.illegalConstructor(); - } - webidl.util.markAsUncloneable(this); - __privateSet(this, _relevantRequestResponseList, arguments[1]); - } - match(_0) { - return __async(this, arguments, function* (request, options = {}) { - webidl.brandCheck(this, _Cache); - const prefix = "Cache.match"; - webidl.argumentLengthCheck(arguments, 1, prefix); - request = webidl.converters.RequestInfo(request, prefix, "request"); - options = webidl.converters.CacheQueryOptions(options, prefix, "options"); - const p = __privateMethod(this, _internalMatchAll, internalMatchAll_fn).call(this, request, options, 1); - if (p.length === 0) { - return; - } - return p[0]; - }); - } - matchAll() { - return __async(this, arguments, function* (request = void 0, options = {}) { - webidl.brandCheck(this, _Cache); - const prefix = "Cache.matchAll"; - if (request !== void 0) - request = webidl.converters.RequestInfo(request, prefix, "request"); - options = webidl.converters.CacheQueryOptions(options, prefix, "options"); - return __privateMethod(this, _internalMatchAll, internalMatchAll_fn).call(this, request, options); - }); - } - add(_0) { - return __async(this, arguments, function* (request) { - webidl.brandCheck(this, _Cache); - const prefix = "Cache.add"; - webidl.argumentLengthCheck(arguments, 1, prefix); - request = webidl.converters.RequestInfo(request, prefix, "request"); - const requests = [request]; - const responseArrayPromise = this.addAll(requests); - return yield responseArrayPromise; - }); - } - addAll(_0) { - return __async(this, arguments, function* (requests) { - webidl.brandCheck(this, _Cache); - const prefix = "Cache.addAll"; - webidl.argumentLengthCheck(arguments, 1, prefix); - const responsePromises = []; - const requestList = []; - for (let request of requests) { - if (request === void 0) { - throw webidl.errors.conversionFailed({ - prefix, - argument: "Argument 1", - types: ["undefined is not allowed"] - }); - } - request = webidl.converters.RequestInfo(request); - if (typeof request === "string") { - continue; - } - const r = request[kState]; - if (!urlIsHttpHttpsScheme(r.url) || r.method !== "GET") { - throw webidl.errors.exception({ - header: prefix, - message: "Expected http/s scheme when method is not GET." - }); - } - } - const fetchControllers = []; - for (const request of requests) { - const r = new Request(request)[kState]; - if (!urlIsHttpHttpsScheme(r.url)) { - throw webidl.errors.exception({ - header: prefix, - message: "Expected http/s scheme." - }); - } - r.initiator = "fetch"; - r.destination = "subresource"; - requestList.push(r); - const responsePromise = createDeferredPromise(); - fetchControllers.push(fetching({ - request: r, - processResponse(response) { - 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")) { - const fieldValues = getFieldValues(response.headersList.get("vary")); - for (const fieldValue of fieldValues) { - 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) { - if (response.aborted) { - responsePromise.reject(new DOMException("aborted", "AbortError")); - return; - } - responsePromise.resolve(response); - } - })); - responsePromises.push(responsePromise.promise); - } - const p = Promise.all(responsePromises); - const responses = yield p; - const operations = []; - let index = 0; - for (const response of responses) { - const operation = { - type: "put", - // 7.3.2 - request: requestList[index], - // 7.3.3 - response - // 7.3.4 - }; - operations.push(operation); - index++; - } - const cacheJobPromise = createDeferredPromise(); - let errorData = null; - try { - __privateMethod(this, _batchCacheOperations, batchCacheOperations_fn).call(this, operations); - } catch (e) { - errorData = e; - } - queueMicrotask(() => { - if (errorData === null) { - cacheJobPromise.resolve(void 0); - } else { - cacheJobPromise.reject(errorData); - } - }); - return cacheJobPromise.promise; - }); - } - put(_0, _1) { - return __async(this, arguments, function* (request, response) { - webidl.brandCheck(this, _Cache); - const prefix = "Cache.put"; - webidl.argumentLengthCheck(arguments, 2, prefix); - request = webidl.converters.RequestInfo(request, prefix, "request"); - response = webidl.converters.Response(response, prefix, "response"); - let innerRequest = null; - if (request instanceof Request) { - innerRequest = request[kState]; - } else { - innerRequest = new Request(request)[kState]; - } - if (!urlIsHttpHttpsScheme(innerRequest.url) || innerRequest.method !== "GET") { - throw webidl.errors.exception({ - header: prefix, - message: "Expected an http/s scheme when method is not GET" - }); - } - const innerResponse = response[kState]; - if (innerResponse.status === 206) { - throw webidl.errors.exception({ - header: prefix, - message: "Got 206 status" - }); - } - if (innerResponse.headersList.contains("vary")) { - const fieldValues = getFieldValues(innerResponse.headersList.get("vary")); - for (const fieldValue of fieldValues) { - if (fieldValue === "*") { - throw webidl.errors.exception({ - header: prefix, - message: "Got * vary field value" - }); - } - } - } - if (innerResponse.body && (isDisturbed(innerResponse.body.stream) || innerResponse.body.stream.locked)) { - throw webidl.errors.exception({ - header: prefix, - message: "Response body is locked or disturbed" - }); - } - const clonedResponse = cloneResponse(innerResponse); - const bodyReadPromise = createDeferredPromise(); - if (innerResponse.body != null) { - const stream = innerResponse.body.stream; - const reader = stream.getReader(); - readAllBytes(reader).then(bodyReadPromise.resolve, bodyReadPromise.reject); - } else { - bodyReadPromise.resolve(void 0); - } - const operations = []; - const operation = { - type: "put", - // 14. - request: innerRequest, - // 15. - response: clonedResponse - // 16. - }; - operations.push(operation); - const bytes = yield bodyReadPromise.promise; - if (clonedResponse.body != null) { - clonedResponse.body.source = bytes; - } - const cacheJobPromise = createDeferredPromise(); - let errorData = null; - try { - __privateMethod(this, _batchCacheOperations, batchCacheOperations_fn).call(this, operations); - } catch (e) { - errorData = e; - } - queueMicrotask(() => { - if (errorData === null) { - cacheJobPromise.resolve(); - } else { - cacheJobPromise.reject(errorData); - } - }); - return cacheJobPromise.promise; - }); - } - delete(_0) { - return __async(this, arguments, function* (request, options = {}) { - webidl.brandCheck(this, _Cache); - const prefix = "Cache.delete"; - webidl.argumentLengthCheck(arguments, 1, prefix); - request = webidl.converters.RequestInfo(request, prefix, "request"); - options = webidl.converters.CacheQueryOptions(options, prefix, "options"); - 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]; - } - const operations = []; - const operation = { - type: "delete", - request: r, - options - }; - operations.push(operation); - const cacheJobPromise = createDeferredPromise(); - let errorData = null; - let requestResponses; - try { - requestResponses = __privateMethod(this, _batchCacheOperations, batchCacheOperations_fn).call(this, operations); - } catch (e) { - errorData = e; - } - queueMicrotask(() => { - if (errorData === null) { - cacheJobPromise.resolve(!!(requestResponses == null ? void 0 : 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 {Promise} - */ - keys() { - return __async(this, arguments, function* (request = void 0, options = {}) { - webidl.brandCheck(this, _Cache); - const prefix = "Cache.keys"; - if (request !== void 0) - request = webidl.converters.RequestInfo(request, prefix, "request"); - options = webidl.converters.CacheQueryOptions(options, prefix, "options"); - let r = null; - if (request !== void 0) { - if (request instanceof Request) { - r = request[kState]; - if (r.method !== "GET" && !options.ignoreMethod) { - return []; - } - } else if (typeof request === "string") { - r = new Request(request)[kState]; - } - } - const promise = createDeferredPromise(); - const requests = []; - if (request === void 0) { - for (const requestResponse of __privateGet(this, _relevantRequestResponseList)) { - requests.push(requestResponse[0]); - } - } else { - const requestResponses = __privateMethod(this, _queryCache, queryCache_fn).call(this, r, options); - for (const requestResponse of requestResponses) { - requests.push(requestResponse[0]); - } - } - queueMicrotask(() => { - const requestList = []; - for (const request2 of requests) { - const requestObject = fromInnerRequest( - request2, - new AbortController().signal, - "immutable" - ); - requestList.push(requestObject); - } - promise.resolve(Object.freeze(requestList)); - }); - return promise.promise; - }); - } - }; - _relevantRequestResponseList = new WeakMap(); - _batchCacheOperations = new WeakSet(); - batchCacheOperations_fn = function(operations) { - const cache = __privateGet(this, _relevantRequestResponseList); - const backupCache = [...cache]; - const addedItems = []; - const resultList = []; - try { - for (const operation of operations) { - if (operation.type !== "delete" && operation.type !== "put") { - throw webidl.errors.exception({ - header: "Cache.#batchCacheOperations", - message: 'operation type does not match "delete" or "put"' - }); - } - if (operation.type === "delete" && operation.response != null) { - throw webidl.errors.exception({ - header: "Cache.#batchCacheOperations", - message: "delete operation should not have an associated response" - }); - } - if (__privateMethod(this, _queryCache, queryCache_fn).call(this, operation.request, operation.options, addedItems).length) { - throw new DOMException("???", "InvalidStateError"); - } - let requestResponses; - if (operation.type === "delete") { - requestResponses = __privateMethod(this, _queryCache, queryCache_fn).call(this, operation.request, operation.options); - if (requestResponses.length === 0) { - return []; - } - for (const requestResponse of requestResponses) { - const idx = cache.indexOf(requestResponse); - assert(idx !== -1); - cache.splice(idx, 1); - } - } else if (operation.type === "put") { - if (operation.response == null) { - throw webidl.errors.exception({ - header: "Cache.#batchCacheOperations", - message: "put operation should have an associated response" - }); - } - const r = operation.request; - if (!urlIsHttpHttpsScheme(r.url)) { - throw webidl.errors.exception({ - header: "Cache.#batchCacheOperations", - message: "expected http or https scheme" - }); - } - if (r.method !== "GET") { - throw webidl.errors.exception({ - header: "Cache.#batchCacheOperations", - message: "not get method" - }); - } - if (operation.options != null) { - throw webidl.errors.exception({ - header: "Cache.#batchCacheOperations", - message: "options must not be defined" - }); - } - requestResponses = __privateMethod(this, _queryCache, queryCache_fn).call(this, operation.request); - for (const requestResponse of requestResponses) { - const idx = cache.indexOf(requestResponse); - assert(idx !== -1); - cache.splice(idx, 1); - } - cache.push([operation.request, operation.response]); - addedItems.push([operation.request, operation.response]); - } - resultList.push([operation.request, operation.response]); - } - return resultList; - } catch (e) { - __privateGet(this, _relevantRequestResponseList).length = 0; - __privateSet(this, _relevantRequestResponseList, backupCache); - throw e; - } - }; - _queryCache = new WeakSet(); - queryCache_fn = function(requestQuery, options, targetStorage) { - const resultList = []; - const storage = targetStorage != null ? targetStorage : __privateGet(this, _relevantRequestResponseList); - for (const requestResponse of storage) { - const [cachedRequest, cachedResponse] = requestResponse; - if (__privateMethod(this, _requestMatchesCachedItem, requestMatchesCachedItem_fn).call(this, requestQuery, cachedRequest, cachedResponse, options)) { - resultList.push(requestResponse); - } - } - return resultList; - }; - _requestMatchesCachedItem = new WeakSet(); - requestMatchesCachedItem_fn = function(requestQuery, request, response = null, options) { - const queryURL = new URL(requestQuery.url); - const cachedURL = new URL(request.url); - if (options == null ? void 0 : options.ignoreSearch) { - cachedURL.search = ""; - queryURL.search = ""; - } - if (!urlEquals(queryURL, cachedURL, true)) { - return false; - } - if (response == null || (options == null ? void 0 : 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 (requestValue !== queryValue) { - return false; - } - } - return true; - }; - _internalMatchAll = new WeakSet(); - internalMatchAll_fn = function(request, options, maxResponses = Infinity) { - let r = null; - if (request !== void 0) { - if (request instanceof Request) { - r = request[kState]; - if (r.method !== "GET" && !options.ignoreMethod) { - return []; - } - } else if (typeof request === "string") { - r = new Request(request)[kState]; - } - } - const responses = []; - if (request === void 0) { - for (const requestResponse of __privateGet(this, _relevantRequestResponseList)) { - responses.push(requestResponse[1]); - } - } else { - const requestResponses = __privateMethod(this, _queryCache, queryCache_fn).call(this, r, options); - for (const requestResponse of requestResponses) { - responses.push(requestResponse[1]); - } - } - const responseList = []; - for (const response of responses) { - const responseObject = fromInnerResponse(response, "immutable"); - responseList.push(responseObject.clone()); - if (responseList.length >= maxResponses) { - break; - } - } - return Object.freeze(responseList); - }; - var Cache = _Cache; - Object.defineProperties(Cache.prototype, { - [Symbol.toStringTag]: { - value: "Cache", - configurable: true - }, - match: kEnumerableProperty, - matchAll: kEnumerableProperty, - add: kEnumerableProperty, - addAll: kEnumerableProperty, - put: kEnumerableProperty, - delete: kEnumerableProperty, - keys: kEnumerableProperty - }); - var 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 - }; - } - }); - - // - var require_cachestorage = __commonJS({ - ""(exports, module) { - "use strict"; - var { kConstruct } = require_symbols4(); - var { Cache } = require_cache(); - var { webidl } = require_webidl(); - var { kEnumerableProperty } = require_util(); - var _caches; - var _CacheStorage = class _CacheStorage { - constructor() { - /** - * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-name-to-cache-map - * @type {Map} - */ - has(_0) { - return __async(this, arguments, function* (cacheName) { - webidl.brandCheck(this, _CacheStorage); - const prefix = "CacheStorage.has"; - webidl.argumentLengthCheck(arguments, 1, prefix); - cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName"); - return __privateGet(this, _caches).has(cacheName); - }); - } - /** - * @see https://w3c.github.io/ServiceWorker/#dom-cachestorage-open - * @param {string} cacheName - * @returns {Promise} - */ - open(_0) { - return __async(this, arguments, function* (cacheName) { - webidl.brandCheck(this, _CacheStorage); - const prefix = "CacheStorage.open"; - webidl.argumentLengthCheck(arguments, 1, prefix); - cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName"); - if (__privateGet(this, _caches).has(cacheName)) { - const cache2 = __privateGet(this, _caches).get(cacheName); - return new Cache(kConstruct, cache2); - } - const cache = []; - __privateGet(this, _caches).set(cacheName, cache); - return new Cache(kConstruct, cache); - }); - } - /** - * @see https://w3c.github.io/ServiceWorker/#cache-storage-delete - * @param {string} cacheName - * @returns {Promise} - */ - delete(_0) { - return __async(this, arguments, function* (cacheName) { - webidl.brandCheck(this, _CacheStorage); - const prefix = "CacheStorage.delete"; - webidl.argumentLengthCheck(arguments, 1, prefix); - cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName"); - return __privateGet(this, _caches).delete(cacheName); - }); - } - /** - * @see https://w3c.github.io/ServiceWorker/#cache-storage-keys - * @returns {Promise} - */ - keys() { - return __async(this, null, function* () { - webidl.brandCheck(this, _CacheStorage); - const keys = __privateGet(this, _caches).keys(); - return [...keys]; - }); - } - }; - _caches = new WeakMap(); - var CacheStorage = _CacheStorage; - Object.defineProperties(CacheStorage.prototype, { - [Symbol.toStringTag]: { - value: "CacheStorage", - configurable: true - }, - match: kEnumerableProperty, - has: kEnumerableProperty, - open: kEnumerableProperty, - delete: kEnumerableProperty, - keys: kEnumerableProperty - }); - module.exports = { - CacheStorage - }; - } - }); - - // - var require_constants4 = __commonJS({ - ""(exports, module) { - "use strict"; - var maxAttributeValueSize = 1024; - var maxNameValuePairSize = 4096; - module.exports = { - maxAttributeValueSize, - maxNameValuePairSize - }; - } - }); - - // - var require_util6 = __commonJS({ - ""(exports, module) { - "use strict"; - function isCTLExcludingHtab(value) { - for (let i = 0; i < value.length; ++i) { - const code = value.charCodeAt(i); - if (code >= 0 && code <= 8 || code >= 10 && code <= 31 || code === 127) { - return true; - } - } - return false; - } - function validateCookieName(name) { - for (let i = 0; i < name.length; ++i) { - const code = name.charCodeAt(i); - if (code < 33 || // exclude CTLs (0-31), SP and HT - code > 126 || // exclude non-ascii and DEL - code === 34 || // " - code === 40 || // ( - code === 41 || // ) - code === 60 || // < - code === 62 || // > - code === 64 || // @ - code === 44 || // , - code === 59 || // ; - code === 58 || // : - code === 92 || // \ - code === 47 || // / - code === 91 || // [ - code === 93 || // ] - code === 63 || // ? - code === 61 || // = - code === 123 || // { - code === 125) { - throw new Error("Invalid cookie name"); - } - } - } - function validateCookieValue(value) { - let len = value.length; - let i = 0; - if (value[0] === '"') { - if (len === 1 || value[len - 1] !== '"') { - throw new Error("Invalid cookie value"); - } - --len; - ++i; - } - while (i < len) { - const code = value.charCodeAt(i++); - if (code < 33 || // exclude CTLs (0-31) - code > 126 || // non-ascii and DEL (127) - code === 34 || // " - code === 44 || // , - code === 59 || // ; - code === 92) { - throw new Error("Invalid cookie value"); - } - } - } - function validateCookiePath(path4) { - for (let i = 0; i < path4.length; ++i) { - const code = path4.charCodeAt(i); - if (code < 32 || // exclude CTLs (0-31) - code > 126 || // exclude DEL and non-ascii - code === 59) { - throw new Error("Invalid cookie path"); - } - } - } - function isLetterOrDigit(code) { - return code >= 48 && code <= 57 || // 0-9 - code >= 65 && code <= 90 || // A-Z - code >= 97 && code <= 122; - } - function validateCookieDomain(domain) { - if (domain === " ") { - return; - } - if (domain.length > 255) { - throw new Error("Invalid cookie domain"); - } - let labelLength = 0; - for (let i = 0; i < domain.length; ++i) { - const code = domain.charCodeAt(i); - if (code === 46) { - if (labelLength === 0) { - throw new Error("Invalid cookie domain"); - } - if (domain.charCodeAt(i - 1) === 45) { - throw new Error("Invalid cookie domain"); - } - labelLength = 0; - continue; - } - if (labelLength === 0 && !isLetterOrDigit(code)) { - throw new Error("Invalid cookie domain"); - } - if (!isLetterOrDigit(code) && code !== 45) { - throw new Error("Invalid cookie domain"); - } - if (++labelLength > 63) { - throw new Error("Invalid cookie domain"); - } - } - if (labelLength === 0 || domain.charCodeAt(domain.length - 1) === 45) { - throw new Error("Invalid cookie domain"); - } - } - var IMFDays = [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ]; - var IMFMonths = [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - ]; - var IMFPaddedNumbers = Array(61).fill(0).map((_, i) => i.toString().padStart(2, "0")); - function toIMFDate(date) { - if (typeof date === "number") { - date = new Date(date); - } - return `${IMFDays[date.getUTCDay()]}, ${IMFPaddedNumbers[date.getUTCDate()]} ${IMFMonths[date.getUTCMonth()]} ${date.getUTCFullYear()} ${IMFPaddedNumbers[date.getUTCHours()]}:${IMFPaddedNumbers[date.getUTCMinutes()]}:${IMFPaddedNumbers[date.getUTCSeconds()]} GMT`; - } - function validateCookieMaxAge(maxAge) { - if (maxAge < 0) { - throw new Error("Invalid cookie max-age"); - } - } - function stringify(cookie) { - if (cookie.name.length === 0) { - return null; - } - validateCookieName(cookie.name); - validateCookieValue(cookie.value); - const out = [`${cookie.name}=${cookie.value}`]; - 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("="); - const trimmedKey = key.trim(); - const joinedValue = value.join("="); - validateCookieName(trimmedKey); - validateCookieValue(joinedValue); - out.push(`${trimmedKey}=${joinedValue}`); - } - return out.join("; "); - } - module.exports = { - isCTLExcludingHtab, - validateCookieName, - validateCookiePath, - validateCookieValue, - toIMFDate, - stringify - }; - } - }); - - // - var require_parse = __commonJS({ - ""(exports, module) { - "use strict"; - var { maxNameValuePairSize, maxAttributeValueSize } = require_constants4(); - var { isCTLExcludingHtab } = require_util6(); - var { collectASequenceOfCodePointsFast } = require_data_url(); - var assert = __require("assert"); - function parseSetCookie(header) { - if (isCTLExcludingHtab(header)) { - return null; - } - let nameValuePair = ""; - let unparsedAttributes = ""; - let name = ""; - let value = ""; - if (header.includes(";")) { - const position = { position: 0 }; - nameValuePair = collectASequenceOfCodePointsFast(";", header, position); - unparsedAttributes = header.slice(position.position); - } else { - nameValuePair = header; - } - if (!nameValuePair.includes("=")) { - value = nameValuePair; - } else { - const position = { position: 0 }; - name = collectASequenceOfCodePointsFast( - "=", - nameValuePair, - position - ); - value = nameValuePair.slice(position.position + 1); - } - name = name.trim(); - value = value.trim(); - if (name.length + value.length > maxNameValuePairSize) { - return null; - } - return __spreadValues({ - name, - value - }, parseUnparsedAttributes(unparsedAttributes)); - } - function parseUnparsedAttributes(unparsedAttributes, cookieAttributeList = {}) { - var _a; - if (unparsedAttributes.length === 0) { - return cookieAttributeList; - } - assert(unparsedAttributes[0] === ";"); - unparsedAttributes = unparsedAttributes.slice(1); - let cookieAv = ""; - if (unparsedAttributes.includes(";")) { - cookieAv = collectASequenceOfCodePointsFast( - ";", - unparsedAttributes, - { position: 0 } - ); - unparsedAttributes = unparsedAttributes.slice(cookieAv.length); - } else { - cookieAv = unparsedAttributes; - unparsedAttributes = ""; - } - let attributeName = ""; - let attributeValue = ""; - if (cookieAv.includes("=")) { - const position = { position: 0 }; - attributeName = collectASequenceOfCodePointsFast( - "=", - cookieAv, - position - ); - attributeValue = cookieAv.slice(position.position + 1); - } else { - attributeName = cookieAv; - } - attributeName = attributeName.trim(); - attributeValue = attributeValue.trim(); - if (attributeValue.length > maxAttributeValueSize) { - return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); - } - const attributeNameLowercase = attributeName.toLowerCase(); - if (attributeNameLowercase === "expires") { - const expiryTime = new Date(attributeValue); - cookieAttributeList.expires = expiryTime; - } else if (attributeNameLowercase === "max-age") { - const charCode = attributeValue.charCodeAt(0); - if ((charCode < 48 || charCode > 57) && attributeValue[0] !== "-") { - return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); - } - if (!/^\d+$/.test(attributeValue)) { - return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); - } - const deltaSeconds = Number(attributeValue); - cookieAttributeList.maxAge = deltaSeconds; - } else if (attributeNameLowercase === "domain") { - let cookieDomain = attributeValue; - if (cookieDomain[0] === ".") { - cookieDomain = cookieDomain.slice(1); - } - cookieDomain = cookieDomain.toLowerCase(); - cookieAttributeList.domain = cookieDomain; - } else if (attributeNameLowercase === "path") { - let cookiePath = ""; - if (attributeValue.length === 0 || attributeValue[0] !== "/") { - cookiePath = "/"; - } else { - cookiePath = attributeValue; - } - cookieAttributeList.path = cookiePath; - } else if (attributeNameLowercase === "secure") { - cookieAttributeList.secure = true; - } else if (attributeNameLowercase === "httponly") { - cookieAttributeList.httpOnly = true; - } else if (attributeNameLowercase === "samesite") { - const attributeValueLowercase = attributeValue.toLowerCase(); - if (attributeValueLowercase === "none") { - cookieAttributeList.sameSite = "None"; - } else if (attributeValueLowercase === "strict") { - cookieAttributeList.sameSite = "Strict"; - } else if (attributeValueLowercase === "lax") { - cookieAttributeList.sameSite = "Lax"; - } - } else { - (_a = cookieAttributeList.unparsed) != null ? _a : cookieAttributeList.unparsed = []; - cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`); - } - return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); - } - module.exports = { - parseSetCookie, - parseUnparsedAttributes - }; - } - }); - - // - var require_cookies = __commonJS({ - ""(exports, module) { - "use strict"; - var { parseSetCookie } = require_parse(); - var { stringify } = require_util6(); - var { webidl } = require_webidl(); - var { Headers: Headers2 } = require_headers(); - function getCookies(headers) { - webidl.argumentLengthCheck(arguments, 1, "getCookies"); - webidl.brandCheck(headers, Headers2, { 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; - } - function deleteCookie(headers, name, attributes) { - webidl.brandCheck(headers, Headers2, { strict: false }); - const prefix = "deleteCookie"; - webidl.argumentLengthCheck(arguments, 2, prefix); - name = webidl.converters.DOMString(name, prefix, "name"); - attributes = webidl.converters.DeleteCookieAttributes(attributes); - setCookie(headers, __spreadValues({ - name, - value: "", - expires: /* @__PURE__ */ new Date(0) - }, attributes)); - } - function getSetCookies(headers) { - webidl.argumentLengthCheck(arguments, 1, "getSetCookies"); - webidl.brandCheck(headers, Headers2, { strict: false }); - const cookies = headers.getSetCookie(); - if (!cookies) { - return []; - } - return cookies.map((pair) => parseSetCookie(pair)); - } - function setCookie(headers, cookie) { - webidl.argumentLengthCheck(arguments, 2, "setCookie"); - webidl.brandCheck(headers, Headers2, { strict: false }); - cookie = webidl.converters.Cookie(cookie); - const str = stringify(cookie); - if (str) { - headers.append("Set-Cookie", str); - } - } - 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: () => new Array(0) - } - ]); - module.exports = { - getCookies, - deleteCookie, - getSetCookies, - setCookie - }; - } - }); - - // - var require_events = __commonJS({ - ""(exports, module) { - "use strict"; - var { webidl } = require_webidl(); - var { kEnumerableProperty } = require_util(); - var { kConstruct } = require_symbols(); - var { MessagePort } = __require("worker_threads"); - var _eventInit; - var _MessageEvent = class _MessageEvent extends Event { - constructor(type, eventInitDict = {}) { - var __super = (...args) => { - super(...args); - __privateAdd(this, _eventInit, void 0); - }; - if (type === kConstruct) { - __super(arguments[1], arguments[2]); - webidl.util.markAsUncloneable(this); - return; - } - const prefix = "MessageEvent constructor"; - webidl.argumentLengthCheck(arguments, 1, prefix); - type = webidl.converters.DOMString(type, prefix, "type"); - eventInitDict = webidl.converters.MessageEventInit(eventInitDict, prefix, "eventInitDict"); - __super(type, eventInitDict); - __privateSet(this, _eventInit, eventInitDict); - webidl.util.markAsUncloneable(this); - } - get data() { - webidl.brandCheck(this, _MessageEvent); - return __privateGet(this, _eventInit).data; - } - get origin() { - webidl.brandCheck(this, _MessageEvent); - return __privateGet(this, _eventInit).origin; - } - get lastEventId() { - webidl.brandCheck(this, _MessageEvent); - return __privateGet(this, _eventInit).lastEventId; - } - get source() { - webidl.brandCheck(this, _MessageEvent); - return __privateGet(this, _eventInit).source; - } - get ports() { - webidl.brandCheck(this, _MessageEvent); - if (!Object.isFrozen(__privateGet(this, _eventInit).ports)) { - Object.freeze(__privateGet(this, _eventInit).ports); - } - return __privateGet(this, _eventInit).ports; - } - initMessageEvent(type, bubbles = false, cancelable = false, data = null, origin = "", lastEventId = "", source = null, ports = []) { - webidl.brandCheck(this, _MessageEvent); - webidl.argumentLengthCheck(arguments, 1, "MessageEvent.initMessageEvent"); - return new _MessageEvent(type, { - bubbles, - cancelable, - data, - origin, - lastEventId, - source, - ports - }); - } - static createFastMessageEvent(type, init) { - var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j; - const messageEvent = new _MessageEvent(kConstruct, type, init); - __privateSet(messageEvent, _eventInit, init); - (_b = (_a = __privateGet(messageEvent, _eventInit)).data) != null ? _b : _a.data = null; - (_d = (_c = __privateGet(messageEvent, _eventInit)).origin) != null ? _d : _c.origin = ""; - (_f = (_e = __privateGet(messageEvent, _eventInit)).lastEventId) != null ? _f : _e.lastEventId = ""; - (_h = (_g = __privateGet(messageEvent, _eventInit)).source) != null ? _h : _g.source = null; - (_j = (_i = __privateGet(messageEvent, _eventInit)).ports) != null ? _j : _i.ports = []; - return messageEvent; - } - }; - _eventInit = new WeakMap(); - var MessageEvent = _MessageEvent; - var { createFastMessageEvent } = MessageEvent; - delete MessageEvent.createFastMessageEvent; - var _eventInit2; - var _CloseEvent = class _CloseEvent extends Event { - constructor(type, eventInitDict = {}) { - const prefix = "CloseEvent constructor"; - webidl.argumentLengthCheck(arguments, 1, prefix); - type = webidl.converters.DOMString(type, prefix, "type"); - eventInitDict = webidl.converters.CloseEventInit(eventInitDict); - super(type, eventInitDict); - __privateAdd(this, _eventInit2, void 0); - __privateSet(this, _eventInit2, eventInitDict); - webidl.util.markAsUncloneable(this); - } - get wasClean() { - webidl.brandCheck(this, _CloseEvent); - return __privateGet(this, _eventInit2).wasClean; - } - get code() { - webidl.brandCheck(this, _CloseEvent); - return __privateGet(this, _eventInit2).code; - } - get reason() { - webidl.brandCheck(this, _CloseEvent); - return __privateGet(this, _eventInit2).reason; - } - }; - _eventInit2 = new WeakMap(); - var CloseEvent = _CloseEvent; - var _eventInit3; - var _ErrorEvent = class _ErrorEvent extends Event { - constructor(type, eventInitDict) { - const prefix = "ErrorEvent constructor"; - webidl.argumentLengthCheck(arguments, 1, prefix); - super(type, eventInitDict); - __privateAdd(this, _eventInit3, void 0); - webidl.util.markAsUncloneable(this); - type = webidl.converters.DOMString(type, prefix, "type"); - eventInitDict = webidl.converters.ErrorEventInit(eventInitDict != null ? eventInitDict : {}); - __privateSet(this, _eventInit3, eventInitDict); - } - get message() { - webidl.brandCheck(this, _ErrorEvent); - return __privateGet(this, _eventInit3).message; - } - get filename() { - webidl.brandCheck(this, _ErrorEvent); - return __privateGet(this, _eventInit3).filename; - } - get lineno() { - webidl.brandCheck(this, _ErrorEvent); - return __privateGet(this, _eventInit3).lineno; - } - get colno() { - webidl.brandCheck(this, _ErrorEvent); - return __privateGet(this, _eventInit3).colno; - } - get error() { - webidl.brandCheck(this, _ErrorEvent); - return __privateGet(this, _eventInit3).error; - } - }; - _eventInit3 = new WeakMap(); - var ErrorEvent = _ErrorEvent; - 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 - ); - var 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"], - defaultValue: () => new Array(0) - } - ]); - 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, - createFastMessageEvent - }; - } - }); - - // - var require_constants5 = __commonJS({ - ""(exports, module) { - "use strict"; - var uid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; - var staticPropertyDescriptors = { - enumerable: true, - writable: false, - configurable: false - }; - var states = { - CONNECTING: 0, - OPEN: 1, - CLOSING: 2, - CLOSED: 3 - }; - var sentCloseFrameState = { - NOT_SENT: 0, - PROCESSING: 1, - SENT: 2 - }; - var opcodes = { - CONTINUATION: 0, - TEXT: 1, - BINARY: 2, - CLOSE: 8, - PING: 9, - PONG: 10 - }; - var maxUnsigned16Bit = __pow(2, 16) - 1; - var parserStates = { - INFO: 0, - PAYLOADLENGTH_16: 2, - PAYLOADLENGTH_64: 3, - READ_DATA: 4 - }; - var emptyBuffer = Buffer.allocUnsafe(0); - var sendHints = { - string: 1, - typedArray: 2, - arrayBuffer: 3, - blob: 4 - }; - module.exports = { - uid, - sentCloseFrameState, - staticPropertyDescriptors, - states, - opcodes, - maxUnsigned16Bit, - parserStates, - emptyBuffer, - sendHints - }; - } - }); - - // - var require_symbols5 = __commonJS({ - ""(exports, 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") - }; - } - }); - - // - var require_util7 = __commonJS({ - ""(exports, module) { - "use strict"; - var { kReadyState, kController, kResponse, kBinaryType, kWebSocketURL } = require_symbols5(); - var { states, opcodes } = require_constants5(); - var { ErrorEvent, createFastMessageEvent } = require_events(); - var { isUtf8 } = __require("buffer"); - var { collectASequenceOfCodePointsFast, removeHTTPWhitespace } = require_data_url(); - function isConnecting(ws) { - return ws[kReadyState] === states.CONNECTING; - } - function isEstablished(ws) { - return ws[kReadyState] === states.OPEN; - } - function isClosing(ws) { - return ws[kReadyState] === states.CLOSING; - } - function isClosed(ws) { - return ws[kReadyState] === states.CLOSED; - } - function fireEvent(e, target, eventFactory = (type, init) => new Event(type, init), eventInitDict = {}) { - const event = eventFactory(e, eventInitDict); - target.dispatchEvent(event); - } - function websocketMessageReceived(ws, type, data) { - if (ws[kReadyState] !== states.OPEN) { - return; - } - let dataForEvent; - if (type === opcodes.TEXT) { - try { - dataForEvent = utf8Decode(data); - } catch (e) { - failWebsocketConnection(ws, "Received invalid UTF-8 in text frame."); - return; - } - } else if (type === opcodes.BINARY) { - if (ws[kBinaryType] === "blob") { - dataForEvent = new Blob([data]); - } else { - dataForEvent = toArrayBuffer(data); - } - } - fireEvent("message", ws, createFastMessageEvent, { - origin: ws[kWebSocketURL].origin, - data: dataForEvent - }); - } - function toArrayBuffer(buffer) { - if (buffer.byteLength === buffer.buffer.byteLength) { - return buffer.buffer; - } - return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength); - } - function isValidSubprotocol(protocol) { - if (protocol.length === 0) { - return false; - } - for (let i = 0; i < protocol.length; ++i) { - const code = protocol.charCodeAt(i); - if (code < 33 || // CTL, contains SP (0x20) and HT (0x09) - code > 126 || code === 34 || // " - code === 40 || // ( - code === 41 || // ) - code === 44 || // , - code === 47 || // / - code === 58 || // : - code === 59 || // ; - code === 60 || // < - code === 61 || // = - code === 62 || // > - code === 63 || // ? - code === 64 || // @ - code === 91 || // [ - code === 92 || // \ - code === 93 || // ] - code === 123 || // { - code === 125) { - return false; - } - } - return true; - } - function isValidStatusCode(code) { - if (code >= 1e3 && code < 1015) { - return code !== 1004 && // reserved - code !== 1005 && // "MUST NOT be set as a status code" - code !== 1006; - } - return code >= 3e3 && code <= 4999; - } - function failWebsocketConnection(ws, reason) { - const { [kController]: controller, [kResponse]: response } = ws; - controller.abort(); - if ((response == null ? void 0 : response.socket) && !response.socket.destroyed) { - response.socket.destroy(); - } - if (reason) { - fireEvent("error", ws, (type, init) => new ErrorEvent(type, init), { - error: new Error(reason), - message: reason - }); - } - } - function isControlFrame(opcode) { - return opcode === opcodes.CLOSE || opcode === opcodes.PING || opcode === opcodes.PONG; - } - function isContinuationFrame(opcode) { - return opcode === opcodes.CONTINUATION; - } - function isTextBinaryFrame(opcode) { - return opcode === opcodes.TEXT || opcode === opcodes.BINARY; - } - function isValidOpcode(opcode) { - return isTextBinaryFrame(opcode) || isContinuationFrame(opcode) || isControlFrame(opcode); - } - function parseExtensions(extensions) { - const position = { position: 0 }; - const extensionList = /* @__PURE__ */ new Map(); - while (position.position < extensions.length) { - const pair = collectASequenceOfCodePointsFast(";", extensions, position); - const [name, value = ""] = pair.split("="); - extensionList.set( - removeHTTPWhitespace(name, true, false), - removeHTTPWhitespace(value, false, true) - ); - position.position++; - } - return extensionList; - } - function isValidClientWindowBits(value) { - if (value.length === 0) { - return false; - } - for (let i = 0; i < value.length; i++) { - const byte = value.charCodeAt(i); - if (byte < 48 || byte > 57) { - return false; - } - } - const num = Number.parseInt(value, 10); - return num >= 8 && num <= 15; - } - var hasIntl = typeof process.versions.icu === "string"; - var fatalDecoder = hasIntl ? new TextDecoder("utf-8", { fatal: true }) : void 0; - var utf8Decode = hasIntl ? fatalDecoder.decode.bind(fatalDecoder) : function(buffer) { - if (isUtf8(buffer)) { - return buffer.toString("utf-8"); - } - throw new TypeError("Invalid utf-8 received."); - }; - module.exports = { - isConnecting, - isEstablished, - isClosing, - isClosed, - fireEvent, - isValidSubprotocol, - isValidStatusCode, - failWebsocketConnection, - websocketMessageReceived, - utf8Decode, - isControlFrame, - isContinuationFrame, - isTextBinaryFrame, - isValidOpcode, - parseExtensions, - isValidClientWindowBits - }; - } - }); - - // - var require_frame = __commonJS({ - ""(exports, module) { - "use strict"; - var { maxUnsigned16Bit } = require_constants5(); - var BUFFER_SIZE = 16386; - var crypto2; - var buffer = null; - var bufIdx = BUFFER_SIZE; - try { - crypto2 = __require("crypto"); - } catch (e) { - crypto2 = { - // not full compatibility, but minimum. - randomFillSync: function randomFillSync(buffer2, _offset, _size) { - for (let i = 0; i < buffer2.length; ++i) { - buffer2[i] = Math.random() * 255 | 0; - } - return buffer2; - } - }; - } - function generateMask() { - if (bufIdx === BUFFER_SIZE) { - bufIdx = 0; - crypto2.randomFillSync(buffer != null ? buffer : buffer = Buffer.allocUnsafe(BUFFER_SIZE), 0, BUFFER_SIZE); - } - return [buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++]]; - } - var WebsocketFrameSend = class { - /** - * @param {Buffer|undefined} data - */ - constructor(data) { - this.frameData = data; - } - createFrame(opcode) { - var _a; - const frameData = this.frameData; - const maskKey = generateMask(); - const bodyLength = (_a = frameData == null ? void 0 : frameData.byteLength) != null ? _a : 0; - let payloadLength = bodyLength; - let offset = 6; - if (bodyLength > maxUnsigned16Bit) { - offset += 8; - payloadLength = 127; - } else if (bodyLength > 125) { - offset += 2; - payloadLength = 126; - } - const buffer2 = Buffer.allocUnsafe(bodyLength + offset); - buffer2[0] = buffer2[1] = 0; - buffer2[0] |= 128; - buffer2[0] = (buffer2[0] & 240) + opcode; - buffer2[offset - 4] = maskKey[0]; - buffer2[offset - 3] = maskKey[1]; - buffer2[offset - 2] = maskKey[2]; - buffer2[offset - 1] = maskKey[3]; - buffer2[1] = payloadLength; - if (payloadLength === 126) { - buffer2.writeUInt16BE(bodyLength, 2); - } else if (payloadLength === 127) { - buffer2[2] = buffer2[3] = 0; - buffer2.writeUIntBE(bodyLength, 4, 6); - } - buffer2[1] |= 128; - for (let i = 0; i < bodyLength; ++i) { - buffer2[offset + i] = frameData[i] ^ maskKey[i & 3]; - } - return buffer2; - } - }; - module.exports = { - WebsocketFrameSend - }; - } - }); - - // - var require_connection = __commonJS({ - ""(exports, module) { - "use strict"; - var { uid, states, sentCloseFrameState, emptyBuffer, opcodes } = require_constants5(); - var { - kReadyState, - kSentClose, - kByteParser, - kReceivedClose, - kResponse - } = require_symbols5(); - var { fireEvent, failWebsocketConnection, isClosing, isClosed, isEstablished, parseExtensions } = require_util7(); - var { channels } = require_diagnostics(); - var { CloseEvent } = require_events(); - var { makeRequest } = require_request2(); - var { fetching } = require_fetch(); - var { Headers: Headers2, getHeadersList } = require_headers(); - var { getDecodeSplit } = require_util2(); - var { WebsocketFrameSend } = require_frame(); - var crypto2; - try { - crypto2 = __require("crypto"); - } catch (e) { - } - function establishWebSocketConnection(url, protocols, client, ws, onEstablish, options) { - const requestURL = url; - requestURL.protocol = url.protocol === "ws:" ? "http:" : "https:"; - const request = makeRequest({ - urlList: [requestURL], - client, - serviceWorkers: "none", - referrer: "no-referrer", - mode: "websocket", - credentials: "include", - cache: "no-store", - redirect: "error" - }); - if (options.headers) { - const headersList = getHeadersList(new Headers2(options.headers)); - request.headersList = headersList; - } - const keyValue = crypto2.randomBytes(16).toString("base64"); - request.headersList.append("sec-websocket-key", keyValue); - request.headersList.append("sec-websocket-version", "13"); - for (const protocol of protocols) { - request.headersList.append("sec-websocket-protocol", protocol); - } - const permessageDeflate = "permessage-deflate; client_max_window_bits"; - request.headersList.append("sec-websocket-extensions", permessageDeflate); - const controller = fetching({ - request, - useParallelQueue: true, - dispatcher: options.dispatcher, - processResponse(response) { - var _a, _b; - if (response.type === "error" || response.status !== 101) { - failWebsocketConnection(ws, "Received network error or non-101 status code."); - return; - } - if (protocols.length !== 0 && !response.headersList.get("Sec-WebSocket-Protocol")) { - failWebsocketConnection(ws, "Server did not respond with sent protocols."); - return; - } - if (((_a = response.headersList.get("Upgrade")) == null ? void 0 : _a.toLowerCase()) !== "websocket") { - failWebsocketConnection(ws, 'Server did not set Upgrade header to "websocket".'); - return; - } - if (((_b = response.headersList.get("Connection")) == null ? void 0 : _b.toLowerCase()) !== "upgrade") { - failWebsocketConnection(ws, 'Server did not set Connection header to "upgrade".'); - return; - } - const secWSAccept = response.headersList.get("Sec-WebSocket-Accept"); - const digest = crypto2.createHash("sha1").update(keyValue + uid).digest("base64"); - if (secWSAccept !== digest) { - failWebsocketConnection(ws, "Incorrect hash received in Sec-WebSocket-Accept header."); - return; - } - const secExtension = response.headersList.get("Sec-WebSocket-Extensions"); - let extensions; - if (secExtension !== null) { - extensions = parseExtensions(secExtension); - if (!extensions.has("permessage-deflate")) { - failWebsocketConnection(ws, "Sec-WebSocket-Extensions header does not match."); - return; - } - } - const secProtocol = response.headersList.get("Sec-WebSocket-Protocol"); - if (secProtocol !== null) { - const requestProtocols = getDecodeSplit("sec-websocket-protocol", request.headersList); - if (!requestProtocols.includes(secProtocol)) { - 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, extensions); - } - }); - return controller; - } - function closeWebSocketConnection(ws, code, reason, reasonByteLength) { - if (isClosing(ws) || isClosed(ws)) { - } else if (!isEstablished(ws)) { - failWebsocketConnection(ws, "Connection was closed before it was established."); - ws[kReadyState] = states.CLOSING; - } else if (ws[kSentClose] === sentCloseFrameState.NOT_SENT) { - ws[kSentClose] = sentCloseFrameState.PROCESSING; - const frame = new WebsocketFrameSend(); - if (code !== void 0 && reason === void 0) { - frame.frameData = Buffer.allocUnsafe(2); - frame.frameData.writeUInt16BE(code, 0); - } else if (code !== void 0 && reason !== void 0) { - frame.frameData = Buffer.allocUnsafe(2 + reasonByteLength); - frame.frameData.writeUInt16BE(code, 0); - frame.frameData.write(reason, 2, "utf-8"); - } else { - frame.frameData = emptyBuffer; - } - const socket = ws[kResponse].socket; - socket.write(frame.createFrame(opcodes.CLOSE)); - ws[kSentClose] = sentCloseFrameState.SENT; - ws[kReadyState] = states.CLOSING; - } else { - ws[kReadyState] = states.CLOSING; - } - } - function onSocketData(chunk) { - if (!this.ws[kByteParser].write(chunk)) { - this.pause(); - } - } - function onSocketClose() { - var _a; - const { ws } = this; - const { [kResponse]: response } = ws; - response.socket.off("data", onSocketData); - response.socket.off("close", onSocketClose); - response.socket.off("error", onSocketError); - const wasClean = ws[kSentClose] === sentCloseFrameState.SENT && ws[kReceivedClose]; - let code = 1005; - let reason = ""; - const result = ws[kByteParser].closingInfo; - if (result && !result.error) { - code = (_a = result.code) != null ? _a : 1005; - reason = result.reason; - } else if (!ws[kReceivedClose]) { - code = 1006; - } - ws[kReadyState] = states.CLOSED; - fireEvent("close", ws, (type, init) => new CloseEvent(type, init), { - 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, - closeWebSocketConnection - }; - } - }); - - // - var require_permessage_deflate = __commonJS({ - ""(exports, module) { - "use strict"; - var { createInflateRaw, Z_DEFAULT_WINDOWBITS } = __require("zlib"); - var { isValidClientWindowBits } = require_util7(); - var { MessageSizeExceededError } = require_errors(); - var tail = Buffer.from([0, 0, 255, 255]); - var kBuffer = Symbol("kBuffer"); - var kLength = Symbol("kLength"); - var _inflate, _options, _maxPayloadSize; - var PerMessageDeflate = class { - /** - * @param {Map} extensions - */ - constructor(extensions, options) { - /** @type {import('node:zlib').InflateRaw} */ - __privateAdd(this, _inflate, void 0); - __privateAdd(this, _options, {}); - __privateAdd(this, _maxPayloadSize, 0); - __privateGet(this, _options).serverNoContextTakeover = extensions.has("server_no_context_takeover"); - __privateGet(this, _options).serverMaxWindowBits = extensions.get("server_max_window_bits"); - __privateSet(this, _maxPayloadSize, options.maxPayloadSize); - } - /** - * Decompress a compressed payload. - * @param {Buffer} chunk Compressed data - * @param {boolean} fin Final fragment flag - * @param {Function} callback Callback function - */ - decompress(chunk, fin, callback) { - if (!__privateGet(this, _inflate)) { - let windowBits = Z_DEFAULT_WINDOWBITS; - if (__privateGet(this, _options).serverMaxWindowBits) { - if (!isValidClientWindowBits(__privateGet(this, _options).serverMaxWindowBits)) { - callback(new Error("Invalid server_max_window_bits")); - return; - } - windowBits = Number.parseInt(__privateGet(this, _options).serverMaxWindowBits); - } - try { - __privateSet(this, _inflate, createInflateRaw({ windowBits })); - } catch (err) { - callback(err); - return; - } - __privateGet(this, _inflate)[kBuffer] = []; - __privateGet(this, _inflate)[kLength] = 0; - __privateGet(this, _inflate).on("data", (data) => { - __privateGet(this, _inflate)[kLength] += data.length; - if (__privateGet(this, _maxPayloadSize) > 0 && __privateGet(this, _inflate)[kLength] > __privateGet(this, _maxPayloadSize)) { - callback(new MessageSizeExceededError()); - __privateGet(this, _inflate).removeAllListeners(); - __privateSet(this, _inflate, null); - return; - } - __privateGet(this, _inflate)[kBuffer].push(data); - }); - __privateGet(this, _inflate).on("error", (err) => { - __privateSet(this, _inflate, null); - callback(err); - }); - } - __privateGet(this, _inflate).write(chunk); - if (fin) { - __privateGet(this, _inflate).write(tail); - } - __privateGet(this, _inflate).flush(() => { - if (!__privateGet(this, _inflate)) { - return; - } - const full = Buffer.concat(__privateGet(this, _inflate)[kBuffer], __privateGet(this, _inflate)[kLength]); - __privateGet(this, _inflate)[kBuffer].length = 0; - __privateGet(this, _inflate)[kLength] = 0; - callback(null, full); - }); - } - }; - _inflate = new WeakMap(); - _options = new WeakMap(); - _maxPayloadSize = new WeakMap(); - module.exports = { PerMessageDeflate }; - } - }); - - // - var require_receiver = __commonJS({ - ""(exports, module) { - "use strict"; - var { Writable } = __require("stream"); - var assert = __require("assert"); - var { parserStates, opcodes, states, emptyBuffer, sentCloseFrameState } = require_constants5(); - var { kReadyState, kSentClose, kResponse, kReceivedClose } = require_symbols5(); - var { channels } = require_diagnostics(); - var { - isValidStatusCode, - isValidOpcode, - failWebsocketConnection, - websocketMessageReceived, - utf8Decode, - isControlFrame, - isTextBinaryFrame, - isContinuationFrame - } = require_util7(); - var { WebsocketFrameSend } = require_frame(); - var { closeWebSocketConnection } = require_connection(); - var { PerMessageDeflate } = require_permessage_deflate(); - var { MessageSizeExceededError } = require_errors(); - function failWebsocketConnectionWithCode(ws, code, reason) { - closeWebSocketConnection(ws, code, reason, Buffer.byteLength(reason)); - failWebsocketConnection(ws, reason); - } - var _buffers, _fragmentsBytes, _byteOffset, _loop, _state, _info, _fragments, _extensions, _maxFragments, _maxPayloadSize, _validatePayloadLength, validatePayloadLength_fn; - var ByteParser = class extends Writable { - /** - * @param {import('./websocket').WebSocket} ws - * @param {Map|null} extensions - * @param {{ maxFragments?: number, maxPayloadSize?: number }} [options] - */ - constructor(ws, extensions, options = {}) { - var _a, _b; - super(); - __privateAdd(this, _validatePayloadLength); - __privateAdd(this, _buffers, []); - __privateAdd(this, _fragmentsBytes, 0); - __privateAdd(this, _byteOffset, 0); - __privateAdd(this, _loop, false); - __privateAdd(this, _state, parserStates.INFO); - __privateAdd(this, _info, {}); - __privateAdd(this, _fragments, []); - /** @type {Map} */ - __privateAdd(this, _extensions, void 0); - /** @type {number} */ - __privateAdd(this, _maxFragments, void 0); - /** @type {number} */ - __privateAdd(this, _maxPayloadSize, void 0); - this.ws = ws; - __privateSet(this, _extensions, extensions == null ? /* @__PURE__ */ new Map() : extensions); - __privateSet(this, _maxFragments, (_a = options.maxFragments) != null ? _a : 0); - __privateSet(this, _maxPayloadSize, (_b = options.maxPayloadSize) != null ? _b : 0); - if (__privateGet(this, _extensions).has("permessage-deflate")) { - __privateGet(this, _extensions).set("permessage-deflate", new PerMessageDeflate(extensions, options)); - } - } - /** - * @param {Buffer} chunk - * @param {() => void} callback - */ - _write(chunk, _, callback) { - __privateGet(this, _buffers).push(chunk); - __privateSet(this, _byteOffset, __privateGet(this, _byteOffset) + chunk.length); - __privateSet(this, _loop, true); - 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 (__privateGet(this, _loop)) { - if (__privateGet(this, _state) === parserStates.INFO) { - if (__privateGet(this, _byteOffset) < 2) { - return callback(); - } - const buffer = this.consume(2); - const fin = (buffer[0] & 128) !== 0; - const opcode = buffer[0] & 15; - const masked = (buffer[1] & 128) === 128; - const fragmented = !fin && opcode !== opcodes.CONTINUATION; - const payloadLength = buffer[1] & 127; - const rsv1 = buffer[0] & 64; - const rsv2 = buffer[0] & 32; - const rsv3 = buffer[0] & 16; - if (!isValidOpcode(opcode)) { - failWebsocketConnection(this.ws, "Invalid opcode received"); - return callback(); - } - if (masked) { - failWebsocketConnection(this.ws, "Frame cannot be masked"); - return callback(); - } - if (rsv1 !== 0 && !__privateGet(this, _extensions).has("permessage-deflate")) { - failWebsocketConnection(this.ws, "Expected RSV1 to be clear."); - return; - } - if (rsv2 !== 0 || rsv3 !== 0) { - failWebsocketConnection(this.ws, "RSV1, RSV2, RSV3 must be clear"); - return; - } - if (fragmented && !isTextBinaryFrame(opcode)) { - failWebsocketConnection(this.ws, "Invalid frame type was fragmented."); - return; - } - if (isTextBinaryFrame(opcode) && __privateGet(this, _fragments).length > 0) { - failWebsocketConnection(this.ws, "Expected continuation frame"); - return; - } - if (__privateGet(this, _info).fragmented && fragmented) { - failWebsocketConnection(this.ws, "Fragmented frame exceeded 125 bytes."); - return; - } - if ((payloadLength > 125 || fragmented) && isControlFrame(opcode)) { - failWebsocketConnection(this.ws, "Control frame either too large or fragmented"); - return; - } - if (isContinuationFrame(opcode) && __privateGet(this, _fragments).length === 0 && !__privateGet(this, _info).compressed) { - failWebsocketConnection(this.ws, "Unexpected continuation frame"); - return; - } - if (payloadLength <= 125) { - __privateGet(this, _info).payloadLength = payloadLength; - __privateSet(this, _state, parserStates.READ_DATA); - if (!__privateMethod(this, _validatePayloadLength, validatePayloadLength_fn).call(this)) { - return; - } - } else if (payloadLength === 126) { - __privateSet(this, _state, parserStates.PAYLOADLENGTH_16); - } else if (payloadLength === 127) { - __privateSet(this, _state, parserStates.PAYLOADLENGTH_64); - } - if (isTextBinaryFrame(opcode)) { - __privateGet(this, _info).binaryType = opcode; - __privateGet(this, _info).compressed = rsv1 !== 0; - } - __privateGet(this, _info).opcode = opcode; - __privateGet(this, _info).masked = masked; - __privateGet(this, _info).fin = fin; - __privateGet(this, _info).fragmented = fragmented; - } else if (__privateGet(this, _state) === parserStates.PAYLOADLENGTH_16) { - if (__privateGet(this, _byteOffset) < 2) { - return callback(); - } - const buffer = this.consume(2); - __privateGet(this, _info).payloadLength = buffer.readUInt16BE(0); - __privateSet(this, _state, parserStates.READ_DATA); - if (!__privateMethod(this, _validatePayloadLength, validatePayloadLength_fn).call(this)) { - return; - } - } else if (__privateGet(this, _state) === parserStates.PAYLOADLENGTH_64) { - if (__privateGet(this, _byteOffset) < 8) { - return callback(); - } - const buffer = this.consume(8); - const upper = buffer.readUInt32BE(0); - const lower = buffer.readUInt32BE(4); - if (upper !== 0 || lower > __pow(2, 31) - 1) { - failWebsocketConnection(this.ws, "Received payload length > 2^31 bytes."); - return; - } - __privateGet(this, _info).payloadLength = lower; - __privateSet(this, _state, parserStates.READ_DATA); - if (!__privateMethod(this, _validatePayloadLength, validatePayloadLength_fn).call(this)) { - return; - } - } else if (__privateGet(this, _state) === parserStates.READ_DATA) { - if (__privateGet(this, _byteOffset) < __privateGet(this, _info).payloadLength) { - return callback(); - } - const body = this.consume(__privateGet(this, _info).payloadLength); - if (isControlFrame(__privateGet(this, _info).opcode)) { - __privateSet(this, _loop, this.parseControlFrame(body)); - __privateSet(this, _state, parserStates.INFO); - } else { - if (!__privateGet(this, _info).compressed) { - if (!this.writeFragments(body)) { - return; - } - if (__privateGet(this, _maxPayloadSize) > 0 && __privateGet(this, _fragmentsBytes) > __privateGet(this, _maxPayloadSize)) { - failWebsocketConnectionWithCode(this.ws, 1009, new MessageSizeExceededError().message); - return; - } - if (!__privateGet(this, _info).fragmented && __privateGet(this, _info).fin) { - websocketMessageReceived(this.ws, __privateGet(this, _info).binaryType, this.consumeFragments()); - } - __privateSet(this, _state, parserStates.INFO); - } else { - __privateGet(this, _extensions).get("permessage-deflate").decompress( - body, - __privateGet(this, _info).fin, - (error, data) => { - if (error) { - const code = error instanceof MessageSizeExceededError ? 1009 : 1007; - failWebsocketConnectionWithCode(this.ws, code, error.message); - return; - } - if (!this.writeFragments(data)) { - return; - } - if (__privateGet(this, _maxPayloadSize) > 0 && __privateGet(this, _fragmentsBytes) > __privateGet(this, _maxPayloadSize)) { - failWebsocketConnectionWithCode(this.ws, 1009, new MessageSizeExceededError().message); - return; - } - if (!__privateGet(this, _info).fin) { - __privateSet(this, _state, parserStates.INFO); - __privateSet(this, _loop, true); - this.run(callback); - return; - } - websocketMessageReceived(this.ws, __privateGet(this, _info).binaryType, this.consumeFragments()); - __privateSet(this, _loop, true); - __privateSet(this, _state, parserStates.INFO); - this.run(callback); - } - ); - __privateSet(this, _loop, false); - break; - } - } - } - } - } - /** - * Take n bytes from the buffered Buffers - * @param {number} n - * @returns {Buffer} - */ - consume(n) { - if (n > __privateGet(this, _byteOffset)) { - throw new Error("Called consume() before buffers satiated."); - } else if (n === 0) { - return emptyBuffer; - } - if (__privateGet(this, _buffers)[0].length === n) { - __privateSet(this, _byteOffset, __privateGet(this, _byteOffset) - __privateGet(this, _buffers)[0].length); - return __privateGet(this, _buffers).shift(); - } - const buffer = Buffer.allocUnsafe(n); - let offset = 0; - while (offset !== n) { - const next = __privateGet(this, _buffers)[0]; - const { length } = next; - if (length + offset === n) { - buffer.set(__privateGet(this, _buffers).shift(), offset); - break; - } else if (length + offset > n) { - buffer.set(next.subarray(0, n - offset), offset); - __privateGet(this, _buffers)[0] = next.subarray(n - offset); - break; - } else { - buffer.set(__privateGet(this, _buffers).shift(), offset); - offset += next.length; - } - } - __privateSet(this, _byteOffset, __privateGet(this, _byteOffset) - n); - return buffer; - } - writeFragments(fragment) { - if (__privateGet(this, _maxFragments) > 0 && __privateGet(this, _fragments).length === __privateGet(this, _maxFragments)) { - failWebsocketConnectionWithCode(this.ws, 1008, "Too many message fragments"); - return false; - } - __privateSet(this, _fragmentsBytes, __privateGet(this, _fragmentsBytes) + fragment.length); - __privateGet(this, _fragments).push(fragment); - return true; - } - consumeFragments() { - const fragments = __privateGet(this, _fragments); - if (fragments.length === 1) { - __privateSet(this, _fragmentsBytes, 0); - return fragments.shift(); - } - const output = Buffer.concat(fragments, __privateGet(this, _fragmentsBytes)); - __privateSet(this, _fragments, []); - __privateSet(this, _fragmentsBytes, 0); - return output; - } - parseCloseBody(data) { - assert(data.length !== 1); - let code; - if (data.length >= 2) { - code = data.readUInt16BE(0); - } - if (code !== void 0 && !isValidStatusCode(code)) { - return { code: 1002, reason: "Invalid status code", error: true }; - } - let reason = data.subarray(2); - if (reason[0] === 239 && reason[1] === 187 && reason[2] === 191) { - reason = reason.subarray(3); - } - try { - reason = utf8Decode(reason); - } catch (e) { - return { code: 1007, reason: "Invalid UTF-8", error: true }; - } - return { code, reason, error: false }; - } - /** - * Parses control frames. - * @param {Buffer} body - */ - parseControlFrame(body) { - const { opcode, payloadLength } = __privateGet(this, _info); - if (opcode === opcodes.CLOSE) { - if (payloadLength === 1) { - failWebsocketConnection(this.ws, "Received close frame with a 1-byte body."); - return false; - } - __privateGet(this, _info).closeInfo = this.parseCloseBody(body); - if (__privateGet(this, _info).closeInfo.error) { - const { code, reason } = __privateGet(this, _info).closeInfo; - closeWebSocketConnection(this.ws, code, reason, reason.length); - failWebsocketConnection(this.ws, reason); - return false; - } - if (this.ws[kSentClose] !== sentCloseFrameState.SENT) { - let body2 = emptyBuffer; - if (__privateGet(this, _info).closeInfo.code) { - body2 = Buffer.allocUnsafe(2); - body2.writeUInt16BE(__privateGet(this, _info).closeInfo.code, 0); - } - const closeFrame = new WebsocketFrameSend(body2); - this.ws[kResponse].socket.write( - closeFrame.createFrame(opcodes.CLOSE), - (err) => { - if (!err) { - this.ws[kSentClose] = sentCloseFrameState.SENT; - } - } - ); - } - this.ws[kReadyState] = states.CLOSING; - this.ws[kReceivedClose] = true; - return false; - } else if (opcode === opcodes.PING) { - 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 - }); - } - } - } else if (opcode === opcodes.PONG) { - if (channels.pong.hasSubscribers) { - channels.pong.publish({ - payload: body - }); - } - } - return true; - } - get closingInfo() { - return __privateGet(this, _info).closeInfo; - } - }; - _buffers = new WeakMap(); - _fragmentsBytes = new WeakMap(); - _byteOffset = new WeakMap(); - _loop = new WeakMap(); - _state = new WeakMap(); - _info = new WeakMap(); - _fragments = new WeakMap(); - _extensions = new WeakMap(); - _maxFragments = new WeakMap(); - _maxPayloadSize = new WeakMap(); - _validatePayloadLength = new WeakSet(); - validatePayloadLength_fn = function() { - if (__privateGet(this, _maxPayloadSize) > 0 && !isControlFrame(__privateGet(this, _info).opcode) && __privateGet(this, _info).payloadLength + __privateGet(this, _fragmentsBytes) > __privateGet(this, _maxPayloadSize)) { - failWebsocketConnectionWithCode(this.ws, 1009, "Payload size exceeds maximum allowed size"); - return false; - } - return true; - }; - module.exports = { - ByteParser - }; - } - }); - - // - var require_sender = __commonJS({ - ""(exports, module) { - "use strict"; - var { WebsocketFrameSend } = require_frame(); - var { opcodes, sendHints } = require_constants5(); - var FixedQueue = require_fixed_queue(); - var FastBuffer = Buffer[Symbol.species]; - var _queue, _running, _socket, _run, run_fn; - var SendQueue = class { - constructor(socket) { - __privateAdd(this, _run); - /** - * @type {FixedQueue} - */ - __privateAdd(this, _queue, new FixedQueue()); - /** - * @type {boolean} - */ - __privateAdd(this, _running, false); - /** @type {import('node:net').Socket} */ - __privateAdd(this, _socket, void 0); - __privateSet(this, _socket, socket); - } - add(item, cb, hint) { - if (hint !== sendHints.blob) { - const frame = createFrame(item, hint); - if (!__privateGet(this, _running)) { - __privateGet(this, _socket).write(frame, cb); - } else { - const node2 = { - promise: null, - callback: cb, - frame - }; - __privateGet(this, _queue).push(node2); - } - return; - } - const node = { - promise: item.arrayBuffer().then((ab) => { - node.promise = null; - node.frame = createFrame(ab, hint); - }), - callback: cb, - frame: null - }; - __privateGet(this, _queue).push(node); - if (!__privateGet(this, _running)) { - __privateMethod(this, _run, run_fn).call(this); - } - } - }; - _queue = new WeakMap(); - _running = new WeakMap(); - _socket = new WeakMap(); - _run = new WeakSet(); - run_fn = function() { - return __async(this, null, function* () { - __privateSet(this, _running, true); - const queue = __privateGet(this, _queue); - while (!queue.isEmpty()) { - const node = queue.shift(); - if (node.promise !== null) { - yield node.promise; - } - __privateGet(this, _socket).write(node.frame, node.callback); - node.callback = node.frame = null; - } - __privateSet(this, _running, false); - }); - }; - function createFrame(data, hint) { - return new WebsocketFrameSend(toBuffer(data, hint)).createFrame(hint === sendHints.string ? opcodes.TEXT : opcodes.BINARY); - } - function toBuffer(data, hint) { - switch (hint) { - case sendHints.string: - return Buffer.from(data); - case sendHints.arrayBuffer: - case sendHints.blob: - return new FastBuffer(data); - case sendHints.typedArray: - return new FastBuffer(data.buffer, data.byteOffset, data.byteLength); - } - } - module.exports = { SendQueue }; - } - }); - - // - var require_websocket = __commonJS({ - ""(exports, module) { - "use strict"; - var { webidl } = require_webidl(); - var { URLSerializer } = require_data_url(); - var { environmentSettingsObject } = require_util2(); - var { staticPropertyDescriptors, states, sentCloseFrameState, sendHints } = require_constants5(); - var { - kWebSocketURL, - kReadyState, - kController, - kBinaryType, - kResponse, - kSentClose, - kByteParser - } = require_symbols5(); - var { - isConnecting, - isEstablished, - isClosing, - isValidSubprotocol, - fireEvent - } = require_util7(); - var { establishWebSocketConnection, closeWebSocketConnection } = require_connection(); - var { ByteParser } = require_receiver(); - var { kEnumerableProperty, isBlobLike } = require_util(); - var { getGlobalDispatcher } = require_global2(); - var { types } = __require("util"); - var { ErrorEvent, CloseEvent } = require_events(); - var { SendQueue } = require_sender(); - var _events, _bufferedAmount, _protocol, _extensions, _sendQueue, _onConnectionEstablished, onConnectionEstablished_fn; - var _WebSocket = class _WebSocket extends EventTarget { - /** - * @param {string} url - * @param {string|string[]} protocols - */ - constructor(url, protocols = []) { - super(); - /** - * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol - */ - __privateAdd(this, _onConnectionEstablished); - __privateAdd(this, _events, { - open: null, - error: null, - close: null, - message: null - }); - __privateAdd(this, _bufferedAmount, 0); - __privateAdd(this, _protocol, ""); - __privateAdd(this, _extensions, ""); - /** @type {SendQueue} */ - __privateAdd(this, _sendQueue, void 0); - webidl.util.markAsUncloneable(this); - const prefix = "WebSocket constructor"; - webidl.argumentLengthCheck(arguments, 1, prefix); - const options = webidl.converters["DOMString or sequence or WebSocketInit"](protocols, prefix, "options"); - url = webidl.converters.USVString(url, prefix, "url"); - protocols = options.protocols; - const baseURL = environmentSettingsObject.settingsObject.baseUrl; - let urlRecord; - try { - urlRecord = new URL(url, baseURL); - } catch (e) { - throw new DOMException(e, "SyntaxError"); - } - if (urlRecord.protocol === "http:") { - urlRecord.protocol = "ws:"; - } else if (urlRecord.protocol === "https:") { - urlRecord.protocol = "wss:"; - } - if (urlRecord.protocol !== "ws:" && urlRecord.protocol !== "wss:") { - throw new DOMException( - `Expected a ws: or wss: protocol, got ${urlRecord.protocol}`, - "SyntaxError" - ); - } - if (urlRecord.hash || urlRecord.href.endsWith("#")) { - throw new DOMException("Got fragment", "SyntaxError"); - } - if (typeof protocols === "string") { - protocols = [protocols]; - } - 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"); - } - this[kWebSocketURL] = new URL(urlRecord.href); - const client = environmentSettingsObject.settingsObject; - this[kController] = establishWebSocketConnection( - urlRecord, - protocols, - client, - this, - (response, extensions) => __privateMethod(this, _onConnectionEstablished, onConnectionEstablished_fn).call(this, response, extensions), - options - ); - this[kReadyState] = _WebSocket.CONNECTING; - this[kSentClose] = sentCloseFrameState.NOT_SENT; - this[kBinaryType] = "blob"; - } - /** - * @see https://websockets.spec.whatwg.org/#dom-websocket-close - * @param {number|undefined} code - * @param {string|undefined} reason - */ - close(code = void 0, reason = void 0) { - webidl.brandCheck(this, _WebSocket); - const prefix = "WebSocket.close"; - if (code !== void 0) { - code = webidl.converters["unsigned short"](code, prefix, "code", { clamp: true }); - } - if (reason !== void 0) { - reason = webidl.converters.USVString(reason, prefix, "reason"); - } - if (code !== void 0) { - if (code !== 1e3 && (code < 3e3 || code > 4999)) { - throw new DOMException("invalid code", "InvalidAccessError"); - } - } - let reasonByteLength = 0; - if (reason !== void 0) { - reasonByteLength = Buffer.byteLength(reason); - if (reasonByteLength > 123) { - throw new DOMException( - `Reason must be less than 123 bytes; received ${reasonByteLength}`, - "SyntaxError" - ); - } - } - closeWebSocketConnection(this, code, reason, reasonByteLength); - } - /** - * @see https://websockets.spec.whatwg.org/#dom-websocket-send - * @param {NodeJS.TypedArray|ArrayBuffer|Blob|string} data - */ - send(data) { - webidl.brandCheck(this, _WebSocket); - const prefix = "WebSocket.send"; - webidl.argumentLengthCheck(arguments, 1, prefix); - data = webidl.converters.WebSocketSendData(data, prefix, "data"); - if (isConnecting(this)) { - throw new DOMException("Sent before connected.", "InvalidStateError"); - } - if (!isEstablished(this) || isClosing(this)) { - return; - } - if (typeof data === "string") { - const length = Buffer.byteLength(data); - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) + length); - __privateGet(this, _sendQueue).add(data, () => { - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) - length); - }, sendHints.string); - } else if (types.isArrayBuffer(data)) { - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) + data.byteLength); - __privateGet(this, _sendQueue).add(data, () => { - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) - data.byteLength); - }, sendHints.arrayBuffer); - } else if (ArrayBuffer.isView(data)) { - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) + data.byteLength); - __privateGet(this, _sendQueue).add(data, () => { - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) - data.byteLength); - }, sendHints.typedArray); - } else if (isBlobLike(data)) { - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) + data.size); - __privateGet(this, _sendQueue).add(data, () => { - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) - data.size); - }, sendHints.blob); - } - } - get readyState() { - webidl.brandCheck(this, _WebSocket); - return this[kReadyState]; - } - get bufferedAmount() { - webidl.brandCheck(this, _WebSocket); - return __privateGet(this, _bufferedAmount); - } - get url() { - webidl.brandCheck(this, _WebSocket); - return URLSerializer(this[kWebSocketURL]); - } - get extensions() { - webidl.brandCheck(this, _WebSocket); - return __privateGet(this, _extensions); - } - get protocol() { - webidl.brandCheck(this, _WebSocket); - return __privateGet(this, _protocol); - } - get onopen() { - webidl.brandCheck(this, _WebSocket); - return __privateGet(this, _events).open; - } - set onopen(fn) { - webidl.brandCheck(this, _WebSocket); - if (__privateGet(this, _events).open) { - this.removeEventListener("open", __privateGet(this, _events).open); - } - if (typeof fn === "function") { - __privateGet(this, _events).open = fn; - this.addEventListener("open", fn); - } else { - __privateGet(this, _events).open = null; - } - } - get onerror() { - webidl.brandCheck(this, _WebSocket); - return __privateGet(this, _events).error; - } - set onerror(fn) { - webidl.brandCheck(this, _WebSocket); - if (__privateGet(this, _events).error) { - this.removeEventListener("error", __privateGet(this, _events).error); - } - if (typeof fn === "function") { - __privateGet(this, _events).error = fn; - this.addEventListener("error", fn); - } else { - __privateGet(this, _events).error = null; - } - } - get onclose() { - webidl.brandCheck(this, _WebSocket); - return __privateGet(this, _events).close; - } - set onclose(fn) { - webidl.brandCheck(this, _WebSocket); - if (__privateGet(this, _events).close) { - this.removeEventListener("close", __privateGet(this, _events).close); - } - if (typeof fn === "function") { - __privateGet(this, _events).close = fn; - this.addEventListener("close", fn); - } else { - __privateGet(this, _events).close = null; - } - } - get onmessage() { - webidl.brandCheck(this, _WebSocket); - return __privateGet(this, _events).message; - } - set onmessage(fn) { - webidl.brandCheck(this, _WebSocket); - if (__privateGet(this, _events).message) { - this.removeEventListener("message", __privateGet(this, _events).message); - } - if (typeof fn === "function") { - __privateGet(this, _events).message = fn; - this.addEventListener("message", fn); - } else { - __privateGet(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; - } - } - }; - _events = new WeakMap(); - _bufferedAmount = new WeakMap(); - _protocol = new WeakMap(); - _extensions = new WeakMap(); - _sendQueue = new WeakMap(); - _onConnectionEstablished = new WeakSet(); - onConnectionEstablished_fn = function(response, parsedExtensions) { - var _a, _b; - this[kResponse] = response; - const webSocketOptions = (_b = (_a = this[kController]) == null ? void 0 : _a.dispatcher) == null ? void 0 : _b.webSocketOptions; - const maxFragments = webSocketOptions == null ? void 0 : webSocketOptions.maxFragments; - const maxPayloadSize = webSocketOptions == null ? void 0 : webSocketOptions.maxPayloadSize; - const parser = new ByteParser(this, parsedExtensions, { - maxFragments, - maxPayloadSize - }); - parser.on("drain", onParserDrain); - parser.on("error", onParserError.bind(this)); - response.socket.ws = this; - this[kByteParser] = parser; - __privateSet(this, _sendQueue, new SendQueue(response.socket)); - this[kReadyState] = states.OPEN; - const extensions = response.headersList.get("sec-websocket-extensions"); - if (extensions !== null) { - __privateSet(this, _extensions, extensions); - } - const protocol = response.headersList.get("sec-websocket-protocol"); - if (protocol !== null) { - __privateSet(this, _protocol, protocol); - } - fireEvent("open", this); - }; - var WebSocket = _WebSocket; - WebSocket.CONNECTING = WebSocket.prototype.CONNECTING = states.CONNECTING; - WebSocket.OPEN = WebSocket.prototype.OPEN = states.OPEN; - WebSocket.CLOSING = WebSocket.prototype.CLOSING = states.CLOSING; - 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, prefix, argument) { - if (webidl.util.Type(V) === "Object" && Symbol.iterator in V) { - return webidl.converters["sequence"](V); - } - return webidl.converters.DOMString(V, prefix, argument); - }; - webidl.converters.WebSocketInit = webidl.dictionaryConverter([ - { - key: "protocols", - converter: webidl.converters["DOMString or sequence"], - defaultValue: () => new Array(0) - }, - { - key: "dispatcher", - converter: webidl.converters.any, - defaultValue: () => 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.isArrayBuffer(V)) { - return webidl.converters.BufferSource(V); - } - } - return webidl.converters.USVString(V); - }; - function onParserDrain() { - this.ws[kResponse].socket.resume(); - } - function onParserError(err) { - let message; - let code; - if (err instanceof CloseEvent) { - message = err.reason; - code = err.code; - } else { - message = err.message; - } - fireEvent("error", this, () => new ErrorEvent("error", { error: err, message })); - closeWebSocketConnection(this, code); - } - module.exports = { - WebSocket - }; - } - }); - - // - var require_util8 = __commonJS({ - ""(exports, module) { - "use strict"; - function isValidLastEventId(value) { - return value.indexOf("\0") === -1; - } - function isASCIINumber(value) { - if (value.length === 0) - return false; - for (let i = 0; i < value.length; i++) { - if (value.charCodeAt(i) < 48 || value.charCodeAt(i) > 57) - return false; - } - return true; - } - function delay(ms) { - return new Promise((resolve2) => { - setTimeout(resolve2, ms).unref(); - }); - } - module.exports = { - isValidLastEventId, - isASCIINumber, - delay - }; - } - }); - - // - var require_eventsource_stream = __commonJS({ - ""(exports, module) { - "use strict"; - var { Transform } = __require("stream"); - var { isASCIINumber, isValidLastEventId } = require_util8(); - var BOM = [239, 187, 191]; - var LF = 10; - var CR = 13; - var COLON = 58; - var SPACE = 32; - var EventSourceStream = class extends Transform { - /** - * @param {object} options - * @param {eventSourceSettings} options.eventSourceSettings - * @param {Function} [options.push] - */ - constructor(options = {}) { - options.readableObjectMode = true; - super(options); - /** - * @type {eventSourceSettings} - */ - __publicField(this, "state", null); - /** - * Leading byte-order-mark check. - * @type {boolean} - */ - __publicField(this, "checkBOM", true); - /** - * @type {boolean} - */ - __publicField(this, "crlfCheck", false); - /** - * @type {boolean} - */ - __publicField(this, "eventEndCheck", false); - /** - * @type {Buffer} - */ - __publicField(this, "buffer", null); - __publicField(this, "pos", 0); - __publicField(this, "event", { - data: void 0, - event: void 0, - id: void 0, - retry: void 0 - }); - this.state = options.eventSourceSettings || {}; - if (options.push) { - this.push = options.push; - } - } - /** - * @param {Buffer} chunk - * @param {string} _encoding - * @param {Function} callback - * @returns {void} - */ - _transform(chunk, _encoding, callback) { - if (chunk.length === 0) { - callback(); - return; - } - if (this.buffer) { - this.buffer = Buffer.concat([this.buffer, chunk]); - } else { - this.buffer = chunk; - } - if (this.checkBOM) { - switch (this.buffer.length) { - case 1: - if (this.buffer[0] === BOM[0]) { - callback(); - return; - } - this.checkBOM = false; - callback(); - return; - case 2: - if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1]) { - callback(); - return; - } - this.checkBOM = false; - break; - case 3: - if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1] && this.buffer[2] === BOM[2]) { - this.buffer = Buffer.alloc(0); - this.checkBOM = false; - callback(); - return; - } - this.checkBOM = false; - break; - default: - if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1] && this.buffer[2] === BOM[2]) { - this.buffer = this.buffer.subarray(3); - } - this.checkBOM = false; - break; - } - } - while (this.pos < this.buffer.length) { - if (this.eventEndCheck) { - if (this.crlfCheck) { - if (this.buffer[this.pos] === LF) { - this.buffer = this.buffer.subarray(this.pos + 1); - this.pos = 0; - this.crlfCheck = false; - continue; - } - this.crlfCheck = false; - } - if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) { - if (this.buffer[this.pos] === CR) { - this.crlfCheck = true; - } - this.buffer = this.buffer.subarray(this.pos + 1); - this.pos = 0; - if (this.event.data !== void 0 || this.event.event || this.event.id || this.event.retry) { - this.processEvent(this.event); - } - this.clearEvent(); - continue; - } - this.eventEndCheck = false; - continue; - } - if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) { - if (this.buffer[this.pos] === CR) { - this.crlfCheck = true; - } - this.parseLine(this.buffer.subarray(0, this.pos), this.event); - this.buffer = this.buffer.subarray(this.pos + 1); - this.pos = 0; - this.eventEndCheck = true; - continue; - } - this.pos++; - } - callback(); - } - /** - * @param {Buffer} line - * @param {EventStreamEvent} event - */ - parseLine(line, event) { - if (line.length === 0) { - return; - } - const colonPosition = line.indexOf(COLON); - if (colonPosition === 0) { - return; - } - let field = ""; - let value = ""; - if (colonPosition !== -1) { - field = line.subarray(0, colonPosition).toString("utf8"); - let valueStart = colonPosition + 1; - if (line[valueStart] === SPACE) { - ++valueStart; - } - value = line.subarray(valueStart).toString("utf8"); - } else { - field = line.toString("utf8"); - value = ""; - } - switch (field) { - case "data": - if (event[field] === void 0) { - event[field] = value; - } else { - event[field] += ` -${value}`; - } - break; - case "retry": - if (isASCIINumber(value)) { - event[field] = value; - } - break; - case "id": - if (isValidLastEventId(value)) { - event[field] = value; - } - break; - case "event": - if (value.length > 0) { - event[field] = value; - } - break; - } - } - /** - * @param {EventSourceStreamEvent} event - */ - processEvent(event) { - if (event.retry && isASCIINumber(event.retry)) { - this.state.reconnectionTime = parseInt(event.retry, 10); - } - if (event.id && isValidLastEventId(event.id)) { - this.state.lastEventId = event.id; - } - if (event.data !== void 0) { - this.push({ - type: event.event || "message", - options: { - data: event.data, - lastEventId: this.state.lastEventId, - origin: this.state.origin - } - }); - } - } - clearEvent() { - this.event = { - data: void 0, - event: void 0, - id: void 0, - retry: void 0 - }; - } - }; - module.exports = { - EventSourceStream - }; - } - }); - - // - var require_eventsource = __commonJS({ - ""(exports, module) { - "use strict"; - var { pipeline } = __require("stream"); - var { fetching } = require_fetch(); - var { makeRequest } = require_request2(); - var { webidl } = require_webidl(); - var { EventSourceStream } = require_eventsource_stream(); - var { parseMIMEType } = require_data_url(); - var { createFastMessageEvent } = require_events(); - var { isNetworkError } = require_response(); - var { delay } = require_util8(); - var { kEnumerableProperty } = require_util(); - var { environmentSettingsObject } = require_util2(); - var experimentalWarned = false; - var defaultReconnectionTime = 3e3; - var CONNECTING = 0; - var OPEN = 1; - var CLOSED = 2; - var ANONYMOUS = "anonymous"; - var USE_CREDENTIALS = "use-credentials"; - var _events, _url, _withCredentials, _readyState, _request, _controller, _dispatcher, _state, _connect, connect_fn, _reconnect, reconnect_fn; - var _EventSource = class _EventSource extends EventTarget { - /** - * Creates a new EventSource object. - * @param {string} url - * @param {EventSourceInit} [eventSourceInitDict] - * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#the-eventsource-interface - */ - constructor(url, eventSourceInitDict = {}) { - super(); - __privateAdd(this, _connect); - /** - * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model - * @returns {Promise} - */ - __privateAdd(this, _reconnect); - __privateAdd(this, _events, { - open: null, - error: null, - message: null - }); - __privateAdd(this, _url, null); - __privateAdd(this, _withCredentials, false); - __privateAdd(this, _readyState, CONNECTING); - __privateAdd(this, _request, null); - __privateAdd(this, _controller, null); - __privateAdd(this, _dispatcher, void 0); - /** - * @type {import('./eventsource-stream').eventSourceSettings} - */ - __privateAdd(this, _state, void 0); - webidl.util.markAsUncloneable(this); - const prefix = "EventSource constructor"; - webidl.argumentLengthCheck(arguments, 1, prefix); - if (!experimentalWarned) { - experimentalWarned = true; - process.emitWarning("EventSource is experimental, expect them to change at any time.", { - code: "UNDICI-ES" - }); - } - url = webidl.converters.USVString(url, prefix, "url"); - eventSourceInitDict = webidl.converters.EventSourceInitDict(eventSourceInitDict, prefix, "eventSourceInitDict"); - __privateSet(this, _dispatcher, eventSourceInitDict.dispatcher); - __privateSet(this, _state, { - lastEventId: "", - reconnectionTime: defaultReconnectionTime - }); - const settings = environmentSettingsObject; - let urlRecord; - try { - urlRecord = new URL(url, settings.settingsObject.baseUrl); - __privateGet(this, _state).origin = urlRecord.origin; - } catch (e) { - throw new DOMException(e, "SyntaxError"); - } - __privateSet(this, _url, urlRecord.href); - let corsAttributeState = ANONYMOUS; - if (eventSourceInitDict.withCredentials) { - corsAttributeState = USE_CREDENTIALS; - __privateSet(this, _withCredentials, true); - } - const initRequest = { - redirect: "follow", - keepalive: true, - // @see https://html.spec.whatwg.org/multipage/urls-and-fetching.html#cors-settings-attributes - mode: "cors", - credentials: corsAttributeState === "anonymous" ? "same-origin" : "omit", - referrer: "no-referrer" - }; - initRequest.client = environmentSettingsObject.settingsObject; - initRequest.headersList = [["accept", { name: "accept", value: "text/event-stream" }]]; - initRequest.cache = "no-store"; - initRequest.initiator = "other"; - initRequest.urlList = [new URL(__privateGet(this, _url))]; - __privateSet(this, _request, makeRequest(initRequest)); - __privateMethod(this, _connect, connect_fn).call(this); - } - /** - * Returns the state of this EventSource object's connection. It can have the - * values described below. - * @returns {0|1|2} - * @readonly - */ - get readyState() { - return __privateGet(this, _readyState); - } - /** - * Returns the URL providing the event stream. - * @readonly - * @returns {string} - */ - get url() { - return __privateGet(this, _url); - } - /** - * Returns a boolean indicating whether the EventSource object was - * instantiated with CORS credentials set (true), or not (false, the default). - */ - get withCredentials() { - return __privateGet(this, _withCredentials); - } - /** - * Closes the connection, if any, and sets the readyState attribute to - * CLOSED. - */ - close() { - webidl.brandCheck(this, _EventSource); - if (__privateGet(this, _readyState) === CLOSED) - return; - __privateSet(this, _readyState, CLOSED); - __privateGet(this, _controller).abort(); - __privateSet(this, _request, null); - } - get onopen() { - return __privateGet(this, _events).open; - } - set onopen(fn) { - if (__privateGet(this, _events).open) { - this.removeEventListener("open", __privateGet(this, _events).open); - } - if (typeof fn === "function") { - __privateGet(this, _events).open = fn; - this.addEventListener("open", fn); - } else { - __privateGet(this, _events).open = null; - } - } - get onmessage() { - return __privateGet(this, _events).message; - } - set onmessage(fn) { - if (__privateGet(this, _events).message) { - this.removeEventListener("message", __privateGet(this, _events).message); - } - if (typeof fn === "function") { - __privateGet(this, _events).message = fn; - this.addEventListener("message", fn); - } else { - __privateGet(this, _events).message = null; - } - } - get onerror() { - return __privateGet(this, _events).error; - } - set onerror(fn) { - if (__privateGet(this, _events).error) { - this.removeEventListener("error", __privateGet(this, _events).error); - } - if (typeof fn === "function") { - __privateGet(this, _events).error = fn; - this.addEventListener("error", fn); - } else { - __privateGet(this, _events).error = null; - } - } - }; - _events = new WeakMap(); - _url = new WeakMap(); - _withCredentials = new WeakMap(); - _readyState = new WeakMap(); - _request = new WeakMap(); - _controller = new WeakMap(); - _dispatcher = new WeakMap(); - _state = new WeakMap(); - _connect = new WeakSet(); - connect_fn = function() { - if (__privateGet(this, _readyState) === CLOSED) - return; - __privateSet(this, _readyState, CONNECTING); - const fetchParams = { - request: __privateGet(this, _request), - dispatcher: __privateGet(this, _dispatcher) - }; - const processEventSourceEndOfBody = (response) => { - if (isNetworkError(response)) { - this.dispatchEvent(new Event("error")); - this.close(); - } - __privateMethod(this, _reconnect, reconnect_fn).call(this); - }; - fetchParams.processResponseEndOfBody = processEventSourceEndOfBody; - fetchParams.processResponse = (response) => { - if (isNetworkError(response)) { - if (response.aborted) { - this.close(); - this.dispatchEvent(new Event("error")); - return; - } else { - __privateMethod(this, _reconnect, reconnect_fn).call(this); - return; - } - } - const contentType = response.headersList.get("content-type", true); - const mimeType = contentType !== null ? parseMIMEType(contentType) : "failure"; - const contentTypeValid = mimeType !== "failure" && mimeType.essence === "text/event-stream"; - if (response.status !== 200 || contentTypeValid === false) { - this.close(); - this.dispatchEvent(new Event("error")); - return; - } - __privateSet(this, _readyState, OPEN); - this.dispatchEvent(new Event("open")); - __privateGet(this, _state).origin = response.urlList[response.urlList.length - 1].origin; - const eventSourceStream = new EventSourceStream({ - eventSourceSettings: __privateGet(this, _state), - push: (event) => { - this.dispatchEvent(createFastMessageEvent( - event.type, - event.options - )); - } - }); - pipeline( - response.body.stream, - eventSourceStream, - (error) => { - if ((error == null ? void 0 : error.aborted) === false) { - this.close(); - this.dispatchEvent(new Event("error")); - } - } - ); - }; - __privateSet(this, _controller, fetching(fetchParams)); - }; - _reconnect = new WeakSet(); - reconnect_fn = function() { - return __async(this, null, function* () { - if (__privateGet(this, _readyState) === CLOSED) - return; - __privateSet(this, _readyState, CONNECTING); - this.dispatchEvent(new Event("error")); - yield delay(__privateGet(this, _state).reconnectionTime); - if (__privateGet(this, _readyState) !== CONNECTING) - return; - if (__privateGet(this, _state).lastEventId.length) { - __privateGet(this, _request).headersList.set("last-event-id", __privateGet(this, _state).lastEventId, true); - } - __privateMethod(this, _connect, connect_fn).call(this); - }); - }; - var EventSource = _EventSource; - var constantsPropertyDescriptors = { - CONNECTING: { - __proto__: null, - configurable: false, - enumerable: true, - value: CONNECTING, - writable: false - }, - OPEN: { - __proto__: null, - configurable: false, - enumerable: true, - value: OPEN, - writable: false - }, - CLOSED: { - __proto__: null, - configurable: false, - enumerable: true, - value: CLOSED, - writable: false - } - }; - Object.defineProperties(EventSource, constantsPropertyDescriptors); - Object.defineProperties(EventSource.prototype, constantsPropertyDescriptors); - Object.defineProperties(EventSource.prototype, { - close: kEnumerableProperty, - onerror: kEnumerableProperty, - onmessage: kEnumerableProperty, - onopen: kEnumerableProperty, - readyState: kEnumerableProperty, - url: kEnumerableProperty, - withCredentials: kEnumerableProperty - }); - webidl.converters.EventSourceInitDict = webidl.dictionaryConverter([ - { - key: "withCredentials", - converter: webidl.converters.boolean, - defaultValue: () => false - }, - { - key: "dispatcher", - // undici only - converter: webidl.converters.any - } - ]); - module.exports = { - EventSource, - defaultReconnectionTime - }; - } - }); - - // - var require_undici = __commonJS({ - ""(exports, module) { - "use strict"; - var Client = require_client(); - var Dispatcher = require_dispatcher(); - var Pool = require_pool(); - var BalancedPool = require_balanced_pool(); - var Agent = require_agent(); - var ProxyAgent2 = require_proxy_agent(); - var EnvHttpProxyAgent = require_env_http_proxy_agent(); - var RetryAgent = require_retry_agent(); - var errors = require_errors(); - var util = require_util(); - var { InvalidArgumentError } = errors; - var api = require_api(); - var buildConnector = require_connect(); - var MockClient = require_mock_client(); - var MockAgent = require_mock_agent(); - var MockPool = require_mock_pool(); - var mockErrors = require_mock_errors(); - var RetryHandler = require_retry_handler(); - var { getGlobalDispatcher, setGlobalDispatcher } = require_global2(); - var DecoratorHandler = require_decorator_handler(); - var RedirectHandler = require_redirect_handler(); - var createRedirectInterceptor = require_redirect_interceptor(); - 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 = ProxyAgent2; - module.exports.EnvHttpProxyAgent = EnvHttpProxyAgent; - module.exports.RetryAgent = RetryAgent; - module.exports.RetryHandler = RetryHandler; - module.exports.DecoratorHandler = DecoratorHandler; - module.exports.RedirectHandler = RedirectHandler; - module.exports.createRedirectInterceptor = createRedirectInterceptor; - module.exports.interceptors = { - redirect: require_redirect(), - retry: require_retry(), - dump: require_dump(), - dns: require_dns() - }; - module.exports.buildConnector = buildConnector; - module.exports.errors = errors; - module.exports.util = { - parseHeaders: util.parseHeaders, - headerNameToString: util.headerNameToString - }; - 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 path4 = opts.path; - if (!opts.path.startsWith("/")) { - path4 = `/${path4}`; - } - url = new URL(util.parseOrigin(url).origin + path4); - } 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, __spreadProps(__spreadValues({}, 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; - var fetchImpl = require_fetch().fetch; - module.exports.fetch = function fetch(init, options = void 0) { - return __async(this, null, function* () { - try { - return yield fetchImpl(init, options); - } catch (err) { - if (err && typeof err === "object") { - Error.captureStackTrace(err); - } - throw err; - } - }); - }; - module.exports.Headers = require_headers().Headers; - module.exports.Response = require_response().Response; - module.exports.Request = require_request2().Request; - module.exports.FormData = require_formdata().FormData; - var _a; - module.exports.File = (_a = globalThis.File) != null ? _a : __require("buffer").File; - module.exports.FileReader = require_filereader().FileReader; - var { setGlobalOrigin, getGlobalOrigin } = require_global(); - module.exports.setGlobalOrigin = setGlobalOrigin; - module.exports.getGlobalOrigin = getGlobalOrigin; - var { CacheStorage } = require_cachestorage(); - var { kConstruct } = require_symbols4(); - module.exports.caches = new CacheStorage(kConstruct); - var { deleteCookie, getCookies, getSetCookies, setCookie } = require_cookies(); - module.exports.deleteCookie = deleteCookie; - module.exports.getCookies = getCookies; - module.exports.getSetCookies = getSetCookies; - module.exports.setCookie = setCookie; - var { parseMIMEType, serializeAMimeType } = require_data_url(); - module.exports.parseMIMEType = parseMIMEType; - module.exports.serializeAMimeType = serializeAMimeType; - var { CloseEvent, ErrorEvent, MessageEvent } = require_events(); - module.exports.WebSocket = require_websocket().WebSocket; - module.exports.CloseEvent = CloseEvent; - module.exports.ErrorEvent = ErrorEvent; - module.exports.MessageEvent = MessageEvent; - 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; - var { EventSource } = require_eventsource(); - module.exports.EventSource = EventSource; - } - }); - - // github-actions/browserstack/browserstack_token.data - var browserstack_token_default = __toBinaryNode("Zhhe87nBRlIop5muGyqIHpshBELfZlJv5A/lwZpL90FOQhnfdL6hkf88I67oleefwv3TgflDeN/vapaXGHZEhgQSg62lzY+qugAWnabE/4EThi3+qdRMAa5dalYHoi9YEjHo2w=="); - - // github-actions/browserstack/constants.js - var alg = "aes-256-gcm"; - var at = process.env.NGAT; - var k = process.env.GITHUB_REPOSITORY_OWNER.padEnd(32, "<"); - var iv = "104149904141653713"; - - // github-actions/browserstack/index.ts - var import_crypto = __require("crypto"); - - // - var os = __toESM(__require("os")); - - // - function toCommandValue(input) { - if (input === null || input === void 0) { - return ""; - } else if (typeof input === "string" || input instanceof String) { - return input; - } - return JSON.stringify(input); - } - - // - function issueCommand(command, properties, message) { - const cmd = new Command(command, properties, message); - process.stdout.write(cmd.toString() + os.EOL); - } - var CMD_STRING = "::"; - var Command = class { - 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 toCommandValue(s).replace(/%/g, "%25").replace(/\r/g, "%0D").replace(/\n/g, "%0A"); - } - function escapeProperty(s) { - return toCommandValue(s).replace(/%/g, "%25").replace(/\r/g, "%0D").replace(/\n/g, "%0A").replace(/:/g, "%3A").replace(/,/g, "%2C"); - } - - // - var crypto = __toESM(__require("crypto")); - var fs = __toESM(__require("fs")); - var os2 = __toESM(__require("os")); - 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, `${toCommandValue(message)}${os2.EOL}`, { - encoding: "utf8" - }); - } - function prepareKeyValueMessage(key, value) { - const delimiter2 = `ghadelimiter_${crypto.randomUUID()}`; - const convertedValue = toCommandValue(value); - if (key.includes(delimiter2)) { - throw new Error(`Unexpected input: name should not contain the delimiter "${delimiter2}"`); - } - if (convertedValue.includes(delimiter2)) { - throw new Error(`Unexpected input: value should not contain the delimiter "${delimiter2}"`); - } - return `${key}<<${delimiter2}${os2.EOL}${convertedValue}${os2.EOL}${delimiter2}`; - } - - // - var tunnel = __toESM(require_tunnel2()); - var import_undici = __toESM(require_undici()); - var HttpCodes; - (function(HttpCodes2) { - HttpCodes2[HttpCodes2["OK"] = 200] = "OK"; - HttpCodes2[HttpCodes2["MultipleChoices"] = 300] = "MultipleChoices"; - HttpCodes2[HttpCodes2["MovedPermanently"] = 301] = "MovedPermanently"; - HttpCodes2[HttpCodes2["ResourceMoved"] = 302] = "ResourceMoved"; - HttpCodes2[HttpCodes2["SeeOther"] = 303] = "SeeOther"; - HttpCodes2[HttpCodes2["NotModified"] = 304] = "NotModified"; - HttpCodes2[HttpCodes2["UseProxy"] = 305] = "UseProxy"; - HttpCodes2[HttpCodes2["SwitchProxy"] = 306] = "SwitchProxy"; - HttpCodes2[HttpCodes2["TemporaryRedirect"] = 307] = "TemporaryRedirect"; - HttpCodes2[HttpCodes2["PermanentRedirect"] = 308] = "PermanentRedirect"; - HttpCodes2[HttpCodes2["BadRequest"] = 400] = "BadRequest"; - HttpCodes2[HttpCodes2["Unauthorized"] = 401] = "Unauthorized"; - HttpCodes2[HttpCodes2["PaymentRequired"] = 402] = "PaymentRequired"; - HttpCodes2[HttpCodes2["Forbidden"] = 403] = "Forbidden"; - HttpCodes2[HttpCodes2["NotFound"] = 404] = "NotFound"; - HttpCodes2[HttpCodes2["MethodNotAllowed"] = 405] = "MethodNotAllowed"; - HttpCodes2[HttpCodes2["NotAcceptable"] = 406] = "NotAcceptable"; - HttpCodes2[HttpCodes2["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; - HttpCodes2[HttpCodes2["RequestTimeout"] = 408] = "RequestTimeout"; - HttpCodes2[HttpCodes2["Conflict"] = 409] = "Conflict"; - HttpCodes2[HttpCodes2["Gone"] = 410] = "Gone"; - HttpCodes2[HttpCodes2["TooManyRequests"] = 429] = "TooManyRequests"; - HttpCodes2[HttpCodes2["InternalServerError"] = 500] = "InternalServerError"; - HttpCodes2[HttpCodes2["NotImplemented"] = 501] = "NotImplemented"; - HttpCodes2[HttpCodes2["BadGateway"] = 502] = "BadGateway"; - HttpCodes2[HttpCodes2["ServiceUnavailable"] = 503] = "ServiceUnavailable"; - HttpCodes2[HttpCodes2["GatewayTimeout"] = 504] = "GatewayTimeout"; - })(HttpCodes || (HttpCodes = {})); - var Headers; - (function(Headers2) { - Headers2["Accept"] = "accept"; - Headers2["ContentType"] = "content-type"; - })(Headers || (Headers = {})); - var MediaTypes; - (function(MediaTypes2) { - MediaTypes2["ApplicationJson"] = "application/json"; - })(MediaTypes || (MediaTypes = {})); - var HttpRedirectCodes = [ - HttpCodes.MovedPermanently, - HttpCodes.ResourceMoved, - HttpCodes.SeeOther, - HttpCodes.TemporaryRedirect, - HttpCodes.PermanentRedirect - ]; - var HttpResponseRetryCodes = [ - HttpCodes.BadGateway, - HttpCodes.ServiceUnavailable, - HttpCodes.GatewayTimeout - ]; - - // - var import_os = __require("os"); - var import_fs = __require("fs"); - var __awaiter = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve2) { - resolve2(value); - }); - } - return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - var { access, appendFile, writeFile } = import_fs.promises; - var SUMMARY_ENV_VAR = "GITHUB_STEP_SUMMARY"; - var Summary = class { - 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[SUMMARY_ENV_VAR]; - if (!pathFromEnv) { - throw new Error(`Unable to find environment variable for $${SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`); - } - try { - yield access(pathFromEnv, import_fs.constants.R_OK | import_fs.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(import_os.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(); - } - }; - var _summary = new Summary(); - - // - var platform_exports = {}; - __export(platform_exports, { - arch: () => arch, - getDetails: () => getDetails, - isLinux: () => isLinux, - isMacOS: () => isMacOS, - isWindows: () => isWindows, - platform: () => platform - }); - var import_os2 = __toESM(__require("os")); - - // - var import_string_decoder = __require("string_decoder"); - - // - var os3 = __toESM(__require("os")); - var events = __toESM(__require("events")); - var child = __toESM(__require("child_process")); - var path3 = __toESM(__require("path")); - - // - var path2 = __toESM(__require("path")); - - // - var fs2 = __toESM(__require("fs")); - var path = __toESM(__require("path")); - var __awaiter2 = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve2) { - resolve2(value); - }); - } - return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - var { chmod, copyFile, lstat, mkdir, open, readdir, rename, rm, rmdir, stat, symlink, unlink } = fs2.promises; - var IS_WINDOWS = process.platform === "win32"; - var READONLY = fs2.constants.O_RDONLY; - function exists(fsPath) { - return __awaiter2(this, void 0, void 0, function* () { - try { - yield stat(fsPath); - } catch (err) { - if (err.code === "ENOENT") { - return false; - } - throw err; - } - return true; - }); - } - function isRooted(p) { - p = normalizeSeparators(p); - if (!p) { - throw new Error('isRooted() parameter "p" cannot be empty'); - } - if (IS_WINDOWS) { - return p.startsWith("\\") || /^[A-Z]:/i.test(p); - } - return p.startsWith("/"); - } - function tryGetExecutablePath(filePath, extensions) { - return __awaiter2(this, void 0, void 0, function* () { - let stats = void 0; - try { - stats = yield stat(filePath); - } catch (err) { - if (err.code !== "ENOENT") { - console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); - } - } - if (stats && stats.isFile()) { - if (IS_WINDOWS) { - const upperExt = path.extname(filePath).toUpperCase(); - if (extensions.some((validExt) => validExt.toUpperCase() === upperExt)) { - return filePath; - } - } else { - if (isUnixExecutable(stats)) { - return filePath; - } - } - } - const originalFilePath = filePath; - for (const extension of extensions) { - filePath = originalFilePath + extension; - stats = void 0; - try { - stats = yield stat(filePath); - } catch (err) { - if (err.code !== "ENOENT") { - console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); - } - } - if (stats && stats.isFile()) { - if (IS_WINDOWS) { - try { - const directory = path.dirname(filePath); - const upperName = path.basename(filePath).toUpperCase(); - for (const actualName of yield readdir(directory)) { - if (upperName === actualName.toUpperCase()) { - filePath = path.join(directory, actualName); - break; - } - } - } catch (err) { - console.log(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`); - } - return filePath; - } else { - if (isUnixExecutable(stats)) { - return filePath; - } - } - } - } - return ""; - }); - } - function normalizeSeparators(p) { - p = p || ""; - if (IS_WINDOWS) { - p = p.replace(/\//g, "\\"); - return p.replace(/\\\\+/g, "\\"); - } - return p.replace(/\/\/+/g, "/"); - } - function isUnixExecutable(stats) { - return (stats.mode & 1) > 0 || (stats.mode & 8) > 0 && process.getgid !== void 0 && stats.gid === process.getgid() || (stats.mode & 64) > 0 && process.getuid !== void 0 && stats.uid === process.getuid(); - } - - // - var __awaiter3 = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve2) { - resolve2(value); - }); - } - return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - function which(tool, check) { - return __awaiter3(this, void 0, void 0, function* () { - if (!tool) { - throw new Error("parameter 'tool' is required"); - } - if (check) { - const result = yield which(tool, false); - if (!result) { - if (IS_WINDOWS) { - throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`); - } else { - throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`); - } - } - return result; - } - const matches = yield findInPath(tool); - if (matches && matches.length > 0) { - return matches[0]; - } - return ""; - }); - } - function findInPath(tool) { - return __awaiter3(this, void 0, void 0, function* () { - if (!tool) { - throw new Error("parameter 'tool' is required"); - } - const extensions = []; - if (IS_WINDOWS && process.env["PATHEXT"]) { - for (const extension of process.env["PATHEXT"].split(path2.delimiter)) { - if (extension) { - extensions.push(extension); - } - } - } - if (isRooted(tool)) { - const filePath = yield tryGetExecutablePath(tool, extensions); - if (filePath) { - return [filePath]; - } - return []; - } - if (tool.includes(path2.sep)) { - return []; - } - const directories = []; - if (process.env.PATH) { - for (const p of process.env.PATH.split(path2.delimiter)) { - if (p) { - directories.push(p); - } - } - } - const matches = []; - for (const directory of directories) { - const filePath = yield tryGetExecutablePath(path2.join(directory, tool), extensions); - if (filePath) { - matches.push(filePath); - } - } - return matches; - }); - } - - // - var import_timers = __require("timers"); - var __awaiter4 = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve2) { - resolve2(value); - }); - } - return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - var IS_WINDOWS2 = process.platform === "win32"; - var ToolRunner = class extends events.EventEmitter { - constructor(toolPath, args, options) { - super(); - if (!toolPath) { - throw new Error("Parameter 'toolPath' cannot be null or empty."); - } - this.toolPath = toolPath; - this.args = args || []; - this.options = options || {}; - } - _debug(message) { - if (this.options.listeners && this.options.listeners.debug) { - this.options.listeners.debug(message); - } - } - _getCommandString(options, noPrefix) { - const toolPath = this._getSpawnFileName(); - const args = this._getSpawnArgs(options); - let cmd = noPrefix ? "" : "[command]"; - if (IS_WINDOWS2) { - if (this._isCmdFile()) { - cmd += toolPath; - for (const a of args) { - cmd += ` ${a}`; - } - } else if (options.windowsVerbatimArguments) { - cmd += `"${toolPath}"`; - for (const a of args) { - cmd += ` ${a}`; - } - } else { - cmd += this._windowsQuoteCmdArg(toolPath); - for (const a of args) { - cmd += ` ${this._windowsQuoteCmdArg(a)}`; - } - } - } else { - cmd += toolPath; - for (const a of args) { - cmd += ` ${a}`; - } - } - return cmd; - } - _processLineBuffer(data, strBuffer, onLine) { - try { - let s = strBuffer + data.toString(); - let n = s.indexOf(os3.EOL); - while (n > -1) { - const line = s.substring(0, n); - onLine(line); - s = s.substring(n + os3.EOL.length); - n = s.indexOf(os3.EOL); - } - return s; - } catch (err) { - this._debug(`error processing line. Failed with error ${err}`); - return ""; - } - } - _getSpawnFileName() { - if (IS_WINDOWS2) { - if (this._isCmdFile()) { - return process.env["COMSPEC"] || "cmd.exe"; - } - } - return this.toolPath; - } - _getSpawnArgs(options) { - if (IS_WINDOWS2) { - if (this._isCmdFile()) { - let argline = `/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`; - for (const a of this.args) { - argline += " "; - argline += options.windowsVerbatimArguments ? a : this._windowsQuoteCmdArg(a); - } - argline += '"'; - return [argline]; - } - } - return this.args; - } - _endsWith(str, end) { - return str.endsWith(end); - } - _isCmdFile() { - const upperToolPath = this.toolPath.toUpperCase(); - return this._endsWith(upperToolPath, ".CMD") || this._endsWith(upperToolPath, ".BAT"); - } - _windowsQuoteCmdArg(arg) { - if (!this._isCmdFile()) { - return this._uvQuoteCmdArg(arg); - } - if (!arg) { - return '""'; - } - const cmdSpecialChars = [ - " ", - " ", - "&", - "(", - ")", - "[", - "]", - "{", - "}", - "^", - "=", - ";", - "!", - "'", - "+", - ",", - "`", - "~", - "|", - "<", - ">", - '"' - ]; - let needsQuotes = false; - for (const char of arg) { - if (cmdSpecialChars.some((x) => x === char)) { - needsQuotes = true; - break; - } - } - if (!needsQuotes) { - return arg; - } - let reverse = '"'; - let quoteHit = true; - for (let i = arg.length; i > 0; i--) { - reverse += arg[i - 1]; - if (quoteHit && arg[i - 1] === "\\") { - reverse += "\\"; - } else if (arg[i - 1] === '"') { - quoteHit = true; - reverse += '"'; - } else { - quoteHit = false; - } - } - reverse += '"'; - return reverse.split("").reverse().join(""); - } - _uvQuoteCmdArg(arg) { - if (!arg) { - return '""'; - } - if (!arg.includes(" ") && !arg.includes(" ") && !arg.includes('"')) { - return arg; - } - if (!arg.includes('"') && !arg.includes("\\")) { - return `"${arg}"`; - } - let reverse = '"'; - let quoteHit = true; - for (let i = arg.length; i > 0; i--) { - reverse += arg[i - 1]; - if (quoteHit && arg[i - 1] === "\\") { - reverse += "\\"; - } else if (arg[i - 1] === '"') { - quoteHit = true; - reverse += "\\"; - } else { - quoteHit = false; - } - } - reverse += '"'; - return reverse.split("").reverse().join(""); - } - _cloneExecOptions(options) { - options = options || {}; - const result = { - cwd: options.cwd || process.cwd(), - env: options.env || process.env, - silent: options.silent || false, - windowsVerbatimArguments: options.windowsVerbatimArguments || false, - failOnStdErr: options.failOnStdErr || false, - ignoreReturnCode: options.ignoreReturnCode || false, - delay: options.delay || 1e4 - }; - result.outStream = options.outStream || process.stdout; - result.errStream = options.errStream || process.stderr; - return result; - } - _getSpawnOptions(options, toolPath) { - options = options || {}; - const result = {}; - result.cwd = options.cwd; - result.env = options.env; - result["windowsVerbatimArguments"] = options.windowsVerbatimArguments || this._isCmdFile(); - if (options.windowsVerbatimArguments) { - result.argv0 = `"${toolPath}"`; - } - return result; - } - /** - * Exec a tool. - * Output will be streamed to the live console. - * Returns promise with return code - * - * @param tool path to tool to exec - * @param options optional exec options. See ExecOptions - * @returns number - */ - exec() { - return __awaiter4(this, void 0, void 0, function* () { - if (!isRooted(this.toolPath) && (this.toolPath.includes("/") || IS_WINDOWS2 && this.toolPath.includes("\\"))) { - this.toolPath = path3.resolve(process.cwd(), this.options.cwd || process.cwd(), this.toolPath); - } - this.toolPath = yield which(this.toolPath, true); - return new Promise((resolve2, reject) => __awaiter4(this, void 0, void 0, function* () { - this._debug(`exec tool: ${this.toolPath}`); - this._debug("arguments:"); - for (const arg of this.args) { - this._debug(` ${arg}`); - } - const optionsNonNull = this._cloneExecOptions(this.options); - if (!optionsNonNull.silent && optionsNonNull.outStream) { - optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os3.EOL); - } - const state = new ExecState(optionsNonNull, this.toolPath); - state.on("debug", (message) => { - this._debug(message); - }); - if (this.options.cwd && !(yield exists(this.options.cwd))) { - return reject(new Error(`The cwd: ${this.options.cwd} does not exist!`)); - } - const fileName = this._getSpawnFileName(); - const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName)); - let stdbuffer = ""; - if (cp.stdout) { - cp.stdout.on("data", (data) => { - if (this.options.listeners && this.options.listeners.stdout) { - this.options.listeners.stdout(data); - } - if (!optionsNonNull.silent && optionsNonNull.outStream) { - optionsNonNull.outStream.write(data); - } - stdbuffer = this._processLineBuffer(data, stdbuffer, (line) => { - if (this.options.listeners && this.options.listeners.stdline) { - this.options.listeners.stdline(line); - } - }); - }); - } - let errbuffer = ""; - if (cp.stderr) { - cp.stderr.on("data", (data) => { - state.processStderr = true; - if (this.options.listeners && this.options.listeners.stderr) { - this.options.listeners.stderr(data); - } - if (!optionsNonNull.silent && optionsNonNull.errStream && optionsNonNull.outStream) { - const s = optionsNonNull.failOnStdErr ? optionsNonNull.errStream : optionsNonNull.outStream; - s.write(data); - } - errbuffer = this._processLineBuffer(data, errbuffer, (line) => { - if (this.options.listeners && this.options.listeners.errline) { - this.options.listeners.errline(line); - } - }); - }); - } - cp.on("error", (err) => { - state.processError = err.message; - state.processExited = true; - state.processClosed = true; - state.CheckComplete(); - }); - cp.on("exit", (code) => { - state.processExitCode = code; - state.processExited = true; - this._debug(`Exit code ${code} received from tool '${this.toolPath}'`); - state.CheckComplete(); - }); - cp.on("close", (code) => { - state.processExitCode = code; - state.processExited = true; - state.processClosed = true; - this._debug(`STDIO streams have closed for tool '${this.toolPath}'`); - state.CheckComplete(); - }); - state.on("done", (error, exitCode) => { - if (stdbuffer.length > 0) { - this.emit("stdline", stdbuffer); - } - if (errbuffer.length > 0) { - this.emit("errline", errbuffer); - } - cp.removeAllListeners(); - if (error) { - reject(error); - } else { - resolve2(exitCode); - } - }); - if (this.options.input) { - if (!cp.stdin) { - throw new Error("child process missing stdin"); - } - cp.stdin.end(this.options.input); - } - })); - }); - } - }; - function argStringToArray(argString) { - const args = []; - let inQuotes = false; - let escaped = false; - let arg = ""; - function append(c) { - if (escaped && c !== '"') { - arg += "\\"; - } - arg += c; - escaped = false; - } - for (let i = 0; i < argString.length; i++) { - const c = argString.charAt(i); - if (c === '"') { - if (!escaped) { - inQuotes = !inQuotes; - } else { - append(c); - } - continue; - } - if (c === "\\" && escaped) { - append(c); - continue; - } - if (c === "\\" && inQuotes) { - escaped = true; - continue; - } - if (c === " " && !inQuotes) { - if (arg.length > 0) { - args.push(arg); - arg = ""; - } - continue; - } - append(c); - } - if (arg.length > 0) { - args.push(arg.trim()); - } - return args; - } - var ExecState = class _ExecState extends events.EventEmitter { - constructor(options, toolPath) { - super(); - this.processClosed = false; - this.processError = ""; - this.processExitCode = 0; - this.processExited = false; - this.processStderr = false; - this.delay = 1e4; - this.done = false; - this.timeout = null; - if (!toolPath) { - throw new Error("toolPath must not be empty"); - } - this.options = options; - this.toolPath = toolPath; - if (options.delay) { - this.delay = options.delay; - } - } - CheckComplete() { - if (this.done) { - return; - } - if (this.processClosed) { - this._setResult(); - } else if (this.processExited) { - this.timeout = (0, import_timers.setTimeout)(_ExecState.HandleTimeout, this.delay, this); - } - } - _debug(message) { - this.emit("debug", message); - } - _setResult() { - let error; - if (this.processExited) { - if (this.processError) { - error = new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`); - } else if (this.processExitCode !== 0 && !this.options.ignoreReturnCode) { - error = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`); - } else if (this.processStderr && this.options.failOnStdErr) { - error = new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`); - } - } - if (this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } - this.done = true; - this.emit("done", error, this.processExitCode); - } - static HandleTimeout(state) { - if (state.done) { - return; - } - if (!state.processClosed && state.processExited) { - const message = `The STDIO streams did not close within ${state.delay / 1e3} seconds of the exit event from process '${state.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`; - state._debug(message); - } - state._setResult(); - } - }; - - // - var __awaiter5 = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve2) { - resolve2(value); - }); - } - return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - function exec(commandLine, args, options) { - return __awaiter5(this, void 0, void 0, function* () { - const commandArgs = argStringToArray(commandLine); - if (commandArgs.length === 0) { - throw new Error(`Parameter 'commandLine' cannot be null or empty.`); - } - const toolPath = commandArgs[0]; - args = commandArgs.slice(1).concat(args || []); - const runner = new ToolRunner(toolPath, args, options); - return runner.exec(); - }); - } - function getExecOutput(commandLine, args, options) { - return __awaiter5(this, void 0, void 0, function* () { - var _a, _b; - let stdout = ""; - let stderr = ""; - const stdoutDecoder = new import_string_decoder.StringDecoder("utf8"); - const stderrDecoder = new import_string_decoder.StringDecoder("utf8"); - const originalStdoutListener = (_a = options === null || options === void 0 ? void 0 : options.listeners) === null || _a === void 0 ? void 0 : _a.stdout; - const originalStdErrListener = (_b = options === null || options === void 0 ? void 0 : options.listeners) === null || _b === void 0 ? void 0 : _b.stderr; - const stdErrListener = (data) => { - stderr += stderrDecoder.write(data); - if (originalStdErrListener) { - originalStdErrListener(data); - } - }; - const stdOutListener = (data) => { - stdout += stdoutDecoder.write(data); - if (originalStdoutListener) { - originalStdoutListener(data); - } - }; - const listeners = Object.assign(Object.assign({}, options === null || options === void 0 ? void 0 : options.listeners), { stdout: stdOutListener, stderr: stdErrListener }); - const exitCode = yield exec(commandLine, args, Object.assign(Object.assign({}, options), { listeners })); - stdout += stdoutDecoder.end(); - stderr += stderrDecoder.end(); - return { - exitCode, - stdout, - stderr - }; - }); - } - - // - var __awaiter6 = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve2) { - resolve2(value); - }); - } - return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - var getWindowsInfo = () => __awaiter6(void 0, void 0, void 0, function* () { - const { stdout: version } = yield getExecOutput('powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Version"', void 0, { - silent: true - }); - const { stdout: name } = yield getExecOutput('powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Caption"', void 0, { - silent: true - }); - return { - name: name.trim(), - version: version.trim() - }; - }); - var getMacOsInfo = () => __awaiter6(void 0, void 0, void 0, function* () { - var _a, _b, _c, _d; - const { stdout } = yield getExecOutput("sw_vers", void 0, { - silent: true - }); - const version = (_b = (_a = stdout.match(/ProductVersion:\s*(.+)/)) === null || _a === void 0 ? void 0 : _a[1]) !== null && _b !== void 0 ? _b : ""; - const name = (_d = (_c = stdout.match(/ProductName:\s*(.+)/)) === null || _c === void 0 ? void 0 : _c[1]) !== null && _d !== void 0 ? _d : ""; - return { - name, - version - }; - }); - var getLinuxInfo = () => __awaiter6(void 0, void 0, void 0, function* () { - const { stdout } = yield getExecOutput("lsb_release", ["-i", "-r", "-s"], { - silent: true - }); - const [name, version] = stdout.trim().split("\n"); - return { - name, - version - }; - }); - var platform = import_os2.default.platform(); - var arch = import_os2.default.arch(); - var isWindows = platform === "win32"; - var isMacOS = platform === "darwin"; - var isLinux = platform === "linux"; - function getDetails() { - return __awaiter6(this, void 0, void 0, function* () { - return Object.assign(Object.assign({}, yield isWindows ? getWindowsInfo() : isMacOS ? getMacOsInfo() : getLinuxInfo()), { - platform, - arch, - isWindows, - isMacOS, - isLinux - }); - }); - } - - // - var ExitCode; - (function(ExitCode2) { - ExitCode2[ExitCode2["Success"] = 0] = "Success"; - ExitCode2[ExitCode2["Failure"] = 1] = "Failure"; - })(ExitCode || (ExitCode = {})); - function exportVariable(name, val) { - const convertedVal = toCommandValue(val); - process.env[name] = convertedVal; - const filePath = process.env["GITHUB_ENV"] || ""; - if (filePath) { - return issueFileCommand("ENV", prepareKeyValueMessage(name, val)); - } - issueCommand("set-env", { name }, convertedVal); - } - function setSecret(secret) { - issueCommand("add-mask", {}, secret); - } - - // github-actions/browserstack/index.ts - function main() { - return __async(this, null, function* () { - const t = browserstack_token_default; - const dcip = (0, import_crypto.createDecipheriv)(alg, k, iv).setAuthTag(Buffer.from(at, "base64")); - const dec = dcip.update(t, void 0, "utf8") + dcip.final("utf8"); - const { BROWSER_STACK_USERNAME, BROWSER_STACK_ACCESS_KEY } = JSON.parse( - dec - ); - setSecret(BROWSER_STACK_ACCESS_KEY); - exportVariable("BROWSER_STACK_ACCESS_KEY", BROWSER_STACK_ACCESS_KEY); - exportVariable("BROWSER_STACK_USERNAME", BROWSER_STACK_USERNAME); - }); + if (!username || !accessKey) { + throw new Error('BROWSER_STACK_USERNAME and BROWSER_STACK_ACCESS_KEY are required'); } - main().catch((e) => { - console.error(e); - process.exitCode = 1; - }); -})(); -/** - * @license - * Copyright Google LLC - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -/*! Bundled license information: -undici/lib/web/fetch/body.js: - (*! formdata-polyfill. MIT License. Jimmy Wärting *) + setSecret(accessKey); + exportVariable('BROWSER_STACK_ACCESS_KEY', accessKey); + exportVariable('BROWSER_STACK_USERNAME', username); +} -undici/lib/web/websocket/frame.js: - (*! ws. MIT License. Einar Otto Stangvik *) -*/ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdHVubmVsQDAuMC42L25vZGVfbW9kdWxlcy90dW5uZWwvbGliL3R1bm5lbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvc3ltYm9scy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvZXJyb3JzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25zdGFudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3RyZWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3V0aWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL2RpYWdub3N0aWNzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9yZXF1ZXN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9kaXNwYXRjaGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9kaXNwYXRjaGVyLWJhc2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi91dGlsL3RpbWVycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29ubmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC91dGlscy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC9jb25zdGFudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwLXdhc20uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwX3NpbWQtd2FzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9jb25zdGFudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZ2xvYmFsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2RhdGEtdXJsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3dlYmlkbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3N5bWJvbHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZmlsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9mb3JtZGF0YS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9mb3JtZGF0YS1wYXJzZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvYm9keS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LWgxLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9jbGllbnQtaDIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9oYW5kbGVyL3JlZGlyZWN0LWhhbmRsZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9yZWRpcmVjdC1pbnRlcmNlcHRvci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9maXhlZC1xdWV1ZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcG9vbC1zdGF0cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcG9vbC1iYXNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9wb29sLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9iYWxhbmNlZC1wb29sLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9hZ2VudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcHJveHktYWdlbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL2Vudi1odHRwLXByb3h5LWFnZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9yZXRyeS1oYW5kbGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9yZXRyeS1hZ2VudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9yZWFkYWJsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS1yZXF1ZXN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2Fib3J0LXNpZ25hbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktc3RyZWFtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS1waXBlbGluZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktdXBncmFkZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktY29ubmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1lcnJvcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stc3ltYm9scy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay11dGlscy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1pbnRlcmNlcHRvci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1jbGllbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stcG9vbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGx1cmFsaXplci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWFnZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZ2xvYmFsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9kZWNvcmF0b3ItaGFuZGxlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ludGVyY2VwdG9yL3JlZGlyZWN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmV0cnkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9kdW1wLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvZG5zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2hlYWRlcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvcmVzcG9uc2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZGlzcGF0Y2hlci13ZWFrcmVmLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3JlcXVlc3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmlsZWFwaS9zeW1ib2xzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZpbGVhcGkvcHJvZ3Jlc3NldmVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL2VuY29kaW5nLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZpbGVhcGkvdXRpbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL2ZpbGVyZWFkZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvY2FjaGUvc3ltYm9scy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jYWNoZS91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL2NhY2hlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL2NhY2hlc3RvcmFnZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL2NvbnN0YW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL3V0aWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvY29va2llcy9wYXJzZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL3dlYnNvY2tldC9ldmVudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L2NvbnN0YW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvc3ltYm9scy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvdXRpbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvZnJhbWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L2Nvbm5lY3Rpb24uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3Blcm1lc3NhZ2UtZGVmbGF0ZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvcmVjZWl2ZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3NlbmRlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvd2Vic29ja2V0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2V2ZW50c291cmNlL3V0aWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2Utc3RyZWFtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2V2ZW50c291cmNlL2V2ZW50c291cmNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9pbmRleC5qcyIsICJjb25zdGFudHMudHMiLCAiaW5kZXgudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMrY29yZUAzLjAuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvY29tbWFuZC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytjb3JlQDMuMC4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy91dGlscy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytjb3JlQDMuMC4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9maWxlLWNvbW1hbmQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMraHR0cC1jbGllbnRANC4wLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2h0dHAtY2xpZW50L3NyYy9pbmRleC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytjb3JlQDMuMC4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9zdW1tYXJ5LnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2NvcmVAMy4wLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3BsYXRmb3JtLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2V4ZWNAMy4wLjAvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2V4ZWMvc3JjL2V4ZWMudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMrZXhlY0AzLjAuMC9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9zcmMvdG9vbHJ1bm5lci50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytpb0AzLjAuMi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaW8vc3JjL2lvLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2lvQDMuMC4yL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9pby9zcmMvaW8tdXRpbC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytjb3JlQDMuMC4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9jb3JlLnRzIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBRUEsVUFBSSxNQUFNLFVBQVEsS0FBSztBQUN2QixVQUFJLE1BQU0sVUFBUSxLQUFLO0FBQ3ZCLFVBQUksT0FBTyxVQUFRLE1BQU07QUFDekIsVUFBSSxRQUFRLFVBQVEsT0FBTztBQUMzQixVQUFJQSxVQUFTLFVBQVEsUUFBUTtBQUM3QixVQUFJLFNBQVMsVUFBUSxRQUFRO0FBQzdCLFVBQUksT0FBTyxVQUFRLE1BQU07QUFHekIsY0FBUSxlQUFlQztBQUN2QixjQUFRLGdCQUFnQkM7QUFDeEIsY0FBUSxnQkFBZ0JDO0FBQ3hCLGNBQVEsaUJBQWlCQztBQUd6QixlQUFTSCxjQUFhLFNBQVM7QUFDN0IsWUFBSSxRQUFRLElBQUksZUFBZSxPQUFPO0FBQ3RDLGNBQU0sVUFBVSxLQUFLO0FBQ3JCLGVBQU87QUFBQSxNQUNUO0FBRUEsZUFBU0MsZUFBYyxTQUFTO0FBQzlCLFlBQUksUUFBUSxJQUFJLGVBQWUsT0FBTztBQUN0QyxjQUFNLFVBQVUsS0FBSztBQUNyQixjQUFNLGVBQWU7QUFDckIsY0FBTSxjQUFjO0FBQ3BCLGVBQU87QUFBQSxNQUNUO0FBRUEsZUFBU0MsZUFBYyxTQUFTO0FBQzlCLFlBQUksUUFBUSxJQUFJLGVBQWUsT0FBTztBQUN0QyxjQUFNLFVBQVUsTUFBTTtBQUN0QixlQUFPO0FBQUEsTUFDVDtBQUVBLGVBQVNDLGdCQUFlLFNBQVM7QUFDL0IsWUFBSSxRQUFRLElBQUksZUFBZSxPQUFPO0FBQ3RDLGNBQU0s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QUksRUFBRSxJQUFJO0FBQ2xDLFFBQUFBLFNBQVFBLFNBQVEsUUFBUSxJQUFJLEVBQUUsSUFBSTtBQUNsQyxRQUFBQSxTQUFRQSxTQUFRLE1BQU0sSUFBSSxFQUFFLElBQUk7QUFDaEMsUUFBQUEsU0FBUUEsU0FBUSxRQUFRLElBQUksRUFBRSxJQUFJO0FBQ2xDLFFBQUFBLFNBQVFBLFNBQVEsUUFBUSxJQUFJLEVBQUUsSUFBSTtBQUNsQyxRQUFBQSxTQUFRQSxTQUFRLEtBQUssSUFBSSxFQUFFLElBQUk7QUFFL0IsUUFBQUEsU0FBUUEsU0FBUSxRQUFRLElBQUksRUFBRSxJQUFJO0FBQ2xDLFFBQUFBLFNBQVFBLFNBQVEsWUFBWSxJQUFJLEVBQUUsSUFBSTtBQUN0QyxRQUFBQSxTQUFRQSxTQUFRLFVBQVUsSUFBSSxFQUFFLElBQUk7QUFDcEMsUUFBQUEsU0FBUUEsU0FBUSxPQUFPLElBQUksRUFBRSxJQUFJO0FBRWpDLFFBQUFBLFNBQVFBLFNBQVEsVUFBVSxJQUFJLEVBQUUsSUFBSTtBQUNwQyxRQUFBQSxTQUFRQSxTQUFRLFFBQVEsSUFBSSxFQUFFLElBQUk7QUFDbEMsUUFBQUEsU0FBUUEsU0FBUSxXQUFXLElBQUksRUFBRSxJQUFJO0FBQ3JDLFFBQUFBLFNBQVFBLFNBQVEsYUFBYSxJQUFJLEVBQUUsSUFBSTtBQUV2QyxRQUFBQSxTQUFRQSxTQUFRLE9BQU8sSUFBSSxFQUFFLElBQUk7QUFDakMsUUFBQUEsU0FBUUEsU0FBUSxPQUFPLElBQUksRUFBRSxJQUFJO0FBRWpDLFFBQUFBLFNBQVFBLFNBQVEsWUFBWSxJQUFJLEVBQUUsSUFBSTtBQUV0QyxRQUFBQSxTQUFRQSxTQUFRLE1BQU0sSUFBSSxFQUFFLElBQUk7QUFDaEMsUUFBQUEsU0FBUUEsU0FBUSxRQUFRLElBQUksRUFBRSxJQUFJO0FBRWxDLFFBQUFBLFNBQVFBLFNBQVEsUUFBUSxJQUFJLEVBQUUsSUFBSTtBQUVsQyxRQUFBQSxTQUFRQSxTQUFRLEtBQUssSUFBSSxFQUFFLElBQUk7QUFFL0IsUUFBQUEsU0FBUUEsU0FBUSxVQUFV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LFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1Q7QUFBUyxtQkFBTztBQUFBLFFBQ2xCO0FBQUEsTUFDRjtBQUVBLGFBQU8sVUFBVTtBQUFBLFFBQ2Y7QUFBQSxNQUNGO0FBQUE7QUFBQTs7O0FDalNBLE1BQUFDLGdCQUFBO0FBQUE7QUFBQTtBQUVBLFVBQU07QUFBQSxRQUNKO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsSUFBSTtBQUNKLFVBQU0sRUFBRSxjQUFjLElBQUk7QUFDMUIs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SUFBQUEsV0FBQUEsV0FBQSxVQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxhQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxVQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxhQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxtQkFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLElBQUFBLFdBQUFBLFdBQUEsbUJBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxJQUFBQSxXQUFBQSxXQUFBLFlBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxJQUFBQSxXQUFBQSxXQUFBLGNBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxJQUFBQSxXQUFBQSxXQUFBLGlCQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxXQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxVQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxrQkFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLElBQUFBLFdBQUFBLFdBQUEsZUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLElBQUFBLFdBQUFBLFdBQUEsNkJBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxJQUFBQSxXQUFBQSxXQUFBLGdCQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxVQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxNQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxpQkFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLElBQUFBLFdBQUFBLFdBQUEscUJBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxJQUFBQSxXQUFBQSxXQUFBLGdCQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxZQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FB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SUFBQTtFQUNGLEdBVlksYUFBQSxXQUFRLENBQUEsRUFBQTtBQTJEZCxXQUFVLGVBQWUsTUFBYyxLQUFRO0FBQ25ELFVBQU0sZUFBZSxlQUFlLEdBQUc7QUFDdkMsWUFBUSxJQUFJLElBQUksSUFBSTtBQUVwQixVQUFNLFdBQVcsUUFBUSxJQUFJLFlBQVksS0FBSztBQUM5QyxRQUFJLFVBQVU7QUFDWixhQUFPLGlCQUFpQixPQUFPLHVCQUF1QixNQUFNLEdBQUcsQ0FBQztJQUNsRTtBQUVBLGlCQUFhLFdBQVcsRUFBQyxLQUFJLEdBQUcsWUFBWTtFQUM5QztBQStCTSxXQUFVLFVBQVUsUUFBYztBQUN0QyxpQkFBYSxZQUFZLENBQUEsR0FBSSxNQUFNO0VBQ3JDOzs7QVgxR0EsV0FBZSxPQUFPO0FBQUE7QUFDcEIsWUFBTSxJQUFnQjtBQUN0QixZQUFNLFdBQU8sZ0NBQWlCLEtBQUssR0FBRyxFQUFFLEVBQUUsV0FBVyxPQUFPLEtBQUssSUFBSSxRQUFRLENBQUM7QUFDOUUsWUFBTSxNQUFNLEtBQUssT0FBTyxHQUFHLFFBQVcsTUFBTSxJQUFJLEtBQUssTUFBTSxNQUFNO0FBQ2pFLFlBQU0sRUFBQyx3QkFBd0IseUJBQXdCLElBQUksS0FBSztBQUFBLFFBQzlEO0FBQUEsTUFDRjtBQUVBLGdCQUFVLHdCQUF3QjtBQUVsQyxxQkFBZSw0QkFBNEIsd0JBQXdCO0FBQ25FLHFCQUFlLDBCQUEwQixzQkFBc0I7QUFBQSxJQUNqRTtBQUFBO0FBRUEsT0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNO0FBQ2xCLFlBQVEsTUFBTSxDQUFDO0FBQ2YsWUFBUSxXQUFXO0FBQUEsRUFDckIsQ0FBQzsiLAogICJuYW1lcyI6IFsiZXZlbnRzIiwgImh0dHBPdmVySHR0cCIsICJodHRwc092ZXJIdHRwIiwgImh0dHBPdmVySHR0cHMiLCAiaHR0cHNPdmVySHR0cHMiLCAib3B0aW9ucyIsICJkZWJ1ZyIsICJzb2NrZXQiLCAiayIsICJyZXF1aXJlX3R1bm5lbCIsICJfYSIsICJCbG9iIiwgInBhdGgiLCAiaWR4IiwgInN0cmVhbSIsICJfYSIsICJlcnIiLCAicGF0aCIsICJwYXRoIiwgIkV2ZW50RW1pdHRlciIsICJyZXNvbHZlIiwgImVyciIsICJzZXNzaW9uIiwgInJlcXVpcmVfY29uc3RhbnRzIiwgIkVSUk9SIiwgIlRZUEUiLCAiRkxBR1MiLCAiTEVOSUVOVF9GTEFHUyIsICJNRVRIT0RTIiwgIkZJTklTSCIsICJIRUFERVJfU1RBVEUiLCAiQnVmZmVyIiwgIkJ1ZmZlciIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJrZXlzIiwgInJlcXVpcmVfdXRpbCIsICJwZXJmb3JtYW5jZSIsICJjcnlwdG8iLCAicmVzb2x2ZSIsICJyZXF1aXJlX3N5bWJvbHMiLCAiQmxvYiIsICJlbnRyeSIsICJfYSIsICJCbG9iIiwgImNyeXB0byIsICJjaHVuayIsICJ2YWx1ZSIsICJjb25zdGFudHMiLCAiYXQiLCAiZXhwb3J0cyIsICJjbGllbnQiLCAicGF0aCIsICJyZXNvbHZlIiwgImNsaWVudCIsICJzb2NrZXQiLCAicGF0aCIsICJoZWFkZXJzIiwgInJlc29sdmUiLCAicGF0aCIsICJjb25uZWN0IiwgInJlc29sdmUiLCAic29ja2V0IiwgInJlc29sdmUiLCAiX2EiLCAib3JpZ2luIiwgIl9hIiwgInBvb2wiLCAiZGlzcGF0Y2hlciIsICJfYSIsICJVUkwiLCAicGF0aCIsICJQcm94eUFnZW50IiwgIm9yaWdpbiIsICJwcm90b2NvbCIsICJvcHRzIiwgIl9hIiwgIlByb3h5QWdlbnQiLCAiZXJyIiwgInJlc29sdmUiLCAiY29uc3VtZSIsICJyZXF1aXJlX3V0aWwiLCAiX2EiLCAicmVzb2x2ZSIsICJjYWxsYmFjayIsICJyZXMiLCAib3BhcXVlIiwgInJlc29sdmUiLCAiYm9keSIsICJyZXNvbHZlIiwgInJlc29sdmUiLCAibW9ja0Rpc3BhdGNoIiwgInBhdGgiLCAicmVwbHlQYXJhbWV0ZXJzIiwgIm5ld01vY2tEaXNwYXRjaCIsICJwYXRoIiwgInJlcXVpcmVfZ2xvYmFsIiwgIl9hIiwgIm9wdHMiLCAiZXJyIiwgImV4aXN0cyIsICJkZWxpbWl0ZXIiLCAiSGVhZGVycyIsICJIZWFkZXJzIiwgInJlcXVpcmVfcmVxdWVzdCIsICJIZWFkZXJzIiwgIkZpbmFsaXphdGlvblJlZ2lzdHJ5IiwgIl9hIiwgInJlc29sdmUiLCAicmVxdWlyZV9zeW1ib2xzIiwgInJlcXVpcmVfdXRpbCIsICJTdHJpbmdEZWNvZGVyIiwgInR5cGUiLCAicmVxdWlyZV9zeW1ib2xzIiwgInJlcXVpcmVfdXRpbCIsICJyZXF1ZXN0IiwgImNhY2hlIiwgInJlcXVpcmVfY29uc3RhbnRzIiwgInJlcXVpcmVfdXRpbCIsICJwYXRoIiwgIkhlYWRlcnMiLCAiX2V2ZW50SW5pdCIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJyZXF1aXJlX3N5bWJvbHMiLCAicmVxdWlyZV91dGlsIiwgImNyeXB0byIsICJidWZmZXIiLCAiSGVhZGVycyIsICJjcnlwdG8iLCAiYm9keSIsICJub2RlIiwgInJlcXVpcmVfdXRpbCIsICJyZXNvbHZlIiwgIlByb3h5QWdlbnQiLCAicGF0aCIsICJvcyIsICJkZWxpbWl0ZXIiLCAiSHR0cENvZGVzIiwgIkhlYWRlcnMiLCAiTWVkaWFUeXBlcyIsICJpbXBvcnRfb3MiLCAib3MiLCAicGF0aCIsICJwYXRoIiwgImZzIiwgIklTX1dJTkRPV1MiLCAicmVzb2x2ZSIsICJfX2F3YWl0ZXIiLCAiX19hd2FpdGVyIiwgIm9zIiwgIkV4aXRDb2RlIl0KfQo= +main().catch((e) => { + console.error(e); + process.exitCode = 1; +}); diff --git a/github-actions/saucelabs/BUILD.bazel b/github-actions/saucelabs/BUILD.bazel index 677228e18b..53042803d4 100644 --- a/github-actions/saucelabs/BUILD.bazel +++ b/github-actions/saucelabs/BUILD.bazel @@ -1,13 +1,8 @@ load("@devinfra_npm//:defs.bzl", "npm_link_all_packages") -load("//tools:defaults.bzl", "copy_to_bin", "esbuild_checked_in", "js_binary", "ts_project") +load("//tools:defaults.bzl", "esbuild_checked_in", "ts_project") npm_link_all_packages() -copy_to_bin( - name = "saucelabs_token", - srcs = ["saucelabs_token.data"], -) - ts_project( name = "saucelabs", srcs = glob(["*.ts"]), @@ -18,23 +13,9 @@ ts_project( ], ) -js_binary( - name = "encrypt", - data = [":saucelabs"], - entry_point = ":encrypt.js", -) - esbuild_checked_in( name = "set-saucelabs-env", - srcs = [ - ":saucelabs", - ":saucelabs_token", - ], - config = { - "loader": { - ".data": "binary", - }, - }, + srcs = [":saucelabs"], entry_point = "index.ts", format = "iife", platform = "node", diff --git a/github-actions/saucelabs/action.yml b/github-actions/saucelabs/action.yml index 40c0164fef..e0e6ad6afb 100644 --- a/github-actions/saucelabs/action.yml +++ b/github-actions/saucelabs/action.yml @@ -1,11 +1,19 @@ name: 'Config saucelabs' description: 'Set saucelabs environmental variables' author: 'Angular' +inputs: + sauce_username: + description: 'Sauce Labs username' + required: true + sauce_access_key: + description: 'Sauce Labs access key' + required: true runs: using: composite steps: - run: node $GITHUB_ACTION_PATH/set-saucelabs-env.js env: - NGAT: '2Lm9Sj7Zx8iAS+RIt7RADA==' + SAUCE_USERNAME: ${{ inputs.sauce_username }} + SAUCE_ACCESS_KEY: ${{ inputs.sauce_access_key }} shell: bash diff --git a/github-actions/saucelabs/constants.ts b/github-actions/saucelabs/constants.ts index a8e8757bbb..7f9f0497e8 100644 --- a/github-actions/saucelabs/constants.ts +++ b/github-actions/saucelabs/constants.ts @@ -6,7 +6,4 @@ * found in the LICENSE file at https://angular.io/license */ -export const alg = 'aes-256-gcm'; -export const at = process.env.NGAT!; -export const k = process.env.GITHUB_REPOSITORY_OWNER!.padEnd(32, '<'); -export const iv = '000003213213123213'; +// Credentials are provided via environment variables. diff --git a/github-actions/saucelabs/encrypt.ts b/github-actions/saucelabs/encrypt.ts deleted file mode 100644 index 00869bd432..0000000000 --- a/github-actions/saucelabs/encrypt.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @license - * Copyright Google LLC - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - -import {createCipheriv} from 'crypto'; -import {k, iv, alg} from './constants.js'; -import fs from 'fs'; - -const [inputPath, outputPath] = process.argv.slice(2); -const input = fs.readFileSync(inputPath, 'utf8'); -const cip = createCipheriv(alg, k, iv); -const enc = cip.update(input, 'utf8', 'binary') + cip.final('binary'); - -fs.writeFileSync(outputPath, enc, 'binary'); - -console.info('Auth tag:', cip.getAuthTag().toString('base64')); diff --git a/github-actions/saucelabs/index.ts b/github-actions/saucelabs/index.ts index 2ebeaf0e2b..f6ef1b8e7f 100644 --- a/github-actions/saucelabs/index.ts +++ b/github-actions/saucelabs/index.ts @@ -6,27 +6,19 @@ * found in the LICENSE file at https://angular.io/license */ -// @ts-ignore-next-line strict-deps -import tokenRaw from './saucelabs_token.data'; -import {k, iv, alg, at} from './constants.js'; -import {createDecipheriv} from 'crypto'; import {exportVariable, setSecret} from '@actions/core'; -interface SauceInfoObject { - SAUCE_USERNAME: string; - SAUCE_ACCESS_KEY: string; -} - async function main() { - const t: Uint8Array = tokenRaw; - const dcip = createDecipheriv(alg, k, iv).setAuthTag(Buffer.from(at, 'base64')); - const dec = dcip.update(t, undefined, 'utf8') + dcip.final('utf8'); - const {SAUCE_USERNAME, SAUCE_ACCESS_KEY} = JSON.parse(dec) as SauceInfoObject; - // Register the access key as a secret to prevent it from being logged. - setSecret(SAUCE_ACCESS_KEY); - // Set the sauce access key and username as environment variables. - exportVariable('SAUCE_ACCESS_KEY', SAUCE_ACCESS_KEY); - exportVariable('SAUCE_USERNAME', SAUCE_USERNAME); + const username = process.env.SAUCE_USERNAME; + const accessKey = process.env.SAUCE_ACCESS_KEY; + + if (!username || !accessKey) { + throw new Error('SAUCE_USERNAME and SAUCE_ACCESS_KEY are required'); + } + + setSecret(accessKey); + exportVariable('SAUCE_ACCESS_KEY', accessKey); + exportVariable('SAUCE_USERNAME', username); } main().catch((e) => { diff --git a/github-actions/saucelabs/saucelabs_token.data b/github-actions/saucelabs/saucelabs_token.data deleted file mode 100644 index 90ebb72262..0000000000 --- a/github-actions/saucelabs/saucelabs_token.data +++ /dev/null @@ -1,2 +0,0 @@ -3äá'¡H;q¹aÑ}r”!‹gŒñLØò?Yy=‹ -ÕQ1ܽÿ{ðünºìe7ľV‡WZ‡ö1¶DØÍI¢ü's´‚ØC'`±3¨Ÿä—›¨e“³áôNÍ8ͪõOx \ No newline at end of file diff --git a/github-actions/saucelabs/set-saucelabs-env.js b/github-actions/saucelabs/set-saucelabs-env.js index cbee84fea6..23296b3edb 100644 --- a/github-actions/saucelabs/set-saucelabs-env.js +++ b/github-actions/saucelabs/set-saucelabs-env.js @@ -1,20779 +1,19 @@ -import { createRequire as _esbuildBannerCreateRequire } from 'node:module';globalThis['require'] ??= _esbuildBannerCreateRequire(import.meta.url); -(() => { - var __create = Object.create; - var __defProp = Object.defineProperty; - var __defProps = Object.defineProperties; - var __getOwnPropDesc = Object.getOwnPropertyDescriptor; - var __getOwnPropDescs = Object.getOwnPropertyDescriptors; - var __getOwnPropNames = Object.getOwnPropertyNames; - var __getOwnPropSymbols = Object.getOwnPropertySymbols; - var __getProtoOf = Object.getPrototypeOf; - var __hasOwnProp = Object.prototype.hasOwnProperty; - var __propIsEnum = Object.prototype.propertyIsEnumerable; - var __knownSymbol = (name, symbol) => { - return (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name); - }; - var __pow = Math.pow; - var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; - var __spreadValues = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp.call(b, prop)) - __defNormalProp(a, prop, b[prop]); - if (__getOwnPropSymbols) - for (var prop of __getOwnPropSymbols(b)) { - if (__propIsEnum.call(b, prop)) - __defNormalProp(a, prop, b[prop]); - } - return a; - }; - var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); - var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { - get: (a, b) => (typeof require !== "undefined" ? require : a)[b] - }) : x)(function(x) { - if (typeof require !== "undefined") - return require.apply(this, arguments); - throw Error('Dynamic require of "' + x + '" is not supported'); - }); - var __restKey = (key) => typeof key === "symbol" ? key : key + ""; - var __objRest = (source, exclude) => { - var target = {}; - for (var prop in source) - if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0) - target[prop] = source[prop]; - if (source != null && __getOwnPropSymbols) - for (var prop of __getOwnPropSymbols(source)) { - if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop)) - target[prop] = source[prop]; - } - return target; - }; - var __commonJS = (cb, mod) => function __require2() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; - }; - var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); - }; - var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; - }; - var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod - )); - var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; - }; - var __accessCheck = (obj, member, msg) => { - if (!member.has(obj)) - throw TypeError("Cannot " + msg); - }; - var __privateIn = (member, obj) => { - if (Object(obj) !== obj) - throw TypeError('Cannot use the "in" operator on this value'); - return member.has(obj); - }; - var __privateGet = (obj, member, getter) => { - __accessCheck(obj, member, "read from private field"); - return getter ? getter.call(obj) : member.get(obj); - }; - var __privateAdd = (obj, member, value) => { - if (member.has(obj)) - throw TypeError("Cannot add the same private member more than once"); - member instanceof WeakSet ? member.add(obj) : member.set(obj, value); - }; - var __privateSet = (obj, member, value, setter) => { - __accessCheck(obj, member, "write to private field"); - setter ? setter.call(obj, value) : member.set(obj, value); - return value; - }; - var __privateMethod = (obj, member, method) => { - __accessCheck(obj, member, "access private method"); - return method; - }; - var __async = (__this, __arguments, generator) => { - return new Promise((resolve2, reject) => { - var fulfilled = (value) => { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - }; - var rejected = (value) => { - try { - step(generator.throw(value)); - } catch (e) { - reject(e); - } - }; - var step = (x) => x.done ? resolve2(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); - step((generator = generator.apply(__this, __arguments)).next()); - }); - }; - var __await = function(promise, isYieldStar) { - this[0] = promise; - this[1] = isYieldStar; - }; - var __asyncGenerator = (__this, __arguments, generator) => { - var resume = (k2, v, yes, no) => { - try { - var x = generator[k2](v), isAwait = (v = x.value) instanceof __await, done = x.done; - Promise.resolve(isAwait ? v[0] : v).then((y) => isAwait ? resume(k2 === "return" ? k2 : "next", v[1] ? { done: y.done, value: y.value } : y, yes, no) : yes({ value: y, done })).catch((e) => resume("throw", e, yes, no)); - } catch (e) { - no(e); - } - }; - var method = (k2) => it[k2] = (x) => new Promise((yes, no) => resume(k2, x, yes, no)); - var it = {}; - return generator = generator.apply(__this, __arguments), it[__knownSymbol("asyncIterator")] = () => it, method("next"), method("throw"), method("return"), it; - }; - var __yieldStar = (value) => { - var obj = value[__knownSymbol("asyncIterator")]; - var isAwait = false; - var method; - var it = {}; - if (obj == null) { - obj = value[__knownSymbol("iterator")](); - method = (k2) => it[k2] = (x) => obj[k2](x); - } else { - obj = obj.call(value); - method = (k2) => it[k2] = (v) => { - if (isAwait) { - isAwait = false; - if (k2 === "throw") - throw v; - return v; - } - isAwait = true; - return { - done: false, - value: new __await(new Promise((resolve2) => { - var x = obj[k2](v); - if (!(x instanceof Object)) - throw TypeError("Object expected"); - resolve2(x); - }), 1) - }; - }; - } - return it[__knownSymbol("iterator")] = () => it, method("next"), "throw" in obj ? method("throw") : it.throw = (x) => { - throw x; - }, "return" in obj && method("return"), it; - }; - var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")]) ? it.call(obj) : (obj = obj[__knownSymbol("iterator")](), it = {}, method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((yes, no, done) => (arg = fn.call(obj, arg), done = arg.done, Promise.resolve(arg.value).then((value) => yes({ value, done }), no)))), method("next"), method("return"), it); - var __toBinaryNode = (base64) => new Uint8Array(Buffer.from(base64, "base64")); +import {exportVariable, setSecret} from '@actions/core'; - // - var require_tunnel = __commonJS({ - ""(exports) { - "use strict"; - var net = __require("net"); - var tls = __require("tls"); - var http = __require("http"); - var https = __require("https"); - var events2 = __require("events"); - var assert = __require("assert"); - var util = __require("util"); - exports.httpOverHttp = httpOverHttp2; - exports.httpsOverHttp = httpsOverHttp2; - exports.httpOverHttps = httpOverHttps2; - exports.httpsOverHttps = httpsOverHttps2; - function httpOverHttp2(options) { - var agent = new TunnelingAgent(options); - agent.request = http.request; - return agent; - } - function httpsOverHttp2(options) { - var agent = new TunnelingAgent(options); - agent.request = http.request; - agent.createSocket = createSecureSocket; - agent.defaultPort = 443; - return agent; - } - function httpOverHttps2(options) { - var agent = new TunnelingAgent(options); - agent.request = https.request; - return agent; - } - function httpsOverHttps2(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 options2 = toOptions(host, port, localAddress); - for (var i = 0, len = self.requests.length; i < len; ++i) { - var pending = self.requests[i]; - if (pending.host === options2.host && pending.port === options2.port) { - self.requests.splice(i, 1); - pending.request.onSocket(socket); - return; - } - } - socket.destroy(); - self.removeSocket(socket); - }); - } - util.inherits(TunnelingAgent, events2.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) { - self.requests.push(options); - return; - } - 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"); - } - debug2("making CONNECT request"); - var connectReq = self.request(connectOptions); - connectReq.useChunkedEncodingByDefault = false; - connectReq.once("response", onResponse); - connectReq.once("upgrade", onUpgrade); - connectReq.once("connect", onConnect); - connectReq.once("error", onError); - connectReq.end(); - function onResponse(res) { - res.upgrade = true; - } - function onUpgrade(res, socket, head) { - process.nextTick(function() { - onConnect(res, socket, head); - }); - } - function onConnect(res, socket, head) { - connectReq.removeAllListeners(); - socket.removeAllListeners(); - if (res.statusCode !== 200) { - debug2( - "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) { - debug2("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; - } - debug2("tunneling connection has established"); - self.sockets[self.sockets.indexOf(placeholder)] = socket; - return cb(socket); - } - function onError(cause) { - connectReq.removeAllListeners(); - debug2( - "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) { - this.createSocket(pending, function(socket2) { - pending.request.onSocket(socket2); - }); - } - }; - 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, - servername: hostHeader ? hostHeader.replace(/:.*$/, "") : options.host - }); - var secureSocket = tls.connect(0, tlsOptions); - self.sockets[self.sockets.indexOf(socket)] = secureSocket; - cb(secureSocket); - }); - } - function toOptions(host, port, localAddress) { - if (typeof host === "string") { - return { - host, - port, - localAddress - }; - } - return host; - } - 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 k2 = keys[j]; - if (overrides[k2] !== void 0) { - target[k2] = overrides[k2]; - } - } - } - } - return target; - } - var debug2; - if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { - debug2 = 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 { - debug2 = function() { - }; - } - exports.debug = debug2; - } - }); +async function main() { + const username = process.env.SAUCE_USERNAME; + const accessKey = process.env.SAUCE_ACCESS_KEY; - // - var require_tunnel2 = __commonJS({ - ""(exports, module) { - module.exports = require_tunnel(); - } - }); - - // - var require_symbols = __commonJS({ - ""(exports, 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"), - 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"), - kBody: Symbol("abstracted request body"), - 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"), - kResume: Symbol("resume"), - kOnError: Symbol("on error"), - 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"), - kRetryHandlerDefaultRetry: Symbol("retry agent default retry"), - kConstruct: Symbol("constructable"), - kListeners: Symbol("listeners"), - kHTTPContext: Symbol("http context"), - kMaxConcurrentStreams: Symbol("max concurrent streams"), - kNoProxyAgent: Symbol("no proxy agent"), - kHttpProxyAgent: Symbol("http proxy agent"), - kHttpsProxyAgent: Symbol("https proxy agent") - }; - } - }); - - // - var require_errors = __commonJS({ - ""(exports, module) { - "use strict"; - var kUndiciError = Symbol.for("undici.error.UND_ERR"); - var _a; - var UndiciError = class extends Error { - constructor(message) { - super(message); - __publicField(this, _a, true); - this.name = "UndiciError"; - this.code = "UND_ERR"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kUndiciError] === true; - } - }; - _a = kUndiciError; - var kConnectTimeoutError = Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT"); - var _a2; - var ConnectTimeoutError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a2, true); - this.name = "ConnectTimeoutError"; - this.message = message || "Connect Timeout Error"; - this.code = "UND_ERR_CONNECT_TIMEOUT"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kConnectTimeoutError] === true; - } - }; - _a2 = kConnectTimeoutError; - var kHeadersTimeoutError = Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT"); - var _a3; - var HeadersTimeoutError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a3, true); - this.name = "HeadersTimeoutError"; - this.message = message || "Headers Timeout Error"; - this.code = "UND_ERR_HEADERS_TIMEOUT"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kHeadersTimeoutError] === true; - } - }; - _a3 = kHeadersTimeoutError; - var kHeadersOverflowError = Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW"); - var _a4; - var HeadersOverflowError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a4, true); - this.name = "HeadersOverflowError"; - this.message = message || "Headers Overflow Error"; - this.code = "UND_ERR_HEADERS_OVERFLOW"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kHeadersOverflowError] === true; - } - }; - _a4 = kHeadersOverflowError; - var kBodyTimeoutError = Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT"); - var _a5; - var BodyTimeoutError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a5, true); - this.name = "BodyTimeoutError"; - this.message = message || "Body Timeout Error"; - this.code = "UND_ERR_BODY_TIMEOUT"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kBodyTimeoutError] === true; - } - }; - _a5 = kBodyTimeoutError; - var kResponseStatusCodeError = Symbol.for("undici.error.UND_ERR_RESPONSE_STATUS_CODE"); - var _a6; - var ResponseStatusCodeError = class extends UndiciError { - constructor(message, statusCode, headers, body) { - super(message); - __publicField(this, _a6, true); - 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; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kResponseStatusCodeError] === true; - } - }; - _a6 = kResponseStatusCodeError; - var kInvalidArgumentError = Symbol.for("undici.error.UND_ERR_INVALID_ARG"); - var _a7; - var InvalidArgumentError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a7, true); - this.name = "InvalidArgumentError"; - this.message = message || "Invalid Argument Error"; - this.code = "UND_ERR_INVALID_ARG"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kInvalidArgumentError] === true; - } - }; - _a7 = kInvalidArgumentError; - var kInvalidReturnValueError = Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE"); - var _a8; - var InvalidReturnValueError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a8, true); - this.name = "InvalidReturnValueError"; - this.message = message || "Invalid Return Value Error"; - this.code = "UND_ERR_INVALID_RETURN_VALUE"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kInvalidReturnValueError] === true; - } - }; - _a8 = kInvalidReturnValueError; - var kAbortError = Symbol.for("undici.error.UND_ERR_ABORT"); - var _a9; - var AbortError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a9, true); - this.name = "AbortError"; - this.message = message || "The operation was aborted"; - this.code = "UND_ERR_ABORT"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kAbortError] === true; - } - }; - _a9 = kAbortError; - var kRequestAbortedError = Symbol.for("undici.error.UND_ERR_ABORTED"); - var _a10; - var RequestAbortedError = class extends AbortError { - constructor(message) { - super(message); - __publicField(this, _a10, true); - this.name = "AbortError"; - this.message = message || "Request aborted"; - this.code = "UND_ERR_ABORTED"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kRequestAbortedError] === true; - } - }; - _a10 = kRequestAbortedError; - var kInformationalError = Symbol.for("undici.error.UND_ERR_INFO"); - var _a11; - var InformationalError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a11, true); - this.name = "InformationalError"; - this.message = message || "Request information"; - this.code = "UND_ERR_INFO"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kInformationalError] === true; - } - }; - _a11 = kInformationalError; - var kRequestContentLengthMismatchError = Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"); - var _a12; - var RequestContentLengthMismatchError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a12, true); - this.name = "RequestContentLengthMismatchError"; - this.message = message || "Request body length does not match content-length header"; - this.code = "UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kRequestContentLengthMismatchError] === true; - } - }; - _a12 = kRequestContentLengthMismatchError; - var kResponseContentLengthMismatchError = Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH"); - var _a13; - var ResponseContentLengthMismatchError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a13, true); - this.name = "ResponseContentLengthMismatchError"; - this.message = message || "Response body length does not match content-length header"; - this.code = "UND_ERR_RES_CONTENT_LENGTH_MISMATCH"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kResponseContentLengthMismatchError] === true; - } - }; - _a13 = kResponseContentLengthMismatchError; - var kClientDestroyedError = Symbol.for("undici.error.UND_ERR_DESTROYED"); - var _a14; - var ClientDestroyedError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a14, true); - this.name = "ClientDestroyedError"; - this.message = message || "The client is destroyed"; - this.code = "UND_ERR_DESTROYED"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kClientDestroyedError] === true; - } - }; - _a14 = kClientDestroyedError; - var kClientClosedError = Symbol.for("undici.error.UND_ERR_CLOSED"); - var _a15; - var ClientClosedError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a15, true); - this.name = "ClientClosedError"; - this.message = message || "The client is closed"; - this.code = "UND_ERR_CLOSED"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kClientClosedError] === true; - } - }; - _a15 = kClientClosedError; - var kSocketError = Symbol.for("undici.error.UND_ERR_SOCKET"); - var _a16; - var SocketError = class extends UndiciError { - constructor(message, socket) { - super(message); - __publicField(this, _a16, true); - this.name = "SocketError"; - this.message = message || "Socket error"; - this.code = "UND_ERR_SOCKET"; - this.socket = socket; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kSocketError] === true; - } - }; - _a16 = kSocketError; - var kNotSupportedError = Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED"); - var _a17; - var NotSupportedError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a17, true); - this.name = "NotSupportedError"; - this.message = message || "Not supported error"; - this.code = "UND_ERR_NOT_SUPPORTED"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kNotSupportedError] === true; - } - }; - _a17 = kNotSupportedError; - var kBalancedPoolMissingUpstreamError = Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM"); - var _a18; - var BalancedPoolMissingUpstreamError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a18, true); - this.name = "MissingUpstreamError"; - this.message = message || "No upstream has been added to the BalancedPool"; - this.code = "UND_ERR_BPL_MISSING_UPSTREAM"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kBalancedPoolMissingUpstreamError] === true; - } - }; - _a18 = kBalancedPoolMissingUpstreamError; - var kHTTPParserError = Symbol.for("undici.error.UND_ERR_HTTP_PARSER"); - var _a19; - var HTTPParserError = class extends Error { - constructor(message, code, data) { - super(message); - __publicField(this, _a19, true); - this.name = "HTTPParserError"; - this.code = code ? `HPE_${code}` : void 0; - this.data = data ? data.toString() : void 0; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kHTTPParserError] === true; - } - }; - _a19 = kHTTPParserError; - var kResponseExceededMaxSizeError = Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE"); - var _a20; - var ResponseExceededMaxSizeError = class extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a20, true); - this.name = "ResponseExceededMaxSizeError"; - this.message = message || "Response content exceeded max size"; - this.code = "UND_ERR_RES_EXCEEDED_MAX_SIZE"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kResponseExceededMaxSizeError] === true; - } - }; - _a20 = kResponseExceededMaxSizeError; - var kRequestRetryError = Symbol.for("undici.error.UND_ERR_REQ_RETRY"); - var _a21; - var RequestRetryError = class extends UndiciError { - constructor(message, code, { headers, data }) { - super(message); - __publicField(this, _a21, true); - this.name = "RequestRetryError"; - this.message = message || "Request retry error"; - this.code = "UND_ERR_REQ_RETRY"; - this.statusCode = code; - this.data = data; - this.headers = headers; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kRequestRetryError] === true; - } - }; - _a21 = kRequestRetryError; - var kResponseError = Symbol.for("undici.error.UND_ERR_RESPONSE"); - var _a22; - var ResponseError = class extends UndiciError { - constructor(message, code, { headers, data }) { - super(message); - __publicField(this, _a22, true); - this.name = "ResponseError"; - this.message = message || "Response error"; - this.code = "UND_ERR_RESPONSE"; - this.statusCode = code; - this.data = data; - this.headers = headers; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kResponseError] === true; - } - }; - _a22 = kResponseError; - var kSecureProxyConnectionError = Symbol.for("undici.error.UND_ERR_PRX_TLS"); - var _a23; - var SecureProxyConnectionError = class extends UndiciError { - constructor(cause, message, options) { - super(message, __spreadValues({ cause }, options != null ? options : {})); - __publicField(this, _a23, true); - this.name = "SecureProxyConnectionError"; - this.message = message || "Secure Proxy Connection failed"; - this.code = "UND_ERR_PRX_TLS"; - this.cause = cause; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kSecureProxyConnectionError] === true; - } - }; - _a23 = kSecureProxyConnectionError; - var kMessageSizeExceededError = Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"); - var MessageSizeExceededError = class extends UndiciError { - constructor(message) { - super(message); - this.name = "MessageSizeExceededError"; - this.message = message || "Max decompressed message size exceeded"; - this.code = "UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kMessageSizeExceededError] === true; - } - get [kMessageSizeExceededError]() { - return true; - } - }; - module.exports = { - AbortError, - HTTPParserError, - UndiciError, - HeadersTimeoutError, - HeadersOverflowError, - BodyTimeoutError, - RequestContentLengthMismatchError, - ConnectTimeoutError, - ResponseStatusCodeError, - InvalidArgumentError, - InvalidReturnValueError, - RequestAbortedError, - ClientDestroyedError, - ClientClosedError, - InformationalError, - SocketError, - NotSupportedError, - ResponseContentLengthMismatchError, - BalancedPoolMissingUpstreamError, - ResponseExceededMaxSizeError, - RequestRetryError, - ResponseError, - SecureProxyConnectionError, - MessageSizeExceededError - }; - } - }); - - // - var require_constants = __commonJS({ - ""(exports, module) { - "use strict"; - var headerNameLowerCasedRecord = {}; - var 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; - } - Object.setPrototypeOf(headerNameLowerCasedRecord, null); - module.exports = { - wellknownHeaderNames, - headerNameLowerCasedRecord - }; - } - }); - - // - var require_tree = __commonJS({ - ""(exports, module) { - "use strict"; - var { - wellknownHeaderNames, - headerNameLowerCasedRecord - } = require_constants(); - var TstNode = class _TstNode { - /** - * @param {string} key - * @param {any} value - * @param {number} index - */ - constructor(key, value, index) { - /** @type {any} */ - __publicField(this, "value", null); - /** @type {null | TstNode} */ - __publicField(this, "left", null); - /** @type {null | TstNode} */ - __publicField(this, "middle", null); - /** @type {null | TstNode} */ - __publicField(this, "right", null); - /** @type {number} */ - __publicField(this, "code"); - if (index === void 0 || index >= key.length) { - throw new TypeError("Unreachable"); - } - const code = this.code = key.charCodeAt(index); - if (code > 127) { - throw new TypeError("key must be ascii string"); - } - if (key.length !== ++index) { - this.middle = new _TstNode(key, value, index); - } else { - this.value = value; - } - } - /** - * @param {string} key - * @param {any} value - */ - add(key, value) { - const length = key.length; - if (length === 0) { - throw new TypeError("Unreachable"); - } - let index = 0; - let node = this; - while (true) { - const code = key.charCodeAt(index); - if (code > 127) { - throw new TypeError("key must be ascii string"); - } - if (node.code === code) { - if (length === ++index) { - node.value = value; - break; - } else if (node.middle !== null) { - node = node.middle; - } else { - node.middle = new _TstNode(key, value, index); - break; - } - } else if (node.code < code) { - if (node.left !== null) { - node = node.left; - } else { - node.left = new _TstNode(key, value, index); - break; - } - } else if (node.right !== null) { - node = node.right; - } else { - node.right = new _TstNode(key, value, index); - break; - } - } - } - /** - * @param {Uint8Array} key - * @return {TstNode | null} - */ - search(key) { - const keylength = key.length; - let index = 0; - let node = this; - while (node !== null && index < keylength) { - let code = key[index]; - if (code <= 90 && code >= 65) { - code |= 32; - } - while (node !== null) { - if (code === node.code) { - if (keylength === ++index) { - return node; - } - node = node.middle; - break; - } - node = node.code < code ? node.left : node.right; - } - } - return null; - } - }; - var TernarySearchTree = class { - constructor() { - /** @type {TstNode | null} */ - __publicField(this, "node", null); - } - /** - * @param {string} key - * @param {any} value - * */ - insert(key, value) { - if (this.node === null) { - this.node = new TstNode(key, value, 0); - } else { - this.node.add(key, value); - } - } - /** - * @param {Uint8Array} key - * @return {any} - */ - lookup(key) { - var _a, _b, _c; - return (_c = (_b = (_a = this.node) == null ? void 0 : _a.search(key)) == null ? void 0 : _b.value) != null ? _c : null; - } - }; - var tree = new TernarySearchTree(); - for (let i = 0; i < wellknownHeaderNames.length; ++i) { - const key = headerNameLowerCasedRecord[wellknownHeaderNames[i]]; - tree.insert(key, key); - } - module.exports = { - TernarySearchTree, - tree - }; - } - }); - - // - var require_util = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { kDestroyed, kBodyUsed, kListeners, kBody } = require_symbols(); - var { IncomingMessage } = __require("http"); - var stream = __require("stream"); - var net = __require("net"); - var { Blob: Blob2 } = __require("buffer"); - var nodeUtil = __require("util"); - var { stringify } = __require("querystring"); - var { EventEmitter: EE } = __require("events"); - var { InvalidArgumentError } = require_errors(); - var { headerNameLowerCasedRecord } = require_constants(); - var { tree } = require_tree(); - var [nodeMajor, nodeMinor] = process.versions.node.split(".").map((v) => Number(v)); - var BodyAsyncIterable = class { - constructor(body) { - this[kBody] = body; - this[kBodyUsed] = false; - } - [Symbol.asyncIterator]() { - return __asyncGenerator(this, null, function* () { - assert(!this[kBodyUsed], "disturbed"); - this[kBodyUsed] = true; - yield* __yieldStar(this[kBody]); - }); - } - }; - function wrapRequestBody(body) { - if (isStream(body)) { - if (bodyLength(body) === 0) { - body.on("data", function() { - assert(false); - }); - } - if (typeof body.readableDidRead !== "boolean") { - body[kBodyUsed] = false; - EE.prototype.on.call(body, "data", function() { - this[kBodyUsed] = true; - }); - } - return body; - } else if (body && typeof body.pipeTo === "function") { - return new BodyAsyncIterable(body); - } else if (body && typeof body !== "string" && !ArrayBuffer.isView(body) && isIterable(body)) { - return new BodyAsyncIterable(body); - } else { - return body; - } - } - function nop() { - } - function isStream(obj) { - return obj && typeof obj === "object" && typeof obj.pipe === "function" && typeof obj.on === "function"; - } - function isBlobLike(object) { - if (object === null) { - return false; - } else if (object instanceof Blob2) { - return true; - } else if (typeof object !== "object") { - return false; - } else { - const sTag = object[Symbol.toStringTag]; - return (sTag === "Blob" || sTag === "File") && ("stream" in object && typeof object.stream === "function" || "arrayBuffer" in object && typeof object.arrayBuffer === "function"); - } - } - 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 isValidPort(port) { - const value = parseInt(port, 10); - return value === Number(port) && value >= 0 && value <= 65535; - } - function isHttpOrHttpsPrefixed(value) { - return value != null && value[0] === "h" && value[1] === "t" && value[2] === "t" && value[3] === "p" && (value[4] === ":" || value[4] === "s" && value[5] === ":"); - } - function parseURL(url) { - if (typeof url === "string") { - url = new URL(url); - if (!isHttpOrHttpsPrefixed(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 (!(url instanceof URL)) { - if (url.port != null && url.port !== "" && isValidPort(url.port) === false) { - 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."); - } - if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) { - throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`."); - } - 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 path4 = url.path != null ? url.path : `${url.pathname || ""}${url.search || ""}`; - if (origin[origin.length - 1] === "/") { - origin = origin.slice(0, origin.length - 1); - } - if (path4 && path4[0] !== "/") { - path4 = `/${path4}`; - } - return new URL(`${origin}${path4}`); - } - if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) { - throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`."); - } - 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 idx2 = host.indexOf("]"); - assert(idx2 !== -1); - return host.substring(1, idx2); - } - const idx = host.indexOf(":"); - if (idx === -1) - return host; - return host.substring(0, idx); - } - function getServerName(host) { - if (!host) { - return null; - } - assert(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(body) { - var _a; - return body && !!(body.destroyed || body[kDestroyed] || ((_a = stream.isDestroyed) == null ? void 0 : _a.call(stream, body))); - } - function destroy(stream2, err) { - if (stream2 == null || !isStream(stream2) || isDestroyed(stream2)) { - return; - } - if (typeof stream2.destroy === "function") { - if (Object.getPrototypeOf(stream2).constructor === IncomingMessage) { - stream2.socket = null; - } - stream2.destroy(err); - } else if (err) { - queueMicrotask(() => { - stream2.emit("error", err); - }); - } - if (stream2.destroyed !== true) { - stream2[kDestroyed] = true; - } - } - var KEEPALIVE_TIMEOUT_EXPR = /timeout=(\d+)/; - function parseKeepAliveTimeout(val) { - const m = val.toString().match(KEEPALIVE_TIMEOUT_EXPR); - return m ? parseInt(m[1], 10) * 1e3 : null; - } - function headerNameToString(value) { - var _a, _b; - return typeof value === "string" ? (_a = headerNameLowerCasedRecord[value]) != null ? _a : value.toLowerCase() : (_b = tree.lookup(value)) != null ? _b : value.toString("latin1").toLowerCase(); - } - function bufferToLowerCasedHeaderName(value) { - var _a; - return (_a = tree.lookup(value)) != null ? _a : value.toString("latin1").toLowerCase(); - } - function parseHeaders(headers, obj) { - if (obj === void 0) - obj = {}; - for (let i = 0; i < headers.length; i += 2) { - const key = headerNameToString(headers[i]); - let val = obj[key]; - if (val) { - if (typeof val === "string") { - val = [val]; - obj[key] = val; - } - val.push(headers[i + 1].toString("utf8")); - } else { - const headersValue = headers[i + 1]; - if (typeof headersValue === "string") { - obj[key] = headersValue; - } else { - obj[key] = Array.isArray(headersValue) ? headersValue.map((x) => x.toString("utf8")) : headersValue.toString("utf8"); - } - } - } - 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 len = headers.length; - const ret = new Array(len); - let hasContentLength = false; - let contentDispositionIdx = -1; - let key; - let val; - let kLen = 0; - for (let n = 0; n < headers.length; n += 2) { - key = headers[n]; - val = headers[n + 1]; - typeof key !== "string" && (key = key.toString()); - typeof val !== "string" && (val = val.toString("utf8")); - kLen = key.length; - if (kLen === 14 && key[7] === "-" && (key === "content-length" || key.toLowerCase() === "content-length")) { - hasContentLength = true; - } else if (kLen === 19 && key[7] === "-" && (key === "content-disposition" || key.toLowerCase() === "content-disposition")) { - contentDispositionIdx = n + 1; - } - ret[n] = key; - ret[n + 1] = val; - } - if (hasContentLength && contentDispositionIdx !== -1) { - ret[contentDispositionIdx] = Buffer.from(ret[contentDispositionIdx]).toString("latin1"); - } - return ret; - } - function isBuffer(buffer) { - 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 !== void 0) { - 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"); - } - } - } - function isDisturbed(body) { - return !!(body && (stream.isDisturbed(body) || body[kBodyUsed])); - } - function isErrored(body) { - return !!(body && stream.isErrored(body)); - } - function isReadable(body) { - return !!(body && stream.isReadable(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 - }; - } - function ReadableStreamFrom(iterable) { - let iterator; - return new ReadableStream( - { - start() { - return __async(this, null, function* () { - iterator = iterable[Symbol.asyncIterator](); - }); - }, - pull(controller) { - return __async(this, null, function* () { - const { done, value } = yield iterator.next(); - if (done) { - queueMicrotask(() => { - var _a2; - controller.close(); - (_a2 = controller.byobRequest) == null ? void 0 : _a2.respond(0); - }); - } else { - const buf = Buffer.isBuffer(value) ? value : Buffer.from(value); - if (buf.byteLength) { - controller.enqueue(new Uint8Array(buf)); - } - } - return controller.desiredSize > 0; - }); - }, - cancel(reason) { - return __async(this, null, function* () { - yield iterator.return(); - }); - }, - type: "bytes" - } - ); - } - 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 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); - } - var hasToWellFormed = typeof String.prototype.toWellFormed === "function"; - var hasIsWellFormed = typeof String.prototype.isWellFormed === "function"; - function toUSVString(val) { - return hasToWellFormed ? `${val}`.toWellFormed() : nodeUtil.toUSVString(val); - } - function isUSVString(val) { - return hasIsWellFormed ? `${val}`.isWellFormed() : toUSVString(val) === `${val}`; - } - function isTokenCharCode(c) { - switch (c) { - case 34: - case 40: - case 41: - case 44: - case 47: - case 58: - case 59: - case 60: - case 61: - case 62: - case 63: - case 64: - case 91: - case 92: - case 93: - case 123: - case 125: - return false; - default: - return c >= 33 && c <= 126; - } - } - 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; - } - var headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/; - function isValidHeaderValue(characters) { - return !headerCharRegex.test(characters); - } - 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; - } - function addListener(obj, name, listener) { - var _a; - const listeners = (_a = obj[kListeners]) != null ? _a : obj[kListeners] = []; - listeners.push([name, listener]); - obj.on(name, listener); - return obj; - } - function removeAllListeners(obj) { - var _a; - for (const [name, listener] of (_a = obj[kListeners]) != null ? _a : []) { - obj.removeListener(name, listener); - } - obj[kListeners] = null; - } - function errorRequest(client, request, err) { - try { - request.onError(err); - assert(request.aborted); - } catch (err2) { - client.emit("error", err2); - } - } - var kEnumerableProperty = /* @__PURE__ */ Object.create(null); - kEnumerableProperty.enumerable = true; - var normalizedMethodRecordsBase = { - delete: "DELETE", - DELETE: "DELETE", - get: "GET", - GET: "GET", - head: "HEAD", - HEAD: "HEAD", - options: "OPTIONS", - OPTIONS: "OPTIONS", - post: "POST", - POST: "POST", - put: "PUT", - PUT: "PUT" - }; - var normalizedMethodRecords = __spreadProps(__spreadValues({}, normalizedMethodRecordsBase), { - patch: "patch", - PATCH: "PATCH" - }); - Object.setPrototypeOf(normalizedMethodRecordsBase, null); - Object.setPrototypeOf(normalizedMethodRecords, null); - module.exports = { - kEnumerableProperty, - nop, - isDisturbed, - isErrored, - isReadable, - toUSVString, - isUSVString, - isBlobLike, - parseOrigin, - parseURL, - getServerName, - isStream, - isIterable, - isAsyncIterable, - isDestroyed, - headerNameToString, - bufferToLowerCasedHeaderName, - addListener, - removeAllListeners, - errorRequest, - parseRawHeaders, - parseHeaders, - parseKeepAliveTimeout, - destroy, - bodyLength, - deepClone, - ReadableStreamFrom, - isBuffer, - validateHandler, - getSocketInfo, - isFormDataLike, - buildURL, - addAbortListener, - isValidHTTPToken, - isValidHeaderValue, - isTokenCharCode, - parseRangeHeader, - normalizedMethodRecordsBase, - normalizedMethodRecords, - isValidPort, - isHttpOrHttpsPrefixed, - nodeMajor, - nodeMinor, - safeHTTPMethods: ["GET", "HEAD", "OPTIONS", "TRACE"], - wrapRequestBody - }; - } - }); - - // - var require_diagnostics = __commonJS({ - ""(exports, module) { - "use strict"; - var diagnosticsChannel = __require("diagnostics_channel"); - var util = __require("util"); - var undiciDebugLog = util.debuglog("undici"); - var fetchDebuglog = util.debuglog("fetch"); - var websocketDebuglog = util.debuglog("websocket"); - var isClientSet = false; - var channels = { - // Client - beforeConnect: diagnosticsChannel.channel("undici:client:beforeConnect"), - connected: diagnosticsChannel.channel("undici:client:connected"), - connectError: diagnosticsChannel.channel("undici:client:connectError"), - sendHeaders: diagnosticsChannel.channel("undici:client:sendHeaders"), - // Request - create: diagnosticsChannel.channel("undici:request:create"), - bodySent: diagnosticsChannel.channel("undici:request:bodySent"), - headers: diagnosticsChannel.channel("undici:request:headers"), - trailers: diagnosticsChannel.channel("undici:request:trailers"), - error: diagnosticsChannel.channel("undici:request:error"), - // WebSocket - open: diagnosticsChannel.channel("undici:websocket:open"), - close: diagnosticsChannel.channel("undici:websocket:close"), - socketError: diagnosticsChannel.channel("undici:websocket:socket_error"), - ping: diagnosticsChannel.channel("undici:websocket:ping"), - pong: diagnosticsChannel.channel("undici:websocket:pong") - }; - if (undiciDebugLog.enabled || fetchDebuglog.enabled) { - const debuglog = fetchDebuglog.enabled ? fetchDebuglog : undiciDebugLog; - diagnosticsChannel.channel("undici:client:beforeConnect").subscribe((evt) => { - const { - connectParams: { version, protocol, port, host } - } = evt; - debuglog( - "connecting to %s using %s%s", - `${host}${port ? `:${port}` : ""}`, - protocol, - version - ); - }); - diagnosticsChannel.channel("undici:client:connected").subscribe((evt) => { - const { - connectParams: { version, protocol, port, host } - } = evt; - debuglog( - "connected to %s using %s%s", - `${host}${port ? `:${port}` : ""}`, - protocol, - version - ); - }); - diagnosticsChannel.channel("undici:client:connectError").subscribe((evt) => { - const { - connectParams: { version, protocol, port, host }, - error - } = evt; - debuglog( - "connection to %s using %s%s errored - %s", - `${host}${port ? `:${port}` : ""}`, - protocol, - version, - error.message - ); - }); - diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => { - const { - request: { method, path: path4, origin } - } = evt; - debuglog("sending request to %s %s/%s", method, origin, path4); - }); - diagnosticsChannel.channel("undici:request:headers").subscribe((evt) => { - const { - request: { method, path: path4, origin }, - response: { statusCode } - } = evt; - debuglog( - "received response to %s %s/%s - HTTP %d", - method, - origin, - path4, - statusCode - ); - }); - diagnosticsChannel.channel("undici:request:trailers").subscribe((evt) => { - const { - request: { method, path: path4, origin } - } = evt; - debuglog("trailers received from %s %s/%s", method, origin, path4); - }); - diagnosticsChannel.channel("undici:request:error").subscribe((evt) => { - const { - request: { method, path: path4, origin }, - error - } = evt; - debuglog( - "request to %s %s/%s errored - %s", - method, - origin, - path4, - error.message - ); - }); - isClientSet = true; - } - if (websocketDebuglog.enabled) { - if (!isClientSet) { - const debuglog = undiciDebugLog.enabled ? undiciDebugLog : websocketDebuglog; - diagnosticsChannel.channel("undici:client:beforeConnect").subscribe((evt) => { - const { - connectParams: { version, protocol, port, host } - } = evt; - debuglog( - "connecting to %s%s using %s%s", - host, - port ? `:${port}` : "", - protocol, - version - ); - }); - diagnosticsChannel.channel("undici:client:connected").subscribe((evt) => { - const { - connectParams: { version, protocol, port, host } - } = evt; - debuglog( - "connected to %s%s using %s%s", - host, - port ? `:${port}` : "", - protocol, - version - ); - }); - diagnosticsChannel.channel("undici:client:connectError").subscribe((evt) => { - const { - connectParams: { version, protocol, port, host }, - error - } = evt; - debuglog( - "connection to %s%s using %s%s errored - %s", - host, - port ? `:${port}` : "", - protocol, - version, - error.message - ); - }); - diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => { - const { - request: { method, path: path4, origin } - } = evt; - debuglog("sending request to %s %s/%s", method, origin, path4); - }); - } - diagnosticsChannel.channel("undici:websocket:open").subscribe((evt) => { - const { - address: { address, port } - } = evt; - websocketDebuglog("connection opened %s%s", address, port ? `:${port}` : ""); - }); - diagnosticsChannel.channel("undici:websocket:close").subscribe((evt) => { - const { websocket, code, reason } = evt; - websocketDebuglog( - "closed connection to %s - %s %s", - websocket.url, - code, - reason - ); - }); - diagnosticsChannel.channel("undici:websocket:socket_error").subscribe((err) => { - websocketDebuglog("connection errored - %s", err.message); - }); - diagnosticsChannel.channel("undici:websocket:ping").subscribe((evt) => { - websocketDebuglog("ping received"); - }); - diagnosticsChannel.channel("undici:websocket:pong").subscribe((evt) => { - websocketDebuglog("pong received"); - }); - } - module.exports = { - channels - }; - } - }); - - // - var require_request = __commonJS({ - ""(exports, module) { - "use strict"; - var { - InvalidArgumentError, - NotSupportedError - } = require_errors(); - var assert = __require("assert"); - var { - isValidHTTPToken, - isValidHeaderValue, - isStream, - destroy, - isBuffer, - isFormDataLike, - isIterable, - isBlobLike, - buildURL, - validateHandler, - getServerName, - normalizedMethodRecords - } = require_util(); - var { channels } = require_diagnostics(); - var { headerNameLowerCasedRecord } = require_constants(); - var invalidPathRegex = /[^\u0021-\u00ff]/; - var kHandler = Symbol("handler"); - var Request = class { - constructor(origin, { - path: path4, - method, - body, - headers, - query, - idempotent, - blocking, - upgrade, - headersTimeout, - bodyTimeout, - reset, - throwOnError, - expectContinue, - servername - }, handler) { - if (typeof path4 !== "string") { - throw new InvalidArgumentError("path must be a string"); - } else if (path4[0] !== "/" && !(path4.startsWith("http://") || path4.startsWith("https://")) && method !== "CONNECT") { - throw new InvalidArgumentError("path must be an absolute URL or start with a slash"); - } else if (invalidPathRegex.test(path4)) { - throw new InvalidArgumentError("invalid request path"); - } - if (typeof method !== "string") { - throw new InvalidArgumentError("method must be a string"); - } else if (normalizedMethodRecords[method] === void 0 && !isValidHTTPToken(method)) { - throw new InvalidArgumentError("invalid request method"); - } - if (upgrade && typeof upgrade !== "string") { - throw new InvalidArgumentError("upgrade must be a string"); - } - if (upgrade && !isValidHeaderValue(upgrade)) { - throw new InvalidArgumentError("invalid upgrade header"); - } - 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 (isStream(body)) { - this.body = body; - const rState = this.body._readableState; - if (!rState || !rState.autoDestroy) { - this.endHandler = function autoDestroy() { - 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 (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 (isFormDataLike(body) || isIterable(body) || 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 ? buildURL(path4, query) : path4; - 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 = []; - 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") { - if (headers[Symbol.iterator]) { - for (const header of headers) { - if (!Array.isArray(header) || header.length !== 2) { - throw new InvalidArgumentError("headers must be in key-value pair format"); - } - processHeader(this, header[0], header[1]); - } - } else { - const keys = Object.keys(headers); - for (let i = 0; i < keys.length; ++i) { - processHeader(this, keys[i], headers[keys[i]]); - } - } - } else if (headers != null) { - throw new InvalidArgumentError("headers must be an object or an array"); - } - validateHandler(handler, method, upgrade); - this.servername = servername || 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); - } - } - onResponseStarted() { - var _a, _b; - return (_b = (_a = this[kHandler]).onResponseStarted) == null ? void 0 : _b.call(_a); - } - 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) { - 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; - } - } - addHeader(key, value) { - processHeader(this, key, value); - return this; - } - }; - function processHeader(request, key, val) { - if (val && (typeof val === "object" && !Array.isArray(val))) { - throw new InvalidArgumentError(`invalid ${key} header`); - } else if (val === void 0) { - return; - } - let headerName = headerNameLowerCasedRecord[key]; - if (headerName === void 0) { - headerName = key.toLowerCase(); - if (headerNameLowerCasedRecord[headerName] === void 0 && !isValidHTTPToken(headerName)) { - throw new InvalidArgumentError("invalid header key"); - } - } - if (Array.isArray(val)) { - const arr = []; - for (let i = 0; i < val.length; i++) { - if (typeof val[i] === "string") { - if (!isValidHeaderValue(val[i])) { - throw new InvalidArgumentError(`invalid ${key} header`); - } - arr.push(val[i]); - } else if (val[i] === null) { - arr.push(""); - } else if (typeof val[i] === "object") { - throw new InvalidArgumentError(`invalid ${key} header`); - } else { - const str = `${val[i]}`; - if (!isValidHeaderValue(str)) { - throw new InvalidArgumentError(`invalid ${key} header`); - } - arr.push(str); - } - } - val = arr; - } else if (typeof val === "string") { - if (!isValidHeaderValue(val)) { - throw new InvalidArgumentError(`invalid ${key} header`); - } - } else if (val === null) { - val = ""; - } else { - val = `${val}`; - if (!isValidHeaderValue(val)) { - throw new InvalidArgumentError(`invalid ${key} header`); - } - } - if (headerName === "host") { - if (request.host !== null) { - throw new InvalidArgumentError("duplicate host header"); - } - if (typeof val !== "string") { - throw new InvalidArgumentError("invalid host header"); - } - request.host = val; - } else if (headerName === "content-length") { - if (request.contentLength !== null) { - throw new InvalidArgumentError("duplicate content-length header"); - } - request.contentLength = parseInt(val, 10); - if (!Number.isFinite(request.contentLength)) { - throw new InvalidArgumentError("invalid content-length header"); - } - } else if (request.contentType === null && headerName === "content-type") { - request.contentType = val; - request.headers.push(key, val); - } else if (headerName === "transfer-encoding" || headerName === "keep-alive" || headerName === "upgrade") { - throw new InvalidArgumentError(`invalid ${headerName} header`); - } else if (headerName === "connection") { - const value = typeof val === "string" ? val.toLowerCase() : null; - if (value !== "close" && value !== "keep-alive") { - throw new InvalidArgumentError("invalid connection header"); - } - if (value === "close") { - request.reset = true; - } - } else if (headerName === "expect") { - throw new NotSupportedError("expect header not supported"); - } else { - request.headers.push(key, val); - } - } - module.exports = Request; - } - }); - - // - var require_dispatcher = __commonJS({ - ""(exports, module) { - "use strict"; - var EventEmitter2 = __require("events"); - var Dispatcher = class extends EventEmitter2 { - dispatch() { - throw new Error("not implemented"); - } - close() { - throw new Error("not implemented"); - } - destroy() { - throw new Error("not implemented"); - } - compose(...args) { - const interceptors = Array.isArray(args[0]) ? args[0] : args; - let dispatch = this.dispatch.bind(this); - for (const interceptor of interceptors) { - if (interceptor == null) { - continue; - } - if (typeof interceptor !== "function") { - throw new TypeError(`invalid interceptor, expected function received ${typeof interceptor}`); - } - dispatch = interceptor(dispatch); - if (dispatch == null || typeof dispatch !== "function" || dispatch.length !== 2) { - throw new TypeError("invalid interceptor"); - } - } - return new ComposedDispatcher(this, dispatch); - } - }; - var _dispatcher, _dispatch; - var ComposedDispatcher = class extends Dispatcher { - constructor(dispatcher, dispatch) { - super(); - __privateAdd(this, _dispatcher, null); - __privateAdd(this, _dispatch, null); - __privateSet(this, _dispatcher, dispatcher); - __privateSet(this, _dispatch, dispatch); - } - dispatch(...args) { - __privateGet(this, _dispatch).call(this, ...args); - } - close(...args) { - return __privateGet(this, _dispatcher).close(...args); - } - destroy(...args) { - return __privateGet(this, _dispatcher).destroy(...args); - } - }; - _dispatcher = new WeakMap(); - _dispatch = new WeakMap(); - module.exports = Dispatcher; - } - }); - - // - var require_dispatcher_base = __commonJS({ - ""(exports, module) { - "use strict"; - var Dispatcher = require_dispatcher(); - var { - ClientDestroyedError, - ClientClosedError, - InvalidArgumentError - } = require_errors(); - var { kDestroy, kClose, kClosed, kDestroyed, kDispatch, kInterceptors } = require_symbols(); - var kOnDestroyed = Symbol("onDestroyed"); - var kOnClosed = Symbol("onClosed"); - var kInterceptedDispatch = Symbol("Intercepted Dispatch"); - var kWebSocketOptions = Symbol("webSocketOptions"); - var DispatcherBase = class extends Dispatcher { - constructor(opts) { - var _a; - super(); - this[kDestroyed] = false; - this[kOnDestroyed] = null; - this[kClosed] = false; - this[kOnClosed] = []; - this[kWebSocketOptions] = (_a = opts == null ? void 0 : opts.webSocket) != null ? _a : {}; - } - get webSocketOptions() { - var _a, _b; - return { - maxFragments: (_a = this[kWebSocketOptions].maxFragments) != null ? _a : 131072, - maxPayloadSize: (_b = this[kWebSocketOptions].maxPayloadSize) != null ? _b : 128 * 1024 * 1024 - }; - } - 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 === void 0) { - return new Promise((resolve2, reject) => { - this.close((err, data) => { - return err ? reject(err) : resolve2(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); - } - }; - this[kClose]().then(() => this.destroy()).then(() => { - queueMicrotask(onClosed); - }); - } - destroy(err, callback) { - if (typeof err === "function") { - callback = err; - err = null; - } - if (callback === void 0) { - return new Promise((resolve2, reject) => { - this.destroy(err, (err2, data) => { - return err2 ? ( - /* istanbul ignore next: should never error */ - reject(err2) - ) : resolve2(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); - } - }; - 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; - } - }); - - // - var require_timers = __commonJS({ - ""(exports, module) { - "use strict"; - var fastNow = 0; - var RESOLUTION_MS = 1e3; - var TICK_MS = (RESOLUTION_MS >> 1) - 1; - var fastNowTimeout; - var kFastTimer = Symbol("kFastTimer"); - var fastTimers = []; - var NOT_IN_LIST = -2; - var TO_BE_CLEARED = -1; - var PENDING = 0; - var ACTIVE = 1; - function onTick() { - fastNow += TICK_MS; - let idx = 0; - let len = fastTimers.length; - while (idx < len) { - const timer = fastTimers[idx]; - if (timer._state === PENDING) { - timer._idleStart = fastNow - TICK_MS; - timer._state = ACTIVE; - } else if (timer._state === ACTIVE && fastNow >= timer._idleStart + timer._idleTimeout) { - timer._state = TO_BE_CLEARED; - timer._idleStart = -1; - timer._onTimeout(timer._timerArg); - } - if (timer._state === TO_BE_CLEARED) { - timer._state = NOT_IN_LIST; - if (--len !== 0) { - fastTimers[idx] = fastTimers[len]; - } - } else { - ++idx; - } - } - fastTimers.length = len; - if (fastTimers.length !== 0) { - refreshTimeout(); - } - } - function refreshTimeout() { - if (fastNowTimeout) { - fastNowTimeout.refresh(); - } else { - clearTimeout(fastNowTimeout); - fastNowTimeout = setTimeout(onTick, TICK_MS); - if (fastNowTimeout.unref) { - fastNowTimeout.unref(); - } - } - } - var _a; - var FastTimer = class { - /** - * @constructor - * @param {Function} callback A function to be executed after the timer - * expires. - * @param {number} delay The time, in milliseconds that the timer should wait - * before the specified function or code is executed. - * @param {*} arg - */ - constructor(callback, delay, arg) { - __publicField(this, _a, true); - /** - * The state of the timer, which can be one of the following: - * - NOT_IN_LIST (-2) - * - TO_BE_CLEARED (-1) - * - PENDING (0) - * - ACTIVE (1) - * - * @type {-2|-1|0|1} - * @private - */ - __publicField(this, "_state", NOT_IN_LIST); - /** - * The number of milliseconds to wait before calling the callback. - * - * @type {number} - * @private - */ - __publicField(this, "_idleTimeout", -1); - /** - * The time in milliseconds when the timer was started. This value is used to - * calculate when the timer should expire. - * - * @type {number} - * @default -1 - * @private - */ - __publicField(this, "_idleStart", -1); - /** - * The function to be executed when the timer expires. - * @type {Function} - * @private - */ - __publicField(this, "_onTimeout"); - /** - * The argument to be passed to the callback when the timer expires. - * - * @type {*} - * @private - */ - __publicField(this, "_timerArg"); - this._onTimeout = callback; - this._idleTimeout = delay; - this._timerArg = arg; - this.refresh(); - } - /** - * Sets the timer's start time to the current time, and reschedules the timer - * to call its callback at the previously specified duration adjusted to the - * current time. - * Using this on a timer that has already called its callback will reactivate - * the timer. - * - * @returns {void} - */ - refresh() { - if (this._state === NOT_IN_LIST) { - fastTimers.push(this); - } - if (!fastNowTimeout || fastTimers.length === 1) { - refreshTimeout(); - } - this._state = PENDING; - } - /** - * The `clear` method cancels the timer, preventing it from executing. - * - * @returns {void} - * @private - */ - clear() { - this._state = TO_BE_CLEARED; - this._idleStart = -1; - } - }; - _a = kFastTimer; - module.exports = { - /** - * The setTimeout() method sets a timer which executes a function once the - * timer expires. - * @param {Function} callback A function to be executed after the timer - * expires. - * @param {number} delay The time, in milliseconds that the timer should - * wait before the specified function or code is executed. - * @param {*} [arg] An optional argument to be passed to the callback function - * when the timer expires. - * @returns {NodeJS.Timeout|FastTimer} - */ - setTimeout(callback, delay, arg) { - return delay <= RESOLUTION_MS ? setTimeout(callback, delay, arg) : new FastTimer(callback, delay, arg); - }, - /** - * The clearTimeout method cancels an instantiated Timer previously created - * by calling setTimeout. - * - * @param {NodeJS.Timeout|FastTimer} timeout - */ - clearTimeout(timeout) { - if (timeout[kFastTimer]) { - timeout.clear(); - } else { - clearTimeout(timeout); - } - }, - /** - * The setFastTimeout() method sets a fastTimer which executes a function once - * the timer expires. - * @param {Function} callback A function to be executed after the timer - * expires. - * @param {number} delay The time, in milliseconds that the timer should - * wait before the specified function or code is executed. - * @param {*} [arg] An optional argument to be passed to the callback function - * when the timer expires. - * @returns {FastTimer} - */ - setFastTimeout(callback, delay, arg) { - return new FastTimer(callback, delay, arg); - }, - /** - * The clearTimeout method cancels an instantiated FastTimer previously - * created by calling setFastTimeout. - * - * @param {FastTimer} timeout - */ - clearFastTimeout(timeout) { - timeout.clear(); - }, - /** - * The now method returns the value of the internal fast timer clock. - * - * @returns {number} - */ - now() { - return fastNow; - }, - /** - * Trigger the onTick function to process the fastTimers array. - * Exported for testing purposes only. - * Marking as deprecated to discourage any use outside of testing. - * @deprecated - * @param {number} [delay=0] The delay in milliseconds to add to the now value. - */ - tick(delay = 0) { - fastNow += delay - RESOLUTION_MS + 1; - onTick(); - onTick(); - }, - /** - * Reset FastTimers. - * Exported for testing purposes only. - * Marking as deprecated to discourage any use outside of testing. - * @deprecated - */ - reset() { - fastNow = 0; - fastTimers.length = 0; - clearTimeout(fastNowTimeout); - fastNowTimeout = null; - }, - /** - * Exporting for testing purposes only. - * Marking as deprecated to discourage any use outside of testing. - * @deprecated - */ - kFastTimer - }; - } - }); - - // - var require_connect = __commonJS({ - ""(exports, module) { - "use strict"; - var net = __require("net"); - var assert = __require("assert"); - var util = require_util(); - var { InvalidArgumentError, ConnectTimeoutError } = require_errors(); - var timers = require_timers(); - function noop() { - } - var tls; - var SessionCache; - if (global.FinalizationRegistry && !(process.env.NODE_V8_COVERAGE || process.env.UNDICI_NO_FG)) { - SessionCache = class WeakSessionCache { - constructor(maxCachedSessions) { - this._maxCachedSessions = maxCachedSessions; - this._sessionCache = /* @__PURE__ */ new Map(); - this._sessionRegistry = new global.FinalizationRegistry((key) => { - if (this._sessionCache.size < this._maxCachedSessions) { - return; - } - const ref = this._sessionCache.get(key); - if (ref !== void 0 && ref.deref() === void 0) { - 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 = /* @__PURE__ */ new Map(); - } - get(sessionKey) { - return this._sessionCache.get(sessionKey); - } - set(sessionKey, session) { - if (this._maxCachedSessions === 0) { - return; - } - if (this._sessionCache.size >= this._maxCachedSessions) { - const { value: oldestKey } = this._sessionCache.keys().next(); - this._sessionCache.delete(oldestKey); - } - this._sessionCache.set(sessionKey, session); - } - }; - } - function buildConnector(_a) { - var _b = _a, { allowH2, maxCachedSessions, socketPath, timeout, session: customSession } = _b, opts = __objRest(_b, ["allowH2", "maxCachedSessions", "socketPath", "timeout", "session"]); - if (maxCachedSessions != null && (!Number.isInteger(maxCachedSessions) || maxCachedSessions < 0)) { - throw new InvalidArgumentError("maxCachedSessions must be a positive integer or zero"); - } - const options = __spreadValues({ path: socketPath }, opts); - const sessionCache = new SessionCache(maxCachedSessions == null ? 100 : maxCachedSessions); - timeout = timeout == null ? 1e4 : 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 = __require("tls"); - } - servername = servername || options.servername || util.getServerName(host) || null; - const sessionKey = servername || hostname; - assert(sessionKey); - const session = customSession || sessionCache.get(sessionKey) || null; - port = port || 443; - socket = tls.connect(__spreadProps(__spreadValues({ - highWaterMark: 16384 - }, 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, - host: hostname - })); - socket.on("session", function(session2) { - sessionCache.set(sessionKey, session2); - }); - } else { - assert(!httpSocket, "httpSocket can only be sent on TLS update"); - port = port || 80; - socket = net.connect(__spreadProps(__spreadValues({ - highWaterMark: 64 * 1024 - }, options), { - localAddress, - port, - host: hostname - })); - } - if (options.keepAlive == null || options.keepAlive) { - const keepAliveInitialDelay = options.keepAliveInitialDelay === void 0 ? 6e4 : options.keepAliveInitialDelay; - socket.setKeepAlive(true, keepAliveInitialDelay); - } - const clearConnectTimeout = setupConnectTimeout(new WeakRef(socket), { timeout, hostname, port }); - socket.setNoDelay(true).once(protocol === "https:" ? "secureConnect" : "connect", function() { - queueMicrotask(clearConnectTimeout); - if (callback) { - const cb = callback; - callback = null; - cb(null, this); - } - }).on("error", function(err) { - queueMicrotask(clearConnectTimeout); - if (callback) { - const cb = callback; - callback = null; - cb(err); - } - }); - return socket; - }; - } - var setupConnectTimeout = process.platform === "win32" ? (socketWeakRef, opts) => { - if (!opts.timeout) { - return noop; - } - let s1 = null; - let s2 = null; - const fastTimer = timers.setFastTimeout(() => { - s1 = setImmediate(() => { - s2 = setImmediate(() => onConnectTimeout(socketWeakRef.deref(), opts)); - }); - }, opts.timeout); - return () => { - timers.clearFastTimeout(fastTimer); - clearImmediate(s1); - clearImmediate(s2); - }; - } : (socketWeakRef, opts) => { - if (!opts.timeout) { - return noop; - } - let s1 = null; - const fastTimer = timers.setFastTimeout(() => { - s1 = setImmediate(() => { - onConnectTimeout(socketWeakRef.deref(), opts); - }); - }, opts.timeout); - return () => { - timers.clearFastTimeout(fastTimer); - clearImmediate(s1); - }; - }; - function onConnectTimeout(socket, opts) { - if (socket == null) { - return; - } - let message = "Connect Timeout Error"; - if (Array.isArray(socket.autoSelectFamilyAttemptedAddresses)) { - message += ` (attempted addresses: ${socket.autoSelectFamilyAttemptedAddresses.join(", ")},`; - } else { - message += ` (attempted address: ${opts.hostname}:${opts.port},`; - } - message += ` timeout: ${opts.timeout}ms)`; - util.destroy(socket, new ConnectTimeoutError(message)); - } - module.exports = buildConnector; - } - }); - - // - var require_utils = __commonJS({ - ""(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; - } - }); - - // - var require_constants2 = __commonJS({ - ""(exports) { - "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; - var utils_1 = require_utils(); - var ERROR; - (function(ERROR2) { - ERROR2[ERROR2["OK"] = 0] = "OK"; - ERROR2[ERROR2["INTERNAL"] = 1] = "INTERNAL"; - ERROR2[ERROR2["STRICT"] = 2] = "STRICT"; - ERROR2[ERROR2["LF_EXPECTED"] = 3] = "LF_EXPECTED"; - ERROR2[ERROR2["UNEXPECTED_CONTENT_LENGTH"] = 4] = "UNEXPECTED_CONTENT_LENGTH"; - ERROR2[ERROR2["CLOSED_CONNECTION"] = 5] = "CLOSED_CONNECTION"; - ERROR2[ERROR2["INVALID_METHOD"] = 6] = "INVALID_METHOD"; - ERROR2[ERROR2["INVALID_URL"] = 7] = "INVALID_URL"; - ERROR2[ERROR2["INVALID_CONSTANT"] = 8] = "INVALID_CONSTANT"; - ERROR2[ERROR2["INVALID_VERSION"] = 9] = "INVALID_VERSION"; - ERROR2[ERROR2["INVALID_HEADER_TOKEN"] = 10] = "INVALID_HEADER_TOKEN"; - ERROR2[ERROR2["INVALID_CONTENT_LENGTH"] = 11] = "INVALID_CONTENT_LENGTH"; - ERROR2[ERROR2["INVALID_CHUNK_SIZE"] = 12] = "INVALID_CHUNK_SIZE"; - ERROR2[ERROR2["INVALID_STATUS"] = 13] = "INVALID_STATUS"; - ERROR2[ERROR2["INVALID_EOF_STATE"] = 14] = "INVALID_EOF_STATE"; - ERROR2[ERROR2["INVALID_TRANSFER_ENCODING"] = 15] = "INVALID_TRANSFER_ENCODING"; - ERROR2[ERROR2["CB_MESSAGE_BEGIN"] = 16] = "CB_MESSAGE_BEGIN"; - ERROR2[ERROR2["CB_HEADERS_COMPLETE"] = 17] = "CB_HEADERS_COMPLETE"; - ERROR2[ERROR2["CB_MESSAGE_COMPLETE"] = 18] = "CB_MESSAGE_COMPLETE"; - ERROR2[ERROR2["CB_CHUNK_HEADER"] = 19] = "CB_CHUNK_HEADER"; - ERROR2[ERROR2["CB_CHUNK_COMPLETE"] = 20] = "CB_CHUNK_COMPLETE"; - ERROR2[ERROR2["PAUSED"] = 21] = "PAUSED"; - ERROR2[ERROR2["PAUSED_UPGRADE"] = 22] = "PAUSED_UPGRADE"; - ERROR2[ERROR2["PAUSED_H2_UPGRADE"] = 23] = "PAUSED_H2_UPGRADE"; - ERROR2[ERROR2["USER"] = 24] = "USER"; - })(ERROR = exports.ERROR || (exports.ERROR = {})); - var TYPE; - (function(TYPE2) { - TYPE2[TYPE2["BOTH"] = 0] = "BOTH"; - TYPE2[TYPE2["REQUEST"] = 1] = "REQUEST"; - TYPE2[TYPE2["RESPONSE"] = 2] = "RESPONSE"; - })(TYPE = exports.TYPE || (exports.TYPE = {})); - var FLAGS; - (function(FLAGS2) { - FLAGS2[FLAGS2["CONNECTION_KEEP_ALIVE"] = 1] = "CONNECTION_KEEP_ALIVE"; - FLAGS2[FLAGS2["CONNECTION_CLOSE"] = 2] = "CONNECTION_CLOSE"; - FLAGS2[FLAGS2["CONNECTION_UPGRADE"] = 4] = "CONNECTION_UPGRADE"; - FLAGS2[FLAGS2["CHUNKED"] = 8] = "CHUNKED"; - FLAGS2[FLAGS2["UPGRADE"] = 16] = "UPGRADE"; - FLAGS2[FLAGS2["CONTENT_LENGTH"] = 32] = "CONTENT_LENGTH"; - FLAGS2[FLAGS2["SKIPBODY"] = 64] = "SKIPBODY"; - FLAGS2[FLAGS2["TRAILING"] = 128] = "TRAILING"; - FLAGS2[FLAGS2["TRANSFER_ENCODING"] = 512] = "TRANSFER_ENCODING"; - })(FLAGS = exports.FLAGS || (exports.FLAGS = {})); - var LENIENT_FLAGS; - (function(LENIENT_FLAGS2) { - LENIENT_FLAGS2[LENIENT_FLAGS2["HEADERS"] = 1] = "HEADERS"; - LENIENT_FLAGS2[LENIENT_FLAGS2["CHUNKED_LENGTH"] = 2] = "CHUNKED_LENGTH"; - LENIENT_FLAGS2[LENIENT_FLAGS2["KEEP_ALIVE"] = 4] = "KEEP_ALIVE"; - })(LENIENT_FLAGS = exports.LENIENT_FLAGS || (exports.LENIENT_FLAGS = {})); - var METHODS; - (function(METHODS2) { - METHODS2[METHODS2["DELETE"] = 0] = "DELETE"; - METHODS2[METHODS2["GET"] = 1] = "GET"; - METHODS2[METHODS2["HEAD"] = 2] = "HEAD"; - METHODS2[METHODS2["POST"] = 3] = "POST"; - METHODS2[METHODS2["PUT"] = 4] = "PUT"; - METHODS2[METHODS2["CONNECT"] = 5] = "CONNECT"; - METHODS2[METHODS2["OPTIONS"] = 6] = "OPTIONS"; - METHODS2[METHODS2["TRACE"] = 7] = "TRACE"; - METHODS2[METHODS2["COPY"] = 8] = "COPY"; - METHODS2[METHODS2["LOCK"] = 9] = "LOCK"; - METHODS2[METHODS2["MKCOL"] = 10] = "MKCOL"; - METHODS2[METHODS2["MOVE"] = 11] = "MOVE"; - METHODS2[METHODS2["PROPFIND"] = 12] = "PROPFIND"; - METHODS2[METHODS2["PROPPATCH"] = 13] = "PROPPATCH"; - METHODS2[METHODS2["SEARCH"] = 14] = "SEARCH"; - METHODS2[METHODS2["UNLOCK"] = 15] = "UNLOCK"; - METHODS2[METHODS2["BIND"] = 16] = "BIND"; - METHODS2[METHODS2["REBIND"] = 17] = "REBIND"; - METHODS2[METHODS2["UNBIND"] = 18] = "UNBIND"; - METHODS2[METHODS2["ACL"] = 19] = "ACL"; - METHODS2[METHODS2["REPORT"] = 20] = "REPORT"; - METHODS2[METHODS2["MKACTIVITY"] = 21] = "MKACTIVITY"; - METHODS2[METHODS2["CHECKOUT"] = 22] = "CHECKOUT"; - METHODS2[METHODS2["MERGE"] = 23] = "MERGE"; - METHODS2[METHODS2["M-SEARCH"] = 24] = "M-SEARCH"; - METHODS2[METHODS2["NOTIFY"] = 25] = "NOTIFY"; - METHODS2[METHODS2["SUBSCRIBE"] = 26] = "SUBSCRIBE"; - METHODS2[METHODS2["UNSUBSCRIBE"] = 27] = "UNSUBSCRIBE"; - METHODS2[METHODS2["PATCH"] = 28] = "PATCH"; - METHODS2[METHODS2["PURGE"] = 29] = "PURGE"; - METHODS2[METHODS2["MKCALENDAR"] = 30] = "MKCALENDAR"; - METHODS2[METHODS2["LINK"] = 31] = "LINK"; - METHODS2[METHODS2["UNLINK"] = 32] = "UNLINK"; - METHODS2[METHODS2["SOURCE"] = 33] = "SOURCE"; - METHODS2[METHODS2["PRI"] = 34] = "PRI"; - METHODS2[METHODS2["DESCRIBE"] = 35] = "DESCRIBE"; - METHODS2[METHODS2["ANNOUNCE"] = 36] = "ANNOUNCE"; - METHODS2[METHODS2["SETUP"] = 37] = "SETUP"; - METHODS2[METHODS2["PLAY"] = 38] = "PLAY"; - METHODS2[METHODS2["PAUSE"] = 39] = "PAUSE"; - METHODS2[METHODS2["TEARDOWN"] = 40] = "TEARDOWN"; - METHODS2[METHODS2["GET_PARAMETER"] = 41] = "GET_PARAMETER"; - METHODS2[METHODS2["SET_PARAMETER"] = 42] = "SET_PARAMETER"; - METHODS2[METHODS2["REDIRECT"] = 43] = "REDIRECT"; - METHODS2[METHODS2["RECORD"] = 44] = "RECORD"; - METHODS2[METHODS2["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(FINISH2) { - FINISH2[FINISH2["SAFE"] = 0] = "SAFE"; - FINISH2[FINISH2["SAFE_WITH_CB"] = 1] = "SAFE_WITH_CB"; - FINISH2[FINISH2["UNSAFE"] = 2] = "UNSAFE"; - })(FINISH = exports.FINISH || (exports.FINISH = {})); - exports.ALPHA = []; - for (let i = "A".charCodeAt(0); i <= "Z".charCodeAt(0); i++) { - exports.ALPHA.push(String.fromCharCode(i)); - exports.ALPHA.push(String.fromCharCode(i + 32)); - } - 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: 10, - B: 11, - C: 12, - D: 13, - E: 14, - F: 15, - a: 10, - b: 11, - c: 12, - d: 13, - e: 14, - f: 15 - }; - 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(["%", ";", ":", "&", "=", "+", "$", ","]); - exports.STRICT_URL_CHAR = [ - "!", - '"', - "$", - "%", - "&", - "'", - "(", - ")", - "*", - "+", - ",", - "-", - ".", - "/", - ":", - ";", - "<", - "=", - ">", - "@", - "[", - "\\", - "]", - "^", - "_", - "`", - "{", - "|", - "}", - "~" - ].concat(exports.ALPHANUM); - exports.URL_CHAR = exports.STRICT_URL_CHAR.concat([" ", "\f"]); - for (let i = 128; i <= 255; i++) { - exports.URL_CHAR.push(i); - } - exports.HEX = exports.NUM.concat(["a", "b", "c", "d", "e", "f", "A", "B", "C", "D", "E", "F"]); - exports.STRICT_TOKEN = [ - "!", - "#", - "$", - "%", - "&", - "'", - "*", - "+", - "-", - ".", - "^", - "_", - "`", - "|", - "~" - ].concat(exports.ALPHANUM); - exports.TOKEN = exports.STRICT_TOKEN.concat([" "]); - exports.HEADER_CHARS = [" "]; - for (let i = 32; i <= 255; i++) { - if (i !== 127) { - exports.HEADER_CHARS.push(i); - } - } - 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_STATE2) { - HEADER_STATE2[HEADER_STATE2["GENERAL"] = 0] = "GENERAL"; - HEADER_STATE2[HEADER_STATE2["CONNECTION"] = 1] = "CONNECTION"; - HEADER_STATE2[HEADER_STATE2["CONTENT_LENGTH"] = 2] = "CONTENT_LENGTH"; - HEADER_STATE2[HEADER_STATE2["TRANSFER_ENCODING"] = 3] = "TRANSFER_ENCODING"; - HEADER_STATE2[HEADER_STATE2["UPGRADE"] = 4] = "UPGRADE"; - HEADER_STATE2[HEADER_STATE2["CONNECTION_KEEP_ALIVE"] = 5] = "CONNECTION_KEEP_ALIVE"; - HEADER_STATE2[HEADER_STATE2["CONNECTION_CLOSE"] = 6] = "CONNECTION_CLOSE"; - HEADER_STATE2[HEADER_STATE2["CONNECTION_UPGRADE"] = 7] = "CONNECTION_UPGRADE"; - HEADER_STATE2[HEADER_STATE2["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 - }; - } - }); - - // - var require_llhttp_wasm = __commonJS({ - ""(exports, module) { - "use strict"; - var { Buffer: Buffer2 } = __require("buffer"); - module.exports = Buffer2.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADDsYBAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHyAhIyUmKCorLC8wMTIzNDU2Nzk6Ozw9lANAQkRFRklLTk9QUVJTVFVWWFpbXF1eX2BhYmNkZWZnaGpsb3Bxc3V2eHl6e3x/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcsBzAHNAc4BzwGKA4kDiAOHA4QDgwOAA/sC+gL5AvgC9wL0AvMC8gLLAsECsALZAQsgASAERw3wAkHdASEDDLMDCyABIARHDcgBQcMBIQMMsgMLIAEgBEcNe0H3ACEDDLEDCyABIARHDXBB7wAhAwywAwsgASAERw1pQeoAIQMMrwMLIAEgBEcNZUHoACEDDK4DCyABIARHDWJB5gAhAwytAwsgASAERw0aQRghAwysAwsgASAERw0VQRIhAwyrAwsgASAERw1CQcUAIQMMqgMLIAEgBEcNNEE/IQMMqQMLIAEgBEcNMkE8IQMMqAMLIAEgBEcNK0ExIQMMpwMLIAItAC5BAUYNnwMMwQILQQAhAAJAAkACQCACLQAqRQ0AIAItACtFDQAgAi8BMCIDQQJxRQ0BDAILIAIvATAiA0EBcUUNAQtBASEAIAItAChBAUYNACACLwEyIgVB5ABrQeQASQ0AIAVBzAFGDQAgBUGwAkYNACADQcAAcQ0AQQAhACADQYgEcUGABEYNACADQShxQQBHIQALIAJBADsBMCACQQA6AC8gAEUN3wIgAkIANwMgDOACC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAARQ3MASAAQRVHDd0CIAJBBDYCHCACIAE2AhQgAkGwGDYCECACQRU2AgxBACEDDKQDCyABIARGBEBBBiEDDKQDCyABQQFqIQFBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAA3ZAgwcCyACQgA3AyBBEiEDDIkDCyABIARHDRZBHSEDDKEDCyABIARHBEAgAUEBaiEBQRAhAwyIAwtBByEDDKADCyACIAIpAyAiCiAEIAFrrSILfSIMQgAgCiAMWhs3AyAgCiALWA3UAkEIIQMMnwMLIAEgBEcEQCACQQk2AgggAiABNgIEQRQhAwyGAwtBCSEDDJ4DCyACKQMgQgBSDccBIAIgAi8BMEGAAXI7ATAMQgsgASAERw0/QdAAIQMMnAMLIAEgBEYEQEELIQMMnAMLIAFBAWohAUEAIQACQCACKAI4IgNFDQAgAygCUCIDRQ0AIAIgAxEAACEACyAADc8CDMYBC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ3GASAAQRVHDc0CIAJBCzYCHCACIAE2AhQgAkGCGTYCECACQRU2AgxBACEDDJoDC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ0MIABBFUcNygIgAkEaNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMmQMLQQAhAAJAIAIoAjgiA0UNACADKAJMIgNFDQAgAiADEQAAIQALIABFDcQBIABBFUcNxwIgAkELNgIcIAIgATYCFCACQZEXNgIQIAJBFTYCDEEAIQMMmAMLIAEgBEYEQEEPIQMMmAMLIAEtAAAiAEE7Rg0HIABBDUcNxAIgAUEBaiEBDMMBC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3DASAAQRVHDcICIAJBDzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJYDCwNAIAEtAABB8DVqLQAAIgBBAUcEQCAAQQJHDcECIAIoAgQhAEEAIQMgAkEANgIEIAIgACABQQFqIgEQLSIADcICDMUBCyAEIAFBAWoiAUcNAAtBEiEDDJUDC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3FASAAQRVHDb0CIAJBGzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJQDCyABIARGBEBBFiEDDJQDCyACQQo2AgggAiABNgIEQQAhAAJAIAIoAjgiA0UNACADKAJIIgNFDQAgAiADEQAAIQALIABFDcIBIABBFUcNuQIgAkEVNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMkwMLIAEgBEcEQANAIAEtAABB8DdqLQAAIgBBAkcEQAJAIABBAWsOBMQCvQIAvgK9AgsgAUEBaiEBQQghAwz8AgsgBCABQQFqIgFHDQALQRUhAwyTAwtBFSEDDJIDCwNAIAEtAABB8DlqLQAAIgBBAkcEQCAAQQFrDgTFArcCwwK4ArcCCyAEIAFBAWoiAUcNAAtBGCEDDJEDCyABIARHBEAgAkELNgIIIAIgATYCBEEHIQMM+AILQRkhAwyQAwsgAUEBaiEBDAILIAEgBEYEQEEaIQMMjwMLAkAgAS0AAEENaw4UtQG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwEAvwELQQAhAyACQQA2AhwgAkGvCzYCECACQQI2AgwgAiABQQFqNgIUDI4DCyABIARGBEBBGyEDDI4DCyABLQAAIgBBO0cEQCAAQQ1HDbECIAFBAWohAQy6AQsgAUEBaiEBC0EiIQMM8wILIAEgBEYEQEEcIQMMjAMLQgAhCgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAS0AAEEwaw43wQLAAgABAgMEBQYH0AHQAdAB0AHQAdAB0AEICQoLDA3QAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdABDg8QERIT0AELQgIhCgzAAgtCAyEKDL8CC0IEIQoMvgILQgUhCgy9AgtCBiEKDLwCC0IHIQoMuwILQgghCgy6AgtCCSEKDLkCC0IKIQoMuAILQgshCgy3AgtCDCEKDLYCC0INIQoMtQILQg4hCgy0AgtCDyEKDLMCC0IKIQoMsgILQgshCgyxAgtCDCEKDLACC0INIQoMrwILQg4hCgyuAgtCDyEKDK0CC0IAIQoCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEtAABBMGsON8ACvwIAAQIDBAUGB74CvgK+Ar4CvgK+Ar4CCAkKCwwNvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ag4PEBESE74CC0ICIQoMvwILQgMhCgy+AgtCBCEKDL0CC0IFIQoMvAILQgYhCgy7AgtCByEKDLoCC0IIIQoMuQILQgkhCgy4AgtCCiEKDLcCC0ILIQoMtgILQgwhCgy1AgtCDSEKDLQCC0IOIQoMswILQg8hCgyyAgtCCiEKDLECC0ILIQoMsAILQgwhCgyvAgtCDSEKDK4CC0IOIQoMrQILQg8hCgysAgsgAiACKQMgIgogBCABa60iC30iDEIAIAogDFobNwMgIAogC1gNpwJBHyEDDIkDCyABIARHBEAgAkEJNgIIIAIgATYCBEElIQMM8AILQSAhAwyIAwtBASEFIAIvATAiA0EIcUUEQCACKQMgQgBSIQULAkAgAi0ALgRAQQEhACACLQApQQVGDQEgA0HAAHFFIAVxRQ0BC0EAIQAgA0HAAHENAEECIQAgA0EIcQ0AIANBgARxBEACQCACLQAoQQFHDQAgAi0ALUEKcQ0AQQUhAAwCC0EEIQAMAQsgA0EgcUUEQAJAIAItAChBAUYNACACLwEyIgBB5ABrQeQASQ0AIABBzAFGDQAgAEGwAkYNAEEEIQAgA0EocUUNAiADQYgEcUGABEYNAgtBACEADAELQQBBAyACKQMgUBshAAsgAEEBaw4FvgIAsAEBpAKhAgtBESEDDO0CCyACQQE6AC8MhAMLIAEgBEcNnQJBJCEDDIQDCyABIARHDRxBxgAhAwyDAwtBACEAAkAgAigCOCIDRQ0AIAMoAkQiA0UNACACIAMRAAAhAAsgAEUNJyAAQRVHDZgCIAJB0AA2AhwgAiABNgIUIAJBkRg2AhAgAkEVNgIMQQAhAwyCAwsgASAERgRAQSghAwyCAwtBACEDIAJBADYCBCACQQw2AgggAiABIAEQKiIARQ2UAiACQSc2AhwgAiABNgIUIAIgADYCDAyBAwsgASAERgRAQSkhAwyBAwsgAS0AACIAQSBGDRMgAEEJRw2VAiABQQFqIQEMFAsgASAERwRAIAFBAWohAQwWC0EqIQMM/wILIAEgBEYEQEErIQMM/wILIAEtAAAiAEEJRyAAQSBHcQ2QAiACLQAsQQhHDd0CIAJBADoALAzdAgsgASAERgRAQSwhAwz+AgsgAS0AAEEKRw2OAiABQQFqIQEMsAELIAEgBEcNigJBLyEDDPwCCwNAIAEtAAAiAEEgRwRAIABBCmsOBIQCiAKIAoQChgILIAQgAUEBaiIBRw0AC0ExIQMM+wILQTIhAyABIARGDfoCIAIoAgAiACAEIAFraiEHIAEgAGtBA2ohBgJAA0AgAEHwO2otAAAgAS0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDQEgAEEDRgRAQQYhAQziAgsgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAc2AgAM+wILIAJBADYCAAyGAgtBMyEDIAQgASIARg35AiAEIAFrIAIoAgAiAWohByAAIAFrQQhqIQYCQANAIAFB9DtqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBCEYEQEEFIQEM4QILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPoCCyACQQA2AgAgACEBDIUCC0E0IQMgBCABIgBGDfgCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgJAA0AgAUHQwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBBUYEQEEHIQEM4AILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPkCCyACQQA2AgAgACEBDIQCCyABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRg0JDIECCyAEIAFBAWoiAUcNAAtBMCEDDPgCC0EwIQMM9wILIAEgBEcEQANAIAEtAAAiAEEgRwRAIABBCmsOBP8B/gH+Af8B/gELIAQgAUEBaiIBRw0AC0E4IQMM9wILQTghAwz2AgsDQCABLQAAIgBBIEcgAEEJR3EN9gEgBCABQQFqIgFHDQALQTwhAwz1AgsDQCABLQAAIgBBIEcEQAJAIABBCmsOBPkBBAT5AQALIABBLEYN9QEMAwsgBCABQQFqIgFHDQALQT8hAwz0AgtBwAAhAyABIARGDfMCIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAEGAQGstAAAgAS0AAEEgckcNASAAQQZGDdsCIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPQCCyACQQA2AgALQTYhAwzZAgsgASAERgRAQcEAIQMM8gILIAJBDDYCCCACIAE2AgQgAi0ALEEBaw4E+wHuAewB6wHUAgsgAUEBaiEBDPoBCyABIARHBEADQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxIgBBCUYNACAAQSBGDQACQAJAAkACQCAAQeMAaw4TAAMDAwMDAwMBAwMDAwMDAwMDAgMLIAFBAWohAUExIQMM3AILIAFBAWohAUEyIQMM2wILIAFBAWohAUEzIQMM2gILDP4BCyAEIAFBAWoiAUcNAAtBNSEDDPACC0E1IQMM7wILIAEgBEcEQANAIAEtAABBgDxqLQAAQQFHDfcBIAQgAUEBaiIBRw0AC0E9IQMM7wILQT0hAwzuAgtBACEAAkAgAigCOCIDRQ0AIAMoAkAiA0UNACACIAMRAAAhAAsgAEUNASAAQRVHDeYBIAJBwgA2AhwgAiABNgIUIAJB4xg2AhAgAkEVNgIMQQAhAwztAgsgAUEBaiEBC0E8IQMM0gILIAEgBEYEQEHCACEDDOsCCwJAA0ACQCABLQAAQQlrDhgAAswCzALRAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAgDMAgsgBCABQQFqIgFHDQALQcIAIQMM6wILIAFBAWohASACLQAtQQFxRQ3+AQtBLCEDDNACCyABIARHDd4BQcQAIQMM6AILA0AgAS0AAEGQwABqLQAAQQFHDZwBIAQgAUEBaiIBRw0AC0HFACEDDOcCCyABLQAAIgBBIEYN/gEgAEE6Rw3AAiACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgAN3gEM3QELQccAIQMgBCABIgBGDeUCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFBkMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvwIgAUEFRg3CAiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzlAgtByAAhAyAEIAEiAEYN5AIgBCABayACKAIAIgFqIQcgACABa0EJaiEGA0AgAUGWwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw2+AkECIAFBCUYNwgIaIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOQCCyABIARGBEBByQAhAwzkAgsCQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxQe4Aaw4HAL8CvwK/Ar8CvwIBvwILIAFBAWohAUE+IQMMywILIAFBAWohAUE/IQMMygILQcoAIQMgBCABIgBGDeICIAQgAWsgAigCACIBaiEGIAAgAWtBAWohBwNAIAFBoMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvAIgAUEBRg2+AiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBjYCAAziAgtBywAhAyAEIAEiAEYN4QIgBCABayACKAIAIgFqIQcgACABa0EOaiEGA0AgAUGiwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw27AiABQQ5GDb4CIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOECC0HMACEDIAQgASIARg3gAiAEIAFrIAIoAgAiAWohByAAIAFrQQ9qIQYDQCABQcDCAGotAAAgAC0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDboCQQMgAUEPRg2+AhogAUEBaiEBIAQgAEEBaiIARw0ACyACIAc2AgAM4AILQc0AIQMgBCABIgBGDd8CIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFB0MIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNuQJBBCABQQVGDb0CGiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzfAgsgASAERgRAQc4AIQMM3wILAkACQAJAAkAgAS0AACIAQSByIAAgAEHBAGtB/wFxQRpJG0H/AXFB4wBrDhMAvAK8ArwCvAK8ArwCvAK8ArwCvAK8ArwCAbwCvAK8AgIDvAILIAFBAWohAUHBACEDDMgCCyABQQFqIQFBwgAhAwzHAgsgAUEBaiEBQcMAIQMMxgILIAFBAWohAUHEACEDDMUCCyABIARHBEAgAkENNgIIIAIgATYCBEHFACEDDMUCC0HPACEDDN0CCwJAAkAgAS0AAEEKaw4EAZABkAEAkAELIAFBAWohAQtBKCEDDMMCCyABIARGBEBB0QAhAwzcAgsgAS0AAEEgRw0AIAFBAWohASACLQAtQQFxRQ3QAQtBFyEDDMECCyABIARHDcsBQdIAIQMM2QILQdMAIQMgASAERg3YAiACKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABB1sIAai0AAEcNxwEgAEEBRg3KASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBjYCAAzYAgsgASAERgRAQdUAIQMM2AILIAEtAABBCkcNwgEgAUEBaiEBDMoBCyABIARGBEBB1gAhAwzXAgsCQAJAIAEtAABBCmsOBADDAcMBAcMBCyABQQFqIQEMygELIAFBAWohAUHKACEDDL0CC0EAIQACQCACKAI4IgNFDQAgAygCPCIDRQ0AIAIgAxEAACEACyAADb8BQc0AIQMMvAILIAItAClBIkYNzwIMiQELIAQgASIFRgRAQdsAIQMM1AILQQAhAEEBIQFBASEGQQAhAwJAAn8CQAJAAkACQAJAAkACQCAFLQAAQTBrDgrFAcQBAAECAwQFBgjDAQtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshA0EAIQFBACEGDL0BC0EJIQNBASEAQQAhAUEAIQYMvAELIAEgBEYEQEHdACEDDNMCCyABLQAAQS5HDbgBIAFBAWohAQyIAQsgASAERw22AUHfACEDDNECCyABIARHBEAgAkEONgIIIAIgATYCBEHQACEDDLgCC0HgACEDDNACC0HhACEDIAEgBEYNzwIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGA0AgAS0AACAAQeLCAGotAABHDbEBIABBA0YNswEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMzwILQeIAIQMgASAERg3OAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYDQCABLQAAIABB5sIAai0AAEcNsAEgAEECRg2vASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAzOAgtB4wAhAyABIARGDc0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgNAIAEtAAAgAEHpwgBqLQAARw2vASAAQQNGDa0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADM0CCyABIARGBEBB5QAhAwzNAgsgAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANqgFB1gAhAwyzAgsgASAERwRAA0AgAS0AACIAQSBHBEACQAJAAkAgAEHIAGsOCwABswGzAbMBswGzAbMBswGzAQKzAQsgAUEBaiEBQdIAIQMMtwILIAFBAWohAUHTACEDDLYCCyABQQFqIQFB1AAhAwy1AgsgBCABQQFqIgFHDQALQeQAIQMMzAILQeQAIQMMywILA0AgAS0AAEHwwgBqLQAAIgBBAUcEQCAAQQJrDgOnAaYBpQGkAQsgBCABQQFqIgFHDQALQeYAIQMMygILIAFBAWogASAERw0CGkHnACEDDMkCCwNAIAEtAABB8MQAai0AACIAQQFHBEACQCAAQQJrDgSiAaEBoAEAnwELQdcAIQMMsQILIAQgAUEBaiIBRw0AC0HoACEDDMgCCyABIARGBEBB6QAhAwzIAgsCQCABLQAAIgBBCmsOGrcBmwGbAbQBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBpAGbAZsBAJkBCyABQQFqCyEBQQYhAwytAgsDQCABLQAAQfDGAGotAABBAUcNfSAEIAFBAWoiAUcNAAtB6gAhAwzFAgsgAUEBaiABIARHDQIaQesAIQMMxAILIAEgBEYEQEHsACEDDMQCCyABQQFqDAELIAEgBEYEQEHtACEDDMMCCyABQQFqCyEBQQQhAwyoAgsgASAERgRAQe4AIQMMwQILAkACQAJAIAEtAABB8MgAai0AAEEBaw4HkAGPAY4BAHwBAo0BCyABQQFqIQEMCwsgAUEBagyTAQtBACEDIAJBADYCHCACQZsSNgIQIAJBBzYCDCACIAFBAWo2AhQMwAILAkADQCABLQAAQfDIAGotAAAiAEEERwRAAkACQCAAQQFrDgeUAZMBkgGNAQAEAY0BC0HaACEDDKoCCyABQQFqIQFB3AAhAwypAgsgBCABQQFqIgFHDQALQe8AIQMMwAILIAFBAWoMkQELIAQgASIARgRAQfAAIQMMvwILIAAtAABBL0cNASAAQQFqIQEMBwsgBCABIgBGBEBB8QAhAwy+AgsgAC0AACIBQS9GBEAgAEEBaiEBQd0AIQMMpQILIAFBCmsiA0EWSw0AIAAhAUEBIAN0QYmAgAJxDfkBC0EAIQMgAkEANgIcIAIgADYCFCACQYwcNgIQIAJBBzYCDAy8AgsgASAERwRAIAFBAWohAUHeACEDDKMCC0HyACEDDLsCCyABIARGBEBB9AAhAwy7AgsCQCABLQAAQfDMAGotAABBAWsOA/cBcwCCAQtB4QAhAwyhAgsgASAERwRAA0AgAS0AAEHwygBqLQAAIgBBA0cEQAJAIABBAWsOAvkBAIUBC0HfACEDDKMCCyAEIAFBAWoiAUcNAAtB8wAhAwy6AgtB8wAhAwy5AgsgASAERwRAIAJBDzYCCCACIAE2AgRB4AAhAwygAgtB9QAhAwy4AgsgASAERgRAQfYAIQMMuAILIAJBDzYCCCACIAE2AgQLQQMhAwydAgsDQCABLQAAQSBHDY4CIAQgAUEBaiIBRw0AC0H3ACEDDLUCCyABIARGBEBB+AAhAwy1AgsgAS0AAEEgRw16IAFBAWohAQxbC0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAADXgMgAILIAEgBEYEQEH6ACEDDLMCCyABLQAAQcwARw10IAFBAWohAUETDHYLQfsAIQMgASAERg2xAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYDQCABLQAAIABB8M4Aai0AAEcNcyAAQQVGDXUgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMsQILIAEgBEYEQEH8ACEDDLECCwJAAkAgAS0AAEHDAGsODAB0dHR0dHR0dHR0AXQLIAFBAWohAUHmACEDDJgCCyABQQFqIQFB5wAhAwyXAgtB/QAhAyABIARGDa8CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDXIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADLACCyACQQA2AgAgBkEBaiEBQRAMcwtB/gAhAyABIARGDa4CIAIoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQfbOAGotAABHDXEgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK8CCyACQQA2AgAgBkEBaiEBQRYMcgtB/wAhAyABIARGDa0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQfzOAGotAABHDXAgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK4CCyACQQA2AgAgBkEBaiEBQQUMcQsgASAERgRAQYABIQMMrQILIAEtAABB2QBHDW4gAUEBaiEBQQgMcAsgASAERgRAQYEBIQMMrAILAkACQCABLQAAQc4Aaw4DAG8BbwsgAUEBaiEBQesAIQMMkwILIAFBAWohAUHsACEDDJICCyABIARGBEBBggEhAwyrAgsCQAJAIAEtAABByABrDggAbm5ubm5uAW4LIAFBAWohAUHqACEDDJICCyABQQFqIQFB7QAhAwyRAgtBgwEhAyABIARGDakCIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQYDPAGotAABHDWwgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKoCCyACQQA2AgAgBkEBaiEBQQAMbQtBhAEhAyABIARGDagCIAIoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQYPPAGotAABHDWsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKkCCyACQQA2AgAgBkEBaiEBQSMMbAsgASAERgRAQYUBIQMMqAILAkACQCABLQAAQcwAaw4IAGtra2trawFrCyABQQFqIQFB7wAhAwyPAgsgAUEBaiEBQfAAIQMMjgILIAEgBEYEQEGGASEDDKcCCyABLQAAQcUARw1oIAFBAWohAQxgC0GHASEDIAEgBEYNpQIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBiM8Aai0AAEcNaCAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpgILIAJBADYCACAGQQFqIQFBLQxpC0GIASEDIAEgBEYNpAIgAigCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABB0M8Aai0AAEcNZyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpQILIAJBADYCACAGQQFqIQFBKQxoCyABIARGBEBBiQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv", "base64"); - } - }); - - // - var require_llhttp_simd_wasm = __commonJS({ - ""(exports, module) { - "use strict"; - var { Buffer: Buffer2 } = __require("buffer"); - module.exports = Buffer2.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVuaWVudF9oZWFkZXJzACEhbGxodHRwX3NldF9sZW5pZW50X2NodW5rZWRfbGVuZ3RoACIdbGxodHRwX3NldF9sZW5pZW50X2tlZXBfYWxpdmUAIyRsbGh0dHBfc2V0X2xlbmllbnRfdHJhbnNmZXJfZW5jb2RpbmcAJBhsbGh0dHBfbWVzc2FnZV9uZWVkc19lb2YALgkXAQBBAQsRAQIDBAUKBgcrLSwqKSglJyYK77MCLBYAQYjQACgCAARAAAtBiNAAQQE2AgALFAAgABAwIAAgAjYCOCAAIAE6ACgLFAAgACAALwEyIAAtAC4gABAvEAALHgEBf0HAABAyIgEQMCABQYAINgI4IAEgADoAKCABC48MAQd/AkAgAEUNACAAQQhrIgEgAEEEaygCACIAQXhxIgRqIQUCQCAAQQFxDQAgAEEDcUUNASABIAEoAgAiAGsiAUGc0AAoAgBJDQEgACAEaiEEAkACQEGg0AAoAgAgAUcEQCAAQf8BTQRAIABBA3YhAyABKAIIIgAgASgCDCICRgRAQYzQAEGM0AAoAgBBfiADd3E2AgAMBQsgAiAANgIIIAAgAjYCDAwECyABKAIYIQYgASABKAIMIgBHBEAgACABKAIIIgI2AgggAiAANgIMDAMLIAFBFGoiAygCACICRQRAIAEoAhAiAkUNAiABQRBqIQMLA0AgAyEHIAIiAEEUaiIDKAIAIgINACAAQRBqIQMgACgCECICDQALIAdBADYCAAwCCyAFKAIEIgBBA3FBA0cNAiAFIABBfnE2AgRBlNAAIAQ2AgAgBSAENgIAIAEgBEEBcjYCBAwDC0EAIQALIAZFDQACQCABKAIcIgJBAnRBvNIAaiIDKAIAIAFGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgAUYbaiAANgIAIABFDQELIAAgBjYCGCABKAIQIgIEQCAAIAI2AhAgAiAANgIYCyABQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAFTw0AIAUoAgQiAEEBcUUNAAJAAkACQAJAIABBAnFFBEBBpNAAKAIAIAVGBEBBpNAAIAE2AgBBmNAAQZjQACgCACAEaiIANgIAIAEgAEEBcjYCBCABQaDQACgCAEcNBkGU0ABBADYCAEGg0ABBADYCAAwGC0Gg0AAoAgAgBUYEQEGg0AAgATYCAEGU0ABBlNAAKAIAIARqIgA2AgAgASAAQQFyNgIEIAAgAWogADYCAAwGCyAAQXhxIARqIQQgAEH/AU0EQCAAQQN2IQMgBSgCCCIAIAUoAgwiAkYEQEGM0ABBjNAAKAIAQX4gA3dxNgIADAULIAIgADYCCCAAIAI2AgwMBAsgBSgCGCEGIAUgBSgCDCIARwRAQZzQACgCABogACAFKAIIIgI2AgggAiAANgIMDAMLIAVBFGoiAygCACICRQRAIAUoAhAiAkUNAiAFQRBqIQMLA0AgAyEHIAIiAEEUaiIDKAIAIgINACAAQRBqIQMgACgCECICDQALIAdBADYCAAwCCyAFIABBfnE2AgQgASAEaiAENgIAIAEgBEEBcjYCBAwDC0EAIQALIAZFDQACQCAFKAIcIgJBAnRBvNIAaiIDKAIAIAVGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgBUYbaiAANgIAIABFDQELIAAgBjYCGCAFKAIQIgIEQCAAIAI2AhAgAiAANgIYCyAFQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAEaiAENgIAIAEgBEEBcjYCBCABQaDQACgCAEcNAEGU0AAgBDYCAAwBCyAEQf8BTQRAIARBeHFBtNAAaiEAAn9BjNAAKAIAIgJBASAEQQN2dCIDcUUEQEGM0AAgAiADcjYCACAADAELIAAoAggLIgIgATYCDCAAIAE2AgggASAANgIMIAEgAjYCCAwBC0EfIQIgBEH///8HTQRAIARBJiAEQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAgsgASACNgIcIAFCADcCECACQQJ0QbzSAGohAAJAQZDQACgCACIDQQEgAnQiB3FFBEAgACABNgIAQZDQACADIAdyNgIAIAEgADYCGCABIAE2AgggASABNgIMDAELIARBGSACQQF2a0EAIAJBH0cbdCECIAAoAgAhAAJAA0AgACIDKAIEQXhxIARGDQEgAkEddiEAIAJBAXQhAiADIABBBHFqQRBqIgcoAgAiAA0ACyAHIAE2AgAgASADNgIYIAEgATYCDCABIAE2AggMAQsgAygCCCIAIAE2AgwgAyABNgIIIAFBADYCGCABIAM2AgwgASAANgIIC0Gs0ABBrNAAKAIAQQFrIgBBfyAAGzYCAAsLBwAgAC0AKAsHACAALQAqCwcAIAAtACsLBwAgAC0AKQsHACAALwEyCwcAIAAtAC4LQAEEfyAAKAIYIQEgAC0ALSECIAAtACghAyAAKAI4IQQgABAwIAAgBDYCOCAAIAM6ACggACACOgAtIAAgATYCGAu74gECB38DfiABIAJqIQQCQCAAIgIoAgwiAA0AIAIoAgQEQCACIAE2AgQLIwBBEGsiCCQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAIoAhwiA0EBaw7dAdoBAdkBAgMEBQYHCAkKCwwNDtgBDxDXARES1gETFBUWFxgZGhvgAd8BHB0e1QEfICEiIyQl1AEmJygpKiss0wHSAS0u0QHQAS8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRtsBR0hJSs8BzgFLzQFMzAFNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBywHKAbgByQG5AcgBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgEA3AELQQAMxgELQQ4MxQELQQ0MxAELQQ8MwwELQRAMwgELQRMMwQELQRQMwAELQRUMvwELQRYMvgELQRgMvQELQRkMvAELQRoMuwELQRsMugELQRwMuQELQR0MuAELQQgMtwELQR4MtgELQSAMtQELQR8MtAELQQcMswELQSEMsgELQSIMsQELQSMMsAELQSQMrwELQRIMrgELQREMrQELQSUMrAELQSYMqwELQScMqgELQSgMqQELQcMBDKgBC0EqDKcBC0ErDKYBC0EsDKUBC0EtDKQBC0EuDKMBC0EvDKIBC0HEAQyhAQtBMAygAQtBNAyfAQtBDAyeAQtBMQydAQtBMgycAQtBMwybAQtBOQyaAQtBNQyZAQtBxQEMmAELQQsMlwELQToMlgELQTYMlQELQQoMlAELQTcMkwELQTgMkgELQTwMkQELQTsMkAELQT0MjwELQQkMjgELQSkMjQELQT4MjAELQT8MiwELQcAADIoBC0HBAAyJAQtBwgAMiAELQcMADIcBC0HEAAyGAQtBxQAMhQELQcYADIQBC0EXDIMBC0HHAAyCAQtByAAMgQELQckADIABC0HKAAx/C0HLAAx+C0HNAAx9C0HMAAx8C0HOAAx7C0HPAAx6C0HQAAx5C0HRAAx4C0HSAAx3C0HTAAx2C0HUAAx1C0HWAAx0C0HVAAxzC0EGDHILQdcADHELQQUMcAtB2AAMbwtBBAxuC0HZAAxtC0HaAAxsC0HbAAxrC0HcAAxqC0EDDGkLQd0ADGgLQd4ADGcLQd8ADGYLQeEADGULQeAADGQLQeIADGMLQeMADGILQQIMYQtB5AAMYAtB5QAMXwtB5gAMXgtB5wAMXQtB6AAMXAtB6QAMWwtB6gAMWgtB6wAMWQtB7AAMWAtB7QAMVwtB7gAMVgtB7wAMVQtB8AAMVAtB8QAMUwtB8gAMUgtB8wAMUQtB9AAMUAtB9QAMTwtB9gAMTgtB9wAMTQtB+AAMTAtB+QAMSwtB+gAMSgtB+wAMSQtB/AAMSAtB/QAMRwtB/gAMRgtB/wAMRQtBgAEMRAtBgQEMQwtBggEMQgtBgwEMQQtBhAEMQAtBhQEMPwtBhgEMPgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==", "base64"); - } - }); - - // - var require_constants3 = __commonJS({ - ""(exports, module) { - "use strict"; - var corsSafeListedMethods = ( - /** @type {const} */ - ["GET", "HEAD", "POST"] - ); - var corsSafeListedMethodsSet = new Set(corsSafeListedMethods); - var nullBodyStatus = ( - /** @type {const} */ - [101, 204, 205, 304] - ); - var redirectStatus = ( - /** @type {const} */ - [301, 302, 303, 307, 308] - ); - var redirectStatusSet = new Set(redirectStatus); - var badPorts = ( - /** @type {const} */ - [ - "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", - "4190", - "5060", - "5061", - "6000", - "6566", - "6665", - "6666", - "6667", - "6668", - "6669", - "6679", - "6697", - "10080" - ] - ); - var badPortsSet = new Set(badPorts); - var referrerPolicy = ( - /** @type {const} */ - [ - "", - "no-referrer", - "no-referrer-when-downgrade", - "same-origin", - "origin", - "strict-origin", - "origin-when-cross-origin", - "strict-origin-when-cross-origin", - "unsafe-url" - ] - ); - var referrerPolicySet = new Set(referrerPolicy); - var requestRedirect = ( - /** @type {const} */ - ["follow", "manual", "error"] - ); - var safeMethods = ( - /** @type {const} */ - ["GET", "HEAD", "OPTIONS", "TRACE"] - ); - var safeMethodsSet = new Set(safeMethods); - var requestMode = ( - /** @type {const} */ - ["navigate", "same-origin", "no-cors", "cors"] - ); - var requestCredentials = ( - /** @type {const} */ - ["omit", "same-origin", "include"] - ); - var requestCache = ( - /** @type {const} */ - [ - "default", - "no-store", - "reload", - "no-cache", - "force-cache", - "only-if-cached" - ] - ); - var requestBodyHeader = ( - /** @type {const} */ - [ - "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" - ] - ); - var requestDuplex = ( - /** @type {const} */ - [ - "half" - ] - ); - var forbiddenMethods = ( - /** @type {const} */ - ["CONNECT", "TRACE", "TRACK"] - ); - var forbiddenMethodsSet = new Set(forbiddenMethods); - var subresource = ( - /** @type {const} */ - [ - "audio", - "audioworklet", - "font", - "image", - "manifest", - "paintworklet", - "script", - "style", - "track", - "video", - "xslt", - "" - ] - ); - var subresourceSet = new Set(subresource); - module.exports = { - subresource, - forbiddenMethods, - requestBodyHeader, - referrerPolicy, - requestRedirect, - requestMode, - requestCredentials, - requestCache, - redirectStatus, - corsSafeListedMethods, - nullBodyStatus, - safeMethods, - badPorts, - requestDuplex, - subresourceSet, - badPortsSet, - redirectStatusSet, - corsSafeListedMethodsSet, - safeMethodsSet, - forbiddenMethodsSet, - referrerPolicySet - }; - } - }); - - // - var require_global = __commonJS({ - ""(exports, module) { - "use strict"; - var globalOrigin = Symbol.for("undici.globalOrigin.1"); - function getGlobalOrigin() { - return globalThis[globalOrigin]; - } - function setGlobalOrigin(newOrigin) { - if (newOrigin === void 0) { - Object.defineProperty(globalThis, globalOrigin, { - value: void 0, - 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 - }; - } - }); - - // - var require_data_url = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var encoder = new TextEncoder(); - var HTTP_TOKEN_CODEPOINTS = /^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/; - var HTTP_WHITESPACE_REGEX = /[\u000A\u000D\u0009\u0020]/; - var ASCII_WHITESPACE_REPLACE_REGEX = /[\u0009\u000A\u000C\u000D\u0020]/g; - var HTTP_QUOTED_STRING_TOKENS = /^[\u0009\u0020-\u007E\u0080-\u00FF]+$/; - function dataURLProcessor(dataURL) { - assert(dataURL.protocol === "data:"); - let input = URLSerializer(dataURL, true); - input = input.slice(5); - const position = { position: 0 }; - let mimeType = collectASequenceOfCodePointsFast( - ",", - input, - position - ); - const mimeTypeLength = mimeType.length; - mimeType = removeASCIIWhitespace(mimeType, true, true); - if (position.position >= input.length) { - return "failure"; - } - position.position++; - const encodedBody = input.slice(mimeTypeLength + 1); - let body = stringPercentDecode(encodedBody); - if (/;(\u0020){0,}base64$/i.test(mimeType)) { - const stringBody = isomorphicDecode(body); - body = forgivingBase64(stringBody); - if (body === "failure") { - return "failure"; - } - mimeType = mimeType.slice(0, -6); - mimeType = mimeType.replace(/(\u0020)+$/, ""); - mimeType = mimeType.slice(0, -1); - } - if (mimeType.startsWith(";")) { - mimeType = "text/plain" + mimeType; - } - let mimeTypeRecord = parseMIMEType(mimeType); - if (mimeTypeRecord === "failure") { - mimeTypeRecord = parseMIMEType("text/plain;charset=US-ASCII"); - } - return { mimeType: mimeTypeRecord, body }; - } - function URLSerializer(url, excludeFragment = false) { - if (!excludeFragment) { - return url.href; - } - const href = url.href; - const hashLength = url.hash.length; - const serialized = hashLength === 0 ? href : href.substring(0, href.length - hashLength); - if (!hashLength && href.endsWith("#")) { - return serialized.slice(0, -1); - } - return serialized; - } - function collectASequenceOfCodePoints(condition, input, position) { - let result = ""; - while (position.position < input.length && condition(input[position.position])) { - result += input[position.position]; - position.position++; - } - return result; - } - 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); - } - function stringPercentDecode(input) { - const bytes = encoder.encode(input); - return percentDecode(bytes); - } - function isHexCharByte(byte) { - return byte >= 48 && byte <= 57 || byte >= 65 && byte <= 70 || byte >= 97 && byte <= 102; - } - function hexByteToNumber(byte) { - return ( - // 0-9 - byte >= 48 && byte <= 57 ? byte - 48 : (byte & 223) - 55 - ); - } - function percentDecode(input) { - const length = input.length; - const output = new Uint8Array(length); - let j = 0; - for (let i = 0; i < length; ++i) { - const byte = input[i]; - if (byte !== 37) { - output[j++] = byte; - } else if (byte === 37 && !(isHexCharByte(input[i + 1]) && isHexCharByte(input[i + 2]))) { - output[j++] = 37; - } else { - output[j++] = hexByteToNumber(input[i + 1]) << 4 | hexByteToNumber(input[i + 2]); - i += 2; - } - } - return length === j ? output : output.subarray(0, j); - } - function parseMIMEType(input) { - input = removeHTTPWhitespace(input, true, true); - const position = { position: 0 }; - const type = collectASequenceOfCodePointsFast( - "/", - input, - position - ); - if (type.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(type)) { - return "failure"; - } - if (position.position > input.length) { - return "failure"; - } - position.position++; - let subtype = collectASequenceOfCodePointsFast( - ";", - input, - position - ); - subtype = removeHTTPWhitespace(subtype, false, true); - if (subtype.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(subtype)) { - return "failure"; - } - const typeLowercase = type.toLowerCase(); - const subtypeLowercase = subtype.toLowerCase(); - const mimeType = { - type: typeLowercase, - subtype: subtypeLowercase, - /** @type {Map} */ - parameters: /* @__PURE__ */ new Map(), - // https://mimesniff.spec.whatwg.org/#mime-type-essence - essence: `${typeLowercase}/${subtypeLowercase}` - }; - while (position.position < input.length) { - position.position++; - collectASequenceOfCodePoints( - // https://fetch.spec.whatwg.org/#http-whitespace - (char) => HTTP_WHITESPACE_REGEX.test(char), - input, - position - ); - let parameterName = collectASequenceOfCodePoints( - (char) => char !== ";" && char !== "=", - input, - position - ); - parameterName = parameterName.toLowerCase(); - if (position.position < input.length) { - if (input[position.position] === ";") { - continue; - } - position.position++; - } - if (position.position > input.length) { - break; - } - let parameterValue = null; - if (input[position.position] === '"') { - parameterValue = collectAnHTTPQuotedString(input, position, true); - collectASequenceOfCodePointsFast( - ";", - input, - position - ); - } else { - parameterValue = collectASequenceOfCodePointsFast( - ";", - input, - position - ); - parameterValue = removeHTTPWhitespace(parameterValue, false, true); - if (parameterValue.length === 0) { - continue; - } - } - 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); - } - } - return mimeType; - } - function forgivingBase64(data) { - data = data.replace(ASCII_WHITESPACE_REPLACE_REGEX, ""); - let dataLength = data.length; - if (dataLength % 4 === 0) { - if (data.charCodeAt(dataLength - 1) === 61) { - --dataLength; - if (data.charCodeAt(dataLength - 1) === 61) { - --dataLength; - } - } - } - if (dataLength % 4 === 1) { - return "failure"; - } - if (/[^+/0-9A-Za-z]/.test(data.length === dataLength ? data : data.substring(0, dataLength))) { - return "failure"; - } - const buffer = Buffer.from(data, "base64"); - return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength); - } - function collectAnHTTPQuotedString(input, position, extractValue) { - const positionStart = position.position; - let value = ""; - assert(input[position.position] === '"'); - position.position++; - while (true) { - value += collectASequenceOfCodePoints( - (char) => char !== '"' && char !== "\\", - input, - position - ); - if (position.position >= input.length) { - break; - } - const quoteOrBackslash = input[position.position]; - position.position++; - if (quoteOrBackslash === "\\") { - if (position.position >= input.length) { - value += "\\"; - break; - } - value += input[position.position]; - position.position++; - } else { - assert(quoteOrBackslash === '"'); - break; - } - } - if (extractValue) { - return value; - } - return input.slice(positionStart, position.position); - } - function serializeAMimeType(mimeType) { - assert(mimeType !== "failure"); - const { parameters, essence } = mimeType; - let serialization = essence; - for (let [name, value] of parameters.entries()) { - serialization += ";"; - serialization += name; - serialization += "="; - if (!HTTP_TOKEN_CODEPOINTS.test(value)) { - value = value.replace(/(\\|")/g, "\\$1"); - value = '"' + value; - value += '"'; - } - serialization += value; - } - return serialization; - } - function isHTTPWhiteSpace(char) { - return char === 13 || char === 10 || char === 9 || char === 32; - } - function removeHTTPWhitespace(str, leading = true, trailing = true) { - return removeChars(str, leading, trailing, isHTTPWhiteSpace); - } - function isASCIIWhitespace(char) { - return char === 13 || char === 10 || char === 9 || char === 12 || char === 32; - } - function removeASCIIWhitespace(str, leading = true, trailing = true) { - return removeChars(str, leading, trailing, isASCIIWhitespace); - } - function removeChars(str, leading, trailing, predicate) { - let lead = 0; - let trail = str.length - 1; - if (leading) { - while (lead < str.length && predicate(str.charCodeAt(lead))) - lead++; - } - if (trailing) { - while (trail > 0 && predicate(str.charCodeAt(trail))) - trail--; - } - return lead === 0 && trail === str.length - 1 ? str : str.slice(lead, trail + 1); - } - function isomorphicDecode(input) { - const length = input.length; - if ((2 << 15) - 1 > length) { - return String.fromCharCode.apply(null, input); - } - let result = ""; - let i = 0; - let addition = (2 << 15) - 1; - while (i < length) { - if (i + addition > length) { - addition = length - i; - } - result += String.fromCharCode.apply(null, input.subarray(i, i += addition)); - } - return result; - } - function minimizeSupportedMimeType(mimeType) { - switch (mimeType.essence) { - case "application/ecmascript": - case "application/javascript": - case "application/x-ecmascript": - case "application/x-javascript": - case "text/ecmascript": - case "text/javascript": - case "text/javascript1.0": - case "text/javascript1.1": - case "text/javascript1.2": - case "text/javascript1.3": - case "text/javascript1.4": - case "text/javascript1.5": - case "text/jscript": - case "text/livescript": - case "text/x-ecmascript": - case "text/x-javascript": - return "text/javascript"; - case "application/json": - case "text/json": - return "application/json"; - case "image/svg+xml": - return "image/svg+xml"; - case "text/xml": - case "application/xml": - return "application/xml"; - } - if (mimeType.subtype.endsWith("+json")) { - return "application/json"; - } - if (mimeType.subtype.endsWith("+xml")) { - return "application/xml"; - } - return ""; - } - module.exports = { - dataURLProcessor, - URLSerializer, - collectASequenceOfCodePoints, - collectASequenceOfCodePointsFast, - stringPercentDecode, - parseMIMEType, - collectAnHTTPQuotedString, - serializeAMimeType, - removeChars, - removeHTTPWhitespace, - minimizeSupportedMimeType, - HTTP_TOKEN_CODEPOINTS, - isomorphicDecode - }; - } - }); - - // - var require_webidl = __commonJS({ - ""(exports, module) { - "use strict"; - var { types, inspect } = __require("util"); - var { markAsUncloneable } = __require("worker_threads"); - var { toUSVString } = require_util(); - var 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}.` - }); - }; - webidl.brandCheck = function(V, I, opts) { - if ((opts == null ? void 0 : opts.strict) !== false) { - if (!(V instanceof I)) { - const err = new TypeError("Illegal invocation"); - err.code = "ERR_INVALID_THIS"; - throw err; - } - } else { - if ((V == null ? void 0 : V[Symbol.toStringTag]) !== I.prototype[Symbol.toStringTag]) { - const err = new TypeError("Illegal invocation"); - err.code = "ERR_INVALID_THIS"; - throw err; - } - } - }; - 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.`, - header: ctx - }); - } - }; - webidl.illegalConstructor = function() { - throw webidl.errors.exception({ - header: "TypeError", - message: "Illegal constructor" - }); - }; - 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"; - } - } - }; - webidl.util.markAsUncloneable = markAsUncloneable || (() => { - }); - webidl.util.ConvertToInt = function(V, bitLength, signedness, opts) { - let upperBound; - let lowerBound; - if (bitLength === 64) { - upperBound = Math.pow(2, 53) - 1; - if (signedness === "unsigned") { - lowerBound = 0; - } else { - lowerBound = Math.pow(-2, 53) + 1; - } - } else if (signedness === "unsigned") { - lowerBound = 0; - upperBound = Math.pow(2, bitLength) - 1; - } else { - lowerBound = Math.pow(-2, bitLength) - 1; - upperBound = Math.pow(2, bitLength - 1) - 1; - } - let x = Number(V); - if (x === 0) { - x = 0; - } - if ((opts == null ? void 0 : opts.enforceRange) === true) { - if (Number.isNaN(x) || x === Number.POSITIVE_INFINITY || x === Number.NEGATIVE_INFINITY) { - throw webidl.errors.exception({ - header: "Integer conversion", - message: `Could not convert ${webidl.util.Stringify(V)} to an integer.` - }); - } - x = webidl.util.IntegerPart(x); - if (x < lowerBound || x > upperBound) { - throw webidl.errors.exception({ - header: "Integer conversion", - message: `Value must be between ${lowerBound}-${upperBound}, got ${x}.` - }); - } - return x; - } - if (!Number.isNaN(x) && (opts == null ? void 0 : opts.clamp) === true) { - x = Math.min(Math.max(x, lowerBound), upperBound); - if (Math.floor(x) % 2 === 0) { - x = Math.floor(x); - } else { - x = Math.ceil(x); - } - return x; - } - if (Number.isNaN(x) || x === 0 && Object.is(0, x) || x === Number.POSITIVE_INFINITY || x === Number.NEGATIVE_INFINITY) { - return 0; - } - x = webidl.util.IntegerPart(x); - x = x % Math.pow(2, bitLength); - if (signedness === "signed" && x >= Math.pow(2, bitLength) - 1) { - return x - Math.pow(2, bitLength); - } - return x; - }; - webidl.util.IntegerPart = function(n) { - const r = Math.floor(Math.abs(n)); - if (n < 0) { - return -1 * r; - } - return r; - }; - webidl.util.Stringify = function(V) { - const type = webidl.util.Type(V); - switch (type) { - case "Symbol": - return `Symbol(${V.description})`; - case "Object": - return inspect(V); - case "String": - return `"${V}"`; - default: - return `${V}`; - } - }; - webidl.sequenceConverter = function(converter) { - return (V, prefix, argument, Iterable) => { - var _a; - if (webidl.util.Type(V) !== "Object") { - throw webidl.errors.exception({ - header: prefix, - message: `${argument} (${webidl.util.Stringify(V)}) is not iterable.` - }); - } - const method = typeof Iterable === "function" ? Iterable() : (_a = V == null ? void 0 : V[Symbol.iterator]) == null ? void 0 : _a.call(V); - const seq = []; - let index = 0; - if (method === void 0 || typeof method.next !== "function") { - throw webidl.errors.exception({ - header: prefix, - message: `${argument} is not iterable.` - }); - } - while (true) { - const { done, value } = method.next(); - if (done) { - break; - } - seq.push(converter(value, prefix, `${argument}[${index++}]`)); - } - return seq; - }; - }; - webidl.recordConverter = function(keyConverter, valueConverter) { - return (O, prefix, argument) => { - if (webidl.util.Type(O) !== "Object") { - throw webidl.errors.exception({ - header: prefix, - message: `${argument} ("${webidl.util.Type(O)}") is not an Object.` - }); - } - const result = {}; - if (!types.isProxy(O)) { - const keys2 = [...Object.getOwnPropertyNames(O), ...Object.getOwnPropertySymbols(O)]; - for (const key of keys2) { - const typedKey = keyConverter(key, prefix, argument); - const typedValue = valueConverter(O[key], prefix, argument); - result[typedKey] = typedValue; - } - return result; - } - const keys = Reflect.ownKeys(O); - for (const key of keys) { - const desc = Reflect.getOwnPropertyDescriptor(O, key); - if (desc == null ? void 0 : desc.enumerable) { - const typedKey = keyConverter(key, prefix, argument); - const typedValue = valueConverter(O[key], prefix, argument); - result[typedKey] = typedValue; - } - } - return result; - }; - }; - webidl.interfaceConverter = function(i) { - return (V, prefix, argument, opts) => { - if ((opts == null ? void 0 : opts.strict) !== false && !(V instanceof i)) { - throw webidl.errors.exception({ - header: prefix, - message: `Expected ${argument} ("${webidl.util.Stringify(V)}") to be an instance of ${i.name}.` - }); - } - return V; - }; - }; - webidl.dictionaryConverter = function(converters) { - return (dictionary, prefix, argument) => { - const type = webidl.util.Type(dictionary); - const dict = {}; - if (type === "Null" || type === "Undefined") { - return dict; - } else if (type !== "Object") { - throw webidl.errors.exception({ - header: prefix, - 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 (!Object.hasOwn(dictionary, key)) { - throw webidl.errors.exception({ - header: prefix, - message: `Missing required key "${key}".` - }); - } - } - let value = dictionary[key]; - const hasDefault = Object.hasOwn(options, "defaultValue"); - if (hasDefault && value !== null) { - value != null ? value : value = defaultValue(); - } - if (required || hasDefault || value !== void 0) { - value = converter(value, prefix, `${argument}.${key}`); - if (options.allowedValues && !options.allowedValues.includes(value)) { - throw webidl.errors.exception({ - header: prefix, - message: `${value} is not an accepted type. Expected one of ${options.allowedValues.join(", ")}.` - }); - } - dict[key] = value; - } - } - return dict; - }; - }; - webidl.nullableConverter = function(converter) { - return (V, prefix, argument) => { - if (V === null) { - return V; - } - return converter(V, prefix, argument); - }; - }; - webidl.converters.DOMString = function(V, prefix, argument, opts) { - if (V === null && (opts == null ? void 0 : opts.legacyNullToEmptyString)) { - return ""; - } - if (typeof V === "symbol") { - throw webidl.errors.exception({ - header: prefix, - message: `${argument} is a symbol, which cannot be converted to a DOMString.` - }); - } - return String(V); - }; - webidl.converters.ByteString = function(V, prefix, argument) { - const x = webidl.converters.DOMString(V, prefix, argument); - 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.` - ); - } - } - return x; - }; - webidl.converters.USVString = toUSVString; - webidl.converters.boolean = function(V) { - const x = Boolean(V); - return x; - }; - webidl.converters.any = function(V) { - return V; - }; - webidl.converters["long long"] = function(V, prefix, argument) { - const x = webidl.util.ConvertToInt(V, 64, "signed", void 0, prefix, argument); - return x; - }; - webidl.converters["unsigned long long"] = function(V, prefix, argument) { - const x = webidl.util.ConvertToInt(V, 64, "unsigned", void 0, prefix, argument); - return x; - }; - webidl.converters["unsigned long"] = function(V, prefix, argument) { - const x = webidl.util.ConvertToInt(V, 32, "unsigned", void 0, prefix, argument); - return x; - }; - webidl.converters["unsigned short"] = function(V, prefix, argument, opts) { - const x = webidl.util.ConvertToInt(V, 16, "unsigned", opts, prefix, argument); - return x; - }; - webidl.converters.ArrayBuffer = function(V, prefix, argument, opts) { - if (webidl.util.Type(V) !== "Object" || !types.isAnyArrayBuffer(V)) { - throw webidl.errors.conversionFailed({ - prefix, - argument: `${argument} ("${webidl.util.Stringify(V)}")`, - types: ["ArrayBuffer"] - }); - } - if ((opts == null ? void 0 : opts.allowShared) === false && types.isSharedArrayBuffer(V)) { - throw webidl.errors.exception({ - header: "ArrayBuffer", - message: "SharedArrayBuffer is not allowed." - }); - } - if (V.resizable || V.growable) { - throw webidl.errors.exception({ - header: "ArrayBuffer", - message: "Received a resizable ArrayBuffer." - }); - } - return V; - }; - webidl.converters.TypedArray = function(V, T, prefix, name, opts) { - if (webidl.util.Type(V) !== "Object" || !types.isTypedArray(V) || V.constructor.name !== T.name) { - throw webidl.errors.conversionFailed({ - prefix, - argument: `${name} ("${webidl.util.Stringify(V)}")`, - types: [T.name] - }); - } - if ((opts == null ? void 0 : opts.allowShared) === false && types.isSharedArrayBuffer(V.buffer)) { - throw webidl.errors.exception({ - header: "ArrayBuffer", - message: "SharedArrayBuffer is not allowed." - }); - } - if (V.buffer.resizable || V.buffer.growable) { - throw webidl.errors.exception({ - header: "ArrayBuffer", - message: "Received a resizable ArrayBuffer." - }); - } - return V; - }; - webidl.converters.DataView = function(V, prefix, name, opts) { - if (webidl.util.Type(V) !== "Object" || !types.isDataView(V)) { - throw webidl.errors.exception({ - header: prefix, - message: `${name} is not a DataView.` - }); - } - if ((opts == null ? void 0 : opts.allowShared) === false && types.isSharedArrayBuffer(V.buffer)) { - throw webidl.errors.exception({ - header: "ArrayBuffer", - message: "SharedArrayBuffer is not allowed." - }); - } - if (V.buffer.resizable || V.buffer.growable) { - throw webidl.errors.exception({ - header: "ArrayBuffer", - message: "Received a resizable ArrayBuffer." - }); - } - return V; - }; - webidl.converters.BufferSource = function(V, prefix, name, opts) { - if (types.isAnyArrayBuffer(V)) { - return webidl.converters.ArrayBuffer(V, prefix, name, __spreadProps(__spreadValues({}, opts), { allowShared: false })); - } - if (types.isTypedArray(V)) { - return webidl.converters.TypedArray(V, V.constructor, prefix, name, __spreadProps(__spreadValues({}, opts), { allowShared: false })); - } - if (types.isDataView(V)) { - return webidl.converters.DataView(V, prefix, name, __spreadProps(__spreadValues({}, opts), { allowShared: false })); - } - throw webidl.errors.conversionFailed({ - prefix, - argument: `${name} ("${webidl.util.Stringify(V)}")`, - types: ["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 - }; - } - }); - - // - var require_util2 = __commonJS({ - ""(exports, module) { - "use strict"; - var { Transform } = __require("stream"); - var zlib = __require("zlib"); - var { redirectStatusSet, referrerPolicySet: referrerPolicyTokens, badPortsSet } = require_constants3(); - var { getGlobalOrigin } = require_global(); - var { collectASequenceOfCodePoints, collectAnHTTPQuotedString, removeChars, parseMIMEType } = require_data_url(); - var { performance: performance2 } = __require("perf_hooks"); - var { isBlobLike, ReadableStreamFrom, isValidHTTPToken, normalizedMethodRecordsBase } = require_util(); - var assert = __require("assert"); - var { isUint8Array } = __require("util/types"); - var { webidl } = require_webidl(); - var supportedHashes = []; - var crypto2; - try { - crypto2 = __require("crypto"); - const possibleRelevantHashes = ["sha256", "sha384", "sha512"]; - supportedHashes = crypto2.getHashes().filter((hash) => possibleRelevantHashes.includes(hash)); - } catch (e) { - } - function responseURL(response) { - const urlList = response.urlList; - const length = urlList.length; - return length === 0 ? null : urlList[length - 1].toString(); - } - function responseLocationURL(response, requestFragment) { - if (!redirectStatusSet.has(response.status)) { - return null; - } - let location = response.headersList.get("location", true); - if (location !== null && isValidHeaderValue(location)) { - if (!isValidEncodedURL(location)) { - location = normalizeBinaryStringToUtf8(location); - } - location = new URL(location, responseURL(response)); - } - if (location && !location.hash) { - location.hash = requestFragment; - } - return location; - } - function isValidEncodedURL(url) { - for (let i = 0; i < url.length; ++i) { - const code = url.charCodeAt(i); - if (code > 126 || // Non-US-ASCII + DEL - code < 32) { - return false; - } - } - return true; - } - function normalizeBinaryStringToUtf8(value) { - return Buffer.from(value, "binary").toString("utf8"); - } - function requestCurrentURL(request) { - return request.urlList[request.urlList.length - 1]; - } - function requestBadPort(request) { - const url = requestCurrentURL(request); - if (urlIsHttpHttpsScheme(url) && badPortsSet.has(url.port)) { - return "blocked"; - } - return "allowed"; - } - function isErrorLike(object) { - var _a, _b; - return object instanceof Error || (((_a = object == null ? void 0 : object.constructor) == null ? void 0 : _a.name) === "Error" || ((_b = object == null ? void 0 : object.constructor) == null ? void 0 : _b.name) === "DOMException"); - } - function isValidReasonPhrase(statusText) { - for (let i = 0; i < statusText.length; ++i) { - const c = statusText.charCodeAt(i); - if (!(c === 9 || // HTAB - c >= 32 && c <= 126 || // SP / VCHAR - c >= 128 && c <= 255)) { - return false; - } - } - return true; - } - var isValidHeaderName = isValidHTTPToken; - function isValidHeaderValue(potentialValue) { - return (potentialValue[0] === " " || potentialValue[0] === " " || potentialValue[potentialValue.length - 1] === " " || potentialValue[potentialValue.length - 1] === " " || potentialValue.includes("\n") || potentialValue.includes("\r") || potentialValue.includes("\0")) === false; - } - function setRequestReferrerPolicyOnRedirect(request, actualResponse) { - var _a; - const { headersList } = actualResponse; - const policyHeader = ((_a = headersList.get("referrer-policy", true)) != null ? _a : "").split(","); - let policy = ""; - if (policyHeader.length > 0) { - for (let i = policyHeader.length; i !== 0; i--) { - const token = policyHeader[i - 1].trim(); - if (referrerPolicyTokens.has(token)) { - policy = token; - break; - } - } - } - if (policy !== "") { - request.referrerPolicy = policy; - } - } - function crossOriginResourcePolicyCheck() { - return "allowed"; - } - function corsCheck() { - return "success"; - } - function TAOCheck() { - return "success"; - } - function appendFetchMetadata(httpRequest) { - let header = null; - header = httpRequest.mode; - httpRequest.headersList.set("sec-fetch-mode", header, true); - } - function appendRequestOriginHeader(request) { - let serializedOrigin = request.origin; - if (serializedOrigin === "client" || serializedOrigin === void 0) { - return; - } - if (request.responseTainting === "cors" || request.mode === "websocket") { - request.headersList.append("origin", serializedOrigin, true); - } else if (request.method !== "GET" && request.method !== "HEAD") { - switch (request.referrerPolicy) { - case "no-referrer": - serializedOrigin = null; - break; - case "no-referrer-when-downgrade": - case "strict-origin": - case "strict-origin-when-cross-origin": - if (request.origin && urlHasHttpsScheme(request.origin) && !urlHasHttpsScheme(requestCurrentURL(request))) { - serializedOrigin = null; - } - break; - case "same-origin": - if (!sameOrigin(request, requestCurrentURL(request))) { - serializedOrigin = null; - } - break; - default: - } - request.headersList.append("origin", serializedOrigin, true); - } - } - function coarsenTime(timestamp, crossOriginIsolatedCapability) { - return timestamp; - } - function clampAndCoarsenConnectionTimingInfo(connectionTimingInfo, defaultStartTime, crossOriginIsolatedCapability) { - if (!(connectionTimingInfo == null ? void 0 : connectionTimingInfo.startTime) || connectionTimingInfo.startTime < defaultStartTime) { - return { - domainLookupStartTime: defaultStartTime, - domainLookupEndTime: defaultStartTime, - connectionStartTime: defaultStartTime, - connectionEndTime: defaultStartTime, - secureConnectionStartTime: defaultStartTime, - ALPNNegotiatedProtocol: connectionTimingInfo == null ? void 0 : connectionTimingInfo.ALPNNegotiatedProtocol - }; - } - return { - domainLookupStartTime: coarsenTime(connectionTimingInfo.domainLookupStartTime, crossOriginIsolatedCapability), - domainLookupEndTime: coarsenTime(connectionTimingInfo.domainLookupEndTime, crossOriginIsolatedCapability), - connectionStartTime: coarsenTime(connectionTimingInfo.connectionStartTime, crossOriginIsolatedCapability), - connectionEndTime: coarsenTime(connectionTimingInfo.connectionEndTime, crossOriginIsolatedCapability), - secureConnectionStartTime: coarsenTime(connectionTimingInfo.secureConnectionStartTime, crossOriginIsolatedCapability), - ALPNNegotiatedProtocol: connectionTimingInfo.ALPNNegotiatedProtocol - }; - } - function coarsenedSharedCurrentTime(crossOriginIsolatedCapability) { - return coarsenTime(performance2.now(), crossOriginIsolatedCapability); - } - function createOpaqueTimingInfo(timingInfo) { - var _a, _b; - return { - startTime: (_a = timingInfo.startTime) != null ? _a : 0, - redirectStartTime: 0, - redirectEndTime: 0, - postRedirectStartTime: (_b = timingInfo.startTime) != null ? _b : 0, - finalServiceWorkerStartTime: 0, - finalNetworkResponseStartTime: 0, - finalNetworkRequestStartTime: 0, - endTime: 0, - encodedBodySize: 0, - decodedBodySize: 0, - finalConnectionTimingInfo: null - }; - } - function makePolicyContainer() { - return { - referrerPolicy: "strict-origin-when-cross-origin" - }; - } - function clonePolicyContainer(policyContainer) { - return { - referrerPolicy: policyContainer.referrerPolicy - }; - } - function determineRequestsReferrer(request) { - const policy = request.referrerPolicy; - assert(policy); - let referrerSource = null; - if (request.referrer === "client") { - const globalOrigin = getGlobalOrigin(); - if (!globalOrigin || globalOrigin.origin === "null") { - return "no-referrer"; - } - referrerSource = new URL(globalOrigin); - } else if (request.referrer instanceof URL) { - referrerSource = request.referrer; - } - let referrerURL = stripURLForReferrer(referrerSource); - const referrerOrigin = stripURLForReferrer(referrerSource, true); - if (referrerURL.toString().length > 4096) { - referrerURL = referrerOrigin; - } - const areSameOrigin = sameOrigin(request, referrerURL); - const isNonPotentiallyTrustWorthy = isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(request.url); - 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); - if (sameOrigin(referrerURL, currentURL)) { - return referrerURL; - } - if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) { - return "no-referrer"; - } - return referrerOrigin; - } - case "strict-origin": - case "no-referrer-when-downgrade": - default: - return isNonPotentiallyTrustWorthy ? "no-referrer" : referrerOrigin; - } - } - function stripURLForReferrer(url, originOnly) { - assert(url instanceof URL); - url = new URL(url); - if (url.protocol === "file:" || url.protocol === "about:" || url.protocol === "blank:") { - return "no-referrer"; - } - url.username = ""; - url.password = ""; - url.hash = ""; - if (originOnly) { - url.pathname = ""; - url.search = ""; - } - return url; - } - function isURLPotentiallyTrustworthy(url) { - if (!(url instanceof URL)) { - return false; - } - if (url.href === "about:blank" || url.href === "about:srcdoc") { - return true; - } - if (url.protocol === "data:") - return true; - if (url.protocol === "file:") - return true; - return isOriginPotentiallyTrustworthy(url.origin); - function isOriginPotentiallyTrustworthy(origin) { - if (origin == null || origin === "null") - return false; - const originAsURL = new URL(origin); - if (originAsURL.protocol === "https:" || originAsURL.protocol === "wss:") { - 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; - } - return false; - } - } - function bytesMatch(bytes, metadataList) { - if (crypto2 === void 0) { - return true; - } - const parsedMetadata = parseMetadata(metadataList); - if (parsedMetadata === "no metadata") { - return true; - } - if (parsedMetadata.length === 0) { - return true; - } - const strongest = getStrongestMetadata(parsedMetadata); - const metadata = filterMetadataListByAlgorithm(parsedMetadata, strongest); - for (const item of metadata) { - const algorithm = item.algo; - const expectedValue = item.hash; - let actualValue = crypto2.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); - } - } - if (compareBase64Mixed(actualValue, expectedValue)) { - return true; - } - } - return false; - } - var parseHashWithOptions = new RegExp("(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\\s|$)( +[!-~]*)?)?", "i"); - function parseMetadata(metadata) { - const result = []; - let empty = true; - for (const token of metadata.split(" ")) { - empty = false; - const parsedToken = parseHashWithOptions.exec(token); - if (parsedToken === null || parsedToken.groups === void 0 || parsedToken.groups.algo === void 0) { - continue; - } - const algorithm = parsedToken.groups.algo.toLowerCase(); - if (supportedHashes.includes(algorithm)) { - result.push(parsedToken.groups); - } - } - if (empty === true) { - return "no metadata"; - } - return result; - } - function getStrongestMetadata(metadataList) { - let algorithm = metadataList[0].algo; - if (algorithm[3] === "5") { - return algorithm; - } - for (let i = 1; i < metadataList.length; ++i) { - const metadata = metadataList[i]; - if (metadata.algo[3] === "5") { - algorithm = "sha512"; - break; - } else if (algorithm[3] === "3") { - continue; - } 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; - } - 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; - } - function tryUpgradeRequestToAPotentiallyTrustworthyURL(request) { - } - function sameOrigin(A, B) { - if (A.origin === B.origin && A.origin === "null") { - return true; - } - if (A.protocol === B.protocol && A.hostname === B.hostname && A.port === B.port) { - return true; - } - return false; - } - function createDeferredPromise() { - let res; - let rej; - const promise = new Promise((resolve2, reject) => { - res = resolve2; - 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"; - } - function normalizeMethod(method) { - var _a; - return (_a = normalizedMethodRecordsBase[method.toLowerCase()]) != null ? _a : method; - } - function serializeJavascriptValueToJSONString(value) { - const result = JSON.stringify(value); - if (result === void 0) { - throw new TypeError("Value is not JSON serializable"); - } - assert(typeof result === "string"); - return result; - } - var esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())); - function createIterator(name, kInternalIterator, keyIndex = 0, valueIndex = 1) { - var _target, _kind, _index; - class FastIterableIterator { - /** - * @see https://webidl.spec.whatwg.org/#dfn-default-iterator-object - * @param {unknown} target - * @param {'key' | 'value' | 'key+value'} kind - */ - constructor(target, kind) { - /** @type {any} */ - __privateAdd(this, _target, void 0); - /** @type {'key' | 'value' | 'key+value'} */ - __privateAdd(this, _kind, void 0); - /** @type {number} */ - __privateAdd(this, _index, void 0); - __privateSet(this, _target, target); - __privateSet(this, _kind, kind); - __privateSet(this, _index, 0); - } - next() { - if (typeof this !== "object" || this === null || !__privateIn(_target, this)) { - throw new TypeError( - `'next' called on an object that does not implement interface ${name} Iterator.` - ); - } - const index = __privateGet(this, _index); - const values = __privateGet(this, _target)[kInternalIterator]; - const len = values.length; - if (index >= len) { - return { - value: void 0, - done: true - }; - } - const { [keyIndex]: key, [valueIndex]: value } = values[index]; - __privateSet(this, _index, index + 1); - let result; - switch (__privateGet(this, _kind)) { - case "key": - result = key; - break; - case "value": - result = value; - break; - case "key+value": - result = [key, value]; - break; - } - return { - value: result, - done: false - }; - } - } - _target = new WeakMap(); - _kind = new WeakMap(); - _index = new WeakMap(); - delete FastIterableIterator.prototype.constructor; - Object.setPrototypeOf(FastIterableIterator.prototype, esIteratorPrototype); - Object.defineProperties(FastIterableIterator.prototype, { - [Symbol.toStringTag]: { - writable: false, - enumerable: false, - configurable: true, - value: `${name} Iterator` - }, - next: { writable: true, enumerable: true, configurable: true } - }); - return function(target, kind) { - return new FastIterableIterator(target, kind); - }; - } - function iteratorMixin(name, object, kInternalIterator, keyIndex = 0, valueIndex = 1) { - const makeIterator = createIterator(name, kInternalIterator, keyIndex, valueIndex); - const properties = { - keys: { - writable: true, - enumerable: true, - configurable: true, - value: function keys() { - webidl.brandCheck(this, object); - return makeIterator(this, "key"); - } - }, - values: { - writable: true, - enumerable: true, - configurable: true, - value: function values() { - webidl.brandCheck(this, object); - return makeIterator(this, "value"); - } - }, - entries: { - writable: true, - enumerable: true, - configurable: true, - value: function entries() { - webidl.brandCheck(this, object); - return makeIterator(this, "key+value"); - } - }, - forEach: { - writable: true, - enumerable: true, - configurable: true, - value: function forEach(callbackfn, thisArg = globalThis) { - webidl.brandCheck(this, object); - webidl.argumentLengthCheck(arguments, 1, `${name}.forEach`); - if (typeof callbackfn !== "function") { - throw new TypeError( - `Failed to execute 'forEach' on '${name}': parameter 1 is not of type 'Function'.` - ); - } - for (const { 0: key, 1: value } of makeIterator(this, "key+value")) { - callbackfn.call(thisArg, value, key, this); - } - } - } - }; - return Object.defineProperties(object.prototype, __spreadProps(__spreadValues({}, properties), { - [Symbol.iterator]: { - writable: true, - enumerable: false, - configurable: true, - value: properties.entries.value - } - })); - } - function fullyReadBody(body, processBody, processBodyError) { - return __async(this, null, function* () { - const successSteps = processBody; - const errorSteps = processBodyError; - let reader; - try { - reader = body.stream.getReader(); - } catch (e) { - errorSteps(e); - return; - } - try { - successSteps(yield readAllBytes(reader)); - } catch (e) { - errorSteps(e); - } - }); - } - function isReadableStreamLike(stream) { - return stream instanceof ReadableStream || stream[Symbol.toStringTag] === "ReadableStream" && typeof stream.tee === "function"; - } - function readableStreamClose(controller) { - var _a; - try { - controller.close(); - (_a = controller.byobRequest) == null ? void 0 : _a.respond(0); - } catch (err) { - if (!err.message.includes("Controller is already closed") && !err.message.includes("ReadableStream is already closed")) { - throw err; - } - } - } - var invalidIsomorphicEncodeValueRegex = /[^\x00-\xFF]/; - function isomorphicEncode(input) { - assert(!invalidIsomorphicEncodeValueRegex.test(input)); - return input; - } - function readAllBytes(reader) { - return __async(this, null, function* () { - const bytes = []; - let byteLength = 0; - while (true) { - const { done, value: chunk } = yield reader.read(); - if (done) { - return Buffer.concat(bytes, byteLength); - } - if (!isUint8Array(chunk)) { - throw new TypeError("Received non-Uint8Array chunk"); - } - bytes.push(chunk); - byteLength += chunk.length; - } - }); - } - function urlIsLocal(url) { - assert("protocol" in url); - const protocol = url.protocol; - return protocol === "about:" || protocol === "blob:" || protocol === "data:"; - } - function urlHasHttpsScheme(url) { - return typeof url === "string" && url[5] === ":" && url[0] === "h" && url[1] === "t" && url[2] === "t" && url[3] === "p" && url[4] === "s" || url.protocol === "https:"; - } - function urlIsHttpHttpsScheme(url) { - assert("protocol" in url); - const protocol = url.protocol; - return protocol === "http:" || protocol === "https:"; - } - function simpleRangeHeaderValue(value, allowWhitespace) { - const data = value; - if (!data.startsWith("bytes")) { - return "failure"; - } - const position = { position: 5 }; - if (allowWhitespace) { - collectASequenceOfCodePoints( - (char) => char === " " || char === " ", - data, - position - ); - } - if (data.charCodeAt(position.position) !== 61) { - return "failure"; - } - position.position++; - if (allowWhitespace) { - collectASequenceOfCodePoints( - (char) => char === " " || char === " ", - data, - position - ); - } - const rangeStart = collectASequenceOfCodePoints( - (char) => { - const code = char.charCodeAt(0); - return code >= 48 && code <= 57; - }, - data, - position - ); - const rangeStartValue = rangeStart.length ? Number(rangeStart) : null; - if (allowWhitespace) { - collectASequenceOfCodePoints( - (char) => char === " " || char === " ", - data, - position - ); - } - if (data.charCodeAt(position.position) !== 45) { - return "failure"; - } - position.position++; - if (allowWhitespace) { - collectASequenceOfCodePoints( - (char) => char === " " || char === " ", - data, - position - ); - } - const rangeEnd = collectASequenceOfCodePoints( - (char) => { - const code = char.charCodeAt(0); - return code >= 48 && code <= 57; - }, - data, - position - ); - const rangeEndValue = rangeEnd.length ? Number(rangeEnd) : null; - if (position.position < data.length) { - return "failure"; - } - if (rangeEndValue === null && rangeStartValue === null) { - return "failure"; - } - if (rangeStartValue > rangeEndValue) { - return "failure"; - } - return { rangeStartValue, rangeEndValue }; - } - function buildContentRange(rangeStart, rangeEnd, fullLength) { - let contentRange = "bytes "; - contentRange += isomorphicEncode(`${rangeStart}`); - contentRange += "-"; - contentRange += isomorphicEncode(`${rangeEnd}`); - contentRange += "/"; - contentRange += isomorphicEncode(`${fullLength}`); - return contentRange; - } - var _zlibOptions; - var InflateStream = class extends Transform { - /** @param {zlib.ZlibOptions} [zlibOptions] */ - constructor(zlibOptions) { - super(); - __privateAdd(this, _zlibOptions, void 0); - __privateSet(this, _zlibOptions, zlibOptions); - } - _transform(chunk, encoding, callback) { - if (!this._inflateStream) { - if (chunk.length === 0) { - callback(); - return; - } - this._inflateStream = (chunk[0] & 15) === 8 ? zlib.createInflate(__privateGet(this, _zlibOptions)) : zlib.createInflateRaw(__privateGet(this, _zlibOptions)); - this._inflateStream.on("data", this.push.bind(this)); - this._inflateStream.on("end", () => this.push(null)); - this._inflateStream.on("error", (err) => this.destroy(err)); - } - this._inflateStream.write(chunk, encoding, callback); - } - _final(callback) { - if (this._inflateStream) { - this._inflateStream.end(); - this._inflateStream = null; - } - callback(); - } - }; - _zlibOptions = new WeakMap(); - function createInflate(zlibOptions) { - return new InflateStream(zlibOptions); - } - function extractMimeType(headers) { - let charset = null; - let essence = null; - let mimeType = null; - const values = getDecodeSplit("content-type", headers); - if (values === null) { - return "failure"; - } - for (const value of values) { - const temporaryMimeType = parseMIMEType(value); - if (temporaryMimeType === "failure" || temporaryMimeType.essence === "*/*") { - continue; - } - mimeType = temporaryMimeType; - if (mimeType.essence !== essence) { - charset = null; - if (mimeType.parameters.has("charset")) { - charset = mimeType.parameters.get("charset"); - } - essence = mimeType.essence; - } else if (!mimeType.parameters.has("charset") && charset !== null) { - mimeType.parameters.set("charset", charset); - } - } - if (mimeType == null) { - return "failure"; - } - return mimeType; - } - function gettingDecodingSplitting(value) { - const input = value; - const position = { position: 0 }; - const values = []; - let temporaryValue = ""; - while (position.position < input.length) { - temporaryValue += collectASequenceOfCodePoints( - (char) => char !== '"' && char !== ",", - input, - position - ); - if (position.position < input.length) { - if (input.charCodeAt(position.position) === 34) { - temporaryValue += collectAnHTTPQuotedString( - input, - position - ); - if (position.position < input.length) { - continue; - } - } else { - assert(input.charCodeAt(position.position) === 44); - position.position++; - } - } - temporaryValue = removeChars(temporaryValue, true, true, (char) => char === 9 || char === 32); - values.push(temporaryValue); - temporaryValue = ""; - } - return values; - } - function getDecodeSplit(name, list) { - const value = list.get(name, true); - if (value === null) { - return null; - } - return gettingDecodingSplitting(value); - } - var textDecoder = new TextDecoder(); - function utf8DecodeBytes(buffer) { - if (buffer.length === 0) { - return ""; - } - if (buffer[0] === 239 && buffer[1] === 187 && buffer[2] === 191) { - buffer = buffer.subarray(3); - } - const output = textDecoder.decode(buffer); - return output; - } - var EnvironmentSettingsObjectBase = class { - constructor() { - __publicField(this, "policyContainer", makePolicyContainer()); - } - get baseUrl() { - return getGlobalOrigin(); - } - get origin() { - var _a; - return (_a = this.baseUrl) == null ? void 0 : _a.origin; - } - }; - var EnvironmentSettingsObject = class { - constructor() { - __publicField(this, "settingsObject", new EnvironmentSettingsObjectBase()); - } - }; - var environmentSettingsObject = new EnvironmentSettingsObject(); - module.exports = { - isAborted, - isCancelled, - isValidEncodedURL, - createDeferredPromise, - ReadableStreamFrom, - tryUpgradeRequestToAPotentiallyTrustworthyURL, - clampAndCoarsenConnectionTimingInfo, - coarsenedSharedCurrentTime, - determineRequestsReferrer, - makePolicyContainer, - clonePolicyContainer, - appendFetchMetadata, - appendRequestOriginHeader, - TAOCheck, - corsCheck, - crossOriginResourcePolicyCheck, - createOpaqueTimingInfo, - setRequestReferrerPolicyOnRedirect, - isValidHTTPToken, - requestBadPort, - requestCurrentURL, - responseURL, - responseLocationURL, - isBlobLike, - isURLPotentiallyTrustworthy, - isValidReasonPhrase, - sameOrigin, - normalizeMethod, - serializeJavascriptValueToJSONString, - iteratorMixin, - createIterator, - isValidHeaderName, - isValidHeaderValue, - isErrorLike, - fullyReadBody, - bytesMatch, - isReadableStreamLike, - readableStreamClose, - isomorphicEncode, - urlIsLocal, - urlHasHttpsScheme, - urlIsHttpHttpsScheme, - readAllBytes, - simpleRangeHeaderValue, - buildContentRange, - parseMetadata, - createInflate, - extractMimeType, - getDecodeSplit, - utf8DecodeBytes, - environmentSettingsObject - }; - } - }); - - // - var require_symbols2 = __commonJS({ - ""(exports, module) { - "use strict"; - module.exports = { - kUrl: Symbol("url"), - kHeaders: Symbol("headers"), - kSignal: Symbol("signal"), - kState: Symbol("state"), - kDispatcher: Symbol("dispatcher") - }; - } - }); - - // - var require_file = __commonJS({ - ""(exports, module) { - "use strict"; - var { Blob: Blob2, File } = __require("buffer"); - var { kState } = require_symbols2(); - var { webidl } = require_webidl(); - var FileLike = class _FileLike { - constructor(blobLike, fileName, options = {}) { - var _a; - const n = fileName; - const t = options.type; - const d = (_a = options.lastModified) != null ? _a : Date.now(); - 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"; - } - }; - webidl.converters.Blob = webidl.interfaceConverter(Blob2); - function isFileLike(object) { - return object instanceof File || object && (typeof object.stream === "function" || typeof object.arrayBuffer === "function") && object[Symbol.toStringTag] === "File"; - } - module.exports = { FileLike, isFileLike }; - } - }); - - // - var require_formdata = __commonJS({ - ""(exports, module) { - "use strict"; - var { isBlobLike, iteratorMixin } = require_util2(); - var { kState } = require_symbols2(); - var { kEnumerableProperty } = require_util(); - var { FileLike, isFileLike } = require_file(); - var { webidl } = require_webidl(); - var { File: NativeFile } = __require("buffer"); - var nodeUtil = __require("util"); - var _a; - var File = (_a = globalThis.File) != null ? _a : NativeFile; - var FormData = class _FormData { - constructor(form) { - webidl.util.markAsUncloneable(this); - if (form !== void 0) { - throw webidl.errors.conversionFailed({ - prefix: "FormData constructor", - argument: "Argument 1", - types: ["undefined"] - }); - } - this[kState] = []; - } - append(name, value, filename = void 0) { - webidl.brandCheck(this, _FormData); - const prefix = "FormData.append"; - webidl.argumentLengthCheck(arguments, 2, prefix); - if (arguments.length === 3 && !isBlobLike(value)) { - throw new TypeError( - "Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'" - ); - } - name = webidl.converters.USVString(name, prefix, "name"); - value = isBlobLike(value) ? webidl.converters.Blob(value, prefix, "value", { strict: false }) : webidl.converters.USVString(value, prefix, "value"); - filename = arguments.length === 3 ? webidl.converters.USVString(filename, prefix, "filename") : void 0; - const entry = makeEntry(name, value, filename); - this[kState].push(entry); - } - delete(name) { - webidl.brandCheck(this, _FormData); - const prefix = "FormData.delete"; - webidl.argumentLengthCheck(arguments, 1, prefix); - name = webidl.converters.USVString(name, prefix, "name"); - this[kState] = this[kState].filter((entry) => entry.name !== name); - } - get(name) { - webidl.brandCheck(this, _FormData); - const prefix = "FormData.get"; - webidl.argumentLengthCheck(arguments, 1, prefix); - name = webidl.converters.USVString(name, prefix, "name"); - const idx = this[kState].findIndex((entry) => entry.name === name); - if (idx === -1) { - return null; - } - return this[kState][idx].value; - } - getAll(name) { - webidl.brandCheck(this, _FormData); - const prefix = "FormData.getAll"; - webidl.argumentLengthCheck(arguments, 1, prefix); - name = webidl.converters.USVString(name, prefix, "name"); - return this[kState].filter((entry) => entry.name === name).map((entry) => entry.value); - } - has(name) { - webidl.brandCheck(this, _FormData); - const prefix = "FormData.has"; - webidl.argumentLengthCheck(arguments, 1, prefix); - name = webidl.converters.USVString(name, prefix, "name"); - return this[kState].findIndex((entry) => entry.name === name) !== -1; - } - set(name, value, filename = void 0) { - webidl.brandCheck(this, _FormData); - const prefix = "FormData.set"; - webidl.argumentLengthCheck(arguments, 2, prefix); - if (arguments.length === 3 && !isBlobLike(value)) { - throw new TypeError( - "Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'" - ); - } - name = webidl.converters.USVString(name, prefix, "name"); - value = isBlobLike(value) ? webidl.converters.Blob(value, prefix, "name", { strict: false }) : webidl.converters.USVString(value, prefix, "name"); - filename = arguments.length === 3 ? webidl.converters.USVString(filename, prefix, "name") : void 0; - const entry = makeEntry(name, value, filename); - const idx = this[kState].findIndex((entry2) => entry2.name === name); - if (idx !== -1) { - this[kState] = [ - ...this[kState].slice(0, idx), - entry, - ...this[kState].slice(idx + 1).filter((entry2) => entry2.name !== name) - ]; - } else { - this[kState].push(entry); - } - } - [nodeUtil.inspect.custom](depth, options) { - var _a2, _b; - const state = this[kState].reduce((a, b) => { - if (a[b.name]) { - if (Array.isArray(a[b.name])) { - a[b.name].push(b.value); - } else { - a[b.name] = [a[b.name], b.value]; - } - } else { - a[b.name] = b.value; - } - return a; - }, { __proto__: null }); - (_a2 = options.depth) != null ? _a2 : options.depth = depth; - (_b = options.colors) != null ? _b : options.colors = true; - const output = nodeUtil.formatWithOptions(options, state); - return `FormData ${output.slice(output.indexOf("]") + 2)}`; - } - }; - iteratorMixin("FormData", FormData, kState, "name", "value"); - Object.defineProperties(FormData.prototype, { - append: kEnumerableProperty, - delete: kEnumerableProperty, - get: kEnumerableProperty, - getAll: kEnumerableProperty, - has: kEnumerableProperty, - set: kEnumerableProperty, - [Symbol.toStringTag]: { - value: "FormData", - configurable: true - } - }); - function makeEntry(name, value, filename) { - if (typeof value === "string") { - } else { - if (!isFileLike(value)) { - value = value instanceof Blob ? new File([value], "blob", { type: value.type }) : new FileLike(value, "blob", { type: value.type }); - } - if (filename !== void 0) { - const options = { - type: value.type, - lastModified: value.lastModified - }; - value = value instanceof NativeFile ? new File([value], filename, options) : new FileLike(value, filename, options); - } - } - return { name, value }; - } - module.exports = { FormData, makeEntry }; - } - }); - - // - var require_formdata_parser = __commonJS({ - ""(exports, module) { - "use strict"; - var { isUSVString, bufferToLowerCasedHeaderName } = require_util(); - var { utf8DecodeBytes } = require_util2(); - var { HTTP_TOKEN_CODEPOINTS, isomorphicDecode } = require_data_url(); - var { isFileLike } = require_file(); - var { makeEntry } = require_formdata(); - var assert = __require("assert"); - var { File: NodeFile } = __require("buffer"); - var _a; - var File = (_a = globalThis.File) != null ? _a : NodeFile; - var formDataNameBuffer = Buffer.from('form-data; name="'); - var filenameBuffer = Buffer.from("; filename"); - var dd = Buffer.from("--"); - var ddcrlf = Buffer.from("--\r\n"); - function isAsciiString(chars) { - for (let i = 0; i < chars.length; ++i) { - if ((chars.charCodeAt(i) & ~127) !== 0) { - return false; - } - } - return true; - } - function validateBoundary(boundary) { - const length = boundary.length; - if (length < 27 || length > 70) { - return false; - } - for (let i = 0; i < length; ++i) { - const cp = boundary.charCodeAt(i); - if (!(cp >= 48 && cp <= 57 || cp >= 65 && cp <= 90 || cp >= 97 && cp <= 122 || cp === 39 || cp === 45 || cp === 95)) { - return false; - } - } - return true; - } - function multipartFormDataParser(input, mimeType) { - assert(mimeType !== "failure" && mimeType.essence === "multipart/form-data"); - const boundaryString = mimeType.parameters.get("boundary"); - if (boundaryString === void 0) { - return "failure"; - } - const boundary = Buffer.from(`--${boundaryString}`, "utf8"); - const entryList = []; - const position = { position: 0 }; - while (input[position.position] === 13 && input[position.position + 1] === 10) { - position.position += 2; - } - let trailing = input.length; - while (input[trailing - 1] === 10 && input[trailing - 2] === 13) { - trailing -= 2; - } - if (trailing !== input.length) { - input = input.subarray(0, trailing); - } - while (true) { - if (input.subarray(position.position, position.position + boundary.length).equals(boundary)) { - position.position += boundary.length; - } else { - return "failure"; - } - if (position.position === input.length - 2 && bufferStartsWith(input, dd, position) || position.position === input.length - 4 && bufferStartsWith(input, ddcrlf, position)) { - return entryList; - } - if (input[position.position] !== 13 || input[position.position + 1] !== 10) { - return "failure"; - } - position.position += 2; - const result = parseMultipartFormDataHeaders(input, position); - if (result === "failure") { - return "failure"; - } - let { name, filename, contentType, encoding } = result; - position.position += 2; - let body; - { - const boundaryIndex = input.indexOf(boundary.subarray(2), position.position); - if (boundaryIndex === -1) { - return "failure"; - } - body = input.subarray(position.position, boundaryIndex - 4); - position.position += body.length; - if (encoding === "base64") { - body = Buffer.from(body.toString(), "base64"); - } - } - if (input[position.position] !== 13 || input[position.position + 1] !== 10) { - return "failure"; - } else { - position.position += 2; - } - let value; - if (filename !== null) { - contentType != null ? contentType : contentType = "text/plain"; - if (!isAsciiString(contentType)) { - contentType = ""; - } - value = new File([body], filename, { type: contentType }); - } else { - value = utf8DecodeBytes(Buffer.from(body)); - } - assert(isUSVString(name)); - assert(typeof value === "string" && isUSVString(value) || isFileLike(value)); - entryList.push(makeEntry(name, value, filename)); - } - } - function parseMultipartFormDataHeaders(input, position) { - let name = null; - let filename = null; - let contentType = null; - let encoding = null; - while (true) { - if (input[position.position] === 13 && input[position.position + 1] === 10) { - if (name === null) { - return "failure"; - } - return { name, filename, contentType, encoding }; - } - let headerName = collectASequenceOfBytes( - (char) => char !== 10 && char !== 13 && char !== 58, - input, - position - ); - headerName = removeChars(headerName, true, true, (char) => char === 9 || char === 32); - if (!HTTP_TOKEN_CODEPOINTS.test(headerName.toString())) { - return "failure"; - } - if (input[position.position] !== 58) { - return "failure"; - } - position.position++; - collectASequenceOfBytes( - (char) => char === 32 || char === 9, - input, - position - ); - switch (bufferToLowerCasedHeaderName(headerName)) { - case "content-disposition": { - name = filename = null; - if (!bufferStartsWith(input, formDataNameBuffer, position)) { - return "failure"; - } - position.position += 17; - name = parseMultipartFormDataName(input, position); - if (name === null) { - return "failure"; - } - if (bufferStartsWith(input, filenameBuffer, position)) { - let check = position.position + filenameBuffer.length; - if (input[check] === 42) { - position.position += 1; - check += 1; - } - if (input[check] !== 61 || input[check + 1] !== 34) { - return "failure"; - } - position.position += 12; - filename = parseMultipartFormDataName(input, position); - if (filename === null) { - return "failure"; - } - } - break; - } - case "content-type": { - let headerValue = collectASequenceOfBytes( - (char) => char !== 10 && char !== 13, - input, - position - ); - headerValue = removeChars(headerValue, false, true, (char) => char === 9 || char === 32); - contentType = isomorphicDecode(headerValue); - break; - } - case "content-transfer-encoding": { - let headerValue = collectASequenceOfBytes( - (char) => char !== 10 && char !== 13, - input, - position - ); - headerValue = removeChars(headerValue, false, true, (char) => char === 9 || char === 32); - encoding = isomorphicDecode(headerValue); - break; - } - default: { - collectASequenceOfBytes( - (char) => char !== 10 && char !== 13, - input, - position - ); - } - } - if (input[position.position] !== 13 && input[position.position + 1] !== 10) { - return "failure"; - } else { - position.position += 2; - } - } - } - function parseMultipartFormDataName(input, position) { - assert(input[position.position - 1] === 34); - let name = collectASequenceOfBytes( - (char) => char !== 10 && char !== 13 && char !== 34, - input, - position - ); - if (input[position.position] !== 34) { - return null; - } else { - position.position++; - } - name = new TextDecoder().decode(name).replace(/%0A/ig, "\n").replace(/%0D/ig, "\r").replace(/%22/g, '"'); - return name; - } - function collectASequenceOfBytes(condition, input, position) { - let start = position.position; - while (start < input.length && condition(input[start])) { - ++start; - } - return input.subarray(position.position, position.position = start); - } - function removeChars(buf, leading, trailing, predicate) { - let lead = 0; - let trail = buf.length - 1; - if (leading) { - while (lead < buf.length && predicate(buf[lead])) - lead++; - } - if (trailing) { - while (trail > 0 && predicate(buf[trail])) - trail--; - } - return lead === 0 && trail === buf.length - 1 ? buf : buf.subarray(lead, trail + 1); - } - function bufferStartsWith(buffer, start, position) { - if (buffer.length < start.length) { - return false; - } - for (let i = 0; i < start.length; i++) { - if (start[i] !== buffer[position.position + i]) { - return false; - } - } - return true; - } - module.exports = { - multipartFormDataParser, - validateBoundary - }; - } - }); - - // - var require_body = __commonJS({ - ""(exports, module) { - "use strict"; - var util = require_util(); - var { - ReadableStreamFrom, - isBlobLike, - isReadableStreamLike, - readableStreamClose, - createDeferredPromise, - fullyReadBody, - extractMimeType, - utf8DecodeBytes - } = require_util2(); - var { FormData } = require_formdata(); - var { kState } = require_symbols2(); - var { webidl } = require_webidl(); - var { Blob: Blob2 } = __require("buffer"); - var assert = __require("assert"); - var { isErrored, isDisturbed } = __require("stream"); - var { isArrayBuffer } = __require("util/types"); - var { serializeAMimeType } = require_data_url(); - var { multipartFormDataParser } = require_formdata_parser(); - var random; - try { - const crypto2 = __require("crypto"); - random = (max) => crypto2.randomInt(0, max); - } catch (e) { - random = (max) => Math.floor(Math.random(max)); - } - var textEncoder = new TextEncoder(); - function noop() { - } - var hasFinalizationRegistry = globalThis.FinalizationRegistry && process.version.indexOf("v18") !== 0; - var streamRegistry; - if (hasFinalizationRegistry) { - streamRegistry = new FinalizationRegistry((weakRef) => { - const stream = weakRef.deref(); - if (stream && !stream.locked && !isDisturbed(stream) && !isErrored(stream)) { - stream.cancel("Response object has been garbage collected").catch(noop); - } - }); - } - function extractBody(object, keepalive = false) { - let stream = null; - if (object instanceof ReadableStream) { - stream = object; - } else if (isBlobLike(object)) { - stream = object.stream(); - } else { - let _a; - stream = new ReadableStream({ - pull(controller) { - return __async(this, null, function* () { - const buffer = typeof source === "string" ? textEncoder.encode(source) : source; - if (buffer.byteLength) { - controller.enqueue(buffer); - } - queueMicrotask(() => readableStreamClose(controller)); - }); - }, - start() { - }, - type: "bytes" - }); - } - assert(isReadableStreamLike(stream)); - let action = null; - let source = null; - let length = null; - let type = null; - if (typeof object === "string") { - source = object; - type = "text/plain;charset=UTF-8"; - } else if (object instanceof URLSearchParams) { - source = object.toString(); - type = "application/x-www-form-urlencoded;charset=UTF-8"; - } else if (isArrayBuffer(object)) { - source = new Uint8Array(object.slice()); - } else if (ArrayBuffer.isView(object)) { - source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength)); - } else if (util.isFormDataLike(object)) { - const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, "0")}`; - const prefix = `--${boundary}\r -Content-Disposition: form-data`; - 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"); - const blobParts = []; - const rn = new Uint8Array([13, 10]); - length = 0; - let hasUnknownSizeValue = false; - for (const [name, value] of object) { - if (typeof value === "string") { - const chunk2 = textEncoder.encode(prefix + `; name="${escape(normalizeLinefeeds(name))}"\r -\r -${normalizeLinefeeds(value)}\r -`); - blobParts.push(chunk2); - length += chunk2.byteLength; - } else { - const chunk2 = textEncoder.encode(`${prefix}; name="${escape(normalizeLinefeeds(name))}"` + (value.name ? `; filename="${escape(value.name)}"` : "") + `\r -Content-Type: ${value.type || "application/octet-stream"}\r -\r -`); - blobParts.push(chunk2, value, rn); - if (typeof value.size === "number") { - length += chunk2.byteLength + value.size + rn.byteLength; - } else { - hasUnknownSizeValue = true; - } - } - } - const chunk = textEncoder.encode(`--${boundary}--\r -`); - blobParts.push(chunk); - length += chunk.byteLength; - if (hasUnknownSizeValue) { - length = null; - } - source = object; - action = function() { - return __asyncGenerator(this, null, function* () { - for (const part of blobParts) { - if (part.stream) { - yield* __yieldStar(part.stream()); - } else { - yield part; - } - } - }); - }; - type = `multipart/form-data; boundary=${boundary}`; - } else if (isBlobLike(object)) { - source = object; - length = object.size; - if (object.type) { - type = object.type; - } - } else if (typeof object[Symbol.asyncIterator] === "function") { - if (keepalive) { - throw new TypeError("keepalive"); - } - 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); - } - if (typeof source === "string" || util.isBuffer(source)) { - length = Buffer.byteLength(source); - } - if (action != null) { - let _b; - let iterator; - stream = new ReadableStream({ - start() { - return __async(this, null, function* () { - iterator = action(object)[Symbol.asyncIterator](); - }); - }, - pull(controller) { - return __async(this, null, function* () { - const { value, done } = yield iterator.next(); - if (done) { - queueMicrotask(() => { - var _a; - controller.close(); - (_a = controller.byobRequest) == null ? void 0 : _a.respond(0); - }); - } else { - if (!isErrored(stream)) { - const buffer = new Uint8Array(value); - if (buffer.byteLength) { - controller.enqueue(buffer); - } - } - } - return controller.desiredSize > 0; - }); - }, - cancel(reason) { - return __async(this, null, function* () { - yield iterator.return(); - }); - }, - type: "bytes" - }); - } - const body = { stream, source, length }; - return [body, type]; - } - function safelyExtractBody(object, keepalive = false) { - if (object instanceof ReadableStream) { - assert(!util.isDisturbed(object), "The body has already been consumed."); - assert(!object.locked, "The stream is locked."); - } - return extractBody(object, keepalive); - } - function cloneBody(instance, body) { - const [out1, out2] = body.stream.tee(); - body.stream = out1; - return { - stream: out2, - length: body.length, - source: body.source - }; - } - function throwIfAborted(state) { - if (state.aborted) { - throw new DOMException("The operation was aborted.", "AbortError"); - } - } - function bodyMixinMethods(instance) { - const methods = { - blob() { - return consumeBody(this, (bytes) => { - let mimeType = bodyMimeType(this); - if (mimeType === null) { - mimeType = ""; - } else if (mimeType) { - mimeType = serializeAMimeType(mimeType); - } - return new Blob2([bytes], { type: mimeType }); - }, instance); - }, - arrayBuffer() { - return consumeBody(this, (bytes) => { - return new Uint8Array(bytes).buffer; - }, instance); - }, - text() { - return consumeBody(this, utf8DecodeBytes, instance); - }, - json() { - return consumeBody(this, parseJSONFromBytes, instance); - }, - formData() { - return consumeBody(this, (value) => { - const mimeType = bodyMimeType(this); - if (mimeType !== null) { - switch (mimeType.essence) { - case "multipart/form-data": { - const parsed = multipartFormDataParser(value, mimeType); - if (parsed === "failure") { - throw new TypeError("Failed to parse body as FormData."); - } - const fd = new FormData(); - fd[kState] = parsed; - return fd; - } - case "application/x-www-form-urlencoded": { - const entries = new URLSearchParams(value.toString()); - const fd = new FormData(); - for (const [name, value2] of entries) { - fd.append(name, value2); - } - return fd; - } - } - } - throw new TypeError( - 'Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".' - ); - }, instance); - }, - bytes() { - return consumeBody(this, (bytes) => { - return new Uint8Array(bytes); - }, instance); - } - }; - return methods; - } - function mixinBody(prototype) { - Object.assign(prototype.prototype, bodyMixinMethods(prototype)); - } - function consumeBody(object, convertBytesToJSValue, instance) { - return __async(this, null, function* () { - webidl.brandCheck(object, instance); - if (bodyUnusable(object)) { - throw new TypeError("Body is unusable: Body has already been read"); - } - throwIfAborted(object[kState]); - const promise = createDeferredPromise(); - const errorSteps = (error) => promise.reject(error); - const successSteps = (data) => { - try { - promise.resolve(convertBytesToJSValue(data)); - } catch (e) { - errorSteps(e); - } - }; - if (object[kState].body == null) { - successSteps(Buffer.allocUnsafe(0)); - return promise.promise; - } - yield fullyReadBody(object[kState].body, successSteps, errorSteps); - return promise.promise; - }); - } - function bodyUnusable(object) { - const body = object[kState].body; - return body != null && (body.stream.locked || util.isDisturbed(body.stream)); - } - function parseJSONFromBytes(bytes) { - return JSON.parse(utf8DecodeBytes(bytes)); - } - function bodyMimeType(requestOrResponse) { - const headers = requestOrResponse[kState].headersList; - const mimeType = extractMimeType(headers); - if (mimeType === "failure") { - return null; - } - return mimeType; - } - module.exports = { - extractBody, - safelyExtractBody, - cloneBody, - mixinBody, - streamRegistry, - hasFinalizationRegistry, - bodyUnusable - }; - } - }); - - // - var require_client_h1 = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var util = require_util(); - var { channels } = require_diagnostics(); - var timers = require_timers(); - var { - RequestContentLengthMismatchError, - ResponseContentLengthMismatchError, - RequestAbortedError, - InvalidArgumentError, - HeadersTimeoutError, - HeadersOverflowError, - SocketError, - InformationalError, - BodyTimeoutError, - HTTPParserError, - ResponseExceededMaxSizeError - } = require_errors(); - var { - kUrl, - kReset, - kClient, - kParser, - kBlocking, - kRunning, - kPending, - kSize, - kWriting, - kQueue, - kNoRef, - kKeepAliveDefaultTimeout, - kHostHeader, - kPendingIdx, - kRunningIdx, - kError, - kPipelining, - kSocket, - kKeepAliveTimeoutValue, - kMaxHeadersSize, - kKeepAliveMaxTimeout, - kKeepAliveTimeoutThreshold, - kHeadersTimeout, - kBodyTimeout, - kStrictContentLength, - kMaxRequests, - kCounter, - kMaxResponseSize, - kOnError, - kResume, - kHTTPContext - } = require_symbols(); - var constants3 = require_constants2(); - var EMPTY_BUF = Buffer.alloc(0); - var FastBuffer = Buffer[Symbol.species]; - var addListener = util.addListener; - var removeAllListeners = util.removeAllListeners; - var kIdleSocketValidation = Symbol("kIdleSocketValidation"); - var kIdleSocketValidationTimeout = Symbol("kIdleSocketValidationTimeout"); - var kSocketUsed = Symbol("kSocketUsed"); - var extractBody; - function lazyllhttp() { - return __async(this, null, function* () { - const llhttpWasmData = process.env.JEST_WORKER_ID ? require_llhttp_wasm() : void 0; - let mod; - try { - mod = yield WebAssembly.compile(require_llhttp_simd_wasm()); - } catch (e) { - mod = yield WebAssembly.compile(llhttpWasmData || require_llhttp_wasm()); - } - return yield WebAssembly.instantiate(mod, { - env: { - /* eslint-disable camelcase */ - wasm_on_url: (p, at2, len) => { - return 0; - }, - wasm_on_status: (p, at2, len) => { - assert(currentParser.ptr === p); - const start = at2 - currentBufferPtr + currentBufferRef.byteOffset; - return currentParser.onStatus(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; - }, - wasm_on_message_begin: (p) => { - assert(currentParser.ptr === p); - return currentParser.onMessageBegin() || 0; - }, - wasm_on_header_field: (p, at2, len) => { - assert(currentParser.ptr === p); - const start = at2 - currentBufferPtr + currentBufferRef.byteOffset; - return currentParser.onHeaderField(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; - }, - wasm_on_header_value: (p, at2, len) => { - assert(currentParser.ptr === p); - const start = at2 - currentBufferPtr + currentBufferRef.byteOffset; - return currentParser.onHeaderValue(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; - }, - wasm_on_headers_complete: (p, statusCode, upgrade, shouldKeepAlive) => { - assert(currentParser.ptr === p); - return currentParser.onHeadersComplete(statusCode, Boolean(upgrade), Boolean(shouldKeepAlive)) || 0; - }, - wasm_on_body: (p, at2, len) => { - assert(currentParser.ptr === p); - const start = at2 - currentBufferPtr + currentBufferRef.byteOffset; - return currentParser.onBody(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; - }, - wasm_on_message_complete: (p) => { - assert(currentParser.ptr === p); - return currentParser.onMessageComplete() || 0; - } - /* eslint-enable camelcase */ - } - }); - }); - } - var llhttpInstance = null; - var llhttpPromise = lazyllhttp(); - llhttpPromise.catch(); - var currentParser = null; - var currentBufferRef = null; - var currentBufferSize = 0; - var currentBufferPtr = null; - var USE_NATIVE_TIMER = 0; - var USE_FAST_TIMER = 1; - var TIMEOUT_HEADERS = 2 | USE_FAST_TIMER; - var TIMEOUT_BODY = 4 | USE_FAST_TIMER; - var TIMEOUT_KEEP_ALIVE = 8 | USE_NATIVE_TIMER; - var Parser = class { - constructor(client, socket, { exports: exports2 }) { - assert(Number.isFinite(client[kMaxHeadersSize]) && client[kMaxHeadersSize] > 0); - this.llhttp = exports2; - this.ptr = this.llhttp.llhttp_alloc(constants3.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(delay, type) { - if (delay !== this.timeoutValue || type & USE_FAST_TIMER ^ this.timeoutType & USE_FAST_TIMER) { - if (this.timeout) { - timers.clearTimeout(this.timeout); - this.timeout = null; - } - if (delay) { - if (type & USE_FAST_TIMER) { - this.timeout = timers.setFastTimeout(onParserTimeout, delay, new WeakRef(this)); - } else { - this.timeout = setTimeout(onParserTimeout, delay, new WeakRef(this)); - this.timeout.unref(); - } - } - this.timeoutValue = delay; - } else if (this.timeout) { - if (this.timeout.refresh) { - this.timeout.refresh(); - } - } - this.timeoutType = type; - } - 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) { - if (this.timeout.refresh) { - this.timeout.refresh(); - } - } - this.paused = false; - this.execute(this.socket.read() || EMPTY_BUF); - 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); - try { - let ret; - try { - currentBufferRef = data; - currentParser = this; - ret = llhttp.llhttp_execute(this.ptr, currentBufferPtr, data.length); - } catch (err) { - throw err; - } finally { - currentParser = null; - currentBufferRef = null; - } - const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr; - if (ret !== constants3.ERROR.OK) { - const body = data.subarray(offset); - if (ret === constants3.ERROR.PAUSED_UPGRADE) { - this.onUpgrade(body); - } else if (ret === constants3.ERROR.PAUSED) { - this.paused = true; - socket.unshift(body); - } else { - throw this.createError(ret, body); - } - } - } catch (err) { - util.destroy(socket, err); - } - } - finish() { - assert(currentParser === null); - assert(this.ptr != null); - assert(!this.paused); - const { llhttp } = this; - let ret; - try { - currentParser = this; - ret = llhttp.llhttp_finish(this.ptr); - } finally { - currentParser = null; - } - if (ret === constants3.ERROR.OK) { - return null; - } - if (ret === constants3.ERROR.PAUSED || ret === constants3.ERROR.PAUSED_UPGRADE) { - this.paused = true; - return null; - } - return this.createError(ret, EMPTY_BUF); - } - createError(ret, data) { - const { llhttp, contentLength, bytesRead } = this; - if (contentLength && bytesRead !== parseInt(contentLength, 10)) { - return new ResponseContentLengthMismatchError(); - } - const ptr = llhttp.llhttp_get_error_reason(this.ptr); - let message = ""; - 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() + ")"; - } - return new HTTPParserError(message, constants3.ERROR[ret], data); - } - destroy() { - assert(this.ptr != null); - assert(currentParser == null); - this.llhttp.llhttp_free(this.ptr); - this.ptr = null; - this.timeout && 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; - if (socket.destroyed) { - return -1; - } - if (client[kRunning] === 0) { - util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket))); - return -1; - } - const request = client[kQueue][client[kRunningIdx]]; - if (!request) { - return -1; - } - request.onResponseStarted(); - } - 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) { - const headerName = util.bufferToLowerCasedHeaderName(key); - if (headerName === "keep-alive") { - this.keepAlive += buf.toString(); - } else if (headerName === "connection") { - this.connection += buf.toString(); - } - } else if (key.length === 14 && util.bufferToLowerCasedHeaderName(key) === "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); - assert(client[kSocket] === socket); - assert(!socket.destroyed); - assert(!this.paused); - assert((headers.length & 1) === 0); - const request = client[kQueue][client[kRunningIdx]]; - assert(request); - assert(request.upgrade || request.method === "CONNECT"); - this.statusCode = null; - this.statusText = ""; - this.shouldKeepAlive = null; - this.headers = []; - this.headersSize = 0; - socket.unshift(head); - socket[kParser].destroy(); - socket[kParser] = null; - socket[kClient] = null; - socket[kError] = null; - removeAllListeners(socket); - client[kSocket] = null; - client[kHTTPContext] = 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); - } - client[kResume](); - } - onHeadersComplete(statusCode, upgrade, shouldKeepAlive) { - const { client, socket, headers, statusText } = this; - if (socket.destroyed) { - return -1; - } - if (client[kRunning] === 0) { - util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket))); - return -1; - } - const request = client[kQueue][client[kRunningIdx]]; - 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; - } - if (upgrade && !request.upgrade) { - util.destroy(socket, new SocketError("bad upgrade", util.getSocketInfo(socket))); - return -1; - } - assert(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) { - 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 & 1) === 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 { - 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; - client[kResume](); - } - return pause ? constants3.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(this.timeoutType === TIMEOUT_BODY); - if (this.timeout) { - 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 constants3.ERROR.PAUSED; - } - } - onMessageComplete() { - const { client, socket, statusCode, upgrade, headers, contentLength, bytesRead, shouldKeepAlive } = this; - if (socket.destroyed && (!statusCode || shouldKeepAlive)) { - return -1; - } - if (upgrade) { - return; - } - assert(statusCode >= 100); - assert((this.headers.length & 1) === 0); - const request = client[kQueue][client[kRunningIdx]]; - assert(request); - this.statusCode = null; - this.statusText = ""; - this.bytesRead = 0; - this.contentLength = ""; - this.keepAlive = ""; - this.connection = ""; - this.headers = []; - this.headersSize = 0; - if (statusCode < 200) { - return; - } - if (request.method !== "HEAD" && contentLength && bytesRead !== parseInt(contentLength, 10)) { - util.destroy(socket, new ResponseContentLengthMismatchError()); - return -1; - } - request.onComplete(headers); - client[kQueue][client[kRunningIdx]++] = null; - socket[kSocketUsed] = true; - if (socket[kWriting]) { - assert(client[kRunning] === 0); - util.destroy(socket, new InformationalError("reset")); - return constants3.ERROR.PAUSED; - } else if (!shouldKeepAlive) { - util.destroy(socket, new InformationalError("reset")); - return constants3.ERROR.PAUSED; - } else if (socket[kReset] && client[kRunning] === 0) { - util.destroy(socket, new InformationalError("reset")); - return constants3.ERROR.PAUSED; - } else if (client[kPipelining] == null || client[kPipelining] === 1) { - setImmediate(() => client[kResume]()); - } else { - client[kResume](); - } - } - }; - function onParserTimeout(parser) { - const { socket, timeoutType, client, paused } = parser.deref(); - if (timeoutType === TIMEOUT_HEADERS) { - if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) { - assert(!paused, "cannot be paused while waiting for headers"); - util.destroy(socket, new HeadersTimeoutError()); - } - } else if (timeoutType === TIMEOUT_BODY) { - if (!paused) { - util.destroy(socket, new BodyTimeoutError()); - } - } else if (timeoutType === TIMEOUT_KEEP_ALIVE) { - assert(client[kRunning] === 0 && client[kKeepAliveTimeoutValue]); - util.destroy(socket, new InformationalError("socket idle timeout")); - } - } - function connectH1(client, socket) { - return __async(this, null, function* () { - client[kSocket] = socket; - if (!llhttpInstance) { - llhttpInstance = yield llhttpPromise; - llhttpPromise = null; - } - socket[kNoRef] = false; - socket[kWriting] = false; - socket[kReset] = false; - socket[kBlocking] = false; - socket[kIdleSocketValidation] = 0; - socket[kIdleSocketValidationTimeout] = null; - socket[kSocketUsed] = false; - socket[kParser] = new Parser(client, socket, llhttpInstance); - addListener(socket, "error", function(err) { - assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); - const parser = this[kParser]; - if (err.code === "ECONNRESET" && parser.statusCode && !parser.shouldKeepAlive) { - const parserErr = parser.finish(); - if (parserErr) { - this[kError] = parserErr; - this[kClient][kOnError](parserErr); - } - return; - } - this[kError] = err; - this[kClient][kOnError](err); - }); - addListener(socket, "readable", function() { - const parser = this[kParser]; - if (parser) { - parser.readMore(); - } - }); - addListener(socket, "end", function() { - const parser = this[kParser]; - if (parser.statusCode && !parser.shouldKeepAlive) { - const parserErr = parser.finish(); - if (parserErr) { - util.destroy(this, parserErr); - } - return; - } - util.destroy(this, new SocketError("other side closed", util.getSocketInfo(this))); - }); - addListener(socket, "close", function() { - const client2 = this[kClient]; - const parser = this[kParser]; - clearIdleSocketValidation(this); - if (parser) { - if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) { - this[kError] = parser.finish() || this[kError]; - } - this[kParser].destroy(); - this[kParser] = null; - } - const err = this[kError] || new SocketError("closed", util.getSocketInfo(this)); - client2[kSocket] = null; - client2[kHTTPContext] = null; - if (client2.destroyed) { - assert(client2[kPending] === 0); - const requests = client2[kQueue].splice(client2[kRunningIdx]); - for (let i = 0; i < requests.length; i++) { - const request = requests[i]; - util.errorRequest(client2, request, err); - } - } else if (client2[kRunning] > 0 && err.code !== "UND_ERR_INFO") { - const request = client2[kQueue][client2[kRunningIdx]]; - client2[kQueue][client2[kRunningIdx]++] = null; - util.errorRequest(client2, request, err); - } - client2[kPendingIdx] = client2[kRunningIdx]; - assert(client2[kRunning] === 0); - client2.emit("disconnect", client2[kUrl], [client2], err); - client2[kResume](); - }); - let closed = false; - socket.on("close", () => { - closed = true; - }); - return { - version: "h1", - defaultPipelining: 1, - write(...args) { - return writeH1(client, ...args); - }, - resume() { - resumeH1(client); - }, - destroy(err, callback) { - if (closed) { - queueMicrotask(callback); - } else { - socket.destroy(err).on("close", callback); - } - }, - get destroyed() { - return socket.destroyed; - }, - busy(request) { - if (socket[kWriting] || socket[kReset] || socket[kBlocking] || socket[kIdleSocketValidation] === 1) { - return true; - } - if (request) { - if (client[kRunning] > 0 && !request.idempotent) { - return true; - } - if (client[kRunning] > 0 && (request.upgrade || request.method === "CONNECT")) { - return true; - } - if (client[kRunning] > 0 && util.bodyLength(request.body) !== 0 && (util.isStream(request.body) || util.isAsyncIterable(request.body) || util.isFormDataLike(request.body))) { - return true; - } - } - return false; - } - }; - }); - } - function clearIdleSocketValidation(socket) { - if (socket[kIdleSocketValidationTimeout]) { - clearTimeout(socket[kIdleSocketValidationTimeout]); - socket[kIdleSocketValidationTimeout] = null; - } - socket[kIdleSocketValidation] = 0; - } - function scheduleIdleSocketValidation(client, socket) { - var _a, _b; - socket[kIdleSocketValidation] = 1; - socket[kIdleSocketValidationTimeout] = setTimeout(() => { - socket[kIdleSocketValidationTimeout] = null; - socket[kIdleSocketValidation] = 2; - if (client[kSocket] === socket && !socket.destroyed) { - client[kResume](); - } - }, 0); - (_b = (_a = socket[kIdleSocketValidationTimeout]).unref) == null ? void 0 : _b.call(_a); - } - function resumeH1(client) { - const socket = client[kSocket]; - if (socket && !socket.destroyed) { - 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[kRunning] === 0 && client[kPending] > 0 && socket[kSocketUsed]) { - if (socket[kIdleSocketValidation] === 0) { - scheduleIdleSocketValidation(client, socket); - socket[kParser].readMore(); - if (socket.destroyed) { - return; - } - return; - } - if (socket[kIdleSocketValidation] === 1) { - socket[kParser].readMore(); - if (socket.destroyed) { - return; - } - return; - } - } - if (client[kRunning] === 0) { - socket[kParser].readMore(); - if (socket.destroyed) { - return; - } - } - if (client[kSize] === 0) { - if (socket[kParser].timeoutType !== TIMEOUT_KEEP_ALIVE) { - socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_KEEP_ALIVE); - } - } 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); - } - } - } - } - function shouldSendContentLength(method) { - return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT"; - } - function writeH1(client, request) { - const { method, path: path4, host, upgrade, blocking, reset } = request; - let { body, headers, contentLength } = request; - const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH" || method === "QUERY" || method === "PROPFIND" || method === "PROPPATCH"; - if (util.isFormDataLike(body)) { - if (!extractBody) { - extractBody = require_body().extractBody; - } - const [bodyStream, contentType] = extractBody(body); - if (request.contentType == null) { - headers.push("content-type", contentType); - } - body = bodyStream.stream; - contentLength = bodyStream.length; - } else if (util.isBlobLike(body) && request.contentType == null) { - const contentType = body.type; - if (contentType) { - const contentTypeValue = `${contentType}`; - if (!util.isValidHeaderValue(contentTypeValue)) { - util.errorRequest(client, request, new InvalidArgumentError("invalid content-type header")); - return false; - } - headers.push("content-type", contentTypeValue); - } - } - if (body && typeof body.read === "function") { - body.read(0); - } - const bodyLength = util.bodyLength(body); - contentLength = bodyLength != null ? bodyLength : contentLength; - if (contentLength === null) { - contentLength = request.contentLength; - } - if (contentLength === 0 && !expectsPayload) { - contentLength = null; - } - if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength !== null && request.contentLength !== contentLength) { - if (client[kStrictContentLength]) { - util.errorRequest(client, request, new RequestContentLengthMismatchError()); - return false; - } - process.emitWarning(new RequestContentLengthMismatchError()); - } - const socket = client[kSocket]; - clearIdleSocketValidation(socket); - const abort = (err) => { - if (request.aborted || request.completed) { - return; - } - util.errorRequest(client, request, err || new RequestAbortedError()); - util.destroy(body); - util.destroy(socket, new InformationalError("aborted")); - }; - try { - request.onConnect(abort); - } catch (err) { - util.errorRequest(client, request, err); - } - if (request.aborted) { - return false; - } - if (method === "HEAD") { - socket[kReset] = true; - } - if (upgrade || method === "CONNECT") { - 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} ${path4} HTTP/1.1\r -`; - if (typeof host === "string") { - header += `host: ${host}\r -`; - } else { - header += client[kHostHeader]; - } - if (upgrade) { - header += `connection: upgrade\r -upgrade: ${upgrade}\r -`; - } else if (client[kPipelining] && !socket[kReset]) { - header += "connection: keep-alive\r\n"; - } else { - header += "connection: close\r\n"; - } - if (Array.isArray(headers)) { - for (let n = 0; n < headers.length; n += 2) { - const key = headers[n + 0]; - const val = headers[n + 1]; - if (Array.isArray(val)) { - for (let i = 0; i < val.length; i++) { - header += `${key}: ${val[i]}\r -`; - } - } else { - header += `${key}: ${val}\r -`; - } - } - } - if (channels.sendHeaders.hasSubscribers) { - channels.sendHeaders.publish({ request, headers: header, socket }); - } - if (!body || bodyLength === 0) { - writeBuffer(abort, null, client, request, socket, contentLength, header, expectsPayload); - } else if (util.isBuffer(body)) { - writeBuffer(abort, body, client, request, socket, contentLength, header, expectsPayload); - } else if (util.isBlobLike(body)) { - if (typeof body.stream === "function") { - writeIterable(abort, body.stream(), client, request, socket, contentLength, header, expectsPayload); - } else { - writeBlob(abort, body, client, request, socket, contentLength, header, expectsPayload); - } - } else if (util.isStream(body)) { - writeStream(abort, body, client, request, socket, contentLength, header, expectsPayload); - } else if (util.isIterable(body)) { - writeIterable(abort, body, client, request, socket, contentLength, header, expectsPayload); - } else { - assert(false); - } - return true; - } - function writeStream(abort, body, client, request, socket, contentLength, header, expectsPayload) { - var _a, _b, _c; - assert(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined"); - let finished = false; - const writer = new AsyncWriter({ abort, 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 onClose = function() { - queueMicrotask(() => { - body.removeListener("error", onFinished); - }); - if (!finished) { - 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("close", onClose); - 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", onClose); - if (body.resume) { - body.resume(); - } - socket.on("drain", onDrain).on("error", onFinished); - if ((_a = body.errorEmitted) != null ? _a : body.errored) { - setImmediate(() => onFinished(body.errored)); - } else if ((_b = body.endEmitted) != null ? _b : body.readableEnded) { - setImmediate(() => onFinished(null)); - } - if ((_c = body.closeEmitted) != null ? _c : body.closed) { - setImmediate(onClose); - } - } - function writeBuffer(abort, body, client, request, socket, contentLength, header, expectsPayload) { - try { - if (!body) { - if (contentLength === 0) { - socket.write(`${header}content-length: 0\r -\r -`, "latin1"); - } else { - assert(contentLength === null, "no body must not have content length"); - socket.write(`${header}\r -`, "latin1"); - } - } else if (util.isBuffer(body)) { - assert(contentLength === body.byteLength, "buffer body must have content length"); - socket.cork(); - socket.write(`${header}content-length: ${contentLength}\r -\r -`, "latin1"); - socket.write(body); - socket.uncork(); - request.onBodySent(body); - if (!expectsPayload && request.reset !== false) { - socket[kReset] = true; - } - } - request.onRequestSent(); - client[kResume](); - } catch (err) { - abort(err); - } - } - function writeBlob(abort, body, client, request, socket, contentLength, header, expectsPayload) { - return __async(this, null, function* () { - assert(contentLength === body.size, "blob body must have content length"); - try { - if (contentLength != null && contentLength !== body.size) { - throw new RequestContentLengthMismatchError(); - } - const buffer = Buffer.from(yield body.arrayBuffer()); - socket.cork(); - socket.write(`${header}content-length: ${contentLength}\r -\r -`, "latin1"); - socket.write(buffer); - socket.uncork(); - request.onBodySent(buffer); - request.onRequestSent(); - if (!expectsPayload && request.reset !== false) { - socket[kReset] = true; - } - client[kResume](); - } catch (err) { - abort(err); - } - }); - } - function writeIterable(abort, body, client, request, socket, contentLength, header, expectsPayload) { - return __async(this, null, function* () { - 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((resolve2, reject) => { - assert(callback === null); - if (socket[kError]) { - reject(socket[kError]); - } else { - callback = resolve2; - } - }); - socket.on("close", onDrain).on("drain", onDrain); - const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header }); - try { - try { - for (var iter = __forAwait(body), more, temp, error; more = !(temp = yield iter.next()).done; more = false) { - const chunk = temp.value; - if (socket[kError]) { - throw socket[kError]; - } - if (!writer.write(chunk)) { - yield waitForDrain(); - } - } - } catch (temp) { - error = [temp]; - } finally { - try { - more && (temp = iter.return) && (yield temp.call(iter)); - } finally { - if (error) - throw error[0]; - } - } - writer.end(); - } catch (err) { - writer.destroy(err); - } finally { - socket.off("close", onDrain).off("drain", onDrain); - } - }); - } - var AsyncWriter = class { - constructor({ abort, 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; - this.abort = abort; - 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; - } - if (contentLength !== null && bytesWritten + len > contentLength) { - if (client[kStrictContentLength]) { - throw new RequestContentLengthMismatchError(); - } - process.emitWarning(new RequestContentLengthMismatchError()); - } - socket.cork(); - if (bytesWritten === 0) { - if (!expectsPayload && request.reset !== false) { - socket[kReset] = true; - } - if (contentLength === null) { - socket.write(`${header}transfer-encoding: chunked\r -`, "latin1"); - } else { - socket.write(`${header}content-length: ${contentLength}\r -\r -`, "latin1"); - } - } - if (contentLength === null) { - socket.write(`\r -${len.toString(16)}\r -`, "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) { - 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) { - socket.write(`${header}content-length: 0\r -\r -`, "latin1"); - } else { - socket.write(`${header}\r -`, "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) { - if (socket[kParser].timeout.refresh) { - socket[kParser].timeout.refresh(); - } - } - client[kResume](); - } - destroy(err) { - const { socket, client, abort } = this; - socket[kWriting] = false; - if (err) { - assert(client[kRunning] <= 1, "pipeline should only contain this request"); - abort(err); - } - } - }; - module.exports = connectH1; - } - }); - - // - var require_client_h2 = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { pipeline } = __require("stream"); - var util = require_util(); - var { - RequestContentLengthMismatchError, - RequestAbortedError, - SocketError, - InformationalError - } = require_errors(); - var { - kUrl, - kReset, - kClient, - kRunning, - kPending, - kQueue, - kPendingIdx, - kRunningIdx, - kError, - kSocket, - kStrictContentLength, - kOnError, - kMaxConcurrentStreams, - kHTTP2Session, - kResume, - kSize, - kHTTPContext - } = require_symbols(); - var kOpenStreams = Symbol("open streams"); - var extractBody; - var h2ExperimentalWarned = false; - var http2; - try { - http2 = __require("http2"); - } catch (e) { - http2 = { constants: {} }; - } - var { - constants: { - HTTP2_HEADER_AUTHORITY, - HTTP2_HEADER_METHOD, - HTTP2_HEADER_PATH, - HTTP2_HEADER_SCHEME, - HTTP2_HEADER_CONTENT_LENGTH, - HTTP2_HEADER_EXPECT, - HTTP2_HEADER_STATUS - } - } = http2; - function parseH2Headers(headers) { - const result = []; - for (const [name, value] of Object.entries(headers)) { - if (Array.isArray(value)) { - for (const subvalue of value) { - result.push(Buffer.from(name), Buffer.from(subvalue)); - } - } else { - result.push(Buffer.from(name), Buffer.from(value)); - } - } - return result; - } - function connectH2(client, socket) { - return __async(this, null, function* () { - client[kSocket] = socket; - 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[kMaxConcurrentStreams] - }); - session[kOpenStreams] = 0; - session[kClient] = client; - session[kSocket] = socket; - util.addListener(session, "error", onHttp2SessionError); - util.addListener(session, "frameError", onHttp2FrameError); - util.addListener(session, "end", onHttp2SessionEnd); - util.addListener(session, "goaway", onHTTP2GoAway); - util.addListener(session, "close", function() { - const { [kClient]: client2 } = this; - const { [kSocket]: socket2 } = client2; - const err = this[kSocket][kError] || this[kError] || new SocketError("closed", util.getSocketInfo(socket2)); - client2[kHTTP2Session] = null; - if (client2.destroyed) { - assert(client2[kPending] === 0); - const requests = client2[kQueue].splice(client2[kRunningIdx]); - for (let i = 0; i < requests.length; i++) { - const request = requests[i]; - util.errorRequest(client2, request, err); - } - } - }); - session.unref(); - client[kHTTP2Session] = session; - socket[kHTTP2Session] = session; - util.addListener(socket, "error", function(err) { - assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); - this[kError] = err; - this[kClient][kOnError](err); - }); - util.addListener(socket, "end", function() { - util.destroy(this, new SocketError("other side closed", util.getSocketInfo(this))); - }); - util.addListener(socket, "close", function() { - const err = this[kError] || new SocketError("closed", util.getSocketInfo(this)); - client[kSocket] = null; - if (this[kHTTP2Session] != null) { - this[kHTTP2Session].destroy(err); - } - client[kPendingIdx] = client[kRunningIdx]; - assert(client[kRunning] === 0); - client.emit("disconnect", client[kUrl], [client], err); - client[kResume](); - }); - let closed = false; - socket.on("close", () => { - closed = true; - }); - return { - version: "h2", - defaultPipelining: Infinity, - write(...args) { - return writeH2(client, ...args); - }, - resume() { - resumeH2(client); - }, - destroy(err, callback) { - if (closed) { - queueMicrotask(callback); - } else { - socket.destroy(err).on("close", callback); - } - }, - get destroyed() { - return socket.destroyed; - }, - busy() { - return false; - } - }; - }); - } - function resumeH2(client) { - const socket = client[kSocket]; - if ((socket == null ? void 0 : socket.destroyed) === false) { - if (client[kSize] === 0 && client[kMaxConcurrentStreams] === 0) { - socket.unref(); - client[kHTTP2Session].unref(); - } else { - socket.ref(); - client[kHTTP2Session].ref(); - } - } - } - function onHttp2SessionError(err) { - assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); - this[kSocket][kError] = err; - this[kClient][kOnError](err); - } - function onHttp2FrameError(type, code, id) { - if (id === 0) { - const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`); - this[kSocket][kError] = err; - this[kClient][kOnError](err); - } - } - function onHttp2SessionEnd() { - const err = new SocketError("other side closed", util.getSocketInfo(this[kSocket])); - this.destroy(err); - util.destroy(this[kSocket], err); - } - function onHTTP2GoAway(code) { - const err = this[kError] || new SocketError(`HTTP/2: "GOAWAY" frame received with code ${code}`, util.getSocketInfo(this)); - const client = this[kClient]; - client[kSocket] = null; - client[kHTTPContext] = null; - if (this[kHTTP2Session] != null) { - this[kHTTP2Session].destroy(err); - this[kHTTP2Session] = null; - } - util.destroy(this[kSocket], err); - if (client[kRunningIdx] < client[kQueue].length) { - const request = client[kQueue][client[kRunningIdx]]; - client[kQueue][client[kRunningIdx]++] = null; - util.errorRequest(client, request, err); - client[kPendingIdx] = client[kRunningIdx]; - } - assert(client[kRunning] === 0); - client.emit("disconnect", client[kUrl], [client], err); - client[kResume](); - } - function shouldSendContentLength(method) { - return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT"; - } - function writeH2(client, request) { - const session = client[kHTTP2Session]; - const { method, path: path4, host, upgrade, expectContinue, signal, headers: reqHeaders } = request; - let { body } = request; - if (upgrade) { - util.errorRequest(client, request, new Error("Upgrade not supported for H2")); - return false; - } - const headers = {}; - for (let n = 0; n < reqHeaders.length; n += 2) { - const key = reqHeaders[n + 0]; - const val = reqHeaders[n + 1]; - if (Array.isArray(val)) { - for (let i = 0; i < val.length; i++) { - if (headers[key]) { - headers[key] += `,${val[i]}`; - } else { - headers[key] = val[i]; - } - } - } else { - headers[key] = val; - } - } - let stream; - const { hostname, port } = client[kUrl]; - headers[HTTP2_HEADER_AUTHORITY] = host || `${hostname}${port ? `:${port}` : ""}`; - headers[HTTP2_HEADER_METHOD] = method; - const abort = (err) => { - if (request.aborted || request.completed) { - return; - } - err = err || new RequestAbortedError(); - util.errorRequest(client, request, err); - if (stream != null) { - util.destroy(stream, err); - } - util.destroy(body, err); - client[kQueue][client[kRunningIdx]++] = null; - client[kResume](); - }; - try { - request.onConnect(abort); - } catch (err) { - util.errorRequest(client, request, err); - } - if (request.aborted) { - return false; - } - if (method === "CONNECT") { - session.ref(); - stream = session.request(headers, { endStream: false, signal }); - if (stream.id && !stream.pending) { - request.onUpgrade(null, null, stream); - ++session[kOpenStreams]; - client[kQueue][client[kRunningIdx]++] = null; - } else { - stream.once("ready", () => { - request.onUpgrade(null, null, stream); - ++session[kOpenStreams]; - client[kQueue][client[kRunningIdx]++] = null; - }); - } - stream.once("close", () => { - session[kOpenStreams] -= 1; - if (session[kOpenStreams] === 0) - session.unref(); - }); - return true; - } - headers[HTTP2_HEADER_PATH] = path4; - headers[HTTP2_HEADER_SCHEME] = "https"; - const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH"; - if (body && typeof body.read === "function") { - body.read(0); - } - let contentLength = util.bodyLength(body); - if (util.isFormDataLike(body)) { - extractBody != null ? extractBody : extractBody = require_body().extractBody; - const [bodyStream, contentType] = extractBody(body); - headers["content-type"] = contentType; - body = bodyStream.stream; - contentLength = bodyStream.length; - } - if (contentLength == null) { - contentLength = request.contentLength; - } - if (contentLength === 0 || !expectsPayload) { - contentLength = null; - } - if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength != null && request.contentLength !== contentLength) { - if (client[kStrictContentLength]) { - util.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" || body === null; - 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(); - } - ++session[kOpenStreams]; - stream.once("response", (headers2) => { - const _a = headers2, { [HTTP2_HEADER_STATUS]: statusCode } = _a, realHeaders = __objRest(_a, [__restKey(HTTP2_HEADER_STATUS)]); - request.onResponseStarted(); - if (request.aborted) { - const err = new RequestAbortedError(); - util.errorRequest(client, request, err); - util.destroy(stream, err); - return; - } - if (request.onHeaders(Number(statusCode), parseH2Headers(realHeaders), stream.resume.bind(stream), "") === false) { - stream.pause(); - } - stream.on("data", (chunk) => { - if (request.onData(chunk) === false) { - stream.pause(); - } - }); - }); - stream.once("end", () => { - var _a; - if (((_a = stream.state) == null ? void 0 : _a.state) == null || stream.state.state < 6) { - request.onComplete([]); - } - if (session[kOpenStreams] === 0) { - session.unref(); - } - abort(new InformationalError("HTTP/2: stream half-closed (remote)")); - client[kQueue][client[kRunningIdx]++] = null; - client[kPendingIdx] = client[kRunningIdx]; - client[kResume](); - }); - stream.once("close", () => { - session[kOpenStreams] -= 1; - if (session[kOpenStreams] === 0) { - session.unref(); - } - }); - stream.once("error", function(err) { - abort(err); - }); - stream.once("frameError", (type, code) => { - abort(new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`)); - }); - return true; - function writeBodyH2() { - if (!body || contentLength === 0) { - writeBuffer( - abort, - stream, - null, - client, - request, - client[kSocket], - contentLength, - expectsPayload - ); - } else if (util.isBuffer(body)) { - writeBuffer( - abort, - stream, - body, - client, - request, - client[kSocket], - contentLength, - expectsPayload - ); - } else if (util.isBlobLike(body)) { - if (typeof body.stream === "function") { - writeIterable( - abort, - stream, - body.stream(), - client, - request, - client[kSocket], - contentLength, - expectsPayload - ); - } else { - writeBlob( - abort, - stream, - body, - client, - request, - client[kSocket], - contentLength, - expectsPayload - ); - } - } else if (util.isStream(body)) { - writeStream( - abort, - client[kSocket], - expectsPayload, - stream, - body, - client, - request, - contentLength - ); - } else if (util.isIterable(body)) { - writeIterable( - abort, - stream, - body, - client, - request, - client[kSocket], - contentLength, - expectsPayload - ); - } else { - assert(false); - } - } - } - function writeBuffer(abort, h2stream, body, client, request, socket, contentLength, expectsPayload) { - try { - if (body != null && util.isBuffer(body)) { - assert(contentLength === body.byteLength, "buffer body must have content length"); - h2stream.cork(); - h2stream.write(body); - h2stream.uncork(); - h2stream.end(); - request.onBodySent(body); - } - if (!expectsPayload) { - socket[kReset] = true; - } - request.onRequestSent(); - client[kResume](); - } catch (error) { - abort(error); - } - } - function writeStream(abort, socket, expectsPayload, h2stream, body, client, request, contentLength) { - assert(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined"); - const pipe = pipeline( - body, - h2stream, - (err) => { - if (err) { - util.destroy(pipe, err); - abort(err); - } else { - util.removeAllListeners(pipe); - request.onRequestSent(); - if (!expectsPayload) { - socket[kReset] = true; - } - client[kResume](); - } - } - ); - util.addListener(pipe, "data", onPipeData); - function onPipeData(chunk) { - request.onBodySent(chunk); - } - } - function writeBlob(abort, h2stream, body, client, request, socket, contentLength, expectsPayload) { - return __async(this, null, function* () { - assert(contentLength === body.size, "blob body must have content length"); - try { - if (contentLength != null && contentLength !== body.size) { - throw new RequestContentLengthMismatchError(); - } - const buffer = Buffer.from(yield body.arrayBuffer()); - h2stream.cork(); - h2stream.write(buffer); - h2stream.uncork(); - h2stream.end(); - request.onBodySent(buffer); - request.onRequestSent(); - if (!expectsPayload) { - socket[kReset] = true; - } - client[kResume](); - } catch (err) { - abort(err); - } - }); - } - function writeIterable(abort, h2stream, body, client, request, socket, contentLength, expectsPayload) { - return __async(this, null, function* () { - 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((resolve2, reject) => { - assert(callback === null); - if (socket[kError]) { - reject(socket[kError]); - } else { - callback = resolve2; - } - }); - h2stream.on("close", onDrain).on("drain", onDrain); - try { - try { - for (var iter = __forAwait(body), more, temp, error; more = !(temp = yield iter.next()).done; more = false) { - const chunk = temp.value; - if (socket[kError]) { - throw socket[kError]; - } - const res = h2stream.write(chunk); - request.onBodySent(chunk); - if (!res) { - yield waitForDrain(); - } - } - } catch (temp) { - error = [temp]; - } finally { - try { - more && (temp = iter.return) && (yield temp.call(iter)); - } finally { - if (error) - throw error[0]; - } - } - h2stream.end(); - request.onRequestSent(); - if (!expectsPayload) { - socket[kReset] = true; - } - client[kResume](); - } catch (err) { - abort(err); - } finally { - h2stream.off("close", onDrain).off("drain", onDrain); - } - }); - } - module.exports = connectH2; - } - }); - - // - var require_redirect_handler = __commonJS({ - ""(exports, module) { - "use strict"; - var util = require_util(); - var { kBodyUsed } = require_symbols(); - var assert = __require("assert"); - var { InvalidArgumentError } = require_errors(); - var EE = __require("events"); - var redirectableStatusCodes = [300, 301, 302, 303, 307, 308]; - var kBody = Symbol("body"); - var BodyAsyncIterable = class { - constructor(body) { - this[kBody] = body; - this[kBodyUsed] = false; - } - [Symbol.asyncIterator]() { - return __asyncGenerator(this, null, function* () { - assert(!this[kBodyUsed], "disturbed"); - this[kBodyUsed] = true; - yield* __yieldStar(this[kBody]); - }); - } - }; - var RedirectHandler = class { - 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 = __spreadProps(__spreadValues({}, opts), { maxRedirections: 0 }); - this.maxRedirections = maxRedirections; - this.handler = handler; - this.history = []; - this.redirectionLimitReached = false; - if (util.isStream(this.opts.body)) { - 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") { - 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)) { - 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.throwOnMaxRedirect && this.history.length >= this.maxRedirections) { - if (this.request) { - this.request.abort(new Error("max redirects")); - } - this.redirectionLimitReached = true; - this.abort(new Error("max redirects")); - return; - } - 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 path4 = search ? `${pathname}${search}` : pathname; - this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin); - this.opts.path = path4; - this.opts.origin = origin; - this.opts.maxRedirections = 0; - this.opts.query = null; - if (statusCode === 303 && this.opts.method !== "HEAD") { - this.opts.method = "GET"; - this.opts.body = null; - } - } - onData(chunk) { - if (this.location) { - } else { - return this.handler.onData(chunk); - } - } - onComplete(trailers) { - if (this.location) { - 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].length === 8 && util.headerNameToString(headers[i]) === "location") { - return headers[i + 1]; - } - } - } - 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; - } - 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; - } - }); - - // - var require_redirect_interceptor = __commonJS({ - ""(exports, module) { - "use strict"; - var RedirectHandler = require_redirect_handler(); - 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 = __spreadProps(__spreadValues({}, opts), { maxRedirections: 0 }); - return dispatch(opts, redirectHandler); - }; - }; - } - module.exports = createRedirectInterceptor; - } - }); - - // - var require_client = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var net = __require("net"); - var http = __require("http"); - var util = require_util(); - var { channels } = require_diagnostics(); - var Request = require_request(); - var DispatcherBase = require_dispatcher_base(); - var { - InvalidArgumentError, - InformationalError, - ClientDestroyedError - } = require_errors(); - var buildConnector = require_connect(); - var { - kUrl, - kServerName, - kClient, - kBusy, - kConnect, - kResuming, - kRunning, - kPending, - kSize, - kQueue, - kConnected, - kConnecting, - kNeedDrain, - kKeepAliveDefaultTimeout, - kHostHeader, - kPendingIdx, - kRunningIdx, - kError, - kPipelining, - kKeepAliveTimeoutValue, - kMaxHeadersSize, - kKeepAliveMaxTimeout, - kKeepAliveTimeoutThreshold, - kHeadersTimeout, - kBodyTimeout, - kStrictContentLength, - kConnector, - kMaxRedirections, - kMaxRequests, - kCounter, - kClose, - kDestroy, - kDispatch, - kInterceptors, - kLocalAddress, - kMaxResponseSize, - kOnError, - kHTTPContext, - kMaxConcurrentStreams, - kResume - } = require_symbols(); - var connectH1 = require_client_h1(); - var connectH2 = require_client_h2(); - var deprecatedInterceptorWarned = false; - var kClosedResolve = Symbol("kClosedResolve"); - var noop = () => { - }; - function getPipelining(client) { - var _a, _b, _c; - return (_c = (_b = client[kPipelining]) != null ? _b : (_a = client[kHTTPContext]) == null ? void 0 : _a.defaultPipelining) != null ? _c : 1; - } - var Client = class extends DispatcherBase { - /** - * - * @param {string|URL} url - * @param {import('../../types/client.js').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: connect2, - maxRequestsPerClient, - localAddress, - maxResponseSize, - autoSelectFamily, - autoSelectFamilyAttemptTimeout, - // h2 - maxConcurrentStreams, - allowH2, - webSocket - } = {}) { - super({ webSocket }); - if (keepAlive !== void 0) { - throw new InvalidArgumentError("unsupported keepAlive, use pipelining=0 instead"); - } - if (socketTimeout !== void 0) { - throw new InvalidArgumentError("unsupported socketTimeout, use headersTimeout & bodyTimeout instead"); - } - if (requestTimeout !== void 0) { - throw new InvalidArgumentError("unsupported requestTimeout, use headersTimeout & bodyTimeout instead"); - } - if (idleTimeout !== void 0) { - throw new InvalidArgumentError("unsupported idleTimeout, use keepAliveTimeout instead"); - } - if (maxKeepAliveTimeout !== void 0) { - 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 (connect2 != null && typeof connect2 !== "function" && typeof connect2 !== "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"); - } - 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 positive integer, greater than 0"); - } - if (typeof connect2 !== "function") { - connect2 = buildConnector(__spreadValues(__spreadValues(__spreadProps(__spreadValues({}, tls), { - maxCachedSessions, - allowH2, - socketPath, - timeout: connectTimeout - }), autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0), connect2)); - } - if ((interceptors == null ? void 0 : interceptors.Client) && Array.isArray(interceptors.Client)) { - this[kInterceptors] = interceptors.Client; - if (!deprecatedInterceptorWarned) { - deprecatedInterceptorWarned = true; - process.emitWarning("Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.", { - code: "UNDICI-CLIENT-INTERCEPTOR-DEPRECATED" - }); - } - } else { - this[kInterceptors] = [createRedirectInterceptor({ maxRedirections })]; - } - this[kUrl] = util.parseOrigin(url); - this[kConnector] = connect2; - this[kPipelining] = pipelining != null ? pipelining : 1; - this[kMaxHeadersSize] = maxHeaderSize || http.maxHeaderSize; - this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout; - this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 6e5 : keepAliveMaxTimeout; - this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 2e3 : keepAliveTimeoutThreshold; - this[kKeepAliveTimeoutValue] = this[kKeepAliveDefaultTimeout]; - this[kServerName] = null; - this[kLocalAddress] = localAddress != null ? localAddress : null; - this[kResuming] = 0; - this[kNeedDrain] = 0; - this[kHostHeader] = `host: ${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ""}\r -`; - this[kBodyTimeout] = bodyTimeout != null ? bodyTimeout : 3e5; - this[kHeadersTimeout] = headersTimeout != null ? headersTimeout : 3e5; - this[kStrictContentLength] = strictContentLength == null ? true : strictContentLength; - this[kMaxRedirections] = maxRedirections; - this[kMaxRequests] = maxRequestsPerClient; - this[kClosedResolve] = null; - this[kMaxResponseSize] = maxResponseSize > -1 ? maxResponseSize : -1; - this[kMaxConcurrentStreams] = maxConcurrentStreams != null ? maxConcurrentStreams : 100; - this[kHTTPContext] = null; - this[kQueue] = []; - this[kRunningIdx] = 0; - this[kPendingIdx] = 0; - this[kResume] = (sync) => resume(this, sync); - this[kOnError] = (err) => onError(this, err); - } - get pipelining() { - return this[kPipelining]; - } - set pipelining(value) { - this[kPipelining] = value; - this[kResume](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[kHTTPContext] && !this[kConnecting] && !this[kHTTPContext].destroyed; - } - get [kBusy]() { - var _a; - return Boolean( - ((_a = this[kHTTPContext]) == null ? void 0 : _a.busy(null)) || this[kSize] >= (getPipelining(this) || 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 = new Request(origin, opts, handler); - this[kQueue].push(request); - if (this[kResuming]) { - } else if (util.bodyLength(request.body) == null && util.isIterable(request.body)) { - this[kResuming] = 1; - queueMicrotask(() => resume(this)); - } else { - this[kResume](true); - } - if (this[kResuming] && this[kNeedDrain] !== 2 && this[kBusy]) { - this[kNeedDrain] = 2; - } - return this[kNeedDrain] < 2; - } - [kClose]() { - return __async(this, null, function* () { - return new Promise((resolve2) => { - if (this[kSize]) { - this[kClosedResolve] = resolve2; - } else { - resolve2(null); - } - }); - }); - } - [kDestroy](err) { - return __async(this, null, function* () { - return new Promise((resolve2) => { - const requests = this[kQueue].splice(this[kPendingIdx]); - for (let i = 0; i < requests.length; i++) { - const request = requests[i]; - util.errorRequest(this, request, err); - } - const callback = () => { - if (this[kClosedResolve]) { - this[kClosedResolve](); - this[kClosedResolve] = null; - } - resolve2(null); - }; - if (this[kHTTPContext]) { - this[kHTTPContext].destroy(err, callback); - this[kHTTPContext] = null; - } else { - queueMicrotask(callback); - } - this[kResume](); - }); - }); - } - }; - var createRedirectInterceptor = require_redirect_interceptor(); - function onError(client, err) { - if (client[kRunning] === 0 && err.code !== "UND_ERR_INFO" && err.code !== "UND_ERR_SOCKET") { - assert(client[kPendingIdx] === client[kRunningIdx]); - const requests = client[kQueue].splice(client[kRunningIdx]); - for (let i = 0; i < requests.length; i++) { - const request = requests[i]; - util.errorRequest(client, request, err); - } - assert(client[kSize] === 0); - } - } - function connect(client) { - return __async(this, null, function* () { - var _a, _b, _c; - assert(!client[kConnecting]); - assert(!client[kHTTPContext]); - let { host, hostname, protocol, port } = client[kUrl]; - 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, - version: (_a = client[kHTTPContext]) == null ? void 0 : _a.version, - servername: client[kServerName], - localAddress: client[kLocalAddress] - }, - connector: client[kConnector] - }); - } - try { - const socket = yield new Promise((resolve2, reject) => { - client[kConnector]({ - host, - hostname, - protocol, - port, - servername: client[kServerName], - localAddress: client[kLocalAddress] - }, (err, socket2) => { - if (err) { - reject(err); - } else { - resolve2(socket2); - } - }); - }); - if (client.destroyed) { - util.destroy(socket.on("error", noop), new ClientDestroyedError()); - return; - } - assert(socket); - try { - client[kHTTPContext] = socket.alpnProtocol === "h2" ? yield connectH2(client, socket) : yield connectH1(client, socket); - } catch (err) { - socket.destroy().on("error", noop); - throw err; - } - client[kConnecting] = false; - socket[kCounter] = 0; - socket[kMaxRequests] = client[kMaxRequests]; - socket[kClient] = client; - socket[kError] = null; - if (channels.connected.hasSubscribers) { - channels.connected.publish({ - connectParams: { - host, - hostname, - protocol, - port, - version: (_b = client[kHTTPContext]) == null ? void 0 : _b.version, - 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, - version: (_c = client[kHTTPContext]) == null ? void 0 : _c.version, - 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]++]; - util.errorRequest(client, request, err); - } - } else { - onError(client, err); - } - client.emit("connectionError", client[kUrl], [client], err); - } - client[kResume](); - }); - } - 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) { - var _a; - while (true) { - if (client.destroyed) { - assert(client[kPending] === 0); - return; - } - if (client[kClosedResolve] && !client[kSize]) { - client[kClosedResolve](); - client[kClosedResolve] = null; - return; - } - if (client[kHTTPContext]) { - client[kHTTPContext].resume(); - } - if (client[kBusy]) { - client[kNeedDrain] = 2; - } else if (client[kNeedDrain] === 2) { - if (sync) { - client[kNeedDrain] = 1; - queueMicrotask(() => emitDrain(client)); - } else { - emitDrain(client); - } - continue; - } - if (client[kPending] === 0) { - return; - } - if (client[kRunning] >= (getPipelining(client) || 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; - (_a = client[kHTTPContext]) == null ? void 0 : _a.destroy(new InformationalError("servername changed"), () => { - client[kHTTPContext] = null; - resume(client); - }); - } - if (client[kConnecting]) { - return; - } - if (!client[kHTTPContext]) { - connect(client); - return; - } - if (client[kHTTPContext].destroyed) { - return; - } - if (client[kHTTPContext].busy(request)) { - return; - } - if (!request.aborted && client[kHTTPContext].write(request)) { - client[kPendingIdx]++; - } else { - client[kQueue].splice(client[kPendingIdx], 1); - } - } - } - module.exports = Client; - } - }); - - // - var require_fixed_queue = __commonJS({ - ""(exports, module) { - "use strict"; - var kSize = 2048; - var kMask = kSize - 1; - var FixedCircularBuffer = class { - 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 === void 0) - return null; - this.list[this.bottom] = void 0; - 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()) { - 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) { - this.tail = tail.next; - } - return next; - } - }; - } - }); - - // - var require_pool_stats = __commonJS({ - ""(exports, module) { - var { kFree, kConnected, kPending, kQueued, kRunning, kSize } = require_symbols(); - var kPool = Symbol("pool"); - var PoolStats = class { - 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; - } - }); - - // - var require_pool_base = __commonJS({ - ""(exports, module) { - "use strict"; - var DispatcherBase = require_dispatcher_base(); - var FixedQueue = require_fixed_queue(); - var { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = require_symbols(); - var PoolStats = require_pool_stats(); - var kClients = Symbol("clients"); - var kNeedDrain = Symbol("needDrain"); - var kQueue = Symbol("queue"); - var kClosedResolve = Symbol("closed resolve"); - var kOnDrain = Symbol("onDrain"); - var kOnConnect = Symbol("onConnect"); - var kOnDisconnect = Symbol("onDisconnect"); - var kOnConnectionError = Symbol("onConnectionError"); - var kGetDispatcher = Symbol("get dispatcher"); - var kAddClient = Symbol("add client"); - var kRemoveClient = Symbol("remove client"); - var kStats = Symbol("stats"); - var PoolBase = class extends DispatcherBase { - constructor(opts) { - super(opts); - 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]; - } - [kClose]() { - return __async(this, null, function* () { - if (this[kQueue].isEmpty()) { - yield Promise.all(this[kClients].map((c) => c.close())); - } else { - yield new Promise((resolve2) => { - this[kClosedResolve] = resolve2; - }); - } - }); - } - [kDestroy](err) { - return __async(this, null, function* () { - while (true) { - const item = this[kQueue].shift(); - if (!item) { - break; - } - item.handler.onError(err); - } - yield 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]) { - queueMicrotask(() => { - 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 - }; - } - }); - - // - var require_pool = __commonJS({ - ""(exports, module) { - "use strict"; - var { - PoolBase, - kClients, - kNeedDrain, - kAddClient, - kGetDispatcher - } = require_pool_base(); - var Client = require_client(); - var { - InvalidArgumentError - } = require_errors(); - var util = require_util(); - var { kUrl, kInterceptors } = require_symbols(); - var buildConnector = require_connect(); - var kOptions = Symbol("options"); - var kConnections = Symbol("connections"); - var kFactory = Symbol("factory"); - function defaultFactory(origin, opts) { - return new Client(origin, opts); - } - var Pool = class extends PoolBase { - constructor(origin, _a = {}) { - var _b = _a, { - connections, - factory = defaultFactory, - connect, - connectTimeout, - tls, - maxCachedSessions, - socketPath, - autoSelectFamily, - autoSelectFamilyAttemptTimeout, - allowH2 - } = _b, options = __objRest(_b, [ - "connections", - "factory", - "connect", - "connectTimeout", - "tls", - "maxCachedSessions", - "socketPath", - "autoSelectFamily", - "autoSelectFamilyAttemptTimeout", - "allowH2" - ]); - var _a2; - 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(__spreadValues(__spreadValues(__spreadProps(__spreadValues({}, tls), { - maxCachedSessions, - allowH2, - socketPath, - timeout: connectTimeout - }), autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0), connect)); - } - super(options); - this[kInterceptors] = ((_a2 = options.interceptors) == null ? void 0 : _a2.Pool) && Array.isArray(options.interceptors.Pool) ? options.interceptors.Pool : []; - this[kConnections] = connections || null; - this[kUrl] = util.parseOrigin(origin); - this[kOptions] = __spreadProps(__spreadValues({}, util.deepClone(options)), { connect, allowH2 }); - this[kOptions].interceptors = options.interceptors ? __spreadValues({}, options.interceptors) : void 0; - this[kFactory] = factory; - this.on("connectionError", (origin2, targets, error) => { - for (const target of targets) { - const idx = this[kClients].indexOf(target); - if (idx !== -1) { - this[kClients].splice(idx, 1); - } - } - }); - } - [kGetDispatcher]() { - for (const client of this[kClients]) { - if (!client[kNeedDrain]) { - return client; - } - } - if (!this[kConnections] || this[kClients].length < this[kConnections]) { - const dispatcher = this[kFactory](this[kUrl], this[kOptions]); - this[kAddClient](dispatcher); - return dispatcher; - } - } - }; - module.exports = Pool; - } - }); - - // - var require_balanced_pool = __commonJS({ - ""(exports, module) { - "use strict"; - var { - BalancedPoolMissingUpstreamError, - InvalidArgumentError - } = require_errors(); - var { - PoolBase, - kClients, - kNeedDrain, - kAddClient, - kRemoveClient, - kGetDispatcher - } = require_pool_base(); - var Pool = require_pool(); - var { kUrl, kInterceptors } = require_symbols(); - var { parseOrigin } = require_util(); - var kFactory = Symbol("factory"); - var kOptions = Symbol("options"); - var kGreatestCommonDivisor = Symbol("kGreatestCommonDivisor"); - var kCurrentWeight = Symbol("kCurrentWeight"); - var kIndex = Symbol("kIndex"); - var kWeight = Symbol("kWeight"); - var kMaxWeightPerServer = Symbol("kMaxWeightPerServer"); - var kErrorPenalty = Symbol("kErrorPenalty"); - function getGreatestCommonDivisor(a, b) { - if (a === 0) - return b; - while (b !== 0) { - const t = b; - b = a % b; - a = t; - } - return a; - } - function defaultFactory(origin, opts) { - return new Pool(origin, opts); - } - var BalancedPool = class extends PoolBase { - constructor(upstreams = [], _a = {}) { - var _b = _a, { factory = defaultFactory } = _b, opts = __objRest(_b, ["factory"]); - var _a2; - 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] = ((_a2 = opts.interceptors) == null ? void 0 : _a2.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((pool2) => pool2[kUrl].origin === upstreamOrigin && pool2.closed !== true && pool2.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") { - 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() { - let result = 0; - for (let i = 0; i < this[kClients].length; i++) { - result = getGreatestCommonDivisor(this[kClients][i][kWeight], result); - } - this[kGreatestCommonDivisor] = result; - } - removeUpstream(upstream) { - const upstreamOrigin = parseOrigin(upstream).origin; - const pool = this[kClients].find((pool2) => pool2[kUrl].origin === upstreamOrigin && pool2.closed !== true && pool2.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]() { - if (this[kClients].length === 0) { - throw new BalancedPoolMissingUpstreamError(); - } - const dispatcher = this[kClients].find((dispatcher2) => !dispatcher2[kNeedDrain] && dispatcher2.closed !== true && dispatcher2.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]]; - if (pool[kWeight] > this[kClients][maxWeightIndex][kWeight] && !pool[kNeedDrain]) { - maxWeightIndex = this[kIndex]; - } - if (this[kIndex] === 0) { - 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; - } - }); - - // - var require_agent = __commonJS({ - ""(exports, module) { - "use strict"; - var { InvalidArgumentError } = require_errors(); - var { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols(); - var DispatcherBase = require_dispatcher_base(); - var Pool = require_pool(); - var Client = require_client(); - var util = require_util(); - var createRedirectInterceptor = require_redirect_interceptor(); - var kOnConnect = Symbol("onConnect"); - var kOnDisconnect = Symbol("onDisconnect"); - var kOnConnectionError = Symbol("onConnectionError"); - var kMaxRedirections = Symbol("maxRedirections"); - var kOnDrain = Symbol("onDrain"); - var kFactory = Symbol("factory"); - var kOptions = Symbol("options"); - function defaultFactory(origin, opts) { - return opts && opts.connections === 1 ? new Client(origin, opts) : new Pool(origin, opts); - } - var Agent = class extends DispatcherBase { - constructor(_a = {}) { - var _b = _a, { factory = defaultFactory, maxRedirections = 0, connect } = _b, options = __objRest(_b, ["factory", "maxRedirections", "connect"]); - var _a2; - 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"); - } - super(options); - if (connect && typeof connect !== "function") { - connect = __spreadValues({}, connect); - } - this[kInterceptors] = ((_a2 = options.interceptors) == null ? void 0 : _a2.Agent) && Array.isArray(options.interceptors.Agent) ? options.interceptors.Agent : [createRedirectInterceptor({ maxRedirections })]; - this[kOptions] = __spreadProps(__spreadValues({}, util.deepClone(options)), { connect }); - this[kOptions].interceptors = options.interceptors ? __spreadValues({}, options.interceptors) : void 0; - this[kMaxRedirections] = maxRedirections; - this[kFactory] = factory; - this[kClients] = /* @__PURE__ */ new Map(); - this[kOnDrain] = (origin, targets) => { - this.emit("drain", origin, [this, ...targets]); - }; - this[kOnConnect] = (origin, targets) => { - this.emit("connect", origin, [this, ...targets]); - }; - this[kOnDisconnect] = (origin, targets, err) => { - this.emit("disconnect", origin, [this, ...targets], err); - }; - this[kOnConnectionError] = (origin, targets, err) => { - this.emit("connectionError", origin, [this, ...targets], err); - }; - } - get [kRunning]() { - let ret = 0; - for (const client of this[kClients].values()) { - 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."); - } - let dispatcher = this[kClients].get(key); - 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, dispatcher); - } - return dispatcher.dispatch(opts, handler); - } - [kClose]() { - return __async(this, null, function* () { - const closePromises = []; - for (const client of this[kClients].values()) { - closePromises.push(client.close()); - } - this[kClients].clear(); - yield Promise.all(closePromises); - }); - } - [kDestroy](err) { - return __async(this, null, function* () { - const destroyPromises = []; - for (const client of this[kClients].values()) { - destroyPromises.push(client.destroy(err)); - } - this[kClients].clear(); - yield Promise.all(destroyPromises); - }); - } - }; - module.exports = Agent; - } - }); - - // - var require_proxy_agent = __commonJS({ - ""(exports, module) { - "use strict"; - var { kProxy, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols(); - var { URL: URL2 } = __require("url"); - var Agent = require_agent(); - var Pool = require_pool(); - var DispatcherBase = require_dispatcher_base(); - var { InvalidArgumentError, RequestAbortedError, SecureProxyConnectionError } = require_errors(); - var buildConnector = require_connect(); - var Client = require_client(); - var kAgent = Symbol("proxy agent"); - var kClient = Symbol("proxy client"); - var kProxyHeaders = Symbol("proxy headers"); - var kRequestTls = Symbol("request tls settings"); - var kProxyTls = Symbol("proxy tls settings"); - var kConnectEndpoint = Symbol("connect endpoint function"); - var kTunnelProxy = Symbol("tunnel proxy"); - function defaultProtocolPort(protocol) { - return protocol === "https:" ? 443 : 80; - } - function defaultFactory(origin, opts) { - return new Pool(origin, opts); - } - var noop = () => { - }; - function defaultAgentFactory(origin, opts) { - if (opts.connections === 1) { - return new Client(origin, opts); - } - return new Pool(origin, opts); - } - var _client; - var Http1ProxyWrapper = class extends DispatcherBase { - constructor(proxyUrl, { headers = {}, connect, factory }) { - super(); - __privateAdd(this, _client, void 0); - if (!proxyUrl) { - throw new InvalidArgumentError("Proxy URL is mandatory"); - } - this[kProxyHeaders] = headers; - if (factory) { - __privateSet(this, _client, factory(proxyUrl, { connect })); - } else { - __privateSet(this, _client, new Client(proxyUrl, { connect })); - } - } - [kDispatch](opts, handler) { - const onHeaders = handler.onHeaders; - handler.onHeaders = function(statusCode, data, resume) { - if (statusCode === 407) { - if (typeof handler.onError === "function") { - handler.onError(new InvalidArgumentError("Proxy Authentication Required (407)")); - } - return; - } - if (onHeaders) - onHeaders.call(this, statusCode, data, resume); - }; - const { - origin, - path: path4 = "/", - headers = {} - } = opts; - opts.path = origin + path4; - if (!("host" in headers) && !("Host" in headers)) { - const { host } = new URL2(origin); - headers.host = host; - } - opts.headers = __spreadValues(__spreadValues({}, this[kProxyHeaders]), headers); - return __privateGet(this, _client)[kDispatch](opts, handler); - } - [kClose]() { - return __async(this, null, function* () { - return __privateGet(this, _client).close(); - }); - } - [kDestroy](err) { - return __async(this, null, function* () { - return __privateGet(this, _client).destroy(err); - }); - } - }; - _client = new WeakMap(); - var _getUrl, getUrl_fn; - var ProxyAgent2 = class extends DispatcherBase { - constructor(opts) { - var _a; - super(); - /** - * @param {import('../types/proxy-agent').ProxyAgent.Options | string | URL} opts - * @returns {URL} - */ - __privateAdd(this, _getUrl); - if (!opts || typeof opts === "object" && !(opts instanceof URL2) && !opts.uri) { - throw new InvalidArgumentError("Proxy uri is mandatory"); - } - const { clientFactory = defaultFactory } = opts; - if (typeof clientFactory !== "function") { - throw new InvalidArgumentError("Proxy opts.clientFactory must be a function."); - } - const { proxyTunnel = true } = opts; - const url = __privateMethod(this, _getUrl, getUrl_fn).call(this, opts); - const { href, origin, port, protocol, username, password, hostname: proxyHostname } = url; - this[kProxy] = { uri: href, protocol }; - this[kInterceptors] = ((_a = opts.interceptors) == null ? void 0 : _a.ProxyAgent) && Array.isArray(opts.interceptors.ProxyAgent) ? opts.interceptors.ProxyAgent : []; - this[kRequestTls] = opts.requestTls; - this[kProxyTls] = opts.proxyTls; - this[kProxyHeaders] = opts.headers || {}; - this[kTunnelProxy] = proxyTunnel; - if (opts.auth && opts.token) { - throw new InvalidArgumentError("opts.auth cannot be used in combination with opts.token"); - } else if (opts.auth) { - 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(__spreadValues({}, opts.proxyTls)); - this[kConnectEndpoint] = buildConnector(__spreadValues({}, opts.requestTls)); - const agentFactory = opts.factory || defaultAgentFactory; - const factory = (origin2, options) => { - const { protocol: protocol2 } = new URL2(origin2); - if (!this[kTunnelProxy] && protocol2 === "http:" && this[kProxy].protocol === "http:") { - return new Http1ProxyWrapper(this[kProxy].uri, { - headers: this[kProxyHeaders], - connect, - factory: agentFactory - }); - } - return agentFactory(origin2, options); - }; - this[kClient] = clientFactory(url, { connect }); - this[kAgent] = new Agent(__spreadProps(__spreadValues({}, opts), { - factory, - connect: (opts2, callback) => __async(this, null, function* () { - var _a2; - let requestedPath = opts2.host; - if (!opts2.port) { - requestedPath += `:${defaultProtocolPort(opts2.protocol)}`; - } - try { - const { socket, statusCode } = yield this[kClient].connect({ - origin, - port, - path: requestedPath, - signal: opts2.signal, - headers: __spreadProps(__spreadValues({}, this[kProxyHeaders]), { - host: opts2.host - }), - servername: ((_a2 = this[kProxyTls]) == null ? void 0 : _a2.servername) || proxyHostname - }); - if (statusCode !== 200) { - socket.on("error", noop).destroy(); - callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`)); - } - if (opts2.protocol !== "https:") { - callback(null, socket); - return; - } - let servername; - if (this[kRequestTls]) { - servername = this[kRequestTls].servername; - } else { - servername = opts2.servername; - } - this[kConnectEndpoint](__spreadProps(__spreadValues({}, opts2), { servername, httpSocket: socket }), callback); - } catch (err) { - if (err.code === "ERR_TLS_CERT_ALTNAME_INVALID") { - callback(new SecureProxyConnectionError(err)); - } else { - callback(err); - } - } - }) - })); - } - dispatch(opts, handler) { - const headers = buildHeaders(opts.headers); - throwIfProxyAuthIsSent(headers); - if (headers && !("host" in headers) && !("Host" in headers)) { - const { host } = new URL2(opts.origin); - headers.host = host; - } - return this[kAgent].dispatch( - __spreadProps(__spreadValues({}, opts), { - headers - }), - handler - ); - } - [kClose]() { - return __async(this, null, function* () { - yield this[kAgent].close(); - yield this[kClient].close(); - }); - } - [kDestroy]() { - return __async(this, null, function* () { - yield this[kAgent].destroy(); - yield this[kClient].destroy(); - }); - } - }; - _getUrl = new WeakSet(); - getUrl_fn = function(opts) { - if (typeof opts === "string") { - return new URL2(opts); - } else if (opts instanceof URL2) { - return opts; - } else { - return new URL2(opts.uri); - } - }; - function buildHeaders(headers) { - if (Array.isArray(headers)) { - const headersPair = {}; - for (let i = 0; i < headers.length; i += 2) { - headersPair[headers[i]] = headers[i + 1]; - } - return headersPair; - } - return headers; - } - 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 = ProxyAgent2; - } - }); - - // - var require_env_http_proxy_agent = __commonJS({ - ""(exports, module) { - "use strict"; - var DispatcherBase = require_dispatcher_base(); - var { kClose, kDestroy, kClosed, kDestroyed, kDispatch, kNoProxyAgent, kHttpProxyAgent, kHttpsProxyAgent } = require_symbols(); - var ProxyAgent2 = require_proxy_agent(); - var Agent = require_agent(); - var DEFAULT_PORTS = { - "http:": 80, - "https:": 443 - }; - var experimentalWarned = false; - var _noProxyValue, _noProxyEntries, _opts, _getProxyAgentForUrl, getProxyAgentForUrl_fn, _shouldProxy, shouldProxy_fn, _parseNoProxy, parseNoProxy_fn, _noProxyChanged, noProxyChanged_get, _noProxyEnv, noProxyEnv_get; - var EnvHttpProxyAgent = class extends DispatcherBase { - constructor(opts = {}) { - var _b, _c; - super(); - __privateAdd(this, _getProxyAgentForUrl); - __privateAdd(this, _shouldProxy); - __privateAdd(this, _parseNoProxy); - __privateAdd(this, _noProxyChanged); - __privateAdd(this, _noProxyEnv); - __privateAdd(this, _noProxyValue, null); - __privateAdd(this, _noProxyEntries, null); - __privateAdd(this, _opts, null); - __privateSet(this, _opts, opts); - if (!experimentalWarned) { - experimentalWarned = true; - process.emitWarning("EnvHttpProxyAgent is experimental, expect them to change at any time.", { - code: "UNDICI-EHPA" - }); - } - const _a = opts, { httpProxy, httpsProxy, noProxy } = _a, agentOpts = __objRest(_a, ["httpProxy", "httpsProxy", "noProxy"]); - this[kNoProxyAgent] = new Agent(agentOpts); - const HTTP_PROXY = (_b = httpProxy != null ? httpProxy : process.env.http_proxy) != null ? _b : process.env.HTTP_PROXY; - if (HTTP_PROXY) { - this[kHttpProxyAgent] = new ProxyAgent2(__spreadProps(__spreadValues({}, agentOpts), { uri: HTTP_PROXY })); - } else { - this[kHttpProxyAgent] = this[kNoProxyAgent]; - } - const HTTPS_PROXY = (_c = httpsProxy != null ? httpsProxy : process.env.https_proxy) != null ? _c : process.env.HTTPS_PROXY; - if (HTTPS_PROXY) { - this[kHttpsProxyAgent] = new ProxyAgent2(__spreadProps(__spreadValues({}, agentOpts), { uri: HTTPS_PROXY })); - } else { - this[kHttpsProxyAgent] = this[kHttpProxyAgent]; - } - __privateMethod(this, _parseNoProxy, parseNoProxy_fn).call(this); - } - [kDispatch](opts, handler) { - const url = new URL(opts.origin); - const agent = __privateMethod(this, _getProxyAgentForUrl, getProxyAgentForUrl_fn).call(this, url); - return agent.dispatch(opts, handler); - } - [kClose]() { - return __async(this, null, function* () { - yield this[kNoProxyAgent].close(); - if (!this[kHttpProxyAgent][kClosed]) { - yield this[kHttpProxyAgent].close(); - } - if (!this[kHttpsProxyAgent][kClosed]) { - yield this[kHttpsProxyAgent].close(); - } - }); - } - [kDestroy](err) { - return __async(this, null, function* () { - yield this[kNoProxyAgent].destroy(err); - if (!this[kHttpProxyAgent][kDestroyed]) { - yield this[kHttpProxyAgent].destroy(err); - } - if (!this[kHttpsProxyAgent][kDestroyed]) { - yield this[kHttpsProxyAgent].destroy(err); - } - }); - } - }; - _noProxyValue = new WeakMap(); - _noProxyEntries = new WeakMap(); - _opts = new WeakMap(); - _getProxyAgentForUrl = new WeakSet(); - getProxyAgentForUrl_fn = function(url) { - let { protocol, host: hostname, port } = url; - hostname = hostname.replace(/:\d*$/, "").toLowerCase(); - port = Number.parseInt(port, 10) || DEFAULT_PORTS[protocol] || 0; - if (!__privateMethod(this, _shouldProxy, shouldProxy_fn).call(this, hostname, port)) { - return this[kNoProxyAgent]; - } - if (protocol === "https:") { - return this[kHttpsProxyAgent]; - } - return this[kHttpProxyAgent]; - }; - _shouldProxy = new WeakSet(); - shouldProxy_fn = function(hostname, port) { - if (__privateGet(this, _noProxyChanged, noProxyChanged_get)) { - __privateMethod(this, _parseNoProxy, parseNoProxy_fn).call(this); - } - if (__privateGet(this, _noProxyEntries).length === 0) { - return true; - } - if (__privateGet(this, _noProxyValue) === "*") { - return false; - } - for (let i = 0; i < __privateGet(this, _noProxyEntries).length; i++) { - const entry = __privateGet(this, _noProxyEntries)[i]; - if (entry.port && entry.port !== port) { - continue; - } - if (!/^[.*]/.test(entry.hostname)) { - if (hostname === entry.hostname) { - return false; - } - } else { - if (hostname.endsWith(entry.hostname.replace(/^\*/, ""))) { - return false; - } - } - } - return true; - }; - _parseNoProxy = new WeakSet(); - parseNoProxy_fn = function() { - var _a; - const noProxyValue = (_a = __privateGet(this, _opts).noProxy) != null ? _a : __privateGet(this, _noProxyEnv, noProxyEnv_get); - const noProxySplit = noProxyValue.split(/[,\s]/); - const noProxyEntries = []; - for (let i = 0; i < noProxySplit.length; i++) { - const entry = noProxySplit[i]; - if (!entry) { - continue; - } - const parsed = entry.match(/^(.+):(\d+)$/); - noProxyEntries.push({ - hostname: (parsed ? parsed[1] : entry).toLowerCase(), - port: parsed ? Number.parseInt(parsed[2], 10) : 0 - }); - } - __privateSet(this, _noProxyValue, noProxyValue); - __privateSet(this, _noProxyEntries, noProxyEntries); - }; - _noProxyChanged = new WeakSet(); - noProxyChanged_get = function() { - if (__privateGet(this, _opts).noProxy !== void 0) { - return false; - } - return __privateGet(this, _noProxyValue) !== __privateGet(this, _noProxyEnv, noProxyEnv_get); - }; - _noProxyEnv = new WeakSet(); - noProxyEnv_get = function() { - var _a, _b; - return (_b = (_a = process.env.no_proxy) != null ? _a : process.env.NO_PROXY) != null ? _b : ""; - }; - module.exports = EnvHttpProxyAgent; - } - }); - - // - var require_retry_handler = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { kRetryHandlerDefaultRetry } = require_symbols(); - var { RequestRetryError } = require_errors(); - var { - isDisturbed, - parseHeaders, - parseRangeHeader, - wrapRequestBody - } = require_util(); - function calculateRetryAfterHeader(retryAfter) { - const current = Date.now(); - return new Date(retryAfter).getTime() - current; - } - function validatePartialResponseContentLength(headers, range, statusCode, retryCount) { - const contentLength = headers["content-length"]; - if (contentLength == null) { - return null; - } - if (!Number.isFinite(range.start) || !Number.isFinite(range.end)) { - return null; - } - const length = Number(contentLength); - const expectedLength = range.end - range.start + 1; - if (!Number.isFinite(length) || length !== expectedLength) { - return new RequestRetryError("Content-Length mismatch", statusCode, { - headers, - data: { count: retryCount } - }); - } - return null; - } - var RetryHandler = class _RetryHandler { - constructor(opts, handlers) { - const _a = opts, { retryOptions } = _a, dispatchOpts = __objRest(_a, ["retryOptions"]); - const { - // Retry scoped - retry: retryFn, - maxRetries, - maxTimeout, - minTimeout, - timeoutFactor, - // Response scoped - methods, - errorCodes, - retryAfter, - statusCodes - } = retryOptions != null ? retryOptions : {}; - this.dispatch = handlers.dispatch; - this.handler = handlers.handler; - this.opts = __spreadProps(__spreadValues({}, dispatchOpts), { body: wrapRequestBody(opts.body) }); - this.abort = null; - this.aborted = false; - this.retryOpts = { - retry: retryFn != null ? retryFn : _RetryHandler[kRetryHandlerDefaultRetry], - retryAfter: retryAfter != null ? retryAfter : true, - maxTimeout: maxTimeout != null ? maxTimeout : 30 * 1e3, - // 30s, - minTimeout: minTimeout != null ? minTimeout : 500, - // .5s - timeoutFactor: timeoutFactor != null ? timeoutFactor : 2, - maxRetries: maxRetries != null ? maxRetries : 5, - // What errors we should retry - methods: methods != null ? methods : ["GET", "HEAD", "OPTIONS", "PUT", "DELETE", "TRACE"], - // Indicates which errors to retry - statusCodes: statusCodes != null ? statusCodes : [500, 502, 503, 504, 429], - // List of errors to retry - errorCodes: errorCodes != null ? errorCodes : [ - "ECONNRESET", - "ECONNREFUSED", - "ENOTFOUND", - "ENETDOWN", - "ENETUNREACH", - "EHOSTDOWN", - "EHOSTUNREACH", - "EPIPE", - "UND_ERR_SOCKET" - ] - }; - this.retryCount = 0; - this.retryCountCheckpoint = 0; - this.start = 0; - this.end = null; - this.etag = null; - this.resume = null; - 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, - minTimeout, - maxTimeout, - timeoutFactor, - statusCodes, - errorCodes, - methods - } = retryOptions; - const { counter } = state; - if (code && code !== "UND_ERR_REQ_RETRY" && !errorCodes.includes(code)) { - cb(err); - return; - } - if (Array.isArray(methods) && !methods.includes(method)) { - cb(err); - return; - } - if (statusCode != null && Array.isArray(statusCodes) && !statusCodes.includes(statusCode)) { - cb(err); - return; - } - if (counter > maxRetries) { - cb(err); - return; - } - let retryAfterHeader = headers == null ? void 0 : headers["retry-after"]; - if (retryAfterHeader) { - retryAfterHeader = Number(retryAfterHeader); - retryAfterHeader = Number.isNaN(retryAfterHeader) ? calculateRetryAfterHeader(retryAfterHeader) : retryAfterHeader * 1e3; - } - const retryTimeout = retryAfterHeader > 0 ? Math.min(retryAfterHeader, maxTimeout) : Math.min(minTimeout * __pow(timeoutFactor, counter - 1), maxTimeout); - setTimeout(() => cb(null), retryTimeout); - } - onHeaders(statusCode, rawHeaders, resume, statusMessage) { - const headers = parseHeaders(rawHeaders); - this.retryCount += 1; - if (statusCode >= 300) { - if (this.retryOpts.statusCodes.includes(statusCode) === false) { - return this.handler.onHeaders( - statusCode, - rawHeaders, - resume, - statusMessage - ); - } else { - this.abort( - new RequestRetryError("Request failed", statusCode, { - headers, - data: { - count: this.retryCount - } - }) - ); - return false; - } - } - if (this.resume != null) { - this.resume = null; - if (statusCode !== 206 && (this.start > 0 || statusCode !== 200)) { - this.abort( - new RequestRetryError("server does not support the range header and the payload was partially consumed", statusCode, { - headers, - data: { count: this.retryCount } - }) - ); - return false; - } - const contentRange = parseRangeHeader(headers["content-range"]); - if (!contentRange) { - this.abort( - new RequestRetryError("Content-Range mismatch", statusCode, { - headers, - data: { count: this.retryCount } - }) - ); - return false; - } - if (this.etag != null && this.etag !== headers.etag) { - this.abort( - new RequestRetryError("ETag mismatch", statusCode, { - headers, - data: { count: this.retryCount } - }) - ); - return false; - } - const contentLengthError = validatePartialResponseContentLength(headers, contentRange, statusCode, this.retryCount); - if (contentLengthError != null) { - this.abort(contentLengthError); - return false; - } - const { start, size, end = size - 1 } = 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) { - const range = parseRangeHeader(headers["content-range"]); - if (range == null) { - return this.handler.onHeaders( - statusCode, - rawHeaders, - resume, - statusMessage - ); - } - const contentLengthError = validatePartialResponseContentLength(headers, range, statusCode, this.retryCount); - if (contentLengthError != null) { - this.abort(contentLengthError); - return false; - } - const { start, size, end = size - 1 } = range; - assert( - start != null && Number.isFinite(start), - "content-range mismatch" - ); - assert(end != null && Number.isFinite(end), "invalid content-length"); - this.start = start; - this.end = end; - } - if (this.end == null) { - const contentLength = headers["content-length"]; - this.end = contentLength != null ? Number(contentLength) - 1 : 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; - if (this.etag != null && this.etag.startsWith("W/")) { - this.etag = null; - } - return this.handler.onHeaders( - statusCode, - rawHeaders, - resume, - statusMessage - ); - } - const err = new RequestRetryError("Request failed", statusCode, { - headers, - data: { 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); - } - if (this.retryCount - this.retryCountCheckpoint > 0) { - this.retryCount = this.retryCountCheckpoint + (this.retryCount - this.retryCountCheckpoint); - } else { - this.retryCount += 1; - } - this.retryOpts.retry( - err, - { - state: { counter: this.retryCount }, - opts: __spreadValues({ retryOptions: this.retryOpts }, this.opts) - }, - onRetry.bind(this) - ); - function onRetry(err2) { - var _a; - if (err2 != null || this.aborted || isDisturbed(this.opts.body)) { - return this.handler.onError(err2); - } - if (this.start !== 0) { - const headers = { range: `bytes=${this.start}-${(_a = this.end) != null ? _a : ""}` }; - if (this.etag != null) { - headers["if-match"] = this.etag; - } - this.opts = __spreadProps(__spreadValues({}, this.opts), { - headers: __spreadValues(__spreadValues({}, this.opts.headers), headers) - }); - } - try { - this.retryCountCheckpoint = this.retryCount; - this.dispatch(this.opts, this); - } catch (err3) { - this.handler.onError(err3); - } - } - } - }; - module.exports = RetryHandler; - } - }); - - // - var require_retry_agent = __commonJS({ - ""(exports, module) { - "use strict"; - var Dispatcher = require_dispatcher(); - var RetryHandler = require_retry_handler(); - var _agent, _options; - var RetryAgent = class extends Dispatcher { - constructor(agent, options = {}) { - super(options); - __privateAdd(this, _agent, null); - __privateAdd(this, _options, null); - __privateSet(this, _agent, agent); - __privateSet(this, _options, options); - } - dispatch(opts, handler) { - const retry = new RetryHandler(__spreadProps(__spreadValues({}, opts), { - retryOptions: __privateGet(this, _options) - }), { - dispatch: __privateGet(this, _agent).dispatch.bind(__privateGet(this, _agent)), - handler - }); - return __privateGet(this, _agent).dispatch(opts, retry); - } - close() { - return __privateGet(this, _agent).close(); - } - destroy() { - return __privateGet(this, _agent).destroy(); - } - }; - _agent = new WeakMap(); - _options = new WeakMap(); - module.exports = RetryAgent; - } - }); - - // - var require_readable = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { Readable } = __require("stream"); - var { RequestAbortedError, NotSupportedError, InvalidArgumentError, AbortError } = require_errors(); - var util = require_util(); - var { ReadableStreamFrom } = require_util(); - var kConsume = Symbol("kConsume"); - var kReading = Symbol("kReading"); - var kBody = Symbol("kBody"); - var kAbort = Symbol("kAbort"); - var kContentType = Symbol("kContentType"); - var kContentLength = Symbol("kContentLength"); - var noop = () => { - }; - var BodyReadable = class extends Readable { - constructor({ - resume, - abort, - contentType = "", - contentLength, - 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; - this[kContentLength] = contentLength; - this[kReading] = false; - } - destroy(err) { - if (!err && !this._readableState.endEmitted) { - err = new RequestAbortedError(); - } - if (err) { - this[kAbort](); - } - return super.destroy(err); - } - _destroy(err, callback) { - if (!this[kReading]) { - setImmediate(() => { - callback(err); - }); - } else { - callback(err); - } - } - 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) { - consumePush(this[kConsume], chunk); - return this[kReading] ? super.push(chunk) : true; - } - return super.push(chunk); - } - // https://fetch.spec.whatwg.org/#dom-body-text - text() { - return __async(this, null, function* () { - return consume(this, "text"); - }); - } - // https://fetch.spec.whatwg.org/#dom-body-json - json() { - return __async(this, null, function* () { - return consume(this, "json"); - }); - } - // https://fetch.spec.whatwg.org/#dom-body-blob - blob() { - return __async(this, null, function* () { - return consume(this, "blob"); - }); - } - // https://fetch.spec.whatwg.org/#dom-body-bytes - bytes() { - return __async(this, null, function* () { - return consume(this, "bytes"); - }); - } - // https://fetch.spec.whatwg.org/#dom-body-arraybuffer - arrayBuffer() { - return __async(this, null, function* () { - return consume(this, "arrayBuffer"); - }); - } - // https://fetch.spec.whatwg.org/#dom-body-formdata - formData() { - return __async(this, null, function* () { - 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]) { - this[kBody].getReader(); - assert(this[kBody].locked); - } - } - return this[kBody]; - } - dump(opts) { - return __async(this, null, function* () { - let limit = Number.isFinite(opts == null ? void 0 : opts.limit) ? opts.limit : 128 * 1024; - const signal = opts == null ? void 0 : opts.signal; - if (signal != null && (typeof signal !== "object" || !("aborted" in signal))) { - throw new InvalidArgumentError("signal must be an AbortSignal"); - } - signal == null ? void 0 : signal.throwIfAborted(); - if (this._readableState.closeEmitted) { - return null; - } - return yield new Promise((resolve2, reject) => { - if (this[kContentLength] > limit) { - this.destroy(new AbortError()); - } - const onAbort = () => { - var _a; - this.destroy((_a = signal.reason) != null ? _a : new AbortError()); - }; - signal == null ? void 0 : signal.addEventListener("abort", onAbort); - this.on("close", function() { - var _a; - signal == null ? void 0 : signal.removeEventListener("abort", onAbort); - if (signal == null ? void 0 : signal.aborted) { - reject((_a = signal.reason) != null ? _a : new AbortError()); - } else { - resolve2(null); - } - }).on("error", noop).on("data", function(chunk) { - limit -= chunk.length; - if (limit <= 0) { - this.destroy(); - } - }).resume(); - }); - }); - } - }; - function isLocked(self) { - return self[kBody] && self[kBody].locked === true || self[kConsume]; - } - function isUnusable(self) { - return util.isDisturbed(self) || isLocked(self); - } - function consume(stream, type) { - return __async(this, null, function* () { - assert(!stream[kConsume]); - return new Promise((resolve2, reject) => { - var _a; - if (isUnusable(stream)) { - const rState = stream._readableState; - if (rState.destroyed && rState.closeEmitted === false) { - stream.on("error", (err) => { - reject(err); - }).on("close", () => { - reject(new TypeError("unusable")); - }); - } else { - reject((_a = rState.errored) != null ? _a : new TypeError("unusable")); - } - } else { - queueMicrotask(() => { - stream[kConsume] = { - type, - stream, - resolve: resolve2, - 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()); - } - }); - consumeStart(stream[kConsume]); - }); - } - }); - }); - } - function consumeStart(consume2) { - if (consume2.body === null) { - return; - } - const { _readableState: state } = consume2.stream; - if (state.bufferIndex) { - const start = state.bufferIndex; - const end = state.buffer.length; - for (let n = start; n < end; n++) { - consumePush(consume2, state.buffer[n]); - } - } else { - for (const chunk of state.buffer) { - consumePush(consume2, chunk); - } - } - if (state.endEmitted) { - consumeEnd(this[kConsume]); - } else { - consume2.stream.on("end", function() { - consumeEnd(this[kConsume]); - }); - } - consume2.stream.resume(); - while (consume2.stream.read() != null) { - } - } - function chunksDecode(chunks, length) { - if (chunks.length === 0 || length === 0) { - return ""; - } - const buffer = chunks.length === 1 ? chunks[0] : Buffer.concat(chunks, length); - const bufferLength = buffer.length; - const start = bufferLength > 2 && buffer[0] === 239 && buffer[1] === 187 && buffer[2] === 191 ? 3 : 0; - return buffer.utf8Slice(start, bufferLength); - } - function chunksConcat(chunks, length) { - if (chunks.length === 0 || length === 0) { - return new Uint8Array(0); - } - if (chunks.length === 1) { - return new Uint8Array(chunks[0]); - } - const buffer = new Uint8Array(Buffer.allocUnsafeSlow(length).buffer); - let offset = 0; - for (let i = 0; i < chunks.length; ++i) { - const chunk = chunks[i]; - buffer.set(chunk, offset); - offset += chunk.length; - } - return buffer; - } - function consumeEnd(consume2) { - const { type, body, resolve: resolve2, stream, length } = consume2; - try { - if (type === "text") { - resolve2(chunksDecode(body, length)); - } else if (type === "json") { - resolve2(JSON.parse(chunksDecode(body, length))); - } else if (type === "arrayBuffer") { - resolve2(chunksConcat(body, length).buffer); - } else if (type === "blob") { - resolve2(new Blob(body, { type: stream[kContentType] })); - } else if (type === "bytes") { - resolve2(chunksConcat(body, length)); - } - consumeFinish(consume2); - } catch (err) { - stream.destroy(err); - } - } - function consumePush(consume2, chunk) { - consume2.length += chunk.length; - consume2.body.push(chunk); - } - function consumeFinish(consume2, err) { - if (consume2.body === null) { - return; - } - if (err) { - consume2.reject(err); - } else { - consume2.resolve(); - } - consume2.type = null; - consume2.stream = null; - consume2.resolve = null; - consume2.reject = null; - consume2.length = 0; - consume2.body = null; - } - module.exports = { Readable: BodyReadable, chunksDecode }; - } - }); - - // - var require_util3 = __commonJS({ - ""(exports, module) { - var assert = __require("assert"); - var { - ResponseStatusCodeError - } = require_errors(); - var { chunksDecode } = require_readable(); - var CHUNK_LIMIT = 128 * 1024; - function getResolveErrorBodyCallback(_0) { - return __async(this, arguments, function* ({ callback, body, contentType, statusCode, statusMessage, headers }) { - assert(body); - let chunks = []; - let length = 0; - try { - try { - for (var iter = __forAwait(body), more, temp, error; more = !(temp = yield iter.next()).done; more = false) { - const chunk = temp.value; - chunks.push(chunk); - length += chunk.length; - if (length > CHUNK_LIMIT) { - chunks = []; - length = 0; - break; - } - } - } catch (temp) { - error = [temp]; - } finally { - try { - more && (temp = iter.return) && (yield temp.call(iter)); - } finally { - if (error) - throw error[0]; - } - } - } catch (e) { - chunks = []; - length = 0; - } - const message = `Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ""}`; - if (statusCode === 204 || !contentType || !length) { - queueMicrotask(() => callback(new ResponseStatusCodeError(message, statusCode, headers))); - return; - } - const stackTraceLimit = Error.stackTraceLimit; - Error.stackTraceLimit = 0; - let payload; - try { - if (isContentTypeApplicationJson(contentType)) { - payload = JSON.parse(chunksDecode(chunks, length)); - } else if (isContentTypeText(contentType)) { - payload = chunksDecode(chunks, length); - } - } catch (e) { - } finally { - Error.stackTraceLimit = stackTraceLimit; - } - queueMicrotask(() => callback(new ResponseStatusCodeError(message, statusCode, headers, payload))); - }); - } - var isContentTypeApplicationJson = (contentType) => { - return contentType.length > 15 && contentType[11] === "/" && contentType[0] === "a" && contentType[1] === "p" && contentType[2] === "p" && contentType[3] === "l" && contentType[4] === "i" && contentType[5] === "c" && contentType[6] === "a" && contentType[7] === "t" && contentType[8] === "i" && contentType[9] === "o" && contentType[10] === "n" && contentType[12] === "j" && contentType[13] === "s" && contentType[14] === "o" && contentType[15] === "n"; - }; - var isContentTypeText = (contentType) => { - return contentType.length > 4 && contentType[4] === "/" && contentType[0] === "t" && contentType[1] === "e" && contentType[2] === "x" && contentType[3] === "t"; - }; - module.exports = { - getResolveErrorBodyCallback, - isContentTypeApplicationJson, - isContentTypeText - }; - } - }); - - // - var require_api_request = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { Readable } = require_readable(); - var { InvalidArgumentError, RequestAbortedError } = require_errors(); - var util = require_util(); - var { getResolveErrorBodyCallback } = require_util3(); - var { AsyncResource } = __require("async_hooks"); - var RequestHandler = class extends AsyncResource { - constructor(opts, callback) { - var _a; - 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.method = method; - 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; - this.signal = signal; - this.reason = null; - this.removeAbortListener = null; - if (util.isStream(body)) { - body.on("error", (err) => { - this.onError(err); - }); - } - if (this.signal) { - if (this.signal.aborted) { - this.reason = (_a = this.signal.reason) != null ? _a : new RequestAbortedError(); - } else { - this.removeAbortListener = util.addAbortListener(this.signal, () => { - var _a2, _b; - this.reason = (_a2 = this.signal.reason) != null ? _a2 : new RequestAbortedError(); - if (this.res) { - util.destroy(this.res.on("error", util.nop), this.reason); - } else if (this.abort) { - this.abort(this.reason); - } - if (this.removeAbortListener) { - (_b = this.res) == null ? void 0 : _b.off("close", this.removeAbortListener); - this.removeAbortListener(); - this.removeAbortListener = null; - } - }); - } - } - } - onConnect(abort, context) { - if (this.reason) { - abort(this.reason); - return; - } - assert(this.callback); - 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 contentLength = parsedHeaders["content-length"]; - const res = new Readable({ - resume, - abort, - contentType, - contentLength: this.method !== "HEAD" && contentLength ? Number(contentLength) : null, - highWaterMark - }); - if (this.removeAbortListener) { - res.on("close", this.removeAbortListener); - } - this.callback = null; - this.res = res; - if (callback !== null) { - if (this.throwOnError && statusCode >= 400) { - this.runInAsyncScope( - getResolveErrorBodyCallback, - null, - { callback, body: res, contentType, statusCode, statusMessage, headers } - ); - } else { - this.runInAsyncScope(callback, null, null, { - statusCode, - headers, - trailers: this.trailers, - opaque, - body: res, - context - }); - } - } - } - onData(chunk) { - return this.res.push(chunk); - } - onComplete(trailers) { - util.parseHeaders(trailers, this.trailers); - this.res.push(null); - } - onError(err) { - const { res, callback, body, opaque } = this; - if (callback) { - this.callback = null; - queueMicrotask(() => { - this.runInAsyncScope(callback, null, err, { opaque }); - }); - } - if (res) { - this.res = null; - queueMicrotask(() => { - util.destroy(res, err); - }); - } - if (body) { - this.body = null; - util.destroy(body, err); - } - if (this.removeAbortListener) { - res == null ? void 0 : res.off("close", this.removeAbortListener); - this.removeAbortListener(); - this.removeAbortListener = null; - } - } - }; - function request(opts, callback) { - if (callback === void 0) { - return new Promise((resolve2, reject) => { - request.call(this, opts, (err, data) => { - return err ? reject(err) : resolve2(data); - }); - }); - } - try { - this.dispatch(opts, new RequestHandler(opts, callback)); - } catch (err) { - if (typeof callback !== "function") { - throw err; - } - const opaque = opts == null ? void 0 : opts.opaque; - queueMicrotask(() => callback(err, { opaque })); - } - } - module.exports = request; - module.exports.RequestHandler = RequestHandler; - } - }); - - // - var require_abort_signal = __commonJS({ - ""(exports, module) { - var { addAbortListener } = require_util(); - var { RequestAbortedError } = require_errors(); - var kListener = Symbol("kListener"); - var kSignal = Symbol("kSignal"); - function abort(self) { - var _a, _b, _c; - if (self.abort) { - self.abort((_a = self[kSignal]) == null ? void 0 : _a.reason); - } else { - self.reason = (_c = (_b = self[kSignal]) == null ? void 0 : _b.reason) != null ? _c : new RequestAbortedError(); - } - removeSignal(self); - } - function addSignal(self, signal) { - self.reason = null; - 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 - }; - } - }); - - // - var require_api_stream = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { finished, PassThrough } = __require("stream"); - var { InvalidArgumentError, InvalidReturnValueError } = require_errors(); - var util = require_util(); - var { getResolveErrorBodyCallback } = require_util3(); - var { AsyncResource } = __require("async_hooks"); - var { addSignal, removeSignal } = require_abort_signal(); - var StreamHandler = class 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.reason) { - abort(this.reason); - return; - } - assert(this.callback); - this.abort = abort; - this.context = context; - } - onHeaders(statusCode, rawHeaders, resume, statusMessage) { - var _a; - 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"); - } - finished(res, { readable: false }, (err) => { - const { callback: callback2, res: res2, opaque: opaque2, trailers, abort } = this; - this.res = null; - if (err || !res2.readable) { - util.destroy(res2, err); - } - this.callback = null; - this.runInAsyncScope(callback2, null, err || null, { opaque: opaque2, trailers }); - if (err) { - abort(); - } - }); - } - res.on("drain", resume); - this.res = res; - const needDrain = res.writableNeedDrain !== void 0 ? res.writableNeedDrain : (_a = res._writableState) == null ? void 0 : _a.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 === void 0) { - return new Promise((resolve2, reject) => { - stream.call(this, opts, factory, (err, data) => { - return err ? reject(err) : resolve2(data); - }); - }); - } - try { - this.dispatch(opts, new StreamHandler(opts, factory, callback)); - } catch (err) { - if (typeof callback !== "function") { - throw err; - } - const opaque = opts == null ? void 0 : opts.opaque; - queueMicrotask(() => callback(err, { opaque })); - } - } - module.exports = stream; - } - }); - - // - var require_api_pipeline = __commonJS({ - ""(exports, module) { - "use strict"; - var { - Readable, - Duplex, - PassThrough - } = __require("stream"); - var { - InvalidArgumentError, - InvalidReturnValueError, - RequestAbortedError - } = require_errors(); - var util = require_util(); - var { AsyncResource } = __require("async_hooks"); - var { addSignal, removeSignal } = require_abort_signal(); - var assert = __require("assert"); - var kResume = Symbol("resume"); - var PipelineRequest = class 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); - } - }; - var PipelineResponse = class 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); - } - }; - var PipelineHandler = class 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 == null ? void 0 : 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; - req.push(null); - }); - this.res = null; - addSignal(this, signal); - } - onConnect(abort, context) { - const { ret, res } = this; - if (this.reason) { - abort(this.reason); - return; - } - assert(!res, "pipeline cannot be retried"); - assert(!ret.destroyed); - 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: body2 } = this; - if (!ret.push(chunk) && body2.pause) { - body2.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(__spreadProps(__spreadValues({}, opts), { body: pipelineHandler.req }), pipelineHandler); - return pipelineHandler.ret; - } catch (err) { - return new PassThrough().destroy(err); - } - } - module.exports = pipeline; - } - }); - - // - var require_api_upgrade = __commonJS({ - ""(exports, module) { - "use strict"; - var { InvalidArgumentError, SocketError } = require_errors(); - var { AsyncResource } = __require("async_hooks"); - var util = require_util(); - var { addSignal, removeSignal } = require_abort_signal(); - var assert = __require("assert"); - var UpgradeHandler = class 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.reason) { - abort(this.reason); - return; - } - assert(this.callback); - this.abort = abort; - this.context = null; - } - onHeaders() { - throw new SocketError("bad upgrade", null); - } - onUpgrade(statusCode, rawHeaders, socket) { - assert(statusCode === 101); - const { callback, opaque, context } = this; - 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 === void 0) { - return new Promise((resolve2, reject) => { - upgrade.call(this, opts, (err, data) => { - return err ? reject(err) : resolve2(data); - }); - }); - } - try { - const upgradeHandler = new UpgradeHandler(opts, callback); - this.dispatch(__spreadProps(__spreadValues({}, opts), { - method: opts.method || "GET", - upgrade: opts.protocol || "Websocket" - }), upgradeHandler); - } catch (err) { - if (typeof callback !== "function") { - throw err; - } - const opaque = opts == null ? void 0 : opts.opaque; - queueMicrotask(() => callback(err, { opaque })); - } - } - module.exports = upgrade; - } - }); - - // - var require_api_connect = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { AsyncResource } = __require("async_hooks"); - var { InvalidArgumentError, SocketError } = require_errors(); - var util = require_util(); - var { addSignal, removeSignal } = require_abort_signal(); - var ConnectHandler = class 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.reason) { - abort(this.reason); - return; - } - assert(this.callback); - 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; - 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 === void 0) { - return new Promise((resolve2, reject) => { - connect.call(this, opts, (err, data) => { - return err ? reject(err) : resolve2(data); - }); - }); - } - try { - const connectHandler = new ConnectHandler(opts, callback); - this.dispatch(__spreadProps(__spreadValues({}, opts), { method: "CONNECT" }), connectHandler); - } catch (err) { - if (typeof callback !== "function") { - throw err; - } - const opaque = opts == null ? void 0 : opts.opaque; - queueMicrotask(() => callback(err, { opaque })); - } - } - module.exports = connect; - } - }); - - // - var require_api = __commonJS({ - ""(exports, module) { - "use strict"; - module.exports.request = require_api_request(); - module.exports.stream = require_api_stream(); - module.exports.pipeline = require_api_pipeline(); - module.exports.upgrade = require_api_upgrade(); - module.exports.connect = require_api_connect(); - } - }); - - // - var require_mock_errors = __commonJS({ - ""(exports, module) { - "use strict"; - var { UndiciError } = require_errors(); - var kMockNotMatchedError = Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED"); - var _a; - var _MockNotMatchedError = class _MockNotMatchedError extends UndiciError { - constructor(message) { - super(message); - __publicField(this, _a, true); - 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"; - } - static [Symbol.hasInstance](instance) { - return instance && instance[kMockNotMatchedError] === true; - } - }; - _a = kMockNotMatchedError; - var MockNotMatchedError = _MockNotMatchedError; - module.exports = { - MockNotMatchedError - }; - } - }); - - // - var require_mock_symbols = __commonJS({ - ""(exports, 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") - }; - } - }); - - // - var require_mock_utils = __commonJS({ - ""(exports, module) { - "use strict"; - var { MockNotMatchedError } = require_mock_errors(); - var { - kDispatches, - kMockAgent, - kOriginalDispatch, - kOrigin, - kGetNetConnect - } = require_mock_symbols(); - var { buildURL } = require_util(); - var { STATUS_CODES } = __require("http"); - var { - types: { - isPromise - } - } = __require("util"); - 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]; - }) - ); - } - 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 void 0; - } else if (typeof headers.get === "function") { - return headers.get(key); - } else { - return lowerCaseEntries(headers)[key.toLocaleLowerCase()]; - } - } - function buildHeadersFromArray(headers) { - 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(mockDispatch2, headers) { - if (typeof mockDispatch2.headers === "function") { - if (Array.isArray(headers)) { - headers = buildHeadersFromArray(headers); - } - return mockDispatch2.headers(headers ? lowerCaseEntries(headers) : {}); - } - if (typeof mockDispatch2.headers === "undefined") { - return true; - } - if (typeof headers !== "object" || typeof mockDispatch2.headers !== "object") { - return false; - } - for (const [matchHeaderName, matchHeaderValue] of Object.entries(mockDispatch2.headers)) { - const headerValue = getHeaderByName(headers, matchHeaderName); - if (!matchValue(matchHeaderValue, headerValue)) { - return false; - } - } - return true; - } - function safeUrl(path4) { - if (typeof path4 !== "string") { - return path4; - } - const pathSegments = path4.split("?"); - if (pathSegments.length !== 2) { - return path4; - } - const qp = new URLSearchParams(pathSegments.pop()); - qp.sort(); - return [...pathSegments, qp.toString()].join("?"); - } - function matchKey(mockDispatch2, { path: path4, method, body, headers }) { - const pathMatch = matchValue(mockDispatch2.path, path4); - const methodMatch = matchValue(mockDispatch2.method, method); - const bodyMatch = typeof mockDispatch2.body !== "undefined" ? matchValue(mockDispatch2.body, body) : true; - const headersMatch = matchHeaders(mockDispatch2, headers); - return pathMatch && methodMatch && bodyMatch && headersMatch; - } - function getResponseData(data) { - if (Buffer.isBuffer(data)) { - return data; - } else if (data instanceof Uint8Array) { - return data; - } else if (data instanceof ArrayBuffer) { - 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; - let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path: path4 }) => matchValue(safeUrl(path4), resolvedPath)); - if (matchedMockDispatches.length === 0) { - throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`); - } - matchedMockDispatches = matchedMockDispatches.filter(({ method }) => matchValue(method, key.method)); - if (matchedMockDispatches.length === 0) { - throw new MockNotMatchedError(`Mock dispatch not matched for method '${key.method}' on path '${resolvedPath}'`); - } - 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}' on path '${resolvedPath}'`); - } - matchedMockDispatches = matchedMockDispatches.filter((mockDispatch2) => matchHeaders(mockDispatch2, key.headers)); - if (matchedMockDispatches.length === 0) { - const headers = typeof key.headers === "object" ? JSON.stringify(key.headers) : key.headers; - throw new MockNotMatchedError(`Mock dispatch not matched for headers '${headers}' on path '${resolvedPath}'`); - } - 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 } : __spreadValues({}, data); - const newMockDispatch = __spreadProps(__spreadValues(__spreadValues({}, baseData), key), { pending: true, data: __spreadValues({ 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: path4, method, body, headers, query } = opts; - return { - path: path4, - method, - body, - headers, - query - }; - } - function generateKeyValues(data) { - const keys = Object.keys(data); - const result = []; - for (let i = 0; i < keys.length; ++i) { - const key = keys[i]; - const value = data[key]; - const name = Buffer.from(`${key}`); - if (Array.isArray(value)) { - for (let j = 0; j < value.length; ++j) { - result.push(name, Buffer.from(`${value[j]}`)); - } - } else { - result.push(name, Buffer.from(`${value}`)); - } - } - return result; - } - function getStatusText(statusCode) { - return STATUS_CODES[statusCode] || "unknown"; - } - function getResponse(body) { - return __async(this, null, function* () { - const buffers = []; - try { - for (var iter = __forAwait(body), more, temp, error; more = !(temp = yield iter.next()).done; more = false) { - const data = temp.value; - buffers.push(data); - } - } catch (temp) { - error = [temp]; - } finally { - try { - more && (temp = iter.return) && (yield temp.call(iter)); - } finally { - if (error) - throw error[0]; - } - } - return Buffer.concat(buffers).toString("utf8"); - }); - } - function mockDispatch(opts, handler) { - const key = buildKey(opts); - const mockDispatch2 = getMockDispatch(this[kDispatches], key); - mockDispatch2.timesInvoked++; - if (mockDispatch2.data.callback) { - mockDispatch2.data = __spreadValues(__spreadValues({}, mockDispatch2.data), mockDispatch2.data.callback(opts)); - } - const { data: { statusCode, data, headers, trailers, error }, delay, persist } = mockDispatch2; - const { timesInvoked, times } = mockDispatch2; - mockDispatch2.consumed = !persist && timesInvoked >= times; - mockDispatch2.pending = timesInvoked < times; - if (error !== null) { - deleteMockDispatch(this[kDispatches], key); - handler.onError(error); - return true; - } - if (typeof delay === "number" && delay > 0) { - setTimeout(() => { - handleReply(this[kDispatches]); - }, delay); - } else { - handleReply(this[kDispatches]); - } - function handleReply(mockDispatches, _data = data) { - var _a, _b, _c, _d; - const optsHeaders = Array.isArray(opts.headers) ? buildHeadersFromArray(opts.headers) : opts.headers; - const body = typeof _data === "function" ? _data(__spreadProps(__spreadValues({}, opts), { headers: optsHeaders })) : _data; - if (isPromise(body)) { - body.then((newData) => handleReply(mockDispatches, newData)); - return; - } - const responseData = getResponseData(body); - const responseHeaders = generateKeyValues(headers); - const responseTrailers = generateKeyValues(trailers); - (_a = handler.onConnect) == null ? void 0 : _a.call(handler, (err) => handler.onError(err), null); - (_b = handler.onHeaders) == null ? void 0 : _b.call(handler, statusCode, responseHeaders, resume, getStatusText(statusCode)); - (_c = handler.onData) == null ? void 0 : _c.call(handler, Buffer.from(responseData)); - (_d = handler.onComplete) == null ? void 0 : _d.call(handler, 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 _a = opts, { agent } = _a, mockOptions = __objRest(_a, ["agent"]); - return mockOptions; - } - } - module.exports = { - getResponseData, - getMockDispatch, - addMockDispatch, - deleteMockDispatch, - buildKey, - generateKeyValues, - matchValue, - getResponse, - getStatusText, - mockDispatch, - buildMockDispatch, - checkNetConnect, - buildMockOptions, - getHeaderByName, - buildHeadersFromArray - }; - } - }); - - // - var require_mock_interceptor = __commonJS({ - ""(exports, module) { - "use strict"; - var { getResponseData, buildKey, addMockDispatch } = require_mock_utils(); - var { - kDispatches, - kDispatchKey, - kDefaultHeaders, - kDefaultTrailers, - kContentLength, - kMockDispatch - } = require_mock_symbols(); - var { InvalidArgumentError } = require_errors(); - var { buildURL } = require_util(); - var MockScope = class { - 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; - } - }; - var MockInterceptor = class { - 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"; - } - if (typeof opts.path === "string") { - if (opts.query) { - opts.path = buildURL(opts.path, opts.query); - } else { - 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 = __spreadValues(__spreadValues(__spreadValues({}, this[kDefaultHeaders]), contentLength), responseOptions.headers); - const trailers = __spreadValues(__spreadValues({}, this[kDefaultTrailers]), responseOptions.trailers); - return { statusCode, data, headers, trailers }; - } - validateReplyParameters(replyParameters) { - if (typeof replyParameters.statusCode === "undefined") { - throw new InvalidArgumentError("statusCode must be defined"); - } - if (typeof replyParameters.responseOptions !== "object" || replyParameters.responseOptions === null) { - throw new InvalidArgumentError("responseOptions must be an object"); - } - } - /** - * Mock an undici request with a defined reply. - */ - reply(replyOptionsCallbackOrStatusCode) { - if (typeof replyOptionsCallbackOrStatusCode === "function") { - const wrappedDefaultsCallback = (opts) => { - const resolvedData = replyOptionsCallbackOrStatusCode(opts); - if (typeof resolvedData !== "object" || resolvedData === null) { - throw new InvalidArgumentError("reply options callback must return an object"); - } - const replyParameters2 = __spreadValues({ data: "", responseOptions: {} }, resolvedData); - this.validateReplyParameters(replyParameters2); - return __spreadValues({}, this.createMockScopeDispatchData(replyParameters2)); - }; - const newMockDispatch2 = addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback); - return new MockScope(newMockDispatch2); - } - const replyParameters = { - statusCode: replyOptionsCallbackOrStatusCode, - data: arguments[1] === void 0 ? "" : arguments[1], - responseOptions: arguments[2] === void 0 ? {} : arguments[2] - }; - this.validateReplyParameters(replyParameters); - const dispatchData = this.createMockScopeDispatchData(replyParameters); - 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; - } - }); - - // - var require_mock_client = __commonJS({ - ""(exports, module) { - "use strict"; - var { promisify } = __require("util"); - var Client = require_client(); - var { buildMockDispatch } = require_mock_utils(); - var { - kDispatches, - kMockAgent, - kClose, - kOriginalClose, - kOrigin, - kOriginalDispatch, - kConnected - } = require_mock_symbols(); - var { MockInterceptor } = require_mock_interceptor(); - var Symbols = require_symbols(); - var { InvalidArgumentError } = require_errors(); - var MockClient = class 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]); - } - [kClose]() { - return __async(this, null, function* () { - yield promisify(this[kOriginalClose])(); - this[kConnected] = 0; - this[kMockAgent][Symbols.kClients].delete(this[kOrigin]); - }); - } - }; - module.exports = MockClient; - } - }); - - // - var require_mock_pool = __commonJS({ - ""(exports, module) { - "use strict"; - var { promisify } = __require("util"); - var Pool = require_pool(); - var { buildMockDispatch } = require_mock_utils(); - var { - kDispatches, - kMockAgent, - kClose, - kOriginalClose, - kOrigin, - kOriginalDispatch, - kConnected - } = require_mock_symbols(); - var { MockInterceptor } = require_mock_interceptor(); - var Symbols = require_symbols(); - var { InvalidArgumentError } = require_errors(); - var MockPool = class 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]); - } - [kClose]() { - return __async(this, null, function* () { - yield promisify(this[kOriginalClose])(); - this[kConnected] = 0; - this[kMockAgent][Symbols.kClients].delete(this[kOrigin]); - }); - } - }; - module.exports = MockPool; - } - }); - - // - var require_pluralizer = __commonJS({ - ""(exports, module) { - "use strict"; - var singulars = { - pronoun: "it", - is: "is", - was: "was", - this: "this" - }; - var 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 __spreadProps(__spreadValues({}, keys), { count, noun }); - } - }; - } - }); - - // - var require_pending_interceptors_formatter = __commonJS({ - ""(exports, module) { - "use strict"; - var { Transform } = __require("stream"); - var { Console } = __require("console"); - var PERSISTENT = process.versions.icu ? "\u2705" : "Y "; - var NOT_PERSISTENT = process.versions.icu ? "\u274C" : "N "; - 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: path4, data: { statusCode }, persist, times, timesInvoked, origin }) => ({ - Method: method, - Origin: origin, - Path: path4, - "Status code": statusCode, - Persistent: persist ? PERSISTENT : NOT_PERSISTENT, - Invocations: timesInvoked, - Remaining: persist ? Infinity : times - timesInvoked - }) - ); - this.logger.table(withPrettyHeaders); - return this.transform.read().toString(); - } - }; - } - }); - - // - var require_mock_agent = __commonJS({ - ""(exports, module) { - "use strict"; - var { kClients } = require_symbols(); - var Agent = require_agent(); - var { - kAgent, - kMockAgentSet, - kMockAgentGet, - kDispatches, - kIsMockActive, - kNetConnect, - kGetNetConnect, - kOptions, - kFactory - } = require_mock_symbols(); - var MockClient = require_mock_client(); - var MockPool = require_mock_pool(); - var { matchValue, buildMockOptions } = require_mock_utils(); - var { InvalidArgumentError, UndiciError } = require_errors(); - var Dispatcher = require_dispatcher(); - var Pluralizer = require_pluralizer(); - var PendingInterceptorsFormatter = require_pending_interceptors_formatter(); - var MockAgent = class extends Dispatcher { - constructor(opts) { - super(opts); - this[kNetConnect] = true; - this[kIsMockActive] = true; - if ((opts == null ? void 0 : opts.agent) && typeof opts.agent.dispatch !== "function") { - throw new InvalidArgumentError("Argument opts.agent must implement Agent"); - } - const agent = (opts == null ? void 0 : 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) { - this.get(opts.origin); - return this[kAgent].dispatch(opts, handler); - } - close() { - return __async(this, null, function* () { - yield 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, 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) { - const client = this[kClients].get(origin); - if (client) { - return client; - } - if (typeof origin !== "string") { - const dispatcher = this[kFactory]("http://localhost:9999"); - this[kMockAgentSet](origin, dispatcher); - return dispatcher; - } - for (const [keyMatcher, nonExplicitDispatcher] of Array.from(this[kClients])) { - 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[kDispatches].map((dispatch) => __spreadProps(__spreadValues({}, 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; - } - }); - - // - var require_global2 = __commonJS({ - ""(exports, module) { - "use strict"; - var globalDispatcher = Symbol.for("undici.globalDispatcher.1"); - var { InvalidArgumentError } = require_errors(); - var Agent = require_agent(); - if (getGlobalDispatcher() === void 0) { - 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 - }; - } - }); - - // - var require_decorator_handler = __commonJS({ - ""(exports, module) { - "use strict"; - var _handler, _a; - module.exports = (_a = class { - constructor(handler) { - __privateAdd(this, _handler, void 0); - if (typeof handler !== "object" || handler === null) { - throw new TypeError("handler must be an object"); - } - __privateSet(this, _handler, handler); - } - onConnect(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onConnect) == null ? void 0 : _b.call(_a2, ...args); - } - onError(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onError) == null ? void 0 : _b.call(_a2, ...args); - } - onUpgrade(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onUpgrade) == null ? void 0 : _b.call(_a2, ...args); - } - onResponseStarted(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onResponseStarted) == null ? void 0 : _b.call(_a2, ...args); - } - onHeaders(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onHeaders) == null ? void 0 : _b.call(_a2, ...args); - } - onData(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onData) == null ? void 0 : _b.call(_a2, ...args); - } - onComplete(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onComplete) == null ? void 0 : _b.call(_a2, ...args); - } - onBodySent(...args) { - var _a2, _b; - return (_b = (_a2 = __privateGet(this, _handler)).onBodySent) == null ? void 0 : _b.call(_a2, ...args); - } - }, _handler = new WeakMap(), _a); - } - }); - - // - var require_redirect = __commonJS({ - ""(exports, module) { - "use strict"; - var RedirectHandler = require_redirect_handler(); - module.exports = (opts) => { - const globalMaxRedirections = opts == null ? void 0 : opts.maxRedirections; - return (dispatch) => { - return function redirectInterceptor(opts2, handler) { - const _a = opts2, { maxRedirections = globalMaxRedirections } = _a, baseOpts = __objRest(_a, ["maxRedirections"]); - if (!maxRedirections) { - return dispatch(opts2, handler); - } - const redirectHandler = new RedirectHandler( - dispatch, - maxRedirections, - opts2, - handler - ); - return dispatch(baseOpts, redirectHandler); - }; - }; - }; - } - }); - - // - var require_retry = __commonJS({ - ""(exports, module) { - "use strict"; - var RetryHandler = require_retry_handler(); - module.exports = (globalOpts) => { - return (dispatch) => { - return function retryInterceptor(opts, handler) { - return dispatch( - opts, - new RetryHandler( - __spreadProps(__spreadValues({}, opts), { retryOptions: __spreadValues(__spreadValues({}, globalOpts), opts.retryOptions) }), - { - handler, - dispatch - } - ) - ); - }; - }; - }; - } - }); - - // - var require_dump = __commonJS({ - ""(exports, module) { - "use strict"; - var util = require_util(); - var { InvalidArgumentError, RequestAbortedError } = require_errors(); - var DecoratorHandler = require_decorator_handler(); - var _maxSize, _abort, _dumped, _aborted, _size, _reason, _handler, _customAbort, customAbort_fn; - var DumpHandler = class extends DecoratorHandler { - constructor({ maxSize }, handler) { - super(handler); - __privateAdd(this, _customAbort); - __privateAdd(this, _maxSize, 1024 * 1024); - __privateAdd(this, _abort, null); - __privateAdd(this, _dumped, false); - __privateAdd(this, _aborted, false); - __privateAdd(this, _size, 0); - __privateAdd(this, _reason, null); - __privateAdd(this, _handler, null); - if (maxSize != null && (!Number.isFinite(maxSize) || maxSize < 1)) { - throw new InvalidArgumentError("maxSize must be a number greater than 0"); - } - __privateSet(this, _maxSize, maxSize != null ? maxSize : __privateGet(this, _maxSize)); - __privateSet(this, _handler, handler); - } - onConnect(abort) { - __privateSet(this, _abort, abort); - __privateGet(this, _handler).onConnect(__privateMethod(this, _customAbort, customAbort_fn).bind(this)); - } - // TODO: will require adjustment after new hooks are out - onHeaders(statusCode, rawHeaders, resume, statusMessage) { - const headers = util.parseHeaders(rawHeaders); - const contentLength = headers["content-length"]; - if (contentLength != null && contentLength > __privateGet(this, _maxSize)) { - throw new RequestAbortedError( - `Response size (${contentLength}) larger than maxSize (${__privateGet(this, _maxSize)})` - ); - } - if (__privateGet(this, _aborted)) { - return true; - } - return __privateGet(this, _handler).onHeaders( - statusCode, - rawHeaders, - resume, - statusMessage - ); - } - onError(err) { - var _a; - if (__privateGet(this, _dumped)) { - return; - } - err = (_a = __privateGet(this, _reason)) != null ? _a : err; - __privateGet(this, _handler).onError(err); - } - onData(chunk) { - __privateSet(this, _size, __privateGet(this, _size) + chunk.length); - if (__privateGet(this, _size) >= __privateGet(this, _maxSize)) { - __privateSet(this, _dumped, true); - if (__privateGet(this, _aborted)) { - __privateGet(this, _handler).onError(__privateGet(this, _reason)); - } else { - __privateGet(this, _handler).onComplete([]); - } - } - return true; - } - onComplete(trailers) { - if (__privateGet(this, _dumped)) { - return; - } - if (__privateGet(this, _aborted)) { - __privateGet(this, _handler).onError(this.reason); - return; - } - __privateGet(this, _handler).onComplete(trailers); - } - }; - _maxSize = new WeakMap(); - _abort = new WeakMap(); - _dumped = new WeakMap(); - _aborted = new WeakMap(); - _size = new WeakMap(); - _reason = new WeakMap(); - _handler = new WeakMap(); - _customAbort = new WeakSet(); - customAbort_fn = function(reason) { - __privateSet(this, _aborted, true); - __privateSet(this, _reason, reason); - }; - function createDumpInterceptor({ maxSize: defaultMaxSize } = { - maxSize: 1024 * 1024 - }) { - return (dispatch) => { - return function Intercept(opts, handler) { - const { dumpMaxSize = defaultMaxSize } = opts; - const dumpHandler = new DumpHandler( - { maxSize: dumpMaxSize }, - handler - ); - return dispatch(opts, dumpHandler); - }; - }; - } - module.exports = createDumpInterceptor; - } - }); - - // - var require_dns = __commonJS({ - ""(exports, module) { - "use strict"; - var { isIP } = __require("net"); - var { lookup } = __require("dns"); - var DecoratorHandler = require_decorator_handler(); - var { InvalidArgumentError, InformationalError } = require_errors(); - var maxInt = Math.pow(2, 31) - 1; - var _maxTTL, _maxItems, _records, _defaultLookup, defaultLookup_fn, _defaultPick, defaultPick_fn; - var DNSInstance = class { - constructor(opts) { - __privateAdd(this, _defaultLookup); - __privateAdd(this, _defaultPick); - __privateAdd(this, _maxTTL, 0); - __privateAdd(this, _maxItems, 0); - __privateAdd(this, _records, /* @__PURE__ */ new Map()); - __publicField(this, "dualStack", true); - __publicField(this, "affinity", null); - __publicField(this, "lookup", null); - __publicField(this, "pick", null); - var _a, _b; - __privateSet(this, _maxTTL, opts.maxTTL); - __privateSet(this, _maxItems, opts.maxItems); - this.dualStack = opts.dualStack; - this.affinity = opts.affinity; - this.lookup = (_a = opts.lookup) != null ? _a : __privateMethod(this, _defaultLookup, defaultLookup_fn); - this.pick = (_b = opts.pick) != null ? _b : __privateMethod(this, _defaultPick, defaultPick_fn); - } - get full() { - return __privateGet(this, _records).size === __privateGet(this, _maxItems); - } - runLookup(origin, opts, cb) { - const ips = __privateGet(this, _records).get(origin.hostname); - if (ips == null && this.full) { - cb(null, origin.origin); - return; - } - const newOpts = __spreadProps(__spreadValues({ - affinity: this.affinity, - dualStack: this.dualStack, - lookup: this.lookup, - pick: this.pick - }, opts.dns), { - maxTTL: __privateGet(this, _maxTTL), - maxItems: __privateGet(this, _maxItems) - }); - if (ips == null) { - this.lookup(origin, newOpts, (err, addresses) => { - if (err || addresses == null || addresses.length === 0) { - cb(err != null ? err : new InformationalError("No DNS entries found")); - return; - } - this.setRecords(origin, addresses); - const records = __privateGet(this, _records).get(origin.hostname); - const ip = this.pick( - origin, - records, - newOpts.affinity - ); - let port; - if (typeof ip.port === "number") { - port = `:${ip.port}`; - } else if (origin.port !== "") { - port = `:${origin.port}`; - } else { - port = ""; - } - cb( - null, - `${origin.protocol}//${ip.family === 6 ? `[${ip.address}]` : ip.address}${port}` - ); - }); - } else { - const ip = this.pick( - origin, - ips, - newOpts.affinity - ); - if (ip == null) { - __privateGet(this, _records).delete(origin.hostname); - this.runLookup(origin, opts, cb); - return; - } - let port; - if (typeof ip.port === "number") { - port = `:${ip.port}`; - } else if (origin.port !== "") { - port = `:${origin.port}`; - } else { - port = ""; - } - cb( - null, - `${origin.protocol}//${ip.family === 6 ? `[${ip.address}]` : ip.address}${port}` - ); - } - } - setRecords(origin, addresses) { - var _a; - const timestamp = Date.now(); - const records = { records: { 4: null, 6: null } }; - for (const record of addresses) { - record.timestamp = timestamp; - if (typeof record.ttl === "number") { - record.ttl = Math.min(record.ttl, __privateGet(this, _maxTTL)); - } else { - record.ttl = __privateGet(this, _maxTTL); - } - const familyRecords = (_a = records.records[record.family]) != null ? _a : { ips: [] }; - familyRecords.ips.push(record); - records.records[record.family] = familyRecords; - } - __privateGet(this, _records).set(origin.hostname, records); - } - getHandler(meta, opts) { - return new DNSDispatchHandler(this, meta, opts); - } - }; - _maxTTL = new WeakMap(); - _maxItems = new WeakMap(); - _records = new WeakMap(); - _defaultLookup = new WeakSet(); - defaultLookup_fn = function(origin, opts, cb) { - lookup( - origin.hostname, - { - all: true, - family: this.dualStack === false ? this.affinity : 0, - order: "ipv4first" - }, - (err, addresses) => { - if (err) { - return cb(err); - } - const results = /* @__PURE__ */ new Map(); - for (const addr of addresses) { - results.set(`${addr.address}:${addr.family}`, addr); - } - cb(null, results.values()); - } - ); - }; - _defaultPick = new WeakSet(); - defaultPick_fn = function(origin, hostnameRecords, affinity) { - var _a; - let ip = null; - const { records, offset } = hostnameRecords; - let family; - if (this.dualStack) { - if (affinity == null) { - if (offset == null || offset === maxInt) { - hostnameRecords.offset = 0; - affinity = 4; - } else { - hostnameRecords.offset++; - affinity = (hostnameRecords.offset & 1) === 1 ? 6 : 4; - } - } - if (records[affinity] != null && records[affinity].ips.length > 0) { - family = records[affinity]; - } else { - family = records[affinity === 4 ? 6 : 4]; - } - } else { - family = records[affinity]; - } - if (family == null || family.ips.length === 0) { - return ip; - } - if (family.offset == null || family.offset === maxInt) { - family.offset = 0; - } else { - family.offset++; - } - const position = family.offset % family.ips.length; - ip = (_a = family.ips[position]) != null ? _a : null; - if (ip == null) { - return ip; - } - if (Date.now() - ip.timestamp > ip.ttl) { - family.ips.splice(position, 1); - return this.pick(origin, hostnameRecords, affinity); - } - return ip; - }; - var _state, _opts, _dispatch, _handler, _origin; - var DNSDispatchHandler = class extends DecoratorHandler { - constructor(state, { origin, handler, dispatch }, opts) { - super(handler); - __privateAdd(this, _state, null); - __privateAdd(this, _opts, null); - __privateAdd(this, _dispatch, null); - __privateAdd(this, _handler, null); - __privateAdd(this, _origin, null); - __privateSet(this, _origin, origin); - __privateSet(this, _handler, handler); - __privateSet(this, _opts, __spreadValues({}, opts)); - __privateSet(this, _state, state); - __privateSet(this, _dispatch, dispatch); - } - onError(err) { - switch (err.code) { - case "ETIMEDOUT": - case "ECONNREFUSED": { - if (__privateGet(this, _state).dualStack) { - __privateGet(this, _state).runLookup(__privateGet(this, _origin), __privateGet(this, _opts), (err2, newOrigin) => { - if (err2) { - return __privateGet(this, _handler).onError(err2); - } - const dispatchOpts = __spreadProps(__spreadValues({}, __privateGet(this, _opts)), { - origin: newOrigin - }); - __privateGet(this, _dispatch).call(this, dispatchOpts, this); - }); - return; - } - __privateGet(this, _handler).onError(err); - return; - } - case "ENOTFOUND": - __privateGet(this, _state).deleteRecord(__privateGet(this, _origin)); - default: - __privateGet(this, _handler).onError(err); - break; - } - } - }; - _state = new WeakMap(); - _opts = new WeakMap(); - _dispatch = new WeakMap(); - _handler = new WeakMap(); - _origin = new WeakMap(); - module.exports = (interceptorOpts) => { - var _a, _b, _c, _d, _e, _f, _g; - if ((interceptorOpts == null ? void 0 : interceptorOpts.maxTTL) != null && (typeof (interceptorOpts == null ? void 0 : interceptorOpts.maxTTL) !== "number" || (interceptorOpts == null ? void 0 : interceptorOpts.maxTTL) < 0)) { - throw new InvalidArgumentError("Invalid maxTTL. Must be a positive number"); - } - if ((interceptorOpts == null ? void 0 : interceptorOpts.maxItems) != null && (typeof (interceptorOpts == null ? void 0 : interceptorOpts.maxItems) !== "number" || (interceptorOpts == null ? void 0 : interceptorOpts.maxItems) < 1)) { - throw new InvalidArgumentError( - "Invalid maxItems. Must be a positive number and greater than zero" - ); - } - if ((interceptorOpts == null ? void 0 : interceptorOpts.affinity) != null && (interceptorOpts == null ? void 0 : interceptorOpts.affinity) !== 4 && (interceptorOpts == null ? void 0 : interceptorOpts.affinity) !== 6) { - throw new InvalidArgumentError("Invalid affinity. Must be either 4 or 6"); - } - if ((interceptorOpts == null ? void 0 : interceptorOpts.dualStack) != null && typeof (interceptorOpts == null ? void 0 : interceptorOpts.dualStack) !== "boolean") { - throw new InvalidArgumentError("Invalid dualStack. Must be a boolean"); - } - if ((interceptorOpts == null ? void 0 : interceptorOpts.lookup) != null && typeof (interceptorOpts == null ? void 0 : interceptorOpts.lookup) !== "function") { - throw new InvalidArgumentError("Invalid lookup. Must be a function"); - } - if ((interceptorOpts == null ? void 0 : interceptorOpts.pick) != null && typeof (interceptorOpts == null ? void 0 : interceptorOpts.pick) !== "function") { - throw new InvalidArgumentError("Invalid pick. Must be a function"); - } - const dualStack = (_a = interceptorOpts == null ? void 0 : interceptorOpts.dualStack) != null ? _a : true; - let affinity; - if (dualStack) { - affinity = (_b = interceptorOpts == null ? void 0 : interceptorOpts.affinity) != null ? _b : null; - } else { - affinity = (_c = interceptorOpts == null ? void 0 : interceptorOpts.affinity) != null ? _c : 4; - } - const opts = { - maxTTL: (_d = interceptorOpts == null ? void 0 : interceptorOpts.maxTTL) != null ? _d : 1e4, - // Expressed in ms - lookup: (_e = interceptorOpts == null ? void 0 : interceptorOpts.lookup) != null ? _e : null, - pick: (_f = interceptorOpts == null ? void 0 : interceptorOpts.pick) != null ? _f : null, - dualStack, - affinity, - maxItems: (_g = interceptorOpts == null ? void 0 : interceptorOpts.maxItems) != null ? _g : Infinity - }; - const instance = new DNSInstance(opts); - return (dispatch) => { - return function dnsInterceptor(origDispatchOpts, handler) { - const origin = origDispatchOpts.origin.constructor === URL ? origDispatchOpts.origin : new URL(origDispatchOpts.origin); - if (isIP(origin.hostname) !== 0) { - return dispatch(origDispatchOpts, handler); - } - instance.runLookup(origin, origDispatchOpts, (err, newOrigin) => { - if (err) { - return handler.onError(err); - } - let dispatchOpts = null; - dispatchOpts = __spreadProps(__spreadValues({}, origDispatchOpts), { - servername: origin.hostname, - // For SNI on TLS - origin: newOrigin, - headers: __spreadValues({ - host: origin.hostname - }, origDispatchOpts.headers) - }); - dispatch( - dispatchOpts, - instance.getHandler({ origin, dispatch, handler }, origDispatchOpts) - ); - }); - return true; - }; - }; - }; - } - }); - - // - var require_headers = __commonJS({ - ""(exports, module) { - "use strict"; - var { kConstruct } = require_symbols(); - var { kEnumerableProperty } = require_util(); - var { - iteratorMixin, - isValidHeaderName, - isValidHeaderValue - } = require_util2(); - var { webidl } = require_webidl(); - var assert = __require("assert"); - var util = __require("util"); - var kHeadersMap = Symbol("headers map"); - var kHeadersSortedMap = Symbol("headers map sorted"); - function isHTTPWhiteSpaceCharCode(code) { - return code === 10 || code === 13 || code === 9 || code === 32; - } - function headerValueNormalize(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) { - if (Array.isArray(object)) { - for (let i = 0; i < object.length; ++i) { - const header = object[i]; - if (header.length !== 2) { - throw webidl.errors.exception({ - header: "Headers constructor", - message: `expected name/value pair to be length 2, found ${header.length}.` - }); - } - appendHeader(headers, header[0], header[1]); - } - } else if (typeof object === "object" && object !== null) { - 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"] - }); - } - } - function appendHeader(headers, name, value) { - value = headerValueNormalize(value); - 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" - }); - } - if (getHeadersGuard(headers) === "immutable") { - throw new TypeError("immutable"); - } - return getHeadersList(headers).append(name, value, false); - } - function compareHeaderName(a, b) { - return a[0] < b[0] ? -1 : 1; - } - var HeadersList = class _HeadersList { - constructor(init) { - /** @type {[string, string][]|null} */ - __publicField(this, "cookies", null); - 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; - } - } - /** - * @see https://fetch.spec.whatwg.org/#header-list-contains - * @param {string} name - * @param {boolean} isLowerCase - */ - contains(name, isLowerCase) { - return this[kHeadersMap].has(isLowerCase ? name : name.toLowerCase()); - } - clear() { - this[kHeadersMap].clear(); - this[kHeadersSortedMap] = null; - this.cookies = null; - } - /** - * @see https://fetch.spec.whatwg.org/#concept-header-list-append - * @param {string} name - * @param {string} value - * @param {boolean} isLowerCase - */ - append(name, value, isLowerCase) { - var _a; - this[kHeadersSortedMap] = null; - const lowercaseName = isLowerCase ? name : name.toLowerCase(); - const exists2 = this[kHeadersMap].get(lowercaseName); - if (exists2) { - const delimiter2 = lowercaseName === "cookie" ? "; " : ", "; - this[kHeadersMap].set(lowercaseName, { - name: exists2.name, - value: `${exists2.value}${delimiter2}${value}` - }); - } else { - this[kHeadersMap].set(lowercaseName, { name, value }); - } - if (lowercaseName === "set-cookie") { - ((_a = this.cookies) != null ? _a : this.cookies = []).push(value); - } - } - /** - * @see https://fetch.spec.whatwg.org/#concept-header-list-set - * @param {string} name - * @param {string} value - * @param {boolean} isLowerCase - */ - set(name, value, isLowerCase) { - this[kHeadersSortedMap] = null; - const lowercaseName = isLowerCase ? name : name.toLowerCase(); - if (lowercaseName === "set-cookie") { - this.cookies = [value]; - } - this[kHeadersMap].set(lowercaseName, { name, value }); - } - /** - * @see https://fetch.spec.whatwg.org/#concept-header-list-delete - * @param {string} name - * @param {boolean} isLowerCase - */ - delete(name, isLowerCase) { - this[kHeadersSortedMap] = null; - if (!isLowerCase) - name = name.toLowerCase(); - if (name === "set-cookie") { - this.cookies = null; - } - this[kHeadersMap].delete(name); - } - /** - * @see https://fetch.spec.whatwg.org/#concept-header-list-get - * @param {string} name - * @param {boolean} isLowerCase - * @returns {string | null} - */ - get(name, isLowerCase) { - var _a, _b; - return (_b = (_a = this[kHeadersMap].get(isLowerCase ? name : name.toLowerCase())) == null ? void 0 : _a.value) != null ? _b : null; - } - *[Symbol.iterator]() { - for (const { 0: name, 1: { value } } of this[kHeadersMap]) { - yield [name, value]; - } - } - get entries() { - const headers = {}; - if (this[kHeadersMap].size !== 0) { - for (const { name, value } of this[kHeadersMap].values()) { - headers[name] = value; - } - } - return headers; - } - rawValues() { - return this[kHeadersMap].values(); - } - get entriesList() { - const headers = []; - if (this[kHeadersMap].size !== 0) { - for (const { 0: lowerName, 1: { name, value } } of this[kHeadersMap]) { - if (lowerName === "set-cookie") { - for (const cookie of this.cookies) { - headers.push([name, cookie]); - } - } else { - headers.push([name, value]); - } - } - } - return headers; - } - // https://fetch.spec.whatwg.org/#convert-header-names-to-a-sorted-lowercase-set - toSortedArray() { - const size = this[kHeadersMap].size; - const array = new Array(size); - if (size <= 32) { - if (size === 0) { - return array; - } - const iterator = this[kHeadersMap][Symbol.iterator](); - const firstValue = iterator.next().value; - array[0] = [firstValue[0], firstValue[1].value]; - assert(firstValue[1].value !== null); - for (let i = 1, j = 0, right = 0, left = 0, pivot = 0, x, value; i < size; ++i) { - value = iterator.next().value; - x = array[i] = [value[0], value[1].value]; - assert(x[1] !== null); - left = 0; - right = i; - while (left < right) { - pivot = left + (right - left >> 1); - if (array[pivot][0] <= x[0]) { - left = pivot + 1; - } else { - right = pivot; - } - } - if (i !== pivot) { - j = i; - while (j > left) { - array[j] = array[--j]; - } - array[left] = x; - } - } - if (!iterator.next().done) { - throw new TypeError("Unreachable"); - } - return array; - } else { - let i = 0; - for (const { 0: name, 1: { value } } of this[kHeadersMap]) { - array[i++] = [name, value]; - assert(value !== null); - } - return array.sort(compareHeaderName); - } - } - }; - var _guard, _headersList; - var _Headers = class _Headers { - constructor(init = void 0) { - __privateAdd(this, _guard, void 0); - __privateAdd(this, _headersList, void 0); - webidl.util.markAsUncloneable(this); - if (init === kConstruct) { - return; - } - __privateSet(this, _headersList, new HeadersList()); - __privateSet(this, _guard, "none"); - if (init !== void 0) { - init = webidl.converters.HeadersInit(init, "Headers contructor", "init"); - fill(this, init); - } - } - // https://fetch.spec.whatwg.org/#dom-headers-append - append(name, value) { - webidl.brandCheck(this, _Headers); - webidl.argumentLengthCheck(arguments, 2, "Headers.append"); - const prefix = "Headers.append"; - name = webidl.converters.ByteString(name, prefix, "name"); - value = webidl.converters.ByteString(value, prefix, "value"); - return appendHeader(this, name, value); - } - // https://fetch.spec.whatwg.org/#dom-headers-delete - delete(name) { - webidl.brandCheck(this, _Headers); - webidl.argumentLengthCheck(arguments, 1, "Headers.delete"); - const prefix = "Headers.delete"; - name = webidl.converters.ByteString(name, prefix, "name"); - if (!isValidHeaderName(name)) { - throw webidl.errors.invalidArgument({ - prefix: "Headers.delete", - value: name, - type: "header name" - }); - } - if (__privateGet(this, _guard) === "immutable") { - throw new TypeError("immutable"); - } - if (!__privateGet(this, _headersList).contains(name, false)) { - return; - } - __privateGet(this, _headersList).delete(name, false); - } - // https://fetch.spec.whatwg.org/#dom-headers-get - get(name) { - webidl.brandCheck(this, _Headers); - webidl.argumentLengthCheck(arguments, 1, "Headers.get"); - const prefix = "Headers.get"; - name = webidl.converters.ByteString(name, prefix, "name"); - if (!isValidHeaderName(name)) { - throw webidl.errors.invalidArgument({ - prefix, - value: name, - type: "header name" - }); - } - return __privateGet(this, _headersList).get(name, false); - } - // https://fetch.spec.whatwg.org/#dom-headers-has - has(name) { - webidl.brandCheck(this, _Headers); - webidl.argumentLengthCheck(arguments, 1, "Headers.has"); - const prefix = "Headers.has"; - name = webidl.converters.ByteString(name, prefix, "name"); - if (!isValidHeaderName(name)) { - throw webidl.errors.invalidArgument({ - prefix, - value: name, - type: "header name" - }); - } - return __privateGet(this, _headersList).contains(name, false); - } - // https://fetch.spec.whatwg.org/#dom-headers-set - set(name, value) { - webidl.brandCheck(this, _Headers); - webidl.argumentLengthCheck(arguments, 2, "Headers.set"); - const prefix = "Headers.set"; - name = webidl.converters.ByteString(name, prefix, "name"); - value = webidl.converters.ByteString(value, prefix, "value"); - value = headerValueNormalize(value); - if (!isValidHeaderName(name)) { - throw webidl.errors.invalidArgument({ - prefix, - value: name, - type: "header name" - }); - } else if (!isValidHeaderValue(value)) { - throw webidl.errors.invalidArgument({ - prefix, - value, - type: "header value" - }); - } - if (__privateGet(this, _guard) === "immutable") { - throw new TypeError("immutable"); - } - __privateGet(this, _headersList).set(name, value, false); - } - // https://fetch.spec.whatwg.org/#dom-headers-getsetcookie - getSetCookie() { - webidl.brandCheck(this, _Headers); - const list = __privateGet(this, _headersList).cookies; - if (list) { - return [...list]; - } - return []; - } - // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine - get [kHeadersSortedMap]() { - if (__privateGet(this, _headersList)[kHeadersSortedMap]) { - return __privateGet(this, _headersList)[kHeadersSortedMap]; - } - const headers = []; - const names = __privateGet(this, _headersList).toSortedArray(); - const cookies = __privateGet(this, _headersList).cookies; - if (cookies === null || cookies.length === 1) { - return __privateGet(this, _headersList)[kHeadersSortedMap] = names; - } - for (let i = 0; i < names.length; ++i) { - const { 0: name, 1: value } = names[i]; - if (name === "set-cookie") { - for (let j = 0; j < cookies.length; ++j) { - headers.push([name, cookies[j]]); - } - } else { - headers.push([name, value]); - } - } - return __privateGet(this, _headersList)[kHeadersSortedMap] = headers; - } - [util.inspect.custom](depth, options) { - var _a; - (_a = options.depth) != null ? _a : options.depth = depth; - return `Headers ${util.formatWithOptions(options, __privateGet(this, _headersList).entries)}`; - } - static getHeadersGuard(o) { - return __privateGet(o, _guard); - } - static setHeadersGuard(o, guard) { - __privateSet(o, _guard, guard); - } - static getHeadersList(o) { - return __privateGet(o, _headersList); - } - static setHeadersList(o, list) { - __privateSet(o, _headersList, list); - } - }; - _guard = new WeakMap(); - _headersList = new WeakMap(); - var Headers2 = _Headers; - var { getHeadersGuard, setHeadersGuard, getHeadersList, setHeadersList } = Headers2; - Reflect.deleteProperty(Headers2, "getHeadersGuard"); - Reflect.deleteProperty(Headers2, "setHeadersGuard"); - Reflect.deleteProperty(Headers2, "getHeadersList"); - Reflect.deleteProperty(Headers2, "setHeadersList"); - iteratorMixin("Headers", Headers2, kHeadersSortedMap, 0, 1); - Object.defineProperties(Headers2.prototype, { - append: kEnumerableProperty, - delete: kEnumerableProperty, - get: kEnumerableProperty, - has: kEnumerableProperty, - set: kEnumerableProperty, - getSetCookie: kEnumerableProperty, - [Symbol.toStringTag]: { - value: "Headers", - configurable: true - }, - [util.inspect.custom]: { - enumerable: false - } - }); - webidl.converters.HeadersInit = function(V, prefix, argument) { - if (webidl.util.Type(V) === "Object") { - const iterator = Reflect.get(V, Symbol.iterator); - if (!util.types.isProxy(V) && iterator === Headers2.prototype.entries) { - try { - return getHeadersList(V).entriesList; - } catch (e) { - } - } - if (typeof iterator === "function") { - return webidl.converters["sequence>"](V, prefix, argument, iterator.bind(V)); - } - return webidl.converters["record"](V, prefix, argument); - } - throw webidl.errors.conversionFailed({ - prefix: "Headers constructor", - argument: "Argument 1", - types: ["sequence>", "record"] - }); - }; - module.exports = { - fill, - // for test. - compareHeaderName, - Headers: Headers2, - HeadersList, - getHeadersGuard, - setHeadersGuard, - setHeadersList, - getHeadersList - }; - } - }); - - // - var require_response = __commonJS({ - ""(exports, module) { - "use strict"; - var { Headers: Headers2, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require_headers(); - var { extractBody, cloneBody, mixinBody, hasFinalizationRegistry, streamRegistry, bodyUnusable } = require_body(); - var util = require_util(); - var nodeUtil = __require("util"); - var { kEnumerableProperty } = util; - var { - isValidReasonPhrase, - isCancelled, - isAborted, - isBlobLike, - serializeJavascriptValueToJSONString, - isErrorLike, - isomorphicEncode, - environmentSettingsObject: relevantRealm - } = require_util2(); - var { - redirectStatusSet, - nullBodyStatus - } = require_constants3(); - var { kState, kHeaders } = require_symbols2(); - var { webidl } = require_webidl(); - var { FormData } = require_formdata(); - var { URLSerializer } = require_data_url(); - var { kConstruct } = require_symbols(); - var assert = __require("assert"); - var { types } = __require("util"); - var textEncoder = new TextEncoder("utf-8"); - var Response = class _Response { - // Creates network error Response. - static error() { - const responseObject = fromInnerResponse(makeNetworkError(), "immutable"); - return responseObject; - } - // https://fetch.spec.whatwg.org/#dom-response-json - static json(data, init = {}) { - webidl.argumentLengthCheck(arguments, 1, "Response.json"); - if (init !== null) { - init = webidl.converters.ResponseInit(init); - } - const bytes = textEncoder.encode( - serializeJavascriptValueToJSONString(data) - ); - const body = extractBody(bytes); - const responseObject = fromInnerResponse(makeResponse({}), "response"); - initializeResponse(responseObject, init, { body: body[0], type: "application/json" }); - return responseObject; - } - // Creates a redirect Response that redirects to url with status status. - static redirect(url, status = 302) { - webidl.argumentLengthCheck(arguments, 1, "Response.redirect"); - url = webidl.converters.USVString(url); - status = webidl.converters["unsigned short"](status); - let parsedURL; - try { - parsedURL = new URL(url, relevantRealm.settingsObject.baseUrl); - } catch (err) { - throw new TypeError(`Failed to parse URL from ${url}`, { cause: err }); - } - if (!redirectStatusSet.has(status)) { - throw new RangeError(`Invalid status code ${status}`); - } - const responseObject = fromInnerResponse(makeResponse({}), "immutable"); - responseObject[kState].status = status; - const value = isomorphicEncode(URLSerializer(parsedURL)); - responseObject[kState].headersList.append("location", value, true); - return responseObject; - } - // https://fetch.spec.whatwg.org/#dom-response - constructor(body = null, init = {}) { - webidl.util.markAsUncloneable(this); - if (body === kConstruct) { - return; - } - if (body !== null) { - body = webidl.converters.BodyInit(body); - } - init = webidl.converters.ResponseInit(init); - this[kState] = makeResponse({}); - this[kHeaders] = new Headers2(kConstruct); - setHeadersGuard(this[kHeaders], "response"); - setHeadersList(this[kHeaders], this[kState].headersList); - let bodyWithType = null; - if (body != null) { - const [extractedBody, type] = extractBody(body); - bodyWithType = { body: extractedBody, type }; - } - initializeResponse(this, init, bodyWithType); - } - // Returns response’s type, e.g., "cors". - get type() { - webidl.brandCheck(this, _Response); - return this[kState].type; - } - // Returns response’s URL, if it has one; otherwise the empty string. - get url() { - var _a; - webidl.brandCheck(this, _Response); - const urlList = this[kState].urlList; - const url = (_a = urlList[urlList.length - 1]) != null ? _a : null; - if (url === null) { - return ""; - } - return URLSerializer(url, true); - } - // Returns whether response was obtained through a redirect. - get redirected() { - webidl.brandCheck(this, _Response); - return this[kState].urlList.length > 1; - } - // Returns response’s status. - get status() { - webidl.brandCheck(this, _Response); - return this[kState].status; - } - // Returns whether response’s status is an ok status. - get ok() { - webidl.brandCheck(this, _Response); - return this[kState].status >= 200 && this[kState].status <= 299; - } - // Returns response’s status message. - get statusText() { - webidl.brandCheck(this, _Response); - return this[kState].statusText; - } - // Returns response’s headers as Headers. - get headers() { - webidl.brandCheck(this, _Response); - 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() { - var _a; - webidl.brandCheck(this, _Response); - if (bodyUnusable(this)) { - throw webidl.errors.exception({ - header: "Response.clone", - message: "Body has already been consumed." - }); - } - const clonedResponse = cloneResponse(this[kState]); - if (hasFinalizationRegistry && ((_a = this[kState].body) == null ? void 0 : _a.stream)) { - streamRegistry.register(this, new WeakRef(this[kState].body.stream)); - } - return fromInnerResponse(clonedResponse, getHeadersGuard(this[kHeaders])); - } - [nodeUtil.inspect.custom](depth, options) { - var _a; - if (options.depth === null) { - options.depth = 2; - } - (_a = options.colors) != null ? _a : options.colors = true; - const properties = { - status: this.status, - statusText: this.statusText, - headers: this.headers, - body: this.body, - bodyUsed: this.bodyUsed, - ok: this.ok, - redirected: this.redirected, - type: this.type, - url: this.url - }; - return `Response ${nodeUtil.formatWithOptions(options, properties)}`; - } - }; - 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 - }); - function cloneResponse(response) { - if (response.internalResponse) { - return filterResponse( - cloneResponse(response.internalResponse), - response.type - ); - } - const newResponse = makeResponse(__spreadProps(__spreadValues({}, response), { body: null })); - if (response.body != null) { - newResponse.body = cloneBody(newResponse, response.body); - } - return newResponse; - } - function makeResponse(init) { - return __spreadProps(__spreadValues({ - aborted: false, - rangeRequested: false, - timingAllowPassed: false, - requestIncludesCredentials: false, - type: "default", - status: 200, - timingInfo: null, - cacheState: "", - statusText: "" - }, init), { - headersList: (init == null ? void 0 : init.headersList) ? new HeadersList(init == null ? void 0 : init.headersList) : new HeadersList(), - urlList: (init == null ? void 0 : 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 isNetworkError(response) { - return ( - // A network error is a response whose type is "error", - response.type === "error" && // status is 0 - response.status === 0 - ); - } - function makeFilteredResponse(response, state) { - state = __spreadValues({ - 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; - } - }); - } - function filterResponse(response, type) { - if (type === "basic") { - return makeFilteredResponse(response, { - type: "basic", - headersList: response.headersList - }); - } else if (type === "cors") { - return makeFilteredResponse(response, { - type: "cors", - headersList: response.headersList - }); - } else if (type === "opaque") { - return makeFilteredResponse(response, { - type: "opaque", - urlList: Object.freeze([]), - status: 0, - statusText: "", - body: null - }); - } else if (type === "opaqueredirect") { - return makeFilteredResponse(response, { - type: "opaqueredirect", - status: 0, - statusText: "", - headersList: [], - body: null - }); - } else { - assert(false); - } - } - function makeAppropriateNetworkError(fetchParams, err = null) { - assert(isCancelled(fetchParams)); - 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 })); - } - function initializeResponse(response, init, body) { - 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.'); - } - if ("statusText" in init && init.statusText != null) { - if (!isValidReasonPhrase(String(init.statusText))) { - throw new TypeError("Invalid statusText"); - } - } - if ("status" in init && init.status != null) { - response[kState].status = init.status; - } - if ("statusText" in init && init.statusText != null) { - response[kState].statusText = init.statusText; - } - if ("headers" in init && init.headers != null) { - fill(response[kHeaders], init.headers); - } - if (body) { - if (nullBodyStatus.includes(response.status)) { - throw webidl.errors.exception({ - header: "Response constructor", - message: `Invalid response status code ${response.status}` - }); - } - response[kState].body = body.body; - if (body.type != null && !response[kState].headersList.contains("content-type", true)) { - response[kState].headersList.append("content-type", body.type, true); - } - } - } - function fromInnerResponse(innerResponse, guard) { - var _a; - const response = new Response(kConstruct); - response[kState] = innerResponse; - response[kHeaders] = new Headers2(kConstruct); - setHeadersList(response[kHeaders], innerResponse.headersList); - setHeadersGuard(response[kHeaders], guard); - if (hasFinalizationRegistry && ((_a = innerResponse.body) == null ? void 0 : _a.stream)) { - streamRegistry.register(response, new WeakRef(innerResponse.body.stream)); - } - return response; - } - webidl.converters.ReadableStream = webidl.interfaceConverter( - ReadableStream - ); - webidl.converters.FormData = webidl.interfaceConverter( - FormData - ); - webidl.converters.URLSearchParams = webidl.interfaceConverter( - URLSearchParams - ); - webidl.converters.XMLHttpRequestBodyInit = function(V, prefix, name) { - if (typeof V === "string") { - return webidl.converters.USVString(V, prefix, name); - } - if (isBlobLike(V)) { - return webidl.converters.Blob(V, prefix, name, { strict: false }); - } - if (ArrayBuffer.isView(V) || types.isArrayBuffer(V)) { - return webidl.converters.BufferSource(V, prefix, name); - } - if (util.isFormDataLike(V)) { - return webidl.converters.FormData(V, prefix, name, { strict: false }); - } - if (V instanceof URLSearchParams) { - return webidl.converters.URLSearchParams(V, prefix, name); - } - return webidl.converters.DOMString(V, prefix, name); - }; - webidl.converters.BodyInit = function(V, prefix, argument) { - if (V instanceof ReadableStream) { - return webidl.converters.ReadableStream(V, prefix, argument); - } - if (V == null ? void 0 : V[Symbol.asyncIterator]) { - return V; - } - return webidl.converters.XMLHttpRequestBodyInit(V, prefix, argument); - }; - 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 = { - isNetworkError, - makeNetworkError, - makeResponse, - makeAppropriateNetworkError, - filterResponse, - Response, - cloneResponse, - fromInnerResponse - }; - } - }); - - // - var require_dispatcher_weakref = __commonJS({ - ""(exports, module) { - "use strict"; - var { kConnected, kSize } = require_symbols(); - var CompatWeakRef = class { - constructor(value) { - this.value = value; - } - deref() { - return this.value[kConnected] === 0 && this.value[kSize] === 0 ? void 0 : this.value; - } - }; - var CompatFinalizer = class { - constructor(finalizer) { - this.finalizer = finalizer; - } - register(dispatcher, key) { - if (dispatcher.on) { - dispatcher.on("disconnect", () => { - if (dispatcher[kConnected] === 0 && dispatcher[kSize] === 0) { - this.finalizer(key); - } - }); - } - } - unregister(key) { - } - }; - module.exports = function() { - if (process.env.NODE_V8_COVERAGE && process.version.startsWith("v18")) { - process._rawDebug("Using compatibility WeakRef and FinalizationRegistry"); - return { - WeakRef: CompatWeakRef, - FinalizationRegistry: CompatFinalizer - }; - } - return { WeakRef, FinalizationRegistry }; - }; - } - }); - - // - var require_request2 = __commonJS({ - ""(exports, module) { - "use strict"; - var { extractBody, mixinBody, cloneBody, bodyUnusable } = require_body(); - var { Headers: Headers2, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require_headers(); - var { FinalizationRegistry: FinalizationRegistry2 } = require_dispatcher_weakref()(); - var util = require_util(); - var nodeUtil = __require("util"); - var { - isValidHTTPToken, - sameOrigin, - environmentSettingsObject - } = require_util2(); - var { - forbiddenMethodsSet, - corsSafeListedMethodsSet, - referrerPolicy, - requestRedirect, - requestMode, - requestCredentials, - requestCache, - requestDuplex - } = require_constants3(); - var { kEnumerableProperty, normalizedMethodRecordsBase, normalizedMethodRecords } = util; - var { kHeaders, kSignal, kState, kDispatcher } = require_symbols2(); - var { webidl } = require_webidl(); - var { URLSerializer } = require_data_url(); - var { kConstruct } = require_symbols(); - var assert = __require("assert"); - var { getMaxListeners, setMaxListeners, getEventListeners, defaultMaxListeners } = __require("events"); - var kAbortController = Symbol("abortController"); - var requestFinalizer = new FinalizationRegistry2(({ signal, abort }) => { - signal.removeEventListener("abort", abort); - }); - var dependentControllerMap = /* @__PURE__ */ new WeakMap(); - function buildAbort(acRef) { - return abort; - function abort() { - const ac = acRef.deref(); - if (ac !== void 0) { - requestFinalizer.unregister(abort); - this.removeEventListener("abort", abort); - ac.abort(this.reason); - const controllerList = dependentControllerMap.get(ac.signal); - if (controllerList !== void 0) { - if (controllerList.size !== 0) { - for (const ref of controllerList) { - const ctrl = ref.deref(); - if (ctrl !== void 0) { - ctrl.abort(this.reason); - } - } - controllerList.clear(); - } - dependentControllerMap.delete(ac.signal); - } - } - } - } - var patchMethodWarning = false; - var Request = class _Request { - // https://fetch.spec.whatwg.org/#dom-request - constructor(input, init = {}) { - var _a, _b, _c; - webidl.util.markAsUncloneable(this); - if (input === kConstruct) { - return; - } - const prefix = "Request constructor"; - webidl.argumentLengthCheck(arguments, 1, prefix); - input = webidl.converters.RequestInfo(input, prefix, "input"); - init = webidl.converters.RequestInit(init, prefix, "init"); - let request = null; - let fallbackMode = null; - const baseUrl = environmentSettingsObject.settingsObject.baseUrl; - let signal = null; - if (typeof input === "string") { - this[kDispatcher] = init.dispatcher; - let parsedURL; - try { - parsedURL = new URL(input, baseUrl); - } catch (err) { - throw new TypeError("Failed to parse URL from " + input, { cause: err }); - } - if (parsedURL.username || parsedURL.password) { - throw new TypeError( - "Request cannot be constructed from a URL that includes credentials: " + input - ); - } - request = makeRequest({ urlList: [parsedURL] }); - fallbackMode = "cors"; - } else { - this[kDispatcher] = init.dispatcher || input[kDispatcher]; - assert(input instanceof _Request); - request = input[kState]; - signal = input[kSignal]; - } - const origin = environmentSettingsObject.settingsObject.origin; - let window = "client"; - if (((_b = (_a = request.window) == null ? void 0 : _a.constructor) == null ? void 0 : _b.name) === "EnvironmentSettingsObject" && sameOrigin(request.window, origin)) { - window = request.window; - } - if (init.window != null) { - throw new TypeError(`'window' option '${window}' must be null`); - } - if ("window" in init) { - window = "no-window"; - } - 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: environmentSettingsObject.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; - if (initHasKey) { - if (request.mode === "navigate") { - request.mode = "same-origin"; - } - request.reloadNavigation = false; - request.historyNavigation = false; - request.origin = "client"; - request.referrer = "client"; - request.referrerPolicy = ""; - request.url = request.urlList[request.urlList.length - 1]; - request.urlList = [request.url]; - } - if (init.referrer !== void 0) { - const referrer = init.referrer; - if (referrer === "") { - request.referrer = "no-referrer"; - } else { - let parsedReferrer; - try { - parsedReferrer = new URL(referrer, baseUrl); - } catch (err) { - throw new TypeError(`Referrer "${referrer}" is not a valid URL.`, { cause: err }); - } - if (parsedReferrer.protocol === "about:" && parsedReferrer.hostname === "client" || origin && !sameOrigin(parsedReferrer, environmentSettingsObject.settingsObject.baseUrl)) { - request.referrer = "client"; - } else { - request.referrer = parsedReferrer; - } - } - } - if (init.referrerPolicy !== void 0) { - request.referrerPolicy = init.referrerPolicy; - } - let mode; - if (init.mode !== void 0) { - mode = init.mode; - } else { - mode = fallbackMode; - } - if (mode === "navigate") { - throw webidl.errors.exception({ - header: "Request constructor", - message: "invalid request mode navigate." - }); - } - if (mode != null) { - request.mode = mode; - } - if (init.credentials !== void 0) { - request.credentials = init.credentials; - } - if (init.cache !== void 0) { - request.cache = init.cache; - } - if (request.cache === "only-if-cached" && request.mode !== "same-origin") { - throw new TypeError( - "'only-if-cached' can be set only with 'same-origin' mode" - ); - } - if (init.redirect !== void 0) { - request.redirect = init.redirect; - } - if (init.integrity != null) { - request.integrity = String(init.integrity); - } - if (init.keepalive !== void 0) { - request.keepalive = Boolean(init.keepalive); - } - if (init.method !== void 0) { - let method = init.method; - const mayBeNormalized = normalizedMethodRecords[method]; - if (mayBeNormalized !== void 0) { - request.method = mayBeNormalized; - } else { - if (!isValidHTTPToken(method)) { - throw new TypeError(`'${method}' is not a valid HTTP method.`); - } - const upperCase = method.toUpperCase(); - if (forbiddenMethodsSet.has(upperCase)) { - throw new TypeError(`'${method}' HTTP method is unsupported.`); - } - method = (_c = normalizedMethodRecordsBase[upperCase]) != null ? _c : method; - request.method = method; - } - if (!patchMethodWarning && request.method === "patch") { - process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.", { - code: "UNDICI-FETCH-patch" - }); - patchMethodWarning = true; - } - } - if (init.signal !== void 0) { - signal = init.signal; - } - this[kState] = request; - const ac = new AbortController(); - this[kSignal] = ac.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 { - this[kAbortController] = ac; - const acRef = new WeakRef(ac); - const abort = buildAbort(acRef); - try { - if (typeof getMaxListeners === "function" && getMaxListeners(signal) === defaultMaxListeners) { - setMaxListeners(1500, signal); - } else if (getEventListeners(signal, "abort").length >= defaultMaxListeners) { - setMaxListeners(1500, signal); - } - } catch (e) { - } - util.addAbortListener(signal, abort); - requestFinalizer.register(ac, { signal, abort }, abort); - } - } - this[kHeaders] = new Headers2(kConstruct); - setHeadersList(this[kHeaders], request.headersList); - setHeadersGuard(this[kHeaders], "request"); - if (mode === "no-cors") { - if (!corsSafeListedMethodsSet.has(request.method)) { - throw new TypeError( - `'${request.method} is unsupported in no-cors mode.` - ); - } - setHeadersGuard(this[kHeaders], "request-no-cors"); - } - if (initHasKey) { - const headersList = getHeadersList(this[kHeaders]); - const headers = init.headers !== void 0 ? init.headers : new HeadersList(headersList); - headersList.clear(); - if (headers instanceof HeadersList) { - for (const { name, value } of headers.rawValues()) { - headersList.append(name, value, false); - } - headersList.cookies = headers.cookies; - } else { - fillHeaders(this[kHeaders], headers); - } - } - const inputBody = input instanceof _Request ? input[kState].body : null; - if ((init.body != null || inputBody != null) && (request.method === "GET" || request.method === "HEAD")) { - throw new TypeError("Request with GET/HEAD method cannot have body."); - } - let initBody = null; - if (init.body != null) { - const [extractedBody, contentType] = extractBody( - init.body, - request.keepalive - ); - initBody = extractedBody; - if (contentType && !getHeadersList(this[kHeaders]).contains("content-type", true)) { - this[kHeaders].append("content-type", contentType); - } - } - const inputOrInitBody = initBody != null ? initBody : inputBody; - if (inputOrInitBody != null && inputOrInitBody.source == null) { - if (initBody != null && init.duplex == null) { - throw new TypeError("RequestInit: duplex option is required when sending a body."); - } - if (request.mode !== "same-origin" && request.mode !== "cors") { - throw new TypeError( - 'If request is made from ReadableStream, mode should be "same-origin" or "cors"' - ); - } - request.useCORSPreflightFlag = true; - } - let finalBody = inputOrInitBody; - if (initBody == null && inputBody != null) { - if (bodyUnusable(input)) { - throw new TypeError( - "Cannot construct a Request with a Request object that has already been used." - ); - } - const identityTransform = new TransformStream(); - inputBody.stream.pipeThrough(identityTransform); - finalBody = { - source: inputBody.source, - length: inputBody.length, - stream: identityTransform.readable - }; - } - this[kState].body = finalBody; - } - // Returns request’s HTTP method, which is "GET" by default. - get method() { - webidl.brandCheck(this, _Request); - return this[kState].method; - } - // Returns the URL of request as a string. - get url() { - webidl.brandCheck(this, _Request); - 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); - return this[kHeaders]; - } - // Returns the kind of resource requested by request, e.g., "document" - // or "script". - get destination() { - webidl.brandCheck(this, _Request); - 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); - if (this[kState].referrer === "no-referrer") { - return ""; - } - if (this[kState].referrer === "client") { - return "about:client"; - } - 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); - 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); - 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() { - 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); - 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); - 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); - 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); - return this[kState].keepalive; - } - // Returns a boolean indicating whether or not request is for a reload - // navigation. - get isReloadNavigation() { - webidl.brandCheck(this, _Request); - return this[kState].reloadNavigation; - } - // Returns a boolean indicating whether or not request is for a history - // navigation (a.k.a. back-forward navigation). - get isHistoryNavigation() { - webidl.brandCheck(this, _Request); - 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); - 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); - if (bodyUnusable(this)) { - throw new TypeError("unusable"); - } - const clonedRequest = cloneRequest(this[kState]); - const ac = new AbortController(); - if (this.signal.aborted) { - ac.abort(this.signal.reason); - } else { - let list = dependentControllerMap.get(this.signal); - if (list === void 0) { - list = /* @__PURE__ */ new Set(); - dependentControllerMap.set(this.signal, list); - } - const acRef = new WeakRef(ac); - list.add(acRef); - util.addAbortListener( - ac.signal, - buildAbort(acRef) - ); - } - return fromInnerRequest(clonedRequest, ac.signal, getHeadersGuard(this[kHeaders])); - } - [nodeUtil.inspect.custom](depth, options) { - var _a; - if (options.depth === null) { - options.depth = 2; - } - (_a = options.colors) != null ? _a : options.colors = true; - const properties = { - method: this.method, - url: this.url, - headers: this.headers, - destination: this.destination, - referrer: this.referrer, - referrerPolicy: this.referrerPolicy, - mode: this.mode, - credentials: this.credentials, - cache: this.cache, - redirect: this.redirect, - integrity: this.integrity, - keepalive: this.keepalive, - isReloadNavigation: this.isReloadNavigation, - isHistoryNavigation: this.isHistoryNavigation, - signal: this.signal - }; - return `Request ${nodeUtil.formatWithOptions(options, properties)}`; - } - }; - mixinBody(Request); - function makeRequest(init) { - var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I; - return { - method: (_a = init.method) != null ? _a : "GET", - localURLsOnly: (_b = init.localURLsOnly) != null ? _b : false, - unsafeRequest: (_c = init.unsafeRequest) != null ? _c : false, - body: (_d = init.body) != null ? _d : null, - client: (_e = init.client) != null ? _e : null, - reservedClient: (_f = init.reservedClient) != null ? _f : null, - replacesClientId: (_g = init.replacesClientId) != null ? _g : "", - window: (_h = init.window) != null ? _h : "client", - keepalive: (_i = init.keepalive) != null ? _i : false, - serviceWorkers: (_j = init.serviceWorkers) != null ? _j : "all", - initiator: (_k = init.initiator) != null ? _k : "", - destination: (_l = init.destination) != null ? _l : "", - priority: (_m = init.priority) != null ? _m : null, - origin: (_n = init.origin) != null ? _n : "client", - policyContainer: (_o = init.policyContainer) != null ? _o : "client", - referrer: (_p = init.referrer) != null ? _p : "client", - referrerPolicy: (_q = init.referrerPolicy) != null ? _q : "", - mode: (_r = init.mode) != null ? _r : "no-cors", - useCORSPreflightFlag: (_s = init.useCORSPreflightFlag) != null ? _s : false, - credentials: (_t = init.credentials) != null ? _t : "same-origin", - useCredentials: (_u = init.useCredentials) != null ? _u : false, - cache: (_v = init.cache) != null ? _v : "default", - redirect: (_w = init.redirect) != null ? _w : "follow", - integrity: (_x = init.integrity) != null ? _x : "", - cryptoGraphicsNonceMetadata: (_y = init.cryptoGraphicsNonceMetadata) != null ? _y : "", - parserMetadata: (_z = init.parserMetadata) != null ? _z : "", - reloadNavigation: (_A = init.reloadNavigation) != null ? _A : false, - historyNavigation: (_B = init.historyNavigation) != null ? _B : false, - userActivation: (_C = init.userActivation) != null ? _C : false, - taintedOrigin: (_D = init.taintedOrigin) != null ? _D : false, - redirectCount: (_E = init.redirectCount) != null ? _E : 0, - responseTainting: (_F = init.responseTainting) != null ? _F : "basic", - preventNoCacheCacheControlHeaderModification: (_G = init.preventNoCacheCacheControlHeaderModification) != null ? _G : false, - done: (_H = init.done) != null ? _H : false, - timingAllowFailed: (_I = init.timingAllowFailed) != null ? _I : false, - urlList: init.urlList, - url: init.urlList[0], - headersList: init.headersList ? new HeadersList(init.headersList) : new HeadersList() - }; - } - function cloneRequest(request) { - const newRequest = makeRequest(__spreadProps(__spreadValues({}, request), { body: null })); - if (request.body != null) { - newRequest.body = cloneBody(newRequest, request.body); - } - return newRequest; - } - function fromInnerRequest(innerRequest, signal, guard) { - const request = new Request(kConstruct); - request[kState] = innerRequest; - request[kSignal] = signal; - request[kHeaders] = new Headers2(kConstruct); - setHeadersList(request[kHeaders], innerRequest.headersList); - setHeadersGuard(request[kHeaders], guard); - return request; - } - 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 - ); - webidl.converters.RequestInfo = function(V, prefix, argument) { - if (typeof V === "string") { - return webidl.converters.USVString(V, prefix, argument); - } - if (V instanceof Request) { - return webidl.converters.Request(V, prefix, argument); - } - return webidl.converters.USVString(V, prefix, argument); - }; - webidl.converters.AbortSignal = webidl.interfaceConverter( - AbortSignal - ); - 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, - "RequestInit", - "signal", - { strict: false } - ) - ) - }, - { - key: "window", - converter: webidl.converters.any - }, - { - key: "duplex", - converter: webidl.converters.DOMString, - allowedValues: requestDuplex - }, - { - key: "dispatcher", - // undici specific option - converter: webidl.converters.any - } - ]); - module.exports = { Request, makeRequest, fromInnerRequest, cloneRequest }; - } - }); - - // - var require_fetch = __commonJS({ - ""(exports, module) { - "use strict"; - var { - makeNetworkError, - makeAppropriateNetworkError, - filterResponse, - makeResponse, - fromInnerResponse - } = require_response(); - var { HeadersList } = require_headers(); - var { Request, cloneRequest } = require_request2(); - var zlib = __require("zlib"); - var { - 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, - clampAndCoarsenConnectionTimingInfo, - simpleRangeHeaderValue, - buildContentRange, - createInflate, - extractMimeType - } = require_util2(); - var { kState, kDispatcher } = require_symbols2(); - var assert = __require("assert"); - var { safelyExtractBody, extractBody } = require_body(); - var { - redirectStatusSet, - nullBodyStatus, - safeMethodsSet, - requestBodyHeader, - subresourceSet - } = require_constants3(); - var EE = __require("events"); - var { Readable, pipeline, finished } = __require("stream"); - var { addAbortListener, isErrored, isReadable, bufferToLowerCasedHeaderName } = require_util(); - var { dataURLProcessor, serializeAMimeType, minimizeSupportedMimeType } = require_data_url(); - var { getGlobalDispatcher } = require_global2(); - var { webidl } = require_webidl(); - var { STATUS_CODES } = __require("http"); - var GET_OR_HEAD = ["GET", "HEAD"]; - var defaultUserAgent = typeof __UNDICI_IS_NODE__ !== "undefined" || typeof esbuildDetection !== "undefined" ? "node" : "undici"; - var resolveObjectURL; - var Fetch = class extends EE { - constructor(dispatcher) { - super(); - this.dispatcher = dispatcher; - this.connection = null; - this.dump = false; - this.state = "ongoing"; - } - terminate(reason) { - var _a; - if (this.state !== "ongoing") { - return; - } - this.state = "terminated"; - (_a = this.connection) == null ? void 0 : _a.destroy(reason); - this.emit("terminated", reason); - } - // https://fetch.spec.whatwg.org/#fetch-controller-abort - abort(error) { - var _a; - if (this.state !== "ongoing") { - return; - } - this.state = "aborted"; - if (!error) { - error = new DOMException("The operation was aborted.", "AbortError"); - } - this.serializedAbortReason = error; - (_a = this.connection) == null ? void 0 : _a.destroy(error); - this.emit("terminated", error); - } - }; - function handleFetchDone(response) { - finalizeAndReportTiming(response, "fetch"); - } - function fetch(input, init = void 0) { - var _a; - webidl.argumentLengthCheck(arguments, 1, "globalThis.fetch"); - let p = createDeferredPromise(); - let requestObject; - try { - requestObject = new Request(input, init); - } catch (e) { - p.reject(e); - return p.promise; - } - const request = requestObject[kState]; - if (requestObject.signal.aborted) { - abortFetch(p, request, null, requestObject.signal.reason); - return p.promise; - } - const globalObject = request.client.globalObject; - if (((_a = globalObject == null ? void 0 : globalObject.constructor) == null ? void 0 : _a.name) === "ServiceWorkerGlobalScope") { - request.serviceWorkers = "none"; - } - let responseObject = null; - let locallyAborted = false; - let controller = null; - addAbortListener( - requestObject.signal, - () => { - locallyAborted = true; - assert(controller != null); - controller.abort(requestObject.signal.reason); - const realResponse = responseObject == null ? void 0 : responseObject.deref(); - abortFetch(p, request, realResponse, requestObject.signal.reason); - } - ); - const processResponse = (response) => { - if (locallyAborted) { - return; - } - if (response.aborted) { - abortFetch(p, request, responseObject, controller.serializedAbortReason); - return; - } - if (response.type === "error") { - p.reject(new TypeError("fetch failed", { cause: response.error })); - return; - } - responseObject = new WeakRef(fromInnerResponse(response, "immutable")); - p.resolve(responseObject.deref()); - p = null; - }; - controller = fetching({ - request, - processResponseEndOfBody: handleFetchDone, - processResponse, - dispatcher: requestObject[kDispatcher] - // undici - }); - return p.promise; - } - function finalizeAndReportTiming(response, initiatorType = "other") { - var _a; - if (response.type === "error" && response.aborted) { - return; - } - if (!((_a = response.urlList) == null ? void 0 : _a.length)) { - return; - } - const originalURL = response.urlList[0]; - let timingInfo = response.timingInfo; - let cacheState = response.cacheState; - if (!urlIsHttpHttpsScheme(originalURL)) { - return; - } - if (timingInfo === null) { - return; - } - if (!response.timingAllowPassed) { - timingInfo = createOpaqueTimingInfo({ - startTime: timingInfo.startTime - }); - cacheState = ""; - } - timingInfo.endTime = coarsenedSharedCurrentTime(); - response.timingInfo = timingInfo; - markResourceTiming( - timingInfo, - originalURL.href, - initiatorType, - globalThis, - cacheState - ); - } - var markResourceTiming = performance.markResourceTiming; - function abortFetch(p, request, responseObject, error) { - var _a, _b; - if (p) { - p.reject(error); - } - if (request.body != null && isReadable((_a = request.body) == null ? void 0 : _a.stream)) { - request.body.stream.cancel(error).catch((err) => { - if (err.code === "ERR_INVALID_STATE") { - return; - } - throw err; - }); - } - if (responseObject == null) { - return; - } - const response = responseObject[kState]; - if (response.body != null && isReadable((_b = response.body) == null ? void 0 : _b.stream)) { - response.body.stream.cancel(error).catch((err) => { - if (err.code === "ERR_INVALID_STATE") { - return; - } - throw err; - }); - } - } - function fetching({ - request, - processRequestBodyChunkLength, - processRequestEndOfBody, - processResponse, - processResponseEndOfBody, - processResponseConsumeBody, - useParallelQueue = false, - dispatcher = getGlobalDispatcher() - // undici - }) { - var _a, _b, _c; - assert(dispatcher); - let taskDestination = null; - let crossOriginIsolatedCapability = false; - if (request.client != null) { - taskDestination = request.client.globalObject; - crossOriginIsolatedCapability = request.client.crossOriginIsolatedCapability; - } - const currentTime = coarsenedSharedCurrentTime(crossOriginIsolatedCapability); - const timingInfo = createOpaqueTimingInfo({ - startTime: currentTime - }); - const fetchParams = { - controller: new Fetch(dispatcher), - request, - timingInfo, - processRequestBodyChunkLength, - processRequestEndOfBody, - processResponse, - processResponseConsumeBody, - processResponseEndOfBody, - taskDestination, - crossOriginIsolatedCapability - }; - assert(!request.body || request.body.stream); - if (request.window === "client") { - request.window = ((_c = (_b = (_a = request.client) == null ? void 0 : _a.globalObject) == null ? void 0 : _b.constructor) == null ? void 0 : _c.name) === "Window" ? request.client : "no-window"; - } - if (request.origin === "client") { - request.origin = request.client.origin; - } - if (request.policyContainer === "client") { - if (request.client != null) { - request.policyContainer = clonePolicyContainer( - request.client.policyContainer - ); - } else { - request.policyContainer = makePolicyContainer(); - } - } - if (!request.headersList.contains("accept", true)) { - const value = "*/*"; - request.headersList.append("accept", value, true); - } - if (!request.headersList.contains("accept-language", true)) { - request.headersList.append("accept-language", "*", true); - } - if (request.priority === null) { - } - if (subresourceSet.has(request.destination)) { - } - mainFetch(fetchParams).catch((err) => { - fetchParams.controller.terminate(err); - }); - return fetchParams.controller; - } - function mainFetch(fetchParams, recursive = false) { - return __async(this, null, function* () { - const request = fetchParams.request; - let response = null; - if (request.localURLsOnly && !urlIsLocal(requestCurrentURL(request))) { - response = makeNetworkError("local URLs only"); - } - tryUpgradeRequestToAPotentiallyTrustworthyURL(request); - if (requestBadPort(request) === "blocked") { - response = makeNetworkError("bad port"); - } - if (request.referrerPolicy === "") { - request.referrerPolicy = request.policyContainer.referrerPolicy; - } - if (request.referrer !== "no-referrer") { - request.referrer = determineRequestsReferrer(request); - } - if (response === null) { - response = yield (() => __async(this, null, function* () { - 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") - ) { - request.responseTainting = "basic"; - return yield schemeFetch(fetchParams); - } - if (request.mode === "same-origin") { - return makeNetworkError('request mode cannot be "same-origin"'); - } - if (request.mode === "no-cors") { - if (request.redirect !== "follow") { - return makeNetworkError( - 'redirect mode cannot be "follow" for "no-cors" request' - ); - } - request.responseTainting = "opaque"; - return yield schemeFetch(fetchParams); - } - if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) { - return makeNetworkError("URL scheme must be a HTTP(S) scheme"); - } - request.responseTainting = "cors"; - return yield httpFetch(fetchParams); - }))(); - } - if (recursive) { - return response; - } - if (response.status !== 0 && !response.internalResponse) { - if (request.responseTainting === "cors") { - } - 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); - } - } - let internalResponse = response.status === 0 ? response : response.internalResponse; - if (internalResponse.urlList.length === 0) { - internalResponse.urlList.push(...request.urlList); - } - if (!request.timingAllowFailed) { - response.timingAllowPassed = true; - } - if (response.type === "opaque" && internalResponse.status === 206 && internalResponse.rangeRequested && !request.headers.contains("range", true)) { - response = internalResponse = makeNetworkError(); - } - if (response.status !== 0 && (request.method === "HEAD" || request.method === "CONNECT" || nullBodyStatus.includes(internalResponse.status))) { - internalResponse.body = null; - fetchParams.controller.dump = true; - } - if (request.integrity) { - const processBodyError = (reason) => fetchFinale(fetchParams, makeNetworkError(reason)); - if (request.responseTainting === "opaque" || response.body == null) { - processBodyError(response.error); - return; - } - const processBody = (bytes) => { - if (!bytesMatch(bytes, request.integrity)) { - processBodyError("integrity mismatch"); - return; - } - response.body = safelyExtractBody(bytes)[0]; - fetchFinale(fetchParams, response); - }; - yield fullyReadBody(response.body, processBody, processBodyError); - } else { - fetchFinale(fetchParams, response); - } - }); - } - function schemeFetch(fetchParams) { - if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) { - return Promise.resolve(makeAppropriateNetworkError(fetchParams)); - } - const { request } = fetchParams; - const { protocol: scheme } = requestCurrentURL(request); - switch (scheme) { - case "about:": { - return Promise.resolve(makeNetworkError("about scheme is not supported")); - } - case "blob:": { - if (!resolveObjectURL) { - resolveObjectURL = __require("buffer").resolveObjectURL; - } - const blobURLEntry = requestCurrentURL(request); - if (blobURLEntry.search.length !== 0) { - return Promise.resolve(makeNetworkError("NetworkError when attempting to fetch resource.")); - } - const blob = resolveObjectURL(blobURLEntry.toString()); - if (request.method !== "GET" || !isBlobLike(blob)) { - return Promise.resolve(makeNetworkError("invalid method")); - } - const response = makeResponse(); - const fullLength = blob.size; - const serializedFullLength = isomorphicEncode(`${fullLength}`); - const type = blob.type; - if (!request.headersList.contains("range", true)) { - const bodyWithType = extractBody(blob); - response.statusText = "OK"; - response.body = bodyWithType[0]; - response.headersList.set("content-length", serializedFullLength, true); - response.headersList.set("content-type", type, true); - } else { - response.rangeRequested = true; - const rangeHeader = request.headersList.get("range", true); - const rangeValue = simpleRangeHeaderValue(rangeHeader, true); - if (rangeValue === "failure") { - return Promise.resolve(makeNetworkError("failed to fetch the data URL")); - } - let { rangeStartValue: rangeStart, rangeEndValue: rangeEnd } = rangeValue; - if (rangeStart === null) { - rangeStart = fullLength - rangeEnd; - rangeEnd = rangeStart + rangeEnd - 1; - } else { - if (rangeStart >= fullLength) { - return Promise.resolve(makeNetworkError("Range start is greater than the blob's size.")); - } - if (rangeEnd === null || rangeEnd >= fullLength) { - rangeEnd = fullLength - 1; - } - } - const slicedBlob = blob.slice(rangeStart, rangeEnd, type); - const slicedBodyWithType = extractBody(slicedBlob); - response.body = slicedBodyWithType[0]; - const serializedSlicedLength = isomorphicEncode(`${slicedBlob.size}`); - const contentRange = buildContentRange(rangeStart, rangeEnd, fullLength); - response.status = 206; - response.statusText = "Partial Content"; - response.headersList.set("content-length", serializedSlicedLength, true); - response.headersList.set("content-type", type, true); - response.headersList.set("content-range", contentRange, true); - } - return Promise.resolve(response); - } - case "data:": { - const currentURL = requestCurrentURL(request); - const dataURLStruct = dataURLProcessor(currentURL); - if (dataURLStruct === "failure") { - return Promise.resolve(makeNetworkError("failed to fetch the data URL")); - } - const mimeType = serializeAMimeType(dataURLStruct.mimeType); - return Promise.resolve(makeResponse({ - statusText: "OK", - headersList: [ - ["content-type", { name: "Content-Type", value: mimeType }] - ], - body: safelyExtractBody(dataURLStruct.body)[0] - })); - } - case "file:": { - return Promise.resolve(makeNetworkError("not implemented... yet...")); - } - case "http:": - case "https:": { - return httpFetch(fetchParams).catch((err) => makeNetworkError(err)); - } - default: { - return Promise.resolve(makeNetworkError("unknown scheme")); - } - } - } - function finalizeResponse(fetchParams, response) { - fetchParams.request.done = true; - if (fetchParams.processResponseDone != null) { - queueMicrotask(() => fetchParams.processResponseDone(response)); - } - } - function fetchFinale(fetchParams, response) { - var _a; - let timingInfo = fetchParams.timingInfo; - const processResponseEndOfBody = () => { - const unsafeEndTime = Date.now(); - if (fetchParams.request.destination === "document") { - fetchParams.controller.fullTimingInfo = timingInfo; - } - fetchParams.controller.reportTimingSteps = () => { - if (fetchParams.request.url.protocol !== "https:") { - return; - } - timingInfo.endTime = unsafeEndTime; - let cacheState = response.cacheState; - const bodyInfo = response.bodyInfo; - if (!response.timingAllowPassed) { - timingInfo = createOpaqueTimingInfo(timingInfo); - cacheState = ""; - } - let responseStatus = 0; - if (fetchParams.request.mode !== "navigator" || !response.hasCrossOriginRedirects) { - responseStatus = response.status; - const mimeType = extractMimeType(response.headersList); - if (mimeType !== "failure") { - bodyInfo.contentType = minimizeSupportedMimeType(mimeType); - } - } - if (fetchParams.request.initiatorType != null) { - markResourceTiming(timingInfo, fetchParams.request.url.href, fetchParams.request.initiatorType, globalThis, cacheState, bodyInfo, responseStatus); - } - }; - const processResponseEndOfBodyTask = () => { - fetchParams.request.done = true; - if (fetchParams.processResponseEndOfBody != null) { - queueMicrotask(() => fetchParams.processResponseEndOfBody(response)); - } - if (fetchParams.request.initiatorType != null) { - fetchParams.controller.reportTimingSteps(); - } - }; - queueMicrotask(() => processResponseEndOfBodyTask()); - }; - if (fetchParams.processResponse != null) { - queueMicrotask(() => { - fetchParams.processResponse(response); - fetchParams.processResponse = null; - }); - } - const internalResponse = response.type === "error" ? response : (_a = response.internalResponse) != null ? _a : response; - if (internalResponse.body == null) { - processResponseEndOfBody(); - } else { - finished(internalResponse.body.stream, () => { - processResponseEndOfBody(); - }); - } - } - function httpFetch(fetchParams) { - return __async(this, null, function* () { - const request = fetchParams.request; - let response = null; - let actualResponse = null; - const timingInfo = fetchParams.timingInfo; - if (request.serviceWorkers === "all") { - } - if (response === null) { - if (request.redirect === "follow") { - request.serviceWorkers = "none"; - } - actualResponse = response = yield httpNetworkOrCacheFetch(fetchParams); - if (request.responseTainting === "cors" && corsCheck(request, response) === "failure") { - return makeNetworkError("cors failure"); - } - if (TAOCheck(request, response) === "failure") { - request.timingAllowFailed = true; - } - } - if ((request.responseTainting === "opaque" || response.type === "opaque") && crossOriginResourcePolicyCheck( - request.origin, - request.client, - request.destination, - actualResponse - ) === "blocked") { - return makeNetworkError("blocked"); - } - if (redirectStatusSet.has(actualResponse.status)) { - if (request.redirect !== "manual") { - fetchParams.controller.connection.destroy(void 0, false); - } - if (request.redirect === "error") { - response = makeNetworkError("unexpected redirect"); - } else if (request.redirect === "manual") { - response = actualResponse; - } else if (request.redirect === "follow") { - response = yield httpRedirectFetch(fetchParams, response); - } else { - assert(false); - } - } - response.timingInfo = timingInfo; - return response; - }); - } - function httpRedirectFetch(fetchParams, response) { - const request = fetchParams.request; - const actualResponse = response.internalResponse ? response.internalResponse : response; - let locationURL; - try { - locationURL = responseLocationURL( - actualResponse, - requestCurrentURL(request).hash - ); - if (locationURL == null) { - return response; - } - } catch (err) { - return Promise.resolve(makeNetworkError(err)); - } - if (!urlIsHttpHttpsScheme(locationURL)) { - return Promise.resolve(makeNetworkError("URL scheme must be a HTTP(S) scheme")); - } - if (request.redirectCount === 20) { - return Promise.resolve(makeNetworkError("redirect count exceeded")); - } - request.redirectCount += 1; - if (request.mode === "cors" && (locationURL.username || locationURL.password) && !sameOrigin(request, locationURL)) { - return Promise.resolve(makeNetworkError('cross origin not allowed for request mode "cors"')); - } - if (request.responseTainting === "cors" && (locationURL.username || locationURL.password)) { - return Promise.resolve(makeNetworkError( - 'URL cannot contain credentials for request mode "cors"' - )); - } - if (actualResponse.status !== 303 && request.body != null && request.body.source == null) { - return Promise.resolve(makeNetworkError()); - } - if ([301, 302].includes(actualResponse.status) && request.method === "POST" || actualResponse.status === 303 && !GET_OR_HEAD.includes(request.method)) { - request.method = "GET"; - request.body = null; - for (const headerName of requestBodyHeader) { - request.headersList.delete(headerName); - } - } - if (!sameOrigin(requestCurrentURL(request), locationURL)) { - request.headersList.delete("authorization", true); - request.headersList.delete("proxy-authorization", true); - request.headersList.delete("cookie", true); - request.headersList.delete("host", true); - } - if (request.body != null) { - assert(request.body.source != null); - request.body = safelyExtractBody(request.body.source)[0]; - } - const timingInfo = fetchParams.timingInfo; - timingInfo.redirectEndTime = timingInfo.postRedirectStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); - if (timingInfo.redirectStartTime === 0) { - timingInfo.redirectStartTime = timingInfo.startTime; - } - request.urlList.push(locationURL); - setRequestReferrerPolicyOnRedirect(request, actualResponse); - return mainFetch(fetchParams, true); - } - function httpNetworkOrCacheFetch(fetchParams, isAuthenticationFetch = false, isNewConnectionFetch = false) { - return __async(this, null, function* () { - const request = fetchParams.request; - let httpFetchParams = null; - let httpRequest = null; - let response = null; - const httpCache = null; - const revalidatingFlag = false; - if (request.window === "no-window" && request.redirect === "error") { - httpFetchParams = fetchParams; - httpRequest = request; - } else { - httpRequest = cloneRequest(request); - httpFetchParams = __spreadValues({}, fetchParams); - httpFetchParams.request = httpRequest; - } - const includeCredentials = request.credentials === "include" || request.credentials === "same-origin" && request.responseTainting === "basic"; - const contentLength = httpRequest.body ? httpRequest.body.length : null; - let contentLengthHeaderValue = null; - if (httpRequest.body == null && ["POST", "PUT"].includes(httpRequest.method)) { - contentLengthHeaderValue = "0"; - } - if (contentLength != null) { - contentLengthHeaderValue = isomorphicEncode(`${contentLength}`); - } - if (contentLengthHeaderValue != null) { - httpRequest.headersList.append("content-length", contentLengthHeaderValue, true); - } - if (contentLength != null && httpRequest.keepalive) { - } - if (httpRequest.referrer instanceof URL) { - httpRequest.headersList.append("referer", isomorphicEncode(httpRequest.referrer.href), true); - } - appendRequestOriginHeader(httpRequest); - appendFetchMetadata(httpRequest); - if (!httpRequest.headersList.contains("user-agent", true)) { - httpRequest.headersList.append("user-agent", defaultUserAgent); - } - if (httpRequest.cache === "default" && (httpRequest.headersList.contains("if-modified-since", true) || httpRequest.headersList.contains("if-none-match", true) || httpRequest.headersList.contains("if-unmodified-since", true) || httpRequest.headersList.contains("if-match", true) || httpRequest.headersList.contains("if-range", true))) { - httpRequest.cache = "no-store"; - } - if (httpRequest.cache === "no-cache" && !httpRequest.preventNoCacheCacheControlHeaderModification && !httpRequest.headersList.contains("cache-control", true)) { - httpRequest.headersList.append("cache-control", "max-age=0", true); - } - if (httpRequest.cache === "no-store" || httpRequest.cache === "reload") { - if (!httpRequest.headersList.contains("pragma", true)) { - httpRequest.headersList.append("pragma", "no-cache", true); - } - if (!httpRequest.headersList.contains("cache-control", true)) { - httpRequest.headersList.append("cache-control", "no-cache", true); - } - } - if (httpRequest.headersList.contains("range", true)) { - httpRequest.headersList.append("accept-encoding", "identity", true); - } - if (!httpRequest.headersList.contains("accept-encoding", true)) { - if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) { - httpRequest.headersList.append("accept-encoding", "br, gzip, deflate", true); - } else { - httpRequest.headersList.append("accept-encoding", "gzip, deflate", true); - } - } - httpRequest.headersList.delete("host", true); - if (includeCredentials) { - } - if (httpCache == null) { - httpRequest.cache = "no-store"; - } - if (httpRequest.cache !== "no-store" && httpRequest.cache !== "reload") { - } - if (response == null) { - if (httpRequest.cache === "only-if-cached") { - return makeNetworkError("only if cached"); - } - const forwardResponse = yield httpNetworkFetch( - httpFetchParams, - includeCredentials, - isNewConnectionFetch - ); - if (!safeMethodsSet.has(httpRequest.method) && forwardResponse.status >= 200 && forwardResponse.status <= 399) { - } - if (revalidatingFlag && forwardResponse.status === 304) { - } - if (response == null) { - response = forwardResponse; - } - } - response.urlList = [...httpRequest.urlList]; - if (httpRequest.headersList.contains("range", true)) { - response.rangeRequested = true; - } - response.requestIncludesCredentials = includeCredentials; - if (response.status === 407) { - if (request.window === "no-window") { - return makeNetworkError(); - } - if (isCancelled(fetchParams)) { - return makeAppropriateNetworkError(fetchParams); - } - return makeNetworkError("proxy authentication required"); - } - 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) - ) { - if (isCancelled(fetchParams)) { - return makeAppropriateNetworkError(fetchParams); - } - fetchParams.controller.connection.destroy(); - response = yield httpNetworkOrCacheFetch( - fetchParams, - isAuthenticationFetch, - true - ); - } - if (isAuthenticationFetch) { - } - return response; - }); - } - function httpNetworkFetch(fetchParams, includeCredentials = false, forceNewConnection = false) { - return __async(this, null, function* () { - assert(!fetchParams.controller.connection || fetchParams.controller.connection.destroyed); - fetchParams.controller.connection = { - abort: null, - destroyed: false, - destroy(err, abort = true) { - var _a2; - if (!this.destroyed) { - this.destroyed = true; - if (abort) { - (_a2 = this.abort) == null ? void 0 : _a2.call(this, err != null ? err : new DOMException("The operation was aborted.", "AbortError")); - } - } - } - }; - const request = fetchParams.request; - let response = null; - const timingInfo = fetchParams.timingInfo; - const httpCache = null; - if (httpCache == null) { - request.cache = "no-store"; - } - const newConnection = forceNewConnection ? "yes" : "no"; - if (request.mode === "websocket") { - } else { - } - let requestBody = null; - if (request.body == null && fetchParams.processRequestEndOfBody) { - queueMicrotask(() => fetchParams.processRequestEndOfBody()); - } else if (request.body != null) { - const processBodyChunk = function(bytes) { - return __asyncGenerator(this, null, function* () { - var _a2; - if (isCancelled(fetchParams)) { - return; - } - yield bytes; - (_a2 = fetchParams.processRequestBodyChunkLength) == null ? void 0 : _a2.call(fetchParams, bytes.byteLength); - }); - }; - const processEndOfBody = () => { - if (isCancelled(fetchParams)) { - return; - } - if (fetchParams.processRequestEndOfBody) { - fetchParams.processRequestEndOfBody(); - } - }; - const processBodyError = (e) => { - if (isCancelled(fetchParams)) { - return; - } - if (e.name === "AbortError") { - fetchParams.controller.abort(); - } else { - fetchParams.controller.terminate(e); - } - }; - requestBody = function() { - return __asyncGenerator(this, null, function* () { - try { - try { - for (var iter = __forAwait(request.body.stream), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) { - const bytes = temp.value; - yield* __yieldStar(processBodyChunk(bytes)); - } - } catch (temp) { - error = [temp]; - } finally { - try { - more && (temp = iter.return) && (yield new __await(temp.call(iter))); - } finally { - if (error) - throw error[0]; - } - } - processEndOfBody(); - } catch (err) { - processBodyError(err); - } - }); - }(); - } - try { - const { body, status, statusText, headersList, socket } = yield 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) { - if (err.name === "AbortError") { - fetchParams.controller.connection.destroy(); - return makeAppropriateNetworkError(fetchParams, err); - } - return makeNetworkError(err); - } - const pullAlgorithm = () => __async(this, null, function* () { - yield fetchParams.controller.resume(); - }); - const cancelAlgorithm = (reason) => { - if (!isCancelled(fetchParams)) { - fetchParams.controller.abort(reason); - } - }; - const stream = new ReadableStream( - { - start(controller) { - return __async(this, null, function* () { - fetchParams.controller.controller = controller; - }); - }, - pull(controller) { - return __async(this, null, function* () { - yield pullAlgorithm(controller); - }); - }, - cancel(reason) { - return __async(this, null, function* () { - yield cancelAlgorithm(reason); - }); - }, - type: "bytes" - } - ); - response.body = { stream, source: null, length: null }; - fetchParams.controller.onAborted = onAborted; - fetchParams.controller.on("terminated", onAborted); - fetchParams.controller.resume = () => __async(this, null, function* () { - var _a2; - while (true) { - let bytes; - let isFailure; - try { - const { done, value } = yield fetchParams.controller.next(); - if (isAborted(fetchParams)) { - break; - } - bytes = done ? void 0 : value; - } catch (err) { - if (fetchParams.controller.ended && !timingInfo.encodedBodySize) { - bytes = void 0; - } else { - bytes = err; - isFailure = true; - } - } - if (bytes === void 0) { - readableStreamClose(fetchParams.controller.controller); - finalizeResponse(fetchParams, response); - return; - } - timingInfo.decodedBodySize += (_a2 = bytes == null ? void 0 : bytes.byteLength) != null ? _a2 : 0; - if (isFailure) { - fetchParams.controller.terminate(bytes); - return; - } - const buffer = new Uint8Array(bytes); - if (buffer.byteLength) { - fetchParams.controller.controller.enqueue(buffer); - } - if (isErrored(stream)) { - fetchParams.controller.terminate(); - return; - } - if (fetchParams.controller.controller.desiredSize <= 0) { - return; - } - } - }); - function onAborted(reason) { - if (isAborted(fetchParams)) { - response.aborted = true; - if (isReadable(stream)) { - fetchParams.controller.controller.error( - fetchParams.controller.serializedAbortReason - ); - } - } else { - if (isReadable(stream)) { - fetchParams.controller.controller.error(new TypeError("terminated", { - cause: isErrorLike(reason) ? reason : void 0 - })); - } - } - fetchParams.controller.connection.destroy(); - } - return response; - function dispatch({ body }) { - const url = requestCurrentURL(request); - const agent = fetchParams.controller.dispatcher; - return new Promise((resolve2, reject) => agent.dispatch( - { - path: url.pathname + url.search, - origin: url.origin, - method: request.method, - body: agent.isMockActive ? request.body && (request.body.source || request.body.stream) : body, - headers: request.headersList.entries, - maxRedirections: 0, - upgrade: request.mode === "websocket" ? "websocket" : void 0 - }, - { - body: null, - abort: null, - onConnect(abort) { - const { connection } = fetchParams.controller; - timingInfo.finalConnectionTimingInfo = clampAndCoarsenConnectionTimingInfo(void 0, timingInfo.postRedirectStartTime, fetchParams.crossOriginIsolatedCapability); - if (connection.destroyed) { - abort(new DOMException("The operation was aborted.", "AbortError")); - } else { - fetchParams.controller.on("terminated", abort); - this.abort = connection.abort = abort; - } - timingInfo.finalNetworkRequestStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); - }, - onResponseStarted() { - timingInfo.finalNetworkResponseStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); - }, - onHeaders(status, rawHeaders, resume, statusText) { - if (status < 200) { - return; - } - let location = ""; - const headersList = new HeadersList(); - for (let i = 0; i < rawHeaders.length; i += 2) { - headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString("latin1"), true); - } - location = headersList.get("location", true); - this.body = new Readable({ read: resume }); - const decoders = []; - const willFollow = location && request.redirect === "follow" && redirectStatusSet.has(status); - if (request.method !== "HEAD" && request.method !== "CONNECT" && !nullBodyStatus.includes(status) && !willFollow) { - const contentEncoding = headersList.get("content-encoding", true); - const codings = contentEncoding ? contentEncoding.toLowerCase().split(",") : []; - const maxContentEncodings = 5; - if (codings.length > maxContentEncodings) { - reject(new Error(`too many content-encodings in response: ${codings.length}, maximum allowed is ${maxContentEncodings}`)); - return true; - } - for (let i = codings.length - 1; i >= 0; --i) { - const coding = codings[i].trim(); - 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(createInflate({ - flush: zlib.constants.Z_SYNC_FLUSH, - finishFlush: zlib.constants.Z_SYNC_FLUSH - })); - } else if (coding === "br") { - decoders.push(zlib.createBrotliDecompress({ - flush: zlib.constants.BROTLI_OPERATION_FLUSH, - finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH - })); - } else { - decoders.length = 0; - break; - } - } - } - const onError = this.onError.bind(this); - resolve2({ - status, - statusText, - headersList, - body: decoders.length ? pipeline(this.body, ...decoders, (err) => { - if (err) { - this.onError(err); - } - }).on("error", onError) : this.body.on("error", onError) - }); - return true; - }, - onData(chunk) { - if (fetchParams.controller.dump) { - return; - } - const bytes = chunk; - timingInfo.encodedBodySize += bytes.byteLength; - return this.body.push(bytes); - }, - onComplete() { - if (this.abort) { - fetchParams.controller.off("terminated", this.abort); - } - if (fetchParams.controller.onAborted) { - fetchParams.controller.off("terminated", fetchParams.controller.onAborted); - } - fetchParams.controller.ended = true; - this.body.push(null); - }, - onError(error) { - var _a2; - if (this.abort) { - fetchParams.controller.off("terminated", this.abort); - } - (_a2 = this.body) == null ? void 0 : _a2.destroy(error); - fetchParams.controller.terminate(error); - reject(error); - }, - onUpgrade(status, rawHeaders, socket) { - if (status !== 101) { - return; - } - const headersList = new HeadersList(); - for (let i = 0; i < rawHeaders.length; i += 2) { - headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString("latin1"), true); - } - resolve2({ - status, - statusText: STATUS_CODES[status], - headersList, - socket - }); - return true; - } - } - )); - } - }); - } - module.exports = { - fetch, - Fetch, - fetching, - finalizeAndReportTiming - }; - } - }); - - // - var require_symbols3 = __commonJS({ - ""(exports, 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") - }; - } - }); - - // - var require_progressevent = __commonJS({ - ""(exports, module) { - "use strict"; - var { webidl } = require_webidl(); - var kState = Symbol("ProgressEvent state"); - var ProgressEvent = class _ProgressEvent extends Event { - constructor(type, eventInitDict = {}) { - type = webidl.converters.DOMString(type, "ProgressEvent constructor", "type"); - eventInitDict = webidl.converters.ProgressEventInit(eventInitDict != null ? 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 - }; - } - }); - - // - var require_encoding = __commonJS({ - ""(exports, module) { - "use strict"; - function getEncoding(label) { - if (!label) { - 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 - }; - } - }); - - // - var require_util4 = __commonJS({ - ""(exports, module) { - "use strict"; - var { - kState, - kError, - kResult, - kAborted, - kLastProgressEventFired - } = require_symbols3(); - var { ProgressEvent } = require_progressevent(); - var { getEncoding } = require_encoding(); - var { serializeAMimeType, parseMIMEType } = require_data_url(); - var { types } = __require("util"); - var { StringDecoder: StringDecoder2 } = __require("string_decoder"); - var { btoa } = __require("buffer"); - var staticPropertyDescriptors = { - enumerable: true, - writable: false, - configurable: false - }; - function readOperation(fr, blob, type, encodingName) { - if (fr[kState] === "loading") { - throw new DOMException("Invalid state", "InvalidStateError"); - } - fr[kState] = "loading"; - fr[kResult] = null; - fr[kError] = null; - const stream = blob.stream(); - const reader = stream.getReader(); - const bytes = []; - let chunkPromise = reader.read(); - let isFirstChunk = true; - (() => __async(this, null, function* () { - while (!fr[kAborted]) { - try { - const { done, value } = yield chunkPromise; - if (isFirstChunk && !fr[kAborted]) { - queueMicrotask(() => { - fireAProgressEvent("loadstart", fr); - }); - } - isFirstChunk = false; - if (!done && types.isUint8Array(value)) { - bytes.push(value); - if ((fr[kLastProgressEventFired] === void 0 || Date.now() - fr[kLastProgressEventFired] >= 50) && !fr[kAborted]) { - fr[kLastProgressEventFired] = Date.now(); - queueMicrotask(() => { - fireAProgressEvent("progress", fr); - }); - } - chunkPromise = reader.read(); - } else if (done) { - queueMicrotask(() => { - fr[kState] = "done"; - try { - const result = packageData(bytes, type, blob.type, encodingName); - if (fr[kAborted]) { - return; - } - fr[kResult] = result; - fireAProgressEvent("load", fr); - } catch (error) { - fr[kError] = error; - fireAProgressEvent("error", fr); - } - if (fr[kState] !== "loading") { - fireAProgressEvent("loadend", fr); - } - }); - break; - } - } catch (error) { - if (fr[kAborted]) { - return; - } - queueMicrotask(() => { - fr[kState] = "done"; - fr[kError] = error; - fireAProgressEvent("error", fr); - if (fr[kState] !== "loading") { - fireAProgressEvent("loadend", fr); - } - }); - break; - } - } - }))(); - } - function fireAProgressEvent(e, reader) { - const event = new ProgressEvent(e, { - bubbles: false, - cancelable: false - }); - reader.dispatchEvent(event); - } - function packageData(bytes, type, mimeType, encodingName) { - switch (type) { - case "DataURL": { - let dataURL = "data:"; - const parsed = parseMIMEType(mimeType || "application/octet-stream"); - if (parsed !== "failure") { - dataURL += serializeAMimeType(parsed); - } - dataURL += ";base64,"; - const decoder = new StringDecoder2("latin1"); - for (const chunk of bytes) { - dataURL += btoa(decoder.write(chunk)); - } - dataURL += btoa(decoder.end()); - return dataURL; - } - case "Text": { - let encoding = "failure"; - if (encodingName) { - encoding = getEncoding(encodingName); - } - if (encoding === "failure" && mimeType) { - const type2 = parseMIMEType(mimeType); - if (type2 !== "failure") { - encoding = getEncoding(type2.parameters.get("charset")); - } - } - if (encoding === "failure") { - encoding = "UTF-8"; - } - return decode(bytes, encoding); - } - case "ArrayBuffer": { - const sequence = combineByteSequences(bytes); - return sequence.buffer; - } - case "BinaryString": { - let binaryString = ""; - const decoder = new StringDecoder2("latin1"); - for (const chunk of bytes) { - binaryString += decoder.write(chunk); - } - binaryString += decoder.end(); - return binaryString; - } - } - } - function decode(ioQueue, encoding) { - const bytes = combineByteSequences(ioQueue); - const BOMEncoding = BOMSniffing(bytes); - let slice = 0; - if (BOMEncoding !== null) { - encoding = BOMEncoding; - slice = BOMEncoding === "UTF-8" ? 3 : 2; - } - const sliced = bytes.slice(slice); - return new TextDecoder(encoding).decode(sliced); - } - function BOMSniffing(ioQueue) { - const [a, b, c] = ioQueue; - if (a === 239 && b === 187 && c === 191) { - return "UTF-8"; - } else if (a === 254 && b === 255) { - return "UTF-16BE"; - } else if (a === 255 && b === 254) { - return "UTF-16LE"; - } - return null; - } - 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 - }; - } - }); - - // - var require_filereader = __commonJS({ - ""(exports, module) { - "use strict"; - var { - staticPropertyDescriptors, - readOperation, - fireAProgressEvent - } = require_util4(); - var { - kState, - kError, - kResult, - kEvents, - kAborted - } = require_symbols3(); - var { webidl } = require_webidl(); - var { kEnumerableProperty } = require_util(); - var FileReader = 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, "FileReader.readAsArrayBuffer"); - blob = webidl.converters.Blob(blob, { strict: false }); - 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, "FileReader.readAsBinaryString"); - blob = webidl.converters.Blob(blob, { strict: false }); - readOperation(this, blob, "BinaryString"); - } - /** - * @see https://w3c.github.io/FileAPI/#readAsDataText - * @param {import('buffer').Blob} blob - * @param {string?} encoding - */ - readAsText(blob, encoding = void 0) { - webidl.brandCheck(this, _FileReader); - webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsText"); - blob = webidl.converters.Blob(blob, { strict: false }); - if (encoding !== void 0) { - encoding = webidl.converters.DOMString(encoding, "FileReader.readAsText", "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, "FileReader.readAsDataURL"); - blob = webidl.converters.Blob(blob, { strict: false }); - readOperation(this, blob, "DataURL"); - } - /** - * @see https://w3c.github.io/FileAPI/#dfn-abort - */ - abort() { - if (this[kState] === "empty" || this[kState] === "done") { - this[kResult] = null; - return; - } - if (this[kState] === "loading") { - this[kState] = "done"; - this[kResult] = null; - } - this[kAborted] = true; - fireAProgressEvent("abort", 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); - return this[kResult]; - } - /** - * @see https://w3c.github.io/FileAPI/#dom-filereader-error - */ - get error() { - webidl.brandCheck(this, _FileReader); - 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; - } - } - }; - FileReader.EMPTY = FileReader.prototype.EMPTY = 0; - FileReader.LOADING = FileReader.prototype.LOADING = 1; - 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 - }; - } - }); - - // - var require_symbols4 = __commonJS({ - ""(exports, module) { - "use strict"; - module.exports = { - kConstruct: require_symbols().kConstruct - }; - } - }); - - // - var require_util5 = __commonJS({ - ""(exports, module) { - "use strict"; - var assert = __require("assert"); - var { URLSerializer } = require_data_url(); - var { isValidHeaderName } = require_util2(); - function urlEquals(A, B, excludeFragment = false) { - const serializedA = URLSerializer(A, excludeFragment); - const serializedB = URLSerializer(B, excludeFragment); - return serializedA === serializedB; - } - function getFieldValues(header) { - assert(header !== null); - const values = []; - for (let value of header.split(",")) { - value = value.trim(); - if (isValidHeaderName(value)) { - values.push(value); - } - } - return values; - } - module.exports = { - urlEquals, - getFieldValues - }; - } - }); - - // - var require_cache = __commonJS({ - ""(exports, module) { - "use strict"; - var { kConstruct } = require_symbols4(); - var { urlEquals, getFieldValues } = require_util5(); - var { kEnumerableProperty, isDisturbed } = require_util(); - var { webidl } = require_webidl(); - var { Response, cloneResponse, fromInnerResponse } = require_response(); - var { Request, fromInnerRequest } = require_request2(); - var { kState } = require_symbols2(); - var { fetching } = require_fetch(); - var { urlIsHttpHttpsScheme, createDeferredPromise, readAllBytes } = require_util2(); - var assert = __require("assert"); - var _relevantRequestResponseList, _batchCacheOperations, batchCacheOperations_fn, _queryCache, queryCache_fn, _requestMatchesCachedItem, requestMatchesCachedItem_fn, _internalMatchAll, internalMatchAll_fn; - var _Cache = class _Cache { - constructor() { - /** - * @see https://w3c.github.io/ServiceWorker/#batch-cache-operations-algorithm - * @param {CacheBatchOperation[]} operations - * @returns {requestResponseList} - */ - __privateAdd(this, _batchCacheOperations); - /** - * @see https://w3c.github.io/ServiceWorker/#query-cache - * @param {any} requestQuery - * @param {import('../../types/cache').CacheQueryOptions} options - * @param {requestResponseList} targetStorage - * @returns {requestResponseList} - */ - __privateAdd(this, _queryCache); - /** - * @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} - */ - __privateAdd(this, _requestMatchesCachedItem); - __privateAdd(this, _internalMatchAll); - /** - * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-request-response-list - * @type {requestResponseList} - */ - __privateAdd(this, _relevantRequestResponseList, void 0); - if (arguments[0] !== kConstruct) { - webidl.illegalConstructor(); - } - webidl.util.markAsUncloneable(this); - __privateSet(this, _relevantRequestResponseList, arguments[1]); - } - match(_0) { - return __async(this, arguments, function* (request, options = {}) { - webidl.brandCheck(this, _Cache); - const prefix = "Cache.match"; - webidl.argumentLengthCheck(arguments, 1, prefix); - request = webidl.converters.RequestInfo(request, prefix, "request"); - options = webidl.converters.CacheQueryOptions(options, prefix, "options"); - const p = __privateMethod(this, _internalMatchAll, internalMatchAll_fn).call(this, request, options, 1); - if (p.length === 0) { - return; - } - return p[0]; - }); - } - matchAll() { - return __async(this, arguments, function* (request = void 0, options = {}) { - webidl.brandCheck(this, _Cache); - const prefix = "Cache.matchAll"; - if (request !== void 0) - request = webidl.converters.RequestInfo(request, prefix, "request"); - options = webidl.converters.CacheQueryOptions(options, prefix, "options"); - return __privateMethod(this, _internalMatchAll, internalMatchAll_fn).call(this, request, options); - }); - } - add(_0) { - return __async(this, arguments, function* (request) { - webidl.brandCheck(this, _Cache); - const prefix = "Cache.add"; - webidl.argumentLengthCheck(arguments, 1, prefix); - request = webidl.converters.RequestInfo(request, prefix, "request"); - const requests = [request]; - const responseArrayPromise = this.addAll(requests); - return yield responseArrayPromise; - }); - } - addAll(_0) { - return __async(this, arguments, function* (requests) { - webidl.brandCheck(this, _Cache); - const prefix = "Cache.addAll"; - webidl.argumentLengthCheck(arguments, 1, prefix); - const responsePromises = []; - const requestList = []; - for (let request of requests) { - if (request === void 0) { - throw webidl.errors.conversionFailed({ - prefix, - argument: "Argument 1", - types: ["undefined is not allowed"] - }); - } - request = webidl.converters.RequestInfo(request); - if (typeof request === "string") { - continue; - } - const r = request[kState]; - if (!urlIsHttpHttpsScheme(r.url) || r.method !== "GET") { - throw webidl.errors.exception({ - header: prefix, - message: "Expected http/s scheme when method is not GET." - }); - } - } - const fetchControllers = []; - for (const request of requests) { - const r = new Request(request)[kState]; - if (!urlIsHttpHttpsScheme(r.url)) { - throw webidl.errors.exception({ - header: prefix, - message: "Expected http/s scheme." - }); - } - r.initiator = "fetch"; - r.destination = "subresource"; - requestList.push(r); - const responsePromise = createDeferredPromise(); - fetchControllers.push(fetching({ - request: r, - processResponse(response) { - 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")) { - const fieldValues = getFieldValues(response.headersList.get("vary")); - for (const fieldValue of fieldValues) { - 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) { - if (response.aborted) { - responsePromise.reject(new DOMException("aborted", "AbortError")); - return; - } - responsePromise.resolve(response); - } - })); - responsePromises.push(responsePromise.promise); - } - const p = Promise.all(responsePromises); - const responses = yield p; - const operations = []; - let index = 0; - for (const response of responses) { - const operation = { - type: "put", - // 7.3.2 - request: requestList[index], - // 7.3.3 - response - // 7.3.4 - }; - operations.push(operation); - index++; - } - const cacheJobPromise = createDeferredPromise(); - let errorData = null; - try { - __privateMethod(this, _batchCacheOperations, batchCacheOperations_fn).call(this, operations); - } catch (e) { - errorData = e; - } - queueMicrotask(() => { - if (errorData === null) { - cacheJobPromise.resolve(void 0); - } else { - cacheJobPromise.reject(errorData); - } - }); - return cacheJobPromise.promise; - }); - } - put(_0, _1) { - return __async(this, arguments, function* (request, response) { - webidl.brandCheck(this, _Cache); - const prefix = "Cache.put"; - webidl.argumentLengthCheck(arguments, 2, prefix); - request = webidl.converters.RequestInfo(request, prefix, "request"); - response = webidl.converters.Response(response, prefix, "response"); - let innerRequest = null; - if (request instanceof Request) { - innerRequest = request[kState]; - } else { - innerRequest = new Request(request)[kState]; - } - if (!urlIsHttpHttpsScheme(innerRequest.url) || innerRequest.method !== "GET") { - throw webidl.errors.exception({ - header: prefix, - message: "Expected an http/s scheme when method is not GET" - }); - } - const innerResponse = response[kState]; - if (innerResponse.status === 206) { - throw webidl.errors.exception({ - header: prefix, - message: "Got 206 status" - }); - } - if (innerResponse.headersList.contains("vary")) { - const fieldValues = getFieldValues(innerResponse.headersList.get("vary")); - for (const fieldValue of fieldValues) { - if (fieldValue === "*") { - throw webidl.errors.exception({ - header: prefix, - message: "Got * vary field value" - }); - } - } - } - if (innerResponse.body && (isDisturbed(innerResponse.body.stream) || innerResponse.body.stream.locked)) { - throw webidl.errors.exception({ - header: prefix, - message: "Response body is locked or disturbed" - }); - } - const clonedResponse = cloneResponse(innerResponse); - const bodyReadPromise = createDeferredPromise(); - if (innerResponse.body != null) { - const stream = innerResponse.body.stream; - const reader = stream.getReader(); - readAllBytes(reader).then(bodyReadPromise.resolve, bodyReadPromise.reject); - } else { - bodyReadPromise.resolve(void 0); - } - const operations = []; - const operation = { - type: "put", - // 14. - request: innerRequest, - // 15. - response: clonedResponse - // 16. - }; - operations.push(operation); - const bytes = yield bodyReadPromise.promise; - if (clonedResponse.body != null) { - clonedResponse.body.source = bytes; - } - const cacheJobPromise = createDeferredPromise(); - let errorData = null; - try { - __privateMethod(this, _batchCacheOperations, batchCacheOperations_fn).call(this, operations); - } catch (e) { - errorData = e; - } - queueMicrotask(() => { - if (errorData === null) { - cacheJobPromise.resolve(); - } else { - cacheJobPromise.reject(errorData); - } - }); - return cacheJobPromise.promise; - }); - } - delete(_0) { - return __async(this, arguments, function* (request, options = {}) { - webidl.brandCheck(this, _Cache); - const prefix = "Cache.delete"; - webidl.argumentLengthCheck(arguments, 1, prefix); - request = webidl.converters.RequestInfo(request, prefix, "request"); - options = webidl.converters.CacheQueryOptions(options, prefix, "options"); - 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]; - } - const operations = []; - const operation = { - type: "delete", - request: r, - options - }; - operations.push(operation); - const cacheJobPromise = createDeferredPromise(); - let errorData = null; - let requestResponses; - try { - requestResponses = __privateMethod(this, _batchCacheOperations, batchCacheOperations_fn).call(this, operations); - } catch (e) { - errorData = e; - } - queueMicrotask(() => { - if (errorData === null) { - cacheJobPromise.resolve(!!(requestResponses == null ? void 0 : 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 {Promise} - */ - keys() { - return __async(this, arguments, function* (request = void 0, options = {}) { - webidl.brandCheck(this, _Cache); - const prefix = "Cache.keys"; - if (request !== void 0) - request = webidl.converters.RequestInfo(request, prefix, "request"); - options = webidl.converters.CacheQueryOptions(options, prefix, "options"); - let r = null; - if (request !== void 0) { - if (request instanceof Request) { - r = request[kState]; - if (r.method !== "GET" && !options.ignoreMethod) { - return []; - } - } else if (typeof request === "string") { - r = new Request(request)[kState]; - } - } - const promise = createDeferredPromise(); - const requests = []; - if (request === void 0) { - for (const requestResponse of __privateGet(this, _relevantRequestResponseList)) { - requests.push(requestResponse[0]); - } - } else { - const requestResponses = __privateMethod(this, _queryCache, queryCache_fn).call(this, r, options); - for (const requestResponse of requestResponses) { - requests.push(requestResponse[0]); - } - } - queueMicrotask(() => { - const requestList = []; - for (const request2 of requests) { - const requestObject = fromInnerRequest( - request2, - new AbortController().signal, - "immutable" - ); - requestList.push(requestObject); - } - promise.resolve(Object.freeze(requestList)); - }); - return promise.promise; - }); - } - }; - _relevantRequestResponseList = new WeakMap(); - _batchCacheOperations = new WeakSet(); - batchCacheOperations_fn = function(operations) { - const cache = __privateGet(this, _relevantRequestResponseList); - const backupCache = [...cache]; - const addedItems = []; - const resultList = []; - try { - for (const operation of operations) { - if (operation.type !== "delete" && operation.type !== "put") { - throw webidl.errors.exception({ - header: "Cache.#batchCacheOperations", - message: 'operation type does not match "delete" or "put"' - }); - } - if (operation.type === "delete" && operation.response != null) { - throw webidl.errors.exception({ - header: "Cache.#batchCacheOperations", - message: "delete operation should not have an associated response" - }); - } - if (__privateMethod(this, _queryCache, queryCache_fn).call(this, operation.request, operation.options, addedItems).length) { - throw new DOMException("???", "InvalidStateError"); - } - let requestResponses; - if (operation.type === "delete") { - requestResponses = __privateMethod(this, _queryCache, queryCache_fn).call(this, operation.request, operation.options); - if (requestResponses.length === 0) { - return []; - } - for (const requestResponse of requestResponses) { - const idx = cache.indexOf(requestResponse); - assert(idx !== -1); - cache.splice(idx, 1); - } - } else if (operation.type === "put") { - if (operation.response == null) { - throw webidl.errors.exception({ - header: "Cache.#batchCacheOperations", - message: "put operation should have an associated response" - }); - } - const r = operation.request; - if (!urlIsHttpHttpsScheme(r.url)) { - throw webidl.errors.exception({ - header: "Cache.#batchCacheOperations", - message: "expected http or https scheme" - }); - } - if (r.method !== "GET") { - throw webidl.errors.exception({ - header: "Cache.#batchCacheOperations", - message: "not get method" - }); - } - if (operation.options != null) { - throw webidl.errors.exception({ - header: "Cache.#batchCacheOperations", - message: "options must not be defined" - }); - } - requestResponses = __privateMethod(this, _queryCache, queryCache_fn).call(this, operation.request); - for (const requestResponse of requestResponses) { - const idx = cache.indexOf(requestResponse); - assert(idx !== -1); - cache.splice(idx, 1); - } - cache.push([operation.request, operation.response]); - addedItems.push([operation.request, operation.response]); - } - resultList.push([operation.request, operation.response]); - } - return resultList; - } catch (e) { - __privateGet(this, _relevantRequestResponseList).length = 0; - __privateSet(this, _relevantRequestResponseList, backupCache); - throw e; - } - }; - _queryCache = new WeakSet(); - queryCache_fn = function(requestQuery, options, targetStorage) { - const resultList = []; - const storage = targetStorage != null ? targetStorage : __privateGet(this, _relevantRequestResponseList); - for (const requestResponse of storage) { - const [cachedRequest, cachedResponse] = requestResponse; - if (__privateMethod(this, _requestMatchesCachedItem, requestMatchesCachedItem_fn).call(this, requestQuery, cachedRequest, cachedResponse, options)) { - resultList.push(requestResponse); - } - } - return resultList; - }; - _requestMatchesCachedItem = new WeakSet(); - requestMatchesCachedItem_fn = function(requestQuery, request, response = null, options) { - const queryURL = new URL(requestQuery.url); - const cachedURL = new URL(request.url); - if (options == null ? void 0 : options.ignoreSearch) { - cachedURL.search = ""; - queryURL.search = ""; - } - if (!urlEquals(queryURL, cachedURL, true)) { - return false; - } - if (response == null || (options == null ? void 0 : 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 (requestValue !== queryValue) { - return false; - } - } - return true; - }; - _internalMatchAll = new WeakSet(); - internalMatchAll_fn = function(request, options, maxResponses = Infinity) { - let r = null; - if (request !== void 0) { - if (request instanceof Request) { - r = request[kState]; - if (r.method !== "GET" && !options.ignoreMethod) { - return []; - } - } else if (typeof request === "string") { - r = new Request(request)[kState]; - } - } - const responses = []; - if (request === void 0) { - for (const requestResponse of __privateGet(this, _relevantRequestResponseList)) { - responses.push(requestResponse[1]); - } - } else { - const requestResponses = __privateMethod(this, _queryCache, queryCache_fn).call(this, r, options); - for (const requestResponse of requestResponses) { - responses.push(requestResponse[1]); - } - } - const responseList = []; - for (const response of responses) { - const responseObject = fromInnerResponse(response, "immutable"); - responseList.push(responseObject.clone()); - if (responseList.length >= maxResponses) { - break; - } - } - return Object.freeze(responseList); - }; - var Cache = _Cache; - Object.defineProperties(Cache.prototype, { - [Symbol.toStringTag]: { - value: "Cache", - configurable: true - }, - match: kEnumerableProperty, - matchAll: kEnumerableProperty, - add: kEnumerableProperty, - addAll: kEnumerableProperty, - put: kEnumerableProperty, - delete: kEnumerableProperty, - keys: kEnumerableProperty - }); - var 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 - }; - } - }); - - // - var require_cachestorage = __commonJS({ - ""(exports, module) { - "use strict"; - var { kConstruct } = require_symbols4(); - var { Cache } = require_cache(); - var { webidl } = require_webidl(); - var { kEnumerableProperty } = require_util(); - var _caches; - var _CacheStorage = class _CacheStorage { - constructor() { - /** - * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-name-to-cache-map - * @type {Map} - */ - has(_0) { - return __async(this, arguments, function* (cacheName) { - webidl.brandCheck(this, _CacheStorage); - const prefix = "CacheStorage.has"; - webidl.argumentLengthCheck(arguments, 1, prefix); - cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName"); - return __privateGet(this, _caches).has(cacheName); - }); - } - /** - * @see https://w3c.github.io/ServiceWorker/#dom-cachestorage-open - * @param {string} cacheName - * @returns {Promise} - */ - open(_0) { - return __async(this, arguments, function* (cacheName) { - webidl.brandCheck(this, _CacheStorage); - const prefix = "CacheStorage.open"; - webidl.argumentLengthCheck(arguments, 1, prefix); - cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName"); - if (__privateGet(this, _caches).has(cacheName)) { - const cache2 = __privateGet(this, _caches).get(cacheName); - return new Cache(kConstruct, cache2); - } - const cache = []; - __privateGet(this, _caches).set(cacheName, cache); - return new Cache(kConstruct, cache); - }); - } - /** - * @see https://w3c.github.io/ServiceWorker/#cache-storage-delete - * @param {string} cacheName - * @returns {Promise} - */ - delete(_0) { - return __async(this, arguments, function* (cacheName) { - webidl.brandCheck(this, _CacheStorage); - const prefix = "CacheStorage.delete"; - webidl.argumentLengthCheck(arguments, 1, prefix); - cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName"); - return __privateGet(this, _caches).delete(cacheName); - }); - } - /** - * @see https://w3c.github.io/ServiceWorker/#cache-storage-keys - * @returns {Promise} - */ - keys() { - return __async(this, null, function* () { - webidl.brandCheck(this, _CacheStorage); - const keys = __privateGet(this, _caches).keys(); - return [...keys]; - }); - } - }; - _caches = new WeakMap(); - var CacheStorage = _CacheStorage; - Object.defineProperties(CacheStorage.prototype, { - [Symbol.toStringTag]: { - value: "CacheStorage", - configurable: true - }, - match: kEnumerableProperty, - has: kEnumerableProperty, - open: kEnumerableProperty, - delete: kEnumerableProperty, - keys: kEnumerableProperty - }); - module.exports = { - CacheStorage - }; - } - }); - - // - var require_constants4 = __commonJS({ - ""(exports, module) { - "use strict"; - var maxAttributeValueSize = 1024; - var maxNameValuePairSize = 4096; - module.exports = { - maxAttributeValueSize, - maxNameValuePairSize - }; - } - }); - - // - var require_util6 = __commonJS({ - ""(exports, module) { - "use strict"; - function isCTLExcludingHtab(value) { - for (let i = 0; i < value.length; ++i) { - const code = value.charCodeAt(i); - if (code >= 0 && code <= 8 || code >= 10 && code <= 31 || code === 127) { - return true; - } - } - return false; - } - function validateCookieName(name) { - for (let i = 0; i < name.length; ++i) { - const code = name.charCodeAt(i); - if (code < 33 || // exclude CTLs (0-31), SP and HT - code > 126 || // exclude non-ascii and DEL - code === 34 || // " - code === 40 || // ( - code === 41 || // ) - code === 60 || // < - code === 62 || // > - code === 64 || // @ - code === 44 || // , - code === 59 || // ; - code === 58 || // : - code === 92 || // \ - code === 47 || // / - code === 91 || // [ - code === 93 || // ] - code === 63 || // ? - code === 61 || // = - code === 123 || // { - code === 125) { - throw new Error("Invalid cookie name"); - } - } - } - function validateCookieValue(value) { - let len = value.length; - let i = 0; - if (value[0] === '"') { - if (len === 1 || value[len - 1] !== '"') { - throw new Error("Invalid cookie value"); - } - --len; - ++i; - } - while (i < len) { - const code = value.charCodeAt(i++); - if (code < 33 || // exclude CTLs (0-31) - code > 126 || // non-ascii and DEL (127) - code === 34 || // " - code === 44 || // , - code === 59 || // ; - code === 92) { - throw new Error("Invalid cookie value"); - } - } - } - function validateCookiePath(path4) { - for (let i = 0; i < path4.length; ++i) { - const code = path4.charCodeAt(i); - if (code < 32 || // exclude CTLs (0-31) - code > 126 || // exclude DEL and non-ascii - code === 59) { - throw new Error("Invalid cookie path"); - } - } - } - function isLetterOrDigit(code) { - return code >= 48 && code <= 57 || // 0-9 - code >= 65 && code <= 90 || // A-Z - code >= 97 && code <= 122; - } - function validateCookieDomain(domain) { - if (domain === " ") { - return; - } - if (domain.length > 255) { - throw new Error("Invalid cookie domain"); - } - let labelLength = 0; - for (let i = 0; i < domain.length; ++i) { - const code = domain.charCodeAt(i); - if (code === 46) { - if (labelLength === 0) { - throw new Error("Invalid cookie domain"); - } - if (domain.charCodeAt(i - 1) === 45) { - throw new Error("Invalid cookie domain"); - } - labelLength = 0; - continue; - } - if (labelLength === 0 && !isLetterOrDigit(code)) { - throw new Error("Invalid cookie domain"); - } - if (!isLetterOrDigit(code) && code !== 45) { - throw new Error("Invalid cookie domain"); - } - if (++labelLength > 63) { - throw new Error("Invalid cookie domain"); - } - } - if (labelLength === 0 || domain.charCodeAt(domain.length - 1) === 45) { - throw new Error("Invalid cookie domain"); - } - } - var IMFDays = [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ]; - var IMFMonths = [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - ]; - var IMFPaddedNumbers = Array(61).fill(0).map((_, i) => i.toString().padStart(2, "0")); - function toIMFDate(date) { - if (typeof date === "number") { - date = new Date(date); - } - return `${IMFDays[date.getUTCDay()]}, ${IMFPaddedNumbers[date.getUTCDate()]} ${IMFMonths[date.getUTCMonth()]} ${date.getUTCFullYear()} ${IMFPaddedNumbers[date.getUTCHours()]}:${IMFPaddedNumbers[date.getUTCMinutes()]}:${IMFPaddedNumbers[date.getUTCSeconds()]} GMT`; - } - function validateCookieMaxAge(maxAge) { - if (maxAge < 0) { - throw new Error("Invalid cookie max-age"); - } - } - function stringify(cookie) { - if (cookie.name.length === 0) { - return null; - } - validateCookieName(cookie.name); - validateCookieValue(cookie.value); - const out = [`${cookie.name}=${cookie.value}`]; - 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("="); - const trimmedKey = key.trim(); - const joinedValue = value.join("="); - validateCookieName(trimmedKey); - validateCookieValue(joinedValue); - out.push(`${trimmedKey}=${joinedValue}`); - } - return out.join("; "); - } - module.exports = { - isCTLExcludingHtab, - validateCookieName, - validateCookiePath, - validateCookieValue, - toIMFDate, - stringify - }; - } - }); - - // - var require_parse = __commonJS({ - ""(exports, module) { - "use strict"; - var { maxNameValuePairSize, maxAttributeValueSize } = require_constants4(); - var { isCTLExcludingHtab } = require_util6(); - var { collectASequenceOfCodePointsFast } = require_data_url(); - var assert = __require("assert"); - function parseSetCookie(header) { - if (isCTLExcludingHtab(header)) { - return null; - } - let nameValuePair = ""; - let unparsedAttributes = ""; - let name = ""; - let value = ""; - if (header.includes(";")) { - const position = { position: 0 }; - nameValuePair = collectASequenceOfCodePointsFast(";", header, position); - unparsedAttributes = header.slice(position.position); - } else { - nameValuePair = header; - } - if (!nameValuePair.includes("=")) { - value = nameValuePair; - } else { - const position = { position: 0 }; - name = collectASequenceOfCodePointsFast( - "=", - nameValuePair, - position - ); - value = nameValuePair.slice(position.position + 1); - } - name = name.trim(); - value = value.trim(); - if (name.length + value.length > maxNameValuePairSize) { - return null; - } - return __spreadValues({ - name, - value - }, parseUnparsedAttributes(unparsedAttributes)); - } - function parseUnparsedAttributes(unparsedAttributes, cookieAttributeList = {}) { - var _a; - if (unparsedAttributes.length === 0) { - return cookieAttributeList; - } - assert(unparsedAttributes[0] === ";"); - unparsedAttributes = unparsedAttributes.slice(1); - let cookieAv = ""; - if (unparsedAttributes.includes(";")) { - cookieAv = collectASequenceOfCodePointsFast( - ";", - unparsedAttributes, - { position: 0 } - ); - unparsedAttributes = unparsedAttributes.slice(cookieAv.length); - } else { - cookieAv = unparsedAttributes; - unparsedAttributes = ""; - } - let attributeName = ""; - let attributeValue = ""; - if (cookieAv.includes("=")) { - const position = { position: 0 }; - attributeName = collectASequenceOfCodePointsFast( - "=", - cookieAv, - position - ); - attributeValue = cookieAv.slice(position.position + 1); - } else { - attributeName = cookieAv; - } - attributeName = attributeName.trim(); - attributeValue = attributeValue.trim(); - if (attributeValue.length > maxAttributeValueSize) { - return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); - } - const attributeNameLowercase = attributeName.toLowerCase(); - if (attributeNameLowercase === "expires") { - const expiryTime = new Date(attributeValue); - cookieAttributeList.expires = expiryTime; - } else if (attributeNameLowercase === "max-age") { - const charCode = attributeValue.charCodeAt(0); - if ((charCode < 48 || charCode > 57) && attributeValue[0] !== "-") { - return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); - } - if (!/^\d+$/.test(attributeValue)) { - return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); - } - const deltaSeconds = Number(attributeValue); - cookieAttributeList.maxAge = deltaSeconds; - } else if (attributeNameLowercase === "domain") { - let cookieDomain = attributeValue; - if (cookieDomain[0] === ".") { - cookieDomain = cookieDomain.slice(1); - } - cookieDomain = cookieDomain.toLowerCase(); - cookieAttributeList.domain = cookieDomain; - } else if (attributeNameLowercase === "path") { - let cookiePath = ""; - if (attributeValue.length === 0 || attributeValue[0] !== "/") { - cookiePath = "/"; - } else { - cookiePath = attributeValue; - } - cookieAttributeList.path = cookiePath; - } else if (attributeNameLowercase === "secure") { - cookieAttributeList.secure = true; - } else if (attributeNameLowercase === "httponly") { - cookieAttributeList.httpOnly = true; - } else if (attributeNameLowercase === "samesite") { - const attributeValueLowercase = attributeValue.toLowerCase(); - if (attributeValueLowercase === "none") { - cookieAttributeList.sameSite = "None"; - } else if (attributeValueLowercase === "strict") { - cookieAttributeList.sameSite = "Strict"; - } else if (attributeValueLowercase === "lax") { - cookieAttributeList.sameSite = "Lax"; - } - } else { - (_a = cookieAttributeList.unparsed) != null ? _a : cookieAttributeList.unparsed = []; - cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`); - } - return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); - } - module.exports = { - parseSetCookie, - parseUnparsedAttributes - }; - } - }); - - // - var require_cookies = __commonJS({ - ""(exports, module) { - "use strict"; - var { parseSetCookie } = require_parse(); - var { stringify } = require_util6(); - var { webidl } = require_webidl(); - var { Headers: Headers2 } = require_headers(); - function getCookies(headers) { - webidl.argumentLengthCheck(arguments, 1, "getCookies"); - webidl.brandCheck(headers, Headers2, { 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; - } - function deleteCookie(headers, name, attributes) { - webidl.brandCheck(headers, Headers2, { strict: false }); - const prefix = "deleteCookie"; - webidl.argumentLengthCheck(arguments, 2, prefix); - name = webidl.converters.DOMString(name, prefix, "name"); - attributes = webidl.converters.DeleteCookieAttributes(attributes); - setCookie(headers, __spreadValues({ - name, - value: "", - expires: /* @__PURE__ */ new Date(0) - }, attributes)); - } - function getSetCookies(headers) { - webidl.argumentLengthCheck(arguments, 1, "getSetCookies"); - webidl.brandCheck(headers, Headers2, { strict: false }); - const cookies = headers.getSetCookie(); - if (!cookies) { - return []; - } - return cookies.map((pair) => parseSetCookie(pair)); - } - function setCookie(headers, cookie) { - webidl.argumentLengthCheck(arguments, 2, "setCookie"); - webidl.brandCheck(headers, Headers2, { strict: false }); - cookie = webidl.converters.Cookie(cookie); - const str = stringify(cookie); - if (str) { - headers.append("Set-Cookie", str); - } - } - 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: () => new Array(0) - } - ]); - module.exports = { - getCookies, - deleteCookie, - getSetCookies, - setCookie - }; - } - }); - - // - var require_events = __commonJS({ - ""(exports, module) { - "use strict"; - var { webidl } = require_webidl(); - var { kEnumerableProperty } = require_util(); - var { kConstruct } = require_symbols(); - var { MessagePort } = __require("worker_threads"); - var _eventInit; - var _MessageEvent = class _MessageEvent extends Event { - constructor(type, eventInitDict = {}) { - var __super = (...args) => { - super(...args); - __privateAdd(this, _eventInit, void 0); - }; - if (type === kConstruct) { - __super(arguments[1], arguments[2]); - webidl.util.markAsUncloneable(this); - return; - } - const prefix = "MessageEvent constructor"; - webidl.argumentLengthCheck(arguments, 1, prefix); - type = webidl.converters.DOMString(type, prefix, "type"); - eventInitDict = webidl.converters.MessageEventInit(eventInitDict, prefix, "eventInitDict"); - __super(type, eventInitDict); - __privateSet(this, _eventInit, eventInitDict); - webidl.util.markAsUncloneable(this); - } - get data() { - webidl.brandCheck(this, _MessageEvent); - return __privateGet(this, _eventInit).data; - } - get origin() { - webidl.brandCheck(this, _MessageEvent); - return __privateGet(this, _eventInit).origin; - } - get lastEventId() { - webidl.brandCheck(this, _MessageEvent); - return __privateGet(this, _eventInit).lastEventId; - } - get source() { - webidl.brandCheck(this, _MessageEvent); - return __privateGet(this, _eventInit).source; - } - get ports() { - webidl.brandCheck(this, _MessageEvent); - if (!Object.isFrozen(__privateGet(this, _eventInit).ports)) { - Object.freeze(__privateGet(this, _eventInit).ports); - } - return __privateGet(this, _eventInit).ports; - } - initMessageEvent(type, bubbles = false, cancelable = false, data = null, origin = "", lastEventId = "", source = null, ports = []) { - webidl.brandCheck(this, _MessageEvent); - webidl.argumentLengthCheck(arguments, 1, "MessageEvent.initMessageEvent"); - return new _MessageEvent(type, { - bubbles, - cancelable, - data, - origin, - lastEventId, - source, - ports - }); - } - static createFastMessageEvent(type, init) { - var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j; - const messageEvent = new _MessageEvent(kConstruct, type, init); - __privateSet(messageEvent, _eventInit, init); - (_b = (_a = __privateGet(messageEvent, _eventInit)).data) != null ? _b : _a.data = null; - (_d = (_c = __privateGet(messageEvent, _eventInit)).origin) != null ? _d : _c.origin = ""; - (_f = (_e = __privateGet(messageEvent, _eventInit)).lastEventId) != null ? _f : _e.lastEventId = ""; - (_h = (_g = __privateGet(messageEvent, _eventInit)).source) != null ? _h : _g.source = null; - (_j = (_i = __privateGet(messageEvent, _eventInit)).ports) != null ? _j : _i.ports = []; - return messageEvent; - } - }; - _eventInit = new WeakMap(); - var MessageEvent = _MessageEvent; - var { createFastMessageEvent } = MessageEvent; - delete MessageEvent.createFastMessageEvent; - var _eventInit2; - var _CloseEvent = class _CloseEvent extends Event { - constructor(type, eventInitDict = {}) { - const prefix = "CloseEvent constructor"; - webidl.argumentLengthCheck(arguments, 1, prefix); - type = webidl.converters.DOMString(type, prefix, "type"); - eventInitDict = webidl.converters.CloseEventInit(eventInitDict); - super(type, eventInitDict); - __privateAdd(this, _eventInit2, void 0); - __privateSet(this, _eventInit2, eventInitDict); - webidl.util.markAsUncloneable(this); - } - get wasClean() { - webidl.brandCheck(this, _CloseEvent); - return __privateGet(this, _eventInit2).wasClean; - } - get code() { - webidl.brandCheck(this, _CloseEvent); - return __privateGet(this, _eventInit2).code; - } - get reason() { - webidl.brandCheck(this, _CloseEvent); - return __privateGet(this, _eventInit2).reason; - } - }; - _eventInit2 = new WeakMap(); - var CloseEvent = _CloseEvent; - var _eventInit3; - var _ErrorEvent = class _ErrorEvent extends Event { - constructor(type, eventInitDict) { - const prefix = "ErrorEvent constructor"; - webidl.argumentLengthCheck(arguments, 1, prefix); - super(type, eventInitDict); - __privateAdd(this, _eventInit3, void 0); - webidl.util.markAsUncloneable(this); - type = webidl.converters.DOMString(type, prefix, "type"); - eventInitDict = webidl.converters.ErrorEventInit(eventInitDict != null ? eventInitDict : {}); - __privateSet(this, _eventInit3, eventInitDict); - } - get message() { - webidl.brandCheck(this, _ErrorEvent); - return __privateGet(this, _eventInit3).message; - } - get filename() { - webidl.brandCheck(this, _ErrorEvent); - return __privateGet(this, _eventInit3).filename; - } - get lineno() { - webidl.brandCheck(this, _ErrorEvent); - return __privateGet(this, _eventInit3).lineno; - } - get colno() { - webidl.brandCheck(this, _ErrorEvent); - return __privateGet(this, _eventInit3).colno; - } - get error() { - webidl.brandCheck(this, _ErrorEvent); - return __privateGet(this, _eventInit3).error; - } - }; - _eventInit3 = new WeakMap(); - var ErrorEvent = _ErrorEvent; - 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 - ); - var 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"], - defaultValue: () => new Array(0) - } - ]); - 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, - createFastMessageEvent - }; - } - }); - - // - var require_constants5 = __commonJS({ - ""(exports, module) { - "use strict"; - var uid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; - var staticPropertyDescriptors = { - enumerable: true, - writable: false, - configurable: false - }; - var states = { - CONNECTING: 0, - OPEN: 1, - CLOSING: 2, - CLOSED: 3 - }; - var sentCloseFrameState = { - NOT_SENT: 0, - PROCESSING: 1, - SENT: 2 - }; - var opcodes = { - CONTINUATION: 0, - TEXT: 1, - BINARY: 2, - CLOSE: 8, - PING: 9, - PONG: 10 - }; - var maxUnsigned16Bit = __pow(2, 16) - 1; - var parserStates = { - INFO: 0, - PAYLOADLENGTH_16: 2, - PAYLOADLENGTH_64: 3, - READ_DATA: 4 - }; - var emptyBuffer = Buffer.allocUnsafe(0); - var sendHints = { - string: 1, - typedArray: 2, - arrayBuffer: 3, - blob: 4 - }; - module.exports = { - uid, - sentCloseFrameState, - staticPropertyDescriptors, - states, - opcodes, - maxUnsigned16Bit, - parserStates, - emptyBuffer, - sendHints - }; - } - }); - - // - var require_symbols5 = __commonJS({ - ""(exports, 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") - }; - } - }); - - // - var require_util7 = __commonJS({ - ""(exports, module) { - "use strict"; - var { kReadyState, kController, kResponse, kBinaryType, kWebSocketURL } = require_symbols5(); - var { states, opcodes } = require_constants5(); - var { ErrorEvent, createFastMessageEvent } = require_events(); - var { isUtf8 } = __require("buffer"); - var { collectASequenceOfCodePointsFast, removeHTTPWhitespace } = require_data_url(); - function isConnecting(ws) { - return ws[kReadyState] === states.CONNECTING; - } - function isEstablished(ws) { - return ws[kReadyState] === states.OPEN; - } - function isClosing(ws) { - return ws[kReadyState] === states.CLOSING; - } - function isClosed(ws) { - return ws[kReadyState] === states.CLOSED; - } - function fireEvent(e, target, eventFactory = (type, init) => new Event(type, init), eventInitDict = {}) { - const event = eventFactory(e, eventInitDict); - target.dispatchEvent(event); - } - function websocketMessageReceived(ws, type, data) { - if (ws[kReadyState] !== states.OPEN) { - return; - } - let dataForEvent; - if (type === opcodes.TEXT) { - try { - dataForEvent = utf8Decode(data); - } catch (e) { - failWebsocketConnection(ws, "Received invalid UTF-8 in text frame."); - return; - } - } else if (type === opcodes.BINARY) { - if (ws[kBinaryType] === "blob") { - dataForEvent = new Blob([data]); - } else { - dataForEvent = toArrayBuffer(data); - } - } - fireEvent("message", ws, createFastMessageEvent, { - origin: ws[kWebSocketURL].origin, - data: dataForEvent - }); - } - function toArrayBuffer(buffer) { - if (buffer.byteLength === buffer.buffer.byteLength) { - return buffer.buffer; - } - return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength); - } - function isValidSubprotocol(protocol) { - if (protocol.length === 0) { - return false; - } - for (let i = 0; i < protocol.length; ++i) { - const code = protocol.charCodeAt(i); - if (code < 33 || // CTL, contains SP (0x20) and HT (0x09) - code > 126 || code === 34 || // " - code === 40 || // ( - code === 41 || // ) - code === 44 || // , - code === 47 || // / - code === 58 || // : - code === 59 || // ; - code === 60 || // < - code === 61 || // = - code === 62 || // > - code === 63 || // ? - code === 64 || // @ - code === 91 || // [ - code === 92 || // \ - code === 93 || // ] - code === 123 || // { - code === 125) { - return false; - } - } - return true; - } - function isValidStatusCode(code) { - if (code >= 1e3 && code < 1015) { - return code !== 1004 && // reserved - code !== 1005 && // "MUST NOT be set as a status code" - code !== 1006; - } - return code >= 3e3 && code <= 4999; - } - function failWebsocketConnection(ws, reason) { - const { [kController]: controller, [kResponse]: response } = ws; - controller.abort(); - if ((response == null ? void 0 : response.socket) && !response.socket.destroyed) { - response.socket.destroy(); - } - if (reason) { - fireEvent("error", ws, (type, init) => new ErrorEvent(type, init), { - error: new Error(reason), - message: reason - }); - } - } - function isControlFrame(opcode) { - return opcode === opcodes.CLOSE || opcode === opcodes.PING || opcode === opcodes.PONG; - } - function isContinuationFrame(opcode) { - return opcode === opcodes.CONTINUATION; - } - function isTextBinaryFrame(opcode) { - return opcode === opcodes.TEXT || opcode === opcodes.BINARY; - } - function isValidOpcode(opcode) { - return isTextBinaryFrame(opcode) || isContinuationFrame(opcode) || isControlFrame(opcode); - } - function parseExtensions(extensions) { - const position = { position: 0 }; - const extensionList = /* @__PURE__ */ new Map(); - while (position.position < extensions.length) { - const pair = collectASequenceOfCodePointsFast(";", extensions, position); - const [name, value = ""] = pair.split("="); - extensionList.set( - removeHTTPWhitespace(name, true, false), - removeHTTPWhitespace(value, false, true) - ); - position.position++; - } - return extensionList; - } - function isValidClientWindowBits(value) { - if (value.length === 0) { - return false; - } - for (let i = 0; i < value.length; i++) { - const byte = value.charCodeAt(i); - if (byte < 48 || byte > 57) { - return false; - } - } - const num = Number.parseInt(value, 10); - return num >= 8 && num <= 15; - } - var hasIntl = typeof process.versions.icu === "string"; - var fatalDecoder = hasIntl ? new TextDecoder("utf-8", { fatal: true }) : void 0; - var utf8Decode = hasIntl ? fatalDecoder.decode.bind(fatalDecoder) : function(buffer) { - if (isUtf8(buffer)) { - return buffer.toString("utf-8"); - } - throw new TypeError("Invalid utf-8 received."); - }; - module.exports = { - isConnecting, - isEstablished, - isClosing, - isClosed, - fireEvent, - isValidSubprotocol, - isValidStatusCode, - failWebsocketConnection, - websocketMessageReceived, - utf8Decode, - isControlFrame, - isContinuationFrame, - isTextBinaryFrame, - isValidOpcode, - parseExtensions, - isValidClientWindowBits - }; - } - }); - - // - var require_frame = __commonJS({ - ""(exports, module) { - "use strict"; - var { maxUnsigned16Bit } = require_constants5(); - var BUFFER_SIZE = 16386; - var crypto2; - var buffer = null; - var bufIdx = BUFFER_SIZE; - try { - crypto2 = __require("crypto"); - } catch (e) { - crypto2 = { - // not full compatibility, but minimum. - randomFillSync: function randomFillSync(buffer2, _offset, _size) { - for (let i = 0; i < buffer2.length; ++i) { - buffer2[i] = Math.random() * 255 | 0; - } - return buffer2; - } - }; - } - function generateMask() { - if (bufIdx === BUFFER_SIZE) { - bufIdx = 0; - crypto2.randomFillSync(buffer != null ? buffer : buffer = Buffer.allocUnsafe(BUFFER_SIZE), 0, BUFFER_SIZE); - } - return [buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++]]; - } - var WebsocketFrameSend = class { - /** - * @param {Buffer|undefined} data - */ - constructor(data) { - this.frameData = data; - } - createFrame(opcode) { - var _a; - const frameData = this.frameData; - const maskKey = generateMask(); - const bodyLength = (_a = frameData == null ? void 0 : frameData.byteLength) != null ? _a : 0; - let payloadLength = bodyLength; - let offset = 6; - if (bodyLength > maxUnsigned16Bit) { - offset += 8; - payloadLength = 127; - } else if (bodyLength > 125) { - offset += 2; - payloadLength = 126; - } - const buffer2 = Buffer.allocUnsafe(bodyLength + offset); - buffer2[0] = buffer2[1] = 0; - buffer2[0] |= 128; - buffer2[0] = (buffer2[0] & 240) + opcode; - buffer2[offset - 4] = maskKey[0]; - buffer2[offset - 3] = maskKey[1]; - buffer2[offset - 2] = maskKey[2]; - buffer2[offset - 1] = maskKey[3]; - buffer2[1] = payloadLength; - if (payloadLength === 126) { - buffer2.writeUInt16BE(bodyLength, 2); - } else if (payloadLength === 127) { - buffer2[2] = buffer2[3] = 0; - buffer2.writeUIntBE(bodyLength, 4, 6); - } - buffer2[1] |= 128; - for (let i = 0; i < bodyLength; ++i) { - buffer2[offset + i] = frameData[i] ^ maskKey[i & 3]; - } - return buffer2; - } - }; - module.exports = { - WebsocketFrameSend - }; - } - }); - - // - var require_connection = __commonJS({ - ""(exports, module) { - "use strict"; - var { uid, states, sentCloseFrameState, emptyBuffer, opcodes } = require_constants5(); - var { - kReadyState, - kSentClose, - kByteParser, - kReceivedClose, - kResponse - } = require_symbols5(); - var { fireEvent, failWebsocketConnection, isClosing, isClosed, isEstablished, parseExtensions } = require_util7(); - var { channels } = require_diagnostics(); - var { CloseEvent } = require_events(); - var { makeRequest } = require_request2(); - var { fetching } = require_fetch(); - var { Headers: Headers2, getHeadersList } = require_headers(); - var { getDecodeSplit } = require_util2(); - var { WebsocketFrameSend } = require_frame(); - var crypto2; - try { - crypto2 = __require("crypto"); - } catch (e) { - } - function establishWebSocketConnection(url, protocols, client, ws, onEstablish, options) { - const requestURL = url; - requestURL.protocol = url.protocol === "ws:" ? "http:" : "https:"; - const request = makeRequest({ - urlList: [requestURL], - client, - serviceWorkers: "none", - referrer: "no-referrer", - mode: "websocket", - credentials: "include", - cache: "no-store", - redirect: "error" - }); - if (options.headers) { - const headersList = getHeadersList(new Headers2(options.headers)); - request.headersList = headersList; - } - const keyValue = crypto2.randomBytes(16).toString("base64"); - request.headersList.append("sec-websocket-key", keyValue); - request.headersList.append("sec-websocket-version", "13"); - for (const protocol of protocols) { - request.headersList.append("sec-websocket-protocol", protocol); - } - const permessageDeflate = "permessage-deflate; client_max_window_bits"; - request.headersList.append("sec-websocket-extensions", permessageDeflate); - const controller = fetching({ - request, - useParallelQueue: true, - dispatcher: options.dispatcher, - processResponse(response) { - var _a, _b; - if (response.type === "error" || response.status !== 101) { - failWebsocketConnection(ws, "Received network error or non-101 status code."); - return; - } - if (protocols.length !== 0 && !response.headersList.get("Sec-WebSocket-Protocol")) { - failWebsocketConnection(ws, "Server did not respond with sent protocols."); - return; - } - if (((_a = response.headersList.get("Upgrade")) == null ? void 0 : _a.toLowerCase()) !== "websocket") { - failWebsocketConnection(ws, 'Server did not set Upgrade header to "websocket".'); - return; - } - if (((_b = response.headersList.get("Connection")) == null ? void 0 : _b.toLowerCase()) !== "upgrade") { - failWebsocketConnection(ws, 'Server did not set Connection header to "upgrade".'); - return; - } - const secWSAccept = response.headersList.get("Sec-WebSocket-Accept"); - const digest = crypto2.createHash("sha1").update(keyValue + uid).digest("base64"); - if (secWSAccept !== digest) { - failWebsocketConnection(ws, "Incorrect hash received in Sec-WebSocket-Accept header."); - return; - } - const secExtension = response.headersList.get("Sec-WebSocket-Extensions"); - let extensions; - if (secExtension !== null) { - extensions = parseExtensions(secExtension); - if (!extensions.has("permessage-deflate")) { - failWebsocketConnection(ws, "Sec-WebSocket-Extensions header does not match."); - return; - } - } - const secProtocol = response.headersList.get("Sec-WebSocket-Protocol"); - if (secProtocol !== null) { - const requestProtocols = getDecodeSplit("sec-websocket-protocol", request.headersList); - if (!requestProtocols.includes(secProtocol)) { - 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, extensions); - } - }); - return controller; - } - function closeWebSocketConnection(ws, code, reason, reasonByteLength) { - if (isClosing(ws) || isClosed(ws)) { - } else if (!isEstablished(ws)) { - failWebsocketConnection(ws, "Connection was closed before it was established."); - ws[kReadyState] = states.CLOSING; - } else if (ws[kSentClose] === sentCloseFrameState.NOT_SENT) { - ws[kSentClose] = sentCloseFrameState.PROCESSING; - const frame = new WebsocketFrameSend(); - if (code !== void 0 && reason === void 0) { - frame.frameData = Buffer.allocUnsafe(2); - frame.frameData.writeUInt16BE(code, 0); - } else if (code !== void 0 && reason !== void 0) { - frame.frameData = Buffer.allocUnsafe(2 + reasonByteLength); - frame.frameData.writeUInt16BE(code, 0); - frame.frameData.write(reason, 2, "utf-8"); - } else { - frame.frameData = emptyBuffer; - } - const socket = ws[kResponse].socket; - socket.write(frame.createFrame(opcodes.CLOSE)); - ws[kSentClose] = sentCloseFrameState.SENT; - ws[kReadyState] = states.CLOSING; - } else { - ws[kReadyState] = states.CLOSING; - } - } - function onSocketData(chunk) { - if (!this.ws[kByteParser].write(chunk)) { - this.pause(); - } - } - function onSocketClose() { - var _a; - const { ws } = this; - const { [kResponse]: response } = ws; - response.socket.off("data", onSocketData); - response.socket.off("close", onSocketClose); - response.socket.off("error", onSocketError); - const wasClean = ws[kSentClose] === sentCloseFrameState.SENT && ws[kReceivedClose]; - let code = 1005; - let reason = ""; - const result = ws[kByteParser].closingInfo; - if (result && !result.error) { - code = (_a = result.code) != null ? _a : 1005; - reason = result.reason; - } else if (!ws[kReceivedClose]) { - code = 1006; - } - ws[kReadyState] = states.CLOSED; - fireEvent("close", ws, (type, init) => new CloseEvent(type, init), { - 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, - closeWebSocketConnection - }; - } - }); - - // - var require_permessage_deflate = __commonJS({ - ""(exports, module) { - "use strict"; - var { createInflateRaw, Z_DEFAULT_WINDOWBITS } = __require("zlib"); - var { isValidClientWindowBits } = require_util7(); - var { MessageSizeExceededError } = require_errors(); - var tail = Buffer.from([0, 0, 255, 255]); - var kBuffer = Symbol("kBuffer"); - var kLength = Symbol("kLength"); - var _inflate, _options, _maxPayloadSize; - var PerMessageDeflate = class { - /** - * @param {Map} extensions - */ - constructor(extensions, options) { - /** @type {import('node:zlib').InflateRaw} */ - __privateAdd(this, _inflate, void 0); - __privateAdd(this, _options, {}); - __privateAdd(this, _maxPayloadSize, 0); - __privateGet(this, _options).serverNoContextTakeover = extensions.has("server_no_context_takeover"); - __privateGet(this, _options).serverMaxWindowBits = extensions.get("server_max_window_bits"); - __privateSet(this, _maxPayloadSize, options.maxPayloadSize); - } - /** - * Decompress a compressed payload. - * @param {Buffer} chunk Compressed data - * @param {boolean} fin Final fragment flag - * @param {Function} callback Callback function - */ - decompress(chunk, fin, callback) { - if (!__privateGet(this, _inflate)) { - let windowBits = Z_DEFAULT_WINDOWBITS; - if (__privateGet(this, _options).serverMaxWindowBits) { - if (!isValidClientWindowBits(__privateGet(this, _options).serverMaxWindowBits)) { - callback(new Error("Invalid server_max_window_bits")); - return; - } - windowBits = Number.parseInt(__privateGet(this, _options).serverMaxWindowBits); - } - try { - __privateSet(this, _inflate, createInflateRaw({ windowBits })); - } catch (err) { - callback(err); - return; - } - __privateGet(this, _inflate)[kBuffer] = []; - __privateGet(this, _inflate)[kLength] = 0; - __privateGet(this, _inflate).on("data", (data) => { - __privateGet(this, _inflate)[kLength] += data.length; - if (__privateGet(this, _maxPayloadSize) > 0 && __privateGet(this, _inflate)[kLength] > __privateGet(this, _maxPayloadSize)) { - callback(new MessageSizeExceededError()); - __privateGet(this, _inflate).removeAllListeners(); - __privateSet(this, _inflate, null); - return; - } - __privateGet(this, _inflate)[kBuffer].push(data); - }); - __privateGet(this, _inflate).on("error", (err) => { - __privateSet(this, _inflate, null); - callback(err); - }); - } - __privateGet(this, _inflate).write(chunk); - if (fin) { - __privateGet(this, _inflate).write(tail); - } - __privateGet(this, _inflate).flush(() => { - if (!__privateGet(this, _inflate)) { - return; - } - const full = Buffer.concat(__privateGet(this, _inflate)[kBuffer], __privateGet(this, _inflate)[kLength]); - __privateGet(this, _inflate)[kBuffer].length = 0; - __privateGet(this, _inflate)[kLength] = 0; - callback(null, full); - }); - } - }; - _inflate = new WeakMap(); - _options = new WeakMap(); - _maxPayloadSize = new WeakMap(); - module.exports = { PerMessageDeflate }; - } - }); - - // - var require_receiver = __commonJS({ - ""(exports, module) { - "use strict"; - var { Writable } = __require("stream"); - var assert = __require("assert"); - var { parserStates, opcodes, states, emptyBuffer, sentCloseFrameState } = require_constants5(); - var { kReadyState, kSentClose, kResponse, kReceivedClose } = require_symbols5(); - var { channels } = require_diagnostics(); - var { - isValidStatusCode, - isValidOpcode, - failWebsocketConnection, - websocketMessageReceived, - utf8Decode, - isControlFrame, - isTextBinaryFrame, - isContinuationFrame - } = require_util7(); - var { WebsocketFrameSend } = require_frame(); - var { closeWebSocketConnection } = require_connection(); - var { PerMessageDeflate } = require_permessage_deflate(); - var { MessageSizeExceededError } = require_errors(); - function failWebsocketConnectionWithCode(ws, code, reason) { - closeWebSocketConnection(ws, code, reason, Buffer.byteLength(reason)); - failWebsocketConnection(ws, reason); - } - var _buffers, _fragmentsBytes, _byteOffset, _loop, _state, _info, _fragments, _extensions, _maxFragments, _maxPayloadSize, _validatePayloadLength, validatePayloadLength_fn; - var ByteParser = class extends Writable { - /** - * @param {import('./websocket').WebSocket} ws - * @param {Map|null} extensions - * @param {{ maxFragments?: number, maxPayloadSize?: number }} [options] - */ - constructor(ws, extensions, options = {}) { - var _a, _b; - super(); - __privateAdd(this, _validatePayloadLength); - __privateAdd(this, _buffers, []); - __privateAdd(this, _fragmentsBytes, 0); - __privateAdd(this, _byteOffset, 0); - __privateAdd(this, _loop, false); - __privateAdd(this, _state, parserStates.INFO); - __privateAdd(this, _info, {}); - __privateAdd(this, _fragments, []); - /** @type {Map} */ - __privateAdd(this, _extensions, void 0); - /** @type {number} */ - __privateAdd(this, _maxFragments, void 0); - /** @type {number} */ - __privateAdd(this, _maxPayloadSize, void 0); - this.ws = ws; - __privateSet(this, _extensions, extensions == null ? /* @__PURE__ */ new Map() : extensions); - __privateSet(this, _maxFragments, (_a = options.maxFragments) != null ? _a : 0); - __privateSet(this, _maxPayloadSize, (_b = options.maxPayloadSize) != null ? _b : 0); - if (__privateGet(this, _extensions).has("permessage-deflate")) { - __privateGet(this, _extensions).set("permessage-deflate", new PerMessageDeflate(extensions, options)); - } - } - /** - * @param {Buffer} chunk - * @param {() => void} callback - */ - _write(chunk, _, callback) { - __privateGet(this, _buffers).push(chunk); - __privateSet(this, _byteOffset, __privateGet(this, _byteOffset) + chunk.length); - __privateSet(this, _loop, true); - 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 (__privateGet(this, _loop)) { - if (__privateGet(this, _state) === parserStates.INFO) { - if (__privateGet(this, _byteOffset) < 2) { - return callback(); - } - const buffer = this.consume(2); - const fin = (buffer[0] & 128) !== 0; - const opcode = buffer[0] & 15; - const masked = (buffer[1] & 128) === 128; - const fragmented = !fin && opcode !== opcodes.CONTINUATION; - const payloadLength = buffer[1] & 127; - const rsv1 = buffer[0] & 64; - const rsv2 = buffer[0] & 32; - const rsv3 = buffer[0] & 16; - if (!isValidOpcode(opcode)) { - failWebsocketConnection(this.ws, "Invalid opcode received"); - return callback(); - } - if (masked) { - failWebsocketConnection(this.ws, "Frame cannot be masked"); - return callback(); - } - if (rsv1 !== 0 && !__privateGet(this, _extensions).has("permessage-deflate")) { - failWebsocketConnection(this.ws, "Expected RSV1 to be clear."); - return; - } - if (rsv2 !== 0 || rsv3 !== 0) { - failWebsocketConnection(this.ws, "RSV1, RSV2, RSV3 must be clear"); - return; - } - if (fragmented && !isTextBinaryFrame(opcode)) { - failWebsocketConnection(this.ws, "Invalid frame type was fragmented."); - return; - } - if (isTextBinaryFrame(opcode) && __privateGet(this, _fragments).length > 0) { - failWebsocketConnection(this.ws, "Expected continuation frame"); - return; - } - if (__privateGet(this, _info).fragmented && fragmented) { - failWebsocketConnection(this.ws, "Fragmented frame exceeded 125 bytes."); - return; - } - if ((payloadLength > 125 || fragmented) && isControlFrame(opcode)) { - failWebsocketConnection(this.ws, "Control frame either too large or fragmented"); - return; - } - if (isContinuationFrame(opcode) && __privateGet(this, _fragments).length === 0 && !__privateGet(this, _info).compressed) { - failWebsocketConnection(this.ws, "Unexpected continuation frame"); - return; - } - if (payloadLength <= 125) { - __privateGet(this, _info).payloadLength = payloadLength; - __privateSet(this, _state, parserStates.READ_DATA); - if (!__privateMethod(this, _validatePayloadLength, validatePayloadLength_fn).call(this)) { - return; - } - } else if (payloadLength === 126) { - __privateSet(this, _state, parserStates.PAYLOADLENGTH_16); - } else if (payloadLength === 127) { - __privateSet(this, _state, parserStates.PAYLOADLENGTH_64); - } - if (isTextBinaryFrame(opcode)) { - __privateGet(this, _info).binaryType = opcode; - __privateGet(this, _info).compressed = rsv1 !== 0; - } - __privateGet(this, _info).opcode = opcode; - __privateGet(this, _info).masked = masked; - __privateGet(this, _info).fin = fin; - __privateGet(this, _info).fragmented = fragmented; - } else if (__privateGet(this, _state) === parserStates.PAYLOADLENGTH_16) { - if (__privateGet(this, _byteOffset) < 2) { - return callback(); - } - const buffer = this.consume(2); - __privateGet(this, _info).payloadLength = buffer.readUInt16BE(0); - __privateSet(this, _state, parserStates.READ_DATA); - if (!__privateMethod(this, _validatePayloadLength, validatePayloadLength_fn).call(this)) { - return; - } - } else if (__privateGet(this, _state) === parserStates.PAYLOADLENGTH_64) { - if (__privateGet(this, _byteOffset) < 8) { - return callback(); - } - const buffer = this.consume(8); - const upper = buffer.readUInt32BE(0); - const lower = buffer.readUInt32BE(4); - if (upper !== 0 || lower > __pow(2, 31) - 1) { - failWebsocketConnection(this.ws, "Received payload length > 2^31 bytes."); - return; - } - __privateGet(this, _info).payloadLength = lower; - __privateSet(this, _state, parserStates.READ_DATA); - if (!__privateMethod(this, _validatePayloadLength, validatePayloadLength_fn).call(this)) { - return; - } - } else if (__privateGet(this, _state) === parserStates.READ_DATA) { - if (__privateGet(this, _byteOffset) < __privateGet(this, _info).payloadLength) { - return callback(); - } - const body = this.consume(__privateGet(this, _info).payloadLength); - if (isControlFrame(__privateGet(this, _info).opcode)) { - __privateSet(this, _loop, this.parseControlFrame(body)); - __privateSet(this, _state, parserStates.INFO); - } else { - if (!__privateGet(this, _info).compressed) { - if (!this.writeFragments(body)) { - return; - } - if (__privateGet(this, _maxPayloadSize) > 0 && __privateGet(this, _fragmentsBytes) > __privateGet(this, _maxPayloadSize)) { - failWebsocketConnectionWithCode(this.ws, 1009, new MessageSizeExceededError().message); - return; - } - if (!__privateGet(this, _info).fragmented && __privateGet(this, _info).fin) { - websocketMessageReceived(this.ws, __privateGet(this, _info).binaryType, this.consumeFragments()); - } - __privateSet(this, _state, parserStates.INFO); - } else { - __privateGet(this, _extensions).get("permessage-deflate").decompress( - body, - __privateGet(this, _info).fin, - (error, data) => { - if (error) { - const code = error instanceof MessageSizeExceededError ? 1009 : 1007; - failWebsocketConnectionWithCode(this.ws, code, error.message); - return; - } - if (!this.writeFragments(data)) { - return; - } - if (__privateGet(this, _maxPayloadSize) > 0 && __privateGet(this, _fragmentsBytes) > __privateGet(this, _maxPayloadSize)) { - failWebsocketConnectionWithCode(this.ws, 1009, new MessageSizeExceededError().message); - return; - } - if (!__privateGet(this, _info).fin) { - __privateSet(this, _state, parserStates.INFO); - __privateSet(this, _loop, true); - this.run(callback); - return; - } - websocketMessageReceived(this.ws, __privateGet(this, _info).binaryType, this.consumeFragments()); - __privateSet(this, _loop, true); - __privateSet(this, _state, parserStates.INFO); - this.run(callback); - } - ); - __privateSet(this, _loop, false); - break; - } - } - } - } - } - /** - * Take n bytes from the buffered Buffers - * @param {number} n - * @returns {Buffer} - */ - consume(n) { - if (n > __privateGet(this, _byteOffset)) { - throw new Error("Called consume() before buffers satiated."); - } else if (n === 0) { - return emptyBuffer; - } - if (__privateGet(this, _buffers)[0].length === n) { - __privateSet(this, _byteOffset, __privateGet(this, _byteOffset) - __privateGet(this, _buffers)[0].length); - return __privateGet(this, _buffers).shift(); - } - const buffer = Buffer.allocUnsafe(n); - let offset = 0; - while (offset !== n) { - const next = __privateGet(this, _buffers)[0]; - const { length } = next; - if (length + offset === n) { - buffer.set(__privateGet(this, _buffers).shift(), offset); - break; - } else if (length + offset > n) { - buffer.set(next.subarray(0, n - offset), offset); - __privateGet(this, _buffers)[0] = next.subarray(n - offset); - break; - } else { - buffer.set(__privateGet(this, _buffers).shift(), offset); - offset += next.length; - } - } - __privateSet(this, _byteOffset, __privateGet(this, _byteOffset) - n); - return buffer; - } - writeFragments(fragment) { - if (__privateGet(this, _maxFragments) > 0 && __privateGet(this, _fragments).length === __privateGet(this, _maxFragments)) { - failWebsocketConnectionWithCode(this.ws, 1008, "Too many message fragments"); - return false; - } - __privateSet(this, _fragmentsBytes, __privateGet(this, _fragmentsBytes) + fragment.length); - __privateGet(this, _fragments).push(fragment); - return true; - } - consumeFragments() { - const fragments = __privateGet(this, _fragments); - if (fragments.length === 1) { - __privateSet(this, _fragmentsBytes, 0); - return fragments.shift(); - } - const output = Buffer.concat(fragments, __privateGet(this, _fragmentsBytes)); - __privateSet(this, _fragments, []); - __privateSet(this, _fragmentsBytes, 0); - return output; - } - parseCloseBody(data) { - assert(data.length !== 1); - let code; - if (data.length >= 2) { - code = data.readUInt16BE(0); - } - if (code !== void 0 && !isValidStatusCode(code)) { - return { code: 1002, reason: "Invalid status code", error: true }; - } - let reason = data.subarray(2); - if (reason[0] === 239 && reason[1] === 187 && reason[2] === 191) { - reason = reason.subarray(3); - } - try { - reason = utf8Decode(reason); - } catch (e) { - return { code: 1007, reason: "Invalid UTF-8", error: true }; - } - return { code, reason, error: false }; - } - /** - * Parses control frames. - * @param {Buffer} body - */ - parseControlFrame(body) { - const { opcode, payloadLength } = __privateGet(this, _info); - if (opcode === opcodes.CLOSE) { - if (payloadLength === 1) { - failWebsocketConnection(this.ws, "Received close frame with a 1-byte body."); - return false; - } - __privateGet(this, _info).closeInfo = this.parseCloseBody(body); - if (__privateGet(this, _info).closeInfo.error) { - const { code, reason } = __privateGet(this, _info).closeInfo; - closeWebSocketConnection(this.ws, code, reason, reason.length); - failWebsocketConnection(this.ws, reason); - return false; - } - if (this.ws[kSentClose] !== sentCloseFrameState.SENT) { - let body2 = emptyBuffer; - if (__privateGet(this, _info).closeInfo.code) { - body2 = Buffer.allocUnsafe(2); - body2.writeUInt16BE(__privateGet(this, _info).closeInfo.code, 0); - } - const closeFrame = new WebsocketFrameSend(body2); - this.ws[kResponse].socket.write( - closeFrame.createFrame(opcodes.CLOSE), - (err) => { - if (!err) { - this.ws[kSentClose] = sentCloseFrameState.SENT; - } - } - ); - } - this.ws[kReadyState] = states.CLOSING; - this.ws[kReceivedClose] = true; - return false; - } else if (opcode === opcodes.PING) { - 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 - }); - } - } - } else if (opcode === opcodes.PONG) { - if (channels.pong.hasSubscribers) { - channels.pong.publish({ - payload: body - }); - } - } - return true; - } - get closingInfo() { - return __privateGet(this, _info).closeInfo; - } - }; - _buffers = new WeakMap(); - _fragmentsBytes = new WeakMap(); - _byteOffset = new WeakMap(); - _loop = new WeakMap(); - _state = new WeakMap(); - _info = new WeakMap(); - _fragments = new WeakMap(); - _extensions = new WeakMap(); - _maxFragments = new WeakMap(); - _maxPayloadSize = new WeakMap(); - _validatePayloadLength = new WeakSet(); - validatePayloadLength_fn = function() { - if (__privateGet(this, _maxPayloadSize) > 0 && !isControlFrame(__privateGet(this, _info).opcode) && __privateGet(this, _info).payloadLength + __privateGet(this, _fragmentsBytes) > __privateGet(this, _maxPayloadSize)) { - failWebsocketConnectionWithCode(this.ws, 1009, "Payload size exceeds maximum allowed size"); - return false; - } - return true; - }; - module.exports = { - ByteParser - }; - } - }); - - // - var require_sender = __commonJS({ - ""(exports, module) { - "use strict"; - var { WebsocketFrameSend } = require_frame(); - var { opcodes, sendHints } = require_constants5(); - var FixedQueue = require_fixed_queue(); - var FastBuffer = Buffer[Symbol.species]; - var _queue, _running, _socket, _run, run_fn; - var SendQueue = class { - constructor(socket) { - __privateAdd(this, _run); - /** - * @type {FixedQueue} - */ - __privateAdd(this, _queue, new FixedQueue()); - /** - * @type {boolean} - */ - __privateAdd(this, _running, false); - /** @type {import('node:net').Socket} */ - __privateAdd(this, _socket, void 0); - __privateSet(this, _socket, socket); - } - add(item, cb, hint) { - if (hint !== sendHints.blob) { - const frame = createFrame(item, hint); - if (!__privateGet(this, _running)) { - __privateGet(this, _socket).write(frame, cb); - } else { - const node2 = { - promise: null, - callback: cb, - frame - }; - __privateGet(this, _queue).push(node2); - } - return; - } - const node = { - promise: item.arrayBuffer().then((ab) => { - node.promise = null; - node.frame = createFrame(ab, hint); - }), - callback: cb, - frame: null - }; - __privateGet(this, _queue).push(node); - if (!__privateGet(this, _running)) { - __privateMethod(this, _run, run_fn).call(this); - } - } - }; - _queue = new WeakMap(); - _running = new WeakMap(); - _socket = new WeakMap(); - _run = new WeakSet(); - run_fn = function() { - return __async(this, null, function* () { - __privateSet(this, _running, true); - const queue = __privateGet(this, _queue); - while (!queue.isEmpty()) { - const node = queue.shift(); - if (node.promise !== null) { - yield node.promise; - } - __privateGet(this, _socket).write(node.frame, node.callback); - node.callback = node.frame = null; - } - __privateSet(this, _running, false); - }); - }; - function createFrame(data, hint) { - return new WebsocketFrameSend(toBuffer(data, hint)).createFrame(hint === sendHints.string ? opcodes.TEXT : opcodes.BINARY); - } - function toBuffer(data, hint) { - switch (hint) { - case sendHints.string: - return Buffer.from(data); - case sendHints.arrayBuffer: - case sendHints.blob: - return new FastBuffer(data); - case sendHints.typedArray: - return new FastBuffer(data.buffer, data.byteOffset, data.byteLength); - } - } - module.exports = { SendQueue }; - } - }); - - // - var require_websocket = __commonJS({ - ""(exports, module) { - "use strict"; - var { webidl } = require_webidl(); - var { URLSerializer } = require_data_url(); - var { environmentSettingsObject } = require_util2(); - var { staticPropertyDescriptors, states, sentCloseFrameState, sendHints } = require_constants5(); - var { - kWebSocketURL, - kReadyState, - kController, - kBinaryType, - kResponse, - kSentClose, - kByteParser - } = require_symbols5(); - var { - isConnecting, - isEstablished, - isClosing, - isValidSubprotocol, - fireEvent - } = require_util7(); - var { establishWebSocketConnection, closeWebSocketConnection } = require_connection(); - var { ByteParser } = require_receiver(); - var { kEnumerableProperty, isBlobLike } = require_util(); - var { getGlobalDispatcher } = require_global2(); - var { types } = __require("util"); - var { ErrorEvent, CloseEvent } = require_events(); - var { SendQueue } = require_sender(); - var _events, _bufferedAmount, _protocol, _extensions, _sendQueue, _onConnectionEstablished, onConnectionEstablished_fn; - var _WebSocket = class _WebSocket extends EventTarget { - /** - * @param {string} url - * @param {string|string[]} protocols - */ - constructor(url, protocols = []) { - super(); - /** - * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol - */ - __privateAdd(this, _onConnectionEstablished); - __privateAdd(this, _events, { - open: null, - error: null, - close: null, - message: null - }); - __privateAdd(this, _bufferedAmount, 0); - __privateAdd(this, _protocol, ""); - __privateAdd(this, _extensions, ""); - /** @type {SendQueue} */ - __privateAdd(this, _sendQueue, void 0); - webidl.util.markAsUncloneable(this); - const prefix = "WebSocket constructor"; - webidl.argumentLengthCheck(arguments, 1, prefix); - const options = webidl.converters["DOMString or sequence or WebSocketInit"](protocols, prefix, "options"); - url = webidl.converters.USVString(url, prefix, "url"); - protocols = options.protocols; - const baseURL = environmentSettingsObject.settingsObject.baseUrl; - let urlRecord; - try { - urlRecord = new URL(url, baseURL); - } catch (e) { - throw new DOMException(e, "SyntaxError"); - } - if (urlRecord.protocol === "http:") { - urlRecord.protocol = "ws:"; - } else if (urlRecord.protocol === "https:") { - urlRecord.protocol = "wss:"; - } - if (urlRecord.protocol !== "ws:" && urlRecord.protocol !== "wss:") { - throw new DOMException( - `Expected a ws: or wss: protocol, got ${urlRecord.protocol}`, - "SyntaxError" - ); - } - if (urlRecord.hash || urlRecord.href.endsWith("#")) { - throw new DOMException("Got fragment", "SyntaxError"); - } - if (typeof protocols === "string") { - protocols = [protocols]; - } - 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"); - } - this[kWebSocketURL] = new URL(urlRecord.href); - const client = environmentSettingsObject.settingsObject; - this[kController] = establishWebSocketConnection( - urlRecord, - protocols, - client, - this, - (response, extensions) => __privateMethod(this, _onConnectionEstablished, onConnectionEstablished_fn).call(this, response, extensions), - options - ); - this[kReadyState] = _WebSocket.CONNECTING; - this[kSentClose] = sentCloseFrameState.NOT_SENT; - this[kBinaryType] = "blob"; - } - /** - * @see https://websockets.spec.whatwg.org/#dom-websocket-close - * @param {number|undefined} code - * @param {string|undefined} reason - */ - close(code = void 0, reason = void 0) { - webidl.brandCheck(this, _WebSocket); - const prefix = "WebSocket.close"; - if (code !== void 0) { - code = webidl.converters["unsigned short"](code, prefix, "code", { clamp: true }); - } - if (reason !== void 0) { - reason = webidl.converters.USVString(reason, prefix, "reason"); - } - if (code !== void 0) { - if (code !== 1e3 && (code < 3e3 || code > 4999)) { - throw new DOMException("invalid code", "InvalidAccessError"); - } - } - let reasonByteLength = 0; - if (reason !== void 0) { - reasonByteLength = Buffer.byteLength(reason); - if (reasonByteLength > 123) { - throw new DOMException( - `Reason must be less than 123 bytes; received ${reasonByteLength}`, - "SyntaxError" - ); - } - } - closeWebSocketConnection(this, code, reason, reasonByteLength); - } - /** - * @see https://websockets.spec.whatwg.org/#dom-websocket-send - * @param {NodeJS.TypedArray|ArrayBuffer|Blob|string} data - */ - send(data) { - webidl.brandCheck(this, _WebSocket); - const prefix = "WebSocket.send"; - webidl.argumentLengthCheck(arguments, 1, prefix); - data = webidl.converters.WebSocketSendData(data, prefix, "data"); - if (isConnecting(this)) { - throw new DOMException("Sent before connected.", "InvalidStateError"); - } - if (!isEstablished(this) || isClosing(this)) { - return; - } - if (typeof data === "string") { - const length = Buffer.byteLength(data); - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) + length); - __privateGet(this, _sendQueue).add(data, () => { - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) - length); - }, sendHints.string); - } else if (types.isArrayBuffer(data)) { - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) + data.byteLength); - __privateGet(this, _sendQueue).add(data, () => { - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) - data.byteLength); - }, sendHints.arrayBuffer); - } else if (ArrayBuffer.isView(data)) { - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) + data.byteLength); - __privateGet(this, _sendQueue).add(data, () => { - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) - data.byteLength); - }, sendHints.typedArray); - } else if (isBlobLike(data)) { - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) + data.size); - __privateGet(this, _sendQueue).add(data, () => { - __privateSet(this, _bufferedAmount, __privateGet(this, _bufferedAmount) - data.size); - }, sendHints.blob); - } - } - get readyState() { - webidl.brandCheck(this, _WebSocket); - return this[kReadyState]; - } - get bufferedAmount() { - webidl.brandCheck(this, _WebSocket); - return __privateGet(this, _bufferedAmount); - } - get url() { - webidl.brandCheck(this, _WebSocket); - return URLSerializer(this[kWebSocketURL]); - } - get extensions() { - webidl.brandCheck(this, _WebSocket); - return __privateGet(this, _extensions); - } - get protocol() { - webidl.brandCheck(this, _WebSocket); - return __privateGet(this, _protocol); - } - get onopen() { - webidl.brandCheck(this, _WebSocket); - return __privateGet(this, _events).open; - } - set onopen(fn) { - webidl.brandCheck(this, _WebSocket); - if (__privateGet(this, _events).open) { - this.removeEventListener("open", __privateGet(this, _events).open); - } - if (typeof fn === "function") { - __privateGet(this, _events).open = fn; - this.addEventListener("open", fn); - } else { - __privateGet(this, _events).open = null; - } - } - get onerror() { - webidl.brandCheck(this, _WebSocket); - return __privateGet(this, _events).error; - } - set onerror(fn) { - webidl.brandCheck(this, _WebSocket); - if (__privateGet(this, _events).error) { - this.removeEventListener("error", __privateGet(this, _events).error); - } - if (typeof fn === "function") { - __privateGet(this, _events).error = fn; - this.addEventListener("error", fn); - } else { - __privateGet(this, _events).error = null; - } - } - get onclose() { - webidl.brandCheck(this, _WebSocket); - return __privateGet(this, _events).close; - } - set onclose(fn) { - webidl.brandCheck(this, _WebSocket); - if (__privateGet(this, _events).close) { - this.removeEventListener("close", __privateGet(this, _events).close); - } - if (typeof fn === "function") { - __privateGet(this, _events).close = fn; - this.addEventListener("close", fn); - } else { - __privateGet(this, _events).close = null; - } - } - get onmessage() { - webidl.brandCheck(this, _WebSocket); - return __privateGet(this, _events).message; - } - set onmessage(fn) { - webidl.brandCheck(this, _WebSocket); - if (__privateGet(this, _events).message) { - this.removeEventListener("message", __privateGet(this, _events).message); - } - if (typeof fn === "function") { - __privateGet(this, _events).message = fn; - this.addEventListener("message", fn); - } else { - __privateGet(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; - } - } - }; - _events = new WeakMap(); - _bufferedAmount = new WeakMap(); - _protocol = new WeakMap(); - _extensions = new WeakMap(); - _sendQueue = new WeakMap(); - _onConnectionEstablished = new WeakSet(); - onConnectionEstablished_fn = function(response, parsedExtensions) { - var _a, _b; - this[kResponse] = response; - const webSocketOptions = (_b = (_a = this[kController]) == null ? void 0 : _a.dispatcher) == null ? void 0 : _b.webSocketOptions; - const maxFragments = webSocketOptions == null ? void 0 : webSocketOptions.maxFragments; - const maxPayloadSize = webSocketOptions == null ? void 0 : webSocketOptions.maxPayloadSize; - const parser = new ByteParser(this, parsedExtensions, { - maxFragments, - maxPayloadSize - }); - parser.on("drain", onParserDrain); - parser.on("error", onParserError.bind(this)); - response.socket.ws = this; - this[kByteParser] = parser; - __privateSet(this, _sendQueue, new SendQueue(response.socket)); - this[kReadyState] = states.OPEN; - const extensions = response.headersList.get("sec-websocket-extensions"); - if (extensions !== null) { - __privateSet(this, _extensions, extensions); - } - const protocol = response.headersList.get("sec-websocket-protocol"); - if (protocol !== null) { - __privateSet(this, _protocol, protocol); - } - fireEvent("open", this); - }; - var WebSocket = _WebSocket; - WebSocket.CONNECTING = WebSocket.prototype.CONNECTING = states.CONNECTING; - WebSocket.OPEN = WebSocket.prototype.OPEN = states.OPEN; - WebSocket.CLOSING = WebSocket.prototype.CLOSING = states.CLOSING; - 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, prefix, argument) { - if (webidl.util.Type(V) === "Object" && Symbol.iterator in V) { - return webidl.converters["sequence"](V); - } - return webidl.converters.DOMString(V, prefix, argument); - }; - webidl.converters.WebSocketInit = webidl.dictionaryConverter([ - { - key: "protocols", - converter: webidl.converters["DOMString or sequence"], - defaultValue: () => new Array(0) - }, - { - key: "dispatcher", - converter: webidl.converters.any, - defaultValue: () => 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.isArrayBuffer(V)) { - return webidl.converters.BufferSource(V); - } - } - return webidl.converters.USVString(V); - }; - function onParserDrain() { - this.ws[kResponse].socket.resume(); - } - function onParserError(err) { - let message; - let code; - if (err instanceof CloseEvent) { - message = err.reason; - code = err.code; - } else { - message = err.message; - } - fireEvent("error", this, () => new ErrorEvent("error", { error: err, message })); - closeWebSocketConnection(this, code); - } - module.exports = { - WebSocket - }; - } - }); - - // - var require_util8 = __commonJS({ - ""(exports, module) { - "use strict"; - function isValidLastEventId(value) { - return value.indexOf("\0") === -1; - } - function isASCIINumber(value) { - if (value.length === 0) - return false; - for (let i = 0; i < value.length; i++) { - if (value.charCodeAt(i) < 48 || value.charCodeAt(i) > 57) - return false; - } - return true; - } - function delay(ms) { - return new Promise((resolve2) => { - setTimeout(resolve2, ms).unref(); - }); - } - module.exports = { - isValidLastEventId, - isASCIINumber, - delay - }; - } - }); - - // - var require_eventsource_stream = __commonJS({ - ""(exports, module) { - "use strict"; - var { Transform } = __require("stream"); - var { isASCIINumber, isValidLastEventId } = require_util8(); - var BOM = [239, 187, 191]; - var LF = 10; - var CR = 13; - var COLON = 58; - var SPACE = 32; - var EventSourceStream = class extends Transform { - /** - * @param {object} options - * @param {eventSourceSettings} options.eventSourceSettings - * @param {Function} [options.push] - */ - constructor(options = {}) { - options.readableObjectMode = true; - super(options); - /** - * @type {eventSourceSettings} - */ - __publicField(this, "state", null); - /** - * Leading byte-order-mark check. - * @type {boolean} - */ - __publicField(this, "checkBOM", true); - /** - * @type {boolean} - */ - __publicField(this, "crlfCheck", false); - /** - * @type {boolean} - */ - __publicField(this, "eventEndCheck", false); - /** - * @type {Buffer} - */ - __publicField(this, "buffer", null); - __publicField(this, "pos", 0); - __publicField(this, "event", { - data: void 0, - event: void 0, - id: void 0, - retry: void 0 - }); - this.state = options.eventSourceSettings || {}; - if (options.push) { - this.push = options.push; - } - } - /** - * @param {Buffer} chunk - * @param {string} _encoding - * @param {Function} callback - * @returns {void} - */ - _transform(chunk, _encoding, callback) { - if (chunk.length === 0) { - callback(); - return; - } - if (this.buffer) { - this.buffer = Buffer.concat([this.buffer, chunk]); - } else { - this.buffer = chunk; - } - if (this.checkBOM) { - switch (this.buffer.length) { - case 1: - if (this.buffer[0] === BOM[0]) { - callback(); - return; - } - this.checkBOM = false; - callback(); - return; - case 2: - if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1]) { - callback(); - return; - } - this.checkBOM = false; - break; - case 3: - if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1] && this.buffer[2] === BOM[2]) { - this.buffer = Buffer.alloc(0); - this.checkBOM = false; - callback(); - return; - } - this.checkBOM = false; - break; - default: - if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1] && this.buffer[2] === BOM[2]) { - this.buffer = this.buffer.subarray(3); - } - this.checkBOM = false; - break; - } - } - while (this.pos < this.buffer.length) { - if (this.eventEndCheck) { - if (this.crlfCheck) { - if (this.buffer[this.pos] === LF) { - this.buffer = this.buffer.subarray(this.pos + 1); - this.pos = 0; - this.crlfCheck = false; - continue; - } - this.crlfCheck = false; - } - if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) { - if (this.buffer[this.pos] === CR) { - this.crlfCheck = true; - } - this.buffer = this.buffer.subarray(this.pos + 1); - this.pos = 0; - if (this.event.data !== void 0 || this.event.event || this.event.id || this.event.retry) { - this.processEvent(this.event); - } - this.clearEvent(); - continue; - } - this.eventEndCheck = false; - continue; - } - if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) { - if (this.buffer[this.pos] === CR) { - this.crlfCheck = true; - } - this.parseLine(this.buffer.subarray(0, this.pos), this.event); - this.buffer = this.buffer.subarray(this.pos + 1); - this.pos = 0; - this.eventEndCheck = true; - continue; - } - this.pos++; - } - callback(); - } - /** - * @param {Buffer} line - * @param {EventStreamEvent} event - */ - parseLine(line, event) { - if (line.length === 0) { - return; - } - const colonPosition = line.indexOf(COLON); - if (colonPosition === 0) { - return; - } - let field = ""; - let value = ""; - if (colonPosition !== -1) { - field = line.subarray(0, colonPosition).toString("utf8"); - let valueStart = colonPosition + 1; - if (line[valueStart] === SPACE) { - ++valueStart; - } - value = line.subarray(valueStart).toString("utf8"); - } else { - field = line.toString("utf8"); - value = ""; - } - switch (field) { - case "data": - if (event[field] === void 0) { - event[field] = value; - } else { - event[field] += ` -${value}`; - } - break; - case "retry": - if (isASCIINumber(value)) { - event[field] = value; - } - break; - case "id": - if (isValidLastEventId(value)) { - event[field] = value; - } - break; - case "event": - if (value.length > 0) { - event[field] = value; - } - break; - } - } - /** - * @param {EventSourceStreamEvent} event - */ - processEvent(event) { - if (event.retry && isASCIINumber(event.retry)) { - this.state.reconnectionTime = parseInt(event.retry, 10); - } - if (event.id && isValidLastEventId(event.id)) { - this.state.lastEventId = event.id; - } - if (event.data !== void 0) { - this.push({ - type: event.event || "message", - options: { - data: event.data, - lastEventId: this.state.lastEventId, - origin: this.state.origin - } - }); - } - } - clearEvent() { - this.event = { - data: void 0, - event: void 0, - id: void 0, - retry: void 0 - }; - } - }; - module.exports = { - EventSourceStream - }; - } - }); - - // - var require_eventsource = __commonJS({ - ""(exports, module) { - "use strict"; - var { pipeline } = __require("stream"); - var { fetching } = require_fetch(); - var { makeRequest } = require_request2(); - var { webidl } = require_webidl(); - var { EventSourceStream } = require_eventsource_stream(); - var { parseMIMEType } = require_data_url(); - var { createFastMessageEvent } = require_events(); - var { isNetworkError } = require_response(); - var { delay } = require_util8(); - var { kEnumerableProperty } = require_util(); - var { environmentSettingsObject } = require_util2(); - var experimentalWarned = false; - var defaultReconnectionTime = 3e3; - var CONNECTING = 0; - var OPEN = 1; - var CLOSED = 2; - var ANONYMOUS = "anonymous"; - var USE_CREDENTIALS = "use-credentials"; - var _events, _url, _withCredentials, _readyState, _request, _controller, _dispatcher, _state, _connect, connect_fn, _reconnect, reconnect_fn; - var _EventSource = class _EventSource extends EventTarget { - /** - * Creates a new EventSource object. - * @param {string} url - * @param {EventSourceInit} [eventSourceInitDict] - * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#the-eventsource-interface - */ - constructor(url, eventSourceInitDict = {}) { - super(); - __privateAdd(this, _connect); - /** - * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model - * @returns {Promise} - */ - __privateAdd(this, _reconnect); - __privateAdd(this, _events, { - open: null, - error: null, - message: null - }); - __privateAdd(this, _url, null); - __privateAdd(this, _withCredentials, false); - __privateAdd(this, _readyState, CONNECTING); - __privateAdd(this, _request, null); - __privateAdd(this, _controller, null); - __privateAdd(this, _dispatcher, void 0); - /** - * @type {import('./eventsource-stream').eventSourceSettings} - */ - __privateAdd(this, _state, void 0); - webidl.util.markAsUncloneable(this); - const prefix = "EventSource constructor"; - webidl.argumentLengthCheck(arguments, 1, prefix); - if (!experimentalWarned) { - experimentalWarned = true; - process.emitWarning("EventSource is experimental, expect them to change at any time.", { - code: "UNDICI-ES" - }); - } - url = webidl.converters.USVString(url, prefix, "url"); - eventSourceInitDict = webidl.converters.EventSourceInitDict(eventSourceInitDict, prefix, "eventSourceInitDict"); - __privateSet(this, _dispatcher, eventSourceInitDict.dispatcher); - __privateSet(this, _state, { - lastEventId: "", - reconnectionTime: defaultReconnectionTime - }); - const settings = environmentSettingsObject; - let urlRecord; - try { - urlRecord = new URL(url, settings.settingsObject.baseUrl); - __privateGet(this, _state).origin = urlRecord.origin; - } catch (e) { - throw new DOMException(e, "SyntaxError"); - } - __privateSet(this, _url, urlRecord.href); - let corsAttributeState = ANONYMOUS; - if (eventSourceInitDict.withCredentials) { - corsAttributeState = USE_CREDENTIALS; - __privateSet(this, _withCredentials, true); - } - const initRequest = { - redirect: "follow", - keepalive: true, - // @see https://html.spec.whatwg.org/multipage/urls-and-fetching.html#cors-settings-attributes - mode: "cors", - credentials: corsAttributeState === "anonymous" ? "same-origin" : "omit", - referrer: "no-referrer" - }; - initRequest.client = environmentSettingsObject.settingsObject; - initRequest.headersList = [["accept", { name: "accept", value: "text/event-stream" }]]; - initRequest.cache = "no-store"; - initRequest.initiator = "other"; - initRequest.urlList = [new URL(__privateGet(this, _url))]; - __privateSet(this, _request, makeRequest(initRequest)); - __privateMethod(this, _connect, connect_fn).call(this); - } - /** - * Returns the state of this EventSource object's connection. It can have the - * values described below. - * @returns {0|1|2} - * @readonly - */ - get readyState() { - return __privateGet(this, _readyState); - } - /** - * Returns the URL providing the event stream. - * @readonly - * @returns {string} - */ - get url() { - return __privateGet(this, _url); - } - /** - * Returns a boolean indicating whether the EventSource object was - * instantiated with CORS credentials set (true), or not (false, the default). - */ - get withCredentials() { - return __privateGet(this, _withCredentials); - } - /** - * Closes the connection, if any, and sets the readyState attribute to - * CLOSED. - */ - close() { - webidl.brandCheck(this, _EventSource); - if (__privateGet(this, _readyState) === CLOSED) - return; - __privateSet(this, _readyState, CLOSED); - __privateGet(this, _controller).abort(); - __privateSet(this, _request, null); - } - get onopen() { - return __privateGet(this, _events).open; - } - set onopen(fn) { - if (__privateGet(this, _events).open) { - this.removeEventListener("open", __privateGet(this, _events).open); - } - if (typeof fn === "function") { - __privateGet(this, _events).open = fn; - this.addEventListener("open", fn); - } else { - __privateGet(this, _events).open = null; - } - } - get onmessage() { - return __privateGet(this, _events).message; - } - set onmessage(fn) { - if (__privateGet(this, _events).message) { - this.removeEventListener("message", __privateGet(this, _events).message); - } - if (typeof fn === "function") { - __privateGet(this, _events).message = fn; - this.addEventListener("message", fn); - } else { - __privateGet(this, _events).message = null; - } - } - get onerror() { - return __privateGet(this, _events).error; - } - set onerror(fn) { - if (__privateGet(this, _events).error) { - this.removeEventListener("error", __privateGet(this, _events).error); - } - if (typeof fn === "function") { - __privateGet(this, _events).error = fn; - this.addEventListener("error", fn); - } else { - __privateGet(this, _events).error = null; - } - } - }; - _events = new WeakMap(); - _url = new WeakMap(); - _withCredentials = new WeakMap(); - _readyState = new WeakMap(); - _request = new WeakMap(); - _controller = new WeakMap(); - _dispatcher = new WeakMap(); - _state = new WeakMap(); - _connect = new WeakSet(); - connect_fn = function() { - if (__privateGet(this, _readyState) === CLOSED) - return; - __privateSet(this, _readyState, CONNECTING); - const fetchParams = { - request: __privateGet(this, _request), - dispatcher: __privateGet(this, _dispatcher) - }; - const processEventSourceEndOfBody = (response) => { - if (isNetworkError(response)) { - this.dispatchEvent(new Event("error")); - this.close(); - } - __privateMethod(this, _reconnect, reconnect_fn).call(this); - }; - fetchParams.processResponseEndOfBody = processEventSourceEndOfBody; - fetchParams.processResponse = (response) => { - if (isNetworkError(response)) { - if (response.aborted) { - this.close(); - this.dispatchEvent(new Event("error")); - return; - } else { - __privateMethod(this, _reconnect, reconnect_fn).call(this); - return; - } - } - const contentType = response.headersList.get("content-type", true); - const mimeType = contentType !== null ? parseMIMEType(contentType) : "failure"; - const contentTypeValid = mimeType !== "failure" && mimeType.essence === "text/event-stream"; - if (response.status !== 200 || contentTypeValid === false) { - this.close(); - this.dispatchEvent(new Event("error")); - return; - } - __privateSet(this, _readyState, OPEN); - this.dispatchEvent(new Event("open")); - __privateGet(this, _state).origin = response.urlList[response.urlList.length - 1].origin; - const eventSourceStream = new EventSourceStream({ - eventSourceSettings: __privateGet(this, _state), - push: (event) => { - this.dispatchEvent(createFastMessageEvent( - event.type, - event.options - )); - } - }); - pipeline( - response.body.stream, - eventSourceStream, - (error) => { - if ((error == null ? void 0 : error.aborted) === false) { - this.close(); - this.dispatchEvent(new Event("error")); - } - } - ); - }; - __privateSet(this, _controller, fetching(fetchParams)); - }; - _reconnect = new WeakSet(); - reconnect_fn = function() { - return __async(this, null, function* () { - if (__privateGet(this, _readyState) === CLOSED) - return; - __privateSet(this, _readyState, CONNECTING); - this.dispatchEvent(new Event("error")); - yield delay(__privateGet(this, _state).reconnectionTime); - if (__privateGet(this, _readyState) !== CONNECTING) - return; - if (__privateGet(this, _state).lastEventId.length) { - __privateGet(this, _request).headersList.set("last-event-id", __privateGet(this, _state).lastEventId, true); - } - __privateMethod(this, _connect, connect_fn).call(this); - }); - }; - var EventSource = _EventSource; - var constantsPropertyDescriptors = { - CONNECTING: { - __proto__: null, - configurable: false, - enumerable: true, - value: CONNECTING, - writable: false - }, - OPEN: { - __proto__: null, - configurable: false, - enumerable: true, - value: OPEN, - writable: false - }, - CLOSED: { - __proto__: null, - configurable: false, - enumerable: true, - value: CLOSED, - writable: false - } - }; - Object.defineProperties(EventSource, constantsPropertyDescriptors); - Object.defineProperties(EventSource.prototype, constantsPropertyDescriptors); - Object.defineProperties(EventSource.prototype, { - close: kEnumerableProperty, - onerror: kEnumerableProperty, - onmessage: kEnumerableProperty, - onopen: kEnumerableProperty, - readyState: kEnumerableProperty, - url: kEnumerableProperty, - withCredentials: kEnumerableProperty - }); - webidl.converters.EventSourceInitDict = webidl.dictionaryConverter([ - { - key: "withCredentials", - converter: webidl.converters.boolean, - defaultValue: () => false - }, - { - key: "dispatcher", - // undici only - converter: webidl.converters.any - } - ]); - module.exports = { - EventSource, - defaultReconnectionTime - }; - } - }); - - // - var require_undici = __commonJS({ - ""(exports, module) { - "use strict"; - var Client = require_client(); - var Dispatcher = require_dispatcher(); - var Pool = require_pool(); - var BalancedPool = require_balanced_pool(); - var Agent = require_agent(); - var ProxyAgent2 = require_proxy_agent(); - var EnvHttpProxyAgent = require_env_http_proxy_agent(); - var RetryAgent = require_retry_agent(); - var errors = require_errors(); - var util = require_util(); - var { InvalidArgumentError } = errors; - var api = require_api(); - var buildConnector = require_connect(); - var MockClient = require_mock_client(); - var MockAgent = require_mock_agent(); - var MockPool = require_mock_pool(); - var mockErrors = require_mock_errors(); - var RetryHandler = require_retry_handler(); - var { getGlobalDispatcher, setGlobalDispatcher } = require_global2(); - var DecoratorHandler = require_decorator_handler(); - var RedirectHandler = require_redirect_handler(); - var createRedirectInterceptor = require_redirect_interceptor(); - 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 = ProxyAgent2; - module.exports.EnvHttpProxyAgent = EnvHttpProxyAgent; - module.exports.RetryAgent = RetryAgent; - module.exports.RetryHandler = RetryHandler; - module.exports.DecoratorHandler = DecoratorHandler; - module.exports.RedirectHandler = RedirectHandler; - module.exports.createRedirectInterceptor = createRedirectInterceptor; - module.exports.interceptors = { - redirect: require_redirect(), - retry: require_retry(), - dump: require_dump(), - dns: require_dns() - }; - module.exports.buildConnector = buildConnector; - module.exports.errors = errors; - module.exports.util = { - parseHeaders: util.parseHeaders, - headerNameToString: util.headerNameToString - }; - 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 path4 = opts.path; - if (!opts.path.startsWith("/")) { - path4 = `/${path4}`; - } - url = new URL(util.parseOrigin(url).origin + path4); - } 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, __spreadProps(__spreadValues({}, 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; - var fetchImpl = require_fetch().fetch; - module.exports.fetch = function fetch(init, options = void 0) { - return __async(this, null, function* () { - try { - return yield fetchImpl(init, options); - } catch (err) { - if (err && typeof err === "object") { - Error.captureStackTrace(err); - } - throw err; - } - }); - }; - module.exports.Headers = require_headers().Headers; - module.exports.Response = require_response().Response; - module.exports.Request = require_request2().Request; - module.exports.FormData = require_formdata().FormData; - var _a; - module.exports.File = (_a = globalThis.File) != null ? _a : __require("buffer").File; - module.exports.FileReader = require_filereader().FileReader; - var { setGlobalOrigin, getGlobalOrigin } = require_global(); - module.exports.setGlobalOrigin = setGlobalOrigin; - module.exports.getGlobalOrigin = getGlobalOrigin; - var { CacheStorage } = require_cachestorage(); - var { kConstruct } = require_symbols4(); - module.exports.caches = new CacheStorage(kConstruct); - var { deleteCookie, getCookies, getSetCookies, setCookie } = require_cookies(); - module.exports.deleteCookie = deleteCookie; - module.exports.getCookies = getCookies; - module.exports.getSetCookies = getSetCookies; - module.exports.setCookie = setCookie; - var { parseMIMEType, serializeAMimeType } = require_data_url(); - module.exports.parseMIMEType = parseMIMEType; - module.exports.serializeAMimeType = serializeAMimeType; - var { CloseEvent, ErrorEvent, MessageEvent } = require_events(); - module.exports.WebSocket = require_websocket().WebSocket; - module.exports.CloseEvent = CloseEvent; - module.exports.ErrorEvent = ErrorEvent; - module.exports.MessageEvent = MessageEvent; - 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; - var { EventSource } = require_eventsource(); - module.exports.EventSource = EventSource; - } - }); - - // github-actions/saucelabs/saucelabs_token.data - var saucelabs_token_default = __toBinaryNode("M+ThJ6FIHztxuQUWYdF9cpQXIYtnjPFMkNiP8j9ZeT2LkB0K1VEx3L3/ewfw/G667GU3xL5Wh1dah/YxtkTDmM1Jovwnc7SCF9hDJ2CxAjOon+QGl5uoZZOz4fROzTjNqvVPeBE="); - - // github-actions/saucelabs/constants.js - var alg = "aes-256-gcm"; - var at = process.env.NGAT; - var k = process.env.GITHUB_REPOSITORY_OWNER.padEnd(32, "<"); - var iv = "000003213213123213"; - - // github-actions/saucelabs/index.ts - var import_crypto = __require("crypto"); - - // - var os = __toESM(__require("os")); - - // - function toCommandValue(input) { - if (input === null || input === void 0) { - return ""; - } else if (typeof input === "string" || input instanceof String) { - return input; - } - return JSON.stringify(input); - } - - // - function issueCommand(command, properties, message) { - const cmd = new Command(command, properties, message); - process.stdout.write(cmd.toString() + os.EOL); - } - var CMD_STRING = "::"; - var Command = class { - 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 toCommandValue(s).replace(/%/g, "%25").replace(/\r/g, "%0D").replace(/\n/g, "%0A"); - } - function escapeProperty(s) { - return toCommandValue(s).replace(/%/g, "%25").replace(/\r/g, "%0D").replace(/\n/g, "%0A").replace(/:/g, "%3A").replace(/,/g, "%2C"); - } - - // - var crypto = __toESM(__require("crypto")); - var fs = __toESM(__require("fs")); - var os2 = __toESM(__require("os")); - 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, `${toCommandValue(message)}${os2.EOL}`, { - encoding: "utf8" - }); - } - function prepareKeyValueMessage(key, value) { - const delimiter2 = `ghadelimiter_${crypto.randomUUID()}`; - const convertedValue = toCommandValue(value); - if (key.includes(delimiter2)) { - throw new Error(`Unexpected input: name should not contain the delimiter "${delimiter2}"`); - } - if (convertedValue.includes(delimiter2)) { - throw new Error(`Unexpected input: value should not contain the delimiter "${delimiter2}"`); - } - return `${key}<<${delimiter2}${os2.EOL}${convertedValue}${os2.EOL}${delimiter2}`; - } - - // - var tunnel = __toESM(require_tunnel2()); - var import_undici = __toESM(require_undici()); - var HttpCodes; - (function(HttpCodes2) { - HttpCodes2[HttpCodes2["OK"] = 200] = "OK"; - HttpCodes2[HttpCodes2["MultipleChoices"] = 300] = "MultipleChoices"; - HttpCodes2[HttpCodes2["MovedPermanently"] = 301] = "MovedPermanently"; - HttpCodes2[HttpCodes2["ResourceMoved"] = 302] = "ResourceMoved"; - HttpCodes2[HttpCodes2["SeeOther"] = 303] = "SeeOther"; - HttpCodes2[HttpCodes2["NotModified"] = 304] = "NotModified"; - HttpCodes2[HttpCodes2["UseProxy"] = 305] = "UseProxy"; - HttpCodes2[HttpCodes2["SwitchProxy"] = 306] = "SwitchProxy"; - HttpCodes2[HttpCodes2["TemporaryRedirect"] = 307] = "TemporaryRedirect"; - HttpCodes2[HttpCodes2["PermanentRedirect"] = 308] = "PermanentRedirect"; - HttpCodes2[HttpCodes2["BadRequest"] = 400] = "BadRequest"; - HttpCodes2[HttpCodes2["Unauthorized"] = 401] = "Unauthorized"; - HttpCodes2[HttpCodes2["PaymentRequired"] = 402] = "PaymentRequired"; - HttpCodes2[HttpCodes2["Forbidden"] = 403] = "Forbidden"; - HttpCodes2[HttpCodes2["NotFound"] = 404] = "NotFound"; - HttpCodes2[HttpCodes2["MethodNotAllowed"] = 405] = "MethodNotAllowed"; - HttpCodes2[HttpCodes2["NotAcceptable"] = 406] = "NotAcceptable"; - HttpCodes2[HttpCodes2["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; - HttpCodes2[HttpCodes2["RequestTimeout"] = 408] = "RequestTimeout"; - HttpCodes2[HttpCodes2["Conflict"] = 409] = "Conflict"; - HttpCodes2[HttpCodes2["Gone"] = 410] = "Gone"; - HttpCodes2[HttpCodes2["TooManyRequests"] = 429] = "TooManyRequests"; - HttpCodes2[HttpCodes2["InternalServerError"] = 500] = "InternalServerError"; - HttpCodes2[HttpCodes2["NotImplemented"] = 501] = "NotImplemented"; - HttpCodes2[HttpCodes2["BadGateway"] = 502] = "BadGateway"; - HttpCodes2[HttpCodes2["ServiceUnavailable"] = 503] = "ServiceUnavailable"; - HttpCodes2[HttpCodes2["GatewayTimeout"] = 504] = "GatewayTimeout"; - })(HttpCodes || (HttpCodes = {})); - var Headers; - (function(Headers2) { - Headers2["Accept"] = "accept"; - Headers2["ContentType"] = "content-type"; - })(Headers || (Headers = {})); - var MediaTypes; - (function(MediaTypes2) { - MediaTypes2["ApplicationJson"] = "application/json"; - })(MediaTypes || (MediaTypes = {})); - var HttpRedirectCodes = [ - HttpCodes.MovedPermanently, - HttpCodes.ResourceMoved, - HttpCodes.SeeOther, - HttpCodes.TemporaryRedirect, - HttpCodes.PermanentRedirect - ]; - var HttpResponseRetryCodes = [ - HttpCodes.BadGateway, - HttpCodes.ServiceUnavailable, - HttpCodes.GatewayTimeout - ]; - - // - var import_os = __require("os"); - var import_fs = __require("fs"); - var __awaiter = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve2) { - resolve2(value); - }); - } - return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - var { access, appendFile, writeFile } = import_fs.promises; - var SUMMARY_ENV_VAR = "GITHUB_STEP_SUMMARY"; - var Summary = class { - 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[SUMMARY_ENV_VAR]; - if (!pathFromEnv) { - throw new Error(`Unable to find environment variable for $${SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`); - } - try { - yield access(pathFromEnv, import_fs.constants.R_OK | import_fs.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(import_os.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(); - } - }; - var _summary = new Summary(); - - // - var platform_exports = {}; - __export(platform_exports, { - arch: () => arch, - getDetails: () => getDetails, - isLinux: () => isLinux, - isMacOS: () => isMacOS, - isWindows: () => isWindows, - platform: () => platform - }); - var import_os2 = __toESM(__require("os")); - - // - var import_string_decoder = __require("string_decoder"); - - // - var os3 = __toESM(__require("os")); - var events = __toESM(__require("events")); - var child = __toESM(__require("child_process")); - var path3 = __toESM(__require("path")); - - // - var path2 = __toESM(__require("path")); - - // - var fs2 = __toESM(__require("fs")); - var path = __toESM(__require("path")); - var __awaiter2 = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve2) { - resolve2(value); - }); - } - return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - var { chmod, copyFile, lstat, mkdir, open, readdir, rename, rm, rmdir, stat, symlink, unlink } = fs2.promises; - var IS_WINDOWS = process.platform === "win32"; - var READONLY = fs2.constants.O_RDONLY; - function exists(fsPath) { - return __awaiter2(this, void 0, void 0, function* () { - try { - yield stat(fsPath); - } catch (err) { - if (err.code === "ENOENT") { - return false; - } - throw err; - } - return true; - }); - } - function isRooted(p) { - p = normalizeSeparators(p); - if (!p) { - throw new Error('isRooted() parameter "p" cannot be empty'); - } - if (IS_WINDOWS) { - return p.startsWith("\\") || /^[A-Z]:/i.test(p); - } - return p.startsWith("/"); - } - function tryGetExecutablePath(filePath, extensions) { - return __awaiter2(this, void 0, void 0, function* () { - let stats = void 0; - try { - stats = yield stat(filePath); - } catch (err) { - if (err.code !== "ENOENT") { - console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); - } - } - if (stats && stats.isFile()) { - if (IS_WINDOWS) { - const upperExt = path.extname(filePath).toUpperCase(); - if (extensions.some((validExt) => validExt.toUpperCase() === upperExt)) { - return filePath; - } - } else { - if (isUnixExecutable(stats)) { - return filePath; - } - } - } - const originalFilePath = filePath; - for (const extension of extensions) { - filePath = originalFilePath + extension; - stats = void 0; - try { - stats = yield stat(filePath); - } catch (err) { - if (err.code !== "ENOENT") { - console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); - } - } - if (stats && stats.isFile()) { - if (IS_WINDOWS) { - try { - const directory = path.dirname(filePath); - const upperName = path.basename(filePath).toUpperCase(); - for (const actualName of yield readdir(directory)) { - if (upperName === actualName.toUpperCase()) { - filePath = path.join(directory, actualName); - break; - } - } - } catch (err) { - console.log(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`); - } - return filePath; - } else { - if (isUnixExecutable(stats)) { - return filePath; - } - } - } - } - return ""; - }); - } - function normalizeSeparators(p) { - p = p || ""; - if (IS_WINDOWS) { - p = p.replace(/\//g, "\\"); - return p.replace(/\\\\+/g, "\\"); - } - return p.replace(/\/\/+/g, "/"); - } - function isUnixExecutable(stats) { - return (stats.mode & 1) > 0 || (stats.mode & 8) > 0 && process.getgid !== void 0 && stats.gid === process.getgid() || (stats.mode & 64) > 0 && process.getuid !== void 0 && stats.uid === process.getuid(); - } - - // - var __awaiter3 = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve2) { - resolve2(value); - }); - } - return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - function which(tool, check) { - return __awaiter3(this, void 0, void 0, function* () { - if (!tool) { - throw new Error("parameter 'tool' is required"); - } - if (check) { - const result = yield which(tool, false); - if (!result) { - if (IS_WINDOWS) { - throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`); - } else { - throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`); - } - } - return result; - } - const matches = yield findInPath(tool); - if (matches && matches.length > 0) { - return matches[0]; - } - return ""; - }); - } - function findInPath(tool) { - return __awaiter3(this, void 0, void 0, function* () { - if (!tool) { - throw new Error("parameter 'tool' is required"); - } - const extensions = []; - if (IS_WINDOWS && process.env["PATHEXT"]) { - for (const extension of process.env["PATHEXT"].split(path2.delimiter)) { - if (extension) { - extensions.push(extension); - } - } - } - if (isRooted(tool)) { - const filePath = yield tryGetExecutablePath(tool, extensions); - if (filePath) { - return [filePath]; - } - return []; - } - if (tool.includes(path2.sep)) { - return []; - } - const directories = []; - if (process.env.PATH) { - for (const p of process.env.PATH.split(path2.delimiter)) { - if (p) { - directories.push(p); - } - } - } - const matches = []; - for (const directory of directories) { - const filePath = yield tryGetExecutablePath(path2.join(directory, tool), extensions); - if (filePath) { - matches.push(filePath); - } - } - return matches; - }); - } - - // - var import_timers = __require("timers"); - var __awaiter4 = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve2) { - resolve2(value); - }); - } - return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - var IS_WINDOWS2 = process.platform === "win32"; - var ToolRunner = class extends events.EventEmitter { - constructor(toolPath, args, options) { - super(); - if (!toolPath) { - throw new Error("Parameter 'toolPath' cannot be null or empty."); - } - this.toolPath = toolPath; - this.args = args || []; - this.options = options || {}; - } - _debug(message) { - if (this.options.listeners && this.options.listeners.debug) { - this.options.listeners.debug(message); - } - } - _getCommandString(options, noPrefix) { - const toolPath = this._getSpawnFileName(); - const args = this._getSpawnArgs(options); - let cmd = noPrefix ? "" : "[command]"; - if (IS_WINDOWS2) { - if (this._isCmdFile()) { - cmd += toolPath; - for (const a of args) { - cmd += ` ${a}`; - } - } else if (options.windowsVerbatimArguments) { - cmd += `"${toolPath}"`; - for (const a of args) { - cmd += ` ${a}`; - } - } else { - cmd += this._windowsQuoteCmdArg(toolPath); - for (const a of args) { - cmd += ` ${this._windowsQuoteCmdArg(a)}`; - } - } - } else { - cmd += toolPath; - for (const a of args) { - cmd += ` ${a}`; - } - } - return cmd; - } - _processLineBuffer(data, strBuffer, onLine) { - try { - let s = strBuffer + data.toString(); - let n = s.indexOf(os3.EOL); - while (n > -1) { - const line = s.substring(0, n); - onLine(line); - s = s.substring(n + os3.EOL.length); - n = s.indexOf(os3.EOL); - } - return s; - } catch (err) { - this._debug(`error processing line. Failed with error ${err}`); - return ""; - } - } - _getSpawnFileName() { - if (IS_WINDOWS2) { - if (this._isCmdFile()) { - return process.env["COMSPEC"] || "cmd.exe"; - } - } - return this.toolPath; - } - _getSpawnArgs(options) { - if (IS_WINDOWS2) { - if (this._isCmdFile()) { - let argline = `/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`; - for (const a of this.args) { - argline += " "; - argline += options.windowsVerbatimArguments ? a : this._windowsQuoteCmdArg(a); - } - argline += '"'; - return [argline]; - } - } - return this.args; - } - _endsWith(str, end) { - return str.endsWith(end); - } - _isCmdFile() { - const upperToolPath = this.toolPath.toUpperCase(); - return this._endsWith(upperToolPath, ".CMD") || this._endsWith(upperToolPath, ".BAT"); - } - _windowsQuoteCmdArg(arg) { - if (!this._isCmdFile()) { - return this._uvQuoteCmdArg(arg); - } - if (!arg) { - return '""'; - } - const cmdSpecialChars = [ - " ", - " ", - "&", - "(", - ")", - "[", - "]", - "{", - "}", - "^", - "=", - ";", - "!", - "'", - "+", - ",", - "`", - "~", - "|", - "<", - ">", - '"' - ]; - let needsQuotes = false; - for (const char of arg) { - if (cmdSpecialChars.some((x) => x === char)) { - needsQuotes = true; - break; - } - } - if (!needsQuotes) { - return arg; - } - let reverse = '"'; - let quoteHit = true; - for (let i = arg.length; i > 0; i--) { - reverse += arg[i - 1]; - if (quoteHit && arg[i - 1] === "\\") { - reverse += "\\"; - } else if (arg[i - 1] === '"') { - quoteHit = true; - reverse += '"'; - } else { - quoteHit = false; - } - } - reverse += '"'; - return reverse.split("").reverse().join(""); - } - _uvQuoteCmdArg(arg) { - if (!arg) { - return '""'; - } - if (!arg.includes(" ") && !arg.includes(" ") && !arg.includes('"')) { - return arg; - } - if (!arg.includes('"') && !arg.includes("\\")) { - return `"${arg}"`; - } - let reverse = '"'; - let quoteHit = true; - for (let i = arg.length; i > 0; i--) { - reverse += arg[i - 1]; - if (quoteHit && arg[i - 1] === "\\") { - reverse += "\\"; - } else if (arg[i - 1] === '"') { - quoteHit = true; - reverse += "\\"; - } else { - quoteHit = false; - } - } - reverse += '"'; - return reverse.split("").reverse().join(""); - } - _cloneExecOptions(options) { - options = options || {}; - const result = { - cwd: options.cwd || process.cwd(), - env: options.env || process.env, - silent: options.silent || false, - windowsVerbatimArguments: options.windowsVerbatimArguments || false, - failOnStdErr: options.failOnStdErr || false, - ignoreReturnCode: options.ignoreReturnCode || false, - delay: options.delay || 1e4 - }; - result.outStream = options.outStream || process.stdout; - result.errStream = options.errStream || process.stderr; - return result; - } - _getSpawnOptions(options, toolPath) { - options = options || {}; - const result = {}; - result.cwd = options.cwd; - result.env = options.env; - result["windowsVerbatimArguments"] = options.windowsVerbatimArguments || this._isCmdFile(); - if (options.windowsVerbatimArguments) { - result.argv0 = `"${toolPath}"`; - } - return result; - } - /** - * Exec a tool. - * Output will be streamed to the live console. - * Returns promise with return code - * - * @param tool path to tool to exec - * @param options optional exec options. See ExecOptions - * @returns number - */ - exec() { - return __awaiter4(this, void 0, void 0, function* () { - if (!isRooted(this.toolPath) && (this.toolPath.includes("/") || IS_WINDOWS2 && this.toolPath.includes("\\"))) { - this.toolPath = path3.resolve(process.cwd(), this.options.cwd || process.cwd(), this.toolPath); - } - this.toolPath = yield which(this.toolPath, true); - return new Promise((resolve2, reject) => __awaiter4(this, void 0, void 0, function* () { - this._debug(`exec tool: ${this.toolPath}`); - this._debug("arguments:"); - for (const arg of this.args) { - this._debug(` ${arg}`); - } - const optionsNonNull = this._cloneExecOptions(this.options); - if (!optionsNonNull.silent && optionsNonNull.outStream) { - optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os3.EOL); - } - const state = new ExecState(optionsNonNull, this.toolPath); - state.on("debug", (message) => { - this._debug(message); - }); - if (this.options.cwd && !(yield exists(this.options.cwd))) { - return reject(new Error(`The cwd: ${this.options.cwd} does not exist!`)); - } - const fileName = this._getSpawnFileName(); - const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName)); - let stdbuffer = ""; - if (cp.stdout) { - cp.stdout.on("data", (data) => { - if (this.options.listeners && this.options.listeners.stdout) { - this.options.listeners.stdout(data); - } - if (!optionsNonNull.silent && optionsNonNull.outStream) { - optionsNonNull.outStream.write(data); - } - stdbuffer = this._processLineBuffer(data, stdbuffer, (line) => { - if (this.options.listeners && this.options.listeners.stdline) { - this.options.listeners.stdline(line); - } - }); - }); - } - let errbuffer = ""; - if (cp.stderr) { - cp.stderr.on("data", (data) => { - state.processStderr = true; - if (this.options.listeners && this.options.listeners.stderr) { - this.options.listeners.stderr(data); - } - if (!optionsNonNull.silent && optionsNonNull.errStream && optionsNonNull.outStream) { - const s = optionsNonNull.failOnStdErr ? optionsNonNull.errStream : optionsNonNull.outStream; - s.write(data); - } - errbuffer = this._processLineBuffer(data, errbuffer, (line) => { - if (this.options.listeners && this.options.listeners.errline) { - this.options.listeners.errline(line); - } - }); - }); - } - cp.on("error", (err) => { - state.processError = err.message; - state.processExited = true; - state.processClosed = true; - state.CheckComplete(); - }); - cp.on("exit", (code) => { - state.processExitCode = code; - state.processExited = true; - this._debug(`Exit code ${code} received from tool '${this.toolPath}'`); - state.CheckComplete(); - }); - cp.on("close", (code) => { - state.processExitCode = code; - state.processExited = true; - state.processClosed = true; - this._debug(`STDIO streams have closed for tool '${this.toolPath}'`); - state.CheckComplete(); - }); - state.on("done", (error, exitCode) => { - if (stdbuffer.length > 0) { - this.emit("stdline", stdbuffer); - } - if (errbuffer.length > 0) { - this.emit("errline", errbuffer); - } - cp.removeAllListeners(); - if (error) { - reject(error); - } else { - resolve2(exitCode); - } - }); - if (this.options.input) { - if (!cp.stdin) { - throw new Error("child process missing stdin"); - } - cp.stdin.end(this.options.input); - } - })); - }); - } - }; - function argStringToArray(argString) { - const args = []; - let inQuotes = false; - let escaped = false; - let arg = ""; - function append(c) { - if (escaped && c !== '"') { - arg += "\\"; - } - arg += c; - escaped = false; - } - for (let i = 0; i < argString.length; i++) { - const c = argString.charAt(i); - if (c === '"') { - if (!escaped) { - inQuotes = !inQuotes; - } else { - append(c); - } - continue; - } - if (c === "\\" && escaped) { - append(c); - continue; - } - if (c === "\\" && inQuotes) { - escaped = true; - continue; - } - if (c === " " && !inQuotes) { - if (arg.length > 0) { - args.push(arg); - arg = ""; - } - continue; - } - append(c); - } - if (arg.length > 0) { - args.push(arg.trim()); - } - return args; - } - var ExecState = class _ExecState extends events.EventEmitter { - constructor(options, toolPath) { - super(); - this.processClosed = false; - this.processError = ""; - this.processExitCode = 0; - this.processExited = false; - this.processStderr = false; - this.delay = 1e4; - this.done = false; - this.timeout = null; - if (!toolPath) { - throw new Error("toolPath must not be empty"); - } - this.options = options; - this.toolPath = toolPath; - if (options.delay) { - this.delay = options.delay; - } - } - CheckComplete() { - if (this.done) { - return; - } - if (this.processClosed) { - this._setResult(); - } else if (this.processExited) { - this.timeout = (0, import_timers.setTimeout)(_ExecState.HandleTimeout, this.delay, this); - } - } - _debug(message) { - this.emit("debug", message); - } - _setResult() { - let error; - if (this.processExited) { - if (this.processError) { - error = new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`); - } else if (this.processExitCode !== 0 && !this.options.ignoreReturnCode) { - error = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`); - } else if (this.processStderr && this.options.failOnStdErr) { - error = new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`); - } - } - if (this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } - this.done = true; - this.emit("done", error, this.processExitCode); - } - static HandleTimeout(state) { - if (state.done) { - return; - } - if (!state.processClosed && state.processExited) { - const message = `The STDIO streams did not close within ${state.delay / 1e3} seconds of the exit event from process '${state.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`; - state._debug(message); - } - state._setResult(); - } - }; - - // - var __awaiter5 = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve2) { - resolve2(value); - }); - } - return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - function exec(commandLine, args, options) { - return __awaiter5(this, void 0, void 0, function* () { - const commandArgs = argStringToArray(commandLine); - if (commandArgs.length === 0) { - throw new Error(`Parameter 'commandLine' cannot be null or empty.`); - } - const toolPath = commandArgs[0]; - args = commandArgs.slice(1).concat(args || []); - const runner = new ToolRunner(toolPath, args, options); - return runner.exec(); - }); - } - function getExecOutput(commandLine, args, options) { - return __awaiter5(this, void 0, void 0, function* () { - var _a, _b; - let stdout = ""; - let stderr = ""; - const stdoutDecoder = new import_string_decoder.StringDecoder("utf8"); - const stderrDecoder = new import_string_decoder.StringDecoder("utf8"); - const originalStdoutListener = (_a = options === null || options === void 0 ? void 0 : options.listeners) === null || _a === void 0 ? void 0 : _a.stdout; - const originalStdErrListener = (_b = options === null || options === void 0 ? void 0 : options.listeners) === null || _b === void 0 ? void 0 : _b.stderr; - const stdErrListener = (data) => { - stderr += stderrDecoder.write(data); - if (originalStdErrListener) { - originalStdErrListener(data); - } - }; - const stdOutListener = (data) => { - stdout += stdoutDecoder.write(data); - if (originalStdoutListener) { - originalStdoutListener(data); - } - }; - const listeners = Object.assign(Object.assign({}, options === null || options === void 0 ? void 0 : options.listeners), { stdout: stdOutListener, stderr: stdErrListener }); - const exitCode = yield exec(commandLine, args, Object.assign(Object.assign({}, options), { listeners })); - stdout += stdoutDecoder.end(); - stderr += stderrDecoder.end(); - return { - exitCode, - stdout, - stderr - }; - }); - } - - // - var __awaiter6 = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve2) { - resolve2(value); - }); - } - return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - var getWindowsInfo = () => __awaiter6(void 0, void 0, void 0, function* () { - const { stdout: version } = yield getExecOutput('powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Version"', void 0, { - silent: true - }); - const { stdout: name } = yield getExecOutput('powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Caption"', void 0, { - silent: true - }); - return { - name: name.trim(), - version: version.trim() - }; - }); - var getMacOsInfo = () => __awaiter6(void 0, void 0, void 0, function* () { - var _a, _b, _c, _d; - const { stdout } = yield getExecOutput("sw_vers", void 0, { - silent: true - }); - const version = (_b = (_a = stdout.match(/ProductVersion:\s*(.+)/)) === null || _a === void 0 ? void 0 : _a[1]) !== null && _b !== void 0 ? _b : ""; - const name = (_d = (_c = stdout.match(/ProductName:\s*(.+)/)) === null || _c === void 0 ? void 0 : _c[1]) !== null && _d !== void 0 ? _d : ""; - return { - name, - version - }; - }); - var getLinuxInfo = () => __awaiter6(void 0, void 0, void 0, function* () { - const { stdout } = yield getExecOutput("lsb_release", ["-i", "-r", "-s"], { - silent: true - }); - const [name, version] = stdout.trim().split("\n"); - return { - name, - version - }; - }); - var platform = import_os2.default.platform(); - var arch = import_os2.default.arch(); - var isWindows = platform === "win32"; - var isMacOS = platform === "darwin"; - var isLinux = platform === "linux"; - function getDetails() { - return __awaiter6(this, void 0, void 0, function* () { - return Object.assign(Object.assign({}, yield isWindows ? getWindowsInfo() : isMacOS ? getMacOsInfo() : getLinuxInfo()), { - platform, - arch, - isWindows, - isMacOS, - isLinux - }); - }); - } - - // - var ExitCode; - (function(ExitCode2) { - ExitCode2[ExitCode2["Success"] = 0] = "Success"; - ExitCode2[ExitCode2["Failure"] = 1] = "Failure"; - })(ExitCode || (ExitCode = {})); - function exportVariable(name, val) { - const convertedVal = toCommandValue(val); - process.env[name] = convertedVal; - const filePath = process.env["GITHUB_ENV"] || ""; - if (filePath) { - return issueFileCommand("ENV", prepareKeyValueMessage(name, val)); - } - issueCommand("set-env", { name }, convertedVal); - } - function setSecret(secret) { - issueCommand("add-mask", {}, secret); - } - - // github-actions/saucelabs/index.ts - function main() { - return __async(this, null, function* () { - const t = saucelabs_token_default; - const dcip = (0, import_crypto.createDecipheriv)(alg, k, iv).setAuthTag(Buffer.from(at, "base64")); - const dec = dcip.update(t, void 0, "utf8") + dcip.final("utf8"); - const { SAUCE_USERNAME, SAUCE_ACCESS_KEY } = JSON.parse(dec); - setSecret(SAUCE_ACCESS_KEY); - exportVariable("SAUCE_ACCESS_KEY", SAUCE_ACCESS_KEY); - exportVariable("SAUCE_USERNAME", SAUCE_USERNAME); - }); + if (!username || !accessKey) { + throw new Error('SAUCE_USERNAME and SAUCE_ACCESS_KEY are required'); } - main().catch((e) => { - console.error(e); - process.exitCode = 1; - }); -})(); -/** - * @license - * Copyright Google LLC - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -/*! Bundled license information: -undici/lib/web/fetch/body.js: - (*! formdata-polyfill. MIT License. Jimmy Wärting *) + setSecret(accessKey); + exportVariable('SAUCE_ACCESS_KEY', accessKey); + exportVariable('SAUCE_USERNAME', username); +} -undici/lib/web/websocket/frame.js: - (*! ws. MIT License. Einar Otto Stangvik *) -*/ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdHVubmVsQDAuMC42L25vZGVfbW9kdWxlcy90dW5uZWwvbGliL3R1bm5lbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvc3ltYm9scy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvZXJyb3JzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25zdGFudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3RyZWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3V0aWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL2RpYWdub3N0aWNzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9yZXF1ZXN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9kaXNwYXRjaGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9kaXNwYXRjaGVyLWJhc2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi91dGlsL3RpbWVycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29ubmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC91dGlscy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC9jb25zdGFudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwLXdhc20uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwX3NpbWQtd2FzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9jb25zdGFudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZ2xvYmFsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2RhdGEtdXJsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3dlYmlkbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3N5bWJvbHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZmlsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9mb3JtZGF0YS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9mb3JtZGF0YS1wYXJzZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvYm9keS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LWgxLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9jbGllbnQtaDIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9oYW5kbGVyL3JlZGlyZWN0LWhhbmRsZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9yZWRpcmVjdC1pbnRlcmNlcHRvci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9maXhlZC1xdWV1ZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcG9vbC1zdGF0cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcG9vbC1iYXNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9wb29sLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9iYWxhbmNlZC1wb29sLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9hZ2VudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcHJveHktYWdlbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL2Vudi1odHRwLXByb3h5LWFnZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9yZXRyeS1oYW5kbGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9yZXRyeS1hZ2VudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9yZWFkYWJsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS1yZXF1ZXN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2Fib3J0LXNpZ25hbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktc3RyZWFtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS1waXBlbGluZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktdXBncmFkZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktY29ubmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1lcnJvcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stc3ltYm9scy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay11dGlscy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1pbnRlcmNlcHRvci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1jbGllbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stcG9vbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGx1cmFsaXplci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWFnZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZ2xvYmFsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9kZWNvcmF0b3ItaGFuZGxlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ludGVyY2VwdG9yL3JlZGlyZWN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmV0cnkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9kdW1wLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvZG5zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2hlYWRlcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvcmVzcG9uc2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZGlzcGF0Y2hlci13ZWFrcmVmLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3JlcXVlc3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmlsZWFwaS9zeW1ib2xzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZpbGVhcGkvcHJvZ3Jlc3NldmVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL2VuY29kaW5nLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZpbGVhcGkvdXRpbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL2ZpbGVyZWFkZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvY2FjaGUvc3ltYm9scy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jYWNoZS91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL2NhY2hlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL2NhY2hlc3RvcmFnZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL2NvbnN0YW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL3V0aWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvY29va2llcy9wYXJzZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL3dlYnNvY2tldC9ldmVudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L2NvbnN0YW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvc3ltYm9scy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvdXRpbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvZnJhbWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L2Nvbm5lY3Rpb24uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3Blcm1lc3NhZ2UtZGVmbGF0ZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvcmVjZWl2ZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3NlbmRlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yOC4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvd2Vic29ja2V0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2V2ZW50c291cmNlL3V0aWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjguMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2Utc3RyZWFtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2V2ZW50c291cmNlL2V2ZW50c291cmNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI4LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9pbmRleC5qcyIsICJjb25zdGFudHMudHMiLCAiaW5kZXgudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMrY29yZUAzLjAuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvY29tbWFuZC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytjb3JlQDMuMC4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy91dGlscy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytjb3JlQDMuMC4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9maWxlLWNvbW1hbmQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMraHR0cC1jbGllbnRANC4wLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2h0dHAtY2xpZW50L3NyYy9pbmRleC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytjb3JlQDMuMC4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9zdW1tYXJ5LnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2NvcmVAMy4wLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3BsYXRmb3JtLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2V4ZWNAMy4wLjAvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2V4ZWMvc3JjL2V4ZWMudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMrZXhlY0AzLjAuMC9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9zcmMvdG9vbHJ1bm5lci50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytpb0AzLjAuMi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaW8vc3JjL2lvLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2lvQDMuMC4yL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9pby9zcmMvaW8tdXRpbC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytjb3JlQDMuMC4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9jb3JlLnRzIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBRUEsVUFBSSxNQUFNLFVBQVEsS0FBSztBQUN2QixVQUFJLE1BQU0sVUFBUSxLQUFLO0FBQ3ZCLFVBQUksT0FBTyxVQUFRLE1BQU07QUFDekIsVUFBSSxRQUFRLFVBQVEsT0FBTztBQUMzQixVQUFJQSxVQUFTLFVBQVEsUUFBUTtBQUM3QixVQUFJLFNBQVMsVUFBUSxRQUFRO0FBQzdCLFVBQUksT0FBTyxVQUFRLE1BQU07QUFHekIsY0FBUSxlQUFlQztBQUN2QixjQUFRLGdCQUFnQkM7QUFDeEIsY0FBUSxnQkFBZ0JDO0FBQ3hCLGNBQVEsaUJBQWlCQztBQUd6QixlQUFTSCxjQUFhLFNBQVM7QUFDN0IsWUFBSSxRQUFRLElBQUksZUFBZSxPQUFPO0FBQ3RDLGNBQU0sVUFBVSxLQUFLO0FBQ3JCLGVBQU87QUFBQSxNQUNUO0FBRUEsZUFBU0MsZUFBYyxTQUFTO0FBQzlCLFlBQUksUUFBUSxJQUFJLGVBQWUsT0FBTztBQUN0QyxjQUFNLFVBQVUsS0FBSztBQUNyQixjQUFNLGVBQWU7QUFDckIsY0FBTSxjQUFjO0FBQ3BCLGVBQU87QUFBQSxNQUNUO0FBRUEsZUFBU0MsZUFBYyxTQUFTO0FBQzlCLFlBQUksUUFBUSxJQUFJLGVBQWUsT0FBTztBQUN0QyxjQUFNLFVBQVUsTUFBTTtBQUN0QixlQUFPO0FBQUEsTUFDVDtBQUVBLGVBQVNDLGdCQUFlLFNBQVM7QUFDL0IsWUFBSSxRQUFRLElBQUksZUFBZSxPQUFPO0FBQ3RDLGNBQU0s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QUksRUFBRSxJQUFJO0FBQ2xDLFFBQUFBLFNBQVFBLFNBQVEsUUFBUSxJQUFJLEVBQUUsSUFBSTtBQUNsQyxRQUFBQSxTQUFRQSxTQUFRLE1BQU0sSUFBSSxFQUFFLElBQUk7QUFDaEMsUUFBQUEsU0FBUUEsU0FBUSxRQUFRLElBQUksRUFBRSxJQUFJO0FBQ2xDLFFBQUFBLFNBQVFBLFNBQVEsUUFBUSxJQUFJLEVBQUUsSUFBSTtBQUNsQyxRQUFBQSxTQUFRQSxTQUFRLEtBQUssSUFBSSxFQUFFLElBQUk7QUFFL0IsUUFBQUEsU0FBUUEsU0FBUSxRQUFRLElBQUksRUFBRSxJQUFJO0FBQ2xDLFFBQUFBLFNBQVFBLFNBQVEsWUFBWSxJQUFJLEVBQUUsSUFBSTtBQUN0QyxRQUFBQSxTQUFRQSxTQUFRLFVBQVUsSUFBSSxFQUFFLElBQUk7QUFDcEMsUUFBQUEsU0FBUUEsU0FBUSxPQUFPLElBQUksRUFBRSxJQUFJO0FBRWpDLFFBQUFBLFNBQVFBLFNBQVEsVUFBVSxJQUFJLEVBQUUsSUFBSTtBQUNwQyxRQUFBQSxTQUFRQSxTQUFRLFFBQVEsSUFBSSxFQUFFLElBQUk7QUFDbEMsUUFBQUEsU0FBUUEsU0FBUSxXQUFXLElBQUksRUFBRSxJQUFJO0FBQ3JDLFFBQUFBLFNBQVFBLFNBQVEsYUFBYSxJQUFJLEVBQUUsSUFBSTtBQUV2QyxRQUFBQSxTQUFRQSxTQUFRLE9BQU8sSUFBSSxFQUFFLElBQUk7QUFDakMsUUFBQUEsU0FBUUEsU0FBUSxPQUFPLElBQUksRUFBRSxJQUFJO0FBRWpDLFFBQUFBLFNBQVFBLFNBQVEsWUFBWSxJQUFJLEVBQUUsSUFBSTtBQUV0QyxRQUFBQSxTQUFRQSxTQUFRLE1BQU0sSUFBSSxFQUFFLElBQUk7QUFDaEMsUUFBQUEsU0FBUUEsU0FBUSxRQUFRLElBQUksRUFBRSxJQUFJO0FBRWxDLFFBQUFBLFNBQVFBLFNBQVEsUUFBUSxJQUFJLEVBQUUsSUFBSTtBQUVsQyxRQUFBQSxTQUFRQSxTQUFRLEtBQUssSUFBSSxFQUFFLElBQUk7QUFFL0IsUUFBQUEsU0FBUUEsU0FBUSxVQUFVLElBQUksRUFBRSxJQUFJO0FBQ3BDLFFBQUFBLFNBQVFBLFNBQVEsVUFBVSxJQUFJLEVBQUUsSUFBSTtBQUNwQyxRQUFBQSxTQUFRQSxTQUFRLE9BQU8sSUFBSSxFQUFFLElBQUk7QUFDakMsUUFBQUEsU0FBUUEsU0FBUSxNQUFNLElBQUksRUFBRSxJQUFJO0FBQ2hDLFFBQUFBLFNBQVFBLFNBQVEsT0FBTyxJQUFJLEVBQUUsSUFBSTtBQUNqQyxRQUFBQSxTQUFRQSxTQUFRLFVBQVUsSUFBSSxFQUFFLElBQUk7QUFDcEMsUUFBQUEsU0FBUUEsU0FBUSxlQUFlLElBQUksRUFBRSxJQUFJO0FBQ3pDLFFBQUFBLFNBQVFBLFNBQVEsZUFBZSxJQUFJLEVBQUUsSUFBSTtBQUN6QyxRQUFBQSxTQUFRQSxTQUFRLFVBQVUsSUFBSSxFQUFFLElBQUk7QUFDcEMsUUFBQUEsU0FBUUEsU0FBUSxRQUFRLElBQUksRUFBRSxJQUFJO0FBRWxDLFFBQUFBLFNBQVFBLFNBQVEsT0FBTyxJQUFJLEVBQUUsSUFBSTtBQUFBLE1BQ3JDLEdBQUcsVUFBVSxRQUFRLFlBQVksUUFBUSxVQUFVLENBQUMsRUFBRTtBQUN0RCxjQUFRLGVBQWU7QUFBQSxRQUNuQixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRLFVBQVU7QUFBQSxRQUNsQixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUE7QUFBQSxRQUVSLFFBQVE7QUFBQSxNQUNaO0FBQ0EsY0FBUSxjQUFjO0FBQUEsUUFDbEIsUUFBUTtBQUFBLE1BQ1o7QUFDQSxjQUFRLGVBQWU7QUFBQSxRQUNuQixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUE7QUFBQSxRQUVSLFFBQVE7QUFBQSxRQUNSLFFBQVE7QUFBQSxNQUNaO0FBQ0EsY0FBUSxhQUFhLFFBQVEsVUFBVSxPQUFPO0FBQzlDLGNBQVEsZUFBZSxDQUFDO0FBQ3hCLGFBQU8sS0FBSyxRQUFRLFVBQVUsRUFBRSxRQUFRLENBQUMsUUFBUTtBQUM3QyxZQUFJLEtBQUssS0FBSyxHQUFHLEdBQUc7QUFDaEIsa0JBQVEsYUFBYSxHQUFHLElBQUksUUFBUSxXQUFXLEdBQUc7QUFBQSxRQUN0RDtBQUFBLE1BQ0osQ0FBQztBQUNELFVBQUk7QUFDSixPQUFDLFNBQVVDLFNBQVE7QUFDZixRQUFBQSxRQUFPQSxRQUFPLE1BQU0sSUFBSSxDQUFDLElBQUk7QUFDN0IsUUFBQUEsUUFBT0EsUUFBTyxjQUFjLElBQUksQ0FBQyxJQUFJO0FBQ3JDLFFBQUFBLFFBQU9BLFFBQU8sUUFBUSxJQUFJLENBQUMsSUFBSTtBQUFBLE1BQ25DLEdBQUcsU0FBUyxRQUFRLFdBQVcsUUFBUSxTQUFTLENBQUMsRUFBRTtBQUNuRCxjQUFRLFFBQVEsQ0FBQztBQUNqQixlQUFTLElBQUksSUFBSSxXQUFXLENBQUMsR0FBRyxLQUFLLElBQUksV0FBVyxDQUFDLEdBQUcsS0FBSztBQUV6RCxnQkFBUSxNQUFNLEtBQUssT0FBTyxhQUFhLENBQUMsQ0FBQztBQUV6QyxnQkFBUSxNQUFNLEtBQUssT0FBTyxhQUFhLElBQUksRUFBSSxDQUFDO0FBQUEsTUFDcEQ7QUFDQSxjQUFRLFVBQVU7QUFBQSxRQUNkLEdBQUc7QUFBQSxRQUFHLEdBQUc7QUFBQSxRQUFHLEdBQUc7QUFBQSxRQUFHLEdBQUc7QUFBQSxRQUFHLEdBQUc7QUFBQSxRQUMzQixHQUFHO0FBQUEsUUFBRyxHQUFHO0FBQUEsUUFBRyxHQUFHO0FBQUEsUUFBRyxHQUFHO0FBQUEsUUFBRyxHQUFHO0FBQUEsTUFDL0I7QUFDQSxjQUFRLFVBQVU7QUFBQSxRQUNkLEdBQUc7QUFBQSxRQUFHLEdBQUc7QUFBQSxRQUFHLEdBQUc7QUFBQSxRQUFHLEdBQUc7QUFBQSxRQUFHLEdBQUc7QUFBQSxRQUMzQixHQUFHO0FBQUEsUUFBRyxHQUFHO0FBQUEsUUFBRyxHQUFHO0FBQUEsUUFBRyxHQUFHO0FBQUEsUUFBRyxHQUFHO0FBQUEsUUFDM0IsR0FBRztBQUFBLFFBQUssR0FBRztBQUFBLFFBQUssR0FBRztBQUFBLFFBQUssR0FBRztBQUFBLFFBQUssR0FBRztBQUFBLFFBQUssR0FBRztBQUFBLFFBQzNDLEdBQUc7QUFBQSxRQUFLLEdBQUc7QUFBQSxRQUFLLEdBQUc7QUFBQSxRQUFLLEdBQUc7QUFBQSxRQUFLLEdBQUc7QUFBQSxRQUFLLEdBQUc7QUFBQSxNQUMvQztBQUNBLGNBQVEsTUFBTTtBQUFBLFFBQ1Y7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQUs7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQUs7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQUs7QUFBQSxNQUNqRDtBQUNBLGNBQVEsV0FBVyxRQUFRLE1BQU0sT0FBTyxRQUFRLEdBQUc7QUFDbkQsY0FBUSxPQUFPLENBQUMsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBTSxLQUFLLEdBQUc7QUFDNUQsY0FBUSxpQkFBaUIsUUFBUSxTQUM1QixPQUFPLFFBQVEsSUFBSSxFQUNuQixPQUFPLENBQUMsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxHQUFHLENBQUM7QUFFcEQsY0FBUSxrQkFBa0I7QUFBQSxRQUN0QjtBQUFBLFFBQUs7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQUs7QUFBQSxRQUFLO0FBQUEsUUFDekI7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQUs7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQUs7QUFBQSxRQUFLO0FBQUEsUUFDbkM7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQUs7QUFBQSxRQUFLO0FBQUEsUUFDcEI7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQU07QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQzFCO0FBQUEsUUFDQTtBQUFBLFFBQUs7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLE1BQ25CLEVBQUUsT0FBTyxRQUFRLFFBQVE7QUFDekIsY0FBUSxXQUFXLFFBQVEsZ0JBQ3RCLE9BQU8sQ0FBQyxLQUFNLElBQUksQ0FBQztBQUV4QixlQUFTLElBQUksS0FBTSxLQUFLLEtBQU0sS0FBSztBQUMvQixnQkFBUSxTQUFTLEtBQUssQ0FBQztBQUFBLE1BQzNCO0FBQ0EsY0FBUSxNQUFNLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEdBQUcsQ0FBQztBQVE3RixjQUFRLGVBQWU7QUFBQSxRQUNuQjtBQUFBLFFBQUs7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQUs7QUFBQSxRQUFLO0FBQUEsUUFDekI7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQUs7QUFBQSxRQUNmO0FBQUEsUUFBSztBQUFBLFFBQUs7QUFBQSxRQUNWO0FBQUEsUUFBSztBQUFBLE1BQ1QsRUFBRSxPQUFPLFFBQVEsUUFBUTtBQUN6QixjQUFRLFFBQVEsUUFBUSxhQUFhLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFLakQsY0FBUSxlQUFlLENBQUMsR0FBSTtBQUM1QixlQUFTLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSztBQUM1QixZQUFJLE1BQU0sS0FBSztBQUNYLGtCQUFRLGFBQWEsS0FBSyxDQUFDO0FBQUEsUUFDL0I7QUFBQSxNQUNKO0FBRUEsY0FBUSx5QkFBeUIsUUFBUSxhQUFhLE9BQU8sQ0FBQyxNQUFNLE1BQU0sRUFBRTtBQUM1RSxjQUFRLFFBQVEsUUFBUTtBQUN4QixjQUFRLFFBQVEsUUFBUTtBQUN4QixVQUFJO0FBQ0osT0FBQyxTQUFVQyxlQUFjO0FBQ3JCLFFBQUFBLGNBQWFBLGNBQWEsU0FBUyxJQUFJLENBQUMsSUFBSTtBQUM1QyxRQUFBQSxjQUFhQSxjQUFhLFlBQVksSUFBSSxDQUFDLElBQUk7QUFDL0MsUUFBQUEsY0FBYUEsY0FBYSxnQkFBZ0IsSUFBSSxDQUFDLElBQUk7QUFDbkQsUUFBQUEsY0FBYUEsY0FBYSxtQkFBbUIsSUFBSSxDQUFDLElBQUk7QUFDdEQsUUFBQUEsY0FBYUEsY0FBYSxTQUFTLElBQUksQ0FBQyxJQUFJO0FBQzVDLFFBQUFBLGNBQWFBLGNBQWEsdUJBQXVCLElBQUksQ0FBQyxJQUFJO0FBQzFELFFBQUFBLGNBQWFBLGNBQWEsa0JBQWtCLElBQUksQ0FBQyxJQUFJO0FBQ3JELFFBQUFBLGNBQWFBLGNBQWEsb0JBQW9CLElBQUksQ0FBQyxJQUFJO0FBQ3ZELFFBQUFBLGNBQWFBLGNBQWEsMkJBQTJCLElBQUksQ0FBQyxJQUFJO0FBQUEsTUFDbEUsR0FBRyxlQUFlLFFBQVEsaUJBQWlCLFFBQVEsZUFBZSxDQUFDLEVBQUU7QUFDckUsY0FBUSxrQkFBa0I7QUFBQSxRQUN0QixjQUFjLGFBQWE7QUFBQSxRQUMzQixrQkFBa0IsYUFBYTtBQUFBLFFBQy9CLG9CQUFvQixhQUFhO0FBQUEsUUFDakMscUJBQXFCLGFBQWE7QUFBQSxRQUNsQyxXQUFXLGFBQWE7QUFBQSxNQUM1QjtBQUFBO0FBQUE7OztBQ3BSQTtBQUFBO0FBQUE7QUFFQSxVQUFNLEVBQUUsUUFBQUMsUUFBTyxJQUFJLFVBQVEsUUFBYTtBQUV4QyxhQUFPLFVBQVVBLFFBQU8sS0FBSyx3eitEQUF3eitELFFBQVE7QUFBQTtBQUFBOzs7QUNKNzErRDtBQUFBO0FBQUE7QUFFQSxVQUFNLEVBQUUsUUFBQUMsUUFBTyxJQUFJLFVBQVEsUUFBYTtBQUV4QyxhQUFPLFVBQVVBLFFBQU8sS0FBSyxnMitEQUFnMitELFFBQVE7QUFBQTtBQUFBOzs7QUNKcjQrRCxNQUFBQyxxQkFBQTtBQUFBO0FBQUE7QUFFQSxVQUFNO0FBQUE7QUFBQSxRQUE4QyxDQUFDLE9BQU8sUUFBUSxNQUFNO0FBQUE7QUFDMUUsVUFBTSwyQkFBMkIsSUFBSSxJQUFJLHFCQUFxQjtBQUU5RCxVQUFNO0FBQUE7QUFBQSxRQUF1QyxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUc7QUFBQTtBQUVoRSxVQUFNO0FBQUE7QUFBQSxRQUF1QyxDQUFDLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRztBQUFBO0FBQ3JFLFVBQU0sb0JBQW9CLElBQUksSUFBSSxjQUFjO0FBS2hELFVBQU07QUFBQTtBQUFBLFFBQWlDO0FBQUEsVUFDckM7QUFBQSxVQUFLO0FBQUEsVUFBSztBQUFBLFVBQUs7QUFBQSxVQUFNO0FBQUEsVUFBTTtBQUFBLFVBQU07QUFBQSxVQUFNO0FBQUEsVUFBTTtBQUFBLFVBQU07QUFBQSxVQUFNO0FBQUEsVUFBTTtBQUFBLFVBQU07QUFBQSxVQUFNO0FBQUEsVUFBTTtBQUFBLFVBQU07QUFBQSxVQUFNO0FBQUEsVUFBTTtBQUFBLFVBQU07QUFBQSxVQUFNO0FBQUEsVUFDL0c7QUFBQSxVQUFNO0FBQUEsVUFBTTtBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUN2RztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFDbEc7QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFRO0FBQUEsVUFBUTtBQUFBLFVBQ3BHO0FBQUEsVUFBUTtBQUFBLFVBQVE7QUFBQSxVQUFRO0FBQUEsVUFBUTtBQUFBLFVBQVE7QUFBQSxVQUFRO0FBQUEsVUFBUTtBQUFBLFVBQVE7QUFBQSxVQUFRO0FBQUEsVUFBUTtBQUFBLFVBQVE7QUFBQSxVQUFRO0FBQUEsVUFBUTtBQUFBLFVBQ3hHO0FBQUEsVUFBUTtBQUFBLFFBQ1Y7QUFBQTtBQUNBLFVBQU0sY0FBYyxJQUFJLElBQUksUUFBUTtBQUtwQyxVQUFNO0FBQUE7QUFBQSxRQUF1QztBQUFBLFVBQzNDO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGO0FBQUE7QUFDQSxVQUFNLG9CQUFvQixJQUFJLElBQUksY0FBYztBQUVoRCxVQUFNO0FBQUE7QUFBQSxRQUF3QyxDQUFDLFVBQVUsVUFBVSxPQUFPO0FBQUE7QUFFMUUsVUFBTTtBQUFBO0FBQUEsUUFBb0MsQ0FBQyxPQUFPLFFBQVEsV0FBVyxPQUFPO0FBQUE7QUFDNUUsVUFBTSxpQkFBaUIsSUFBSSxJQUFJLFdBQVc7QUFFMUMsVUFBTTtBQUFBO0FBQUEsUUFBb0MsQ0FBQyxZQUFZLGVBQWUsV0FBVyxNQUFNO0FBQUE7QUFFdkYsVUFBTTtBQUFBO0FBQUEsUUFBMkMsQ0FBQyxRQUFRLGVBQWUsU0FBUztBQUFBO0FBRWxGLFVBQU07QUFBQTtBQUFBLFFBQXFDO0FBQUEsVUFDekM7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Y7QUFBQTtBQUtBLFVBQU07QUFBQTtBQUFBLFFBQTBDO0FBQUEsVUFDOUM7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBS0E7QUFBQSxRQUNGO0FBQUE7QUFLQSxVQUFNO0FBQUE7QUFBQSxRQUFzQztBQUFBLFVBQzFDO0FBQUEsUUFDRjtBQUFBO0FBS0EsVUFBTTtBQUFBO0FBQUEsUUFBeUMsQ0FBQyxXQUFXLFNBQVMsT0FBTztBQUFBO0FBQzNFLFVBQU0sc0JBQXNCLElBQUksSUFBSSxnQkFBZ0I7QUFFcEQsVUFBTTtBQUFBO0FBQUEsUUFBb0M7QUFBQSxVQUN4QztBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRjtBQUFBO0FBQ0EsVUFBTSxpQkFBaUIsSUFBSSxJQUFJLFdBQVc7QUFFMUMsYUFBTyxVQUFVO0FBQUEsUUFDZjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBO0FBQUE7OztBQzNIQTtBQUFBO0FBQUE7QUFJQSxVQUFNLGVBQWUsT0FBTyxJQUFJLHVCQUF1QjtBQUV2RCxlQUFTLGtCQUFtQjtBQUMxQixlQUFPLFdBQVcsWUFBWTtBQUFBLE1BQ2hDO0FBRUEsZUFBUyxnQkFBaUIsV0FBVztBQUNuQyxZQUFJLGNBQWMsUUFBVztBQUMzQixpQkFBTyxlQUFlLFlBQVksY0FBYztBQUFBLFlBQzlDLE9BQU87QUFBQSxZQUNQLFVBQVU7QUFBQSxZQUNWLFlBQVk7QUFBQSxZQUNaLGNBQWM7QUFBQSxVQUNoQixDQUFDO0FBRUQ7QUFBQSxRQUNGO0FBRUEsY0FBTSxZQUFZLElBQUksSUFBSSxTQUFTO0FBRW5DLFlBQUksVUFBVSxhQUFhLFdBQVcsVUFBVSxhQUFhLFVBQVU7QUFDckUsZ0JBQU0sSUFBSSxVQUFVLGdEQUFnRCxVQUFVLFFBQVEsRUFBRTtBQUFBLFFBQzFGO0FBRUEsZUFBTyxlQUFlLFlBQVksY0FBYztBQUFBLFVBQzlDLE9BQU87QUFBQSxVQUNQLFVBQVU7QUFBQSxVQUNWLFlBQVk7QUFBQSxVQUNaLGNBQWM7QUFBQSxRQUNoQixDQUFDO0FBQUEsTUFDSDtBQUVBLGFBQU8sVUFBVTtBQUFBLFFBQ2Y7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBO0FBQUE7OztBQ3ZDQTtBQUFBO0FBQUE7QUFFQSxVQUFNLFNBQVMsVUFBUSxRQUFhO0FBRXBDLFVBQU0sVUFBVSxJQUFJLFlBQVk7QUFLaEMsVUFBTSx3QkFBd0I7QUFDOUIsVUFBTSx3QkFBd0I7QUFDOUIsVUFBTSxpQ0FBaUM7QUFJdkMsVUFBTSw0QkFBNEI7QUFJbEMsZUFBUyxpQkFBa0IsU0FBUztBQUVsQyxlQUFPLFFBQVEsYUFBYSxPQUFPO0FBS25DLFlBQUksUUFBUSxjQUFjLFNBQVMsSUFBSTtBQUd2QyxnQkFBUSxNQUFNLE1BQU0sQ0FBQztBQUdyQixjQUFNLFdBQVcsRUFBRSxVQUFVLEVBQUU7QUFLL0IsWUFBSSxXQUFXO0FBQUEsVUFDYjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRjtBQVFBLGNBQU0saUJBQWlCLFNBQVM7QUFDaEMsbUJBQVcsc0JBQXNCLFVBQVUsTUFBTSxJQUFJO0FBSXJELFlBQUksU0FBUyxZQUFZLE1BQU0sUUFBUTtBQUNyQyxpQkFBTztBQUFBLFFBQ1Q7QUFHQSxpQkFBUztBQUdULGNBQU0sY0FBYyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFHbEQsWUFBSSxPQUFPLG9CQUFvQixXQUFXO0FBSzFDLFlBQUksd0JBQXdCLEtBQUssUUFBUSxHQUFHO0FBRTFDLGdCQUFNLGFBQWEsaUJBQWlCLElBQUk7QUFJeEMsaUJBQU8sZ0JBQWdCLFVBQVU7QUFHakMsY0FBSSxTQUFTLFdBQVc7QUFDdEIsbUJBQU87QUFBQSxVQUNUO0FBR0EscUJBQVcsU0FBUyxNQUFNLEdBQUcsRUFBRTtBQUkvQixxQkFBVyxTQUFTLFFBQVEsY0FBYyxFQUFFO0FBRzVDLHFCQUFXLFNBQVMsTUFBTSxHQUFHLEVBQUU7QUFBQSxRQUNqQztBQUlBLFlBQUksU0FBUyxXQUFXLEdBQUcsR0FBRztBQUM1QixxQkFBVyxlQUFlO0FBQUEsUUFDNUI7QUFJQSxZQUFJLGlCQUFpQixjQUFjLFFBQVE7QUFJM0MsWUFBSSxtQkFBbUIsV0FBVztBQUNoQywyQkFBaUIsY0FBYyw2QkFBNkI7QUFBQSxRQUM5RDtBQUtBLGVBQU8sRUFBRSxVQUFVLGdCQUFnQixLQUFLO0FBQUEsTUFDMUM7QUFPQSxlQUFTLGNBQWUsS0FBSyxrQkFBa0IsT0FBTztBQUNwRCxZQUFJLENBQUMsaUJBQWlCO0FBQ3BCLGlCQUFPLElBQUk7QUFBQSxRQUNiO0FBRUEsY0FBTSxPQUFPLElBQUk7QUFDakIsY0FBTSxhQUFhLElBQUksS0FBSztBQUU1QixjQUFNLGFBQWEsZUFBZSxJQUFJLE9BQU8sS0FBSyxVQUFVLEdBQUcsS0FBSyxTQUFTLFVBQVU7QUFFdkYsWUFBSSxDQUFDLGNBQWMsS0FBSyxTQUFTLEdBQUcsR0FBRztBQUNyQyxpQkFBTyxXQUFXLE1BQU0sR0FBRyxFQUFFO0FBQUEsUUFDL0I7QUFFQSxlQUFPO0FBQUEsTUFDVDtBQVFBLGVBQVMsNkJBQThCLFdBQVcsT0FBTyxVQUFVO0FBRWpFLFlBQUksU0FBUztBQUliLGVBQU8sU0FBUyxXQUFXLE1BQU0sVUFBVSxVQUFVLE1BQU0sU0FBUyxRQUFRLENBQUMsR0FBRztBQUU5RSxvQkFBVSxNQUFNLFNBQVMsUUFBUTtBQUdqQyxtQkFBUztBQUFBLFFBQ1g7QUFHQSxlQUFPO0FBQUEsTUFDVDtBQVFBLGVBQVMsaUNBQWtDLE1BQU0sT0FBTyxVQUFVO0FBQ2hFLGNBQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxTQUFTLFFBQVE7QUFDakQsY0FBTSxRQUFRLFNBQVM7QUFFdkIsWUFBSSxRQUFRLElBQUk7QUFDZCxtQkFBUyxXQUFXLE1BQU07QUFDMUIsaUJBQU8sTUFBTSxNQUFNLEtBQUs7QUFBQSxRQUMxQjtBQUVBLGlCQUFTLFdBQVc7QUFDcEIsZUFBTyxNQUFNLE1BQU0sT0FBTyxTQUFTLFFBQVE7QUFBQSxNQUM3QztBQUlBLGVBQVMsb0JBQXFCLE9BQU87QUFFbkMsY0FBTSxRQUFRLFFBQVEsT0FBTyxLQUFLO0FBR2xDLGVBQU8sY0FBYyxLQUFLO0FBQUEsTUFDNUI7QUFLQSxlQUFTLGNBQWUsTUFBTTtBQUU1QixlQUFRLFFBQVEsTUFBUSxRQUFRLE1BQVUsUUFBUSxNQUFRLFFBQVEsTUFBVSxRQUFRLE1BQVEsUUFBUTtBQUFBLE1BQ3RHO0FBS0EsZUFBUyxnQkFBaUIsTUFBTTtBQUM5QjtBQUFBO0FBQUEsVUFFRSxRQUFRLE1BQVEsUUFBUSxLQUNuQixPQUFPLE1BR04sT0FBTyxPQUFRO0FBQUE7QUFBQSxNQUV6QjtBQUlBLGVBQVMsY0FBZSxPQUFPO0FBQzdCLGNBQU0sU0FBUyxNQUFNO0FBR3JCLGNBQU0sU0FBUyxJQUFJLFdBQVcsTUFBTTtBQUNwQyxZQUFJLElBQUk7QUFFUixpQkFBUyxJQUFJLEdBQUcsSUFBSSxRQUFRLEVBQUUsR0FBRztBQUMvQixnQkFBTSxPQUFPLE1BQU0sQ0FBQztBQUdwQixjQUFJLFNBQVMsSUFBTTtBQUNqQixtQkFBTyxHQUFHLElBQUk7QUFBQSxVQU9oQixXQUNFLFNBQVMsTUFDVCxFQUFFLGNBQWMsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLGNBQWMsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUMzRDtBQUNBLG1CQUFPLEdBQUcsSUFBSTtBQUFBLFVBR2hCLE9BQU87QUFJTCxtQkFBTyxHQUFHLElBQUssZ0JBQWdCLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFLLGdCQUFnQixNQUFNLElBQUksQ0FBQyxDQUFDO0FBR2pGLGlCQUFLO0FBQUEsVUFDUDtBQUFBLFFBQ0Y7QUFHQSxlQUFPLFdBQVcsSUFBSSxTQUFTLE9BQU8sU0FBUyxHQUFHLENBQUM7QUFBQSxNQUNyRDtBQUlBLGVBQVMsY0FBZSxPQUFPO0FBRzdCLGdCQUFRLHFCQUFxQixPQUFPLE1BQU0sSUFBSTtBQUk5QyxjQUFNLFdBQVcsRUFBRSxVQUFVLEVBQUU7QUFLL0IsY0FBTSxPQUFPO0FBQUEsVUFDWDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRjtBQUtBLFlBQUksS0FBSyxXQUFXLEtBQUssQ0FBQyxzQkFBc0IsS0FBSyxJQUFJLEdBQUc7QUFDMUQsaUJBQU87QUFBQSxRQUNUO0FBSUEsWUFBSSxTQUFTLFdBQVcsTUFBTSxRQUFRO0FBQ3BDLGlCQUFPO0FBQUEsUUFDVDtBQUdBLGlCQUFTO0FBS1QsWUFBSSxVQUFVO0FBQUEsVUFDWjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRjtBQUdBLGtCQUFVLHFCQUFxQixTQUFTLE9BQU8sSUFBSTtBQUluRCxZQUFJLFFBQVEsV0FBVyxLQUFLLENBQUMsc0JBQXNCLEtBQUssT0FBTyxHQUFHO0FBQ2hFLGlCQUFPO0FBQUEsUUFDVDtBQUVBLGNBQU0sZ0JBQWdCLEtBQUssWUFBWTtBQUN2QyxjQUFNLG1CQUFtQixRQUFRLFlBQVk7QUFNN0MsY0FBTSxXQUFXO0FBQUEsVUFDZixNQUFNO0FBQUEsVUFDTixTQUFTO0FBQUE7QUFBQSxVQUVULFlBQVksb0JBQUksSUFBSTtBQUFBO0FBQUEsVUFFcEIsU0FBUyxHQUFHLGFBQWEsSUFBSSxnQkFBZ0I7QUFBQSxRQUMvQztBQUdBLGVBQU8sU0FBUyxXQUFXLE1BQU0sUUFBUTtBQUV2QyxtQkFBUztBQUlUO0FBQUE7QUFBQSxZQUVFLFVBQVEsc0JBQXNCLEtBQUssSUFBSTtBQUFBLFlBQ3ZDO0FBQUEsWUFDQTtBQUFBLFVBQ0Y7QUFLQSxjQUFJLGdCQUFnQjtBQUFBLFlBQ2xCLENBQUMsU0FBUyxTQUFTLE9BQU8sU0FBUztBQUFBLFlBQ25DO0FBQUEsWUFDQTtBQUFBLFVBQ0Y7QUFJQSwwQkFBZ0IsY0FBYyxZQUFZO0FBRzFDLGNBQUksU0FBUyxXQUFXLE1BQU0sUUFBUTtBQUdwQyxnQkFBSSxNQUFNLFNBQVMsUUFBUSxNQUFNLEtBQUs7QUFDcEM7QUFBQSxZQUNGO0FBR0EscUJBQVM7QUFBQSxVQUNYO0FBR0EsY0FBSSxTQUFTLFdBQVcsTUFBTSxRQUFRO0FBQ3BDO0FBQUEsVUFDRjtBQUdBLGNBQUksaUJBQWlCO0FBSXJCLGNBQUksTUFBTSxTQUFTLFFBQVEsTUFBTSxLQUFLO0FBSXBDLDZCQUFpQiwwQkFBMEIsT0FBTyxVQUFVLElBQUk7QUFJaEU7QUFBQSxjQUNFO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxZQUNGO0FBQUEsVUFHRixPQUFPO0FBSUwsNkJBQWlCO0FBQUEsY0FDZjtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDRjtBQUdBLDZCQUFpQixxQkFBcUIsZ0JBQWdCLE9BQU8sSUFBSTtBQUdqRSxnQkFBSSxlQUFlLFdBQVcsR0FBRztBQUMvQjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBUUEsY0FDRSxjQUFjLFdBQVcsS0FDekIsc0JBQXNCLEtBQUssYUFBYSxNQUN2QyxlQUFlLFdBQVcsS0FBSywwQkFBMEIsS0FBSyxjQUFjLE1BQzdFLENBQUMsU0FBUyxXQUFXLElBQUksYUFBYSxHQUN0QztBQUNBLHFCQUFTLFdBQVcsSUFBSSxlQUFlLGNBQWM7QUFBQSxVQUN2RDtBQUFBLFFBQ0Y7QUFHQSxlQUFPO0FBQUEsTUFDVDtBQUlBLGVBQVMsZ0JBQWlCLE1BQU07QUFFOUIsZUFBTyxLQUFLLFFBQVEsZ0NBQWdDLEVBQUU7QUFFdEQsWUFBSSxhQUFhLEtBQUs7QUFHdEIsWUFBSSxhQUFhLE1BQU0sR0FBRztBQUd4QixjQUFJLEtBQUssV0FBVyxhQUFhLENBQUMsTUFBTSxJQUFRO0FBQzlDLGNBQUU7QUFDRixnQkFBSSxLQUFLLFdBQVcsYUFBYSxDQUFDLE1BQU0sSUFBUTtBQUM5QyxnQkFBRTtBQUFBLFlBQ0o7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUlBLFlBQUksYUFBYSxNQUFNLEdBQUc7QUFDeEIsaUJBQU87QUFBQSxRQUNUO0FBT0EsWUFBSSxpQkFBaUIsS0FBSyxLQUFLLFdBQVcsYUFBYSxPQUFPLEtBQUssVUFBVSxHQUFHLFVBQVUsQ0FBQyxHQUFHO0FBQzVGLGlCQUFPO0FBQUEsUUFDVDtBQUVBLGNBQU0sU0FBUyxPQUFPLEtBQUssTUFBTSxRQUFRO0FBQ3pDLGVBQU8sSUFBSSxXQUFXLE9BQU8sUUFBUSxPQUFPLFlBQVksT0FBTyxVQUFVO0FBQUEsTUFDM0U7QUFTQSxlQUFTLDBCQUEyQixPQUFPLFVBQVUsY0FBYztBQUVqRSxjQUFNLGdCQUFnQixTQUFTO0FBRy9CLFlBQUksUUFBUTtBQUlaLGVBQU8sTUFBTSxTQUFTLFFBQVEsTUFBTSxHQUFHO0FBR3ZDLGlCQUFTO0FBR1QsZUFBTyxNQUFNO0FBSVgsbUJBQVM7QUFBQSxZQUNQLENBQUMsU0FBUyxTQUFTLE9BQU8sU0FBUztBQUFBLFlBQ25DO0FBQUEsWUFDQTtBQUFBLFVBQ0Y7QUFHQSxjQUFJLFNBQVMsWUFBWSxNQUFNLFFBQVE7QUFDckM7QUFBQSxVQUNGO0FBSUEsZ0JBQU0sbUJBQW1CLE1BQU0sU0FBUyxRQUFRO0FBR2hELG1CQUFTO0FBR1QsY0FBSSxxQkFBcUIsTUFBTTtBQUc3QixnQkFBSSxTQUFTLFlBQVksTUFBTSxRQUFRO0FBQ3JDLHVCQUFTO0FBQ1Q7QUFBQSxZQUNGO0FBR0EscUJBQVMsTUFBTSxTQUFTLFFBQVE7QUFHaEMscUJBQVM7QUFBQSxVQUdYLE9BQU87QUFFTCxtQkFBTyxxQkFBcUIsR0FBRztBQUcvQjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBR0EsWUFBSSxjQUFjO0FBQ2hCLGlCQUFPO0FBQUEsUUFDVDtBQUlBLGVBQU8sTUFBTSxNQUFNLGVBQWUsU0FBUyxRQUFRO0FBQUEsTUFDckQ7QUFLQSxlQUFTLG1CQUFvQixVQUFVO0FBQ3JDLGVBQU8sYUFBYSxTQUFTO0FBQzdCLGNBQU0sRUFBRSxZQUFZLFFBQVEsSUFBSTtBQUloQyxZQUFJLGdCQUFnQjtBQUdwQixpQkFBUyxDQUFDLE1BQU0sS0FBSyxLQUFLLFdBQVcsUUFBUSxHQUFHO0FBRTlDLDJCQUFpQjtBQUdqQiwyQkFBaUI7QUFHakIsMkJBQWlCO0FBSWpCLGNBQUksQ0FBQyxzQkFBc0IsS0FBSyxLQUFLLEdBQUc7QUFHdEMsb0JBQVEsTUFBTSxRQUFRLFdBQVcsTUFBTTtBQUd2QyxvQkFBUSxNQUFNO0FBR2QscUJBQVM7QUFBQSxVQUNYO0FBR0EsMkJBQWlCO0FBQUEsUUFDbkI7QUFHQSxlQUFPO0FBQUEsTUFDVDtBQU1BLGVBQVMsaUJBQWtCLE1BQU07QUFFL0IsZUFBTyxTQUFTLE1BQVMsU0FBUyxNQUFTLFNBQVMsS0FBUyxTQUFTO0FBQUEsTUFDeEU7QUFRQSxlQUFTLHFCQUFzQixLQUFLLFVBQVUsTUFBTSxXQUFXLE1BQU07QUFDbkUsZUFBTyxZQUFZLEtBQUssU0FBUyxVQUFVLGdCQUFnQjtBQUFBLE1BQzdEO0FBTUEsZUFBUyxrQkFBbUIsTUFBTTtBQUVoQyxlQUFPLFNBQVMsTUFBUyxTQUFTLE1BQVMsU0FBUyxLQUFTLFNBQVMsTUFBUyxTQUFTO0FBQUEsTUFDMUY7QUFRQSxlQUFTLHNCQUF1QixLQUFLLFVBQVUsTUFBTSxXQUFXLE1BQU07QUFDcEUsZUFBTyxZQUFZLEtBQUssU0FBUyxVQUFVLGlCQUFpQjtBQUFBLE1BQzlEO0FBU0EsZUFBUyxZQUFhLEtBQUssU0FBUyxVQUFVLFdBQVc7QUFDdkQsWUFBSSxPQUFPO0FBQ1gsWUFBSSxRQUFRLElBQUksU0FBUztBQUV6QixZQUFJLFNBQVM7QUFDWCxpQkFBTyxPQUFPLElBQUksVUFBVSxVQUFVLElBQUksV0FBVyxJQUFJLENBQUM7QUFBRztBQUFBLFFBQy9EO0FBRUEsWUFBSSxVQUFVO0FBQ1osaUJBQU8sUUFBUSxLQUFLLFVBQVUsSUFBSSxXQUFXLEtBQUssQ0FBQztBQUFHO0FBQUEsUUFDeEQ7QUFFQSxlQUFPLFNBQVMsS0FBSyxVQUFVLElBQUksU0FBUyxJQUFJLE1BQU0sSUFBSSxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQUEsTUFDakY7QUFPQSxlQUFTLGlCQUFrQixPQUFPO0FBSWhDLGNBQU0sU0FBUyxNQUFNO0FBQ3JCLGFBQUssS0FBSyxNQUFNLElBQUksUUFBUTtBQUMxQixpQkFBTyxPQUFPLGFBQWEsTUFBTSxNQUFNLEtBQUs7QUFBQSxRQUM5QztBQUNBLFlBQUksU0FBUztBQUFJLFlBQUksSUFBSTtBQUN6QixZQUFJLFlBQVksS0FBSyxNQUFNO0FBQzNCLGVBQU8sSUFBSSxRQUFRO0FBQ2pCLGNBQUksSUFBSSxXQUFXLFFBQVE7QUFDekIsdUJBQVcsU0FBUztBQUFBLFVBQ3RCO0FBQ0Esb0JBQVUsT0FBTyxhQUFhLE1BQU0sTUFBTSxNQUFNLFNBQVMsR0FBRyxLQUFLLFFBQVEsQ0FBQztBQUFBLFFBQzVFO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFNQSxlQUFTLDBCQUEyQixVQUFVO0FBQzVDLGdCQUFRLFNBQVMsU0FBUztBQUFBLFVBQ3hCLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFFSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUVILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBRUgsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFFSCxtQkFBTztBQUFBLFFBQ1g7QUFHQSxZQUFJLFNBQVMsUUFBUSxTQUFTLE9BQU8sR0FBRztBQUN0QyxpQkFBTztBQUFBLFFBQ1Q7QUFHQSxZQUFJLFNBQVMsUUFBUSxTQUFTLE1BQU0sR0FBRztBQUNyQyxpQkFBTztBQUFBLFFBQ1Q7QUFNQSxlQUFPO0FBQUEsTUFDVDtBQUVBLGFBQU8sVUFBVTtBQUFBLFFBQ2Y7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUE7QUFBQTs7O0FDdnVCQTtBQUFBO0FBQUE7QUFFQSxVQUFNLEVBQUUsT0FBTyxRQUFRLElBQUksVUFBUSxNQUFXO0FBQzlDLFVBQU0sRUFBRSxrQkFBa0IsSUFBSSxVQUFRLGdCQUFxQjtBQUMzRCxVQUFNLEVBQUUsWUFBWSxJQUFJO0FBR3hCLFVBQU0sU0FBUyxDQUFDO0FBQ2hCLGFBQU8sYUFBYSxDQUFDO0FBQ3JCLGFBQU8sT0FBTyxDQUFDO0FBQ2YsYUFBTyxTQUFTLENBQUM7QUFFakIsYUFBTyxPQUFPLFlBQVksU0FBVSxTQUFTO0FBQzNDLGVBQU8sSUFBSSxVQUFVLEdBQUcsUUFBUSxNQUFNLEtBQUssUUFBUSxPQUFPLEVBQUU7QUFBQSxNQUM5RDtBQUVBLGFBQU8sT0FBTyxtQkFBbUIsU0FBVSxTQUFTO0FBQ2xELGNBQU0sU0FBUyxRQUFRLE1BQU0sV0FBVyxJQUFJLEtBQUs7QUFDakQsY0FBTSxVQUNKLEdBQUcsUUFBUSxRQUFRLDZCQUNoQixNQUFNLEtBQUssUUFBUSxNQUFNLEtBQUssSUFBSSxDQUFDO0FBRXhDLGVBQU8sT0FBTyxPQUFPLFVBQVU7QUFBQSxVQUM3QixRQUFRLFFBQVE7QUFBQSxVQUNoQjtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFFQSxhQUFPLE9BQU8sa0JBQWtCLFNBQVUsU0FBUztBQUNqRCxlQUFPLE9BQU8sT0FBTyxVQUFVO0FBQUEsVUFDN0IsUUFBUSxRQUFRO0FBQUEsVUFDaEIsU0FBUyxJQUFJLFFBQVEsS0FBSyxtQkFBbUIsUUFBUSxJQUFJO0FBQUEsUUFDM0QsQ0FBQztBQUFBLE1BQ0g7QUFHQSxhQUFPLGFBQWEsU0FBVSxHQUFHLEdBQUcsTUFBTTtBQUN4QyxhQUFJLDZCQUFNLFlBQVcsT0FBTztBQUMxQixjQUFJLEVBQUUsYUFBYSxJQUFJO0FBQ3JCLGtCQUFNLE1BQU0sSUFBSSxVQUFVLG9CQUFvQjtBQUM5QyxnQkFBSSxPQUFPO0FBQ1gsa0JBQU07QUFBQSxVQUNSO0FBQUEsUUFDRixPQUFPO0FBQ0wsZUFBSSx1QkFBSSxPQUFPLGtCQUFpQixFQUFFLFVBQVUsT0FBTyxXQUFXLEdBQUc7QUFDL0Qsa0JBQU0sTUFBTSxJQUFJLFVBQVUsb0JBQW9CO0FBQzlDLGdCQUFJLE9BQU87QUFDWCxrQkFBTTtBQUFBLFVBQ1I7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLGFBQU8sc0JBQXNCLFNBQVUsRUFBRSxPQUFPLEdBQUcsS0FBSyxLQUFLO0FBQzNELFlBQUksU0FBUyxLQUFLO0FBQ2hCLGdCQUFNLE9BQU8sT0FBTyxVQUFVO0FBQUEsWUFDNUIsU0FBUyxHQUFHLEdBQUcsWUFBWSxRQUFRLElBQUksTUFBTSxFQUFFLGlCQUNoQyxTQUFTLFVBQVUsRUFBRSxJQUFJLE1BQU07QUFBQSxZQUM5QyxRQUFRO0FBQUEsVUFDVixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFFQSxhQUFPLHFCQUFxQixXQUFZO0FBQ3RDLGNBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxVQUM1QixRQUFRO0FBQUEsVUFDUixTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFDSDtBQUdBLGFBQU8sS0FBSyxPQUFPLFNBQVUsR0FBRztBQUM5QixnQkFBUSxPQUFPLEdBQUc7QUFBQSxVQUNoQixLQUFLO0FBQWEsbUJBQU87QUFBQSxVQUN6QixLQUFLO0FBQVcsbUJBQU87QUFBQSxVQUN2QixLQUFLO0FBQVUsbUJBQU87QUFBQSxVQUN0QixLQUFLO0FBQVUsbUJBQU87QUFBQSxVQUN0QixLQUFLO0FBQVUsbUJBQU87QUFBQSxVQUN0QixLQUFLO0FBQVUsbUJBQU87QUFBQSxVQUN0QixLQUFLO0FBQUEsVUFDTCxLQUFLLFVBQVU7QUFDYixnQkFBSSxNQUFNLE1BQU07QUFDZCxxQkFBTztBQUFBLFlBQ1Q7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLGFBQU8sS0FBSyxvQkFBb0Isc0JBQXNCLE1BQU07QUFBQSxNQUFDO0FBRTdELGFBQU8sS0FBSyxlQUFlLFNBQVUsR0FBRyxXQUFXLFlBQVksTUFBTTtBQUNuRSxZQUFJO0FBQ0osWUFBSTtBQUdKLFlBQUksY0FBYyxJQUFJO0FBRXBCLHVCQUFhLEtBQUssSUFBSSxHQUFHLEVBQUUsSUFBSTtBQUcvQixjQUFJLGVBQWUsWUFBWTtBQUM3Qix5QkFBYTtBQUFBLFVBQ2YsT0FBTztBQUVMLHlCQUFhLEtBQUssSUFBSSxJQUFJLEVBQUUsSUFBSTtBQUFBLFVBQ2xDO0FBQUEsUUFDRixXQUFXLGVBQWUsWUFBWTtBQUlwQyx1QkFBYTtBQUdiLHVCQUFhLEtBQUssSUFBSSxHQUFHLFNBQVMsSUFBSTtBQUFBLFFBQ3hDLE9BQU87QUFJTCx1QkFBYSxLQUFLLElBQUksSUFBSSxTQUFTLElBQUk7QUFHdkMsdUJBQWEsS0FBSyxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUk7QUFBQSxRQUM1QztBQUdBLFlBQUksSUFBSSxPQUFPLENBQUM7QUFHaEIsWUFBSSxNQUFNLEdBQUc7QUFDWCxjQUFJO0FBQUEsUUFDTjtBQUlBLGFBQUksNkJBQU0sa0JBQWlCLE1BQU07QUFFL0IsY0FDRSxPQUFPLE1BQU0sQ0FBQyxLQUNkLE1BQU0sT0FBTyxxQkFDYixNQUFNLE9BQU8sbUJBQ2I7QUFDQSxrQkFBTSxPQUFPLE9BQU8sVUFBVTtBQUFBLGNBQzVCLFFBQVE7QUFBQSxjQUNSLFNBQVMscUJBQXFCLE9BQU8sS0FBSyxVQUFVLENBQUMsQ0FBQztBQUFBLFlBQ3hELENBQUM7QUFBQSxVQUNIO0FBR0EsY0FBSSxPQUFPLEtBQUssWUFBWSxDQUFDO0FBSTdCLGNBQUksSUFBSSxjQUFjLElBQUksWUFBWTtBQUNwQyxrQkFBTSxPQUFPLE9BQU8sVUFBVTtBQUFBLGNBQzVCLFFBQVE7QUFBQSxjQUNSLFNBQVMseUJBQXlCLFVBQVUsSUFBSSxVQUFVLFNBQVMsQ0FBQztBQUFBLFlBQ3RFLENBQUM7QUFBQSxVQUNIO0FBR0EsaUJBQU87QUFBQSxRQUNUO0FBS0EsWUFBSSxDQUFDLE9BQU8sTUFBTSxDQUFDLE1BQUssNkJBQU0sV0FBVSxNQUFNO0FBRTVDLGNBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxHQUFHLFVBQVUsR0FBRyxVQUFVO0FBS2hELGNBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLEdBQUc7QUFDM0IsZ0JBQUksS0FBSyxNQUFNLENBQUM7QUFBQSxVQUNsQixPQUFPO0FBQ0wsZ0JBQUksS0FBSyxLQUFLLENBQUM7QUFBQSxVQUNqQjtBQUdBLGlCQUFPO0FBQUEsUUFDVDtBQUdBLFlBQ0UsT0FBTyxNQUFNLENBQUMsS0FDYixNQUFNLEtBQUssT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUMxQixNQUFNLE9BQU8scUJBQ2IsTUFBTSxPQUFPLG1CQUNiO0FBQ0EsaUJBQU87QUFBQSxRQUNUO0FBR0EsWUFBSSxPQUFPLEtBQUssWUFBWSxDQUFDO0FBRzdCLFlBQUksSUFBSSxLQUFLLElBQUksR0FBRyxTQUFTO0FBSTdCLFlBQUksZUFBZSxZQUFZLEtBQUssS0FBSyxJQUFJLEdBQUcsU0FBUyxJQUFJLEdBQUc7QUFDOUQsaUJBQU8sSUFBSSxLQUFLLElBQUksR0FBRyxTQUFTO0FBQUEsUUFDbEM7QUFHQSxlQUFPO0FBQUEsTUFDVDtBQUdBLGFBQU8sS0FBSyxjQUFjLFNBQVUsR0FBRztBQUVyQyxjQUFNLElBQUksS0FBSyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUM7QUFHaEMsWUFBSSxJQUFJLEdBQUc7QUFDVCxpQkFBTyxLQUFLO0FBQUEsUUFDZDtBQUdBLGVBQU87QUFBQSxNQUNUO0FBRUEsYUFBTyxLQUFLLFlBQVksU0FBVSxHQUFHO0FBQ25DLGNBQU0sT0FBTyxPQUFPLEtBQUssS0FBSyxDQUFDO0FBRS9CLGdCQUFRLE1BQU07QUFBQSxVQUNaLEtBQUs7QUFDSCxtQkFBTyxVQUFVLEVBQUUsV0FBVztBQUFBLFVBQ2hDLEtBQUs7QUFDSCxtQkFBTyxRQUFRLENBQUM7QUFBQSxVQUNsQixLQUFLO0FBQ0gsbUJBQU8sSUFBSSxDQUFDO0FBQUEsVUFDZDtBQUNFLG1CQUFPLEdBQUcsQ0FBQztBQUFBLFFBQ2Y7QUFBQSxNQUNGO0FBR0EsYUFBTyxvQkFBb0IsU0FBVSxXQUFXO0FBQzlDLGVBQU8sQ0FBQyxHQUFHLFFBQVEsVUFBVSxhQUFhO0FBalA1QztBQW1QSSxjQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsTUFBTSxVQUFVO0FBQ3BDLGtCQUFNLE9BQU8sT0FBTyxVQUFVO0FBQUEsY0FDNUIsUUFBUTtBQUFBLGNBQ1IsU0FBUyxHQUFHLFFBQVEsS0FBSyxPQUFPLEtBQUssVUFBVSxDQUFDLENBQUM7QUFBQSxZQUNuRCxDQUFDO0FBQUEsVUFDSDtBQUlBLGdCQUFNLFNBQVMsT0FBTyxhQUFhLGFBQWEsU0FBUyxLQUFJLDRCQUFJLE9BQU8sY0FBWDtBQUM3RCxnQkFBTSxNQUFNLENBQUM7QUFDYixjQUFJLFFBQVE7QUFHWixjQUNFLFdBQVcsVUFDWCxPQUFPLE9BQU8sU0FBUyxZQUN2QjtBQUNBLGtCQUFNLE9BQU8sT0FBTyxVQUFVO0FBQUEsY0FDNUIsUUFBUTtBQUFBLGNBQ1IsU0FBUyxHQUFHLFFBQVE7QUFBQSxZQUN0QixDQUFDO0FBQUEsVUFDSDtBQUdBLGlCQUFPLE1BQU07QUFDWCxrQkFBTSxFQUFFLE1BQU0sTUFBTSxJQUFJLE9BQU8sS0FBSztBQUVwQyxnQkFBSSxNQUFNO0FBQ1I7QUFBQSxZQUNGO0FBRUEsZ0JBQUksS0FBSyxVQUFVLE9BQU8sUUFBUSxHQUFHLFFBQVEsSUFBSSxPQUFPLEdBQUcsQ0FBQztBQUFBLFVBQzlEO0FBRUEsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRjtBQUdBLGFBQU8sa0JBQWtCLFNBQVUsY0FBYyxnQkFBZ0I7QUFDL0QsZUFBTyxDQUFDLEdBQUcsUUFBUSxhQUFhO0FBRTlCLGNBQUksT0FBTyxLQUFLLEtBQUssQ0FBQyxNQUFNLFVBQVU7QUFDcEMsa0JBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxjQUM1QixRQUFRO0FBQUEsY0FDUixTQUFTLEdBQUcsUUFBUSxNQUFNLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQztBQUFBLFlBQy9DLENBQUM7QUFBQSxVQUNIO0FBR0EsZ0JBQU0sU0FBUyxDQUFDO0FBRWhCLGNBQUksQ0FBQyxNQUFNLFFBQVEsQ0FBQyxHQUFHO0FBRXJCLGtCQUFNQyxRQUFPLENBQUMsR0FBRyxPQUFPLG9CQUFvQixDQUFDLEdBQUcsR0FBRyxPQUFPLHNCQUFzQixDQUFDLENBQUM7QUFFbEYsdUJBQVcsT0FBT0EsT0FBTTtBQUV0QixvQkFBTSxXQUFXLGFBQWEsS0FBSyxRQUFRLFFBQVE7QUFJbkQsb0JBQU0sYUFBYSxlQUFlLEVBQUUsR0FBRyxHQUFHLFFBQVEsUUFBUTtBQUcxRCxxQkFBTyxRQUFRLElBQUk7QUFBQSxZQUNyQjtBQUdBLG1CQUFPO0FBQUEsVUFDVDtBQUdBLGdCQUFNLE9BQU8sUUFBUSxRQUFRLENBQUM7QUFHOUIscUJBQVcsT0FBTyxNQUFNO0FBRXRCLGtCQUFNLE9BQU8sUUFBUSx5QkFBeUIsR0FBRyxHQUFHO0FBR3BELGdCQUFJLDZCQUFNLFlBQVk7QUFFcEIsb0JBQU0sV0FBVyxhQUFhLEtBQUssUUFBUSxRQUFRO0FBSW5ELG9CQUFNLGFBQWEsZUFBZSxFQUFFLEdBQUcsR0FBRyxRQUFRLFFBQVE7QUFHMUQscUJBQU8sUUFBUSxJQUFJO0FBQUEsWUFDckI7QUFBQSxVQUNGO0FBR0EsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRjtBQUVBLGFBQU8scUJBQXFCLFNBQVUsR0FBRztBQUN2QyxlQUFPLENBQUMsR0FBRyxRQUFRLFVBQVUsU0FBUztBQUNwQyxlQUFJLDZCQUFNLFlBQVcsU0FBUyxFQUFFLGFBQWEsSUFBSTtBQUMvQyxrQkFBTSxPQUFPLE9BQU8sVUFBVTtBQUFBLGNBQzVCLFFBQVE7QUFBQSxjQUNSLFNBQVMsWUFBWSxRQUFRLE1BQU0sT0FBTyxLQUFLLFVBQVUsQ0FBQyxDQUFDLDJCQUEyQixFQUFFLElBQUk7QUFBQSxZQUM5RixDQUFDO0FBQUEsVUFDSDtBQUVBLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFFQSxhQUFPLHNCQUFzQixTQUFVLFlBQVk7QUFDakQsZUFBTyxDQUFDLFlBQVksUUFBUSxhQUFhO0FBQ3ZDLGdCQUFNLE9BQU8sT0FBTyxLQUFLLEtBQUssVUFBVTtBQUN4QyxnQkFBTSxPQUFPLENBQUM7QUFFZCxjQUFJLFNBQVMsVUFBVSxTQUFTLGFBQWE7QUFDM0MsbUJBQU87QUFBQSxVQUNULFdBQVcsU0FBUyxVQUFVO0FBQzVCLGtCQUFNLE9BQU8sT0FBTyxVQUFVO0FBQUEsY0FDNUIsUUFBUTtBQUFBLGNBQ1IsU0FBUyxZQUFZLFVBQVU7QUFBQSxZQUNqQyxDQUFDO0FBQUEsVUFDSDtBQUVBLHFCQUFXLFdBQVcsWUFBWTtBQUNoQyxrQkFBTSxFQUFFLEtBQUssY0FBYyxVQUFVLFVBQVUsSUFBSTtBQUVuRCxnQkFBSSxhQUFhLE1BQU07QUFDckIsa0JBQUksQ0FBQyxPQUFPLE9BQU8sWUFBWSxHQUFHLEdBQUc7QUFDbkMsc0JBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxrQkFDNUIsUUFBUTtBQUFBLGtCQUNSLFNBQVMseUJBQXlCLEdBQUc7QUFBQSxnQkFDdkMsQ0FBQztBQUFBLGNBQ0g7QUFBQSxZQUNGO0FBRUEsZ0JBQUksUUFBUSxXQUFXLEdBQUc7QUFDMUIsa0JBQU0sYUFBYSxPQUFPLE9BQU8sU0FBUyxjQUFjO0FBSXhELGdCQUFJLGNBQWMsVUFBVSxNQUFNO0FBQ2hDLDhDQUFVLGFBQWE7QUFBQSxZQUN6QjtBQUtBLGdCQUFJLFlBQVksY0FBYyxVQUFVLFFBQVc7QUFDakQsc0JBQVEsVUFBVSxPQUFPLFFBQVEsR0FBRyxRQUFRLElBQUksR0FBRyxFQUFFO0FBRXJELGtCQUNFLFFBQVEsaUJBQ1IsQ0FBQyxRQUFRLGNBQWMsU0FBUyxLQUFLLEdBQ3JDO0FBQ0Esc0JBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxrQkFDNUIsUUFBUTtBQUFBLGtCQUNSLFNBQVMsR0FBRyxLQUFLLDZDQUE2QyxRQUFRLGNBQWMsS0FBSyxJQUFJLENBQUM7QUFBQSxnQkFDaEcsQ0FBQztBQUFBLGNBQ0g7QUFFQSxtQkFBSyxHQUFHLElBQUk7QUFBQSxZQUNkO0FBQUEsVUFDRjtBQUVBLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFFQSxhQUFPLG9CQUFvQixTQUFVLFdBQVc7QUFDOUMsZUFBTyxDQUFDLEdBQUcsUUFBUSxhQUFhO0FBQzlCLGNBQUksTUFBTSxNQUFNO0FBQ2QsbUJBQU87QUFBQSxVQUNUO0FBRUEsaUJBQU8sVUFBVSxHQUFHLFFBQVEsUUFBUTtBQUFBLFFBQ3RDO0FBQUEsTUFDRjtBQUdBLGFBQU8sV0FBVyxZQUFZLFNBQVUsR0FBRyxRQUFRLFVBQVUsTUFBTTtBQUtqRSxZQUFJLE1BQU0sU0FBUSw2QkFBTSwwQkFBeUI7QUFDL0MsaUJBQU87QUFBQSxRQUNUO0FBR0EsWUFBSSxPQUFPLE1BQU0sVUFBVTtBQUN6QixnQkFBTSxPQUFPLE9BQU8sVUFBVTtBQUFBLFlBQzVCLFFBQVE7QUFBQSxZQUNSLFNBQVMsR0FBRyxRQUFRO0FBQUEsVUFDdEIsQ0FBQztBQUFBLFFBQ0g7QUFLQSxlQUFPLE9BQU8sQ0FBQztBQUFBLE1BQ2pCO0FBR0EsYUFBTyxXQUFXLGFBQWEsU0FBVSxHQUFHLFFBQVEsVUFBVTtBQUc1RCxjQUFNLElBQUksT0FBTyxXQUFXLFVBQVUsR0FBRyxRQUFRLFFBQVE7QUFJekQsaUJBQVMsUUFBUSxHQUFHLFFBQVEsRUFBRSxRQUFRLFNBQVM7QUFDN0MsY0FBSSxFQUFFLFdBQVcsS0FBSyxJQUFJLEtBQUs7QUFDN0Isa0JBQU0sSUFBSTtBQUFBLGNBQ1IsMEVBQ1MsS0FBSyxtQkFBbUIsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUFBLFlBQ3REO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFLQSxlQUFPO0FBQUEsTUFDVDtBQUlBLGFBQU8sV0FBVyxZQUFZO0FBRzlCLGFBQU8sV0FBVyxVQUFVLFNBQVUsR0FBRztBQUV2QyxjQUFNLElBQUksUUFBUSxDQUFDO0FBSW5CLGVBQU87QUFBQSxNQUNUO0FBR0EsYUFBTyxXQUFXLE1BQU0sU0FBVSxHQUFHO0FBQ25DLGVBQU87QUFBQSxNQUNUO0FBR0EsYUFBTyxXQUFXLFdBQVcsSUFBSSxTQUFVLEdBQUcsUUFBUSxVQUFVO0FBRTlELGNBQU0sSUFBSSxPQUFPLEtBQUssYUFBYSxHQUFHLElBQUksVUFBVSxRQUFXLFFBQVEsUUFBUTtBQUkvRSxlQUFPO0FBQUEsTUFDVDtBQUdBLGFBQU8sV0FBVyxvQkFBb0IsSUFBSSxTQUFVLEdBQUcsUUFBUSxVQUFVO0FBRXZFLGNBQU0sSUFBSSxPQUFPLEtBQUssYUFBYSxHQUFHLElBQUksWUFBWSxRQUFXLFFBQVEsUUFBUTtBQUlqRixlQUFPO0FBQUEsTUFDVDtBQUdBLGFBQU8sV0FBVyxlQUFlLElBQUksU0FBVSxHQUFHLFFBQVEsVUFBVTtBQUVsRSxjQUFNLElBQUksT0FBTyxLQUFLLGFBQWEsR0FBRyxJQUFJLFlBQVksUUFBVyxRQUFRLFFBQVE7QUFJakYsZUFBTztBQUFBLE1BQ1Q7QUFHQSxhQUFPLFdBQVcsZ0JBQWdCLElBQUksU0FBVSxHQUFHLFFBQVEsVUFBVSxNQUFNO0FBRXpFLGNBQU0sSUFBSSxPQUFPLEtBQUssYUFBYSxHQUFHLElBQUksWUFBWSxNQUFNLFFBQVEsUUFBUTtBQUk1RSxlQUFPO0FBQUEsTUFDVDtBQUdBLGFBQU8sV0FBVyxjQUFjLFNBQVUsR0FBRyxRQUFRLFVBQVUsTUFBTTtBQU1uRSxZQUNFLE9BQU8sS0FBSyxLQUFLLENBQUMsTUFBTSxZQUN4QixDQUFDLE1BQU0saUJBQWlCLENBQUMsR0FDekI7QUFDQSxnQkFBTSxPQUFPLE9BQU8saUJBQWlCO0FBQUEsWUFDbkM7QUFBQSxZQUNBLFVBQVUsR0FBRyxRQUFRLE1BQU0sT0FBTyxLQUFLLFVBQVUsQ0FBQyxDQUFDO0FBQUEsWUFDbkQsT0FBTyxDQUFDLGFBQWE7QUFBQSxVQUN2QixDQUFDO0FBQUEsUUFDSDtBQU1BLGFBQUksNkJBQU0saUJBQWdCLFNBQVMsTUFBTSxvQkFBb0IsQ0FBQyxHQUFHO0FBQy9ELGdCQUFNLE9BQU8sT0FBTyxVQUFVO0FBQUEsWUFDNUIsUUFBUTtBQUFBLFlBQ1IsU0FBUztBQUFBLFVBQ1gsQ0FBQztBQUFBLFFBQ0g7QUFNQSxZQUFJLEVBQUUsYUFBYSxFQUFFLFVBQVU7QUFDN0IsZ0JBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxZQUM1QixRQUFRO0FBQUEsWUFDUixTQUFTO0FBQUEsVUFDWCxDQUFDO0FBQUEsUUFDSDtBQUlBLGVBQU87QUFBQSxNQUNUO0FBRUEsYUFBTyxXQUFXLGFBQWEsU0FBVSxHQUFHLEdBQUcsUUFBUSxNQUFNLE1BQU07QUFNakUsWUFDRSxPQUFPLEtBQUssS0FBSyxDQUFDLE1BQU0sWUFDeEIsQ0FBQyxNQUFNLGFBQWEsQ0FBQyxLQUNyQixFQUFFLFlBQVksU0FBUyxFQUFFLE1BQ3pCO0FBQ0EsZ0JBQU0sT0FBTyxPQUFPLGlCQUFpQjtBQUFBLFlBQ25DO0FBQUEsWUFDQSxVQUFVLEdBQUcsSUFBSSxNQUFNLE9BQU8sS0FBSyxVQUFVLENBQUMsQ0FBQztBQUFBLFlBQy9DLE9BQU8sQ0FBQyxFQUFFLElBQUk7QUFBQSxVQUNoQixDQUFDO0FBQUEsUUFDSDtBQU1BLGFBQUksNkJBQU0saUJBQWdCLFNBQVMsTUFBTSxvQkFBb0IsRUFBRSxNQUFNLEdBQUc7QUFDdEUsZ0JBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxZQUM1QixRQUFRO0FBQUEsWUFDUixTQUFTO0FBQUEsVUFDWCxDQUFDO0FBQUEsUUFDSDtBQU1BLFlBQUksRUFBRSxPQUFPLGFBQWEsRUFBRSxPQUFPLFVBQVU7QUFDM0MsZ0JBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxZQUM1QixRQUFRO0FBQUEsWUFDUixTQUFTO0FBQUEsVUFDWCxDQUFDO0FBQUEsUUFDSDtBQUlBLGVBQU87QUFBQSxNQUNUO0FBRUEsYUFBTyxXQUFXLFdBQVcsU0FBVSxHQUFHLFFBQVEsTUFBTSxNQUFNO0FBRzVELFlBQUksT0FBTyxLQUFLLEtBQUssQ0FBQyxNQUFNLFlBQVksQ0FBQyxNQUFNLFdBQVcsQ0FBQyxHQUFHO0FBQzVELGdCQUFNLE9BQU8sT0FBTyxVQUFVO0FBQUEsWUFDNUIsUUFBUTtBQUFBLFlBQ1IsU0FBUyxHQUFHLElBQUk7QUFBQSxVQUNsQixDQUFDO0FBQUEsUUFDSDtBQU1BLGFBQUksNkJBQU0saUJBQWdCLFNBQVMsTUFBTSxvQkFBb0IsRUFBRSxNQUFNLEdBQUc7QUFDdEUsZ0JBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxZQUM1QixRQUFRO0FBQUEsWUFDUixTQUFTO0FBQUEsVUFDWCxDQUFDO0FBQUEsUUFDSDtBQU1BLFlBQUksRUFBRSxPQUFPLGFBQWEsRUFBRSxPQUFPLFVBQVU7QUFDM0MsZ0JBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxZQUM1QixRQUFRO0FBQUEsWUFDUixTQUFTO0FBQUEsVUFDWCxDQUFDO0FBQUEsUUFDSDtBQUlBLGVBQU87QUFBQSxNQUNUO0FBR0EsYUFBTyxXQUFXLGVBQWUsU0FBVSxHQUFHLFFBQVEsTUFBTSxNQUFNO0FBQ2hFLFlBQUksTUFBTSxpQkFBaUIsQ0FBQyxHQUFHO0FBQzdCLGlCQUFPLE9BQU8sV0FBVyxZQUFZLEdBQUcsUUFBUSxNQUFNLGlDQUFLLE9BQUwsRUFBVyxhQUFhLE1BQU0sRUFBQztBQUFBLFFBQ3ZGO0FBRUEsWUFBSSxNQUFNLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGlCQUFPLE9BQU8sV0FBVyxXQUFXLEdBQUcsRUFBRSxhQUFhLFFBQVEsTUFBTSxpQ0FBSyxPQUFMLEVBQVcsYUFBYSxNQUFNLEVBQUM7QUFBQSxRQUNyRztBQUVBLFlBQUksTUFBTSxXQUFXLENBQUMsR0FBRztBQUN2QixpQkFBTyxPQUFPLFdBQVcsU0FBUyxHQUFHLFFBQVEsTUFBTSxpQ0FBSyxPQUFMLEVBQVcsYUFBYSxNQUFNLEVBQUM7QUFBQSxRQUNwRjtBQUVBLGNBQU0sT0FBTyxPQUFPLGlCQUFpQjtBQUFBLFVBQ25DO0FBQUEsVUFDQSxVQUFVLEdBQUcsSUFBSSxNQUFNLE9BQU8sS0FBSyxVQUFVLENBQUMsQ0FBQztBQUFBLFVBQy9DLE9BQU8sQ0FBQyxjQUFjO0FBQUEsUUFDeEIsQ0FBQztBQUFBLE1BQ0g7QUFFQSxhQUFPLFdBQVcsc0JBQXNCLElBQUksT0FBTztBQUFBLFFBQ2pELE9BQU8sV0FBVztBQUFBLE1BQ3BCO0FBRUEsYUFBTyxXQUFXLGdDQUFnQyxJQUFJLE9BQU87QUFBQSxRQUMzRCxPQUFPLFdBQVcsc0JBQXNCO0FBQUEsTUFDMUM7QUFFQSxhQUFPLFdBQVcsZ0NBQWdDLElBQUksT0FBTztBQUFBLFFBQzNELE9BQU8sV0FBVztBQUFBLFFBQ2xCLE9BQU8sV0FBVztBQUFBLE1BQ3BCO0FBRUEsYUFBTyxVQUFVO0FBQUEsUUFDZjtBQUFBLE1BQ0Y7QUFBQTtBQUFBOzs7QUN0ckJBLE1BQUFDLGdCQUFBO0FBQUE7QUFBQTtBQUVBLFVBQU0sRUFBRSxVQUFVLElBQUksVUFBUSxRQUFhO0FBQzNDLFVBQU0sT0FBTyxVQUFRLE1BQVc7QUFDaEMsVUFBTSxFQUFFLG1CQUFtQixtQkFBbUIsc0JBQXNCLFlBQVksSUFBSTtBQUNwRixVQUFNLEVBQUUsZ0JBQWdCLElBQUk7QUFDNUIsVUFBTSxFQUFFLDhCQUE4QiwyQkFBMkIsYUFBYSxjQUFjLElBQUk7QUFDaEcsVUFBTSxFQUFFLGFBQUFDLGFBQVksSUFBSSxVQUFRLFlBQWlCO0FBQ2pELFVBQU0sRUFBRSxZQUFZLG9CQUFvQixrQkFBa0IsNEJBQTRCLElBQUk7QUFDMUYsVUFBTSxTQUFTLFVBQVEsUUFBYTtBQUNwQyxVQUFNLEVBQUUsYUFBYSxJQUFJLFVBQVEsWUFBaUI7QUFDbEQsVUFBTSxFQUFFLE9BQU8sSUFBSTtBQUVuQixVQUFJLGtCQUFrQixDQUFDO0FBSXZCLFVBQUlDO0FBQ0osVUFBSTtBQUNGLFFBQUFBLFVBQVMsVUFBUSxRQUFhO0FBQzlCLGNBQU0seUJBQXlCLENBQUMsVUFBVSxVQUFVLFFBQVE7QUFDNUQsMEJBQWtCQSxRQUFPLFVBQVUsRUFBRSxPQUFPLENBQUMsU0FBUyx1QkFBdUIsU0FBUyxJQUFJLENBQUM7QUFBQSxNQUU3RixTQUFRO0FBQUEsTUFFUjtBQUVBLGVBQVMsWUFBYSxVQUFVO0FBSTlCLGNBQU0sVUFBVSxTQUFTO0FBQ3pCLGNBQU0sU0FBUyxRQUFRO0FBQ3ZCLGVBQU8sV0FBVyxJQUFJLE9BQU8sUUFBUSxTQUFTLENBQUMsRUFBRSxTQUFTO0FBQUEsTUFDNUQ7QUFHQSxlQUFTLG9CQUFxQixVQUFVLGlCQUFpQjtBQUV2RCxZQUFJLENBQUMsa0JBQWtCLElBQUksU0FBUyxNQUFNLEdBQUc7QUFDM0MsaUJBQU87QUFBQSxRQUNUO0FBSUEsWUFBSSxXQUFXLFNBQVMsWUFBWSxJQUFJLFlBQVksSUFBSTtBQUl4RCxZQUFJLGFBQWEsUUFBUSxtQkFBbUIsUUFBUSxHQUFHO0FBQ3JELGNBQUksQ0FBQyxrQkFBa0IsUUFBUSxHQUFHO0FBSWhDLHVCQUFXLDRCQUE0QixRQUFRO0FBQUEsVUFDakQ7QUFDQSxxQkFBVyxJQUFJLElBQUksVUFBVSxZQUFZLFFBQVEsQ0FBQztBQUFBLFFBQ3BEO0FBSUEsWUFBSSxZQUFZLENBQUMsU0FBUyxNQUFNO0FBQzlCLG1CQUFTLE9BQU87QUFBQSxRQUNsQjtBQUdBLGVBQU87QUFBQSxNQUNUO0FBT0EsZUFBUyxrQkFBbUIsS0FBSztBQUMvQixpQkFBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLFFBQVEsRUFBRSxHQUFHO0FBQ25DLGdCQUFNLE9BQU8sSUFBSSxXQUFXLENBQUM7QUFFN0IsY0FDRSxPQUFPO0FBQUEsVUFDUCxPQUFPLElBQ1A7QUFDQSxtQkFBTztBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFRQSxlQUFTLDRCQUE2QixPQUFPO0FBQzNDLGVBQU8sT0FBTyxLQUFLLE9BQU8sUUFBUSxFQUFFLFNBQVMsTUFBTTtBQUFBLE1BQ3JEO0FBR0EsZUFBUyxrQkFBbUIsU0FBUztBQUNuQyxlQUFPLFFBQVEsUUFBUSxRQUFRLFFBQVEsU0FBUyxDQUFDO0FBQUEsTUFDbkQ7QUFFQSxlQUFTLGVBQWdCLFNBQVM7QUFFaEMsY0FBTSxNQUFNLGtCQUFrQixPQUFPO0FBSXJDLFlBQUkscUJBQXFCLEdBQUcsS0FBSyxZQUFZLElBQUksSUFBSSxJQUFJLEdBQUc7QUFDMUQsaUJBQU87QUFBQSxRQUNUO0FBR0EsZUFBTztBQUFBLE1BQ1Q7QUFFQSxlQUFTLFlBQWEsUUFBUTtBQXJIOUI7QUFzSEUsZUFBTyxrQkFBa0IsWUFDdkIsc0NBQVEsZ0JBQVIsbUJBQXFCLFVBQVMsYUFDOUIsc0NBQVEsZ0JBQVIsbUJBQXFCLFVBQVM7QUFBQSxNQUVsQztBQVFBLGVBQVMsb0JBQXFCLFlBQVk7QUFDeEMsaUJBQVMsSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEVBQUUsR0FBRztBQUMxQyxnQkFBTSxJQUFJLFdBQVcsV0FBVyxDQUFDO0FBQ2pDLGNBQ0UsRUFFSSxNQUFNO0FBQUEsVUFDTCxLQUFLLE1BQVEsS0FBSztBQUFBLFVBQ2xCLEtBQUssT0FBUSxLQUFLLE1BR3ZCO0FBQ0EsbUJBQU87QUFBQSxVQUNUO0FBQUEsUUFDRjtBQUNBLGVBQU87QUFBQSxNQUNUO0FBTUEsVUFBTSxvQkFBb0I7QUFNMUIsZUFBUyxtQkFBb0IsZ0JBQWdCO0FBRzNDLGdCQUNFLGVBQWUsQ0FBQyxNQUFNLE9BQ3RCLGVBQWUsQ0FBQyxNQUFNLE9BQ3RCLGVBQWUsZUFBZSxTQUFTLENBQUMsTUFBTSxPQUM5QyxlQUFlLGVBQWUsU0FBUyxDQUFDLE1BQU0sT0FDOUMsZUFBZSxTQUFTLElBQUksS0FDNUIsZUFBZSxTQUFTLElBQUksS0FDNUIsZUFBZSxTQUFTLElBQUksT0FDeEI7QUFBQSxNQUNSO0FBR0EsZUFBUyxtQ0FBb0MsU0FBUyxnQkFBZ0I7QUE3S3RFO0FBdUxFLGNBQU0sRUFBRSxZQUFZLElBQUk7QUFJeEIsY0FBTSxpQkFBZ0IsaUJBQVksSUFBSSxtQkFBbUIsSUFBSSxNQUF2QyxZQUE0QyxJQUFJLE1BQU0sR0FBRztBQU0vRSxZQUFJLFNBQVM7QUFDYixZQUFJLGFBQWEsU0FBUyxHQUFHO0FBRzNCLG1CQUFTLElBQUksYUFBYSxRQUFRLE1BQU0sR0FBRyxLQUFLO0FBQzlDLGtCQUFNLFFBQVEsYUFBYSxJQUFJLENBQUMsRUFBRSxLQUFLO0FBQ3ZDLGdCQUFJLHFCQUFxQixJQUFJLEtBQUssR0FBRztBQUNuQyx1QkFBUztBQUNUO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBR0EsWUFBSSxXQUFXLElBQUk7QUFDakIsa0JBQVEsaUJBQWlCO0FBQUEsUUFDM0I7QUFBQSxNQUNGO0FBR0EsZUFBUyxpQ0FBa0M7QUFFekMsZUFBTztBQUFBLE1BQ1Q7QUFHQSxlQUFTLFlBQWE7QUFFcEIsZUFBTztBQUFBLE1BQ1Q7QUFHQSxlQUFTLFdBQVk7QUFFbkIsZUFBTztBQUFBLE1BQ1Q7QUFFQSxlQUFTLG9CQUFxQixhQUFhO0FBVXpDLFlBQUksU0FBUztBQUdiLGlCQUFTLFlBQVk7QUFHckIsb0JBQVksWUFBWSxJQUFJLGtCQUFrQixRQUFRLElBQUk7QUFBQSxNQU81RDtBQUdBLGVBQVMsMEJBQTJCLFNBQVM7QUFJM0MsWUFBSSxtQkFBbUIsUUFBUTtBQVEvQixZQUFJLHFCQUFxQixZQUFZLHFCQUFxQixRQUFXO0FBQ25FO0FBQUEsUUFDRjtBQUtBLFlBQUksUUFBUSxxQkFBcUIsVUFBVSxRQUFRLFNBQVMsYUFBYTtBQUN2RSxrQkFBUSxZQUFZLE9BQU8sVUFBVSxrQkFBa0IsSUFBSTtBQUFBLFFBQzdELFdBQVcsUUFBUSxXQUFXLFNBQVMsUUFBUSxXQUFXLFFBQVE7QUFFaEUsa0JBQVEsUUFBUSxnQkFBZ0I7QUFBQSxZQUM5QixLQUFLO0FBRUgsaUNBQW1CO0FBQ25CO0FBQUEsWUFDRixLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBSUgsa0JBQUksUUFBUSxVQUFVLGtCQUFrQixRQUFRLE1BQU0sS0FBSyxDQUFDLGtCQUFrQixrQkFBa0IsT0FBTyxDQUFDLEdBQUc7QUFDekcsbUNBQW1CO0FBQUEsY0FDckI7QUFDQTtBQUFBLFlBQ0YsS0FBSztBQUdILGtCQUFJLENBQUMsV0FBVyxTQUFTLGtCQUFrQixPQUFPLENBQUMsR0FBRztBQUNwRCxtQ0FBbUI7QUFBQSxjQUNyQjtBQUNBO0FBQUEsWUFDRjtBQUFBLFVBRUY7QUFHQSxrQkFBUSxZQUFZLE9BQU8sVUFBVSxrQkFBa0IsSUFBSTtBQUFBLFFBQzdEO0FBQUEsTUFDRjtBQUdBLGVBQVMsWUFBYSxXQUFXLCtCQUErQjtBQUU5RCxlQUFPO0FBQUEsTUFDVDtBQUdBLGVBQVMsb0NBQXFDLHNCQUFzQixrQkFBa0IsK0JBQStCO0FBQ25ILFlBQUksRUFBQyw2REFBc0IsY0FBYSxxQkFBcUIsWUFBWSxrQkFBa0I7QUFDekYsaUJBQU87QUFBQSxZQUNMLHVCQUF1QjtBQUFBLFlBQ3ZCLHFCQUFxQjtBQUFBLFlBQ3JCLHFCQUFxQjtBQUFBLFlBQ3JCLG1CQUFtQjtBQUFBLFlBQ25CLDJCQUEyQjtBQUFBLFlBQzNCLHdCQUF3Qiw2REFBc0I7QUFBQSxVQUNoRDtBQUFBLFFBQ0Y7QUFFQSxlQUFPO0FBQUEsVUFDTCx1QkFBdUIsWUFBWSxxQkFBcUIsdUJBQXVCLDZCQUE2QjtBQUFBLFVBQzVHLHFCQUFxQixZQUFZLHFCQUFxQixxQkFBcUIsNkJBQTZCO0FBQUEsVUFDeEcscUJBQXFCLFlBQVkscUJBQXFCLHFCQUFxQiw2QkFBNkI7QUFBQSxVQUN4RyxtQkFBbUIsWUFBWSxxQkFBcUIsbUJBQW1CLDZCQUE2QjtBQUFBLFVBQ3BHLDJCQUEyQixZQUFZLHFCQUFxQiwyQkFBMkIsNkJBQTZCO0FBQUEsVUFDcEgsd0JBQXdCLHFCQUFxQjtBQUFBLFFBQy9DO0FBQUEsTUFDRjtBQUdBLGVBQVMsMkJBQTRCLCtCQUErQjtBQUNsRSxlQUFPLFlBQVlELGFBQVksSUFBSSxHQUFHLDZCQUE2QjtBQUFBLE1BQ3JFO0FBR0EsZUFBUyx1QkFBd0IsWUFBWTtBQXpWN0M7QUEwVkUsZUFBTztBQUFBLFVBQ0wsWUFBVyxnQkFBVyxjQUFYLFlBQXdCO0FBQUEsVUFDbkMsbUJBQW1CO0FBQUEsVUFDbkIsaUJBQWlCO0FBQUEsVUFDakIsd0JBQXVCLGdCQUFXLGNBQVgsWUFBd0I7QUFBQSxVQUMvQyw2QkFBNkI7QUFBQSxVQUM3QiwrQkFBK0I7QUFBQSxVQUMvQiw4QkFBOEI7QUFBQSxVQUM5QixTQUFTO0FBQUEsVUFDVCxpQkFBaUI7QUFBQSxVQUNqQixpQkFBaUI7QUFBQSxVQUNqQiwyQkFBMkI7QUFBQSxRQUM3QjtBQUFBLE1BQ0Y7QUFHQSxlQUFTLHNCQUF1QjtBQUU5QixlQUFPO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxRQUNsQjtBQUFBLE1BQ0Y7QUFHQSxlQUFTLHFCQUFzQixpQkFBaUI7QUFDOUMsZUFBTztBQUFBLFVBQ0wsZ0JBQWdCLGdCQUFnQjtBQUFBLFFBQ2xDO0FBQUEsTUFDRjtBQUdBLGVBQVMsMEJBQTJCLFNBQVM7QUFFM0MsY0FBTSxTQUFTLFFBQVE7QUFHdkIsZUFBTyxNQUFNO0FBSWIsWUFBSSxpQkFBaUI7QUFHckIsWUFBSSxRQUFRLGFBQWEsVUFBVTtBQUlqQyxnQkFBTSxlQUFlLGdCQUFnQjtBQUVyQyxjQUFJLENBQUMsZ0JBQWdCLGFBQWEsV0FBVyxRQUFRO0FBQ25ELG1CQUFPO0FBQUEsVUFDVDtBQUdBLDJCQUFpQixJQUFJLElBQUksWUFBWTtBQUFBLFFBQ3ZDLFdBQVcsUUFBUSxvQkFBb0IsS0FBSztBQUUxQywyQkFBaUIsUUFBUTtBQUFBLFFBQzNCO0FBSUEsWUFBSSxjQUFjLG9CQUFvQixjQUFjO0FBSXBELGNBQU0saUJBQWlCLG9CQUFvQixnQkFBZ0IsSUFBSTtBQUkvRCxZQUFJLFlBQVksU0FBUyxFQUFFLFNBQVMsTUFBTTtBQUN4Qyx3QkFBYztBQUFBLFFBQ2hCO0FBRUEsY0FBTSxnQkFBZ0IsV0FBVyxTQUFTLFdBQVc7QUFDckQsY0FBTSw4QkFBOEIsNEJBQTRCLFdBQVcsS0FDekUsQ0FBQyw0QkFBNEIsUUFBUSxHQUFHO0FBRzFDLGdCQUFRLFFBQVE7QUFBQSxVQUNkLEtBQUs7QUFBVSxtQkFBTyxrQkFBa0IsT0FBTyxpQkFBaUIsb0JBQW9CLGdCQUFnQixJQUFJO0FBQUEsVUFDeEcsS0FBSztBQUFjLG1CQUFPO0FBQUEsVUFDMUIsS0FBSztBQUNILG1CQUFPLGdCQUFnQixpQkFBaUI7QUFBQSxVQUMxQyxLQUFLO0FBQ0gsbUJBQU8sZ0JBQWdCLGNBQWM7QUFBQSxVQUN2QyxLQUFLLG1DQUFtQztBQUN0QyxrQkFBTSxhQUFhLGtCQUFrQixPQUFPO0FBSTVDLGdCQUFJLFdBQVcsYUFBYSxVQUFVLEdBQUc7QUFDdkMscUJBQU87QUFBQSxZQUNUO0FBS0EsZ0JBQUksNEJBQTRCLFdBQVcsS0FBSyxDQUFDLDRCQUE0QixVQUFVLEdBQUc7QUFDeEYscUJBQU87QUFBQSxZQUNUO0FBR0EsbUJBQU87QUFBQSxVQUNUO0FBQUEsVUFDQSxLQUFLO0FBQUEsVUFPTCxLQUFLO0FBQUEsVUFRTDtBQUNFLG1CQUFPLDhCQUE4QixnQkFBZ0I7QUFBQSxRQUN6RDtBQUFBLE1BQ0Y7QUFPQSxlQUFTLG9CQUFxQixLQUFLLFlBQVk7QUFFN0MsZUFBTyxlQUFlLEdBQUc7QUFFekIsY0FBTSxJQUFJLElBQUksR0FBRztBQUdqQixZQUFJLElBQUksYUFBYSxXQUFXLElBQUksYUFBYSxZQUFZLElBQUksYUFBYSxVQUFVO0FBQ3RGLGlCQUFPO0FBQUEsUUFDVDtBQUdBLFlBQUksV0FBVztBQUdmLFlBQUksV0FBVztBQUdmLFlBQUksT0FBTztBQUdYLFlBQUksWUFBWTtBQUVkLGNBQUksV0FBVztBQUdmLGNBQUksU0FBUztBQUFBLFFBQ2Y7QUFHQSxlQUFPO0FBQUEsTUFDVDtBQUVBLGVBQVMsNEJBQTZCLEtBQUs7QUFDekMsWUFBSSxFQUFFLGVBQWUsTUFBTTtBQUN6QixpQkFBTztBQUFBLFFBQ1Q7QUFHQSxZQUFJLElBQUksU0FBUyxpQkFBaUIsSUFBSSxTQUFTLGdCQUFnQjtBQUM3RCxpQkFBTztBQUFBLFFBQ1Q7QUFHQSxZQUFJLElBQUksYUFBYTtBQUFTLGlCQUFPO0FBR3JDLFlBQUksSUFBSSxhQUFhO0FBQVMsaUJBQU87QUFFckMsZUFBTywrQkFBK0IsSUFBSSxNQUFNO0FBRWhELGlCQUFTLCtCQUFnQyxRQUFRO0FBRS9DLGNBQUksVUFBVSxRQUFRLFdBQVc7QUFBUSxtQkFBTztBQUVoRCxnQkFBTSxjQUFjLElBQUksSUFBSSxNQUFNO0FBR2xDLGNBQUksWUFBWSxhQUFhLFlBQVksWUFBWSxhQUFhLFFBQVE7QUFDeEUsbUJBQU87QUFBQSxVQUNUO0FBR0EsY0FBSSxzREFBc0QsS0FBSyxZQUFZLFFBQVEsTUFDakYsWUFBWSxhQUFhLGVBQWUsWUFBWSxTQUFTLFNBQVMsWUFBWSxNQUNsRixZQUFZLFNBQVMsU0FBUyxZQUFZLEdBQUk7QUFDOUMsbUJBQU87QUFBQSxVQUNUO0FBR0EsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRjtBQU9BLGVBQVMsV0FBWSxPQUFPLGNBQWM7QUFLeEMsWUFBSUMsWUFBVyxRQUFXO0FBQ3hCLGlCQUFPO0FBQUEsUUFDVDtBQUdBLGNBQU0saUJBQWlCLGNBQWMsWUFBWTtBQUdqRCxZQUFJLG1CQUFtQixlQUFlO0FBQ3BDLGlCQUFPO0FBQUEsUUFDVDtBQU1BLFlBQUksZUFBZSxXQUFXLEdBQUc7QUFDL0IsaUJBQU87QUFBQSxRQUNUO0FBSUEsY0FBTSxZQUFZLHFCQUFxQixjQUFjO0FBQ3JELGNBQU0sV0FBVyw4QkFBOEIsZ0JBQWdCLFNBQVM7QUFHeEUsbUJBQVcsUUFBUSxVQUFVO0FBRTNCLGdCQUFNLFlBQVksS0FBSztBQUd2QixnQkFBTSxnQkFBZ0IsS0FBSztBQU0zQixjQUFJLGNBQWNBLFFBQU8sV0FBVyxTQUFTLEVBQUUsT0FBTyxLQUFLLEVBQUUsT0FBTyxRQUFRO0FBRTVFLGNBQUksWUFBWSxZQUFZLFNBQVMsQ0FBQyxNQUFNLEtBQUs7QUFDL0MsZ0JBQUksWUFBWSxZQUFZLFNBQVMsQ0FBQyxNQUFNLEtBQUs7QUFDL0MsNEJBQWMsWUFBWSxNQUFNLEdBQUcsRUFBRTtBQUFBLFlBQ3ZDLE9BQU87QUFDTCw0QkFBYyxZQUFZLE1BQU0sR0FBRyxFQUFFO0FBQUEsWUFDdkM7QUFBQSxVQUNGO0FBSUEsY0FBSSxtQkFBbUIsYUFBYSxhQUFhLEdBQUc7QUFDbEQsbUJBQU87QUFBQSxVQUNUO0FBQUEsUUFDRjtBQUdBLGVBQU87QUFBQSxNQUNUO0FBS0EsVUFBTSx1QkFBdUIsV0FBQyxxR0FBaUcsR0FBQztBQU1oSSxlQUFTLGNBQWUsVUFBVTtBQUdoQyxjQUFNLFNBQVMsQ0FBQztBQUdoQixZQUFJLFFBQVE7QUFHWixtQkFBVyxTQUFTLFNBQVMsTUFBTSxHQUFHLEdBQUc7QUFFdkMsa0JBQVE7QUFHUixnQkFBTSxjQUFjLHFCQUFxQixLQUFLLEtBQUs7QUFHbkQsY0FDRSxnQkFBZ0IsUUFDaEIsWUFBWSxXQUFXLFVBQ3ZCLFlBQVksT0FBTyxTQUFTLFFBQzVCO0FBS0E7QUFBQSxVQUNGO0FBR0EsZ0JBQU0sWUFBWSxZQUFZLE9BQU8sS0FBSyxZQUFZO0FBSXRELGNBQUksZ0JBQWdCLFNBQVMsU0FBUyxHQUFHO0FBQ3ZDLG1CQUFPLEtBQUssWUFBWSxNQUFNO0FBQUEsVUFDaEM7QUFBQSxRQUNGO0FBR0EsWUFBSSxVQUFVLE1BQU07QUFDbEIsaUJBQU87QUFBQSxRQUNUO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFLQSxlQUFTLHFCQUFzQixjQUFjO0FBRzNDLFlBQUksWUFBWSxhQUFhLENBQUMsRUFBRTtBQUdoQyxZQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUs7QUFDeEIsaUJBQU87QUFBQSxRQUNUO0FBRUEsaUJBQVMsSUFBSSxHQUFHLElBQUksYUFBYSxRQUFRLEVBQUUsR0FBRztBQUM1QyxnQkFBTSxXQUFXLGFBQWEsQ0FBQztBQUcvQixjQUFJLFNBQVMsS0FBSyxDQUFDLE1BQU0sS0FBSztBQUM1Qix3QkFBWTtBQUNaO0FBQUEsVUFFRixXQUFXLFVBQVUsQ0FBQyxNQUFNLEtBQUs7QUFDL0I7QUFBQSxVQUdGLFdBQVcsU0FBUyxLQUFLLENBQUMsTUFBTSxLQUFLO0FBQ25DLHdCQUFZO0FBQUEsVUFDZDtBQUFBLFFBQ0Y7QUFDQSxlQUFPO0FBQUEsTUFDVDtBQUVBLGVBQVMsOEJBQStCLGNBQWMsV0FBVztBQUMvRCxZQUFJLGFBQWEsV0FBVyxHQUFHO0FBQzdCLGlCQUFPO0FBQUEsUUFDVDtBQUVBLFlBQUksTUFBTTtBQUNWLGlCQUFTLElBQUksR0FBRyxJQUFJLGFBQWEsUUFBUSxFQUFFLEdBQUc7QUFDNUMsY0FBSSxhQUFhLENBQUMsRUFBRSxTQUFTLFdBQVc7QUFDdEMseUJBQWEsS0FBSyxJQUFJLGFBQWEsQ0FBQztBQUFBLFVBQ3RDO0FBQUEsUUFDRjtBQUVBLHFCQUFhLFNBQVM7QUFFdEIsZUFBTztBQUFBLE1BQ1Q7QUFVQSxlQUFTLG1CQUFvQixhQUFhLGVBQWU7QUFDdkQsWUFBSSxZQUFZLFdBQVcsY0FBYyxRQUFRO0FBQy9DLGlCQUFPO0FBQUEsUUFDVDtBQUNBLGlCQUFTLElBQUksR0FBRyxJQUFJLFlBQVksUUFBUSxFQUFFLEdBQUc7QUFDM0MsY0FBSSxZQUFZLENBQUMsTUFBTSxjQUFjLENBQUMsR0FBRztBQUN2QyxnQkFDRyxZQUFZLENBQUMsTUFBTSxPQUFPLGNBQWMsQ0FBQyxNQUFNLE9BQy9DLFlBQVksQ0FBQyxNQUFNLE9BQU8sY0FBYyxDQUFDLE1BQU0sS0FDaEQ7QUFDQTtBQUFBLFlBQ0Y7QUFDQSxtQkFBTztBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFHQSxlQUFTLDhDQUErQyxTQUFTO0FBQUEsTUFFakU7QUFPQSxlQUFTLFdBQVksR0FBRyxHQUFHO0FBRXpCLFlBQUksRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsUUFBUTtBQUNoRCxpQkFBTztBQUFBLFFBQ1Q7QUFJQSxZQUFJLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNO0FBQy9FLGlCQUFPO0FBQUEsUUFDVDtBQUdBLGVBQU87QUFBQSxNQUNUO0FBRUEsZUFBUyx3QkFBeUI7QUFDaEMsWUFBSTtBQUNKLFlBQUk7QUFDSixjQUFNLFVBQVUsSUFBSSxRQUFRLENBQUNDLFVBQVMsV0FBVztBQUMvQyxnQkFBTUE7QUFDTixnQkFBTTtBQUFBLFFBQ1IsQ0FBQztBQUVELGVBQU8sRUFBRSxTQUFTLFNBQVMsS0FBSyxRQUFRLElBQUk7QUFBQSxNQUM5QztBQUVBLGVBQVMsVUFBVyxhQUFhO0FBQy9CLGVBQU8sWUFBWSxXQUFXLFVBQVU7QUFBQSxNQUMxQztBQUVBLGVBQVMsWUFBYSxhQUFhO0FBQ2pDLGVBQU8sWUFBWSxXQUFXLFVBQVUsYUFDdEMsWUFBWSxXQUFXLFVBQVU7QUFBQSxNQUNyQztBQU1BLGVBQVMsZ0JBQWlCLFFBQVE7QUFoeUJsQztBQWl5QkUsZ0JBQU8saUNBQTRCLE9BQU8sWUFBWSxDQUFDLE1BQWhELFlBQXFEO0FBQUEsTUFDOUQ7QUFHQSxlQUFTLHFDQUFzQyxPQUFPO0FBRXBELGNBQU0sU0FBUyxLQUFLLFVBQVUsS0FBSztBQUduQyxZQUFJLFdBQVcsUUFBVztBQUN4QixnQkFBTSxJQUFJLFVBQVUsZ0NBQWdDO0FBQUEsUUFDdEQ7QUFHQSxlQUFPLE9BQU8sV0FBVyxRQUFRO0FBR2pDLGVBQU87QUFBQSxNQUNUO0FBR0EsVUFBTSxzQkFBc0IsT0FBTyxlQUFlLE9BQU8sZUFBZSxDQUFDLEVBQUUsT0FBTyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBUzlGLGVBQVMsZUFBZ0IsTUFBTSxtQkFBbUIsV0FBVyxHQUFHLGFBQWEsR0FBRztBQS96QmhGO0FBQUEsUUFnMEJFLE1BQU0scUJBQXFCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBYXpCLFlBQWEsUUFBUSxNQUFNO0FBWDNCO0FBQUE7QUFFQTtBQUFBO0FBRUE7QUFBQTtBQVFFLCtCQUFLLFNBQVU7QUFDZiwrQkFBSyxPQUFRO0FBQ2IsK0JBQUssUUFBUztBQUFBLFVBQ2hCO0FBQUEsVUFFQSxPQUFRO0FBUU4sZ0JBQUksT0FBTyxTQUFTLFlBQVksU0FBUyxRQUFRLENBQUUscUJBQVcsT0FBTztBQUNuRSxvQkFBTSxJQUFJO0FBQUEsZ0JBQ1IsZ0VBQWdFLElBQUk7QUFBQSxjQUN0RTtBQUFBLFlBQ0Y7QUFLQSxrQkFBTSxRQUFRLG1CQUFLO0FBQ25CLGtCQUFNLFNBQVMsbUJBQUssU0FBUSxpQkFBaUI7QUFHN0Msa0JBQU0sTUFBTSxPQUFPO0FBSW5CLGdCQUFJLFNBQVMsS0FBSztBQUNoQixxQkFBTztBQUFBLGdCQUNMLE9BQU87QUFBQSxnQkFDUCxNQUFNO0FBQUEsY0FDUjtBQUFBLFlBQ0Y7QUFHQSxrQkFBTSxFQUFFLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxVQUFVLEdBQUcsTUFBTSxJQUFJLE9BQU8sS0FBSztBQUc3RCwrQkFBSyxRQUFTLFFBQVE7QUFPdEIsZ0JBQUk7QUFDSixvQkFBUSxtQkFBSyxRQUFPO0FBQUEsY0FDbEIsS0FBSztBQUtILHlCQUFTO0FBQ1Q7QUFBQSxjQUNGLEtBQUs7QUFLSCx5QkFBUztBQUNUO0FBQUEsY0FDRixLQUFLO0FBV0gseUJBQVMsQ0FBQyxLQUFLLEtBQUs7QUFDcEI7QUFBQSxZQUNKO0FBR0EsbUJBQU87QUFBQSxjQUNMLE9BQU87QUFBQSxjQUNQLE1BQU07QUFBQSxZQUNSO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFqR0U7QUFFQTtBQUVBO0FBaUdGLGVBQU8scUJBQXFCLFVBQVU7QUFFdEMsZUFBTyxlQUFlLHFCQUFxQixXQUFXLG1CQUFtQjtBQUV6RSxlQUFPLGlCQUFpQixxQkFBcUIsV0FBVztBQUFBLFVBQ3RELENBQUMsT0FBTyxXQUFXLEdBQUc7QUFBQSxZQUNwQixVQUFVO0FBQUEsWUFDVixZQUFZO0FBQUEsWUFDWixjQUFjO0FBQUEsWUFDZCxPQUFPLEdBQUcsSUFBSTtBQUFBLFVBQ2hCO0FBQUEsVUFDQSxNQUFNLEVBQUUsVUFBVSxNQUFNLFlBQVksTUFBTSxjQUFjLEtBQUs7QUFBQSxRQUMvRCxDQUFDO0FBT0QsZUFBTyxTQUFVLFFBQVEsTUFBTTtBQUM3QixpQkFBTyxJQUFJLHFCQUFxQixRQUFRLElBQUk7QUFBQSxRQUM5QztBQUFBLE1BQ0Y7QUFVQSxlQUFTLGNBQWUsTUFBTSxRQUFRLG1CQUFtQixXQUFXLEdBQUcsYUFBYSxHQUFHO0FBQ3JGLGNBQU0sZUFBZSxlQUFlLE1BQU0sbUJBQW1CLFVBQVUsVUFBVTtBQUVqRixjQUFNLGFBQWE7QUFBQSxVQUNqQixNQUFNO0FBQUEsWUFDSixVQUFVO0FBQUEsWUFDVixZQUFZO0FBQUEsWUFDWixjQUFjO0FBQUEsWUFDZCxPQUFPLFNBQVMsT0FBUTtBQUN0QixxQkFBTyxXQUFXLE1BQU0sTUFBTTtBQUM5QixxQkFBTyxhQUFhLE1BQU0sS0FBSztBQUFBLFlBQ2pDO0FBQUEsVUFDRjtBQUFBLFVBQ0EsUUFBUTtBQUFBLFlBQ04sVUFBVTtBQUFBLFlBQ1YsWUFBWTtBQUFBLFlBQ1osY0FBYztBQUFBLFlBQ2QsT0FBTyxTQUFTLFNBQVU7QUFDeEIscUJBQU8sV0FBVyxNQUFNLE1BQU07QUFDOUIscUJBQU8sYUFBYSxNQUFNLE9BQU87QUFBQSxZQUNuQztBQUFBLFVBQ0Y7QUFBQSxVQUNBLFNBQVM7QUFBQSxZQUNQLFVBQVU7QUFBQSxZQUNWLFlBQVk7QUFBQSxZQUNaLGNBQWM7QUFBQSxZQUNkLE9BQU8sU0FBUyxVQUFXO0FBQ3pCLHFCQUFPLFdBQVcsTUFBTSxNQUFNO0FBQzlCLHFCQUFPLGFBQWEsTUFBTSxXQUFXO0FBQUEsWUFDdkM7QUFBQSxVQUNGO0FBQUEsVUFDQSxTQUFTO0FBQUEsWUFDUCxVQUFVO0FBQUEsWUFDVixZQUFZO0FBQUEsWUFDWixjQUFjO0FBQUEsWUFDZCxPQUFPLFNBQVMsUUFBUyxZQUFZLFVBQVUsWUFBWTtBQUN6RCxxQkFBTyxXQUFXLE1BQU0sTUFBTTtBQUM5QixxQkFBTyxvQkFBb0IsV0FBVyxHQUFHLEdBQUcsSUFBSSxVQUFVO0FBQzFELGtCQUFJLE9BQU8sZUFBZSxZQUFZO0FBQ3BDLHNCQUFNLElBQUk7QUFBQSxrQkFDUixtQ0FBbUMsSUFBSTtBQUFBLGdCQUN6QztBQUFBLGNBQ0Y7QUFDQSx5QkFBVyxFQUFFLEdBQUcsS0FBSyxHQUFHLE1BQU0sS0FBSyxhQUFhLE1BQU0sV0FBVyxHQUFHO0FBQ2xFLDJCQUFXLEtBQUssU0FBUyxPQUFPLEtBQUssSUFBSTtBQUFBLGNBQzNDO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBRUEsZUFBTyxPQUFPLGlCQUFpQixPQUFPLFdBQVcsaUNBQzVDLGFBRDRDO0FBQUEsVUFFL0MsQ0FBQyxPQUFPLFFBQVEsR0FBRztBQUFBLFlBQ2pCLFVBQVU7QUFBQSxZQUNWLFlBQVk7QUFBQSxZQUNaLGNBQWM7QUFBQSxZQUNkLE9BQU8sV0FBVyxRQUFRO0FBQUEsVUFDNUI7QUFBQSxRQUNGLEVBQUM7QUFBQSxNQUNIO0FBS0EsZUFBZSxjQUFlLE1BQU0sYUFBYSxrQkFBa0I7QUFBQTtBQU1qRSxnQkFBTSxlQUFlO0FBSXJCLGdCQUFNLGFBQWE7QUFLbkIsY0FBSTtBQUVKLGNBQUk7QUFDRixxQkFBUyxLQUFLLE9BQU8sVUFBVTtBQUFBLFVBQ2pDLFNBQVMsR0FBRztBQUNWLHVCQUFXLENBQUM7QUFDWjtBQUFBLFVBQ0Y7QUFHQSxjQUFJO0FBQ0YseUJBQWEsTUFBTSxhQUFhLE1BQU0sQ0FBQztBQUFBLFVBQ3pDLFNBQVMsR0FBRztBQUNWLHVCQUFXLENBQUM7QUFBQSxVQUNkO0FBQUEsUUFDRjtBQUFBO0FBRUEsZUFBUyxxQkFBc0IsUUFBUTtBQUNyQyxlQUFPLGtCQUFrQixrQkFDdkIsT0FBTyxPQUFPLFdBQVcsTUFBTSxvQkFDL0IsT0FBTyxPQUFPLFFBQVE7QUFBQSxNQUUxQjtBQUtBLGVBQVMsb0JBQXFCLFlBQVk7QUFqakMxQztBQWtqQ0UsWUFBSTtBQUNGLHFCQUFXLE1BQU07QUFDakIsMkJBQVcsZ0JBQVgsbUJBQXdCLFFBQVE7QUFBQSxRQUNsQyxTQUFTLEtBQUs7QUFFWixjQUFJLENBQUMsSUFBSSxRQUFRLFNBQVMsOEJBQThCLEtBQUssQ0FBQyxJQUFJLFFBQVEsU0FBUyxrQ0FBa0MsR0FBRztBQUN0SCxrQkFBTTtBQUFBLFVBQ1I7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLFVBQU0sb0NBQW9DO0FBTTFDLGVBQVMsaUJBQWtCLE9BQU87QUFFaEMsZUFBTyxDQUFDLGtDQUFrQyxLQUFLLEtBQUssQ0FBQztBQUtyRCxlQUFPO0FBQUEsTUFDVDtBQU9BLGVBQWUsYUFBYyxRQUFRO0FBQUE7QUFDbkMsZ0JBQU0sUUFBUSxDQUFDO0FBQ2YsY0FBSSxhQUFhO0FBRWpCLGlCQUFPLE1BQU07QUFDWCxrQkFBTSxFQUFFLE1BQU0sT0FBTyxNQUFNLElBQUksTUFBTSxPQUFPLEtBQUs7QUFFakQsZ0JBQUksTUFBTTtBQUVSLHFCQUFPLE9BQU8sT0FBTyxPQUFPLFVBQVU7QUFBQSxZQUN4QztBQUlBLGdCQUFJLENBQUMsYUFBYSxLQUFLLEdBQUc7QUFDeEIsb0JBQU0sSUFBSSxVQUFVLCtCQUErQjtBQUFBLFlBQ3JEO0FBR0Esa0JBQU0sS0FBSyxLQUFLO0FBQ2hCLDBCQUFjLE1BQU07QUFBQSxVQUd0QjtBQUFBLFFBQ0Y7QUFBQTtBQU1BLGVBQVMsV0FBWSxLQUFLO0FBQ3hCLGVBQU8sY0FBYyxHQUFHO0FBRXhCLGNBQU0sV0FBVyxJQUFJO0FBRXJCLGVBQU8sYUFBYSxZQUFZLGFBQWEsV0FBVyxhQUFhO0FBQUEsTUFDdkU7QUFNQSxlQUFTLGtCQUFtQixLQUFLO0FBQy9CLGVBRUksT0FBTyxRQUFRLFlBQ2YsSUFBSSxDQUFDLE1BQU0sT0FDWCxJQUFJLENBQUMsTUFBTSxPQUNYLElBQUksQ0FBQyxNQUFNLE9BQ1gsSUFBSSxDQUFDLE1BQU0sT0FDWCxJQUFJLENBQUMsTUFBTSxPQUNYLElBQUksQ0FBQyxNQUFNLE9BRWIsSUFBSSxhQUFhO0FBQUEsTUFFckI7QUFNQSxlQUFTLHFCQUFzQixLQUFLO0FBQ2xDLGVBQU8sY0FBYyxHQUFHO0FBRXhCLGNBQU0sV0FBVyxJQUFJO0FBRXJCLGVBQU8sYUFBYSxXQUFXLGFBQWE7QUFBQSxNQUM5QztBQU9BLGVBQVMsdUJBQXdCLE9BQU8saUJBQWlCO0FBSXZELGNBQU0sT0FBTztBQUdiLFlBQUksQ0FBQyxLQUFLLFdBQVcsT0FBTyxHQUFHO0FBQzdCLGlCQUFPO0FBQUEsUUFDVDtBQUdBLGNBQU0sV0FBVyxFQUFFLFVBQVUsRUFBRTtBQUkvQixZQUFJLGlCQUFpQjtBQUNuQjtBQUFBLFlBQ0UsQ0FBQyxTQUFTLFNBQVMsT0FBUSxTQUFTO0FBQUEsWUFDcEM7QUFBQSxZQUNBO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFHQSxZQUFJLEtBQUssV0FBVyxTQUFTLFFBQVEsTUFBTSxJQUFNO0FBQy9DLGlCQUFPO0FBQUEsUUFDVDtBQUdBLGlCQUFTO0FBSVQsWUFBSSxpQkFBaUI7QUFDbkI7QUFBQSxZQUNFLENBQUMsU0FBUyxTQUFTLE9BQVEsU0FBUztBQUFBLFlBQ3BDO0FBQUEsWUFDQTtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBSUEsY0FBTSxhQUFhO0FBQUEsVUFDakIsQ0FBQyxTQUFTO0FBQ1Isa0JBQU0sT0FBTyxLQUFLLFdBQVcsQ0FBQztBQUU5QixtQkFBTyxRQUFRLE1BQVEsUUFBUTtBQUFBLFVBQ2pDO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGO0FBSUEsY0FBTSxrQkFBa0IsV0FBVyxTQUFTLE9BQU8sVUFBVSxJQUFJO0FBSWpFLFlBQUksaUJBQWlCO0FBQ25CO0FBQUEsWUFDRSxDQUFDLFNBQVMsU0FBUyxPQUFRLFNBQVM7QUFBQSxZQUNwQztBQUFBLFlBQ0E7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUdBLFlBQUksS0FBSyxXQUFXLFNBQVMsUUFBUSxNQUFNLElBQU07QUFDL0MsaUJBQU87QUFBQSxRQUNUO0FBR0EsaUJBQVM7QUFLVCxZQUFJLGlCQUFpQjtBQUNuQjtBQUFBLFlBQ0UsQ0FBQyxTQUFTLFNBQVMsT0FBUSxTQUFTO0FBQUEsWUFDcEM7QUFBQSxZQUNBO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFLQSxjQUFNLFdBQVc7QUFBQSxVQUNmLENBQUMsU0FBUztBQUNSLGtCQUFNLE9BQU8sS0FBSyxXQUFXLENBQUM7QUFFOUIsbUJBQU8sUUFBUSxNQUFRLFFBQVE7QUFBQSxVQUNqQztBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRjtBQU1BLGNBQU0sZ0JBQWdCLFNBQVMsU0FBUyxPQUFPLFFBQVEsSUFBSTtBQUczRCxZQUFJLFNBQVMsV0FBVyxLQUFLLFFBQVE7QUFDbkMsaUJBQU87QUFBQSxRQUNUO0FBR0EsWUFBSSxrQkFBa0IsUUFBUSxvQkFBb0IsTUFBTTtBQUN0RCxpQkFBTztBQUFBLFFBQ1Q7QUFLQSxZQUFJLGtCQUFrQixlQUFlO0FBQ25DLGlCQUFPO0FBQUEsUUFDVDtBQUdBLGVBQU8sRUFBRSxpQkFBaUIsY0FBYztBQUFBLE1BQzFDO0FBUUEsZUFBUyxrQkFBbUIsWUFBWSxVQUFVLFlBQVk7QUFFNUQsWUFBSSxlQUFlO0FBR25CLHdCQUFnQixpQkFBaUIsR0FBRyxVQUFVLEVBQUU7QUFHaEQsd0JBQWdCO0FBR2hCLHdCQUFnQixpQkFBaUIsR0FBRyxRQUFRLEVBQUU7QUFHOUMsd0JBQWdCO0FBR2hCLHdCQUFnQixpQkFBaUIsR0FBRyxVQUFVLEVBQUU7QUFHaEQsZUFBTztBQUFBLE1BQ1Q7QUF0ekNBO0FBNnpDQSxVQUFNLGdCQUFOLGNBQTRCLFVBQVU7QUFBQTtBQUFBLFFBSXBDLFlBQWEsYUFBYTtBQUN4QixnQkFBTTtBQUpSO0FBS0UsNkJBQUssY0FBZTtBQUFBLFFBQ3RCO0FBQUEsUUFFQSxXQUFZLE9BQU8sVUFBVSxVQUFVO0FBQ3JDLGNBQUksQ0FBQyxLQUFLLGdCQUFnQjtBQUN4QixnQkFBSSxNQUFNLFdBQVcsR0FBRztBQUN0Qix1QkFBUztBQUNUO0FBQUEsWUFDRjtBQUNBLGlCQUFLLGtCQUFrQixNQUFNLENBQUMsSUFBSSxRQUFVLElBQ3hDLEtBQUssY0FBYyxtQkFBSyxhQUFZLElBQ3BDLEtBQUssaUJBQWlCLG1CQUFLLGFBQVk7QUFFM0MsaUJBQUssZUFBZSxHQUFHLFFBQVEsS0FBSyxLQUFLLEtBQUssSUFBSSxDQUFDO0FBQ25ELGlCQUFLLGVBQWUsR0FBRyxPQUFPLE1BQU0sS0FBSyxLQUFLLElBQUksQ0FBQztBQUNuRCxpQkFBSyxlQUFlLEdBQUcsU0FBUyxDQUFDLFFBQVEsS0FBSyxRQUFRLEdBQUcsQ0FBQztBQUFBLFVBQzVEO0FBRUEsZUFBSyxlQUFlLE1BQU0sT0FBTyxVQUFVLFFBQVE7QUFBQSxRQUNyRDtBQUFBLFFBRUEsT0FBUSxVQUFVO0FBQ2hCLGNBQUksS0FBSyxnQkFBZ0I7QUFDdkIsaUJBQUssZUFBZSxJQUFJO0FBQ3hCLGlCQUFLLGlCQUFpQjtBQUFBLFVBQ3hCO0FBQ0EsbUJBQVM7QUFBQSxRQUNYO0FBQUEsTUFDRjtBQWpDRTtBQXVDRixlQUFTLGNBQWUsYUFBYTtBQUNuQyxlQUFPLElBQUksY0FBYyxXQUFXO0FBQUEsTUFDdEM7QUFNQSxlQUFTLGdCQUFpQixTQUFTO0FBRWpDLFlBQUksVUFBVTtBQUdkLFlBQUksVUFBVTtBQUdkLFlBQUksV0FBVztBQUdmLGNBQU0sU0FBUyxlQUFlLGdCQUFnQixPQUFPO0FBR3JELFlBQUksV0FBVyxNQUFNO0FBQ25CLGlCQUFPO0FBQUEsUUFDVDtBQUdBLG1CQUFXLFNBQVMsUUFBUTtBQUUxQixnQkFBTSxvQkFBb0IsY0FBYyxLQUFLO0FBRzdDLGNBQUksc0JBQXNCLGFBQWEsa0JBQWtCLFlBQVksT0FBTztBQUMxRTtBQUFBLFVBQ0Y7QUFHQSxxQkFBVztBQUdYLGNBQUksU0FBUyxZQUFZLFNBQVM7QUFFaEMsc0JBQVU7QUFJVixnQkFBSSxTQUFTLFdBQVcsSUFBSSxTQUFTLEdBQUc7QUFDdEMsd0JBQVUsU0FBUyxXQUFXLElBQUksU0FBUztBQUFBLFlBQzdDO0FBR0Esc0JBQVUsU0FBUztBQUFBLFVBQ3JCLFdBQVcsQ0FBQyxTQUFTLFdBQVcsSUFBSSxTQUFTLEtBQUssWUFBWSxNQUFNO0FBR2xFLHFCQUFTLFdBQVcsSUFBSSxXQUFXLE9BQU87QUFBQSxVQUM1QztBQUFBLFFBQ0Y7QUFHQSxZQUFJLFlBQVksTUFBTTtBQUNwQixpQkFBTztBQUFBLFFBQ1Q7QUFHQSxlQUFPO0FBQUEsTUFDVDtBQU1BLGVBQVMseUJBQTBCLE9BQU87QUFFeEMsY0FBTSxRQUFRO0FBR2QsY0FBTSxXQUFXLEVBQUUsVUFBVSxFQUFFO0FBRy9CLGNBQU0sU0FBUyxDQUFDO0FBR2hCLFlBQUksaUJBQWlCO0FBR3JCLGVBQU8sU0FBUyxXQUFXLE1BQU0sUUFBUTtBQUd2Qyw0QkFBa0I7QUFBQSxZQUNoQixDQUFDLFNBQVMsU0FBUyxPQUFPLFNBQVM7QUFBQSxZQUNuQztBQUFBLFlBQ0E7QUFBQSxVQUNGO0FBR0EsY0FBSSxTQUFTLFdBQVcsTUFBTSxRQUFRO0FBRXBDLGdCQUFJLE1BQU0sV0FBVyxTQUFTLFFBQVEsTUFBTSxJQUFNO0FBRWhELGdDQUFrQjtBQUFBLGdCQUNoQjtBQUFBLGdCQUNBO0FBQUEsY0FDRjtBQUdBLGtCQUFJLFNBQVMsV0FBVyxNQUFNLFFBQVE7QUFDcEM7QUFBQSxjQUNGO0FBQUEsWUFDRixPQUFPO0FBSUwscUJBQU8sTUFBTSxXQUFXLFNBQVMsUUFBUSxNQUFNLEVBQUk7QUFHbkQsdUJBQVM7QUFBQSxZQUNYO0FBQUEsVUFDRjtBQUdBLDJCQUFpQixZQUFZLGdCQUFnQixNQUFNLE1BQU0sQ0FBQyxTQUFTLFNBQVMsS0FBTyxTQUFTLEVBQUk7QUFHaEcsaUJBQU8sS0FBSyxjQUFjO0FBRzFCLDJCQUFpQjtBQUFBLFFBQ25CO0FBR0EsZUFBTztBQUFBLE1BQ1Q7QUFPQSxlQUFTLGVBQWdCLE1BQU0sTUFBTTtBQUVuQyxjQUFNLFFBQVEsS0FBSyxJQUFJLE1BQU0sSUFBSTtBQUdqQyxZQUFJLFVBQVUsTUFBTTtBQUNsQixpQkFBTztBQUFBLFFBQ1Q7QUFHQSxlQUFPLHlCQUF5QixLQUFLO0FBQUEsTUFDdkM7QUFFQSxVQUFNLGNBQWMsSUFBSSxZQUFZO0FBTXBDLGVBQVMsZ0JBQWlCLFFBQVE7QUFDaEMsWUFBSSxPQUFPLFdBQVcsR0FBRztBQUN2QixpQkFBTztBQUFBLFFBQ1Q7QUFPQSxZQUFJLE9BQU8sQ0FBQyxNQUFNLE9BQVEsT0FBTyxDQUFDLE1BQU0sT0FBUSxPQUFPLENBQUMsTUFBTSxLQUFNO0FBQ2xFLG1CQUFTLE9BQU8sU0FBUyxDQUFDO0FBQUEsUUFDNUI7QUFJQSxjQUFNLFNBQVMsWUFBWSxPQUFPLE1BQU07QUFHeEMsZUFBTztBQUFBLE1BQ1Q7QUFFQSxVQUFNLGdDQUFOLE1BQW9DO0FBQUEsUUFBcEM7QUFTRSxpREFBa0Isb0JBQW9CO0FBQUE7QUFBQSxRQVJ0QyxJQUFJLFVBQVc7QUFDYixpQkFBTyxnQkFBZ0I7QUFBQSxRQUN6QjtBQUFBLFFBRUEsSUFBSSxTQUFVO0FBOWhEaEI7QUEraERJLGtCQUFPLFVBQUssWUFBTCxtQkFBYztBQUFBLFFBQ3ZCO0FBQUEsTUFHRjtBQUVBLFVBQU0sNEJBQU4sTUFBZ0M7QUFBQSxRQUFoQztBQUNFLGdEQUFpQixJQUFJLDhCQUE4QjtBQUFBO0FBQUEsTUFDckQ7QUFFQSxVQUFNLDRCQUE0QixJQUFJLDBCQUEwQjtBQUVoRSxhQUFPLFVBQVU7QUFBQSxRQUNmO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUE7QUFBQTs7O0FDL2xEQSxNQUFBQyxtQkFBQTtBQUFBO0FBQUE7QUFFQSxhQUFPLFVBQVU7QUFBQSxRQUNmLE1BQU0sT0FBTyxLQUFLO0FBQUEsUUFDbEIsVUFBVSxPQUFPLFNBQVM7QUFBQSxRQUMxQixTQUFTLE9BQU8sUUFBUTtBQUFBLFFBQ3hCLFFBQVEsT0FBTyxPQUFPO0FBQUEsUUFDdEIsYUFBYSxPQUFPLFlBQVk7QUFBQSxNQUNsQztBQUFBO0FBQUE7OztBQ1JBO0FBQUE7QUFBQTtBQUVBLFVBQU0sRUFBRSxNQUFBQyxPQUFNLEtBQUssSUFBSSxVQUFRLFFBQWE7QUFDNUMsVUFBTSxFQUFFLE9BQU8sSUFBSTtBQUNuQixVQUFNLEVBQUUsT0FBTyxJQUFJO0FBR25CLFVBQU0sV0FBTixNQUFNLFVBQVM7QUFBQSxRQUNiLFlBQWEsVUFBVSxVQUFVLFVBQVUsQ0FBQyxHQUFHO0FBUmpEO0FBbUJJLGdCQUFNLElBQUk7QUFVVixnQkFBTSxJQUFJLFFBQVE7QUFTbEIsZ0JBQU0sS0FBSSxhQUFRLGlCQUFSLFlBQXdCLEtBQUssSUFBSTtBQVMzQyxlQUFLLE1BQU0sSUFBSTtBQUFBLFlBQ2I7QUFBQSxZQUNBLE1BQU07QUFBQSxZQUNOLE1BQU07QUFBQSxZQUNOLGNBQWM7QUFBQSxVQUNoQjtBQUFBLFFBQ0Y7QUFBQSxRQUVBLFVBQVcsTUFBTTtBQUNmLGlCQUFPLFdBQVcsTUFBTSxTQUFRO0FBRWhDLGlCQUFPLEtBQUssTUFBTSxFQUFFLFNBQVMsT0FBTyxHQUFHLElBQUk7QUFBQSxRQUM3QztBQUFBLFFBRUEsZUFBZ0IsTUFBTTtBQUNwQixpQkFBTyxXQUFXLE1BQU0sU0FBUTtBQUVoQyxpQkFBTyxLQUFLLE1BQU0sRUFBRSxTQUFTLFlBQVksR0FBRyxJQUFJO0FBQUEsUUFDbEQ7QUFBQSxRQUVBLFNBQVUsTUFBTTtBQUNkLGlCQUFPLFdBQVcsTUFBTSxTQUFRO0FBRWhDLGlCQUFPLEtBQUssTUFBTSxFQUFFLFNBQVMsTUFBTSxHQUFHLElBQUk7QUFBQSxRQUM1QztBQUFBLFFBRUEsUUFBUyxNQUFNO0FBQ2IsaUJBQU8sV0FBVyxNQUFNLFNBQVE7QUFFaEMsaUJBQU8sS0FBSyxNQUFNLEVBQUUsU0FBUyxLQUFLLEdBQUcsSUFBSTtBQUFBLFFBQzNDO0FBQUEsUUFFQSxJQUFJLE9BQVE7QUFDVixpQkFBTyxXQUFXLE1BQU0sU0FBUTtBQUVoQyxpQkFBTyxLQUFLLE1BQU0sRUFBRSxTQUFTO0FBQUEsUUFDL0I7QUFBQSxRQUVBLElBQUksT0FBUTtBQUNWLGlCQUFPLFdBQVcsTUFBTSxTQUFRO0FBRWhDLGlCQUFPLEtBQUssTUFBTSxFQUFFLFNBQVM7QUFBQSxRQUMvQjtBQUFBLFFBRUEsSUFBSSxPQUFRO0FBQ1YsaUJBQU8sV0FBVyxNQUFNLFNBQVE7QUFFaEMsaUJBQU8sS0FBSyxNQUFNLEVBQUU7QUFBQSxRQUN0QjtBQUFBLFFBRUEsSUFBSSxlQUFnQjtBQUNsQixpQkFBTyxXQUFXLE1BQU0sU0FBUTtBQUVoQyxpQkFBTyxLQUFLLE1BQU0sRUFBRTtBQUFBLFFBQ3RCO0FBQUEsUUFFQSxLQUFLLE9BQU8sV0FBVyxJQUFLO0FBQzFCLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFFQSxhQUFPLFdBQVcsT0FBTyxPQUFPLG1CQUFtQkEsS0FBSTtBQUt2RCxlQUFTLFdBQVksUUFBUTtBQUMzQixlQUNHLGtCQUFrQixRQUVqQixXQUNDLE9BQU8sT0FBTyxXQUFXLGNBQzFCLE9BQU8sT0FBTyxnQkFBZ0IsZUFDOUIsT0FBTyxPQUFPLFdBQVcsTUFBTTtBQUFBLE1BR3JDO0FBRUEsYUFBTyxVQUFVLEVBQUUsVUFBVSxXQUFXO0FBQUE7QUFBQTs7O0FDN0h4QztBQUFBO0FBQUE7QUFFQSxVQUFNLEVBQUUsWUFBWSxjQUFjLElBQUk7QUFDdEMsVUFBTSxFQUFFLE9BQU8sSUFBSTtBQUNuQixVQUFNLEVBQUUsb0JBQW9CLElBQUk7QUFDaEMsVUFBTSxFQUFFLFVBQVUsV0FBVyxJQUFJO0FBQ2pDLFVBQU0sRUFBRSxPQUFPLElBQUk7QUFDbkIsVUFBTSxFQUFFLE1BQU0sV0FBVyxJQUFJLFVBQVEsUUFBYTtBQUNsRCxVQUFNLFdBQVcsVUFBUSxNQUFXO0FBUnBDO0FBV0EsVUFBTSxRQUFPLGdCQUFXLFNBQVgsWUFBbUI7QUFHaEMsVUFBTSxXQUFOLE1BQU0sVUFBUztBQUFBLFFBQ2IsWUFBYSxNQUFNO0FBQ2pCLGlCQUFPLEtBQUssa0JBQWtCLElBQUk7QUFFbEMsY0FBSSxTQUFTLFFBQVc7QUFDdEIsa0JBQU0sT0FBTyxPQUFPLGlCQUFpQjtBQUFBLGNBQ25DLFFBQVE7QUFBQSxjQUNSLFVBQVU7QUFBQSxjQUNWLE9BQU8sQ0FBQyxXQUFXO0FBQUEsWUFDckIsQ0FBQztBQUFBLFVBQ0g7QUFFQSxlQUFLLE1BQU0sSUFBSSxDQUFDO0FBQUEsUUFDbEI7QUFBQSxRQUVBLE9BQVEsTUFBTSxPQUFPLFdBQVcsUUFBVztBQUN6QyxpQkFBTyxXQUFXLE1BQU0sU0FBUTtBQUVoQyxnQkFBTSxTQUFTO0FBQ2YsaUJBQU8sb0JBQW9CLFdBQVcsR0FBRyxNQUFNO0FBRS9DLGNBQUksVUFBVSxXQUFXLEtBQUssQ0FBQyxXQUFXLEtBQUssR0FBRztBQUNoRCxrQkFBTSxJQUFJO0FBQUEsY0FDUjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBSUEsaUJBQU8sT0FBTyxXQUFXLFVBQVUsTUFBTSxRQUFRLE1BQU07QUFDdkQsa0JBQVEsV0FBVyxLQUFLLElBQ3BCLE9BQU8sV0FBVyxLQUFLLE9BQU8sUUFBUSxTQUFTLEVBQUUsUUFBUSxNQUFNLENBQUMsSUFDaEUsT0FBTyxXQUFXLFVBQVUsT0FBTyxRQUFRLE9BQU87QUFDdEQscUJBQVcsVUFBVSxXQUFXLElBQzVCLE9BQU8sV0FBVyxVQUFVLFVBQVUsUUFBUSxVQUFVLElBQ3hEO0FBSUosZ0JBQU0sUUFBUSxVQUFVLE1BQU0sT0FBTyxRQUFRO0FBRzdDLGVBQUssTUFBTSxFQUFFLEtBQUssS0FBSztBQUFBLFFBQ3pCO0FBQUEsUUFFQSxPQUFRLE1BQU07QUFDWixpQkFBTyxXQUFXLE1BQU0sU0FBUTtBQUVoQyxnQkFBTSxTQUFTO0FBQ2YsaUJBQU8sb0JBQW9CLFdBQVcsR0FBRyxNQUFNO0FBRS9DLGlCQUFPLE9BQU8sV0FBVyxVQUFVLE1BQU0sUUFBUSxNQUFNO0FBSXZELGVBQUssTUFBTSxJQUFJLEtBQUssTUFBTSxFQUFFLE9BQU8sV0FBUyxNQUFNLFNBQVMsSUFBSTtBQUFBLFFBQ2pFO0FBQUEsUUFFQSxJQUFLLE1BQU07QUFDVCxpQkFBTyxXQUFXLE1BQU0sU0FBUTtBQUVoQyxnQkFBTSxTQUFTO0FBQ2YsaUJBQU8sb0JBQW9CLFdBQVcsR0FBRyxNQUFNO0FBRS9DLGlCQUFPLE9BQU8sV0FBVyxVQUFVLE1BQU0sUUFBUSxNQUFNO0FBSXZELGdCQUFNLE1BQU0sS0FBSyxNQUFNLEVBQUUsVUFBVSxDQUFDLFVBQVUsTUFBTSxTQUFTLElBQUk7QUFDakUsY0FBSSxRQUFRLElBQUk7QUFDZCxtQkFBTztBQUFBLFVBQ1Q7QUFJQSxpQkFBTyxLQUFLLE1BQU0sRUFBRSxHQUFHLEVBQUU7QUFBQSxRQUMzQjtBQUFBLFFBRUEsT0FBUSxNQUFNO0FBQ1osaUJBQU8sV0FBVyxNQUFNLFNBQVE7QUFFaEMsZ0JBQU0sU0FBUztBQUNmLGlCQUFPLG9CQUFvQixXQUFXLEdBQUcsTUFBTTtBQUUvQyxpQkFBTyxPQUFPLFdBQVcsVUFBVSxNQUFNLFFBQVEsTUFBTTtBQU12RCxpQkFBTyxLQUFLLE1BQU0sRUFDZixPQUFPLENBQUMsVUFBVSxNQUFNLFNBQVMsSUFBSSxFQUNyQyxJQUFJLENBQUMsVUFBVSxNQUFNLEtBQUs7QUFBQSxRQUMvQjtBQUFBLFFBRUEsSUFBSyxNQUFNO0FBQ1QsaUJBQU8sV0FBVyxNQUFNLFNBQVE7QUFFaEMsZ0JBQU0sU0FBUztBQUNmLGlCQUFPLG9CQUFvQixXQUFXLEdBQUcsTUFBTTtBQUUvQyxpQkFBTyxPQUFPLFdBQVcsVUFBVSxNQUFNLFFBQVEsTUFBTTtBQUl2RCxpQkFBTyxLQUFLLE1BQU0sRUFBRSxVQUFVLENBQUMsVUFBVSxNQUFNLFNBQVMsSUFBSSxNQUFNO0FBQUEsUUFDcEU7QUFBQSxRQUVBLElBQUssTUFBTSxPQUFPLFdBQVcsUUFBVztBQUN0QyxpQkFBTyxXQUFXLE1BQU0sU0FBUTtBQUVoQyxnQkFBTSxTQUFTO0FBQ2YsaUJBQU8sb0JBQW9CLFdBQVcsR0FBRyxNQUFNO0FBRS9DLGNBQUksVUFBVSxXQUFXLEtBQUssQ0FBQyxXQUFXLEtBQUssR0FBRztBQUNoRCxrQkFBTSxJQUFJO0FBQUEsY0FDUjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBT0EsaUJBQU8sT0FBTyxXQUFXLFVBQVUsTUFBTSxRQUFRLE1BQU07QUFDdkQsa0JBQVEsV0FBVyxLQUFLLElBQ3BCLE9BQU8sV0FBVyxLQUFLLE9BQU8sUUFBUSxRQUFRLEVBQUUsUUFBUSxNQUFNLENBQUMsSUFDL0QsT0FBTyxXQUFXLFVBQVUsT0FBTyxRQUFRLE1BQU07QUFDckQscUJBQVcsVUFBVSxXQUFXLElBQzVCLE9BQU8sV0FBVyxVQUFVLFVBQVUsUUFBUSxNQUFNLElBQ3BEO0FBSUosZ0JBQU0sUUFBUSxVQUFVLE1BQU0sT0FBTyxRQUFRO0FBSTdDLGdCQUFNLE1BQU0sS0FBSyxNQUFNLEVBQUUsVUFBVSxDQUFDQyxXQUFVQSxPQUFNLFNBQVMsSUFBSTtBQUNqRSxjQUFJLFFBQVEsSUFBSTtBQUNkLGlCQUFLLE1BQU0sSUFBSTtBQUFBLGNBQ2IsR0FBRyxLQUFLLE1BQU0sRUFBRSxNQUFNLEdBQUcsR0FBRztBQUFBLGNBQzVCO0FBQUEsY0FDQSxHQUFHLEtBQUssTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDQSxXQUFVQSxPQUFNLFNBQVMsSUFBSTtBQUFBLFlBQ3RFO0FBQUEsVUFDRixPQUFPO0FBRUwsaUJBQUssTUFBTSxFQUFFLEtBQUssS0FBSztBQUFBLFVBQ3pCO0FBQUEsUUFDRjtBQUFBLFFBRUEsQ0FBQyxTQUFTLFFBQVEsTUFBTSxFQUFHLE9BQU8sU0FBUztBQXRLN0MsY0FBQUMsS0FBQTtBQXVLSSxnQkFBTSxRQUFRLEtBQUssTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE1BQU07QUFDMUMsZ0JBQUksRUFBRSxFQUFFLElBQUksR0FBRztBQUNiLGtCQUFJLE1BQU0sUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUc7QUFDNUIsa0JBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUs7QUFBQSxjQUN4QixPQUFPO0FBQ0wsa0JBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsS0FBSztBQUFBLGNBQ2pDO0FBQUEsWUFDRixPQUFPO0FBQ0wsZ0JBQUUsRUFBRSxJQUFJLElBQUksRUFBRTtBQUFBLFlBQ2hCO0FBRUEsbUJBQU87QUFBQSxVQUNULEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUV0QixXQUFBQSxNQUFBLFFBQVEsVUFBUixPQUFBQSxNQUFBLFFBQVEsUUFBVTtBQUNsQix3QkFBUSxXQUFSLG9CQUFRLFNBQVc7QUFFbkIsZ0JBQU0sU0FBUyxTQUFTLGtCQUFrQixTQUFTLEtBQUs7QUFHeEQsaUJBQU8sWUFBWSxPQUFPLE1BQU0sT0FBTyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFBQSxRQUMxRDtBQUFBLE1BQ0Y7QUFFQSxvQkFBYyxZQUFZLFVBQVUsUUFBUSxRQUFRLE9BQU87QUFFM0QsYUFBTyxpQkFBaUIsU0FBUyxXQUFXO0FBQUEsUUFDMUMsUUFBUTtBQUFBLFFBQ1IsUUFBUTtBQUFBLFFBQ1IsS0FBSztBQUFBLFFBQ0wsUUFBUTtBQUFBLFFBQ1IsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsQ0FBQyxPQUFPLFdBQVcsR0FBRztBQUFBLFVBQ3BCLE9BQU87QUFBQSxVQUNQLGNBQWM7QUFBQSxRQUNoQjtBQUFBLE1BQ0YsQ0FBQztBQVNELGVBQVMsVUFBVyxNQUFNLE9BQU8sVUFBVTtBQU16QyxZQUFJLE9BQU8sVUFBVSxVQUFVO0FBQUEsUUFFL0IsT0FBTztBQUtMLGNBQUksQ0FBQyxXQUFXLEtBQUssR0FBRztBQUN0QixvQkFBUSxpQkFBaUIsT0FDckIsSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLFFBQVEsRUFBRSxNQUFNLE1BQU0sS0FBSyxDQUFDLElBQzlDLElBQUksU0FBUyxPQUFPLFFBQVEsRUFBRSxNQUFNLE1BQU0sS0FBSyxDQUFDO0FBQUEsVUFDdEQ7QUFJQSxjQUFJLGFBQWEsUUFBVztBQUUxQixrQkFBTSxVQUFVO0FBQUEsY0FDZCxNQUFNLE1BQU07QUFBQSxjQUNaLGNBQWMsTUFBTTtBQUFBLFlBQ3RCO0FBRUEsb0JBQVEsaUJBQWlCLGFBQ3JCLElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxVQUFVLE9BQU8sSUFDbkMsSUFBSSxTQUFTLE9BQU8sVUFBVSxPQUFPO0FBQUEsVUFDM0M7QUFBQSxRQUNGO0FBR0EsZUFBTyxFQUFFLE1BQU0sTUFBTTtBQUFBLE1BQ3ZCO0FBRUEsYUFBTyxVQUFVLEVBQUUsVUFBVSxVQUFVO0FBQUE7QUFBQTs7O0FDM1B2QztBQUFBO0FBQUE7QUFFQSxVQUFNLEVBQUUsYUFBYSw2QkFBNkIsSUFBSTtBQUN0RCxVQUFNLEVBQUUsZ0JBQWdCLElBQUk7QUFDNUIsVUFBTSxFQUFFLHVCQUF1QixpQkFBaUIsSUFBSTtBQUNwRCxVQUFNLEVBQUUsV0FBVyxJQUFJO0FBQ3ZCLFVBQU0sRUFBRSxVQUFVLElBQUk7QUFDdEIsVUFBTSxTQUFTLFVBQVEsUUFBYTtBQUNwQyxVQUFNLEVBQUUsTUFBTSxTQUFTLElBQUksVUFBUSxRQUFhO0FBUmhEO0FBVUEsVUFBTSxRQUFPLGdCQUFXLFNBQVgsWUFBbUI7QUFFaEMsVUFBTSxxQkFBcUIsT0FBTyxLQUFLLG1CQUFtQjtBQUMxRCxVQUFNLGlCQUFpQixPQUFPLEtBQUssWUFBWTtBQUMvQyxVQUFNLEtBQUssT0FBTyxLQUFLLElBQUk7QUFDM0IsVUFBTSxTQUFTLE9BQU8sS0FBSyxRQUFRO0FBS25DLGVBQVMsY0FBZSxPQUFPO0FBQzdCLGlCQUFTLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxFQUFFLEdBQUc7QUFDckMsZUFBSyxNQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBVSxHQUFHO0FBQ3ZDLG1CQUFPO0FBQUEsVUFDVDtBQUFBLFFBQ0Y7QUFDQSxlQUFPO0FBQUEsTUFDVDtBQU1BLGVBQVMsaUJBQWtCLFVBQVU7QUFDbkMsY0FBTSxTQUFTLFNBQVM7QUFHeEIsWUFBSSxTQUFTLE1BQU0sU0FBUyxJQUFJO0FBQzlCLGlCQUFPO0FBQUEsUUFDVDtBQUtBLGlCQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsRUFBRSxHQUFHO0FBQy9CLGdCQUFNLEtBQUssU0FBUyxXQUFXLENBQUM7QUFFaEMsY0FBSSxFQUNELE1BQU0sTUFBUSxNQUFNLE1BQ3BCLE1BQU0sTUFBUSxNQUFNLE1BQ3BCLE1BQU0sTUFBUSxNQUFNLE9BQ3JCLE9BQU8sTUFDUCxPQUFPLE1BQ1AsT0FBTyxLQUNOO0FBQ0QsbUJBQU87QUFBQSxVQUNUO0FBQUEsUUFDRjtBQUVBLGVBQU87QUFBQSxNQUNUO0FBT0EsZUFBUyx3QkFBeUIsT0FBTyxVQUFVO0FBRWpELGVBQU8sYUFBYSxhQUFhLFNBQVMsWUFBWSxxQkFBcUI7QUFFM0UsY0FBTSxpQkFBaUIsU0FBUyxXQUFXLElBQUksVUFBVTtBQUt6RCxZQUFJLG1CQUFtQixRQUFXO0FBQ2hDLGlCQUFPO0FBQUEsUUFDVDtBQUVBLGNBQU0sV0FBVyxPQUFPLEtBQUssS0FBSyxjQUFjLElBQUksTUFBTTtBQUcxRCxjQUFNLFlBQVksQ0FBQztBQUluQixjQUFNLFdBQVcsRUFBRSxVQUFVLEVBQUU7QUFHL0IsZUFBTyxNQUFNLFNBQVMsUUFBUSxNQUFNLE1BQVEsTUFBTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLElBQU07QUFDakYsbUJBQVMsWUFBWTtBQUFBLFFBQ3ZCO0FBRUEsWUFBSSxXQUFXLE1BQU07QUFFckIsZUFBTyxNQUFNLFdBQVcsQ0FBQyxNQUFNLE1BQVEsTUFBTSxXQUFXLENBQUMsTUFBTSxJQUFNO0FBQ25FLHNCQUFZO0FBQUEsUUFDZDtBQUVBLFlBQUksYUFBYSxNQUFNLFFBQVE7QUFDN0Isa0JBQVEsTUFBTSxTQUFTLEdBQUcsUUFBUTtBQUFBLFFBQ3BDO0FBR0EsZUFBTyxNQUFNO0FBS1gsY0FBSSxNQUFNLFNBQVMsU0FBUyxVQUFVLFNBQVMsV0FBVyxTQUFTLE1BQU0sRUFBRSxPQUFPLFFBQVEsR0FBRztBQUMzRixxQkFBUyxZQUFZLFNBQVM7QUFBQSxVQUNoQyxPQUFPO0FBQ0wsbUJBQU87QUFBQSxVQUNUO0FBS0EsY0FDRyxTQUFTLGFBQWEsTUFBTSxTQUFTLEtBQUssaUJBQWlCLE9BQU8sSUFBSSxRQUFRLEtBQzlFLFNBQVMsYUFBYSxNQUFNLFNBQVMsS0FBSyxpQkFBaUIsT0FBTyxRQUFRLFFBQVEsR0FDbkY7QUFDQSxtQkFBTztBQUFBLFVBQ1Q7QUFJQSxjQUFJLE1BQU0sU0FBUyxRQUFRLE1BQU0sTUFBUSxNQUFNLFNBQVMsV0FBVyxDQUFDLE1BQU0sSUFBTTtBQUM5RSxtQkFBTztBQUFBLFVBQ1Q7QUFHQSxtQkFBUyxZQUFZO0FBS3JCLGdCQUFNLFNBQVMsOEJBQThCLE9BQU8sUUFBUTtBQUU1RCxjQUFJLFdBQVcsV0FBVztBQUN4QixtQkFBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJLEVBQUUsTUFBTSxVQUFVLGFBQWEsU0FBUyxJQUFJO0FBSWhELG1CQUFTLFlBQVk7QUFHckIsY0FBSTtBQUlKO0FBQ0Usa0JBQU0sZ0JBQWdCLE1BQU0sUUFBUSxTQUFTLFNBQVMsQ0FBQyxHQUFHLFNBQVMsUUFBUTtBQUUzRSxnQkFBSSxrQkFBa0IsSUFBSTtBQUN4QixxQkFBTztBQUFBLFlBQ1Q7QUFFQSxtQkFBTyxNQUFNLFNBQVMsU0FBUyxVQUFVLGdCQUFnQixDQUFDO0FBRTFELHFCQUFTLFlBQVksS0FBSztBQUkxQixnQkFBSSxhQUFhLFVBQVU7QUFDekIscUJBQU8sT0FBTyxLQUFLLEtBQUssU0FBUyxHQUFHLFFBQVE7QUFBQSxZQUM5QztBQUFBLFVBQ0Y7QUFJQSxjQUFJLE1BQU0sU0FBUyxRQUFRLE1BQU0sTUFBUSxNQUFNLFNBQVMsV0FBVyxDQUFDLE1BQU0sSUFBTTtBQUM5RSxtQkFBTztBQUFBLFVBQ1QsT0FBTztBQUNMLHFCQUFTLFlBQVk7QUFBQSxVQUN2QjtBQUdBLGNBQUk7QUFFSixjQUFJLGFBQWEsTUFBTTtBQUVyQiw4REFBZ0I7QUFNaEIsZ0JBQUksQ0FBQyxjQUFjLFdBQVcsR0FBRztBQUMvQiw0QkFBYztBQUFBLFlBQ2hCO0FBR0Esb0JBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUFBLFVBQzFELE9BQU87QUFJTCxvQkFBUSxnQkFBZ0IsT0FBTyxLQUFLLElBQUksQ0FBQztBQUFBLFVBQzNDO0FBR0EsaUJBQU8sWUFBWSxJQUFJLENBQUM7QUFDeEIsaUJBQVEsT0FBTyxVQUFVLFlBQVksWUFBWSxLQUFLLEtBQU0sV0FBVyxLQUFLLENBQUM7QUFHN0Usb0JBQVUsS0FBSyxVQUFVLE1BQU0sT0FBTyxRQUFRLENBQUM7QUFBQSxRQUNqRDtBQUFBLE1BQ0Y7QUFPQSxlQUFTLDhCQUErQixPQUFPLFVBQVU7QUFFdkQsWUFBSSxPQUFPO0FBQ1gsWUFBSSxXQUFXO0FBQ2YsWUFBSSxjQUFjO0FBQ2xCLFlBQUksV0FBVztBQUdmLGVBQU8sTUFBTTtBQUVYLGNBQUksTUFBTSxTQUFTLFFBQVEsTUFBTSxNQUFRLE1BQU0sU0FBUyxXQUFXLENBQUMsTUFBTSxJQUFNO0FBRTlFLGdCQUFJLFNBQVMsTUFBTTtBQUNqQixxQkFBTztBQUFBLFlBQ1Q7QUFHQSxtQkFBTyxFQUFFLE1BQU0sVUFBVSxhQUFhLFNBQVM7QUFBQSxVQUNqRDtBQUlBLGNBQUksYUFBYTtBQUFBLFlBQ2YsQ0FBQyxTQUFTLFNBQVMsTUFBUSxTQUFTLE1BQVEsU0FBUztBQUFBLFlBQ3JEO0FBQUEsWUFDQTtBQUFBLFVBQ0Y7QUFHQSx1QkFBYSxZQUFZLFlBQVksTUFBTSxNQUFNLENBQUMsU0FBUyxTQUFTLEtBQU8sU0FBUyxFQUFJO0FBR3hGLGNBQUksQ0FBQyxzQkFBc0IsS0FBSyxXQUFXLFNBQVMsQ0FBQyxHQUFHO0FBQ3RELG1CQUFPO0FBQUEsVUFDVDtBQUdBLGNBQUksTUFBTSxTQUFTLFFBQVEsTUFBTSxJQUFNO0FBQ3JDLG1CQUFPO0FBQUEsVUFDVDtBQUdBLG1CQUFTO0FBSVQ7QUFBQSxZQUNFLENBQUMsU0FBUyxTQUFTLE1BQVEsU0FBUztBQUFBLFlBQ3BDO0FBQUEsWUFDQTtBQUFBLFVBQ0Y7QUFHQSxrQkFBUSw2QkFBNkIsVUFBVSxHQUFHO0FBQUEsWUFDaEQsS0FBSyx1QkFBdUI7QUFFMUIscUJBQU8sV0FBVztBQUlsQixrQkFBSSxDQUFDLGlCQUFpQixPQUFPLG9CQUFvQixRQUFRLEdBQUc7QUFDMUQsdUJBQU87QUFBQSxjQUNUO0FBSUEsdUJBQVMsWUFBWTtBQUtyQixxQkFBTywyQkFBMkIsT0FBTyxRQUFRO0FBRWpELGtCQUFJLFNBQVMsTUFBTTtBQUNqQix1QkFBTztBQUFBLGNBQ1Q7QUFHQSxrQkFBSSxpQkFBaUIsT0FBTyxnQkFBZ0IsUUFBUSxHQUFHO0FBRXJELG9CQUFJLFFBQVEsU0FBUyxXQUFXLGVBQWU7QUFFL0Msb0JBQUksTUFBTSxLQUFLLE1BQU0sSUFBTTtBQUN6QiwyQkFBUyxZQUFZO0FBQ3JCLDJCQUFTO0FBQUEsZ0JBQ1g7QUFFQSxvQkFBSSxNQUFNLEtBQUssTUFBTSxNQUFRLE1BQU0sUUFBUSxDQUFDLE1BQU0sSUFBTTtBQUN0RCx5QkFBTztBQUFBLGdCQUNUO0FBSUEseUJBQVMsWUFBWTtBQUlyQiwyQkFBVywyQkFBMkIsT0FBTyxRQUFRO0FBRXJELG9CQUFJLGFBQWEsTUFBTTtBQUNyQix5QkFBTztBQUFBLGdCQUNUO0FBQUEsY0FDRjtBQUVBO0FBQUEsWUFDRjtBQUFBLFlBQ0EsS0FBSyxnQkFBZ0I7QUFHbkIsa0JBQUksY0FBYztBQUFBLGdCQUNoQixDQUFDLFNBQVMsU0FBUyxNQUFRLFNBQVM7QUFBQSxnQkFDcEM7QUFBQSxnQkFDQTtBQUFBLGNBQ0Y7QUFHQSw0QkFBYyxZQUFZLGFBQWEsT0FBTyxNQUFNLENBQUMsU0FBUyxTQUFTLEtBQU8sU0FBUyxFQUFJO0FBRzNGLDRCQUFjLGlCQUFpQixXQUFXO0FBRTFDO0FBQUEsWUFDRjtBQUFBLFlBQ0EsS0FBSyw2QkFBNkI7QUFDaEMsa0JBQUksY0FBYztBQUFBLGdCQUNoQixDQUFDLFNBQVMsU0FBUyxNQUFRLFNBQVM7QUFBQSxnQkFDcEM7QUFBQSxnQkFDQTtBQUFBLGNBQ0Y7QUFFQSw0QkFBYyxZQUFZLGFBQWEsT0FBTyxNQUFNLENBQUMsU0FBUyxTQUFTLEtBQU8sU0FBUyxFQUFJO0FBRTNGLHlCQUFXLGlCQUFpQixXQUFXO0FBRXZDO0FBQUEsWUFDRjtBQUFBLFlBQ0EsU0FBUztBQUdQO0FBQUEsZ0JBQ0UsQ0FBQyxTQUFTLFNBQVMsTUFBUSxTQUFTO0FBQUEsZ0JBQ3BDO0FBQUEsZ0JBQ0E7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFJQSxjQUFJLE1BQU0sU0FBUyxRQUFRLE1BQU0sTUFBUSxNQUFNLFNBQVMsV0FBVyxDQUFDLE1BQU0sSUFBTTtBQUM5RSxtQkFBTztBQUFBLFVBQ1QsT0FBTztBQUNMLHFCQUFTLFlBQVk7QUFBQSxVQUN2QjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBT0EsZUFBUywyQkFBNEIsT0FBTyxVQUFVO0FBRXBELGVBQU8sTUFBTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUk7QUFJNUMsWUFBSSxPQUFPO0FBQUEsVUFDVCxDQUFDLFNBQVMsU0FBUyxNQUFRLFNBQVMsTUFBUSxTQUFTO0FBQUEsVUFDckQ7QUFBQSxVQUNBO0FBQUEsUUFDRjtBQUdBLFlBQUksTUFBTSxTQUFTLFFBQVEsTUFBTSxJQUFNO0FBQ3JDLGlCQUFPO0FBQUEsUUFDVCxPQUFPO0FBQ0wsbUJBQVM7QUFBQSxRQUNYO0FBTUEsZUFBTyxJQUFJLFlBQVksRUFBRSxPQUFPLElBQUksRUFDakMsUUFBUSxTQUFTLElBQUksRUFDckIsUUFBUSxTQUFTLElBQUksRUFDckIsUUFBUSxRQUFRLEdBQUc7QUFHdEIsZUFBTztBQUFBLE1BQ1Q7QUFPQSxlQUFTLHdCQUF5QixXQUFXLE9BQU8sVUFBVTtBQUM1RCxZQUFJLFFBQVEsU0FBUztBQUVyQixlQUFPLFFBQVEsTUFBTSxVQUFVLFVBQVUsTUFBTSxLQUFLLENBQUMsR0FBRztBQUN0RCxZQUFFO0FBQUEsUUFDSjtBQUVBLGVBQU8sTUFBTSxTQUFTLFNBQVMsVUFBVyxTQUFTLFdBQVcsS0FBTTtBQUFBLE1BQ3RFO0FBU0EsZUFBUyxZQUFhLEtBQUssU0FBUyxVQUFVLFdBQVc7QUFDdkQsWUFBSSxPQUFPO0FBQ1gsWUFBSSxRQUFRLElBQUksU0FBUztBQUV6QixZQUFJLFNBQVM7QUFDWCxpQkFBTyxPQUFPLElBQUksVUFBVSxVQUFVLElBQUksSUFBSSxDQUFDO0FBQUc7QUFBQSxRQUNwRDtBQUVBLFlBQUksVUFBVTtBQUNaLGlCQUFPLFFBQVEsS0FBSyxVQUFVLElBQUksS0FBSyxDQUFDO0FBQUc7QUFBQSxRQUM3QztBQUVBLGVBQU8sU0FBUyxLQUFLLFVBQVUsSUFBSSxTQUFTLElBQUksTUFBTSxJQUFJLFNBQVMsTUFBTSxRQUFRLENBQUM7QUFBQSxNQUNwRjtBQVFBLGVBQVMsaUJBQWtCLFFBQVEsT0FBTyxVQUFVO0FBQ2xELFlBQUksT0FBTyxTQUFTLE1BQU0sUUFBUTtBQUNoQyxpQkFBTztBQUFBLFFBQ1Q7QUFFQSxpQkFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUNyQyxjQUFJLE1BQU0sQ0FBQyxNQUFNLE9BQU8sU0FBUyxXQUFXLENBQUMsR0FBRztBQUM5QyxtQkFBTztBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFFQSxhQUFPLFVBQVU7QUFBQSxRQUNmO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQTtBQUFBOzs7QUN6ZEE7QUFBQTtBQUFBO0FBRUEsVUFBTSxPQUFPO0FBQ2IsVUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRixJQUFJO0FBQ0osVUFBTSxFQUFFLFNBQVMsSUFBSTtBQUNyQixVQUFNLEVBQUUsT0FBTyxJQUFJO0FBQ25CLFVBQU0sRUFBRSxPQUFPLElBQUk7QUFDbkIsVUFBTSxFQUFFLE1BQUFDLE1BQUssSUFBSSxVQUFRLFFBQWE7QUFDdEMsVUFBTSxTQUFTLFVBQVEsUUFBYTtBQUNwQyxVQUFNLEVBQUUsV0FBVyxZQUFZLElBQUksVUFBUSxRQUFhO0FBQ3hELFVBQU0sRUFBRSxjQUFjLElBQUksVUFBUSxZQUFpQjtBQUNuRCxVQUFNLEVBQUUsbUJBQW1CLElBQUk7QUFDL0IsVUFBTSxFQUFFLHdCQUF3QixJQUFJO0FBQ3BDLFVBQUk7QUFFSixVQUFJO0FBQ0YsY0FBTUMsVUFBUyxVQUFRLFFBQWE7QUFDcEMsaUJBQVMsQ0FBQyxRQUFRQSxRQUFPLFVBQVUsR0FBRyxHQUFHO0FBQUEsTUFDM0MsU0FBUTtBQUNOLGlCQUFTLENBQUMsUUFBUSxLQUFLLE1BQU0sS0FBSyxPQUFPLEdBQUcsQ0FBQztBQUFBLE1BQy9DO0FBRUEsVUFBTSxjQUFjLElBQUksWUFBWTtBQUNwQyxlQUFTLE9BQVE7QUFBQSxNQUFDO0FBRWxCLFVBQU0sMEJBQTBCLFdBQVcsd0JBQXdCLFFBQVEsUUFBUSxRQUFRLEtBQUssTUFBTTtBQUN0RyxVQUFJO0FBRUosVUFBSSx5QkFBeUI7QUFDM0IseUJBQWlCLElBQUkscUJBQXFCLENBQUMsWUFBWTtBQUNyRCxnQkFBTSxTQUFTLFFBQVEsTUFBTTtBQUM3QixjQUFJLFVBQVUsQ0FBQyxPQUFPLFVBQVUsQ0FBQyxZQUFZLE1BQU0sS0FBSyxDQUFDLFVBQVUsTUFBTSxHQUFHO0FBQzFFLG1CQUFPLE9BQU8sNENBQTRDLEVBQUUsTUFBTSxJQUFJO0FBQUEsVUFDeEU7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBR0EsZUFBUyxZQUFhLFFBQVEsWUFBWSxPQUFPO0FBRS9DLFlBQUksU0FBUztBQUdiLFlBQUksa0JBQWtCLGdCQUFnQjtBQUNwQyxtQkFBUztBQUFBLFFBQ1gsV0FBVyxXQUFXLE1BQU0sR0FBRztBQUc3QixtQkFBUyxPQUFPLE9BQU87QUFBQSxRQUN6QixPQUFPO0FBMURUO0FBNkRJLG1CQUFTLElBQUksZUFBZTtBQUFBLFlBQ3BCLEtBQU0sWUFBWTtBQUFBO0FBQ3RCLHNCQUFNLFNBQVMsT0FBTyxXQUFXLFdBQVcsWUFBWSxPQUFPLE1BQU0sSUFBSTtBQUV6RSxvQkFBSSxPQUFPLFlBQVk7QUFDckIsNkJBQVcsUUFBUSxNQUFNO0FBQUEsZ0JBQzNCO0FBRUEsK0JBQWUsTUFBTSxvQkFBb0IsVUFBVSxDQUFDO0FBQUEsY0FDdEQ7QUFBQTtBQUFBLFlBQ0EsUUFBUztBQUFBLFlBQUM7QUFBQSxZQUNWLE1BQU07QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNIO0FBR0EsZUFBTyxxQkFBcUIsTUFBTSxDQUFDO0FBR25DLFlBQUksU0FBUztBQUdiLFlBQUksU0FBUztBQUdiLFlBQUksU0FBUztBQUdiLFlBQUksT0FBTztBQUdYLFlBQUksT0FBTyxXQUFXLFVBQVU7QUFHOUIsbUJBQVM7QUFHVCxpQkFBTztBQUFBLFFBQ1QsV0FBVyxrQkFBa0IsaUJBQWlCO0FBUzVDLG1CQUFTLE9BQU8sU0FBUztBQUd6QixpQkFBTztBQUFBLFFBQ1QsV0FBVyxjQUFjLE1BQU0sR0FBRztBQUloQyxtQkFBUyxJQUFJLFdBQVcsT0FBTyxNQUFNLENBQUM7QUFBQSxRQUN4QyxXQUFXLFlBQVksT0FBTyxNQUFNLEdBQUc7QUFJckMsbUJBQVMsSUFBSSxXQUFXLE9BQU8sT0FBTyxNQUFNLE9BQU8sWUFBWSxPQUFPLGFBQWEsT0FBTyxVQUFVLENBQUM7QUFBQSxRQUN2RyxXQUFXLEtBQUssZUFBZSxNQUFNLEdBQUc7QUFDdEMsZ0JBQU0sV0FBVyx3QkFBd0IsR0FBRyxPQUFPLElBQUksQ0FBQyxHQUFHLFNBQVMsSUFBSSxHQUFHLENBQUM7QUFDNUUsZ0JBQU0sU0FBUyxLQUFLLFFBQVE7QUFBQTtBQUc1QixnQkFBTSxTQUFTLENBQUMsUUFDZCxJQUFJLFFBQVEsT0FBTyxLQUFLLEVBQUUsUUFBUSxPQUFPLEtBQUssRUFBRSxRQUFRLE1BQU0sS0FBSztBQUNyRSxnQkFBTSxxQkFBcUIsQ0FBQyxVQUFVLE1BQU0sUUFBUSxhQUFhLE1BQU07QUFRdkUsZ0JBQU0sWUFBWSxDQUFDO0FBQ25CLGdCQUFNLEtBQUssSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbEMsbUJBQVM7QUFDVCxjQUFJLHNCQUFzQjtBQUUxQixxQkFBVyxDQUFDLE1BQU0sS0FBSyxLQUFLLFFBQVE7QUFDbEMsZ0JBQUksT0FBTyxVQUFVLFVBQVU7QUFDN0Isb0JBQU1DLFNBQVEsWUFBWSxPQUFPLFNBQy9CLFdBQVcsT0FBTyxtQkFBbUIsSUFBSSxDQUFDLENBQUM7QUFBQTtBQUFBLEVBQ2hDLG1CQUFtQixLQUFLLENBQUM7QUFBQSxDQUFNO0FBQzVDLHdCQUFVLEtBQUtBLE1BQUs7QUFDcEIsd0JBQVVBLE9BQU07QUFBQSxZQUNsQixPQUFPO0FBQ0wsb0JBQU1BLFNBQVEsWUFBWSxPQUFPLEdBQUcsTUFBTSxXQUFXLE9BQU8sbUJBQW1CLElBQUksQ0FBQyxDQUFDLE9BQ2xGLE1BQU0sT0FBTyxlQUFlLE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxNQUFNO0FBQUEsZ0JBRXpELE1BQU0sUUFBUSwwQkFDaEI7QUFBQTtBQUFBLENBQVU7QUFDWix3QkFBVSxLQUFLQSxRQUFPLE9BQU8sRUFBRTtBQUMvQixrQkFBSSxPQUFPLE1BQU0sU0FBUyxVQUFVO0FBQ2xDLDBCQUFVQSxPQUFNLGFBQWEsTUFBTSxPQUFPLEdBQUc7QUFBQSxjQUMvQyxPQUFPO0FBQ0wsc0NBQXNCO0FBQUEsY0FDeEI7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUtBLGdCQUFNLFFBQVEsWUFBWSxPQUFPLEtBQUssUUFBUTtBQUFBLENBQVE7QUFDdEQsb0JBQVUsS0FBSyxLQUFLO0FBQ3BCLG9CQUFVLE1BQU07QUFDaEIsY0FBSSxxQkFBcUI7QUFDdkIscUJBQVM7QUFBQSxVQUNYO0FBR0EsbUJBQVM7QUFFVCxtQkFBUyxXQUFvQjtBQUFBO0FBQzNCLHlCQUFXLFFBQVEsV0FBVztBQUM1QixvQkFBSSxLQUFLLFFBQVE7QUFDZixxQ0FBUSxLQUFLLE9BQU87QUFBQSxnQkFDdEIsT0FBTztBQUNMLHdCQUFNO0FBQUEsZ0JBQ1I7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBO0FBS0EsaUJBQU8saUNBQWlDLFFBQVE7QUFBQSxRQUNsRCxXQUFXLFdBQVcsTUFBTSxHQUFHO0FBSTdCLG1CQUFTO0FBR1QsbUJBQVMsT0FBTztBQUloQixjQUFJLE9BQU8sTUFBTTtBQUNmLG1CQUFPLE9BQU87QUFBQSxVQUNoQjtBQUFBLFFBQ0YsV0FBVyxPQUFPLE9BQU8sT0FBTyxhQUFhLE1BQU0sWUFBWTtBQUU3RCxjQUFJLFdBQVc7QUFDYixrQkFBTSxJQUFJLFVBQVUsV0FBVztBQUFBLFVBQ2pDO0FBR0EsY0FBSSxLQUFLLFlBQVksTUFBTSxLQUFLLE9BQU8sUUFBUTtBQUM3QyxrQkFBTSxJQUFJO0FBQUEsY0FDUjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsbUJBQ0Usa0JBQWtCLGlCQUFpQixTQUFTLG1CQUFtQixNQUFNO0FBQUEsUUFDekU7QUFJQSxZQUFJLE9BQU8sV0FBVyxZQUFZLEtBQUssU0FBUyxNQUFNLEdBQUc7QUFDdkQsbUJBQVMsT0FBTyxXQUFXLE1BQU07QUFBQSxRQUNuQztBQUdBLFlBQUksVUFBVSxNQUFNO0FBck90QjtBQXVPSSxjQUFJO0FBQ0osbUJBQVMsSUFBSSxlQUFlO0FBQUEsWUFDcEIsUUFBUztBQUFBO0FBQ2IsMkJBQVcsT0FBTyxNQUFNLEVBQUUsT0FBTyxhQUFhLEVBQUU7QUFBQSxjQUNsRDtBQUFBO0FBQUEsWUFDTSxLQUFNLFlBQVk7QUFBQTtBQUN0QixzQkFBTSxFQUFFLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxLQUFLO0FBQzVDLG9CQUFJLE1BQU07QUFFUixpQ0FBZSxNQUFNO0FBaFAvQjtBQWlQWSwrQkFBVyxNQUFNO0FBQ2pCLHFDQUFXLGdCQUFYLG1CQUF3QixRQUFRO0FBQUEsa0JBQ2xDLENBQUM7QUFBQSxnQkFDSCxPQUFPO0FBSUwsc0JBQUksQ0FBQyxVQUFVLE1BQU0sR0FBRztBQUN0QiwwQkFBTSxTQUFTLElBQUksV0FBVyxLQUFLO0FBQ25DLHdCQUFJLE9BQU8sWUFBWTtBQUNyQixpQ0FBVyxRQUFRLE1BQU07QUFBQSxvQkFDM0I7QUFBQSxrQkFDRjtBQUFBLGdCQUNGO0FBQ0EsdUJBQU8sV0FBVyxjQUFjO0FBQUEsY0FDbEM7QUFBQTtBQUFBLFlBQ00sT0FBUSxRQUFRO0FBQUE7QUFDcEIsc0JBQU0sU0FBUyxPQUFPO0FBQUEsY0FDeEI7QUFBQTtBQUFBLFlBQ0EsTUFBTTtBQUFBLFVBQ1IsQ0FBQztBQUFBLFFBQ0g7QUFJQSxjQUFNLE9BQU8sRUFBRSxRQUFRLFFBQVEsT0FBTztBQUd0QyxlQUFPLENBQUMsTUFBTSxJQUFJO0FBQUEsTUFDcEI7QUFHQSxlQUFTLGtCQUFtQixRQUFRLFlBQVksT0FBTztBQUtyRCxZQUFJLGtCQUFrQixnQkFBZ0I7QUFHcEMsaUJBQU8sQ0FBQyxLQUFLLFlBQVksTUFBTSxHQUFHLHFDQUFxQztBQUV2RSxpQkFBTyxDQUFDLE9BQU8sUUFBUSx1QkFBdUI7QUFBQSxRQUNoRDtBQUdBLGVBQU8sWUFBWSxRQUFRLFNBQVM7QUFBQSxNQUN0QztBQUVBLGVBQVMsVUFBVyxVQUFVLE1BQU07QUFNbEMsY0FBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLEtBQUssT0FBTyxJQUFJO0FBR3JDLGFBQUssU0FBUztBQUdkLGVBQU87QUFBQSxVQUNMLFFBQVE7QUFBQSxVQUNSLFFBQVEsS0FBSztBQUFBLFVBQ2IsUUFBUSxLQUFLO0FBQUEsUUFDZjtBQUFBLE1BQ0Y7QUFFQSxlQUFTLGVBQWdCLE9BQU87QUFDOUIsWUFBSSxNQUFNLFNBQVM7QUFDakIsZ0JBQU0sSUFBSSxhQUFhLDhCQUE4QixZQUFZO0FBQUEsUUFDbkU7QUFBQSxNQUNGO0FBRUEsZUFBUyxpQkFBa0IsVUFBVTtBQUNuQyxjQUFNLFVBQVU7QUFBQSxVQUNkLE9BQVE7QUFNTixtQkFBTyxZQUFZLE1BQU0sQ0FBQyxVQUFVO0FBQ2xDLGtCQUFJLFdBQVcsYUFBYSxJQUFJO0FBRWhDLGtCQUFJLGFBQWEsTUFBTTtBQUNyQiwyQkFBVztBQUFBLGNBQ2IsV0FBVyxVQUFVO0FBQ25CLDJCQUFXLG1CQUFtQixRQUFRO0FBQUEsY0FDeEM7QUFJQSxxQkFBTyxJQUFJRixNQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFBQSxZQUM3QyxHQUFHLFFBQVE7QUFBQSxVQUNiO0FBQUEsVUFFQSxjQUFlO0FBS2IsbUJBQU8sWUFBWSxNQUFNLENBQUMsVUFBVTtBQUNsQyxxQkFBTyxJQUFJLFdBQVcsS0FBSyxFQUFFO0FBQUEsWUFDL0IsR0FBRyxRQUFRO0FBQUEsVUFDYjtBQUFBLFVBRUEsT0FBUTtBQUdOLG1CQUFPLFlBQVksTUFBTSxpQkFBaUIsUUFBUTtBQUFBLFVBQ3BEO0FBQUEsVUFFQSxPQUFRO0FBR04sbUJBQU8sWUFBWSxNQUFNLG9CQUFvQixRQUFRO0FBQUEsVUFDdkQ7QUFBQSxVQUVBLFdBQVk7QUFHVixtQkFBTyxZQUFZLE1BQU0sQ0FBQyxVQUFVO0FBRWxDLG9CQUFNLFdBQVcsYUFBYSxJQUFJO0FBSWxDLGtCQUFJLGFBQWEsTUFBTTtBQUNyQix3QkFBUSxTQUFTLFNBQVM7QUFBQSxrQkFDeEIsS0FBSyx1QkFBdUI7QUFFMUIsMEJBQU0sU0FBUyx3QkFBd0IsT0FBTyxRQUFRO0FBR3RELHdCQUFJLFdBQVcsV0FBVztBQUN4Qiw0QkFBTSxJQUFJLFVBQVUsbUNBQW1DO0FBQUEsb0JBQ3pEO0FBSUEsMEJBQU0sS0FBSyxJQUFJLFNBQVM7QUFDeEIsdUJBQUcsTUFBTSxJQUFJO0FBRWIsMkJBQU87QUFBQSxrQkFDVDtBQUFBLGtCQUNBLEtBQUsscUNBQXFDO0FBRXhDLDBCQUFNLFVBQVUsSUFBSSxnQkFBZ0IsTUFBTSxTQUFTLENBQUM7QUFLcEQsMEJBQU0sS0FBSyxJQUFJLFNBQVM7QUFFeEIsK0JBQVcsQ0FBQyxNQUFNRyxNQUFLLEtBQUssU0FBUztBQUNuQyx5QkFBRyxPQUFPLE1BQU1BLE1BQUs7QUFBQSxvQkFDdkI7QUFFQSwyQkFBTztBQUFBLGtCQUNUO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGO0FBR0Esb0JBQU0sSUFBSTtBQUFBLGdCQUNSO0FBQUEsY0FDRjtBQUFBLFlBQ0YsR0FBRyxRQUFRO0FBQUEsVUFDYjtBQUFBLFVBRUEsUUFBUztBQUlQLG1CQUFPLFlBQVksTUFBTSxDQUFDLFVBQVU7QUFDbEMscUJBQU8sSUFBSSxXQUFXLEtBQUs7QUFBQSxZQUM3QixHQUFHLFFBQVE7QUFBQSxVQUNiO0FBQUEsUUFDRjtBQUVBLGVBQU87QUFBQSxNQUNUO0FBRUEsZUFBUyxVQUFXLFdBQVc7QUFDN0IsZUFBTyxPQUFPLFVBQVUsV0FBVyxpQkFBaUIsU0FBUyxDQUFDO0FBQUEsTUFDaEU7QUFRQSxlQUFlLFlBQWEsUUFBUSx1QkFBdUIsVUFBVTtBQUFBO0FBQ25FLGlCQUFPLFdBQVcsUUFBUSxRQUFRO0FBSWxDLGNBQUksYUFBYSxNQUFNLEdBQUc7QUFDeEIsa0JBQU0sSUFBSSxVQUFVLDhDQUE4QztBQUFBLFVBQ3BFO0FBRUEseUJBQWUsT0FBTyxNQUFNLENBQUM7QUFHN0IsZ0JBQU0sVUFBVSxzQkFBc0I7QUFHdEMsZ0JBQU0sYUFBYSxDQUFDLFVBQVUsUUFBUSxPQUFPLEtBQUs7QUFNbEQsZ0JBQU0sZUFBZSxDQUFDLFNBQVM7QUFDN0IsZ0JBQUk7QUFDRixzQkFBUSxRQUFRLHNCQUFzQixJQUFJLENBQUM7QUFBQSxZQUM3QyxTQUFTLEdBQUc7QUFDVix5QkFBVyxDQUFDO0FBQUEsWUFDZDtBQUFBLFVBQ0Y7QUFJQSxjQUFJLE9BQU8sTUFBTSxFQUFFLFFBQVEsTUFBTTtBQUMvQix5QkFBYSxPQUFPLFlBQVksQ0FBQyxDQUFDO0FBQ2xDLG1CQUFPLFFBQVE7QUFBQSxVQUNqQjtBQUlBLGdCQUFNLGNBQWMsT0FBTyxNQUFNLEVBQUUsTUFBTSxjQUFjLFVBQVU7QUFHakUsaUJBQU8sUUFBUTtBQUFBLFFBQ2pCO0FBQUE7QUFHQSxlQUFTLGFBQWMsUUFBUTtBQUM3QixjQUFNLE9BQU8sT0FBTyxNQUFNLEVBQUU7QUFLNUIsZUFBTyxRQUFRLFNBQVMsS0FBSyxPQUFPLFVBQVUsS0FBSyxZQUFZLEtBQUssTUFBTTtBQUFBLE1BQzVFO0FBTUEsZUFBUyxtQkFBb0IsT0FBTztBQUNsQyxlQUFPLEtBQUssTUFBTSxnQkFBZ0IsS0FBSyxDQUFDO0FBQUEsTUFDMUM7QUFNQSxlQUFTLGFBQWMsbUJBQW1CO0FBS3hDLGNBQU0sVUFBVSxrQkFBa0IsTUFBTSxFQUFFO0FBRzFDLGNBQU0sV0FBVyxnQkFBZ0IsT0FBTztBQUd4QyxZQUFJLGFBQWEsV0FBVztBQUMxQixpQkFBTztBQUFBLFFBQ1Q7QUFHQSxlQUFPO0FBQUEsTUFDVDtBQUVBLGFBQU8sVUFBVTtBQUFBLFFBQ2Y7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUE7QUFBQTs7O0FDaGhCQTtBQUFBO0FBQUE7QUFJQSxVQUFNLFNBQVMsVUFBUSxRQUFhO0FBQ3BDLFVBQU0sT0FBTztBQUNiLFVBQU0sRUFBRSxTQUFTLElBQUk7QUFDckIsVUFBTSxTQUFTO0FBQ2YsVUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRixJQUFJO0FBQ0osVUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLElBQUk7QUFFSixVQUFNQyxhQUFZO0FBQ2xCLFVBQU0sWUFBWSxPQUFPLE1BQU0sQ0FBQztBQUNoQyxVQUFNLGFBQWEsT0FBTyxPQUFPLE9BQU87QUFDeEMsVUFBTSxjQUFjLEtBQUs7QUFDekIsVUFBTSxxQkFBcUIsS0FBSztBQUNoQyxVQUFNLHdCQUF3QixPQUFPLHVCQUF1QjtBQUM1RCxVQUFNLCtCQUErQixPQUFPLDhCQUE4QjtBQUMxRSxVQUFNLGNBQWMsT0FBTyxhQUFhO0FBRXhDLFVBQUk7QUFFSixlQUFlLGFBQWM7QUFBQTtBQUMzQixnQkFBTSxpQkFBaUIsUUFBUSxJQUFJLGlCQUFpQix3QkFBc0M7QUFFMUYsY0FBSTtBQUNKLGNBQUk7QUFDRixrQkFBTSxNQUFNLFlBQVksUUFBUSwwQkFBd0M7QUFBQSxVQUMxRSxTQUFTLEdBQUc7QUFPVixrQkFBTSxNQUFNLFlBQVksUUFBUSxrQkFBa0IscUJBQW1DO0FBQUEsVUFDdkY7QUFFQSxpQkFBTyxNQUFNLFlBQVksWUFBWSxLQUFLO0FBQUEsWUFDeEMsS0FBSztBQUFBO0FBQUEsY0FHSCxhQUFhLENBQUMsR0FBR0MsS0FBSSxRQUFRO0FBRTNCLHVCQUFPO0FBQUEsY0FDVDtBQUFBLGNBQ0EsZ0JBQWdCLENBQUMsR0FBR0EsS0FBSSxRQUFRO0FBQzlCLHVCQUFPLGNBQWMsUUFBUSxDQUFDO0FBQzlCLHNCQUFNLFFBQVFBLE1BQUssbUJBQW1CLGlCQUFpQjtBQUN2RCx1QkFBTyxjQUFjLFNBQVMsSUFBSSxXQUFXLGlCQUFpQixRQUFRLE9BQU8sR0FBRyxDQUFDLEtBQUs7QUFBQSxjQUN4RjtBQUFBLGNBQ0EsdUJBQXVCLENBQUMsTUFBTTtBQUM1Qix1QkFBTyxjQUFjLFFBQVEsQ0FBQztBQUM5Qix1QkFBTyxjQUFjLGVBQWUsS0FBSztBQUFBLGNBQzNDO0FBQUEsY0FDQSxzQkFBc0IsQ0FBQyxHQUFHQSxLQUFJLFFBQVE7QUFDcEMsdUJBQU8sY0FBYyxRQUFRLENBQUM7QUFDOUIsc0JBQU0sUUFBUUEsTUFBSyxtQkFBbUIsaUJBQWlCO0FBQ3ZELHVCQUFPLGNBQWMsY0FBYyxJQUFJLFdBQVcsaUJBQWlCLFFBQVEsT0FBTyxHQUFHLENBQUMsS0FBSztBQUFBLGNBQzdGO0FBQUEsY0FDQSxzQkFBc0IsQ0FBQyxHQUFHQSxLQUFJLFFBQVE7QUFDcEMsdUJBQU8sY0FBYyxRQUFRLENBQUM7QUFDOUIsc0JBQU0sUUFBUUEsTUFBSyxtQkFBbUIsaUJBQWlCO0FBQ3ZELHVCQUFPLGNBQWMsY0FBYyxJQUFJLFdBQVcsaUJBQWlCLFFBQVEsT0FBTyxHQUFHLENBQUMsS0FBSztBQUFBLGNBQzdGO0FBQUEsY0FDQSwwQkFBMEIsQ0FBQyxHQUFHLFlBQVksU0FBUyxvQkFBb0I7QUFDckUsdUJBQU8sY0FBYyxRQUFRLENBQUM7QUFDOUIsdUJBQU8sY0FBYyxrQkFBa0IsWUFBWSxRQUFRLE9BQU8sR0FBRyxRQUFRLGVBQWUsQ0FBQyxLQUFLO0FBQUEsY0FDcEc7QUFBQSxjQUNBLGNBQWMsQ0FBQyxHQUFHQSxLQUFJLFFBQVE7QUFDNUIsdUJBQU8sY0FBYyxRQUFRLENBQUM7QUFDOUIsc0JBQU0sUUFBUUEsTUFBSyxtQkFBbUIsaUJBQWlCO0FBQ3ZELHVCQUFPLGNBQWMsT0FBTyxJQUFJLFdBQVcsaUJBQWlCLFFBQVEsT0FBTyxHQUFHLENBQUMsS0FBSztBQUFBLGNBQ3RGO0FBQUEsY0FDQSwwQkFBMEIsQ0FBQyxNQUFNO0FBQy9CLHVCQUFPLGNBQWMsUUFBUSxDQUFDO0FBQzlCLHVCQUFPLGNBQWMsa0JBQWtCLEtBQUs7QUFBQSxjQUM5QztBQUFBO0FBQUEsWUFHRjtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQTtBQUVBLFVBQUksaUJBQWlCO0FBQ3JCLFVBQUksZ0JBQWdCLFdBQVc7QUFDL0Isb0JBQWMsTUFBTTtBQUVwQixVQUFJLGdCQUFnQjtBQUNwQixVQUFJLG1CQUFtQjtBQUN2QixVQUFJLG9CQUFvQjtBQUN4QixVQUFJLG1CQUFtQjtBQUV2QixVQUFNLG1CQUFtQjtBQUN6QixVQUFNLGlCQUFpQjtBQUl2QixVQUFNLGtCQUFrQixJQUFJO0FBQzVCLFVBQU0sZUFBZSxJQUFJO0FBSXpCLFVBQU0scUJBQXFCLElBQUk7QUFFL0IsVUFBTSxTQUFOLE1BQWE7QUFBQSxRQUNYLFlBQWEsUUFBUSxRQUFRLEVBQUUsU0FBQUMsU0FBUSxHQUFHO0FBQ3hDLGlCQUFPLE9BQU8sU0FBUyxPQUFPLGVBQWUsQ0FBQyxLQUFLLE9BQU8sZUFBZSxJQUFJLENBQUM7QUFFOUUsZUFBSyxTQUFTQTtBQUNkLGVBQUssTUFBTSxLQUFLLE9BQU8sYUFBYUYsV0FBVSxLQUFLLFFBQVE7QUFDM0QsZUFBSyxTQUFTO0FBQ2QsZUFBSyxTQUFTO0FBQ2QsZUFBSyxVQUFVO0FBQ2YsZUFBSyxlQUFlO0FBQ3BCLGVBQUssY0FBYztBQUNuQixlQUFLLGFBQWE7QUFDbEIsZUFBSyxhQUFhO0FBQ2xCLGVBQUssVUFBVTtBQUNmLGVBQUssVUFBVSxDQUFDO0FBQ2hCLGVBQUssY0FBYztBQUNuQixlQUFLLGlCQUFpQixPQUFPLGVBQWU7QUFDNUMsZUFBSyxrQkFBa0I7QUFDdkIsZUFBSyxTQUFTO0FBQ2QsZUFBSyxTQUFTLEtBQUssT0FBTyxLQUFLLElBQUk7QUFFbkMsZUFBSyxZQUFZO0FBRWpCLGVBQUssWUFBWTtBQUNqQixlQUFLLGdCQUFnQjtBQUNyQixlQUFLLGFBQWE7QUFDbEIsZUFBSyxrQkFBa0IsT0FBTyxnQkFBZ0I7QUFBQSxRQUNoRDtBQUFBLFFBRUEsV0FBWSxPQUFPLE1BQU07QUFJdkIsY0FDRSxVQUFVLEtBQUssZ0JBQ2QsT0FBTyxpQkFBbUIsS0FBSyxjQUFjLGdCQUM5QztBQUdBLGdCQUFJLEtBQUssU0FBUztBQUNoQixxQkFBTyxhQUFhLEtBQUssT0FBTztBQUNoQyxtQkFBSyxVQUFVO0FBQUEsWUFDakI7QUFFQSxnQkFBSSxPQUFPO0FBQ1Qsa0JBQUksT0FBTyxnQkFBZ0I7QUFDekIscUJBQUssVUFBVSxPQUFPLGVBQWUsaUJBQWlCLE9BQU8sSUFBSSxRQUFRLElBQUksQ0FBQztBQUFBLGNBQ2hGLE9BQU87QUFDTCxxQkFBSyxVQUFVLFdBQVcsaUJBQWlCLE9BQU8sSUFBSSxRQUFRLElBQUksQ0FBQztBQUNuRSxxQkFBSyxRQUFRLE1BQU07QUFBQSxjQUNyQjtBQUFBLFlBQ0Y7QUFFQSxpQkFBSyxlQUFlO0FBQUEsVUFDdEIsV0FBVyxLQUFLLFNBQVM7QUFFdkIsZ0JBQUksS0FBSyxRQUFRLFNBQVM7QUFDeEIsbUJBQUssUUFBUSxRQUFRO0FBQUEsWUFDdkI7QUFBQSxVQUNGO0FBRUEsZUFBSyxjQUFjO0FBQUEsUUFDckI7QUFBQSxRQUVBLFNBQVU7QUFDUixjQUFJLEtBQUssT0FBTyxhQUFhLENBQUMsS0FBSyxRQUFRO0FBQ3pDO0FBQUEsVUFDRjtBQUVBLGlCQUFPLEtBQUssT0FBTyxJQUFJO0FBQ3ZCLGlCQUFPLGlCQUFpQixJQUFJO0FBRTVCLGVBQUssT0FBTyxjQUFjLEtBQUssR0FBRztBQUVsQyxpQkFBTyxLQUFLLGdCQUFnQixZQUFZO0FBQ3hDLGNBQUksS0FBSyxTQUFTO0FBRWhCLGdCQUFJLEtBQUssUUFBUSxTQUFTO0FBQ3hCLG1CQUFLLFFBQVEsUUFBUTtBQUFBLFlBQ3ZCO0FBQUEsVUFDRjtBQUVBLGVBQUssU0FBUztBQUNkLGVBQUssUUFBUSxLQUFLLE9BQU8sS0FBSyxLQUFLLFNBQVM7QUFDNUMsZUFBSyxTQUFTO0FBQUEsUUFDaEI7QUFBQSxRQUVBLFdBQVk7QUFDVixpQkFBTyxDQUFDLEtBQUssVUFBVSxLQUFLLEtBQUs7QUFDL0Isa0JBQU0sUUFBUSxLQUFLLE9BQU8sS0FBSztBQUMvQixnQkFBSSxVQUFVLE1BQU07QUFDbEI7QUFBQSxZQUNGO0FBQ0EsaUJBQUssUUFBUSxLQUFLO0FBQUEsVUFDcEI7QUFBQSxRQUNGO0FBQUEsUUFFQSxRQUFTLE1BQU07QUFDYixpQkFBTyxLQUFLLE9BQU8sSUFBSTtBQUN2QixpQkFBTyxpQkFBaUIsSUFBSTtBQUM1QixpQkFBTyxDQUFDLEtBQUssTUFBTTtBQUVuQixnQkFBTSxFQUFFLFFBQVEsT0FBTyxJQUFJO0FBRTNCLGNBQUksS0FBSyxTQUFTLG1CQUFtQjtBQUNuQyxnQkFBSSxrQkFBa0I7QUFDcEIscUJBQU8sS0FBSyxnQkFBZ0I7QUFBQSxZQUM5QjtBQUNBLGdDQUFvQixLQUFLLEtBQUssS0FBSyxTQUFTLElBQUksSUFBSTtBQUNwRCwrQkFBbUIsT0FBTyxPQUFPLGlCQUFpQjtBQUFBLFVBQ3BEO0FBRUEsY0FBSSxXQUFXLE9BQU8sT0FBTyxRQUFRLGtCQUFrQixpQkFBaUIsRUFBRSxJQUFJLElBQUk7QUFNbEYsY0FBSTtBQUNGLGdCQUFJO0FBRUosZ0JBQUk7QUFDRixpQ0FBbUI7QUFDbkIsOEJBQWdCO0FBQ2hCLG9CQUFNLE9BQU8sZUFBZSxLQUFLLEtBQUssa0JBQWtCLEtBQUssTUFBTTtBQUFBLFlBRXJFLFNBQVMsS0FBSztBQUVaLG9CQUFNO0FBQUEsWUFDUixVQUFFO0FBQ0EsOEJBQWdCO0FBQ2hCLGlDQUFtQjtBQUFBLFlBQ3JCO0FBRUEsa0JBQU0sU0FBUyxPQUFPLHFCQUFxQixLQUFLLEdBQUcsSUFBSTtBQUV2RCxnQkFBSSxRQUFRQSxXQUFVLE1BQU0sSUFBSTtBQUM5QixvQkFBTSxPQUFPLEtBQUssU0FBUyxNQUFNO0FBRWpDLGtCQUFJLFFBQVFBLFdBQVUsTUFBTSxnQkFBZ0I7QUFDMUMscUJBQUssVUFBVSxJQUFJO0FBQUEsY0FDckIsV0FBVyxRQUFRQSxXQUFVLE1BQU0sUUFBUTtBQUN6QyxxQkFBSyxTQUFTO0FBQ2QsdUJBQU8sUUFBUSxJQUFJO0FBQUEsY0FDckIsT0FBTztBQUNMLHNCQUFNLEtBQUssWUFBWSxLQUFLLElBQUk7QUFBQSxjQUNsQztBQUFBLFlBQ0Y7QUFBQSxVQUNGLFNBQVMsS0FBSztBQUNaLGlCQUFLLFFBQVEsUUFBUSxHQUFHO0FBQUEsVUFDMUI7QUFBQSxRQUNGO0FBQUEsUUFFQSxTQUFVO0FBQ1IsaUJBQU8sa0JBQWtCLElBQUk7QUFDN0IsaUJBQU8sS0FBSyxPQUFPLElBQUk7QUFDdkIsaUJBQU8sQ0FBQyxLQUFLLE1BQU07QUFFbkIsZ0JBQU0sRUFBRSxPQUFPLElBQUk7QUFFbkIsY0FBSTtBQUVKLGNBQUk7QUFDRiw0QkFBZ0I7QUFDaEIsa0JBQU0sT0FBTyxjQUFjLEtBQUssR0FBRztBQUFBLFVBQ3JDLFVBQUU7QUFDQSw0QkFBZ0I7QUFBQSxVQUNsQjtBQUVBLGNBQUksUUFBUUEsV0FBVSxNQUFNLElBQUk7QUFDOUIsbUJBQU87QUFBQSxVQUNUO0FBRUEsY0FBSSxRQUFRQSxXQUFVLE1BQU0sVUFBVSxRQUFRQSxXQUFVLE1BQU0sZ0JBQWdCO0FBQzVFLGlCQUFLLFNBQVM7QUFDZCxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxpQkFBTyxLQUFLLFlBQVksS0FBSyxTQUFTO0FBQUEsUUFDeEM7QUFBQSxRQUVBLFlBQWEsS0FBSyxNQUFNO0FBQ3RCLGdCQUFNLEVBQUUsUUFBUSxlQUFlLFVBQVUsSUFBSTtBQUU3QyxjQUFJLGlCQUFpQixjQUFjLFNBQVMsZUFBZSxFQUFFLEdBQUc7QUFDOUQsbUJBQU8sSUFBSSxtQ0FBbUM7QUFBQSxVQUNoRDtBQUVBLGdCQUFNLE1BQU0sT0FBTyx3QkFBd0IsS0FBSyxHQUFHO0FBQ25ELGNBQUksVUFBVTtBQUNkLGNBQUksS0FBSztBQUNQLGtCQUFNLE1BQU0sSUFBSSxXQUFXLE9BQU8sT0FBTyxRQUFRLEdBQUcsRUFBRSxRQUFRLENBQUM7QUFDL0Qsc0JBQ0Usb0RBQ0EsT0FBTyxLQUFLLE9BQU8sT0FBTyxRQUFRLEtBQUssR0FBRyxFQUFFLFNBQVMsSUFDckQ7QUFBQSxVQUNKO0FBRUEsaUJBQU8sSUFBSSxnQkFBZ0IsU0FBU0EsV0FBVSxNQUFNLEdBQUcsR0FBRyxJQUFJO0FBQUEsUUFDaEU7QUFBQSxRQUVBLFVBQVc7QUFDVCxpQkFBTyxLQUFLLE9BQU8sSUFBSTtBQUN2QixpQkFBTyxpQkFBaUIsSUFBSTtBQUU1QixlQUFLLE9BQU8sWUFBWSxLQUFLLEdBQUc7QUFDaEMsZUFBSyxNQUFNO0FBRVgsZUFBSyxXQUFXLE9BQU8sYUFBYSxLQUFLLE9BQU87QUFDaEQsZUFBSyxVQUFVO0FBQ2YsZUFBSyxlQUFlO0FBQ3BCLGVBQUssY0FBYztBQUVuQixlQUFLLFNBQVM7QUFBQSxRQUNoQjtBQUFBLFFBRUEsU0FBVSxLQUFLO0FBQ2IsZUFBSyxhQUFhLElBQUksU0FBUztBQUFBLFFBQ2pDO0FBQUEsUUFFQSxpQkFBa0I7QUFDaEIsZ0JBQU0sRUFBRSxRQUFRLE9BQU8sSUFBSTtBQUczQixjQUFJLE9BQU8sV0FBVztBQUNwQixtQkFBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJLE9BQU8sUUFBUSxNQUFNLEdBQUc7QUFDMUIsaUJBQUssUUFBUSxRQUFRLElBQUksWUFBWSxnQkFBZ0IsS0FBSyxjQUFjLE1BQU0sQ0FBQyxDQUFDO0FBQ2hGLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGdCQUFNLFVBQVUsT0FBTyxNQUFNLEVBQUUsT0FBTyxXQUFXLENBQUM7QUFDbEQsY0FBSSxDQUFDLFNBQVM7QUFDWixtQkFBTztBQUFBLFVBQ1Q7QUFDQSxrQkFBUSxrQkFBa0I7QUFBQSxRQUM1QjtBQUFBLFFBRUEsY0FBZSxLQUFLO0FBQ2xCLGdCQUFNLE1BQU0sS0FBSyxRQUFRO0FBRXpCLGVBQUssTUFBTSxPQUFPLEdBQUc7QUFDbkIsaUJBQUssUUFBUSxLQUFLLEdBQUc7QUFBQSxVQUN2QixPQUFPO0FBQ0wsaUJBQUssUUFBUSxNQUFNLENBQUMsSUFBSSxPQUFPLE9BQU8sQ0FBQyxLQUFLLFFBQVEsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQUEsVUFDcEU7QUFFQSxlQUFLLFlBQVksSUFBSSxNQUFNO0FBQUEsUUFDN0I7QUFBQSxRQUVBLGNBQWUsS0FBSztBQUNsQixjQUFJLE1BQU0sS0FBSyxRQUFRO0FBRXZCLGVBQUssTUFBTSxPQUFPLEdBQUc7QUFDbkIsaUJBQUssUUFBUSxLQUFLLEdBQUc7QUFDckIsbUJBQU87QUFBQSxVQUNULE9BQU87QUFDTCxpQkFBSyxRQUFRLE1BQU0sQ0FBQyxJQUFJLE9BQU8sT0FBTyxDQUFDLEtBQUssUUFBUSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxVQUNwRTtBQUVBLGdCQUFNLE1BQU0sS0FBSyxRQUFRLE1BQU0sQ0FBQztBQUNoQyxjQUFJLElBQUksV0FBVyxJQUFJO0FBQ3JCLGtCQUFNLGFBQWEsS0FBSyw2QkFBNkIsR0FBRztBQUN4RCxnQkFBSSxlQUFlLGNBQWM7QUFDL0IsbUJBQUssYUFBYSxJQUFJLFNBQVM7QUFBQSxZQUNqQyxXQUFXLGVBQWUsY0FBYztBQUN0QyxtQkFBSyxjQUFjLElBQUksU0FBUztBQUFBLFlBQ2xDO0FBQUEsVUFDRixXQUFXLElBQUksV0FBVyxNQUFNLEtBQUssNkJBQTZCLEdBQUcsTUFBTSxrQkFBa0I7QUFDM0YsaUJBQUssaUJBQWlCLElBQUksU0FBUztBQUFBLFVBQ3JDO0FBRUEsZUFBSyxZQUFZLElBQUksTUFBTTtBQUFBLFFBQzdCO0FBQUEsUUFFQSxZQUFhLEtBQUs7QUFDaEIsZUFBSyxlQUFlO0FBQ3BCLGNBQUksS0FBSyxlQUFlLEtBQUssZ0JBQWdCO0FBQzNDLGlCQUFLLFFBQVEsS0FBSyxRQUFRLElBQUkscUJBQXFCLENBQUM7QUFBQSxVQUN0RDtBQUFBLFFBQ0Y7QUFBQSxRQUVBLFVBQVcsTUFBTTtBQUNmLGdCQUFNLEVBQUUsU0FBUyxRQUFRLFFBQVEsU0FBUyxXQUFXLElBQUk7QUFFekQsaUJBQU8sT0FBTztBQUNkLGlCQUFPLE9BQU8sT0FBTyxNQUFNLE1BQU07QUFDakMsaUJBQU8sQ0FBQyxPQUFPLFNBQVM7QUFDeEIsaUJBQU8sQ0FBQyxLQUFLLE1BQU07QUFDbkIsa0JBQVEsUUFBUSxTQUFTLE9BQU8sQ0FBQztBQUVqQyxnQkFBTSxVQUFVLE9BQU8sTUFBTSxFQUFFLE9BQU8sV0FBVyxDQUFDO0FBQ2xELGlCQUFPLE9BQU87QUFDZCxpQkFBTyxRQUFRLFdBQVcsUUFBUSxXQUFXLFNBQVM7QUFFdEQsZUFBSyxhQUFhO0FBQ2xCLGVBQUssYUFBYTtBQUNsQixlQUFLLGtCQUFrQjtBQUV2QixlQUFLLFVBQVUsQ0FBQztBQUNoQixlQUFLLGNBQWM7QUFFbkIsaUJBQU8sUUFBUSxJQUFJO0FBRW5CLGlCQUFPLE9BQU8sRUFBRSxRQUFRO0FBQ3hCLGlCQUFPLE9BQU8sSUFBSTtBQUVsQixpQkFBTyxPQUFPLElBQUk7QUFDbEIsaUJBQU8sTUFBTSxJQUFJO0FBRWpCLDZCQUFtQixNQUFNO0FBRXpCLGlCQUFPLE9BQU8sSUFBSTtBQUNsQixpQkFBTyxZQUFZLElBQUk7QUFDdkIsaUJBQU8sTUFBTSxFQUFFLE9BQU8sV0FBVyxHQUFHLElBQUk7QUFDeEMsaUJBQU8sS0FBSyxjQUFjLE9BQU8sSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksbUJBQW1CLFNBQVMsQ0FBQztBQUVuRixjQUFJO0FBQ0Ysb0JBQVEsVUFBVSxZQUFZLFNBQVMsTUFBTTtBQUFBLFVBQy9DLFNBQVMsS0FBSztBQUNaLGlCQUFLLFFBQVEsUUFBUSxHQUFHO0FBQUEsVUFDMUI7QUFFQSxpQkFBTyxPQUFPLEVBQUU7QUFBQSxRQUNsQjtBQUFBLFFBRUEsa0JBQW1CLFlBQVksU0FBUyxpQkFBaUI7QUFDdkQsZ0JBQU0sRUFBRSxRQUFRLFFBQVEsU0FBUyxXQUFXLElBQUk7QUFHaEQsY0FBSSxPQUFPLFdBQVc7QUFDcEIsbUJBQU87QUFBQSxVQUNUO0FBRUEsY0FBSSxPQUFPLFFBQVEsTUFBTSxHQUFHO0FBQzFCLGlCQUFLLFFBQVEsUUFBUSxJQUFJLFlBQVksZ0JBQWdCLEtBQUssY0FBYyxNQUFNLENBQUMsQ0FBQztBQUNoRixtQkFBTztBQUFBLFVBQ1Q7QUFFQSxnQkFBTSxVQUFVLE9BQU8sTUFBTSxFQUFFLE9BQU8sV0FBVyxDQUFDO0FBR2xELGNBQUksQ0FBQyxTQUFTO0FBQ1osbUJBQU87QUFBQSxVQUNUO0FBRUEsaUJBQU8sQ0FBQyxLQUFLLE9BQU87QUFDcEIsaUJBQU8sS0FBSyxhQUFhLEdBQUc7QUFFNUIsY0FBSSxlQUFlLEtBQUs7QUFDdEIsaUJBQUssUUFBUSxRQUFRLElBQUksWUFBWSxnQkFBZ0IsS0FBSyxjQUFjLE1BQU0sQ0FBQyxDQUFDO0FBQ2hGLG1CQUFPO0FBQUEsVUFDVDtBQUdBLGNBQUksV0FBVyxDQUFDLFFBQVEsU0FBUztBQUMvQixpQkFBSyxRQUFRLFFBQVEsSUFBSSxZQUFZLGVBQWUsS0FBSyxjQUFjLE1BQU0sQ0FBQyxDQUFDO0FBQy9FLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGlCQUFPLEtBQUssZ0JBQWdCLGVBQWU7QUFFM0MsZUFBSyxhQUFhO0FBQ2xCLGVBQUssa0JBQ0g7QUFBQSxVQUVDLFFBQVEsV0FBVyxVQUFVLENBQUMsT0FBTyxNQUFNLEtBQUssS0FBSyxXQUFXLFlBQVksTUFBTTtBQUdyRixjQUFJLEtBQUssY0FBYyxLQUFLO0FBQzFCLGtCQUFNLGNBQWMsUUFBUSxlQUFlLE9BQ3ZDLFFBQVEsY0FDUixPQUFPLFlBQVk7QUFDdkIsaUJBQUssV0FBVyxhQUFhLFlBQVk7QUFBQSxVQUMzQyxXQUFXLEtBQUssU0FBUztBQUV2QixnQkFBSSxLQUFLLFFBQVEsU0FBUztBQUN4QixtQkFBSyxRQUFRLFFBQVE7QUFBQSxZQUN2QjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLFFBQVEsV0FBVyxXQUFXO0FBQ2hDLG1CQUFPLE9BQU8sUUFBUSxNQUFNLENBQUM7QUFDN0IsaUJBQUssVUFBVTtBQUNmLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGNBQUksU0FBUztBQUNYLG1CQUFPLE9BQU8sUUFBUSxNQUFNLENBQUM7QUFDN0IsaUJBQUssVUFBVTtBQUNmLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGtCQUFRLEtBQUssUUFBUSxTQUFTLE9BQU8sQ0FBQztBQUN0QyxlQUFLLFVBQVUsQ0FBQztBQUNoQixlQUFLLGNBQWM7QUFFbkIsY0FBSSxLQUFLLG1CQUFtQixPQUFPLFdBQVcsR0FBRztBQUMvQyxrQkFBTSxtQkFBbUIsS0FBSyxZQUFZLEtBQUssc0JBQXNCLEtBQUssU0FBUyxJQUFJO0FBRXZGLGdCQUFJLG9CQUFvQixNQUFNO0FBQzVCLG9CQUFNLFVBQVUsS0FBSztBQUFBLGdCQUNuQixtQkFBbUIsT0FBTywwQkFBMEI7QUFBQSxnQkFDcEQsT0FBTyxvQkFBb0I7QUFBQSxjQUM3QjtBQUNBLGtCQUFJLFdBQVcsR0FBRztBQUNoQix1QkFBTyxNQUFNLElBQUk7QUFBQSxjQUNuQixPQUFPO0FBQ0wsdUJBQU8sc0JBQXNCLElBQUk7QUFBQSxjQUNuQztBQUFBLFlBQ0YsT0FBTztBQUNMLHFCQUFPLHNCQUFzQixJQUFJLE9BQU8sd0JBQXdCO0FBQUEsWUFDbEU7QUFBQSxVQUNGLE9BQU87QUFFTCxtQkFBTyxNQUFNLElBQUk7QUFBQSxVQUNuQjtBQUVBLGdCQUFNLFFBQVEsUUFBUSxVQUFVLFlBQVksU0FBUyxLQUFLLFFBQVEsVUFBVSxNQUFNO0FBRWxGLGNBQUksUUFBUSxTQUFTO0FBQ25CLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGNBQUksUUFBUSxXQUFXLFFBQVE7QUFDN0IsbUJBQU87QUFBQSxVQUNUO0FBRUEsY0FBSSxhQUFhLEtBQUs7QUFDcEIsbUJBQU87QUFBQSxVQUNUO0FBRUEsY0FBSSxPQUFPLFNBQVMsR0FBRztBQUNyQixtQkFBTyxTQUFTLElBQUk7QUFDcEIsbUJBQU8sT0FBTyxFQUFFO0FBQUEsVUFDbEI7QUFFQSxpQkFBTyxRQUFRQSxXQUFVLE1BQU0sU0FBUztBQUFBLFFBQzFDO0FBQUEsUUFFQSxPQUFRLEtBQUs7QUFDWCxnQkFBTSxFQUFFLFFBQVEsUUFBUSxZQUFZLGdCQUFnQixJQUFJO0FBRXhELGNBQUksT0FBTyxXQUFXO0FBQ3BCLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGdCQUFNLFVBQVUsT0FBTyxNQUFNLEVBQUUsT0FBTyxXQUFXLENBQUM7QUFDbEQsaUJBQU8sT0FBTztBQUVkLGlCQUFPLEtBQUssZ0JBQWdCLFlBQVk7QUFDeEMsY0FBSSxLQUFLLFNBQVM7QUFFaEIsZ0JBQUksS0FBSyxRQUFRLFNBQVM7QUFDeEIsbUJBQUssUUFBUSxRQUFRO0FBQUEsWUFDdkI7QUFBQSxVQUNGO0FBRUEsaUJBQU8sY0FBYyxHQUFHO0FBRXhCLGNBQUksa0JBQWtCLE1BQU0sS0FBSyxZQUFZLElBQUksU0FBUyxpQkFBaUI7QUFDekUsaUJBQUssUUFBUSxRQUFRLElBQUksNkJBQTZCLENBQUM7QUFDdkQsbUJBQU87QUFBQSxVQUNUO0FBRUEsZUFBSyxhQUFhLElBQUk7QUFFdEIsY0FBSSxRQUFRLE9BQU8sR0FBRyxNQUFNLE9BQU87QUFDakMsbUJBQU9BLFdBQVUsTUFBTTtBQUFBLFVBQ3pCO0FBQUEsUUFDRjtBQUFBLFFBRUEsb0JBQXFCO0FBQ25CLGdCQUFNLEVBQUUsUUFBUSxRQUFRLFlBQVksU0FBUyxTQUFTLGVBQWUsV0FBVyxnQkFBZ0IsSUFBSTtBQUVwRyxjQUFJLE9BQU8sY0FBYyxDQUFDLGNBQWMsa0JBQWtCO0FBQ3hELG1CQUFPO0FBQUEsVUFDVDtBQUVBLGNBQUksU0FBUztBQUNYO0FBQUEsVUFDRjtBQUVBLGlCQUFPLGNBQWMsR0FBRztBQUN4QixrQkFBUSxLQUFLLFFBQVEsU0FBUyxPQUFPLENBQUM7QUFFdEMsZ0JBQU0sVUFBVSxPQUFPLE1BQU0sRUFBRSxPQUFPLFdBQVcsQ0FBQztBQUNsRCxpQkFBTyxPQUFPO0FBRWQsZUFBSyxhQUFhO0FBQ2xCLGVBQUssYUFBYTtBQUNsQixlQUFLLFlBQVk7QUFDakIsZUFBSyxnQkFBZ0I7QUFDckIsZUFBSyxZQUFZO0FBQ2pCLGVBQUssYUFBYTtBQUVsQixlQUFLLFVBQVUsQ0FBQztBQUNoQixlQUFLLGNBQWM7QUFFbkIsY0FBSSxhQUFhLEtBQUs7QUFDcEI7QUFBQSxVQUNGO0FBR0EsY0FBSSxRQUFRLFdBQVcsVUFBVSxpQkFBaUIsY0FBYyxTQUFTLGVBQWUsRUFBRSxHQUFHO0FBQzNGLGlCQUFLLFFBQVEsUUFBUSxJQUFJLG1DQUFtQyxDQUFDO0FBQzdELG1CQUFPO0FBQUEsVUFDVDtBQUVBLGtCQUFRLFdBQVcsT0FBTztBQUUxQixpQkFBTyxNQUFNLEVBQUUsT0FBTyxXQUFXLEdBQUcsSUFBSTtBQUN4QyxpQkFBTyxXQUFXLElBQUk7QUFFdEIsY0FBSSxPQUFPLFFBQVEsR0FBRztBQUNwQixtQkFBTyxPQUFPLFFBQVEsTUFBTSxDQUFDO0FBRTdCLGlCQUFLLFFBQVEsUUFBUSxJQUFJLG1CQUFtQixPQUFPLENBQUM7QUFDcEQsbUJBQU9BLFdBQVUsTUFBTTtBQUFBLFVBQ3pCLFdBQVcsQ0FBQyxpQkFBaUI7QUFDM0IsaUJBQUssUUFBUSxRQUFRLElBQUksbUJBQW1CLE9BQU8sQ0FBQztBQUNwRCxtQkFBT0EsV0FBVSxNQUFNO0FBQUEsVUFDekIsV0FBVyxPQUFPLE1BQU0sS0FBSyxPQUFPLFFBQVEsTUFBTSxHQUFHO0FBS25ELGlCQUFLLFFBQVEsUUFBUSxJQUFJLG1CQUFtQixPQUFPLENBQUM7QUFDcEQsbUJBQU9BLFdBQVUsTUFBTTtBQUFBLFVBQ3pCLFdBQVcsT0FBTyxXQUFXLEtBQUssUUFBUSxPQUFPLFdBQVcsTUFBTSxHQUFHO0FBSW5FLHlCQUFhLE1BQU0sT0FBTyxPQUFPLEVBQUUsQ0FBQztBQUFBLFVBQ3RDLE9BQU87QUFDTCxtQkFBTyxPQUFPLEVBQUU7QUFBQSxVQUNsQjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsZUFBUyxnQkFBaUIsUUFBUTtBQUNoQyxjQUFNLEVBQUUsUUFBUSxhQUFhLFFBQVEsT0FBTyxJQUFJLE9BQU8sTUFBTTtBQUc3RCxZQUFJLGdCQUFnQixpQkFBaUI7QUFDbkMsY0FBSSxDQUFDLE9BQU8sUUFBUSxLQUFLLE9BQU8scUJBQXFCLE9BQU8sUUFBUSxJQUFJLEdBQUc7QUFDekUsbUJBQU8sQ0FBQyxRQUFRLDRDQUE0QztBQUM1RCxpQkFBSyxRQUFRLFFBQVEsSUFBSSxvQkFBb0IsQ0FBQztBQUFBLFVBQ2hEO0FBQUEsUUFDRixXQUFXLGdCQUFnQixjQUFjO0FBQ3ZDLGNBQUksQ0FBQyxRQUFRO0FBQ1gsaUJBQUssUUFBUSxRQUFRLElBQUksaUJBQWlCLENBQUM7QUFBQSxVQUM3QztBQUFBLFFBQ0YsV0FBVyxnQkFBZ0Isb0JBQW9CO0FBQzdDLGlCQUFPLE9BQU8sUUFBUSxNQUFNLEtBQUssT0FBTyxzQkFBc0IsQ0FBQztBQUMvRCxlQUFLLFFBQVEsUUFBUSxJQUFJLG1CQUFtQixxQkFBcUIsQ0FBQztBQUFBLFFBQ3BFO0FBQUEsTUFDRjtBQUVBLGVBQWUsVUFBVyxRQUFRLFFBQVE7QUFBQTtBQUN4QyxpQkFBTyxPQUFPLElBQUk7QUFFbEIsY0FBSSxDQUFDLGdCQUFnQjtBQUNuQiw2QkFBaUIsTUFBTTtBQUN2Qiw0QkFBZ0I7QUFBQSxVQUNsQjtBQUVBLGlCQUFPLE1BQU0sSUFBSTtBQUNqQixpQkFBTyxRQUFRLElBQUk7QUFDbkIsaUJBQU8sTUFBTSxJQUFJO0FBQ2pCLGlCQUFPLFNBQVMsSUFBSTtBQUNwQixpQkFBTyxxQkFBcUIsSUFBSTtBQUNoQyxpQkFBTyw0QkFBNEIsSUFBSTtBQUN2QyxpQkFBTyxXQUFXLElBQUk7QUFDdEIsaUJBQU8sT0FBTyxJQUFJLElBQUksT0FBTyxRQUFRLFFBQVEsY0FBYztBQUUzRCxzQkFBWSxRQUFRLFNBQVMsU0FBVSxLQUFLO0FBQzFDLG1CQUFPLElBQUksU0FBUyw4QkFBOEI7QUFFbEQsa0JBQU0sU0FBUyxLQUFLLE9BQU87QUFJM0IsZ0JBQUksSUFBSSxTQUFTLGdCQUFnQixPQUFPLGNBQWMsQ0FBQyxPQUFPLGlCQUFpQjtBQUM3RSxvQkFBTSxZQUFZLE9BQU8sT0FBTztBQUNoQyxrQkFBSSxXQUFXO0FBQ2IscUJBQUssTUFBTSxJQUFJO0FBQ2YscUJBQUssT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTO0FBQUEsY0FDbkM7QUFDQTtBQUFBLFlBQ0Y7QUFFQSxpQkFBSyxNQUFNLElBQUk7QUFFZixpQkFBSyxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUc7QUFBQSxVQUM3QixDQUFDO0FBQ0Qsc0JBQVksUUFBUSxZQUFZLFdBQVk7QUFDMUMsa0JBQU0sU0FBUyxLQUFLLE9BQU87QUFFM0IsZ0JBQUksUUFBUTtBQUNWLHFCQUFPLFNBQVM7QUFBQSxZQUNsQjtBQUFBLFVBQ0YsQ0FBQztBQUNELHNCQUFZLFFBQVEsT0FBTyxXQUFZO0FBQ3JDLGtCQUFNLFNBQVMsS0FBSyxPQUFPO0FBRTNCLGdCQUFJLE9BQU8sY0FBYyxDQUFDLE9BQU8saUJBQWlCO0FBQ2hELG9CQUFNLFlBQVksT0FBTyxPQUFPO0FBQ2hDLGtCQUFJLFdBQVc7QUFDYixxQkFBSyxRQUFRLE1BQU0sU0FBUztBQUFBLGNBQzlCO0FBQ0E7QUFBQSxZQUNGO0FBRUEsaUJBQUssUUFBUSxNQUFNLElBQUksWUFBWSxxQkFBcUIsS0FBSyxjQUFjLElBQUksQ0FBQyxDQUFDO0FBQUEsVUFDbkYsQ0FBQztBQUNELHNCQUFZLFFBQVEsU0FBUyxXQUFZO0FBQ3ZDLGtCQUFNRyxVQUFTLEtBQUssT0FBTztBQUMzQixrQkFBTSxTQUFTLEtBQUssT0FBTztBQUUzQixzQ0FBMEIsSUFBSTtBQUU5QixnQkFBSSxRQUFRO0FBQ1Ysa0JBQUksQ0FBQyxLQUFLLE1BQU0sS0FBSyxPQUFPLGNBQWMsQ0FBQyxPQUFPLGlCQUFpQjtBQUNqRSxxQkFBSyxNQUFNLElBQUksT0FBTyxPQUFPLEtBQUssS0FBSyxNQUFNO0FBQUEsY0FDL0M7QUFFQSxtQkFBSyxPQUFPLEVBQUUsUUFBUTtBQUN0QixtQkFBSyxPQUFPLElBQUk7QUFBQSxZQUNsQjtBQUVBLGtCQUFNLE1BQU0sS0FBSyxNQUFNLEtBQUssSUFBSSxZQUFZLFVBQVUsS0FBSyxjQUFjLElBQUksQ0FBQztBQUU5RSxZQUFBQSxRQUFPLE9BQU8sSUFBSTtBQUNsQixZQUFBQSxRQUFPLFlBQVksSUFBSTtBQUV2QixnQkFBSUEsUUFBTyxXQUFXO0FBQ3BCLHFCQUFPQSxRQUFPLFFBQVEsTUFBTSxDQUFDO0FBRzdCLG9CQUFNLFdBQVdBLFFBQU8sTUFBTSxFQUFFLE9BQU9BLFFBQU8sV0FBVyxDQUFDO0FBQzFELHVCQUFTLElBQUksR0FBRyxJQUFJLFNBQVMsUUFBUSxLQUFLO0FBQ3hDLHNCQUFNLFVBQVUsU0FBUyxDQUFDO0FBQzFCLHFCQUFLLGFBQWFBLFNBQVEsU0FBUyxHQUFHO0FBQUEsY0FDeEM7QUFBQSxZQUNGLFdBQVdBLFFBQU8sUUFBUSxJQUFJLEtBQUssSUFBSSxTQUFTLGdCQUFnQjtBQUU5RCxvQkFBTSxVQUFVQSxRQUFPLE1BQU0sRUFBRUEsUUFBTyxXQUFXLENBQUM7QUFDbEQsY0FBQUEsUUFBTyxNQUFNLEVBQUVBLFFBQU8sV0FBVyxHQUFHLElBQUk7QUFFeEMsbUJBQUssYUFBYUEsU0FBUSxTQUFTLEdBQUc7QUFBQSxZQUN4QztBQUVBLFlBQUFBLFFBQU8sV0FBVyxJQUFJQSxRQUFPLFdBQVc7QUFFeEMsbUJBQU9BLFFBQU8sUUFBUSxNQUFNLENBQUM7QUFFN0IsWUFBQUEsUUFBTyxLQUFLLGNBQWNBLFFBQU8sSUFBSSxHQUFHLENBQUNBLE9BQU0sR0FBRyxHQUFHO0FBRXJELFlBQUFBLFFBQU8sT0FBTyxFQUFFO0FBQUEsVUFDbEIsQ0FBQztBQUVELGNBQUksU0FBUztBQUNiLGlCQUFPLEdBQUcsU0FBUyxNQUFNO0FBQ3ZCLHFCQUFTO0FBQUEsVUFDWCxDQUFDO0FBRUQsaUJBQU87QUFBQSxZQUNMLFNBQVM7QUFBQSxZQUNULG1CQUFtQjtBQUFBLFlBQ25CLFNBQVUsTUFBTTtBQUNkLHFCQUFPLFFBQVEsUUFBUSxHQUFHLElBQUk7QUFBQSxZQUNoQztBQUFBLFlBQ0EsU0FBVTtBQUNSLHVCQUFTLE1BQU07QUFBQSxZQUNqQjtBQUFBLFlBQ0EsUUFBUyxLQUFLLFVBQVU7QUFDdEIsa0JBQUksUUFBUTtBQUNWLCtCQUFlLFFBQVE7QUFBQSxjQUN6QixPQUFPO0FBQ0wsdUJBQU8sUUFBUSxHQUFHLEVBQUUsR0FBRyxTQUFTLFFBQVE7QUFBQSxjQUMxQztBQUFBLFlBQ0Y7QUFBQSxZQUNBLElBQUksWUFBYTtBQUNmLHFCQUFPLE9BQU87QUFBQSxZQUNoQjtBQUFBLFlBQ0EsS0FBTSxTQUFTO0FBQ2Isa0JBQUksT0FBTyxRQUFRLEtBQUssT0FBTyxNQUFNLEtBQUssT0FBTyxTQUFTLEtBQUssT0FBTyxxQkFBcUIsTUFBTSxHQUFHO0FBQ2xHLHVCQUFPO0FBQUEsY0FDVDtBQUVBLGtCQUFJLFNBQVM7QUFDWCxvQkFBSSxPQUFPLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxZQUFZO0FBSS9DLHlCQUFPO0FBQUEsZ0JBQ1Q7QUFFQSxvQkFBSSxPQUFPLFFBQVEsSUFBSSxNQUFNLFFBQVEsV0FBVyxRQUFRLFdBQVcsWUFBWTtBQUk3RSx5QkFBTztBQUFBLGdCQUNUO0FBRUEsb0JBQUksT0FBTyxRQUFRLElBQUksS0FBSyxLQUFLLFdBQVcsUUFBUSxJQUFJLE1BQU0sTUFDM0QsS0FBSyxTQUFTLFFBQVEsSUFBSSxLQUFLLEtBQUssZ0JBQWdCLFFBQVEsSUFBSSxLQUFLLEtBQUssZUFBZSxRQUFRLElBQUksSUFBSTtBQVMxRyx5QkFBTztBQUFBLGdCQUNUO0FBQUEsY0FDRjtBQUVBLHFCQUFPO0FBQUEsWUFDVDtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUE7QUFFQSxlQUFTLDBCQUEyQixRQUFRO0FBQzFDLFlBQUksT0FBTyw0QkFBNEIsR0FBRztBQUN4Qyx1QkFBYSxPQUFPLDRCQUE0QixDQUFDO0FBQ2pELGlCQUFPLDRCQUE0QixJQUFJO0FBQUEsUUFDekM7QUFFQSxlQUFPLHFCQUFxQixJQUFJO0FBQUEsTUFDbEM7QUFFQSxlQUFTLDZCQUE4QixRQUFRLFFBQVE7QUFyM0J2RDtBQXMzQkUsZUFBTyxxQkFBcUIsSUFBSTtBQUNoQyxlQUFPLDRCQUE0QixJQUFJLFdBQVcsTUFBTTtBQUN0RCxpQkFBTyw0QkFBNEIsSUFBSTtBQUN2QyxpQkFBTyxxQkFBcUIsSUFBSTtBQUVoQyxjQUFJLE9BQU8sT0FBTyxNQUFNLFVBQVUsQ0FBQyxPQUFPLFdBQVc7QUFDbkQsbUJBQU8sT0FBTyxFQUFFO0FBQUEsVUFDbEI7QUFBQSxRQUNGLEdBQUcsQ0FBQztBQUNKLDJCQUFPLDRCQUE0QixHQUFFLFVBQXJDO0FBQUEsTUFDRjtBQUtBLGVBQVMsU0FBVSxRQUFRO0FBQ3pCLGNBQU0sU0FBUyxPQUFPLE9BQU87QUFFN0IsWUFBSSxVQUFVLENBQUMsT0FBTyxXQUFXO0FBQy9CLGNBQUksT0FBTyxLQUFLLE1BQU0sR0FBRztBQUN2QixnQkFBSSxDQUFDLE9BQU8sTUFBTSxLQUFLLE9BQU8sT0FBTztBQUNuQyxxQkFBTyxNQUFNO0FBQ2IscUJBQU8sTUFBTSxJQUFJO0FBQUEsWUFDbkI7QUFBQSxVQUNGLFdBQVcsT0FBTyxNQUFNLEtBQUssT0FBTyxLQUFLO0FBQ3ZDLG1CQUFPLElBQUk7QUFDWCxtQkFBTyxNQUFNLElBQUk7QUFBQSxVQUNuQjtBQUVBLGNBQUksT0FBTyxRQUFRLE1BQU0sS0FBSyxPQUFPLFFBQVEsSUFBSSxLQUFLLE9BQU8sV0FBVyxHQUFHO0FBQ3pFLGdCQUFJLE9BQU8scUJBQXFCLE1BQU0sR0FBRztBQUN2QywyQ0FBNkIsUUFBUSxNQUFNO0FBQzNDLHFCQUFPLE9BQU8sRUFBRSxTQUFTO0FBQ3pCLGtCQUFJLE9BQU8sV0FBVztBQUNwQjtBQUFBLGNBQ0Y7QUFDQTtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSxPQUFPLHFCQUFxQixNQUFNLEdBQUc7QUFDdkMscUJBQU8sT0FBTyxFQUFFLFNBQVM7QUFDekIsa0JBQUksT0FBTyxXQUFXO0FBQ3BCO0FBQUEsY0FDRjtBQUNBO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLE9BQU8sUUFBUSxNQUFNLEdBQUc7QUFDMUIsbUJBQU8sT0FBTyxFQUFFLFNBQVM7QUFDekIsZ0JBQUksT0FBTyxXQUFXO0FBQ3BCO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLE9BQU8sS0FBSyxNQUFNLEdBQUc7QUFDdkIsZ0JBQUksT0FBTyxPQUFPLEVBQUUsZ0JBQWdCLG9CQUFvQjtBQUN0RCxxQkFBTyxPQUFPLEVBQUUsV0FBVyxPQUFPLHNCQUFzQixHQUFHLGtCQUFrQjtBQUFBLFlBQy9FO0FBQUEsVUFDRixXQUFXLE9BQU8sUUFBUSxJQUFJLEtBQUssT0FBTyxPQUFPLEVBQUUsYUFBYSxLQUFLO0FBQ25FLGdCQUFJLE9BQU8sT0FBTyxFQUFFLGdCQUFnQixpQkFBaUI7QUFDbkQsb0JBQU0sVUFBVSxPQUFPLE1BQU0sRUFBRSxPQUFPLFdBQVcsQ0FBQztBQUNsRCxvQkFBTSxpQkFBaUIsUUFBUSxrQkFBa0IsT0FDN0MsUUFBUSxpQkFDUixPQUFPLGVBQWU7QUFDMUIscUJBQU8sT0FBTyxFQUFFLFdBQVcsZ0JBQWdCLGVBQWU7QUFBQSxZQUM1RDtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUdBLGVBQVMsd0JBQXlCLFFBQVE7QUFDeEMsZUFBTyxXQUFXLFNBQVMsV0FBVyxVQUFVLFdBQVcsYUFBYSxXQUFXLFdBQVcsV0FBVztBQUFBLE1BQzNHO0FBRUEsZUFBUyxRQUFTLFFBQVEsU0FBUztBQUNqQyxjQUFNLEVBQUUsUUFBUSxNQUFBQyxPQUFNLE1BQU0sU0FBUyxVQUFVLE1BQU0sSUFBSTtBQUV6RCxZQUFJLEVBQUUsTUFBTSxTQUFTLGNBQWMsSUFBSTtBQVd2QyxjQUFNLGlCQUNKLFdBQVcsU0FDWCxXQUFXLFVBQ1gsV0FBVyxXQUNYLFdBQVcsV0FDWCxXQUFXLGNBQ1gsV0FBVztBQUdiLFlBQUksS0FBSyxlQUFlLElBQUksR0FBRztBQUM3QixjQUFJLENBQUMsYUFBYTtBQUNoQiwwQkFBYyxlQUFnQztBQUFBLFVBQ2hEO0FBRUEsZ0JBQU0sQ0FBQyxZQUFZLFdBQVcsSUFBSSxZQUFZLElBQUk7QUFDbEQsY0FBSSxRQUFRLGVBQWUsTUFBTTtBQUMvQixvQkFBUSxLQUFLLGdCQUFnQixXQUFXO0FBQUEsVUFDMUM7QUFDQSxpQkFBTyxXQUFXO0FBQ2xCLDBCQUFnQixXQUFXO0FBQUEsUUFDN0IsV0FBVyxLQUFLLFdBQVcsSUFBSSxLQUFLLFFBQVEsZUFBZSxNQUFNO0FBQy9ELGdCQUFNLGNBQWMsS0FBSztBQUN6QixjQUFJLGFBQWE7QUFDZixrQkFBTSxtQkFBbUIsR0FBRyxXQUFXO0FBQ3ZDLGdCQUFJLENBQUMsS0FBSyxtQkFBbUIsZ0JBQWdCLEdBQUc7QUFDOUMsbUJBQUssYUFBYSxRQUFRLFNBQVMsSUFBSSxxQkFBcUIsNkJBQTZCLENBQUM7QUFDMUYscUJBQU87QUFBQSxZQUNUO0FBQ0Esb0JBQVEsS0FBSyxnQkFBZ0IsZ0JBQWdCO0FBQUEsVUFDL0M7QUFBQSxRQUNGO0FBRUEsWUFBSSxRQUFRLE9BQU8sS0FBSyxTQUFTLFlBQVk7QUFFM0MsZUFBSyxLQUFLLENBQUM7QUFBQSxRQUNiO0FBRUEsY0FBTSxhQUFhLEtBQUssV0FBVyxJQUFJO0FBRXZDLHdCQUFnQixrQ0FBYztBQUU5QixZQUFJLGtCQUFrQixNQUFNO0FBQzFCLDBCQUFnQixRQUFRO0FBQUEsUUFDMUI7QUFFQSxZQUFJLGtCQUFrQixLQUFLLENBQUMsZ0JBQWdCO0FBTTFDLDBCQUFnQjtBQUFBLFFBQ2xCO0FBSUEsWUFBSSx3QkFBd0IsTUFBTSxLQUFLLGdCQUFnQixLQUFLLFFBQVEsa0JBQWtCLFFBQVEsUUFBUSxrQkFBa0IsZUFBZTtBQUNySSxjQUFJLE9BQU8sb0JBQW9CLEdBQUc7QUFDaEMsaUJBQUssYUFBYSxRQUFRLFNBQVMsSUFBSSxrQ0FBa0MsQ0FBQztBQUMxRSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxrQkFBUSxZQUFZLElBQUksa0NBQWtDLENBQUM7QUFBQSxRQUM3RDtBQUVBLGNBQU0sU0FBUyxPQUFPLE9BQU87QUFDN0Isa0NBQTBCLE1BQU07QUFFaEMsY0FBTSxRQUFRLENBQUMsUUFBUTtBQUNyQixjQUFJLFFBQVEsV0FBVyxRQUFRLFdBQVc7QUFDeEM7QUFBQSxVQUNGO0FBRUEsZUFBSyxhQUFhLFFBQVEsU0FBUyxPQUFPLElBQUksb0JBQW9CLENBQUM7QUFFbkUsZUFBSyxRQUFRLElBQUk7QUFDakIsZUFBSyxRQUFRLFFBQVEsSUFBSSxtQkFBbUIsU0FBUyxDQUFDO0FBQUEsUUFDeEQ7QUFFQSxZQUFJO0FBQ0Ysa0JBQVEsVUFBVSxLQUFLO0FBQUEsUUFDekIsU0FBUyxLQUFLO0FBQ1osZUFBSyxhQUFhLFFBQVEsU0FBUyxHQUFHO0FBQUEsUUFDeEM7QUFFQSxZQUFJLFFBQVEsU0FBUztBQUNuQixpQkFBTztBQUFBLFFBQ1Q7QUFFQSxZQUFJLFdBQVcsUUFBUTtBQUtyQixpQkFBTyxNQUFNLElBQUk7QUFBQSxRQUNuQjtBQUVBLFlBQUksV0FBVyxXQUFXLFdBQVc7QUFJbkMsaUJBQU8sTUFBTSxJQUFJO0FBQUEsUUFDbkI7QUFFQSxZQUFJLFNBQVMsTUFBTTtBQUNqQixpQkFBTyxNQUFNLElBQUk7QUFBQSxRQUNuQjtBQUVBLFlBQUksT0FBTyxZQUFZLEtBQUssT0FBTyxRQUFRLE9BQU8sT0FBTyxZQUFZLEdBQUc7QUFDdEUsaUJBQU8sTUFBTSxJQUFJO0FBQUEsUUFDbkI7QUFFQSxZQUFJLFVBQVU7QUFDWixpQkFBTyxTQUFTLElBQUk7QUFBQSxRQUN0QjtBQUVBLFlBQUksU0FBUyxHQUFHLE1BQU0sSUFBSUEsS0FBSTtBQUFBO0FBRTlCLFlBQUksT0FBTyxTQUFTLFVBQVU7QUFDNUIsb0JBQVUsU0FBUyxJQUFJO0FBQUE7QUFBQSxRQUN6QixPQUFPO0FBQ0wsb0JBQVUsT0FBTyxXQUFXO0FBQUEsUUFDOUI7QUFFQSxZQUFJLFNBQVM7QUFDWCxvQkFBVTtBQUFBLFdBQW1DLE9BQU87QUFBQTtBQUFBLFFBQ3RELFdBQVcsT0FBTyxXQUFXLEtBQUssQ0FBQyxPQUFPLE1BQU0sR0FBRztBQUNqRCxvQkFBVTtBQUFBLFFBQ1osT0FBTztBQUNMLG9CQUFVO0FBQUEsUUFDWjtBQUVBLFlBQUksTUFBTSxRQUFRLE9BQU8sR0FBRztBQUMxQixtQkFBUyxJQUFJLEdBQUcsSUFBSSxRQUFRLFFBQVEsS0FBSyxHQUFHO0FBQzFDLGtCQUFNLE1BQU0sUUFBUSxJQUFJLENBQUM7QUFDekIsa0JBQU0sTUFBTSxRQUFRLElBQUksQ0FBQztBQUV6QixnQkFBSSxNQUFNLFFBQVEsR0FBRyxHQUFHO0FBQ3RCLHVCQUFTLElBQUksR0FBRyxJQUFJLElBQUksUUFBUSxLQUFLO0FBQ25DLDBCQUFVLEdBQUcsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQUE7QUFBQSxjQUM3QjtBQUFBLFlBQ0YsT0FBTztBQUNMLHdCQUFVLEdBQUcsR0FBRyxLQUFLLEdBQUc7QUFBQTtBQUFBLFlBQzFCO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLFNBQVMsWUFBWSxnQkFBZ0I7QUFDdkMsbUJBQVMsWUFBWSxRQUFRLEVBQUUsU0FBUyxTQUFTLFFBQVEsT0FBTyxDQUFDO0FBQUEsUUFDbkU7QUFHQSxZQUFJLENBQUMsUUFBUSxlQUFlLEdBQUc7QUFDN0Isc0JBQVksT0FBTyxNQUFNLFFBQVEsU0FBUyxRQUFRLGVBQWUsUUFBUSxjQUFjO0FBQUEsUUFDekYsV0FBVyxLQUFLLFNBQVMsSUFBSSxHQUFHO0FBQzlCLHNCQUFZLE9BQU8sTUFBTSxRQUFRLFNBQVMsUUFBUSxlQUFlLFFBQVEsY0FBYztBQUFBLFFBQ3pGLFdBQVcsS0FBSyxXQUFXLElBQUksR0FBRztBQUNoQyxjQUFJLE9BQU8sS0FBSyxXQUFXLFlBQVk7QUFDckMsMEJBQWMsT0FBTyxLQUFLLE9BQU8sR0FBRyxRQUFRLFNBQVMsUUFBUSxlQUFlLFFBQVEsY0FBYztBQUFBLFVBQ3BHLE9BQU87QUFDTCxzQkFBVSxPQUFPLE1BQU0sUUFBUSxTQUFTLFFBQVEsZUFBZSxRQUFRLGNBQWM7QUFBQSxVQUN2RjtBQUFBLFFBQ0YsV0FBVyxLQUFLLFNBQVMsSUFBSSxHQUFHO0FBQzlCLHNCQUFZLE9BQU8sTUFBTSxRQUFRLFNBQVMsUUFBUSxlQUFlLFFBQVEsY0FBYztBQUFBLFFBQ3pGLFdBQVcsS0FBSyxXQUFXLElBQUksR0FBRztBQUNoQyx3QkFBYyxPQUFPLE1BQU0sUUFBUSxTQUFTLFFBQVEsZUFBZSxRQUFRLGNBQWM7QUFBQSxRQUMzRixPQUFPO0FBQ0wsaUJBQU8sS0FBSztBQUFBLFFBQ2Q7QUFFQSxlQUFPO0FBQUEsTUFDVDtBQUVBLGVBQVMsWUFBYSxPQUFPLE1BQU0sUUFBUSxTQUFTLFFBQVEsZUFBZSxRQUFRLGdCQUFnQjtBQTduQ25HO0FBOG5DRSxlQUFPLGtCQUFrQixLQUFLLE9BQU8sUUFBUSxNQUFNLEdBQUcsaUNBQWlDO0FBRXZGLFlBQUksV0FBVztBQUVmLGNBQU0sU0FBUyxJQUFJLFlBQVksRUFBRSxPQUFPLFFBQVEsU0FBUyxlQUFlLFFBQVEsZ0JBQWdCLE9BQU8sQ0FBQztBQUV4RyxjQUFNLFNBQVMsU0FBVSxPQUFPO0FBQzlCLGNBQUksVUFBVTtBQUNaO0FBQUEsVUFDRjtBQUVBLGNBQUk7QUFDRixnQkFBSSxDQUFDLE9BQU8sTUFBTSxLQUFLLEtBQUssS0FBSyxPQUFPO0FBQ3RDLG1CQUFLLE1BQU07QUFBQSxZQUNiO0FBQUEsVUFDRixTQUFTLEtBQUs7QUFDWixpQkFBSyxRQUFRLE1BQU0sR0FBRztBQUFBLFVBQ3hCO0FBQUEsUUFDRjtBQUNBLGNBQU0sVUFBVSxXQUFZO0FBQzFCLGNBQUksVUFBVTtBQUNaO0FBQUEsVUFDRjtBQUVBLGNBQUksS0FBSyxRQUFRO0FBQ2YsaUJBQUssT0FBTztBQUFBLFVBQ2Q7QUFBQSxRQUNGO0FBQ0EsY0FBTSxVQUFVLFdBQVk7QUFHMUIseUJBQWUsTUFBTTtBQUduQixpQkFBSyxlQUFlLFNBQVMsVUFBVTtBQUFBLFVBQ3pDLENBQUM7QUFFRCxjQUFJLENBQUMsVUFBVTtBQUNiLGtCQUFNLE1BQU0sSUFBSSxvQkFBb0I7QUFDcEMsMkJBQWUsTUFBTSxXQUFXLEdBQUcsQ0FBQztBQUFBLFVBQ3RDO0FBQUEsUUFDRjtBQUNBLGNBQU0sYUFBYSxTQUFVLEtBQUs7QUFDaEMsY0FBSSxVQUFVO0FBQ1o7QUFBQSxVQUNGO0FBRUEscUJBQVc7QUFFWCxpQkFBTyxPQUFPLGFBQWMsT0FBTyxRQUFRLEtBQUssT0FBTyxRQUFRLEtBQUssQ0FBRTtBQUV0RSxpQkFDRyxJQUFJLFNBQVMsT0FBTyxFQUNwQixJQUFJLFNBQVMsVUFBVTtBQUUxQixlQUNHLGVBQWUsUUFBUSxNQUFNLEVBQzdCLGVBQWUsT0FBTyxVQUFVLEVBQ2hDLGVBQWUsU0FBUyxPQUFPO0FBRWxDLGNBQUksQ0FBQyxLQUFLO0FBQ1IsZ0JBQUk7QUFDRixxQkFBTyxJQUFJO0FBQUEsWUFDYixTQUFTLElBQUk7QUFDWCxvQkFBTTtBQUFBLFlBQ1I7QUFBQSxVQUNGO0FBRUEsaUJBQU8sUUFBUSxHQUFHO0FBRWxCLGNBQUksUUFBUSxJQUFJLFNBQVMsa0JBQWtCLElBQUksWUFBWSxVQUFVO0FBQ25FLGlCQUFLLFFBQVEsTUFBTSxHQUFHO0FBQUEsVUFDeEIsT0FBTztBQUNMLGlCQUFLLFFBQVEsSUFBSTtBQUFBLFVBQ25CO0FBQUEsUUFDRjtBQUVBLGFBQ0csR0FBRyxRQUFRLE1BQU0sRUFDakIsR0FBRyxPQUFPLFVBQVUsRUFDcEIsR0FBRyxTQUFTLFVBQVUsRUFDdEIsR0FBRyxTQUFTLE9BQU87QUFFdEIsWUFBSSxLQUFLLFFBQVE7QUFDZixlQUFLLE9BQU87QUFBQSxRQUNkO0FBRUEsZUFDRyxHQUFHLFNBQVMsT0FBTyxFQUNuQixHQUFHLFNBQVMsVUFBVTtBQUV6QixhQUFJLFVBQUssaUJBQUwsWUFBcUIsS0FBSyxTQUFTO0FBQ3JDLHVCQUFhLE1BQU0sV0FBVyxLQUFLLE9BQU8sQ0FBQztBQUFBLFFBQzdDLFlBQVcsVUFBSyxlQUFMLFlBQW1CLEtBQUssZUFBZTtBQUNoRCx1QkFBYSxNQUFNLFdBQVcsSUFBSSxDQUFDO0FBQUEsUUFDckM7QUFFQSxhQUFJLFVBQUssaUJBQUwsWUFBcUIsS0FBSyxRQUFRO0FBQ3BDLHVCQUFhLE9BQU87QUFBQSxRQUN0QjtBQUFBLE1BQ0Y7QUFFQSxlQUFTLFlBQWEsT0FBTyxNQUFNLFFBQVEsU0FBUyxRQUFRLGVBQWUsUUFBUSxnQkFBZ0I7QUFDakcsWUFBSTtBQUNGLGNBQUksQ0FBQyxNQUFNO0FBQ1QsZ0JBQUksa0JBQWtCLEdBQUc7QUFDdkIscUJBQU8sTUFBTSxHQUFHLE1BQU07QUFBQTtBQUFBLEdBQTZCLFFBQVE7QUFBQSxZQUM3RCxPQUFPO0FBQ0wscUJBQU8sa0JBQWtCLE1BQU0sc0NBQXNDO0FBQ3JFLHFCQUFPLE1BQU0sR0FBRyxNQUFNO0FBQUEsR0FBUSxRQUFRO0FBQUEsWUFDeEM7QUFBQSxVQUNGLFdBQVcsS0FBSyxTQUFTLElBQUksR0FBRztBQUM5QixtQkFBTyxrQkFBa0IsS0FBSyxZQUFZLHNDQUFzQztBQUVoRixtQkFBTyxLQUFLO0FBQ1osbUJBQU8sTUFBTSxHQUFHLE1BQU0sbUJBQW1CLGFBQWE7QUFBQTtBQUFBLEdBQVksUUFBUTtBQUMxRSxtQkFBTyxNQUFNLElBQUk7QUFDakIsbUJBQU8sT0FBTztBQUNkLG9CQUFRLFdBQVcsSUFBSTtBQUV2QixnQkFBSSxDQUFDLGtCQUFrQixRQUFRLFVBQVUsT0FBTztBQUM5QyxxQkFBTyxNQUFNLElBQUk7QUFBQSxZQUNuQjtBQUFBLFVBQ0Y7QUFDQSxrQkFBUSxjQUFjO0FBRXRCLGlCQUFPLE9BQU8sRUFBRTtBQUFBLFFBQ2xCLFNBQVMsS0FBSztBQUNaLGdCQUFNLEdBQUc7QUFBQSxRQUNYO0FBQUEsTUFDRjtBQUVBLGVBQWUsVUFBVyxPQUFPLE1BQU0sUUFBUSxTQUFTLFFBQVEsZUFBZSxRQUFRLGdCQUFnQjtBQUFBO0FBQ3JHLGlCQUFPLGtCQUFrQixLQUFLLE1BQU0sb0NBQW9DO0FBRXhFLGNBQUk7QUFDRixnQkFBSSxpQkFBaUIsUUFBUSxrQkFBa0IsS0FBSyxNQUFNO0FBQ3hELG9CQUFNLElBQUksa0NBQWtDO0FBQUEsWUFDOUM7QUFFQSxrQkFBTSxTQUFTLE9BQU8sS0FBSyxNQUFNLEtBQUssWUFBWSxDQUFDO0FBRW5ELG1CQUFPLEtBQUs7QUFDWixtQkFBTyxNQUFNLEdBQUcsTUFBTSxtQkFBbUIsYUFBYTtBQUFBO0FBQUEsR0FBWSxRQUFRO0FBQzFFLG1CQUFPLE1BQU0sTUFBTTtBQUNuQixtQkFBTyxPQUFPO0FBRWQsb0JBQVEsV0FBVyxNQUFNO0FBQ3pCLG9CQUFRLGNBQWM7QUFFdEIsZ0JBQUksQ0FBQyxrQkFBa0IsUUFBUSxVQUFVLE9BQU87QUFDOUMscUJBQU8sTUFBTSxJQUFJO0FBQUEsWUFDbkI7QUFFQSxtQkFBTyxPQUFPLEVBQUU7QUFBQSxVQUNsQixTQUFTLEtBQUs7QUFDWixrQkFBTSxHQUFHO0FBQUEsVUFDWDtBQUFBLFFBQ0Y7QUFBQTtBQUVBLGVBQWUsY0FBZSxPQUFPLE1BQU0sUUFBUSxTQUFTLFFBQVEsZUFBZSxRQUFRLGdCQUFnQjtBQUFBO0FBQ3pHLGlCQUFPLGtCQUFrQixLQUFLLE9BQU8sUUFBUSxNQUFNLEdBQUcsbUNBQW1DO0FBRXpGLGNBQUksV0FBVztBQUNmLG1CQUFTLFVBQVc7QUFDbEIsZ0JBQUksVUFBVTtBQUNaLG9CQUFNLEtBQUs7QUFDWCx5QkFBVztBQUNYLGlCQUFHO0FBQUEsWUFDTDtBQUFBLFVBQ0Y7QUFFQSxnQkFBTSxlQUFlLE1BQU0sSUFBSSxRQUFRLENBQUNDLFVBQVMsV0FBVztBQUMxRCxtQkFBTyxhQUFhLElBQUk7QUFFeEIsZ0JBQUksT0FBTyxNQUFNLEdBQUc7QUFDbEIscUJBQU8sT0FBTyxNQUFNLENBQUM7QUFBQSxZQUN2QixPQUFPO0FBQ0wseUJBQVdBO0FBQUEsWUFDYjtBQUFBLFVBQ0YsQ0FBQztBQUVELGlCQUNHLEdBQUcsU0FBUyxPQUFPLEVBQ25CLEdBQUcsU0FBUyxPQUFPO0FBRXRCLGdCQUFNLFNBQVMsSUFBSSxZQUFZLEVBQUUsT0FBTyxRQUFRLFNBQVMsZUFBZSxRQUFRLGdCQUFnQixPQUFPLENBQUM7QUFDeEcsY0FBSTtBQUVGO0FBQUEseUNBQTBCLE9BQTFCLDBFQUFnQztBQUFyQixzQkFBTSxRQUFqQjtBQUNFLG9CQUFJLE9BQU8sTUFBTSxHQUFHO0FBQ2xCLHdCQUFNLE9BQU8sTUFBTTtBQUFBLGdCQUNyQjtBQUVBLG9CQUFJLENBQUMsT0FBTyxNQUFNLEtBQUssR0FBRztBQUN4Qix3QkFBTSxhQUFhO0FBQUEsZ0JBQ3JCO0FBQUEsY0FDRjtBQUFBLHFCQVJBLE1BM3pDSjtBQTJ6Q0k7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVUEsbUJBQU8sSUFBSTtBQUFBLFVBQ2IsU0FBUyxLQUFLO0FBQ1osbUJBQU8sUUFBUSxHQUFHO0FBQUEsVUFDcEIsVUFBRTtBQUNBLG1CQUNHLElBQUksU0FBUyxPQUFPLEVBQ3BCLElBQUksU0FBUyxPQUFPO0FBQUEsVUFDekI7QUFBQSxRQUNGO0FBQUE7QUFFQSxVQUFNLGNBQU4sTUFBa0I7QUFBQSxRQUNoQixZQUFhLEVBQUUsT0FBTyxRQUFRLFNBQVMsZUFBZSxRQUFRLGdCQUFnQixPQUFPLEdBQUc7QUFDdEYsZUFBSyxTQUFTO0FBQ2QsZUFBSyxVQUFVO0FBQ2YsZUFBSyxnQkFBZ0I7QUFDckIsZUFBSyxTQUFTO0FBQ2QsZUFBSyxlQUFlO0FBQ3BCLGVBQUssaUJBQWlCO0FBQ3RCLGVBQUssU0FBUztBQUNkLGVBQUssUUFBUTtBQUViLGlCQUFPLFFBQVEsSUFBSTtBQUFBLFFBQ3JCO0FBQUEsUUFFQSxNQUFPLE9BQU87QUFDWixnQkFBTSxFQUFFLFFBQVEsU0FBUyxlQUFlLFFBQVEsY0FBYyxnQkFBZ0IsT0FBTyxJQUFJO0FBRXpGLGNBQUksT0FBTyxNQUFNLEdBQUc7QUFDbEIsa0JBQU0sT0FBTyxNQUFNO0FBQUEsVUFDckI7QUFFQSxjQUFJLE9BQU8sV0FBVztBQUNwQixtQkFBTztBQUFBLFVBQ1Q7QUFFQSxnQkFBTSxNQUFNLE9BQU8sV0FBVyxLQUFLO0FBQ25DLGNBQUksQ0FBQyxLQUFLO0FBQ1IsbUJBQU87QUFBQSxVQUNUO0FBR0EsY0FBSSxrQkFBa0IsUUFBUSxlQUFlLE1BQU0sZUFBZTtBQUNoRSxnQkFBSSxPQUFPLG9CQUFvQixHQUFHO0FBQ2hDLG9CQUFNLElBQUksa0NBQWtDO0FBQUEsWUFDOUM7QUFFQSxvQkFBUSxZQUFZLElBQUksa0NBQWtDLENBQUM7QUFBQSxVQUM3RDtBQUVBLGlCQUFPLEtBQUs7QUFFWixjQUFJLGlCQUFpQixHQUFHO0FBQ3RCLGdCQUFJLENBQUMsa0JBQWtCLFFBQVEsVUFBVSxPQUFPO0FBQzlDLHFCQUFPLE1BQU0sSUFBSTtBQUFBLFlBQ25CO0FBRUEsZ0JBQUksa0JBQWtCLE1BQU07QUFDMUIscUJBQU8sTUFBTSxHQUFHLE1BQU07QUFBQSxHQUFrQyxRQUFRO0FBQUEsWUFDbEUsT0FBTztBQUNMLHFCQUFPLE1BQU0sR0FBRyxNQUFNLG1CQUFtQixhQUFhO0FBQUE7QUFBQSxHQUFZLFFBQVE7QUFBQSxZQUM1RTtBQUFBLFVBQ0Y7QUFFQSxjQUFJLGtCQUFrQixNQUFNO0FBQzFCLG1CQUFPLE1BQU07QUFBQSxFQUFPLElBQUksU0FBUyxFQUFFLENBQUM7QUFBQSxHQUFRLFFBQVE7QUFBQSxVQUN0RDtBQUVBLGVBQUssZ0JBQWdCO0FBRXJCLGdCQUFNLE1BQU0sT0FBTyxNQUFNLEtBQUs7QUFFOUIsaUJBQU8sT0FBTztBQUVkLGtCQUFRLFdBQVcsS0FBSztBQUV4QixjQUFJLENBQUMsS0FBSztBQUNSLGdCQUFJLE9BQU8sT0FBTyxFQUFFLFdBQVcsT0FBTyxPQUFPLEVBQUUsZ0JBQWdCLGlCQUFpQjtBQUU5RSxrQkFBSSxPQUFPLE9BQU8sRUFBRSxRQUFRLFNBQVM7QUFDbkMsdUJBQU8sT0FBTyxFQUFFLFFBQVEsUUFBUTtBQUFBLGNBQ2xDO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxpQkFBTztBQUFBLFFBQ1Q7QUFBQSxRQUVBLE1BQU87QUFDTCxnQkFBTSxFQUFFLFFBQVEsZUFBZSxRQUFRLGNBQWMsZ0JBQWdCLFFBQVEsUUFBUSxJQUFJO0FBQ3pGLGtCQUFRLGNBQWM7QUFFdEIsaUJBQU8sUUFBUSxJQUFJO0FBRW5CLGNBQUksT0FBTyxNQUFNLEdBQUc7QUFDbEIsa0JBQU0sT0FBTyxNQUFNO0FBQUEsVUFDckI7QUFFQSxjQUFJLE9BQU8sV0FBVztBQUNwQjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLGlCQUFpQixHQUFHO0FBQ3RCLGdCQUFJLGdCQUFnQjtBQU1sQixxQkFBTyxNQUFNLEdBQUcsTUFBTTtBQUFBO0FBQUEsR0FBNkIsUUFBUTtBQUFBLFlBQzdELE9BQU87QUFDTCxxQkFBTyxNQUFNLEdBQUcsTUFBTTtBQUFBLEdBQVEsUUFBUTtBQUFBLFlBQ3hDO0FBQUEsVUFDRixXQUFXLGtCQUFrQixNQUFNO0FBQ2pDLG1CQUFPLE1BQU0saUJBQWlCLFFBQVE7QUFBQSxVQUN4QztBQUVBLGNBQUksa0JBQWtCLFFBQVEsaUJBQWlCLGVBQWU7QUFDNUQsZ0JBQUksT0FBTyxvQkFBb0IsR0FBRztBQUNoQyxvQkFBTSxJQUFJLGtDQUFrQztBQUFBLFlBQzlDLE9BQU87QUFDTCxzQkFBUSxZQUFZLElBQUksa0NBQWtDLENBQUM7QUFBQSxZQUM3RDtBQUFBLFVBQ0Y7QUFFQSxjQUFJLE9BQU8sT0FBTyxFQUFFLFdBQVcsT0FBTyxPQUFPLEVBQUUsZ0JBQWdCLGlCQUFpQjtBQUU5RSxnQkFBSSxPQUFPLE9BQU8sRUFBRSxRQUFRLFNBQVM7QUFDbkMscUJBQU8sT0FBTyxFQUFFLFFBQVEsUUFBUTtBQUFBLFlBQ2xDO0FBQUEsVUFDRjtBQUVBLGlCQUFPLE9BQU8sRUFBRTtBQUFBLFFBQ2xCO0FBQUEsUUFFQSxRQUFTLEtBQUs7QUFDWixnQkFBTSxFQUFFLFFBQVEsUUFBUSxNQUFNLElBQUk7QUFFbEMsaUJBQU8sUUFBUSxJQUFJO0FBRW5CLGNBQUksS0FBSztBQUNQLG1CQUFPLE9BQU8sUUFBUSxLQUFLLEdBQUcsMkNBQTJDO0FBQ3pFLGtCQUFNLEdBQUc7QUFBQSxVQUNYO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQSxhQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUN2OUNqQjtBQUFBO0FBQUE7QUFFQSxVQUFNLFNBQVMsVUFBUSxRQUFhO0FBQ3BDLFVBQU0sRUFBRSxTQUFTLElBQUksVUFBUSxRQUFhO0FBQzFDLFVBQU0sT0FBTztBQUNiLFVBQU07QUFBQSxRQUNKO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRixJQUFJO0FBQ0osVUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRixJQUFJO0FBRUosVUFBTSxlQUFlLE9BQU8sY0FBYztBQUUxQyxVQUFJO0FBR0osVUFBSSx1QkFBdUI7QUFHM0IsVUFBSTtBQUNKLFVBQUk7QUFDRixnQkFBUSxVQUFRLE9BQVk7QUFBQSxNQUM5QixTQUFRO0FBRU4sZ0JBQVEsRUFBRSxXQUFXLENBQUMsRUFBRTtBQUFBLE1BQzFCO0FBRUEsVUFBTTtBQUFBLFFBQ0osV0FBVztBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGO0FBQUEsTUFDRixJQUFJO0FBRUosZUFBUyxlQUFnQixTQUFTO0FBQ2hDLGNBQU0sU0FBUyxDQUFDO0FBRWhCLG1CQUFXLENBQUMsTUFBTSxLQUFLLEtBQUssT0FBTyxRQUFRLE9BQU8sR0FBRztBQUduRCxjQUFJLE1BQU0sUUFBUSxLQUFLLEdBQUc7QUFDeEIsdUJBQVcsWUFBWSxPQUFPO0FBRzVCLHFCQUFPLEtBQUssT0FBTyxLQUFLLElBQUksR0FBRyxPQUFPLEtBQUssUUFBUSxDQUFDO0FBQUEsWUFDdEQ7QUFBQSxVQUNGLE9BQU87QUFDTCxtQkFBTyxLQUFLLE9BQU8sS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLEtBQUssQ0FBQztBQUFBLFVBQ25EO0FBQUEsUUFDRjtBQUVBLGVBQU87QUFBQSxNQUNUO0FBRUEsZUFBZSxVQUFXLFFBQVEsUUFBUTtBQUFBO0FBQ3hDLGlCQUFPLE9BQU8sSUFBSTtBQUVsQixjQUFJLENBQUMsc0JBQXNCO0FBQ3pCLG1DQUF1QjtBQUN2QixvQkFBUSxZQUFZLGtFQUFrRTtBQUFBLGNBQ3BGLE1BQU07QUFBQSxZQUNSLENBQUM7QUFBQSxVQUNIO0FBRUEsZ0JBQU0sVUFBVSxNQUFNLFFBQVEsT0FBTyxJQUFJLEdBQUc7QUFBQSxZQUMxQyxrQkFBa0IsTUFBTTtBQUFBLFlBQ3hCLDBCQUEwQixPQUFPLHFCQUFxQjtBQUFBLFVBQ3hELENBQUM7QUFFRCxrQkFBUSxZQUFZLElBQUk7QUFDeEIsa0JBQVEsT0FBTyxJQUFJO0FBQ25CLGtCQUFRLE9BQU8sSUFBSTtBQUVuQixlQUFLLFlBQVksU0FBUyxTQUFTLG1CQUFtQjtBQUN0RCxlQUFLLFlBQVksU0FBUyxjQUFjLGlCQUFpQjtBQUN6RCxlQUFLLFlBQVksU0FBUyxPQUFPLGlCQUFpQjtBQUNsRCxlQUFLLFlBQVksU0FBUyxVQUFVLGFBQWE7QUFDakQsZUFBSyxZQUFZLFNBQVMsU0FBUyxXQUFZO0FBQzdDLGtCQUFNLEVBQUUsQ0FBQyxPQUFPLEdBQUdDLFFBQU8sSUFBSTtBQUM5QixrQkFBTSxFQUFFLENBQUMsT0FBTyxHQUFHQyxRQUFPLElBQUlEO0FBRTlCLGtCQUFNLE1BQU0sS0FBSyxPQUFPLEVBQUUsTUFBTSxLQUFLLEtBQUssTUFBTSxLQUFLLElBQUksWUFBWSxVQUFVLEtBQUssY0FBY0MsT0FBTSxDQUFDO0FBRXpHLFlBQUFELFFBQU8sYUFBYSxJQUFJO0FBRXhCLGdCQUFJQSxRQUFPLFdBQVc7QUFDcEIscUJBQU9BLFFBQU8sUUFBUSxNQUFNLENBQUM7QUFHN0Isb0JBQU0sV0FBV0EsUUFBTyxNQUFNLEVBQUUsT0FBT0EsUUFBTyxXQUFXLENBQUM7QUFDMUQsdUJBQVMsSUFBSSxHQUFHLElBQUksU0FBUyxRQUFRLEtBQUs7QUFDeEMsc0JBQU0sVUFBVSxTQUFTLENBQUM7QUFDMUIscUJBQUssYUFBYUEsU0FBUSxTQUFTLEdBQUc7QUFBQSxjQUN4QztBQUFBLFlBQ0Y7QUFBQSxVQUNGLENBQUM7QUFFRCxrQkFBUSxNQUFNO0FBRWQsaUJBQU8sYUFBYSxJQUFJO0FBQ3hCLGlCQUFPLGFBQWEsSUFBSTtBQUV4QixlQUFLLFlBQVksUUFBUSxTQUFTLFNBQVUsS0FBSztBQUMvQyxtQkFBTyxJQUFJLFNBQVMsOEJBQThCO0FBRWxELGlCQUFLLE1BQU0sSUFBSTtBQUVmLGlCQUFLLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRztBQUFBLFVBQzdCLENBQUM7QUFFRCxlQUFLLFlBQVksUUFBUSxPQUFPLFdBQVk7QUFDMUMsaUJBQUssUUFBUSxNQUFNLElBQUksWUFBWSxxQkFBcUIsS0FBSyxjQUFjLElBQUksQ0FBQyxDQUFDO0FBQUEsVUFDbkYsQ0FBQztBQUVELGVBQUssWUFBWSxRQUFRLFNBQVMsV0FBWTtBQUM1QyxrQkFBTSxNQUFNLEtBQUssTUFBTSxLQUFLLElBQUksWUFBWSxVQUFVLEtBQUssY0FBYyxJQUFJLENBQUM7QUFFOUUsbUJBQU8sT0FBTyxJQUFJO0FBRWxCLGdCQUFJLEtBQUssYUFBYSxLQUFLLE1BQU07QUFDL0IsbUJBQUssYUFBYSxFQUFFLFFBQVEsR0FBRztBQUFBLFlBQ2pDO0FBRUEsbUJBQU8sV0FBVyxJQUFJLE9BQU8sV0FBVztBQUV4QyxtQkFBTyxPQUFPLFFBQVEsTUFBTSxDQUFDO0FBRTdCLG1CQUFPLEtBQUssY0FBYyxPQUFPLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHO0FBRXJELG1CQUFPLE9BQU8sRUFBRTtBQUFBLFVBQ2xCLENBQUM7QUFFRCxjQUFJLFNBQVM7QUFDYixpQkFBTyxHQUFHLFNBQVMsTUFBTTtBQUN2QixxQkFBUztBQUFBLFVBQ1gsQ0FBQztBQUVELGlCQUFPO0FBQUEsWUFDTCxTQUFTO0FBQUEsWUFDVCxtQkFBbUI7QUFBQSxZQUNuQixTQUFVLE1BQU07QUFDZCxxQkFBTyxRQUFRLFFBQVEsR0FBRyxJQUFJO0FBQUEsWUFDaEM7QUFBQSxZQUNBLFNBQVU7QUFDUix1QkFBUyxNQUFNO0FBQUEsWUFDakI7QUFBQSxZQUNBLFFBQVMsS0FBSyxVQUFVO0FBQ3RCLGtCQUFJLFFBQVE7QUFDViwrQkFBZSxRQUFRO0FBQUEsY0FDekIsT0FBTztBQUVMLHVCQUFPLFFBQVEsR0FBRyxFQUFFLEdBQUcsU0FBUyxRQUFRO0FBQUEsY0FDMUM7QUFBQSxZQUNGO0FBQUEsWUFDQSxJQUFJLFlBQWE7QUFDZixxQkFBTyxPQUFPO0FBQUEsWUFDaEI7QUFBQSxZQUNBLE9BQVE7QUFDTixxQkFBTztBQUFBLFlBQ1Q7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBO0FBRUEsZUFBUyxTQUFVLFFBQVE7QUFDekIsY0FBTSxTQUFTLE9BQU8sT0FBTztBQUU3QixhQUFJLGlDQUFRLGVBQWMsT0FBTztBQUMvQixjQUFJLE9BQU8sS0FBSyxNQUFNLEtBQUssT0FBTyxxQkFBcUIsTUFBTSxHQUFHO0FBQzlELG1CQUFPLE1BQU07QUFDYixtQkFBTyxhQUFhLEVBQUUsTUFBTTtBQUFBLFVBQzlCLE9BQU87QUFDTCxtQkFBTyxJQUFJO0FBQ1gsbUJBQU8sYUFBYSxFQUFFLElBQUk7QUFBQSxVQUM1QjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsZUFBUyxvQkFBcUIsS0FBSztBQUNqQyxlQUFPLElBQUksU0FBUyw4QkFBOEI7QUFFbEQsYUFBSyxPQUFPLEVBQUUsTUFBTSxJQUFJO0FBQ3hCLGFBQUssT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHO0FBQUEsTUFDN0I7QUFFQSxlQUFTLGtCQUFtQixNQUFNLE1BQU0sSUFBSTtBQUMxQyxZQUFJLE9BQU8sR0FBRztBQUNaLGdCQUFNLE1BQU0sSUFBSSxtQkFBbUIsd0NBQXdDLElBQUksVUFBVSxJQUFJLEVBQUU7QUFDL0YsZUFBSyxPQUFPLEVBQUUsTUFBTSxJQUFJO0FBQ3hCLGVBQUssT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHO0FBQUEsUUFDN0I7QUFBQSxNQUNGO0FBRUEsZUFBUyxvQkFBcUI7QUFDNUIsY0FBTSxNQUFNLElBQUksWUFBWSxxQkFBcUIsS0FBSyxjQUFjLEtBQUssT0FBTyxDQUFDLENBQUM7QUFDbEYsYUFBSyxRQUFRLEdBQUc7QUFDaEIsYUFBSyxRQUFRLEtBQUssT0FBTyxHQUFHLEdBQUc7QUFBQSxNQUNqQztBQU9BLGVBQVMsY0FBZSxNQUFNO0FBRTVCLGNBQU0sTUFBTSxLQUFLLE1BQU0sS0FBSyxJQUFJLFlBQVksNkNBQTZDLElBQUksSUFBSSxLQUFLLGNBQWMsSUFBSSxDQUFDO0FBQ3pILGNBQU0sU0FBUyxLQUFLLE9BQU87QUFFM0IsZUFBTyxPQUFPLElBQUk7QUFDbEIsZUFBTyxZQUFZLElBQUk7QUFFdkIsWUFBSSxLQUFLLGFBQWEsS0FBSyxNQUFNO0FBQy9CLGVBQUssYUFBYSxFQUFFLFFBQVEsR0FBRztBQUMvQixlQUFLLGFBQWEsSUFBSTtBQUFBLFFBQ3hCO0FBRUEsYUFBSyxRQUFRLEtBQUssT0FBTyxHQUFHLEdBQUc7QUFHL0IsWUFBSSxPQUFPLFdBQVcsSUFBSSxPQUFPLE1BQU0sRUFBRSxRQUFRO0FBQy9DLGdCQUFNLFVBQVUsT0FBTyxNQUFNLEVBQUUsT0FBTyxXQUFXLENBQUM7QUFDbEQsaUJBQU8sTUFBTSxFQUFFLE9BQU8sV0FBVyxHQUFHLElBQUk7QUFDeEMsZUFBSyxhQUFhLFFBQVEsU0FBUyxHQUFHO0FBQ3RDLGlCQUFPLFdBQVcsSUFBSSxPQUFPLFdBQVc7QUFBQSxRQUMxQztBQUVBLGVBQU8sT0FBTyxRQUFRLE1BQU0sQ0FBQztBQUU3QixlQUFPLEtBQUssY0FBYyxPQUFPLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHO0FBRXJELGVBQU8sT0FBTyxFQUFFO0FBQUEsTUFDbEI7QUFHQSxlQUFTLHdCQUF5QixRQUFRO0FBQ3hDLGVBQU8sV0FBVyxTQUFTLFdBQVcsVUFBVSxXQUFXLGFBQWEsV0FBVyxXQUFXLFdBQVc7QUFBQSxNQUMzRztBQUVBLGVBQVMsUUFBUyxRQUFRLFNBQVM7QUFDakMsY0FBTSxVQUFVLE9BQU8sYUFBYTtBQUNwQyxjQUFNLEVBQUUsUUFBUSxNQUFBRSxPQUFNLE1BQU0sU0FBUyxnQkFBZ0IsUUFBUSxTQUFTLFdBQVcsSUFBSTtBQUNyRixZQUFJLEVBQUUsS0FBSyxJQUFJO0FBRWYsWUFBSSxTQUFTO0FBQ1gsZUFBSyxhQUFhLFFBQVEsU0FBUyxJQUFJLE1BQU0sOEJBQThCLENBQUM7QUFDNUUsaUJBQU87QUFBQSxRQUNUO0FBRUEsY0FBTSxVQUFVLENBQUM7QUFDakIsaUJBQVMsSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUssR0FBRztBQUM3QyxnQkFBTSxNQUFNLFdBQVcsSUFBSSxDQUFDO0FBQzVCLGdCQUFNLE1BQU0sV0FBVyxJQUFJLENBQUM7QUFFNUIsY0FBSSxNQUFNLFFBQVEsR0FBRyxHQUFHO0FBQ3RCLHFCQUFTLElBQUksR0FBRyxJQUFJLElBQUksUUFBUSxLQUFLO0FBQ25DLGtCQUFJLFFBQVEsR0FBRyxHQUFHO0FBQ2hCLHdCQUFRLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQUEsY0FDNUIsT0FBTztBQUNMLHdCQUFRLEdBQUcsSUFBSSxJQUFJLENBQUM7QUFBQSxjQUN0QjtBQUFBLFlBQ0Y7QUFBQSxVQUNGLE9BQU87QUFDTCxvQkFBUSxHQUFHLElBQUk7QUFBQSxVQUNqQjtBQUFBLFFBQ0Y7QUFHQSxZQUFJO0FBRUosY0FBTSxFQUFFLFVBQVUsS0FBSyxJQUFJLE9BQU8sSUFBSTtBQUV0QyxnQkFBUSxzQkFBc0IsSUFBSSxRQUFRLEdBQUcsUUFBUSxHQUFHLE9BQU8sSUFBSSxJQUFJLEtBQUssRUFBRTtBQUM5RSxnQkFBUSxtQkFBbUIsSUFBSTtBQUUvQixjQUFNLFFBQVEsQ0FBQyxRQUFRO0FBQ3JCLGNBQUksUUFBUSxXQUFXLFFBQVEsV0FBVztBQUN4QztBQUFBLFVBQ0Y7QUFFQSxnQkFBTSxPQUFPLElBQUksb0JBQW9CO0FBRXJDLGVBQUssYUFBYSxRQUFRLFNBQVMsR0FBRztBQUV0QyxjQUFJLFVBQVUsTUFBTTtBQUNsQixpQkFBSyxRQUFRLFFBQVEsR0FBRztBQUFBLFVBQzFCO0FBSUEsZUFBSyxRQUFRLE1BQU0sR0FBRztBQUN0QixpQkFBTyxNQUFNLEVBQUUsT0FBTyxXQUFXLEdBQUcsSUFBSTtBQUN4QyxpQkFBTyxPQUFPLEVBQUU7QUFBQSxRQUNsQjtBQUVBLFlBQUk7QUFHRixrQkFBUSxVQUFVLEtBQUs7QUFBQSxRQUN6QixTQUFTLEtBQUs7QUFDWixlQUFLLGFBQWEsUUFBUSxTQUFTLEdBQUc7QUFBQSxRQUN4QztBQUVBLFlBQUksUUFBUSxTQUFTO0FBQ25CLGlCQUFPO0FBQUEsUUFDVDtBQUVBLFlBQUksV0FBVyxXQUFXO0FBQ3hCLGtCQUFRLElBQUk7QUFLWixtQkFBUyxRQUFRLFFBQVEsU0FBUyxFQUFFLFdBQVcsT0FBTyxPQUFPLENBQUM7QUFFOUQsY0FBSSxPQUFPLE1BQU0sQ0FBQyxPQUFPLFNBQVM7QUFDaEMsb0JBQVEsVUFBVSxNQUFNLE1BQU0sTUFBTTtBQUNwQyxjQUFFLFFBQVEsWUFBWTtBQUN0QixtQkFBTyxNQUFNLEVBQUUsT0FBTyxXQUFXLEdBQUcsSUFBSTtBQUFBLFVBQzFDLE9BQU87QUFDTCxtQkFBTyxLQUFLLFNBQVMsTUFBTTtBQUN6QixzQkFBUSxVQUFVLE1BQU0sTUFBTSxNQUFNO0FBQ3BDLGdCQUFFLFFBQVEsWUFBWTtBQUN0QixxQkFBTyxNQUFNLEVBQUUsT0FBTyxXQUFXLEdBQUcsSUFBSTtBQUFBLFlBQzFDLENBQUM7QUFBQSxVQUNIO0FBRUEsaUJBQU8sS0FBSyxTQUFTLE1BQU07QUFDekIsb0JBQVEsWUFBWSxLQUFLO0FBQ3pCLGdCQUFJLFFBQVEsWUFBWSxNQUFNO0FBQUcsc0JBQVEsTUFBTTtBQUFBLFVBQ2pELENBQUM7QUFFRCxpQkFBTztBQUFBLFFBQ1Q7QUFLQSxnQkFBUSxpQkFBaUIsSUFBSUE7QUFDN0IsZ0JBQVEsbUJBQW1CLElBQUk7QUFXL0IsY0FBTSxpQkFDSixXQUFXLFNBQ1gsV0FBVyxVQUNYLFdBQVc7QUFHYixZQUFJLFFBQVEsT0FBTyxLQUFLLFNBQVMsWUFBWTtBQUUzQyxlQUFLLEtBQUssQ0FBQztBQUFBLFFBQ2I7QUFFQSxZQUFJLGdCQUFnQixLQUFLLFdBQVcsSUFBSTtBQUV4QyxZQUFJLEtBQUssZUFBZSxJQUFJLEdBQUc7QUFDN0IsNERBQWdCLGVBQWdDO0FBRWhELGdCQUFNLENBQUMsWUFBWSxXQUFXLElBQUksWUFBWSxJQUFJO0FBQ2xELGtCQUFRLGNBQWMsSUFBSTtBQUUxQixpQkFBTyxXQUFXO0FBQ2xCLDBCQUFnQixXQUFXO0FBQUEsUUFDN0I7QUFFQSxZQUFJLGlCQUFpQixNQUFNO0FBQ3pCLDBCQUFnQixRQUFRO0FBQUEsUUFDMUI7QUFFQSxZQUFJLGtCQUFrQixLQUFLLENBQUMsZ0JBQWdCO0FBTTFDLDBCQUFnQjtBQUFBLFFBQ2xCO0FBSUEsWUFBSSx3QkFBd0IsTUFBTSxLQUFLLGdCQUFnQixLQUFLLFFBQVEsaUJBQWlCLFFBQVEsUUFBUSxrQkFBa0IsZUFBZTtBQUNwSSxjQUFJLE9BQU8sb0JBQW9CLEdBQUc7QUFDaEMsaUJBQUssYUFBYSxRQUFRLFNBQVMsSUFBSSxrQ0FBa0MsQ0FBQztBQUMxRSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxrQkFBUSxZQUFZLElBQUksa0NBQWtDLENBQUM7QUFBQSxRQUM3RDtBQUVBLFlBQUksaUJBQWlCLE1BQU07QUFDekIsaUJBQU8sTUFBTSxzQ0FBc0M7QUFDbkQsa0JBQVEsMkJBQTJCLElBQUksR0FBRyxhQUFhO0FBQUEsUUFDekQ7QUFFQSxnQkFBUSxJQUFJO0FBRVosY0FBTSxrQkFBa0IsV0FBVyxTQUFTLFdBQVcsVUFBVSxTQUFTO0FBQzFFLFlBQUksZ0JBQWdCO0FBQ2xCLGtCQUFRLG1CQUFtQixJQUFJO0FBQy9CLG1CQUFTLFFBQVEsUUFBUSxTQUFTLEVBQUUsV0FBVyxpQkFBaUIsT0FBTyxDQUFDO0FBRXhFLGlCQUFPLEtBQUssWUFBWSxXQUFXO0FBQUEsUUFDckMsT0FBTztBQUNMLG1CQUFTLFFBQVEsUUFBUSxTQUFTO0FBQUEsWUFDaEMsV0FBVztBQUFBLFlBQ1g7QUFBQSxVQUNGLENBQUM7QUFDRCxzQkFBWTtBQUFBLFFBQ2Q7QUFHQSxVQUFFLFFBQVEsWUFBWTtBQUV0QixlQUFPLEtBQUssWUFBWSxDQUFBQyxhQUFXO0FBQ2pDLGdCQUE4RCxLQUFBQSxVQUFyRCxFQTliYixDQThiYSxzQkFBc0IsV0E5Ym5DLElBOGJrRSxJQUFoQix3QkFBZ0IsSUFBaEIsQ0FBckM7QUFDVCxrQkFBUSxrQkFBa0I7QUFPMUIsY0FBSSxRQUFRLFNBQVM7QUFDbkIsa0JBQU0sTUFBTSxJQUFJLG9CQUFvQjtBQUNwQyxpQkFBSyxhQUFhLFFBQVEsU0FBUyxHQUFHO0FBQ3RDLGlCQUFLLFFBQVEsUUFBUSxHQUFHO0FBQ3hCO0FBQUEsVUFDRjtBQUVBLGNBQUksUUFBUSxVQUFVLE9BQU8sVUFBVSxHQUFHLGVBQWUsV0FBVyxHQUFHLE9BQU8sT0FBTyxLQUFLLE1BQU0sR0FBRyxFQUFFLE1BQU0sT0FBTztBQUNoSCxtQkFBTyxNQUFNO0FBQUEsVUFDZjtBQUVBLGlCQUFPLEdBQUcsUUFBUSxDQUFDLFVBQVU7QUFDM0IsZ0JBQUksUUFBUSxPQUFPLEtBQUssTUFBTSxPQUFPO0FBQ25DLHFCQUFPLE1BQU07QUFBQSxZQUNmO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSCxDQUFDO0FBRUQsZUFBTyxLQUFLLE9BQU8sTUFBTTtBQXhkM0I7QUE0ZEksZ0JBQUksWUFBTyxVQUFQLG1CQUFjLFVBQVMsUUFBUSxPQUFPLE1BQU0sUUFBUSxHQUFHO0FBQ3pELG9CQUFRLFdBQVcsQ0FBQyxDQUFDO0FBQUEsVUFDdkI7QUFFQSxjQUFJLFFBQVEsWUFBWSxNQUFNLEdBQUc7QUFLL0Isb0JBQVEsTUFBTTtBQUFBLFVBQ2hCO0FBRUEsZ0JBQU0sSUFBSSxtQkFBbUIscUNBQXFDLENBQUM7QUFDbkUsaUJBQU8sTUFBTSxFQUFFLE9BQU8sV0FBVyxHQUFHLElBQUk7QUFDeEMsaUJBQU8sV0FBVyxJQUFJLE9BQU8sV0FBVztBQUN4QyxpQkFBTyxPQUFPLEVBQUU7QUFBQSxRQUNsQixDQUFDO0FBRUQsZUFBTyxLQUFLLFNBQVMsTUFBTTtBQUN6QixrQkFBUSxZQUFZLEtBQUs7QUFDekIsY0FBSSxRQUFRLFlBQVksTUFBTSxHQUFHO0FBQy9CLG9CQUFRLE1BQU07QUFBQSxVQUNoQjtBQUFBLFFBQ0YsQ0FBQztBQUVELGVBQU8sS0FBSyxTQUFTLFNBQVUsS0FBSztBQUNsQyxnQkFBTSxHQUFHO0FBQUEsUUFDWCxDQUFDO0FBRUQsZUFBTyxLQUFLLGNBQWMsQ0FBQyxNQUFNLFNBQVM7QUFDeEMsZ0JBQU0sSUFBSSxtQkFBbUIsd0NBQXdDLElBQUksVUFBVSxJQUFJLEVBQUUsQ0FBQztBQUFBLFFBQzVGLENBQUM7QUFrQkQsZUFBTztBQUVQLGlCQUFTLGNBQWU7QUFFdEIsY0FBSSxDQUFDLFFBQVEsa0JBQWtCLEdBQUc7QUFDaEM7QUFBQSxjQUNFO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0EsT0FBTyxPQUFPO0FBQUEsY0FDZDtBQUFBLGNBQ0E7QUFBQSxZQUNGO0FBQUEsVUFDRixXQUFXLEtBQUssU0FBUyxJQUFJLEdBQUc7QUFDOUI7QUFBQSxjQUNFO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0EsT0FBTyxPQUFPO0FBQUEsY0FDZDtBQUFBLGNBQ0E7QUFBQSxZQUNGO0FBQUEsVUFDRixXQUFXLEtBQUssV0FBVyxJQUFJLEdBQUc7QUFDaEMsZ0JBQUksT0FBTyxLQUFLLFdBQVcsWUFBWTtBQUNyQztBQUFBLGdCQUNFO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQSxLQUFLLE9BQU87QUFBQSxnQkFDWjtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0EsT0FBTyxPQUFPO0FBQUEsZ0JBQ2Q7QUFBQSxnQkFDQTtBQUFBLGNBQ0Y7QUFBQSxZQUNGLE9BQU87QUFDTDtBQUFBLGdCQUNFO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQTtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQSxPQUFPLE9BQU87QUFBQSxnQkFDZDtBQUFBLGdCQUNBO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGLFdBQVcsS0FBSyxTQUFTLElBQUksR0FBRztBQUM5QjtBQUFBLGNBQ0U7QUFBQSxjQUNBLE9BQU8sT0FBTztBQUFBLGNBQ2Q7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0Y7QUFBQSxVQUNGLFdBQVcsS0FBSyxXQUFXLElBQUksR0FBRztBQUNoQztBQUFBLGNBQ0U7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQSxPQUFPLE9BQU87QUFBQSxjQUNkO0FBQUEsY0FDQTtBQUFBLFlBQ0Y7QUFBQSxVQUNGLE9BQU87QUFDTCxtQkFBTyxLQUFLO0FBQUEsVUFDZDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsZUFBUyxZQUFhLE9BQU8sVUFBVSxNQUFNLFFBQVEsU0FBUyxRQUFRLGVBQWUsZ0JBQWdCO0FBQ25HLFlBQUk7QUFDRixjQUFJLFFBQVEsUUFBUSxLQUFLLFNBQVMsSUFBSSxHQUFHO0FBQ3ZDLG1CQUFPLGtCQUFrQixLQUFLLFlBQVksc0NBQXNDO0FBQ2hGLHFCQUFTLEtBQUs7QUFDZCxxQkFBUyxNQUFNLElBQUk7QUFDbkIscUJBQVMsT0FBTztBQUNoQixxQkFBUyxJQUFJO0FBRWIsb0JBQVEsV0FBVyxJQUFJO0FBQUEsVUFDekI7QUFFQSxjQUFJLENBQUMsZ0JBQWdCO0FBQ25CLG1CQUFPLE1BQU0sSUFBSTtBQUFBLFVBQ25CO0FBRUEsa0JBQVEsY0FBYztBQUN0QixpQkFBTyxPQUFPLEVBQUU7QUFBQSxRQUNsQixTQUFTLE9BQU87QUFDZCxnQkFBTSxLQUFLO0FBQUEsUUFDYjtBQUFBLE1BQ0Y7QUFFQSxlQUFTLFlBQWEsT0FBTyxRQUFRLGdCQUFnQixVQUFVLE1BQU0sUUFBUSxTQUFTLGVBQWU7QUFDbkcsZUFBTyxrQkFBa0IsS0FBSyxPQUFPLFFBQVEsTUFBTSxHQUFHLGlDQUFpQztBQUd2RixjQUFNLE9BQU87QUFBQSxVQUNYO0FBQUEsVUFDQTtBQUFBLFVBQ0EsQ0FBQyxRQUFRO0FBQ1AsZ0JBQUksS0FBSztBQUNQLG1CQUFLLFFBQVEsTUFBTSxHQUFHO0FBQ3RCLG9CQUFNLEdBQUc7QUFBQSxZQUNYLE9BQU87QUFDTCxtQkFBSyxtQkFBbUIsSUFBSTtBQUM1QixzQkFBUSxjQUFjO0FBRXRCLGtCQUFJLENBQUMsZ0JBQWdCO0FBQ25CLHVCQUFPLE1BQU0sSUFBSTtBQUFBLGNBQ25CO0FBRUEscUJBQU8sT0FBTyxFQUFFO0FBQUEsWUFDbEI7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUVBLGFBQUssWUFBWSxNQUFNLFFBQVEsVUFBVTtBQUV6QyxpQkFBUyxXQUFZLE9BQU87QUFDMUIsa0JBQVEsV0FBVyxLQUFLO0FBQUEsUUFDMUI7QUFBQSxNQUNGO0FBRUEsZUFBZSxVQUFXLE9BQU8sVUFBVSxNQUFNLFFBQVEsU0FBUyxRQUFRLGVBQWUsZ0JBQWdCO0FBQUE7QUFDdkcsaUJBQU8sa0JBQWtCLEtBQUssTUFBTSxvQ0FBb0M7QUFFeEUsY0FBSTtBQUNGLGdCQUFJLGlCQUFpQixRQUFRLGtCQUFrQixLQUFLLE1BQU07QUFDeEQsb0JBQU0sSUFBSSxrQ0FBa0M7QUFBQSxZQUM5QztBQUVBLGtCQUFNLFNBQVMsT0FBTyxLQUFLLE1BQU0sS0FBSyxZQUFZLENBQUM7QUFFbkQscUJBQVMsS0FBSztBQUNkLHFCQUFTLE1BQU0sTUFBTTtBQUNyQixxQkFBUyxPQUFPO0FBQ2hCLHFCQUFTLElBQUk7QUFFYixvQkFBUSxXQUFXLE1BQU07QUFDekIsb0JBQVEsY0FBYztBQUV0QixnQkFBSSxDQUFDLGdCQUFnQjtBQUNuQixxQkFBTyxNQUFNLElBQUk7QUFBQSxZQUNuQjtBQUVBLG1CQUFPLE9BQU8sRUFBRTtBQUFBLFVBQ2xCLFNBQVMsS0FBSztBQUNaLGtCQUFNLEdBQUc7QUFBQSxVQUNYO0FBQUEsUUFDRjtBQUFBO0FBRUEsZUFBZSxjQUFlLE9BQU8sVUFBVSxNQUFNLFFBQVEsU0FBUyxRQUFRLGVBQWUsZ0JBQWdCO0FBQUE7QUFDM0csaUJBQU8sa0JBQWtCLEtBQUssT0FBTyxRQUFRLE1BQU0sR0FBRyxtQ0FBbUM7QUFFekYsY0FBSSxXQUFXO0FBQ2YsbUJBQVMsVUFBVztBQUNsQixnQkFBSSxVQUFVO0FBQ1osb0JBQU0sS0FBSztBQUNYLHlCQUFXO0FBQ1gsaUJBQUc7QUFBQSxZQUNMO0FBQUEsVUFDRjtBQUVBLGdCQUFNLGVBQWUsTUFBTSxJQUFJLFFBQVEsQ0FBQ0MsVUFBUyxXQUFXO0FBQzFELG1CQUFPLGFBQWEsSUFBSTtBQUV4QixnQkFBSSxPQUFPLE1BQU0sR0FBRztBQUNsQixxQkFBTyxPQUFPLE1BQU0sQ0FBQztBQUFBLFlBQ3ZCLE9BQU87QUFDTCx5QkFBV0E7QUFBQSxZQUNiO0FBQUEsVUFDRixDQUFDO0FBRUQsbUJBQ0csR0FBRyxTQUFTLE9BQU8sRUFDbkIsR0FBRyxTQUFTLE9BQU87QUFFdEIsY0FBSTtBQUVGO0FBQUEseUNBQTBCLE9BQTFCLDBFQUFnQztBQUFyQixzQkFBTSxRQUFqQjtBQUNFLG9CQUFJLE9BQU8sTUFBTSxHQUFHO0FBQ2xCLHdCQUFNLE9BQU8sTUFBTTtBQUFBLGdCQUNyQjtBQUVBLHNCQUFNLE1BQU0sU0FBUyxNQUFNLEtBQUs7QUFDaEMsd0JBQVEsV0FBVyxLQUFLO0FBQ3hCLG9CQUFJLENBQUMsS0FBSztBQUNSLHdCQUFNLGFBQWE7QUFBQSxnQkFDckI7QUFBQSxjQUNGO0FBQUEscUJBVkEsTUF6c0JKO0FBeXNCSTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFZQSxxQkFBUyxJQUFJO0FBRWIsb0JBQVEsY0FBYztBQUV0QixnQkFBSSxDQUFDLGdCQUFnQjtBQUNuQixxQkFBTyxNQUFNLElBQUk7QUFBQSxZQUNuQjtBQUVBLG1CQUFPLE9BQU8sRUFBRTtBQUFBLFVBQ2xCLFNBQVMsS0FBSztBQUNaLGtCQUFNLEdBQUc7QUFBQSxVQUNYLFVBQUU7QUFDQSxxQkFDRyxJQUFJLFNBQVMsT0FBTyxFQUNwQixJQUFJLFNBQVMsT0FBTztBQUFBLFVBQ3pCO0FBQUEsUUFDRjtBQUFBO0FBRUEsYUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDdnVCakI7QUFBQTtBQUFBO0FBRUEsVUFBTSxPQUFPO0FBQ2IsVUFBTSxFQUFFLFVBQVUsSUFBSTtBQUN0QixVQUFNLFNBQVMsVUFBUSxRQUFhO0FBQ3BDLFVBQU0sRUFBRSxxQkFBcUIsSUFBSTtBQUNqQyxVQUFNLEtBQUssVUFBUSxRQUFhO0FBRWhDLFVBQU0sMEJBQTBCLENBQUMsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEdBQUc7QUFFN0QsVUFBTSxRQUFRLE9BQU8sTUFBTTtBQUUzQixVQUFNLG9CQUFOLE1BQXdCO0FBQUEsUUFDdEIsWUFBYSxNQUFNO0FBQ2pCLGVBQUssS0FBSyxJQUFJO0FBQ2QsZUFBSyxTQUFTLElBQUk7QUFBQSxRQUNwQjtBQUFBLFFBRUEsQ0FBUyxPQUFPLGFBQWEsSUFBSztBQUFBO0FBQ2hDLG1CQUFPLENBQUMsS0FBSyxTQUFTLEdBQUcsV0FBVztBQUNwQyxpQkFBSyxTQUFTLElBQUk7QUFDbEIsK0JBQVEsS0FBSyxLQUFLO0FBQUEsVUFDcEI7QUFBQTtBQUFBLE1BQ0Y7QUFFQSxVQUFNLGtCQUFOLE1BQXNCO0FBQUEsUUFDcEIsWUFBYSxVQUFVLGlCQUFpQixNQUFNLFNBQVM7QUFDckQsY0FBSSxtQkFBbUIsU0FBUyxDQUFDLE9BQU8sVUFBVSxlQUFlLEtBQUssa0JBQWtCLElBQUk7QUFDMUYsa0JBQU0sSUFBSSxxQkFBcUIsMkNBQTJDO0FBQUEsVUFDNUU7QUFFQSxlQUFLLGdCQUFnQixTQUFTLEtBQUssUUFBUSxLQUFLLE9BQU87QUFFdkQsZUFBSyxXQUFXO0FBQ2hCLGVBQUssV0FBVztBQUNoQixlQUFLLFFBQVE7QUFDYixlQUFLLE9BQU8saUNBQUssT0FBTCxFQUFXLGlCQUFpQixFQUFFO0FBQzFDLGVBQUssa0JBQWtCO0FBQ3ZCLGVBQUssVUFBVTtBQUNmLGVBQUssVUFBVSxDQUFDO0FBQ2hCLGVBQUssMEJBQTBCO0FBRS9CLGNBQUksS0FBSyxTQUFTLEtBQUssS0FBSyxJQUFJLEdBQUc7QUFJakMsZ0JBQUksS0FBSyxXQUFXLEtBQUssS0FBSyxJQUFJLE1BQU0sR0FBRztBQUN6QyxtQkFBSyxLQUFLLEtBQ1AsR0FBRyxRQUFRLFdBQVk7QUFDdEIsdUJBQU8sS0FBSztBQUFBLGNBQ2QsQ0FBQztBQUFBLFlBQ0w7QUFFQSxnQkFBSSxPQUFPLEtBQUssS0FBSyxLQUFLLG9CQUFvQixXQUFXO0FBQ3ZELG1CQUFLLEtBQUssS0FBSyxTQUFTLElBQUk7QUFDNUIsaUJBQUcsVUFBVSxHQUFHLEtBQUssS0FBSyxLQUFLLE1BQU0sUUFBUSxXQUFZO0FBQ3ZELHFCQUFLLFNBQVMsSUFBSTtBQUFBLGNBQ3BCLENBQUM7QUFBQSxZQUNIO0FBQUEsVUFDRixXQUFXLEtBQUssS0FBSyxRQUFRLE9BQU8sS0FBSyxLQUFLLEtBQUssV0FBVyxZQUFZO0FBSXhFLGlCQUFLLEtBQUssT0FBTyxJQUFJLGtCQUFrQixLQUFLLEtBQUssSUFBSTtBQUFBLFVBQ3ZELFdBQ0UsS0FBSyxLQUFLLFFBQ1YsT0FBTyxLQUFLLEtBQUssU0FBUyxZQUMxQixDQUFDLFlBQVksT0FBTyxLQUFLLEtBQUssSUFBSSxLQUNsQyxLQUFLLFdBQVcsS0FBSyxLQUFLLElBQUksR0FDOUI7QUFHQSxpQkFBSyxLQUFLLE9BQU8sSUFBSSxrQkFBa0IsS0FBSyxLQUFLLElBQUk7QUFBQSxVQUN2RDtBQUFBLFFBQ0Y7QUFBQSxRQUVBLFVBQVcsT0FBTztBQUNoQixlQUFLLFFBQVE7QUFDYixlQUFLLFFBQVEsVUFBVSxPQUFPLEVBQUUsU0FBUyxLQUFLLFFBQVEsQ0FBQztBQUFBLFFBQ3pEO0FBQUEsUUFFQSxVQUFXLFlBQVksU0FBUyxRQUFRO0FBQ3RDLGVBQUssUUFBUSxVQUFVLFlBQVksU0FBUyxNQUFNO0FBQUEsUUFDcEQ7QUFBQSxRQUVBLFFBQVMsT0FBTztBQUNkLGVBQUssUUFBUSxRQUFRLEtBQUs7QUFBQSxRQUM1QjtBQUFBLFFBRUEsVUFBVyxZQUFZLFNBQVMsUUFBUSxZQUFZO0FBQ2xELGVBQUssV0FBVyxLQUFLLFFBQVEsVUFBVSxLQUFLLG1CQUFtQixLQUFLLFlBQVksS0FBSyxLQUFLLElBQUksSUFDMUYsT0FDQSxjQUFjLFlBQVksT0FBTztBQUVyQyxjQUFJLEtBQUssS0FBSyxzQkFBc0IsS0FBSyxRQUFRLFVBQVUsS0FBSyxpQkFBaUI7QUFDL0UsZ0JBQUksS0FBSyxTQUFTO0FBQ2hCLG1CQUFLLFFBQVEsTUFBTSxJQUFJLE1BQU0sZUFBZSxDQUFDO0FBQUEsWUFDL0M7QUFFQSxpQkFBSywwQkFBMEI7QUFDL0IsaUJBQUssTUFBTSxJQUFJLE1BQU0sZUFBZSxDQUFDO0FBQ3JDO0FBQUEsVUFDRjtBQUVBLGNBQUksS0FBSyxLQUFLLFFBQVE7QUFDcEIsaUJBQUssUUFBUSxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssTUFBTSxLQUFLLEtBQUssTUFBTSxDQUFDO0FBQUEsVUFDN0Q7QUFFQSxjQUFJLENBQUMsS0FBSyxVQUFVO0FBQ2xCLG1CQUFPLEtBQUssUUFBUSxVQUFVLFlBQVksU0FBUyxRQUFRLFVBQVU7QUFBQSxVQUN2RTtBQUVBLGdCQUFNLEVBQUUsUUFBUSxVQUFVLE9BQU8sSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssVUFBVSxLQUFLLEtBQUssVUFBVSxJQUFJLElBQUksS0FBSyxLQUFLLE1BQU0sS0FBSyxLQUFLLE1BQU0sQ0FBQyxDQUFDO0FBQ3hJLGdCQUFNQyxRQUFPLFNBQVMsR0FBRyxRQUFRLEdBQUcsTUFBTSxLQUFLO0FBSy9DLGVBQUssS0FBSyxVQUFVLG9CQUFvQixLQUFLLEtBQUssU0FBUyxlQUFlLEtBQUssS0FBSyxLQUFLLFdBQVcsTUFBTTtBQUMxRyxlQUFLLEtBQUssT0FBT0E7QUFDakIsZUFBSyxLQUFLLFNBQVM7QUFDbkIsZUFBSyxLQUFLLGtCQUFrQjtBQUM1QixlQUFLLEtBQUssUUFBUTtBQUlsQixjQUFJLGVBQWUsT0FBTyxLQUFLLEtBQUssV0FBVyxRQUFRO0FBQ3JELGlCQUFLLEtBQUssU0FBUztBQUNuQixpQkFBSyxLQUFLLE9BQU87QUFBQSxVQUNuQjtBQUFBLFFBQ0Y7QUFBQSxRQUVBLE9BQVEsT0FBTztBQUNiLGNBQUksS0FBSyxVQUFVO0FBQUEsVUFrQm5CLE9BQU87QUFDTCxtQkFBTyxLQUFLLFFBQVEsT0FBTyxLQUFLO0FBQUEsVUFDbEM7QUFBQSxRQUNGO0FBQUEsUUFFQSxXQUFZLFVBQVU7QUFDcEIsY0FBSSxLQUFLLFVBQVU7QUFVakIsaUJBQUssV0FBVztBQUNoQixpQkFBSyxRQUFRO0FBRWIsaUJBQUssU0FBUyxLQUFLLE1BQU0sSUFBSTtBQUFBLFVBQy9CLE9BQU87QUFDTCxpQkFBSyxRQUFRLFdBQVcsUUFBUTtBQUFBLFVBQ2xDO0FBQUEsUUFDRjtBQUFBLFFBRUEsV0FBWSxPQUFPO0FBQ2pCLGNBQUksS0FBSyxRQUFRLFlBQVk7QUFDM0IsaUJBQUssUUFBUSxXQUFXLEtBQUs7QUFBQSxVQUMvQjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsZUFBUyxjQUFlLFlBQVksU0FBUztBQUMzQyxZQUFJLHdCQUF3QixRQUFRLFVBQVUsTUFBTSxJQUFJO0FBQ3RELGlCQUFPO0FBQUEsUUFDVDtBQUVBLGlCQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsUUFBUSxLQUFLLEdBQUc7QUFDMUMsY0FBSSxRQUFRLENBQUMsRUFBRSxXQUFXLEtBQUssS0FBSyxtQkFBbUIsUUFBUSxDQUFDLENBQUMsTUFBTSxZQUFZO0FBQ2pGLG1CQUFPLFFBQVEsSUFBSSxDQUFDO0FBQUEsVUFDdEI7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUdBLGVBQVMsbUJBQW9CLFFBQVEsZUFBZSxlQUFlO0FBQ2pFLFlBQUksT0FBTyxXQUFXLEdBQUc7QUFDdkIsaUJBQU8sS0FBSyxtQkFBbUIsTUFBTSxNQUFNO0FBQUEsUUFDN0M7QUFDQSxZQUFJLGlCQUFpQixLQUFLLG1CQUFtQixNQUFNLEVBQUUsV0FBVyxVQUFVLEdBQUc7QUFDM0UsaUJBQU87QUFBQSxRQUNUO0FBQ0EsWUFBSSxrQkFBa0IsT0FBTyxXQUFXLE1BQU0sT0FBTyxXQUFXLEtBQUssT0FBTyxXQUFXLEtBQUs7QUFDMUYsZ0JBQU0sT0FBTyxLQUFLLG1CQUFtQixNQUFNO0FBQzNDLGlCQUFPLFNBQVMsbUJBQW1CLFNBQVMsWUFBWSxTQUFTO0FBQUEsUUFDbkU7QUFDQSxlQUFPO0FBQUEsTUFDVDtBQUdBLGVBQVMsb0JBQXFCLFNBQVMsZUFBZSxlQUFlO0FBQ25FLGNBQU0sTUFBTSxDQUFDO0FBQ2IsWUFBSSxNQUFNLFFBQVEsT0FBTyxHQUFHO0FBQzFCLG1CQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsUUFBUSxLQUFLLEdBQUc7QUFDMUMsZ0JBQUksQ0FBQyxtQkFBbUIsUUFBUSxDQUFDLEdBQUcsZUFBZSxhQUFhLEdBQUc7QUFDakUsa0JBQUksS0FBSyxRQUFRLENBQUMsR0FBRyxRQUFRLElBQUksQ0FBQyxDQUFDO0FBQUEsWUFDckM7QUFBQSxVQUNGO0FBQUEsUUFDRixXQUFXLFdBQVcsT0FBTyxZQUFZLFVBQVU7QUFDakQscUJBQVcsT0FBTyxPQUFPLEtBQUssT0FBTyxHQUFHO0FBQ3RDLGdCQUFJLENBQUMsbUJBQW1CLEtBQUssZUFBZSxhQUFhLEdBQUc7QUFDMUQsa0JBQUksS0FBSyxLQUFLLFFBQVEsR0FBRyxDQUFDO0FBQUEsWUFDNUI7QUFBQSxVQUNGO0FBQUEsUUFDRixPQUFPO0FBQ0wsaUJBQU8sV0FBVyxNQUFNLHVDQUF1QztBQUFBLFFBQ2pFO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFFQSxhQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUN2T2pCO0FBQUE7QUFBQTtBQUVBLFVBQU0sa0JBQWtCO0FBRXhCLGVBQVMsMEJBQTJCLEVBQUUsaUJBQWlCLHVCQUF1QixHQUFHO0FBQy9FLGVBQU8sQ0FBQyxhQUFhO0FBQ25CLGlCQUFPLFNBQVMsVUFBVyxNQUFNLFNBQVM7QUFDeEMsa0JBQU0sRUFBRSxrQkFBa0IsdUJBQXVCLElBQUk7QUFFckQsZ0JBQUksQ0FBQyxpQkFBaUI7QUFDcEIscUJBQU8sU0FBUyxNQUFNLE9BQU87QUFBQSxZQUMvQjtBQUVBLGtCQUFNLGtCQUFrQixJQUFJLGdCQUFnQixVQUFVLGlCQUFpQixNQUFNLE9BQU87QUFDcEYsbUJBQU8saUNBQUssT0FBTCxFQUFXLGlCQUFpQixFQUFFO0FBQ3JDLG1CQUFPLFNBQVMsTUFBTSxlQUFlO0FBQUEsVUFDdkM7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLGFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQ3BCakI7QUFBQTtBQUFBO0FBSUEsVUFBTSxTQUFTLFVBQVEsUUFBYTtBQUNwQyxVQUFNLE1BQU0sVUFBUSxLQUFVO0FBQzlCLFVBQU0sT0FBTyxVQUFRLE1BQVc7QUFDaEMsVUFBTSxPQUFPO0FBQ2IsVUFBTSxFQUFFLFNBQVMsSUFBSTtBQUNyQixVQUFNLFVBQVU7QUFDaEIsVUFBTSxpQkFBaUI7QUFDdkIsVUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsSUFBSTtBQUNKLFVBQU0saUJBQWlCO0FBQ3ZCLFVBQU07QUFBQSxRQUNKO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRixJQUFJO0FBQ0osVUFBTSxZQUFZO0FBQ2xCLFVBQU0sWUFBWTtBQUNsQixVQUFJLDhCQUE4QjtBQUVsQyxVQUFNLGlCQUFpQixPQUFPLGdCQUFnQjtBQUU5QyxVQUFNLE9BQU8sTUFBTTtBQUFBLE1BQUM7QUFFcEIsZUFBUyxjQUFlLFFBQVE7QUFuRWhDO0FBb0VFLGdCQUFPLGtCQUFPLFdBQVcsTUFBbEIsYUFBdUIsWUFBTyxZQUFZLE1BQW5CLG1CQUFzQixzQkFBN0MsWUFBa0U7QUFBQSxNQUMzRTtBQUtBLFVBQU0sU0FBTixjQUFxQixlQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTWxDLFlBQWEsS0FBSztBQUFBLFVBQ2hCO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQSxTQUFBQztBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUE7QUFBQSxVQUVBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGLElBQUksQ0FBQyxHQUFHO0FBQ04sZ0JBQU0sRUFBRSxVQUFVLENBQUM7QUFFbkIsY0FBSSxjQUFjLFFBQVc7QUFDM0Isa0JBQU0sSUFBSSxxQkFBcUIsaURBQWlEO0FBQUEsVUFDbEY7QUFFQSxjQUFJLGtCQUFrQixRQUFXO0FBQy9CLGtCQUFNLElBQUkscUJBQXFCLHFFQUFxRTtBQUFBLFVBQ3RHO0FBRUEsY0FBSSxtQkFBbUIsUUFBVztBQUNoQyxrQkFBTSxJQUFJLHFCQUFxQixzRUFBc0U7QUFBQSxVQUN2RztBQUVBLGNBQUksZ0JBQWdCLFFBQVc7QUFDN0Isa0JBQU0sSUFBSSxxQkFBcUIsdURBQXVEO0FBQUEsVUFDeEY7QUFFQSxjQUFJLHdCQUF3QixRQUFXO0FBQ3JDLGtCQUFNLElBQUkscUJBQXFCLGtFQUFrRTtBQUFBLFVBQ25HO0FBRUEsY0FBSSxpQkFBaUIsUUFBUSxDQUFDLE9BQU8sU0FBUyxhQUFhLEdBQUc7QUFDNUQsa0JBQU0sSUFBSSxxQkFBcUIsdUJBQXVCO0FBQUEsVUFDeEQ7QUFFQSxjQUFJLGNBQWMsUUFBUSxPQUFPLGVBQWUsVUFBVTtBQUN4RCxrQkFBTSxJQUFJLHFCQUFxQixvQkFBb0I7QUFBQSxVQUNyRDtBQUVBLGNBQUksa0JBQWtCLFNBQVMsQ0FBQyxPQUFPLFNBQVMsY0FBYyxLQUFLLGlCQUFpQixJQUFJO0FBQ3RGLGtCQUFNLElBQUkscUJBQXFCLHdCQUF3QjtBQUFBLFVBQ3pEO0FBRUEsY0FBSSxvQkFBb0IsU0FBUyxDQUFDLE9BQU8sU0FBUyxnQkFBZ0IsS0FBSyxvQkFBb0IsSUFBSTtBQUM3RixrQkFBTSxJQUFJLHFCQUFxQiwwQkFBMEI7QUFBQSxVQUMzRDtBQUVBLGNBQUksdUJBQXVCLFNBQVMsQ0FBQyxPQUFPLFNBQVMsbUJBQW1CLEtBQUssdUJBQXVCLElBQUk7QUFDdEcsa0JBQU0sSUFBSSxxQkFBcUIsNkJBQTZCO0FBQUEsVUFDOUQ7QUFFQSxjQUFJLDZCQUE2QixRQUFRLENBQUMsT0FBTyxTQUFTLHlCQUF5QixHQUFHO0FBQ3BGLGtCQUFNLElBQUkscUJBQXFCLG1DQUFtQztBQUFBLFVBQ3BFO0FBRUEsY0FBSSxrQkFBa0IsU0FBUyxDQUFDLE9BQU8sVUFBVSxjQUFjLEtBQUssaUJBQWlCLElBQUk7QUFDdkYsa0JBQU0sSUFBSSxxQkFBcUIsbURBQW1EO0FBQUEsVUFDcEY7QUFFQSxjQUFJLGVBQWUsU0FBUyxDQUFDLE9BQU8sVUFBVSxXQUFXLEtBQUssY0FBYyxJQUFJO0FBQzlFLGtCQUFNLElBQUkscUJBQXFCLGdEQUFnRDtBQUFBLFVBQ2pGO0FBRUEsY0FBSUEsWUFBVyxRQUFRLE9BQU9BLGFBQVksY0FBYyxPQUFPQSxhQUFZLFVBQVU7QUFDbkYsa0JBQU0sSUFBSSxxQkFBcUIseUNBQXlDO0FBQUEsVUFDMUU7QUFFQSxjQUFJLG1CQUFtQixTQUFTLENBQUMsT0FBTyxVQUFVLGVBQWUsS0FBSyxrQkFBa0IsSUFBSTtBQUMxRixrQkFBTSxJQUFJLHFCQUFxQiwyQ0FBMkM7QUFBQSxVQUM1RTtBQUVBLGNBQUksd0JBQXdCLFNBQVMsQ0FBQyxPQUFPLFVBQVUsb0JBQW9CLEtBQUssdUJBQXVCLElBQUk7QUFDekcsa0JBQU0sSUFBSSxxQkFBcUIsZ0RBQWdEO0FBQUEsVUFDakY7QUFFQSxjQUFJLGdCQUFnQixTQUFTLE9BQU8saUJBQWlCLFlBQVksSUFBSSxLQUFLLFlBQVksTUFBTSxJQUFJO0FBQzlGLGtCQUFNLElBQUkscUJBQXFCLDhDQUE4QztBQUFBLFVBQy9FO0FBRUEsY0FBSSxtQkFBbUIsU0FBUyxDQUFDLE9BQU8sVUFBVSxlQUFlLEtBQUssa0JBQWtCLEtBQUs7QUFDM0Ysa0JBQU0sSUFBSSxxQkFBcUIsMkNBQTJDO0FBQUEsVUFDNUU7QUFFQSxjQUNFLGtDQUFrQyxTQUNqQyxDQUFDLE9BQU8sVUFBVSw4QkFBOEIsS0FBSyxpQ0FBaUMsS0FDdkY7QUFDQSxrQkFBTSxJQUFJLHFCQUFxQiwwREFBMEQ7QUFBQSxVQUMzRjtBQUdBLGNBQUksV0FBVyxRQUFRLE9BQU8sWUFBWSxXQUFXO0FBQ25ELGtCQUFNLElBQUkscUJBQXFCLHVDQUF1QztBQUFBLFVBQ3hFO0FBRUEsY0FBSSx3QkFBd0IsU0FBUyxPQUFPLHlCQUF5QixZQUFZLHVCQUF1QixJQUFJO0FBQzFHLGtCQUFNLElBQUkscUJBQXFCLGlFQUFpRTtBQUFBLFVBQ2xHO0FBRUEsY0FBSSxPQUFPQSxhQUFZLFlBQVk7QUFDakMsWUFBQUEsV0FBVSxlQUFlLCtEQUNwQixNQURvQjtBQUFBLGNBRXZCO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBLFNBQVM7QUFBQSxnQkFDTCxtQkFBbUIsRUFBRSxrQkFBa0IsK0JBQStCLElBQUksU0FDM0VBLFNBQ0o7QUFBQSxVQUNIO0FBRUEsZUFBSSw2Q0FBYyxXQUFVLE1BQU0sUUFBUSxhQUFhLE1BQU0sR0FBRztBQUM5RCxpQkFBSyxhQUFhLElBQUksYUFBYTtBQUNuQyxnQkFBSSxDQUFDLDZCQUE2QjtBQUNoQyw0Q0FBOEI7QUFDOUIsc0JBQVEsWUFBWSw2RUFBNkU7QUFBQSxnQkFDL0YsTUFBTTtBQUFBLGNBQ1IsQ0FBQztBQUFBLFlBQ0g7QUFBQSxVQUNGLE9BQU87QUFDTCxpQkFBSyxhQUFhLElBQUksQ0FBQywwQkFBMEIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQUEsVUFDdkU7QUFFQSxlQUFLLElBQUksSUFBSSxLQUFLLFlBQVksR0FBRztBQUNqQyxlQUFLLFVBQVUsSUFBSUE7QUFDbkIsZUFBSyxXQUFXLElBQUksY0FBYyxPQUFPLGFBQWE7QUFDdEQsZUFBSyxlQUFlLElBQUksaUJBQWlCLEtBQUs7QUFDOUMsZUFBSyx3QkFBd0IsSUFBSSxvQkFBb0IsT0FBTyxNQUFNO0FBQ2xFLGVBQUssb0JBQW9CLElBQUksdUJBQXVCLE9BQU8sTUFBUTtBQUNuRSxlQUFLLDBCQUEwQixJQUFJLDZCQUE2QixPQUFPLE1BQU07QUFDN0UsZUFBSyxzQkFBc0IsSUFBSSxLQUFLLHdCQUF3QjtBQUM1RCxlQUFLLFdBQVcsSUFBSTtBQUNwQixlQUFLLGFBQWEsSUFBSSxnQkFBZ0IsT0FBTyxlQUFlO0FBQzVELGVBQUssU0FBUyxJQUFJO0FBQ2xCLGVBQUssVUFBVSxJQUFJO0FBQ25CLGVBQUssV0FBVyxJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUUsUUFBUSxHQUFHLEtBQUssSUFBSSxFQUFFLE9BQU8sSUFBSSxLQUFLLElBQUksRUFBRSxJQUFJLEtBQUssRUFBRTtBQUFBO0FBQy9GLGVBQUssWUFBWSxJQUFJLGVBQWUsT0FBTyxjQUFjO0FBQ3pELGVBQUssZUFBZSxJQUFJLGtCQUFrQixPQUFPLGlCQUFpQjtBQUNsRSxlQUFLLG9CQUFvQixJQUFJLHVCQUF1QixPQUFPLE9BQU87QUFDbEUsZUFBSyxnQkFBZ0IsSUFBSTtBQUN6QixlQUFLLFlBQVksSUFBSTtBQUNyQixlQUFLLGNBQWMsSUFBSTtBQUN2QixlQUFLLGdCQUFnQixJQUFJLGtCQUFrQixLQUFLLGtCQUFrQjtBQUNsRSxlQUFLLHFCQUFxQixJQUFJLHdCQUF3QixPQUFPLHVCQUF1QjtBQUNwRixlQUFLLFlBQVksSUFBSTtBQVdyQixlQUFLLE1BQU0sSUFBSSxDQUFDO0FBQ2hCLGVBQUssV0FBVyxJQUFJO0FBQ3BCLGVBQUssV0FBVyxJQUFJO0FBRXBCLGVBQUssT0FBTyxJQUFJLENBQUMsU0FBUyxPQUFPLE1BQU0sSUFBSTtBQUMzQyxlQUFLLFFBQVEsSUFBSSxDQUFDLFFBQVEsUUFBUSxNQUFNLEdBQUc7QUFBQSxRQUM3QztBQUFBLFFBRUEsSUFBSSxhQUFjO0FBQ2hCLGlCQUFPLEtBQUssV0FBVztBQUFBLFFBQ3pCO0FBQUEsUUFFQSxJQUFJLFdBQVksT0FBTztBQUNyQixlQUFLLFdBQVcsSUFBSTtBQUNwQixlQUFLLE9BQU8sRUFBRSxJQUFJO0FBQUEsUUFDcEI7QUFBQSxRQUVBLEtBQUssUUFBUSxJQUFLO0FBQ2hCLGlCQUFPLEtBQUssTUFBTSxFQUFFLFNBQVMsS0FBSyxXQUFXO0FBQUEsUUFDL0M7QUFBQSxRQUVBLEtBQUssUUFBUSxJQUFLO0FBQ2hCLGlCQUFPLEtBQUssV0FBVyxJQUFJLEtBQUssV0FBVztBQUFBLFFBQzdDO0FBQUEsUUFFQSxLQUFLLEtBQUssSUFBSztBQUNiLGlCQUFPLEtBQUssTUFBTSxFQUFFLFNBQVMsS0FBSyxXQUFXO0FBQUEsUUFDL0M7QUFBQSxRQUVBLEtBQUssVUFBVSxJQUFLO0FBQ2xCLGlCQUFPLENBQUMsQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDLEtBQUssV0FBVyxLQUFLLENBQUMsS0FBSyxZQUFZLEVBQUU7QUFBQSxRQUMzRTtBQUFBLFFBRUEsS0FBSyxLQUFLLElBQUs7QUFsU2pCO0FBbVNJLGlCQUFPO0FBQUEsY0FDTCxVQUFLLFlBQVksTUFBakIsbUJBQW9CLEtBQUssVUFDeEIsS0FBSyxLQUFLLE1BQU0sY0FBYyxJQUFJLEtBQUssTUFDeEMsS0FBSyxRQUFRLElBQUk7QUFBQSxVQUNuQjtBQUFBLFFBQ0Y7QUFBQTtBQUFBLFFBR0EsQ0FBQyxRQUFRLEVBQUcsSUFBSTtBQUNkLGtCQUFRLElBQUk7QUFDWixlQUFLLEtBQUssV0FBVyxFQUFFO0FBQUEsUUFDekI7QUFBQSxRQUVBLENBQUMsU0FBUyxFQUFHLE1BQU0sU0FBUztBQUMxQixnQkFBTSxTQUFTLEtBQUssVUFBVSxLQUFLLElBQUksRUFBRTtBQUN6QyxnQkFBTSxVQUFVLElBQUksUUFBUSxRQUFRLE1BQU0sT0FBTztBQUVqRCxlQUFLLE1BQU0sRUFBRSxLQUFLLE9BQU87QUFDekIsY0FBSSxLQUFLLFNBQVMsR0FBRztBQUFBLFVBRXJCLFdBQVcsS0FBSyxXQUFXLFFBQVEsSUFBSSxLQUFLLFFBQVEsS0FBSyxXQUFXLFFBQVEsSUFBSSxHQUFHO0FBRWpGLGlCQUFLLFNBQVMsSUFBSTtBQUNsQiwyQkFBZSxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQUEsVUFDbkMsT0FBTztBQUNMLGlCQUFLLE9BQU8sRUFBRSxJQUFJO0FBQUEsVUFDcEI7QUFFQSxjQUFJLEtBQUssU0FBUyxLQUFLLEtBQUssVUFBVSxNQUFNLEtBQUssS0FBSyxLQUFLLEdBQUc7QUFDNUQsaUJBQUssVUFBVSxJQUFJO0FBQUEsVUFDckI7QUFFQSxpQkFBTyxLQUFLLFVBQVUsSUFBSTtBQUFBLFFBQzVCO0FBQUEsUUFFQSxDQUFPLE1BQU0sSUFBSztBQUFBO0FBR2hCLG1CQUFPLElBQUksUUFBUSxDQUFDQyxhQUFZO0FBQzlCLGtCQUFJLEtBQUssS0FBSyxHQUFHO0FBQ2YscUJBQUssY0FBYyxJQUFJQTtBQUFBLGNBQ3pCLE9BQU87QUFDTCxnQkFBQUEsU0FBUSxJQUFJO0FBQUEsY0FDZDtBQUFBLFlBQ0YsQ0FBQztBQUFBLFVBQ0g7QUFBQTtBQUFBLFFBRUEsQ0FBTyxRQUFRLEVBQUcsS0FBSztBQUFBO0FBQ3JCLG1CQUFPLElBQUksUUFBUSxDQUFDQSxhQUFZO0FBQzlCLG9CQUFNLFdBQVcsS0FBSyxNQUFNLEVBQUUsT0FBTyxLQUFLLFdBQVcsQ0FBQztBQUN0RCx1QkFBUyxJQUFJLEdBQUcsSUFBSSxTQUFTLFFBQVEsS0FBSztBQUN4QyxzQkFBTSxVQUFVLFNBQVMsQ0FBQztBQUMxQixxQkFBSyxhQUFhLE1BQU0sU0FBUyxHQUFHO0FBQUEsY0FDdEM7QUFFQSxvQkFBTSxXQUFXLE1BQU07QUFDckIsb0JBQUksS0FBSyxjQUFjLEdBQUc7QUFFeEIsdUJBQUssY0FBYyxFQUFFO0FBQ3JCLHVCQUFLLGNBQWMsSUFBSTtBQUFBLGdCQUN6QjtBQUNBLGdCQUFBQSxTQUFRLElBQUk7QUFBQSxjQUNkO0FBRUEsa0JBQUksS0FBSyxZQUFZLEdBQUc7QUFDdEIscUJBQUssWUFBWSxFQUFFLFFBQVEsS0FBSyxRQUFRO0FBQ3hDLHFCQUFLLFlBQVksSUFBSTtBQUFBLGNBQ3ZCLE9BQU87QUFDTCwrQkFBZSxRQUFRO0FBQUEsY0FDekI7QUFFQSxtQkFBSyxPQUFPLEVBQUU7QUFBQSxZQUNoQixDQUFDO0FBQUEsVUFDSDtBQUFBO0FBQUEsTUFDRjtBQUVBLFVBQU0sNEJBQTRCO0FBRWxDLGVBQVMsUUFBUyxRQUFRLEtBQUs7QUFDN0IsWUFDRSxPQUFPLFFBQVEsTUFBTSxLQUNyQixJQUFJLFNBQVMsa0JBQ2IsSUFBSSxTQUFTLGtCQUNiO0FBSUEsaUJBQU8sT0FBTyxXQUFXLE1BQU0sT0FBTyxXQUFXLENBQUM7QUFFbEQsZ0JBQU0sV0FBVyxPQUFPLE1BQU0sRUFBRSxPQUFPLE9BQU8sV0FBVyxDQUFDO0FBRTFELG1CQUFTLElBQUksR0FBRyxJQUFJLFNBQVMsUUFBUSxLQUFLO0FBQ3hDLGtCQUFNLFVBQVUsU0FBUyxDQUFDO0FBQzFCLGlCQUFLLGFBQWEsUUFBUSxTQUFTLEdBQUc7QUFBQSxVQUN4QztBQUNBLGlCQUFPLE9BQU8sS0FBSyxNQUFNLENBQUM7QUFBQSxRQUM1QjtBQUFBLE1BQ0Y7QUFNQSxlQUFlLFFBQVMsUUFBUTtBQUFBO0FBMVloQztBQTJZRSxpQkFBTyxDQUFDLE9BQU8sV0FBVyxDQUFDO0FBQzNCLGlCQUFPLENBQUMsT0FBTyxZQUFZLENBQUM7QUFFNUIsY0FBSSxFQUFFLE1BQU0sVUFBVSxVQUFVLEtBQUssSUFBSSxPQUFPLElBQUk7QUFHcEQsY0FBSSxTQUFTLENBQUMsTUFBTSxLQUFLO0FBQ3ZCLGtCQUFNLE1BQU0sU0FBUyxRQUFRLEdBQUc7QUFFaEMsbUJBQU8sUUFBUSxFQUFFO0FBQ2pCLGtCQUFNLEtBQUssU0FBUyxVQUFVLEdBQUcsR0FBRztBQUVwQyxtQkFBTyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ25CLHVCQUFXO0FBQUEsVUFDYjtBQUVBLGlCQUFPLFdBQVcsSUFBSTtBQUV0QixjQUFJLFNBQVMsY0FBYyxnQkFBZ0I7QUFDekMscUJBQVMsY0FBYyxRQUFRO0FBQUEsY0FDN0IsZUFBZTtBQUFBLGdCQUNiO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQTtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0EsVUFBUyxZQUFPLFlBQVksTUFBbkIsbUJBQXNCO0FBQUEsZ0JBQy9CLFlBQVksT0FBTyxXQUFXO0FBQUEsZ0JBQzlCLGNBQWMsT0FBTyxhQUFhO0FBQUEsY0FDcEM7QUFBQSxjQUNBLFdBQVcsT0FBTyxVQUFVO0FBQUEsWUFDOUIsQ0FBQztBQUFBLFVBQ0g7QUFFQSxjQUFJO0FBQ0Ysa0JBQU0sU0FBUyxNQUFNLElBQUksUUFBUSxDQUFDQSxVQUFTLFdBQVc7QUFDcEQscUJBQU8sVUFBVSxFQUFFO0FBQUEsZ0JBQ2pCO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQTtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0EsWUFBWSxPQUFPLFdBQVc7QUFBQSxnQkFDOUIsY0FBYyxPQUFPLGFBQWE7QUFBQSxjQUNwQyxHQUFHLENBQUMsS0FBS0MsWUFBVztBQUNsQixvQkFBSSxLQUFLO0FBQ1AseUJBQU8sR0FBRztBQUFBLGdCQUNaLE9BQU87QUFDTCxrQkFBQUQsU0FBUUMsT0FBTTtBQUFBLGdCQUNoQjtBQUFBLGNBQ0YsQ0FBQztBQUFBLFlBQ0gsQ0FBQztBQUVELGdCQUFJLE9BQU8sV0FBVztBQUNwQixtQkFBSyxRQUFRLE9BQU8sR0FBRyxTQUFTLElBQUksR0FBRyxJQUFJLHFCQUFxQixDQUFDO0FBQ2pFO0FBQUEsWUFDRjtBQUVBLG1CQUFPLE1BQU07QUFFYixnQkFBSTtBQUNGLHFCQUFPLFlBQVksSUFBSSxPQUFPLGlCQUFpQixPQUMzQyxNQUFNLFVBQVUsUUFBUSxNQUFNLElBQzlCLE1BQU0sVUFBVSxRQUFRLE1BQU07QUFBQSxZQUNwQyxTQUFTLEtBQUs7QUFDWixxQkFBTyxRQUFRLEVBQUUsR0FBRyxTQUFTLElBQUk7QUFDakMsb0JBQU07QUFBQSxZQUNSO0FBRUEsbUJBQU8sV0FBVyxJQUFJO0FBRXRCLG1CQUFPLFFBQVEsSUFBSTtBQUNuQixtQkFBTyxZQUFZLElBQUksT0FBTyxZQUFZO0FBQzFDLG1CQUFPLE9BQU8sSUFBSTtBQUNsQixtQkFBTyxNQUFNLElBQUk7QUFFakIsZ0JBQUksU0FBUyxVQUFVLGdCQUFnQjtBQUNyQyx1QkFBUyxVQUFVLFFBQVE7QUFBQSxnQkFDekIsZUFBZTtBQUFBLGtCQUNiO0FBQUEsa0JBQ0E7QUFBQSxrQkFDQTtBQUFBLGtCQUNBO0FBQUEsa0JBQ0EsVUFBUyxZQUFPLFlBQVksTUFBbkIsbUJBQXNCO0FBQUEsa0JBQy9CLFlBQVksT0FBTyxXQUFXO0FBQUEsa0JBQzlCLGNBQWMsT0FBTyxhQUFhO0FBQUEsZ0JBQ3BDO0FBQUEsZ0JBQ0EsV0FBVyxPQUFPLFVBQVU7QUFBQSxnQkFDNUI7QUFBQSxjQUNGLENBQUM7QUFBQSxZQUNIO0FBQ0EsbUJBQU8sS0FBSyxXQUFXLE9BQU8sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQUEsVUFDL0MsU0FBUyxLQUFLO0FBQ1osZ0JBQUksT0FBTyxXQUFXO0FBQ3BCO0FBQUEsWUFDRjtBQUVBLG1CQUFPLFdBQVcsSUFBSTtBQUV0QixnQkFBSSxTQUFTLGFBQWEsZ0JBQWdCO0FBQ3hDLHVCQUFTLGFBQWEsUUFBUTtBQUFBLGdCQUM1QixlQUFlO0FBQUEsa0JBQ2I7QUFBQSxrQkFDQTtBQUFBLGtCQUNBO0FBQUEsa0JBQ0E7QUFBQSxrQkFDQSxVQUFTLFlBQU8sWUFBWSxNQUFuQixtQkFBc0I7QUFBQSxrQkFDL0IsWUFBWSxPQUFPLFdBQVc7QUFBQSxrQkFDOUIsY0FBYyxPQUFPLGFBQWE7QUFBQSxnQkFDcEM7QUFBQSxnQkFDQSxXQUFXLE9BQU8sVUFBVTtBQUFBLGdCQUM1QixPQUFPO0FBQUEsY0FDVCxDQUFDO0FBQUEsWUFDSDtBQUVBLGdCQUFJLElBQUksU0FBUyxnQ0FBZ0M7QUFDL0MscUJBQU8sT0FBTyxRQUFRLE1BQU0sQ0FBQztBQUM3QixxQkFBTyxPQUFPLFFBQVEsSUFBSSxLQUFLLE9BQU8sTUFBTSxFQUFFLE9BQU8sV0FBVyxDQUFDLEVBQUUsZUFBZSxPQUFPLFdBQVcsR0FBRztBQUNyRyxzQkFBTSxVQUFVLE9BQU8sTUFBTSxFQUFFLE9BQU8sV0FBVyxHQUFHO0FBQ3BELHFCQUFLLGFBQWEsUUFBUSxTQUFTLEdBQUc7QUFBQSxjQUN4QztBQUFBLFlBQ0YsT0FBTztBQUNMLHNCQUFRLFFBQVEsR0FBRztBQUFBLFlBQ3JCO0FBRUEsbUJBQU8sS0FBSyxtQkFBbUIsT0FBTyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRztBQUFBLFVBQzVEO0FBRUEsaUJBQU8sT0FBTyxFQUFFO0FBQUEsUUFDbEI7QUFBQTtBQUVBLGVBQVMsVUFBVyxRQUFRO0FBQzFCLGVBQU8sVUFBVSxJQUFJO0FBQ3JCLGVBQU8sS0FBSyxTQUFTLE9BQU8sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQUEsTUFDN0M7QUFFQSxlQUFTLE9BQVEsUUFBUSxNQUFNO0FBQzdCLFlBQUksT0FBTyxTQUFTLE1BQU0sR0FBRztBQUMzQjtBQUFBLFFBQ0Y7QUFFQSxlQUFPLFNBQVMsSUFBSTtBQUVwQixnQkFBUSxRQUFRLElBQUk7QUFDcEIsZUFBTyxTQUFTLElBQUk7QUFFcEIsWUFBSSxPQUFPLFdBQVcsSUFBSSxLQUFLO0FBQzdCLGlCQUFPLE1BQU0sRUFBRSxPQUFPLEdBQUcsT0FBTyxXQUFXLENBQUM7QUFDNUMsaUJBQU8sV0FBVyxLQUFLLE9BQU8sV0FBVztBQUN6QyxpQkFBTyxXQUFXLElBQUk7QUFBQSxRQUN4QjtBQUFBLE1BQ0Y7QUFFQSxlQUFTLFFBQVMsUUFBUSxNQUFNO0FBbGlCaEM7QUFtaUJFLGVBQU8sTUFBTTtBQUNYLGNBQUksT0FBTyxXQUFXO0FBQ3BCLG1CQUFPLE9BQU8sUUFBUSxNQUFNLENBQUM7QUFDN0I7QUFBQSxVQUNGO0FBRUEsY0FBSSxPQUFPLGNBQWMsS0FBSyxDQUFDLE9BQU8sS0FBSyxHQUFHO0FBQzVDLG1CQUFPLGNBQWMsRUFBRTtBQUN2QixtQkFBTyxjQUFjLElBQUk7QUFDekI7QUFBQSxVQUNGO0FBRUEsY0FBSSxPQUFPLFlBQVksR0FBRztBQUN4QixtQkFBTyxZQUFZLEVBQUUsT0FBTztBQUFBLFVBQzlCO0FBRUEsY0FBSSxPQUFPLEtBQUssR0FBRztBQUNqQixtQkFBTyxVQUFVLElBQUk7QUFBQSxVQUN2QixXQUFXLE9BQU8sVUFBVSxNQUFNLEdBQUc7QUFDbkMsZ0JBQUksTUFBTTtBQUNSLHFCQUFPLFVBQVUsSUFBSTtBQUNyQiw2QkFBZSxNQUFNLFVBQVUsTUFBTSxDQUFDO0FBQUEsWUFDeEMsT0FBTztBQUNMLHdCQUFVLE1BQU07QUFBQSxZQUNsQjtBQUNBO0FBQUEsVUFDRjtBQUVBLGNBQUksT0FBTyxRQUFRLE1BQU0sR0FBRztBQUMxQjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLE9BQU8sUUFBUSxNQUFNLGNBQWMsTUFBTSxLQUFLLElBQUk7QUFDcEQ7QUFBQSxVQUNGO0FBRUEsZ0JBQU0sVUFBVSxPQUFPLE1BQU0sRUFBRSxPQUFPLFdBQVcsQ0FBQztBQUVsRCxjQUFJLE9BQU8sSUFBSSxFQUFFLGFBQWEsWUFBWSxPQUFPLFdBQVcsTUFBTSxRQUFRLFlBQVk7QUFDcEYsZ0JBQUksT0FBTyxRQUFRLElBQUksR0FBRztBQUN4QjtBQUFBLFlBQ0Y7QUFFQSxtQkFBTyxXQUFXLElBQUksUUFBUTtBQUM5Qix5QkFBTyxZQUFZLE1BQW5CLG1CQUFzQixRQUFRLElBQUksbUJBQW1CLG9CQUFvQixHQUFHLE1BQU07QUFDaEYscUJBQU8sWUFBWSxJQUFJO0FBQ3ZCLHFCQUFPLE1BQU07QUFBQSxZQUNmO0FBQUEsVUFDRjtBQUVBLGNBQUksT0FBTyxXQUFXLEdBQUc7QUFDdkI7QUFBQSxVQUNGO0FBRUEsY0FBSSxDQUFDLE9BQU8sWUFBWSxHQUFHO0FBQ3pCLG9CQUFRLE1BQU07QUFDZDtBQUFBLFVBQ0Y7QUFFQSxjQUFJLE9BQU8sWUFBWSxFQUFFLFdBQVc7QUFDbEM7QUFBQSxVQUNGO0FBRUEsY0FBSSxPQUFPLFlBQVksRUFBRSxLQUFLLE9BQU8sR0FBRztBQUN0QztBQUFBLFVBQ0Y7QUFFQSxjQUFJLENBQUMsUUFBUSxXQUFXLE9BQU8sWUFBWSxFQUFFLE1BQU0sT0FBTyxHQUFHO0FBQzNELG1CQUFPLFdBQVc7QUFBQSxVQUNwQixPQUFPO0FBQ0wsbUJBQU8sTUFBTSxFQUFFLE9BQU8sT0FBTyxXQUFXLEdBQUcsQ0FBQztBQUFBLFVBQzlDO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQSxhQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUM5bUJqQjtBQUFBO0FBQUE7QUFPQSxVQUFNLFFBQVE7QUFDZCxVQUFNLFFBQVEsUUFBUTtBQWtEdEIsVUFBTSxzQkFBTixNQUEwQjtBQUFBLFFBQ3hCLGNBQWM7QUFDWixlQUFLLFNBQVM7QUFDZCxlQUFLLE1BQU07QUFDWCxlQUFLLE9BQU8sSUFBSSxNQUFNLEtBQUs7QUFDM0IsZUFBSyxPQUFPO0FBQUEsUUFDZDtBQUFBLFFBRUEsVUFBVTtBQUNSLGlCQUFPLEtBQUssUUFBUSxLQUFLO0FBQUEsUUFDM0I7QUFBQSxRQUVBLFNBQVM7QUFDUCxrQkFBUyxLQUFLLE1BQU0sSUFBSyxXQUFXLEtBQUs7QUFBQSxRQUMzQztBQUFBLFFBRUEsS0FBSyxNQUFNO0FBQ1QsZUFBSyxLQUFLLEtBQUssR0FBRyxJQUFJO0FBQ3RCLGVBQUssTUFBTyxLQUFLLE1BQU0sSUFBSztBQUFBLFFBQzlCO0FBQUEsUUFFQSxRQUFRO0FBQ04sZ0JBQU0sV0FBVyxLQUFLLEtBQUssS0FBSyxNQUFNO0FBQ3RDLGNBQUksYUFBYTtBQUNmLG1CQUFPO0FBQ1QsZUFBSyxLQUFLLEtBQUssTUFBTSxJQUFJO0FBQ3pCLGVBQUssU0FBVSxLQUFLLFNBQVMsSUFBSztBQUNsQyxpQkFBTztBQUFBLFFBQ1Q7QUFBQSxNQUNGO0FBRUEsYUFBTyxVQUFVLE1BQU0sV0FBVztBQUFBLFFBQ2hDLGNBQWM7QUFDWixlQUFLLE9BQU8sS0FBSyxPQUFPLElBQUksb0JBQW9CO0FBQUEsUUFDbEQ7QUFBQSxRQUVBLFVBQVU7QUFDUixpQkFBTyxLQUFLLEtBQUssUUFBUTtBQUFBLFFBQzNCO0FBQUEsUUFFQSxLQUFLLE1BQU07QUFDVCxjQUFJLEtBQUssS0FBSyxPQUFPLEdBQUc7QUFHdEIsaUJBQUssT0FBTyxLQUFLLEtBQUssT0FBTyxJQUFJLG9CQUFvQjtBQUFBLFVBQ3ZEO0FBQ0EsZUFBSyxLQUFLLEtBQUssSUFBSTtBQUFBLFFBQ3JCO0FBQUEsUUFFQSxRQUFRO0FBQ04sZ0JBQU0sT0FBTyxLQUFLO0FBQ2xCLGdCQUFNLE9BQU8sS0FBSyxNQUFNO0FBQ3hCLGNBQUksS0FBSyxRQUFRLEtBQUssS0FBSyxTQUFTLE1BQU07QUFFeEMsaUJBQUssT0FBTyxLQUFLO0FBQUEsVUFDbkI7QUFDQSxpQkFBTztBQUFBLFFBQ1Q7QUFBQSxNQUNGO0FBQUE7QUFBQTs7O0FDcEhBO0FBQUE7QUFBQSxVQUFNLEVBQUUsT0FBTyxZQUFZLFVBQVUsU0FBUyxVQUFVLE1BQU0sSUFBSTtBQUNsRSxVQUFNLFFBQVEsT0FBTyxNQUFNO0FBRTNCLFVBQU0sWUFBTixNQUFnQjtBQUFBLFFBQ2QsWUFBYSxNQUFNO0FBQ2pCLGVBQUssS0FBSyxJQUFJO0FBQUEsUUFDaEI7QUFBQSxRQUVBLElBQUksWUFBYTtBQUNmLGlCQUFPLEtBQUssS0FBSyxFQUFFLFVBQVU7QUFBQSxRQUMvQjtBQUFBLFFBRUEsSUFBSSxPQUFRO0FBQ1YsaUJBQU8sS0FBSyxLQUFLLEVBQUUsS0FBSztBQUFBLFFBQzFCO0FBQUEsUUFFQSxJQUFJLFVBQVc7QUFDYixpQkFBTyxLQUFLLEtBQUssRUFBRSxRQUFRO0FBQUEsUUFDN0I7QUFBQSxRQUVBLElBQUksU0FBVTtBQUNaLGlCQUFPLEtBQUssS0FBSyxFQUFFLE9BQU87QUFBQSxRQUM1QjtBQUFBLFFBRUEsSUFBSSxVQUFXO0FBQ2IsaUJBQU8sS0FBSyxLQUFLLEVBQUUsUUFBUTtBQUFBLFFBQzdCO0FBQUEsUUFFQSxJQUFJLE9BQVE7QUFDVixpQkFBTyxLQUFLLEtBQUssRUFBRSxLQUFLO0FBQUEsUUFDMUI7QUFBQSxNQUNGO0FBRUEsYUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDakNqQjtBQUFBO0FBQUE7QUFFQSxVQUFNLGlCQUFpQjtBQUN2QixVQUFNLGFBQWE7QUFDbkIsVUFBTSxFQUFFLFlBQVksT0FBTyxVQUFVLFVBQVUsU0FBUyxPQUFPLE9BQU8sTUFBTSxRQUFRLFVBQVUsVUFBVSxJQUFJO0FBQzVHLFVBQU0sWUFBWTtBQUVsQixVQUFNLFdBQVcsT0FBTyxTQUFTO0FBQ2pDLFVBQU0sYUFBYSxPQUFPLFdBQVc7QUFDckMsVUFBTSxTQUFTLE9BQU8sT0FBTztBQUM3QixVQUFNLGlCQUFpQixPQUFPLGdCQUFnQjtBQUM5QyxVQUFNLFdBQVcsT0FBTyxTQUFTO0FBQ2pDLFVBQU0sYUFBYSxPQUFPLFdBQVc7QUFDckMsVUFBTSxnQkFBZ0IsT0FBTyxjQUFjO0FBQzNDLFVBQU0scUJBQXFCLE9BQU8sbUJBQW1CO0FBQ3JELFVBQU0saUJBQWlCLE9BQU8sZ0JBQWdCO0FBQzlDLFVBQU0sYUFBYSxPQUFPLFlBQVk7QUFDdEMsVUFBTSxnQkFBZ0IsT0FBTyxlQUFlO0FBQzVDLFVBQU0sU0FBUyxPQUFPLE9BQU87QUFFN0IsVUFBTSxXQUFOLGNBQXVCLGVBQWU7QUFBQSxRQUNwQyxZQUFhLE1BQU07QUFDakIsZ0JBQU0sSUFBSTtBQUVWLGVBQUssTUFBTSxJQUFJLElBQUksV0FBVztBQUM5QixlQUFLLFFBQVEsSUFBSSxDQUFDO0FBQ2xCLGVBQUssT0FBTyxJQUFJO0FBRWhCLGdCQUFNLE9BQU87QUFFYixlQUFLLFFBQVEsSUFBSSxTQUFTLFFBQVMsUUFBUSxTQUFTO0FBQ2xELGtCQUFNLFFBQVEsS0FBSyxNQUFNO0FBRXpCLGdCQUFJLFlBQVk7QUFFaEIsbUJBQU8sQ0FBQyxXQUFXO0FBQ2pCLG9CQUFNLE9BQU8sTUFBTSxNQUFNO0FBQ3pCLGtCQUFJLENBQUMsTUFBTTtBQUNUO0FBQUEsY0FDRjtBQUNBLG1CQUFLLE9BQU87QUFDWiwwQkFBWSxDQUFDLEtBQUssU0FBUyxLQUFLLE1BQU0sS0FBSyxPQUFPO0FBQUEsWUFDcEQ7QUFFQSxpQkFBSyxVQUFVLElBQUk7QUFFbkIsZ0JBQUksQ0FBQyxLQUFLLFVBQVUsS0FBSyxLQUFLLFVBQVUsR0FBRztBQUN6QyxtQkFBSyxVQUFVLElBQUk7QUFDbkIsbUJBQUssS0FBSyxTQUFTLFFBQVEsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQUEsWUFDL0M7QUFFQSxnQkFBSSxLQUFLLGNBQWMsS0FBSyxNQUFNLFFBQVEsR0FBRztBQUMzQyxzQkFDRyxJQUFJLEtBQUssUUFBUSxFQUFFLElBQUksT0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQ3RDLEtBQUssS0FBSyxjQUFjLENBQUM7QUFBQSxZQUM5QjtBQUFBLFVBQ0Y7QUFFQSxlQUFLLFVBQVUsSUFBSSxDQUFDLFFBQVEsWUFBWTtBQUN0QyxpQkFBSyxLQUFLLFdBQVcsUUFBUSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFBQSxVQUNqRDtBQUVBLGVBQUssYUFBYSxJQUFJLENBQUMsUUFBUSxTQUFTLFFBQVE7QUFDOUMsaUJBQUssS0FBSyxjQUFjLFFBQVEsQ0FBQyxNQUFNLEdBQUcsT0FBTyxHQUFHLEdBQUc7QUFBQSxVQUN6RDtBQUVBLGVBQUssa0JBQWtCLElBQUksQ0FBQyxRQUFRLFNBQVMsUUFBUTtBQUNuRCxpQkFBSyxLQUFLLG1CQUFtQixRQUFRLENBQUMsTUFBTSxHQUFHLE9BQU8sR0FBRyxHQUFHO0FBQUEsVUFDOUQ7QUFFQSxlQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsSUFBSTtBQUFBLFFBQ25DO0FBQUEsUUFFQSxLQUFLLEtBQUssSUFBSztBQUNiLGlCQUFPLEtBQUssVUFBVTtBQUFBLFFBQ3hCO0FBQUEsUUFFQSxLQUFLLFVBQVUsSUFBSztBQUNsQixpQkFBTyxLQUFLLFFBQVEsRUFBRSxPQUFPLFlBQVUsT0FBTyxVQUFVLENBQUMsRUFBRTtBQUFBLFFBQzdEO0FBQUEsUUFFQSxLQUFLLEtBQUssSUFBSztBQUNiLGlCQUFPLEtBQUssUUFBUSxFQUFFLE9BQU8sWUFBVSxPQUFPLFVBQVUsS0FBSyxDQUFDLE9BQU8sVUFBVSxDQUFDLEVBQUU7QUFBQSxRQUNwRjtBQUFBLFFBRUEsS0FBSyxRQUFRLElBQUs7QUFDaEIsY0FBSSxNQUFNLEtBQUssT0FBTztBQUN0QixxQkFBVyxFQUFFLENBQUMsUUFBUSxHQUFHLFFBQVEsS0FBSyxLQUFLLFFBQVEsR0FBRztBQUNwRCxtQkFBTztBQUFBLFVBQ1Q7QUFDQSxpQkFBTztBQUFBLFFBQ1Q7QUFBQSxRQUVBLEtBQUssUUFBUSxJQUFLO0FBQ2hCLGNBQUksTUFBTTtBQUNWLHFCQUFXLEVBQUUsQ0FBQyxRQUFRLEdBQUcsUUFBUSxLQUFLLEtBQUssUUFBUSxHQUFHO0FBQ3BELG1CQUFPO0FBQUEsVUFDVDtBQUNBLGlCQUFPO0FBQUEsUUFDVDtBQUFBLFFBRUEsS0FBSyxLQUFLLElBQUs7QUFDYixjQUFJLE1BQU0sS0FBSyxPQUFPO0FBQ3RCLHFCQUFXLEVBQUUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLEtBQUssUUFBUSxHQUFHO0FBQzlDLG1CQUFPO0FBQUEsVUFDVDtBQUNBLGlCQUFPO0FBQUEsUUFDVDtBQUFBLFFBRUEsSUFBSSxRQUFTO0FBQ1gsaUJBQU8sS0FBSyxNQUFNO0FBQUEsUUFDcEI7QUFBQSxRQUVBLENBQU8sTUFBTSxJQUFLO0FBQUE7QUFDaEIsZ0JBQUksS0FBSyxNQUFNLEVBQUUsUUFBUSxHQUFHO0FBQzFCLG9CQUFNLFFBQVEsSUFBSSxLQUFLLFFBQVEsRUFBRSxJQUFJLE9BQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUFBLFlBQ3RELE9BQU87QUFDTCxvQkFBTSxJQUFJLFFBQVEsQ0FBQ0MsYUFBWTtBQUM3QixxQkFBSyxjQUFjLElBQUlBO0FBQUEsY0FDekIsQ0FBQztBQUFBLFlBQ0g7QUFBQSxVQUNGO0FBQUE7QUFBQSxRQUVBLENBQU8sUUFBUSxFQUFHLEtBQUs7QUFBQTtBQUNyQixtQkFBTyxNQUFNO0FBQ1gsb0JBQU0sT0FBTyxLQUFLLE1BQU0sRUFBRSxNQUFNO0FBQ2hDLGtCQUFJLENBQUMsTUFBTTtBQUNUO0FBQUEsY0FDRjtBQUNBLG1CQUFLLFFBQVEsUUFBUSxHQUFHO0FBQUEsWUFDMUI7QUFFQSxrQkFBTSxRQUFRLElBQUksS0FBSyxRQUFRLEVBQUUsSUFBSSxPQUFLLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUFBLFVBQzNEO0FBQUE7QUFBQSxRQUVBLENBQUMsU0FBUyxFQUFHLE1BQU0sU0FBUztBQUMxQixnQkFBTSxhQUFhLEtBQUssY0FBYyxFQUFFO0FBRXhDLGNBQUksQ0FBQyxZQUFZO0FBQ2YsaUJBQUssVUFBVSxJQUFJO0FBQ25CLGlCQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbkMsaUJBQUssT0FBTztBQUFBLFVBQ2QsV0FBVyxDQUFDLFdBQVcsU0FBUyxNQUFNLE9BQU8sR0FBRztBQUM5Qyx1QkFBVyxVQUFVLElBQUk7QUFDekIsaUJBQUssVUFBVSxJQUFJLENBQUMsS0FBSyxjQUFjLEVBQUU7QUFBQSxVQUMzQztBQUVBLGlCQUFPLENBQUMsS0FBSyxVQUFVO0FBQUEsUUFDekI7QUFBQSxRQUVBLENBQUMsVUFBVSxFQUFHLFFBQVE7QUFDcEIsaUJBQ0csR0FBRyxTQUFTLEtBQUssUUFBUSxDQUFDLEVBQzFCLEdBQUcsV0FBVyxLQUFLLFVBQVUsQ0FBQyxFQUM5QixHQUFHLGNBQWMsS0FBSyxhQUFhLENBQUMsRUFDcEMsR0FBRyxtQkFBbUIsS0FBSyxrQkFBa0IsQ0FBQztBQUVqRCxlQUFLLFFBQVEsRUFBRSxLQUFLLE1BQU07QUFFMUIsY0FBSSxLQUFLLFVBQVUsR0FBRztBQUNwQiwyQkFBZSxNQUFNO0FBQ25CLGtCQUFJLEtBQUssVUFBVSxHQUFHO0FBQ3BCLHFCQUFLLFFBQVEsRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDLE1BQU0sTUFBTSxDQUFDO0FBQUEsY0FDN0M7QUFBQSxZQUNGLENBQUM7QUFBQSxVQUNIO0FBRUEsaUJBQU87QUFBQSxRQUNUO0FBQUEsUUFFQSxDQUFDLGFBQWEsRUFBRyxRQUFRO0FBQ3ZCLGlCQUFPLE1BQU0sTUFBTTtBQUNqQixrQkFBTSxNQUFNLEtBQUssUUFBUSxFQUFFLFFBQVEsTUFBTTtBQUN6QyxnQkFBSSxRQUFRLElBQUk7QUFDZCxtQkFBSyxRQUFRLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxZQUM5QjtBQUFBLFVBQ0YsQ0FBQztBQUVELGVBQUssVUFBVSxJQUFJLEtBQUssUUFBUSxFQUFFLEtBQUssZ0JBQ3JDLENBQUMsV0FBVyxVQUFVLEtBQ3RCLFdBQVcsV0FBVyxRQUN0QixXQUFXLGNBQWMsSUFDMUI7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUVBLGFBQU8sVUFBVTtBQUFBLFFBQ2Y7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQTtBQUFBOzs7QUNqTUE7QUFBQTtBQUFBO0FBRUEsVUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRixJQUFJO0FBQ0osVUFBTSxTQUFTO0FBQ2YsVUFBTTtBQUFBLFFBQ0o7QUFBQSxNQUNGLElBQUk7QUFDSixVQUFNLE9BQU87QUFDYixVQUFNLEVBQUUsTUFBTSxjQUFjLElBQUk7QUFDaEMsVUFBTSxpQkFBaUI7QUFFdkIsVUFBTSxXQUFXLE9BQU8sU0FBUztBQUNqQyxVQUFNLGVBQWUsT0FBTyxhQUFhO0FBQ3pDLFVBQU0sV0FBVyxPQUFPLFNBQVM7QUFFakMsZUFBUyxlQUFnQixRQUFRLE1BQU07QUFDckMsZUFBTyxJQUFJLE9BQU8sUUFBUSxJQUFJO0FBQUEsTUFDaEM7QUFFQSxVQUFNLE9BQU4sY0FBbUIsU0FBUztBQUFBLFFBQzFCLFlBQWEsUUFBUSxLQVlqQixDQUFDLEdBQUc7QUFaYSx1QkFDbkI7QUFBQTtBQUFBLFlBQ0EsVUFBVTtBQUFBLFlBQ1Y7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsVUFwQ0osSUEwQnVCLElBV2hCLG9CQVhnQixJQVdoQjtBQUFBLFlBVkg7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQTtBQXBDSixjQUFBQztBQXVDSSxjQUFJLGVBQWUsU0FBUyxDQUFDLE9BQU8sU0FBUyxXQUFXLEtBQUssY0FBYyxJQUFJO0FBQzdFLGtCQUFNLElBQUkscUJBQXFCLHFCQUFxQjtBQUFBLFVBQ3REO0FBRUEsY0FBSSxPQUFPLFlBQVksWUFBWTtBQUNqQyxrQkFBTSxJQUFJLHFCQUFxQiw2QkFBNkI7QUFBQSxVQUM5RDtBQUVBLGNBQUksV0FBVyxRQUFRLE9BQU8sWUFBWSxjQUFjLE9BQU8sWUFBWSxVQUFVO0FBQ25GLGtCQUFNLElBQUkscUJBQXFCLHlDQUF5QztBQUFBLFVBQzFFO0FBRUEsY0FBSSxPQUFPLFlBQVksWUFBWTtBQUNqQyxzQkFBVSxlQUFlLCtEQUNwQixNQURvQjtBQUFBLGNBRXZCO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBLFNBQVM7QUFBQSxnQkFDTCxtQkFBbUIsRUFBRSxrQkFBa0IsK0JBQStCLElBQUksU0FDM0UsUUFDSjtBQUFBLFVBQ0g7QUFFQSxnQkFBTSxPQUFPO0FBRWIsZUFBSyxhQUFhLE1BQUlBLE1BQUEsUUFBUSxpQkFBUixnQkFBQUEsSUFBc0IsU0FBUSxNQUFNLFFBQVEsUUFBUSxhQUFhLElBQUksSUFDdkYsUUFBUSxhQUFhLE9BQ3JCLENBQUM7QUFDTCxlQUFLLFlBQVksSUFBSSxlQUFlO0FBQ3BDLGVBQUssSUFBSSxJQUFJLEtBQUssWUFBWSxNQUFNO0FBQ3BDLGVBQUssUUFBUSxJQUFJLGlDQUFLLEtBQUssVUFBVSxPQUFPLElBQTNCLEVBQThCLFNBQVMsUUFBUTtBQUNoRSxlQUFLLFFBQVEsRUFBRSxlQUFlLFFBQVEsZUFDbEMsbUJBQUssUUFBUSxnQkFDYjtBQUNKLGVBQUssUUFBUSxJQUFJO0FBRWpCLGVBQUssR0FBRyxtQkFBbUIsQ0FBQ0MsU0FBUSxTQUFTLFVBQVU7QUFJckQsdUJBQVcsVUFBVSxTQUFTO0FBRzVCLG9CQUFNLE1BQU0sS0FBSyxRQUFRLEVBQUUsUUFBUSxNQUFNO0FBQ3pDLGtCQUFJLFFBQVEsSUFBSTtBQUNkLHFCQUFLLFFBQVEsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLGNBQzlCO0FBQUEsWUFDRjtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxRQUVBLENBQUMsY0FBYyxJQUFLO0FBQ2xCLHFCQUFXLFVBQVUsS0FBSyxRQUFRLEdBQUc7QUFDbkMsZ0JBQUksQ0FBQyxPQUFPLFVBQVUsR0FBRztBQUN2QixxQkFBTztBQUFBLFlBQ1Q7QUFBQSxVQUNGO0FBRUEsY0FBSSxDQUFDLEtBQUssWUFBWSxLQUFLLEtBQUssUUFBUSxFQUFFLFNBQVMsS0FBSyxZQUFZLEdBQUc7QUFDckUsa0JBQU0sYUFBYSxLQUFLLFFBQVEsRUFBRSxLQUFLLElBQUksR0FBRyxLQUFLLFFBQVEsQ0FBQztBQUM1RCxpQkFBSyxVQUFVLEVBQUUsVUFBVTtBQUMzQixtQkFBTztBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLGFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQzFHakI7QUFBQTtBQUFBO0FBRUEsVUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsTUFDRixJQUFJO0FBQ0osVUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsSUFBSTtBQUNKLFVBQU0sT0FBTztBQUNiLFVBQU0sRUFBRSxNQUFNLGNBQWMsSUFBSTtBQUNoQyxVQUFNLEVBQUUsWUFBWSxJQUFJO0FBQ3hCLFVBQU0sV0FBVyxPQUFPLFNBQVM7QUFFakMsVUFBTSxXQUFXLE9BQU8sU0FBUztBQUNqQyxVQUFNLHlCQUF5QixPQUFPLHdCQUF3QjtBQUM5RCxVQUFNLGlCQUFpQixPQUFPLGdCQUFnQjtBQUM5QyxVQUFNLFNBQVMsT0FBTyxRQUFRO0FBQzlCLFVBQU0sVUFBVSxPQUFPLFNBQVM7QUFDaEMsVUFBTSxzQkFBc0IsT0FBTyxxQkFBcUI7QUFDeEQsVUFBTSxnQkFBZ0IsT0FBTyxlQUFlO0FBVTVDLGVBQVMseUJBQTBCLEdBQUcsR0FBRztBQUN2QyxZQUFJLE1BQU07QUFBRyxpQkFBTztBQUVwQixlQUFPLE1BQU0sR0FBRztBQUNkLGdCQUFNLElBQUk7QUFDVixjQUFJLElBQUk7QUFDUixjQUFJO0FBQUEsUUFDTjtBQUNBLGVBQU87QUFBQSxNQUNUO0FBRUEsZUFBUyxlQUFnQixRQUFRLE1BQU07QUFDckMsZUFBTyxJQUFJLEtBQUssUUFBUSxJQUFJO0FBQUEsTUFDOUI7QUFFQSxVQUFNLGVBQU4sY0FBMkIsU0FBUztBQUFBLFFBQ2xDLFlBQWEsWUFBWSxDQUFDLEdBQUcsS0FBd0MsQ0FBQyxHQUFHO0FBQTVDLHVCQUFFLFlBQVUsZUFuRDNDLElBbUQrQixJQUErQixpQkFBL0IsSUFBK0IsQ0FBN0I7QUFuRGpDLGNBQUFDO0FBb0RJLGdCQUFNO0FBRU4sZUFBSyxRQUFRLElBQUk7QUFDakIsZUFBSyxNQUFNLElBQUk7QUFDZixlQUFLLGNBQWMsSUFBSTtBQUV2QixlQUFLLG1CQUFtQixJQUFJLEtBQUssUUFBUSxFQUFFLHNCQUFzQjtBQUNqRSxlQUFLLGFBQWEsSUFBSSxLQUFLLFFBQVEsRUFBRSxnQkFBZ0I7QUFFckQsY0FBSSxDQUFDLE1BQU0sUUFBUSxTQUFTLEdBQUc7QUFDN0Isd0JBQVksQ0FBQyxTQUFTO0FBQUEsVUFDeEI7QUFFQSxjQUFJLE9BQU8sWUFBWSxZQUFZO0FBQ2pDLGtCQUFNLElBQUkscUJBQXFCLDZCQUE2QjtBQUFBLFVBQzlEO0FBRUEsZUFBSyxhQUFhLE1BQUlBLE1BQUEsS0FBSyxpQkFBTCxnQkFBQUEsSUFBbUIsaUJBQWdCLE1BQU0sUUFBUSxLQUFLLGFBQWEsWUFBWSxJQUNqRyxLQUFLLGFBQWEsZUFDbEIsQ0FBQztBQUNMLGVBQUssUUFBUSxJQUFJO0FBRWpCLHFCQUFXLFlBQVksV0FBVztBQUNoQyxpQkFBSyxZQUFZLFFBQVE7QUFBQSxVQUMzQjtBQUNBLGVBQUsseUJBQXlCO0FBQUEsUUFDaEM7QUFBQSxRQUVBLFlBQWEsVUFBVTtBQUNyQixnQkFBTSxpQkFBaUIsWUFBWSxRQUFRLEVBQUU7QUFFN0MsY0FBSSxLQUFLLFFBQVEsRUFBRSxLQUFLLENBQUNDLFVBQ3ZCQSxNQUFLLElBQUksRUFBRSxXQUFXLGtCQUN0QkEsTUFBSyxXQUFXLFFBQ2hCQSxNQUFLLGNBQWMsSUFDcEIsR0FBRztBQUNGLG1CQUFPO0FBQUEsVUFDVDtBQUNBLGdCQUFNLE9BQU8sS0FBSyxRQUFRLEVBQUUsZ0JBQWdCLE9BQU8sT0FBTyxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQztBQUU3RSxlQUFLLFVBQVUsRUFBRSxJQUFJO0FBQ3JCLGVBQUssR0FBRyxXQUFXLE1BQU07QUFDdkIsaUJBQUssT0FBTyxJQUFJLEtBQUssSUFBSSxLQUFLLG1CQUFtQixHQUFHLEtBQUssT0FBTyxJQUFJLEtBQUssYUFBYSxDQUFDO0FBQUEsVUFDekYsQ0FBQztBQUVELGVBQUssR0FBRyxtQkFBbUIsTUFBTTtBQUMvQixpQkFBSyxPQUFPLElBQUksS0FBSyxJQUFJLEdBQUcsS0FBSyxPQUFPLElBQUksS0FBSyxhQUFhLENBQUM7QUFDL0QsaUJBQUsseUJBQXlCO0FBQUEsVUFDaEMsQ0FBQztBQUVELGVBQUssR0FBRyxjQUFjLElBQUksU0FBUztBQUNqQyxrQkFBTSxNQUFNLEtBQUssQ0FBQztBQUNsQixnQkFBSSxPQUFPLElBQUksU0FBUyxrQkFBa0I7QUFFeEMsbUJBQUssT0FBTyxJQUFJLEtBQUssSUFBSSxHQUFHLEtBQUssT0FBTyxJQUFJLEtBQUssYUFBYSxDQUFDO0FBQy9ELG1CQUFLLHlCQUF5QjtBQUFBLFlBQ2hDO0FBQUEsVUFDRixDQUFDO0FBRUQscUJBQVcsVUFBVSxLQUFLLFFBQVEsR0FBRztBQUNuQyxtQkFBTyxPQUFPLElBQUksS0FBSyxtQkFBbUI7QUFBQSxVQUM1QztBQUVBLGVBQUsseUJBQXlCO0FBRTlCLGlCQUFPO0FBQUEsUUFDVDtBQUFBLFFBRUEsMkJBQTRCO0FBQzFCLGNBQUksU0FBUztBQUNiLG1CQUFTLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxFQUFFLFFBQVEsS0FBSztBQUM5QyxxQkFBUyx5QkFBeUIsS0FBSyxRQUFRLEVBQUUsQ0FBQyxFQUFFLE9BQU8sR0FBRyxNQUFNO0FBQUEsVUFDdEU7QUFFQSxlQUFLLHNCQUFzQixJQUFJO0FBQUEsUUFDakM7QUFBQSxRQUVBLGVBQWdCLFVBQVU7QUFDeEIsZ0JBQU0saUJBQWlCLFlBQVksUUFBUSxFQUFFO0FBRTdDLGdCQUFNLE9BQU8sS0FBSyxRQUFRLEVBQUUsS0FBSyxDQUFDQSxVQUNoQ0EsTUFBSyxJQUFJLEVBQUUsV0FBVyxrQkFDdEJBLE1BQUssV0FBVyxRQUNoQkEsTUFBSyxjQUFjLElBQ3BCO0FBRUQsY0FBSSxNQUFNO0FBQ1IsaUJBQUssYUFBYSxFQUFFLElBQUk7QUFBQSxVQUMxQjtBQUVBLGlCQUFPO0FBQUEsUUFDVDtBQUFBLFFBRUEsSUFBSSxZQUFhO0FBQ2YsaUJBQU8sS0FBSyxRQUFRLEVBQ2pCLE9BQU8sZ0JBQWMsV0FBVyxXQUFXLFFBQVEsV0FBVyxjQUFjLElBQUksRUFDaEYsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTTtBQUFBLFFBQzlCO0FBQUEsUUFFQSxDQUFDLGNBQWMsSUFBSztBQUlsQixjQUFJLEtBQUssUUFBUSxFQUFFLFdBQVcsR0FBRztBQUMvQixrQkFBTSxJQUFJLGlDQUFpQztBQUFBLFVBQzdDO0FBRUEsZ0JBQU0sYUFBYSxLQUFLLFFBQVEsRUFBRSxLQUFLLENBQUFDLGdCQUNyQyxDQUFDQSxZQUFXLFVBQVUsS0FDdEJBLFlBQVcsV0FBVyxRQUN0QkEsWUFBVyxjQUFjLElBQzFCO0FBRUQsY0FBSSxDQUFDLFlBQVk7QUFDZjtBQUFBLFVBQ0Y7QUFFQSxnQkFBTSxpQkFBaUIsS0FBSyxRQUFRLEVBQUUsSUFBSSxVQUFRLEtBQUssVUFBVSxDQUFDLEVBQUUsT0FBTyxDQUFDLEdBQUcsTUFBTSxLQUFLLEdBQUcsSUFBSTtBQUVqRyxjQUFJLGdCQUFnQjtBQUNsQjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLFVBQVU7QUFFZCxjQUFJLGlCQUFpQixLQUFLLFFBQVEsRUFBRSxVQUFVLFVBQVEsQ0FBQyxLQUFLLFVBQVUsQ0FBQztBQUV2RSxpQkFBTyxZQUFZLEtBQUssUUFBUSxFQUFFLFFBQVE7QUFDeEMsaUJBQUssTUFBTSxLQUFLLEtBQUssTUFBTSxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDbkQsa0JBQU0sT0FBTyxLQUFLLFFBQVEsRUFBRSxLQUFLLE1BQU0sQ0FBQztBQUd4QyxnQkFBSSxLQUFLLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUMsS0FBSyxVQUFVLEdBQUc7QUFDaEYsK0JBQWlCLEtBQUssTUFBTTtBQUFBLFlBQzlCO0FBR0EsZ0JBQUksS0FBSyxNQUFNLE1BQU0sR0FBRztBQUV0QixtQkFBSyxjQUFjLElBQUksS0FBSyxjQUFjLElBQUksS0FBSyxzQkFBc0I7QUFFekUsa0JBQUksS0FBSyxjQUFjLEtBQUssR0FBRztBQUM3QixxQkFBSyxjQUFjLElBQUksS0FBSyxtQkFBbUI7QUFBQSxjQUNqRDtBQUFBLFlBQ0Y7QUFDQSxnQkFBSSxLQUFLLE9BQU8sS0FBSyxLQUFLLGNBQWMsS0FBTSxDQUFDLEtBQUssVUFBVSxHQUFJO0FBQ2hFLHFCQUFPO0FBQUEsWUFDVDtBQUFBLFVBQ0Y7QUFFQSxlQUFLLGNBQWMsSUFBSSxLQUFLLFFBQVEsRUFBRSxjQUFjLEVBQUUsT0FBTztBQUM3RCxlQUFLLE1BQU0sSUFBSTtBQUNmLGlCQUFPLEtBQUssUUFBUSxFQUFFLGNBQWM7QUFBQSxRQUN0QztBQUFBLE1BQ0Y7QUFFQSxhQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUNoTmpCO0FBQUE7QUFBQTtBQUVBLFVBQU0sRUFBRSxxQkFBcUIsSUFBSTtBQUNqQyxVQUFNLEVBQUUsVUFBVSxVQUFVLFFBQVEsVUFBVSxXQUFXLGNBQWMsSUFBSTtBQUMzRSxVQUFNLGlCQUFpQjtBQUN2QixVQUFNLE9BQU87QUFDYixVQUFNLFNBQVM7QUFDZixVQUFNLE9BQU87QUFDYixVQUFNLDRCQUE0QjtBQUVsQyxVQUFNLGFBQWEsT0FBTyxXQUFXO0FBQ3JDLFVBQU0sZ0JBQWdCLE9BQU8sY0FBYztBQUMzQyxVQUFNLHFCQUFxQixPQUFPLG1CQUFtQjtBQUNyRCxVQUFNLG1CQUFtQixPQUFPLGlCQUFpQjtBQUNqRCxVQUFNLFdBQVcsT0FBTyxTQUFTO0FBQ2pDLFVBQU0sV0FBVyxPQUFPLFNBQVM7QUFDakMsVUFBTSxXQUFXLE9BQU8sU0FBUztBQUVqQyxlQUFTLGVBQWdCLFFBQVEsTUFBTTtBQUNyQyxlQUFPLFFBQVEsS0FBSyxnQkFBZ0IsSUFDaEMsSUFBSSxPQUFPLFFBQVEsSUFBSSxJQUN2QixJQUFJLEtBQUssUUFBUSxJQUFJO0FBQUEsTUFDM0I7QUFFQSxVQUFNLFFBQU4sY0FBb0IsZUFBZTtBQUFBLFFBQ2pDLFlBQWEsS0FBeUUsQ0FBQyxHQUFHO0FBQTdFLHVCQUFFLFlBQVUsZ0JBQWdCLGtCQUFrQixHQUFHLFFBekJoRSxJQXlCZSxJQUE2RCxvQkFBN0QsSUFBNkQsQ0FBM0QsV0FBMEIsbUJBQXFCO0FBekJoRSxjQUFBQztBQTBCSSxjQUFJLE9BQU8sWUFBWSxZQUFZO0FBQ2pDLGtCQUFNLElBQUkscUJBQXFCLDZCQUE2QjtBQUFBLFVBQzlEO0FBRUEsY0FBSSxXQUFXLFFBQVEsT0FBTyxZQUFZLGNBQWMsT0FBTyxZQUFZLFVBQVU7QUFDbkYsa0JBQU0sSUFBSSxxQkFBcUIseUNBQXlDO0FBQUEsVUFDMUU7QUFFQSxjQUFJLENBQUMsT0FBTyxVQUFVLGVBQWUsS0FBSyxrQkFBa0IsR0FBRztBQUM3RCxrQkFBTSxJQUFJLHFCQUFxQiwyQ0FBMkM7QUFBQSxVQUM1RTtBQUVBLGdCQUFNLE9BQU87QUFFYixjQUFJLFdBQVcsT0FBTyxZQUFZLFlBQVk7QUFDNUMsc0JBQVUsbUJBQUs7QUFBQSxVQUNqQjtBQUVBLGVBQUssYUFBYSxNQUFJQSxNQUFBLFFBQVEsaUJBQVIsZ0JBQUFBLElBQXNCLFVBQVMsTUFBTSxRQUFRLFFBQVEsYUFBYSxLQUFLLElBQ3pGLFFBQVEsYUFBYSxRQUNyQixDQUFDLDBCQUEwQixFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFFbkQsZUFBSyxRQUFRLElBQUksaUNBQUssS0FBSyxVQUFVLE9BQU8sSUFBM0IsRUFBOEIsUUFBUTtBQUN2RCxlQUFLLFFBQVEsRUFBRSxlQUFlLFFBQVEsZUFDbEMsbUJBQUssUUFBUSxnQkFDYjtBQUNKLGVBQUssZ0JBQWdCLElBQUk7QUFDekIsZUFBSyxRQUFRLElBQUk7QUFDakIsZUFBSyxRQUFRLElBQUksb0JBQUksSUFBSTtBQUV6QixlQUFLLFFBQVEsSUFBSSxDQUFDLFFBQVEsWUFBWTtBQUNwQyxpQkFBSyxLQUFLLFNBQVMsUUFBUSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFBQSxVQUMvQztBQUVBLGVBQUssVUFBVSxJQUFJLENBQUMsUUFBUSxZQUFZO0FBQ3RDLGlCQUFLLEtBQUssV0FBVyxRQUFRLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUFBLFVBQ2pEO0FBRUEsZUFBSyxhQUFhLElBQUksQ0FBQyxRQUFRLFNBQVMsUUFBUTtBQUM5QyxpQkFBSyxLQUFLLGNBQWMsUUFBUSxDQUFDLE1BQU0sR0FBRyxPQUFPLEdBQUcsR0FBRztBQUFBLFVBQ3pEO0FBRUEsZUFBSyxrQkFBa0IsSUFBSSxDQUFDLFFBQVEsU0FBUyxRQUFRO0FBQ25ELGlCQUFLLEtBQUssbUJBQW1CLFFBQVEsQ0FBQyxNQUFNLEdBQUcsT0FBTyxHQUFHLEdBQUc7QUFBQSxVQUM5RDtBQUFBLFFBQ0Y7QUFBQSxRQUVBLEtBQUssUUFBUSxJQUFLO0FBQ2hCLGNBQUksTUFBTTtBQUNWLHFCQUFXLFVBQVUsS0FBSyxRQUFRLEVBQUUsT0FBTyxHQUFHO0FBQzVDLG1CQUFPLE9BQU8sUUFBUTtBQUFBLFVBQ3hCO0FBQ0EsaUJBQU87QUFBQSxRQUNUO0FBQUEsUUFFQSxDQUFDLFNBQVMsRUFBRyxNQUFNLFNBQVM7QUFDMUIsY0FBSTtBQUNKLGNBQUksS0FBSyxXQUFXLE9BQU8sS0FBSyxXQUFXLFlBQVksS0FBSyxrQkFBa0IsTUFBTTtBQUNsRixrQkFBTSxPQUFPLEtBQUssTUFBTTtBQUFBLFVBQzFCLE9BQU87QUFDTCxrQkFBTSxJQUFJLHFCQUFxQixnREFBZ0Q7QUFBQSxVQUNqRjtBQUVBLGNBQUksYUFBYSxLQUFLLFFBQVEsRUFBRSxJQUFJLEdBQUc7QUFFdkMsY0FBSSxDQUFDLFlBQVk7QUFDZix5QkFBYSxLQUFLLFFBQVEsRUFBRSxLQUFLLFFBQVEsS0FBSyxRQUFRLENBQUMsRUFDcEQsR0FBRyxTQUFTLEtBQUssUUFBUSxDQUFDLEVBQzFCLEdBQUcsV0FBVyxLQUFLLFVBQVUsQ0FBQyxFQUM5QixHQUFHLGNBQWMsS0FBSyxhQUFhLENBQUMsRUFDcEMsR0FBRyxtQkFBbUIsS0FBSyxrQkFBa0IsQ0FBQztBQUtqRCxpQkFBSyxRQUFRLEVBQUUsSUFBSSxLQUFLLFVBQVU7QUFBQSxVQUNwQztBQUVBLGlCQUFPLFdBQVcsU0FBUyxNQUFNLE9BQU87QUFBQSxRQUMxQztBQUFBLFFBRUEsQ0FBTyxNQUFNLElBQUs7QUFBQTtBQUNoQixrQkFBTSxnQkFBZ0IsQ0FBQztBQUN2Qix1QkFBVyxVQUFVLEtBQUssUUFBUSxFQUFFLE9BQU8sR0FBRztBQUM1Qyw0QkFBYyxLQUFLLE9BQU8sTUFBTSxDQUFDO0FBQUEsWUFDbkM7QUFDQSxpQkFBSyxRQUFRLEVBQUUsTUFBTTtBQUVyQixrQkFBTSxRQUFRLElBQUksYUFBYTtBQUFBLFVBQ2pDO0FBQUE7QUFBQSxRQUVBLENBQU8sUUFBUSxFQUFHLEtBQUs7QUFBQTtBQUNyQixrQkFBTSxrQkFBa0IsQ0FBQztBQUN6Qix1QkFBVyxVQUFVLEtBQUssUUFBUSxFQUFFLE9BQU8sR0FBRztBQUM1Qyw4QkFBZ0IsS0FBSyxPQUFPLFFBQVEsR0FBRyxDQUFDO0FBQUEsWUFDMUM7QUFDQSxpQkFBSyxRQUFRLEVBQUUsTUFBTTtBQUVyQixrQkFBTSxRQUFRLElBQUksZUFBZTtBQUFBLFVBQ25DO0FBQUE7QUFBQSxNQUNGO0FBRUEsYUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDaElqQjtBQUFBO0FBQUE7QUFFQSxVQUFNLEVBQUUsUUFBUSxRQUFRLFVBQVUsV0FBVyxjQUFjLElBQUk7QUFDL0QsVUFBTSxFQUFFLEtBQUFDLEtBQUksSUFBSSxVQUFRLEtBQVU7QUFDbEMsVUFBTSxRQUFRO0FBQ2QsVUFBTSxPQUFPO0FBQ2IsVUFBTSxpQkFBaUI7QUFDdkIsVUFBTSxFQUFFLHNCQUFzQixxQkFBcUIsMkJBQTJCLElBQUk7QUFDbEYsVUFBTSxpQkFBaUI7QUFDdkIsVUFBTSxTQUFTO0FBRWYsVUFBTSxTQUFTLE9BQU8sYUFBYTtBQUNuQyxVQUFNLFVBQVUsT0FBTyxjQUFjO0FBQ3JDLFVBQU0sZ0JBQWdCLE9BQU8sZUFBZTtBQUM1QyxVQUFNLGNBQWMsT0FBTyxzQkFBc0I7QUFDakQsVUFBTSxZQUFZLE9BQU8sb0JBQW9CO0FBQzdDLFVBQU0sbUJBQW1CLE9BQU8sMkJBQTJCO0FBQzNELFVBQU0sZUFBZSxPQUFPLGNBQWM7QUFFMUMsZUFBUyxvQkFBcUIsVUFBVTtBQUN0QyxlQUFPLGFBQWEsV0FBVyxNQUFNO0FBQUEsTUFDdkM7QUFFQSxlQUFTLGVBQWdCLFFBQVEsTUFBTTtBQUNyQyxlQUFPLElBQUksS0FBSyxRQUFRLElBQUk7QUFBQSxNQUM5QjtBQUVBLFVBQU0sT0FBTyxNQUFNO0FBQUEsTUFBQztBQUVwQixlQUFTLG9CQUFxQixRQUFRLE1BQU07QUFDMUMsWUFBSSxLQUFLLGdCQUFnQixHQUFHO0FBQzFCLGlCQUFPLElBQUksT0FBTyxRQUFRLElBQUk7QUFBQSxRQUNoQztBQUNBLGVBQU8sSUFBSSxLQUFLLFFBQVEsSUFBSTtBQUFBLE1BQzlCO0FBbENBO0FBb0NBLFVBQU0sb0JBQU4sY0FBZ0MsZUFBZTtBQUFBLFFBRzdDLFlBQWEsVUFBVSxFQUFFLFVBQVUsQ0FBQyxHQUFHLFNBQVMsUUFBUSxHQUFHO0FBQ3pELGdCQUFNO0FBSFI7QUFJRSxjQUFJLENBQUMsVUFBVTtBQUNiLGtCQUFNLElBQUkscUJBQXFCLHdCQUF3QjtBQUFBLFVBQ3pEO0FBRUEsZUFBSyxhQUFhLElBQUk7QUFDdEIsY0FBSSxTQUFTO0FBQ1gsK0JBQUssU0FBVSxRQUFRLFVBQVUsRUFBRSxRQUFRLENBQUM7QUFBQSxVQUM5QyxPQUFPO0FBQ0wsK0JBQUssU0FBVSxJQUFJLE9BQU8sVUFBVSxFQUFFLFFBQVEsQ0FBQztBQUFBLFVBQ2pEO0FBQUEsUUFDRjtBQUFBLFFBRUEsQ0FBQyxTQUFTLEVBQUcsTUFBTSxTQUFTO0FBQzFCLGdCQUFNLFlBQVksUUFBUTtBQUMxQixrQkFBUSxZQUFZLFNBQVUsWUFBWSxNQUFNLFFBQVE7QUFDdEQsZ0JBQUksZUFBZSxLQUFLO0FBQ3RCLGtCQUFJLE9BQU8sUUFBUSxZQUFZLFlBQVk7QUFDekMsd0JBQVEsUUFBUSxJQUFJLHFCQUFxQixxQ0FBcUMsQ0FBQztBQUFBLGNBQ2pGO0FBQ0E7QUFBQSxZQUNGO0FBQ0EsZ0JBQUk7QUFBVyx3QkFBVSxLQUFLLE1BQU0sWUFBWSxNQUFNLE1BQU07QUFBQSxVQUM5RDtBQUdBLGdCQUFNO0FBQUEsWUFDSjtBQUFBLFlBQ0EsTUFBQUMsUUFBTztBQUFBLFlBQ1AsVUFBVSxDQUFDO0FBQUEsVUFDYixJQUFJO0FBRUosZUFBSyxPQUFPLFNBQVNBO0FBRXJCLGNBQUksRUFBRSxVQUFVLFlBQVksRUFBRSxVQUFVLFVBQVU7QUFDaEQsa0JBQU0sRUFBRSxLQUFLLElBQUksSUFBSUQsS0FBSSxNQUFNO0FBQy9CLG9CQUFRLE9BQU87QUFBQSxVQUNqQjtBQUNBLGVBQUssVUFBVSxrQ0FBSyxLQUFLLGFBQWEsSUFBTTtBQUU1QyxpQkFBTyxtQkFBSyxTQUFRLFNBQVMsRUFBRSxNQUFNLE9BQU87QUFBQSxRQUM5QztBQUFBLFFBRUEsQ0FBTyxNQUFNLElBQUs7QUFBQTtBQUNoQixtQkFBTyxtQkFBSyxTQUFRLE1BQU07QUFBQSxVQUM1QjtBQUFBO0FBQUEsUUFFQSxDQUFPLFFBQVEsRUFBRyxLQUFLO0FBQUE7QUFDckIsbUJBQU8sbUJBQUssU0FBUSxRQUFRLEdBQUc7QUFBQSxVQUNqQztBQUFBO0FBQUEsTUFDRjtBQXJERTtBQXJDRjtBQTRGQSxVQUFNRSxjQUFOLGNBQXlCLGVBQWU7QUFBQSxRQUN0QyxZQUFhLE1BQU07QUE3RnJCO0FBOEZJLGdCQUFNO0FBeUhSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF2SEUsY0FBSSxDQUFDLFFBQVMsT0FBTyxTQUFTLFlBQVksRUFBRSxnQkFBZ0JGLFNBQVEsQ0FBQyxLQUFLLEtBQU07QUFDOUUsa0JBQU0sSUFBSSxxQkFBcUIsd0JBQXdCO0FBQUEsVUFDekQ7QUFFQSxnQkFBTSxFQUFFLGdCQUFnQixlQUFlLElBQUk7QUFDM0MsY0FBSSxPQUFPLGtCQUFrQixZQUFZO0FBQ3ZDLGtCQUFNLElBQUkscUJBQXFCLDhDQUE4QztBQUFBLFVBQy9FO0FBRUEsZ0JBQU0sRUFBRSxjQUFjLEtBQUssSUFBSTtBQUUvQixnQkFBTSxNQUFNLHNCQUFLLG9CQUFMLFdBQWE7QUFDekIsZ0JBQU0sRUFBRSxNQUFNLFFBQVEsTUFBTSxVQUFVLFVBQVUsVUFBVSxVQUFVLGNBQWMsSUFBSTtBQUV0RixlQUFLLE1BQU0sSUFBSSxFQUFFLEtBQUssTUFBTSxTQUFTO0FBQ3JDLGVBQUssYUFBYSxNQUFJLFVBQUssaUJBQUwsbUJBQW1CLGVBQWMsTUFBTSxRQUFRLEtBQUssYUFBYSxVQUFVLElBQzdGLEtBQUssYUFBYSxhQUNsQixDQUFDO0FBQ0wsZUFBSyxXQUFXLElBQUksS0FBSztBQUN6QixlQUFLLFNBQVMsSUFBSSxLQUFLO0FBQ3ZCLGVBQUssYUFBYSxJQUFJLEtBQUssV0FBVyxDQUFDO0FBQ3ZDLGVBQUssWUFBWSxJQUFJO0FBRXJCLGNBQUksS0FBSyxRQUFRLEtBQUssT0FBTztBQUMzQixrQkFBTSxJQUFJLHFCQUFxQix5REFBeUQ7QUFBQSxVQUMxRixXQUFXLEtBQUssTUFBTTtBQUVwQixpQkFBSyxhQUFhLEVBQUUscUJBQXFCLElBQUksU0FBUyxLQUFLLElBQUk7QUFBQSxVQUNqRSxXQUFXLEtBQUssT0FBTztBQUNyQixpQkFBSyxhQUFhLEVBQUUscUJBQXFCLElBQUksS0FBSztBQUFBLFVBQ3BELFdBQVcsWUFBWSxVQUFVO0FBQy9CLGlCQUFLLGFBQWEsRUFBRSxxQkFBcUIsSUFBSSxTQUFTLE9BQU8sS0FBSyxHQUFHLG1CQUFtQixRQUFRLENBQUMsSUFBSSxtQkFBbUIsUUFBUSxDQUFDLEVBQUUsRUFBRSxTQUFTLFFBQVEsQ0FBQztBQUFBLFVBQ3pKO0FBRUEsZ0JBQU0sVUFBVSxlQUFlLG1CQUFLLEtBQUssU0FBVTtBQUNuRCxlQUFLLGdCQUFnQixJQUFJLGVBQWUsbUJBQUssS0FBSyxXQUFZO0FBRTlELGdCQUFNLGVBQWUsS0FBSyxXQUFXO0FBQ3JDLGdCQUFNLFVBQVUsQ0FBQ0csU0FBUSxZQUFZO0FBQ25DLGtCQUFNLEVBQUUsVUFBQUMsVUFBUyxJQUFJLElBQUlKLEtBQUlHLE9BQU07QUFDbkMsZ0JBQUksQ0FBQyxLQUFLLFlBQVksS0FBS0MsY0FBYSxXQUFXLEtBQUssTUFBTSxFQUFFLGFBQWEsU0FBUztBQUNwRixxQkFBTyxJQUFJLGtCQUFrQixLQUFLLE1BQU0sRUFBRSxLQUFLO0FBQUEsZ0JBQzdDLFNBQVMsS0FBSyxhQUFhO0FBQUEsZ0JBQzNCO0FBQUEsZ0JBQ0EsU0FBUztBQUFBLGNBQ1gsQ0FBQztBQUFBLFlBQ0g7QUFDQSxtQkFBTyxhQUFhRCxTQUFRLE9BQU87QUFBQSxVQUNyQztBQUNBLGVBQUssT0FBTyxJQUFJLGNBQWMsS0FBSyxFQUFFLFFBQVEsQ0FBQztBQUM5QyxlQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0saUNBQ3BCLE9BRG9CO0FBQUEsWUFFdkI7QUFBQSxZQUNBLFNBQVMsQ0FBT0UsT0FBTSxhQUFhO0FBckp6QyxrQkFBQUM7QUFzSlEsa0JBQUksZ0JBQWdCRCxNQUFLO0FBQ3pCLGtCQUFJLENBQUNBLE1BQUssTUFBTTtBQUNkLGlDQUFpQixJQUFJLG9CQUFvQkEsTUFBSyxRQUFRLENBQUM7QUFBQSxjQUN6RDtBQUNBLGtCQUFJO0FBQ0Ysc0JBQU0sRUFBRSxRQUFRLFdBQVcsSUFBSSxNQUFNLEtBQUssT0FBTyxFQUFFLFFBQVE7QUFBQSxrQkFDekQ7QUFBQSxrQkFDQTtBQUFBLGtCQUNBLE1BQU07QUFBQSxrQkFDTixRQUFRQSxNQUFLO0FBQUEsa0JBQ2IsU0FBUyxpQ0FDSixLQUFLLGFBQWEsSUFEZDtBQUFBLG9CQUVQLE1BQU1BLE1BQUs7QUFBQSxrQkFDYjtBQUFBLGtCQUNBLGNBQVlDLE1BQUEsS0FBSyxTQUFTLE1BQWQsZ0JBQUFBLElBQWlCLGVBQWM7QUFBQSxnQkFDN0MsQ0FBQztBQUNELG9CQUFJLGVBQWUsS0FBSztBQUN0Qix5QkFBTyxHQUFHLFNBQVMsSUFBSSxFQUFFLFFBQVE7QUFDakMsMkJBQVMsSUFBSSxvQkFBb0IsbUJBQW1CLFVBQVUsK0JBQStCLENBQUM7QUFBQSxnQkFDaEc7QUFDQSxvQkFBSUQsTUFBSyxhQUFhLFVBQVU7QUFDOUIsMkJBQVMsTUFBTSxNQUFNO0FBQ3JCO0FBQUEsZ0JBQ0Y7QUFDQSxvQkFBSTtBQUNKLG9CQUFJLEtBQUssV0FBVyxHQUFHO0FBQ3JCLCtCQUFhLEtBQUssV0FBVyxFQUFFO0FBQUEsZ0JBQ2pDLE9BQU87QUFDTCwrQkFBYUEsTUFBSztBQUFBLGdCQUNwQjtBQUNBLHFCQUFLLGdCQUFnQixFQUFFLGlDQUFLQSxRQUFMLEVBQVcsWUFBWSxZQUFZLE9BQU8sSUFBRyxRQUFRO0FBQUEsY0FDOUUsU0FBUyxLQUFLO0FBQ1osb0JBQUksSUFBSSxTQUFTLGdDQUFnQztBQUUvQywyQkFBUyxJQUFJLDJCQUEyQixHQUFHLENBQUM7QUFBQSxnQkFDOUMsT0FBTztBQUNMLDJCQUFTLEdBQUc7QUFBQSxnQkFDZDtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBQUEsVUFDRixFQUFDO0FBQUEsUUFDSDtBQUFBLFFBRUEsU0FBVSxNQUFNLFNBQVM7QUFDdkIsZ0JBQU0sVUFBVSxhQUFhLEtBQUssT0FBTztBQUN6QyxpQ0FBdUIsT0FBTztBQUU5QixjQUFJLFdBQVcsRUFBRSxVQUFVLFlBQVksRUFBRSxVQUFVLFVBQVU7QUFDM0Qsa0JBQU0sRUFBRSxLQUFLLElBQUksSUFBSUwsS0FBSSxLQUFLLE1BQU07QUFDcEMsb0JBQVEsT0FBTztBQUFBLFVBQ2pCO0FBRUEsaUJBQU8sS0FBSyxNQUFNLEVBQUU7QUFBQSxZQUNsQixpQ0FDSyxPQURMO0FBQUEsY0FFRTtBQUFBLFlBQ0Y7QUFBQSxZQUNBO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxRQWdCQSxDQUFPLE1BQU0sSUFBSztBQUFBO0FBQ2hCLGtCQUFNLEtBQUssTUFBTSxFQUFFLE1BQU07QUFDekIsa0JBQU0sS0FBSyxPQUFPLEVBQUUsTUFBTTtBQUFBLFVBQzVCO0FBQUE7QUFBQSxRQUVBLENBQU8sUUFBUSxJQUFLO0FBQUE7QUFDbEIsa0JBQU0sS0FBSyxNQUFNLEVBQUUsUUFBUTtBQUMzQixrQkFBTSxLQUFLLE9BQU8sRUFBRSxRQUFRO0FBQUEsVUFDOUI7QUFBQTtBQUFBLE1BQ0Y7QUFuQkU7QUFBQSxrQkFBUSxTQUFDLE1BQU07QUFDYixZQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzVCLGlCQUFPLElBQUlBLEtBQUksSUFBSTtBQUFBLFFBQ3JCLFdBQVcsZ0JBQWdCQSxNQUFLO0FBQzlCLGlCQUFPO0FBQUEsUUFDVCxPQUFPO0FBQ0wsaUJBQU8sSUFBSUEsS0FBSSxLQUFLLEdBQUc7QUFBQSxRQUN6QjtBQUFBLE1BQ0Y7QUFpQkYsZUFBUyxhQUFjLFNBQVM7QUFHOUIsWUFBSSxNQUFNLFFBQVEsT0FBTyxHQUFHO0FBRTFCLGdCQUFNLGNBQWMsQ0FBQztBQUVyQixtQkFBUyxJQUFJLEdBQUcsSUFBSSxRQUFRLFFBQVEsS0FBSyxHQUFHO0FBQzFDLHdCQUFZLFFBQVEsQ0FBQyxDQUFDLElBQUksUUFBUSxJQUFJLENBQUM7QUFBQSxVQUN6QztBQUVBLGlCQUFPO0FBQUEsUUFDVDtBQUVBLGVBQU87QUFBQSxNQUNUO0FBVUEsZUFBUyx1QkFBd0IsU0FBUztBQUN4QyxjQUFNLGlCQUFpQixXQUFXLE9BQU8sS0FBSyxPQUFPLEVBQ2xELEtBQUssQ0FBQyxRQUFRLElBQUksWUFBWSxNQUFNLHFCQUFxQjtBQUM1RCxZQUFJLGdCQUFnQjtBQUNsQixnQkFBTSxJQUFJLHFCQUFxQiw4REFBOEQ7QUFBQSxRQUMvRjtBQUFBLE1BQ0Y7QUFFQSxhQUFPLFVBQVVFO0FBQUE7QUFBQTs7O0FDalJqQjtBQUFBO0FBQUE7QUFFQSxVQUFNLGlCQUFpQjtBQUN2QixVQUFNLEVBQUUsUUFBUSxVQUFVLFNBQVMsWUFBWSxXQUFXLGVBQWUsaUJBQWlCLGlCQUFpQixJQUFJO0FBQy9HLFVBQU1LLGNBQWE7QUFDbkIsVUFBTSxRQUFRO0FBRWQsVUFBTSxnQkFBZ0I7QUFBQSxRQUNwQixTQUFTO0FBQUEsUUFDVCxVQUFVO0FBQUEsTUFDWjtBQUVBLFVBQUkscUJBQXFCO0FBWnpCO0FBY0EsVUFBTSxvQkFBTixjQUFnQyxlQUFlO0FBQUEsUUFLN0MsWUFBYSxPQUFPLENBQUMsR0FBRztBQW5CMUI7QUFvQkksZ0JBQU07QUF5RFI7QUFnQkE7QUFpQ0E7QUFxQkEsNkJBQUk7QUFPSiw2QkFBSTtBQTNJSiw0Q0FBZ0I7QUFDaEIsOENBQWtCO0FBQ2xCLG9DQUFRO0FBSU4sNkJBQUssT0FBUTtBQUViLGNBQUksQ0FBQyxvQkFBb0I7QUFDdkIsaUNBQXFCO0FBQ3JCLG9CQUFRLFlBQVkseUVBQXlFO0FBQUEsY0FDM0YsTUFBTTtBQUFBLFlBQ1IsQ0FBQztBQUFBLFVBQ0g7QUFFQSxnQkFBeUQsV0FBakQsYUFBVyxZQUFZLFFBOUJuQyxJQThCNkQsSUFBZCxzQkFBYyxJQUFkLENBQW5DLGFBQVcsY0FBWTtBQUUvQixlQUFLLGFBQWEsSUFBSSxJQUFJLE1BQU0sU0FBUztBQUV6QyxnQkFBTSxjQUFhLHFDQUFhLFFBQVEsSUFBSSxlQUF6QixZQUF1QyxRQUFRLElBQUk7QUFDdEUsY0FBSSxZQUFZO0FBQ2QsaUJBQUssZUFBZSxJQUFJLElBQUlBLFlBQVcsaUNBQUssWUFBTCxFQUFnQixLQUFLLFdBQVcsRUFBQztBQUFBLFVBQzFFLE9BQU87QUFDTCxpQkFBSyxlQUFlLElBQUksS0FBSyxhQUFhO0FBQUEsVUFDNUM7QUFFQSxnQkFBTSxlQUFjLHVDQUFjLFFBQVEsSUFBSSxnQkFBMUIsWUFBeUMsUUFBUSxJQUFJO0FBQ3pFLGNBQUksYUFBYTtBQUNmLGlCQUFLLGdCQUFnQixJQUFJLElBQUlBLFlBQVcsaUNBQUssWUFBTCxFQUFnQixLQUFLLFlBQVksRUFBQztBQUFBLFVBQzVFLE9BQU87QUFDTCxpQkFBSyxnQkFBZ0IsSUFBSSxLQUFLLGVBQWU7QUFBQSxVQUMvQztBQUVBLGdDQUFLLGdDQUFMO0FBQUEsUUFDRjtBQUFBLFFBRUEsQ0FBQyxTQUFTLEVBQUcsTUFBTSxTQUFTO0FBQzFCLGdCQUFNLE1BQU0sSUFBSSxJQUFJLEtBQUssTUFBTTtBQUMvQixnQkFBTSxRQUFRLHNCQUFLLDhDQUFMLFdBQTBCO0FBQ3hDLGlCQUFPLE1BQU0sU0FBUyxNQUFNLE9BQU87QUFBQSxRQUNyQztBQUFBLFFBRUEsQ0FBTyxNQUFNLElBQUs7QUFBQTtBQUNoQixrQkFBTSxLQUFLLGFBQWEsRUFBRSxNQUFNO0FBQ2hDLGdCQUFJLENBQUMsS0FBSyxlQUFlLEVBQUUsT0FBTyxHQUFHO0FBQ25DLG9CQUFNLEtBQUssZUFBZSxFQUFFLE1BQU07QUFBQSxZQUNwQztBQUNBLGdCQUFJLENBQUMsS0FBSyxnQkFBZ0IsRUFBRSxPQUFPLEdBQUc7QUFDcEMsb0JBQU0sS0FBSyxnQkFBZ0IsRUFBRSxNQUFNO0FBQUEsWUFDckM7QUFBQSxVQUNGO0FBQUE7QUFBQSxRQUVBLENBQU8sUUFBUSxFQUFHLEtBQUs7QUFBQTtBQUNyQixrQkFBTSxLQUFLLGFBQWEsRUFBRSxRQUFRLEdBQUc7QUFDckMsZ0JBQUksQ0FBQyxLQUFLLGVBQWUsRUFBRSxVQUFVLEdBQUc7QUFDdEMsb0JBQU0sS0FBSyxlQUFlLEVBQUUsUUFBUSxHQUFHO0FBQUEsWUFDekM7QUFDQSxnQkFBSSxDQUFDLEtBQUssZ0JBQWdCLEVBQUUsVUFBVSxHQUFHO0FBQ3ZDLG9CQUFNLEtBQUssZ0JBQWdCLEVBQUUsUUFBUSxHQUFHO0FBQUEsWUFDMUM7QUFBQSxVQUNGO0FBQUE7QUFBQSxNQWtGRjtBQTlJRTtBQUNBO0FBQ0E7QUE0REE7QUFBQSwrQkFBcUIsU0FBQyxLQUFLO0FBQ3pCLFlBQUksRUFBRSxVQUFVLE1BQU0sVUFBVSxLQUFLLElBQUk7QUFJekMsbUJBQVcsU0FBUyxRQUFRLFNBQVMsRUFBRSxFQUFFLFlBQVk7QUFDckQsZUFBTyxPQUFPLFNBQVMsTUFBTSxFQUFFLEtBQUssY0FBYyxRQUFRLEtBQUs7QUFDL0QsWUFBSSxDQUFDLHNCQUFLLDhCQUFMLFdBQWtCLFVBQVUsT0FBTztBQUN0QyxpQkFBTyxLQUFLLGFBQWE7QUFBQSxRQUMzQjtBQUNBLFlBQUksYUFBYSxVQUFVO0FBQ3pCLGlCQUFPLEtBQUssZ0JBQWdCO0FBQUEsUUFDOUI7QUFDQSxlQUFPLEtBQUssZUFBZTtBQUFBLE1BQzdCO0FBRUE7QUFBQSx1QkFBYSxTQUFDLFVBQVUsTUFBTTtBQUM1QixZQUFJLG1CQUFLLHNDQUFpQjtBQUN4QixnQ0FBSyxnQ0FBTDtBQUFBLFFBQ0Y7QUFFQSxZQUFJLG1CQUFLLGlCQUFnQixXQUFXLEdBQUc7QUFDckMsaUJBQU87QUFBQSxRQUNUO0FBQ0EsWUFBSSxtQkFBSyxtQkFBa0IsS0FBSztBQUM5QixpQkFBTztBQUFBLFFBQ1Q7QUFFQSxpQkFBUyxJQUFJLEdBQUcsSUFBSSxtQkFBSyxpQkFBZ0IsUUFBUSxLQUFLO0FBQ3BELGdCQUFNLFFBQVEsbUJBQUssaUJBQWdCLENBQUM7QUFDcEMsY0FBSSxNQUFNLFFBQVEsTUFBTSxTQUFTLE1BQU07QUFDckM7QUFBQSxVQUNGO0FBQ0EsY0FBSSxDQUFDLFFBQVEsS0FBSyxNQUFNLFFBQVEsR0FBRztBQUVqQyxnQkFBSSxhQUFhLE1BQU0sVUFBVTtBQUMvQixxQkFBTztBQUFBLFlBQ1Q7QUFBQSxVQUNGLE9BQU87QUFFTCxnQkFBSSxTQUFTLFNBQVMsTUFBTSxTQUFTLFFBQVEsT0FBTyxFQUFFLENBQUMsR0FBRztBQUN4RCxxQkFBTztBQUFBLFlBQ1Q7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUVBLGVBQU87QUFBQSxNQUNUO0FBRUE7QUFBQSx3QkFBYyxXQUFHO0FBOUhuQjtBQStISSxjQUFNLGdCQUFlLHdCQUFLLE9BQU0sWUFBWCxZQUFzQixtQkFBSztBQUNoRCxjQUFNLGVBQWUsYUFBYSxNQUFNLE9BQU87QUFDL0MsY0FBTSxpQkFBaUIsQ0FBQztBQUV4QixpQkFBUyxJQUFJLEdBQUcsSUFBSSxhQUFhLFFBQVEsS0FBSztBQUM1QyxnQkFBTSxRQUFRLGFBQWEsQ0FBQztBQUM1QixjQUFJLENBQUMsT0FBTztBQUNWO0FBQUEsVUFDRjtBQUNBLGdCQUFNLFNBQVMsTUFBTSxNQUFNLGNBQWM7QUFDekMseUJBQWUsS0FBSztBQUFBLFlBQ2xCLFdBQVcsU0FBUyxPQUFPLENBQUMsSUFBSSxPQUFPLFlBQVk7QUFBQSxZQUNuRCxNQUFNLFNBQVMsT0FBTyxTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSTtBQUFBLFVBQ2xELENBQUM7QUFBQSxRQUNIO0FBRUEsMkJBQUssZUFBZ0I7QUFDckIsMkJBQUssaUJBQWtCO0FBQUEsTUFDekI7QUFFSTtBQUFBLDJCQUFnQixXQUFHO0FBQ3JCLFlBQUksbUJBQUssT0FBTSxZQUFZLFFBQVc7QUFDcEMsaUJBQU87QUFBQSxRQUNUO0FBQ0EsZUFBTyxtQkFBSyxtQkFBa0IsbUJBQUs7QUFBQSxNQUNyQztBQUVJO0FBQUEsdUJBQVksV0FBRztBQTFKckI7QUEySkksZ0JBQU8sbUJBQVEsSUFBSSxhQUFaLFlBQXdCLFFBQVEsSUFBSSxhQUFwQyxZQUFnRDtBQUFBLE1BQ3pEO0FBR0YsYUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDL0pqQjtBQUFBO0FBQUE7QUFDQSxVQUFNLFNBQVMsVUFBUSxRQUFhO0FBRXBDLFVBQU0sRUFBRSwwQkFBMEIsSUFBSTtBQUN0QyxVQUFNLEVBQUUsa0JBQWtCLElBQUk7QUFDOUIsVUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLElBQUk7QUFFSixlQUFTLDBCQUEyQixZQUFZO0FBQzlDLGNBQU0sVUFBVSxLQUFLLElBQUk7QUFDekIsZUFBTyxJQUFJLEtBQUssVUFBVSxFQUFFLFFBQVEsSUFBSTtBQUFBLE1BQzFDO0FBRUEsZUFBUyxxQ0FBc0MsU0FBUyxPQUFPLFlBQVksWUFBWTtBQUNyRixjQUFNLGdCQUFnQixRQUFRLGdCQUFnQjtBQUM5QyxZQUFJLGlCQUFpQixNQUFNO0FBQ3pCLGlCQUFPO0FBQUEsUUFDVDtBQUVBLFlBQUksQ0FBQyxPQUFPLFNBQVMsTUFBTSxLQUFLLEtBQUssQ0FBQyxPQUFPLFNBQVMsTUFBTSxHQUFHLEdBQUc7QUFDaEUsaUJBQU87QUFBQSxRQUNUO0FBRUEsY0FBTSxTQUFTLE9BQU8sYUFBYTtBQUNuQyxjQUFNLGlCQUFpQixNQUFNLE1BQU0sTUFBTSxRQUFRO0FBQ2pELFlBQUksQ0FBQyxPQUFPLFNBQVMsTUFBTSxLQUFLLFdBQVcsZ0JBQWdCO0FBQ3pELGlCQUFPLElBQUksa0JBQWtCLDJCQUEyQixZQUFZO0FBQUEsWUFDbEU7QUFBQSxZQUNBLE1BQU0sRUFBRSxPQUFPLFdBQVc7QUFBQSxVQUM1QixDQUFDO0FBQUEsUUFDSDtBQUVBLGVBQU87QUFBQSxNQUNUO0FBRUEsVUFBTSxlQUFOLE1BQU0sY0FBYTtBQUFBLFFBQ2pCLFlBQWEsTUFBTSxVQUFVO0FBQzNCLGdCQUEwQyxXQUFsQyxlQXpDWixJQXlDOEMsSUFBakIseUJBQWlCLElBQWpCLENBQWpCO0FBQ1IsZ0JBQU07QUFBQTtBQUFBLFlBRUosT0FBTztBQUFBLFlBQ1A7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQTtBQUFBLFlBRUE7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxVQUNGLElBQUksc0NBQWdCLENBQUM7QUFFckIsZUFBSyxXQUFXLFNBQVM7QUFDekIsZUFBSyxVQUFVLFNBQVM7QUFDeEIsZUFBSyxPQUFPLGlDQUFLLGVBQUwsRUFBbUIsTUFBTSxnQkFBZ0IsS0FBSyxJQUFJLEVBQUU7QUFDaEUsZUFBSyxRQUFRO0FBQ2IsZUFBSyxVQUFVO0FBQ2YsZUFBSyxZQUFZO0FBQUEsWUFDZixPQUFPLDRCQUFXLGNBQWEseUJBQXlCO0FBQUEsWUFDeEQsWUFBWSxrQ0FBYztBQUFBLFlBQzFCLFlBQVksa0NBQWMsS0FBSztBQUFBO0FBQUEsWUFDL0IsWUFBWSxrQ0FBYztBQUFBO0FBQUEsWUFDMUIsZUFBZSx3Q0FBaUI7QUFBQSxZQUNoQyxZQUFZLGtDQUFjO0FBQUE7QUFBQSxZQUUxQixTQUFTLDRCQUFXLENBQUMsT0FBTyxRQUFRLFdBQVcsT0FBTyxVQUFVLE9BQU87QUFBQTtBQUFBLFlBRXZFLGFBQWEsb0NBQWUsQ0FBQyxLQUFLLEtBQUssS0FBSyxLQUFLLEdBQUc7QUFBQTtBQUFBLFlBRXBELFlBQVksa0NBQWM7QUFBQSxjQUN4QjtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxlQUFLLGFBQWE7QUFDbEIsZUFBSyx1QkFBdUI7QUFDNUIsZUFBSyxRQUFRO0FBQ2IsZUFBSyxNQUFNO0FBQ1gsZUFBSyxPQUFPO0FBQ1osZUFBSyxTQUFTO0FBR2QsZUFBSyxRQUFRLFVBQVUsWUFBVTtBQUMvQixpQkFBSyxVQUFVO0FBQ2YsZ0JBQUksS0FBSyxPQUFPO0FBQ2QsbUJBQUssTUFBTSxNQUFNO0FBQUEsWUFDbkIsT0FBTztBQUNMLG1CQUFLLFNBQVM7QUFBQSxZQUNoQjtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxRQUVBLGdCQUFpQjtBQUNmLGNBQUksS0FBSyxRQUFRLGVBQWU7QUFDOUIsaUJBQUssUUFBUSxjQUFjO0FBQUEsVUFDN0I7QUFBQSxRQUNGO0FBQUEsUUFFQSxVQUFXLFlBQVksU0FBUyxRQUFRO0FBQ3RDLGNBQUksS0FBSyxRQUFRLFdBQVc7QUFDMUIsaUJBQUssUUFBUSxVQUFVLFlBQVksU0FBUyxNQUFNO0FBQUEsVUFDcEQ7QUFBQSxRQUNGO0FBQUEsUUFFQSxVQUFXLE9BQU87QUFDaEIsY0FBSSxLQUFLLFNBQVM7QUFDaEIsa0JBQU0sS0FBSyxNQUFNO0FBQUEsVUFDbkIsT0FBTztBQUNMLGlCQUFLLFFBQVE7QUFBQSxVQUNmO0FBQUEsUUFDRjtBQUFBLFFBRUEsV0FBWSxPQUFPO0FBQ2pCLGNBQUksS0FBSyxRQUFRO0FBQVksbUJBQU8sS0FBSyxRQUFRLFdBQVcsS0FBSztBQUFBLFFBQ25FO0FBQUEsUUFFQSxRQUFRLHlCQUF5QixFQUFHLEtBQUssRUFBRSxPQUFPLEtBQUssR0FBRyxJQUFJO0FBQzVELGdCQUFNLEVBQUUsWUFBWSxNQUFNLFFBQVEsSUFBSTtBQUN0QyxnQkFBTSxFQUFFLFFBQVEsYUFBYSxJQUFJO0FBQ2pDLGdCQUFNO0FBQUEsWUFDSjtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0YsSUFBSTtBQUNKLGdCQUFNLEVBQUUsUUFBUSxJQUFJO0FBR3BCLGNBQUksUUFBUSxTQUFTLHVCQUF1QixDQUFDLFdBQVcsU0FBUyxJQUFJLEdBQUc7QUFDdEUsZUFBRyxHQUFHO0FBQ047QUFBQSxVQUNGO0FBR0EsY0FBSSxNQUFNLFFBQVEsT0FBTyxLQUFLLENBQUMsUUFBUSxTQUFTLE1BQU0sR0FBRztBQUN2RCxlQUFHLEdBQUc7QUFDTjtBQUFBLFVBQ0Y7QUFHQSxjQUNFLGNBQWMsUUFDZCxNQUFNLFFBQVEsV0FBVyxLQUN6QixDQUFDLFlBQVksU0FBUyxVQUFVLEdBQ2hDO0FBQ0EsZUFBRyxHQUFHO0FBQ047QUFBQSxVQUNGO0FBR0EsY0FBSSxVQUFVLFlBQVk7QUFDeEIsZUFBRyxHQUFHO0FBQ047QUFBQSxVQUNGO0FBRUEsY0FBSSxtQkFBbUIsbUNBQVU7QUFDakMsY0FBSSxrQkFBa0I7QUFDcEIsK0JBQW1CLE9BQU8sZ0JBQWdCO0FBQzFDLCtCQUFtQixPQUFPLE1BQU0sZ0JBQWdCLElBQzVDLDBCQUEwQixnQkFBZ0IsSUFDMUMsbUJBQW1CO0FBQUEsVUFDekI7QUFFQSxnQkFBTSxlQUNKLG1CQUFtQixJQUNmLEtBQUssSUFBSSxrQkFBa0IsVUFBVSxJQUNyQyxLQUFLLElBQUksYUFBYSxxQkFBa0IsVUFBVSxJQUFJLFVBQVU7QUFFdEUscUJBQVcsTUFBTSxHQUFHLElBQUksR0FBRyxZQUFZO0FBQUEsUUFDekM7QUFBQSxRQUVBLFVBQVcsWUFBWSxZQUFZLFFBQVEsZUFBZTtBQUN4RCxnQkFBTSxVQUFVLGFBQWEsVUFBVTtBQUV2QyxlQUFLLGNBQWM7QUFFbkIsY0FBSSxjQUFjLEtBQUs7QUFDckIsZ0JBQUksS0FBSyxVQUFVLFlBQVksU0FBUyxVQUFVLE1BQU0sT0FBTztBQUM3RCxxQkFBTyxLQUFLLFFBQVE7QUFBQSxnQkFDbEI7QUFBQSxnQkFDQTtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0E7QUFBQSxjQUNGO0FBQUEsWUFDRixPQUFPO0FBQ0wsbUJBQUs7QUFBQSxnQkFDSCxJQUFJLGtCQUFrQixrQkFBa0IsWUFBWTtBQUFBLGtCQUNsRDtBQUFBLGtCQUNBLE1BQU07QUFBQSxvQkFDSixPQUFPLEtBQUs7QUFBQSxrQkFDZDtBQUFBLGdCQUNGLENBQUM7QUFBQSxjQUNIO0FBQ0EscUJBQU87QUFBQSxZQUNUO0FBQUEsVUFDRjtBQUdBLGNBQUksS0FBSyxVQUFVLE1BQU07QUFDdkIsaUJBQUssU0FBUztBQU1kLGdCQUFJLGVBQWUsUUFBUSxLQUFLLFFBQVEsS0FBSyxlQUFlLE1BQU07QUFDaEUsbUJBQUs7QUFBQSxnQkFDSCxJQUFJLGtCQUFrQixtRkFBbUYsWUFBWTtBQUFBLGtCQUNuSDtBQUFBLGtCQUNBLE1BQU0sRUFBRSxPQUFPLEtBQUssV0FBVztBQUFBLGdCQUNqQyxDQUFDO0FBQUEsY0FDSDtBQUNBLHFCQUFPO0FBQUEsWUFDVDtBQUVBLGtCQUFNLGVBQWUsaUJBQWlCLFFBQVEsZUFBZSxDQUFDO0FBRTlELGdCQUFJLENBQUMsY0FBYztBQUNqQixtQkFBSztBQUFBLGdCQUNILElBQUksa0JBQWtCLDBCQUEwQixZQUFZO0FBQUEsa0JBQzFEO0FBQUEsa0JBQ0EsTUFBTSxFQUFFLE9BQU8sS0FBSyxXQUFXO0FBQUEsZ0JBQ2pDLENBQUM7QUFBQSxjQUNIO0FBQ0EscUJBQU87QUFBQSxZQUNUO0FBR0EsZ0JBQUksS0FBSyxRQUFRLFFBQVEsS0FBSyxTQUFTLFFBQVEsTUFBTTtBQUNuRCxtQkFBSztBQUFBLGdCQUNILElBQUksa0JBQWtCLGlCQUFpQixZQUFZO0FBQUEsa0JBQ2pEO0FBQUEsa0JBQ0EsTUFBTSxFQUFFLE9BQU8sS0FBSyxXQUFXO0FBQUEsZ0JBQ2pDLENBQUM7QUFBQSxjQUNIO0FBQ0EscUJBQU87QUFBQSxZQUNUO0FBRUEsa0JBQU0scUJBQXFCLHFDQUFxQyxTQUFTLGNBQWMsWUFBWSxLQUFLLFVBQVU7QUFDbEgsZ0JBQUksc0JBQXNCLE1BQU07QUFDOUIsbUJBQUssTUFBTSxrQkFBa0I7QUFDN0IscUJBQU87QUFBQSxZQUNUO0FBRUEsa0JBQU0sRUFBRSxPQUFPLE1BQU0sTUFBTSxPQUFPLEVBQUUsSUFBSTtBQUV4QyxtQkFBTyxLQUFLLFVBQVUsT0FBTyx3QkFBd0I7QUFDckQsbUJBQU8sS0FBSyxPQUFPLFFBQVEsS0FBSyxRQUFRLEtBQUssd0JBQXdCO0FBRXJFLGlCQUFLLFNBQVM7QUFDZCxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJLEtBQUssT0FBTyxNQUFNO0FBQ3BCLGdCQUFJLGVBQWUsS0FBSztBQUV0QixvQkFBTSxRQUFRLGlCQUFpQixRQUFRLGVBQWUsQ0FBQztBQUV2RCxrQkFBSSxTQUFTLE1BQU07QUFDakIsdUJBQU8sS0FBSyxRQUFRO0FBQUEsa0JBQ2xCO0FBQUEsa0JBQ0E7QUFBQSxrQkFDQTtBQUFBLGtCQUNBO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGO0FBRUEsb0JBQU0scUJBQXFCLHFDQUFxQyxTQUFTLE9BQU8sWUFBWSxLQUFLLFVBQVU7QUFDM0csa0JBQUksc0JBQXNCLE1BQU07QUFDOUIscUJBQUssTUFBTSxrQkFBa0I7QUFDN0IsdUJBQU87QUFBQSxjQUNUO0FBRUEsb0JBQU0sRUFBRSxPQUFPLE1BQU0sTUFBTSxPQUFPLEVBQUUsSUFBSTtBQUN4QztBQUFBLGdCQUNFLFNBQVMsUUFBUSxPQUFPLFNBQVMsS0FBSztBQUFBLGdCQUN0QztBQUFBLGNBQ0Y7QUFDQSxxQkFBTyxPQUFPLFFBQVEsT0FBTyxTQUFTLEdBQUcsR0FBRyx3QkFBd0I7QUFFcEUsbUJBQUssUUFBUTtBQUNiLG1CQUFLLE1BQU07QUFBQSxZQUNiO0FBR0EsZ0JBQUksS0FBSyxPQUFPLE1BQU07QUFDcEIsb0JBQU0sZ0JBQWdCLFFBQVEsZ0JBQWdCO0FBQzlDLG1CQUFLLE1BQU0saUJBQWlCLE9BQU8sT0FBTyxhQUFhLElBQUksSUFBSTtBQUFBLFlBQ2pFO0FBRUEsbUJBQU8sT0FBTyxTQUFTLEtBQUssS0FBSyxDQUFDO0FBQ2xDO0FBQUEsY0FDRSxLQUFLLE9BQU8sUUFBUSxPQUFPLFNBQVMsS0FBSyxHQUFHO0FBQUEsY0FDNUM7QUFBQSxZQUNGO0FBRUEsaUJBQUssU0FBUztBQUNkLGlCQUFLLE9BQU8sUUFBUSxRQUFRLE9BQU8sUUFBUSxPQUFPO0FBS2xELGdCQUFJLEtBQUssUUFBUSxRQUFRLEtBQUssS0FBSyxXQUFXLElBQUksR0FBRztBQUNuRCxtQkFBSyxPQUFPO0FBQUEsWUFDZDtBQUVBLG1CQUFPLEtBQUssUUFBUTtBQUFBLGNBQ2xCO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxnQkFBTSxNQUFNLElBQUksa0JBQWtCLGtCQUFrQixZQUFZO0FBQUEsWUFDOUQ7QUFBQSxZQUNBLE1BQU0sRUFBRSxPQUFPLEtBQUssV0FBVztBQUFBLFVBQ2pDLENBQUM7QUFFRCxlQUFLLE1BQU0sR0FBRztBQUVkLGlCQUFPO0FBQUEsUUFDVDtBQUFBLFFBRUEsT0FBUSxPQUFPO0FBQ2IsZUFBSyxTQUFTLE1BQU07QUFFcEIsaUJBQU8sS0FBSyxRQUFRLE9BQU8sS0FBSztBQUFBLFFBQ2xDO0FBQUEsUUFFQSxXQUFZLGFBQWE7QUFDdkIsZUFBSyxhQUFhO0FBQ2xCLGlCQUFPLEtBQUssUUFBUSxXQUFXLFdBQVc7QUFBQSxRQUM1QztBQUFBLFFBRUEsUUFBUyxLQUFLO0FBQ1osY0FBSSxLQUFLLFdBQVcsWUFBWSxLQUFLLEtBQUssSUFBSSxHQUFHO0FBQy9DLG1CQUFPLEtBQUssUUFBUSxRQUFRLEdBQUc7QUFBQSxVQUNqQztBQUlBLGNBQUksS0FBSyxhQUFhLEtBQUssdUJBQXVCLEdBQUc7QUFFbkQsaUJBQUssYUFDSCxLQUFLLHdCQUNKLEtBQUssYUFBYSxLQUFLO0FBQUEsVUFDNUIsT0FBTztBQUNMLGlCQUFLLGNBQWM7QUFBQSxVQUNyQjtBQUVBLGVBQUssVUFBVTtBQUFBLFlBQ2I7QUFBQSxZQUNBO0FBQUEsY0FDRSxPQUFPLEVBQUUsU0FBUyxLQUFLLFdBQVc7QUFBQSxjQUNsQyxNQUFNLGlCQUFFLGNBQWMsS0FBSyxhQUFjLEtBQUs7QUFBQSxZQUNoRDtBQUFBLFlBQ0EsUUFBUSxLQUFLLElBQUk7QUFBQSxVQUNuQjtBQUVBLG1CQUFTLFFBQVNDLE1BQUs7QUF2WDNCO0FBd1hNLGdCQUFJQSxRQUFPLFFBQVEsS0FBSyxXQUFXLFlBQVksS0FBSyxLQUFLLElBQUksR0FBRztBQUM5RCxxQkFBTyxLQUFLLFFBQVEsUUFBUUEsSUFBRztBQUFBLFlBQ2pDO0FBRUEsZ0JBQUksS0FBSyxVQUFVLEdBQUc7QUFDcEIsb0JBQU0sVUFBVSxFQUFFLE9BQU8sU0FBUyxLQUFLLEtBQUssS0FBSSxVQUFLLFFBQUwsWUFBWSxFQUFFLEdBQUc7QUFHakUsa0JBQUksS0FBSyxRQUFRLE1BQU07QUFDckIsd0JBQVEsVUFBVSxJQUFJLEtBQUs7QUFBQSxjQUM3QjtBQUVBLG1CQUFLLE9BQU8saUNBQ1AsS0FBSyxPQURFO0FBQUEsZ0JBRVYsU0FBUyxrQ0FDSixLQUFLLEtBQUssVUFDVjtBQUFBLGNBRVA7QUFBQSxZQUNGO0FBRUEsZ0JBQUk7QUFDRixtQkFBSyx1QkFBdUIsS0FBSztBQUNqQyxtQkFBSyxTQUFTLEtBQUssTUFBTSxJQUFJO0FBQUEsWUFDL0IsU0FBU0EsTUFBSztBQUNaLG1CQUFLLFFBQVEsUUFBUUEsSUFBRztBQUFBLFlBQzFCO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsYUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDdlpqQjtBQUFBO0FBQUE7QUFFQSxVQUFNLGFBQWE7QUFDbkIsVUFBTSxlQUFlO0FBSHJCO0FBS0EsVUFBTSxhQUFOLGNBQXlCLFdBQVc7QUFBQSxRQUdsQyxZQUFhLE9BQU8sVUFBVSxDQUFDLEdBQUc7QUFDaEMsZ0JBQU0sT0FBTztBQUhmLHFDQUFTO0FBQ1QsdUNBQVc7QUFHVCw2QkFBSyxRQUFTO0FBQ2QsNkJBQUssVUFBVztBQUFBLFFBQ2xCO0FBQUEsUUFFQSxTQUFVLE1BQU0sU0FBUztBQUN2QixnQkFBTSxRQUFRLElBQUksYUFBYSxpQ0FDMUIsT0FEMEI7QUFBQSxZQUU3QixjQUFjLG1CQUFLO0FBQUEsVUFDckIsSUFBRztBQUFBLFlBQ0QsVUFBVSxtQkFBSyxRQUFPLFNBQVMsS0FBSyxtQkFBSyxPQUFNO0FBQUEsWUFDL0M7QUFBQSxVQUNGLENBQUM7QUFDRCxpQkFBTyxtQkFBSyxRQUFPLFNBQVMsTUFBTSxLQUFLO0FBQUEsUUFDekM7QUFBQSxRQUVBLFFBQVM7QUFDUCxpQkFBTyxtQkFBSyxRQUFPLE1BQU07QUFBQSxRQUMzQjtBQUFBLFFBRUEsVUFBVztBQUNULGlCQUFPLG1CQUFLLFFBQU8sUUFBUTtBQUFBLFFBQzdCO0FBQUEsTUFDRjtBQTFCRTtBQUNBO0FBMkJGLGFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQ2xDakI7QUFBQTtBQUFBO0FBSUEsVUFBTSxTQUFTLFVBQVEsUUFBYTtBQUNwQyxVQUFNLEVBQUUsU0FBUyxJQUFJLFVBQVEsUUFBYTtBQUMxQyxVQUFNLEVBQUUscUJBQXFCLG1CQUFtQixzQkFBc0IsV0FBVyxJQUFJO0FBQ3JGLFVBQU0sT0FBTztBQUNiLFVBQU0sRUFBRSxtQkFBbUIsSUFBSTtBQUUvQixVQUFNLFdBQVcsT0FBTyxVQUFVO0FBQ2xDLFVBQU0sV0FBVyxPQUFPLFVBQVU7QUFDbEMsVUFBTSxRQUFRLE9BQU8sT0FBTztBQUM1QixVQUFNLFNBQVMsT0FBTyxRQUFRO0FBQzlCLFVBQU0sZUFBZSxPQUFPLGNBQWM7QUFDMUMsVUFBTSxpQkFBaUIsT0FBTyxnQkFBZ0I7QUFFOUMsVUFBTSxPQUFPLE1BQU07QUFBQSxNQUFDO0FBRXBCLFVBQU0sZUFBTixjQUEyQixTQUFTO0FBQUEsUUFDbEMsWUFBYTtBQUFBLFVBQ1g7QUFBQSxVQUNBO0FBQUEsVUFDQSxjQUFjO0FBQUEsVUFDZDtBQUFBLFVBQ0EsZ0JBQWdCLEtBQUs7QUFBQTtBQUFBLFFBQ3ZCLEdBQUc7QUFDRCxnQkFBTTtBQUFBLFlBQ0osYUFBYTtBQUFBLFlBQ2IsTUFBTTtBQUFBLFlBQ047QUFBQSxVQUNGLENBQUM7QUFFRCxlQUFLLGVBQWUsY0FBYztBQUVsQyxlQUFLLE1BQU0sSUFBSTtBQUNmLGVBQUssUUFBUSxJQUFJO0FBQ2pCLGVBQUssS0FBSyxJQUFJO0FBQ2QsZUFBSyxZQUFZLElBQUk7QUFDckIsZUFBSyxjQUFjLElBQUk7QUFNdkIsZUFBSyxRQUFRLElBQUk7QUFBQSxRQUNuQjtBQUFBLFFBRUEsUUFBUyxLQUFLO0FBQ1osY0FBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLGVBQWUsWUFBWTtBQUMzQyxrQkFBTSxJQUFJLG9CQUFvQjtBQUFBLFVBQ2hDO0FBRUEsY0FBSSxLQUFLO0FBQ1AsaUJBQUssTUFBTSxFQUFFO0FBQUEsVUFDZjtBQUVBLGlCQUFPLE1BQU0sUUFBUSxHQUFHO0FBQUEsUUFDMUI7QUFBQSxRQUVBLFNBQVUsS0FBSyxVQUFVO0FBS3ZCLGNBQUksQ0FBQyxLQUFLLFFBQVEsR0FBRztBQUNuQix5QkFBYSxNQUFNO0FBQ2pCLHVCQUFTLEdBQUc7QUFBQSxZQUNkLENBQUM7QUFBQSxVQUNILE9BQU87QUFDTCxxQkFBUyxHQUFHO0FBQUEsVUFDZDtBQUFBLFFBQ0Y7QUFBQSxRQUVBLEdBQUksT0FBTyxNQUFNO0FBQ2YsY0FBSSxPQUFPLFVBQVUsT0FBTyxZQUFZO0FBQ3RDLGlCQUFLLFFBQVEsSUFBSTtBQUFBLFVBQ25CO0FBQ0EsaUJBQU8sTUFBTSxHQUFHLElBQUksR0FBRyxJQUFJO0FBQUEsUUFDN0I7QUFBQSxRQUVBLFlBQWEsT0FBTyxNQUFNO0FBQ3hCLGlCQUFPLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSTtBQUFBLFFBQzVCO0FBQUEsUUFFQSxJQUFLLE9BQU8sTUFBTTtBQUNoQixnQkFBTSxNQUFNLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSTtBQUNqQyxjQUFJLE9BQU8sVUFBVSxPQUFPLFlBQVk7QUFDdEMsaUJBQUssUUFBUSxJQUNYLEtBQUssY0FBYyxNQUFNLElBQUksS0FDN0IsS0FBSyxjQUFjLFVBQVUsSUFBSTtBQUFBLFVBRXJDO0FBQ0EsaUJBQU87QUFBQSxRQUNUO0FBQUEsUUFFQSxlQUFnQixPQUFPLE1BQU07QUFDM0IsaUJBQU8sS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJO0FBQUEsUUFDN0I7QUFBQSxRQUVBLEtBQU0sT0FBTztBQUNYLGNBQUksS0FBSyxRQUFRLEtBQUssVUFBVSxNQUFNO0FBQ3BDLHdCQUFZLEtBQUssUUFBUSxHQUFHLEtBQUs7QUFDakMsbUJBQU8sS0FBSyxRQUFRLElBQUksTUFBTSxLQUFLLEtBQUssSUFBSTtBQUFBLFVBQzlDO0FBQ0EsaUJBQU8sTUFBTSxLQUFLLEtBQUs7QUFBQSxRQUN6QjtBQUFBO0FBQUEsUUFHTSxPQUFRO0FBQUE7QUFDWixtQkFBTyxRQUFRLE1BQU0sTUFBTTtBQUFBLFVBQzdCO0FBQUE7QUFBQTtBQUFBLFFBR00sT0FBUTtBQUFBO0FBQ1osbUJBQU8sUUFBUSxNQUFNLE1BQU07QUFBQSxVQUM3QjtBQUFBO0FBQUE7QUFBQSxRQUdNLE9BQVE7QUFBQTtBQUNaLG1CQUFPLFFBQVEsTUFBTSxNQUFNO0FBQUEsVUFDN0I7QUFBQTtBQUFBO0FBQUEsUUFHTSxRQUFTO0FBQUE7QUFDYixtQkFBTyxRQUFRLE1BQU0sT0FBTztBQUFBLFVBQzlCO0FBQUE7QUFBQTtBQUFBLFFBR00sY0FBZTtBQUFBO0FBQ25CLG1CQUFPLFFBQVEsTUFBTSxhQUFhO0FBQUEsVUFDcEM7QUFBQTtBQUFBO0FBQUEsUUFHTSxXQUFZO0FBQUE7QUFFaEIsa0JBQU0sSUFBSSxrQkFBa0I7QUFBQSxVQUM5QjtBQUFBO0FBQUE7QUFBQSxRQUdBLElBQUksV0FBWTtBQUNkLGlCQUFPLEtBQUssWUFBWSxJQUFJO0FBQUEsUUFDOUI7QUFBQTtBQUFBLFFBR0EsSUFBSSxPQUFRO0FBQ1YsY0FBSSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQ2hCLGlCQUFLLEtBQUssSUFBSSxtQkFBbUIsSUFBSTtBQUNyQyxnQkFBSSxLQUFLLFFBQVEsR0FBRztBQUVsQixtQkFBSyxLQUFLLEVBQUUsVUFBVTtBQUN0QixxQkFBTyxLQUFLLEtBQUssRUFBRSxNQUFNO0FBQUEsWUFDM0I7QUFBQSxVQUNGO0FBQ0EsaUJBQU8sS0FBSyxLQUFLO0FBQUEsUUFDbkI7QUFBQSxRQUVNLEtBQU0sTUFBTTtBQUFBO0FBQ2hCLGdCQUFJLFFBQVEsT0FBTyxTQUFTLDZCQUFNLEtBQUssSUFBSSxLQUFLLFFBQVEsTUFBTTtBQUM5RCxrQkFBTSxTQUFTLDZCQUFNO0FBRXJCLGdCQUFJLFVBQVUsU0FBUyxPQUFPLFdBQVcsWUFBWSxFQUFFLGFBQWEsVUFBVTtBQUM1RSxvQkFBTSxJQUFJLHFCQUFxQiwrQkFBK0I7QUFBQSxZQUNoRTtBQUVBLDZDQUFRO0FBRVIsZ0JBQUksS0FBSyxlQUFlLGNBQWM7QUFDcEMscUJBQU87QUFBQSxZQUNUO0FBRUEsbUJBQU8sTUFBTSxJQUFJLFFBQVEsQ0FBQ0MsVUFBUyxXQUFXO0FBQzVDLGtCQUFJLEtBQUssY0FBYyxJQUFJLE9BQU87QUFDaEMscUJBQUssUUFBUSxJQUFJLFdBQVcsQ0FBQztBQUFBLGNBQy9CO0FBRUEsb0JBQU0sVUFBVSxNQUFNO0FBaEw1QjtBQWlMUSxxQkFBSyxTQUFRLFlBQU8sV0FBUCxZQUFpQixJQUFJLFdBQVcsQ0FBQztBQUFBLGNBQ2hEO0FBQ0EsK0NBQVEsaUJBQWlCLFNBQVM7QUFFbEMsbUJBQ0csR0FBRyxTQUFTLFdBQVk7QUF0TGpDO0FBdUxVLGlEQUFRLG9CQUFvQixTQUFTO0FBQ3JDLG9CQUFJLGlDQUFRLFNBQVM7QUFDbkIsMEJBQU8sWUFBTyxXQUFQLFlBQWlCLElBQUksV0FBVyxDQUFDO0FBQUEsZ0JBQzFDLE9BQU87QUFDTCxrQkFBQUEsU0FBUSxJQUFJO0FBQUEsZ0JBQ2Q7QUFBQSxjQUNGLENBQUMsRUFDQSxHQUFHLFNBQVMsSUFBSSxFQUNoQixHQUFHLFFBQVEsU0FBVSxPQUFPO0FBQzNCLHlCQUFTLE1BQU07QUFDZixvQkFBSSxTQUFTLEdBQUc7QUFDZCx1QkFBSyxRQUFRO0FBQUEsZ0JBQ2Y7QUFBQSxjQUNGLENBQUMsRUFDQSxPQUFPO0FBQUEsWUFDWixDQUFDO0FBQUEsVUFDSDtBQUFBO0FBQUEsTUFDRjtBQUdBLGVBQVMsU0FBVSxNQUFNO0FBRXZCLGVBQVEsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEVBQUUsV0FBVyxRQUFTLEtBQUssUUFBUTtBQUFBLE1BQ3RFO0FBR0EsZUFBUyxXQUFZLE1BQU07QUFDekIsZUFBTyxLQUFLLFlBQVksSUFBSSxLQUFLLFNBQVMsSUFBSTtBQUFBLE1BQ2hEO0FBRUEsZUFBZSxRQUFTLFFBQVEsTUFBTTtBQUFBO0FBQ3BDLGlCQUFPLENBQUMsT0FBTyxRQUFRLENBQUM7QUFFeEIsaUJBQU8sSUFBSSxRQUFRLENBQUNBLFVBQVMsV0FBVztBQXhOMUM7QUF5TkksZ0JBQUksV0FBVyxNQUFNLEdBQUc7QUFDdEIsb0JBQU0sU0FBUyxPQUFPO0FBQ3RCLGtCQUFJLE9BQU8sYUFBYSxPQUFPLGlCQUFpQixPQUFPO0FBQ3JELHVCQUNHLEdBQUcsU0FBUyxTQUFPO0FBQ2xCLHlCQUFPLEdBQUc7QUFBQSxnQkFDWixDQUFDLEVBQ0EsR0FBRyxTQUFTLE1BQU07QUFDakIseUJBQU8sSUFBSSxVQUFVLFVBQVUsQ0FBQztBQUFBLGdCQUNsQyxDQUFDO0FBQUEsY0FDTCxPQUFPO0FBQ0wsd0JBQU8sWUFBTyxZQUFQLFlBQWtCLElBQUksVUFBVSxVQUFVLENBQUM7QUFBQSxjQUNwRDtBQUFBLFlBQ0YsT0FBTztBQUNMLDZCQUFlLE1BQU07QUFDbkIsdUJBQU8sUUFBUSxJQUFJO0FBQUEsa0JBQ2pCO0FBQUEsa0JBQ0E7QUFBQSxrQkFDQSxTQUFBQTtBQUFBLGtCQUNBO0FBQUEsa0JBQ0EsUUFBUTtBQUFBLGtCQUNSLE1BQU0sQ0FBQztBQUFBLGdCQUNUO0FBRUEsdUJBQ0csR0FBRyxTQUFTLFNBQVUsS0FBSztBQUMxQixnQ0FBYyxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUEsZ0JBQ25DLENBQUMsRUFDQSxHQUFHLFNBQVMsV0FBWTtBQUN2QixzQkFBSSxLQUFLLFFBQVEsRUFBRSxTQUFTLE1BQU07QUFDaEMsa0NBQWMsS0FBSyxRQUFRLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQztBQUFBLGtCQUN6RDtBQUFBLGdCQUNGLENBQUM7QUFFSCw2QkFBYSxPQUFPLFFBQVEsQ0FBQztBQUFBLGNBQy9CLENBQUM7QUFBQSxZQUNIO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSDtBQUFBO0FBRUEsZUFBUyxhQUFjQyxVQUFTO0FBQzlCLFlBQUlBLFNBQVEsU0FBUyxNQUFNO0FBQ3pCO0FBQUEsUUFDRjtBQUVBLGNBQU0sRUFBRSxnQkFBZ0IsTUFBTSxJQUFJQSxTQUFRO0FBRTFDLFlBQUksTUFBTSxhQUFhO0FBQ3JCLGdCQUFNLFFBQVEsTUFBTTtBQUNwQixnQkFBTSxNQUFNLE1BQU0sT0FBTztBQUN6QixtQkFBUyxJQUFJLE9BQU8sSUFBSSxLQUFLLEtBQUs7QUFDaEMsd0JBQVlBLFVBQVMsTUFBTSxPQUFPLENBQUMsQ0FBQztBQUFBLFVBQ3RDO0FBQUEsUUFDRixPQUFPO0FBQ0wscUJBQVcsU0FBUyxNQUFNLFFBQVE7QUFDaEMsd0JBQVlBLFVBQVMsS0FBSztBQUFBLFVBQzVCO0FBQUEsUUFDRjtBQUVBLFlBQUksTUFBTSxZQUFZO0FBQ3BCLHFCQUFXLEtBQUssUUFBUSxDQUFDO0FBQUEsUUFDM0IsT0FBTztBQUNMLFVBQUFBLFNBQVEsT0FBTyxHQUFHLE9BQU8sV0FBWTtBQUNuQyx1QkFBVyxLQUFLLFFBQVEsQ0FBQztBQUFBLFVBQzNCLENBQUM7QUFBQSxRQUNIO0FBRUEsUUFBQUEsU0FBUSxPQUFPLE9BQU87QUFFdEIsZUFBT0EsU0FBUSxPQUFPLEtBQUssS0FBSyxNQUFNO0FBQUEsUUFFdEM7QUFBQSxNQUNGO0FBTUEsZUFBUyxhQUFjLFFBQVEsUUFBUTtBQUNyQyxZQUFJLE9BQU8sV0FBVyxLQUFLLFdBQVcsR0FBRztBQUN2QyxpQkFBTztBQUFBLFFBQ1Q7QUFDQSxjQUFNLFNBQVMsT0FBTyxXQUFXLElBQUksT0FBTyxDQUFDLElBQUksT0FBTyxPQUFPLFFBQVEsTUFBTTtBQUM3RSxjQUFNLGVBQWUsT0FBTztBQUc1QixjQUFNLFFBQ0osZUFBZSxLQUNmLE9BQU8sQ0FBQyxNQUFNLE9BQ2QsT0FBTyxDQUFDLE1BQU0sT0FDZCxPQUFPLENBQUMsTUFBTSxNQUNWLElBQ0E7QUFDTixlQUFPLE9BQU8sVUFBVSxPQUFPLFlBQVk7QUFBQSxNQUM3QztBQU9BLGVBQVMsYUFBYyxRQUFRLFFBQVE7QUFDckMsWUFBSSxPQUFPLFdBQVcsS0FBSyxXQUFXLEdBQUc7QUFDdkMsaUJBQU8sSUFBSSxXQUFXLENBQUM7QUFBQSxRQUN6QjtBQUNBLFlBQUksT0FBTyxXQUFXLEdBQUc7QUFFdkIsaUJBQU8sSUFBSSxXQUFXLE9BQU8sQ0FBQyxDQUFDO0FBQUEsUUFDakM7QUFDQSxjQUFNLFNBQVMsSUFBSSxXQUFXLE9BQU8sZ0JBQWdCLE1BQU0sRUFBRSxNQUFNO0FBRW5FLFlBQUksU0FBUztBQUNiLGlCQUFTLElBQUksR0FBRyxJQUFJLE9BQU8sUUFBUSxFQUFFLEdBQUc7QUFDdEMsZ0JBQU0sUUFBUSxPQUFPLENBQUM7QUFDdEIsaUJBQU8sSUFBSSxPQUFPLE1BQU07QUFDeEIsb0JBQVUsTUFBTTtBQUFBLFFBQ2xCO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFFQSxlQUFTLFdBQVlBLFVBQVM7QUFDNUIsY0FBTSxFQUFFLE1BQU0sTUFBTSxTQUFBRCxVQUFTLFFBQVEsT0FBTyxJQUFJQztBQUVoRCxZQUFJO0FBQ0YsY0FBSSxTQUFTLFFBQVE7QUFDbkIsWUFBQUQsU0FBUSxhQUFhLE1BQU0sTUFBTSxDQUFDO0FBQUEsVUFDcEMsV0FBVyxTQUFTLFFBQVE7QUFDMUIsWUFBQUEsU0FBUSxLQUFLLE1BQU0sYUFBYSxNQUFNLE1BQU0sQ0FBQyxDQUFDO0FBQUEsVUFDaEQsV0FBVyxTQUFTLGVBQWU7QUFDakMsWUFBQUEsU0FBUSxhQUFhLE1BQU0sTUFBTSxFQUFFLE1BQU07QUFBQSxVQUMzQyxXQUFXLFNBQVMsUUFBUTtBQUMxQixZQUFBQSxTQUFRLElBQUksS0FBSyxNQUFNLEVBQUUsTUFBTSxPQUFPLFlBQVksRUFBRSxDQUFDLENBQUM7QUFBQSxVQUN4RCxXQUFXLFNBQVMsU0FBUztBQUMzQixZQUFBQSxTQUFRLGFBQWEsTUFBTSxNQUFNLENBQUM7QUFBQSxVQUNwQztBQUVBLHdCQUFjQyxRQUFPO0FBQUEsUUFDdkIsU0FBUyxLQUFLO0FBQ1osaUJBQU8sUUFBUSxHQUFHO0FBQUEsUUFDcEI7QUFBQSxNQUNGO0FBRUEsZUFBUyxZQUFhQSxVQUFTLE9BQU87QUFDcEMsUUFBQUEsU0FBUSxVQUFVLE1BQU07QUFDeEIsUUFBQUEsU0FBUSxLQUFLLEtBQUssS0FBSztBQUFBLE1BQ3pCO0FBRUEsZUFBUyxjQUFlQSxVQUFTLEtBQUs7QUFDcEMsWUFBSUEsU0FBUSxTQUFTLE1BQU07QUFDekI7QUFBQSxRQUNGO0FBRUEsWUFBSSxLQUFLO0FBQ1AsVUFBQUEsU0FBUSxPQUFPLEdBQUc7QUFBQSxRQUNwQixPQUFPO0FBQ0wsVUFBQUEsU0FBUSxRQUFRO0FBQUEsUUFDbEI7QUFFQSxRQUFBQSxTQUFRLE9BQU87QUFDZixRQUFBQSxTQUFRLFNBQVM7QUFDakIsUUFBQUEsU0FBUSxVQUFVO0FBQ2xCLFFBQUFBLFNBQVEsU0FBUztBQUNqQixRQUFBQSxTQUFRLFNBQVM7QUFDakIsUUFBQUEsU0FBUSxPQUFPO0FBQUEsTUFDakI7QUFFQSxhQUFPLFVBQVUsRUFBRSxVQUFVLGNBQWMsYUFBYTtBQUFBO0FBQUE7OztBQ2hZeEQsTUFBQUMsZ0JBQUE7QUFBQTtBQUFBLFVBQU0sU0FBUyxVQUFRLFFBQWE7QUFDcEMsVUFBTTtBQUFBLFFBQ0o7QUFBQSxNQUNGLElBQUk7QUFFSixVQUFNLEVBQUUsYUFBYSxJQUFJO0FBQ3pCLFVBQU0sY0FBYyxNQUFNO0FBRTFCLGVBQWUsNEJBQTZCLElBQXFFO0FBQUEsbURBQXJFLEVBQUUsVUFBVSxNQUFNLGFBQWEsWUFBWSxlQUFlLFFBQVEsR0FBRztBQUMvRyxpQkFBTyxJQUFJO0FBRVgsY0FBSSxTQUFTLENBQUM7QUFDZCxjQUFJLFNBQVM7QUFFYixjQUFJO0FBQ0Y7QUFBQSx5Q0FBMEIsT0FBMUIsMEVBQWdDO0FBQXJCLHNCQUFNLFFBQWpCO0FBQ0UsdUJBQU8sS0FBSyxLQUFLO0FBQ2pCLDBCQUFVLE1BQU07QUFDaEIsb0JBQUksU0FBUyxhQUFhO0FBQ3hCLDJCQUFTLENBQUM7QUFDViwyQkFBUztBQUNUO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGO0FBQUEscUJBUkEsTUFmSjtBQWVJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBU0YsU0FBUTtBQUNOLHFCQUFTLENBQUM7QUFDVixxQkFBUztBQUFBLFVBRVg7QUFFQSxnQkFBTSxVQUFVLHdCQUF3QixVQUFVLEdBQUcsZ0JBQWdCLEtBQUssYUFBYSxLQUFLLEVBQUU7QUFFOUYsY0FBSSxlQUFlLE9BQU8sQ0FBQyxlQUFlLENBQUMsUUFBUTtBQUNqRCwyQkFBZSxNQUFNLFNBQVMsSUFBSSx3QkFBd0IsU0FBUyxZQUFZLE9BQU8sQ0FBQyxDQUFDO0FBQ3hGO0FBQUEsVUFDRjtBQUVBLGdCQUFNLGtCQUFrQixNQUFNO0FBQzlCLGdCQUFNLGtCQUFrQjtBQUN4QixjQUFJO0FBRUosY0FBSTtBQUNGLGdCQUFJLDZCQUE2QixXQUFXLEdBQUc7QUFDN0Msd0JBQVUsS0FBSyxNQUFNLGFBQWEsUUFBUSxNQUFNLENBQUM7QUFBQSxZQUNuRCxXQUFXLGtCQUFrQixXQUFXLEdBQUc7QUFDekMsd0JBQVUsYUFBYSxRQUFRLE1BQU07QUFBQSxZQUN2QztBQUFBLFVBQ0YsU0FBUTtBQUFBLFVBRVIsVUFBRTtBQUNBLGtCQUFNLGtCQUFrQjtBQUFBLFVBQzFCO0FBQ0EseUJBQWUsTUFBTSxTQUFTLElBQUksd0JBQXdCLFNBQVMsWUFBWSxTQUFTLE9BQU8sQ0FBQyxDQUFDO0FBQUEsUUFDbkc7QUFBQTtBQUVBLFVBQU0sK0JBQStCLENBQUMsZ0JBQWdCO0FBQ3BELGVBQ0UsWUFBWSxTQUFTLE1BQ3JCLFlBQVksRUFBRSxNQUFNLE9BQ3BCLFlBQVksQ0FBQyxNQUFNLE9BQ25CLFlBQVksQ0FBQyxNQUFNLE9BQ25CLFlBQVksQ0FBQyxNQUFNLE9BQ25CLFlBQVksQ0FBQyxNQUFNLE9BQ25CLFlBQVksQ0FBQyxNQUFNLE9BQ25CLFlBQVksQ0FBQyxNQUFNLE9BQ25CLFlBQVksQ0FBQyxNQUFNLE9BQ25CLFlBQVksQ0FBQyxNQUFNLE9BQ25CLFlBQVksQ0FBQyxNQUFNLE9BQ25CLFlBQVksQ0FBQyxNQUFNLE9BQ25CLFlBQVksRUFBRSxNQUFNLE9BQ3BCLFlBQVksRUFBRSxNQUFNLE9BQ3BCLFlBQVksRUFBRSxNQUFNLE9BQ3BCLFlBQVksRUFBRSxNQUFNLE9BQ3BCLFlBQVksRUFBRSxNQUFNO0FBQUEsTUFFeEI7QUFFQSxVQUFNLG9CQUFvQixDQUFDLGdCQUFnQjtBQUN6QyxlQUNFLFlBQVksU0FBUyxLQUNyQixZQUFZLENBQUMsTUFBTSxPQUNuQixZQUFZLENBQUMsTUFBTSxPQUNuQixZQUFZLENBQUMsTUFBTSxPQUNuQixZQUFZLENBQUMsTUFBTSxPQUNuQixZQUFZLENBQUMsTUFBTTtBQUFBLE1BRXZCO0FBRUEsYUFBTyxVQUFVO0FBQUEsUUFDZjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBO0FBQUE7OztBQzVGQTtBQUFBO0FBQUE7QUFFQSxVQUFNLFNBQVMsVUFBUSxRQUFhO0FBQ3BDLFVBQU0sRUFBRSxTQUFTLElBQUk7QUFDckIsVUFBTSxFQUFFLHNCQUFzQixvQkFBb0IsSUFBSTtBQUN0RCxVQUFNLE9BQU87QUFDYixVQUFNLEVBQUUsNEJBQTRCLElBQUk7QUFDeEMsVUFBTSxFQUFFLGNBQWMsSUFBSSxVQUFRLGFBQWtCO0FBRXBELFVBQU0saUJBQU4sY0FBNkIsY0FBYztBQUFBLFFBQ3pDLFlBQWEsTUFBTSxVQUFVO0FBVi9CO0FBV0ksY0FBSSxDQUFDLFFBQVEsT0FBTyxTQUFTLFVBQVU7QUFDckMsa0JBQU0sSUFBSSxxQkFBcUIsY0FBYztBQUFBLFVBQy9DO0FBRUEsZ0JBQU0sRUFBRSxRQUFRLFFBQVEsUUFBUSxNQUFNLFFBQVEsaUJBQWlCLGNBQWMsY0FBYyxJQUFJO0FBRS9GLGNBQUk7QUFDRixnQkFBSSxPQUFPLGFBQWEsWUFBWTtBQUNsQyxvQkFBTSxJQUFJLHFCQUFxQixrQkFBa0I7QUFBQSxZQUNuRDtBQUVBLGdCQUFJLGtCQUFrQixPQUFPLGtCQUFrQixZQUFZLGdCQUFnQixJQUFJO0FBQzdFLG9CQUFNLElBQUkscUJBQXFCLHVCQUF1QjtBQUFBLFlBQ3hEO0FBRUEsZ0JBQUksVUFBVSxPQUFPLE9BQU8sT0FBTyxjQUFjLE9BQU8sT0FBTyxxQkFBcUIsWUFBWTtBQUM5RixvQkFBTSxJQUFJLHFCQUFxQiwrQ0FBK0M7QUFBQSxZQUNoRjtBQUVBLGdCQUFJLFdBQVcsV0FBVztBQUN4QixvQkFBTSxJQUFJLHFCQUFxQixnQkFBZ0I7QUFBQSxZQUNqRDtBQUVBLGdCQUFJLFVBQVUsT0FBTyxXQUFXLFlBQVk7QUFDMUMsb0JBQU0sSUFBSSxxQkFBcUIseUJBQXlCO0FBQUEsWUFDMUQ7QUFFQSxrQkFBTSxnQkFBZ0I7QUFBQSxVQUN4QixTQUFTLEtBQUs7QUFDWixnQkFBSSxLQUFLLFNBQVMsSUFBSSxHQUFHO0FBQ3ZCLG1CQUFLLFFBQVEsS0FBSyxHQUFHLFNBQVMsS0FBSyxHQUFHLEdBQUcsR0FBRztBQUFBLFlBQzlDO0FBQ0Esa0JBQU07QUFBQSxVQUNSO0FBRUEsZUFBSyxTQUFTO0FBQ2QsZUFBSyxrQkFBa0IsbUJBQW1CO0FBQzFDLGVBQUssU0FBUyxVQUFVO0FBQ3hCLGVBQUssV0FBVztBQUNoQixlQUFLLE1BQU07QUFDWCxlQUFLLFFBQVE7QUFDYixlQUFLLE9BQU87QUFDWixlQUFLLFdBQVcsQ0FBQztBQUNqQixlQUFLLFVBQVU7QUFDZixlQUFLLFNBQVMsVUFBVTtBQUN4QixlQUFLLGVBQWU7QUFDcEIsZUFBSyxnQkFBZ0I7QUFDckIsZUFBSyxTQUFTO0FBQ2QsZUFBSyxTQUFTO0FBQ2QsZUFBSyxzQkFBc0I7QUFFM0IsY0FBSSxLQUFLLFNBQVMsSUFBSSxHQUFHO0FBQ3ZCLGlCQUFLLEdBQUcsU0FBUyxDQUFDLFFBQVE7QUFDeEIsbUJBQUssUUFBUSxHQUFHO0FBQUEsWUFDbEIsQ0FBQztBQUFBLFVBQ0g7QUFFQSxjQUFJLEtBQUssUUFBUTtBQUNmLGdCQUFJLEtBQUssT0FBTyxTQUFTO0FBQ3ZCLG1CQUFLLFVBQVMsVUFBSyxPQUFPLFdBQVosWUFBc0IsSUFBSSxvQkFBb0I7QUFBQSxZQUM5RCxPQUFPO0FBQ0wsbUJBQUssc0JBQXNCLEtBQUssaUJBQWlCLEtBQUssUUFBUSxNQUFNO0FBeEU1RSxvQkFBQUMsS0FBQTtBQXlFVSxxQkFBSyxVQUFTQSxNQUFBLEtBQUssT0FBTyxXQUFaLE9BQUFBLE1BQXNCLElBQUksb0JBQW9CO0FBQzVELG9CQUFJLEtBQUssS0FBSztBQUNaLHVCQUFLLFFBQVEsS0FBSyxJQUFJLEdBQUcsU0FBUyxLQUFLLEdBQUcsR0FBRyxLQUFLLE1BQU07QUFBQSxnQkFDMUQsV0FBVyxLQUFLLE9BQU87QUFDckIsdUJBQUssTUFBTSxLQUFLLE1BQU07QUFBQSxnQkFDeEI7QUFFQSxvQkFBSSxLQUFLLHFCQUFxQjtBQUM1Qiw2QkFBSyxRQUFMLG1CQUFVLElBQUksU0FBUyxLQUFLO0FBQzVCLHVCQUFLLG9CQUFvQjtBQUN6Qix1QkFBSyxzQkFBc0I7QUFBQSxnQkFDN0I7QUFBQSxjQUNGLENBQUM7QUFBQSxZQUNIO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxRQUVBLFVBQVcsT0FBTyxTQUFTO0FBQ3pCLGNBQUksS0FBSyxRQUFRO0FBQ2Ysa0JBQU0sS0FBSyxNQUFNO0FBQ2pCO0FBQUEsVUFDRjtBQUVBLGlCQUFPLEtBQUssUUFBUTtBQUVwQixlQUFLLFFBQVE7QUFDYixlQUFLLFVBQVU7QUFBQSxRQUNqQjtBQUFBLFFBRUEsVUFBVyxZQUFZLFlBQVksUUFBUSxlQUFlO0FBQ3hELGdCQUFNLEVBQUUsVUFBVSxRQUFRLE9BQU8sU0FBUyxpQkFBaUIsY0FBYyxJQUFJO0FBRTdFLGdCQUFNLFVBQVUsb0JBQW9CLFFBQVEsS0FBSyxnQkFBZ0IsVUFBVSxJQUFJLEtBQUssYUFBYSxVQUFVO0FBRTNHLGNBQUksYUFBYSxLQUFLO0FBQ3BCLGdCQUFJLEtBQUssUUFBUTtBQUNmLG1CQUFLLE9BQU8sRUFBRSxZQUFZLFFBQVEsQ0FBQztBQUFBLFlBQ3JDO0FBQ0E7QUFBQSxVQUNGO0FBRUEsZ0JBQU0sZ0JBQWdCLG9CQUFvQixRQUFRLEtBQUssYUFBYSxVQUFVLElBQUk7QUFDbEYsZ0JBQU0sY0FBYyxjQUFjLGNBQWM7QUFDaEQsZ0JBQU0sZ0JBQWdCLGNBQWMsZ0JBQWdCO0FBQ3BELGdCQUFNLE1BQU0sSUFBSSxTQUFTO0FBQUEsWUFDdkI7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0EsZUFBZSxLQUFLLFdBQVcsVUFBVSxnQkFDckMsT0FBTyxhQUFhLElBQ3BCO0FBQUEsWUFDSjtBQUFBLFVBQ0YsQ0FBQztBQUVELGNBQUksS0FBSyxxQkFBcUI7QUFDNUIsZ0JBQUksR0FBRyxTQUFTLEtBQUssbUJBQW1CO0FBQUEsVUFDMUM7QUFFQSxlQUFLLFdBQVc7QUFDaEIsZUFBSyxNQUFNO0FBQ1gsY0FBSSxhQUFhLE1BQU07QUFDckIsZ0JBQUksS0FBSyxnQkFBZ0IsY0FBYyxLQUFLO0FBQzFDLG1CQUFLO0FBQUEsZ0JBQWdCO0FBQUEsZ0JBQTZCO0FBQUEsZ0JBQ2hELEVBQUUsVUFBVSxNQUFNLEtBQUssYUFBYSxZQUFZLGVBQWUsUUFBUTtBQUFBLGNBQ3pFO0FBQUEsWUFDRixPQUFPO0FBQ0wsbUJBQUssZ0JBQWdCLFVBQVUsTUFBTSxNQUFNO0FBQUEsZ0JBQ3pDO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQSxVQUFVLEtBQUs7QUFBQSxnQkFDZjtBQUFBLGdCQUNBLE1BQU07QUFBQSxnQkFDTjtBQUFBLGNBQ0YsQ0FBQztBQUFBLFlBQ0g7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLFFBRUEsT0FBUSxPQUFPO0FBQ2IsaUJBQU8sS0FBSyxJQUFJLEtBQUssS0FBSztBQUFBLFFBQzVCO0FBQUEsUUFFQSxXQUFZLFVBQVU7QUFDcEIsZUFBSyxhQUFhLFVBQVUsS0FBSyxRQUFRO0FBQ3pDLGVBQUssSUFBSSxLQUFLLElBQUk7QUFBQSxRQUNwQjtBQUFBLFFBRUEsUUFBUyxLQUFLO0FBQ1osZ0JBQU0sRUFBRSxLQUFLLFVBQVUsTUFBTSxPQUFPLElBQUk7QUFFeEMsY0FBSSxVQUFVO0FBRVosaUJBQUssV0FBVztBQUNoQiwyQkFBZSxNQUFNO0FBQ25CLG1CQUFLLGdCQUFnQixVQUFVLE1BQU0sS0FBSyxFQUFFLE9BQU8sQ0FBQztBQUFBLFlBQ3RELENBQUM7QUFBQSxVQUNIO0FBRUEsY0FBSSxLQUFLO0FBQ1AsaUJBQUssTUFBTTtBQUVYLDJCQUFlLE1BQU07QUFDbkIsbUJBQUssUUFBUSxLQUFLLEdBQUc7QUFBQSxZQUN2QixDQUFDO0FBQUEsVUFDSDtBQUVBLGNBQUksTUFBTTtBQUNSLGlCQUFLLE9BQU87QUFDWixpQkFBSyxRQUFRLE1BQU0sR0FBRztBQUFBLFVBQ3hCO0FBRUEsY0FBSSxLQUFLLHFCQUFxQjtBQUM1Qix1Q0FBSyxJQUFJLFNBQVMsS0FBSztBQUN2QixpQkFBSyxvQkFBb0I7QUFDekIsaUJBQUssc0JBQXNCO0FBQUEsVUFDN0I7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLGVBQVMsUUFBUyxNQUFNLFVBQVU7QUFDaEMsWUFBSSxhQUFhLFFBQVc7QUFDMUIsaUJBQU8sSUFBSSxRQUFRLENBQUNDLFVBQVMsV0FBVztBQUN0QyxvQkFBUSxLQUFLLE1BQU0sTUFBTSxDQUFDLEtBQUssU0FBUztBQUN0QyxxQkFBTyxNQUFNLE9BQU8sR0FBRyxJQUFJQSxTQUFRLElBQUk7QUFBQSxZQUN6QyxDQUFDO0FBQUEsVUFDSCxDQUFDO0FBQUEsUUFDSDtBQUVBLFlBQUk7QUFDRixlQUFLLFNBQVMsTUFBTSxJQUFJLGVBQWUsTUFBTSxRQUFRLENBQUM7QUFBQSxRQUN4RCxTQUFTLEtBQUs7QUFDWixjQUFJLE9BQU8sYUFBYSxZQUFZO0FBQ2xDLGtCQUFNO0FBQUEsVUFDUjtBQUNBLGdCQUFNLFNBQVMsNkJBQU07QUFDckIseUJBQWUsTUFBTSxTQUFTLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUFBLFFBQ2hEO0FBQUEsTUFDRjtBQUVBLGFBQU8sVUFBVTtBQUNqQixhQUFPLFFBQVEsaUJBQWlCO0FBQUE7QUFBQTs7O0FDck5oQztBQUFBO0FBQUEsVUFBTSxFQUFFLGlCQUFpQixJQUFJO0FBQzdCLFVBQU0sRUFBRSxvQkFBb0IsSUFBSTtBQUVoQyxVQUFNLFlBQVksT0FBTyxXQUFXO0FBQ3BDLFVBQU0sVUFBVSxPQUFPLFNBQVM7QUFFaEMsZUFBUyxNQUFPLE1BQU07QUFOdEI7QUFPRSxZQUFJLEtBQUssT0FBTztBQUNkLGVBQUssT0FBTSxVQUFLLE9BQU8sTUFBWixtQkFBZSxNQUFNO0FBQUEsUUFDbEMsT0FBTztBQUNMLGVBQUssVUFBUyxnQkFBSyxPQUFPLE1BQVosbUJBQWUsV0FBZixZQUF5QixJQUFJLG9CQUFvQjtBQUFBLFFBQ2pFO0FBQ0EscUJBQWEsSUFBSTtBQUFBLE1BQ25CO0FBRUEsZUFBUyxVQUFXLE1BQU0sUUFBUTtBQUNoQyxhQUFLLFNBQVM7QUFFZCxhQUFLLE9BQU8sSUFBSTtBQUNoQixhQUFLLFNBQVMsSUFBSTtBQUVsQixZQUFJLENBQUMsUUFBUTtBQUNYO0FBQUEsUUFDRjtBQUVBLFlBQUksT0FBTyxTQUFTO0FBQ2xCLGdCQUFNLElBQUk7QUFDVjtBQUFBLFFBQ0Y7QUFFQSxhQUFLLE9BQU8sSUFBSTtBQUNoQixhQUFLLFNBQVMsSUFBSSxNQUFNO0FBQ3RCLGdCQUFNLElBQUk7QUFBQSxRQUNaO0FBRUEseUJBQWlCLEtBQUssT0FBTyxHQUFHLEtBQUssU0FBUyxDQUFDO0FBQUEsTUFDakQ7QUFFQSxlQUFTLGFBQWMsTUFBTTtBQUMzQixZQUFJLENBQUMsS0FBSyxPQUFPLEdBQUc7QUFDbEI7QUFBQSxRQUNGO0FBRUEsWUFBSSx5QkFBeUIsS0FBSyxPQUFPLEdBQUc7QUFDMUMsZUFBSyxPQUFPLEVBQUUsb0JBQW9CLFNBQVMsS0FBSyxTQUFTLENBQUM7QUFBQSxRQUM1RCxPQUFPO0FBQ0wsZUFBSyxPQUFPLEVBQUUsZUFBZSxTQUFTLEtBQUssU0FBUyxDQUFDO0FBQUEsUUFDdkQ7QUFFQSxhQUFLLE9BQU8sSUFBSTtBQUNoQixhQUFLLFNBQVMsSUFBSTtBQUFBLE1BQ3BCO0FBRUEsYUFBTyxVQUFVO0FBQUEsUUFDZjtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUE7QUFBQTs7O0FDeERBO0FBQUE7QUFBQTtBQUVBLFVBQU0sU0FBUyxVQUFRLFFBQWE7QUFDcEMsVUFBTSxFQUFFLFVBQVUsWUFBWSxJQUFJLFVBQVEsUUFBYTtBQUN2RCxVQUFNLEVBQUUsc0JBQXNCLHdCQUF3QixJQUFJO0FBQzFELFVBQU0sT0FBTztBQUNiLFVBQU0sRUFBRSw0QkFBNEIsSUFBSTtBQUN4QyxVQUFNLEVBQUUsY0FBYyxJQUFJLFVBQVEsYUFBa0I7QUFDcEQsVUFBTSxFQUFFLFdBQVcsYUFBYSxJQUFJO0FBRXBDLFVBQU0sZ0JBQU4sY0FBNEIsY0FBYztBQUFBLFFBQ3hDLFlBQWEsTUFBTSxTQUFTLFVBQVU7QUFDcEMsY0FBSSxDQUFDLFFBQVEsT0FBTyxTQUFTLFVBQVU7QUFDckMsa0JBQU0sSUFBSSxxQkFBcUIsY0FBYztBQUFBLFVBQy9DO0FBRUEsZ0JBQU0sRUFBRSxRQUFRLFFBQVEsUUFBUSxNQUFNLFFBQVEsaUJBQWlCLGFBQWEsSUFBSTtBQUVoRixjQUFJO0FBQ0YsZ0JBQUksT0FBTyxhQUFhLFlBQVk7QUFDbEMsb0JBQU0sSUFBSSxxQkFBcUIsa0JBQWtCO0FBQUEsWUFDbkQ7QUFFQSxnQkFBSSxPQUFPLFlBQVksWUFBWTtBQUNqQyxvQkFBTSxJQUFJLHFCQUFxQixpQkFBaUI7QUFBQSxZQUNsRDtBQUVBLGdCQUFJLFVBQVUsT0FBTyxPQUFPLE9BQU8sY0FBYyxPQUFPLE9BQU8scUJBQXFCLFlBQVk7QUFDOUYsb0JBQU0sSUFBSSxxQkFBcUIsK0NBQStDO0FBQUEsWUFDaEY7QUFFQSxnQkFBSSxXQUFXLFdBQVc7QUFDeEIsb0JBQU0sSUFBSSxxQkFBcUIsZ0JBQWdCO0FBQUEsWUFDakQ7QUFFQSxnQkFBSSxVQUFVLE9BQU8sV0FBVyxZQUFZO0FBQzFDLG9CQUFNLElBQUkscUJBQXFCLHlCQUF5QjtBQUFBLFlBQzFEO0FBRUEsa0JBQU0sZUFBZTtBQUFBLFVBQ3ZCLFNBQVMsS0FBSztBQUNaLGdCQUFJLEtBQUssU0FBUyxJQUFJLEdBQUc7QUFDdkIsbUJBQUssUUFBUSxLQUFLLEdBQUcsU0FBUyxLQUFLLEdBQUcsR0FBRyxHQUFHO0FBQUEsWUFDOUM7QUFDQSxrQkFBTTtBQUFBLFVBQ1I7QUFFQSxlQUFLLGtCQUFrQixtQkFBbUI7QUFDMUMsZUFBSyxTQUFTLFVBQVU7QUFDeEIsZUFBSyxVQUFVO0FBQ2YsZUFBSyxXQUFXO0FBQ2hCLGVBQUssTUFBTTtBQUNYLGVBQUssUUFBUTtBQUNiLGVBQUssVUFBVTtBQUNmLGVBQUssV0FBVztBQUNoQixlQUFLLE9BQU87QUFDWixlQUFLLFNBQVMsVUFBVTtBQUN4QixlQUFLLGVBQWUsZ0JBQWdCO0FBRXBDLGNBQUksS0FBSyxTQUFTLElBQUksR0FBRztBQUN2QixpQkFBSyxHQUFHLFNBQVMsQ0FBQyxRQUFRO0FBQ3hCLG1CQUFLLFFBQVEsR0FBRztBQUFBLFlBQ2xCLENBQUM7QUFBQSxVQUNIO0FBRUEsb0JBQVUsTUFBTSxNQUFNO0FBQUEsUUFDeEI7QUFBQSxRQUVBLFVBQVcsT0FBTyxTQUFTO0FBQ3pCLGNBQUksS0FBSyxRQUFRO0FBQ2Ysa0JBQU0sS0FBSyxNQUFNO0FBQ2pCO0FBQUEsVUFDRjtBQUVBLGlCQUFPLEtBQUssUUFBUTtBQUVwQixlQUFLLFFBQVE7QUFDYixlQUFLLFVBQVU7QUFBQSxRQUNqQjtBQUFBLFFBRUEsVUFBVyxZQUFZLFlBQVksUUFBUSxlQUFlO0FBaEY1RDtBQWlGSSxnQkFBTSxFQUFFLFNBQVMsUUFBUSxTQUFTLFVBQVUsZ0JBQWdCLElBQUk7QUFFaEUsZ0JBQU0sVUFBVSxvQkFBb0IsUUFBUSxLQUFLLGdCQUFnQixVQUFVLElBQUksS0FBSyxhQUFhLFVBQVU7QUFFM0csY0FBSSxhQUFhLEtBQUs7QUFDcEIsZ0JBQUksS0FBSyxRQUFRO0FBQ2YsbUJBQUssT0FBTyxFQUFFLFlBQVksUUFBUSxDQUFDO0FBQUEsWUFDckM7QUFDQTtBQUFBLFVBQ0Y7QUFFQSxlQUFLLFVBQVU7QUFFZixjQUFJO0FBRUosY0FBSSxLQUFLLGdCQUFnQixjQUFjLEtBQUs7QUFDMUMsa0JBQU0sZ0JBQWdCLG9CQUFvQixRQUFRLEtBQUssYUFBYSxVQUFVLElBQUk7QUFDbEYsa0JBQU0sY0FBYyxjQUFjLGNBQWM7QUFDaEQsa0JBQU0sSUFBSSxZQUFZO0FBRXRCLGlCQUFLLFdBQVc7QUFDaEIsaUJBQUs7QUFBQSxjQUFnQjtBQUFBLGNBQTZCO0FBQUEsY0FDaEQsRUFBRSxVQUFVLE1BQU0sS0FBSyxhQUFhLFlBQVksZUFBZSxRQUFRO0FBQUEsWUFDekU7QUFBQSxVQUNGLE9BQU87QUFDTCxnQkFBSSxZQUFZLE1BQU07QUFDcEI7QUFBQSxZQUNGO0FBRUEsa0JBQU0sS0FBSyxnQkFBZ0IsU0FBUyxNQUFNO0FBQUEsY0FDeEM7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxZQUNGLENBQUM7QUFFRCxnQkFDRSxDQUFDLE9BQ0QsT0FBTyxJQUFJLFVBQVUsY0FDckIsT0FBTyxJQUFJLFFBQVEsY0FDbkIsT0FBTyxJQUFJLE9BQU8sWUFDbEI7QUFDQSxvQkFBTSxJQUFJLHdCQUF3QixtQkFBbUI7QUFBQSxZQUN2RDtBQUdBLHFCQUFTLEtBQUssRUFBRSxVQUFVLE1BQU0sR0FBRyxDQUFDLFFBQVE7QUFDMUMsb0JBQU0sRUFBRSxVQUFBQyxXQUFVLEtBQUFDLE1BQUssUUFBQUMsU0FBUSxVQUFVLE1BQU0sSUFBSTtBQUVuRCxtQkFBSyxNQUFNO0FBQ1gsa0JBQUksT0FBTyxDQUFDRCxLQUFJLFVBQVU7QUFDeEIscUJBQUssUUFBUUEsTUFBSyxHQUFHO0FBQUEsY0FDdkI7QUFFQSxtQkFBSyxXQUFXO0FBQ2hCLG1CQUFLLGdCQUFnQkQsV0FBVSxNQUFNLE9BQU8sTUFBTSxFQUFFLFFBQUFFLFNBQVEsU0FBUyxDQUFDO0FBRXRFLGtCQUFJLEtBQUs7QUFDUCxzQkFBTTtBQUFBLGNBQ1I7QUFBQSxZQUNGLENBQUM7QUFBQSxVQUNIO0FBRUEsY0FBSSxHQUFHLFNBQVMsTUFBTTtBQUV0QixlQUFLLE1BQU07QUFFWCxnQkFBTSxZQUFZLElBQUksc0JBQXNCLFNBQ3hDLElBQUkscUJBQ0osU0FBSSxtQkFBSixtQkFBb0I7QUFFeEIsaUJBQU8sY0FBYztBQUFBLFFBQ3ZCO0FBQUEsUUFFQSxPQUFRLE9BQU87QUFDYixnQkFBTSxFQUFFLElBQUksSUFBSTtBQUVoQixpQkFBTyxNQUFNLElBQUksTUFBTSxLQUFLLElBQUk7QUFBQSxRQUNsQztBQUFBLFFBRUEsV0FBWSxVQUFVO0FBQ3BCLGdCQUFNLEVBQUUsSUFBSSxJQUFJO0FBRWhCLHVCQUFhLElBQUk7QUFFakIsY0FBSSxDQUFDLEtBQUs7QUFDUjtBQUFBLFVBQ0Y7QUFFQSxlQUFLLFdBQVcsS0FBSyxhQUFhLFFBQVE7QUFFMUMsY0FBSSxJQUFJO0FBQUEsUUFDVjtBQUFBLFFBRUEsUUFBUyxLQUFLO0FBQ1osZ0JBQU0sRUFBRSxLQUFLLFVBQVUsUUFBUSxLQUFLLElBQUk7QUFFeEMsdUJBQWEsSUFBSTtBQUVqQixlQUFLLFVBQVU7QUFFZixjQUFJLEtBQUs7QUFDUCxpQkFBSyxNQUFNO0FBQ1gsaUJBQUssUUFBUSxLQUFLLEdBQUc7QUFBQSxVQUN2QixXQUFXLFVBQVU7QUFDbkIsaUJBQUssV0FBVztBQUNoQiwyQkFBZSxNQUFNO0FBQ25CLG1CQUFLLGdCQUFnQixVQUFVLE1BQU0sS0FBSyxFQUFFLE9BQU8sQ0FBQztBQUFBLFlBQ3RELENBQUM7QUFBQSxVQUNIO0FBRUEsY0FBSSxNQUFNO0FBQ1IsaUJBQUssT0FBTztBQUNaLGlCQUFLLFFBQVEsTUFBTSxHQUFHO0FBQUEsVUFDeEI7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLGVBQVMsT0FBUSxNQUFNLFNBQVMsVUFBVTtBQUN4QyxZQUFJLGFBQWEsUUFBVztBQUMxQixpQkFBTyxJQUFJLFFBQVEsQ0FBQ0MsVUFBUyxXQUFXO0FBQ3RDLG1CQUFPLEtBQUssTUFBTSxNQUFNLFNBQVMsQ0FBQyxLQUFLLFNBQVM7QUFDOUMscUJBQU8sTUFBTSxPQUFPLEdBQUcsSUFBSUEsU0FBUSxJQUFJO0FBQUEsWUFDekMsQ0FBQztBQUFBLFVBQ0gsQ0FBQztBQUFBLFFBQ0g7QUFFQSxZQUFJO0FBQ0YsZUFBSyxTQUFTLE1BQU0sSUFBSSxjQUFjLE1BQU0sU0FBUyxRQUFRLENBQUM7QUFBQSxRQUNoRSxTQUFTLEtBQUs7QUFDWixjQUFJLE9BQU8sYUFBYSxZQUFZO0FBQ2xDLGtCQUFNO0FBQUEsVUFDUjtBQUNBLGdCQUFNLFNBQVMsNkJBQU07QUFDckIseUJBQWUsTUFBTSxTQUFTLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUFBLFFBQ2hEO0FBQUEsTUFDRjtBQUVBLGFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQzNOakI7QUFBQTtBQUFBO0FBRUEsVUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsSUFBSSxVQUFRLFFBQWE7QUFDekIsVUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsSUFBSTtBQUNKLFVBQU0sT0FBTztBQUNiLFVBQU0sRUFBRSxjQUFjLElBQUksVUFBUSxhQUFrQjtBQUNwRCxVQUFNLEVBQUUsV0FBVyxhQUFhLElBQUk7QUFDcEMsVUFBTSxTQUFTLFVBQVEsUUFBYTtBQUVwQyxVQUFNLFVBQVUsT0FBTyxRQUFRO0FBRS9CLFVBQU0sa0JBQU4sY0FBOEIsU0FBUztBQUFBLFFBQ3JDLGNBQWU7QUFDYixnQkFBTSxFQUFFLGFBQWEsS0FBSyxDQUFDO0FBRTNCLGVBQUssT0FBTyxJQUFJO0FBQUEsUUFDbEI7QUFBQSxRQUVBLFFBQVM7QUFDUCxnQkFBTSxFQUFFLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSTtBQUU5QixjQUFJLFFBQVE7QUFDVixpQkFBSyxPQUFPLElBQUk7QUFDaEIsbUJBQU87QUFBQSxVQUNUO0FBQUEsUUFDRjtBQUFBLFFBRUEsU0FBVSxLQUFLLFVBQVU7QUFDdkIsZUFBSyxNQUFNO0FBRVgsbUJBQVMsR0FBRztBQUFBLFFBQ2Q7QUFBQSxNQUNGO0FBRUEsVUFBTSxtQkFBTixjQUErQixTQUFTO0FBQUEsUUFDdEMsWUFBYSxRQUFRO0FBQ25CLGdCQUFNLEVBQUUsYUFBYSxLQUFLLENBQUM7QUFDM0IsZUFBSyxPQUFPLElBQUk7QUFBQSxRQUNsQjtBQUFBLFFBRUEsUUFBUztBQUNQLGVBQUssT0FBTyxFQUFFO0FBQUEsUUFDaEI7QUFBQSxRQUVBLFNBQVUsS0FBSyxVQUFVO0FBQ3ZCLGNBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxlQUFlLFlBQVk7QUFDM0Msa0JBQU0sSUFBSSxvQkFBb0I7QUFBQSxVQUNoQztBQUVBLG1CQUFTLEdBQUc7QUFBQSxRQUNkO0FBQUEsTUFDRjtBQUVBLFVBQU0sa0JBQU4sY0FBOEIsY0FBYztBQUFBLFFBQzFDLFlBQWEsTUFBTSxTQUFTO0FBQzFCLGNBQUksQ0FBQyxRQUFRLE9BQU8sU0FBUyxVQUFVO0FBQ3JDLGtCQUFNLElBQUkscUJBQXFCLGNBQWM7QUFBQSxVQUMvQztBQUVBLGNBQUksT0FBTyxZQUFZLFlBQVk7QUFDakMsa0JBQU0sSUFBSSxxQkFBcUIsaUJBQWlCO0FBQUEsVUFDbEQ7QUFFQSxnQkFBTSxFQUFFLFFBQVEsUUFBUSxRQUFRLFFBQVEsZ0JBQWdCLElBQUk7QUFFNUQsY0FBSSxVQUFVLE9BQU8sT0FBTyxPQUFPLGNBQWMsT0FBTyxPQUFPLHFCQUFxQixZQUFZO0FBQzlGLGtCQUFNLElBQUkscUJBQXFCLCtDQUErQztBQUFBLFVBQ2hGO0FBRUEsY0FBSSxXQUFXLFdBQVc7QUFDeEIsa0JBQU0sSUFBSSxxQkFBcUIsZ0JBQWdCO0FBQUEsVUFDakQ7QUFFQSxjQUFJLFVBQVUsT0FBTyxXQUFXLFlBQVk7QUFDMUMsa0JBQU0sSUFBSSxxQkFBcUIseUJBQXlCO0FBQUEsVUFDMUQ7QUFFQSxnQkFBTSxpQkFBaUI7QUFFdkIsZUFBSyxTQUFTLFVBQVU7QUFDeEIsZUFBSyxrQkFBa0IsbUJBQW1CO0FBQzFDLGVBQUssVUFBVTtBQUNmLGVBQUssUUFBUTtBQUNiLGVBQUssVUFBVTtBQUNmLGVBQUssU0FBUyxVQUFVO0FBRXhCLGVBQUssTUFBTSxJQUFJLGdCQUFnQixFQUFFLEdBQUcsU0FBUyxLQUFLLEdBQUc7QUFFckQsZUFBSyxNQUFNLElBQUksT0FBTztBQUFBLFlBQ3BCLG9CQUFvQixLQUFLO0FBQUEsWUFDekIsYUFBYTtBQUFBLFlBQ2IsTUFBTSxNQUFNO0FBQ1Ysb0JBQU0sRUFBRSxLQUFLLElBQUk7QUFFakIsa0JBQUksNkJBQU0sUUFBUTtBQUNoQixxQkFBSyxPQUFPO0FBQUEsY0FDZDtBQUFBLFlBQ0Y7QUFBQSxZQUNBLE9BQU8sQ0FBQyxPQUFPLFVBQVUsYUFBYTtBQUNwQyxvQkFBTSxFQUFFLElBQUksSUFBSTtBQUVoQixrQkFBSSxJQUFJLEtBQUssT0FBTyxRQUFRLEtBQUssSUFBSSxlQUFlLFdBQVc7QUFDN0QseUJBQVM7QUFBQSxjQUNYLE9BQU87QUFDTCxvQkFBSSxPQUFPLElBQUk7QUFBQSxjQUNqQjtBQUFBLFlBQ0Y7QUFBQSxZQUNBLFNBQVMsQ0FBQyxLQUFLLGFBQWE7QUFDMUIsb0JBQU0sRUFBRSxNQUFNLEtBQUssS0FBSyxLQUFLLE1BQU0sSUFBSTtBQUV2QyxrQkFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLGVBQWUsWUFBWTtBQUMxQyxzQkFBTSxJQUFJLG9CQUFvQjtBQUFBLGNBQ2hDO0FBRUEsa0JBQUksU0FBUyxLQUFLO0FBQ2hCLHNCQUFNO0FBQUEsY0FDUjtBQUVBLG1CQUFLLFFBQVEsTUFBTSxHQUFHO0FBQ3RCLG1CQUFLLFFBQVEsS0FBSyxHQUFHO0FBQ3JCLG1CQUFLLFFBQVEsS0FBSyxHQUFHO0FBRXJCLDJCQUFhLElBQUk7QUFFakIsdUJBQVMsR0FBRztBQUFBLFlBQ2Q7QUFBQSxVQUNGLENBQUMsRUFBRSxHQUFHLGFBQWEsTUFBTTtBQUN2QixrQkFBTSxFQUFFLElBQUksSUFBSTtBQUdoQixnQkFBSSxLQUFLLElBQUk7QUFBQSxVQUNmLENBQUM7QUFFRCxlQUFLLE1BQU07QUFFWCxvQkFBVSxNQUFNLE1BQU07QUFBQSxRQUN4QjtBQUFBLFFBRUEsVUFBVyxPQUFPLFNBQVM7QUFDekIsZ0JBQU0sRUFBRSxLQUFLLElBQUksSUFBSTtBQUVyQixjQUFJLEtBQUssUUFBUTtBQUNmLGtCQUFNLEtBQUssTUFBTTtBQUNqQjtBQUFBLFVBQ0Y7QUFFQSxpQkFBTyxDQUFDLEtBQUssNEJBQTRCO0FBQ3pDLGlCQUFPLENBQUMsSUFBSSxTQUFTO0FBRXJCLGVBQUssUUFBUTtBQUNiLGVBQUssVUFBVTtBQUFBLFFBQ2pCO0FBQUEsUUFFQSxVQUFXLFlBQVksWUFBWSxRQUFRO0FBQ3pDLGdCQUFNLEVBQUUsUUFBUSxTQUFTLFFBQVEsSUFBSTtBQUVyQyxjQUFJLGFBQWEsS0FBSztBQUNwQixnQkFBSSxLQUFLLFFBQVE7QUFDZixvQkFBTSxVQUFVLEtBQUssb0JBQW9CLFFBQVEsS0FBSyxnQkFBZ0IsVUFBVSxJQUFJLEtBQUssYUFBYSxVQUFVO0FBQ2hILG1CQUFLLE9BQU8sRUFBRSxZQUFZLFFBQVEsQ0FBQztBQUFBLFlBQ3JDO0FBQ0E7QUFBQSxVQUNGO0FBRUEsZUFBSyxNQUFNLElBQUksaUJBQWlCLE1BQU07QUFFdEMsY0FBSTtBQUNKLGNBQUk7QUFDRixpQkFBSyxVQUFVO0FBQ2Ysa0JBQU0sVUFBVSxLQUFLLG9CQUFvQixRQUFRLEtBQUssZ0JBQWdCLFVBQVUsSUFBSSxLQUFLLGFBQWEsVUFBVTtBQUNoSCxtQkFBTyxLQUFLLGdCQUFnQixTQUFTLE1BQU07QUFBQSxjQUN6QztBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQSxNQUFNLEtBQUs7QUFBQSxjQUNYO0FBQUEsWUFDRixDQUFDO0FBQUEsVUFDSCxTQUFTLEtBQUs7QUFDWixpQkFBSyxJQUFJLEdBQUcsU0FBUyxLQUFLLEdBQUc7QUFDN0Isa0JBQU07QUFBQSxVQUNSO0FBRUEsY0FBSSxDQUFDLFFBQVEsT0FBTyxLQUFLLE9BQU8sWUFBWTtBQUMxQyxrQkFBTSxJQUFJLHdCQUF3QixtQkFBbUI7QUFBQSxVQUN2RDtBQUVBLGVBQ0csR0FBRyxRQUFRLENBQUMsVUFBVTtBQUNyQixrQkFBTSxFQUFFLEtBQUssTUFBQUMsTUFBSyxJQUFJO0FBRXRCLGdCQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssS0FBS0EsTUFBSyxPQUFPO0FBQ2xDLGNBQUFBLE1BQUssTUFBTTtBQUFBLFlBQ2I7QUFBQSxVQUNGLENBQUMsRUFDQSxHQUFHLFNBQVMsQ0FBQyxRQUFRO0FBQ3BCLGtCQUFNLEVBQUUsSUFBSSxJQUFJO0FBRWhCLGlCQUFLLFFBQVEsS0FBSyxHQUFHO0FBQUEsVUFDdkIsQ0FBQyxFQUNBLEdBQUcsT0FBTyxNQUFNO0FBQ2Ysa0JBQU0sRUFBRSxJQUFJLElBQUk7QUFFaEIsZ0JBQUksS0FBSyxJQUFJO0FBQUEsVUFDZixDQUFDLEVBQ0EsR0FBRyxTQUFTLE1BQU07QUFDakIsa0JBQU0sRUFBRSxJQUFJLElBQUk7QUFFaEIsZ0JBQUksQ0FBQyxJQUFJLGVBQWUsT0FBTztBQUM3QixtQkFBSyxRQUFRLEtBQUssSUFBSSxvQkFBb0IsQ0FBQztBQUFBLFlBQzdDO0FBQUEsVUFDRixDQUFDO0FBRUgsZUFBSyxPQUFPO0FBQUEsUUFDZDtBQUFBLFFBRUEsT0FBUSxPQUFPO0FBQ2IsZ0JBQU0sRUFBRSxJQUFJLElBQUk7QUFDaEIsaUJBQU8sSUFBSSxLQUFLLEtBQUs7QUFBQSxRQUN2QjtBQUFBLFFBRUEsV0FBWSxVQUFVO0FBQ3BCLGdCQUFNLEVBQUUsSUFBSSxJQUFJO0FBQ2hCLGNBQUksS0FBSyxJQUFJO0FBQUEsUUFDZjtBQUFBLFFBRUEsUUFBUyxLQUFLO0FBQ1osZ0JBQU0sRUFBRSxJQUFJLElBQUk7QUFDaEIsZUFBSyxVQUFVO0FBQ2YsZUFBSyxRQUFRLEtBQUssR0FBRztBQUFBLFFBQ3ZCO0FBQUEsTUFDRjtBQUVBLGVBQVMsU0FBVSxNQUFNLFNBQVM7QUFDaEMsWUFBSTtBQUNGLGdCQUFNLGtCQUFrQixJQUFJLGdCQUFnQixNQUFNLE9BQU87QUFDekQsZUFBSyxTQUFTLGlDQUFLLE9BQUwsRUFBVyxNQUFNLGdCQUFnQixJQUFJLElBQUcsZUFBZTtBQUNyRSxpQkFBTyxnQkFBZ0I7QUFBQSxRQUN6QixTQUFTLEtBQUs7QUFDWixpQkFBTyxJQUFJLFlBQVksRUFBRSxRQUFRLEdBQUc7QUFBQSxRQUN0QztBQUFBLE1BQ0Y7QUFFQSxhQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUMxUGpCO0FBQUE7QUFBQTtBQUVBLFVBQU0sRUFBRSxzQkFBc0IsWUFBWSxJQUFJO0FBQzlDLFVBQU0sRUFBRSxjQUFjLElBQUksVUFBUSxhQUFrQjtBQUNwRCxVQUFNLE9BQU87QUFDYixVQUFNLEVBQUUsV0FBVyxhQUFhLElBQUk7QUFDcEMsVUFBTSxTQUFTLFVBQVEsUUFBYTtBQUVwQyxVQUFNLGlCQUFOLGNBQTZCLGNBQWM7QUFBQSxRQUN6QyxZQUFhLE1BQU0sVUFBVTtBQUMzQixjQUFJLENBQUMsUUFBUSxPQUFPLFNBQVMsVUFBVTtBQUNyQyxrQkFBTSxJQUFJLHFCQUFxQixjQUFjO0FBQUEsVUFDL0M7QUFFQSxjQUFJLE9BQU8sYUFBYSxZQUFZO0FBQ2xDLGtCQUFNLElBQUkscUJBQXFCLGtCQUFrQjtBQUFBLFVBQ25EO0FBRUEsZ0JBQU0sRUFBRSxRQUFRLFFBQVEsZ0JBQWdCLElBQUk7QUFFNUMsY0FBSSxVQUFVLE9BQU8sT0FBTyxPQUFPLGNBQWMsT0FBTyxPQUFPLHFCQUFxQixZQUFZO0FBQzlGLGtCQUFNLElBQUkscUJBQXFCLCtDQUErQztBQUFBLFVBQ2hGO0FBRUEsZ0JBQU0sZ0JBQWdCO0FBRXRCLGVBQUssa0JBQWtCLG1CQUFtQjtBQUMxQyxlQUFLLFNBQVMsVUFBVTtBQUN4QixlQUFLLFdBQVc7QUFDaEIsZUFBSyxRQUFRO0FBQ2IsZUFBSyxVQUFVO0FBRWYsb0JBQVUsTUFBTSxNQUFNO0FBQUEsUUFDeEI7QUFBQSxRQUVBLFVBQVcsT0FBTyxTQUFTO0FBQ3pCLGNBQUksS0FBSyxRQUFRO0FBQ2Ysa0JBQU0sS0FBSyxNQUFNO0FBQ2pCO0FBQUEsVUFDRjtBQUVBLGlCQUFPLEtBQUssUUFBUTtBQUVwQixlQUFLLFFBQVE7QUFDYixlQUFLLFVBQVU7QUFBQSxRQUNqQjtBQUFBLFFBRUEsWUFBYTtBQUNYLGdCQUFNLElBQUksWUFBWSxlQUFlLElBQUk7QUFBQSxRQUMzQztBQUFBLFFBRUEsVUFBVyxZQUFZLFlBQVksUUFBUTtBQUN6QyxpQkFBTyxlQUFlLEdBQUc7QUFFekIsZ0JBQU0sRUFBRSxVQUFVLFFBQVEsUUFBUSxJQUFJO0FBRXRDLHVCQUFhLElBQUk7QUFFakIsZUFBSyxXQUFXO0FBQ2hCLGdCQUFNLFVBQVUsS0FBSyxvQkFBb0IsUUFBUSxLQUFLLGdCQUFnQixVQUFVLElBQUksS0FBSyxhQUFhLFVBQVU7QUFDaEgsZUFBSyxnQkFBZ0IsVUFBVSxNQUFNLE1BQU07QUFBQSxZQUN6QztBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxRQUVBLFFBQVMsS0FBSztBQUNaLGdCQUFNLEVBQUUsVUFBVSxPQUFPLElBQUk7QUFFN0IsdUJBQWEsSUFBSTtBQUVqQixjQUFJLFVBQVU7QUFDWixpQkFBSyxXQUFXO0FBQ2hCLDJCQUFlLE1BQU07QUFDbkIsbUJBQUssZ0JBQWdCLFVBQVUsTUFBTSxLQUFLLEVBQUUsT0FBTyxDQUFDO0FBQUEsWUFDdEQsQ0FBQztBQUFBLFVBQ0g7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLGVBQVMsUUFBUyxNQUFNLFVBQVU7QUFDaEMsWUFBSSxhQUFhLFFBQVc7QUFDMUIsaUJBQU8sSUFBSSxRQUFRLENBQUNDLFVBQVMsV0FBVztBQUN0QyxvQkFBUSxLQUFLLE1BQU0sTUFBTSxDQUFDLEtBQUssU0FBUztBQUN0QyxxQkFBTyxNQUFNLE9BQU8sR0FBRyxJQUFJQSxTQUFRLElBQUk7QUFBQSxZQUN6QyxDQUFDO0FBQUEsVUFDSCxDQUFDO0FBQUEsUUFDSDtBQUVBLFlBQUk7QUFDRixnQkFBTSxpQkFBaUIsSUFBSSxlQUFlLE1BQU0sUUFBUTtBQUN4RCxlQUFLLFNBQVMsaUNBQ1QsT0FEUztBQUFBLFlBRVosUUFBUSxLQUFLLFVBQVU7QUFBQSxZQUN2QixTQUFTLEtBQUssWUFBWTtBQUFBLFVBQzVCLElBQUcsY0FBYztBQUFBLFFBQ25CLFNBQVMsS0FBSztBQUNaLGNBQUksT0FBTyxhQUFhLFlBQVk7QUFDbEMsa0JBQU07QUFBQSxVQUNSO0FBQ0EsZ0JBQU0sU0FBUyw2QkFBTTtBQUNyQix5QkFBZSxNQUFNLFNBQVMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQUEsUUFDaEQ7QUFBQSxNQUNGO0FBRUEsYUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDM0dqQjtBQUFBO0FBQUE7QUFFQSxVQUFNLFNBQVMsVUFBUSxRQUFhO0FBQ3BDLFVBQU0sRUFBRSxjQUFjLElBQUksVUFBUSxhQUFrQjtBQUNwRCxVQUFNLEVBQUUsc0JBQXNCLFlBQVksSUFBSTtBQUM5QyxVQUFNLE9BQU87QUFDYixVQUFNLEVBQUUsV0FBVyxhQUFhLElBQUk7QUFFcEMsVUFBTSxpQkFBTixjQUE2QixjQUFjO0FBQUEsUUFDekMsWUFBYSxNQUFNLFVBQVU7QUFDM0IsY0FBSSxDQUFDLFFBQVEsT0FBTyxTQUFTLFVBQVU7QUFDckMsa0JBQU0sSUFBSSxxQkFBcUIsY0FBYztBQUFBLFVBQy9DO0FBRUEsY0FBSSxPQUFPLGFBQWEsWUFBWTtBQUNsQyxrQkFBTSxJQUFJLHFCQUFxQixrQkFBa0I7QUFBQSxVQUNuRDtBQUVBLGdCQUFNLEVBQUUsUUFBUSxRQUFRLGdCQUFnQixJQUFJO0FBRTVDLGNBQUksVUFBVSxPQUFPLE9BQU8sT0FBTyxjQUFjLE9BQU8sT0FBTyxxQkFBcUIsWUFBWTtBQUM5RixrQkFBTSxJQUFJLHFCQUFxQiwrQ0FBK0M7QUFBQSxVQUNoRjtBQUVBLGdCQUFNLGdCQUFnQjtBQUV0QixlQUFLLFNBQVMsVUFBVTtBQUN4QixlQUFLLGtCQUFrQixtQkFBbUI7QUFDMUMsZUFBSyxXQUFXO0FBQ2hCLGVBQUssUUFBUTtBQUViLG9CQUFVLE1BQU0sTUFBTTtBQUFBLFFBQ3hCO0FBQUEsUUFFQSxVQUFXLE9BQU8sU0FBUztBQUN6QixjQUFJLEtBQUssUUFBUTtBQUNmLGtCQUFNLEtBQUssTUFBTTtBQUNqQjtBQUFBLFVBQ0Y7QUFFQSxpQkFBTyxLQUFLLFFBQVE7QUFFcEIsZUFBSyxRQUFRO0FBQ2IsZUFBSyxVQUFVO0FBQUEsUUFDakI7QUFBQSxRQUVBLFlBQWE7QUFDWCxnQkFBTSxJQUFJLFlBQVksZUFBZSxJQUFJO0FBQUEsUUFDM0M7QUFBQSxRQUVBLFVBQVcsWUFBWSxZQUFZLFFBQVE7QUFDekMsZ0JBQU0sRUFBRSxVQUFVLFFBQVEsUUFBUSxJQUFJO0FBRXRDLHVCQUFhLElBQUk7QUFFakIsZUFBSyxXQUFXO0FBRWhCLGNBQUksVUFBVTtBQUVkLGNBQUksV0FBVyxNQUFNO0FBQ25CLHNCQUFVLEtBQUssb0JBQW9CLFFBQVEsS0FBSyxnQkFBZ0IsVUFBVSxJQUFJLEtBQUssYUFBYSxVQUFVO0FBQUEsVUFDNUc7QUFFQSxlQUFLLGdCQUFnQixVQUFVLE1BQU0sTUFBTTtBQUFBLFlBQ3pDO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxRQUVBLFFBQVMsS0FBSztBQUNaLGdCQUFNLEVBQUUsVUFBVSxPQUFPLElBQUk7QUFFN0IsdUJBQWEsSUFBSTtBQUVqQixjQUFJLFVBQVU7QUFDWixpQkFBSyxXQUFXO0FBQ2hCLDJCQUFlLE1BQU07QUFDbkIsbUJBQUssZ0JBQWdCLFVBQVUsTUFBTSxLQUFLLEVBQUUsT0FBTyxDQUFDO0FBQUEsWUFDdEQsQ0FBQztBQUFBLFVBQ0g7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLGVBQVMsUUFBUyxNQUFNLFVBQVU7QUFDaEMsWUFBSSxhQUFhLFFBQVc7QUFDMUIsaUJBQU8sSUFBSSxRQUFRLENBQUNDLFVBQVMsV0FBVztBQUN0QyxvQkFBUSxLQUFLLE1BQU0sTUFBTSxDQUFDLEtBQUssU0FBUztBQUN0QyxxQkFBTyxNQUFNLE9BQU8sR0FBRyxJQUFJQSxTQUFRLElBQUk7QUFBQSxZQUN6QyxDQUFDO0FBQUEsVUFDSCxDQUFDO0FBQUEsUUFDSDtBQUVBLFlBQUk7QUFDRixnQkFBTSxpQkFBaUIsSUFBSSxlQUFlLE1BQU0sUUFBUTtBQUN4RCxlQUFLLFNBQVMsaUNBQUssT0FBTCxFQUFXLFFBQVEsVUFBVSxJQUFHLGNBQWM7QUFBQSxRQUM5RCxTQUFTLEtBQUs7QUFDWixjQUFJLE9BQU8sYUFBYSxZQUFZO0FBQ2xDLGtCQUFNO0FBQUEsVUFDUjtBQUNBLGdCQUFNLFNBQVMsNkJBQU07QUFDckIseUJBQWUsTUFBTSxTQUFTLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUFBLFFBQ2hEO0FBQUEsTUFDRjtBQUVBLGFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQzNHakI7QUFBQTtBQUFBO0FBRUEsYUFBTyxRQUFRLFVBQVU7QUFDekIsYUFBTyxRQUFRLFNBQVM7QUFDeEIsYUFBTyxRQUFRLFdBQVc7QUFDMUIsYUFBTyxRQUFRLFVBQVU7QUFDekIsYUFBTyxRQUFRLFVBQVU7QUFBQTtBQUFBOzs7QUNOekI7QUFBQTtBQUFBO0FBRUEsVUFBTSxFQUFFLFlBQVksSUFBSTtBQUV4QixVQUFNLHVCQUF1QixPQUFPLElBQUksNENBQTRDO0FBSnBGO0FBU0EsVUFBTSx1QkFBTixNQUFNLDZCQUE0QixZQUFZO0FBQUEsUUFDNUMsWUFBYSxTQUFTO0FBQ3BCLGdCQUFNLE9BQU87QUFXZiw4QkFBQyxJQUF3QjtBQVZ2QixnQkFBTSxrQkFBa0IsTUFBTSxvQkFBbUI7QUFDakQsZUFBSyxPQUFPO0FBQ1osZUFBSyxVQUFVLFdBQVc7QUFDMUIsZUFBSyxPQUFPO0FBQUEsUUFDZDtBQUFBLFFBRUEsUUFBUSxPQUFPLFdBQVcsRUFBRyxVQUFVO0FBQ3JDLGlCQUFPLFlBQVksU0FBUyxvQkFBb0IsTUFBTTtBQUFBLFFBQ3hEO0FBQUEsTUFHRjtBQXZCQSxNQXNCRztBQWJILFVBQU0sc0JBQU47QUFnQkEsYUFBTyxVQUFVO0FBQUEsUUFDZjtBQUFBLE1BQ0Y7QUFBQTtBQUFBOzs7QUMzQkE7QUFBQTtBQUFBO0FBRUEsYUFBTyxVQUFVO0FBQUEsUUFDZixRQUFRLE9BQU8sT0FBTztBQUFBLFFBQ3RCLFVBQVUsT0FBTyxTQUFTO0FBQUEsUUFDMUIsVUFBVSxPQUFPLFNBQVM7QUFBQSxRQUMxQixhQUFhLE9BQU8sWUFBWTtBQUFBLFFBQ2hDLGNBQWMsT0FBTyxjQUFjO0FBQUEsUUFDbkMsaUJBQWlCLE9BQU8saUJBQWlCO0FBQUEsUUFDekMsa0JBQWtCLE9BQU8sa0JBQWtCO0FBQUEsUUFDM0MsZ0JBQWdCLE9BQU8sZ0JBQWdCO0FBQUEsUUFDdkMsWUFBWSxPQUFPLFlBQVk7QUFBQSxRQUMvQixlQUFlLE9BQU8sZ0JBQWdCO0FBQUEsUUFDdEMsZUFBZSxPQUFPLGdCQUFnQjtBQUFBLFFBQ3RDLGVBQWUsT0FBTyxlQUFlO0FBQUEsUUFDckMsUUFBUSxPQUFPLE9BQU87QUFBQSxRQUN0QixnQkFBZ0IsT0FBTyxzQkFBc0I7QUFBQSxRQUM3QyxTQUFTLE9BQU8sUUFBUTtBQUFBLFFBQ3hCLGVBQWUsT0FBTyxnQkFBZ0I7QUFBQSxRQUN0QyxhQUFhLE9BQU8sYUFBYTtBQUFBLFFBQ2pDLGdCQUFnQixPQUFPLGlCQUFpQjtBQUFBLFFBQ3hDLFlBQVksT0FBTyxXQUFXO0FBQUEsTUFDaEM7QUFBQTtBQUFBOzs7QUN0QkE7QUFBQTtBQUFBO0FBRUEsVUFBTSxFQUFFLG9CQUFvQixJQUFJO0FBQ2hDLFVBQU07QUFBQSxRQUNKO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsSUFBSTtBQUNKLFVBQU0sRUFBRSxTQUFTLElBQUk7QUFDckIsVUFBTSxFQUFFLGFBQWEsSUFBSSxVQUFRLE1BQVc7QUFDNUMsVUFBTTtBQUFBLFFBQ0osT0FBTztBQUFBLFVBQ0w7QUFBQSxRQUNGO0FBQUEsTUFDRixJQUFJLFVBQVEsTUFBVztBQUV2QixlQUFTLFdBQVksT0FBTyxPQUFPO0FBQ2pDLFlBQUksT0FBTyxVQUFVLFVBQVU7QUFDN0IsaUJBQU8sVUFBVTtBQUFBLFFBQ25CO0FBQ0EsWUFBSSxpQkFBaUIsUUFBUTtBQUMzQixpQkFBTyxNQUFNLEtBQUssS0FBSztBQUFBLFFBQ3pCO0FBQ0EsWUFBSSxPQUFPLFVBQVUsWUFBWTtBQUMvQixpQkFBTyxNQUFNLEtBQUssTUFBTTtBQUFBLFFBQzFCO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFFQSxlQUFTLGlCQUFrQixTQUFTO0FBQ2xDLGVBQU8sT0FBTztBQUFBLFVBQ1osT0FBTyxRQUFRLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxZQUFZLFdBQVcsTUFBTTtBQUN6RCxtQkFBTyxDQUFDLFdBQVcsa0JBQWtCLEdBQUcsV0FBVztBQUFBLFVBQ3JELENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQU1BLGVBQVMsZ0JBQWlCLFNBQVMsS0FBSztBQUN0QyxZQUFJLE1BQU0sUUFBUSxPQUFPLEdBQUc7QUFDMUIsbUJBQVMsSUFBSSxHQUFHLElBQUksUUFBUSxRQUFRLEtBQUssR0FBRztBQUMxQyxnQkFBSSxRQUFRLENBQUMsRUFBRSxrQkFBa0IsTUFBTSxJQUFJLGtCQUFrQixHQUFHO0FBQzlELHFCQUFPLFFBQVEsSUFBSSxDQUFDO0FBQUEsWUFDdEI7QUFBQSxVQUNGO0FBRUEsaUJBQU87QUFBQSxRQUNULFdBQVcsT0FBTyxRQUFRLFFBQVEsWUFBWTtBQUM1QyxpQkFBTyxRQUFRLElBQUksR0FBRztBQUFBLFFBQ3hCLE9BQU87QUFDTCxpQkFBTyxpQkFBaUIsT0FBTyxFQUFFLElBQUksa0JBQWtCLENBQUM7QUFBQSxRQUMxRDtBQUFBLE1BQ0Y7QUFHQSxlQUFTLHNCQUF1QixTQUFTO0FBQ3ZDLGNBQU0sUUFBUSxRQUFRLE1BQU07QUFDNUIsY0FBTSxVQUFVLENBQUM7QUFDakIsaUJBQVMsUUFBUSxHQUFHLFFBQVEsTUFBTSxRQUFRLFNBQVMsR0FBRztBQUNwRCxrQkFBUSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQUEsUUFDL0M7QUFDQSxlQUFPLE9BQU8sWUFBWSxPQUFPO0FBQUEsTUFDbkM7QUFFQSxlQUFTLGFBQWNDLGVBQWMsU0FBUztBQUM1QyxZQUFJLE9BQU9BLGNBQWEsWUFBWSxZQUFZO0FBQzlDLGNBQUksTUFBTSxRQUFRLE9BQU8sR0FBRztBQUMxQixzQkFBVSxzQkFBc0IsT0FBTztBQUFBLFVBQ3pDO0FBQ0EsaUJBQU9BLGNBQWEsUUFBUSxVQUFVLGlCQUFpQixPQUFPLElBQUksQ0FBQyxDQUFDO0FBQUEsUUFDdEU7QUFDQSxZQUFJLE9BQU9BLGNBQWEsWUFBWSxhQUFhO0FBQy9DLGlCQUFPO0FBQUEsUUFDVDtBQUNBLFlBQUksT0FBTyxZQUFZLFlBQVksT0FBT0EsY0FBYSxZQUFZLFVBQVU7QUFDM0UsaUJBQU87QUFBQSxRQUNUO0FBRUEsbUJBQVcsQ0FBQyxpQkFBaUIsZ0JBQWdCLEtBQUssT0FBTyxRQUFRQSxjQUFhLE9BQU8sR0FBRztBQUN0RixnQkFBTSxjQUFjLGdCQUFnQixTQUFTLGVBQWU7QUFFNUQsY0FBSSxDQUFDLFdBQVcsa0JBQWtCLFdBQVcsR0FBRztBQUM5QyxtQkFBTztBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFFQSxlQUFTLFFBQVNDLE9BQU07QUFDdEIsWUFBSSxPQUFPQSxVQUFTLFVBQVU7QUFDNUIsaUJBQU9BO0FBQUEsUUFDVDtBQUVBLGNBQU0sZUFBZUEsTUFBSyxNQUFNLEdBQUc7QUFFbkMsWUFBSSxhQUFhLFdBQVcsR0FBRztBQUM3QixpQkFBT0E7QUFBQSxRQUNUO0FBRUEsY0FBTSxLQUFLLElBQUksZ0JBQWdCLGFBQWEsSUFBSSxDQUFDO0FBQ2pELFdBQUcsS0FBSztBQUNSLGVBQU8sQ0FBQyxHQUFHLGNBQWMsR0FBRyxTQUFTLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFBQSxNQUNsRDtBQUVBLGVBQVMsU0FBVUQsZUFBYyxFQUFFLE1BQUFDLE9BQU0sUUFBUSxNQUFNLFFBQVEsR0FBRztBQUNoRSxjQUFNLFlBQVksV0FBV0QsY0FBYSxNQUFNQyxLQUFJO0FBQ3BELGNBQU0sY0FBYyxXQUFXRCxjQUFhLFFBQVEsTUFBTTtBQUMxRCxjQUFNLFlBQVksT0FBT0EsY0FBYSxTQUFTLGNBQWMsV0FBV0EsY0FBYSxNQUFNLElBQUksSUFBSTtBQUNuRyxjQUFNLGVBQWUsYUFBYUEsZUFBYyxPQUFPO0FBQ3ZELGVBQU8sYUFBYSxlQUFlLGFBQWE7QUFBQSxNQUNsRDtBQUVBLGVBQVMsZ0JBQWlCLE1BQU07QUFDOUIsWUFBSSxPQUFPLFNBQVMsSUFBSSxHQUFHO0FBQ3pCLGlCQUFPO0FBQUEsUUFDVCxXQUFXLGdCQUFnQixZQUFZO0FBQ3JDLGlCQUFPO0FBQUEsUUFDVCxXQUFXLGdCQUFnQixhQUFhO0FBQ3RDLGlCQUFPO0FBQUEsUUFDVCxXQUFXLE9BQU8sU0FBUyxVQUFVO0FBQ25DLGlCQUFPLEtBQUssVUFBVSxJQUFJO0FBQUEsUUFDNUIsT0FBTztBQUNMLGlCQUFPLEtBQUssU0FBUztBQUFBLFFBQ3ZCO0FBQUEsTUFDRjtBQUVBLGVBQVMsZ0JBQWlCLGdCQUFnQixLQUFLO0FBQzdDLGNBQU0sV0FBVyxJQUFJLFFBQVEsU0FBUyxJQUFJLE1BQU0sSUFBSSxLQUFLLElBQUksSUFBSTtBQUNqRSxjQUFNLGVBQWUsT0FBTyxhQUFhLFdBQVcsUUFBUSxRQUFRLElBQUk7QUFHeEUsWUFBSSx3QkFBd0IsZUFBZSxPQUFPLENBQUMsRUFBRSxTQUFTLE1BQU0sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsTUFBQUMsTUFBSyxNQUFNLFdBQVcsUUFBUUEsS0FBSSxHQUFHLFlBQVksQ0FBQztBQUMzSSxZQUFJLHNCQUFzQixXQUFXLEdBQUc7QUFDdEMsZ0JBQU0sSUFBSSxvQkFBb0IsdUNBQXVDLFlBQVksR0FBRztBQUFBLFFBQ3RGO0FBR0EsZ0NBQXdCLHNCQUFzQixPQUFPLENBQUMsRUFBRSxPQUFPLE1BQU0sV0FBVyxRQUFRLElBQUksTUFBTSxDQUFDO0FBQ25HLFlBQUksc0JBQXNCLFdBQVcsR0FBRztBQUN0QyxnQkFBTSxJQUFJLG9CQUFvQix5Q0FBeUMsSUFBSSxNQUFNLGNBQWMsWUFBWSxHQUFHO0FBQUEsUUFDaEg7QUFHQSxnQ0FBd0Isc0JBQXNCLE9BQU8sQ0FBQyxFQUFFLEtBQUssTUFBTSxPQUFPLFNBQVMsY0FBYyxXQUFXLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSTtBQUNsSSxZQUFJLHNCQUFzQixXQUFXLEdBQUc7QUFDdEMsZ0JBQU0sSUFBSSxvQkFBb0IsdUNBQXVDLElBQUksSUFBSSxjQUFjLFlBQVksR0FBRztBQUFBLFFBQzVHO0FBR0EsZ0NBQXdCLHNCQUFzQixPQUFPLENBQUNELGtCQUFpQixhQUFhQSxlQUFjLElBQUksT0FBTyxDQUFDO0FBQzlHLFlBQUksc0JBQXNCLFdBQVcsR0FBRztBQUN0QyxnQkFBTSxVQUFVLE9BQU8sSUFBSSxZQUFZLFdBQVcsS0FBSyxVQUFVLElBQUksT0FBTyxJQUFJLElBQUk7QUFDcEYsZ0JBQU0sSUFBSSxvQkFBb0IsMENBQTBDLE9BQU8sY0FBYyxZQUFZLEdBQUc7QUFBQSxRQUM5RztBQUVBLGVBQU8sc0JBQXNCLENBQUM7QUFBQSxNQUNoQztBQUVBLGVBQVMsZ0JBQWlCLGdCQUFnQixLQUFLLE1BQU07QUFDbkQsY0FBTSxXQUFXLEVBQUUsY0FBYyxHQUFHLE9BQU8sR0FBRyxTQUFTLE9BQU8sVUFBVSxNQUFNO0FBQzlFLGNBQU0sWUFBWSxPQUFPLFNBQVMsYUFBYSxFQUFFLFVBQVUsS0FBSyxJQUFJLG1CQUFLO0FBQ3pFLGNBQU0sa0JBQWtCLGdEQUFLLFdBQWEsTUFBbEIsRUFBdUIsU0FBUyxNQUFNLE1BQU0saUJBQUUsT0FBTyxRQUFTLFdBQVk7QUFDbEcsdUJBQWUsS0FBSyxlQUFlO0FBQ25DLGVBQU87QUFBQSxNQUNUO0FBRUEsZUFBUyxtQkFBb0IsZ0JBQWdCLEtBQUs7QUFDaEQsY0FBTSxRQUFRLGVBQWUsVUFBVSxjQUFZO0FBQ2pELGNBQUksQ0FBQyxTQUFTLFVBQVU7QUFDdEIsbUJBQU87QUFBQSxVQUNUO0FBQ0EsaUJBQU8sU0FBUyxVQUFVLEdBQUc7QUFBQSxRQUMvQixDQUFDO0FBQ0QsWUFBSSxVQUFVLElBQUk7QUFDaEIseUJBQWUsT0FBTyxPQUFPLENBQUM7QUFBQSxRQUNoQztBQUFBLE1BQ0Y7QUFFQSxlQUFTLFNBQVUsTUFBTTtBQUN2QixjQUFNLEVBQUUsTUFBQUMsT0FBTSxRQUFRLE1BQU0sU0FBUyxNQUFNLElBQUk7QUFDL0MsZUFBTztBQUFBLFVBQ0wsTUFBQUE7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQSxlQUFTLGtCQUFtQixNQUFNO0FBQ2hDLGNBQU0sT0FBTyxPQUFPLEtBQUssSUFBSTtBQUM3QixjQUFNLFNBQVMsQ0FBQztBQUNoQixpQkFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLFFBQVEsRUFBRSxHQUFHO0FBQ3BDLGdCQUFNLE1BQU0sS0FBSyxDQUFDO0FBQ2xCLGdCQUFNLFFBQVEsS0FBSyxHQUFHO0FBQ3RCLGdCQUFNLE9BQU8sT0FBTyxLQUFLLEdBQUcsR0FBRyxFQUFFO0FBQ2pDLGNBQUksTUFBTSxRQUFRLEtBQUssR0FBRztBQUN4QixxQkFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsRUFBRSxHQUFHO0FBQ3JDLHFCQUFPLEtBQUssTUFBTSxPQUFPLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFBQSxZQUM5QztBQUFBLFVBQ0YsT0FBTztBQUNMLG1CQUFPLEtBQUssTUFBTSxPQUFPLEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUFBLFVBQzNDO0FBQUEsUUFDRjtBQUNBLGVBQU87QUFBQSxNQUNUO0FBTUEsZUFBUyxjQUFlLFlBQVk7QUFDbEMsZUFBTyxhQUFhLFVBQVUsS0FBSztBQUFBLE1BQ3JDO0FBRUEsZUFBZSxZQUFhLE1BQU07QUFBQTtBQUNoQyxnQkFBTSxVQUFVLENBQUM7QUFDakI7QUFBQSx1Q0FBeUIsT0FBekIsMEVBQStCO0FBQXBCLG9CQUFNLE9BQWpCO0FBQ0Usc0JBQVEsS0FBSyxJQUFJO0FBQUEsWUFDbkI7QUFBQSxtQkFGQSxNQTlORjtBQThORTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQSxpQkFBTyxPQUFPLE9BQU8sT0FBTyxFQUFFLFNBQVMsTUFBTTtBQUFBLFFBQy9DO0FBQUE7QUFLQSxlQUFTLGFBQWMsTUFBTSxTQUFTO0FBRXBDLGNBQU0sTUFBTSxTQUFTLElBQUk7QUFDekIsY0FBTUQsZ0JBQWUsZ0JBQWdCLEtBQUssV0FBVyxHQUFHLEdBQUc7QUFFM0QsUUFBQUEsY0FBYTtBQUdiLFlBQUlBLGNBQWEsS0FBSyxVQUFVO0FBQzlCLFVBQUFBLGNBQWEsT0FBTyxrQ0FBS0EsY0FBYSxPQUFTQSxjQUFhLEtBQUssU0FBUyxJQUFJO0FBQUEsUUFDaEY7QUFHQSxjQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksTUFBTSxTQUFTLFVBQVUsTUFBTSxHQUFHLE9BQU8sUUFBUSxJQUFJQTtBQUNqRixjQUFNLEVBQUUsY0FBYyxNQUFNLElBQUlBO0FBR2hDLFFBQUFBLGNBQWEsV0FBVyxDQUFDLFdBQVcsZ0JBQWdCO0FBQ3BELFFBQUFBLGNBQWEsVUFBVSxlQUFlO0FBR3RDLFlBQUksVUFBVSxNQUFNO0FBQ2xCLDZCQUFtQixLQUFLLFdBQVcsR0FBRyxHQUFHO0FBQ3pDLGtCQUFRLFFBQVEsS0FBSztBQUNyQixpQkFBTztBQUFBLFFBQ1Q7QUFHQSxZQUFJLE9BQU8sVUFBVSxZQUFZLFFBQVEsR0FBRztBQUMxQyxxQkFBVyxNQUFNO0FBQ2Ysd0JBQVksS0FBSyxXQUFXLENBQUM7QUFBQSxVQUMvQixHQUFHLEtBQUs7QUFBQSxRQUNWLE9BQU87QUFDTCxzQkFBWSxLQUFLLFdBQVcsQ0FBQztBQUFBLFFBQy9CO0FBRUEsaUJBQVMsWUFBYSxnQkFBZ0IsUUFBUSxNQUFNO0FBM1F0RDtBQTZRSSxnQkFBTSxjQUFjLE1BQU0sUUFBUSxLQUFLLE9BQU8sSUFDMUMsc0JBQXNCLEtBQUssT0FBTyxJQUNsQyxLQUFLO0FBQ1QsZ0JBQU0sT0FBTyxPQUFPLFVBQVUsYUFDMUIsTUFBTSxpQ0FBSyxPQUFMLEVBQVcsU0FBUyxZQUFZLEVBQUMsSUFDdkM7QUFHSixjQUFJLFVBQVUsSUFBSSxHQUFHO0FBTW5CLGlCQUFLLEtBQUssQ0FBQyxZQUFZLFlBQVksZ0JBQWdCLE9BQU8sQ0FBQztBQUMzRDtBQUFBLFVBQ0Y7QUFFQSxnQkFBTSxlQUFlLGdCQUFnQixJQUFJO0FBQ3pDLGdCQUFNLGtCQUFrQixrQkFBa0IsT0FBTztBQUNqRCxnQkFBTSxtQkFBbUIsa0JBQWtCLFFBQVE7QUFFbkQsd0JBQVEsY0FBUixpQ0FBb0IsU0FBTyxRQUFRLFFBQVEsR0FBRyxHQUFHO0FBQ2pELHdCQUFRLGNBQVIsaUNBQW9CLFlBQVksaUJBQWlCLFFBQVEsY0FBYyxVQUFVO0FBQ2pGLHdCQUFRLFdBQVIsaUNBQWlCLE9BQU8sS0FBSyxZQUFZO0FBQ3pDLHdCQUFRLGVBQVIsaUNBQXFCO0FBQ3JCLDZCQUFtQixnQkFBZ0IsR0FBRztBQUFBLFFBQ3hDO0FBRUEsaUJBQVMsU0FBVTtBQUFBLFFBQUM7QUFFcEIsZUFBTztBQUFBLE1BQ1Q7QUFFQSxlQUFTLG9CQUFxQjtBQUM1QixjQUFNLFFBQVEsS0FBSyxVQUFVO0FBQzdCLGNBQU0sU0FBUyxLQUFLLE9BQU87QUFDM0IsY0FBTSxtQkFBbUIsS0FBSyxpQkFBaUI7QUFFL0MsZUFBTyxTQUFTLFNBQVUsTUFBTSxTQUFTO0FBQ3ZDLGNBQUksTUFBTSxjQUFjO0FBQ3RCLGdCQUFJO0FBQ0YsMkJBQWEsS0FBSyxNQUFNLE1BQU0sT0FBTztBQUFBLFlBQ3ZDLFNBQVMsT0FBTztBQUNkLGtCQUFJLGlCQUFpQixxQkFBcUI7QUFDeEMsc0JBQU0sYUFBYSxNQUFNLGNBQWMsRUFBRTtBQUN6QyxvQkFBSSxlQUFlLE9BQU87QUFDeEIsd0JBQU0sSUFBSSxvQkFBb0IsR0FBRyxNQUFNLE9BQU8sa0NBQWtDLE1BQU0seUNBQXlDO0FBQUEsZ0JBQ2pJO0FBQ0Esb0JBQUksZ0JBQWdCLFlBQVksTUFBTSxHQUFHO0FBQ3ZDLG1DQUFpQixLQUFLLE1BQU0sTUFBTSxPQUFPO0FBQUEsZ0JBQzNDLE9BQU87QUFDTCx3QkFBTSxJQUFJLG9CQUFvQixHQUFHLE1BQU0sT0FBTyxrQ0FBa0MsTUFBTSwrREFBK0Q7QUFBQSxnQkFDdko7QUFBQSxjQUNGLE9BQU87QUFDTCxzQkFBTTtBQUFBLGNBQ1I7QUFBQSxZQUNGO0FBQUEsVUFDRixPQUFPO0FBQ0wsNkJBQWlCLEtBQUssTUFBTSxNQUFNLE9BQU87QUFBQSxVQUMzQztBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsZUFBUyxnQkFBaUIsWUFBWSxRQUFRO0FBQzVDLGNBQU0sTUFBTSxJQUFJLElBQUksTUFBTTtBQUMxQixZQUFJLGVBQWUsTUFBTTtBQUN2QixpQkFBTztBQUFBLFFBQ1QsV0FBVyxNQUFNLFFBQVEsVUFBVSxLQUFLLFdBQVcsS0FBSyxDQUFDLFlBQVksV0FBVyxTQUFTLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDbkcsaUJBQU87QUFBQSxRQUNUO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFFQSxlQUFTLGlCQUFrQixNQUFNO0FBQy9CLFlBQUksTUFBTTtBQUNSLGdCQUFrQyxXQUExQixRQXpWWixJQXlWc0MsSUFBaEIsd0JBQWdCLElBQWhCLENBQVY7QUFDUixpQkFBTztBQUFBLFFBQ1Q7QUFBQSxNQUNGO0FBRUEsYUFBTyxVQUFVO0FBQUEsUUFDZjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBO0FBQUE7OztBQzlXQTtBQUFBO0FBQUE7QUFFQSxVQUFNLEVBQUUsaUJBQWlCLFVBQVUsZ0JBQWdCLElBQUk7QUFDdkQsVUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsSUFBSTtBQUNKLFVBQU0sRUFBRSxxQkFBcUIsSUFBSTtBQUNqQyxVQUFNLEVBQUUsU0FBUyxJQUFJO0FBS3JCLFVBQU0sWUFBTixNQUFnQjtBQUFBLFFBQ2QsWUFBYSxjQUFjO0FBQ3pCLGVBQUssYUFBYSxJQUFJO0FBQUEsUUFDeEI7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLE1BQU8sVUFBVTtBQUNmLGNBQUksT0FBTyxhQUFhLFlBQVksQ0FBQyxPQUFPLFVBQVUsUUFBUSxLQUFLLFlBQVksR0FBRztBQUNoRixrQkFBTSxJQUFJLHFCQUFxQixzQ0FBc0M7QUFBQSxVQUN2RTtBQUVBLGVBQUssYUFBYSxFQUFFLFFBQVE7QUFDNUIsaUJBQU87QUFBQSxRQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxVQUFXO0FBQ1QsZUFBSyxhQUFhLEVBQUUsVUFBVTtBQUM5QixpQkFBTztBQUFBLFFBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLE1BQU8sYUFBYTtBQUNsQixjQUFJLE9BQU8sZ0JBQWdCLFlBQVksQ0FBQyxPQUFPLFVBQVUsV0FBVyxLQUFLLGVBQWUsR0FBRztBQUN6RixrQkFBTSxJQUFJLHFCQUFxQix5Q0FBeUM7QUFBQSxVQUMxRTtBQUVBLGVBQUssYUFBYSxFQUFFLFFBQVE7QUFDNUIsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRjtBQUtBLFVBQU0sa0JBQU4sTUFBc0I7QUFBQSxRQUNwQixZQUFhLE1BQU0sZ0JBQWdCO0FBQ2pDLGNBQUksT0FBTyxTQUFTLFVBQVU7QUFDNUIsa0JBQU0sSUFBSSxxQkFBcUIsd0JBQXdCO0FBQUEsVUFDekQ7QUFDQSxjQUFJLE9BQU8sS0FBSyxTQUFTLGFBQWE7QUFDcEMsa0JBQU0sSUFBSSxxQkFBcUIsMkJBQTJCO0FBQUEsVUFDNUQ7QUFDQSxjQUFJLE9BQU8sS0FBSyxXQUFXLGFBQWE7QUFDdEMsaUJBQUssU0FBUztBQUFBLFVBQ2hCO0FBSUEsY0FBSSxPQUFPLEtBQUssU0FBUyxVQUFVO0FBQ2pDLGdCQUFJLEtBQUssT0FBTztBQUNkLG1CQUFLLE9BQU8sU0FBUyxLQUFLLE1BQU0sS0FBSyxLQUFLO0FBQUEsWUFDNUMsT0FBTztBQUVMLG9CQUFNLFlBQVksSUFBSSxJQUFJLEtBQUssTUFBTSxTQUFTO0FBQzlDLG1CQUFLLE9BQU8sVUFBVSxXQUFXLFVBQVU7QUFBQSxZQUM3QztBQUFBLFVBQ0Y7QUFDQSxjQUFJLE9BQU8sS0FBSyxXQUFXLFVBQVU7QUFDbkMsaUJBQUssU0FBUyxLQUFLLE9BQU8sWUFBWTtBQUFBLFVBQ3hDO0FBRUEsZUFBSyxZQUFZLElBQUksU0FBUyxJQUFJO0FBQ2xDLGVBQUssV0FBVyxJQUFJO0FBQ3BCLGVBQUssZUFBZSxJQUFJLENBQUM7QUFDekIsZUFBSyxnQkFBZ0IsSUFBSSxDQUFDO0FBQzFCLGVBQUssY0FBYyxJQUFJO0FBQUEsUUFDekI7QUFBQSxRQUVBLDRCQUE2QixFQUFFLFlBQVksTUFBTSxnQkFBZ0IsR0FBRztBQUNsRSxnQkFBTSxlQUFlLGdCQUFnQixJQUFJO0FBQ3pDLGdCQUFNLGdCQUFnQixLQUFLLGNBQWMsSUFBSSxFQUFFLGtCQUFrQixhQUFhLE9BQU8sSUFBSSxDQUFDO0FBQzFGLGdCQUFNLFVBQVUsaURBQUssS0FBSyxlQUFlLElBQU0sZ0JBQWtCLGdCQUFnQjtBQUNqRixnQkFBTSxXQUFXLGtDQUFLLEtBQUssZ0JBQWdCLElBQU0sZ0JBQWdCO0FBRWpFLGlCQUFPLEVBQUUsWUFBWSxNQUFNLFNBQVMsU0FBUztBQUFBLFFBQy9DO0FBQUEsUUFFQSx3QkFBeUIsaUJBQWlCO0FBQ3hDLGNBQUksT0FBTyxnQkFBZ0IsZUFBZSxhQUFhO0FBQ3JELGtCQUFNLElBQUkscUJBQXFCLDRCQUE0QjtBQUFBLFVBQzdEO0FBQ0EsY0FBSSxPQUFPLGdCQUFnQixvQkFBb0IsWUFBWSxnQkFBZ0Isb0JBQW9CLE1BQU07QUFDbkcsa0JBQU0sSUFBSSxxQkFBcUIsbUNBQW1DO0FBQUEsVUFDcEU7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxNQUFPLGtDQUFrQztBQUd2QyxjQUFJLE9BQU8scUNBQXFDLFlBQVk7QUFJMUQsa0JBQU0sMEJBQTBCLENBQUMsU0FBUztBQUV4QyxvQkFBTSxlQUFlLGlDQUFpQyxJQUFJO0FBRzFELGtCQUFJLE9BQU8saUJBQWlCLFlBQVksaUJBQWlCLE1BQU07QUFDN0Qsc0JBQU0sSUFBSSxxQkFBcUIsOENBQThDO0FBQUEsY0FDL0U7QUFFQSxvQkFBTUUsbUJBQWtCLGlCQUFFLE1BQU0sSUFBSSxpQkFBaUIsQ0FBQyxLQUFNO0FBQzVELG1CQUFLLHdCQUF3QkEsZ0JBQWU7QUFHNUMscUJBQU8sbUJBQ0YsS0FBSyw0QkFBNEJBLGdCQUFlO0FBQUEsWUFFdkQ7QUFHQSxrQkFBTUMsbUJBQWtCLGdCQUFnQixLQUFLLFdBQVcsR0FBRyxLQUFLLFlBQVksR0FBRyx1QkFBdUI7QUFDdEcsbUJBQU8sSUFBSSxVQUFVQSxnQkFBZTtBQUFBLFVBQ3RDO0FBTUEsZ0JBQU0sa0JBQWtCO0FBQUEsWUFDdEIsWUFBWTtBQUFBLFlBQ1osTUFBTSxVQUFVLENBQUMsTUFBTSxTQUFZLEtBQUssVUFBVSxDQUFDO0FBQUEsWUFDbkQsaUJBQWlCLFVBQVUsQ0FBQyxNQUFNLFNBQVksQ0FBQyxJQUFJLFVBQVUsQ0FBQztBQUFBLFVBQ2hFO0FBQ0EsZUFBSyx3QkFBd0IsZUFBZTtBQUc1QyxnQkFBTSxlQUFlLEtBQUssNEJBQTRCLGVBQWU7QUFDckUsZ0JBQU0sa0JBQWtCLGdCQUFnQixLQUFLLFdBQVcsR0FBRyxLQUFLLFlBQVksR0FBRyxZQUFZO0FBQzNGLGlCQUFPLElBQUksVUFBVSxlQUFlO0FBQUEsUUFDdEM7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLGVBQWdCLE9BQU87QUFDckIsY0FBSSxPQUFPLFVBQVUsYUFBYTtBQUNoQyxrQkFBTSxJQUFJLHFCQUFxQix1QkFBdUI7QUFBQSxVQUN4RDtBQUVBLGdCQUFNLGtCQUFrQixnQkFBZ0IsS0FBSyxXQUFXLEdBQUcsS0FBSyxZQUFZLEdBQUcsRUFBRSxNQUFNLENBQUM7QUFDeEYsaUJBQU8sSUFBSSxVQUFVLGVBQWU7QUFBQSxRQUN0QztBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0Esb0JBQXFCLFNBQVM7QUFDNUIsY0FBSSxPQUFPLFlBQVksYUFBYTtBQUNsQyxrQkFBTSxJQUFJLHFCQUFxQix5QkFBeUI7QUFBQSxVQUMxRDtBQUVBLGVBQUssZUFBZSxJQUFJO0FBQ3hCLGlCQUFPO0FBQUEsUUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EscUJBQXNCLFVBQVU7QUFDOUIsY0FBSSxPQUFPLGFBQWEsYUFBYTtBQUNuQyxrQkFBTSxJQUFJLHFCQUFxQiwwQkFBMEI7QUFBQSxVQUMzRDtBQUVBLGVBQUssZ0JBQWdCLElBQUk7QUFDekIsaUJBQU87QUFBQSxRQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxxQkFBc0I7QUFDcEIsZUFBSyxjQUFjLElBQUk7QUFDdkIsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRjtBQUVBLGFBQU8sUUFBUSxrQkFBa0I7QUFDakMsYUFBTyxRQUFRLFlBQVk7QUFBQTtBQUFBOzs7QUM5TTNCO0FBQUE7QUFBQTtBQUVBLFVBQU0sRUFBRSxVQUFVLElBQUksVUFBUSxNQUFXO0FBQ3pDLFVBQU0sU0FBUztBQUNmLFVBQU0sRUFBRSxrQkFBa0IsSUFBSTtBQUM5QixVQUFNO0FBQUEsUUFDSjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsSUFBSTtBQUNKLFVBQU0sRUFBRSxnQkFBZ0IsSUFBSTtBQUM1QixVQUFNLFVBQVU7QUFDaEIsVUFBTSxFQUFFLHFCQUFxQixJQUFJO0FBS2pDLFVBQU0sYUFBTixjQUF5QixPQUFPO0FBQUEsUUFDOUIsWUFBYSxRQUFRLE1BQU07QUFDekIsZ0JBQU0sUUFBUSxJQUFJO0FBRWxCLGNBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxTQUFTLE9BQU8sS0FBSyxNQUFNLGFBQWEsWUFBWTtBQUNyRSxrQkFBTSxJQUFJLHFCQUFxQiwwQ0FBMEM7QUFBQSxVQUMzRTtBQUVBLGVBQUssVUFBVSxJQUFJLEtBQUs7QUFDeEIsZUFBSyxPQUFPLElBQUk7QUFDaEIsZUFBSyxXQUFXLElBQUksQ0FBQztBQUNyQixlQUFLLFVBQVUsSUFBSTtBQUNuQixlQUFLLGlCQUFpQixJQUFJLEtBQUs7QUFDL0IsZUFBSyxjQUFjLElBQUksS0FBSyxNQUFNLEtBQUssSUFBSTtBQUUzQyxlQUFLLFdBQVcsa0JBQWtCLEtBQUssSUFBSTtBQUMzQyxlQUFLLFFBQVEsS0FBSyxNQUFNO0FBQUEsUUFDMUI7QUFBQSxRQUVBLEtBQUssUUFBUSxVQUFVLElBQUs7QUFDMUIsaUJBQU8sS0FBSyxVQUFVO0FBQUEsUUFDeEI7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLFVBQVcsTUFBTTtBQUNmLGlCQUFPLElBQUksZ0JBQWdCLE1BQU0sS0FBSyxXQUFXLENBQUM7QUFBQSxRQUNwRDtBQUFBLFFBRUEsQ0FBTyxNQUFNLElBQUs7QUFBQTtBQUNoQixrQkFBTSxVQUFVLEtBQUssY0FBYyxDQUFDLEVBQUU7QUFDdEMsaUJBQUssVUFBVSxJQUFJO0FBQ25CLGlCQUFLLFVBQVUsRUFBRSxRQUFRLFFBQVEsRUFBRSxPQUFPLEtBQUssT0FBTyxDQUFDO0FBQUEsVUFDekQ7QUFBQTtBQUFBLE1BQ0Y7QUFFQSxhQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUMxRGpCO0FBQUE7QUFBQTtBQUVBLFVBQU0sRUFBRSxVQUFVLElBQUksVUFBUSxNQUFXO0FBQ3pDLFVBQU0sT0FBTztBQUNiLFVBQU0sRUFBRSxrQkFBa0IsSUFBSTtBQUM5QixVQUFNO0FBQUEsUUFDSjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsSUFBSTtBQUNKLFVBQU0sRUFBRSxnQkFBZ0IsSUFBSTtBQUM1QixVQUFNLFVBQVU7QUFDaEIsVUFBTSxFQUFFLHFCQUFxQixJQUFJO0FBS2pDLFVBQU0sV0FBTixjQUF1QixLQUFLO0FBQUEsUUFDMUIsWUFBYSxRQUFRLE1BQU07QUFDekIsZ0JBQU0sUUFBUSxJQUFJO0FBRWxCLGNBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxTQUFTLE9BQU8sS0FBSyxNQUFNLGFBQWEsWUFBWTtBQUNyRSxrQkFBTSxJQUFJLHFCQUFxQiwwQ0FBMEM7QUFBQSxVQUMzRTtBQUVBLGVBQUssVUFBVSxJQUFJLEtBQUs7QUFDeEIsZUFBSyxPQUFPLElBQUk7QUFDaEIsZUFBSyxXQUFXLElBQUksQ0FBQztBQUNyQixlQUFLLFVBQVUsSUFBSTtBQUNuQixlQUFLLGlCQUFpQixJQUFJLEtBQUs7QUFDL0IsZUFBSyxjQUFjLElBQUksS0FBSyxNQUFNLEtBQUssSUFBSTtBQUUzQyxlQUFLLFdBQVcsa0JBQWtCLEtBQUssSUFBSTtBQUMzQyxlQUFLLFFBQVEsS0FBSyxNQUFNO0FBQUEsUUFDMUI7QUFBQSxRQUVBLEtBQUssUUFBUSxVQUFVLElBQUs7QUFDMUIsaUJBQU8sS0FBSyxVQUFVO0FBQUEsUUFDeEI7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLFVBQVcsTUFBTTtBQUNmLGlCQUFPLElBQUksZ0JBQWdCLE1BQU0sS0FBSyxXQUFXLENBQUM7QUFBQSxRQUNwRDtBQUFBLFFBRUEsQ0FBTyxNQUFNLElBQUs7QUFBQTtBQUNoQixrQkFBTSxVQUFVLEtBQUssY0FBYyxDQUFDLEVBQUU7QUFDdEMsaUJBQUssVUFBVSxJQUFJO0FBQ25CLGlCQUFLLFVBQVUsRUFBRSxRQUFRLFFBQVEsRUFBRSxPQUFPLEtBQUssT0FBTyxDQUFDO0FBQUEsVUFDekQ7QUFBQTtBQUFBLE1BQ0Y7QUFFQSxhQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUMxRGpCO0FBQUE7QUFBQTtBQUVBLFVBQU0sWUFBWTtBQUFBLFFBQ2hCLFNBQVM7QUFBQSxRQUNULElBQUk7QUFBQSxRQUNKLEtBQUs7QUFBQSxRQUNMLE1BQU07QUFBQSxNQUNSO0FBRUEsVUFBTSxVQUFVO0FBQUEsUUFDZCxTQUFTO0FBQUEsUUFDVCxJQUFJO0FBQUEsUUFDSixLQUFLO0FBQUEsUUFDTCxNQUFNO0FBQUEsTUFDUjtBQUVBLGFBQU8sVUFBVSxNQUFNLFdBQVc7QUFBQSxRQUNoQyxZQUFhLFVBQVUsUUFBUTtBQUM3QixlQUFLLFdBQVc7QUFDaEIsZUFBSyxTQUFTO0FBQUEsUUFDaEI7QUFBQSxRQUVBLFVBQVcsT0FBTztBQUNoQixnQkFBTSxNQUFNLFVBQVU7QUFDdEIsZ0JBQU0sT0FBTyxNQUFNLFlBQVk7QUFDL0IsZ0JBQU0sT0FBTyxNQUFNLEtBQUssV0FBVyxLQUFLO0FBQ3hDLGlCQUFPLGlDQUFLLE9BQUwsRUFBVyxPQUFPLEtBQUs7QUFBQSxRQUNoQztBQUFBLE1BQ0Y7QUFBQTtBQUFBOzs7QUM1QkE7QUFBQTtBQUFBO0FBRUEsVUFBTSxFQUFFLFVBQVUsSUFBSSxVQUFRLFFBQWE7QUFDM0MsVUFBTSxFQUFFLFFBQVEsSUFBSSxVQUFRLFNBQWM7QUFFMUMsVUFBTSxhQUFhLFFBQVEsU0FBUyxNQUFNLFdBQU07QUFDaEQsVUFBTSxpQkFBaUIsUUFBUSxTQUFTLE1BQU0sV0FBTTtBQUtwRCxhQUFPLFVBQVUsTUFBTSw2QkFBNkI7QUFBQSxRQUNsRCxZQUFhLEVBQUUsY0FBYyxJQUFJLENBQUMsR0FBRztBQUNuQyxlQUFLLFlBQVksSUFBSSxVQUFVO0FBQUEsWUFDN0IsVUFBVyxPQUFPLE1BQU0sSUFBSTtBQUMxQixpQkFBRyxNQUFNLEtBQUs7QUFBQSxZQUNoQjtBQUFBLFVBQ0YsQ0FBQztBQUVELGVBQUssU0FBUyxJQUFJLFFBQVE7QUFBQSxZQUN4QixRQUFRLEtBQUs7QUFBQSxZQUNiLGdCQUFnQjtBQUFBLGNBQ2QsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsSUFBSTtBQUFBLFlBQ3pDO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSDtBQUFBLFFBRUEsT0FBUSxxQkFBcUI7QUFDM0IsZ0JBQU0sb0JBQW9CLG9CQUFvQjtBQUFBLFlBQzVDLENBQUMsRUFBRSxRQUFRLE1BQUFDLE9BQU0sTUFBTSxFQUFFLFdBQVcsR0FBRyxTQUFTLE9BQU8sY0FBYyxPQUFPLE9BQU87QUFBQSxjQUNqRixRQUFRO0FBQUEsY0FDUixRQUFRO0FBQUEsY0FDUixNQUFNQTtBQUFBLGNBQ04sZUFBZTtBQUFBLGNBQ2YsWUFBWSxVQUFVLGFBQWE7QUFBQSxjQUNuQyxhQUFhO0FBQUEsY0FDYixXQUFXLFVBQVUsV0FBVyxRQUFRO0FBQUEsWUFDMUM7QUFBQSxVQUFFO0FBRUosZUFBSyxPQUFPLE1BQU0saUJBQWlCO0FBQ25DLGlCQUFPLEtBQUssVUFBVSxLQUFLLEVBQUUsU0FBUztBQUFBLFFBQ3hDO0FBQUEsTUFDRjtBQUFBO0FBQUE7OztBQzFDQTtBQUFBO0FBQUE7QUFFQSxVQUFNLEVBQUUsU0FBUyxJQUFJO0FBQ3JCLFVBQU0sUUFBUTtBQUNkLFVBQU07QUFBQSxRQUNKO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLElBQUk7QUFDSixVQUFNLGFBQWE7QUFDbkIsVUFBTSxXQUFXO0FBQ2pCLFVBQU0sRUFBRSxZQUFZLGlCQUFpQixJQUFJO0FBQ3pDLFVBQU0sRUFBRSxzQkFBc0IsWUFBWSxJQUFJO0FBQzlDLFVBQU0sYUFBYTtBQUNuQixVQUFNLGFBQWE7QUFDbkIsVUFBTSwrQkFBK0I7QUFFckMsVUFBTSxZQUFOLGNBQXdCLFdBQVc7QUFBQSxRQUNqQyxZQUFhLE1BQU07QUFDakIsZ0JBQU0sSUFBSTtBQUVWLGVBQUssV0FBVyxJQUFJO0FBQ3BCLGVBQUssYUFBYSxJQUFJO0FBR3RCLGVBQUssNkJBQU0sVUFBUyxPQUFPLEtBQUssTUFBTSxhQUFhLFlBQWE7QUFDOUQsa0JBQU0sSUFBSSxxQkFBcUIsMENBQTBDO0FBQUEsVUFDM0U7QUFDQSxnQkFBTSxTQUFRLDZCQUFNLFNBQVEsS0FBSyxRQUFRLElBQUksTUFBTSxJQUFJO0FBQ3ZELGVBQUssTUFBTSxJQUFJO0FBRWYsZUFBSyxRQUFRLElBQUksTUFBTSxRQUFRO0FBQy9CLGVBQUssUUFBUSxJQUFJLGlCQUFpQixJQUFJO0FBQUEsUUFDeEM7QUFBQSxRQUVBLElBQUssUUFBUTtBQUNYLGNBQUksYUFBYSxLQUFLLGFBQWEsRUFBRSxNQUFNO0FBRTNDLGNBQUksQ0FBQyxZQUFZO0FBQ2YseUJBQWEsS0FBSyxRQUFRLEVBQUUsTUFBTTtBQUNsQyxpQkFBSyxhQUFhLEVBQUUsUUFBUSxVQUFVO0FBQUEsVUFDeEM7QUFDQSxpQkFBTztBQUFBLFFBQ1Q7QUFBQSxRQUVBLFNBQVUsTUFBTSxTQUFTO0FBRXZCLGVBQUssSUFBSSxLQUFLLE1BQU07QUFDcEIsaUJBQU8sS0FBSyxNQUFNLEVBQUUsU0FBUyxNQUFNLE9BQU87QUFBQSxRQUM1QztBQUFBLFFBRU0sUUFBUztBQUFBO0FBQ2Isa0JBQU0sS0FBSyxNQUFNLEVBQUUsTUFBTTtBQUN6QixpQkFBSyxRQUFRLEVBQUUsTUFBTTtBQUFBLFVBQ3ZCO0FBQUE7QUFBQSxRQUVBLGFBQWM7QUFDWixlQUFLLGFBQWEsSUFBSTtBQUFBLFFBQ3hCO0FBQUEsUUFFQSxXQUFZO0FBQ1YsZUFBSyxhQUFhLElBQUk7QUFBQSxRQUN4QjtBQUFBLFFBRUEsaUJBQWtCLFNBQVM7QUFDekIsY0FBSSxPQUFPLFlBQVksWUFBWSxPQUFPLFlBQVksY0FBYyxtQkFBbUIsUUFBUTtBQUM3RixnQkFBSSxNQUFNLFFBQVEsS0FBSyxXQUFXLENBQUMsR0FBRztBQUNwQyxtQkFBSyxXQUFXLEVBQUUsS0FBSyxPQUFPO0FBQUEsWUFDaEMsT0FBTztBQUNMLG1CQUFLLFdBQVcsSUFBSSxDQUFDLE9BQU87QUFBQSxZQUM5QjtBQUFBLFVBQ0YsV0FBVyxPQUFPLFlBQVksYUFBYTtBQUN6QyxpQkFBSyxXQUFXLElBQUk7QUFBQSxVQUN0QixPQUFPO0FBQ0wsa0JBQU0sSUFBSSxxQkFBcUIsNkRBQTZEO0FBQUEsVUFDOUY7QUFBQSxRQUNGO0FBQUEsUUFFQSxvQkFBcUI7QUFDbkIsZUFBSyxXQUFXLElBQUk7QUFBQSxRQUN0QjtBQUFBO0FBQUE7QUFBQSxRQUlBLElBQUksZUFBZ0I7QUFDbEIsaUJBQU8sS0FBSyxhQUFhO0FBQUEsUUFDM0I7QUFBQSxRQUVBLENBQUMsYUFBYSxFQUFHLFFBQVEsWUFBWTtBQUNuQyxlQUFLLFFBQVEsRUFBRSxJQUFJLFFBQVEsVUFBVTtBQUFBLFFBQ3ZDO0FBQUEsUUFFQSxDQUFDLFFBQVEsRUFBRyxRQUFRO0FBQ2xCLGdCQUFNLGNBQWMsT0FBTyxPQUFPLEVBQUUsT0FBTyxLQUFLLEdBQUcsS0FBSyxRQUFRLENBQUM7QUFDakUsaUJBQU8sS0FBSyxRQUFRLEtBQUssS0FBSyxRQUFRLEVBQUUsZ0JBQWdCLElBQ3BELElBQUksV0FBVyxRQUFRLFdBQVcsSUFDbEMsSUFBSSxTQUFTLFFBQVEsV0FBVztBQUFBLFFBQ3RDO0FBQUEsUUFFQSxDQUFDLGFBQWEsRUFBRyxRQUFRO0FBRXZCLGdCQUFNLFNBQVMsS0FBSyxRQUFRLEVBQUUsSUFBSSxNQUFNO0FBQ3hDLGNBQUksUUFBUTtBQUNWLG1CQUFPO0FBQUEsVUFDVDtBQUdBLGNBQUksT0FBTyxXQUFXLFVBQVU7QUFDOUIsa0JBQU0sYUFBYSxLQUFLLFFBQVEsRUFBRSx1QkFBdUI7QUFDekQsaUJBQUssYUFBYSxFQUFFLFFBQVEsVUFBVTtBQUN0QyxtQkFBTztBQUFBLFVBQ1Q7QUFHQSxxQkFBVyxDQUFDLFlBQVkscUJBQXFCLEtBQUssTUFBTSxLQUFLLEtBQUssUUFBUSxDQUFDLEdBQUc7QUFDNUUsZ0JBQUkseUJBQXlCLE9BQU8sZUFBZSxZQUFZLFdBQVcsWUFBWSxNQUFNLEdBQUc7QUFDN0Ysb0JBQU0sYUFBYSxLQUFLLFFBQVEsRUFBRSxNQUFNO0FBQ3hDLG1CQUFLLGFBQWEsRUFBRSxRQUFRLFVBQVU7QUFDdEMseUJBQVcsV0FBVyxJQUFJLHNCQUFzQixXQUFXO0FBQzNELHFCQUFPO0FBQUEsWUFDVDtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsUUFFQSxDQUFDLGNBQWMsSUFBSztBQUNsQixpQkFBTyxLQUFLLFdBQVc7QUFBQSxRQUN6QjtBQUFBLFFBRUEsc0JBQXVCO0FBQ3JCLGdCQUFNLG1CQUFtQixLQUFLLFFBQVE7QUFFdEMsaUJBQU8sTUFBTSxLQUFLLGlCQUFpQixRQUFRLENBQUMsRUFDekMsUUFBUSxDQUFDLENBQUMsUUFBUSxLQUFLLE1BQU0sTUFBTSxXQUFXLEVBQUUsSUFBSSxjQUFhLGlDQUFLLFdBQUwsRUFBZSxPQUFPLEVBQUUsQ0FBQyxFQUMxRixPQUFPLENBQUMsRUFBRSxRQUFRLE1BQU0sT0FBTztBQUFBLFFBQ3BDO0FBQUEsUUFFQSw0QkFBNkIsRUFBRSwrQkFBK0IsSUFBSSw2QkFBNkIsRUFBRSxJQUFJLENBQUMsR0FBRztBQUN2RyxnQkFBTSxVQUFVLEtBQUssb0JBQW9CO0FBRXpDLGNBQUksUUFBUSxXQUFXLEdBQUc7QUFDeEI7QUFBQSxVQUNGO0FBRUEsZ0JBQU0sYUFBYSxJQUFJLFdBQVcsZUFBZSxjQUFjLEVBQUUsVUFBVSxRQUFRLE1BQU07QUFFekYsZ0JBQU0sSUFBSSxZQUFZO0FBQUEsRUFDeEIsV0FBVyxLQUFLLElBQUksV0FBVyxJQUFJLElBQUksV0FBVyxFQUFFO0FBQUE7QUFBQSxFQUVwRCw2QkFBNkIsT0FBTyxPQUFPLENBQUM7QUFBQSxFQUM1QyxLQUFLLENBQUM7QUFBQSxRQUNOO0FBQUEsTUFDRjtBQUVBLGFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQy9KakIsTUFBQUMsa0JBQUE7QUFBQTtBQUFBO0FBSUEsVUFBTSxtQkFBbUIsT0FBTyxJQUFJLDJCQUEyQjtBQUMvRCxVQUFNLEVBQUUscUJBQXFCLElBQUk7QUFDakMsVUFBTSxRQUFRO0FBRWQsVUFBSSxvQkFBb0IsTUFBTSxRQUFXO0FBQ3ZDLDRCQUFvQixJQUFJLE1BQU0sQ0FBQztBQUFBLE1BQ2pDO0FBRUEsZUFBUyxvQkFBcUIsT0FBTztBQUNuQyxZQUFJLENBQUMsU0FBUyxPQUFPLE1BQU0sYUFBYSxZQUFZO0FBQ2xELGdCQUFNLElBQUkscUJBQXFCLHFDQUFxQztBQUFBLFFBQ3RFO0FBQ0EsZUFBTyxlQUFlLFlBQVksa0JBQWtCO0FBQUEsVUFDbEQsT0FBTztBQUFBLFVBQ1AsVUFBVTtBQUFBLFVBQ1YsWUFBWTtBQUFBLFVBQ1osY0FBYztBQUFBLFFBQ2hCLENBQUM7QUFBQSxNQUNIO0FBRUEsZUFBUyxzQkFBdUI7QUFDOUIsZUFBTyxXQUFXLGdCQUFnQjtBQUFBLE1BQ3BDO0FBRUEsYUFBTyxVQUFVO0FBQUEsUUFDZjtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUE7QUFBQTs7O0FDL0JBO0FBQUE7QUFBQTtBQUFBO0FBRUEsYUFBTyxXQUFVLFdBQXVCO0FBQUEsUUFHdEMsWUFBYSxTQUFTO0FBRnRCO0FBR0UsY0FBSSxPQUFPLFlBQVksWUFBWSxZQUFZLE1BQU07QUFDbkQsa0JBQU0sSUFBSSxVQUFVLDJCQUEyQjtBQUFBLFVBQ2pEO0FBQ0EsNkJBQUssVUFBVztBQUFBLFFBQ2xCO0FBQUEsUUFFQSxhQUFjLE1BQU07QUFadEIsY0FBQUMsS0FBQTtBQWFJLGtCQUFPLE1BQUFBLE1BQUEsbUJBQUssV0FBUyxjQUFkLHdCQUFBQSxLQUEwQixHQUFHO0FBQUEsUUFDdEM7QUFBQSxRQUVBLFdBQVksTUFBTTtBQWhCcEIsY0FBQUEsS0FBQTtBQWlCSSxrQkFBTyxNQUFBQSxNQUFBLG1CQUFLLFdBQVMsWUFBZCx3QkFBQUEsS0FBd0IsR0FBRztBQUFBLFFBQ3BDO0FBQUEsUUFFQSxhQUFjLE1BQU07QUFwQnRCLGNBQUFBLEtBQUE7QUFxQkksa0JBQU8sTUFBQUEsTUFBQSxtQkFBSyxXQUFTLGNBQWQsd0JBQUFBLEtBQTBCLEdBQUc7QUFBQSxRQUN0QztBQUFBLFFBRUEscUJBQXNCLE1BQU07QUF4QjlCLGNBQUFBLEtBQUE7QUF5Qkksa0JBQU8sTUFBQUEsTUFBQSxtQkFBSyxXQUFTLHNCQUFkLHdCQUFBQSxLQUFrQyxHQUFHO0FBQUEsUUFDOUM7QUFBQSxRQUVBLGFBQWMsTUFBTTtBQTVCdEIsY0FBQUEsS0FBQTtBQTZCSSxrQkFBTyxNQUFBQSxNQUFBLG1CQUFLLFdBQVMsY0FBZCx3QkFBQUEsS0FBMEIsR0FBRztBQUFBLFFBQ3RDO0FBQUEsUUFFQSxVQUFXLE1BQU07QUFoQ25CLGNBQUFBLEtBQUE7QUFpQ0ksa0JBQU8sTUFBQUEsTUFBQSxtQkFBSyxXQUFTLFdBQWQsd0JBQUFBLEtBQXVCLEdBQUc7QUFBQSxRQUNuQztBQUFBLFFBRUEsY0FBZSxNQUFNO0FBcEN2QixjQUFBQSxLQUFBO0FBcUNJLGtCQUFPLE1BQUFBLE1BQUEsbUJBQUssV0FBUyxlQUFkLHdCQUFBQSxLQUEyQixHQUFHO0FBQUEsUUFDdkM7QUFBQSxRQUVBLGNBQWUsTUFBTTtBQXhDdkIsY0FBQUEsS0FBQTtBQXlDSSxrQkFBTyxNQUFBQSxNQUFBLG1CQUFLLFdBQVMsZUFBZCx3QkFBQUEsS0FBMkIsR0FBRztBQUFBLFFBQ3ZDO0FBQUEsTUFDRixHQXhDRSwwQkFEZTtBQUFBO0FBQUE7OztBQ0ZqQjtBQUFBO0FBQUE7QUFDQSxVQUFNLGtCQUFrQjtBQUV4QixhQUFPLFVBQVUsVUFBUTtBQUN2QixjQUFNLHdCQUF3Qiw2QkFBTTtBQUNwQyxlQUFPLGNBQVk7QUFDakIsaUJBQU8sU0FBUyxvQkFBcUJDLE9BQU0sU0FBUztBQUNsRCxrQkFBaUUsS0FBQUEsT0FBekQsb0JBQWtCLHNCQVBoQyxJQU91RSxJQUFiLHFCQUFhLElBQWIsQ0FBNUM7QUFFUixnQkFBSSxDQUFDLGlCQUFpQjtBQUNwQixxQkFBTyxTQUFTQSxPQUFNLE9BQU87QUFBQSxZQUMvQjtBQUVBLGtCQUFNLGtCQUFrQixJQUFJO0FBQUEsY0FDMUI7QUFBQSxjQUNBO0FBQUEsY0FDQUE7QUFBQSxjQUNBO0FBQUEsWUFDRjtBQUVBLG1CQUFPLFNBQVMsVUFBVSxlQUFlO0FBQUEsVUFDM0M7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBO0FBQUE7OztBQ3ZCQTtBQUFBO0FBQUE7QUFDQSxVQUFNLGVBQWU7QUFFckIsYUFBTyxVQUFVLGdCQUFjO0FBQzdCLGVBQU8sY0FBWTtBQUNqQixpQkFBTyxTQUFTLGlCQUFrQixNQUFNLFNBQVM7QUFDL0MsbUJBQU87QUFBQSxjQUNMO0FBQUEsY0FDQSxJQUFJO0FBQUEsZ0JBQ0YsaUNBQUssT0FBTCxFQUFXLGNBQWMsa0NBQUssYUFBZSxLQUFLLGNBQWU7QUFBQSxnQkFDakU7QUFBQSxrQkFDRTtBQUFBLGtCQUNBO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBO0FBQUE7OztBQ2xCQTtBQUFBO0FBQUE7QUFFQSxVQUFNLE9BQU87QUFDYixVQUFNLEVBQUUsc0JBQXNCLG9CQUFvQixJQUFJO0FBQ3RELFVBQU0sbUJBQW1CO0FBSnpCO0FBTUEsVUFBTSxjQUFOLGNBQTBCLGlCQUFpQjtBQUFBLFFBU3pDLFlBQWEsRUFBRSxRQUFRLEdBQUcsU0FBUztBQUNqQyxnQkFBTSxPQUFPO0FBZ0JmO0FBekJBLHVDQUFXLE9BQU87QUFDbEIscUNBQVM7QUFDVCxzQ0FBVTtBQUNWLHVDQUFXO0FBQ1gsb0NBQVE7QUFDUixzQ0FBVTtBQUNWLHVDQUFXO0FBS1QsY0FBSSxXQUFXLFNBQVMsQ0FBQyxPQUFPLFNBQVMsT0FBTyxLQUFLLFVBQVUsSUFBSTtBQUNqRSxrQkFBTSxJQUFJLHFCQUFxQix5Q0FBeUM7QUFBQSxVQUMxRTtBQUVBLDZCQUFLLFVBQVcsNEJBQVcsbUJBQUs7QUFDaEMsNkJBQUssVUFBVztBQUFBLFFBQ2xCO0FBQUEsUUFFQSxVQUFXLE9BQU87QUFDaEIsNkJBQUssUUFBUztBQUVkLDZCQUFLLFVBQVMsVUFBVSxzQkFBSyw4QkFBYSxLQUFLLElBQUksQ0FBQztBQUFBLFFBQ3REO0FBQUE7QUFBQSxRQVFBLFVBQVcsWUFBWSxZQUFZLFFBQVEsZUFBZTtBQUN4RCxnQkFBTSxVQUFVLEtBQUssYUFBYSxVQUFVO0FBQzVDLGdCQUFNLGdCQUFnQixRQUFRLGdCQUFnQjtBQUU5QyxjQUFJLGlCQUFpQixRQUFRLGdCQUFnQixtQkFBSyxXQUFVO0FBQzFELGtCQUFNLElBQUk7QUFBQSxjQUNSLGtCQUFrQixhQUFhLDBCQUM3QixtQkFBSyxTQUNQO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLG1CQUFLLFdBQVU7QUFDakIsbUJBQU87QUFBQSxVQUNUO0FBRUEsaUJBQU8sbUJBQUssVUFBUztBQUFBLFlBQ25CO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxRQUVBLFFBQVMsS0FBSztBQTlEaEI7QUErREksY0FBSSxtQkFBSyxVQUFTO0FBQ2hCO0FBQUEsVUFDRjtBQUVBLGlCQUFNLHdCQUFLLGFBQUwsWUFBZ0I7QUFFdEIsNkJBQUssVUFBUyxRQUFRLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBRUEsT0FBUSxPQUFPO0FBQ2IsNkJBQUssT0FBUSxtQkFBSyxTQUFRLE1BQU07QUFFaEMsY0FBSSxtQkFBSyxVQUFTLG1CQUFLLFdBQVU7QUFDL0IsK0JBQUssU0FBVTtBQUVmLGdCQUFJLG1CQUFLLFdBQVU7QUFDakIsaUNBQUssVUFBUyxRQUFRLG1CQUFLLFFBQU87QUFBQSxZQUNwQyxPQUFPO0FBQ0wsaUNBQUssVUFBUyxXQUFXLENBQUMsQ0FBQztBQUFBLFlBQzdCO0FBQUEsVUFDRjtBQUVBLGlCQUFPO0FBQUEsUUFDVDtBQUFBLFFBRUEsV0FBWSxVQUFVO0FBQ3BCLGNBQUksbUJBQUssVUFBUztBQUNoQjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLG1CQUFLLFdBQVU7QUFDakIsK0JBQUssVUFBUyxRQUFRLEtBQUssTUFBTTtBQUNqQztBQUFBLFVBQ0Y7QUFFQSw2QkFBSyxVQUFTLFdBQVcsUUFBUTtBQUFBLFFBQ25DO0FBQUEsTUFDRjtBQTdGRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW1CQTtBQUFBLHVCQUFhLFNBQUMsUUFBUTtBQUNwQiwyQkFBSyxVQUFXO0FBQ2hCLDJCQUFLLFNBQVU7QUFBQSxNQUNqQjtBQW1FRixlQUFTLHNCQUNQLEVBQUUsU0FBUyxlQUFlLElBQUk7QUFBQSxRQUM1QixTQUFTLE9BQU87QUFBQSxNQUNsQixHQUNBO0FBQ0EsZUFBTyxjQUFZO0FBQ2pCLGlCQUFPLFNBQVMsVUFBVyxNQUFNLFNBQVM7QUFDeEMsa0JBQU0sRUFBRSxjQUFjLGVBQWUsSUFDbkM7QUFFRixrQkFBTSxjQUFjLElBQUk7QUFBQSxjQUN0QixFQUFFLFNBQVMsWUFBWTtBQUFBLGNBQ3ZCO0FBQUEsWUFDRjtBQUVBLG1CQUFPLFNBQVMsTUFBTSxXQUFXO0FBQUEsVUFDbkM7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLGFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQzFIakI7QUFBQTtBQUFBO0FBQ0EsVUFBTSxFQUFFLEtBQUssSUFBSSxVQUFRLEtBQVU7QUFDbkMsVUFBTSxFQUFFLE9BQU8sSUFBSSxVQUFRLEtBQVU7QUFDckMsVUFBTSxtQkFBbUI7QUFDekIsVUFBTSxFQUFFLHNCQUFzQixtQkFBbUIsSUFBSTtBQUNyRCxVQUFNLFNBQVMsS0FBSyxJQUFJLEdBQUcsRUFBRSxJQUFJO0FBTGpDO0FBT0EsVUFBTSxjQUFOLE1BQWtCO0FBQUEsUUFTaEIsWUFBYSxNQUFNO0FBa0duQjtBQTBCQTtBQXBJQSxzQ0FBVTtBQUNWLHdDQUFZO0FBQ1osdUNBQVcsb0JBQUksSUFBSTtBQUNuQiwyQ0FBWTtBQUNaLDBDQUFXO0FBQ1gsd0NBQVM7QUFDVCxzQ0FBTztBQWRUO0FBaUJJLDZCQUFLLFNBQVUsS0FBSztBQUNwQiw2QkFBSyxXQUFZLEtBQUs7QUFDdEIsZUFBSyxZQUFZLEtBQUs7QUFDdEIsZUFBSyxXQUFXLEtBQUs7QUFDckIsZUFBSyxVQUFTLFVBQUssV0FBTCxZQUFlLHNCQUFLO0FBQ2xDLGVBQUssUUFBTyxVQUFLLFNBQUwsWUFBYSxzQkFBSztBQUFBLFFBQ2hDO0FBQUEsUUFFQSxJQUFJLE9BQVE7QUFDVixpQkFBTyxtQkFBSyxVQUFTLFNBQVMsbUJBQUs7QUFBQSxRQUNyQztBQUFBLFFBRUEsVUFBVyxRQUFRLE1BQU0sSUFBSTtBQUMzQixnQkFBTSxNQUFNLG1CQUFLLFVBQVMsSUFBSSxPQUFPLFFBQVE7QUFHN0MsY0FBSSxPQUFPLFFBQVEsS0FBSyxNQUFNO0FBQzVCLGVBQUcsTUFBTSxPQUFPLE1BQU07QUFDdEI7QUFBQSxVQUNGO0FBRUEsZ0JBQU0sVUFBVTtBQUFBLFlBQ2QsVUFBVSxLQUFLO0FBQUEsWUFDZixXQUFXLEtBQUs7QUFBQSxZQUNoQixRQUFRLEtBQUs7QUFBQSxZQUNiLE1BQU0sS0FBSztBQUFBLGFBQ1IsS0FBSyxNQUxNO0FBQUEsWUFNZCxRQUFRLG1CQUFLO0FBQUEsWUFDYixVQUFVLG1CQUFLO0FBQUEsVUFDakI7QUFHQSxjQUFJLE9BQU8sTUFBTTtBQUNmLGlCQUFLLE9BQU8sUUFBUSxTQUFTLENBQUMsS0FBSyxjQUFjO0FBQy9DLGtCQUFJLE9BQU8sYUFBYSxRQUFRLFVBQVUsV0FBVyxHQUFHO0FBQ3RELG1CQUFHLG9CQUFPLElBQUksbUJBQW1CLHNCQUFzQixDQUFDO0FBQ3hEO0FBQUEsY0FDRjtBQUVBLG1CQUFLLFdBQVcsUUFBUSxTQUFTO0FBQ2pDLG9CQUFNLFVBQVUsbUJBQUssVUFBUyxJQUFJLE9BQU8sUUFBUTtBQUVqRCxvQkFBTSxLQUFLLEtBQUs7QUFBQSxnQkFDZDtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0EsUUFBUTtBQUFBLGNBQ1Y7QUFFQSxrQkFBSTtBQUNKLGtCQUFJLE9BQU8sR0FBRyxTQUFTLFVBQVU7QUFDL0IsdUJBQU8sSUFBSSxHQUFHLElBQUk7QUFBQSxjQUNwQixXQUFXLE9BQU8sU0FBUyxJQUFJO0FBQzdCLHVCQUFPLElBQUksT0FBTyxJQUFJO0FBQUEsY0FDeEIsT0FBTztBQUNMLHVCQUFPO0FBQUEsY0FDVDtBQUVBO0FBQUEsZ0JBQ0U7QUFBQSxnQkFDQSxHQUFHLE9BQU8sUUFBUSxLQUNoQixHQUFHLFdBQVcsSUFBSSxJQUFJLEdBQUcsT0FBTyxNQUFNLEdBQUcsT0FDM0MsR0FBRyxJQUFJO0FBQUEsY0FDVDtBQUFBLFlBQ0YsQ0FBQztBQUFBLFVBQ0gsT0FBTztBQUVMLGtCQUFNLEtBQUssS0FBSztBQUFBLGNBQ2Q7QUFBQSxjQUNBO0FBQUEsY0FDQSxRQUFRO0FBQUEsWUFDVjtBQUdBLGdCQUFJLE1BQU0sTUFBTTtBQUNkLGlDQUFLLFVBQVMsT0FBTyxPQUFPLFFBQVE7QUFDcEMsbUJBQUssVUFBVSxRQUFRLE1BQU0sRUFBRTtBQUMvQjtBQUFBLFlBQ0Y7QUFFQSxnQkFBSTtBQUNKLGdCQUFJLE9BQU8sR0FBRyxTQUFTLFVBQVU7QUFDL0IscUJBQU8sSUFBSSxHQUFHLElBQUk7QUFBQSxZQUNwQixXQUFXLE9BQU8sU0FBUyxJQUFJO0FBQzdCLHFCQUFPLElBQUksT0FBTyxJQUFJO0FBQUEsWUFDeEIsT0FBTztBQUNMLHFCQUFPO0FBQUEsWUFDVDtBQUVBO0FBQUEsY0FDRTtBQUFBLGNBQ0EsR0FBRyxPQUFPLFFBQVEsS0FDaEIsR0FBRyxXQUFXLElBQUksSUFBSSxHQUFHLE9BQU8sTUFBTSxHQUFHLE9BQzNDLEdBQUcsSUFBSTtBQUFBLFlBQ1Q7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLFFBa0ZBLFdBQVksUUFBUSxXQUFXO0FBbE1qQztBQW1NSSxnQkFBTSxZQUFZLEtBQUssSUFBSTtBQUMzQixnQkFBTSxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxHQUFHLEtBQUssRUFBRTtBQUNoRCxxQkFBVyxVQUFVLFdBQVc7QUFDOUIsbUJBQU8sWUFBWTtBQUNuQixnQkFBSSxPQUFPLE9BQU8sUUFBUSxVQUFVO0FBRWxDLHFCQUFPLE1BQU0sS0FBSyxJQUFJLE9BQU8sS0FBSyxtQkFBSyxRQUFPO0FBQUEsWUFDaEQsT0FBTztBQUNMLHFCQUFPLE1BQU0sbUJBQUs7QUFBQSxZQUNwQjtBQUVBLGtCQUFNLGlCQUFnQixhQUFRLFFBQVEsT0FBTyxNQUFNLE1BQTdCLFlBQWtDLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFFbEUsMEJBQWMsSUFBSSxLQUFLLE1BQU07QUFDN0Isb0JBQVEsUUFBUSxPQUFPLE1BQU0sSUFBSTtBQUFBLFVBQ25DO0FBRUEsNkJBQUssVUFBUyxJQUFJLE9BQU8sVUFBVSxPQUFPO0FBQUEsUUFDNUM7QUFBQSxRQUVBLFdBQVksTUFBTSxNQUFNO0FBQ3RCLGlCQUFPLElBQUksbUJBQW1CLE1BQU0sTUFBTSxJQUFJO0FBQUEsUUFDaEQ7QUFBQSxNQUNGO0FBbE5FO0FBQ0E7QUFDQTtBQXdHQTtBQUFBLHlCQUFlLFNBQUMsUUFBUSxNQUFNLElBQUk7QUFDaEM7QUFBQSxVQUNFLE9BQU87QUFBQSxVQUNQO0FBQUEsWUFDRSxLQUFLO0FBQUEsWUFDTCxRQUFRLEtBQUssY0FBYyxRQUFRLEtBQUssV0FBVztBQUFBLFlBQ25ELE9BQU87QUFBQSxVQUNUO0FBQUEsVUFDQSxDQUFDLEtBQUssY0FBYztBQUNsQixnQkFBSSxLQUFLO0FBQ1AscUJBQU8sR0FBRyxHQUFHO0FBQUEsWUFDZjtBQUVBLGtCQUFNLFVBQVUsb0JBQUksSUFBSTtBQUV4Qix1QkFBVyxRQUFRLFdBQVc7QUFHNUIsc0JBQVEsSUFBSSxHQUFHLEtBQUssT0FBTyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUk7QUFBQSxZQUNwRDtBQUVBLGVBQUcsTUFBTSxRQUFRLE9BQU8sQ0FBQztBQUFBLFVBQzNCO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQTtBQUFBLHVCQUFhLFNBQUMsUUFBUSxpQkFBaUIsVUFBVTtBQTVJbkQ7QUE2SUksWUFBSSxLQUFLO0FBQ1QsY0FBTSxFQUFFLFNBQVMsT0FBTyxJQUFJO0FBRTVCLFlBQUk7QUFDSixZQUFJLEtBQUssV0FBVztBQUNsQixjQUFJLFlBQVksTUFBTTtBQUVwQixnQkFBSSxVQUFVLFFBQVEsV0FBVyxRQUFRO0FBQ3ZDLDhCQUFnQixTQUFTO0FBQ3pCLHlCQUFXO0FBQUEsWUFDYixPQUFPO0FBQ0wsOEJBQWdCO0FBQ2hCLDBCQUFZLGdCQUFnQixTQUFTLE9BQU8sSUFBSSxJQUFJO0FBQUEsWUFDdEQ7QUFBQSxVQUNGO0FBRUEsY0FBSSxRQUFRLFFBQVEsS0FBSyxRQUFRLFFBQVEsUUFBUSxFQUFFLElBQUksU0FBUyxHQUFHO0FBQ2pFLHFCQUFTLFFBQVEsUUFBUTtBQUFBLFVBQzNCLE9BQU87QUFDTCxxQkFBUyxRQUFRLGFBQWEsSUFBSSxJQUFJLENBQUM7QUFBQSxVQUN6QztBQUFBLFFBQ0YsT0FBTztBQUNMLG1CQUFTLFFBQVEsUUFBUTtBQUFBLFFBQzNCO0FBR0EsWUFBSSxVQUFVLFFBQVEsT0FBTyxJQUFJLFdBQVcsR0FBRztBQUM3QyxpQkFBTztBQUFBLFFBQ1Q7QUFFQSxZQUFJLE9BQU8sVUFBVSxRQUFRLE9BQU8sV0FBVyxRQUFRO0FBQ3JELGlCQUFPLFNBQVM7QUFBQSxRQUNsQixPQUFPO0FBQ0wsaUJBQU87QUFBQSxRQUNUO0FBRUEsY0FBTSxXQUFXLE9BQU8sU0FBUyxPQUFPLElBQUk7QUFDNUMsY0FBSyxZQUFPLElBQUksUUFBUSxNQUFuQixZQUF3QjtBQUU3QixZQUFJLE1BQU0sTUFBTTtBQUNkLGlCQUFPO0FBQUEsUUFDVDtBQUVBLFlBQUksS0FBSyxJQUFJLElBQUksR0FBRyxZQUFZLEdBQUcsS0FBSztBQUd0QyxpQkFBTyxJQUFJLE9BQU8sVUFBVSxDQUFDO0FBQzdCLGlCQUFPLEtBQUssS0FBSyxRQUFRLGlCQUFpQixRQUFRO0FBQUEsUUFDcEQ7QUFFQSxlQUFPO0FBQUEsTUFDVDtBQWhNRjtBQTROQSxVQUFNLHFCQUFOLGNBQWlDLGlCQUFpQjtBQUFBLFFBT2hELFlBQWEsT0FBTyxFQUFFLFFBQVEsU0FBUyxTQUFTLEdBQUcsTUFBTTtBQUN2RCxnQkFBTSxPQUFPO0FBUGYscUNBQVM7QUFDVCxvQ0FBUTtBQUNSLHdDQUFZO0FBQ1osdUNBQVc7QUFDWCxzQ0FBVTtBQUlSLDZCQUFLLFNBQVU7QUFDZiw2QkFBSyxVQUFXO0FBQ2hCLDZCQUFLLE9BQVEsbUJBQUs7QUFDbEIsNkJBQUssUUFBUztBQUNkLDZCQUFLLFdBQVk7QUFBQSxRQUNuQjtBQUFBLFFBRUEsUUFBUyxLQUFLO0FBQ1osa0JBQVEsSUFBSSxNQUFNO0FBQUEsWUFDaEIsS0FBSztBQUFBLFlBQ0wsS0FBSyxnQkFBZ0I7QUFDbkIsa0JBQUksbUJBQUssUUFBTyxXQUFXO0FBRXpCLG1DQUFLLFFBQU8sVUFBVSxtQkFBSyxVQUFTLG1CQUFLLFFBQU8sQ0FBQ0MsTUFBSyxjQUFjO0FBQ2xFLHNCQUFJQSxNQUFLO0FBQ1AsMkJBQU8sbUJBQUssVUFBUyxRQUFRQSxJQUFHO0FBQUEsa0JBQ2xDO0FBRUEsd0JBQU0sZUFBZSxpQ0FDaEIsbUJBQUssU0FEVztBQUFBLG9CQUVuQixRQUFRO0FBQUEsa0JBQ1Y7QUFFQSxxQ0FBSyxXQUFMLFdBQWUsY0FBYztBQUFBLGdCQUMvQixDQUFDO0FBR0Q7QUFBQSxjQUNGO0FBRUEsaUNBQUssVUFBUyxRQUFRLEdBQUc7QUFDekI7QUFBQSxZQUNGO0FBQUEsWUFDQSxLQUFLO0FBQ0gsaUNBQUssUUFBTyxhQUFhLG1CQUFLLFFBQU87QUFBQSxZQUV2QztBQUNFLGlDQUFLLFVBQVMsUUFBUSxHQUFHO0FBQ3pCO0FBQUEsVUFDSjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBakRFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUErQ0YsYUFBTyxVQUFVLHFCQUFtQjtBQWhScEM7QUFpUkUsYUFDRSxtREFBaUIsV0FBVSxTQUMxQixRQUFPLG1EQUFpQixZQUFXLGFBQVksbURBQWlCLFVBQVMsSUFDMUU7QUFDQSxnQkFBTSxJQUFJLHFCQUFxQiwyQ0FBMkM7QUFBQSxRQUM1RTtBQUVBLGFBQ0UsbURBQWlCLGFBQVksU0FDNUIsUUFBTyxtREFBaUIsY0FBYSxhQUNwQyxtREFBaUIsWUFBVyxJQUM5QjtBQUNBLGdCQUFNLElBQUk7QUFBQSxZQUNSO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFFQSxhQUNFLG1EQUFpQixhQUFZLFNBQzdCLG1EQUFpQixjQUFhLE1BQzlCLG1EQUFpQixjQUFhLEdBQzlCO0FBQ0EsZ0JBQU0sSUFBSSxxQkFBcUIseUNBQXlDO0FBQUEsUUFDMUU7QUFFQSxhQUNFLG1EQUFpQixjQUFhLFFBQzlCLFFBQU8sbURBQWlCLGVBQWMsV0FDdEM7QUFDQSxnQkFBTSxJQUFJLHFCQUFxQixzQ0FBc0M7QUFBQSxRQUN2RTtBQUVBLGFBQ0UsbURBQWlCLFdBQVUsUUFDM0IsUUFBTyxtREFBaUIsWUFBVyxZQUNuQztBQUNBLGdCQUFNLElBQUkscUJBQXFCLG9DQUFvQztBQUFBLFFBQ3JFO0FBRUEsYUFDRSxtREFBaUIsU0FBUSxRQUN6QixRQUFPLG1EQUFpQixVQUFTLFlBQ2pDO0FBQ0EsZ0JBQU0sSUFBSSxxQkFBcUIsa0NBQWtDO0FBQUEsUUFDbkU7QUFFQSxjQUFNLGFBQVksd0RBQWlCLGNBQWpCLFlBQThCO0FBQ2hELFlBQUk7QUFDSixZQUFJLFdBQVc7QUFDYixzQkFBVyx3REFBaUIsYUFBakIsWUFBNkI7QUFBQSxRQUMxQyxPQUFPO0FBQ0wsc0JBQVcsd0RBQWlCLGFBQWpCLFlBQTZCO0FBQUEsUUFDMUM7QUFFQSxjQUFNLE9BQU87QUFBQSxVQUNYLFNBQVEsd0RBQWlCLFdBQWpCLFlBQTJCO0FBQUE7QUFBQSxVQUNuQyxTQUFRLHdEQUFpQixXQUFqQixZQUEyQjtBQUFBLFVBQ25DLE9BQU0sd0RBQWlCLFNBQWpCLFlBQXlCO0FBQUEsVUFDL0I7QUFBQSxVQUNBO0FBQUEsVUFDQSxXQUFVLHdEQUFpQixhQUFqQixZQUE2QjtBQUFBLFFBQ3pDO0FBRUEsY0FBTSxXQUFXLElBQUksWUFBWSxJQUFJO0FBRXJDLGVBQU8sY0FBWTtBQUNqQixpQkFBTyxTQUFTLGVBQWdCLGtCQUFrQixTQUFTO0FBQ3pELGtCQUFNLFNBQ0osaUJBQWlCLE9BQU8sZ0JBQWdCLE1BQ3BDLGlCQUFpQixTQUNqQixJQUFJLElBQUksaUJBQWlCLE1BQU07QUFFckMsZ0JBQUksS0FBSyxPQUFPLFFBQVEsTUFBTSxHQUFHO0FBQy9CLHFCQUFPLFNBQVMsa0JBQWtCLE9BQU87QUFBQSxZQUMzQztBQUVBLHFCQUFTLFVBQVUsUUFBUSxrQkFBa0IsQ0FBQyxLQUFLLGNBQWM7QUFDL0Qsa0JBQUksS0FBSztBQUNQLHVCQUFPLFFBQVEsUUFBUSxHQUFHO0FBQUEsY0FDNUI7QUFFQSxrQkFBSSxlQUFlO0FBQ25CLDZCQUFlLGlDQUNWLG1CQURVO0FBQUEsZ0JBRWIsWUFBWSxPQUFPO0FBQUE7QUFBQSxnQkFDbkIsUUFBUTtBQUFBLGdCQUNSLFNBQVM7QUFBQSxrQkFDUCxNQUFNLE9BQU87QUFBQSxtQkFDVixpQkFBaUI7QUFBQSxjQUV4QjtBQUVBO0FBQUEsZ0JBQ0U7QUFBQSxnQkFDQSxTQUFTLFdBQVcsRUFBRSxRQUFRLFVBQVUsUUFBUSxHQUFHLGdCQUFnQjtBQUFBLGNBQ3JFO0FBQUEsWUFDRixDQUFDO0FBRUQsbUJBQU87QUFBQSxVQUNUO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQTtBQUFBOzs7QUN0WEE7QUFBQTtBQUFBO0FBSUEsVUFBTSxFQUFFLFdBQVcsSUFBSTtBQUN2QixVQUFNLEVBQUUsb0JBQW9CLElBQUk7QUFDaEMsVUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsSUFBSTtBQUNKLFVBQU0sRUFBRSxPQUFPLElBQUk7QUFDbkIsVUFBTSxTQUFTLFVBQVEsUUFBYTtBQUNwQyxVQUFNLE9BQU8sVUFBUSxNQUFXO0FBRWhDLFVBQU0sY0FBYyxPQUFPLGFBQWE7QUFDeEMsVUFBTSxvQkFBb0IsT0FBTyxvQkFBb0I7QUFLckQsZUFBUyx5QkFBMEIsTUFBTTtBQUN2QyxlQUFPLFNBQVMsTUFBUyxTQUFTLE1BQVMsU0FBUyxLQUFTLFNBQVM7QUFBQSxNQUN4RTtBQU1BLGVBQVMscUJBQXNCLGdCQUFnQjtBQUk3QyxZQUFJLElBQUk7QUFBRyxZQUFJLElBQUksZUFBZTtBQUVsQyxlQUFPLElBQUksS0FBSyx5QkFBeUIsZUFBZSxXQUFXLElBQUksQ0FBQyxDQUFDO0FBQUcsWUFBRTtBQUM5RSxlQUFPLElBQUksS0FBSyx5QkFBeUIsZUFBZSxXQUFXLENBQUMsQ0FBQztBQUFHLFlBQUU7QUFFMUUsZUFBTyxNQUFNLEtBQUssTUFBTSxlQUFlLFNBQVMsaUJBQWlCLGVBQWUsVUFBVSxHQUFHLENBQUM7QUFBQSxNQUNoRztBQUVBLGVBQVMsS0FBTSxTQUFTLFFBQVE7QUFLOUIsWUFBSSxNQUFNLFFBQVEsTUFBTSxHQUFHO0FBQ3pCLG1CQUFTLElBQUksR0FBRyxJQUFJLE9BQU8sUUFBUSxFQUFFLEdBQUc7QUFDdEMsa0JBQU0sU0FBUyxPQUFPLENBQUM7QUFFdkIsZ0JBQUksT0FBTyxXQUFXLEdBQUc7QUFDdkIsb0JBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxnQkFDNUIsUUFBUTtBQUFBLGdCQUNSLFNBQVMsa0RBQWtELE9BQU8sTUFBTTtBQUFBLGNBQzFFLENBQUM7QUFBQSxZQUNIO0FBR0EseUJBQWEsU0FBUyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztBQUFBLFVBQzVDO0FBQUEsUUFDRixXQUFXLE9BQU8sV0FBVyxZQUFZLFdBQVcsTUFBTTtBQUt4RCxnQkFBTSxPQUFPLE9BQU8sS0FBSyxNQUFNO0FBQy9CLG1CQUFTLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxFQUFFLEdBQUc7QUFDcEMseUJBQWEsU0FBUyxLQUFLLENBQUMsR0FBRyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFBQSxVQUNoRDtBQUFBLFFBQ0YsT0FBTztBQUNMLGdCQUFNLE9BQU8sT0FBTyxpQkFBaUI7QUFBQSxZQUNuQyxRQUFRO0FBQUEsWUFDUixVQUFVO0FBQUEsWUFDVixPQUFPLENBQUMsa0NBQWtDLGdDQUFnQztBQUFBLFVBQzVFLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUtBLGVBQVMsYUFBYyxTQUFTLE1BQU0sT0FBTztBQUUzQyxnQkFBUSxxQkFBcUIsS0FBSztBQUlsQyxZQUFJLENBQUMsa0JBQWtCLElBQUksR0FBRztBQUM1QixnQkFBTSxPQUFPLE9BQU8sZ0JBQWdCO0FBQUEsWUFDbEMsUUFBUTtBQUFBLFlBQ1IsT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFVBQ1IsQ0FBQztBQUFBLFFBQ0gsV0FBVyxDQUFDLG1CQUFtQixLQUFLLEdBQUc7QUFDckMsZ0JBQU0sT0FBTyxPQUFPLGdCQUFnQjtBQUFBLFlBQ2xDLFFBQVE7QUFBQSxZQUNSO0FBQUEsWUFDQSxNQUFNO0FBQUEsVUFDUixDQUFDO0FBQUEsUUFDSDtBQVFBLFlBQUksZ0JBQWdCLE9BQU8sTUFBTSxhQUFhO0FBQzVDLGdCQUFNLElBQUksVUFBVSxXQUFXO0FBQUEsUUFDakM7QUFNQSxlQUFPLGVBQWUsT0FBTyxFQUFFLE9BQU8sTUFBTSxPQUFPLEtBQUs7QUFBQSxNQUkxRDtBQUVBLGVBQVMsa0JBQW1CLEdBQUcsR0FBRztBQUNoQyxlQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUs7QUFBQSxNQUM1QjtBQUVBLFVBQU0sY0FBTixNQUFNLGFBQVk7QUFBQSxRQUloQixZQUFhLE1BQU07QUFGbkI7QUFBQSx5Q0FBVTtBQUdSLGNBQUksZ0JBQWdCLGNBQWE7QUFDL0IsaUJBQUssV0FBVyxJQUFJLElBQUksSUFBSSxLQUFLLFdBQVcsQ0FBQztBQUM3QyxpQkFBSyxpQkFBaUIsSUFBSSxLQUFLLGlCQUFpQjtBQUNoRCxpQkFBSyxVQUFVLEtBQUssWUFBWSxPQUFPLE9BQU8sQ0FBQyxHQUFHLEtBQUssT0FBTztBQUFBLFVBQ2hFLE9BQU87QUFDTCxpQkFBSyxXQUFXLElBQUksSUFBSSxJQUFJLElBQUk7QUFDaEMsaUJBQUssaUJBQWlCLElBQUk7QUFBQSxVQUM1QjtBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxTQUFVLE1BQU0sYUFBYTtBQUszQixpQkFBTyxLQUFLLFdBQVcsRUFBRSxJQUFJLGNBQWMsT0FBTyxLQUFLLFlBQVksQ0FBQztBQUFBLFFBQ3RFO0FBQUEsUUFFQSxRQUFTO0FBQ1AsZUFBSyxXQUFXLEVBQUUsTUFBTTtBQUN4QixlQUFLLGlCQUFpQixJQUFJO0FBQzFCLGVBQUssVUFBVTtBQUFBLFFBQ2pCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxPQUFRLE1BQU0sT0FBTyxhQUFhO0FBcktwQztBQXNLSSxlQUFLLGlCQUFpQixJQUFJO0FBSTFCLGdCQUFNLGdCQUFnQixjQUFjLE9BQU8sS0FBSyxZQUFZO0FBQzVELGdCQUFNQyxVQUFTLEtBQUssV0FBVyxFQUFFLElBQUksYUFBYTtBQUdsRCxjQUFJQSxTQUFRO0FBQ1Ysa0JBQU1DLGFBQVksa0JBQWtCLFdBQVcsT0FBTztBQUN0RCxpQkFBSyxXQUFXLEVBQUUsSUFBSSxlQUFlO0FBQUEsY0FDbkMsTUFBTUQsUUFBTztBQUFBLGNBQ2IsT0FBTyxHQUFHQSxRQUFPLEtBQUssR0FBR0MsVUFBUyxHQUFHLEtBQUs7QUFBQSxZQUM1QyxDQUFDO0FBQUEsVUFDSCxPQUFPO0FBQ0wsaUJBQUssV0FBVyxFQUFFLElBQUksZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQUEsVUFDdEQ7QUFFQSxjQUFJLGtCQUFrQixjQUFjO0FBQ2xDLGNBQUMsVUFBSyxZQUFMLGlCQUFLLFVBQVksQ0FBQyxHQUFHLEtBQUssS0FBSztBQUFBLFVBQ2xDO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsSUFBSyxNQUFNLE9BQU8sYUFBYTtBQUM3QixlQUFLLGlCQUFpQixJQUFJO0FBQzFCLGdCQUFNLGdCQUFnQixjQUFjLE9BQU8sS0FBSyxZQUFZO0FBRTVELGNBQUksa0JBQWtCLGNBQWM7QUFDbEMsaUJBQUssVUFBVSxDQUFDLEtBQUs7QUFBQSxVQUN2QjtBQU1BLGVBQUssV0FBVyxFQUFFLElBQUksZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQUEsUUFDdEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxPQUFRLE1BQU0sYUFBYTtBQUN6QixlQUFLLGlCQUFpQixJQUFJO0FBQzFCLGNBQUksQ0FBQztBQUFhLG1CQUFPLEtBQUssWUFBWTtBQUUxQyxjQUFJLFNBQVMsY0FBYztBQUN6QixpQkFBSyxVQUFVO0FBQUEsVUFDakI7QUFFQSxlQUFLLFdBQVcsRUFBRSxPQUFPLElBQUk7QUFBQSxRQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsSUFBSyxNQUFNLGFBQWE7QUF4TzFCO0FBNk9JLGtCQUFPLGdCQUFLLFdBQVcsRUFBRSxJQUFJLGNBQWMsT0FBTyxLQUFLLFlBQVksQ0FBQyxNQUE3RCxtQkFBZ0UsVUFBaEUsWUFBeUU7QUFBQSxRQUNsRjtBQUFBLFFBRUEsRUFBRyxPQUFPLFFBQVEsSUFBSztBQUVyQixxQkFBVyxFQUFFLEdBQUcsTUFBTSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssS0FBSyxXQUFXLEdBQUc7QUFDekQsa0JBQU0sQ0FBQyxNQUFNLEtBQUs7QUFBQSxVQUNwQjtBQUFBLFFBQ0Y7QUFBQSxRQUVBLElBQUksVUFBVztBQUNiLGdCQUFNLFVBQVUsQ0FBQztBQUVqQixjQUFJLEtBQUssV0FBVyxFQUFFLFNBQVMsR0FBRztBQUNoQyx1QkFBVyxFQUFFLE1BQU0sTUFBTSxLQUFLLEtBQUssV0FBVyxFQUFFLE9BQU8sR0FBRztBQUN4RCxzQkFBUSxJQUFJLElBQUk7QUFBQSxZQUNsQjtBQUFBLFVBQ0Y7QUFFQSxpQkFBTztBQUFBLFFBQ1Q7QUFBQSxRQUVBLFlBQWE7QUFDWCxpQkFBTyxLQUFLLFdBQVcsRUFBRSxPQUFPO0FBQUEsUUFDbEM7QUFBQSxRQUVBLElBQUksY0FBZTtBQUNqQixnQkFBTSxVQUFVLENBQUM7QUFFakIsY0FBSSxLQUFLLFdBQVcsRUFBRSxTQUFTLEdBQUc7QUFDaEMsdUJBQVcsRUFBRSxHQUFHLFdBQVcsR0FBRyxFQUFFLE1BQU0sTUFBTSxFQUFFLEtBQUssS0FBSyxXQUFXLEdBQUc7QUFDcEUsa0JBQUksY0FBYyxjQUFjO0FBQzlCLDJCQUFXLFVBQVUsS0FBSyxTQUFTO0FBQ2pDLDBCQUFRLEtBQUssQ0FBQyxNQUFNLE1BQU0sQ0FBQztBQUFBLGdCQUM3QjtBQUFBLGNBQ0YsT0FBTztBQUNMLHdCQUFRLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztBQUFBLGNBQzVCO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxpQkFBTztBQUFBLFFBQ1Q7QUFBQTtBQUFBLFFBR0EsZ0JBQWlCO0FBQ2YsZ0JBQU0sT0FBTyxLQUFLLFdBQVcsRUFBRTtBQUMvQixnQkFBTSxRQUFRLElBQUksTUFBTSxJQUFJO0FBRzVCLGNBQUksUUFBUSxJQUFJO0FBQ2QsZ0JBQUksU0FBUyxHQUFHO0FBRWQscUJBQU87QUFBQSxZQUNUO0FBR0Esa0JBQU0sV0FBVyxLQUFLLFdBQVcsRUFBRSxPQUFPLFFBQVEsRUFBRTtBQUNwRCxrQkFBTSxhQUFhLFNBQVMsS0FBSyxFQUFFO0FBRW5DLGtCQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxFQUFFLEtBQUs7QUFHOUMsbUJBQU8sV0FBVyxDQUFDLEVBQUUsVUFBVSxJQUFJO0FBQ25DLHFCQUNNLElBQUksR0FBRyxJQUFJLEdBQUcsUUFBUSxHQUFHLE9BQU8sR0FBRyxRQUFRLEdBQUcsR0FBRyxPQUNyRCxJQUFJLE1BQ0osRUFBRSxHQUNGO0FBRUEsc0JBQVEsU0FBUyxLQUFLLEVBQUU7QUFFeEIsa0JBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxLQUFLO0FBR3hDLHFCQUFPLEVBQUUsQ0FBQyxNQUFNLElBQUk7QUFDcEIscUJBQU87QUFDUCxzQkFBUTtBQUVSLHFCQUFPLE9BQU8sT0FBTztBQUVuQix3QkFBUSxRQUFTLFFBQVEsUUFBUztBQUVsQyxvQkFBSSxNQUFNLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUc7QUFDM0IseUJBQU8sUUFBUTtBQUFBLGdCQUNqQixPQUFPO0FBQ0wsMEJBQVE7QUFBQSxnQkFDVjtBQUFBLGNBQ0Y7QUFDQSxrQkFBSSxNQUFNLE9BQU87QUFDZixvQkFBSTtBQUNKLHVCQUFPLElBQUksTUFBTTtBQUNmLHdCQUFNLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUFBLGdCQUN0QjtBQUNBLHNCQUFNLElBQUksSUFBSTtBQUFBLGNBQ2hCO0FBQUEsWUFDRjtBQUVBLGdCQUFJLENBQUMsU0FBUyxLQUFLLEVBQUUsTUFBTTtBQUV6QixvQkFBTSxJQUFJLFVBQVUsYUFBYTtBQUFBLFlBQ25DO0FBQ0EsbUJBQU87QUFBQSxVQUNULE9BQU87QUFHTCxnQkFBSSxJQUFJO0FBQ1IsdUJBQVcsRUFBRSxHQUFHLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEtBQUssV0FBVyxHQUFHO0FBQ3pELG9CQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sS0FBSztBQUd6QixxQkFBTyxVQUFVLElBQUk7QUFBQSxZQUN2QjtBQUNBLG1CQUFPLE1BQU0sS0FBSyxpQkFBaUI7QUFBQSxVQUNyQztBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBaldBO0FBb1dBLFVBQU0sV0FBTixNQUFNLFNBQVE7QUFBQSxRQUlaLFlBQWEsT0FBTyxRQUFXO0FBSC9CO0FBQ0E7QUFHRSxpQkFBTyxLQUFLLGtCQUFrQixJQUFJO0FBRWxDLGNBQUksU0FBUyxZQUFZO0FBQ3ZCO0FBQUEsVUFDRjtBQUVBLDZCQUFLLGNBQWUsSUFBSSxZQUFZO0FBS3BDLDZCQUFLLFFBQVM7QUFHZCxjQUFJLFNBQVMsUUFBVztBQUN0QixtQkFBTyxPQUFPLFdBQVcsWUFBWSxNQUFNLHNCQUFzQixNQUFNO0FBQ3ZFLGlCQUFLLE1BQU0sSUFBSTtBQUFBLFVBQ2pCO0FBQUEsUUFDRjtBQUFBO0FBQUEsUUFHQSxPQUFRLE1BQU0sT0FBTztBQUNuQixpQkFBTyxXQUFXLE1BQU0sUUFBTztBQUUvQixpQkFBTyxvQkFBb0IsV0FBVyxHQUFHLGdCQUFnQjtBQUV6RCxnQkFBTSxTQUFTO0FBQ2YsaUJBQU8sT0FBTyxXQUFXLFdBQVcsTUFBTSxRQUFRLE1BQU07QUFDeEQsa0JBQVEsT0FBTyxXQUFXLFdBQVcsT0FBTyxRQUFRLE9BQU87QUFFM0QsaUJBQU8sYUFBYSxNQUFNLE1BQU0sS0FBSztBQUFBLFFBQ3ZDO0FBQUE7QUFBQSxRQUdBLE9BQVEsTUFBTTtBQUNaLGlCQUFPLFdBQVcsTUFBTSxRQUFPO0FBRS9CLGlCQUFPLG9CQUFvQixXQUFXLEdBQUcsZ0JBQWdCO0FBRXpELGdCQUFNLFNBQVM7QUFDZixpQkFBTyxPQUFPLFdBQVcsV0FBVyxNQUFNLFFBQVEsTUFBTTtBQUd4RCxjQUFJLENBQUMsa0JBQWtCLElBQUksR0FBRztBQUM1QixrQkFBTSxPQUFPLE9BQU8sZ0JBQWdCO0FBQUEsY0FDbEMsUUFBUTtBQUFBLGNBQ1IsT0FBTztBQUFBLGNBQ1AsTUFBTTtBQUFBLFlBQ1IsQ0FBQztBQUFBLFVBQ0g7QUFZQSxjQUFJLG1CQUFLLFlBQVcsYUFBYTtBQUMvQixrQkFBTSxJQUFJLFVBQVUsV0FBVztBQUFBLFVBQ2pDO0FBSUEsY0FBSSxDQUFDLG1CQUFLLGNBQWEsU0FBUyxNQUFNLEtBQUssR0FBRztBQUM1QztBQUFBLFVBQ0Y7QUFLQSw2QkFBSyxjQUFhLE9BQU8sTUFBTSxLQUFLO0FBQUEsUUFDdEM7QUFBQTtBQUFBLFFBR0EsSUFBSyxNQUFNO0FBQ1QsaUJBQU8sV0FBVyxNQUFNLFFBQU87QUFFL0IsaUJBQU8sb0JBQW9CLFdBQVcsR0FBRyxhQUFhO0FBRXRELGdCQUFNLFNBQVM7QUFDZixpQkFBTyxPQUFPLFdBQVcsV0FBVyxNQUFNLFFBQVEsTUFBTTtBQUd4RCxjQUFJLENBQUMsa0JBQWtCLElBQUksR0FBRztBQUM1QixrQkFBTSxPQUFPLE9BQU8sZ0JBQWdCO0FBQUEsY0FDbEM7QUFBQSxjQUNBLE9BQU87QUFBQSxjQUNQLE1BQU07QUFBQSxZQUNSLENBQUM7QUFBQSxVQUNIO0FBSUEsaUJBQU8sbUJBQUssY0FBYSxJQUFJLE1BQU0sS0FBSztBQUFBLFFBQzFDO0FBQUE7QUFBQSxRQUdBLElBQUssTUFBTTtBQUNULGlCQUFPLFdBQVcsTUFBTSxRQUFPO0FBRS9CLGlCQUFPLG9CQUFvQixXQUFXLEdBQUcsYUFBYTtBQUV0RCxnQkFBTSxTQUFTO0FBQ2YsaUJBQU8sT0FBTyxXQUFXLFdBQVcsTUFBTSxRQUFRLE1BQU07QUFHeEQsY0FBSSxDQUFDLGtCQUFrQixJQUFJLEdBQUc7QUFDNUIsa0JBQU0sT0FBTyxPQUFPLGdCQUFnQjtBQUFBLGNBQ2xDO0FBQUEsY0FDQSxPQUFPO0FBQUEsY0FDUCxNQUFNO0FBQUEsWUFDUixDQUFDO0FBQUEsVUFDSDtBQUlBLGlCQUFPLG1CQUFLLGNBQWEsU0FBUyxNQUFNLEtBQUs7QUFBQSxRQUMvQztBQUFBO0FBQUEsUUFHQSxJQUFLLE1BQU0sT0FBTztBQUNoQixpQkFBTyxXQUFXLE1BQU0sUUFBTztBQUUvQixpQkFBTyxvQkFBb0IsV0FBVyxHQUFHLGFBQWE7QUFFdEQsZ0JBQU0sU0FBUztBQUNmLGlCQUFPLE9BQU8sV0FBVyxXQUFXLE1BQU0sUUFBUSxNQUFNO0FBQ3hELGtCQUFRLE9BQU8sV0FBVyxXQUFXLE9BQU8sUUFBUSxPQUFPO0FBRzNELGtCQUFRLHFCQUFxQixLQUFLO0FBSWxDLGNBQUksQ0FBQyxrQkFBa0IsSUFBSSxHQUFHO0FBQzVCLGtCQUFNLE9BQU8sT0FBTyxnQkFBZ0I7QUFBQSxjQUNsQztBQUFBLGNBQ0EsT0FBTztBQUFBLGNBQ1AsTUFBTTtBQUFBLFlBQ1IsQ0FBQztBQUFBLFVBQ0gsV0FBVyxDQUFDLG1CQUFtQixLQUFLLEdBQUc7QUFDckMsa0JBQU0sT0FBTyxPQUFPLGdCQUFnQjtBQUFBLGNBQ2xDO0FBQUEsY0FDQTtBQUFBLGNBQ0EsTUFBTTtBQUFBLFlBQ1IsQ0FBQztBQUFBLFVBQ0g7QUFXQSxjQUFJLG1CQUFLLFlBQVcsYUFBYTtBQUMvQixrQkFBTSxJQUFJLFVBQVUsV0FBVztBQUFBLFVBQ2pDO0FBS0EsNkJBQUssY0FBYSxJQUFJLE1BQU0sT0FBTyxLQUFLO0FBQUEsUUFDMUM7QUFBQTtBQUFBLFFBR0EsZUFBZ0I7QUFDZCxpQkFBTyxXQUFXLE1BQU0sUUFBTztBQU0vQixnQkFBTSxPQUFPLG1CQUFLLGNBQWE7QUFFL0IsY0FBSSxNQUFNO0FBQ1IsbUJBQU8sQ0FBQyxHQUFHLElBQUk7QUFBQSxVQUNqQjtBQUVBLGlCQUFPLENBQUM7QUFBQSxRQUNWO0FBQUE7QUFBQSxRQUdBLEtBQUssaUJBQWlCLElBQUs7QUFDekIsY0FBSSxtQkFBSyxjQUFhLGlCQUFpQixHQUFHO0FBQ3hDLG1CQUFPLG1CQUFLLGNBQWEsaUJBQWlCO0FBQUEsVUFDNUM7QUFJQSxnQkFBTSxVQUFVLENBQUM7QUFJakIsZ0JBQU0sUUFBUSxtQkFBSyxjQUFhLGNBQWM7QUFFOUMsZ0JBQU0sVUFBVSxtQkFBSyxjQUFhO0FBR2xDLGNBQUksWUFBWSxRQUFRLFFBQVEsV0FBVyxHQUFHO0FBRTVDLG1CQUFRLG1CQUFLLGNBQWEsaUJBQWlCLElBQUk7QUFBQSxVQUNqRDtBQUdBLG1CQUFTLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxFQUFFLEdBQUc7QUFDckMsa0JBQU0sRUFBRSxHQUFHLE1BQU0sR0FBRyxNQUFNLElBQUksTUFBTSxDQUFDO0FBRXJDLGdCQUFJLFNBQVMsY0FBYztBQU16Qix1QkFBUyxJQUFJLEdBQUcsSUFBSSxRQUFRLFFBQVEsRUFBRSxHQUFHO0FBQ3ZDLHdCQUFRLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFBQSxjQUNqQztBQUFBLFlBQ0YsT0FBTztBQVNMLHNCQUFRLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztBQUFBLFlBQzVCO0FBQUEsVUFDRjtBQUdBLGlCQUFRLG1CQUFLLGNBQWEsaUJBQWlCLElBQUk7QUFBQSxRQUNqRDtBQUFBLFFBRUEsQ0FBQyxLQUFLLFFBQVEsTUFBTSxFQUFHLE9BQU8sU0FBUztBQXpsQnpDO0FBMGxCSSx3QkFBUSxVQUFSLG9CQUFRLFFBQVU7QUFFbEIsaUJBQU8sV0FBVyxLQUFLLGtCQUFrQixTQUFTLG1CQUFLLGNBQWEsT0FBTyxDQUFDO0FBQUEsUUFDOUU7QUFBQSxRQUVBLE9BQU8sZ0JBQWlCLEdBQUc7QUFDekIsaUJBQU8sZ0JBQUU7QUFBQSxRQUNYO0FBQUEsUUFFQSxPQUFPLGdCQUFpQixHQUFHLE9BQU87QUFDaEMsMEJBQUUsUUFBUztBQUFBLFFBQ2I7QUFBQSxRQUVBLE9BQU8sZUFBZ0IsR0FBRztBQUN4QixpQkFBTyxnQkFBRTtBQUFBLFFBQ1g7QUFBQSxRQUVBLE9BQU8sZUFBZ0IsR0FBRyxNQUFNO0FBQzlCLDBCQUFFLGNBQWU7QUFBQSxRQUNuQjtBQUFBLE1BQ0Y7QUF6UUU7QUFDQTtBQUZGLFVBQU1DLFdBQU47QUE0UUEsVUFBTSxFQUFFLGlCQUFpQixpQkFBaUIsZ0JBQWdCLGVBQWUsSUFBSUE7QUFDN0UsY0FBUSxlQUFlQSxVQUFTLGlCQUFpQjtBQUNqRCxjQUFRLGVBQWVBLFVBQVMsaUJBQWlCO0FBQ2pELGNBQVEsZUFBZUEsVUFBUyxnQkFBZ0I7QUFDaEQsY0FBUSxlQUFlQSxVQUFTLGdCQUFnQjtBQUVoRCxvQkFBYyxXQUFXQSxVQUFTLG1CQUFtQixHQUFHLENBQUM7QUFFekQsYUFBTyxpQkFBaUJBLFNBQVEsV0FBVztBQUFBLFFBQ3pDLFFBQVE7QUFBQSxRQUNSLFFBQVE7QUFBQSxRQUNSLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLGNBQWM7QUFBQSxRQUNkLENBQUMsT0FBTyxXQUFXLEdBQUc7QUFBQSxVQUNwQixPQUFPO0FBQUEsVUFDUCxjQUFjO0FBQUEsUUFDaEI7QUFBQSxRQUNBLENBQUMsS0FBSyxRQUFRLE1BQU0sR0FBRztBQUFBLFVBQ3JCLFlBQVk7QUFBQSxRQUNkO0FBQUEsTUFDRixDQUFDO0FBRUQsYUFBTyxXQUFXLGNBQWMsU0FBVSxHQUFHLFFBQVEsVUFBVTtBQUM3RCxZQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsTUFBTSxVQUFVO0FBQ3BDLGdCQUFNLFdBQVcsUUFBUSxJQUFJLEdBQUcsT0FBTyxRQUFRO0FBSS9DLGNBQUksQ0FBQyxLQUFLLE1BQU0sUUFBUSxDQUFDLEtBQUssYUFBYUEsU0FBUSxVQUFVLFNBQVM7QUFDcEUsZ0JBQUk7QUFDRixxQkFBTyxlQUFlLENBQUMsRUFBRTtBQUFBLFlBQzNCLFNBQVE7QUFBQSxZQUVSO0FBQUEsVUFDRjtBQUVBLGNBQUksT0FBTyxhQUFhLFlBQVk7QUFDbEMsbUJBQU8sT0FBTyxXQUFXLGdDQUFnQyxFQUFFLEdBQUcsUUFBUSxVQUFVLFNBQVMsS0FBSyxDQUFDLENBQUM7QUFBQSxVQUNsRztBQUVBLGlCQUFPLE9BQU8sV0FBVyxnQ0FBZ0MsRUFBRSxHQUFHLFFBQVEsUUFBUTtBQUFBLFFBQ2hGO0FBRUEsY0FBTSxPQUFPLE9BQU8saUJBQWlCO0FBQUEsVUFDbkMsUUFBUTtBQUFBLFVBQ1IsVUFBVTtBQUFBLFVBQ1YsT0FBTyxDQUFDLGtDQUFrQyxnQ0FBZ0M7QUFBQSxRQUM1RSxDQUFDO0FBQUEsTUFDSDtBQUVBLGFBQU8sVUFBVTtBQUFBLFFBQ2Y7QUFBQTtBQUFBLFFBRUE7QUFBQSxRQUNBLFNBQUFBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUE7QUFBQTs7O0FDOXFCQTtBQUFBO0FBQUE7QUFFQSxVQUFNLEVBQUUsU0FBQUMsVUFBUyxhQUFhLE1BQU0saUJBQWlCLGlCQUFpQixlQUFlLElBQUk7QUFDekYsVUFBTSxFQUFFLGFBQWEsV0FBVyxXQUFXLHlCQUF5QixnQkFBZ0IsYUFBYSxJQUFJO0FBQ3JHLFVBQU0sT0FBTztBQUNiLFVBQU0sV0FBVyxVQUFRLE1BQVc7QUFDcEMsVUFBTSxFQUFFLG9CQUFvQixJQUFJO0FBQ2hDLFVBQU07QUFBQSxRQUNKO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSwyQkFBMkI7QUFBQSxNQUM3QixJQUFJO0FBQ0osVUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsTUFDRixJQUFJO0FBQ0osVUFBTSxFQUFFLFFBQVEsU0FBUyxJQUFJO0FBQzdCLFVBQU0sRUFBRSxPQUFPLElBQUk7QUFDbkIsVUFBTSxFQUFFLFNBQVMsSUFBSTtBQUNyQixVQUFNLEVBQUUsY0FBYyxJQUFJO0FBQzFCLFVBQU0sRUFBRSxXQUFXLElBQUk7QUFDdkIsVUFBTSxTQUFTLFVBQVEsUUFBYTtBQUNwQyxVQUFNLEVBQUUsTUFBTSxJQUFJLFVBQVEsTUFBVztBQUVyQyxVQUFNLGNBQWMsSUFBSSxZQUFZLE9BQU87QUFHM0MsVUFBTSxXQUFOLE1BQU0sVUFBUztBQUFBO0FBQUEsUUFFYixPQUFPLFFBQVM7QUFJZCxnQkFBTSxpQkFBaUIsa0JBQWtCLGlCQUFpQixHQUFHLFdBQVc7QUFFeEUsaUJBQU87QUFBQSxRQUNUO0FBQUE7QUFBQSxRQUdBLE9BQU8sS0FBTSxNQUFNLE9BQU8sQ0FBQyxHQUFHO0FBQzVCLGlCQUFPLG9CQUFvQixXQUFXLEdBQUcsZUFBZTtBQUV4RCxjQUFJLFNBQVMsTUFBTTtBQUNqQixtQkFBTyxPQUFPLFdBQVcsYUFBYSxJQUFJO0FBQUEsVUFDNUM7QUFHQSxnQkFBTSxRQUFRLFlBQVk7QUFBQSxZQUN4QixxQ0FBcUMsSUFBSTtBQUFBLFVBQzNDO0FBR0EsZ0JBQU0sT0FBTyxZQUFZLEtBQUs7QUFJOUIsZ0JBQU0saUJBQWlCLGtCQUFrQixhQUFhLENBQUMsQ0FBQyxHQUFHLFVBQVU7QUFHckUsNkJBQW1CLGdCQUFnQixNQUFNLEVBQUUsTUFBTSxLQUFLLENBQUMsR0FBRyxNQUFNLG1CQUFtQixDQUFDO0FBR3BGLGlCQUFPO0FBQUEsUUFDVDtBQUFBO0FBQUEsUUFHQSxPQUFPLFNBQVUsS0FBSyxTQUFTLEtBQUs7QUFDbEMsaUJBQU8sb0JBQW9CLFdBQVcsR0FBRyxtQkFBbUI7QUFFNUQsZ0JBQU0sT0FBTyxXQUFXLFVBQVUsR0FBRztBQUNyQyxtQkFBUyxPQUFPLFdBQVcsZ0JBQWdCLEVBQUUsTUFBTTtBQU1uRCxjQUFJO0FBQ0osY0FBSTtBQUNGLHdCQUFZLElBQUksSUFBSSxLQUFLLGNBQWMsZUFBZSxPQUFPO0FBQUEsVUFDL0QsU0FBUyxLQUFLO0FBQ1osa0JBQU0sSUFBSSxVQUFVLDRCQUE0QixHQUFHLElBQUksRUFBRSxPQUFPLElBQUksQ0FBQztBQUFBLFVBQ3ZFO0FBR0EsY0FBSSxDQUFDLGtCQUFrQixJQUFJLE1BQU0sR0FBRztBQUNsQyxrQkFBTSxJQUFJLFdBQVcsdUJBQXVCLE1BQU0sRUFBRTtBQUFBLFVBQ3REO0FBSUEsZ0JBQU0saUJBQWlCLGtCQUFrQixhQUFhLENBQUMsQ0FBQyxHQUFHLFdBQVc7QUFHdEUseUJBQWUsTUFBTSxFQUFFLFNBQVM7QUFHaEMsZ0JBQU0sUUFBUSxpQkFBaUIsY0FBYyxTQUFTLENBQUM7QUFHdkQseUJBQWUsTUFBTSxFQUFFLFlBQVksT0FBTyxZQUFZLE9BQU8sSUFBSTtBQUdqRSxpQkFBTztBQUFBLFFBQ1Q7QUFBQTtBQUFBLFFBR0EsWUFBYSxPQUFPLE1BQU0sT0FBTyxDQUFDLEdBQUc7QUFDbkMsaUJBQU8sS0FBSyxrQkFBa0IsSUFBSTtBQUNsQyxjQUFJLFNBQVMsWUFBWTtBQUN2QjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLFNBQVMsTUFBTTtBQUNqQixtQkFBTyxPQUFPLFdBQVcsU0FBUyxJQUFJO0FBQUEsVUFDeEM7QUFFQSxpQkFBTyxPQUFPLFdBQVcsYUFBYSxJQUFJO0FBRzFDLGVBQUssTUFBTSxJQUFJLGFBQWEsQ0FBQyxDQUFDO0FBSzlCLGVBQUssUUFBUSxJQUFJLElBQUlBLFNBQVEsVUFBVTtBQUN2QywwQkFBZ0IsS0FBSyxRQUFRLEdBQUcsVUFBVTtBQUMxQyx5QkFBZSxLQUFLLFFBQVEsR0FBRyxLQUFLLE1BQU0sRUFBRSxXQUFXO0FBR3ZELGNBQUksZUFBZTtBQUduQixjQUFJLFFBQVEsTUFBTTtBQUNoQixrQkFBTSxDQUFDLGVBQWUsSUFBSSxJQUFJLFlBQVksSUFBSTtBQUM5QywyQkFBZSxFQUFFLE1BQU0sZUFBZSxLQUFLO0FBQUEsVUFDN0M7QUFHQSw2QkFBbUIsTUFBTSxNQUFNLFlBQVk7QUFBQSxRQUM3QztBQUFBO0FBQUEsUUFHQSxJQUFJLE9BQVE7QUFDVixpQkFBTyxXQUFXLE1BQU0sU0FBUTtBQUdoQyxpQkFBTyxLQUFLLE1BQU0sRUFBRTtBQUFBLFFBQ3RCO0FBQUE7QUFBQSxRQUdBLElBQUksTUFBTztBQTNKYjtBQTRKSSxpQkFBTyxXQUFXLE1BQU0sU0FBUTtBQUVoQyxnQkFBTSxVQUFVLEtBQUssTUFBTSxFQUFFO0FBSzdCLGdCQUFNLE9BQU0sYUFBUSxRQUFRLFNBQVMsQ0FBQyxNQUExQixZQUErQjtBQUUzQyxjQUFJLFFBQVEsTUFBTTtBQUNoQixtQkFBTztBQUFBLFVBQ1Q7QUFFQSxpQkFBTyxjQUFjLEtBQUssSUFBSTtBQUFBLFFBQ2hDO0FBQUE7QUFBQSxRQUdBLElBQUksYUFBYztBQUNoQixpQkFBTyxXQUFXLE1BQU0sU0FBUTtBQUloQyxpQkFBTyxLQUFLLE1BQU0sRUFBRSxRQUFRLFNBQVM7QUFBQSxRQUN2QztBQUFBO0FBQUEsUUFHQSxJQUFJLFNBQVU7QUFDWixpQkFBTyxXQUFXLE1BQU0sU0FBUTtBQUdoQyxpQkFBTyxLQUFLLE1BQU0sRUFBRTtBQUFBLFFBQ3RCO0FBQUE7QUFBQSxRQUdBLElBQUksS0FBTTtBQUNSLGlCQUFPLFdBQVcsTUFBTSxTQUFRO0FBSWhDLGlCQUFPLEtBQUssTUFBTSxFQUFFLFVBQVUsT0FBTyxLQUFLLE1BQU0sRUFBRSxVQUFVO0FBQUEsUUFDOUQ7QUFBQTtBQUFBLFFBR0EsSUFBSSxhQUFjO0FBQ2hCLGlCQUFPLFdBQVcsTUFBTSxTQUFRO0FBSWhDLGlCQUFPLEtBQUssTUFBTSxFQUFFO0FBQUEsUUFDdEI7QUFBQTtBQUFBLFFBR0EsSUFBSSxVQUFXO0FBQ2IsaUJBQU8sV0FBVyxNQUFNLFNBQVE7QUFHaEMsaUJBQU8sS0FBSyxRQUFRO0FBQUEsUUFDdEI7QUFBQSxRQUVBLElBQUksT0FBUTtBQUNWLGlCQUFPLFdBQVcsTUFBTSxTQUFRO0FBRWhDLGlCQUFPLEtBQUssTUFBTSxFQUFFLE9BQU8sS0FBSyxNQUFNLEVBQUUsS0FBSyxTQUFTO0FBQUEsUUFDeEQ7QUFBQSxRQUVBLElBQUksV0FBWTtBQUNkLGlCQUFPLFdBQVcsTUFBTSxTQUFRO0FBRWhDLGlCQUFPLENBQUMsQ0FBQyxLQUFLLE1BQU0sRUFBRSxRQUFRLEtBQUssWUFBWSxLQUFLLE1BQU0sRUFBRSxLQUFLLE1BQU07QUFBQSxRQUN6RTtBQUFBO0FBQUEsUUFHQSxRQUFTO0FBcE9YO0FBcU9JLGlCQUFPLFdBQVcsTUFBTSxTQUFRO0FBR2hDLGNBQUksYUFBYSxJQUFJLEdBQUc7QUFDdEIsa0JBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxjQUM1QixRQUFRO0FBQUEsY0FDUixTQUFTO0FBQUEsWUFDWCxDQUFDO0FBQUEsVUFDSDtBQUdBLGdCQUFNLGlCQUFpQixjQUFjLEtBQUssTUFBTSxDQUFDO0FBR2pELGNBQUksNkJBQTJCLFVBQUssTUFBTSxFQUFFLFNBQWIsbUJBQW1CLFNBQVE7QUFDeEQsMkJBQWUsU0FBUyxNQUFNLElBQUksUUFBUSxLQUFLLE1BQU0sRUFBRSxLQUFLLE1BQU0sQ0FBQztBQUFBLFVBQ3JFO0FBSUEsaUJBQU8sa0JBQWtCLGdCQUFnQixnQkFBZ0IsS0FBSyxRQUFRLENBQUMsQ0FBQztBQUFBLFFBQzFFO0FBQUEsUUFFQSxDQUFDLFNBQVMsUUFBUSxNQUFNLEVBQUcsT0FBTyxTQUFTO0FBNVA3QztBQTZQSSxjQUFJLFFBQVEsVUFBVSxNQUFNO0FBQzFCLG9CQUFRLFFBQVE7QUFBQSxVQUNsQjtBQUVBLHdCQUFRLFdBQVIsb0JBQVEsU0FBVztBQUVuQixnQkFBTSxhQUFhO0FBQUEsWUFDakIsUUFBUSxLQUFLO0FBQUEsWUFDYixZQUFZLEtBQUs7QUFBQSxZQUNqQixTQUFTLEtBQUs7QUFBQSxZQUNkLE1BQU0sS0FBSztBQUFBLFlBQ1gsVUFBVSxLQUFLO0FBQUEsWUFDZixJQUFJLEtBQUs7QUFBQSxZQUNULFlBQVksS0FBSztBQUFBLFlBQ2pCLE1BQU0sS0FBSztBQUFBLFlBQ1gsS0FBSyxLQUFLO0FBQUEsVUFDWjtBQUVBLGlCQUFPLFlBQVksU0FBUyxrQkFBa0IsU0FBUyxVQUFVLENBQUM7QUFBQSxRQUNwRTtBQUFBLE1BQ0Y7QUFFQSxnQkFBVSxRQUFRO0FBRWxCLGFBQU8saUJBQWlCLFNBQVMsV0FBVztBQUFBLFFBQzFDLE1BQU07QUFBQSxRQUNOLEtBQUs7QUFBQSxRQUNMLFFBQVE7QUFBQSxRQUNSLElBQUk7QUFBQSxRQUNKLFlBQVk7QUFBQSxRQUNaLFlBQVk7QUFBQSxRQUNaLFNBQVM7QUFBQSxRQUNULE9BQU87QUFBQSxRQUNQLE1BQU07QUFBQSxRQUNOLFVBQVU7QUFBQSxRQUNWLENBQUMsT0FBTyxXQUFXLEdBQUc7QUFBQSxVQUNwQixPQUFPO0FBQUEsVUFDUCxjQUFjO0FBQUEsUUFDaEI7QUFBQSxNQUNGLENBQUM7QUFFRCxhQUFPLGlCQUFpQixVQUFVO0FBQUEsUUFDaEMsTUFBTTtBQUFBLFFBQ04sVUFBVTtBQUFBLFFBQ1YsT0FBTztBQUFBLE1BQ1QsQ0FBQztBQUdELGVBQVMsY0FBZSxVQUFVO0FBTWhDLFlBQUksU0FBUyxrQkFBa0I7QUFDN0IsaUJBQU87QUFBQSxZQUNMLGNBQWMsU0FBUyxnQkFBZ0I7QUFBQSxZQUN2QyxTQUFTO0FBQUEsVUFDWDtBQUFBLFFBQ0Y7QUFHQSxjQUFNLGNBQWMsYUFBYSxpQ0FBSyxXQUFMLEVBQWUsTUFBTSxLQUFLLEVBQUM7QUFJNUQsWUFBSSxTQUFTLFFBQVEsTUFBTTtBQUN6QixzQkFBWSxPQUFPLFVBQVUsYUFBYSxTQUFTLElBQUk7QUFBQSxRQUN6RDtBQUdBLGVBQU87QUFBQSxNQUNUO0FBRUEsZUFBUyxhQUFjLE1BQU07QUFDM0IsZUFBTztBQUFBLFVBQ0wsU0FBUztBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsbUJBQW1CO0FBQUEsVUFDbkIsNEJBQTRCO0FBQUEsVUFDNUIsTUFBTTtBQUFBLFVBQ04sUUFBUTtBQUFBLFVBQ1IsWUFBWTtBQUFBLFVBQ1osWUFBWTtBQUFBLFVBQ1osWUFBWTtBQUFBLFdBQ1QsT0FWRTtBQUFBLFVBV0wsY0FBYSw2QkFBTSxlQUNmLElBQUksWUFBWSw2QkFBTSxXQUFXLElBQ2pDLElBQUksWUFBWTtBQUFBLFVBQ3BCLFVBQVMsNkJBQU0sV0FBVSxDQUFDLEdBQUcsS0FBSyxPQUFPLElBQUksQ0FBQztBQUFBLFFBQ2hEO0FBQUEsTUFDRjtBQUVBLGVBQVMsaUJBQWtCLFFBQVE7QUFDakMsY0FBTSxVQUFVLFlBQVksTUFBTTtBQUNsQyxlQUFPLGFBQWE7QUFBQSxVQUNsQixNQUFNO0FBQUEsVUFDTixRQUFRO0FBQUEsVUFDUixPQUFPLFVBQ0gsU0FDQSxJQUFJLE1BQU0sU0FBUyxPQUFPLE1BQU0sSUFBSSxNQUFNO0FBQUEsVUFDOUMsU0FBUyxVQUFVLE9BQU8sU0FBUztBQUFBLFFBQ3JDLENBQUM7QUFBQSxNQUNIO0FBR0EsZUFBUyxlQUFnQixVQUFVO0FBQ2pDO0FBQUE7QUFBQSxVQUVFLFNBQVMsU0FBUztBQUFBLFVBRWxCLFNBQVMsV0FBVztBQUFBO0FBQUEsTUFFeEI7QUFFQSxlQUFTLHFCQUFzQixVQUFVLE9BQU87QUFDOUMsZ0JBQVE7QUFBQSxVQUNOLGtCQUFrQjtBQUFBLFdBQ2Y7QUFHTCxlQUFPLElBQUksTUFBTSxVQUFVO0FBQUEsVUFDekIsSUFBSyxRQUFRLEdBQUc7QUFDZCxtQkFBTyxLQUFLLFFBQVEsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDO0FBQUEsVUFDekM7QUFBQSxVQUNBLElBQUssUUFBUSxHQUFHLE9BQU87QUFDckIsbUJBQU8sRUFBRSxLQUFLLE1BQU07QUFDcEIsbUJBQU8sQ0FBQyxJQUFJO0FBQ1osbUJBQU87QUFBQSxVQUNUO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUdBLGVBQVMsZUFBZ0IsVUFBVSxNQUFNO0FBR3ZDLFlBQUksU0FBUyxTQUFTO0FBTXBCLGlCQUFPLHFCQUFxQixVQUFVO0FBQUEsWUFDcEMsTUFBTTtBQUFBLFlBQ04sYUFBYSxTQUFTO0FBQUEsVUFDeEIsQ0FBQztBQUFBLFFBQ0gsV0FBVyxTQUFTLFFBQVE7QUFPMUIsaUJBQU8scUJBQXFCLFVBQVU7QUFBQSxZQUNwQyxNQUFNO0FBQUEsWUFDTixhQUFhLFNBQVM7QUFBQSxVQUN4QixDQUFDO0FBQUEsUUFDSCxXQUFXLFNBQVMsVUFBVTtBQUs1QixpQkFBTyxxQkFBcUIsVUFBVTtBQUFBLFlBQ3BDLE1BQU07QUFBQSxZQUNOLFNBQVMsT0FBTyxPQUFPLENBQUMsQ0FBQztBQUFBLFlBQ3pCLFFBQVE7QUFBQSxZQUNSLFlBQVk7QUFBQSxZQUNaLE1BQU07QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNILFdBQVcsU0FBUyxrQkFBa0I7QUFLcEMsaUJBQU8scUJBQXFCLFVBQVU7QUFBQSxZQUNwQyxNQUFNO0FBQUEsWUFDTixRQUFRO0FBQUEsWUFDUixZQUFZO0FBQUEsWUFDWixhQUFhLENBQUM7QUFBQSxZQUNkLE1BQU07QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNILE9BQU87QUFDTCxpQkFBTyxLQUFLO0FBQUEsUUFDZDtBQUFBLE1BQ0Y7QUFHQSxlQUFTLDRCQUE2QixhQUFhLE1BQU0sTUFBTTtBQUU3RCxlQUFPLFlBQVksV0FBVyxDQUFDO0FBSS9CLGVBQU8sVUFBVSxXQUFXLElBQ3hCLGlCQUFpQixPQUFPLE9BQU8sSUFBSSxhQUFhLDhCQUE4QixZQUFZLEdBQUcsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLElBQzVHLGlCQUFpQixPQUFPLE9BQU8sSUFBSSxhQUFhLHdCQUF3QixHQUFHLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQztBQUFBLE1BQ2hHO0FBR0EsZUFBUyxtQkFBb0IsVUFBVSxNQUFNLE1BQU07QUFHakQsWUFBSSxLQUFLLFdBQVcsU0FBUyxLQUFLLFNBQVMsT0FBTyxLQUFLLFNBQVMsTUFBTTtBQUNwRSxnQkFBTSxJQUFJLFdBQVcsK0RBQStEO0FBQUEsUUFDdEY7QUFJQSxZQUFJLGdCQUFnQixRQUFRLEtBQUssY0FBYyxNQUFNO0FBR25ELGNBQUksQ0FBQyxvQkFBb0IsT0FBTyxLQUFLLFVBQVUsQ0FBQyxHQUFHO0FBQ2pELGtCQUFNLElBQUksVUFBVSxvQkFBb0I7QUFBQSxVQUMxQztBQUFBLFFBQ0Y7QUFHQSxZQUFJLFlBQVksUUFBUSxLQUFLLFVBQVUsTUFBTTtBQUMzQyxtQkFBUyxNQUFNLEVBQUUsU0FBUyxLQUFLO0FBQUEsUUFDakM7QUFHQSxZQUFJLGdCQUFnQixRQUFRLEtBQUssY0FBYyxNQUFNO0FBQ25ELG1CQUFTLE1BQU0sRUFBRSxhQUFhLEtBQUs7QUFBQSxRQUNyQztBQUdBLFlBQUksYUFBYSxRQUFRLEtBQUssV0FBVyxNQUFNO0FBQzdDLGVBQUssU0FBUyxRQUFRLEdBQUcsS0FBSyxPQUFPO0FBQUEsUUFDdkM7QUFHQSxZQUFJLE1BQU07QUFFUixjQUFJLGVBQWUsU0FBUyxTQUFTLE1BQU0sR0FBRztBQUM1QyxrQkFBTSxPQUFPLE9BQU8sVUFBVTtBQUFBLGNBQzVCLFFBQVE7QUFBQSxjQUNSLFNBQVMsZ0NBQWdDLFNBQVMsTUFBTTtBQUFBLFlBQzFELENBQUM7QUFBQSxVQUNIO0FBR0EsbUJBQVMsTUFBTSxFQUFFLE9BQU8sS0FBSztBQUk3QixjQUFJLEtBQUssUUFBUSxRQUFRLENBQUMsU0FBUyxNQUFNLEVBQUUsWUFBWSxTQUFTLGdCQUFnQixJQUFJLEdBQUc7QUFDckYscUJBQVMsTUFBTSxFQUFFLFlBQVksT0FBTyxnQkFBZ0IsS0FBSyxNQUFNLElBQUk7QUFBQSxVQUNyRTtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBUUEsZUFBUyxrQkFBbUIsZUFBZSxPQUFPO0FBaGdCbEQ7QUFpZ0JFLGNBQU0sV0FBVyxJQUFJLFNBQVMsVUFBVTtBQUN4QyxpQkFBUyxNQUFNLElBQUk7QUFDbkIsaUJBQVMsUUFBUSxJQUFJLElBQUlBLFNBQVEsVUFBVTtBQUMzQyx1QkFBZSxTQUFTLFFBQVEsR0FBRyxjQUFjLFdBQVc7QUFDNUQsd0JBQWdCLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFFekMsWUFBSSw2QkFBMkIsbUJBQWMsU0FBZCxtQkFBb0IsU0FBUTtBQU16RCx5QkFBZSxTQUFTLFVBQVUsSUFBSSxRQUFRLGNBQWMsS0FBSyxNQUFNLENBQUM7QUFBQSxRQUMxRTtBQUVBLGVBQU87QUFBQSxNQUNUO0FBRUEsYUFBTyxXQUFXLGlCQUFpQixPQUFPO0FBQUEsUUFDeEM7QUFBQSxNQUNGO0FBRUEsYUFBTyxXQUFXLFdBQVcsT0FBTztBQUFBLFFBQ2xDO0FBQUEsTUFDRjtBQUVBLGFBQU8sV0FBVyxrQkFBa0IsT0FBTztBQUFBLFFBQ3pDO0FBQUEsTUFDRjtBQUdBLGFBQU8sV0FBVyx5QkFBeUIsU0FBVSxHQUFHLFFBQVEsTUFBTTtBQUNwRSxZQUFJLE9BQU8sTUFBTSxVQUFVO0FBQ3pCLGlCQUFPLE9BQU8sV0FBVyxVQUFVLEdBQUcsUUFBUSxJQUFJO0FBQUEsUUFDcEQ7QUFFQSxZQUFJLFdBQVcsQ0FBQyxHQUFHO0FBQ2pCLGlCQUFPLE9BQU8sV0FBVyxLQUFLLEdBQUcsUUFBUSxNQUFNLEVBQUUsUUFBUSxNQUFNLENBQUM7QUFBQSxRQUNsRTtBQUVBLFlBQUksWUFBWSxPQUFPLENBQUMsS0FBSyxNQUFNLGNBQWMsQ0FBQyxHQUFHO0FBQ25ELGlCQUFPLE9BQU8sV0FBVyxhQUFhLEdBQUcsUUFBUSxJQUFJO0FBQUEsUUFDdkQ7QUFFQSxZQUFJLEtBQUssZUFBZSxDQUFDLEdBQUc7QUFDMUIsaUJBQU8sT0FBTyxXQUFXLFNBQVMsR0FBRyxRQUFRLE1BQU0sRUFBRSxRQUFRLE1BQU0sQ0FBQztBQUFBLFFBQ3RFO0FBRUEsWUFBSSxhQUFhLGlCQUFpQjtBQUNoQyxpQkFBTyxPQUFPLFdBQVcsZ0JBQWdCLEdBQUcsUUFBUSxJQUFJO0FBQUEsUUFDMUQ7QUFFQSxlQUFPLE9BQU8sV0FBVyxVQUFVLEdBQUcsUUFBUSxJQUFJO0FBQUEsTUFDcEQ7QUFHQSxhQUFPLFdBQVcsV0FBVyxTQUFVLEdBQUcsUUFBUSxVQUFVO0FBQzFELFlBQUksYUFBYSxnQkFBZ0I7QUFDL0IsaUJBQU8sT0FBTyxXQUFXLGVBQWUsR0FBRyxRQUFRLFFBQVE7QUFBQSxRQUM3RDtBQUlBLFlBQUksdUJBQUksT0FBTyxnQkFBZ0I7QUFDN0IsaUJBQU87QUFBQSxRQUNUO0FBRUEsZUFBTyxPQUFPLFdBQVcsdUJBQXVCLEdBQUcsUUFBUSxRQUFRO0FBQUEsTUFDckU7QUFFQSxhQUFPLFdBQVcsZUFBZSxPQUFPLG9CQUFvQjtBQUFBLFFBQzFEO0FBQUEsVUFDRSxLQUFLO0FBQUEsVUFDTCxXQUFXLE9BQU8sV0FBVyxnQkFBZ0I7QUFBQSxVQUM3QyxjQUFjLE1BQU07QUFBQSxRQUN0QjtBQUFBLFFBQ0E7QUFBQSxVQUNFLEtBQUs7QUFBQSxVQUNMLFdBQVcsT0FBTyxXQUFXO0FBQUEsVUFDN0IsY0FBYyxNQUFNO0FBQUEsUUFDdEI7QUFBQSxRQUNBO0FBQUEsVUFDRSxLQUFLO0FBQUEsVUFDTCxXQUFXLE9BQU8sV0FBVztBQUFBLFFBQy9CO0FBQUEsTUFDRixDQUFDO0FBRUQsYUFBTyxVQUFVO0FBQUEsUUFDZjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUE7QUFBQTs7O0FDam1CQTtBQUFBO0FBQUE7QUFFQSxVQUFNLEVBQUUsWUFBWSxNQUFNLElBQUk7QUFFOUIsVUFBTSxnQkFBTixNQUFvQjtBQUFBLFFBQ2xCLFlBQWEsT0FBTztBQUNsQixlQUFLLFFBQVE7QUFBQSxRQUNmO0FBQUEsUUFFQSxRQUFTO0FBQ1AsaUJBQU8sS0FBSyxNQUFNLFVBQVUsTUFBTSxLQUFLLEtBQUssTUFBTSxLQUFLLE1BQU0sSUFDekQsU0FDQSxLQUFLO0FBQUEsUUFDWDtBQUFBLE1BQ0Y7QUFFQSxVQUFNLGtCQUFOLE1BQXNCO0FBQUEsUUFDcEIsWUFBYSxXQUFXO0FBQ3RCLGVBQUssWUFBWTtBQUFBLFFBQ25CO0FBQUEsUUFFQSxTQUFVLFlBQVksS0FBSztBQUN6QixjQUFJLFdBQVcsSUFBSTtBQUNqQix1QkFBVyxHQUFHLGNBQWMsTUFBTTtBQUNoQyxrQkFBSSxXQUFXLFVBQVUsTUFBTSxLQUFLLFdBQVcsS0FBSyxNQUFNLEdBQUc7QUFDM0QscUJBQUssVUFBVSxHQUFHO0FBQUEsY0FDcEI7QUFBQSxZQUNGLENBQUM7QUFBQSxVQUNIO0FBQUEsUUFDRjtBQUFBLFFBRUEsV0FBWSxLQUFLO0FBQUEsUUFBQztBQUFBLE1BQ3BCO0FBRUEsYUFBTyxVQUFVLFdBQVk7QUFHM0IsWUFBSSxRQUFRLElBQUksb0JBQW9CLFFBQVEsUUFBUSxXQUFXLEtBQUssR0FBRztBQUNyRSxrQkFBUSxVQUFVLHNEQUFzRDtBQUN4RSxpQkFBTztBQUFBLFlBQ0wsU0FBUztBQUFBLFlBQ1Qsc0JBQXNCO0FBQUEsVUFDeEI7QUFBQSxRQUNGO0FBQ0EsZUFBTyxFQUFFLFNBQVMscUJBQXFCO0FBQUEsTUFDekM7QUFBQTtBQUFBOzs7QUM3Q0EsTUFBQUMsbUJBQUE7QUFBQTtBQUFBO0FBSUEsVUFBTSxFQUFFLGFBQWEsV0FBVyxXQUFXLGFBQWEsSUFBSTtBQUM1RCxVQUFNLEVBQUUsU0FBQUMsVUFBUyxNQUFNLGFBQWEsYUFBYSxpQkFBaUIsaUJBQWlCLGdCQUFnQixlQUFlLElBQUk7QUFDdEgsVUFBTSxFQUFFLHNCQUFBQyxzQkFBcUIsSUFBSSw2QkFBZ0M7QUFDakUsVUFBTSxPQUFPO0FBQ2IsVUFBTSxXQUFXLFVBQVEsTUFBVztBQUNwQyxVQUFNO0FBQUEsUUFDSjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRixJQUFJO0FBQ0osVUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRixJQUFJO0FBQ0osVUFBTSxFQUFFLHFCQUFxQiw2QkFBNkIsd0JBQXdCLElBQUk7QUFDdEYsVUFBTSxFQUFFLFVBQVUsU0FBUyxRQUFRLFlBQVksSUFBSTtBQUNuRCxVQUFNLEVBQUUsT0FBTyxJQUFJO0FBQ25CLFVBQU0sRUFBRSxjQUFjLElBQUk7QUFDMUIsVUFBTSxFQUFFLFdBQVcsSUFBSTtBQUN2QixVQUFNLFNBQVMsVUFBUSxRQUFhO0FBQ3BDLFVBQU0sRUFBRSxpQkFBaUIsaUJBQWlCLG1CQUFtQixvQkFBb0IsSUFBSSxVQUFRLFFBQWE7QUFFMUcsVUFBTSxtQkFBbUIsT0FBTyxpQkFBaUI7QUFFakQsVUFBTSxtQkFBbUIsSUFBSUEsc0JBQXFCLENBQUMsRUFBRSxRQUFRLE1BQU0sTUFBTTtBQUN2RSxlQUFPLG9CQUFvQixTQUFTLEtBQUs7QUFBQSxNQUMzQyxDQUFDO0FBRUQsVUFBTSx5QkFBeUIsb0JBQUksUUFBUTtBQUUzQyxlQUFTLFdBQVksT0FBTztBQUMxQixlQUFPO0FBRVAsaUJBQVMsUUFBUztBQUNoQixnQkFBTSxLQUFLLE1BQU0sTUFBTTtBQUN2QixjQUFJLE9BQU8sUUFBVztBQU9wQiw2QkFBaUIsV0FBVyxLQUFLO0FBSWpDLGlCQUFLLG9CQUFvQixTQUFTLEtBQUs7QUFFdkMsZUFBRyxNQUFNLEtBQUssTUFBTTtBQUVwQixrQkFBTSxpQkFBaUIsdUJBQXVCLElBQUksR0FBRyxNQUFNO0FBRTNELGdCQUFJLG1CQUFtQixRQUFXO0FBQ2hDLGtCQUFJLGVBQWUsU0FBUyxHQUFHO0FBQzdCLDJCQUFXLE9BQU8sZ0JBQWdCO0FBQ2hDLHdCQUFNLE9BQU8sSUFBSSxNQUFNO0FBQ3ZCLHNCQUFJLFNBQVMsUUFBVztBQUN0Qix5QkFBSyxNQUFNLEtBQUssTUFBTTtBQUFBLGtCQUN4QjtBQUFBLGdCQUNGO0FBQ0EsK0JBQWUsTUFBTTtBQUFBLGNBQ3ZCO0FBQ0EscUNBQXVCLE9BQU8sR0FBRyxNQUFNO0FBQUEsWUFDekM7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQSxVQUFJLHFCQUFxQjtBQUd6QixVQUFNLFVBQU4sTUFBTSxTQUFRO0FBQUE7QUFBQSxRQUVaLFlBQWEsT0FBTyxPQUFPLENBQUMsR0FBRztBQW5GakM7QUFvRkksaUJBQU8sS0FBSyxrQkFBa0IsSUFBSTtBQUNsQyxjQUFJLFVBQVUsWUFBWTtBQUN4QjtBQUFBLFVBQ0Y7QUFFQSxnQkFBTSxTQUFTO0FBQ2YsaUJBQU8sb0JBQW9CLFdBQVcsR0FBRyxNQUFNO0FBRS9DLGtCQUFRLE9BQU8sV0FBVyxZQUFZLE9BQU8sUUFBUSxPQUFPO0FBQzVELGlCQUFPLE9BQU8sV0FBVyxZQUFZLE1BQU0sUUFBUSxNQUFNO0FBR3pELGNBQUksVUFBVTtBQUdkLGNBQUksZUFBZTtBQUduQixnQkFBTSxVQUFVLDBCQUEwQixlQUFlO0FBR3pELGNBQUksU0FBUztBQUdiLGNBQUksT0FBTyxVQUFVLFVBQVU7QUFDN0IsaUJBQUssV0FBVyxJQUFJLEtBQUs7QUFJekIsZ0JBQUk7QUFDSixnQkFBSTtBQUNGLDBCQUFZLElBQUksSUFBSSxPQUFPLE9BQU87QUFBQSxZQUNwQyxTQUFTLEtBQUs7QUFDWixvQkFBTSxJQUFJLFVBQVUsOEJBQThCLE9BQU8sRUFBRSxPQUFPLElBQUksQ0FBQztBQUFBLFlBQ3pFO0FBR0EsZ0JBQUksVUFBVSxZQUFZLFVBQVUsVUFBVTtBQUM1QyxvQkFBTSxJQUFJO0FBQUEsZ0JBQ1IseUVBQ0U7QUFBQSxjQUNKO0FBQUEsWUFDRjtBQUdBLHNCQUFVLFlBQVksRUFBRSxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7QUFHOUMsMkJBQWU7QUFBQSxVQUNqQixPQUFPO0FBQ0wsaUJBQUssV0FBVyxJQUFJLEtBQUssY0FBYyxNQUFNLFdBQVc7QUFLeEQsbUJBQU8saUJBQWlCLFFBQU87QUFHL0Isc0JBQVUsTUFBTSxNQUFNO0FBR3RCLHFCQUFTLE1BQU0sT0FBTztBQUFBLFVBQ3hCO0FBR0EsZ0JBQU0sU0FBUywwQkFBMEIsZUFBZTtBQUd4RCxjQUFJLFNBQVM7QUFJYixnQkFDRSxtQkFBUSxXQUFSLG1CQUFnQixnQkFBaEIsbUJBQTZCLFVBQVMsK0JBQ3RDLFdBQVcsUUFBUSxRQUFRLE1BQU0sR0FDakM7QUFDQSxxQkFBUyxRQUFRO0FBQUEsVUFDbkI7QUFHQSxjQUFJLEtBQUssVUFBVSxNQUFNO0FBQ3ZCLGtCQUFNLElBQUksVUFBVSxvQkFBb0IsTUFBTSxnQkFBZ0I7QUFBQSxVQUNoRTtBQUdBLGNBQUksWUFBWSxNQUFNO0FBQ3BCLHFCQUFTO0FBQUEsVUFDWDtBQUdBLG9CQUFVLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUlwQixRQUFRLFFBQVE7QUFBQTtBQUFBO0FBQUEsWUFHaEIsYUFBYSxRQUFRO0FBQUE7QUFBQSxZQUVyQixlQUFlLFFBQVE7QUFBQTtBQUFBLFlBRXZCLFFBQVEsMEJBQTBCO0FBQUE7QUFBQSxZQUVsQztBQUFBO0FBQUEsWUFFQSxVQUFVLFFBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUlsQixRQUFRLFFBQVE7QUFBQTtBQUFBLFlBRWhCLFVBQVUsUUFBUTtBQUFBO0FBQUEsWUFFbEIsZ0JBQWdCLFFBQVE7QUFBQTtBQUFBLFlBRXhCLE1BQU0sUUFBUTtBQUFBO0FBQUEsWUFFZCxhQUFhLFFBQVE7QUFBQTtBQUFBLFlBRXJCLE9BQU8sUUFBUTtBQUFBO0FBQUEsWUFFZixVQUFVLFFBQVE7QUFBQTtBQUFBLFlBRWxCLFdBQVcsUUFBUTtBQUFBO0FBQUEsWUFFbkIsV0FBVyxRQUFRO0FBQUE7QUFBQSxZQUVuQixrQkFBa0IsUUFBUTtBQUFBO0FBQUEsWUFFMUIsbUJBQW1CLFFBQVE7QUFBQTtBQUFBLFlBRTNCLFNBQVMsQ0FBQyxHQUFHLFFBQVEsT0FBTztBQUFBLFVBQzlCLENBQUM7QUFFRCxnQkFBTSxhQUFhLE9BQU8sS0FBSyxJQUFJLEVBQUUsV0FBVztBQUdoRCxjQUFJLFlBQVk7QUFFZCxnQkFBSSxRQUFRLFNBQVMsWUFBWTtBQUMvQixzQkFBUSxPQUFPO0FBQUEsWUFDakI7QUFHQSxvQkFBUSxtQkFBbUI7QUFHM0Isb0JBQVEsb0JBQW9CO0FBRzVCLG9CQUFRLFNBQVM7QUFHakIsb0JBQVEsV0FBVztBQUduQixvQkFBUSxpQkFBaUI7QUFHekIsb0JBQVEsTUFBTSxRQUFRLFFBQVEsUUFBUSxRQUFRLFNBQVMsQ0FBQztBQUd4RCxvQkFBUSxVQUFVLENBQUMsUUFBUSxHQUFHO0FBQUEsVUFDaEM7QUFHQSxjQUFJLEtBQUssYUFBYSxRQUFXO0FBRS9CLGtCQUFNLFdBQVcsS0FBSztBQUd0QixnQkFBSSxhQUFhLElBQUk7QUFDbkIsc0JBQVEsV0FBVztBQUFBLFlBQ3JCLE9BQU87QUFJTCxrQkFBSTtBQUNKLGtCQUFJO0FBQ0YsaUNBQWlCLElBQUksSUFBSSxVQUFVLE9BQU87QUFBQSxjQUM1QyxTQUFTLEtBQUs7QUFDWixzQkFBTSxJQUFJLFVBQVUsYUFBYSxRQUFRLHlCQUF5QixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQUEsY0FDbEY7QUFNQSxrQkFDRyxlQUFlLGFBQWEsWUFBWSxlQUFlLGFBQWEsWUFDcEUsVUFBVSxDQUFDLFdBQVcsZ0JBQWdCLDBCQUEwQixlQUFlLE9BQU8sR0FDdkY7QUFDQSx3QkFBUSxXQUFXO0FBQUEsY0FDckIsT0FBTztBQUVMLHdCQUFRLFdBQVc7QUFBQSxjQUNyQjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBSUEsY0FBSSxLQUFLLG1CQUFtQixRQUFXO0FBQ3JDLG9CQUFRLGlCQUFpQixLQUFLO0FBQUEsVUFDaEM7QUFHQSxjQUFJO0FBQ0osY0FBSSxLQUFLLFNBQVMsUUFBVztBQUMzQixtQkFBTyxLQUFLO0FBQUEsVUFDZCxPQUFPO0FBQ0wsbUJBQU87QUFBQSxVQUNUO0FBR0EsY0FBSSxTQUFTLFlBQVk7QUFDdkIsa0JBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxjQUM1QixRQUFRO0FBQUEsY0FDUixTQUFTO0FBQUEsWUFDWCxDQUFDO0FBQUEsVUFDSDtBQUdBLGNBQUksUUFBUSxNQUFNO0FBQ2hCLG9CQUFRLE9BQU87QUFBQSxVQUNqQjtBQUlBLGNBQUksS0FBSyxnQkFBZ0IsUUFBVztBQUNsQyxvQkFBUSxjQUFjLEtBQUs7QUFBQSxVQUM3QjtBQUdBLGNBQUksS0FBSyxVQUFVLFFBQVc7QUFDNUIsb0JBQVEsUUFBUSxLQUFLO0FBQUEsVUFDdkI7QUFJQSxjQUFJLFFBQVEsVUFBVSxvQkFBb0IsUUFBUSxTQUFTLGVBQWU7QUFDeEUsa0JBQU0sSUFBSTtBQUFBLGNBQ1I7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUdBLGNBQUksS0FBSyxhQUFhLFFBQVc7QUFDL0Isb0JBQVEsV0FBVyxLQUFLO0FBQUEsVUFDMUI7QUFHQSxjQUFJLEtBQUssYUFBYSxNQUFNO0FBQzFCLG9CQUFRLFlBQVksT0FBTyxLQUFLLFNBQVM7QUFBQSxVQUMzQztBQUdBLGNBQUksS0FBSyxjQUFjLFFBQVc7QUFDaEMsb0JBQVEsWUFBWSxRQUFRLEtBQUssU0FBUztBQUFBLFVBQzVDO0FBR0EsY0FBSSxLQUFLLFdBQVcsUUFBVztBQUU3QixnQkFBSSxTQUFTLEtBQUs7QUFFbEIsa0JBQU0sa0JBQWtCLHdCQUF3QixNQUFNO0FBRXRELGdCQUFJLG9CQUFvQixRQUFXO0FBRWpDLHNCQUFRLFNBQVM7QUFBQSxZQUNuQixPQUFPO0FBR0wsa0JBQUksQ0FBQyxpQkFBaUIsTUFBTSxHQUFHO0FBQzdCLHNCQUFNLElBQUksVUFBVSxJQUFJLE1BQU0sK0JBQStCO0FBQUEsY0FDL0Q7QUFFQSxvQkFBTSxZQUFZLE9BQU8sWUFBWTtBQUVyQyxrQkFBSSxvQkFBb0IsSUFBSSxTQUFTLEdBQUc7QUFDdEMsc0JBQU0sSUFBSSxVQUFVLElBQUksTUFBTSwrQkFBK0I7QUFBQSxjQUMvRDtBQUtBLHdCQUFTLGlDQUE0QixTQUFTLE1BQXJDLFlBQTBDO0FBR25ELHNCQUFRLFNBQVM7QUFBQSxZQUNuQjtBQUVBLGdCQUFJLENBQUMsc0JBQXNCLFFBQVEsV0FBVyxTQUFTO0FBQ3JELHNCQUFRLFlBQVksbUhBQW1IO0FBQUEsZ0JBQ3JJLE1BQU07QUFBQSxjQUNSLENBQUM7QUFFRCxtQ0FBcUI7QUFBQSxZQUN2QjtBQUFBLFVBQ0Y7QUFHQSxjQUFJLEtBQUssV0FBVyxRQUFXO0FBQzdCLHFCQUFTLEtBQUs7QUFBQSxVQUNoQjtBQUdBLGVBQUssTUFBTSxJQUFJO0FBTWYsZ0JBQU0sS0FBSyxJQUFJLGdCQUFnQjtBQUMvQixlQUFLLE9BQU8sSUFBSSxHQUFHO0FBR25CLGNBQUksVUFBVSxNQUFNO0FBQ2xCLGdCQUNFLENBQUMsVUFDRCxPQUFPLE9BQU8sWUFBWSxhQUMxQixPQUFPLE9BQU8scUJBQXFCLFlBQ25DO0FBQ0Esb0JBQU0sSUFBSTtBQUFBLGdCQUNSO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSxPQUFPLFNBQVM7QUFDbEIsaUJBQUcsTUFBTSxPQUFPLE1BQU07QUFBQSxZQUN4QixPQUFPO0FBS0wsbUJBQUssZ0JBQWdCLElBQUk7QUFFekIsb0JBQU0sUUFBUSxJQUFJLFFBQVEsRUFBRTtBQUM1QixvQkFBTSxRQUFRLFdBQVcsS0FBSztBQUk5QixrQkFBSTtBQUdGLG9CQUFJLE9BQU8sb0JBQW9CLGNBQWMsZ0JBQWdCLE1BQU0sTUFBTSxxQkFBcUI7QUFDNUYsa0NBQWdCLE1BQU0sTUFBTTtBQUFBLGdCQUM5QixXQUFXLGtCQUFrQixRQUFRLE9BQU8sRUFBRSxVQUFVLHFCQUFxQjtBQUMzRSxrQ0FBZ0IsTUFBTSxNQUFNO0FBQUEsZ0JBQzlCO0FBQUEsY0FDRixTQUFRO0FBQUEsY0FBQztBQUVULG1CQUFLLGlCQUFpQixRQUFRLEtBQUs7QUFLbkMsK0JBQWlCLFNBQVMsSUFBSSxFQUFFLFFBQVEsTUFBTSxHQUFHLEtBQUs7QUFBQSxZQUN4RDtBQUFBLFVBQ0Y7QUFLQSxlQUFLLFFBQVEsSUFBSSxJQUFJRCxTQUFRLFVBQVU7QUFDdkMseUJBQWUsS0FBSyxRQUFRLEdBQUcsUUFBUSxXQUFXO0FBQ2xELDBCQUFnQixLQUFLLFFBQVEsR0FBRyxTQUFTO0FBR3pDLGNBQUksU0FBUyxXQUFXO0FBR3RCLGdCQUFJLENBQUMseUJBQXlCLElBQUksUUFBUSxNQUFNLEdBQUc7QUFDakQsb0JBQU0sSUFBSTtBQUFBLGdCQUNSLElBQUksUUFBUSxNQUFNO0FBQUEsY0FDcEI7QUFBQSxZQUNGO0FBR0EsNEJBQWdCLEtBQUssUUFBUSxHQUFHLGlCQUFpQjtBQUFBLFVBQ25EO0FBR0EsY0FBSSxZQUFZO0FBRWQsa0JBQU0sY0FBYyxlQUFlLEtBQUssUUFBUSxDQUFDO0FBSWpELGtCQUFNLFVBQVUsS0FBSyxZQUFZLFNBQVksS0FBSyxVQUFVLElBQUksWUFBWSxXQUFXO0FBR3ZGLHdCQUFZLE1BQU07QUFJbEIsZ0JBQUksbUJBQW1CLGFBQWE7QUFDbEMseUJBQVcsRUFBRSxNQUFNLE1BQU0sS0FBSyxRQUFRLFVBQVUsR0FBRztBQUNqRCw0QkFBWSxPQUFPLE1BQU0sT0FBTyxLQUFLO0FBQUEsY0FDdkM7QUFFQSwwQkFBWSxVQUFVLFFBQVE7QUFBQSxZQUNoQyxPQUFPO0FBRUwsMEJBQVksS0FBSyxRQUFRLEdBQUcsT0FBTztBQUFBLFlBQ3JDO0FBQUEsVUFDRjtBQUlBLGdCQUFNLFlBQVksaUJBQWlCLFdBQVUsTUFBTSxNQUFNLEVBQUUsT0FBTztBQUtsRSxlQUNHLEtBQUssUUFBUSxRQUFRLGFBQWEsVUFDbEMsUUFBUSxXQUFXLFNBQVMsUUFBUSxXQUFXLFNBQ2hEO0FBQ0Esa0JBQU0sSUFBSSxVQUFVLGdEQUFnRDtBQUFBLFVBQ3RFO0FBR0EsY0FBSSxXQUFXO0FBR2YsY0FBSSxLQUFLLFFBQVEsTUFBTTtBQUlyQixrQkFBTSxDQUFDLGVBQWUsV0FBVyxJQUFJO0FBQUEsY0FDbkMsS0FBSztBQUFBLGNBQ0wsUUFBUTtBQUFBLFlBQ1Y7QUFDQSx1QkFBVztBQUtYLGdCQUFJLGVBQWUsQ0FBQyxlQUFlLEtBQUssUUFBUSxDQUFDLEVBQUUsU0FBUyxnQkFBZ0IsSUFBSSxHQUFHO0FBQ2pGLG1CQUFLLFFBQVEsRUFBRSxPQUFPLGdCQUFnQixXQUFXO0FBQUEsWUFDbkQ7QUFBQSxVQUNGO0FBSUEsZ0JBQU0sa0JBQWtCLDhCQUFZO0FBSXBDLGNBQUksbUJBQW1CLFFBQVEsZ0JBQWdCLFVBQVUsTUFBTTtBQUc3RCxnQkFBSSxZQUFZLFFBQVEsS0FBSyxVQUFVLE1BQU07QUFDM0Msb0JBQU0sSUFBSSxVQUFVLDZEQUE2RDtBQUFBLFlBQ25GO0FBSUEsZ0JBQUksUUFBUSxTQUFTLGlCQUFpQixRQUFRLFNBQVMsUUFBUTtBQUM3RCxvQkFBTSxJQUFJO0FBQUEsZ0JBQ1I7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUdBLG9CQUFRLHVCQUF1QjtBQUFBLFVBQ2pDO0FBR0EsY0FBSSxZQUFZO0FBR2hCLGNBQUksWUFBWSxRQUFRLGFBQWEsTUFBTTtBQUV6QyxnQkFBSSxhQUFhLEtBQUssR0FBRztBQUN2QixvQkFBTSxJQUFJO0FBQUEsZ0JBQ1I7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUlBLGtCQUFNLG9CQUFvQixJQUFJLGdCQUFnQjtBQUM5QyxzQkFBVSxPQUFPLFlBQVksaUJBQWlCO0FBQzlDLHdCQUFZO0FBQUEsY0FDVixRQUFRLFVBQVU7QUFBQSxjQUNsQixRQUFRLFVBQVU7QUFBQSxjQUNsQixRQUFRLGtCQUFrQjtBQUFBLFlBQzVCO0FBQUEsVUFDRjtBQUdBLGVBQUssTUFBTSxFQUFFLE9BQU87QUFBQSxRQUN0QjtBQUFBO0FBQUEsUUFHQSxJQUFJLFNBQVU7QUFDWixpQkFBTyxXQUFXLE1BQU0sUUFBTztBQUcvQixpQkFBTyxLQUFLLE1BQU0sRUFBRTtBQUFBLFFBQ3RCO0FBQUE7QUFBQSxRQUdBLElBQUksTUFBTztBQUNULGlCQUFPLFdBQVcsTUFBTSxRQUFPO0FBRy9CLGlCQUFPLGNBQWMsS0FBSyxNQUFNLEVBQUUsR0FBRztBQUFBLFFBQ3ZDO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxJQUFJLFVBQVc7QUFDYixpQkFBTyxXQUFXLE1BQU0sUUFBTztBQUcvQixpQkFBTyxLQUFLLFFBQVE7QUFBQSxRQUN0QjtBQUFBO0FBQUE7QUFBQSxRQUlBLElBQUksY0FBZTtBQUNqQixpQkFBTyxXQUFXLE1BQU0sUUFBTztBQUcvQixpQkFBTyxLQUFLLE1BQU0sRUFBRTtBQUFBLFFBQ3RCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsSUFBSSxXQUFZO0FBQ2QsaUJBQU8sV0FBVyxNQUFNLFFBQU87QUFJL0IsY0FBSSxLQUFLLE1BQU0sRUFBRSxhQUFhLGVBQWU7QUFDM0MsbUJBQU87QUFBQSxVQUNUO0FBSUEsY0FBSSxLQUFLLE1BQU0sRUFBRSxhQUFhLFVBQVU7QUFDdEMsbUJBQU87QUFBQSxVQUNUO0FBR0EsaUJBQU8sS0FBSyxNQUFNLEVBQUUsU0FBUyxTQUFTO0FBQUEsUUFDeEM7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLElBQUksaUJBQWtCO0FBQ3BCLGlCQUFPLFdBQVcsTUFBTSxRQUFPO0FBRy9CLGlCQUFPLEtBQUssTUFBTSxFQUFFO0FBQUEsUUFDdEI7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLElBQUksT0FBUTtBQUNWLGlCQUFPLFdBQVcsTUFBTSxRQUFPO0FBRy9CLGlCQUFPLEtBQUssTUFBTSxFQUFFO0FBQUEsUUFDdEI7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLElBQUksY0FBZTtBQUVqQixpQkFBTyxLQUFLLE1BQU0sRUFBRTtBQUFBLFFBQ3RCO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxJQUFJLFFBQVM7QUFDWCxpQkFBTyxXQUFXLE1BQU0sUUFBTztBQUcvQixpQkFBTyxLQUFLLE1BQU0sRUFBRTtBQUFBLFFBQ3RCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLElBQUksV0FBWTtBQUNkLGlCQUFPLFdBQVcsTUFBTSxRQUFPO0FBRy9CLGlCQUFPLEtBQUssTUFBTSxFQUFFO0FBQUEsUUFDdEI7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLElBQUksWUFBYTtBQUNmLGlCQUFPLFdBQVcsTUFBTSxRQUFPO0FBSS9CLGlCQUFPLEtBQUssTUFBTSxFQUFFO0FBQUEsUUFDdEI7QUFBQTtBQUFBO0FBQUEsUUFJQSxJQUFJLFlBQWE7QUFDZixpQkFBTyxXQUFXLE1BQU0sUUFBTztBQUcvQixpQkFBTyxLQUFLLE1BQU0sRUFBRTtBQUFBLFFBQ3RCO0FBQUE7QUFBQTtBQUFBLFFBSUEsSUFBSSxxQkFBc0I7QUFDeEIsaUJBQU8sV0FBVyxNQUFNLFFBQU87QUFJL0IsaUJBQU8sS0FBSyxNQUFNLEVBQUU7QUFBQSxRQUN0QjtBQUFBO0FBQUE7QUFBQSxRQUlBLElBQUksc0JBQXVCO0FBQ3pCLGlCQUFPLFdBQVcsTUFBTSxRQUFPO0FBSS9CLGlCQUFPLEtBQUssTUFBTSxFQUFFO0FBQUEsUUFDdEI7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLElBQUksU0FBVTtBQUNaLGlCQUFPLFdBQVcsTUFBTSxRQUFPO0FBRy9CLGlCQUFPLEtBQUssT0FBTztBQUFBLFFBQ3JCO0FBQUEsUUFFQSxJQUFJLE9BQVE7QUFDVixpQkFBTyxXQUFXLE1BQU0sUUFBTztBQUUvQixpQkFBTyxLQUFLLE1BQU0sRUFBRSxPQUFPLEtBQUssTUFBTSxFQUFFLEtBQUssU0FBUztBQUFBLFFBQ3hEO0FBQUEsUUFFQSxJQUFJLFdBQVk7QUFDZCxpQkFBTyxXQUFXLE1BQU0sUUFBTztBQUUvQixpQkFBTyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUUsUUFBUSxLQUFLLFlBQVksS0FBSyxNQUFNLEVBQUUsS0FBSyxNQUFNO0FBQUEsUUFDekU7QUFBQSxRQUVBLElBQUksU0FBVTtBQUNaLGlCQUFPLFdBQVcsTUFBTSxRQUFPO0FBRS9CLGlCQUFPO0FBQUEsUUFDVDtBQUFBO0FBQUEsUUFHQSxRQUFTO0FBQ1AsaUJBQU8sV0FBVyxNQUFNLFFBQU87QUFHL0IsY0FBSSxhQUFhLElBQUksR0FBRztBQUN0QixrQkFBTSxJQUFJLFVBQVUsVUFBVTtBQUFBLFVBQ2hDO0FBR0EsZ0JBQU0sZ0JBQWdCLGFBQWEsS0FBSyxNQUFNLENBQUM7QUFLL0MsZ0JBQU0sS0FBSyxJQUFJLGdCQUFnQjtBQUMvQixjQUFJLEtBQUssT0FBTyxTQUFTO0FBQ3ZCLGVBQUcsTUFBTSxLQUFLLE9BQU8sTUFBTTtBQUFBLFVBQzdCLE9BQU87QUFDTCxnQkFBSSxPQUFPLHVCQUF1QixJQUFJLEtBQUssTUFBTTtBQUNqRCxnQkFBSSxTQUFTLFFBQVc7QUFDdEIscUJBQU8sb0JBQUksSUFBSTtBQUNmLHFDQUF1QixJQUFJLEtBQUssUUFBUSxJQUFJO0FBQUEsWUFDOUM7QUFDQSxrQkFBTSxRQUFRLElBQUksUUFBUSxFQUFFO0FBQzVCLGlCQUFLLElBQUksS0FBSztBQUNkLGlCQUFLO0FBQUEsY0FDSCxHQUFHO0FBQUEsY0FDSCxXQUFXLEtBQUs7QUFBQSxZQUNsQjtBQUFBLFVBQ0Y7QUFHQSxpQkFBTyxpQkFBaUIsZUFBZSxHQUFHLFFBQVEsZ0JBQWdCLEtBQUssUUFBUSxDQUFDLENBQUM7QUFBQSxRQUNuRjtBQUFBLFFBRUEsQ0FBQyxTQUFTLFFBQVEsTUFBTSxFQUFHLE9BQU8sU0FBUztBQXp4QjdDO0FBMHhCSSxjQUFJLFFBQVEsVUFBVSxNQUFNO0FBQzFCLG9CQUFRLFFBQVE7QUFBQSxVQUNsQjtBQUVBLHdCQUFRLFdBQVIsb0JBQVEsU0FBVztBQUVuQixnQkFBTSxhQUFhO0FBQUEsWUFDakIsUUFBUSxLQUFLO0FBQUEsWUFDYixLQUFLLEtBQUs7QUFBQSxZQUNWLFNBQVMsS0FBSztBQUFBLFlBQ2QsYUFBYSxLQUFLO0FBQUEsWUFDbEIsVUFBVSxLQUFLO0FBQUEsWUFDZixnQkFBZ0IsS0FBSztBQUFBLFlBQ3JCLE1BQU0sS0FBSztBQUFBLFlBQ1gsYUFBYSxLQUFLO0FBQUEsWUFDbEIsT0FBTyxLQUFLO0FBQUEsWUFDWixVQUFVLEtBQUs7QUFBQSxZQUNmLFdBQVcsS0FBSztBQUFBLFlBQ2hCLFdBQVcsS0FBSztBQUFBLFlBQ2hCLG9CQUFvQixLQUFLO0FBQUEsWUFDekIscUJBQXFCLEtBQUs7QUFBQSxZQUMxQixRQUFRLEtBQUs7QUFBQSxVQUNmO0FBRUEsaUJBQU8sV0FBVyxTQUFTLGtCQUFrQixTQUFTLFVBQVUsQ0FBQztBQUFBLFFBQ25FO0FBQUEsTUFDRjtBQUVBLGdCQUFVLE9BQU87QUFHakIsZUFBUyxZQUFhLE1BQU07QUF6ekI1QjtBQTB6QkUsZUFBTztBQUFBLFVBQ0wsU0FBUSxVQUFLLFdBQUwsWUFBZTtBQUFBLFVBQ3ZCLGdCQUFlLFVBQUssa0JBQUwsWUFBc0I7QUFBQSxVQUNyQyxnQkFBZSxVQUFLLGtCQUFMLFlBQXNCO0FBQUEsVUFDckMsT0FBTSxVQUFLLFNBQUwsWUFBYTtBQUFBLFVBQ25CLFNBQVEsVUFBSyxXQUFMLFlBQWU7QUFBQSxVQUN2QixpQkFBZ0IsVUFBSyxtQkFBTCxZQUF1QjtBQUFBLFVBQ3ZDLG1CQUFrQixVQUFLLHFCQUFMLFlBQXlCO0FBQUEsVUFDM0MsU0FBUSxVQUFLLFdBQUwsWUFBZTtBQUFBLFVBQ3ZCLFlBQVcsVUFBSyxjQUFMLFlBQWtCO0FBQUEsVUFDN0IsaUJBQWdCLFVBQUssbUJBQUwsWUFBdUI7QUFBQSxVQUN2QyxZQUFXLFVBQUssY0FBTCxZQUFrQjtBQUFBLFVBQzdCLGNBQWEsVUFBSyxnQkFBTCxZQUFvQjtBQUFBLFVBQ2pDLFdBQVUsVUFBSyxhQUFMLFlBQWlCO0FBQUEsVUFDM0IsU0FBUSxVQUFLLFdBQUwsWUFBZTtBQUFBLFVBQ3ZCLGtCQUFpQixVQUFLLG9CQUFMLFlBQXdCO0FBQUEsVUFDekMsV0FBVSxVQUFLLGFBQUwsWUFBaUI7QUFBQSxVQUMzQixpQkFBZ0IsVUFBSyxtQkFBTCxZQUF1QjtBQUFBLFVBQ3ZDLE9BQU0sVUFBSyxTQUFMLFlBQWE7QUFBQSxVQUNuQix1QkFBc0IsVUFBSyx5QkFBTCxZQUE2QjtBQUFBLFVBQ25ELGNBQWEsVUFBSyxnQkFBTCxZQUFvQjtBQUFBLFVBQ2pDLGlCQUFnQixVQUFLLG1CQUFMLFlBQXVCO0FBQUEsVUFDdkMsUUFBTyxVQUFLLFVBQUwsWUFBYztBQUFBLFVBQ3JCLFdBQVUsVUFBSyxhQUFMLFlBQWlCO0FBQUEsVUFDM0IsWUFBVyxVQUFLLGNBQUwsWUFBa0I7QUFBQSxVQUM3Qiw4QkFBNkIsVUFBSyxnQ0FBTCxZQUFvQztBQUFBLFVBQ2pFLGlCQUFnQixVQUFLLG1CQUFMLFlBQXVCO0FBQUEsVUFDdkMsbUJBQWtCLFVBQUsscUJBQUwsWUFBeUI7QUFBQSxVQUMzQyxvQkFBbUIsVUFBSyxzQkFBTCxZQUEwQjtBQUFBLFVBQzdDLGlCQUFnQixVQUFLLG1CQUFMLFlBQXVCO0FBQUEsVUFDdkMsZ0JBQWUsVUFBSyxrQkFBTCxZQUFzQjtBQUFBLFVBQ3JDLGdCQUFlLFVBQUssa0JBQUwsWUFBc0I7QUFBQSxVQUNyQyxtQkFBa0IsVUFBSyxxQkFBTCxZQUF5QjtBQUFBLFVBQzNDLCtDQUE4QyxVQUFLLGlEQUFMLFlBQXFEO0FBQUEsVUFDbkcsT0FBTSxVQUFLLFNBQUwsWUFBYTtBQUFBLFVBQ25CLG9CQUFtQixVQUFLLHNCQUFMLFlBQTBCO0FBQUEsVUFDN0MsU0FBUyxLQUFLO0FBQUEsVUFDZCxLQUFLLEtBQUssUUFBUSxDQUFDO0FBQUEsVUFDbkIsYUFBYSxLQUFLLGNBQ2QsSUFBSSxZQUFZLEtBQUssV0FBVyxJQUNoQyxJQUFJLFlBQVk7QUFBQSxRQUN0QjtBQUFBLE1BQ0Y7QUFHQSxlQUFTLGFBQWMsU0FBUztBQUk5QixjQUFNLGFBQWEsWUFBWSxpQ0FBSyxVQUFMLEVBQWMsTUFBTSxLQUFLLEVBQUM7QUFJekQsWUFBSSxRQUFRLFFBQVEsTUFBTTtBQUN4QixxQkFBVyxPQUFPLFVBQVUsWUFBWSxRQUFRLElBQUk7QUFBQSxRQUN0RDtBQUdBLGVBQU87QUFBQSxNQUNUO0FBU0EsZUFBUyxpQkFBa0IsY0FBYyxRQUFRLE9BQU87QUFDdEQsY0FBTSxVQUFVLElBQUksUUFBUSxVQUFVO0FBQ3RDLGdCQUFRLE1BQU0sSUFBSTtBQUNsQixnQkFBUSxPQUFPLElBQUk7QUFDbkIsZ0JBQVEsUUFBUSxJQUFJLElBQUlBLFNBQVEsVUFBVTtBQUMxQyx1QkFBZSxRQUFRLFFBQVEsR0FBRyxhQUFhLFdBQVc7QUFDMUQsd0JBQWdCLFFBQVEsUUFBUSxHQUFHLEtBQUs7QUFDeEMsZUFBTztBQUFBLE1BQ1Q7QUFFQSxhQUFPLGlCQUFpQixRQUFRLFdBQVc7QUFBQSxRQUN6QyxRQUFRO0FBQUEsUUFDUixLQUFLO0FBQUEsUUFDTCxTQUFTO0FBQUEsUUFDVCxVQUFVO0FBQUEsUUFDVixPQUFPO0FBQUEsUUFDUCxRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixhQUFhO0FBQUEsUUFDYixNQUFNO0FBQUEsUUFDTixVQUFVO0FBQUEsUUFDVixxQkFBcUI7QUFBQSxRQUNyQixvQkFBb0I7QUFBQSxRQUNwQixXQUFXO0FBQUEsUUFDWCxXQUFXO0FBQUEsUUFDWCxPQUFPO0FBQUEsUUFDUCxhQUFhO0FBQUEsUUFDYixXQUFXO0FBQUEsUUFDWCxnQkFBZ0I7QUFBQSxRQUNoQixVQUFVO0FBQUEsUUFDVixNQUFNO0FBQUEsUUFDTixDQUFDLE9BQU8sV0FBVyxHQUFHO0FBQUEsVUFDcEIsT0FBTztBQUFBLFVBQ1AsY0FBYztBQUFBLFFBQ2hCO0FBQUEsTUFDRixDQUFDO0FBRUQsYUFBTyxXQUFXLFVBQVUsT0FBTztBQUFBLFFBQ2pDO0FBQUEsTUFDRjtBQUdBLGFBQU8sV0FBVyxjQUFjLFNBQVUsR0FBRyxRQUFRLFVBQVU7QUFDN0QsWUFBSSxPQUFPLE1BQU0sVUFBVTtBQUN6QixpQkFBTyxPQUFPLFdBQVcsVUFBVSxHQUFHLFFBQVEsUUFBUTtBQUFBLFFBQ3hEO0FBRUEsWUFBSSxhQUFhLFNBQVM7QUFDeEIsaUJBQU8sT0FBTyxXQUFXLFFBQVEsR0FBRyxRQUFRLFFBQVE7QUFBQSxRQUN0RDtBQUVBLGVBQU8sT0FBTyxXQUFXLFVBQVUsR0FBRyxRQUFRLFFBQVE7QUFBQSxNQUN4RDtBQUVBLGFBQU8sV0FBVyxjQUFjLE9BQU87QUFBQSxRQUNyQztBQUFBLE1BQ0Y7QUFHQSxhQUFPLFdBQVcsY0FBYyxPQUFPLG9CQUFvQjtBQUFBLFFBQ3pEO0FBQUEsVUFDRSxLQUFLO0FBQUEsVUFDTCxXQUFXLE9BQU8sV0FBVztBQUFBLFFBQy9CO0FBQUEsUUFDQTtBQUFBLFVBQ0UsS0FBSztBQUFBLFVBQ0wsV0FBVyxPQUFPLFdBQVc7QUFBQSxRQUMvQjtBQUFBLFFBQ0E7QUFBQSxVQUNFLEtBQUs7QUFBQSxVQUNMLFdBQVcsT0FBTztBQUFBLFlBQ2hCLE9BQU8sV0FBVztBQUFBLFVBQ3BCO0FBQUEsUUFDRjtBQUFBLFFBQ0E7QUFBQSxVQUNFLEtBQUs7QUFBQSxVQUNMLFdBQVcsT0FBTyxXQUFXO0FBQUEsUUFDL0I7QUFBQSxRQUNBO0FBQUEsVUFDRSxLQUFLO0FBQUEsVUFDTCxXQUFXLE9BQU8sV0FBVztBQUFBO0FBQUEsVUFFN0IsZUFBZTtBQUFBLFFBQ2pCO0FBQUEsUUFDQTtBQUFBLFVBQ0UsS0FBSztBQUFBLFVBQ0wsV0FBVyxPQUFPLFdBQVc7QUFBQTtBQUFBLFVBRTdCLGVBQWU7QUFBQSxRQUNqQjtBQUFBLFFBQ0E7QUFBQSxVQUNFLEtBQUs7QUFBQSxVQUNMLFdBQVcsT0FBTyxXQUFXO0FBQUE7QUFBQSxVQUU3QixlQUFlO0FBQUEsUUFDakI7QUFBQSxRQUNBO0FBQUEsVUFDRSxLQUFLO0FBQUEsVUFDTCxXQUFXLE9BQU8sV0FBVztBQUFBO0FBQUEsVUFFN0IsZUFBZTtBQUFBLFFBQ2pCO0FBQUEsUUFDQTtBQUFBLFVBQ0UsS0FBSztBQUFBLFVBQ0wsV0FBVyxPQUFPLFdBQVc7QUFBQTtBQUFBLFVBRTdCLGVBQWU7QUFBQSxRQUNqQjtBQUFBLFFBQ0E7QUFBQSxVQUNFLEtBQUs7QUFBQSxVQUNMLFdBQVcsT0FBTyxXQUFXO0FBQUEsUUFDL0I7QUFBQSxRQUNBO0FBQUEsVUFDRSxLQUFLO0FBQUEsVUFDTCxXQUFXLE9BQU8sV0FBVztBQUFBLFFBQy9CO0FBQUEsUUFDQTtBQUFBLFVBQ0UsS0FBSztBQUFBLFVBQ0wsV0FBVyxPQUFPO0FBQUEsWUFDaEIsQ0FBQyxXQUFXLE9BQU8sV0FBVztBQUFBLGNBQzVCO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBLEVBQUUsUUFBUSxNQUFNO0FBQUEsWUFDbEI7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLFFBQ0E7QUFBQSxVQUNFLEtBQUs7QUFBQSxVQUNMLFdBQVcsT0FBTyxXQUFXO0FBQUEsUUFDL0I7QUFBQSxRQUNBO0FBQUEsVUFDRSxLQUFLO0FBQUEsVUFDTCxXQUFXLE9BQU8sV0FBVztBQUFBLFVBQzdCLGVBQWU7QUFBQSxRQUNqQjtBQUFBLFFBQ0E7QUFBQSxVQUNFLEtBQUs7QUFBQTtBQUFBLFVBQ0wsV0FBVyxPQUFPLFdBQVc7QUFBQSxRQUMvQjtBQUFBLE1BQ0YsQ0FBQztBQUVELGFBQU8sVUFBVSxFQUFFLFNBQVMsYUFBYSxrQkFBa0IsYUFBYTtBQUFBO0FBQUE7OztBQzVnQ3hFO0FBQUE7QUFBQTtBQUlBLFVBQU07QUFBQSxRQUNKO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsSUFBSTtBQUNKLFVBQU0sRUFBRSxZQUFZLElBQUk7QUFDeEIsVUFBTSxFQUFFLFNBQVMsYUFBYSxJQUFJO0FBQ2xDLFVBQU0sT0FBTyxVQUFRLE1BQVc7QUFDaEMsVUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsSUFBSTtBQUNKLFVBQU0sRUFBRSxRQUFRLFlBQVksSUFBSTtBQUNoQyxVQUFNLFNBQVMsVUFBUSxRQUFhO0FBQ3BDLFVBQU0sRUFBRSxtQkFBbUIsWUFBWSxJQUFJO0FBQzNDLFVBQU07QUFBQSxRQUNKO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsSUFBSTtBQUNKLFVBQU0sS0FBSyxVQUFRLFFBQWE7QUFDaEMsVUFBTSxFQUFFLFVBQVUsVUFBVSxTQUFTLElBQUksVUFBUSxRQUFhO0FBQzlELFVBQU0sRUFBRSxrQkFBa0IsV0FBVyxZQUFZLDZCQUE2QixJQUFJO0FBQ2xGLFVBQU0sRUFBRSxrQkFBa0Isb0JBQW9CLDBCQUEwQixJQUFJO0FBQzVFLFVBQU0sRUFBRSxvQkFBb0IsSUFBSTtBQUNoQyxVQUFNLEVBQUUsT0FBTyxJQUFJO0FBQ25CLFVBQU0sRUFBRSxhQUFhLElBQUksVUFBUSxNQUFXO0FBQzVDLFVBQU0sY0FBYyxDQUFDLE9BQU8sTUFBTTtBQUVsQyxVQUFNLG1CQUFtQixPQUFPLHVCQUF1QixlQUFlLE9BQU8scUJBQXFCLGNBQzlGLFNBQ0E7QUFHSixVQUFJO0FBRUosVUFBTSxRQUFOLGNBQW9CLEdBQUc7QUFBQSxRQUNyQixZQUFhLFlBQVk7QUFDdkIsZ0JBQU07QUFFTixlQUFLLGFBQWE7QUFDbEIsZUFBSyxhQUFhO0FBQ2xCLGVBQUssT0FBTztBQUNaLGVBQUssUUFBUTtBQUFBLFFBQ2Y7QUFBQSxRQUVBLFVBQVcsUUFBUTtBQXJGckI7QUFzRkksY0FBSSxLQUFLLFVBQVUsV0FBVztBQUM1QjtBQUFBLFVBQ0Y7QUFFQSxlQUFLLFFBQVE7QUFDYixxQkFBSyxlQUFMLG1CQUFpQixRQUFRO0FBQ3pCLGVBQUssS0FBSyxjQUFjLE1BQU07QUFBQSxRQUNoQztBQUFBO0FBQUEsUUFHQSxNQUFPLE9BQU87QUFoR2hCO0FBaUdJLGNBQUksS0FBSyxVQUFVLFdBQVc7QUFDNUI7QUFBQSxVQUNGO0FBR0EsZUFBSyxRQUFRO0FBSWIsY0FBSSxDQUFDLE9BQU87QUFDVixvQkFBUSxJQUFJLGFBQWEsOEJBQThCLFlBQVk7QUFBQSxVQUNyRTtBQU9BLGVBQUssd0JBQXdCO0FBRTdCLHFCQUFLLGVBQUwsbUJBQWlCLFFBQVE7QUFDekIsZUFBSyxLQUFLLGNBQWMsS0FBSztBQUFBLFFBQy9CO0FBQUEsTUFDRjtBQUVBLGVBQVMsZ0JBQWlCLFVBQVU7QUFDbEMsZ0NBQXdCLFVBQVUsT0FBTztBQUFBLE1BQzNDO0FBR0EsZUFBUyxNQUFPLE9BQU8sT0FBTyxRQUFXO0FBL0h6QztBQWdJRSxlQUFPLG9CQUFvQixXQUFXLEdBQUcsa0JBQWtCO0FBRzNELFlBQUksSUFBSSxzQkFBc0I7QUFLOUIsWUFBSTtBQUVKLFlBQUk7QUFDRiwwQkFBZ0IsSUFBSSxRQUFRLE9BQU8sSUFBSTtBQUFBLFFBQ3pDLFNBQVMsR0FBRztBQUNWLFlBQUUsT0FBTyxDQUFDO0FBQ1YsaUJBQU8sRUFBRTtBQUFBLFFBQ1g7QUFHQSxjQUFNLFVBQVUsY0FBYyxNQUFNO0FBR3BDLFlBQUksY0FBYyxPQUFPLFNBQVM7QUFHaEMscUJBQVcsR0FBRyxTQUFTLE1BQU0sY0FBYyxPQUFPLE1BQU07QUFHeEQsaUJBQU8sRUFBRTtBQUFBLFFBQ1g7QUFHQSxjQUFNLGVBQWUsUUFBUSxPQUFPO0FBSXBDLGNBQUksa0RBQWMsZ0JBQWQsbUJBQTJCLFVBQVMsNEJBQTRCO0FBQ2xFLGtCQUFRLGlCQUFpQjtBQUFBLFFBQzNCO0FBR0EsWUFBSSxpQkFBaUI7QUFLckIsWUFBSSxpQkFBaUI7QUFHckIsWUFBSSxhQUFhO0FBR2pCO0FBQUEsVUFDRSxjQUFjO0FBQUEsVUFDZCxNQUFNO0FBRUosNkJBQWlCO0FBR2pCLG1CQUFPLGNBQWMsSUFBSTtBQUd6Qix1QkFBVyxNQUFNLGNBQWMsT0FBTyxNQUFNO0FBRTVDLGtCQUFNLGVBQWUsaURBQWdCO0FBSXJDLHVCQUFXLEdBQUcsU0FBUyxjQUFjLGNBQWMsT0FBTyxNQUFNO0FBQUEsVUFDbEU7QUFBQSxRQUNGO0FBVUEsY0FBTSxrQkFBa0IsQ0FBQyxhQUFhO0FBRXBDLGNBQUksZ0JBQWdCO0FBQ2xCO0FBQUEsVUFDRjtBQUdBLGNBQUksU0FBUyxTQUFTO0FBUXBCLHVCQUFXLEdBQUcsU0FBUyxnQkFBZ0IsV0FBVyxxQkFBcUI7QUFDdkU7QUFBQSxVQUNGO0FBSUEsY0FBSSxTQUFTLFNBQVMsU0FBUztBQUM3QixjQUFFLE9BQU8sSUFBSSxVQUFVLGdCQUFnQixFQUFFLE9BQU8sU0FBUyxNQUFNLENBQUMsQ0FBQztBQUNqRTtBQUFBLFVBQ0Y7QUFJQSwyQkFBaUIsSUFBSSxRQUFRLGtCQUFrQixVQUFVLFdBQVcsQ0FBQztBQUdyRSxZQUFFLFFBQVEsZUFBZSxNQUFNLENBQUM7QUFDaEMsY0FBSTtBQUFBLFFBQ047QUFFQSxxQkFBYSxTQUFTO0FBQUEsVUFDcEI7QUFBQSxVQUNBLDBCQUEwQjtBQUFBLFVBQzFCO0FBQUEsVUFDQSxZQUFZLGNBQWMsV0FBVztBQUFBO0FBQUEsUUFDdkMsQ0FBQztBQUdELGVBQU8sRUFBRTtBQUFBLE1BQ1g7QUFHQSxlQUFTLHdCQUF5QixVQUFVLGdCQUFnQixTQUFTO0FBOVByRTtBQWdRRSxZQUFJLFNBQVMsU0FBUyxXQUFXLFNBQVMsU0FBUztBQUNqRDtBQUFBLFFBQ0Y7QUFHQSxZQUFJLEdBQUMsY0FBUyxZQUFULG1CQUFrQixTQUFRO0FBQzdCO0FBQUEsUUFDRjtBQUdBLGNBQU0sY0FBYyxTQUFTLFFBQVEsQ0FBQztBQUd0QyxZQUFJLGFBQWEsU0FBUztBQUcxQixZQUFJLGFBQWEsU0FBUztBQUcxQixZQUFJLENBQUMscUJBQXFCLFdBQVcsR0FBRztBQUN0QztBQUFBLFFBQ0Y7QUFHQSxZQUFJLGVBQWUsTUFBTTtBQUN2QjtBQUFBLFFBQ0Y7QUFHQSxZQUFJLENBQUMsU0FBUyxtQkFBbUI7QUFFL0IsdUJBQWEsdUJBQXVCO0FBQUEsWUFDbEMsV0FBVyxXQUFXO0FBQUEsVUFDeEIsQ0FBQztBQUdELHVCQUFhO0FBQUEsUUFDZjtBQU9BLG1CQUFXLFVBQVUsMkJBQTJCO0FBR2hELGlCQUFTLGFBQWE7QUFJdEI7QUFBQSxVQUNFO0FBQUEsVUFDQSxZQUFZO0FBQUEsVUFDWjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFHQSxVQUFNLHFCQUFxQixZQUFZO0FBR3ZDLGVBQVMsV0FBWSxHQUFHLFNBQVMsZ0JBQWdCLE9BQU87QUFoVXhEO0FBa1VFLFlBQUksR0FBRztBQUVMLFlBQUUsT0FBTyxLQUFLO0FBQUEsUUFDaEI7QUFJQSxZQUFJLFFBQVEsUUFBUSxRQUFRLFlBQVcsYUFBUSxTQUFSLG1CQUFjLE1BQU0sR0FBRztBQUM1RCxrQkFBUSxLQUFLLE9BQU8sT0FBTyxLQUFLLEVBQUUsTUFBTSxDQUFDLFFBQVE7QUFDL0MsZ0JBQUksSUFBSSxTQUFTLHFCQUFxQjtBQUVwQztBQUFBLFlBQ0Y7QUFDQSxrQkFBTTtBQUFBLFVBQ1IsQ0FBQztBQUFBLFFBQ0g7QUFHQSxZQUFJLGtCQUFrQixNQUFNO0FBQzFCO0FBQUEsUUFDRjtBQUdBLGNBQU0sV0FBVyxlQUFlLE1BQU07QUFJdEMsWUFBSSxTQUFTLFFBQVEsUUFBUSxZQUFXLGNBQVMsU0FBVCxtQkFBZSxNQUFNLEdBQUc7QUFDOUQsbUJBQVMsS0FBSyxPQUFPLE9BQU8sS0FBSyxFQUFFLE1BQU0sQ0FBQyxRQUFRO0FBQ2hELGdCQUFJLElBQUksU0FBUyxxQkFBcUI7QUFFcEM7QUFBQSxZQUNGO0FBQ0Esa0JBQU07QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUdBLGVBQVMsU0FBVTtBQUFBLFFBQ2pCO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLFFBQ25CLGFBQWEsb0JBQW9CO0FBQUE7QUFBQSxNQUNuQyxHQUFHO0FBbFhIO0FBb1hFLGVBQU8sVUFBVTtBQUdqQixZQUFJLGtCQUFrQjtBQUd0QixZQUFJLGdDQUFnQztBQUdwQyxZQUFJLFFBQVEsVUFBVSxNQUFNO0FBRTFCLDRCQUFrQixRQUFRLE9BQU87QUFJakMsMENBQ0UsUUFBUSxPQUFPO0FBQUEsUUFDbkI7QUFTQSxjQUFNLGNBQWMsMkJBQTJCLDZCQUE2QjtBQUM1RSxjQUFNLGFBQWEsdUJBQXVCO0FBQUEsVUFDeEMsV0FBVztBQUFBLFFBQ2IsQ0FBQztBQVlELGNBQU0sY0FBYztBQUFBLFVBQ2xCLFlBQVksSUFBSSxNQUFNLFVBQVU7QUFBQSxVQUNoQztBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRjtBQU1BLGVBQU8sQ0FBQyxRQUFRLFFBQVEsUUFBUSxLQUFLLE1BQU07QUFLM0MsWUFBSSxRQUFRLFdBQVcsVUFBVTtBQUUvQixrQkFBUSxXQUNOLHlCQUFRLFdBQVIsbUJBQWdCLGlCQUFoQixtQkFBOEIsZ0JBQTlCLG1CQUEyQyxVQUFTLFdBQ2hELFFBQVEsU0FDUjtBQUFBLFFBQ1I7QUFJQSxZQUFJLFFBQVEsV0FBVyxVQUFVO0FBQy9CLGtCQUFRLFNBQVMsUUFBUSxPQUFPO0FBQUEsUUFDbEM7QUFNQSxZQUFJLFFBQVEsb0JBQW9CLFVBQVU7QUFHeEMsY0FBSSxRQUFRLFVBQVUsTUFBTTtBQUMxQixvQkFBUSxrQkFBa0I7QUFBQSxjQUN4QixRQUFRLE9BQU87QUFBQSxZQUNqQjtBQUFBLFVBQ0YsT0FBTztBQUdMLG9CQUFRLGtCQUFrQixvQkFBb0I7QUFBQSxVQUNoRDtBQUFBLFFBQ0Y7QUFHQSxZQUFJLENBQUMsUUFBUSxZQUFZLFNBQVMsVUFBVSxJQUFJLEdBQUc7QUFFakQsZ0JBQU0sUUFBUTtBQWVkLGtCQUFRLFlBQVksT0FBTyxVQUFVLE9BQU8sSUFBSTtBQUFBLFFBQ2xEO0FBS0EsWUFBSSxDQUFDLFFBQVEsWUFBWSxTQUFTLG1CQUFtQixJQUFJLEdBQUc7QUFDMUQsa0JBQVEsWUFBWSxPQUFPLG1CQUFtQixLQUFLLElBQUk7QUFBQSxRQUN6RDtBQUtBLFlBQUksUUFBUSxhQUFhLE1BQU07QUFBQSxRQUUvQjtBQUdBLFlBQUksZUFBZSxJQUFJLFFBQVEsV0FBVyxHQUFHO0FBQUEsUUFFN0M7QUFHQSxrQkFBVSxXQUFXLEVBQ2xCLE1BQU0sU0FBTztBQUNaLHNCQUFZLFdBQVcsVUFBVSxHQUFHO0FBQUEsUUFDdEMsQ0FBQztBQUdILGVBQU8sWUFBWTtBQUFBLE1BQ3JCO0FBR0EsZUFBZSxVQUFXLGFBQWEsWUFBWSxPQUFPO0FBQUE7QUFFeEQsZ0JBQU0sVUFBVSxZQUFZO0FBRzVCLGNBQUksV0FBVztBQUlmLGNBQUksUUFBUSxpQkFBaUIsQ0FBQyxXQUFXLGtCQUFrQixPQUFPLENBQUMsR0FBRztBQUNwRSx1QkFBVyxpQkFBaUIsaUJBQWlCO0FBQUEsVUFDL0M7QUFNQSx3REFBOEMsT0FBTztBQUtyRCxjQUFJLGVBQWUsT0FBTyxNQUFNLFdBQVc7QUFDekMsdUJBQVcsaUJBQWlCLFVBQVU7QUFBQSxVQUN4QztBQU1BLGNBQUksUUFBUSxtQkFBbUIsSUFBSTtBQUNqQyxvQkFBUSxpQkFBaUIsUUFBUSxnQkFBZ0I7QUFBQSxVQUNuRDtBQUlBLGNBQUksUUFBUSxhQUFhLGVBQWU7QUFDdEMsb0JBQVEsV0FBVywwQkFBMEIsT0FBTztBQUFBLFVBQ3REO0FBaUJBLGNBQUksYUFBYSxNQUFNO0FBQ3JCLHVCQUFXLE9BQU8sTUFBWTtBQUM1QixvQkFBTSxhQUFhLGtCQUFrQixPQUFPO0FBRTVDO0FBQUE7QUFBQTtBQUFBLGdCQUdHLFdBQVcsWUFBWSxRQUFRLEdBQUcsS0FBSyxRQUFRLHFCQUFxQjtBQUFBLGdCQUVwRSxXQUFXLGFBQWE7QUFBQSxpQkFFeEIsUUFBUSxTQUFTLGNBQWMsUUFBUSxTQUFTO0FBQUEsZ0JBQ2pEO0FBRUEsd0JBQVEsbUJBQW1CO0FBRzNCLHVCQUFPLE1BQU0sWUFBWSxXQUFXO0FBQUEsY0FDdEM7QUFHQSxrQkFBSSxRQUFRLFNBQVMsZUFBZTtBQUVsQyx1QkFBTyxpQkFBaUIsc0NBQXNDO0FBQUEsY0FDaEU7QUFHQSxrQkFBSSxRQUFRLFNBQVMsV0FBVztBQUc5QixvQkFBSSxRQUFRLGFBQWEsVUFBVTtBQUNqQyx5QkFBTztBQUFBLG9CQUNMO0FBQUEsa0JBQ0Y7QUFBQSxnQkFDRjtBQUdBLHdCQUFRLG1CQUFtQjtBQUczQix1QkFBTyxNQUFNLFlBQVksV0FBVztBQUFBLGNBQ3RDO0FBR0Esa0JBQUksQ0FBQyxxQkFBcUIsa0JBQWtCLE9BQU8sQ0FBQyxHQUFHO0FBRXJELHVCQUFPLGlCQUFpQixxQ0FBcUM7QUFBQSxjQUMvRDtBQWdCQSxzQkFBUSxtQkFBbUI7QUFHM0IscUJBQU8sTUFBTSxVQUFVLFdBQVc7QUFBQSxZQUNwQyxJQUFHO0FBQUEsVUFDTDtBQUdBLGNBQUksV0FBVztBQUNiLG1CQUFPO0FBQUEsVUFDVDtBQUlBLGNBQUksU0FBUyxXQUFXLEtBQUssQ0FBQyxTQUFTLGtCQUFrQjtBQUV2RCxnQkFBSSxRQUFRLHFCQUFxQixRQUFRO0FBQUEsWUFXekM7QUFJQSxnQkFBSSxRQUFRLHFCQUFxQixTQUFTO0FBQ3hDLHlCQUFXLGVBQWUsVUFBVSxPQUFPO0FBQUEsWUFDN0MsV0FBVyxRQUFRLHFCQUFxQixRQUFRO0FBQzlDLHlCQUFXLGVBQWUsVUFBVSxNQUFNO0FBQUEsWUFDNUMsV0FBVyxRQUFRLHFCQUFxQixVQUFVO0FBQ2hELHlCQUFXLGVBQWUsVUFBVSxRQUFRO0FBQUEsWUFDOUMsT0FBTztBQUNMLHFCQUFPLEtBQUs7QUFBQSxZQUNkO0FBQUEsVUFDRjtBQUlBLGNBQUksbUJBQ0YsU0FBUyxXQUFXLElBQUksV0FBVyxTQUFTO0FBSTlDLGNBQUksaUJBQWlCLFFBQVEsV0FBVyxHQUFHO0FBQ3pDLDZCQUFpQixRQUFRLEtBQUssR0FBRyxRQUFRLE9BQU87QUFBQSxVQUNsRDtBQUlBLGNBQUksQ0FBQyxRQUFRLG1CQUFtQjtBQUM5QixxQkFBUyxvQkFBb0I7QUFBQSxVQUMvQjtBQWNBLGNBQ0UsU0FBUyxTQUFTLFlBQ2xCLGlCQUFpQixXQUFXLE9BQzVCLGlCQUFpQixrQkFDakIsQ0FBQyxRQUFRLFFBQVEsU0FBUyxTQUFTLElBQUksR0FDdkM7QUFDQSx1QkFBVyxtQkFBbUIsaUJBQWlCO0FBQUEsVUFDakQ7QUFNQSxjQUNFLFNBQVMsV0FBVyxNQUNuQixRQUFRLFdBQVcsVUFDbEIsUUFBUSxXQUFXLGFBQ25CLGVBQWUsU0FBUyxpQkFBaUIsTUFBTSxJQUNqRDtBQUNBLDZCQUFpQixPQUFPO0FBQ3hCLHdCQUFZLFdBQVcsT0FBTztBQUFBLFVBQ2hDO0FBR0EsY0FBSSxRQUFRLFdBQVc7QUFHckIsa0JBQU0sbUJBQW1CLENBQUMsV0FDeEIsWUFBWSxhQUFhLGlCQUFpQixNQUFNLENBQUM7QUFJbkQsZ0JBQUksUUFBUSxxQkFBcUIsWUFBWSxTQUFTLFFBQVEsTUFBTTtBQUNsRSwrQkFBaUIsU0FBUyxLQUFLO0FBQy9CO0FBQUEsWUFDRjtBQUdBLGtCQUFNLGNBQWMsQ0FBQyxVQUFVO0FBRzdCLGtCQUFJLENBQUMsV0FBVyxPQUFPLFFBQVEsU0FBUyxHQUFHO0FBQ3pDLGlDQUFpQixvQkFBb0I7QUFDckM7QUFBQSxjQUNGO0FBR0EsdUJBQVMsT0FBTyxrQkFBa0IsS0FBSyxFQUFFLENBQUM7QUFHMUMsMEJBQVksYUFBYSxRQUFRO0FBQUEsWUFDbkM7QUFHQSxrQkFBTSxjQUFjLFNBQVMsTUFBTSxhQUFhLGdCQUFnQjtBQUFBLFVBQ2xFLE9BQU87QUFFTCx3QkFBWSxhQUFhLFFBQVE7QUFBQSxVQUNuQztBQUFBLFFBQ0Y7QUFBQTtBQUlBLGVBQVMsWUFBYSxhQUFhO0FBS2pDLFlBQUksWUFBWSxXQUFXLEtBQUssWUFBWSxRQUFRLGtCQUFrQixHQUFHO0FBQ3ZFLGlCQUFPLFFBQVEsUUFBUSw0QkFBNEIsV0FBVyxDQUFDO0FBQUEsUUFDakU7QUFHQSxjQUFNLEVBQUUsUUFBUSxJQUFJO0FBRXBCLGNBQU0sRUFBRSxVQUFVLE9BQU8sSUFBSSxrQkFBa0IsT0FBTztBQUd0RCxnQkFBUSxRQUFRO0FBQUEsVUFDZCxLQUFLLFVBQVU7QUFNYixtQkFBTyxRQUFRLFFBQVEsaUJBQWlCLCtCQUErQixDQUFDO0FBQUEsVUFDMUU7QUFBQSxVQUNBLEtBQUssU0FBUztBQUNaLGdCQUFJLENBQUMsa0JBQWtCO0FBQ3JCLGlDQUFtQixVQUFRLFFBQWEsRUFBRTtBQUFBLFlBQzVDO0FBR0Esa0JBQU0sZUFBZSxrQkFBa0IsT0FBTztBQUk5QyxnQkFBSSxhQUFhLE9BQU8sV0FBVyxHQUFHO0FBQ3BDLHFCQUFPLFFBQVEsUUFBUSxpQkFBaUIsaURBQWlELENBQUM7QUFBQSxZQUM1RjtBQUVBLGtCQUFNLE9BQU8saUJBQWlCLGFBQWEsU0FBUyxDQUFDO0FBSXJELGdCQUFJLFFBQVEsV0FBVyxTQUFTLENBQUMsV0FBVyxJQUFJLEdBQUc7QUFDakQscUJBQU8sUUFBUSxRQUFRLGlCQUFpQixnQkFBZ0IsQ0FBQztBQUFBLFlBQzNEO0FBTUEsa0JBQU0sV0FBVyxhQUFhO0FBRzlCLGtCQUFNLGFBQWEsS0FBSztBQUd4QixrQkFBTSx1QkFBdUIsaUJBQWlCLEdBQUcsVUFBVSxFQUFFO0FBRzdELGtCQUFNLE9BQU8sS0FBSztBQUlsQixnQkFBSSxDQUFDLFFBQVEsWUFBWSxTQUFTLFNBQVMsSUFBSSxHQUFHO0FBS2hELG9CQUFNLGVBQWUsWUFBWSxJQUFJO0FBR3JDLHVCQUFTLGFBQWE7QUFHdEIsdUJBQVMsT0FBTyxhQUFhLENBQUM7QUFHOUIsdUJBQVMsWUFBWSxJQUFJLGtCQUFrQixzQkFBc0IsSUFBSTtBQUNyRSx1QkFBUyxZQUFZLElBQUksZ0JBQWdCLE1BQU0sSUFBSTtBQUFBLFlBQ3JELE9BQU87QUFFTCx1QkFBUyxpQkFBaUI7QUFHMUIsb0JBQU0sY0FBYyxRQUFRLFlBQVksSUFBSSxTQUFTLElBQUk7QUFHekQsb0JBQU0sYUFBYSx1QkFBdUIsYUFBYSxJQUFJO0FBRzNELGtCQUFJLGVBQWUsV0FBVztBQUM1Qix1QkFBTyxRQUFRLFFBQVEsaUJBQWlCLDhCQUE4QixDQUFDO0FBQUEsY0FDekU7QUFHQSxrQkFBSSxFQUFFLGlCQUFpQixZQUFZLGVBQWUsU0FBUyxJQUFJO0FBSS9ELGtCQUFJLGVBQWUsTUFBTTtBQUV2Qiw2QkFBYSxhQUFhO0FBRzFCLDJCQUFXLGFBQWEsV0FBVztBQUFBLGNBQ3JDLE9BQU87QUFFTCxvQkFBSSxjQUFjLFlBQVk7QUFDNUIseUJBQU8sUUFBUSxRQUFRLGlCQUFpQiw4Q0FBK0MsQ0FBQztBQUFBLGdCQUMxRjtBQUlBLG9CQUFJLGFBQWEsUUFBUSxZQUFZLFlBQVk7QUFDL0MsNkJBQVcsYUFBYTtBQUFBLGdCQUMxQjtBQUFBLGNBQ0Y7QUFJQSxvQkFBTSxhQUFhLEtBQUssTUFBTSxZQUFZLFVBQVUsSUFBSTtBQUl4RCxvQkFBTSxxQkFBcUIsWUFBWSxVQUFVO0FBR2pELHVCQUFTLE9BQU8sbUJBQW1CLENBQUM7QUFHcEMsb0JBQU0seUJBQXlCLGlCQUFpQixHQUFHLFdBQVcsSUFBSSxFQUFFO0FBSXBFLG9CQUFNLGVBQWUsa0JBQWtCLFlBQVksVUFBVSxVQUFVO0FBR3ZFLHVCQUFTLFNBQVM7QUFHbEIsdUJBQVMsYUFBYTtBQUl0Qix1QkFBUyxZQUFZLElBQUksa0JBQWtCLHdCQUF3QixJQUFJO0FBQ3ZFLHVCQUFTLFlBQVksSUFBSSxnQkFBZ0IsTUFBTSxJQUFJO0FBQ25ELHVCQUFTLFlBQVksSUFBSSxpQkFBaUIsY0FBYyxJQUFJO0FBQUEsWUFDOUQ7QUFHQSxtQkFBTyxRQUFRLFFBQVEsUUFBUTtBQUFBLFVBQ2pDO0FBQUEsVUFDQSxLQUFLLFNBQVM7QUFHWixrQkFBTSxhQUFhLGtCQUFrQixPQUFPO0FBQzVDLGtCQUFNLGdCQUFnQixpQkFBaUIsVUFBVTtBQUlqRCxnQkFBSSxrQkFBa0IsV0FBVztBQUMvQixxQkFBTyxRQUFRLFFBQVEsaUJBQWlCLDhCQUE4QixDQUFDO0FBQUEsWUFDekU7QUFHQSxrQkFBTSxXQUFXLG1CQUFtQixjQUFjLFFBQVE7QUFLMUQsbUJBQU8sUUFBUSxRQUFRLGFBQWE7QUFBQSxjQUNsQyxZQUFZO0FBQUEsY0FDWixhQUFhO0FBQUEsZ0JBQ1gsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixPQUFPLFNBQVMsQ0FBQztBQUFBLGNBQzVEO0FBQUEsY0FDQSxNQUFNLGtCQUFrQixjQUFjLElBQUksRUFBRSxDQUFDO0FBQUEsWUFDL0MsQ0FBQyxDQUFDO0FBQUEsVUFDSjtBQUFBLFVBQ0EsS0FBSyxTQUFTO0FBR1osbUJBQU8sUUFBUSxRQUFRLGlCQUFpQiwyQkFBMkIsQ0FBQztBQUFBLFVBQ3RFO0FBQUEsVUFDQSxLQUFLO0FBQUEsVUFDTCxLQUFLLFVBQVU7QUFHYixtQkFBTyxVQUFVLFdBQVcsRUFDekIsTUFBTSxDQUFDLFFBQVEsaUJBQWlCLEdBQUcsQ0FBQztBQUFBLFVBQ3pDO0FBQUEsVUFDQSxTQUFTO0FBQ1AsbUJBQU8sUUFBUSxRQUFRLGlCQUFpQixnQkFBZ0IsQ0FBQztBQUFBLFVBQzNEO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFHQSxlQUFTLGlCQUFrQixhQUFhLFVBQVU7QUFFaEQsb0JBQVksUUFBUSxPQUFPO0FBSzNCLFlBQUksWUFBWSx1QkFBdUIsTUFBTTtBQUMzQyx5QkFBZSxNQUFNLFlBQVksb0JBQW9CLFFBQVEsQ0FBQztBQUFBLFFBQ2hFO0FBQUEsTUFDRjtBQUdBLGVBQVMsWUFBYSxhQUFhLFVBQVU7QUFwOUI3QztBQXM5QkUsWUFBSSxhQUFhLFlBQVk7QUFRN0IsY0FBTSwyQkFBMkIsTUFBTTtBQUVyQyxnQkFBTSxnQkFBZ0IsS0FBSyxJQUFJO0FBSS9CLGNBQUksWUFBWSxRQUFRLGdCQUFnQixZQUFZO0FBQ2xELHdCQUFZLFdBQVcsaUJBQWlCO0FBQUEsVUFDMUM7QUFHQSxzQkFBWSxXQUFXLG9CQUFvQixNQUFNO0FBRS9DLGdCQUFJLFlBQVksUUFBUSxJQUFJLGFBQWEsVUFBVTtBQUNqRDtBQUFBLFlBQ0Y7QUFHQSx1QkFBVyxVQUFVO0FBR3JCLGdCQUFJLGFBQWEsU0FBUztBQUcxQixrQkFBTSxXQUFXLFNBQVM7QUFJMUIsZ0JBQUksQ0FBQyxTQUFTLG1CQUFtQjtBQUMvQiwyQkFBYSx1QkFBdUIsVUFBVTtBQUU5QywyQkFBYTtBQUFBLFlBQ2Y7QUFHQSxnQkFBSSxpQkFBaUI7QUFHckIsZ0JBQUksWUFBWSxRQUFRLFNBQVMsZUFBZSxDQUFDLFNBQVMseUJBQXlCO0FBRWpGLCtCQUFpQixTQUFTO0FBRzFCLG9CQUFNLFdBQVcsZ0JBQWdCLFNBQVMsV0FBVztBQUdyRCxrQkFBSSxhQUFhLFdBQVc7QUFDMUIseUJBQVMsY0FBYywwQkFBMEIsUUFBUTtBQUFBLGNBQzNEO0FBQUEsWUFDRjtBQUtBLGdCQUFJLFlBQVksUUFBUSxpQkFBaUIsTUFBTTtBQUU3QyxpQ0FBbUIsWUFBWSxZQUFZLFFBQVEsSUFBSSxNQUFNLFlBQVksUUFBUSxlQUFlLFlBQVksWUFBWSxVQUFVLGNBQWM7QUFBQSxZQUNsSjtBQUFBLFVBQ0Y7QUFHQSxnQkFBTSwrQkFBK0IsTUFBTTtBQUV6Qyx3QkFBWSxRQUFRLE9BQU87QUFJM0IsZ0JBQUksWUFBWSw0QkFBNEIsTUFBTTtBQUNoRCw2QkFBZSxNQUFNLFlBQVkseUJBQXlCLFFBQVEsQ0FBQztBQUFBLFlBQ3JFO0FBS0EsZ0JBQUksWUFBWSxRQUFRLGlCQUFpQixNQUFNO0FBQzdDLDBCQUFZLFdBQVcsa0JBQWtCO0FBQUEsWUFDM0M7QUFBQSxVQUNGO0FBR0EseUJBQWUsTUFBTSw2QkFBNkIsQ0FBQztBQUFBLFFBQ3JEO0FBSUEsWUFBSSxZQUFZLG1CQUFtQixNQUFNO0FBQ3ZDLHlCQUFlLE1BQU07QUFDbkIsd0JBQVksZ0JBQWdCLFFBQVE7QUFDcEMsd0JBQVksa0JBQWtCO0FBQUEsVUFDaEMsQ0FBQztBQUFBLFFBQ0g7QUFHQSxjQUFNLG1CQUFtQixTQUFTLFNBQVMsVUFBVSxZQUFZLGNBQVMscUJBQVQsWUFBNkI7QUFJOUYsWUFBSSxpQkFBaUIsUUFBUSxNQUFNO0FBQ2pDLG1DQUF5QjtBQUFBLFFBQzNCLE9BQU87QUFXTCxtQkFBUyxpQkFBaUIsS0FBSyxRQUFRLE1BQU07QUFDM0MscUNBQXlCO0FBQUEsVUFDM0IsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGO0FBR0EsZUFBZSxVQUFXLGFBQWE7QUFBQTtBQUVyQyxnQkFBTSxVQUFVLFlBQVk7QUFHNUIsY0FBSSxXQUFXO0FBR2YsY0FBSSxpQkFBaUI7QUFHckIsZ0JBQU0sYUFBYSxZQUFZO0FBRy9CLGNBQUksUUFBUSxtQkFBbUIsT0FBTztBQUFBLFVBRXRDO0FBR0EsY0FBSSxhQUFhLE1BQU07QUFNckIsZ0JBQUksUUFBUSxhQUFhLFVBQVU7QUFDakMsc0JBQVEsaUJBQWlCO0FBQUEsWUFDM0I7QUFJQSw2QkFBaUIsV0FBVyxNQUFNLHdCQUF3QixXQUFXO0FBSXJFLGdCQUNFLFFBQVEscUJBQXFCLFVBQzdCLFVBQVUsU0FBUyxRQUFRLE1BQU0sV0FDakM7QUFDQSxxQkFBTyxpQkFBaUIsY0FBYztBQUFBLFlBQ3hDO0FBSUEsZ0JBQUksU0FBUyxTQUFTLFFBQVEsTUFBTSxXQUFXO0FBQzdDLHNCQUFRLG9CQUFvQjtBQUFBLFlBQzlCO0FBQUEsVUFDRjtBQU1BLGVBQ0csUUFBUSxxQkFBcUIsWUFBWSxTQUFTLFNBQVMsYUFDNUQ7QUFBQSxZQUNFLFFBQVE7QUFBQSxZQUNSLFFBQVE7QUFBQSxZQUNSLFFBQVE7QUFBQSxZQUNSO0FBQUEsVUFDRixNQUFNLFdBQ047QUFDQSxtQkFBTyxpQkFBaUIsU0FBUztBQUFBLFVBQ25DO0FBR0EsY0FBSSxrQkFBa0IsSUFBSSxlQUFlLE1BQU0sR0FBRztBQUtoRCxnQkFBSSxRQUFRLGFBQWEsVUFBVTtBQUNqQywwQkFBWSxXQUFXLFdBQVcsUUFBUSxRQUFXLEtBQUs7QUFBQSxZQUM1RDtBQUdBLGdCQUFJLFFBQVEsYUFBYSxTQUFTO0FBRWhDLHlCQUFXLGlCQUFpQixxQkFBcUI7QUFBQSxZQUNuRCxXQUFXLFFBQVEsYUFBYSxVQUFVO0FBTXhDLHlCQUFXO0FBQUEsWUFDYixXQUFXLFFBQVEsYUFBYSxVQUFVO0FBR3hDLHlCQUFXLE1BQU0sa0JBQWtCLGFBQWEsUUFBUTtBQUFBLFlBQzFELE9BQU87QUFDTCxxQkFBTyxLQUFLO0FBQUEsWUFDZDtBQUFBLFVBQ0Y7QUFHQSxtQkFBUyxhQUFhO0FBR3RCLGlCQUFPO0FBQUEsUUFDVDtBQUFBO0FBR0EsZUFBUyxrQkFBbUIsYUFBYSxVQUFVO0FBRWpELGNBQU0sVUFBVSxZQUFZO0FBSTVCLGNBQU0saUJBQWlCLFNBQVMsbUJBQzVCLFNBQVMsbUJBQ1Q7QUFJSixZQUFJO0FBRUosWUFBSTtBQUNGLHdCQUFjO0FBQUEsWUFDWjtBQUFBLFlBQ0Esa0JBQWtCLE9BQU8sRUFBRTtBQUFBLFVBQzdCO0FBR0EsY0FBSSxlQUFlLE1BQU07QUFDdkIsbUJBQU87QUFBQSxVQUNUO0FBQUEsUUFDRixTQUFTLEtBQUs7QUFFWixpQkFBTyxRQUFRLFFBQVEsaUJBQWlCLEdBQUcsQ0FBQztBQUFBLFFBQzlDO0FBSUEsWUFBSSxDQUFDLHFCQUFxQixXQUFXLEdBQUc7QUFDdEMsaUJBQU8sUUFBUSxRQUFRLGlCQUFpQixxQ0FBcUMsQ0FBQztBQUFBLFFBQ2hGO0FBR0EsWUFBSSxRQUFRLGtCQUFrQixJQUFJO0FBQ2hDLGlCQUFPLFFBQVEsUUFBUSxpQkFBaUIseUJBQXlCLENBQUM7QUFBQSxRQUNwRTtBQUdBLGdCQUFRLGlCQUFpQjtBQUt6QixZQUNFLFFBQVEsU0FBUyxXQUNoQixZQUFZLFlBQVksWUFBWSxhQUNyQyxDQUFDLFdBQVcsU0FBUyxXQUFXLEdBQ2hDO0FBQ0EsaUJBQU8sUUFBUSxRQUFRLGlCQUFpQixrREFBa0QsQ0FBQztBQUFBLFFBQzdGO0FBSUEsWUFDRSxRQUFRLHFCQUFxQixXQUM1QixZQUFZLFlBQVksWUFBWSxXQUNyQztBQUNBLGlCQUFPLFFBQVEsUUFBUTtBQUFBLFlBQ3JCO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSDtBQUlBLFlBQ0UsZUFBZSxXQUFXLE9BQzFCLFFBQVEsUUFBUSxRQUNoQixRQUFRLEtBQUssVUFBVSxNQUN2QjtBQUNBLGlCQUFPLFFBQVEsUUFBUSxpQkFBaUIsQ0FBQztBQUFBLFFBQzNDO0FBS0EsWUFDRyxDQUFDLEtBQUssR0FBRyxFQUFFLFNBQVMsZUFBZSxNQUFNLEtBQUssUUFBUSxXQUFXLFVBQ2pFLGVBQWUsV0FBVyxPQUN6QixDQUFDLFlBQVksU0FBUyxRQUFRLE1BQU0sR0FDdEM7QUFHQSxrQkFBUSxTQUFTO0FBQ2pCLGtCQUFRLE9BQU87QUFJZixxQkFBVyxjQUFjLG1CQUFtQjtBQUMxQyxvQkFBUSxZQUFZLE9BQU8sVUFBVTtBQUFBLFVBQ3ZDO0FBQUEsUUFDRjtBQUtBLFlBQUksQ0FBQyxXQUFXLGtCQUFrQixPQUFPLEdBQUcsV0FBVyxHQUFHO0FBRXhELGtCQUFRLFlBQVksT0FBTyxpQkFBaUIsSUFBSTtBQUdoRCxrQkFBUSxZQUFZLE9BQU8sdUJBQXVCLElBQUk7QUFHdEQsa0JBQVEsWUFBWSxPQUFPLFVBQVUsSUFBSTtBQUN6QyxrQkFBUSxZQUFZLE9BQU8sUUFBUSxJQUFJO0FBQUEsUUFDekM7QUFJQSxZQUFJLFFBQVEsUUFBUSxNQUFNO0FBQ3hCLGlCQUFPLFFBQVEsS0FBSyxVQUFVLElBQUk7QUFDbEMsa0JBQVEsT0FBTyxrQkFBa0IsUUFBUSxLQUFLLE1BQU0sRUFBRSxDQUFDO0FBQUEsUUFDekQ7QUFHQSxjQUFNLGFBQWEsWUFBWTtBQUsvQixtQkFBVyxrQkFBa0IsV0FBVyx3QkFDdEMsMkJBQTJCLFlBQVksNkJBQTZCO0FBSXRFLFlBQUksV0FBVyxzQkFBc0IsR0FBRztBQUN0QyxxQkFBVyxvQkFBb0IsV0FBVztBQUFBLFFBQzVDO0FBR0EsZ0JBQVEsUUFBUSxLQUFLLFdBQVc7QUFJaEMsMkNBQW1DLFNBQVMsY0FBYztBQUcxRCxlQUFPLFVBQVUsYUFBYSxJQUFJO0FBQUEsTUFDcEM7QUFHQSxlQUFlLHdCQUNiLGFBQ0Esd0JBQXdCLE9BQ3hCLHVCQUF1QixPQUN2QjtBQUFBO0FBRUEsZ0JBQU0sVUFBVSxZQUFZO0FBRzVCLGNBQUksa0JBQWtCO0FBR3RCLGNBQUksY0FBYztBQUdsQixjQUFJLFdBQVc7QUFNZixnQkFBTSxZQUFZO0FBR2xCLGdCQUFNLG1CQUFtQjtBQU96QixjQUFJLFFBQVEsV0FBVyxlQUFlLFFBQVEsYUFBYSxTQUFTO0FBQ2xFLDhCQUFrQjtBQUNsQiwwQkFBYztBQUFBLFVBQ2hCLE9BQU87QUFJTCwwQkFBYyxhQUFhLE9BQU87QUFHbEMsOEJBQWtCLG1CQUFLO0FBR3ZCLDRCQUFnQixVQUFVO0FBQUEsVUFDNUI7QUFHQSxnQkFBTSxxQkFDSixRQUFRLGdCQUFnQixhQUN2QixRQUFRLGdCQUFnQixpQkFDdkIsUUFBUSxxQkFBcUI7QUFJakMsZ0JBQU0sZ0JBQWdCLFlBQVksT0FBTyxZQUFZLEtBQUssU0FBUztBQUduRSxjQUFJLDJCQUEyQjtBQUkvQixjQUNFLFlBQVksUUFBUSxRQUNwQixDQUFDLFFBQVEsS0FBSyxFQUFFLFNBQVMsWUFBWSxNQUFNLEdBQzNDO0FBQ0EsdUNBQTJCO0FBQUEsVUFDN0I7QUFJQSxjQUFJLGlCQUFpQixNQUFNO0FBQ3pCLHVDQUEyQixpQkFBaUIsR0FBRyxhQUFhLEVBQUU7QUFBQSxVQUNoRTtBQUtBLGNBQUksNEJBQTRCLE1BQU07QUFDcEMsd0JBQVksWUFBWSxPQUFPLGtCQUFrQiwwQkFBMEIsSUFBSTtBQUFBLFVBQ2pGO0FBT0EsY0FBSSxpQkFBaUIsUUFBUSxZQUFZLFdBQVc7QUFBQSxVQUVwRDtBQUtBLGNBQUksWUFBWSxvQkFBb0IsS0FBSztBQUN2Qyx3QkFBWSxZQUFZLE9BQU8sV0FBVyxpQkFBaUIsWUFBWSxTQUFTLElBQUksR0FBRyxJQUFJO0FBQUEsVUFDN0Y7QUFHQSxvQ0FBMEIsV0FBVztBQUdyQyw4QkFBb0IsV0FBVztBQUsvQixjQUFJLENBQUMsWUFBWSxZQUFZLFNBQVMsY0FBYyxJQUFJLEdBQUc7QUFDekQsd0JBQVksWUFBWSxPQUFPLGNBQWMsZ0JBQWdCO0FBQUEsVUFDL0Q7QUFNQSxjQUNFLFlBQVksVUFBVSxjQUNyQixZQUFZLFlBQVksU0FBUyxxQkFBcUIsSUFBSSxLQUN6RCxZQUFZLFlBQVksU0FBUyxpQkFBaUIsSUFBSSxLQUN0RCxZQUFZLFlBQVksU0FBUyx1QkFBdUIsSUFBSSxLQUM1RCxZQUFZLFlBQVksU0FBUyxZQUFZLElBQUksS0FDakQsWUFBWSxZQUFZLFNBQVMsWUFBWSxJQUFJLElBQ25EO0FBQ0Esd0JBQVksUUFBUTtBQUFBLFVBQ3RCO0FBTUEsY0FDRSxZQUFZLFVBQVUsY0FDdEIsQ0FBQyxZQUFZLGdEQUNiLENBQUMsWUFBWSxZQUFZLFNBQVMsaUJBQWlCLElBQUksR0FDdkQ7QUFDQSx3QkFBWSxZQUFZLE9BQU8saUJBQWlCLGFBQWEsSUFBSTtBQUFBLFVBQ25FO0FBR0EsY0FBSSxZQUFZLFVBQVUsY0FBYyxZQUFZLFVBQVUsVUFBVTtBQUd0RSxnQkFBSSxDQUFDLFlBQVksWUFBWSxTQUFTLFVBQVUsSUFBSSxHQUFHO0FBQ3JELDBCQUFZLFlBQVksT0FBTyxVQUFVLFlBQVksSUFBSTtBQUFBLFlBQzNEO0FBSUEsZ0JBQUksQ0FBQyxZQUFZLFlBQVksU0FBUyxpQkFBaUIsSUFBSSxHQUFHO0FBQzVELDBCQUFZLFlBQVksT0FBTyxpQkFBaUIsWUFBWSxJQUFJO0FBQUEsWUFDbEU7QUFBQSxVQUNGO0FBSUEsY0FBSSxZQUFZLFlBQVksU0FBUyxTQUFTLElBQUksR0FBRztBQUNuRCx3QkFBWSxZQUFZLE9BQU8sbUJBQW1CLFlBQVksSUFBSTtBQUFBLFVBQ3BFO0FBS0EsY0FBSSxDQUFDLFlBQVksWUFBWSxTQUFTLG1CQUFtQixJQUFJLEdBQUc7QUFDOUQsZ0JBQUksa0JBQWtCLGtCQUFrQixXQUFXLENBQUMsR0FBRztBQUNyRCwwQkFBWSxZQUFZLE9BQU8sbUJBQW1CLHFCQUFxQixJQUFJO0FBQUEsWUFDN0UsT0FBTztBQUNMLDBCQUFZLFlBQVksT0FBTyxtQkFBbUIsaUJBQWlCLElBQUk7QUFBQSxZQUN6RTtBQUFBLFVBQ0Y7QUFFQSxzQkFBWSxZQUFZLE9BQU8sUUFBUSxJQUFJO0FBRzNDLGNBQUksb0JBQW9CO0FBQUEsVUFNeEI7QUFXQSxjQUFJLGFBQWEsTUFBTTtBQUNyQix3QkFBWSxRQUFRO0FBQUEsVUFDdEI7QUFJQSxjQUFJLFlBQVksVUFBVSxjQUFjLFlBQVksVUFBVSxVQUFVO0FBQUEsVUFFeEU7QUFNQSxjQUFJLFlBQVksTUFBTTtBQUdwQixnQkFBSSxZQUFZLFVBQVUsa0JBQWtCO0FBQzFDLHFCQUFPLGlCQUFpQixnQkFBZ0I7QUFBQSxZQUMxQztBQUlBLGtCQUFNLGtCQUFrQixNQUFNO0FBQUEsY0FDNUI7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0Y7QUFNQSxnQkFDRSxDQUFDLGVBQWUsSUFBSSxZQUFZLE1BQU0sS0FDdEMsZ0JBQWdCLFVBQVUsT0FDMUIsZ0JBQWdCLFVBQVUsS0FDMUI7QUFBQSxZQUVGO0FBSUEsZ0JBQUksb0JBQW9CLGdCQUFnQixXQUFXLEtBQUs7QUFBQSxZQUV4RDtBQUdBLGdCQUFJLFlBQVksTUFBTTtBQUVwQix5QkFBVztBQUFBLFlBS2I7QUFBQSxVQUNGO0FBR0EsbUJBQVMsVUFBVSxDQUFDLEdBQUcsWUFBWSxPQUFPO0FBSTFDLGNBQUksWUFBWSxZQUFZLFNBQVMsU0FBUyxJQUFJLEdBQUc7QUFDbkQscUJBQVMsaUJBQWlCO0FBQUEsVUFDNUI7QUFHQSxtQkFBUyw2QkFBNkI7QUFRdEMsY0FBSSxTQUFTLFdBQVcsS0FBSztBQUUzQixnQkFBSSxRQUFRLFdBQVcsYUFBYTtBQUNsQyxxQkFBTyxpQkFBaUI7QUFBQSxZQUMxQjtBQUtBLGdCQUFJLFlBQVksV0FBVyxHQUFHO0FBQzVCLHFCQUFPLDRCQUE0QixXQUFXO0FBQUEsWUFDaEQ7QUFTQSxtQkFBTyxpQkFBaUIsK0JBQStCO0FBQUEsVUFDekQ7QUFHQTtBQUFBO0FBQUEsWUFFRSxTQUFTLFdBQVc7QUFBQSxZQUVwQixDQUFDO0FBQUEsYUFFQSxRQUFRLFFBQVEsUUFBUSxRQUFRLEtBQUssVUFBVTtBQUFBLFlBQ2hEO0FBSUEsZ0JBQUksWUFBWSxXQUFXLEdBQUc7QUFDNUIscUJBQU8sNEJBQTRCLFdBQVc7QUFBQSxZQUNoRDtBQVFBLHdCQUFZLFdBQVcsV0FBVyxRQUFRO0FBRTFDLHVCQUFXLE1BQU07QUFBQSxjQUNmO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUdBLGNBQUksdUJBQXVCO0FBQUEsVUFFM0I7QUFHQSxpQkFBTztBQUFBLFFBQ1Q7QUFBQTtBQUdBLGVBQWUsaUJBQ2IsYUFDQSxxQkFBcUIsT0FDckIscUJBQXFCLE9BQ3JCO0FBQUE7QUFDQSxpQkFBTyxDQUFDLFlBQVksV0FBVyxjQUFjLFlBQVksV0FBVyxXQUFXLFNBQVM7QUFFeEYsc0JBQVksV0FBVyxhQUFhO0FBQUEsWUFDbEMsT0FBTztBQUFBLFlBQ1AsV0FBVztBQUFBLFlBQ1gsUUFBUyxLQUFLLFFBQVEsTUFBTTtBQTlwRGhDLGtCQUFBRTtBQStwRE0sa0JBQUksQ0FBQyxLQUFLLFdBQVc7QUFDbkIscUJBQUssWUFBWTtBQUNqQixvQkFBSSxPQUFPO0FBQ1QsbUJBQUFBLE1BQUEsS0FBSyxVQUFMLGdCQUFBQSxJQUFBLFdBQWEsb0JBQU8sSUFBSSxhQUFhLDhCQUE4QixZQUFZO0FBQUEsZ0JBQ2pGO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBR0EsZ0JBQU0sVUFBVSxZQUFZO0FBRzVCLGNBQUksV0FBVztBQUdmLGdCQUFNLGFBQWEsWUFBWTtBQUsvQixnQkFBTSxZQUFZO0FBR2xCLGNBQUksYUFBYSxNQUFNO0FBQ3JCLG9CQUFRLFFBQVE7QUFBQSxVQUNsQjtBQVFBLGdCQUFNLGdCQUFnQixxQkFBcUIsUUFBUTtBQUduRCxjQUFJLFFBQVEsU0FBUyxhQUFhO0FBQUEsVUFJbEMsT0FBTztBQUFBLFVBS1A7QUF1REEsY0FBSSxjQUFjO0FBSWxCLGNBQUksUUFBUSxRQUFRLFFBQVEsWUFBWSx5QkFBeUI7QUFDL0QsMkJBQWUsTUFBTSxZQUFZLHdCQUF3QixDQUFDO0FBQUEsVUFDNUQsV0FBVyxRQUFRLFFBQVEsTUFBTTtBQUkvQixrQkFBTSxtQkFBbUIsU0FBa0IsT0FBTztBQUFBO0FBOXdEdEQsb0JBQUFBO0FBZ3hETSxvQkFBSSxZQUFZLFdBQVcsR0FBRztBQUM1QjtBQUFBLGdCQUNGO0FBR0Esc0JBQU07QUFJTixpQkFBQUEsTUFBQSxZQUFZLGtDQUFaLGdCQUFBQSxJQUFBLGtCQUE0QyxNQUFNO0FBQUEsY0FDcEQ7QUFBQTtBQUdBLGtCQUFNLG1CQUFtQixNQUFNO0FBRTdCLGtCQUFJLFlBQVksV0FBVyxHQUFHO0FBQzVCO0FBQUEsY0FDRjtBQUlBLGtCQUFJLFlBQVkseUJBQXlCO0FBQ3ZDLDRCQUFZLHdCQUF3QjtBQUFBLGNBQ3RDO0FBQUEsWUFDRjtBQUdBLGtCQUFNLG1CQUFtQixDQUFDLE1BQU07QUFFOUIsa0JBQUksWUFBWSxXQUFXLEdBQUc7QUFDNUI7QUFBQSxjQUNGO0FBR0Esa0JBQUksRUFBRSxTQUFTLGNBQWM7QUFDM0IsNEJBQVksV0FBVyxNQUFNO0FBQUEsY0FDL0IsT0FBTztBQUNMLDRCQUFZLFdBQVcsVUFBVSxDQUFDO0FBQUEsY0FDcEM7QUFBQSxZQUNGO0FBSUEsMEJBQWUsV0FBb0I7QUFBQTtBQUNqQyxvQkFBSTtBQUNGO0FBQUEsK0NBQTBCLFFBQVEsS0FBSyxTQUF2Qyx1RkFBK0M7QUFBcEMsNEJBQU0sUUFBakI7QUFDRSx5Q0FBUSxpQkFBaUIsS0FBSztBQUFBLG9CQUNoQztBQUFBLDJCQUZBLE1BN3pEUjtBQTZ6RFE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0EsbUNBQWlCO0FBQUEsZ0JBQ25CLFNBQVMsS0FBSztBQUNaLG1DQUFpQixHQUFHO0FBQUEsZ0JBQ3RCO0FBQUEsY0FDRjtBQUFBLGNBQUc7QUFBQSxVQUNMO0FBRUEsY0FBSTtBQUVGLGtCQUFNLEVBQUUsTUFBTSxRQUFRLFlBQVksYUFBYSxPQUFPLElBQUksTUFBTSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFOUYsZ0JBQUksUUFBUTtBQUNWLHlCQUFXLGFBQWEsRUFBRSxRQUFRLFlBQVksYUFBYSxPQUFPLENBQUM7QUFBQSxZQUNyRSxPQUFPO0FBQ0wsb0JBQU0sV0FBVyxLQUFLLE9BQU8sYUFBYSxFQUFFO0FBQzVDLDBCQUFZLFdBQVcsT0FBTyxNQUFNLFNBQVMsS0FBSztBQUVsRCx5QkFBVyxhQUFhLEVBQUUsUUFBUSxZQUFZLFlBQVksQ0FBQztBQUFBLFlBQzdEO0FBQUEsVUFDRixTQUFTLEtBQUs7QUFFWixnQkFBSSxJQUFJLFNBQVMsY0FBYztBQUU3QiwwQkFBWSxXQUFXLFdBQVcsUUFBUTtBQUcxQyxxQkFBTyw0QkFBNEIsYUFBYSxHQUFHO0FBQUEsWUFDckQ7QUFFQSxtQkFBTyxpQkFBaUIsR0FBRztBQUFBLFVBQzdCO0FBSUEsZ0JBQU0sZ0JBQWdCLE1BQVk7QUFDaEMsa0JBQU0sWUFBWSxXQUFXLE9BQU87QUFBQSxVQUN0QztBQUlBLGdCQUFNLGtCQUFrQixDQUFDLFdBQVc7QUFHbEMsZ0JBQUksQ0FBQyxZQUFZLFdBQVcsR0FBRztBQUM3QiwwQkFBWSxXQUFXLE1BQU0sTUFBTTtBQUFBLFlBQ3JDO0FBQUEsVUFDRjtBQWFBLGdCQUFNLFNBQVMsSUFBSTtBQUFBLFlBQ2pCO0FBQUEsY0FDUSxNQUFPLFlBQVk7QUFBQTtBQUN2Qiw4QkFBWSxXQUFXLGFBQWE7QUFBQSxnQkFDdEM7QUFBQTtBQUFBLGNBQ00sS0FBTSxZQUFZO0FBQUE7QUFDdEIsd0JBQU0sY0FBYyxVQUFVO0FBQUEsZ0JBQ2hDO0FBQUE7QUFBQSxjQUNNLE9BQVEsUUFBUTtBQUFBO0FBQ3BCLHdCQUFNLGdCQUFnQixNQUFNO0FBQUEsZ0JBQzlCO0FBQUE7QUFBQSxjQUNBLE1BQU07QUFBQSxZQUNSO0FBQUEsVUFDRjtBQUtBLG1CQUFTLE9BQU8sRUFBRSxRQUFRLFFBQVEsTUFBTSxRQUFRLEtBQUs7QUFtQnJELHNCQUFZLFdBQVcsWUFBWTtBQUNuQyxzQkFBWSxXQUFXLEdBQUcsY0FBYyxTQUFTO0FBQ2pELHNCQUFZLFdBQVcsU0FBUyxNQUFZO0FBbDZEOUMsZ0JBQUFBO0FBbzZESSxtQkFBTyxNQUFNO0FBS1gsa0JBQUk7QUFDSixrQkFBSTtBQUNKLGtCQUFJO0FBQ0Ysc0JBQU0sRUFBRSxNQUFNLE1BQU0sSUFBSSxNQUFNLFlBQVksV0FBVyxLQUFLO0FBRTFELG9CQUFJLFVBQVUsV0FBVyxHQUFHO0FBQzFCO0FBQUEsZ0JBQ0Y7QUFFQSx3QkFBUSxPQUFPLFNBQVk7QUFBQSxjQUM3QixTQUFTLEtBQUs7QUFDWixvQkFBSSxZQUFZLFdBQVcsU0FBUyxDQUFDLFdBQVcsaUJBQWlCO0FBRS9ELDBCQUFRO0FBQUEsZ0JBQ1YsT0FBTztBQUNMLDBCQUFRO0FBSVIsOEJBQVk7QUFBQSxnQkFDZDtBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxVQUFVLFFBQVc7QUFLdkIsb0NBQW9CLFlBQVksV0FBVyxVQUFVO0FBRXJELGlDQUFpQixhQUFhLFFBQVE7QUFFdEM7QUFBQSxjQUNGO0FBR0EseUJBQVcsb0JBQW1CQSxNQUFBLCtCQUFPLGVBQVAsT0FBQUEsTUFBcUI7QUFHbkQsa0JBQUksV0FBVztBQUNiLDRCQUFZLFdBQVcsVUFBVSxLQUFLO0FBQ3RDO0FBQUEsY0FDRjtBQUlBLG9CQUFNLFNBQVMsSUFBSSxXQUFXLEtBQUs7QUFDbkMsa0JBQUksT0FBTyxZQUFZO0FBQ3JCLDRCQUFZLFdBQVcsV0FBVyxRQUFRLE1BQU07QUFBQSxjQUNsRDtBQUdBLGtCQUFJLFVBQVUsTUFBTSxHQUFHO0FBQ3JCLDRCQUFZLFdBQVcsVUFBVTtBQUNqQztBQUFBLGNBQ0Y7QUFJQSxrQkFBSSxZQUFZLFdBQVcsV0FBVyxlQUFlLEdBQUc7QUFDdEQ7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFHQSxtQkFBUyxVQUFXLFFBQVE7QUFFMUIsZ0JBQUksVUFBVSxXQUFXLEdBQUc7QUFFMUIsdUJBQVMsVUFBVTtBQU1uQixrQkFBSSxXQUFXLE1BQU0sR0FBRztBQUN0Qiw0QkFBWSxXQUFXLFdBQVc7QUFBQSxrQkFDaEMsWUFBWSxXQUFXO0FBQUEsZ0JBQ3pCO0FBQUEsY0FDRjtBQUFBLFlBQ0YsT0FBTztBQUVMLGtCQUFJLFdBQVcsTUFBTSxHQUFHO0FBQ3RCLDRCQUFZLFdBQVcsV0FBVyxNQUFNLElBQUksVUFBVSxjQUFjO0FBQUEsa0JBQ2xFLE9BQU8sWUFBWSxNQUFNLElBQUksU0FBUztBQUFBLGdCQUN4QyxDQUFDLENBQUM7QUFBQSxjQUNKO0FBQUEsWUFDRjtBQUlBLHdCQUFZLFdBQVcsV0FBVyxRQUFRO0FBQUEsVUFDNUM7QUFHQSxpQkFBTztBQUVQLG1CQUFTLFNBQVUsRUFBRSxLQUFLLEdBQUc7QUFDM0Isa0JBQU0sTUFBTSxrQkFBa0IsT0FBTztBQUVyQyxrQkFBTSxRQUFRLFlBQVksV0FBVztBQUVyQyxtQkFBTyxJQUFJLFFBQVEsQ0FBQ0MsVUFBUyxXQUFXLE1BQU07QUFBQSxjQUM1QztBQUFBLGdCQUNFLE1BQU0sSUFBSSxXQUFXLElBQUk7QUFBQSxnQkFDekIsUUFBUSxJQUFJO0FBQUEsZ0JBQ1osUUFBUSxRQUFRO0FBQUEsZ0JBQ2hCLE1BQU0sTUFBTSxlQUFlLFFBQVEsU0FBUyxRQUFRLEtBQUssVUFBVSxRQUFRLEtBQUssVUFBVTtBQUFBLGdCQUMxRixTQUFTLFFBQVEsWUFBWTtBQUFBLGdCQUM3QixpQkFBaUI7QUFBQSxnQkFDakIsU0FBUyxRQUFRLFNBQVMsY0FBYyxjQUFjO0FBQUEsY0FDeEQ7QUFBQSxjQUNBO0FBQUEsZ0JBQ0UsTUFBTTtBQUFBLGdCQUNOLE9BQU87QUFBQSxnQkFFUCxVQUFXLE9BQU87QUFFaEIsd0JBQU0sRUFBRSxXQUFXLElBQUksWUFBWTtBQU1uQyw2QkFBVyw0QkFBNEIsb0NBQW9DLFFBQVcsV0FBVyx1QkFBdUIsWUFBWSw2QkFBNkI7QUFFakssc0JBQUksV0FBVyxXQUFXO0FBQ3hCLDBCQUFNLElBQUksYUFBYSw4QkFBOEIsWUFBWSxDQUFDO0FBQUEsa0JBQ3BFLE9BQU87QUFDTCxnQ0FBWSxXQUFXLEdBQUcsY0FBYyxLQUFLO0FBQzdDLHlCQUFLLFFBQVEsV0FBVyxRQUFRO0FBQUEsa0JBQ2xDO0FBSUEsNkJBQVcsK0JBQStCLDJCQUEyQixZQUFZLDZCQUE2QjtBQUFBLGdCQUNoSDtBQUFBLGdCQUVBLG9CQUFxQjtBQUtuQiw2QkFBVyxnQ0FBZ0MsMkJBQTJCLFlBQVksNkJBQTZCO0FBQUEsZ0JBQ2pIO0FBQUEsZ0JBRUEsVUFBVyxRQUFRLFlBQVksUUFBUSxZQUFZO0FBQ2pELHNCQUFJLFNBQVMsS0FBSztBQUNoQjtBQUFBLGtCQUNGO0FBRUEsc0JBQUksV0FBVztBQUVmLHdCQUFNLGNBQWMsSUFBSSxZQUFZO0FBRXBDLDJCQUFTLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLLEdBQUc7QUFDN0MsZ0NBQVksT0FBTyw2QkFBNkIsV0FBVyxDQUFDLENBQUMsR0FBRyxXQUFXLElBQUksQ0FBQyxFQUFFLFNBQVMsUUFBUSxHQUFHLElBQUk7QUFBQSxrQkFDNUc7QUFDQSw2QkFBVyxZQUFZLElBQUksWUFBWSxJQUFJO0FBRTNDLHVCQUFLLE9BQU8sSUFBSSxTQUFTLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFekMsd0JBQU0sV0FBVyxDQUFDO0FBRWxCLHdCQUFNLGFBQWEsWUFBWSxRQUFRLGFBQWEsWUFDbEQsa0JBQWtCLElBQUksTUFBTTtBQUc5QixzQkFBSSxRQUFRLFdBQVcsVUFBVSxRQUFRLFdBQVcsYUFBYSxDQUFDLGVBQWUsU0FBUyxNQUFNLEtBQUssQ0FBQyxZQUFZO0FBRWhILDBCQUFNLGtCQUFrQixZQUFZLElBQUksb0JBQW9CLElBQUk7QUFHaEUsMEJBQU0sVUFBVSxrQkFBa0IsZ0JBQWdCLFlBQVksRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBSTlFLDBCQUFNLHNCQUFzQjtBQUM1Qix3QkFBSSxRQUFRLFNBQVMscUJBQXFCO0FBQ3hDLDZCQUFPLElBQUksTUFBTSwyQ0FBMkMsUUFBUSxNQUFNLHdCQUF3QixtQkFBbUIsRUFBRSxDQUFDO0FBQ3hILDZCQUFPO0FBQUEsb0JBQ1Q7QUFFQSw2QkFBUyxJQUFJLFFBQVEsU0FBUyxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUc7QUFDNUMsNEJBQU0sU0FBUyxRQUFRLENBQUMsRUFBRSxLQUFLO0FBRS9CLDBCQUFJLFdBQVcsWUFBWSxXQUFXLFFBQVE7QUFDNUMsaUNBQVMsS0FBSyxLQUFLLGFBQWE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDBCQUs5QixPQUFPLEtBQUssVUFBVTtBQUFBLDBCQUN0QixhQUFhLEtBQUssVUFBVTtBQUFBLHdCQUM5QixDQUFDLENBQUM7QUFBQSxzQkFDSixXQUFXLFdBQVcsV0FBVztBQUMvQixpQ0FBUyxLQUFLLGNBQWM7QUFBQSwwQkFDMUIsT0FBTyxLQUFLLFVBQVU7QUFBQSwwQkFDdEIsYUFBYSxLQUFLLFVBQVU7QUFBQSx3QkFDOUIsQ0FBQyxDQUFDO0FBQUEsc0JBQ0osV0FBVyxXQUFXLE1BQU07QUFDMUIsaUNBQVMsS0FBSyxLQUFLLHVCQUF1QjtBQUFBLDBCQUN4QyxPQUFPLEtBQUssVUFBVTtBQUFBLDBCQUN0QixhQUFhLEtBQUssVUFBVTtBQUFBLHdCQUM5QixDQUFDLENBQUM7QUFBQSxzQkFDSixPQUFPO0FBQ0wsaUNBQVMsU0FBUztBQUNsQjtBQUFBLHNCQUNGO0FBQUEsb0JBQ0Y7QUFBQSxrQkFDRjtBQUVBLHdCQUFNLFVBQVUsS0FBSyxRQUFRLEtBQUssSUFBSTtBQUV0QyxrQkFBQUEsU0FBUTtBQUFBLG9CQUNOO0FBQUEsb0JBQ0E7QUFBQSxvQkFDQTtBQUFBLG9CQUNBLE1BQU0sU0FBUyxTQUNYLFNBQVMsS0FBSyxNQUFNLEdBQUcsVUFBVSxDQUFDLFFBQVE7QUFDMUMsMEJBQUksS0FBSztBQUNQLDZCQUFLLFFBQVEsR0FBRztBQUFBLHNCQUNsQjtBQUFBLG9CQUNGLENBQUMsRUFBRSxHQUFHLFNBQVMsT0FBTyxJQUNwQixLQUFLLEtBQUssR0FBRyxTQUFTLE9BQU87QUFBQSxrQkFDbkMsQ0FBQztBQUVELHlCQUFPO0FBQUEsZ0JBQ1Q7QUFBQSxnQkFFQSxPQUFRLE9BQU87QUFDYixzQkFBSSxZQUFZLFdBQVcsTUFBTTtBQUMvQjtBQUFBLGtCQUNGO0FBTUEsd0JBQU0sUUFBUTtBQU9kLDZCQUFXLG1CQUFtQixNQUFNO0FBSXBDLHlCQUFPLEtBQUssS0FBSyxLQUFLLEtBQUs7QUFBQSxnQkFDN0I7QUFBQSxnQkFFQSxhQUFjO0FBQ1osc0JBQUksS0FBSyxPQUFPO0FBQ2QsZ0NBQVksV0FBVyxJQUFJLGNBQWMsS0FBSyxLQUFLO0FBQUEsa0JBQ3JEO0FBRUEsc0JBQUksWUFBWSxXQUFXLFdBQVc7QUFDcEMsZ0NBQVksV0FBVyxJQUFJLGNBQWMsWUFBWSxXQUFXLFNBQVM7QUFBQSxrQkFDM0U7QUFFQSw4QkFBWSxXQUFXLFFBQVE7QUFFL0IsdUJBQUssS0FBSyxLQUFLLElBQUk7QUFBQSxnQkFDckI7QUFBQSxnQkFFQSxRQUFTLE9BQU87QUFyckV4QixzQkFBQUQ7QUFzckVVLHNCQUFJLEtBQUssT0FBTztBQUNkLGdDQUFZLFdBQVcsSUFBSSxjQUFjLEtBQUssS0FBSztBQUFBLGtCQUNyRDtBQUVBLG1CQUFBQSxNQUFBLEtBQUssU0FBTCxnQkFBQUEsSUFBVyxRQUFRO0FBRW5CLDhCQUFZLFdBQVcsVUFBVSxLQUFLO0FBRXRDLHlCQUFPLEtBQUs7QUFBQSxnQkFDZDtBQUFBLGdCQUVBLFVBQVcsUUFBUSxZQUFZLFFBQVE7QUFDckMsc0JBQUksV0FBVyxLQUFLO0FBQ2xCO0FBQUEsa0JBQ0Y7QUFFQSx3QkFBTSxjQUFjLElBQUksWUFBWTtBQUVwQywyQkFBUyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSyxHQUFHO0FBQzdDLGdDQUFZLE9BQU8sNkJBQTZCLFdBQVcsQ0FBQyxDQUFDLEdBQUcsV0FBVyxJQUFJLENBQUMsRUFBRSxTQUFTLFFBQVEsR0FBRyxJQUFJO0FBQUEsa0JBQzVHO0FBRUEsa0JBQUFDLFNBQVE7QUFBQSxvQkFDTjtBQUFBLG9CQUNBLFlBQVksYUFBYSxNQUFNO0FBQUEsb0JBQy9CO0FBQUEsb0JBQ0E7QUFBQSxrQkFDRixDQUFDO0FBRUQseUJBQU87QUFBQSxnQkFDVDtBQUFBLGNBQ0Y7QUFBQSxZQUNGLENBQUM7QUFBQSxVQUNIO0FBQUEsUUFDRjtBQUFBO0FBRUEsYUFBTyxVQUFVO0FBQUEsUUFDZjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQTtBQUFBOzs7QUMvdEVBLE1BQUFDLG1CQUFBO0FBQUE7QUFBQTtBQUVBLGFBQU8sVUFBVTtBQUFBLFFBQ2YsUUFBUSxPQUFPLGtCQUFrQjtBQUFBLFFBQ2pDLFNBQVMsT0FBTyxtQkFBbUI7QUFBQSxRQUNuQyxRQUFRLE9BQU8sa0JBQWtCO0FBQUEsUUFDakMseUJBQXlCLE9BQU8sZ0RBQWdEO0FBQUEsUUFDaEYsU0FBUyxPQUFPLG1CQUFtQjtBQUFBLFFBQ25DLFVBQVUsT0FBTyxvQkFBb0I7QUFBQSxNQUN2QztBQUFBO0FBQUE7OztBQ1RBO0FBQUE7QUFBQTtBQUVBLFVBQU0sRUFBRSxPQUFPLElBQUk7QUFFbkIsVUFBTSxTQUFTLE9BQU8scUJBQXFCO0FBSzNDLFVBQU0sZ0JBQU4sTUFBTSx1QkFBc0IsTUFBTTtBQUFBLFFBQ2hDLFlBQWEsTUFBTSxnQkFBZ0IsQ0FBQyxHQUFHO0FBQ3JDLGlCQUFPLE9BQU8sV0FBVyxVQUFVLE1BQU0sNkJBQTZCLE1BQU07QUFDNUUsMEJBQWdCLE9BQU8sV0FBVyxrQkFBa0Isd0NBQWlCLENBQUMsQ0FBQztBQUV2RSxnQkFBTSxNQUFNLGFBQWE7QUFFekIsZUFBSyxNQUFNLElBQUk7QUFBQSxZQUNiLGtCQUFrQixjQUFjO0FBQUEsWUFDaEMsUUFBUSxjQUFjO0FBQUEsWUFDdEIsT0FBTyxjQUFjO0FBQUEsVUFDdkI7QUFBQSxRQUNGO0FBQUEsUUFFQSxJQUFJLG1CQUFvQjtBQUN0QixpQkFBTyxXQUFXLE1BQU0sY0FBYTtBQUVyQyxpQkFBTyxLQUFLLE1BQU0sRUFBRTtBQUFBLFFBQ3RCO0FBQUEsUUFFQSxJQUFJLFNBQVU7QUFDWixpQkFBTyxXQUFXLE1BQU0sY0FBYTtBQUVyQyxpQkFBTyxLQUFLLE1BQU0sRUFBRTtBQUFBLFFBQ3RCO0FBQUEsUUFFQSxJQUFJLFFBQVM7QUFDWCxpQkFBTyxXQUFXLE1BQU0sY0FBYTtBQUVyQyxpQkFBTyxLQUFLLE1BQU0sRUFBRTtBQUFBLFFBQ3RCO0FBQUEsTUFDRjtBQUVBLGFBQU8sV0FBVyxvQkFBb0IsT0FBTyxvQkFBb0I7QUFBQSxRQUMvRDtBQUFBLFVBQ0UsS0FBSztBQUFBLFVBQ0wsV0FBVyxPQUFPLFdBQVc7QUFBQSxVQUM3QixjQUFjLE1BQU07QUFBQSxRQUN0QjtBQUFBLFFBQ0E7QUFBQSxVQUNFLEtBQUs7QUFBQSxVQUNMLFdBQVcsT0FBTyxXQUFXLG9CQUFvQjtBQUFBLFVBQ2pELGNBQWMsTUFBTTtBQUFBLFFBQ3RCO0FBQUEsUUFDQTtBQUFBLFVBQ0UsS0FBSztBQUFBLFVBQ0wsV0FBVyxPQUFPLFdBQVcsb0JBQW9CO0FBQUEsVUFDakQsY0FBYyxNQUFNO0FBQUEsUUFDdEI7QUFBQSxRQUNBO0FBQUEsVUFDRSxLQUFLO0FBQUEsVUFDTCxXQUFXLE9BQU8sV0FBVztBQUFBLFVBQzdCLGNBQWMsTUFBTTtBQUFBLFFBQ3RCO0FBQUEsUUFDQTtBQUFBLFVBQ0UsS0FBSztBQUFBLFVBQ0wsV0FBVyxPQUFPLFdBQVc7QUFBQSxVQUM3QixjQUFjLE1BQU07QUFBQSxRQUN0QjtBQUFBLFFBQ0E7QUFBQSxVQUNFLEtBQUs7QUFBQSxVQUNMLFdBQVcsT0FBTyxXQUFXO0FBQUEsVUFDN0IsY0FBYyxNQUFNO0FBQUEsUUFDdEI7QUFBQSxNQUNGLENBQUM7QUFFRCxhQUFPLFVBQVU7QUFBQSxRQUNmO0FBQUEsTUFDRjtBQUFBO0FBQUE7OztBQzdFQTtBQUFBO0FBQUE7QUFNQSxlQUFTLFlBQWEsT0FBTztBQUMzQixZQUFJLENBQUMsT0FBTztBQUNWLGlCQUFPO0FBQUEsUUFDVDtBQU1BLGdCQUFRLE1BQU0sS0FBSyxFQUFFLFlBQVksR0FBRztBQUFBLFVBQ2xDLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1Q7QUFBUyxtQkFBTztBQUFBLFFBQ2xCO0FBQUEsTUFDRjtBQUVBLGFBQU8sVUFBVTtBQUFBLFFBQ2Y7QUFBQSxNQUNGO0FBQUE7QUFBQTs7O0FDalNBLE1BQUFDLGdCQUFBO0FBQUE7QUFBQTtBQUVBLFVBQU07QUFBQSxRQUNKO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsSUFBSTtBQUNKLFVBQU0sRUFBRSxjQUFjLElBQUk7QUFDMUIs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SUFBQUEsV0FBQUEsV0FBQSxVQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxhQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxVQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxhQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxtQkFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLElBQUFBLFdBQUFBLFdBQUEsbUJBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxJQUFBQSxXQUFBQSxXQUFBLFlBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxJQUFBQSxXQUFBQSxXQUFBLGNBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxJQUFBQSxXQUFBQSxXQUFBLGlCQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxXQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxVQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxrQkFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLElBQUFBLFdBQUFBLFdBQUEsZUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLElBQUFBLFdBQUFBLFdBQUEsNkJBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxJQUFBQSxXQUFBQSxXQUFBLGdCQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxVQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxNQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxpQkFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLElBQUFBLFdBQUFBLFdBQUEscUJBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxJQUFBQSxXQUFBQSxXQUFBLGdCQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FBQUEsV0FBQSxZQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQUEsV0FB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SUFBQTtFQUNGLEdBVlksYUFBQSxXQUFRLENBQUEsRUFBQTtBQTJEZCxXQUFVLGVBQWUsTUFBYyxLQUFRO0FBQ25ELFVBQU0sZUFBZSxlQUFlLEdBQUc7QUFDdkMsWUFBUSxJQUFJLElBQUksSUFBSTtBQUVwQixVQUFNLFdBQVcsUUFBUSxJQUFJLFlBQVksS0FBSztBQUM5QyxRQUFJLFVBQVU7QUFDWixhQUFPLGlCQUFpQixPQUFPLHVCQUF1QixNQUFNLEdBQUcsQ0FBQztJQUNsRTtBQUVBLGlCQUFhLFdBQVcsRUFBQyxLQUFJLEdBQUcsWUFBWTtFQUM5QztBQStCTSxXQUFVLFVBQVUsUUFBYztBQUN0QyxpQkFBYSxZQUFZLENBQUEsR0FBSSxNQUFNO0VBQ3JDOzs7QVgxR0EsV0FBZSxPQUFPO0FBQUE7QUFDcEIsWUFBTSxJQUFnQjtBQUN0QixZQUFNLFdBQU8sZ0NBQWlCLEtBQUssR0FBRyxFQUFFLEVBQUUsV0FBVyxPQUFPLEtBQUssSUFBSSxRQUFRLENBQUM7QUFDOUUsWUFBTSxNQUFNLEtBQUssT0FBTyxHQUFHLFFBQVcsTUFBTSxJQUFJLEtBQUssTUFBTSxNQUFNO0FBQ2pFLFlBQU0sRUFBQyxnQkFBZ0IsaUJBQWdCLElBQUksS0FBSyxNQUFNLEdBQUc7QUFFekQsZ0JBQVUsZ0JBQWdCO0FBRTFCLHFCQUFlLG9CQUFvQixnQkFBZ0I7QUFDbkQscUJBQWUsa0JBQWtCLGNBQWM7QUFBQSxJQUNqRDtBQUFBO0FBRUEsT0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNO0FBQ2xCLFlBQVEsTUFBTSxDQUFDO0FBQ2YsWUFBUSxXQUFXO0FBQUEsRUFDckIsQ0FBQzsiLAogICJuYW1lcyI6IFsiZXZlbnRzIiwgImh0dHBPdmVySHR0cCIsICJodHRwc092ZXJIdHRwIiwgImh0dHBPdmVySHR0cHMiLCAiaHR0cHNPdmVySHR0cHMiLCAib3B0aW9ucyIsICJkZWJ1ZyIsICJzb2NrZXQiLCAiayIsICJyZXF1aXJlX3R1bm5lbCIsICJfYSIsICJCbG9iIiwgInBhdGgiLCAiaWR4IiwgInN0cmVhbSIsICJfYSIsICJlcnIiLCAicGF0aCIsICJwYXRoIiwgIkV2ZW50RW1pdHRlciIsICJyZXNvbHZlIiwgImVyciIsICJzZXNzaW9uIiwgInJlcXVpcmVfY29uc3RhbnRzIiwgIkVSUk9SIiwgIlRZUEUiLCAiRkxBR1MiLCAiTEVOSUVOVF9GTEFHUyIsICJNRVRIT0RTIiwgIkZJTklTSCIsICJIRUFERVJfU1RBVEUiLCAiQnVmZmVyIiwgIkJ1ZmZlciIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJrZXlzIiwgInJlcXVpcmVfdXRpbCIsICJwZXJmb3JtYW5jZSIsICJjcnlwdG8iLCAicmVzb2x2ZSIsICJyZXF1aXJlX3N5bWJvbHMiLCAiQmxvYiIsICJlbnRyeSIsICJfYSIsICJCbG9iIiwgImNyeXB0byIsICJjaHVuayIsICJ2YWx1ZSIsICJjb25zdGFudHMiLCAiYXQiLCAiZXhwb3J0cyIsICJjbGllbnQiLCAicGF0aCIsICJyZXNvbHZlIiwgImNsaWVudCIsICJzb2NrZXQiLCAicGF0aCIsICJoZWFkZXJzIiwgInJlc29sdmUiLCAicGF0aCIsICJjb25uZWN0IiwgInJlc29sdmUiLCAic29ja2V0IiwgInJlc29sdmUiLCAiX2EiLCAib3JpZ2luIiwgIl9hIiwgInBvb2wiLCAiZGlzcGF0Y2hlciIsICJfYSIsICJVUkwiLCAicGF0aCIsICJQcm94eUFnZW50IiwgIm9yaWdpbiIsICJwcm90b2NvbCIsICJvcHRzIiwgIl9hIiwgIlByb3h5QWdlbnQiLCAiZXJyIiwgInJlc29sdmUiLCAiY29uc3VtZSIsICJyZXF1aXJlX3V0aWwiLCAiX2EiLCAicmVzb2x2ZSIsICJjYWxsYmFjayIsICJyZXMiLCAib3BhcXVlIiwgInJlc29sdmUiLCAiYm9keSIsICJyZXNvbHZlIiwgInJlc29sdmUiLCAibW9ja0Rpc3BhdGNoIiwgInBhdGgiLCAicmVwbHlQYXJhbWV0ZXJzIiwgIm5ld01vY2tEaXNwYXRjaCIsICJwYXRoIiwgInJlcXVpcmVfZ2xvYmFsIiwgIl9hIiwgIm9wdHMiLCAiZXJyIiwgImV4aXN0cyIsICJkZWxpbWl0ZXIiLCAiSGVhZGVycyIsICJIZWFkZXJzIiwgInJlcXVpcmVfcmVxdWVzdCIsICJIZWFkZXJzIiwgIkZpbmFsaXphdGlvblJlZ2lzdHJ5IiwgIl9hIiwgInJlc29sdmUiLCAicmVxdWlyZV9zeW1ib2xzIiwgInJlcXVpcmVfdXRpbCIsICJTdHJpbmdEZWNvZGVyIiwgInR5cGUiLCAicmVxdWlyZV9zeW1ib2xzIiwgInJlcXVpcmVfdXRpbCIsICJyZXF1ZXN0IiwgImNhY2hlIiwgInJlcXVpcmVfY29uc3RhbnRzIiwgInJlcXVpcmVfdXRpbCIsICJwYXRoIiwgIkhlYWRlcnMiLCAiX2V2ZW50SW5pdCIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJyZXF1aXJlX3N5bWJvbHMiLCAicmVxdWlyZV91dGlsIiwgImNyeXB0byIsICJidWZmZXIiLCAiSGVhZGVycyIsICJjcnlwdG8iLCAiYm9keSIsICJub2RlIiwgInJlcXVpcmVfdXRpbCIsICJyZXNvbHZlIiwgIlByb3h5QWdlbnQiLCAicGF0aCIsICJvcyIsICJkZWxpbWl0ZXIiLCAiSHR0cENvZGVzIiwgIkhlYWRlcnMiLCAiTWVkaWFUeXBlcyIsICJpbXBvcnRfb3MiLCAib3MiLCAicGF0aCIsICJwYXRoIiwgImZzIiwgIklTX1dJTkRPV1MiLCAicmVzb2x2ZSIsICJfX2F3YWl0ZXIiLCAiX19hd2FpdGVyIiwgIm9zIiwgIkV4aXRDb2RlIl0KfQo= +main().catch((e) => { + console.error(e); + process.exitCode = 1; +}); diff --git a/github-actions/test-credentials.mjs b/github-actions/test-credentials.mjs new file mode 100644 index 0000000000..6afdcb52c3 --- /dev/null +++ b/github-actions/test-credentials.mjs @@ -0,0 +1,52 @@ +import fs from 'fs'; +import path from 'path'; + +const actionDirs = [ + 'github-actions/bazel/configure-remote', + 'github-actions/browserstack', + 'github-actions/saucelabs', +]; + +const root = process.cwd(); + +let pass = true; + +for (const dir of actionDirs) { + const full = path.join(root, dir); + const files = fs.readdirSync(full); + + for (const bad of ['gcp_token.data', 'browserstack_token.data', 'saucelabs_token.data', 'encrypt.ts']) { + if (files.includes(bad)) { + console.error(`FAIL: ${path.join(dir, bad)} should not exist`); + pass = false; + } + } + + const constants = path.join(full, 'constants.ts'); + if (fs.existsSync(constants)) { + const text = fs.readFileSync(constants, 'utf8'); + if (text.includes('export const k') || text.includes('export const iv') || text.includes('export const alg')) { + console.error(`FAIL: ${path.join(dir, 'constants.ts')} still exports crypto constants`); + pass = false; + } + } + + const jsFile = dir === 'github-actions/bazel/configure-remote' + ? 'configure-remote.js' + : dir === 'github-actions/browserstack' + ? 'set-browserstack-env.js' + : 'set-saucelabs-env.js'; + const jsPath = path.join(full, jsFile); + const jsText = fs.readFileSync(jsPath, 'utf8'); + if (!jsText.includes('process.env')) { + console.error(`FAIL: ${path.join(dir, jsFile)} does not read from process.env`); + pass = false; + } +} + +if (pass) { + console.log('All credential checks passed.'); + process.exit(0); +} else { + process.exit(1); +}