From 730e1206138eed4eda9d687f7c3d1e8bf1c24c95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E7=BB=99?= <2271007263A@gmail.com> Date: Tue, 20 Feb 2024 09:54:14 +0800 Subject: [PATCH 01/18] feat: add AjaxLogin and many dependencies --- README.md | 4 +- dist/AjaxLogin/AjaxLogin.js | 6948 +++++++++++ .../FilterAlteredClicks.js | 3831 ++++++ dist/InPageEdit/InPageEdit.js | 53 + dist/React/React.js | 10382 +++++++++++++++- dist/Toastify/Toastify.css | 225 + dist/Toastify/Toastify.js | 5005 ++++++++ dist/Util/Util.js | 8127 ++++++++++++ dist/definition.txt | 14 +- dist/i18n/i18n.js | 4712 +++++++ package.json | 8 + pnpm-lock.yaml | 71 +- src/AjaxLogin/AjaxLogin.ts | 33 + src/AjaxLogin/LICENSE | 8 + src/AjaxLogin/definition.json | 20 + src/AjaxLogin/modules/addListener.ts | 16 + src/AjaxLogin/modules/api.ts | 17 + src/AjaxLogin/modules/constant.ts | 3 + src/AjaxLogin/modules/core.tsx | 251 + src/AjaxLogin/modules/i18n.ts | 205 + src/AjaxLogin/modules/initWindowManager.ts | 7 + src/AjaxLogin/modules/util/checkValid.tsx | 66 + .../modules/util/generateElements.tsx | 80 + src/AjaxLogin/modules/util/oouiConfirm.ts | 15 + src/AjaxLogin/modules/util/oouiPrompt.tsx | 46 + src/AjaxLogin/modules/util/queryLoginToken.ts | 30 + .../modules/util/redirectOriginLoginPage.ts | 10 + .../modules/util/removeWindowResizeHandler.ts | 10 + src/AjaxLogin/modules/util/showError.ts | 17 + src/AjaxLogin/options.json | 4 + .../FilterAlteredClicks.ts | 1 + src/FilterAlteredClicks/LICENSE | 7 + src/FilterAlteredClicks/definition.json | 6 + src/FilterAlteredClicks/modules/global.d.ts | 3 + src/MwApiParams.d.ts | 37 + src/React/React.ts | 2 + src/React/definition.json | 6 + src/React/modules/global.d.ts | 4 + src/Toastify/LICENSE | 7 + src/Toastify/Toastify.ts | 43 + src/Toastify/definition.json | 6 + src/Toastify/modules/global.d.ts | 5 + src/Toastify/modules/types.d.ts | 13 + src/Toastify/style-modules/style.less | 87 + src/Util/LICENSE | 8 + src/Util/Util.ts | 10 + src/Util/definition.json | 7 + .../modules/addEventListenerWithRemover.ts | 56 + .../changeOpacityWhenMouseEnterOrLeave.ts | 7 + src/Util/modules/checkA11yConfirmKey.ts | 13 + src/Util/modules/delay.ts | 9 + src/Util/modules/generateSvgDataUrl.ts | 51 + src/Util/modules/getBody.ts | 11 + src/Util/modules/global.d.ts | 24 + src/Util/modules/initMwApi.ts | 28 + src/Util/modules/isValidKey.ts | 7 + src/Util/modules/oouiConfirmWithStyle.tsx | 37 + src/Util/modules/scrollTop.ts | 26 + src/global.d.ts | 16 + src/global.json | 236 + src/i18n/LICENSE | 8 + src/i18n/definition.json | 7 + src/i18n/i18n.ts | 66 + src/i18n/modules/constant.ts | 5 + src/i18n/modules/global.d.ts | 7 + src/i18n/modules/initI18nMethods.ts | 43 + src/i18n/modules/initShims.ts | 51 + src/i18n/modules/types.d.ts | 43 + .../util/generateDefaultFallbackList.ts | 30 + .../util/generateLanguageCodeSplitArray.ts | 9 + src/i18n/options.json | 14 + src/variables.less | 68 + 72 files changed, 41336 insertions(+), 6 deletions(-) create mode 100644 dist/AjaxLogin/AjaxLogin.js create mode 100644 dist/FilterAlteredClicks/FilterAlteredClicks.js create mode 100644 dist/InPageEdit/InPageEdit.js create mode 100644 dist/Toastify/Toastify.css create mode 100644 dist/Toastify/Toastify.js create mode 100644 dist/Util/Util.js create mode 100644 dist/i18n/i18n.js create mode 100644 src/AjaxLogin/AjaxLogin.ts create mode 100644 src/AjaxLogin/LICENSE create mode 100644 src/AjaxLogin/definition.json create mode 100644 src/AjaxLogin/modules/addListener.ts create mode 100644 src/AjaxLogin/modules/api.ts create mode 100644 src/AjaxLogin/modules/constant.ts create mode 100644 src/AjaxLogin/modules/core.tsx create mode 100644 src/AjaxLogin/modules/i18n.ts create mode 100644 src/AjaxLogin/modules/initWindowManager.ts create mode 100644 src/AjaxLogin/modules/util/checkValid.tsx create mode 100644 src/AjaxLogin/modules/util/generateElements.tsx create mode 100644 src/AjaxLogin/modules/util/oouiConfirm.ts create mode 100644 src/AjaxLogin/modules/util/oouiPrompt.tsx create mode 100644 src/AjaxLogin/modules/util/queryLoginToken.ts create mode 100644 src/AjaxLogin/modules/util/redirectOriginLoginPage.ts create mode 100644 src/AjaxLogin/modules/util/removeWindowResizeHandler.ts create mode 100644 src/AjaxLogin/modules/util/showError.ts create mode 100644 src/AjaxLogin/options.json create mode 100644 src/FilterAlteredClicks/FilterAlteredClicks.ts create mode 100644 src/FilterAlteredClicks/LICENSE create mode 100644 src/FilterAlteredClicks/definition.json create mode 100644 src/FilterAlteredClicks/modules/global.d.ts create mode 100644 src/MwApiParams.d.ts create mode 100644 src/React/React.ts create mode 100644 src/React/definition.json create mode 100644 src/React/modules/global.d.ts create mode 100644 src/Toastify/LICENSE create mode 100644 src/Toastify/Toastify.ts create mode 100644 src/Toastify/definition.json create mode 100644 src/Toastify/modules/global.d.ts create mode 100644 src/Toastify/modules/types.d.ts create mode 100644 src/Toastify/style-modules/style.less create mode 100644 src/Util/LICENSE create mode 100644 src/Util/Util.ts create mode 100644 src/Util/definition.json create mode 100644 src/Util/modules/addEventListenerWithRemover.ts create mode 100644 src/Util/modules/changeOpacityWhenMouseEnterOrLeave.ts create mode 100644 src/Util/modules/checkA11yConfirmKey.ts create mode 100644 src/Util/modules/delay.ts create mode 100644 src/Util/modules/generateSvgDataUrl.ts create mode 100644 src/Util/modules/getBody.ts create mode 100644 src/Util/modules/global.d.ts create mode 100644 src/Util/modules/initMwApi.ts create mode 100644 src/Util/modules/isValidKey.ts create mode 100644 src/Util/modules/oouiConfirmWithStyle.tsx create mode 100644 src/Util/modules/scrollTop.ts create mode 100644 src/global.d.ts create mode 100644 src/global.json create mode 100644 src/i18n/LICENSE create mode 100644 src/i18n/definition.json create mode 100644 src/i18n/i18n.ts create mode 100644 src/i18n/modules/constant.ts create mode 100644 src/i18n/modules/global.d.ts create mode 100644 src/i18n/modules/initI18nMethods.ts create mode 100644 src/i18n/modules/initShims.ts create mode 100644 src/i18n/modules/types.d.ts create mode 100644 src/i18n/modules/util/generateDefaultFallbackList.ts create mode 100644 src/i18n/modules/util/generateLanguageCodeSplitArray.ts create mode 100644 src/i18n/options.json create mode 100644 src/variables.less diff --git a/README.md b/README.md index ce061372..d68a3a4d 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,11 @@ # 有兽档案馆代码库 ## 概述 Brief + 本仓库为有兽档案馆的代码仓库,为网站小工具、用户js/css等核心代码提供协作与部署支持。 -## 底层支持 Base +## 底层支持 Base + 本小工具库是 [AnYiEE/AwsomeGadgets](https://github.com/AnYiEE/AwesomeGadgets) 的分支。 ### 简介 / Introduction diff --git a/dist/AjaxLogin/AjaxLogin.js b/dist/AjaxLogin/AjaxLogin.js new file mode 100644 index 00000000..60a67585 --- /dev/null +++ b/dist/AjaxLogin/AjaxLogin.js @@ -0,0 +1,6948 @@ +/** + * SPDX-License-Identifier: GPL-3.0-or-later + * _addText: '{{Gadget Header|license=GPL-3.0-or-later}}' + * + * @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/AjaxLogin} + * @author 安忆 + * @license GPL-3.0-or-later {@link https://www.qiuwenbaike.cn/wiki/H:GPL-3.0} + */ +/** + * +------------------------------------------------------------+ + * | === WARNING: GLOBAL GADGET FILE === | + * +------------------------------------------------------------+ + * | All changes should be made in the repository, | + * | otherwise they will be lost. | + * +------------------------------------------------------------+ + * | Changes to this page may affect many users. | + * | Please discuss changes by opening an issue before editing. | + * +------------------------------------------------------------+ + */ +/* */ + +(function() { + +"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __esm = function(fn, res) { + return function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; + }; +}; +var __commonJS = function(cb, mod) { + return function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; + }; +}; +var __copyProps = function(to, from, except, desc) { + if (from && typeof from === "object" || typeof from === "function") + for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) { + key = keys[i]; + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: function(k) { + return from[k]; + }.bind(null, key), enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = function(mod) { + return __copyProps(__defProp({}, "__esModule", { value: true }), mod); +}; + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/global.js +var require_global = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/global.js": function(exports, module2) { + "use strict"; + var check = function(it) { + return it && it.Math === Math && it; + }; + module2.exports = // eslint-disable-next-line es/no-global-this -- safe + check(typeof globalThis == "object" && globalThis) || check(typeof window == "object" && window) || // eslint-disable-next-line no-restricted-globals -- safe + check(typeof self == "object" && self) || check(typeof global == "object" && global) || check(typeof exports == "object" && exports) || // eslint-disable-next-line no-new-func -- fallback + /* @__PURE__ */ function() { + return this; + }() || Function("return this")(); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/fails.js +var require_fails = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/fails.js": function(exports, module2) { + "use strict"; + module2.exports = function(exec) { + try { + return !!exec(); + } catch (error) { + return true; + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/descriptors.js +var require_descriptors = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/descriptors.js": function(exports, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = !fails(function() { + return Object.defineProperty({}, 1, { get: function() { + return 7; + } })[1] !== 7; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-native.js +var require_function_bind_native = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-native.js": function(exports, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = !fails(function() { + var test = function() { + }.bind(); + return typeof test != "function" || test.hasOwnProperty("prototype"); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-call.js +var require_function_call = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-call.js": function(exports, module2) { + "use strict"; + var NATIVE_BIND = require_function_bind_native(); + var call = Function.prototype.call; + module2.exports = NATIVE_BIND ? call.bind(call) : function() { + return call.apply(call, arguments); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-property-is-enumerable.js +var require_object_property_is_enumerable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-property-is-enumerable.js": function(exports) { + "use strict"; + var $propertyIsEnumerable = {}.propertyIsEnumerable; + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1); + exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; + } : $propertyIsEnumerable; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property-descriptor.js +var require_create_property_descriptor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property-descriptor.js": function(exports, module2) { + "use strict"; + module2.exports = function(bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this.js +var require_function_uncurry_this = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this.js": function(exports, module2) { + "use strict"; + var NATIVE_BIND = require_function_bind_native(); + var FunctionPrototype = Function.prototype; + var call = FunctionPrototype.call; + var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call); + module2.exports = NATIVE_BIND ? uncurryThisWithBind : function(fn) { + return function() { + return call.apply(fn, arguments); + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof-raw.js +var require_classof_raw = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof-raw.js": function(exports, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toString = uncurryThis({}.toString); + var stringSlice = uncurryThis("".slice); + module2.exports = function(it) { + return stringSlice(toString(it), 8, -1); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/indexed-object.js +var require_indexed_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/indexed-object.js": function(exports, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var classof = require_classof_raw(); + var $Object = Object; + var split = uncurryThis("".split); + module2.exports = fails(function() { + return !$Object("z").propertyIsEnumerable(0); + }) ? function(it) { + return classof(it) === "String" ? split(it, "") : $Object(it); + } : $Object; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-null-or-undefined.js +var require_is_null_or_undefined = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-null-or-undefined.js": function(exports, module2) { + "use strict"; + module2.exports = function(it) { + return it === null || it === void 0; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/require-object-coercible.js +var require_require_object_coercible = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/require-object-coercible.js": function(exports, module2) { + "use strict"; + var isNullOrUndefined = require_is_null_or_undefined(); + var $TypeError = TypeError; + module2.exports = function(it) { + if (isNullOrUndefined(it)) + throw new $TypeError("Can't call method on " + it); + return it; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-indexed-object.js +var require_to_indexed_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-indexed-object.js": function(exports, module2) { + "use strict"; + var IndexedObject = require_indexed_object(); + var requireObjectCoercible = require_require_object_coercible(); + module2.exports = function(it) { + return IndexedObject(requireObjectCoercible(it)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-callable.js +var require_is_callable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-callable.js": function(exports, module2) { + "use strict"; + var documentAll = typeof document == "object" && document.all; + module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { + return typeof argument == "function" || argument === documentAll; + } : function(argument) { + return typeof argument == "function"; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-object.js +var require_is_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-object.js": function(exports, module2) { + "use strict"; + var isCallable = require_is_callable(); + module2.exports = function(it) { + return typeof it == "object" ? it !== null : isCallable(it); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-built-in.js +var require_get_built_in = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-built-in.js": function(exports, module2) { + "use strict"; + var global2 = require_global(); + var isCallable = require_is_callable(); + var aFunction = function(argument) { + return isCallable(argument) ? argument : void 0; + }; + module2.exports = function(namespace, method) { + return arguments.length < 2 ? aFunction(global2[namespace]) : global2[namespace] && global2[namespace][method]; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-is-prototype-of.js +var require_object_is_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-is-prototype-of.js": function(exports, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + module2.exports = uncurryThis({}.isPrototypeOf); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-user-agent.js +var require_engine_user_agent = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-user-agent.js": function(exports, module2) { + "use strict"; + module2.exports = typeof navigator != "undefined" && String(navigator.userAgent) || ""; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-v8-version.js +var require_engine_v8_version = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-v8-version.js": function(exports, module2) { + "use strict"; + var global2 = require_global(); + var userAgent = require_engine_user_agent(); + var process = global2.process; + var Deno2 = global2.Deno; + var versions = process && process.versions || Deno2 && Deno2.version; + var v8 = versions && versions.v8; + var match; + var version2; + if (v8) { + match = v8.split("."); + version2 = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); + } + if (!version2 && userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) + version2 = +match[1]; + } + } + module2.exports = version2; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-constructor-detection.js +var require_symbol_constructor_detection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-constructor-detection.js": function(exports, module2) { + "use strict"; + var V8_VERSION = require_engine_v8_version(); + var fails = require_fails(); + var global2 = require_global(); + var $String = global2.String; + module2.exports = !!Object.getOwnPropertySymbols && !fails(function() { + var symbol = Symbol("symbol detection"); + return !$String(symbol) || !(Object(symbol) instanceof Symbol) || // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances + !Symbol.sham && V8_VERSION && V8_VERSION < 41; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/use-symbol-as-uid.js +var require_use_symbol_as_uid = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/use-symbol-as-uid.js": function(exports, module2) { + "use strict"; + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-symbol.js +var require_is_symbol = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-symbol.js": function(exports, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var isCallable = require_is_callable(); + var isPrototypeOf = require_object_is_prototype_of(); + var USE_SYMBOL_AS_UID = require_use_symbol_as_uid(); + var $Object = Object; + module2.exports = USE_SYMBOL_AS_UID ? function(it) { + return typeof it == "symbol"; + } : function(it) { + var $Symbol = getBuiltIn("Symbol"); + return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/try-to-string.js +var require_try_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/try-to-string.js": function(exports, module2) { + "use strict"; + var $String = String; + module2.exports = function(argument) { + try { + return $String(argument); + } catch (error) { + return "Object"; + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-callable.js +var require_a_callable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-callable.js": function(exports, module2) { + "use strict"; + var isCallable = require_is_callable(); + var tryToString = require_try_to_string(); + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isCallable(argument)) + return argument; + throw new $TypeError(tryToString(argument) + " is not a function"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-method.js +var require_get_method = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-method.js": function(exports, module2) { + "use strict"; + var aCallable = require_a_callable(); + var isNullOrUndefined = require_is_null_or_undefined(); + module2.exports = function(V, P) { + var func = V[P]; + return isNullOrUndefined(func) ? void 0 : aCallable(func); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ordinary-to-primitive.js +var require_ordinary_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ordinary-to-primitive.js": function(exports, module2) { + "use strict"; + var call = require_function_call(); + var isCallable = require_is_callable(); + var isObject = require_is_object(); + var $TypeError = TypeError; + module2.exports = function(input, pref) { + var fn, val; + if (pref === "string" && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) + return val; + if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) + return val; + if (pref !== "string" && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) + return val; + throw new $TypeError("Can't convert object to primitive value"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-pure.js +var require_is_pure = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-pure.js": function(exports, module2) { + "use strict"; + module2.exports = false; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-global-property.js +var require_define_global_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-global-property.js": function(exports, module2) { + "use strict"; + var global2 = require_global(); + var defineProperty = Object.defineProperty; + module2.exports = function(key, value) { + try { + defineProperty(global2, key, { value: value, configurable: true, writable: true }); + } catch (error) { + global2[key] = value; + } + return value; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-store.js +var require_shared_store = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-store.js": function(exports, module2) { + "use strict"; + var IS_PURE = require_is_pure(); + var globalThis2 = require_global(); + var defineGlobalProperty = require_define_global_property(); + var SHARED = "__core-js_shared__"; + var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); + (store.versions || (store.versions = [])).push({ + version: "3.36.0", + mode: IS_PURE ? "pure" : "global", + copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", + license: "https://github.com/zloirock/core-js/blob/v3.36.0/LICENSE", + source: "https://github.com/zloirock/core-js" + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared.js +var require_shared = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared.js": function(exports, module2) { + "use strict"; + var store = require_shared_store(); + module2.exports = function(key, value) { + return store[key] || (store[key] = value || {}); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-object.js +var require_to_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-object.js": function(exports, module2) { + "use strict"; + var requireObjectCoercible = require_require_object_coercible(); + var $Object = Object; + module2.exports = function(argument) { + return $Object(requireObjectCoercible(argument)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/has-own-property.js +var require_has_own_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/has-own-property.js": function(exports, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toObject = require_to_object(); + var hasOwnProperty = uncurryThis({}.hasOwnProperty); + module2.exports = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty(toObject(it), key); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/uid.js +var require_uid = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/uid.js": function(exports, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var id = 0; + var postfix = Math.random(); + var toString = uncurryThis(1 .toString); + module2.exports = function(key) { + return "Symbol(" + (key === void 0 ? "" : key) + ")_" + toString(++id + postfix, 36); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol.js +var require_well_known_symbol = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol.js": function(exports, module2) { + "use strict"; + var global2 = require_global(); + var shared = require_shared(); + var hasOwn = require_has_own_property(); + var uid = require_uid(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var USE_SYMBOL_AS_UID = require_use_symbol_as_uid(); + var Symbol2 = global2.Symbol; + var WellKnownSymbolsStore = shared("wks"); + var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol2["for"] || Symbol2 : Symbol2 && Symbol2.withoutSetter || uid; + module2.exports = function(name) { + if (!hasOwn(WellKnownSymbolsStore, name)) { + WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol2, name) ? Symbol2[name] : createWellKnownSymbol("Symbol." + name); + } + return WellKnownSymbolsStore[name]; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-primitive.js +var require_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-primitive.js": function(exports, module2) { + "use strict"; + var call = require_function_call(); + var isObject = require_is_object(); + var isSymbol = require_is_symbol(); + var getMethod = require_get_method(); + var ordinaryToPrimitive = require_ordinary_to_primitive(); + var wellKnownSymbol = require_well_known_symbol(); + var $TypeError = TypeError; + var TO_PRIMITIVE = wellKnownSymbol("toPrimitive"); + module2.exports = function(input, pref) { + if (!isObject(input) || isSymbol(input)) + return input; + var exoticToPrim = getMethod(input, TO_PRIMITIVE); + var result; + if (exoticToPrim) { + if (pref === void 0) + pref = "default"; + result = call(exoticToPrim, input, pref); + if (!isObject(result) || isSymbol(result)) + return result; + throw new $TypeError("Can't convert object to primitive value"); + } + if (pref === void 0) + pref = "number"; + return ordinaryToPrimitive(input, pref); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-property-key.js +var require_to_property_key = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-property-key.js": function(exports, module2) { + "use strict"; + var toPrimitive = require_to_primitive(); + var isSymbol = require_is_symbol(); + module2.exports = function(argument) { + var key = toPrimitive(argument, "string"); + return isSymbol(key) ? key : key + ""; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/document-create-element.js +var require_document_create_element = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/document-create-element.js": function(exports, module2) { + "use strict"; + var global2 = require_global(); + var isObject = require_is_object(); + var document2 = global2.document; + var EXISTS = isObject(document2) && isObject(document2.createElement); + module2.exports = function(it) { + return EXISTS ? document2.createElement(it) : {}; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ie8-dom-define.js +var require_ie8_dom_define = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ie8-dom-define.js": function(exports, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var fails = require_fails(); + var createElement = require_document_create_element(); + module2.exports = !DESCRIPTORS && !fails(function() { + return Object.defineProperty(createElement("div"), "a", { + get: function() { + return 7; + } + }).a !== 7; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +var require_object_get_own_property_descriptor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-descriptor.js": function(exports) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var call = require_function_call(); + var propertyIsEnumerableModule = require_object_property_is_enumerable(); + var createPropertyDescriptor = require_create_property_descriptor(); + var toIndexedObject = require_to_indexed_object(); + var toPropertyKey = require_to_property_key(); + var hasOwn = require_has_own_property(); + var IE8_DOM_DEFINE = require_ie8_dom_define(); + var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPropertyKey(P); + if (IE8_DOM_DEFINE) + try { + return $getOwnPropertyDescriptor(O, P); + } catch (error) { + } + if (hasOwn(O, P)) + return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/v8-prototype-define-bug.js +var require_v8_prototype_define_bug = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/v8-prototype-define-bug.js": function(exports, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var fails = require_fails(); + module2.exports = DESCRIPTORS && fails(function() { + return Object.defineProperty(function() { + }, "prototype", { + value: 42, + writable: false + }).prototype !== 42; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/an-object.js +var require_an_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/an-object.js": function(exports, module2) { + "use strict"; + var isObject = require_is_object(); + var $String = String; + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isObject(argument)) + return argument; + throw new $TypeError($String(argument) + " is not an object"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-property.js +var require_object_define_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-property.js": function(exports) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var IE8_DOM_DEFINE = require_ie8_dom_define(); + var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug(); + var anObject = require_an_object(); + var toPropertyKey = require_to_property_key(); + var $TypeError = TypeError; + var $defineProperty = Object.defineProperty; + var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var ENUMERABLE = "enumerable"; + var CONFIGURABLE = "configurable"; + var WRITABLE = "writable"; + exports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (typeof O === "function" && P === "prototype" && "value" in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { + var current = $getOwnPropertyDescriptor(O, P); + if (current && current[WRITABLE]) { + O[P] = Attributes.value; + Attributes = { + configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE], + enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], + writable: false + }; + } + } + return $defineProperty(O, P, Attributes); + } : $defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (IE8_DOM_DEFINE) + try { + return $defineProperty(O, P, Attributes); + } catch (error) { + } + if ("get" in Attributes || "set" in Attributes) + throw new $TypeError("Accessors not supported"); + if ("value" in Attributes) + O[P] = Attributes.value; + return O; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-non-enumerable-property.js +var require_create_non_enumerable_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-non-enumerable-property.js": function(exports, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var definePropertyModule = require_object_define_property(); + var createPropertyDescriptor = require_create_property_descriptor(); + module2.exports = DESCRIPTORS ? function(object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); + } : function(object, key, value) { + object[key] = value; + return object; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-name.js +var require_function_name = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-name.js": function(exports, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var hasOwn = require_has_own_property(); + var FunctionPrototype = Function.prototype; + var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor; + var EXISTS = hasOwn(FunctionPrototype, "name"); + var PROPER = EXISTS && function something() { + }.name === "something"; + var CONFIGURABLE = EXISTS && (!DESCRIPTORS || DESCRIPTORS && getDescriptor(FunctionPrototype, "name").configurable); + module2.exports = { + EXISTS: EXISTS, + PROPER: PROPER, + CONFIGURABLE: CONFIGURABLE + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inspect-source.js +var require_inspect_source = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inspect-source.js": function(exports, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var isCallable = require_is_callable(); + var store = require_shared_store(); + var functionToString = uncurryThis(Function.toString); + if (!isCallable(store.inspectSource)) { + store.inspectSource = function(it) { + return functionToString(it); + }; + } + module2.exports = store.inspectSource; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/weak-map-basic-detection.js +var require_weak_map_basic_detection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/weak-map-basic-detection.js": function(exports, module2) { + "use strict"; + var global2 = require_global(); + var isCallable = require_is_callable(); + var WeakMap = global2.WeakMap; + module2.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap)); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-key.js +var require_shared_key = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-key.js": function(exports, module2) { + "use strict"; + var shared = require_shared(); + var uid = require_uid(); + var keys = shared("keys"); + module2.exports = function(key) { + return keys[key] || (keys[key] = uid(key)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/hidden-keys.js +var require_hidden_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/hidden-keys.js": function(exports, module2) { + "use strict"; + module2.exports = {}; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/internal-state.js +var require_internal_state = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/internal-state.js": function(exports, module2) { + "use strict"; + var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); + var global2 = require_global(); + var isObject = require_is_object(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var hasOwn = require_has_own_property(); + var shared = require_shared_store(); + var sharedKey = require_shared_key(); + var hiddenKeys = require_hidden_keys(); + var OBJECT_ALREADY_INITIALIZED = "Object already initialized"; + var TypeError2 = global2.TypeError; + var WeakMap = global2.WeakMap; + var set; + var get; + var has; + var enforce = function(it) { + return has(it) ? get(it) : set(it, {}); + }; + var getterFor = function(TYPE) { + return function(it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw new TypeError2("Incompatible receiver, " + TYPE + " required"); + } + return state; + }; + }; + if (NATIVE_WEAK_MAP || shared.state) { + store = shared.state || (shared.state = new WeakMap()); + store.get = store.get; + store.has = store.has; + store.set = store.set; + set = function(it, metadata) { + if (store.has(it)) + throw new TypeError2(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + store.set(it, metadata); + return metadata; + }; + get = function(it) { + return store.get(it) || {}; + }; + has = function(it) { + return store.has(it); + }; + } else { + STATE = sharedKey("state"); + hiddenKeys[STATE] = true; + set = function(it, metadata) { + if (hasOwn(it, STATE)) + throw new TypeError2(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function(it) { + return hasOwn(it, STATE) ? it[STATE] : {}; + }; + has = function(it) { + return hasOwn(it, STATE); + }; + } + var store; + var STATE; + module2.exports = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/make-built-in.js +var require_make_built_in = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/make-built-in.js": function(exports, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var isCallable = require_is_callable(); + var hasOwn = require_has_own_property(); + var DESCRIPTORS = require_descriptors(); + var CONFIGURABLE_FUNCTION_NAME = require_function_name().CONFIGURABLE; + var inspectSource = require_inspect_source(); + var InternalStateModule = require_internal_state(); + var enforceInternalState = InternalStateModule.enforce; + var getInternalState = InternalStateModule.get; + var $String = String; + var defineProperty = Object.defineProperty; + var stringSlice = uncurryThis("".slice); + var replace = uncurryThis("".replace); + var join = uncurryThis([].join); + var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function() { + return defineProperty(function() { + }, "length", { value: 8 }).length !== 8; + }); + var TEMPLATE = String(String).split("String"); + var makeBuiltIn = module2.exports = function(value, name, options) { + if (stringSlice($String(name), 0, 7) === "Symbol(") { + name = "[" + replace($String(name), /^Symbol\(([^)]*)\).*$/, "$1") + "]"; + } + if (options && options.getter) + name = "get " + name; + if (options && options.setter) + name = "set " + name; + if (!hasOwn(value, "name") || CONFIGURABLE_FUNCTION_NAME && value.name !== name) { + if (DESCRIPTORS) + defineProperty(value, "name", { value: name, configurable: true }); + else + value.name = name; + } + if (CONFIGURABLE_LENGTH && options && hasOwn(options, "arity") && value.length !== options.arity) { + defineProperty(value, "length", { value: options.arity }); + } + try { + if (options && hasOwn(options, "constructor") && options.constructor) { + if (DESCRIPTORS) + defineProperty(value, "prototype", { writable: false }); + } else if (value.prototype) + value.prototype = void 0; + } catch (error) { + } + var state = enforceInternalState(value); + if (!hasOwn(state, "source")) { + state.source = join(TEMPLATE, typeof name == "string" ? name : ""); + } + return value; + }; + Function.prototype.toString = makeBuiltIn(function toString() { + return isCallable(this) && getInternalState(this).source || inspectSource(this); + }, "toString"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in.js +var require_define_built_in = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in.js": function(exports, module2) { + "use strict"; + var isCallable = require_is_callable(); + var definePropertyModule = require_object_define_property(); + var makeBuiltIn = require_make_built_in(); + var defineGlobalProperty = require_define_global_property(); + module2.exports = function(O, key, value, options) { + if (!options) + options = {}; + var simple = options.enumerable; + var name = options.name !== void 0 ? options.name : key; + if (isCallable(value)) + makeBuiltIn(value, name, options); + if (options.global) { + if (simple) + O[key] = value; + else + defineGlobalProperty(key, value); + } else { + try { + if (!options.unsafe) + delete O[key]; + else if (O[key]) + simple = true; + } catch (error) { + } + if (simple) + O[key] = value; + else + definePropertyModule.f(O, key, { + value: value, + enumerable: false, + configurable: !options.nonConfigurable, + writable: !options.nonWritable + }); + } + return O; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/math-trunc.js +var require_math_trunc = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/math-trunc.js": function(exports, module2) { + "use strict"; + var ceil = Math.ceil; + var floor = Math.floor; + module2.exports = Math.trunc || function trunc(x) { + var n = +x; + return (n > 0 ? floor : ceil)(n); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-integer-or-infinity.js +var require_to_integer_or_infinity = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-integer-or-infinity.js": function(exports, module2) { + "use strict"; + var trunc = require_math_trunc(); + module2.exports = function(argument) { + var number = +argument; + return number !== number || number === 0 ? 0 : trunc(number); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-absolute-index.js +var require_to_absolute_index = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-absolute-index.js": function(exports, module2) { + "use strict"; + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var max = Math.max; + var min = Math.min; + module2.exports = function(index, length) { + var integer = toIntegerOrInfinity(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-length.js +var require_to_length = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-length.js": function(exports, module2) { + "use strict"; + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var min = Math.min; + module2.exports = function(argument) { + var len = toIntegerOrInfinity(argument); + return len > 0 ? min(len, 9007199254740991) : 0; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/length-of-array-like.js +var require_length_of_array_like = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/length-of-array-like.js": function(exports, module2) { + "use strict"; + var toLength = require_to_length(); + module2.exports = function(obj) { + return toLength(obj.length); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-includes.js +var require_array_includes = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-includes.js": function(exports, module2) { + "use strict"; + var toIndexedObject = require_to_indexed_object(); + var toAbsoluteIndex = require_to_absolute_index(); + var lengthOfArrayLike = require_length_of_array_like(); + var createMethod = function(IS_INCLUDES) { + return function($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = lengthOfArrayLike(O); + if (length === 0) + return !IS_INCLUDES && -1; + var index = toAbsoluteIndex(fromIndex, length); + var value; + if (IS_INCLUDES && el !== el) + while (length > index) { + value = O[index++]; + if (value !== value) + return true; + } + else + for (; length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) + return IS_INCLUDES || index || 0; + } + return !IS_INCLUDES && -1; + }; + }; + module2.exports = { + // `Array.prototype.includes` method + // https://tc39.es/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys-internal.js +var require_object_keys_internal = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys-internal.js": function(exports, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var hasOwn = require_has_own_property(); + var toIndexedObject = require_to_indexed_object(); + var indexOf = require_array_includes().indexOf; + var hiddenKeys = require_hidden_keys(); + var push = uncurryThis([].push); + module2.exports = function(object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) + !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key); + while (names.length > i) + if (hasOwn(O, key = names[i++])) { + ~indexOf(result, key) || push(result, key); + } + return result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/enum-bug-keys.js +var require_enum_bug_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/enum-bug-keys.js": function(exports, module2) { + "use strict"; + module2.exports = [ + "constructor", + "hasOwnProperty", + "isPrototypeOf", + "propertyIsEnumerable", + "toLocaleString", + "toString", + "valueOf" + ]; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names.js +var require_object_get_own_property_names = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names.js": function(exports) { + "use strict"; + var internalObjectKeys = require_object_keys_internal(); + var enumBugKeys = require_enum_bug_keys(); + var hiddenKeys = enumBugKeys.concat("length", "prototype"); + exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-symbols.js +var require_object_get_own_property_symbols = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-symbols.js": function(exports) { + "use strict"; + exports.f = Object.getOwnPropertySymbols; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/own-keys.js +var require_own_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/own-keys.js": function(exports, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var uncurryThis = require_function_uncurry_this(); + var getOwnPropertyNamesModule = require_object_get_own_property_names(); + var getOwnPropertySymbolsModule = require_object_get_own_property_symbols(); + var anObject = require_an_object(); + var concat = uncurryThis([].concat); + module2.exports = getBuiltIn("Reflect", "ownKeys") || function ownKeys(it) { + var keys = getOwnPropertyNamesModule.f(anObject(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/copy-constructor-properties.js +var require_copy_constructor_properties = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/copy-constructor-properties.js": function(exports, module2) { + "use strict"; + var hasOwn = require_has_own_property(); + var ownKeys = require_own_keys(); + var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor(); + var definePropertyModule = require_object_define_property(); + module2.exports = function(target, source, exceptions) { + var keys = ownKeys(source); + var defineProperty = definePropertyModule.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) { + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-forced.js +var require_is_forced = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-forced.js": function(exports, module2) { + "use strict"; + var fails = require_fails(); + var isCallable = require_is_callable(); + var replacement = /#|\.prototype\./; + var isForced = function(feature, detection) { + var value = data[normalize(feature)]; + return value === POLYFILL ? true : value === NATIVE ? false : isCallable(detection) ? fails(detection) : !!detection; + }; + var normalize = isForced.normalize = function(string) { + return String(string).replace(replacement, ".").toLowerCase(); + }; + var data = isForced.data = {}; + var NATIVE = isForced.NATIVE = "N"; + var POLYFILL = isForced.POLYFILL = "P"; + module2.exports = isForced; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/export.js +var require_export = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/export.js": function(exports, module2) { + "use strict"; + var global2 = require_global(); + var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var defineBuiltIn = require_define_built_in(); + var defineGlobalProperty = require_define_global_property(); + var copyConstructorProperties = require_copy_constructor_properties(); + var isForced = require_is_forced(); + module2.exports = function(options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global2; + } else if (STATIC) { + target = global2[TARGET] || defineGlobalProperty(TARGET, {}); + } else { + target = global2[TARGET] && global2[TARGET].prototype; + } + if (target) + for (key in source) { + sourceProperty = source[key]; + if (options.dontCallGetSet) { + descriptor = getOwnPropertyDescriptor(target, key); + targetProperty = descriptor && descriptor.value; + } else + targetProperty = target[key]; + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? "." : "#") + key, options.forced); + if (!FORCED && targetProperty !== void 0) { + if (typeof sourceProperty == typeof targetProperty) + continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + if (options.sham || targetProperty && targetProperty.sham) { + createNonEnumerableProperty(sourceProperty, "sham", true); + } + defineBuiltIn(target, key, sourceProperty, options); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string-tag-support.js +var require_to_string_tag_support = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string-tag-support.js": function(exports, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + var test = {}; + test[TO_STRING_TAG] = "z"; + module2.exports = String(test) === "[object z]"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof.js +var require_classof = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof.js": function(exports, module2) { + "use strict"; + var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); + var isCallable = require_is_callable(); + var classofRaw = require_classof_raw(); + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + var $Object = Object; + var CORRECT_ARGUMENTS = classofRaw(/* @__PURE__ */ function() { + return arguments; + }()) === "Arguments"; + var tryGet = function(it, key) { + try { + return it[key]; + } catch (error) { + } + }; + module2.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function(it) { + var O, tag, result; + return it === void 0 ? "Undefined" : it === null ? "Null" : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == "string" ? tag : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) === "Object" && isCallable(O.callee) ? "Arguments" : result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string.js +var require_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string.js": function(exports, module2) { + "use strict"; + var classof = require_classof(); + var $String = String; + module2.exports = function(argument) { + if (classof(argument) === "Symbol") + throw new TypeError("Cannot convert a Symbol value to a string"); + return $String(argument); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys.js +var require_object_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys.js": function(exports, module2) { + "use strict"; + var internalObjectKeys = require_object_keys_internal(); + var enumBugKeys = require_enum_bug_keys(); + module2.exports = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-properties.js +var require_object_define_properties = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-properties.js": function(exports) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug(); + var definePropertyModule = require_object_define_property(); + var anObject = require_an_object(); + var toIndexedObject = require_to_indexed_object(); + var objectKeys = require_object_keys(); + exports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var props = toIndexedObject(Properties); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) + definePropertyModule.f(O, key = keys[index++], props[key]); + return O; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/html.js +var require_html = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/html.js": function(exports, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + module2.exports = getBuiltIn("document", "documentElement"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-create.js +var require_object_create = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-create.js": function(exports, module2) { + "use strict"; + var anObject = require_an_object(); + var definePropertiesModule = require_object_define_properties(); + var enumBugKeys = require_enum_bug_keys(); + var hiddenKeys = require_hidden_keys(); + var html = require_html(); + var documentCreateElement = require_document_create_element(); + var sharedKey = require_shared_key(); + var GT = ">"; + var LT = "<"; + var PROTOTYPE = "prototype"; + var SCRIPT = "script"; + var IE_PROTO = sharedKey("IE_PROTO"); + var EmptyConstructor = function() { + }; + var scriptTag = function(content) { + return LT + SCRIPT + GT + content + LT + "/" + SCRIPT + GT; + }; + var NullProtoObjectViaActiveX = function(activeXDocument2) { + activeXDocument2.write(scriptTag("")); + activeXDocument2.close(); + var temp = activeXDocument2.parentWindow.Object; + activeXDocument2 = null; + return temp; + }; + var NullProtoObjectViaIFrame = function() { + var iframe = documentCreateElement("iframe"); + var JS = "java" + SCRIPT + ":"; + var iframeDocument; + iframe.style.display = "none"; + html.appendChild(iframe); + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag("document.F=Object")); + iframeDocument.close(); + return iframeDocument.F; + }; + var activeXDocument; + var NullProtoObject = function() { + try { + activeXDocument = new ActiveXObject("htmlfile"); + } catch (error) { + } + NullProtoObject = typeof document != "undefined" ? document.domain && activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame() : NullProtoObjectViaActiveX(activeXDocument); + var length = enumBugKeys.length; + while (length--) + delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); + }; + hiddenKeys[IE_PROTO] = true; + module2.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + result[IE_PROTO] = O; + } else + result = NullProtoObject(); + return Properties === void 0 ? result : definePropertiesModule.f(result, Properties); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-slice.js +var require_array_slice = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-slice.js": function(exports, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + module2.exports = uncurryThis([].slice); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names-external.js +var require_object_get_own_property_names_external = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names-external.js": function(exports, module2) { + "use strict"; + var classof = require_classof_raw(); + var toIndexedObject = require_to_indexed_object(); + var $getOwnPropertyNames = require_object_get_own_property_names().f; + var arraySlice = require_array_slice(); + var windowNames = typeof window == "object" && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : []; + var getWindowNames = function(it) { + try { + return $getOwnPropertyNames(it); + } catch (error) { + return arraySlice(windowNames); + } + }; + module2.exports.f = function getOwnPropertyNames(it) { + return windowNames && classof(it) === "Window" ? getWindowNames(it) : $getOwnPropertyNames(toIndexedObject(it)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in-accessor.js +var require_define_built_in_accessor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in-accessor.js": function(exports, module2) { + "use strict"; + var makeBuiltIn = require_make_built_in(); + var defineProperty = require_object_define_property(); + module2.exports = function(target, name, descriptor) { + if (descriptor.get) + makeBuiltIn(descriptor.get, name, { getter: true }); + if (descriptor.set) + makeBuiltIn(descriptor.set, name, { setter: true }); + return defineProperty.f(target, name, descriptor); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-wrapped.js +var require_well_known_symbol_wrapped = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-wrapped.js": function(exports) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + exports.f = wellKnownSymbol; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/path.js +var require_path = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/path.js": function(exports, module2) { + "use strict"; + var global2 = require_global(); + module2.exports = global2; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-define.js +var require_well_known_symbol_define = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-define.js": function(exports, module2) { + "use strict"; + var path = require_path(); + var hasOwn = require_has_own_property(); + var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped(); + var defineProperty = require_object_define_property().f; + module2.exports = function(NAME) { + var Symbol2 = path.Symbol || (path.Symbol = {}); + if (!hasOwn(Symbol2, NAME)) + defineProperty(Symbol2, NAME, { + value: wrappedWellKnownSymbolModule.f(NAME) + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-define-to-primitive.js +var require_symbol_define_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-define-to-primitive.js": function(exports, module2) { + "use strict"; + var call = require_function_call(); + var getBuiltIn = require_get_built_in(); + var wellKnownSymbol = require_well_known_symbol(); + var defineBuiltIn = require_define_built_in(); + module2.exports = function() { + var Symbol2 = getBuiltIn("Symbol"); + var SymbolPrototype = Symbol2 && Symbol2.prototype; + var valueOf = SymbolPrototype && SymbolPrototype.valueOf; + var TO_PRIMITIVE = wellKnownSymbol("toPrimitive"); + if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) { + defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function(hint) { + return call(valueOf, this); + }, { arity: 1 }); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/set-to-string-tag.js +var require_set_to_string_tag = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/set-to-string-tag.js": function(exports, module2) { + "use strict"; + var defineProperty = require_object_define_property().f; + var hasOwn = require_has_own_property(); + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + module2.exports = function(target, TAG, STATIC) { + if (target && !STATIC) + target = target.prototype; + if (target && !hasOwn(target, TO_STRING_TAG)) { + defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG }); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-clause.js +var require_function_uncurry_this_clause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-clause.js": function(exports, module2) { + "use strict"; + var classofRaw = require_classof_raw(); + var uncurryThis = require_function_uncurry_this(); + module2.exports = function(fn) { + if (classofRaw(fn) === "Function") + return uncurryThis(fn); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-context.js +var require_function_bind_context = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-context.js": function(exports, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this_clause(); + var aCallable = require_a_callable(); + var NATIVE_BIND = require_function_bind_native(); + var bind = uncurryThis(uncurryThis.bind); + module2.exports = function(fn, that) { + aCallable(fn); + return that === void 0 ? fn : NATIVE_BIND ? bind(fn, that) : function() { + return fn.apply(that, arguments); + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array.js +var require_is_array = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array.js": function(exports, module2) { + "use strict"; + var classof = require_classof_raw(); + module2.exports = Array.isArray || function isArray(argument) { + return classof(argument) === "Array"; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-constructor.js +var require_is_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-constructor.js": function(exports, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var isCallable = require_is_callable(); + var classof = require_classof(); + var getBuiltIn = require_get_built_in(); + var inspectSource = require_inspect_source(); + var noop = function() { + }; + var construct = getBuiltIn("Reflect", "construct"); + var constructorRegExp = /^\s*(?:class|function)\b/; + var exec = uncurryThis(constructorRegExp.exec); + var INCORRECT_TO_STRING = !constructorRegExp.test(noop); + var isConstructorModern = function isConstructor(argument) { + if (!isCallable(argument)) + return false; + try { + construct(noop, [], argument); + return true; + } catch (error) { + return false; + } + }; + var isConstructorLegacy = function isConstructor(argument) { + if (!isCallable(argument)) + return false; + switch (classof(argument)) { + case "AsyncFunction": + case "GeneratorFunction": + case "AsyncGeneratorFunction": + return false; + } + try { + return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument)); + } catch (error) { + return true; + } + }; + isConstructorLegacy.sham = true; + module2.exports = !construct || fails(function() { + var called; + return isConstructorModern(isConstructorModern.call) || !isConstructorModern(Object) || !isConstructorModern(function() { + called = true; + }) || called; + }) ? isConstructorLegacy : isConstructorModern; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-constructor.js +var require_array_species_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-constructor.js": function(exports, module2) { + "use strict"; + var isArray = require_is_array(); + var isConstructor = require_is_constructor(); + var isObject = require_is_object(); + var wellKnownSymbol = require_well_known_symbol(); + var SPECIES = wellKnownSymbol("species"); + var $Array = Array; + module2.exports = function(originalArray) { + var C; + if (isArray(originalArray)) { + C = originalArray.constructor; + if (isConstructor(C) && (C === $Array || isArray(C.prototype))) + C = void 0; + else if (isObject(C)) { + C = C[SPECIES]; + if (C === null) + C = void 0; + } + } + return C === void 0 ? $Array : C; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-create.js +var require_array_species_create = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-create.js": function(exports, module2) { + "use strict"; + var arraySpeciesConstructor = require_array_species_constructor(); + module2.exports = function(originalArray, length) { + return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-iteration.js +var require_array_iteration = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-iteration.js": function(exports, module2) { + "use strict"; + var bind = require_function_bind_context(); + var uncurryThis = require_function_uncurry_this(); + var IndexedObject = require_indexed_object(); + var toObject = require_to_object(); + var lengthOfArrayLike = require_length_of_array_like(); + var arraySpeciesCreate = require_array_species_create(); + var push = uncurryThis([].push); + var createMethod = function(TYPE) { + var IS_MAP = TYPE === 1; + var IS_FILTER = TYPE === 2; + var IS_SOME = TYPE === 3; + var IS_EVERY = TYPE === 4; + var IS_FIND_INDEX = TYPE === 6; + var IS_FILTER_REJECT = TYPE === 7; + var NO_HOLES = TYPE === 5 || IS_FIND_INDEX; + return function($this, callbackfn, that, specificCreate) { + var O = toObject($this); + var self2 = IndexedObject(O); + var length = lengthOfArrayLike(self2); + var boundFunction = bind(callbackfn, that); + var index = 0; + var create = specificCreate || arraySpeciesCreate; + var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : void 0; + var value, result; + for (; length > index; index++) + if (NO_HOLES || index in self2) { + value = self2[index]; + result = boundFunction(value, index, O); + if (TYPE) { + if (IS_MAP) + target[index] = result; + else if (result) + switch (TYPE) { + case 3: + return true; + case 5: + return value; + case 6: + return index; + case 2: + push(target, value); + } + else + switch (TYPE) { + case 4: + return false; + case 7: + push(target, value); + } + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; + }; + module2.exports = { + // `Array.prototype.forEach` method + // https://tc39.es/ecma262/#sec-array.prototype.foreach + forEach: createMethod(0), + // `Array.prototype.map` method + // https://tc39.es/ecma262/#sec-array.prototype.map + map: createMethod(1), + // `Array.prototype.filter` method + // https://tc39.es/ecma262/#sec-array.prototype.filter + filter: createMethod(2), + // `Array.prototype.some` method + // https://tc39.es/ecma262/#sec-array.prototype.some + some: createMethod(3), + // `Array.prototype.every` method + // https://tc39.es/ecma262/#sec-array.prototype.every + every: createMethod(4), + // `Array.prototype.find` method + // https://tc39.es/ecma262/#sec-array.prototype.find + find: createMethod(5), + // `Array.prototype.findIndex` method + // https://tc39.es/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod(6), + // `Array.prototype.filterReject` method + // https://github.com/tc39/proposal-array-filtering + filterReject: createMethod(7) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.constructor.js +var require_es_symbol_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.constructor.js": function() { + "use strict"; + var $2 = require_export(); + var global2 = require_global(); + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var IS_PURE = require_is_pure(); + var DESCRIPTORS = require_descriptors(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var fails = require_fails(); + var hasOwn = require_has_own_property(); + var isPrototypeOf = require_object_is_prototype_of(); + var anObject = require_an_object(); + var toIndexedObject = require_to_indexed_object(); + var toPropertyKey = require_to_property_key(); + var $toString = require_to_string(); + var createPropertyDescriptor = require_create_property_descriptor(); + var nativeObjectCreate = require_object_create(); + var objectKeys = require_object_keys(); + var getOwnPropertyNamesModule = require_object_get_own_property_names(); + var getOwnPropertyNamesExternal = require_object_get_own_property_names_external(); + var getOwnPropertySymbolsModule = require_object_get_own_property_symbols(); + var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor(); + var definePropertyModule = require_object_define_property(); + var definePropertiesModule = require_object_define_properties(); + var propertyIsEnumerableModule = require_object_property_is_enumerable(); + var defineBuiltIn = require_define_built_in(); + var defineBuiltInAccessor = require_define_built_in_accessor(); + var shared = require_shared(); + var sharedKey = require_shared_key(); + var hiddenKeys = require_hidden_keys(); + var uid = require_uid(); + var wellKnownSymbol = require_well_known_symbol(); + var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped(); + var defineWellKnownSymbol = require_well_known_symbol_define(); + var defineSymbolToPrimitive = require_symbol_define_to_primitive(); + var setToStringTag = require_set_to_string_tag(); + var InternalStateModule = require_internal_state(); + var $forEach = require_array_iteration().forEach; + var HIDDEN = sharedKey("hidden"); + var SYMBOL = "Symbol"; + var PROTOTYPE = "prototype"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(SYMBOL); + var ObjectPrototype = Object[PROTOTYPE]; + var $Symbol = global2.Symbol; + var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE]; + var RangeError = global2.RangeError; + var TypeError2 = global2.TypeError; + var QObject = global2.QObject; + var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + var nativeDefineProperty = definePropertyModule.f; + var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f; + var nativePropertyIsEnumerable = propertyIsEnumerableModule.f; + var push = uncurryThis([].push); + var AllSymbols = shared("symbols"); + var ObjectPrototypeSymbols = shared("op-symbols"); + var WellKnownSymbolsStore = shared("wks"); + var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; + var fallbackDefineProperty = function(O, P, Attributes) { + var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P); + if (ObjectPrototypeDescriptor) + delete ObjectPrototype[P]; + nativeDefineProperty(O, P, Attributes); + if (ObjectPrototypeDescriptor && O !== ObjectPrototype) { + nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor); + } + }; + var setSymbolDescriptor = DESCRIPTORS && fails(function() { + return nativeObjectCreate(nativeDefineProperty({}, "a", { + get: function() { + return nativeDefineProperty(this, "a", { value: 7 }).a; + } + })).a !== 7; + }) ? fallbackDefineProperty : nativeDefineProperty; + var wrap = function(tag, description) { + var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype); + setInternalState(symbol, { + type: SYMBOL, + tag: tag, + description: description + }); + if (!DESCRIPTORS) + symbol.description = description; + return symbol; + }; + var $defineProperty = function defineProperty(O, P, Attributes) { + if (O === ObjectPrototype) + $defineProperty(ObjectPrototypeSymbols, P, Attributes); + anObject(O); + var key = toPropertyKey(P); + anObject(Attributes); + if (hasOwn(AllSymbols, key)) { + if (!Attributes.enumerable) { + if (!hasOwn(O, HIDDEN)) + nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, nativeObjectCreate(null))); + O[HIDDEN][key] = true; + } else { + if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) + O[HIDDEN][key] = false; + Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) }); + } + return setSymbolDescriptor(O, key, Attributes); + } + return nativeDefineProperty(O, key, Attributes); + }; + var $defineProperties = function defineProperties(O, Properties) { + anObject(O); + var properties = toIndexedObject(Properties); + var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties)); + $forEach(keys, function(key) { + if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) + $defineProperty(O, key, properties[key]); + }); + return O; + }; + var $create = function create(O, Properties) { + return Properties === void 0 ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties); + }; + var $propertyIsEnumerable = function propertyIsEnumerable(V) { + var P = toPropertyKey(V); + var enumerable = call(nativePropertyIsEnumerable, this, P); + if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) + return false; + return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true; + }; + var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) { + var it = toIndexedObject(O); + var key = toPropertyKey(P); + if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) + return; + var descriptor = nativeGetOwnPropertyDescriptor(it, key); + if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) { + descriptor.enumerable = true; + } + return descriptor; + }; + var $getOwnPropertyNames = function getOwnPropertyNames(O) { + var names = nativeGetOwnPropertyNames(toIndexedObject(O)); + var result = []; + $forEach(names, function(key) { + if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) + push(result, key); + }); + return result; + }; + var $getOwnPropertySymbols = function(O) { + var IS_OBJECT_PROTOTYPE = O === ObjectPrototype; + var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O)); + var result = []; + $forEach(names, function(key) { + if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) { + push(result, AllSymbols[key]); + } + }); + return result; + }; + if (!NATIVE_SYMBOL) { + $Symbol = function Symbol2() { + if (isPrototypeOf(SymbolPrototype, this)) + throw new TypeError2("Symbol is not a constructor"); + var description = !arguments.length || arguments[0] === void 0 ? void 0 : $toString(arguments[0]); + var tag = uid(description); + var setter = function(value) { + var $this = this === void 0 ? global2 : this; + if ($this === ObjectPrototype) + call(setter, ObjectPrototypeSymbols, value); + if (hasOwn($this, HIDDEN) && hasOwn($this[HIDDEN], tag)) + $this[HIDDEN][tag] = false; + var descriptor = createPropertyDescriptor(1, value); + try { + setSymbolDescriptor($this, tag, descriptor); + } catch (error) { + if (!(error instanceof RangeError)) + throw error; + fallbackDefineProperty($this, tag, descriptor); + } + }; + if (DESCRIPTORS && USE_SETTER) + setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter }); + return wrap(tag, description); + }; + SymbolPrototype = $Symbol[PROTOTYPE]; + defineBuiltIn(SymbolPrototype, "toString", function toString() { + return getInternalState(this).tag; + }); + defineBuiltIn($Symbol, "withoutSetter", function(description) { + return wrap(uid(description), description); + }); + propertyIsEnumerableModule.f = $propertyIsEnumerable; + definePropertyModule.f = $defineProperty; + definePropertiesModule.f = $defineProperties; + getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor; + getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames; + getOwnPropertySymbolsModule.f = $getOwnPropertySymbols; + wrappedWellKnownSymbolModule.f = function(name) { + return wrap(wellKnownSymbol(name), name); + }; + if (DESCRIPTORS) { + defineBuiltInAccessor(SymbolPrototype, "description", { + configurable: true, + get: function description() { + return getInternalState(this).description; + } + }); + if (!IS_PURE) { + defineBuiltIn(ObjectPrototype, "propertyIsEnumerable", $propertyIsEnumerable, { unsafe: true }); + } + } + } + $2({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, { + Symbol: $Symbol + }); + $forEach(objectKeys(WellKnownSymbolsStore), function(name) { + defineWellKnownSymbol(name); + }); + $2({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, { + useSetter: function() { + USE_SETTER = true; + }, + useSimple: function() { + USE_SETTER = false; + } + }); + $2({ target: "Object", stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, { + // `Object.create` method + // https://tc39.es/ecma262/#sec-object.create + create: $create, + // `Object.defineProperty` method + // https://tc39.es/ecma262/#sec-object.defineproperty + defineProperty: $defineProperty, + // `Object.defineProperties` method + // https://tc39.es/ecma262/#sec-object.defineproperties + defineProperties: $defineProperties, + // `Object.getOwnPropertyDescriptor` method + // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors + getOwnPropertyDescriptor: $getOwnPropertyDescriptor + }); + $2({ target: "Object", stat: true, forced: !NATIVE_SYMBOL }, { + // `Object.getOwnPropertyNames` method + // https://tc39.es/ecma262/#sec-object.getownpropertynames + getOwnPropertyNames: $getOwnPropertyNames + }); + defineSymbolToPrimitive(); + setToStringTag($Symbol, SYMBOL); + hiddenKeys[HIDDEN] = true; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-registry-detection.js +var require_symbol_registry_detection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-registry-detection.js": function(exports, module2) { + "use strict"; + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + module2.exports = NATIVE_SYMBOL && !!Symbol["for"] && !!Symbol.keyFor; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.for.js +var require_es_symbol_for = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.for.js": function() { + "use strict"; + var $2 = require_export(); + var getBuiltIn = require_get_built_in(); + var hasOwn = require_has_own_property(); + var toString = require_to_string(); + var shared = require_shared(); + var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection(); + var StringToSymbolRegistry = shared("string-to-symbol-registry"); + var SymbolToStringRegistry = shared("symbol-to-string-registry"); + $2({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, { + "for": function(key) { + var string = toString(key); + if (hasOwn(StringToSymbolRegistry, string)) + return StringToSymbolRegistry[string]; + var symbol = getBuiltIn("Symbol")(string); + StringToSymbolRegistry[string] = symbol; + SymbolToStringRegistry[symbol] = string; + return symbol; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.key-for.js +var require_es_symbol_key_for = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.key-for.js": function() { + "use strict"; + var $2 = require_export(); + var hasOwn = require_has_own_property(); + var isSymbol = require_is_symbol(); + var tryToString = require_try_to_string(); + var shared = require_shared(); + var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection(); + var SymbolToStringRegistry = shared("symbol-to-string-registry"); + $2({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, { + keyFor: function keyFor(sym) { + if (!isSymbol(sym)) + throw new TypeError(tryToString(sym) + " is not a symbol"); + if (hasOwn(SymbolToStringRegistry, sym)) + return SymbolToStringRegistry[sym]; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-apply.js +var require_function_apply = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-apply.js": function(exports, module2) { + "use strict"; + var NATIVE_BIND = require_function_bind_native(); + var FunctionPrototype = Function.prototype; + var apply = FunctionPrototype.apply; + var call = FunctionPrototype.call; + module2.exports = typeof Reflect == "object" && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function() { + return call.apply(apply, arguments); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-json-replacer-function.js +var require_get_json_replacer_function = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-json-replacer-function.js": function(exports, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var isArray = require_is_array(); + var isCallable = require_is_callable(); + var classof = require_classof_raw(); + var toString = require_to_string(); + var push = uncurryThis([].push); + module2.exports = function(replacer) { + if (isCallable(replacer)) + return replacer; + if (!isArray(replacer)) + return; + var rawLength = replacer.length; + var keys = []; + for (var i = 0; i < rawLength; i++) { + var element = replacer[i]; + if (typeof element == "string") + push(keys, element); + else if (typeof element == "number" || classof(element) === "Number" || classof(element) === "String") + push(keys, toString(element)); + } + var keysLength = keys.length; + var root = true; + return function(key, value) { + if (root) { + root = false; + return value; + } + if (isArray(this)) + return value; + for (var j = 0; j < keysLength; j++) + if (keys[j] === key) + return value; + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.json.stringify.js +var require_es_json_stringify = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.json.stringify.js": function() { + "use strict"; + var $2 = require_export(); + var getBuiltIn = require_get_built_in(); + var apply = require_function_apply(); + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var isCallable = require_is_callable(); + var isSymbol = require_is_symbol(); + var arraySlice = require_array_slice(); + var getReplacerFunction = require_get_json_replacer_function(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var $String = String; + var $stringify = getBuiltIn("JSON", "stringify"); + var exec = uncurryThis(/./.exec); + var charAt = uncurryThis("".charAt); + var charCodeAt = uncurryThis("".charCodeAt); + var replace = uncurryThis("".replace); + var numberToString = uncurryThis(1 .toString); + var tester = /[\uD800-\uDFFF]/g; + var low = /^[\uD800-\uDBFF]$/; + var hi = /^[\uDC00-\uDFFF]$/; + var WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function() { + var symbol = getBuiltIn("Symbol")("stringify detection"); + return $stringify([symbol]) !== "[null]" || $stringify({ a: symbol }) !== "{}" || $stringify(Object(symbol)) !== "{}"; + }); + var ILL_FORMED_UNICODE = fails(function() { + return $stringify("\uDF06\uD834") !== '"\\udf06\\ud834"' || $stringify("\uDEAD") !== '"\\udead"'; + }); + var stringifyWithSymbolsFix = function(it, replacer) { + var args = arraySlice(arguments); + var $replacer = getReplacerFunction(replacer); + if (!isCallable($replacer) && (it === void 0 || isSymbol(it))) + return; + args[1] = function(key, value) { + if (isCallable($replacer)) + value = call($replacer, this, $String(key), value); + if (!isSymbol(value)) + return value; + }; + return apply($stringify, null, args); + }; + var fixIllFormed = function(match, offset, string) { + var prev = charAt(string, offset - 1); + var next = charAt(string, offset + 1); + if (exec(low, match) && !exec(hi, next) || exec(hi, match) && !exec(low, prev)) { + return "\\u" + numberToString(charCodeAt(match, 0), 16); + } + return match; + }; + if ($stringify) { + $2({ target: "JSON", stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + stringify: function stringify(it, replacer, space) { + var args = arraySlice(arguments); + var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args); + return ILL_FORMED_UNICODE && typeof result == "string" ? replace(result, tester, fixIllFormed) : result; + } + }); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-symbols.js +var require_es_object_get_own_property_symbols = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-symbols.js": function() { + "use strict"; + var $2 = require_export(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var fails = require_fails(); + var getOwnPropertySymbolsModule = require_object_get_own_property_symbols(); + var toObject = require_to_object(); + var FORCED = !NATIVE_SYMBOL || fails(function() { + getOwnPropertySymbolsModule.f(1); + }); + $2({ target: "Object", stat: true, forced: FORCED }, { + getOwnPropertySymbols: function getOwnPropertySymbols(it) { + var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : []; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.js +var require_es_symbol = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.js": function() { + "use strict"; + require_es_symbol_constructor(); + require_es_symbol_for(); + require_es_symbol_key_for(); + require_es_json_stringify(); + require_es_object_get_own_property_symbols(); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.description.js +var require_es_symbol_description = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.description.js": function() { + "use strict"; + var $2 = require_export(); + var DESCRIPTORS = require_descriptors(); + var global2 = require_global(); + var uncurryThis = require_function_uncurry_this(); + var hasOwn = require_has_own_property(); + var isCallable = require_is_callable(); + var isPrototypeOf = require_object_is_prototype_of(); + var toString = require_to_string(); + var defineBuiltInAccessor = require_define_built_in_accessor(); + var copyConstructorProperties = require_copy_constructor_properties(); + var NativeSymbol = global2.Symbol; + var SymbolPrototype = NativeSymbol && NativeSymbol.prototype; + if (DESCRIPTORS && isCallable(NativeSymbol) && (!("description" in SymbolPrototype) || // Safari 12 bug + NativeSymbol().description !== void 0)) { + EmptyStringDescriptionStore = {}; + SymbolWrapper = function Symbol2() { + var description = arguments.length < 1 || arguments[0] === void 0 ? void 0 : toString(arguments[0]); + var result = isPrototypeOf(SymbolPrototype, this) ? new NativeSymbol(description) : description === void 0 ? NativeSymbol() : NativeSymbol(description); + if (description === "") + EmptyStringDescriptionStore[result] = true; + return result; + }; + copyConstructorProperties(SymbolWrapper, NativeSymbol); + SymbolWrapper.prototype = SymbolPrototype; + SymbolPrototype.constructor = SymbolWrapper; + NATIVE_SYMBOL = String(NativeSymbol("description detection")) === "Symbol(description detection)"; + thisSymbolValue = uncurryThis(SymbolPrototype.valueOf); + symbolDescriptiveString = uncurryThis(SymbolPrototype.toString); + regexp = /^Symbol\((.*)\)[^)]+$/; + replace = uncurryThis("".replace); + stringSlice = uncurryThis("".slice); + defineBuiltInAccessor(SymbolPrototype, "description", { + configurable: true, + get: function description() { + var symbol = thisSymbolValue(this); + if (hasOwn(EmptyStringDescriptionStore, symbol)) + return ""; + var string = symbolDescriptiveString(symbol); + var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, "$1"); + return desc === "" ? void 0 : desc; + } + }); + $2({ global: true, constructor: true, forced: true }, { + Symbol: SymbolWrapper + }); + } + var EmptyStringDescriptionStore; + var SymbolWrapper; + var NATIVE_SYMBOL; + var thisSymbolValue; + var symbolDescriptiveString; + var regexp; + var replace; + var stringSlice; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.async-iterator.js +var require_es_symbol_async_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.async-iterator.js": function() { + "use strict"; + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("asyncIterator"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.iterator.js +var require_es_symbol_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.iterator.js": function() { + "use strict"; + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("iterator"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.to-string-tag.js +var require_es_symbol_to_string_tag = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.to-string-tag.js": function() { + "use strict"; + var getBuiltIn = require_get_built_in(); + var defineWellKnownSymbol = require_well_known_symbol_define(); + var setToStringTag = require_set_to_string_tag(); + defineWellKnownSymbol("toStringTag"); + setToStringTag(getBuiltIn("Symbol"), "Symbol"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-accessor.js +var require_function_uncurry_this_accessor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-accessor.js": function(exports, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var aCallable = require_a_callable(); + module2.exports = function(object, key, method) { + try { + return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method])); + } catch (error) { + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-possible-prototype.js +var require_is_possible_prototype = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-possible-prototype.js": function(exports, module2) { + "use strict"; + var isObject = require_is_object(); + module2.exports = function(argument) { + return isObject(argument) || argument === null; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-possible-prototype.js +var require_a_possible_prototype = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-possible-prototype.js": function(exports, module2) { + "use strict"; + var isPossiblePrototype = require_is_possible_prototype(); + var $String = String; + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isPossiblePrototype(argument)) + return argument; + throw new $TypeError("Can't set " + $String(argument) + " as a prototype"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-set-prototype-of.js +var require_object_set_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-set-prototype-of.js": function(exports, module2) { + "use strict"; + var uncurryThisAccessor = require_function_uncurry_this_accessor(); + var anObject = require_an_object(); + var aPossiblePrototype = require_a_possible_prototype(); + module2.exports = Object.setPrototypeOf || ("__proto__" in {} ? function() { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = uncurryThisAccessor(Object.prototype, "__proto__", "set"); + setter(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { + } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) + setter(O, proto); + else + O.__proto__ = proto; + return O; + }; + }() : void 0); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/proxy-accessor.js +var require_proxy_accessor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/proxy-accessor.js": function(exports, module2) { + "use strict"; + var defineProperty = require_object_define_property().f; + module2.exports = function(Target, Source, key) { + key in Target || defineProperty(Target, key, { + configurable: true, + get: function() { + return Source[key]; + }, + set: function(it) { + Source[key] = it; + } + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inherit-if-required.js +var require_inherit_if_required = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inherit-if-required.js": function(exports, module2) { + "use strict"; + var isCallable = require_is_callable(); + var isObject = require_is_object(); + var setPrototypeOf = require_object_set_prototype_of(); + module2.exports = function($this, dummy, Wrapper) { + var NewTarget, NewTargetPrototype; + if ( + // it can work only with native `setPrototypeOf` + setPrototypeOf && // we haven't completely correct pre-ES6 way for getting `new.target`, so use this + isCallable(NewTarget = dummy.constructor) && NewTarget !== Wrapper && isObject(NewTargetPrototype = NewTarget.prototype) && NewTargetPrototype !== Wrapper.prototype + ) + setPrototypeOf($this, NewTargetPrototype); + return $this; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/normalize-string-argument.js +var require_normalize_string_argument = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/normalize-string-argument.js": function(exports, module2) { + "use strict"; + var toString = require_to_string(); + module2.exports = function(argument, $default) { + return argument === void 0 ? arguments.length < 2 ? "" : $default : toString(argument); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/install-error-cause.js +var require_install_error_cause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/install-error-cause.js": function(exports, module2) { + "use strict"; + var isObject = require_is_object(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + module2.exports = function(O, options) { + if (isObject(options) && "cause" in options) { + createNonEnumerableProperty(O, "cause", options.cause); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-clear.js +var require_error_stack_clear = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-clear.js": function(exports, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var $Error = Error; + var replace = uncurryThis("".replace); + var TEST = function(arg) { + return String(new $Error(arg).stack); + }("zxcasd"); + var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/; + var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST); + module2.exports = function(stack, dropEntries) { + if (IS_V8_OR_CHAKRA_STACK && typeof stack == "string" && !$Error.prepareStackTrace) { + while (dropEntries--) + stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, ""); + } + return stack; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-installable.js +var require_error_stack_installable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-installable.js": function(exports, module2) { + "use strict"; + var fails = require_fails(); + var createPropertyDescriptor = require_create_property_descriptor(); + module2.exports = !fails(function() { + var error = new Error("a"); + if (!("stack" in error)) + return true; + Object.defineProperty(error, "stack", createPropertyDescriptor(1, 7)); + return error.stack !== 7; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-install.js +var require_error_stack_install = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-install.js": function(exports, module2) { + "use strict"; + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var clearErrorStack = require_error_stack_clear(); + var ERROR_STACK_INSTALLABLE = require_error_stack_installable(); + var captureStackTrace = Error.captureStackTrace; + module2.exports = function(error, C, stack, dropEntries) { + if (ERROR_STACK_INSTALLABLE) { + if (captureStackTrace) + captureStackTrace(error, C); + else + createNonEnumerableProperty(error, "stack", clearErrorStack(stack, dropEntries)); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/wrap-error-constructor-with-cause.js +var require_wrap_error_constructor_with_cause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/wrap-error-constructor-with-cause.js": function(exports, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var hasOwn = require_has_own_property(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var isPrototypeOf = require_object_is_prototype_of(); + var setPrototypeOf = require_object_set_prototype_of(); + var copyConstructorProperties = require_copy_constructor_properties(); + var proxyAccessor = require_proxy_accessor(); + var inheritIfRequired = require_inherit_if_required(); + var normalizeStringArgument = require_normalize_string_argument(); + var installErrorCause = require_install_error_cause(); + var installErrorStack = require_error_stack_install(); + var DESCRIPTORS = require_descriptors(); + var IS_PURE = require_is_pure(); + module2.exports = function(FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) { + var STACK_TRACE_LIMIT = "stackTraceLimit"; + var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1; + var path = FULL_NAME.split("."); + var ERROR_NAME = path[path.length - 1]; + var OriginalError = getBuiltIn.apply(null, path); + if (!OriginalError) + return; + var OriginalErrorPrototype = OriginalError.prototype; + if (!IS_PURE && hasOwn(OriginalErrorPrototype, "cause")) + delete OriginalErrorPrototype.cause; + if (!FORCED) + return OriginalError; + var BaseError = getBuiltIn("Error"); + var WrappedError = wrapper(function(a, b) { + var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, void 0); + var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError(); + if (message !== void 0) + createNonEnumerableProperty(result, "message", message); + installErrorStack(result, WrappedError, result.stack, 2); + if (this && isPrototypeOf(OriginalErrorPrototype, this)) + inheritIfRequired(result, this, WrappedError); + if (arguments.length > OPTIONS_POSITION) + installErrorCause(result, arguments[OPTIONS_POSITION]); + return result; + }); + WrappedError.prototype = OriginalErrorPrototype; + if (ERROR_NAME !== "Error") { + if (setPrototypeOf) + setPrototypeOf(WrappedError, BaseError); + else + copyConstructorProperties(WrappedError, BaseError, { name: true }); + } else if (DESCRIPTORS && STACK_TRACE_LIMIT in OriginalError) { + proxyAccessor(WrappedError, OriginalError, STACK_TRACE_LIMIT); + proxyAccessor(WrappedError, OriginalError, "prepareStackTrace"); + } + copyConstructorProperties(WrappedError, OriginalError); + if (!IS_PURE) + try { + if (OriginalErrorPrototype.name !== ERROR_NAME) { + createNonEnumerableProperty(OriginalErrorPrototype, "name", ERROR_NAME); + } + OriginalErrorPrototype.constructor = WrappedError; + } catch (error) { + } + return WrappedError; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.cause.js +var require_es_error_cause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.cause.js": function() { + "use strict"; + var $2 = require_export(); + var global2 = require_global(); + var apply = require_function_apply(); + var wrapErrorConstructorWithCause = require_wrap_error_constructor_with_cause(); + var WEB_ASSEMBLY = "WebAssembly"; + var WebAssembly = global2[WEB_ASSEMBLY]; + var FORCED = new Error("e", { cause: 7 }).cause !== 7; + var exportGlobalErrorCauseWrapper = function(ERROR_NAME, wrapper) { + var O = {}; + O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED); + $2({ global: true, constructor: true, arity: 1, forced: FORCED }, O); + }; + var exportWebAssemblyErrorCauseWrapper = function(ERROR_NAME, wrapper) { + if (WebAssembly && WebAssembly[ERROR_NAME]) { + var O = {}; + O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + "." + ERROR_NAME, wrapper, FORCED); + $2({ target: WEB_ASSEMBLY, stat: true, constructor: true, arity: 1, forced: FORCED }, O); + } + }; + exportGlobalErrorCauseWrapper("Error", function(init) { + return function Error2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("EvalError", function(init) { + return function EvalError(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("RangeError", function(init) { + return function RangeError(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("ReferenceError", function(init) { + return function ReferenceError2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("SyntaxError", function(init) { + return function SyntaxError2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("TypeError", function(init) { + return function TypeError2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("URIError", function(init) { + return function URIError(message) { + return apply(init, this, arguments); + }; + }); + exportWebAssemblyErrorCauseWrapper("CompileError", function(init) { + return function CompileError(message) { + return apply(init, this, arguments); + }; + }); + exportWebAssemblyErrorCauseWrapper("LinkError", function(init) { + return function LinkError(message) { + return apply(init, this, arguments); + }; + }); + exportWebAssemblyErrorCauseWrapper("RuntimeError", function(init) { + return function RuntimeError(message) { + return apply(init, this, arguments); + }; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-to-string.js +var require_error_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-to-string.js": function(exports, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var fails = require_fails(); + var anObject = require_an_object(); + var normalizeStringArgument = require_normalize_string_argument(); + var nativeErrorToString = Error.prototype.toString; + var INCORRECT_TO_STRING = fails(function() { + if (DESCRIPTORS) { + var object = Object.create(Object.defineProperty({}, "name", { get: function() { + return this === object; + } })); + if (nativeErrorToString.call(object) !== "true") + return true; + } + return nativeErrorToString.call({ message: 1, name: 2 }) !== "2: 1" || nativeErrorToString.call({}) !== "Error"; + }); + module2.exports = INCORRECT_TO_STRING ? function toString() { + var O = anObject(this); + var name = normalizeStringArgument(O.name, "Error"); + var message = normalizeStringArgument(O.message); + return !name ? message : !message ? name : name + ": " + message; + } : nativeErrorToString; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.to-string.js +var require_es_error_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.to-string.js": function() { + "use strict"; + var defineBuiltIn = require_define_built_in(); + var errorToString = require_error_to_string(); + var ErrorPrototype = Error.prototype; + if (ErrorPrototype.toString !== errorToString) { + defineBuiltIn(ErrorPrototype, "toString", errorToString); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-method-is-strict.js +var require_array_method_is_strict = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-method-is-strict.js": function(exports, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = function(METHOD_NAME, argument) { + var method = [][METHOD_NAME]; + return !!method && fails(function() { + method.call(null, argument || function() { + return 1; + }, 1); + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-for-each.js +var require_array_for_each = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-for-each.js": function(exports, module2) { + "use strict"; + var $forEach = require_array_iteration().forEach; + var arrayMethodIsStrict = require_array_method_is_strict(); + var STRICT_METHOD = arrayMethodIsStrict("forEach"); + module2.exports = !STRICT_METHOD ? function forEach(callbackfn) { + return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0); + } : [].forEach; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.for-each.js +var require_es_array_for_each = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.for-each.js": function() { + "use strict"; + var $2 = require_export(); + var forEach = require_array_for_each(); + $2({ target: "Array", proto: true, forced: [].forEach !== forEach }, { + forEach: forEach + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-close.js +var require_iterator_close = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-close.js": function(exports, module2) { + "use strict"; + var call = require_function_call(); + var anObject = require_an_object(); + var getMethod = require_get_method(); + module2.exports = function(iterator, kind, value) { + var innerResult, innerError; + anObject(iterator); + try { + innerResult = getMethod(iterator, "return"); + if (!innerResult) { + if (kind === "throw") + throw value; + return value; + } + innerResult = call(innerResult, iterator); + } catch (error) { + innerError = true; + innerResult = error; + } + if (kind === "throw") + throw value; + if (innerError) + throw innerResult; + anObject(innerResult); + return value; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/call-with-safe-iteration-closing.js +var require_call_with_safe_iteration_closing = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/call-with-safe-iteration-closing.js": function(exports, module2) { + "use strict"; + var anObject = require_an_object(); + var iteratorClose = require_iterator_close(); + module2.exports = function(iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); + } catch (error) { + iteratorClose(iterator, "throw", error); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators.js +var require_iterators = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators.js": function(exports, module2) { + "use strict"; + module2.exports = {}; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array-iterator-method.js +var require_is_array_iterator_method = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array-iterator-method.js": function(exports, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var Iterators = require_iterators(); + var ITERATOR = wellKnownSymbol("iterator"); + var ArrayPrototype = Array.prototype; + module2.exports = function(it) { + return it !== void 0 && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property.js +var require_create_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property.js": function(exports, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var definePropertyModule = require_object_define_property(); + var createPropertyDescriptor = require_create_property_descriptor(); + module2.exports = function(object, key, value) { + if (DESCRIPTORS) + definePropertyModule.f(object, key, createPropertyDescriptor(0, value)); + else + object[key] = value; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator-method.js +var require_get_iterator_method = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator-method.js": function(exports, module2) { + "use strict"; + var classof = require_classof(); + var getMethod = require_get_method(); + var isNullOrUndefined = require_is_null_or_undefined(); + var Iterators = require_iterators(); + var wellKnownSymbol = require_well_known_symbol(); + var ITERATOR = wellKnownSymbol("iterator"); + module2.exports = function(it) { + if (!isNullOrUndefined(it)) + return getMethod(it, ITERATOR) || getMethod(it, "@@iterator") || Iterators[classof(it)]; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator.js +var require_get_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator.js": function(exports, module2) { + "use strict"; + var call = require_function_call(); + var aCallable = require_a_callable(); + var anObject = require_an_object(); + var tryToString = require_try_to_string(); + var getIteratorMethod = require_get_iterator_method(); + var $TypeError = TypeError; + module2.exports = function(argument, usingIterator) { + var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator; + if (aCallable(iteratorMethod)) + return anObject(call(iteratorMethod, argument)); + throw new $TypeError(tryToString(argument) + " is not iterable"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-from.js +var require_array_from = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-from.js": function(exports, module2) { + "use strict"; + var bind = require_function_bind_context(); + var call = require_function_call(); + var toObject = require_to_object(); + var callWithSafeIterationClosing = require_call_with_safe_iteration_closing(); + var isArrayIteratorMethod = require_is_array_iterator_method(); + var isConstructor = require_is_constructor(); + var lengthOfArrayLike = require_length_of_array_like(); + var createProperty = require_create_property(); + var getIterator = require_get_iterator(); + var getIteratorMethod = require_get_iterator_method(); + var $Array = Array; + module2.exports = function from(arrayLike) { + var O = toObject(arrayLike); + var IS_CONSTRUCTOR = isConstructor(this); + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : void 0; + var mapping = mapfn !== void 0; + if (mapping) + mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : void 0); + var iteratorMethod = getIteratorMethod(O); + var index = 0; + var length, result, step, iterator, next, value; + if (iteratorMethod && !(this === $Array && isArrayIteratorMethod(iteratorMethod))) { + iterator = getIterator(O, iteratorMethod); + next = iterator.next; + result = IS_CONSTRUCTOR ? new this() : []; + for (; !(step = call(next, iterator)).done; index++) { + value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value; + createProperty(result, index, value); + } + } else { + length = lengthOfArrayLike(O); + result = IS_CONSTRUCTOR ? new this(length) : $Array(length); + for (; length > index; index++) { + value = mapping ? mapfn(O[index], index) : O[index]; + createProperty(result, index, value); + } + } + result.length = index; + return result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/check-correctness-of-iteration.js +var require_check_correctness_of_iteration = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/check-correctness-of-iteration.js": function(exports, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var ITERATOR = wellKnownSymbol("iterator"); + var SAFE_CLOSING = false; + try { + called = 0; + iteratorWithReturn = { + next: function() { + return { done: !!called++ }; + }, + "return": function() { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function() { + return this; + }; + Array.from(iteratorWithReturn, function() { + throw 2; + }); + } catch (error) { + } + var called; + var iteratorWithReturn; + module2.exports = function(exec, SKIP_CLOSING) { + try { + if (!SKIP_CLOSING && !SAFE_CLOSING) + return false; + } catch (error) { + return false; + } + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function() { + return { + next: function() { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { + } + return ITERATION_SUPPORT; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.from.js +var require_es_array_from = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.from.js": function() { + "use strict"; + var $2 = require_export(); + var from = require_array_from(); + var checkCorrectnessOfIteration = require_check_correctness_of_iteration(); + var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function(iterable) { + Array.from(iterable); + }); + $2({ target: "Array", stat: true, forced: INCORRECT_ITERATION }, { + from: from + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/add-to-unscopables.js +var require_add_to_unscopables = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/add-to-unscopables.js": function(exports, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var create = require_object_create(); + var defineProperty = require_object_define_property().f; + var UNSCOPABLES = wellKnownSymbol("unscopables"); + var ArrayPrototype = Array.prototype; + if (ArrayPrototype[UNSCOPABLES] === void 0) { + defineProperty(ArrayPrototype, UNSCOPABLES, { + configurable: true, + value: create(null) + }); + } + module2.exports = function(key) { + ArrayPrototype[UNSCOPABLES][key] = true; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/correct-prototype-getter.js +var require_correct_prototype_getter = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/correct-prototype-getter.js": function(exports, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = !fails(function() { + function F() { + } + F.prototype.constructor = null; + return Object.getPrototypeOf(new F()) !== F.prototype; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-prototype-of.js +var require_object_get_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-prototype-of.js": function(exports, module2) { + "use strict"; + var hasOwn = require_has_own_property(); + var isCallable = require_is_callable(); + var toObject = require_to_object(); + var sharedKey = require_shared_key(); + var CORRECT_PROTOTYPE_GETTER = require_correct_prototype_getter(); + var IE_PROTO = sharedKey("IE_PROTO"); + var $Object = Object; + var ObjectPrototype = $Object.prototype; + module2.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function(O) { + var object = toObject(O); + if (hasOwn(object, IE_PROTO)) + return object[IE_PROTO]; + var constructor = object.constructor; + if (isCallable(constructor) && object instanceof constructor) { + return constructor.prototype; + } + return object instanceof $Object ? ObjectPrototype : null; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators-core.js +var require_iterators_core = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators-core.js": function(exports, module2) { + "use strict"; + var fails = require_fails(); + var isCallable = require_is_callable(); + var isObject = require_is_object(); + var create = require_object_create(); + var getPrototypeOf = require_object_get_prototype_of(); + var defineBuiltIn = require_define_built_in(); + var wellKnownSymbol = require_well_known_symbol(); + var IS_PURE = require_is_pure(); + var ITERATOR = wellKnownSymbol("iterator"); + var BUGGY_SAFARI_ITERATORS = false; + var IteratorPrototype; + var PrototypeOfArrayIteratorPrototype; + var arrayIterator; + if ([].keys) { + arrayIterator = [].keys(); + if (!("next" in arrayIterator)) + BUGGY_SAFARI_ITERATORS = true; + else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) + IteratorPrototype = PrototypeOfArrayIteratorPrototype; + } + } + var NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function() { + var test = {}; + return IteratorPrototype[ITERATOR].call(test) !== test; + }); + if (NEW_ITERATOR_PROTOTYPE) + IteratorPrototype = {}; + else if (IS_PURE) + IteratorPrototype = create(IteratorPrototype); + if (!isCallable(IteratorPrototype[ITERATOR])) { + defineBuiltIn(IteratorPrototype, ITERATOR, function() { + return this; + }); + } + module2.exports = { + IteratorPrototype: IteratorPrototype, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-create-constructor.js +var require_iterator_create_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-create-constructor.js": function(exports, module2) { + "use strict"; + var IteratorPrototype = require_iterators_core().IteratorPrototype; + var create = require_object_create(); + var createPropertyDescriptor = require_create_property_descriptor(); + var setToStringTag = require_set_to_string_tag(); + var Iterators = require_iterators(); + var returnThis = function() { + return this; + }; + module2.exports = function(IteratorConstructor, NAME, next, ENUMERABLE_NEXT) { + var TO_STRING_TAG = NAME + " Iterator"; + IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); + Iterators[TO_STRING_TAG] = returnThis; + return IteratorConstructor; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-define.js +var require_iterator_define = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-define.js": function(exports, module2) { + "use strict"; + var $2 = require_export(); + var call = require_function_call(); + var IS_PURE = require_is_pure(); + var FunctionName = require_function_name(); + var isCallable = require_is_callable(); + var createIteratorConstructor = require_iterator_create_constructor(); + var getPrototypeOf = require_object_get_prototype_of(); + var setPrototypeOf = require_object_set_prototype_of(); + var setToStringTag = require_set_to_string_tag(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var defineBuiltIn = require_define_built_in(); + var wellKnownSymbol = require_well_known_symbol(); + var Iterators = require_iterators(); + var IteratorsCore = require_iterators_core(); + var PROPER_FUNCTION_NAME = FunctionName.PROPER; + var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE; + var IteratorPrototype = IteratorsCore.IteratorPrototype; + var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; + var ITERATOR = wellKnownSymbol("iterator"); + var KEYS = "keys"; + var VALUES = "values"; + var ENTRIES = "entries"; + var returnThis = function() { + return this; + }; + module2.exports = function(Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor(IteratorConstructor, NAME, next); + var getIterationMethod = function(KIND) { + if (KIND === DEFAULT && defaultIterator) + return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) + return IterablePrototype[KIND]; + switch (KIND) { + case KEYS: + return function keys() { + return new IteratorConstructor(this, KIND); + }; + case VALUES: + return function values() { + return new IteratorConstructor(this, KIND); + }; + case ENTRIES: + return function entries() { + return new IteratorConstructor(this, KIND); + }; + } + return function() { + return new IteratorConstructor(this); + }; + }; + var TO_STRING_TAG = NAME + " Iterator"; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR] || IterablePrototype["@@iterator"] || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME === "Array" ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); + if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) { + defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis); + } + } + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); + if (IS_PURE) + Iterators[TO_STRING_TAG] = returnThis; + } + } + if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) { + if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) { + createNonEnumerableProperty(IterablePrototype, "name", VALUES); + } else { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { + return call(nativeIterator, this); + }; + } + } + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) + for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + defineBuiltIn(IterablePrototype, KEY, methods[KEY]); + } + } + else + $2({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); + } + if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { + defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT }); + } + Iterators[NAME] = defaultIterator; + return methods; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-iter-result-object.js +var require_create_iter_result_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-iter-result-object.js": function(exports, module2) { + "use strict"; + module2.exports = function(value, done) { + return { value: value, done: done }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.iterator.js +var require_es_array_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.iterator.js": function(exports, module2) { + "use strict"; + var toIndexedObject = require_to_indexed_object(); + var addToUnscopables = require_add_to_unscopables(); + var Iterators = require_iterators(); + var InternalStateModule = require_internal_state(); + var defineProperty = require_object_define_property().f; + var defineIterator = require_iterator_define(); + var createIterResultObject = require_create_iter_result_object(); + var IS_PURE = require_is_pure(); + var DESCRIPTORS = require_descriptors(); + var ARRAY_ITERATOR = "Array Iterator"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); + module2.exports = defineIterator(Array, "Array", function(iterated, kind) { + setInternalState(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject(iterated), + // target + index: 0, + // next index + kind: kind + // kind + }); + }, function() { + var state = getInternalState(this); + var target = state.target; + var index = state.index++; + if (!target || index >= target.length) { + state.target = void 0; + return createIterResultObject(void 0, true); + } + switch (state.kind) { + case "keys": + return createIterResultObject(index, false); + case "values": + return createIterResultObject(target[index], false); + } + return createIterResultObject([index, target[index]], false); + }, "values"); + var values = Iterators.Arguments = Iterators.Array; + addToUnscopables("keys"); + addToUnscopables("values"); + addToUnscopables("entries"); + if (!IS_PURE && DESCRIPTORS && values.name !== "values") + try { + defineProperty(values, "name", { value: "values" }); + } catch (error) { + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-set-length.js +var require_array_set_length = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-set-length.js": function(exports, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var isArray = require_is_array(); + var $TypeError = TypeError; + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function() { + if (this !== void 0) + return true; + try { + Object.defineProperty([], "length", { writable: false }).length = 1; + } catch (error) { + return error instanceof TypeError; + } + }(); + module2.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function(O, length) { + if (isArray(O) && !getOwnPropertyDescriptor(O, "length").writable) { + throw new $TypeError("Cannot set read only .length"); + } + return O.length = length; + } : function(O, length) { + return O.length = length; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js +var require_does_not_exceed_safe_integer = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js": function(exports, module2) { + "use strict"; + var $TypeError = TypeError; + var MAX_SAFE_INTEGER = 9007199254740991; + module2.exports = function(it) { + if (it > MAX_SAFE_INTEGER) + throw $TypeError("Maximum allowed index exceeded"); + return it; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.push.js +var require_es_array_push = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.push.js": function() { + "use strict"; + var $2 = require_export(); + var toObject = require_to_object(); + var lengthOfArrayLike = require_length_of_array_like(); + var setArrayLength = require_array_set_length(); + var doesNotExceedSafeInteger = require_does_not_exceed_safe_integer(); + var fails = require_fails(); + var INCORRECT_TO_LENGTH = fails(function() { + return [].push.call({ length: 4294967296 }, 1) !== 4294967297; + }); + var properErrorOnNonWritableLength = function() { + try { + Object.defineProperty([], "length", { writable: false }).push(); + } catch (error) { + return error instanceof TypeError; + } + }; + var FORCED = INCORRECT_TO_LENGTH || !properErrorOnNonWritableLength(); + $2({ target: "Array", proto: true, arity: 1, forced: FORCED }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + push: function push(item) { + var O = toObject(this); + var len = lengthOfArrayLike(O); + var argCount = arguments.length; + doesNotExceedSafeInteger(len + argCount); + for (var i = 0; i < argCount; i++) { + O[len] = arguments[i]; + len++; + } + setArrayLength(O, len); + return len; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.reverse.js +var require_es_array_reverse = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.reverse.js": function() { + "use strict"; + var $2 = require_export(); + var uncurryThis = require_function_uncurry_this(); + var isArray = require_is_array(); + var nativeReverse = uncurryThis([].reverse); + var test = [1, 2]; + $2({ target: "Array", proto: true, forced: String(test) === String(test.reverse()) }, { + reverse: function reverse() { + if (isArray(this)) + this.length = this.length; + return nativeReverse(this); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-method-has-species-support.js +var require_array_method_has_species_support = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-method-has-species-support.js": function(exports, module2) { + "use strict"; + var fails = require_fails(); + var wellKnownSymbol = require_well_known_symbol(); + var V8_VERSION = require_engine_v8_version(); + var SPECIES = wellKnownSymbol("species"); + module2.exports = function(METHOD_NAME) { + return V8_VERSION >= 51 || !fails(function() { + var array = []; + var constructor = array.constructor = {}; + constructor[SPECIES] = function() { + return { foo: 1 }; + }; + return array[METHOD_NAME](Boolean).foo !== 1; + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.slice.js +var require_es_array_slice = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.slice.js": function() { + "use strict"; + var $2 = require_export(); + var isArray = require_is_array(); + var isConstructor = require_is_constructor(); + var isObject = require_is_object(); + var toAbsoluteIndex = require_to_absolute_index(); + var lengthOfArrayLike = require_length_of_array_like(); + var toIndexedObject = require_to_indexed_object(); + var createProperty = require_create_property(); + var wellKnownSymbol = require_well_known_symbol(); + var arrayMethodHasSpeciesSupport = require_array_method_has_species_support(); + var nativeSlice = require_array_slice(); + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("slice"); + var SPECIES = wellKnownSymbol("species"); + var $Array = Array; + var max = Math.max; + $2({ target: "Array", proto: true, forced: !HAS_SPECIES_SUPPORT }, { + slice: function slice(start, end) { + var O = toIndexedObject(this); + var length = lengthOfArrayLike(O); + var k = toAbsoluteIndex(start, length); + var fin = toAbsoluteIndex(end === void 0 ? length : end, length); + var Constructor, result, n; + if (isArray(O)) { + Constructor = O.constructor; + if (isConstructor(Constructor) && (Constructor === $Array || isArray(Constructor.prototype))) { + Constructor = void 0; + } else if (isObject(Constructor)) { + Constructor = Constructor[SPECIES]; + if (Constructor === null) + Constructor = void 0; + } + if (Constructor === $Array || Constructor === void 0) { + return nativeSlice(O, k, fin); + } + } + result = new (Constructor === void 0 ? $Array : Constructor)(max(fin - k, 0)); + for (n = 0; k < fin; k++, n++) + if (k in O) + createProperty(result, n, O[k]); + result.length = n; + return result; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.json.to-string-tag.js +var require_es_json_to_string_tag = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.json.to-string-tag.js": function() { + "use strict"; + var global2 = require_global(); + var setToStringTag = require_set_to_string_tag(); + setToStringTag(global2.JSON, "JSON", true); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.math.to-string-tag.js +var require_es_math_to_string_tag = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.math.to-string-tag.js": function() { + "use strict"; + var setToStringTag = require_set_to_string_tag(); + setToStringTag(Math, "Math", true); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.set-prototype-of.js +var require_es_object_set_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.set-prototype-of.js": function() { + "use strict"; + var $2 = require_export(); + var setPrototypeOf = require_object_set_prototype_of(); + $2({ target: "Object", stat: true }, { + setPrototypeOf: setPrototypeOf + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-node.js +var require_engine_is_node = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-node.js": function(exports, module2) { + "use strict"; + var global2 = require_global(); + var classof = require_classof_raw(); + module2.exports = classof(global2.process) === "process"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/set-species.js +var require_set_species = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/set-species.js": function(exports, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var defineBuiltInAccessor = require_define_built_in_accessor(); + var wellKnownSymbol = require_well_known_symbol(); + var DESCRIPTORS = require_descriptors(); + var SPECIES = wellKnownSymbol("species"); + module2.exports = function(CONSTRUCTOR_NAME) { + var Constructor = getBuiltIn(CONSTRUCTOR_NAME); + if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { + defineBuiltInAccessor(Constructor, SPECIES, { + configurable: true, + get: function() { + return this; + } + }); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/an-instance.js +var require_an_instance = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/an-instance.js": function(exports, module2) { + "use strict"; + var isPrototypeOf = require_object_is_prototype_of(); + var $TypeError = TypeError; + module2.exports = function(it, Prototype) { + if (isPrototypeOf(Prototype, it)) + return it; + throw new $TypeError("Incorrect invocation"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-constructor.js +var require_a_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-constructor.js": function(exports, module2) { + "use strict"; + var isConstructor = require_is_constructor(); + var tryToString = require_try_to_string(); + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isConstructor(argument)) + return argument; + throw new $TypeError(tryToString(argument) + " is not a constructor"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/species-constructor.js +var require_species_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/species-constructor.js": function(exports, module2) { + "use strict"; + var anObject = require_an_object(); + var aConstructor = require_a_constructor(); + var isNullOrUndefined = require_is_null_or_undefined(); + var wellKnownSymbol = require_well_known_symbol(); + var SPECIES = wellKnownSymbol("species"); + module2.exports = function(O, defaultConstructor) { + var C = anObject(O).constructor; + var S; + return C === void 0 || isNullOrUndefined(S = anObject(C)[SPECIES]) ? defaultConstructor : aConstructor(S); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/validate-arguments-length.js +var require_validate_arguments_length = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/validate-arguments-length.js": function(exports, module2) { + "use strict"; + var $TypeError = TypeError; + module2.exports = function(passed, required) { + if (passed < required) + throw new $TypeError("Not enough arguments"); + return passed; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-ios.js +var require_engine_is_ios = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-ios.js": function(exports, module2) { + "use strict"; + var userAgent = require_engine_user_agent(); + module2.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/task.js +var require_task = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/task.js": function(exports, module2) { + "use strict"; + var global2 = require_global(); + var apply = require_function_apply(); + var bind = require_function_bind_context(); + var isCallable = require_is_callable(); + var hasOwn = require_has_own_property(); + var fails = require_fails(); + var html = require_html(); + var arraySlice = require_array_slice(); + var createElement = require_document_create_element(); + var validateArgumentsLength = require_validate_arguments_length(); + var IS_IOS = require_engine_is_ios(); + var IS_NODE = require_engine_is_node(); + var set = global2.setImmediate; + var clear = global2.clearImmediate; + var process = global2.process; + var Dispatch = global2.Dispatch; + var Function2 = global2.Function; + var MessageChannel = global2.MessageChannel; + var String2 = global2.String; + var counter = 0; + var queue = {}; + var ONREADYSTATECHANGE = "onreadystatechange"; + var $location; + var defer; + var channel; + var port; + fails(function() { + $location = global2.location; + }); + var run = function(id) { + if (hasOwn(queue, id)) { + var fn = queue[id]; + delete queue[id]; + fn(); + } + }; + var runner = function(id) { + return function() { + run(id); + }; + }; + var eventListener = function(event) { + run(event.data); + }; + var globalPostMessageDefer = function(id) { + global2.postMessage(String2(id), $location.protocol + "//" + $location.host); + }; + if (!set || !clear) { + set = function setImmediate(handler) { + validateArgumentsLength(arguments.length, 1); + var fn = isCallable(handler) ? handler : Function2(handler); + var args = arraySlice(arguments, 1); + queue[++counter] = function() { + apply(fn, void 0, args); + }; + defer(counter); + return counter; + }; + clear = function clearImmediate(id) { + delete queue[id]; + }; + if (IS_NODE) { + defer = function(id) { + process.nextTick(runner(id)); + }; + } else if (Dispatch && Dispatch.now) { + defer = function(id) { + Dispatch.now(runner(id)); + }; + } else if (MessageChannel && !IS_IOS) { + channel = new MessageChannel(); + port = channel.port2; + channel.port1.onmessage = eventListener; + defer = bind(port.postMessage, port); + } else if (global2.addEventListener && isCallable(global2.postMessage) && !global2.importScripts && $location && $location.protocol !== "file:" && !fails(globalPostMessageDefer)) { + defer = globalPostMessageDefer; + global2.addEventListener("message", eventListener, false); + } else if (ONREADYSTATECHANGE in createElement("script")) { + defer = function(id) { + html.appendChild(createElement("script"))[ONREADYSTATECHANGE] = function() { + html.removeChild(this); + run(id); + }; + }; + } else { + defer = function(id) { + setTimeout(runner(id), 0); + }; + } + } + module2.exports = { + set: set, + clear: clear + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/safe-get-built-in.js +var require_safe_get_built_in = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/safe-get-built-in.js": function(exports, module2) { + "use strict"; + var global2 = require_global(); + var DESCRIPTORS = require_descriptors(); + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + module2.exports = function(name) { + if (!DESCRIPTORS) + return global2[name]; + var descriptor = getOwnPropertyDescriptor(global2, name); + return descriptor && descriptor.value; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/queue.js +var require_queue = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/queue.js": function(exports, module2) { + "use strict"; + var Queue = function() { + this.head = null; + this.tail = null; + }; + Queue.prototype = { + add: function(item) { + var entry = { item: item, next: null }; + var tail = this.tail; + if (tail) + tail.next = entry; + else + this.head = entry; + this.tail = entry; + }, + get: function() { + var entry = this.head; + if (entry) { + var next = this.head = entry.next; + if (next === null) + this.tail = null; + return entry.item; + } + } + }; + module2.exports = Queue; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-ios-pebble.js +var require_engine_is_ios_pebble = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-ios-pebble.js": function(exports, module2) { + "use strict"; + var userAgent = require_engine_user_agent(); + module2.exports = /ipad|iphone|ipod/i.test(userAgent) && typeof Pebble != "undefined"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-webos-webkit.js +var require_engine_is_webos_webkit = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-webos-webkit.js": function(exports, module2) { + "use strict"; + var userAgent = require_engine_user_agent(); + module2.exports = /web0s(?!.*chrome)/i.test(userAgent); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/microtask.js +var require_microtask = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/microtask.js": function(exports, module2) { + "use strict"; + var global2 = require_global(); + var safeGetBuiltIn = require_safe_get_built_in(); + var bind = require_function_bind_context(); + var macrotask = require_task().set; + var Queue = require_queue(); + var IS_IOS = require_engine_is_ios(); + var IS_IOS_PEBBLE = require_engine_is_ios_pebble(); + var IS_WEBOS_WEBKIT = require_engine_is_webos_webkit(); + var IS_NODE = require_engine_is_node(); + var MutationObserver = global2.MutationObserver || global2.WebKitMutationObserver; + var document2 = global2.document; + var process = global2.process; + var Promise2 = global2.Promise; + var microtask = safeGetBuiltIn("queueMicrotask"); + var notify; + var toggle; + var node; + var promise; + var then; + if (!microtask) { + queue = new Queue(); + flush = function() { + var parent, fn; + if (IS_NODE && (parent = process.domain)) + parent.exit(); + while (fn = queue.get()) + try { + fn(); + } catch (error) { + if (queue.head) + notify(); + throw error; + } + if (parent) + parent.enter(); + }; + if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document2) { + toggle = true; + node = document2.createTextNode(""); + new MutationObserver(flush).observe(node, { characterData: true }); + notify = function() { + node.data = toggle = !toggle; + }; + } else if (!IS_IOS_PEBBLE && Promise2 && Promise2.resolve) { + promise = Promise2.resolve(void 0); + promise.constructor = Promise2; + then = bind(promise.then, promise); + notify = function() { + then(flush); + }; + } else if (IS_NODE) { + notify = function() { + process.nextTick(flush); + }; + } else { + macrotask = bind(macrotask, global2); + notify = function() { + macrotask(flush); + }; + } + microtask = function(fn) { + if (!queue.head) + notify(); + queue.add(fn); + }; + } + var queue; + var flush; + module2.exports = microtask; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/host-report-errors.js +var require_host_report_errors = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/host-report-errors.js": function(exports, module2) { + "use strict"; + module2.exports = function(a, b) { + try { + arguments.length === 1 ? console.error(a) : console.error(a, b); + } catch (error) { + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/perform.js +var require_perform = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/perform.js": function(exports, module2) { + "use strict"; + module2.exports = function(exec) { + try { + return { error: false, value: exec() }; + } catch (error) { + return { error: true, value: error }; + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/promise-native-constructor.js +var require_promise_native_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/promise-native-constructor.js": function(exports, module2) { + "use strict"; + var global2 = require_global(); + module2.exports = global2.Promise; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-deno.js +var require_engine_is_deno = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-deno.js": function(exports, module2) { + "use strict"; + module2.exports = typeof Deno == "object" && Deno && typeof Deno.version == "object"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-browser.js +var require_engine_is_browser = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-browser.js": function(exports, module2) { + "use strict"; + var IS_DENO = require_engine_is_deno(); + var IS_NODE = require_engine_is_node(); + module2.exports = !IS_DENO && !IS_NODE && typeof window == "object" && typeof document == "object"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/promise-constructor-detection.js +var require_promise_constructor_detection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/promise-constructor-detection.js": function(exports, module2) { + "use strict"; + var global2 = require_global(); + var NativePromiseConstructor = require_promise_native_constructor(); + var isCallable = require_is_callable(); + var isForced = require_is_forced(); + var inspectSource = require_inspect_source(); + var wellKnownSymbol = require_well_known_symbol(); + var IS_BROWSER = require_engine_is_browser(); + var IS_DENO = require_engine_is_deno(); + var IS_PURE = require_is_pure(); + var V8_VERSION = require_engine_v8_version(); + var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype; + var SPECIES = wellKnownSymbol("species"); + var SUBCLASSING = false; + var NATIVE_PROMISE_REJECTION_EVENT = isCallable(global2.PromiseRejectionEvent); + var FORCED_PROMISE_CONSTRUCTOR = isForced("Promise", function() { + var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(NativePromiseConstructor); + var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(NativePromiseConstructor); + if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) + return true; + if (IS_PURE && !(NativePromisePrototype["catch"] && NativePromisePrototype["finally"])) + return true; + if (!V8_VERSION || V8_VERSION < 51 || !/native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) { + var promise = new NativePromiseConstructor(function(resolve) { + resolve(1); + }); + var FakePromise = function(exec) { + exec(function() { + }, function() { + }); + }; + var constructor = promise.constructor = {}; + constructor[SPECIES] = FakePromise; + SUBCLASSING = promise.then(function() { + }) instanceof FakePromise; + if (!SUBCLASSING) + return true; + } + return !GLOBAL_CORE_JS_PROMISE && (IS_BROWSER || IS_DENO) && !NATIVE_PROMISE_REJECTION_EVENT; + }); + module2.exports = { + CONSTRUCTOR: FORCED_PROMISE_CONSTRUCTOR, + REJECTION_EVENT: NATIVE_PROMISE_REJECTION_EVENT, + SUBCLASSING: SUBCLASSING + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/new-promise-capability.js +var require_new_promise_capability = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/new-promise-capability.js": function(exports, module2) { + "use strict"; + var aCallable = require_a_callable(); + var $TypeError = TypeError; + var PromiseCapability = function(C) { + var resolve, reject; + this.promise = new C(function($$resolve, $$reject) { + if (resolve !== void 0 || reject !== void 0) + throw new $TypeError("Bad Promise constructor"); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aCallable(resolve); + this.reject = aCallable(reject); + }; + module2.exports.f = function(C) { + return new PromiseCapability(C); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.constructor.js +var require_es_promise_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.constructor.js": function() { + "use strict"; + var $2 = require_export(); + var IS_PURE = require_is_pure(); + var IS_NODE = require_engine_is_node(); + var global2 = require_global(); + var call = require_function_call(); + var defineBuiltIn = require_define_built_in(); + var setPrototypeOf = require_object_set_prototype_of(); + var setToStringTag = require_set_to_string_tag(); + var setSpecies = require_set_species(); + var aCallable = require_a_callable(); + var isCallable = require_is_callable(); + var isObject = require_is_object(); + var anInstance = require_an_instance(); + var speciesConstructor = require_species_constructor(); + var task = require_task().set; + var microtask = require_microtask(); + var hostReportErrors = require_host_report_errors(); + var perform = require_perform(); + var Queue = require_queue(); + var InternalStateModule = require_internal_state(); + var NativePromiseConstructor = require_promise_native_constructor(); + var PromiseConstructorDetection = require_promise_constructor_detection(); + var newPromiseCapabilityModule = require_new_promise_capability(); + var PROMISE = "Promise"; + var FORCED_PROMISE_CONSTRUCTOR = PromiseConstructorDetection.CONSTRUCTOR; + var NATIVE_PROMISE_REJECTION_EVENT = PromiseConstructorDetection.REJECTION_EVENT; + var NATIVE_PROMISE_SUBCLASSING = PromiseConstructorDetection.SUBCLASSING; + var getInternalPromiseState = InternalStateModule.getterFor(PROMISE); + var setInternalState = InternalStateModule.set; + var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype; + var PromiseConstructor = NativePromiseConstructor; + var PromisePrototype = NativePromisePrototype; + var TypeError2 = global2.TypeError; + var document2 = global2.document; + var process = global2.process; + var newPromiseCapability = newPromiseCapabilityModule.f; + var newGenericPromiseCapability = newPromiseCapability; + var DISPATCH_EVENT = !!(document2 && document2.createEvent && global2.dispatchEvent); + var UNHANDLED_REJECTION = "unhandledrejection"; + var REJECTION_HANDLED = "rejectionhandled"; + var PENDING = 0; + var FULFILLED = 1; + var REJECTED = 2; + var HANDLED = 1; + var UNHANDLED = 2; + var Internal; + var OwnPromiseCapability; + var PromiseWrapper; + var nativeThen; + var isThenable = function(it) { + var then; + return isObject(it) && isCallable(then = it.then) ? then : false; + }; + var callReaction = function(reaction, state) { + var value = state.value; + var ok = state.state === FULFILLED; + var handler = ok ? reaction.ok : reaction.fail; + var resolve = reaction.resolve; + var reject = reaction.reject; + var domain = reaction.domain; + var result, then, exited; + try { + if (handler) { + if (!ok) { + if (state.rejection === UNHANDLED) + onHandleUnhandled(state); + state.rejection = HANDLED; + } + if (handler === true) + result = value; + else { + if (domain) + domain.enter(); + result = handler(value); + if (domain) { + domain.exit(); + exited = true; + } + } + if (result === reaction.promise) { + reject(new TypeError2("Promise-chain cycle")); + } else if (then = isThenable(result)) { + call(then, result, resolve, reject); + } else + resolve(result); + } else + reject(value); + } catch (error) { + if (domain && !exited) + domain.exit(); + reject(error); + } + }; + var notify = function(state, isReject) { + if (state.notified) + return; + state.notified = true; + microtask(function() { + var reactions = state.reactions; + var reaction; + while (reaction = reactions.get()) { + callReaction(reaction, state); + } + state.notified = false; + if (isReject && !state.rejection) + onUnhandled(state); + }); + }; + var dispatchEvent = function(name, promise, reason) { + var event, handler; + if (DISPATCH_EVENT) { + event = document2.createEvent("Event"); + event.promise = promise; + event.reason = reason; + event.initEvent(name, false, true); + global2.dispatchEvent(event); + } else + event = { promise: promise, reason: reason }; + if (!NATIVE_PROMISE_REJECTION_EVENT && (handler = global2["on" + name])) + handler(event); + else if (name === UNHANDLED_REJECTION) + hostReportErrors("Unhandled promise rejection", reason); + }; + var onUnhandled = function(state) { + call(task, global2, function() { + var promise = state.facade; + var value = state.value; + var IS_UNHANDLED = isUnhandled(state); + var result; + if (IS_UNHANDLED) { + result = perform(function() { + if (IS_NODE) { + process.emit("unhandledRejection", value, promise); + } else + dispatchEvent(UNHANDLED_REJECTION, promise, value); + }); + state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED; + if (result.error) + throw result.value; + } + }); + }; + var isUnhandled = function(state) { + return state.rejection !== HANDLED && !state.parent; + }; + var onHandleUnhandled = function(state) { + call(task, global2, function() { + var promise = state.facade; + if (IS_NODE) { + process.emit("rejectionHandled", promise); + } else + dispatchEvent(REJECTION_HANDLED, promise, state.value); + }); + }; + var bind = function(fn, state, unwrap) { + return function(value) { + fn(state, value, unwrap); + }; + }; + var internalReject = function(state, value, unwrap) { + if (state.done) + return; + state.done = true; + if (unwrap) + state = unwrap; + state.value = value; + state.state = REJECTED; + notify(state, true); + }; + var internalResolve = function(state, value, unwrap) { + if (state.done) + return; + state.done = true; + if (unwrap) + state = unwrap; + try { + if (state.facade === value) + throw new TypeError2("Promise can't be resolved itself"); + var then = isThenable(value); + if (then) { + microtask(function() { + var wrapper = { done: false }; + try { + call( + then, + value, + bind(internalResolve, wrapper, state), + bind(internalReject, wrapper, state) + ); + } catch (error) { + internalReject(wrapper, error, state); + } + }); + } else { + state.value = value; + state.state = FULFILLED; + notify(state, false); + } + } catch (error) { + internalReject({ done: false }, error, state); + } + }; + if (FORCED_PROMISE_CONSTRUCTOR) { + PromiseConstructor = function Promise2(executor) { + anInstance(this, PromisePrototype); + aCallable(executor); + call(Internal, this); + var state = getInternalPromiseState(this); + try { + executor(bind(internalResolve, state), bind(internalReject, state)); + } catch (error) { + internalReject(state, error); + } + }; + PromisePrototype = PromiseConstructor.prototype; + Internal = function Promise2(executor) { + setInternalState(this, { + type: PROMISE, + done: false, + notified: false, + parent: false, + reactions: new Queue(), + rejection: false, + state: PENDING, + value: void 0 + }); + }; + Internal.prototype = defineBuiltIn(PromisePrototype, "then", function then(onFulfilled, onRejected) { + var state = getInternalPromiseState(this); + var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor)); + state.parent = true; + reaction.ok = isCallable(onFulfilled) ? onFulfilled : true; + reaction.fail = isCallable(onRejected) && onRejected; + reaction.domain = IS_NODE ? process.domain : void 0; + if (state.state === PENDING) + state.reactions.add(reaction); + else + microtask(function() { + callReaction(reaction, state); + }); + return reaction.promise; + }); + OwnPromiseCapability = function() { + var promise = new Internal(); + var state = getInternalPromiseState(promise); + this.promise = promise; + this.resolve = bind(internalResolve, state); + this.reject = bind(internalReject, state); + }; + newPromiseCapabilityModule.f = newPromiseCapability = function(C) { + return C === PromiseConstructor || C === PromiseWrapper ? new OwnPromiseCapability(C) : newGenericPromiseCapability(C); + }; + if (!IS_PURE && isCallable(NativePromiseConstructor) && NativePromisePrototype !== Object.prototype) { + nativeThen = NativePromisePrototype.then; + if (!NATIVE_PROMISE_SUBCLASSING) { + defineBuiltIn(NativePromisePrototype, "then", function then(onFulfilled, onRejected) { + var that = this; + return new PromiseConstructor(function(resolve, reject) { + call(nativeThen, that, resolve, reject); + }).then(onFulfilled, onRejected); + }, { unsafe: true }); + } + try { + delete NativePromisePrototype.constructor; + } catch (error) { + } + if (setPrototypeOf) { + setPrototypeOf(NativePromisePrototype, PromisePrototype); + } + } + } + $2({ global: true, constructor: true, wrap: true, forced: FORCED_PROMISE_CONSTRUCTOR }, { + Promise: PromiseConstructor + }); + setToStringTag(PromiseConstructor, PROMISE, false, true); + setSpecies(PROMISE); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterate.js +var require_iterate = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterate.js": function(exports, module2) { + "use strict"; + var bind = require_function_bind_context(); + var call = require_function_call(); + var anObject = require_an_object(); + var tryToString = require_try_to_string(); + var isArrayIteratorMethod = require_is_array_iterator_method(); + var lengthOfArrayLike = require_length_of_array_like(); + var isPrototypeOf = require_object_is_prototype_of(); + var getIterator = require_get_iterator(); + var getIteratorMethod = require_get_iterator_method(); + var iteratorClose = require_iterator_close(); + var $TypeError = TypeError; + var Result = function(stopped, result) { + this.stopped = stopped; + this.result = result; + }; + var ResultPrototype = Result.prototype; + module2.exports = function(iterable, unboundFunction, options) { + var that = options && options.that; + var AS_ENTRIES = !!(options && options.AS_ENTRIES); + var IS_RECORD = !!(options && options.IS_RECORD); + var IS_ITERATOR = !!(options && options.IS_ITERATOR); + var INTERRUPTED = !!(options && options.INTERRUPTED); + var fn = bind(unboundFunction, that); + var iterator, iterFn, index, length, result, next, step; + var stop = function(condition) { + if (iterator) + iteratorClose(iterator, "normal", condition); + return new Result(true, condition); + }; + var callFn = function(value) { + if (AS_ENTRIES) { + anObject(value); + return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]); + } + return INTERRUPTED ? fn(value, stop) : fn(value); + }; + if (IS_RECORD) { + iterator = iterable.iterator; + } else if (IS_ITERATOR) { + iterator = iterable; + } else { + iterFn = getIteratorMethod(iterable); + if (!iterFn) + throw new $TypeError(tryToString(iterable) + " is not iterable"); + if (isArrayIteratorMethod(iterFn)) { + for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) { + result = callFn(iterable[index]); + if (result && isPrototypeOf(ResultPrototype, result)) + return result; + } + return new Result(false); + } + iterator = getIterator(iterable, iterFn); + } + next = IS_RECORD ? iterable.next : iterator.next; + while (!(step = call(next, iterator)).done) { + try { + result = callFn(step.value); + } catch (error) { + iteratorClose(iterator, "throw", error); + } + if (typeof result == "object" && result && isPrototypeOf(ResultPrototype, result)) + return result; + } + return new Result(false); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/promise-statics-incorrect-iteration.js +var require_promise_statics_incorrect_iteration = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/promise-statics-incorrect-iteration.js": function(exports, module2) { + "use strict"; + var NativePromiseConstructor = require_promise_native_constructor(); + var checkCorrectnessOfIteration = require_check_correctness_of_iteration(); + var FORCED_PROMISE_CONSTRUCTOR = require_promise_constructor_detection().CONSTRUCTOR; + module2.exports = FORCED_PROMISE_CONSTRUCTOR || !checkCorrectnessOfIteration(function(iterable) { + NativePromiseConstructor.all(iterable).then(void 0, function() { + }); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.all.js +var require_es_promise_all = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.all.js": function() { + "use strict"; + var $2 = require_export(); + var call = require_function_call(); + var aCallable = require_a_callable(); + var newPromiseCapabilityModule = require_new_promise_capability(); + var perform = require_perform(); + var iterate = require_iterate(); + var PROMISE_STATICS_INCORRECT_ITERATION = require_promise_statics_incorrect_iteration(); + $2({ target: "Promise", stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, { + all: function all(iterable) { + var C = this; + var capability = newPromiseCapabilityModule.f(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function() { + var $promiseResolve = aCallable(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate(iterable, function(promise) { + var index = counter++; + var alreadyCalled = false; + remaining++; + call($promiseResolve, C, promise).then(function(value) { + if (alreadyCalled) + return; + alreadyCalled = true; + values[index] = value; + --remaining || resolve(values); + }, reject); + }); + --remaining || resolve(values); + }); + if (result.error) + reject(result.value); + return capability.promise; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.catch.js +var require_es_promise_catch = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.catch.js": function() { + "use strict"; + var $2 = require_export(); + var IS_PURE = require_is_pure(); + var FORCED_PROMISE_CONSTRUCTOR = require_promise_constructor_detection().CONSTRUCTOR; + var NativePromiseConstructor = require_promise_native_constructor(); + var getBuiltIn = require_get_built_in(); + var isCallable = require_is_callable(); + var defineBuiltIn = require_define_built_in(); + var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype; + $2({ target: "Promise", proto: true, forced: FORCED_PROMISE_CONSTRUCTOR, real: true }, { + "catch": function(onRejected) { + return this.then(void 0, onRejected); + } + }); + if (!IS_PURE && isCallable(NativePromiseConstructor)) { + method = getBuiltIn("Promise").prototype["catch"]; + if (NativePromisePrototype["catch"] !== method) { + defineBuiltIn(NativePromisePrototype, "catch", method, { unsafe: true }); + } + } + var method; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.race.js +var require_es_promise_race = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.race.js": function() { + "use strict"; + var $2 = require_export(); + var call = require_function_call(); + var aCallable = require_a_callable(); + var newPromiseCapabilityModule = require_new_promise_capability(); + var perform = require_perform(); + var iterate = require_iterate(); + var PROMISE_STATICS_INCORRECT_ITERATION = require_promise_statics_incorrect_iteration(); + $2({ target: "Promise", stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, { + race: function race(iterable) { + var C = this; + var capability = newPromiseCapabilityModule.f(C); + var reject = capability.reject; + var result = perform(function() { + var $promiseResolve = aCallable(C.resolve); + iterate(iterable, function(promise) { + call($promiseResolve, C, promise).then(capability.resolve, reject); + }); + }); + if (result.error) + reject(result.value); + return capability.promise; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.reject.js +var require_es_promise_reject = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.reject.js": function() { + "use strict"; + var $2 = require_export(); + var newPromiseCapabilityModule = require_new_promise_capability(); + var FORCED_PROMISE_CONSTRUCTOR = require_promise_constructor_detection().CONSTRUCTOR; + $2({ target: "Promise", stat: true, forced: FORCED_PROMISE_CONSTRUCTOR }, { + reject: function reject(r) { + var capability = newPromiseCapabilityModule.f(this); + var capabilityReject = capability.reject; + capabilityReject(r); + return capability.promise; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/promise-resolve.js +var require_promise_resolve = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/promise-resolve.js": function(exports, module2) { + "use strict"; + var anObject = require_an_object(); + var isObject = require_is_object(); + var newPromiseCapability = require_new_promise_capability(); + module2.exports = function(C, x) { + anObject(C); + if (isObject(x) && x.constructor === C) + return x; + var promiseCapability = newPromiseCapability.f(C); + var resolve = promiseCapability.resolve; + resolve(x); + return promiseCapability.promise; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.resolve.js +var require_es_promise_resolve = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.resolve.js": function() { + "use strict"; + var $2 = require_export(); + var getBuiltIn = require_get_built_in(); + var IS_PURE = require_is_pure(); + var NativePromiseConstructor = require_promise_native_constructor(); + var FORCED_PROMISE_CONSTRUCTOR = require_promise_constructor_detection().CONSTRUCTOR; + var promiseResolve = require_promise_resolve(); + var PromiseConstructorWrapper = getBuiltIn("Promise"); + var CHECK_WRAPPER = IS_PURE && !FORCED_PROMISE_CONSTRUCTOR; + $2({ target: "Promise", stat: true, forced: IS_PURE || FORCED_PROMISE_CONSTRUCTOR }, { + resolve: function resolve(x) { + return promiseResolve(CHECK_WRAPPER && this === PromiseConstructorWrapper ? NativePromiseConstructor : this, x); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.js +var require_es_promise = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.js": function() { + "use strict"; + require_es_promise_constructor(); + require_es_promise_all(); + require_es_promise_catch(); + require_es_promise_race(); + require_es_promise_reject(); + require_es_promise_resolve(); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-flags.js +var require_regexp_flags = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-flags.js": function(exports, module2) { + "use strict"; + var anObject = require_an_object(); + module2.exports = function() { + var that = anObject(this); + var result = ""; + if (that.hasIndices) + result += "d"; + if (that.global) + result += "g"; + if (that.ignoreCase) + result += "i"; + if (that.multiline) + result += "m"; + if (that.dotAll) + result += "s"; + if (that.unicode) + result += "u"; + if (that.unicodeSets) + result += "v"; + if (that.sticky) + result += "y"; + return result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-sticky-helpers.js +var require_regexp_sticky_helpers = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-sticky-helpers.js": function(exports, module2) { + "use strict"; + var fails = require_fails(); + var global2 = require_global(); + var $RegExp = global2.RegExp; + var UNSUPPORTED_Y = fails(function() { + var re = $RegExp("a", "y"); + re.lastIndex = 2; + return re.exec("abcd") !== null; + }); + var MISSED_STICKY = UNSUPPORTED_Y || fails(function() { + return !$RegExp("a", "y").sticky; + }); + var BROKEN_CARET = UNSUPPORTED_Y || fails(function() { + var re = $RegExp("^r", "gy"); + re.lastIndex = 2; + return re.exec("str") !== null; + }); + module2.exports = { + BROKEN_CARET: BROKEN_CARET, + MISSED_STICKY: MISSED_STICKY, + UNSUPPORTED_Y: UNSUPPORTED_Y + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-dot-all.js +var require_regexp_unsupported_dot_all = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-dot-all.js": function(exports, module2) { + "use strict"; + var fails = require_fails(); + var global2 = require_global(); + var $RegExp = global2.RegExp; + module2.exports = fails(function() { + var re = $RegExp(".", "s"); + return !(re.dotAll && re.test("\n") && re.flags === "s"); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-ncg.js +var require_regexp_unsupported_ncg = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-ncg.js": function(exports, module2) { + "use strict"; + var fails = require_fails(); + var global2 = require_global(); + var $RegExp = global2.RegExp; + module2.exports = fails(function() { + var re = $RegExp("(?b)", "g"); + return re.exec("b").groups.a !== "b" || "b".replace(re, "$c") !== "bc"; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-exec.js +var require_regexp_exec = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-exec.js": function(exports, module2) { + "use strict"; + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var toString = require_to_string(); + var regexpFlags = require_regexp_flags(); + var stickyHelpers = require_regexp_sticky_helpers(); + var shared = require_shared(); + var create = require_object_create(); + var getInternalState = require_internal_state().get; + var UNSUPPORTED_DOT_ALL = require_regexp_unsupported_dot_all(); + var UNSUPPORTED_NCG = require_regexp_unsupported_ncg(); + var nativeReplace = shared("native-string-replace", String.prototype.replace); + var nativeExec = RegExp.prototype.exec; + var patchedExec = nativeExec; + var charAt = uncurryThis("".charAt); + var indexOf = uncurryThis("".indexOf); + var replace = uncurryThis("".replace); + var stringSlice = uncurryThis("".slice); + var UPDATES_LAST_INDEX_WRONG = function() { + var re1 = /a/; + var re2 = /b*/g; + call(nativeExec, re1, "a"); + call(nativeExec, re2, "a"); + return re1.lastIndex !== 0 || re2.lastIndex !== 0; + }(); + var UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET; + var NPCG_INCLUDED = /()??/.exec("")[1] !== void 0; + var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG; + if (PATCH) { + patchedExec = function exec(string) { + var re = this; + var state = getInternalState(re); + var str = toString(string); + var raw = state.raw; + var result, reCopy, lastIndex, match, i, object, group; + if (raw) { + raw.lastIndex = re.lastIndex; + result = call(patchedExec, raw, str); + re.lastIndex = raw.lastIndex; + return result; + } + var groups = state.groups; + var sticky = UNSUPPORTED_Y && re.sticky; + var flags = call(regexpFlags, re); + var source = re.source; + var charsAdded = 0; + var strCopy = str; + if (sticky) { + flags = replace(flags, "y", ""); + if (indexOf(flags, "g") === -1) { + flags += "g"; + } + strCopy = stringSlice(str, re.lastIndex); + if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== "\n")) { + source = "(?: " + source + ")"; + strCopy = " " + strCopy; + charsAdded++; + } + reCopy = new RegExp("^(?:" + source + ")", flags); + } + if (NPCG_INCLUDED) { + reCopy = new RegExp("^" + source + "$(?!\\s)", flags); + } + if (UPDATES_LAST_INDEX_WRONG) + lastIndex = re.lastIndex; + match = call(nativeExec, sticky ? reCopy : re, strCopy); + if (sticky) { + if (match) { + match.input = stringSlice(match.input, charsAdded); + match[0] = stringSlice(match[0], charsAdded); + match.index = re.lastIndex; + re.lastIndex += match[0].length; + } else + re.lastIndex = 0; + } else if (UPDATES_LAST_INDEX_WRONG && match) { + re.lastIndex = re.global ? match.index + match[0].length : lastIndex; + } + if (NPCG_INCLUDED && match && match.length > 1) { + call(nativeReplace, match[0], reCopy, function() { + for (i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === void 0) + match[i] = void 0; + } + }); + } + if (match && groups) { + match.groups = object = create(null); + for (i = 0; i < groups.length; i++) { + group = groups[i]; + object[group[0]] = match[group[1]]; + } + } + return match; + }; + } + module2.exports = patchedExec; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.exec.js +var require_es_regexp_exec = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.exec.js": function() { + "use strict"; + var $2 = require_export(); + var exec = require_regexp_exec(); + $2({ target: "RegExp", proto: true, forced: /./.exec !== exec }, { + exec: exec + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.test.js +var require_es_regexp_test = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.test.js": function() { + "use strict"; + require_es_regexp_exec(); + var $2 = require_export(); + var call = require_function_call(); + var isCallable = require_is_callable(); + var anObject = require_an_object(); + var toString = require_to_string(); + var DELEGATES_TO_EXEC = function() { + var execCalled = false; + var re = /[ac]/; + re.exec = function() { + execCalled = true; + return /./.exec.apply(this, arguments); + }; + return re.test("abc") === true && execCalled; + }(); + var nativeTest = /./.test; + $2({ target: "RegExp", proto: true, forced: !DELEGATES_TO_EXEC }, { + test: function(S) { + var R = anObject(this); + var string = toString(S); + var exec = R.exec; + if (!isCallable(exec)) + return call(nativeTest, R, string); + var result = call(exec, R, string); + if (result === null) + return false; + anObject(result); + return true; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-get-flags.js +var require_regexp_get_flags = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-get-flags.js": function(exports, module2) { + "use strict"; + var call = require_function_call(); + var hasOwn = require_has_own_property(); + var isPrototypeOf = require_object_is_prototype_of(); + var regExpFlags = require_regexp_flags(); + var RegExpPrototype = RegExp.prototype; + module2.exports = function(R) { + var flags = R.flags; + return flags === void 0 && !("flags" in RegExpPrototype) && !hasOwn(R, "flags") && isPrototypeOf(RegExpPrototype, R) ? call(regExpFlags, R) : flags; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.to-string.js +var require_es_regexp_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.to-string.js": function() { + "use strict"; + var PROPER_FUNCTION_NAME = require_function_name().PROPER; + var defineBuiltIn = require_define_built_in(); + var anObject = require_an_object(); + var $toString = require_to_string(); + var fails = require_fails(); + var getRegExpFlags = require_regexp_get_flags(); + var TO_STRING = "toString"; + var RegExpPrototype = RegExp.prototype; + var nativeToString = RegExpPrototype[TO_STRING]; + var NOT_GENERIC = fails(function() { + return nativeToString.call({ source: "a", flags: "b" }) !== "/a/b"; + }); + var INCORRECT_NAME = PROPER_FUNCTION_NAME && nativeToString.name !== TO_STRING; + if (NOT_GENERIC || INCORRECT_NAME) { + defineBuiltIn(RegExpPrototype, TO_STRING, function toString() { + var R = anObject(this); + var pattern = $toString(R.source); + var flags = $toString(getRegExpFlags(R)); + return "/" + pattern + "/" + flags; + }, { unsafe: true }); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-multibyte.js +var require_string_multibyte = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-multibyte.js": function(exports, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var toString = require_to_string(); + var requireObjectCoercible = require_require_object_coercible(); + var charAt = uncurryThis("".charAt); + var charCodeAt = uncurryThis("".charCodeAt); + var stringSlice = uncurryThis("".slice); + var createMethod = function(CONVERT_TO_STRING) { + return function($this, pos) { + var S = toString(requireObjectCoercible($this)); + var position = toIntegerOrInfinity(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) + return CONVERT_TO_STRING ? "" : void 0; + first = charCodeAt(S, position); + return first < 55296 || first > 56319 || position + 1 === size || (second = charCodeAt(S, position + 1)) < 56320 || second > 57343 ? CONVERT_TO_STRING ? charAt(S, position) : first : CONVERT_TO_STRING ? stringSlice(S, position, position + 2) : (first - 55296 << 10) + (second - 56320) + 65536; + }; + }; + module2.exports = { + // `String.prototype.codePointAt` method + // https://tc39.es/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod(true) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.iterator.js +var require_es_string_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.iterator.js": function() { + "use strict"; + var charAt = require_string_multibyte().charAt; + var toString = require_to_string(); + var InternalStateModule = require_internal_state(); + var defineIterator = require_iterator_define(); + var createIterResultObject = require_create_iter_result_object(); + var STRING_ITERATOR = "String Iterator"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); + defineIterator(String, "String", function(iterated) { + setInternalState(this, { + type: STRING_ITERATOR, + string: toString(iterated), + index: 0 + }); + }, function next() { + var state = getInternalState(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) + return createIterResultObject(void 0, true); + point = charAt(string, index); + state.index += point.length; + return createIterResultObject(point, false); + }); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DocumentFragment.js +var require_DocumentFragment = __commonJS({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DocumentFragment.js": function() { + (function(undefined2) { + if (!("DocumentFragment" in self && function() { + try { + return new DocumentFragment(), true; + } catch (n) { + return false; + } + }())) { + (function(global2) { + global2.DocumentFragment = function DocumentFragment2() { + return document.createDocumentFragment(); + }; + var fragment = document.createDocumentFragment(); + global2.DocumentFragment.prototype = Object.create(fragment.constructor.prototype); + })(self); + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/helpers/_mutation.js +var _mutation, mutation_default; +var init_mutation = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/helpers/_mutation.js": function() { + _mutation = /* @__PURE__ */ function() { + function isNode(object) { + if (typeof Node === "function") { + return object instanceof Node; + } + return object && typeof object === "object" && object.nodeName && object.nodeType >= 1 && object.nodeType <= 12; + } + return function mutation(nodes) { + if (nodes.length === 1) { + return isNode(nodes[0]) ? nodes[0] : document.createTextNode(nodes[0] + ""); + } + var fragment = document.createDocumentFragment(); + for (var i = 0; i < nodes.length; i++) { + fragment.appendChild(isNode(nodes[i]) ? nodes[i] : document.createTextNode(nodes[i] + "")); + } + return fragment; + }; + }(); + mutation_default = _mutation; + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DocumentFragment.prototype.append.js +var DocumentFragment_prototype_append_exports = {}; +var init_DocumentFragment_prototype_append = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DocumentFragment.prototype.append.js": function() { + init_mutation(); + (function(undefined2) { + if (!("DocumentFragment" in self && "append" in DocumentFragment.prototype)) { + (function(global2) { + var fragmentProto = document.createDocumentFragment().constructor.prototype; + fragmentProto.append = function append() { + this.appendChild(mutation_default(arguments)); + }; + global2.DocumentFragment.prototype.append = function append() { + this.appendChild(mutation_default(arguments)); + }; + })(self); + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/Element.prototype.append.js +var Element_prototype_append_exports = {}; +var init_Element_prototype_append = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/Element.prototype.append.js": function() { + init_mutation(); + (function(undefined2) { + if (!("Element" in self && "append" in Element.prototype)) { + Document.prototype.append = Element.prototype.append = function append() { + this.appendChild(mutation_default(arguments)); + }; + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/helpers/_DOMTokenList.js +var _DOMTokenList, DOMTokenList_default; +var init_DOMTokenList = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/helpers/_DOMTokenList.js": function() { + _DOMTokenList = function() { + var dpSupport = true; + var defineGetter = function(object, name, fn, configurable) { + if (Object.defineProperty) + Object.defineProperty(object, name, { + configurable: false === dpSupport ? true : !!configurable, + get: fn + }); + else + object.__defineGetter__(name, fn); + }; + try { + defineGetter({}, "support"); + } catch (e) { + dpSupport = false; + } + var _DOMTokenList2 = function(el, prop) { + var that = this; + var tokens = []; + var tokenMap = {}; + var length = 0; + var maxLength = 0; + var addIndexGetter = function(i) { + defineGetter(that, i, function() { + preop(); + return tokens[i]; + }, false); + }; + var reindex = function() { + if (length >= maxLength) + for (; maxLength < length; ++maxLength) { + addIndexGetter(maxLength); + } + }; + var preop = function() { + var error; + var i; + var args = arguments; + var rSpace = /\s+/; + if (args.length) { + for (i = 0; i < args.length; ++i) + if (rSpace.test(args[i])) { + error = new SyntaxError('String "' + args[i] + '" contains an invalid character'); + error.code = 5; + error.name = "InvalidCharacterError"; + throw error; + } + } + if (typeof el[prop] === "object") { + tokens = ("" + el[prop].baseVal).replace(/^\s+|\s+$/g, "").split(rSpace); + } else { + tokens = ("" + el[prop]).replace(/^\s+|\s+$/g, "").split(rSpace); + } + if ("" === tokens[0]) + tokens = []; + tokenMap = {}; + for (i = 0; i < tokens.length; ++i) + tokenMap[tokens[i]] = true; + length = tokens.length; + reindex(); + }; + preop(); + defineGetter(that, "length", function() { + preop(); + return length; + }); + that.toLocaleString = that.toString = function() { + preop(); + return tokens.join(" "); + }; + that.item = function(idx) { + preop(); + return tokens[idx]; + }; + that.contains = function(token) { + preop(); + return !!tokenMap[token]; + }; + that.add = function() { + preop.apply(that, args = arguments); + for (var args, token, i = 0, l = args.length; i < l; ++i) { + token = args[i]; + if (!tokenMap[token]) { + tokens.push(token); + tokenMap[token] = true; + } + } + if (length !== tokens.length) { + length = tokens.length >>> 0; + if (typeof el[prop] === "object") { + el[prop].baseVal = tokens.join(" "); + } else { + el[prop] = tokens.join(" "); + } + reindex(); + } + }; + that.remove = function() { + preop.apply(that, args = arguments); + for (var args, ignore = {}, i = 0, t = []; i < args.length; ++i) { + ignore[args[i]] = true; + delete tokenMap[args[i]]; + } + for (i = 0; i < tokens.length; ++i) + if (!ignore[tokens[i]]) + t.push(tokens[i]); + tokens = t; + length = t.length >>> 0; + if (typeof el[prop] === "object") { + el[prop].baseVal = tokens.join(" "); + } else { + el[prop] = tokens.join(" "); + } + reindex(); + }; + that.toggle = function(token, force) { + preop.apply(that, [token]); + if (void 0 !== force) { + if (force) { + that.add(token); + return true; + } else { + that.remove(token); + return false; + } + } + if (tokenMap[token]) { + that.remove(token); + return false; + } + that.add(token); + return true; + }; + that.forEach = Array.prototype.forEach; + return that; + }; + return _DOMTokenList2; + }(); + DOMTokenList_default = _DOMTokenList; + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DOMTokenList.js +var DOMTokenList_exports = {}; +var init_DOMTokenList2 = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DOMTokenList.js": function() { + init_DOMTokenList(); + (function(undefined2) { + if (!("DOMTokenList" in self && function(e) { + return !("classList" in e) || !e.classList.toggle("x", false) && !e.className; + }(document.createElement("x")))) { + (function(global2) { + var nativeImpl = "DOMTokenList" in global2 && global2.DOMTokenList; + if (!nativeImpl || !!document.createElementNS && !!document.createElementNS("http://www.w3.org/2000/svg", "svg") && !(document.createElementNS("http://www.w3.org/2000/svg", "svg").classList instanceof DOMTokenList)) { + global2.DOMTokenList = DOMTokenList_default; + } + (function() { + var e = document.createElement("span"); + if (!("classList" in e)) + return; + e.classList.toggle("x", false); + if (!e.classList.contains("x")) + return; + e.classList.constructor.prototype.toggle = function toggle(token) { + var force = arguments[1]; + if (force === undefined2) { + var add = !this.contains(token); + this[add ? "add" : "remove"](token); + return add; + } + force = !!force; + this[force ? "add" : "remove"](token); + return force; + }; + })(); + (function() { + var e = document.createElement("span"); + if (!("classList" in e)) + return; + e.classList.add("a", "b"); + if (e.classList.contains("b")) + return; + var native = e.classList.constructor.prototype.add; + e.classList.constructor.prototype.add = function() { + var args = arguments; + var l = arguments.length; + for (var i = 0; i < l; i++) { + native.call(this, args[i]); + } + }; + })(); + (function() { + var e = document.createElement("span"); + if (!("classList" in e)) + return; + e.classList.add("a"); + e.classList.add("b"); + e.classList.remove("a", "b"); + if (!e.classList.contains("b")) + return; + var native = e.classList.constructor.prototype.remove; + e.classList.constructor.prototype.remove = function() { + var args = arguments; + var l = arguments.length; + for (var i = 0; i < l; i++) { + native.call(this, args[i]); + } + }; + })(); + })(self); + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.replace.js +var DOMTokenList_prototype_replace_exports = {}; +var init_DOMTokenList_prototype_replace = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.replace.js": function() { + init_DOMTokenList(); + (function(undefined2) { + if (!("replace" in (document.createElement("div").classList || {}))) { + (function() { + var classList = document.createElement("div").classList; + classList && (classList.constructor.prototype.replace = function(token, newToken) { + var tokenString = "" + token, newTokenString = "" + newToken; + try { + new DOMException(); + } catch (e) { + self.DOMException = function(message, name) { + if (!(this instanceof DOMException)) + return new DOMException(message, name); + this.message = message; + this.name = name; + }; + } + var error; + if (!(tokenString && newTokenString)) + error = "SyntaxError"; + if (!error && (/\s/.test(tokenString) || /\s/.test(newTokenString))) + error = "InvalidCharacterError"; + if (error) + throw new DOMException("DOMTokenList.replace was provided tokens '" + tokenString + "' and '" + newTokenString + "'", error); + if (!this.contains(tokenString)) + return false; + var tokensTobeMoved = []; + var newTokenFound = false; + for (var i = 0; i < this.length; ++i) + if (newTokenString === this.item(i)) + newTokenFound = true; + else if (tokenString === this.item(i)) + break; + for (; i < this.length; ++i) + tokensTobeMoved.push(this.item(i)); + for (i = 0; i < tokensTobeMoved.length; ++i) { + var currentToken = tokensTobeMoved[i]; + currentToken !== newTokenString && this.remove(currentToken); + currentToken !== tokenString && this.add(currentToken); + currentToken === tokenString && !newTokenFound && (this.remove(newTokenString), this.add(newTokenString)); + } + return true; + }); + })(); + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.find.js +var require_es_array_find = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.find.js": function() { + "use strict"; + var $2 = require_export(); + var $find = require_array_iteration().find; + var addToUnscopables = require_add_to_unscopables(); + var FIND = "find"; + var SKIPS_HOLES = true; + if (FIND in []) + Array(1)[FIND](function() { + SKIPS_HOLES = false; + }); + $2({ target: "Array", proto: true, forced: SKIPS_HOLES }, { + find: function find(callbackfn) { + return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0); + } + }); + addToUnscopables(FIND); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.includes.js +var require_es_array_includes = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.includes.js": function() { + "use strict"; + var $2 = require_export(); + var $includes = require_array_includes().includes; + var fails = require_fails(); + var addToUnscopables = require_add_to_unscopables(); + var BROKEN_ON_SPARSE = fails(function() { + return !Array(1).includes(); + }); + $2({ target: "Array", proto: true, forced: BROKEN_ON_SPARSE }, { + includes: function includes(el) { + return $includes(this, el, arguments.length > 1 ? arguments[1] : void 0); + } + }); + addToUnscopables("includes"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.define-property.js +var require_es_object_define_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.define-property.js": function() { + "use strict"; + var $2 = require_export(); + var DESCRIPTORS = require_descriptors(); + var defineProperty = require_object_define_property().f; + $2({ target: "Object", stat: true, forced: Object.defineProperty !== defineProperty, sham: !DESCRIPTORS }, { + defineProperty: defineProperty + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-descriptor.js +var require_es_object_get_own_property_descriptor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-descriptor.js": function() { + "use strict"; + var $2 = require_export(); + var fails = require_fails(); + var toIndexedObject = require_to_indexed_object(); + var nativeGetOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; + var DESCRIPTORS = require_descriptors(); + var FORCED = !DESCRIPTORS || fails(function() { + nativeGetOwnPropertyDescriptor(1); + }); + $2({ target: "Object", stat: true, forced: FORCED, sham: !DESCRIPTORS }, { + getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) { + return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-names.js +var require_es_object_get_own_property_names = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-names.js": function() { + "use strict"; + var $2 = require_export(); + var fails = require_fails(); + var getOwnPropertyNames = require_object_get_own_property_names_external().f; + var FAILS_ON_PRIMITIVES = fails(function() { + return !Object.getOwnPropertyNames(1); + }); + $2({ target: "Object", stat: true, forced: FAILS_ON_PRIMITIVES }, { + getOwnPropertyNames: getOwnPropertyNames + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-prototype-of.js +var require_es_object_get_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-prototype-of.js": function() { + "use strict"; + var $2 = require_export(); + var fails = require_fails(); + var toObject = require_to_object(); + var nativeGetPrototypeOf = require_object_get_prototype_of(); + var CORRECT_PROTOTYPE_GETTER = require_correct_prototype_getter(); + var FAILS_ON_PRIMITIVES = fails(function() { + nativeGetPrototypeOf(1); + }); + $2({ target: "Object", stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, { + getPrototypeOf: function getPrototypeOf(it) { + return nativeGetPrototypeOf(toObject(it)); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-to-string.js +var require_object_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-to-string.js": function(exports, module2) { + "use strict"; + var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); + var classof = require_classof(); + module2.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { + return "[object " + classof(this) + "]"; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.to-string.js +var require_es_object_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.to-string.js": function() { + "use strict"; + var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); + var defineBuiltIn = require_define_built_in(); + var toString = require_object_to_string(); + if (!TO_STRING_TAG_SUPPORT) { + defineBuiltIn(Object.prototype, "toString", toString, { unsafe: true }); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-regexp.js +var require_is_regexp = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-regexp.js": function(exports, module2) { + "use strict"; + var isObject = require_is_object(); + var classof = require_classof_raw(); + var wellKnownSymbol = require_well_known_symbol(); + var MATCH = wellKnownSymbol("match"); + module2.exports = function(it) { + var isRegExp; + return isObject(it) && ((isRegExp = it[MATCH]) !== void 0 ? !!isRegExp : classof(it) === "RegExp"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/not-a-regexp.js +var require_not_a_regexp = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/not-a-regexp.js": function(exports, module2) { + "use strict"; + var isRegExp = require_is_regexp(); + var $TypeError = TypeError; + module2.exports = function(it) { + if (isRegExp(it)) { + throw new $TypeError("The method doesn't accept regular expressions"); + } + return it; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/correct-is-regexp-logic.js +var require_correct_is_regexp_logic = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/correct-is-regexp-logic.js": function(exports, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var MATCH = wellKnownSymbol("match"); + module2.exports = function(METHOD_NAME) { + var regexp = /./; + try { + "/./"[METHOD_NAME](regexp); + } catch (error1) { + try { + regexp[MATCH] = false; + return "/./"[METHOD_NAME](regexp); + } catch (error2) { + } + } + return false; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.includes.js +var require_es_string_includes = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.includes.js": function() { + "use strict"; + var $2 = require_export(); + var uncurryThis = require_function_uncurry_this(); + var notARegExp = require_not_a_regexp(); + var requireObjectCoercible = require_require_object_coercible(); + var toString = require_to_string(); + var correctIsRegExpLogic = require_correct_is_regexp_logic(); + var stringIndexOf = uncurryThis("".indexOf); + $2({ target: "String", proto: true, forced: !correctIsRegExpLogic("includes") }, { + includes: function includes(searchString) { + return !!~stringIndexOf( + toString(requireObjectCoercible(this)), + toString(notARegExp(searchString)), + arguments.length > 1 ? arguments[1] : void 0 + ); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js +var require_fix_regexp_well_known_symbol_logic = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js": function(exports, module2) { + "use strict"; + require_es_regexp_exec(); + var call = require_function_call(); + var defineBuiltIn = require_define_built_in(); + var regexpExec = require_regexp_exec(); + var fails = require_fails(); + var wellKnownSymbol = require_well_known_symbol(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var SPECIES = wellKnownSymbol("species"); + var RegExpPrototype = RegExp.prototype; + module2.exports = function(KEY, exec, FORCED, SHAM) { + var SYMBOL = wellKnownSymbol(KEY); + var DELEGATES_TO_SYMBOL = !fails(function() { + var O = {}; + O[SYMBOL] = function() { + return 7; + }; + return ""[KEY](O) !== 7; + }); + var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function() { + var execCalled = false; + var re = /a/; + if (KEY === "split") { + re = {}; + re.constructor = {}; + re.constructor[SPECIES] = function() { + return re; + }; + re.flags = ""; + re[SYMBOL] = /./[SYMBOL]; + } + re.exec = function() { + execCalled = true; + return null; + }; + re[SYMBOL](""); + return !execCalled; + }); + if (!DELEGATES_TO_SYMBOL || !DELEGATES_TO_EXEC || FORCED) { + var nativeRegExpMethod = /./[SYMBOL]; + var methods = exec(SYMBOL, ""[KEY], function(nativeMethod, regexp, str, arg2, forceStringMethod) { + var $exec = regexp.exec; + if ($exec === regexpExec || $exec === RegExpPrototype.exec) { + if (DELEGATES_TO_SYMBOL && !forceStringMethod) { + return { done: true, value: call(nativeRegExpMethod, regexp, str, arg2) }; + } + return { done: true, value: call(nativeMethod, str, regexp, arg2) }; + } + return { done: false }; + }); + defineBuiltIn(String.prototype, KEY, methods[0]); + defineBuiltIn(RegExpPrototype, SYMBOL, methods[1]); + } + if (SHAM) + createNonEnumerableProperty(RegExpPrototype[SYMBOL], "sham", true); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/advance-string-index.js +var require_advance_string_index = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/advance-string-index.js": function(exports, module2) { + "use strict"; + var charAt = require_string_multibyte().charAt; + module2.exports = function(S, index, unicode) { + return index + (unicode ? charAt(S, index).length : 1); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-substitution.js +var require_get_substitution = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-substitution.js": function(exports, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toObject = require_to_object(); + var floor = Math.floor; + var charAt = uncurryThis("".charAt); + var replace = uncurryThis("".replace); + var stringSlice = uncurryThis("".slice); + var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g; + var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g; + module2.exports = function(matched, str, position, captures, namedCaptures, replacement) { + var tailPos = position + matched.length; + var m = captures.length; + var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED; + if (namedCaptures !== void 0) { + namedCaptures = toObject(namedCaptures); + symbols = SUBSTITUTION_SYMBOLS; + } + return replace(replacement, symbols, function(match, ch) { + var capture; + switch (charAt(ch, 0)) { + case "$": + return "$"; + case "&": + return matched; + case "`": + return stringSlice(str, 0, position); + case "'": + return stringSlice(str, tailPos); + case "<": + capture = namedCaptures[stringSlice(ch, 1, -1)]; + break; + default: + var n = +ch; + if (n === 0) + return match; + if (n > m) { + var f = floor(n / 10); + if (f === 0) + return match; + if (f <= m) + return captures[f - 1] === void 0 ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1); + return match; + } + capture = captures[n - 1]; + } + return capture === void 0 ? "" : capture; + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-exec-abstract.js +var require_regexp_exec_abstract = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-exec-abstract.js": function(exports, module2) { + "use strict"; + var call = require_function_call(); + var anObject = require_an_object(); + var isCallable = require_is_callable(); + var classof = require_classof_raw(); + var regexpExec = require_regexp_exec(); + var $TypeError = TypeError; + module2.exports = function(R, S) { + var exec = R.exec; + if (isCallable(exec)) { + var result = call(exec, R, S); + if (result !== null) + anObject(result); + return result; + } + if (classof(R) === "RegExp") + return call(regexpExec, R, S); + throw new $TypeError("RegExp#exec called on incompatible receiver"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.replace.js +var require_es_string_replace = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.replace.js": function() { + "use strict"; + var apply = require_function_apply(); + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var fixRegExpWellKnownSymbolLogic = require_fix_regexp_well_known_symbol_logic(); + var fails = require_fails(); + var anObject = require_an_object(); + var isCallable = require_is_callable(); + var isNullOrUndefined = require_is_null_or_undefined(); + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var toLength = require_to_length(); + var toString = require_to_string(); + var requireObjectCoercible = require_require_object_coercible(); + var advanceStringIndex = require_advance_string_index(); + var getMethod = require_get_method(); + var getSubstitution = require_get_substitution(); + var regExpExec = require_regexp_exec_abstract(); + var wellKnownSymbol = require_well_known_symbol(); + var REPLACE = wellKnownSymbol("replace"); + var max = Math.max; + var min = Math.min; + var concat = uncurryThis([].concat); + var push = uncurryThis([].push); + var stringIndexOf = uncurryThis("".indexOf); + var stringSlice = uncurryThis("".slice); + var maybeToString = function(it) { + return it === void 0 ? it : String(it); + }; + var REPLACE_KEEPS_$0 = function() { + return "a".replace(/./, "$0") === "$0"; + }(); + var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = function() { + if (/./[REPLACE]) { + return /./[REPLACE]("a", "$0") === ""; + } + return false; + }(); + var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function() { + var re = /./; + re.exec = function() { + var result = []; + result.groups = { a: "7" }; + return result; + }; + return "".replace(re, "$") !== "7"; + }); + fixRegExpWellKnownSymbolLogic("replace", function(_, nativeReplace, maybeCallNative) { + var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? "$" : "$0"; + return [ + // `String.prototype.replace` method + // https://tc39.es/ecma262/#sec-string.prototype.replace + function replace(searchValue, replaceValue) { + var O = requireObjectCoercible(this); + var replacer = isNullOrUndefined(searchValue) ? void 0 : getMethod(searchValue, REPLACE); + return replacer ? call(replacer, searchValue, O, replaceValue) : call(nativeReplace, toString(O), searchValue, replaceValue); + }, + // `RegExp.prototype[@@replace]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace + function(string, replaceValue) { + var rx = anObject(this); + var S = toString(string); + if (typeof replaceValue == "string" && stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 && stringIndexOf(replaceValue, "$<") === -1) { + var res = maybeCallNative(nativeReplace, rx, S, replaceValue); + if (res.done) + return res.value; + } + var functionalReplace = isCallable(replaceValue); + if (!functionalReplace) + replaceValue = toString(replaceValue); + var global2 = rx.global; + var fullUnicode; + if (global2) { + fullUnicode = rx.unicode; + rx.lastIndex = 0; + } + var results = []; + var result; + while (true) { + result = regExpExec(rx, S); + if (result === null) + break; + push(results, result); + if (!global2) + break; + var matchStr = toString(result[0]); + if (matchStr === "") + rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); + } + var accumulatedResult = ""; + var nextSourcePosition = 0; + for (var i = 0; i < results.length; i++) { + result = results[i]; + var matched = toString(result[0]); + var position = max(min(toIntegerOrInfinity(result.index), S.length), 0); + var captures = []; + var replacement; + for (var j = 1; j < result.length; j++) + push(captures, maybeToString(result[j])); + var namedCaptures = result.groups; + if (functionalReplace) { + var replacerArgs = concat([matched], captures, position, S); + if (namedCaptures !== void 0) + push(replacerArgs, namedCaptures); + replacement = toString(apply(replaceValue, void 0, replacerArgs)); + } else { + replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue); + } + if (position >= nextSourcePosition) { + accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement; + nextSourcePosition = position + matched.length; + } + } + return accumulatedResult + stringSlice(S, nextSourcePosition); + } + ]; + }, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE); + } +}); + +// dist/AjaxLogin/AjaxLogin.js +require_es_symbol(); +require_es_symbol_description(); +require_es_symbol_async_iterator(); +require_es_symbol_iterator(); +require_es_symbol_to_string_tag(); +require_es_error_cause(); +require_es_error_to_string(); +require_es_array_for_each(); +require_es_array_from(); +require_es_array_iterator(); +require_es_array_push(); +require_es_array_reverse(); +require_es_array_slice(); +require_es_json_to_string_tag(); +require_es_math_to_string_tag(); +require_es_object_set_prototype_of(); +require_es_promise(); +require_es_regexp_test(); +require_es_regexp_to_string(); +require_es_string_iterator(); +require_DocumentFragment(); +init_DocumentFragment_prototype_append(); +init_Element_prototype_append(); +init_DOMTokenList2(); +init_DOMTokenList_prototype_replace(); +require_es_array_find(); +require_es_array_includes(); +require_es_object_define_property(); +require_es_object_get_own_property_descriptor(); +require_es_object_get_own_property_names(); +require_es_object_get_prototype_of(); +require_es_object_to_string(); +require_es_regexp_exec(); +require_es_string_includes(); +require_es_string_replace(); +function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); +} +function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +function _iterableToArrayLimit(r, l) { + var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; + if (null != t) { + var e, n, i, u, a = [], f = true, o = false; + try { + if (i = (t = t.call(r)).next, 0 === l) { + if (Object(t) !== t) + return; + f = false; + } else + for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = true) + ; + } catch (r2) { + o = true, n = r2; + } finally { + try { + if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) + return; + } finally { + if (o) + throw n; + } + } + return a; + } +} +function _arrayWithHoles(arr) { + if (Array.isArray(arr)) + return arr; +} +function _regeneratorRuntime() { + "use strict"; + /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ + _regeneratorRuntime = function _regeneratorRuntime2() { + return e; + }; + var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function(t2, e2, r2) { + t2[e2] = r2.value; + }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; + function define(t2, e2, r2) { + return Object.defineProperty(t2, e2, { value: r2, enumerable: true, configurable: true, writable: true }), t2[e2]; + } + try { + define({}, ""); + } catch (t2) { + define = function define2(t3, e2, r2) { + return t3[e2] = r2; + }; + } + function wrap(t2, e2, r2, n2) { + var i2 = e2 && e2.prototype instanceof Generator ? e2 : Generator, a2 = Object.create(i2.prototype), c2 = new Context(n2 || []); + return o(a2, "_invoke", { value: makeInvokeMethod(t2, r2, c2) }), a2; + } + function tryCatch(t2, e2, r2) { + try { + return { type: "normal", arg: t2.call(e2, r2) }; + } catch (t3) { + return { type: "throw", arg: t3 }; + } + } + e.wrap = wrap; + var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; + function Generator() { + } + function GeneratorFunction() { + } + function GeneratorFunctionPrototype() { + } + var p = {}; + define(p, a, function() { + return this; + }); + var d = Object.getPrototypeOf, v = d && d(d(values([]))); + v && v !== r && n.call(v, a) && (p = v); + var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); + function defineIteratorMethods(t2) { + ["next", "throw", "return"].forEach(function(e2) { + define(t2, e2, function(t3) { + return this._invoke(e2, t3); + }); + }); + } + function AsyncIterator(t2, e2) { + function invoke(r3, o2, i2, a2) { + var c2 = tryCatch(t2[r3], t2, o2); + if ("throw" !== c2.type) { + var u2 = c2.arg, h2 = u2.value; + return h2 && "object" == _typeof(h2) && n.call(h2, "__await") ? e2.resolve(h2.__await).then(function(t3) { + invoke("next", t3, i2, a2); + }, function(t3) { + invoke("throw", t3, i2, a2); + }) : e2.resolve(h2).then(function(t3) { + u2.value = t3, i2(u2); + }, function(t3) { + return invoke("throw", t3, i2, a2); + }); + } + a2(c2.arg); + } + var r2; + o(this, "_invoke", { value: function value(t3, n2) { + function callInvokeWithMethodAndArg() { + return new e2(function(e3, r3) { + invoke(t3, n2, e3, r3); + }); + } + return r2 = r2 ? r2.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); + } }); + } + function makeInvokeMethod(e2, r2, n2) { + var o2 = h; + return function(i2, a2) { + if (o2 === f) + throw new Error("Generator is already running"); + if (o2 === s) { + if ("throw" === i2) + throw a2; + return { value: t, done: true }; + } + for (n2.method = i2, n2.arg = a2; ; ) { + var c2 = n2.delegate; + if (c2) { + var u2 = maybeInvokeDelegate(c2, n2); + if (u2) { + if (u2 === y) + continue; + return u2; + } + } + if ("next" === n2.method) + n2.sent = n2._sent = n2.arg; + else if ("throw" === n2.method) { + if (o2 === h) + throw o2 = s, n2.arg; + n2.dispatchException(n2.arg); + } else + "return" === n2.method && n2.abrupt("return", n2.arg); + o2 = f; + var p2 = tryCatch(e2, r2, n2); + if ("normal" === p2.type) { + if (o2 = n2.done ? s : l, p2.arg === y) + continue; + return { value: p2.arg, done: n2.done }; + } + "throw" === p2.type && (o2 = s, n2.method = "throw", n2.arg = p2.arg); + } + }; + } + function maybeInvokeDelegate(e2, r2) { + var n2 = r2.method, o2 = e2.iterator[n2]; + if (o2 === t) + return r2.delegate = null, "throw" === n2 && e2.iterator["return"] && (r2.method = "return", r2.arg = t, maybeInvokeDelegate(e2, r2), "throw" === r2.method) || "return" !== n2 && (r2.method = "throw", r2.arg = new TypeError("The iterator does not provide a '" + n2 + "' method")), y; + var i2 = tryCatch(o2, e2.iterator, r2.arg); + if ("throw" === i2.type) + return r2.method = "throw", r2.arg = i2.arg, r2.delegate = null, y; + var a2 = i2.arg; + return a2 ? a2.done ? (r2[e2.resultName] = a2.value, r2.next = e2.nextLoc, "return" !== r2.method && (r2.method = "next", r2.arg = t), r2.delegate = null, y) : a2 : (r2.method = "throw", r2.arg = new TypeError("iterator result is not an object"), r2.delegate = null, y); + } + function pushTryEntry(t2) { + var e2 = { tryLoc: t2[0] }; + 1 in t2 && (e2.catchLoc = t2[1]), 2 in t2 && (e2.finallyLoc = t2[2], e2.afterLoc = t2[3]), this.tryEntries.push(e2); + } + function resetTryEntry(t2) { + var e2 = t2.completion || {}; + e2.type = "normal", delete e2.arg, t2.completion = e2; + } + function Context(t2) { + this.tryEntries = [{ tryLoc: "root" }], t2.forEach(pushTryEntry, this), this.reset(true); + } + function values(e2) { + if (e2 || "" === e2) { + var r2 = e2[a]; + if (r2) + return r2.call(e2); + if ("function" == typeof e2.next) + return e2; + if (!isNaN(e2.length)) { + var o2 = -1, i2 = function next() { + for (; ++o2 < e2.length; ) + if (n.call(e2, o2)) + return next.value = e2[o2], next.done = false, next; + return next.value = t, next.done = true, next; + }; + return i2.next = i2; + } + } + throw new TypeError(_typeof(e2) + " is not iterable"); + } + return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: true }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: true }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function(t2) { + var e2 = "function" == typeof t2 && t2.constructor; + return !!e2 && (e2 === GeneratorFunction || "GeneratorFunction" === (e2.displayName || e2.name)); + }, e.mark = function(t2) { + return Object.setPrototypeOf ? Object.setPrototypeOf(t2, GeneratorFunctionPrototype) : (t2.__proto__ = GeneratorFunctionPrototype, define(t2, u, "GeneratorFunction")), t2.prototype = Object.create(g), t2; + }, e.awrap = function(t2) { + return { __await: t2 }; + }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function() { + return this; + }), e.AsyncIterator = AsyncIterator, e.async = function(t2, r2, n2, o2, i2) { + void 0 === i2 && (i2 = Promise); + var a2 = new AsyncIterator(wrap(t2, r2, n2, o2), i2); + return e.isGeneratorFunction(r2) ? a2 : a2.next().then(function(t3) { + return t3.done ? t3.value : a2.next(); + }); + }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function() { + return this; + }), define(g, "toString", function() { + return "[object Generator]"; + }), e.keys = function(t2) { + var e2 = Object(t2), r2 = []; + for (var n2 in e2) + r2.push(n2); + return r2.reverse(), function next() { + for (; r2.length; ) { + var t3 = r2.pop(); + if (t3 in e2) + return next.value = t3, next.done = false, next; + } + return next.done = true, next; + }; + }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e2) { + if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = false, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e2) + for (var r2 in this) + "t" === r2.charAt(0) && n.call(this, r2) && !isNaN(+r2.slice(1)) && (this[r2] = t); + }, stop: function stop() { + this.done = true; + var t2 = this.tryEntries[0].completion; + if ("throw" === t2.type) + throw t2.arg; + return this.rval; + }, dispatchException: function dispatchException(e2) { + if (this.done) + throw e2; + var r2 = this; + function handle(n2, o3) { + return a2.type = "throw", a2.arg = e2, r2.next = n2, o3 && (r2.method = "next", r2.arg = t), !!o3; + } + for (var o2 = this.tryEntries.length - 1; o2 >= 0; --o2) { + var i2 = this.tryEntries[o2], a2 = i2.completion; + if ("root" === i2.tryLoc) + return handle("end"); + if (i2.tryLoc <= this.prev) { + var c2 = n.call(i2, "catchLoc"), u2 = n.call(i2, "finallyLoc"); + if (c2 && u2) { + if (this.prev < i2.catchLoc) + return handle(i2.catchLoc, true); + if (this.prev < i2.finallyLoc) + return handle(i2.finallyLoc); + } else if (c2) { + if (this.prev < i2.catchLoc) + return handle(i2.catchLoc, true); + } else { + if (!u2) + throw new Error("try statement without catch or finally"); + if (this.prev < i2.finallyLoc) + return handle(i2.finallyLoc); + } + } + } + }, abrupt: function abrupt(t2, e2) { + for (var r2 = this.tryEntries.length - 1; r2 >= 0; --r2) { + var o2 = this.tryEntries[r2]; + if (o2.tryLoc <= this.prev && n.call(o2, "finallyLoc") && this.prev < o2.finallyLoc) { + var i2 = o2; + break; + } + } + i2 && ("break" === t2 || "continue" === t2) && i2.tryLoc <= e2 && e2 <= i2.finallyLoc && (i2 = null); + var a2 = i2 ? i2.completion : {}; + return a2.type = t2, a2.arg = e2, i2 ? (this.method = "next", this.next = i2.finallyLoc, y) : this.complete(a2); + }, complete: function complete(t2, e2) { + if ("throw" === t2.type) + throw t2.arg; + return "break" === t2.type || "continue" === t2.type ? this.next = t2.arg : "return" === t2.type ? (this.rval = this.arg = t2.arg, this.method = "return", this.next = "end") : "normal" === t2.type && e2 && (this.next = e2), y; + }, finish: function finish(t2) { + for (var e2 = this.tryEntries.length - 1; e2 >= 0; --e2) { + var r2 = this.tryEntries[e2]; + if (r2.finallyLoc === t2) + return this.complete(r2.completion, r2.afterLoc), resetTryEntry(r2), y; + } + }, "catch": function _catch(t2) { + for (var e2 = this.tryEntries.length - 1; e2 >= 0; --e2) { + var r2 = this.tryEntries[e2]; + if (r2.tryLoc === t2) { + var n2 = r2.completion; + if ("throw" === n2.type) { + var o2 = n2.arg; + resetTryEntry(r2); + } + return o2; + } + } + throw new Error("illegal catch attempt"); + }, delegateYield: function delegateYield(e2, r2, n2) { + return this.delegate = { iterator: values(e2), resultName: r2, nextLoc: n2 }, "next" === this.method && (this.arg = t), y; + } }, e; +} +function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { + try { + var info = gen[key](arg); + var value = info.value; + } catch (error) { + reject(error); + return; + } + if (info.done) { + resolve(value); + } else { + Promise.resolve(value).then(_next, _throw); + } +} +function _asyncToGenerator(fn) { + return function() { + var self2 = this, args = arguments; + return new Promise(function(resolve, reject) { + var gen = fn.apply(self2, args); + function _next(value) { + asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); + } + function _throw(err) { + asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); + } + _next(void 0); + }); + }; +} +function _createForOfIteratorHelper(o, allowArrayLike) { + var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; + if (!it) { + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) + o = it; + var i = 0; + var F = function F2() { + }; + return { s: F, n: function n() { + if (i >= o.length) + return { done: true }; + return { done: false, value: o[i++] }; + }, e: function e(_e) { + throw _e; + }, f: F }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + var normalCompletion = true, didErr = false, err; + return { s: function s() { + it = it.call(o); + }, n: function n() { + var step = it.next(); + normalCompletion = step.done; + return step; + }, e: function e(_e2) { + didErr = true; + err = _e2; + }, f: function f() { + try { + if (!normalCompletion && it["return"] != null) + it["return"](); + } finally { + if (didErr) + throw err; + } + } }; +} +function _unsupportedIterableToArray(o, minLen) { + if (!o) + return; + if (typeof o === "string") + return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) + n = o.constructor.name; + if (n === "Map" || n === "Set") + return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) + return _arrayLikeToArray(o, minLen); +} +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) + len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) + arr2[i] = arr[i]; + return arr2; +} +function _typeof(o) { + "@babel/helpers - typeof"; + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof(o); +} +var __create = Object.create; +var __defProp2 = Object.defineProperty; +var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; +var __getOwnPropNames2 = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp2 = Object.prototype.hasOwnProperty; +var __copyProps2 = function __copyProps3(to, from, except, desc) { + if (from && _typeof(from) === "object" || typeof from === "function") { + var _iterator = _createForOfIteratorHelper(__getOwnPropNames2(from)), _step; + try { + var _loop = function _loop2() { + var key = _step.value; + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { + get: function get() { + return from[key]; + }, + enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable + }); + }; + for (_iterator.s(); !(_step = _iterator.n()).done; ) { + _loop(); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } + return to; +}; +var __toESM = function __toESM2(mod, isNodeMode, target) { + return target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps2( + // 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 ? __defProp2(target, "default", { + value: mod, + enumerable: true + }) : target, + mod + ); +}; +//! src/AjaxLogin/options.json +var loginElementSelector = 'a:has(.ajaxlogin-mount-point),#pt-login>a,.vector-user-menu-login>a,#user-tools>a[href*="Special"],.mainpage-top-menu>li:nth-child(2) a'; +var version = "4.0"; +//! src/AjaxLogin/AjaxLogin.ts +var import_ext_gadget13 = require("ext.gadget.Util"); +//! src/AjaxLogin/modules/constant.ts +var WG_USER_NAME = mw.config.get("wgUserName"); +//! src/AjaxLogin/modules/addListener.ts +var import_ext_gadget = require("ext.gadget.FilterAlteredClicks"); +var addListener = function addListener2($element, eventListener) { + $element.on("click", (0, import_ext_gadget.filterAlteredClicks)(function(event) { + eventListener(event); + })); + $element.on("keydown", eventListener); +}; +//! src/AjaxLogin/modules/api.ts +var import_ext_gadget2 = require("ext.gadget.Util"); +var api = (0, import_ext_gadget2.initMwApi)("AjaxLogin/".concat(version)); +//! src/AjaxLogin/modules/core.tsx +var import_ext_gadget11 = __toESM(require("ext.gadget.React"), 1); +//! src/AjaxLogin/modules/util/checkValid.tsx +var import_ext_gadget4 = __toESM(require("ext.gadget.React"), 1); +//! src/AjaxLogin/modules/i18n.ts +var import_ext_gadget3 = require("ext.gadget.i18n"); +var getI18nMessages = function getI18nMessages2() { + return { + "6-digit number": (0, import_ext_gadget3.localize)({ + en: "6-digit number", + ja: "6桁の数字", + "zh-hans": "6位数字", + "zh-hant": "6位數字" + }), + Cancel: (0, import_ext_gadget3.localize)({ + en: "Cancel", + ja: "キャンセル", + zh: "取消" + }), + "Enter password": (0, import_ext_gadget3.localize)({ + en: "Enter password", + ja: "パスワード", + "zh-hans": "请输入密码", + "zh-hant": "請輸入密碼" + }), + "Enter 2FA verification code": (0, import_ext_gadget3.localize)({ + en: "2FA verification code", + ja: "2FA認証コード", + "zh-hans": "请输入2FA验证码", + "zh-hant": "請輸入2FA驗證碼" + }), + "Forgot password?": (0, import_ext_gadget3.localize)({ + en: "Forgot password?", + ja: "パスワードをお忘れですか?", + "zh-hans": "忘记密码?", + "zh-hant": "忘記密碼?" + }), + "Getting login token": (0, import_ext_gadget3.localize)({ + en: "Getting login token", + ja: "ログイントークンを取得しています", + "zh-hans": "正在获取登录令牌", + "zh-hant": "正在獲取登入權杖" + }), + "help for I agree with the relevant terms": (0, import_ext_gadget3.localize)({ + en: 'When you login, it means that you have carefully read, fully understood and agreed to comply with our Terms of Service, Personal Information Protection Policy and the Common Program.', + ja: 'ログインをすると、あなたは本サイトの『利用規約』『個人情報保護方針』『共同綱領』を十分に理解し、同意したことになります。', + "zh-hans": '登录时,即代表您已仔细阅读、充分了解并同意遵守本网站的《用户协议》、《个人信息保护方针》及《共同纲领》。', + "zh-hant": '登錄時,即代表您已仔細閱讀、充分了解並同意遵守本網站的《用戶協議》、《個人信息保護方針》及《共同綱領》。' + }), + "I agree": (0, import_ext_gadget3.localize)({ + en: "I agree", + ja: "同意する", + zh: "我同意" + }), + "I agree with the relevant terms": (0, import_ext_gadget3.localize)({ + en: "I agree with the relevant terms", + ja: "関連する規約を読み、同意", + "zh-hans": "我已阅读并同意相关条款", + "zh-hant": "我已閲讀並同意相關條款" + }), + "Invalid 2FA verification code": (0, import_ext_gadget3.localize)({ + en: "Invalid 2FA verification code", + ja: "2FA認証コードが間違っています", + "zh-hans": "2FA验证码错误", + "zh-hant": "2FA驗證碼錯誤" + }), + "Invalid useruame or password": (0, import_ext_gadget3.localize)({ + en: "Invalid useruame or password", + ja: "利用者名またはパスワードが間違っています", + "zh-cn": "用户名或密码错误", + "zh-hk": "用戶名稱或密碼錯誤", + "zh-tw": "使用者名稱或密碼錯誤" + }), + "Keep me logged in": (0, import_ext_gadget3.localize)({ + en: "Keep me logged in", + ja: "ログイン状態を保持", + "zh-hans": "记住我的登录状态", + "zh-hant": "記住我的登入狀態" + }), + "Logging in": (0, import_ext_gadget3.localize)({ + en: "Logging in", + ja: "ログインしています", + "zh-hans": "正在登录", + "zh-hant": "正在登入" + }), + Login: (0, import_ext_gadget3.localize)({ + en: "Login", + ja: "ログイン", + "zh-hans": "登录", + "zh-hant": "登入" + }), + "Login cancelled": (0, import_ext_gadget3.localize)({ + en: "Login cancelled", + ja: "ログインキャンセル", + "zh-hans": "登录取消", + "zh-hant": "登入取消" + }), + "Login succeed": (0, import_ext_gadget3.localize)({ + en: "Login succeed", + ja: "ログインに成功しました", + "zh-hans": "登录成功", + "zh-hant": "登入成功" + }), + "Login token getted": (0, import_ext_gadget3.localize)({ + en: "Login token getted", + ja: "ログイントークンの取得に成功しました", + "zh-hans": "获取登录令牌成功", + "zh-hant": "獲取登入權杖成功" + }), + "New password": (0, import_ext_gadget3.localize)({ + en: "New password", + ja: "新しいパスワード", + "zh-hans": "新密码", + "zh-hant": "新密碼" + }), + "New password is required": (0, import_ext_gadget3.localize)({ + en: "New password is required", + ja: "新しいパスワードを設定してください", + "zh-hans": "需要设置新密码", + "zh-hant": "需要設置新密碼" + }), + Password: (0, import_ext_gadget3.localize)({ + en: "Password", + ja: "パスワード", + "zh-hans": "密码", + "zh-hant": "密碼" + }), + "Reset password": (0, import_ext_gadget3.localize)({ + en: "Reset password", + ja: "パスワードをリセット", + "zh-hans": "重置密码", + "zh-hant": "重新設定密碼" + }), + Username: (0, import_ext_gadget3.localize)({ + en: "Username", + ja: "利用者名", + "zh-cn": "用户名", + "zh-hk": "用戶名稱", + "zh-tw": "使用者名稱" + }), + AgreedOrNot: (0, import_ext_gadget3.localize)({ + en: "Please read the relevant terms. If you agree, check the checkbox to confirm", + ja: "関連する規約をお読みいただき、同意される場合は、チェックボックスにチェックを入れて確認してください", + "zh-hans": "请阅读相关条款。若同意,勾选复选框以确认", + "zh-hant": "請閲讀相關條款。若同意,勾選複選框以確認" + }), + DoubleCheckAgreedOrNot: (0, import_ext_gadget3.localize)({ + en: 'You have carefully read, fully understood and agreed to comply with our Terms of Service, Personal Information Protection Policy and Common Program.', + ja: 'あなたは本サイトの『利用規約』『個人情報保護方針』『共同綱領』を十分に理解し、同意したことになります。', + "zh-hans": '您已仔细阅读、充分了解并同意遵守本网站的《用户协议》《个人信息保护方针》《共同纲领》。', + "zh-hant": '您已仔細閱讀、充分了解並同意遵守本網站的《用戶協議》《個人信息保護方針》《共同綱領》。' + }), + Empty2FA: (0, import_ext_gadget3.localize)({ + en: "The 2FA verification code cannot be empty", + ja: "2FA認証コードが入力されていません", + "zh-hans": "2FA验证码不能为空", + "zh-hant": "2FA驗證碼不能爲空" + }), + EmptyPassword: (0, import_ext_gadget3.localize)({ + en: "The password cannot be empty", + ja: "パスワードが入力されていません", + "zh-hans": "密码不能为空", + "zh-hant": "密碼不能爲空" + }), + EmptyUsernameOrPassword: (0, import_ext_gadget3.localize)({ + en: "The username or password cannot be empty", + ja: "利用者名またはパスワードが入力されていません", + "zh-cn": "用户名或密码不能为空", + "zh-hk": "用戶名稱或密碼不能爲空", + "zh-tw": "使用者名稱或密碼不能爲空" + }), + "Network error": (0, import_ext_gadget3.localize)({ + en: "Network error. Redirecting...", + ja: "ネットワークエラー、リダイレクト中...", + "zh-hans": "网络异常。重定向中……", + "zh-hant": "網路異常。重新導向中……" + }), + SelectedOrNot: (0, import_ext_gadget3.localize)({ + en: "If selected, the login status will be kept for 6 months. If not selected, it will be kept for 1 month.", + ja: "チェックを入れるとログイン状態が6ヶ月間保持され、入れない場合は1ヶ月間保持されます。", + "zh-hans": "勾选则保持登录状态6个月,不勾选则保持1个月。", + "zh-hant": "勾選则保持登入狀態6個月,不勾選則保持1個月。" + }), + TooFrequent: (0, import_ext_gadget3.localize)({ + en: "The user login is too frequent, please try again in five minutes", + ja: "利用者が頻繁すぎるため、5分後に再試行してください", + "zh-cn": "用户登录过于频繁,请五分钟后再试", + "zh-hk": "用戶登入過於頻繁,請五分鐘後再試", + "zh-tw": "使用者登入过于频繁,请五分钟后再试" + }), + "Unexpected API response": (0, import_ext_gadget3.localize)({ + en: "Unexpected API response: $1. Redirecting...", + ja: "予期せぬAPIの応答:$1、リダイレクト中...", + "zh-hans": "意外的API响应:$1。重定向中……", + "zh-hant": "意外的API響應:$1。重新導向中……" + }) + }; +}; +var i18nMessages = getI18nMessages(); +var getMessage = function getMessage2(key) { + return i18nMessages[key] || key; +}; +//! src/AjaxLogin/modules/initWindowManager.ts +var initWindowManager = function initWindowManager2() { + return new OO.ui.WindowManager(); +}; +var windowManager = initWindowManager(); +//! src/AjaxLogin/modules/util/oouiConfirm.ts +var oouiConfirm = /* @__PURE__ */ function() { + var _ref = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee(options) { + var messageDialog, instance, data, _data; + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) + switch (_context.prev = _context.next) { + case 0: + messageDialog = new OO.ui.MessageDialog(); + windowManager.addWindows([messageDialog]); + instance = windowManager.openWindow(messageDialog, options); + _context.next = 5; + return instance.closed; + case 5: + data = _context.sent; + _data = data; + return _context.abrupt("return", !!((_data === null || _data === void 0 ? void 0 : _data.action) === "accept")); + case 8: + case "end": + return _context.stop(); + } + }, _callee); + })); + return function oouiConfirm2(_x) { + return _ref.apply(this, arguments); + }; +}(); +//! src/AjaxLogin/modules/util/checkValid.tsx +var import_ext_gadget5 = require("ext.gadget.Toastify"); +var checkValid = /* @__PURE__ */ function() { + var _ref3 = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee2(_ref2, toastifyInstance) { + var _ref4, agreeTosCheckbox, nameInput, pwdInput, isAgreeTos, isFill, isValid; + return _regeneratorRuntime().wrap(function _callee2$(_context2) { + while (1) + switch (_context2.prev = _context2.next) { + case 0: + _ref4 = _slicedToArray(_ref2, 3), agreeTosCheckbox = _ref4[0], nameInput = _ref4[1], pwdInput = _ref4[2]; + isAgreeTos = agreeTosCheckbox.isSelected(); + isFill = ![nameInput.getValue(), pwdInput.getValue()].includes(""); + toastifyInstance.hideToast(); + _context2.next = 6; + return windowManager.clearWindows(); + case 6: + if (isAgreeTos) { + _context2.next = 13; + break; + } + _context2.next = 9; + return oouiConfirm({ + message: $(/* @__PURE__ */ import_ext_gadget4["default"].createElement("span", { + innerHTML: getMessage("DoubleCheckAgreedOrNot") + })), + actions: [{ + label: $(/* @__PURE__ */ import_ext_gadget4["default"].createElement("b", null, getMessage("Cancel"))), + action: "cancel", + flags: ["safe", "close"] + }, { + label: $(/* @__PURE__ */ import_ext_gadget4["default"].createElement("b", null, getMessage("I agree"))), + action: "accept", + flags: ["primary", "progressive"] + }] + }); + case 9: + isAgreeTos = _context2.sent; + if (!isAgreeTos) { + toastifyInstance = (0, import_ext_gadget5.toastify)({ + text: getMessage("AgreedOrNot"), + duration: -1 + }, "info"); + } + _context2.next = 14; + break; + case 13: + if (!isFill) { + toastifyInstance = (0, import_ext_gadget5.toastify)({ + text: getMessage("EmptyUsernameOrPassword"), + duration: -1 + }, "info"); + } + case 14: + isValid = isAgreeTos && isFill; + return _context2.abrupt("return", { + isAgreeTos: isAgreeTos, + isValid: isValid, + toastifyInstance: toastifyInstance + }); + case 16: + case "end": + return _context2.stop(); + } + }, _callee2); + })); + return function checkValid2(_x2, _x3) { + return _ref3.apply(this, arguments); + }; +}(); +//! src/AjaxLogin/modules/util/generateElements.tsx +var import_ext_gadget6 = __toESM(require("ext.gadget.React"), 1); +var generateElements = function generateElements2(isAgreeTos) { + var messageDialog = new OO.ui.MessageDialog(); + var nameInput = new OO.ui.TextInputWidget({ + icon: "userAvatar", + placeholder: getMessage("Username"), + validate: "non-empty" + }); + var pwdInput = new OO.ui.TextInputWidget({ + icon: "key", + placeholder: getMessage("Password"), + type: "password", + validate: "non-empty" + }); + var agreeTosCheckbox = new OO.ui.CheckboxInputWidget({ + selected: isAgreeTos + }); + var agreeTosLayout = new OO.ui.FieldLayout(agreeTosCheckbox, { + align: "inline", + label: getMessage("I agree with the relevant terms") + }); + var keepLoginCheckbox = new OO.ui.CheckboxInputWidget(); + var keepLoginLayout = new OO.ui.FieldLayout(keepLoginCheckbox, { + align: "inline", + help: getMessage("SelectedOrNot"), + label: getMessage("Keep me logged in") + }); + var label = /* @__PURE__ */ import_ext_gadget6["default"].createElement("label", { + className: ["oo-ui-labelWidget", "oo-ui-labelElement-label"], + style: { + fontSize: "90%", + textAlign: "justify" + } + }); + var $label = $(label); + var $agreeTos = $label.clone().append(agreeTosLayout.$element); + var $forgotPassword = $label.clone().css("float", "right").append(/* @__PURE__ */ import_ext_gadget6["default"].createElement("a", { + href: mw.util.getUrl("Special:PasswordReset"), + title: getMessage("Reset password") + }, getMessage("Forgot password?"))); + var $inputBox = $label.clone().css({ + display: "block", + "font-size": "inherit", + padding: "6px 0" + }).append(nameInput.$element.css("margin-bottom", "6px"), pwdInput.$element); + var $tosLabel = $label.clone().html(getMessage("help for I agree with the relevant terms")); + var $rememberMe = $label.clone().append(keepLoginLayout.$element.css("margin-top", "6px")); + return { + $agreeTos: $agreeTos, + $forgotPassword: $forgotPassword, + $inputBox: $inputBox, + $rememberMe: $rememberMe, + $tosLabel: $tosLabel, + agreeTosCheckbox: agreeTosCheckbox, + keepLoginCheckbox: keepLoginCheckbox, + messageDialog: messageDialog, + nameInput: nameInput, + pwdInput: pwdInput + }; +}; +//! src/AjaxLogin/modules/util/oouiPrompt.tsx +var import_ext_gadget7 = __toESM(require("ext.gadget.React"), 1); +//! src/AjaxLogin/modules/util/removeWindowResizeHandler.ts +var removeWindowResizeHandler = function removeWindowResizeHandler2() { + $(window).off({ + "orientationchange resize": windowManager.onWindowResizeHandler + }); +}; +//! src/AjaxLogin/modules/util/oouiPrompt.tsx +var oouiPrompt = /* @__PURE__ */ function() { + var _ref5 = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee3(retypePassword) { + var codeDialog, codeInput, codeLayout, instance, data, _data; + return _regeneratorRuntime().wrap(function _callee3$(_context3) { + while (1) + switch (_context3.prev = _context3.next) { + case 0: + codeDialog = new OO.ui.MessageDialog(); + codeInput = new OO.ui.TextInputWidget({ + icon: "key", + placeholder: retypePassword ? getMessage("New password") : getMessage("6-digit number"), + validate: "integer" + }); + codeLayout = new OO.ui.FieldLayout(codeInput, { + align: "top", + label: $(/* @__PURE__ */ import_ext_gadget7["default"].createElement("b", { + className: ["oo-ui-messageDialog-title", "oo-ui-window-head"] + }, retypePassword ? getMessage("Enter password") : getMessage("Enter 2FA verification code"))) + }); + windowManager.addWindows([codeDialog]); + instance = windowManager.openWindow(codeDialog, { + message: codeLayout.$element + }); + removeWindowResizeHandler(); + void instance.opened.then(function() { + codeInput.on("enter", function() { + windowManager.getCurrentWindow().close({ + action: "accept" + }); + }); + codeInput.focus(); + }); + _context3.next = 9; + return instance.closed; + case 9: + data = _context3.sent; + _data = data; + return _context3.abrupt("return", (_data === null || _data === void 0 ? void 0 : _data.action) === "accept" ? codeInput.getValue() : null); + case 12: + case "end": + return _context3.stop(); + } + }, _callee3); + })); + return function oouiPrompt2(_x4) { + return _ref5.apply(this, arguments); + }; +}(); +//! src/AjaxLogin/modules/util/queryLoginToken.ts +var import_ext_gadget8 = require("ext.gadget.Toastify"); +var queryLoginToken = /* @__PURE__ */ function() { + var _ref6 = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee4(toastifyInstance) { + var loginToken; + return _regeneratorRuntime().wrap(function _callee4$(_context4) { + while (1) + switch (_context4.prev = _context4.next) { + case 0: + toastifyInstance.hideToast(); + toastifyInstance = (0, import_ext_gadget8.toastify)({ + text: getMessage("Getting login token") + }); + _context4.next = 4; + return api.getToken("login"); + case 4: + loginToken = _context4.sent; + toastifyInstance.hideToast(); + toastifyInstance = (0, import_ext_gadget8.toastify)({ + text: getMessage("Login token getted"), + duration: -1 + }); + return _context4.abrupt("return", { + loginToken: loginToken, + toastifyInstance: toastifyInstance + }); + case 8: + case "end": + return _context4.stop(); + } + }, _callee4); + })); + return function queryLoginToken2(_x5) { + return _ref6.apply(this, arguments); + }; +}(); +//! src/AjaxLogin/modules/util/redirectOriginLoginPage.ts +var import_ext_gadget9 = require("ext.gadget.Util"); +var redirectOriginLoginPage = /* @__PURE__ */ function() { + var _ref7 = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee5() { + return _regeneratorRuntime().wrap(function _callee5$(_context5) { + while (1) + switch (_context5.prev = _context5.next) { + case 0: + _context5.next = 2; + return windowManager.clearWindows(); + case 2: + _context5.next = 4; + return (0, import_ext_gadget9.delay)(3 * 1e3); + case 4: + location.href = mw.util.getUrl("Special:Userlogin"); + case 5: + case "end": + return _context5.stop(); + } + }, _callee5); + })); + return function redirectOriginLoginPage2() { + return _ref7.apply(this, arguments); + }; +}(); +//! src/AjaxLogin/modules/util/showError.ts +var import_ext_gadget10 = require("ext.gadget.Toastify"); +var showError = function showError2(error, toastifyInstance) { + console.error("[AjaxLogin] Ajax error:", error); + toastifyInstance.hideToast(); + (0, import_ext_gadget10.toastify)({ + text: getMessage("Network error"), + close: true, + duration: -1 + }, "error"); +}; +//! src/AjaxLogin/modules/core.tsx +var import_ext_gadget12 = require("ext.gadget.Toastify"); +var ajaxLogin = function ajaxLogin2(toastifyInstance) { + var isAgreeTos = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + var _generateElements = generateElements(isAgreeTos), $agreeTos = _generateElements.$agreeTos, $forgotPassword = _generateElements.$forgotPassword, $inputBox = _generateElements.$inputBox, $rememberMe = _generateElements.$rememberMe, $tosLabel = _generateElements.$tosLabel, agreeTosCheckbox = _generateElements.agreeTosCheckbox, keepLoginCheckbox = _generateElements.keepLoginCheckbox, messageDialog = _generateElements.messageDialog, nameInput = _generateElements.nameInput, pwdInput = _generateElements.pwdInput; + var loginToken = ""; + var login = /* @__PURE__ */ function() { + var _ref8 = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee6() { + var _ref9, _ref9$loginContinue, loginContinue, _ref9$retypePassword, retypePassword, _response$clientlogin, _response$clientlogin2, _yield$queryLoginToke, params, value, response, messagecode, _args6 = arguments; + return _regeneratorRuntime().wrap(function _callee6$(_context6) { + while (1) + switch (_context6.prev = _context6.next) { + case 0: + _ref9 = _args6.length > 0 && _args6[0] !== void 0 ? _args6[0] : {}, _ref9$loginContinue = _ref9.loginContinue, loginContinue = _ref9$loginContinue === void 0 ? false : _ref9$loginContinue, _ref9$retypePassword = _ref9.retypePassword, retypePassword = _ref9$retypePassword === void 0 ? false : _ref9$retypePassword; + _context6.prev = 1; + if (loginContinue) { + _context6.next = 8; + break; + } + _context6.next = 5; + return queryLoginToken(toastifyInstance); + case 5: + _yield$queryLoginToke = _context6.sent; + loginToken = _yield$queryLoginToke.loginToken; + toastifyInstance = _yield$queryLoginToke.toastifyInstance; + case 8: + params = { + action: "clientlogin", + format: "json", + formatversion: "2", + logintoken: loginToken, + loginreturnurl: location.href, + username: nameInput.getValue(), + password: pwdInput.getValue() + }; + if (keepLoginCheckbox.isSelected()) { + params.rememberMe = true; + } + if (!(loginContinue || retypePassword)) { + _context6.next = 31; + break; + } + _context6.next = 13; + return windowManager.clearWindows(); + case 13: + delete params.loginreturnurl; + delete params.username; + delete params.password; + params.logincontinue = true; + _context6.next = 19; + return oouiPrompt(retypePassword); + case 19: + value = _context6.sent; + toastifyInstance.hideToast(); + if (!(value === null)) { + _context6.next = 27; + break; + } + (0, import_ext_gadget12.toastify)({ + text: getMessage("Login cancelled") + }, "info"); + void windowManager.clearWindows(); + return _context6.abrupt("return"); + case 27: + if (!(value === "")) { + _context6.next = 30; + break; + } + if (retypePassword) { + toastifyInstance = (0, import_ext_gadget12.toastify)({ + text: getMessage("EmptyPassword"), + duration: -1 + }, "warning"); + void login({ + retypePassword: true + }); + } else { + toastifyInstance = (0, import_ext_gadget12.toastify)({ + text: getMessage("Empty2FA"), + duration: -1 + }, "warning"); + void login({ + loginContinue: true + }); + } + return _context6.abrupt("return"); + case 30: + if (retypePassword) { + params.password = value; + params.retype = value; + } else { + params.OATHToken = value; + } + case 31: + toastifyInstance.hideToast(); + toastifyInstance = (0, import_ext_gadget12.toastify)({ + text: getMessage("Logging in") + }, "info"); + _context6.next = 35; + return api.post(params); + case 35: + response = _context6.sent; + toastifyInstance.hideToast(); + if (!(((_response$clientlogin = response["clientlogin"]) === null || _response$clientlogin === void 0 ? void 0 : _response$clientlogin.status) === "PASS")) { + _context6.next = 42; + break; + } + (0, import_ext_gadget12.toastify)({ + text: getMessage("Login succeed") + }, "success"); + location.reload(); + _context6.next = 64; + break; + case 42: + if (!((_response$clientlogin2 = response["clientlogin"]) !== null && _response$clientlogin2 !== void 0 && _response$clientlogin2.messagecode)) { + _context6.next = 64; + break; + } + messagecode = response["clientlogin"].messagecode; + _context6.t0 = messagecode; + _context6.next = _context6.t0 === "login-throttled" ? 47 : _context6.t0 === "oathauth-auth-ui" ? 49 : _context6.t0 === "oathauth-login-failed" ? 51 : _context6.t0 === "resetpass-temp-emailed" ? 54 : _context6.t0 === "wrongpassword" ? 57 : 62; + break; + case 47: + toastifyInstance = (0, import_ext_gadget12.toastify)({ + text: getMessage("TooFrequent"), + duration: -1 + }, "error"); + return _context6.abrupt("break", 64); + case 49: + void login({ + loginContinue: true + }); + return _context6.abrupt("break", 64); + case 51: + toastifyInstance = (0, import_ext_gadget12.toastify)({ + text: getMessage("Invalid 2FA verification code"), + duration: -1 + }, "warning"); + void login({ + loginContinue: true + }); + return _context6.abrupt("break", 64); + case 54: + toastifyInstance = (0, import_ext_gadget12.toastify)({ + text: getMessage("New password is required"), + duration: -1 + }, "warning"); + void login({ + retypePassword: true + }); + return _context6.abrupt("break", 64); + case 57: + toastifyInstance = (0, import_ext_gadget12.toastify)({ + text: getMessage("Invalid useruame or password"), + duration: -1 + }, "warning"); + _context6.next = 60; + return windowManager.clearWindows(); + case 60: + ajaxLogin2(toastifyInstance); + return _context6.abrupt("break", 64); + case 62: + (0, import_ext_gadget12.toastify)({ + text: getMessage("Unexpected API response").replace("$1", messagecode), + close: true, + duration: -1 + }, "error"); + void redirectOriginLoginPage(); + case 64: + _context6.next = 70; + break; + case 66: + _context6.prev = 66; + _context6.t1 = _context6["catch"](1); + showError(_context6.t1, toastifyInstance); + void redirectOriginLoginPage(); + case 70: + case "end": + return _context6.stop(); + } + }, _callee6, null, [[1, 66]]); + })); + return function login2() { + return _ref8.apply(this, arguments); + }; + }(); + var check = /* @__PURE__ */ function() { + var _ref10 = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee7() { + var _yield$checkValid, isValid, lastIsAgreeTos, lastToastifyInstance; + return _regeneratorRuntime().wrap(function _callee7$(_context7) { + while (1) + switch (_context7.prev = _context7.next) { + case 0: + _context7.next = 2; + return checkValid([agreeTosCheckbox, nameInput, pwdInput], toastifyInstance); + case 2: + _yield$checkValid = _context7.sent; + isValid = _yield$checkValid.isValid; + lastIsAgreeTos = _yield$checkValid.isAgreeTos; + lastToastifyInstance = _yield$checkValid.toastifyInstance; + toastifyInstance = lastToastifyInstance; + if (isValid) { + void login(); + } else { + ajaxLogin2(toastifyInstance, lastIsAgreeTos); + } + case 8: + case "end": + return _context7.stop(); + } + }, _callee7); + })); + return function check2() { + return _ref10.apply(this, arguments); + }; + }(); + pwdInput.on("enter", function() { + void check(); + }); + messageDialog.getActionProcess = function(action) { + return new OO.ui.Process(function() { + if (action === "login") { + void check(); + } else { + toastifyInstance.hideToast(); + void windowManager.clearWindows(); + } + }); + }; + windowManager.addWindows([messageDialog]); + void windowManager.openWindow(messageDialog, { + actions: [{ + action: "login", + flags: ["primary", "progressive"], + label: $(/* @__PURE__ */ import_ext_gadget11["default"].createElement("b", null, getMessage("Login"))) + }, { + action: "cancel", + flags: ["safe", "close"], + label: $(/* @__PURE__ */ import_ext_gadget11["default"].createElement("b", null, getMessage("Cancel"))) + }], + message: $(/* @__PURE__ */ import_ext_gadget11["default"].createElement("div", { + className: "oo-ui-window-foot" + }, [$inputBox, $forgotPassword, $rememberMe, $agreeTos, $tosLabel])), + title: $(/* @__PURE__ */ import_ext_gadget11["default"].createElement("b", { + className: "oo-ui-window-head" + }, getMessage("Login"))), + size: "small" + }); + removeWindowResizeHandler(); +}; +//! src/AjaxLogin/AjaxLogin.ts +void (0, import_ext_gadget13.getBody)().then(function initAutoLogin($body) { + if (WG_USER_NAME) { + return; + } + var $loginElement = $body.find(loginElementSelector); + if (!$loginElement.length) { + return; + } + windowManager.$element.appendTo($body); + var fakeToastifyInstance = { + hideToast: function hideToast() { + } + }; + var eventListener = function eventListener2(event) { + if (!(0, import_ext_gadget13.checkA11yConfirmKey)(event)) { + return; + } + event.preventDefault(); + ajaxLogin(fakeToastifyInstance); + }; + addListener($loginElement, eventListener); +}); + +})(); + +/* */ + +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZm9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wudG8tc3RyaW5nLXRhZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3Nvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm94eS1hY2Nlc3Nvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zdGFsbC1lcnJvci1jYXVzZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd3JhcC1lcnJvci1jb25zdHJ1Y3Rvci13aXRoLWNhdXNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXJyb3ItdG8tc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLnRvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1mb3ItZWFjaC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktZnJvbS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5mcm9tLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3Rvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5qc29uLnRvLXN0cmluZy10YWcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWF0aC50by1zdHJpbmctdGFnLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc3BlY2llcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jb25zdHJ1Y3Rvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Rhc2suanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zYWZlLWdldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3F1ZXVlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy1wZWJibGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWljcm90YXNrLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcGVyZm9ybS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtYnJvd3Nlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuYWxsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuY2F0Y2guanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5yYWNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UucmVqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UucmVzb2x2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRlc3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZ2V0LWZsYWdzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjEvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvRG9jdW1lbnRGcmFnbWVudC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjEvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX211dGF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuMS9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9Eb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5hcHBlbmQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi4xL25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0VsZW1lbnQucHJvdG90eXBlLmFwcGVuZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjEvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX0RPTVRva2VuTGlzdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjEvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvRE9NVG9rZW5MaXN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuMS9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9ET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlcGxhY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1yZWdleHAuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9ub3QtYS1yZWdleHAuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc3Vic3RpdHV0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanMiLCAic3JjL0FqYXhMb2dpbi9vcHRpb25zLmpzb24iLCAic3JjL0FqYXhMb2dpbi9BamF4TG9naW4udHMiLCAic3JjL0FqYXhMb2dpbi9tb2R1bGVzL2NvbnN0YW50LnRzIiwgInNyYy9BamF4TG9naW4vbW9kdWxlcy9hZGRMaXN0ZW5lci50cyIsICJzcmMvQWpheExvZ2luL21vZHVsZXMvYXBpLnRzIiwgInNyYy9BamF4TG9naW4vbW9kdWxlcy9jb3JlLnRzeCIsICJzcmMvQWpheExvZ2luL21vZHVsZXMvdXRpbC9jaGVja1ZhbGlkLnRzeCIsICJzcmMvQWpheExvZ2luL21vZHVsZXMvaTE4bi50cyIsICJzcmMvQWpheExvZ2luL21vZHVsZXMvaW5pdFdpbmRvd01hbmFnZXIudHMiLCAic3JjL0FqYXhMb2dpbi9tb2R1bGVzL3V0aWwvb291aUNvbmZpcm0udHMiLCAic3JjL0FqYXhMb2dpbi9tb2R1bGVzL3V0aWwvZ2VuZXJhdGVFbGVtZW50cy50c3giLCAic3JjL0FqYXhMb2dpbi9tb2R1bGVzL3V0aWwvb291aVByb21wdC50c3giLCAic3JjL0FqYXhMb2dpbi9tb2R1bGVzL3V0aWwvcmVtb3ZlV2luZG93UmVzaXplSGFuZGxlci50cyIsICJzcmMvQWpheExvZ2luL21vZHVsZXMvdXRpbC9xdWVyeUxvZ2luVG9rZW4udHMiLCAic3JjL0FqYXhMb2dpbi9tb2R1bGVzL3V0aWwvcmVkaXJlY3RPcmlnaW5Mb2dpblBhZ2UudHMiLCAic3JjL0FqYXhMb2dpbi9tb2R1bGVzL3V0aWwvc2hvd0Vycm9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFtuYW1lc3BhY2VdKSA6IGdsb2JhbFtuYW1lc3BhY2VdICYmIGdsb2JhbFtuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBuYXZpZ2F0b3IgIT0gJ3VuZGVmaW5lZCcgJiYgU3RyaW5nKG5hdmlnYXRvci51c2VyQWdlbnQpIHx8ICcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbC5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWwuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFtrZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzYuMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzYuMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLkNPTkZJR1VSQUJMRTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgQ09ORklHVVJBQkxFX0xFTkdUSCA9IERFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdsZW5ndGgnLCB7IHZhbHVlOiA4IH0pLmxlbmd0aCAhPT0gODtcbn0pO1xuXG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbnZhciBtYWtlQnVpbHRJbiA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChzdHJpbmdTbGljZSgkU3RyaW5nKG5hbWUpLCAwLCA3KSA9PT0gJ1N5bWJvbCgnKSB7XG4gICAgbmFtZSA9ICdbJyArIHJlcGxhY2UoJFN0cmluZyhuYW1lKSwgL15TeW1ib2xcXCgoW14pXSopXFwpLiokLywgJyQxJykgKyAnXSc7XG4gIH1cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nZXR0ZXIpIG5hbWUgPSAnZ2V0ICcgKyBuYW1lO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNldHRlcikgbmFtZSA9ICdzZXQgJyArIG5hbWU7XG4gIGlmICghaGFzT3duKHZhbHVlLCAnbmFtZScpIHx8IChDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSAmJiB2YWx1ZS5uYW1lICE9PSBuYW1lKSkge1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICduYW1lJywgeyB2YWx1ZTogbmFtZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIGVsc2UgdmFsdWUubmFtZSA9IG5hbWU7XG4gIH1cbiAgaWYgKENPTkZJR1VSQUJMRV9MRU5HVEggJiYgb3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2FyaXR5JykgJiYgdmFsdWUubGVuZ3RoICE9PSBvcHRpb25zLmFyaXR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkodmFsdWUsICdsZW5ndGgnLCB7IHZhbHVlOiBvcHRpb25zLmFyaXR5IH0pO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdjb25zdHJ1Y3RvcicpICYmIG9wdGlvbnMuY29uc3RydWN0b3IpIHtcbiAgICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICdwcm90b3R5cGUnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAvLyBpbiBWOCB+IENocm9tZSA1MywgcHJvdG90eXBlcyBvZiBzb21lIG1ldGhvZHMsIGxpa2UgYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgLCBhcmUgbm9uLXdyaXRhYmxlXG4gICAgfSBlbHNlIGlmICh2YWx1ZS5wcm90b3R5cGUpIHZhbHVlLnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSk7XG4gIGlmICghaGFzT3duKHN0YXRlLCAnc291cmNlJykpIHtcbiAgICBzdGF0ZS5zb3VyY2UgPSBqb2luKFRFTVBMQVRFLCB0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJyA/IG5hbWUgOiAnJyk7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcblxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0ZW5kLW5hdGl2ZSAtLSByZXF1aXJlZFxuRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gbWFrZUJ1aWx0SW4oZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59LCAndG9TdHJpbmcnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICB2YXIgc2ltcGxlID0gb3B0aW9ucy5lbnVtZXJhYmxlO1xuICB2YXIgbmFtZSA9IG9wdGlvbnMubmFtZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uYW1lIDoga2V5O1xuICBpZiAoaXNDYWxsYWJsZSh2YWx1ZSkpIG1ha2VCdWlsdEluKHZhbHVlLCBuYW1lLCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMuZ2xvYmFsKSB7XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVHbG9iYWxQcm9wZXJ0eShrZXksIHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFvcHRpb25zLnVuc2FmZSkgZGVsZXRlIE9ba2V5XTtcbiAgICAgIGVsc2UgaWYgKE9ba2V5XSkgc2ltcGxlID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6ICFvcHRpb25zLm5vbkNvbmZpZ3VyYWJsZSxcbiAgICAgIHdyaXRhYmxlOiAhb3B0aW9ucy5ub25Xcml0YWJsZVxuICAgIH0pO1xuICB9IHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnVuYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLXRydW5jJyk7XG5cbi8vIGBUb0ludGVnZXJPckluZmluaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbnRlZ2Vyb3JpbmZpbml0eVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIG51bWJlciA9ICthcmd1bWVudDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiB0cnVuYyhudW1iZXIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChrZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIGV4Y2VwdGlvbnMpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpICYmICEoZXhjZXB0aW9ucyAmJiBoYXNPd24oZXhjZXB0aW9ucywga2V5KSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBGT1JDRUQsIHRhcmdldCwga2V5LCB0YXJnZXRQcm9wZXJ0eSwgc291cmNlUHJvcGVydHksIGRlc2NyaXB0b3I7XG4gIGlmIChHTE9CQUwpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWw7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsW1RBUkdFVF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsW1RBUkdFVF0gJiYgZ2xvYmFsW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSAkT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT09ICdPYmplY3QnICYmIGlzQ2FsbGFibGUoTy5jYWxsZWUpID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ1N5bWJvbCcpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nJyk7XG4gIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qta2V5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTICYmICFWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcHMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgcHJvcHNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAtLSBvbGQgSUUsIFdTSCAqL1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDsgLy8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSB0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCdcbiAgICA/IGRvY3VtZW50LmRvbWFpbiAmJiBhY3RpdmVYRG9jdW1lbnRcbiAgICAgID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIC8vIG9sZCBJRVxuICAgICAgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKVxuICAgIDogTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpOyAvLyBXU0hcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWNyZWF0ZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKFtdLnNsaWNlKTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlICovXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBhcnJheVNsaWNlKHdpbmRvd05hbWVzKTtcbiAgfVxufTtcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIGNsYXNzb2YoaXQpID09PSAnV2luZG93J1xuICAgID8gZ2V0V2luZG93TmFtZXMoaXQpXG4gICAgOiAkZ2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcikge1xuICBpZiAoZGVzY3JpcHRvci5nZXQpIG1ha2VCdWlsdEluKGRlc2NyaXB0b3IuZ2V0LCBuYW1lLCB7IGdldHRlcjogdHJ1ZSB9KTtcbiAgaWYgKGRlc2NyaXB0b3Iuc2V0KSBtYWtlQnVpbHRJbihkZXNjcmlwdG9yLnNldCwgbmFtZSwgeyBzZXR0ZXI6IHRydWUgfSk7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eS5mKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuZXhwb3J0cy5mID0gd2VsbEtub3duU3ltYm9sO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHZhciBTeW1ib2wgPSBwYXRoLlN5bWJvbCB8fCAocGF0aC5TeW1ib2wgPSB7fSk7XG4gIGlmICghaGFzT3duKFN5bWJvbCwgTkFNRSkpIGRlZmluZVByb3BlcnR5KFN5bWJvbCwgTkFNRSwge1xuICAgIHZhbHVlOiB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoTkFNRSlcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHZhciBTeW1ib2xQcm90b3R5cGUgPSBTeW1ib2wgJiYgU3ltYm9sLnByb3RvdHlwZTtcbiAgdmFyIHZhbHVlT2YgPSBTeW1ib2xQcm90b3R5cGUgJiYgU3ltYm9sUHJvdG90eXBlLnZhbHVlT2Y7XG4gIHZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbiAgaWYgKFN5bWJvbFByb3RvdHlwZSAmJiAhU3ltYm9sUHJvdG90eXBlW1RPX1BSSU1JVElWRV0pIHtcbiAgICAvLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIC5sZW5ndGhcbiAgICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgVE9fUFJJTUlUSVZFLCBmdW5jdGlvbiAoaGludCkge1xuICAgICAgcmV0dXJuIGNhbGwodmFsdWVPZiwgdGhpcyk7XG4gICAgfSwgeyBhcml0eTogMSB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgVEFHLCBTVEFUSUMpIHtcbiAgaWYgKHRhcmdldCAmJiAhU1RBVElDKSB0YXJnZXQgPSB0YXJnZXQucHJvdG90eXBlO1xuICBpZiAodGFyZ2V0ICYmICFoYXNPd24odGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgVE9fU1RSSU5HX1RBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBUQUcgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgLy8gTmFzaG9ybiBidWc6XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMjhcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEzMFxuICBpZiAoY2xhc3NvZlJhdyhmbikgPT09ICdGdW5jdGlvbicpIHJldHVybiB1bmN1cnJ5VGhpcyhmbik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgYmluZCA9IHVuY3VycnlUaGlzKHVuY3VycnlUaGlzLmJpbmQpO1xuXG4vLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0KSB7XG4gIGFDYWxsYWJsZShmbik7XG4gIHJldHVybiB0aGF0ID09PSB1bmRlZmluZWQgPyBmbiA6IE5BVElWRV9CSU5EID8gYmluZChmbiwgdGhhdCkgOiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZ3VtZW50KSB7XG4gIHJldHVybiBjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ0FycmF5Jztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xuXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBjb25zdHJ1Y3QgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2NvbnN0cnVjdCcpO1xudmFyIGNvbnN0cnVjdG9yUmVnRXhwID0gL15cXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXFxiLztcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoY29uc3RydWN0b3JSZWdFeHAuZXhlYyk7XG52YXIgSU5DT1JSRUNUX1RPX1NUUklORyA9ICFjb25zdHJ1Y3RvclJlZ0V4cC50ZXN0KG5vb3ApO1xuXG52YXIgaXNDb25zdHJ1Y3Rvck1vZGVybiA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0cnVjdChub29wLCBbXSwgYXJndW1lbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxudmFyIGlzQ29uc3RydWN0b3JMZWdhY3kgPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgc3dpdGNoIChjbGFzc29mKGFyZ3VtZW50KSkge1xuICAgIGNhc2UgJ0FzeW5jRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0dlbmVyYXRvckZ1bmN0aW9uJzpcbiAgICBjYXNlICdBc3luY0dlbmVyYXRvckZ1bmN0aW9uJzogcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gd2UgY2FuJ3QgY2hlY2sgLnByb3RvdHlwZSBzaW5jZSBjb25zdHJ1Y3RvcnMgcHJvZHVjZWQgYnkgLmJpbmQgaGF2ZW4ndCBpdFxuICAgIC8vIGBGdW5jdGlvbiN0b1N0cmluZ2AgdGhyb3dzIG9uIHNvbWUgYnVpbHQtaXQgZnVuY3Rpb24gaW4gc29tZSBsZWdhY3kgZW5naW5lc1xuICAgIC8vIChmb3IgZXhhbXBsZSwgYERPTVF1YWRgIGFuZCBzaW1pbGFyIGluIEZGNDEtKVxuICAgIHJldHVybiBJTkNPUlJFQ1RfVE9fU1RSSU5HIHx8ICEhZXhlYyhjb25zdHJ1Y3RvclJlZ0V4cCwgaW5zcGVjdFNvdXJjZShhcmd1bWVudCkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5pc0NvbnN0cnVjdG9yTGVnYWN5LnNoYW0gPSB0cnVlO1xuXG4vLyBgSXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gIWNvbnN0cnVjdCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBjYWxsZWQ7XG4gIHJldHVybiBpc0NvbnN0cnVjdG9yTW9kZXJuKGlzQ29uc3RydWN0b3JNb2Rlcm4uY2FsbClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihPYmplY3QpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oZnVuY3Rpb24gKCkgeyBjYWxsZWQgPSB0cnVlOyB9KVxuICAgIHx8IGNhbGxlZDtcbn0pID8gaXNDb25zdHJ1Y3RvckxlZ2FjeSA6IGlzQ29uc3RydWN0b3JNb2Rlcm47XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGEgcGFydCBvZiBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5KSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKGlzQ29uc3RydWN0b3IoQykgJiYgKEMgPT09ICRBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoYXJyYXlTcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWxBcnJheSkpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4LCBmaWx0ZXJSZWplY3QgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT09IDY7XG4gIHZhciBJU19GSUxURVJfUkVKRUNUID0gVFlQRSA9PT0gNztcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NyZWF0ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2Uoc2VsZik7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSIHx8IElTX0ZJTFRFUl9SRUpFQ1QgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2Ugc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSA0OiByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICAgICAgY2FzZSA3OiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclJlamVjdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyUmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG4gIGZpbHRlclJlamVjdDogY3JlYXRlTWV0aG9kKDcpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBuYXRpdmVPYmplY3RDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xuXG52YXIgSElEREVOID0gc2hhcmVkS2V5KCdoaWRkZW4nKTtcbnZhciBTWU1CT0wgPSAnU3ltYm9sJztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1lNQk9MKTtcblxudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2wgJiYgJFN5bWJvbFtQUk9UT1RZUEVdO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbnZhciBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mO1xudmFyIG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbnZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG52YXIgT2JqZWN0UHJvdG90eXBlU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG5cbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIFVTRV9TRVRURVIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBmYWxsYmFja0RlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgdmFyIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCBQKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpIGRlbGV0ZSBPYmplY3RQcm90b3R5cGVbUF07XG4gIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciAmJiBPICE9PSBPYmplY3RQcm90b3R5cGUpIHtcbiAgICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGUsIFAsIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpO1xuICB9XG59O1xuXG52YXIgc2V0U3ltYm9sRGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdENyZWF0ZShuYXRpdmVEZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPT0gNztcbn0pID8gZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA6IG5hdGl2ZURlZmluZVByb3BlcnR5O1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcsIGRlc2NyaXB0aW9uKSB7XG4gIHZhciBzeW1ib2wgPSBBbGxTeW1ib2xzW3RhZ10gPSBuYXRpdmVPYmplY3RDcmVhdGUoU3ltYm9sUHJvdG90eXBlKTtcbiAgc2V0SW50ZXJuYWxTdGF0ZShzeW1ib2wsIHtcbiAgICB0eXBlOiBTWU1CT0wsXG4gICAgdGFnOiB0YWcsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uXG4gIH0pO1xuICBpZiAoIURFU0NSSVBUT1JTKSBzeW1ib2wuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgcmV0dXJuIHN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGlmIChPID09PSBPYmplY3RQcm90b3R5cGUpICRkZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBQLCBBdHRyaWJ1dGVzKTtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFBdHRyaWJ1dGVzLmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzT3duKE8sIEhJRERFTikpIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIEhJRERFTiwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIG5hdGl2ZU9iamVjdENyZWF0ZShudWxsKSkpO1xuICAgICAgT1tISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzT3duKE8sIEhJRERFTikgJiYgT1tISURERU5dW2tleV0pIE9bSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBBdHRyaWJ1dGVzID0gbmF0aXZlT2JqZWN0Q3JlYXRlKEF0dHJpYnV0ZXMsIHsgZW51bWVyYWJsZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjcmlwdG9yKE8sIGtleSwgQXR0cmlidXRlcyk7XG4gIH0gcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIGtleSwgQXR0cmlidXRlcyk7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBwcm9wZXJ0aWVzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMocHJvcGVydGllcykuY29uY2F0KCRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMocHJvcGVydGllcykpO1xuICAkZm9yRWFjaChrZXlzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFERVNDUklQVE9SUyB8fCBjYWxsKCRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgcHJvcGVydGllcywga2V5KSkgJGRlZmluZVByb3BlcnR5KE8sIGtleSwgcHJvcGVydGllc1trZXldKTtcbiAgfSk7XG4gIHJldHVybiBPO1xufTtcblxudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gbmF0aXZlT2JqZWN0Q3JlYXRlKE8pIDogJGRlZmluZVByb3BlcnRpZXMobmF0aXZlT2JqZWN0Q3JlYXRlKE8pLCBQcm9wZXJ0aWVzKTtcbn07XG5cbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBQID0gdG9Qcm9wZXJ0eUtleShWKTtcbiAgdmFyIGVudW1lcmFibGUgPSBjYWxsKG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlLCB0aGlzLCBQKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywgUCkgJiYgIWhhc093bihPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBQKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZW51bWVyYWJsZSB8fCAhaGFzT3duKHRoaXMsIFApIHx8ICFoYXNPd24oQWxsU3ltYm9scywgUCkgfHwgaGFzT3duKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW1BdXG4gICAgPyBlbnVtZXJhYmxlIDogdHJ1ZTtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgdmFyIGl0ID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gIHZhciBkZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xuICBpZiAoZGVzY3JpcHRvciAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhKGhhc093bihpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSB7XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChPKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgJGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIWhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSkgcHVzaChyZXN1bHQsIGtleSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiAoTykge1xuICB2YXIgSVNfT0JKRUNUX1BST1RPVFlQRSA9IE8gPT09IE9iamVjdFByb3RvdHlwZTtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyhJU19PQkpFQ1RfUFJPVE9UWVBFID8gT2JqZWN0UHJvdG90eXBlU3ltYm9scyA6IHRvSW5kZXhlZE9iamVjdChPKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgJGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgKCFJU19PQkpFQ1RfUFJPVE9UWVBFIHx8IGhhc093bihPYmplY3RQcm90b3R5cGUsIGtleSkpKSB7XG4gICAgICBwdXNoKHJlc3VsdCwgQWxsU3ltYm9sc1trZXldKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gYFN5bWJvbGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLWNvbnN0cnVjdG9yXG5pZiAoIU5BVElWRV9TWU1CT0wpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAoaXNQcm90b3R5cGVPZihTeW1ib2xQcm90b3R5cGUsIHRoaXMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSAhYXJndW1lbnRzLmxlbmd0aCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICR0b1N0cmluZyhhcmd1bWVudHNbMF0pO1xuICAgIHZhciB0YWcgPSB1aWQoZGVzY3JpcHRpb24pO1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHZhciAkdGhpcyA9IHRoaXMgPT09IHVuZGVmaW5lZCA/IGdsb2JhbCA6IHRoaXM7XG4gICAgICBpZiAoJHRoaXMgPT09IE9iamVjdFByb3RvdHlwZSkgY2FsbChzZXR0ZXIsIE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXNPd24oJHRoaXMsIEhJRERFTikgJiYgaGFzT3duKCR0aGlzW0hJRERFTl0sIHRhZykpICR0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0U3ltYm9sRGVzY3JpcHRvcigkdGhpcywgdGFnLCBkZXNjcmlwdG9yKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikpIHRocm93IGVycm9yO1xuICAgICAgICBmYWxsYmFja0RlZmluZVByb3BlcnR5KCR0aGlzLCB0YWcsIGRlc2NyaXB0b3IpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIFVTRV9TRVRURVIpIHNldFN5bWJvbERlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6IHNldHRlciB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcsIGRlc2NyaXB0aW9uKTtcbiAgfTtcblxuICBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sW1BST1RPVFlQRV07XG5cbiAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnRhZztcbiAgfSk7XG5cbiAgZGVmaW5lQnVpbHRJbigkU3ltYm9sLCAnd2l0aG91dFNldHRlcicsIGZ1bmN0aW9uIChkZXNjcmlwdGlvbikge1xuICAgIHJldHVybiB3cmFwKHVpZChkZXNjcmlwdGlvbiksIGRlc2NyaXB0aW9uKTtcbiAgfSk7XG5cbiAgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgZGVmaW5lUHJvcGVydGllc01vZHVsZS5mID0gJGRlZmluZVByb3BlcnRpZXM7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2VsbEtub3duU3ltYm9sKG5hbWUpLCBuYW1lKTtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1TeW1ib2wtZGVzY3JpcHRpb25cbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoU3ltYm9sUHJvdG90eXBlLCAnZGVzY3JpcHRpb24nLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGRlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5kZXNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIUlTX1BVUkUpIHtcbiAgICAgIGRlZmluZUJ1aWx0SW4oT2JqZWN0UHJvdG90eXBlLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIU5BVElWRV9TWU1CT0wgfSwge1xuICBTeW1ib2w6ICRTeW1ib2xcbn0pO1xuXG4kZm9yRWFjaChvYmplY3RLZXlzKFdlbGxLbm93blN5bWJvbHNTdG9yZSksIGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRlZmluZVdlbGxLbm93blN5bWJvbChuYW1lKTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiBTWU1CT0wsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gZmFsc2U7IH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvclxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lc1xufSk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5kZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSgpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCBTWU1CT0wpO1xuXG5oaWRkZW5LZXlzW0hJRERFTl0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHNhZmUgKi9cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTCAmJiAhIVN5bWJvbFsnZm9yJ10gJiYgISFTeW1ib2wua2V5Rm9yO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uJyk7XG5cbnZhciBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xuXG4vLyBgU3ltYm9sLmZvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5mb3JcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIH0sIHtcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcoa2V5KTtcbiAgICBpZiAoaGFzT3duKFN0cmluZ1RvU3ltYm9sUmVnaXN0cnksIHN0cmluZykpIHJldHVybiBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ107XG4gICAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKHN0cmluZyk7XG4gICAgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddID0gc3ltYm9sO1xuICAgIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltYm9sXSA9IHN0cmluZztcbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uJyk7XG5cbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wua2V5Rm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmtleWZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IG5ldyBUeXBlRXJyb3IodHJ5VG9TdHJpbmcoc3ltKSArICcgaXMgbm90IGEgc3ltYm9sJyk7XG4gICAgaWYgKGhhc093bihTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5LCBzeW0pKSByZXR1cm4gU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1dO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGFwcGx5ID0gRnVuY3Rpb25Qcm90b3R5cGUuYXBwbHk7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1yZWZsZWN0IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFJlZmxlY3QgPT0gJ29iamVjdCcgJiYgUmVmbGVjdC5hcHBseSB8fCAoTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoYXBwbHkpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShhcHBseSwgYXJndW1lbnRzKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVwbGFjZXIpIHtcbiAgaWYgKGlzQ2FsbGFibGUocmVwbGFjZXIpKSByZXR1cm4gcmVwbGFjZXI7XG4gIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJldHVybjtcbiAgdmFyIHJhd0xlbmd0aCA9IHJlcGxhY2VyLmxlbmd0aDtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdMZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGVtZW50ID0gcmVwbGFjZXJbaV07XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdzdHJpbmcnKSBwdXNoKGtleXMsIGVsZW1lbnQpO1xuICAgIGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdudW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdOdW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdTdHJpbmcnKSBwdXNoKGtleXMsIHRvU3RyaW5nKGVsZW1lbnQpKTtcbiAgfVxuICB2YXIga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgcm9vdCA9IHRydWU7XG4gIHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChyb290KSB7XG4gICAgICByb290ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KHRoaXMpKSByZXR1cm4gdmFsdWU7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzTGVuZ3RoOyBqKyspIGlmIChrZXlzW2pdID09PSBrZXkpIHJldHVybiB2YWx1ZTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBnZXRSZXBsYWNlckZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRzdHJpbmdpZnkgPSBnZXRCdWlsdEluKCdKU09OJywgJ3N0cmluZ2lmeScpO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcygvLi8uZXhlYyk7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIG51bWJlclRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxudmFyIHRlc3RlciA9IC9bXFx1RDgwMC1cXHVERkZGXS9nO1xudmFyIGxvdyA9IC9eW1xcdUQ4MDAtXFx1REJGRl0kLztcbnZhciBoaSA9IC9eW1xcdURDMDAtXFx1REZGRl0kLztcblxudmFyIFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKCdzdHJpbmdpZnkgZGV0ZWN0aW9uJyk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIHJldHVybiAkc3RyaW5naWZ5KFtzeW1ib2xdKSAhPT0gJ1tudWxsXSdcbiAgICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgICB8fCAkc3RyaW5naWZ5KHsgYTogc3ltYm9sIH0pICE9PSAne30nXG4gICAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgICB8fCAkc3RyaW5naWZ5KE9iamVjdChzeW1ib2wpKSAhPT0gJ3t9Jztcbn0pO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC13ZWxsLWZvcm1lZC1zdHJpbmdpZnlcbnZhciBJTExfRk9STUVEX1VOSUNPREUgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkc3RyaW5naWZ5KCdcXHVERjA2XFx1RDgzNCcpICE9PSAnXCJcXFxcdWRmMDZcXFxcdWQ4MzRcIidcbiAgICB8fCAkc3RyaW5naWZ5KCdcXHVERUFEJykgIT09ICdcIlxcXFx1ZGVhZFwiJztcbn0pO1xuXG52YXIgc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggPSBmdW5jdGlvbiAoaXQsIHJlcGxhY2VyKSB7XG4gIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICB2YXIgJHJlcGxhY2VyID0gZ2V0UmVwbGFjZXJGdW5jdGlvbihyZXBsYWNlcik7XG4gIGlmICghaXNDYWxsYWJsZSgkcmVwbGFjZXIpICYmIChpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICBhcmdzWzFdID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAvLyBzb21lIG9sZCBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgV2ViS2l0KSBjb3VsZCBwYXNzIG51bWJlcnMgYXMga2V5c1xuICAgIGlmIChpc0NhbGxhYmxlKCRyZXBsYWNlcikpIHZhbHVlID0gY2FsbCgkcmVwbGFjZXIsIHRoaXMsICRTdHJpbmcoa2V5KSwgdmFsdWUpO1xuICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIH07XG4gIHJldHVybiBhcHBseSgkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbn07XG5cbnZhciBmaXhJbGxGb3JtZWQgPSBmdW5jdGlvbiAobWF0Y2gsIG9mZnNldCwgc3RyaW5nKSB7XG4gIHZhciBwcmV2ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0IC0gMSk7XG4gIHZhciBuZXh0ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0ICsgMSk7XG4gIGlmICgoZXhlYyhsb3csIG1hdGNoKSAmJiAhZXhlYyhoaSwgbmV4dCkpIHx8IChleGVjKGhpLCBtYXRjaCkgJiYgIWV4ZWMobG93LCBwcmV2KSkpIHtcbiAgICByZXR1cm4gJ1xcXFx1JyArIG51bWJlclRvU3RyaW5nKGNoYXJDb2RlQXQobWF0Y2gsIDApLCAxNik7XG4gIH0gcmV0dXJuIG1hdGNoO1xufTtcblxuaWYgKCRzdHJpbmdpZnkpIHtcbiAgLy8gYEpTT04uc3RyaW5naWZ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLnN0cmluZ2lmeVxuICAkKHsgdGFyZ2V0OiAnSlNPTicsIHN0YXQ6IHRydWUsIGFyaXR5OiAzLCBmb3JjZWQ6IFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiB8fCBJTExfRk9STUVEX1VOSUNPREUgfSwge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICAgICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gICAgICB2YXIgcmVzdWx0ID0gYXBwbHkoV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID8gc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggOiAkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbiAgICAgIHJldHVybiBJTExfRk9STUVEX1VOSUNPREUgJiYgdHlwZW9mIHJlc3VsdCA9PSAnc3RyaW5nJyA/IHJlcGxhY2UocmVzdWx0LCB0ZXN0ZXIsIGZpeElsbEZvcm1lZCkgOiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZPUkNFRCA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eXN5bWJvbHNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgdmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5U3ltYm9scyA/ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHModG9PYmplY3QoaXQpKSA6IFtdO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHNwbGl0IHRvIG1vZHVsZXMgbGlzdGVkIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN5bWJvbC5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zeW1ib2wuZm9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbiIsICIvLyBgU3ltYm9sLnByb3RvdHlwZS5kZXNjcmlwdGlvbmAgZ2V0dGVyXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUuZGVzY3JpcHRpb25cbid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xuXG52YXIgTmF0aXZlU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBTeW1ib2xQcm90b3R5cGUgPSBOYXRpdmVTeW1ib2wgJiYgTmF0aXZlU3ltYm9sLnByb3RvdHlwZTtcblxuaWYgKERFU0NSSVBUT1JTICYmIGlzQ2FsbGFibGUoTmF0aXZlU3ltYm9sKSAmJiAoISgnZGVzY3JpcHRpb24nIGluIFN5bWJvbFByb3RvdHlwZSkgfHxcbiAgLy8gU2FmYXJpIDEyIGJ1Z1xuICBOYXRpdmVTeW1ib2woKS5kZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkXG4pKSB7XG4gIHZhciBFbXB0eVN0cmluZ0Rlc2NyaXB0aW9uU3RvcmUgPSB7fTtcbiAgLy8gd3JhcCBTeW1ib2wgY29uc3RydWN0b3IgZm9yIGNvcnJlY3Qgd29yayB3aXRoIHVuZGVmaW5lZCBkZXNjcmlwdGlvblxuICB2YXIgU3ltYm9sV3JhcHBlciA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSBhcmd1bWVudHMubGVuZ3RoIDwgMSB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRvU3RyaW5nKGFyZ3VtZW50c1swXSk7XG4gICAgdmFyIHJlc3VsdCA9IGlzUHJvdG90eXBlT2YoU3ltYm9sUHJvdG90eXBlLCB0aGlzKVxuICAgICAgPyBuZXcgTmF0aXZlU3ltYm9sKGRlc2NyaXB0aW9uKVxuICAgICAgLy8gaW4gRWRnZSAxMywgU3RyaW5nKFN5bWJvbCh1bmRlZmluZWQpKSA9PT0gJ1N5bWJvbCh1bmRlZmluZWQpJ1xuICAgICAgOiBkZXNjcmlwdGlvbiA9PT0gdW5kZWZpbmVkID8gTmF0aXZlU3ltYm9sKCkgOiBOYXRpdmVTeW1ib2woZGVzY3JpcHRpb24pO1xuICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gJycpIEVtcHR5U3RyaW5nRGVzY3JpcHRpb25TdG9yZVtyZXN1bHRdID0gdHJ1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoU3ltYm9sV3JhcHBlciwgTmF0aXZlU3ltYm9sKTtcbiAgU3ltYm9sV3JhcHBlci5wcm90b3R5cGUgPSBTeW1ib2xQcm90b3R5cGU7XG4gIFN5bWJvbFByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN5bWJvbFdyYXBwZXI7XG5cbiAgdmFyIE5BVElWRV9TWU1CT0wgPSBTdHJpbmcoTmF0aXZlU3ltYm9sKCdkZXNjcmlwdGlvbiBkZXRlY3Rpb24nKSkgPT09ICdTeW1ib2woZGVzY3JpcHRpb24gZGV0ZWN0aW9uKSc7XG4gIHZhciB0aGlzU3ltYm9sVmFsdWUgPSB1bmN1cnJ5VGhpcyhTeW1ib2xQcm90b3R5cGUudmFsdWVPZik7XG4gIHZhciBzeW1ib2xEZXNjcmlwdGl2ZVN0cmluZyA9IHVuY3VycnlUaGlzKFN5bWJvbFByb3RvdHlwZS50b1N0cmluZyk7XG4gIHZhciByZWdleHAgPSAvXlN5bWJvbFxcKCguKilcXClbXildKyQvO1xuICB2YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xuICB2YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFN5bWJvbFByb3RvdHlwZSwgJ2Rlc2NyaXB0aW9uJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGRlc2NyaXB0aW9uKCkge1xuICAgICAgdmFyIHN5bWJvbCA9IHRoaXNTeW1ib2xWYWx1ZSh0aGlzKTtcbiAgICAgIGlmIChoYXNPd24oRW1wdHlTdHJpbmdEZXNjcmlwdGlvblN0b3JlLCBzeW1ib2wpKSByZXR1cm4gJyc7XG4gICAgICB2YXIgc3RyaW5nID0gc3ltYm9sRGVzY3JpcHRpdmVTdHJpbmcoc3ltYm9sKTtcbiAgICAgIHZhciBkZXNjID0gTkFUSVZFX1NZTUJPTCA/IHN0cmluZ1NsaWNlKHN0cmluZywgNywgLTEpIDogcmVwbGFjZShzdHJpbmcsIHJlZ2V4cCwgJyQxJyk7XG4gICAgICByZXR1cm4gZGVzYyA9PT0gJycgPyB1bmRlZmluZWQgOiBkZXNjO1xuICAgIH1cbiAgfSk7XG5cbiAgJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgU3ltYm9sOiBTeW1ib2xXcmFwcGVyXG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuYXN5bmNJdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmFzeW5jaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnYXN5bmNJdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaXRlcmF0b3JgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5pdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xuXG4vLyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9zdHJpbmd0YWdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoZ2V0QnVpbHRJbignU3ltYm9sJyksICdTeW1ib2wnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIG1ldGhvZCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICByZXR1cm4gdW5jdXJyeVRoaXMoYUNhbGxhYmxlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpW21ldGhvZF0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc09iamVjdChhcmd1bWVudCkgfHwgYXJndW1lbnQgPT09IG51bGw7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Bvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNQb3NzaWJsZVByb3RvdHlwZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyAkU3RyaW5nKGFyZ3VtZW50KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gLS0gc2FmZSAqL1xudmFyIHVuY3VycnlUaGlzQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIHNldHRlciA9IHVuY3VycnlUaGlzQWNjZXNzb3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycsICdzZXQnKTtcbiAgICBzZXR0ZXIodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUYXJnZXQsIFNvdXJjZSwga2V5KSB7XG4gIGtleSBpbiBUYXJnZXQgfHwgZGVmaW5lUHJvcGVydHkoVGFyZ2V0LCBrZXksIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTb3VyY2Vba2V5XTsgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBTb3VyY2Vba2V5XSA9IGl0OyB9XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIG1ha2VzIHN1YmNsYXNzaW5nIHdvcmsgY29ycmVjdCBmb3Igd3JhcHBlZCBidWlsdC1pbnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCR0aGlzLCBkdW1teSwgV3JhcHBlcikge1xuICB2YXIgTmV3VGFyZ2V0LCBOZXdUYXJnZXRQcm90b3R5cGU7XG4gIGlmIChcbiAgICAvLyBpdCBjYW4gd29yayBvbmx5IHdpdGggbmF0aXZlIGBzZXRQcm90b3R5cGVPZmBcbiAgICBzZXRQcm90b3R5cGVPZiAmJlxuICAgIC8vIHdlIGhhdmVuJ3QgY29tcGxldGVseSBjb3JyZWN0IHByZS1FUzYgd2F5IGZvciBnZXR0aW5nIGBuZXcudGFyZ2V0YCwgc28gdXNlIHRoaXNcbiAgICBpc0NhbGxhYmxlKE5ld1RhcmdldCA9IGR1bW15LmNvbnN0cnVjdG9yKSAmJlxuICAgIE5ld1RhcmdldCAhPT0gV3JhcHBlciAmJlxuICAgIGlzT2JqZWN0KE5ld1RhcmdldFByb3RvdHlwZSA9IE5ld1RhcmdldC5wcm90b3R5cGUpICYmXG4gICAgTmV3VGFyZ2V0UHJvdG90eXBlICE9PSBXcmFwcGVyLnByb3RvdHlwZVxuICApIHNldFByb3RvdHlwZU9mKCR0aGlzLCBOZXdUYXJnZXRQcm90b3R5cGUpO1xuICByZXR1cm4gJHRoaXM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsICRkZWZhdWx0KSB7XG4gIHJldHVybiBhcmd1bWVudCA9PT0gdW5kZWZpbmVkID8gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyAnJyA6ICRkZWZhdWx0IDogdG9TdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRXJyb3IgPSBFcnJvcjtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG5cbnZhciBURVNUID0gKGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIFN0cmluZyhuZXcgJEVycm9yKGFyZykuc3RhY2spOyB9KSgnenhjYXNkJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZID0gL1xcblxccyphdCBbXjpdKjpbXlxcbl0qLztcbnZhciBJU19WOF9PUl9DSEFLUkFfU1RBQ0sgPSBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkudGVzdChURVNUKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChJU19WOF9PUl9DSEFLUkFfU1RBQ0sgJiYgdHlwZW9mIHN0YWNrID09ICdzdHJpbmcnICYmICEkRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpIHtcbiAgICB3aGlsZSAoZHJvcEVudHJpZXMtLSkgc3RhY2sgPSByZXBsYWNlKHN0YWNrLCBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlksICcnKTtcbiAgfSByZXR1cm4gc3RhY2s7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcignYScpO1xuICBpZiAoISgnc3RhY2snIGluIGVycm9yKSkgcmV0dXJuIHRydWU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCA3KSk7XG4gIHJldHVybiBlcnJvci5zdGFjayAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY2xlYXJFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyJyk7XG52YXIgRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUnKTtcblxuLy8gbm9uLXN0YW5kYXJkIFY4XG52YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXJyb3IsIEMsIHN0YWNrLCBkcm9wRW50cmllcykge1xuICBpZiAoRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUpIHtcbiAgICBpZiAoY2FwdHVyZVN0YWNrVHJhY2UpIGNhcHR1cmVTdGFja1RyYWNlKGVycm9yLCBDKTtcbiAgICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY2xlYXJFcnJvclN0YWNrKHN0YWNrLCBkcm9wRW50cmllcykpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBwcm94eUFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb3h5LWFjY2Vzc29yJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQnKTtcbnZhciBpbnN0YWxsRXJyb3JDYXVzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlJyk7XG52YXIgaW5zdGFsbEVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEZVTExfTkFNRSwgd3JhcHBlciwgRk9SQ0VELCBJU19BR0dSRUdBVEVfRVJST1IpIHtcbiAgdmFyIFNUQUNLX1RSQUNFX0xJTUlUID0gJ3N0YWNrVHJhY2VMaW1pdCc7XG4gIHZhciBPUFRJT05TX1BPU0lUSU9OID0gSVNfQUdHUkVHQVRFX0VSUk9SID8gMiA6IDE7XG4gIHZhciBwYXRoID0gRlVMTF9OQU1FLnNwbGl0KCcuJyk7XG4gIHZhciBFUlJPUl9OQU1FID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICB2YXIgT3JpZ2luYWxFcnJvciA9IGdldEJ1aWx0SW4uYXBwbHkobnVsbCwgcGF0aCk7XG5cbiAgaWYgKCFPcmlnaW5hbEVycm9yKSByZXR1cm47XG5cbiAgdmFyIE9yaWdpbmFsRXJyb3JQcm90b3R5cGUgPSBPcmlnaW5hbEVycm9yLnByb3RvdHlwZTtcblxuICAvLyBWOCA5LjMtIGJ1ZyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjAwNlxuICBpZiAoIUlTX1BVUkUgJiYgaGFzT3duKE9yaWdpbmFsRXJyb3JQcm90b3R5cGUsICdjYXVzZScpKSBkZWxldGUgT3JpZ2luYWxFcnJvclByb3RvdHlwZS5jYXVzZTtcblxuICBpZiAoIUZPUkNFRCkgcmV0dXJuIE9yaWdpbmFsRXJyb3I7XG5cbiAgdmFyIEJhc2VFcnJvciA9IGdldEJ1aWx0SW4oJ0Vycm9yJyk7XG5cbiAgdmFyIFdyYXBwZWRFcnJvciA9IHdyYXBwZXIoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgbWVzc2FnZSA9IG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KElTX0FHR1JFR0FURV9FUlJPUiA/IGIgOiBhLCB1bmRlZmluZWQpO1xuICAgIHZhciByZXN1bHQgPSBJU19BR0dSRUdBVEVfRVJST1IgPyBuZXcgT3JpZ2luYWxFcnJvcihhKSA6IG5ldyBPcmlnaW5hbEVycm9yKCk7XG4gICAgaWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHJlc3VsdCwgJ21lc3NhZ2UnLCBtZXNzYWdlKTtcbiAgICBpbnN0YWxsRXJyb3JTdGFjayhyZXN1bHQsIFdyYXBwZWRFcnJvciwgcmVzdWx0LnN0YWNrLCAyKTtcbiAgICBpZiAodGhpcyAmJiBpc1Byb3RvdHlwZU9mKE9yaWdpbmFsRXJyb3JQcm90b3R5cGUsIHRoaXMpKSBpbmhlcml0SWZSZXF1aXJlZChyZXN1bHQsIHRoaXMsIFdyYXBwZWRFcnJvcik7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiBPUFRJT05TX1BPU0lUSU9OKSBpbnN0YWxsRXJyb3JDYXVzZShyZXN1bHQsIGFyZ3VtZW50c1tPUFRJT05TX1BPU0lUSU9OXSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgV3JhcHBlZEVycm9yLnByb3RvdHlwZSA9IE9yaWdpbmFsRXJyb3JQcm90b3R5cGU7XG5cbiAgaWYgKEVSUk9SX05BTUUgIT09ICdFcnJvcicpIHtcbiAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHNldFByb3RvdHlwZU9mKFdyYXBwZWRFcnJvciwgQmFzZUVycm9yKTtcbiAgICBlbHNlIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoV3JhcHBlZEVycm9yLCBCYXNlRXJyb3IsIHsgbmFtZTogdHJ1ZSB9KTtcbiAgfSBlbHNlIGlmIChERVNDUklQVE9SUyAmJiBTVEFDS19UUkFDRV9MSU1JVCBpbiBPcmlnaW5hbEVycm9yKSB7XG4gICAgcHJveHlBY2Nlc3NvcihXcmFwcGVkRXJyb3IsIE9yaWdpbmFsRXJyb3IsIFNUQUNLX1RSQUNFX0xJTUlUKTtcbiAgICBwcm94eUFjY2Vzc29yKFdyYXBwZWRFcnJvciwgT3JpZ2luYWxFcnJvciwgJ3ByZXBhcmVTdGFja1RyYWNlJyk7XG4gIH1cblxuICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKFdyYXBwZWRFcnJvciwgT3JpZ2luYWxFcnJvcik7XG5cbiAgaWYgKCFJU19QVVJFKSB0cnkge1xuICAgIC8vIFNhZmFyaSAxMy0gYnVnOiBXZWJBc3NlbWJseSBlcnJvcnMgZG9lcyBub3QgaGF2ZSBhIHByb3BlciBgLm5hbWVgXG4gICAgaWYgKE9yaWdpbmFsRXJyb3JQcm90b3R5cGUubmFtZSAhPT0gRVJST1JfTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KE9yaWdpbmFsRXJyb3JQcm90b3R5cGUsICduYW1lJywgRVJST1JfTkFNRSk7XG4gICAgfVxuICAgIE9yaWdpbmFsRXJyb3JQcm90b3R5cGUuY29uc3RydWN0b3IgPSBXcmFwcGVkRXJyb3I7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxuICByZXR1cm4gV3JhcHBlZEVycm9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgZnVuY3Rpb25zIGAubGVuZ3RoYCAqL1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgd3JhcEVycm9yQ29uc3RydWN0b3JXaXRoQ2F1c2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd3JhcC1lcnJvci1jb25zdHJ1Y3Rvci13aXRoLWNhdXNlJyk7XG5cbnZhciBXRUJfQVNTRU1CTFkgPSAnV2ViQXNzZW1ibHknO1xudmFyIFdlYkFzc2VtYmx5ID0gZ2xvYmFsW1dFQl9BU1NFTUJMWV07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1lcnJvci1jYXVzZSAtLSBmZWF0dXJlIGRldGVjdGlvblxudmFyIEZPUkNFRCA9IG5ldyBFcnJvcignZScsIHsgY2F1c2U6IDcgfSkuY2F1c2UgIT09IDc7XG5cbnZhciBleHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlciA9IGZ1bmN0aW9uIChFUlJPUl9OQU1FLCB3cmFwcGVyKSB7XG4gIHZhciBPID0ge307XG4gIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIE8pO1xufTtcblxudmFyIGV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIgPSBmdW5jdGlvbiAoRVJST1JfTkFNRSwgd3JhcHBlcikge1xuICBpZiAoV2ViQXNzZW1ibHkgJiYgV2ViQXNzZW1ibHlbRVJST1JfTkFNRV0pIHtcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShXRUJfQVNTRU1CTFkgKyAnLicgKyBFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAgICQoeyB0YXJnZXQ6IFdFQl9BU1NFTUJMWSwgc3RhdDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCBPKTtcbiAgfVxufTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uYXRpdmVlcnJvclxuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ0Vycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdFdmFsRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRXZhbEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdSYW5nZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJhbmdlRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ1JlZmVyZW5jZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJlZmVyZW5jZUVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdTeW50YXhFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTeW50YXhFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVHlwZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFR5cGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVVJJRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVVJJRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0V2ViQXNzZW1ibHlFcnJvckNhdXNlV3JhcHBlcignQ29tcGlsZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIENvbXBpbGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRXZWJBc3NlbWJseUVycm9yQ2F1c2VXcmFwcGVyKCdMaW5rRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gTGlua0Vycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIoJ1J1bnRpbWVFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBSdW50aW1lRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudCcpO1xuXG52YXIgbmF0aXZlRXJyb3JUb1N0cmluZyA9IEVycm9yLnByb3RvdHlwZS50b1N0cmluZztcblxudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIENocm9tZSAzMi0gaW5jb3JyZWN0bHkgY2FsbCBhY2Nlc3NvclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlLCBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIHZhciBvYmplY3QgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ25hbWUnLCB7IGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMgPT09IG9iamVjdDtcbiAgICB9IH0pKTtcbiAgICBpZiAobmF0aXZlRXJyb3JUb1N0cmluZy5jYWxsKG9iamVjdCkgIT09ICd0cnVlJykgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gRkYxMC0gZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIG5vbi1zdHJpbmdzXG4gIHJldHVybiBuYXRpdmVFcnJvclRvU3RyaW5nLmNhbGwoeyBtZXNzYWdlOiAxLCBuYW1lOiAyIH0pICE9PSAnMjogMSdcbiAgICAvLyBJRTggZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIGRlZmF1bHRzXG4gICAgfHwgbmF0aXZlRXJyb3JUb1N0cmluZy5jYWxsKHt9KSAhPT0gJ0Vycm9yJztcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IElOQ09SUkVDVF9UT19TVFJJTkcgPyBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgdmFyIE8gPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIG5hbWUgPSBub3JtYWxpemVTdHJpbmdBcmd1bWVudChPLm5hbWUsICdFcnJvcicpO1xuICB2YXIgbWVzc2FnZSA9IG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KE8ubWVzc2FnZSk7XG4gIHJldHVybiAhbmFtZSA/IG1lc3NhZ2UgOiAhbWVzc2FnZSA/IG5hbWUgOiBuYW1lICsgJzogJyArIG1lc3NhZ2U7XG59IDogbmF0aXZlRXJyb3JUb1N0cmluZztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBlcnJvclRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXRvLXN0cmluZycpO1xuXG52YXIgRXJyb3JQcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG5cbi8vIGBFcnJvci5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBmaXhcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZXJyb3IucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoRXJyb3JQcm90b3R5cGUudG9TdHJpbmcgIT09IGVycm9yVG9TdHJpbmcpIHtcbiAgZGVmaW5lQnVpbHRJbihFcnJvclByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZXJyb3JUb1N0cmluZyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgICBtZXRob2QuY2FsbChudWxsLCBhcmd1bWVudCB8fCBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9LCAxKTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2ZvckVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbm1vZHVsZS5leHBvcnRzID0gIVNUUklDVF9NRVRIT0QgPyBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZvcmVhY2ggLS0gc2FmZVxufSA6IFtdLmZvckVhY2g7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mb3ItZWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFtdLmZvckVhY2ggIT09IGZvckVhY2ggfSwge1xuICBmb3JFYWNoOiBmb3JFYWNoXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGtpbmQsIHZhbHVlKSB7XG4gIHZhciBpbm5lclJlc3VsdCwgaW5uZXJFcnJvcjtcbiAgYW5PYmplY3QoaXRlcmF0b3IpO1xuICB0cnkge1xuICAgIGlubmVyUmVzdWx0ID0gZ2V0TWV0aG9kKGl0ZXJhdG9yLCAncmV0dXJuJyk7XG4gICAgaWYgKCFpbm5lclJlc3VsdCkge1xuICAgICAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpbm5lclJlc3VsdCA9IGNhbGwoaW5uZXJSZXN1bHQsIGl0ZXJhdG9yKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbm5lckVycm9yID0gdHJ1ZTtcbiAgICBpbm5lclJlc3VsdCA9IGVycm9yO1xuICB9XG4gIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgaWYgKGlubmVyRXJyb3IpIHRocm93IGlubmVyUmVzdWx0O1xuICBhbk9iamVjdChpbm5lclJlc3VsdCk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgRU5UUklFUykge1xuICB0cnkge1xuICAgIHJldHVybiBFTlRSSUVTID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3Rba2V5XSA9IHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgcmV0dXJuIGdldE1ldGhvZChpdCwgSVRFUkFUT1IpXG4gICAgfHwgZ2V0TWV0aG9kKGl0LCAnQEBpdGVyYXRvcicpXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCB1c2luZ0l0ZXJhdG9yKSB7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gZ2V0SXRlcmF0b3JNZXRob2QoYXJndW1lbnQpIDogdXNpbmdJdGVyYXRvcjtcbiAgaWYgKGFDYWxsYWJsZShpdGVyYXRvck1ldGhvZCkpIHJldHVybiBhbk9iamVjdChjYWxsKGl0ZXJhdG9yTWV0aG9kLCBhcmd1bWVudCkpO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nJyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxudmFyICRBcnJheSA9IEFycmF5O1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gIHZhciBJU19DT05TVFJVQ1RPUiA9IGlzQ29uc3RydWN0b3IodGhpcyk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgbWFwZm4gPSBhcmd1bWVudHNMZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gIGlmIChtYXBwaW5nKSBtYXBmbiA9IGJpbmQobWFwZm4sIGFyZ3VtZW50c0xlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBnZXRJdGVyYXRvck1ldGhvZChPKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvciwgbmV4dCwgdmFsdWU7XG4gIC8vIGlmIHRoZSB0YXJnZXQgaXMgbm90IGl0ZXJhYmxlIG9yIGl0J3MgYW4gYXJyYXkgd2l0aCB0aGUgZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBhIHNpbXBsZSBjYXNlXG4gIGlmIChpdGVyYXRvck1ldGhvZCAmJiAhKHRoaXMgPT09ICRBcnJheSAmJiBpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlcmF0b3JNZXRob2QpKSkge1xuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoTywgaXRlcmF0b3JNZXRob2QpO1xuICAgIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMoKSA6IFtdO1xuICAgIGZvciAoOyEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlO1xuICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKGxlbmd0aCkgOiAkQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdO1xuICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgY2FsbGVkID0gMDtcbiAgdmFyIGl0ZXJhdG9yV2l0aFJldHVybiA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBkb25lOiAhIWNhbGxlZCsrIH07XG4gICAgfSxcbiAgICAncmV0dXJuJzogZnVuY3Rpb24gKCkge1xuICAgICAgU0FGRV9DTE9TSU5HID0gdHJ1ZTtcbiAgICB9XG4gIH07XG4gIGl0ZXJhdG9yV2l0aFJldHVybltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tLCBuby10aHJvdy1saXRlcmFsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIEFycmF5LmZyb20oaXRlcmF0b3JXaXRoUmV0dXJuLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBTS0lQX0NMT1NJTkcpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIVNLSVBfQ0xPU0lORyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IHJldHVybiBmYWxzZTsgfSAvLyB3b3JrYXJvdW5kIG9mIG9sZCBXZWJLaXQgKyBgZXZhbGAgYnVnXG4gIHZhciBJVEVSQVRJT05fU1VQUE9SVCA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICBvYmplY3RbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IElURVJBVElPTl9TVVBQT1JUID0gdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgZXhlYyhvYmplY3QpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBJVEVSQVRJT05fU1VQUE9SVDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mcm9tJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xuXG52YXIgSU5DT1JSRUNUX0lURVJBVElPTiA9ICFjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24oZnVuY3Rpb24gKGl0ZXJhYmxlKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIEFycmF5LmZyb20oaXRlcmFibGUpO1xufSk7XG5cbi8vIGBBcnJheS5mcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuZnJvbVxuJCh7IHRhcmdldDogJ0FycmF5Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgZnJvbTogZnJvbVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbnZhciBVTlNDT1BBQkxFUyA9IHdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5pZiAoQXJyYXlQcm90b3R5cGVbVU5TQ09QQUJMRVNdID09PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHkoQXJyYXlQcm90b3R5cGUsIFVOU0NPUEFCTEVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiBjcmVhdGUobnVsbClcbiAgfSk7XG59XG5cbi8vIGFkZCBhIGtleSB0byBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvdHlwZVtVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBPYmplY3RQcm90b3R5cGUgPSAkT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/ICRPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXNPd24ob2JqZWN0LCBJRV9QUk9UTykpIHJldHVybiBvYmplY3RbSUVfUFJPVE9dO1xuICB2YXIgY29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIGlmIChpc0NhbGxhYmxlKGNvbnN0cnVjdG9yKSAmJiBvYmplY3QgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mICRPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUta2V5cyAtLSBzYWZlICovXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbnZhciBORVdfSVRFUkFUT1JfUFJPVE9UWVBFID0gIWlzT2JqZWN0KEl0ZXJhdG9yUHJvdG90eXBlKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXN0ID0ge307XG4gIC8vIEZGNDQtIGxlZ2FjeSBpdGVyYXRvcnMgY2FzZVxuICByZXR1cm4gSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdLmNhbGwodGVzdCkgIT09IHRlc3Q7XG59KTtcblxuaWYgKE5FV19JVEVSQVRPUl9QUk9UT1RZUEUpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5lbHNlIGlmIChJU19QVVJFKSBJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLUBAaXRlcmF0b3JcbmlmICghaXNDYWxsYWJsZShJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gIGRlZmluZUJ1aWx0SW4oSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCwgRU5VTUVSQUJMRV9ORVhUKSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoKyFFTlVNRVJBQkxFX05FWFQsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBGdW5jdGlvbk5hbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5QUk9QRVI7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuQ09ORklHVVJBQkxFO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgJiYgS0lORCBpbiBJdGVyYWJsZVByb3RvdHlwZSkgcmV0dXJuIEl0ZXJhYmxlUHJvdG90eXBlW0tJTkRdO1xuXG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzKTsgfTtcbiAgfTtcblxuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IGZhbHNlO1xuICB2YXIgSXRlcmFibGVQcm90b3R5cGUgPSBJdGVyYWJsZS5wcm90b3R5cGU7XG4gIHZhciBuYXRpdmVJdGVyYXRvciA9IEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXVxuICAgIHx8IEl0ZXJhYmxlUHJvdG90eXBlWydAQGl0ZXJhdG9yJ11cbiAgICB8fCBERUZBVUxUICYmIEl0ZXJhYmxlUHJvdG90eXBlW0RFRkFVTFRdO1xuICB2YXIgZGVmYXVsdEl0ZXJhdG9yID0gIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgbmF0aXZlSXRlcmF0b3IgfHwgZ2V0SXRlcmF0aW9uTWV0aG9kKERFRkFVTFQpO1xuICB2YXIgYW55TmF0aXZlSXRlcmF0b3IgPSBOQU1FID09PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0NhbGxhYmxlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gICAgICAgICAgZGVmaW5lQnVpbHRJbihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheS5wcm90b3R5cGUueyB2YWx1ZXMsIEBAaXRlcmF0b3IgfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIERFRkFVTFQgPT09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBpZiAoIUlTX1BVUkUgJiYgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYWJsZVByb3RvdHlwZSwgJ25hbWUnLCBWQUxVRVMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gY2FsbChuYXRpdmVJdGVyYXRvciwgdGhpcyk7IH07XG4gICAgfVxuICB9XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgSVRFUkFUT1IsIGRlZmF1bHRJdGVyYXRvciwgeyBuYW1lOiBERUZBVUxUIH0pO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYENyZWF0ZUl0ZXJSZXN1bHRPYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVpdGVycmVzdWx0b2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgZG9uZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6IGRvbmUgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmtleXNcbi8vIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWFycmF5aXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lSXRlcmF0b3IoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBBUlJBWV9JVEVSQVRPUixcbiAgICB0YXJnZXQ6IHRvSW5kZXhlZE9iamVjdChpdGVyYXRlZCksIC8vIHRhcmdldFxuICAgIGluZGV4OiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICAgIGtpbmQ6IGtpbmQgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICB9KTtcbi8vIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuICBzd2l0Y2ggKHN0YXRlLmtpbmQpIHtcbiAgICBjYXNlICdrZXlzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoaW5kZXgsIGZhbHNlKTtcbiAgICBjYXNlICd2YWx1ZXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh0YXJnZXRbaW5kZXhdLCBmYWxzZSk7XG4gIH0gcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZmFsc2UpO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyVcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRldW5tYXBwZWRhcmd1bWVudHNvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG52YXIgdmFsdWVzID0gSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDQ1LSBidWdcbmlmICghSVNfUFVSRSAmJiBERVNDUklQVE9SUyAmJiB2YWx1ZXMubmFtZSAhPT0gJ3ZhbHVlcycpIHRyeSB7XG4gIGRlZmluZVByb3BlcnR5KHZhbHVlcywgJ25hbWUnLCB7IHZhbHVlOiAndmFsdWVzJyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIFNhZmFyaSA8IDEzIGRvZXMgbm90IHRocm93IGFuIGVycm9yIGluIHRoaXMgY2FzZVxudmFyIFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA9IERFU0NSSVBUT1JTICYmICFmdW5jdGlvbiAoKSB7XG4gIC8vIG1ha2VzIG5vIHNlbnNlIHdpdGhvdXQgcHJvcGVyIHN0cmljdCBtb2RlIHN1cHBvcnRcbiAgaWYgKHRoaXMgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkubGVuZ3RoID0gMTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPyBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIGlmIChpc0FycmF5KE8pICYmICFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgJ2xlbmd0aCcpLndyaXRhYmxlKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgnKTtcbiAgfSByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59IDogZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIElOQ09SUkVDVF9UT19MRU5HVEggPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbXS5wdXNoLmNhbGwoeyBsZW5ndGg6IDB4MTAwMDAwMDAwIH0sIDEpICE9PSA0Mjk0OTY3Mjk3O1xufSk7XG5cbi8vIFY4IDw9IDEyMSBhbmQgU2FmYXJpIDw9IDE1LjQ7IEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3Jcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyNjgxXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnB1c2goKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfVE9fTEVOR1RIIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5wdXNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnB1c2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBwdXNoOiBmdW5jdGlvbiBwdXNoKGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7XG4gICAgICBPW2xlbl0gPSBhcmd1bWVudHNbaV07XG4gICAgICBsZW4rKztcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciBuYXRpdmVSZXZlcnNlID0gdW5jdXJyeVRoaXMoW10ucmV2ZXJzZSk7XG52YXIgdGVzdCA9IFsxLCAyXTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZXZlcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJldmVyc2Vcbi8vIGZpeCBmb3IgU2FmYXJpIDEyLjAgYnVnXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4Nzk0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTdHJpbmcodGVzdCkgPT09IFN0cmluZyh0ZXN0LnJldmVyc2UoKSkgfSwge1xuICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnbiAtLSBkaXJ0eSBoYWNrXG4gICAgaWYgKGlzQXJyYXkodGhpcykpIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgcmV0dXJuIG5hdGl2ZVJldmVyc2UodGhpcyk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgbmF0aXZlU2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdzbGljZScpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyICRBcnJheSA9IEFycmF5O1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNsaWNlXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBrID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW5ndGgpO1xuICAgIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gICAgLy8gaW5saW5lIGBBcnJheVNwZWNpZXNDcmVhdGVgIGZvciB1c2FnZSBuYXRpdmUgYEFycmF5I3NsaWNlYCB3aGVyZSBpdCdzIHBvc3NpYmxlXG4gICAgdmFyIENvbnN0cnVjdG9yLCByZXN1bHQsIG47XG4gICAgaWYgKGlzQXJyYXkoTykpIHtcbiAgICAgIENvbnN0cnVjdG9yID0gTy5jb25zdHJ1Y3RvcjtcbiAgICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgICBpZiAoaXNDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvcikgJiYgKENvbnN0cnVjdG9yID09PSAkQXJyYXkgfHwgaXNBcnJheShDb25zdHJ1Y3Rvci5wcm90b3R5cGUpKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JbU1BFQ0lFU107XG4gICAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gbnVsbCkgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoQ29uc3RydWN0b3IgPT09ICRBcnJheSB8fCBDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVTbGljZShPLCBrLCBmaW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQgPSBuZXcgKENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDb25zdHJ1Y3RvcikobWF4KGZpbiAtIGssIDApKTtcbiAgICBmb3IgKG4gPSAwOyBrIDwgZmluOyBrKyssIG4rKykgaWYgKGsgaW4gTykgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBuLCBPW2tdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG5cbi8vIEpTT05bQEB0b1N0cmluZ1RhZ10gcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcblxuLy8gTWF0aFtAQHRvU3RyaW5nVGFnXSBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBzZXRQcm90b3R5cGVPZjogc2V0UHJvdG90eXBlT2Zcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzb2YoZ2xvYmFsLnByb2Nlc3MpID09PSAncHJvY2Vzcyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUpIHtcbiAgdmFyIENvbnN0cnVjdG9yID0gZ2V0QnVpbHRJbihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgQ29uc3RydWN0b3IgJiYgIUNvbnN0cnVjdG9yW1NQRUNJRVNdKSB7XG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKENvbnN0cnVjdG9yLCBTUEVDSUVTLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgICB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUHJvdG90eXBlKSB7XG4gIGlmIChpc1Byb3RvdHlwZU9mKFByb3RvdHlwZSwgaXQpKSByZXR1cm4gaXQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCdJbmNvcnJlY3QgaW52b2NhdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ29uc3RydWN0b3IoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgU3BlY2llc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3BlY2llc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBkZWZhdWx0Q29uc3RydWN0b3IpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgaXNOdWxsT3JVbmRlZmluZWQoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA/IGRlZmF1bHRDb25zdHJ1Y3RvciA6IGFDb25zdHJ1Y3RvcihTKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHBhc3NlZCwgcmVxdWlyZWQpIHtcbiAgaWYgKHBhc3NlZCA8IHJlcXVpcmVkKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignTm90IGVub3VnaCBhcmd1bWVudHMnKTtcbiAgcmV0dXJuIHBhc3NlZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IC8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KHVzZXJBZ2VudCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcycpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxudmFyIHNldCA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXIgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIEZ1bmN0aW9uID0gZ2xvYmFsLkZ1bmN0aW9uO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciAkbG9jYXRpb24sIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xuXG5mYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIERlbm8gdGhyb3dzIGEgUmVmZXJlbmNlRXJyb3Igb24gYGxvY2F0aW9uYCBhY2Nlc3Mgd2l0aG91dCBgLS1sb2NhdGlvbmAgZmxhZ1xuICAkbG9jYXRpb24gPSBnbG9iYWwubG9jYXRpb247XG59KTtcblxudmFyIHJ1biA9IGZ1bmN0aW9uIChpZCkge1xuICBpZiAoaGFzT3duKHF1ZXVlLCBpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xuXG52YXIgcnVubmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcnVuKGlkKTtcbiAgfTtcbn07XG5cbnZhciBldmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bihldmVudC5kYXRhKTtcbn07XG5cbnZhciBnbG9iYWxQb3N0TWVzc2FnZURlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIC8vIG9sZCBlbmdpbmVzIGhhdmUgbm90IGxvY2F0aW9uLm9yaWdpblxuICBnbG9iYWwucG9zdE1lc3NhZ2UoU3RyaW5nKGlkKSwgJGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArICRsb2NhdGlvbi5ob3N0KTtcbn07XG5cbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0IHx8ICFjbGVhcikge1xuICBzZXQgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoaGFuZGxlcikge1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBmbiA9IGlzQ2FsbGFibGUoaGFuZGxlcikgPyBoYW5kbGVyIDogRnVuY3Rpb24oaGFuZGxlcik7XG4gICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cywgMSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwcGx5KGZuLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKElTX05PREUpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgLy8gZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82MjRcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCAmJiAhSVNfSU9TKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZXZlbnRMaXN0ZW5lcjtcbiAgICBkZWZlciA9IGJpbmQocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKFxuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmXG4gICAgaXNDYWxsYWJsZShnbG9iYWwucG9zdE1lc3NhZ2UpICYmXG4gICAgIWdsb2JhbC5pbXBvcnRTY3JpcHRzICYmXG4gICAgJGxvY2F0aW9uICYmICRsb2NhdGlvbi5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJlxuICAgICFmYWlscyhnbG9iYWxQb3N0TWVzc2FnZURlZmVyKVxuICApIHtcbiAgICBkZWZlciA9IGdsb2JhbFBvc3RNZXNzYWdlRGVmZXI7XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBldmVudExpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChydW5uZXIoaWQpLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgY2xlYXI6IGNsZWFyXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIEF2b2lkIE5vZGVKUyBleHBlcmltZW50YWwgd2FybmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIURFU0NSSVBUT1JTKSByZXR1cm4gZ2xvYmFsW25hbWVdO1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsIG5hbWUpO1xuICByZXR1cm4gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuaGVhZCA9IG51bGw7XG4gIHRoaXMudGFpbCA9IG51bGw7XG59O1xuXG5RdWV1ZS5wcm90b3R5cGUgPSB7XG4gIGFkZDogZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICB2YXIgZW50cnkgPSB7IGl0ZW06IGl0ZW0sIG5leHQ6IG51bGwgfTtcbiAgICB2YXIgdGFpbCA9IHRoaXMudGFpbDtcbiAgICBpZiAodGFpbCkgdGFpbC5uZXh0ID0gZW50cnk7XG4gICAgZWxzZSB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVudHJ5ID0gdGhpcy5oZWFkO1xuICAgIGlmIChlbnRyeSkge1xuICAgICAgdmFyIG5leHQgPSB0aGlzLmhlYWQgPSBlbnRyeS5uZXh0O1xuICAgICAgaWYgKG5leHQgPT09IG51bGwpIHRoaXMudGFpbCA9IG51bGw7XG4gICAgICByZXR1cm4gZW50cnkuaXRlbTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUXVldWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC9pcGFkfGlwaG9uZXxpcG9kL2kudGVzdCh1c2VyQWdlbnQpICYmIHR5cGVvZiBQZWJibGUgIT0gJ3VuZGVmaW5lZCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC93ZWIwcyg/IS4qY2hyb21lKS9pLnRlc3QodXNlckFnZW50KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNhZmVHZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NhZmUtZ2V0LWJ1aWx0LWluJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9xdWV1ZScpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG52YXIgSVNfSU9TX1BFQkJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLXBlYmJsZScpO1xudmFyIElTX1dFQk9TX1dFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0Jyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgTXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgbWljcm90YXNrID0gc2FmZUdldEJ1aWx0SW4oJ3F1ZXVlTWljcm90YXNrJyk7XG52YXIgbm90aWZ5LCB0b2dnbGUsIG5vZGUsIHByb21pc2UsIHRoZW47XG5cbi8vIG1vZGVybiBlbmdpbmVzIGhhdmUgcXVldWVNaWNyb3Rhc2sgbWV0aG9kXG5pZiAoIW1pY3JvdGFzaykge1xuICB2YXIgcXVldWUgPSBuZXcgUXVldWUoKTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKElTX05PREUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoZm4gPSBxdWV1ZS5nZXQoKSkgdHJ5IHtcbiAgICAgIGZuKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChxdWV1ZS5oZWFkKSBub3RpZnkoKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIC8vIGFsc28gZXhjZXB0IFdlYk9TIFdlYmtpdCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODk4XG4gIGlmICghSVNfSU9TICYmICFJU19OT0RFICYmICFJU19XRUJPU19XRUJLSVQgJiYgTXV0YXRpb25PYnNlcnZlciAmJiBkb2N1bWVudCkge1xuICAgIHRvZ2dsZSA9IHRydWU7XG4gICAgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKCFJU19JT1NfUEVCQkxFICYmIFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgLy8gd29ya2Fyb3VuZCBvZiBXZWJLaXQgfiBpT1MgU2FmYXJpIDEwLjEgYnVnXG4gICAgcHJvbWlzZS5jb25zdHJ1Y3RvciA9IFByb21pc2U7XG4gICAgdGhlbiA9IGJpbmQocHJvbWlzZS50aGVuLCBwcm9taXNlKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBOb2RlLmpzIHdpdGhvdXQgcHJvbWlzZXNcbiAgfSBlbHNlIGlmIChJU19OT0RFKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnZVxuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICAvLyBgd2VicGFja2AgZGV2IHNlcnZlciBidWcgb24gSUUgZ2xvYmFsIG1ldGhvZHMgLSB1c2UgYmluZChmbiwgZ2xvYmFsKVxuICAgIG1hY3JvdGFzayA9IGJpbmQobWFjcm90YXNrLCBnbG9iYWwpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1hY3JvdGFzayhmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIG1pY3JvdGFzayA9IGZ1bmN0aW9uIChmbikge1xuICAgIGlmICghcXVldWUuaGVhZCkgbm90aWZ5KCk7XG4gICAgcXVldWUuYWRkKGZuKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtaWNyb3Rhc2s7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYSwgYikge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlIC0tIHNhZmVcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gY29uc29sZS5lcnJvcihhKSA6IGNvbnNvbGUuZXJyb3IoYSwgYik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiB7IGVycm9yOiBmYWxzZSwgdmFsdWU6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB7IGVycm9yOiB0cnVlLCB2YWx1ZTogZXJyb3IgfTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5Qcm9taXNlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBEZW5vIC0tIERlbm8gY2FzZSAqL1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgRGVubyA9PSAnb2JqZWN0JyAmJiBEZW5vICYmIHR5cGVvZiBEZW5vLnZlcnNpb24gPT0gJ29iamVjdCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX0RFTk8gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8nKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIUlTX0RFTk8gJiYgIUlTX05PREVcbiAgJiYgdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0J1xuICAmJiB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX0JST1dTRVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWJyb3dzZXInKTtcbnZhciBJU19ERU5PID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1kZW5vJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBTVUJDTEFTU0lORyA9IGZhbHNlO1xudmFyIE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCA9IGlzQ2FsbGFibGUoZ2xvYmFsLlByb21pc2VSZWplY3Rpb25FdmVudCk7XG5cbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IGlzRm9yY2VkKCdQcm9taXNlJywgZnVuY3Rpb24gKCkge1xuICB2YXIgUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UgPSBpbnNwZWN0U291cmNlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIHZhciBHTE9CQUxfQ09SRV9KU19QUk9NSVNFID0gUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UgIT09IFN0cmluZyhOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpO1xuICAvLyBWOCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAvLyBXZSBjYW4ndCBkZXRlY3QgaXQgc3luY2hyb25vdXNseSwgc28ganVzdCBjaGVjayB2ZXJzaW9uc1xuICBpZiAoIUdMT0JBTF9DT1JFX0pTX1BST01JU0UgJiYgVjhfVkVSU0lPTiA9PT0gNjYpIHJldHVybiB0cnVlO1xuICAvLyBXZSBuZWVkIFByb21pc2UjeyBjYXRjaCwgZmluYWxseSB9IGluIHRoZSBwdXJlIHZlcnNpb24gZm9yIHByZXZlbnRpbmcgcHJvdG90eXBlIHBvbGx1dGlvblxuICBpZiAoSVNfUFVSRSAmJiAhKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2NhdGNoJ10gJiYgTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnZmluYWxseSddKSkgcmV0dXJuIHRydWU7XG4gIC8vIFdlIGNhbid0IHVzZSBAQHNwZWNpZXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG4gIGlmICghVjhfVkVSU0lPTiB8fCBWOF9WRVJTSU9OIDwgNTEgfHwgIS9uYXRpdmUgY29kZS8udGVzdChQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSkpIHtcbiAgICAvLyBEZXRlY3QgY29ycmVjdG5lc3Mgb2Ygc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gbmV3IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKDEpOyB9KTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSBmdW5jdGlvbiAoZXhlYykge1xuICAgICAgZXhlYyhmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gICAgfTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBwcm9taXNlLmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBGYWtlUHJvbWlzZTtcbiAgICBTVUJDTEFTU0lORyA9IHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pIGluc3RhbmNlb2YgRmFrZVByb21pc2U7XG4gICAgaWYgKCFTVUJDTEFTU0lORykgcmV0dXJuIHRydWU7XG4gIC8vIFVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgfSByZXR1cm4gIUdMT0JBTF9DT1JFX0pTX1BST01JU0UgJiYgKElTX0JST1dTRVIgfHwgSVNfREVOTykgJiYgIU5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ09OU1RSVUNUT1I6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SLFxuICBSRUpFQ1RJT05fRVZFTlQ6IE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCxcbiAgU1VCQ0xBU1NJTkc6IFNVQkNMQVNTSU5HXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUNhbGxhYmxlKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFDYWxsYWJsZShyZWplY3QpO1xufTtcblxuLy8gYE5ld1Byb21pc2VDYXBhYmlsaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbmV3cHJvbWlzZWNhcGFiaWxpdHlcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciB0YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21pY3JvdGFzaycpO1xudmFyIGhvc3RSZXBvcnRFcnJvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzJyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgUXVldWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcXVldWUnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5DT05TVFJVQ1RPUjtcbnZhciBOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uUkVKRUNUSU9OX0VWRU5UO1xudmFyIE5BVElWRV9QUk9NSVNFX1NVQkNMQVNTSU5HID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLlNVQkNMQVNTSU5HO1xudmFyIGdldEludGVybmFsUHJvbWlzZVN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoUFJPTUlTRSk7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3IgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3I7XG52YXIgUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VQcm90b3R5cGU7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xudmFyIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5O1xuXG52YXIgRElTUEFUQ0hfRVZFTlQgPSAhIShkb2N1bWVudCAmJiBkb2N1bWVudC5jcmVhdGVFdmVudCAmJiBnbG9iYWwuZGlzcGF0Y2hFdmVudCk7XG52YXIgVU5IQU5ETEVEX1JFSkVDVElPTiA9ICd1bmhhbmRsZWRyZWplY3Rpb24nO1xudmFyIFJFSkVDVElPTl9IQU5ETEVEID0gJ3JlamVjdGlvbmhhbmRsZWQnO1xudmFyIFBFTkRJTkcgPSAwO1xudmFyIEZVTEZJTExFRCA9IDE7XG52YXIgUkVKRUNURUQgPSAyO1xudmFyIEhBTkRMRUQgPSAxO1xudmFyIFVOSEFORExFRCA9IDI7XG5cbnZhciBJbnRlcm5hbCwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFByb21pc2VXcmFwcGVyLCBuYXRpdmVUaGVuO1xuXG4vLyBoZWxwZXJzXG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiBpc0NhbGxhYmxlKHRoZW4gPSBpdC50aGVuKSA/IHRoZW4gOiBmYWxzZTtcbn07XG5cbnZhciBjYWxsUmVhY3Rpb24gPSBmdW5jdGlvbiAocmVhY3Rpb24sIHN0YXRlKSB7XG4gIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICB2YXIgb2sgPSBzdGF0ZS5zdGF0ZSA9PT0gRlVMRklMTEVEO1xuICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgdHJ5IHtcbiAgICBpZiAoaGFuZGxlcikge1xuICAgICAgaWYgKCFvaykge1xuICAgICAgICBpZiAoc3RhdGUucmVqZWN0aW9uID09PSBVTkhBTkRMRUQpIG9uSGFuZGxlVW5oYW5kbGVkKHN0YXRlKTtcbiAgICAgICAgc3RhdGUucmVqZWN0aW9uID0gSEFORExFRDtcbiAgICAgIH1cbiAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIGNhbiB0aHJvd1xuICAgICAgICBpZiAoZG9tYWluKSB7XG4gICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgfSBlbHNlIGlmICh0aGVuID0gaXNUaGVuYWJsZShyZXN1bHQpKSB7XG4gICAgICAgIGNhbGwodGhlbiwgcmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgfVxufTtcblxudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChzdGF0ZSwgaXNSZWplY3QpIHtcbiAgaWYgKHN0YXRlLm5vdGlmaWVkKSByZXR1cm47XG4gIHN0YXRlLm5vdGlmaWVkID0gdHJ1ZTtcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVhY3Rpb25zID0gc3RhdGUucmVhY3Rpb25zO1xuICAgIHZhciByZWFjdGlvbjtcbiAgICB3aGlsZSAocmVhY3Rpb24gPSByZWFjdGlvbnMuZ2V0KCkpIHtcbiAgICAgIGNhbGxSZWFjdGlvbihyZWFjdGlvbiwgc3RhdGUpO1xuICAgIH1cbiAgICBzdGF0ZS5ub3RpZmllZCA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhc3RhdGUucmVqZWN0aW9uKSBvblVuaGFuZGxlZChzdGF0ZSk7XG4gIH0pO1xufTtcblxudmFyIGRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAobmFtZSwgcHJvbWlzZSwgcmVhc29uKSB7XG4gIHZhciBldmVudCwgaGFuZGxlcjtcbiAgaWYgKERJU1BBVENIX0VWRU5UKSB7XG4gICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICBldmVudC5wcm9taXNlID0gcHJvbWlzZTtcbiAgICBldmVudC5yZWFzb24gPSByZWFzb247XG4gICAgZXZlbnQuaW5pdEV2ZW50KG5hbWUsIGZhbHNlLCB0cnVlKTtcbiAgICBnbG9iYWwuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH0gZWxzZSBldmVudCA9IHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiByZWFzb24gfTtcbiAgaWYgKCFOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQgJiYgKGhhbmRsZXIgPSBnbG9iYWxbJ29uJyArIG5hbWVdKSkgaGFuZGxlcihldmVudCk7XG4gIGVsc2UgaWYgKG5hbWUgPT09IFVOSEFORExFRF9SRUpFQ1RJT04pIGhvc3RSZXBvcnRFcnJvcnMoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHJlYXNvbik7XG59O1xuXG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY2FsbCh0YXNrLCBnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHN0YXRlLmZhY2FkZTtcbiAgICB2YXIgdmFsdWUgPSBzdGF0ZS52YWx1ZTtcbiAgICB2YXIgSVNfVU5IQU5ETEVEID0gaXNVbmhhbmRsZWQoc3RhdGUpO1xuICAgIHZhciByZXN1bHQ7XG4gICAgaWYgKElTX1VOSEFORExFRCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChJU19OT0RFKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFVOSEFORExFRF9SRUpFQ1RJT04sIHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHN0YXRlLnJlamVjdGlvbiA9IElTX05PREUgfHwgaXNVbmhhbmRsZWQoc3RhdGUpID8gVU5IQU5ETEVEIDogSEFORExFRDtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IHJlc3VsdC52YWx1ZTtcbiAgICB9XG4gIH0pO1xufTtcblxudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5yZWplY3Rpb24gIT09IEhBTkRMRUQgJiYgIXN0YXRlLnBhcmVudDtcbn07XG5cbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICBjYWxsKHRhc2ssIGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gc3RhdGUuZmFjYWRlO1xuICAgIGlmIChJU19OT0RFKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgZGlzcGF0Y2hFdmVudChSRUpFQ1RJT05fSEFORExFRCwgcHJvbWlzZSwgc3RhdGUudmFsdWUpO1xuICB9KTtcbn07XG5cbnZhciBiaW5kID0gZnVuY3Rpb24gKGZuLCBzdGF0ZSwgdW53cmFwKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBmbihzdGF0ZSwgdmFsdWUsIHVud3JhcCk7XG4gIH07XG59O1xuXG52YXIgaW50ZXJuYWxSZWplY3QgPSBmdW5jdGlvbiAoc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICBzdGF0ZS5zdGF0ZSA9IFJFSkVDVEVEO1xuICBub3RpZnkoc3RhdGUsIHRydWUpO1xufTtcblxudmFyIGludGVybmFsUmVzb2x2ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHRyeSB7XG4gICAgaWYgKHN0YXRlLmZhY2FkZSA9PT0gdmFsdWUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICB2YXIgdGhlbiA9IGlzVGhlbmFibGUodmFsdWUpO1xuICAgIGlmICh0aGVuKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjYWxsKHRoZW4sIHZhbHVlLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlc29sdmUsIHdyYXBwZXIsIHN0YXRlKSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZWplY3QsIHdyYXBwZXIsIHN0YXRlKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaW50ZXJuYWxSZWplY3Qod3JhcHBlciwgZXJyb3IsIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gICAgICBzdGF0ZS5zdGF0ZSA9IEZVTEZJTExFRDtcbiAgICAgIG5vdGlmeShzdGF0ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbnRlcm5hbFJlamVjdCh7IGRvbmU6IGZhbHNlIH0sIGVycm9yLCBzdGF0ZSk7XG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgUHJvbWlzZUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIGFuSW5zdGFuY2UodGhpcywgUHJvbWlzZVByb3RvdHlwZSk7XG4gICAgYUNhbGxhYmxlKGV4ZWN1dG9yKTtcbiAgICBjYWxsKEludGVybmFsLCB0aGlzKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoYmluZChpbnRlcm5hbFJlc29sdmUsIHN0YXRlKSwgYmluZChpbnRlcm5hbFJlamVjdCwgc3RhdGUpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaW50ZXJuYWxSZWplY3Qoc3RhdGUsIGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgUHJvbWlzZVByb3RvdHlwZSA9IFByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICB0eXBlOiBQUk9NSVNFLFxuICAgICAgZG9uZTogZmFsc2UsXG4gICAgICBub3RpZmllZDogZmFsc2UsXG4gICAgICBwYXJlbnQ6IGZhbHNlLFxuICAgICAgcmVhY3Rpb25zOiBuZXcgUXVldWUoKSxcbiAgICAgIHJlamVjdGlvbjogZmFsc2UsXG4gICAgICBzdGF0ZTogUEVORElORyxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgfTtcblxuICAvLyBgUHJvbWlzZS5wcm90b3R5cGUudGhlbmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUudGhlblxuICBJbnRlcm5hbC5wcm90b3R5cGUgPSBkZWZpbmVCdWlsdEluKFByb21pc2VQcm90b3R5cGUsICd0aGVuJywgZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBQcm9taXNlQ29uc3RydWN0b3IpKTtcbiAgICBzdGF0ZS5wYXJlbnQgPSB0cnVlO1xuICAgIHJlYWN0aW9uLm9rID0gaXNDYWxsYWJsZShvbkZ1bGZpbGxlZCkgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgcmVhY3Rpb24uZmFpbCA9IGlzQ2FsbGFibGUob25SZWplY3RlZCkgJiYgb25SZWplY3RlZDtcbiAgICByZWFjdGlvbi5kb21haW4gPSBJU19OT0RFID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgaWYgKHN0YXRlLnN0YXRlID09PSBQRU5ESU5HKSBzdGF0ZS5yZWFjdGlvbnMuYWRkKHJlYWN0aW9uKTtcbiAgICBlbHNlIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsUmVhY3Rpb24ocmVhY3Rpb24sIHN0YXRlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgfSk7XG5cbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZShwcm9taXNlKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBzdGF0ZSk7XG4gICAgdGhpcy5yZWplY3QgPSBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSk7XG4gIH07XG5cbiAgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgICByZXR1cm4gQyA9PT0gUHJvbWlzZUNvbnN0cnVjdG9yIHx8IEMgPT09IFByb21pc2VXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG5cbiAgaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKSAmJiBOYXRpdmVQcm9taXNlUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgbmF0aXZlVGhlbiA9IE5hdGl2ZVByb21pc2VQcm90b3R5cGUudGhlbjtcblxuICAgIGlmICghTkFUSVZFX1BST01JU0VfU1VCQ0xBU1NJTkcpIHtcbiAgICAgIC8vIG1ha2UgYFByb21pc2UjdGhlbmAgcmV0dXJuIGEgcG9seWZpbGxlZCBgUHJvbWlzZWAgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGNhbGwobmF0aXZlVGhlbiwgdGhhdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSkudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjQwXG4gICAgICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIGAuY29uc3RydWN0b3IgPT09IFByb21pc2VgIHdvcmsgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICB0cnkge1xuICAgICAgZGVsZXRlIE5hdGl2ZVByb21pc2VQcm90b3R5cGUuY29uc3RydWN0b3I7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG4gICAgLy8gbWFrZSBgaW5zdGFuY2VvZiBQcm9taXNlYCB3b3JrIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICBzZXRQcm90b3R5cGVPZihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCBQcm9taXNlUHJvdG90eXBlKTtcbiAgICB9XG4gIH1cbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICBQcm9taXNlOiBQcm9taXNlQ29uc3RydWN0b3Jcbn0pO1xuXG5zZXRUb1N0cmluZ1RhZyhQcm9taXNlQ29uc3RydWN0b3IsIFBST01JU0UsIGZhbHNlLCB0cnVlKTtcbnNldFNwZWNpZXMoUFJPTUlTRSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG52YXIgUmVzdWx0ID0gZnVuY3Rpb24gKHN0b3BwZWQsIHJlc3VsdCkge1xuICB0aGlzLnN0b3BwZWQgPSBzdG9wcGVkO1xuICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbn07XG5cbnZhciBSZXN1bHRQcm90b3R5cGUgPSBSZXN1bHQucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgdW5ib3VuZEZ1bmN0aW9uLCBvcHRpb25zKSB7XG4gIHZhciB0aGF0ID0gb3B0aW9ucyAmJiBvcHRpb25zLnRoYXQ7XG4gIHZhciBBU19FTlRSSUVTID0gISEob3B0aW9ucyAmJiBvcHRpb25zLkFTX0VOVFJJRVMpO1xuICB2YXIgSVNfUkVDT1JEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX1JFQ09SRCk7XG4gIHZhciBJU19JVEVSQVRPUiA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19JVEVSQVRPUik7XG4gIHZhciBJTlRFUlJVUFRFRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JTlRFUlJVUFRFRCk7XG4gIHZhciBmbiA9IGJpbmQodW5ib3VuZEZ1bmN0aW9uLCB0aGF0KTtcbiAgdmFyIGl0ZXJhdG9yLCBpdGVyRm4sIGluZGV4LCBsZW5ndGgsIHJlc3VsdCwgbmV4dCwgc3RlcDtcblxuICB2YXIgc3RvcCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHtcbiAgICBpZiAoaXRlcmF0b3IpIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBjb25kaXRpb24pO1xuICAgIHJldHVybiBuZXcgUmVzdWx0KHRydWUsIGNvbmRpdGlvbik7XG4gIH07XG5cbiAgdmFyIGNhbGxGbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmIChBU19FTlRSSUVTKSB7XG4gICAgICBhbk9iamVjdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZVswXSwgdmFsdWVbMV0sIHN0b3ApIDogZm4odmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICB9IHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlLCBzdG9wKSA6IGZuKHZhbHVlKTtcbiAgfTtcblxuICBpZiAoSVNfUkVDT1JEKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZS5pdGVyYXRvcjtcbiAgfSBlbHNlIGlmIChJU19JVEVSQVRPUikge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGU7XG4gIH0gZWxzZSB7XG4gICAgaXRlckZuID0gZ2V0SXRlcmF0b3JNZXRob2QoaXRlcmFibGUpO1xuICAgIGlmICghaXRlckZuKSB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhpdGVyYWJsZSkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xuICAgIC8vIG9wdGltaXNhdGlvbiBmb3IgYXJyYXkgaXRlcmF0b3JzXG4gICAgaWYgKGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyRm4pKSB7XG4gICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoaXRlcmFibGUpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHQgPSBjYWxsRm4oaXRlcmFibGVbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xuICAgIH1cbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKGl0ZXJhYmxlLCBpdGVyRm4pO1xuICB9XG5cbiAgbmV4dCA9IElTX1JFQ09SRCA/IGl0ZXJhYmxlLm5leHQgOiBpdGVyYXRvci5uZXh0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbEZuKHN0ZXAudmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnICYmIHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcblxubW9kdWxlLmV4cG9ydHMgPSBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IuYWxsKGl0ZXJhYmxlKS50aGVuKHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLmFsbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UuYWxsXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4vLyBgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS5jYXRjaFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiwgcmVhbDogdHJ1ZSB9LCB7XG4gICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICB9XG59KTtcblxuLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjY2F0Y2hgIHByb3Blcmx5IHdvcmtzIHdpdGggcGF0Y2hlZCBgUHJvbWlzZSN0aGVuYFxuaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKSkge1xuICB2YXIgbWV0aG9kID0gZ2V0QnVpbHRJbignUHJvbWlzZScpLnByb3RvdHlwZVsnY2F0Y2gnXTtcbiAgaWYgKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2NhdGNoJ10gIT09IG1ldGhvZCkge1xuICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ2NhdGNoJywgbWV0aG9kLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLnJhY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJhY2VcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBjYWxsKCRwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcblxuLy8gYFByb21pc2UucmVqZWN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZWplY3RcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYodGhpcyk7XG4gICAgdmFyIGNhcGFiaWxpdHlSZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICBjYXBhYmlsaXR5UmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpLkNPTlNUUlVDVE9SO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xuXG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yV3JhcHBlciA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKTtcbnZhciBDSEVDS19XUkFQUEVSID0gSVNfUFVSRSAmJiAhRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1I7XG5cbi8vIGBQcm9taXNlLnJlc29sdmVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlc29sdmVcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIHx8IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIH0sIHtcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKENIRUNLX1dSQVBQRVIgJiYgdGhpcyA9PT0gUHJvbWlzZUNvbnN0cnVjdG9yV3JhcHBlciA/IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHNwbGl0IHRvIG1vZHVsZXMgbGlzdGVkIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnByb21pc2UuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbGwnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5jYXRjaCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wcm9taXNlLnJhY2UnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5yZWplY3QnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5yZXNvbHZlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5mbGFnc2AgZ2V0dGVyIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5oYXNJbmRpY2VzKSByZXN1bHQgKz0gJ2QnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQuZG90QWxsKSByZXN1bHQgKz0gJ3MnO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC51bmljb2RlU2V0cykgcmVzdWx0ICs9ICd2JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnYScsICd5JykgLT4gL2EveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAkUmVnRXhwKCdhJywgJ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ2FiY2QnKSAhPT0gbnVsbDtcbn0pO1xuXG4vLyBVQyBCcm93c2VyIGJ1Z1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzEwMDhcbnZhciBNSVNTRURfU1RJQ0tZID0gVU5TVVBQT1JURURfWSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhJFJlZ0V4cCgnYScsICd5Jykuc3RpY2t5O1xufSk7XG5cbnZhciBCUk9LRU5fQ0FSRVQgPSBVTlNVUFBPUlRFRF9ZIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNjg3XG4gIHZhciByZSA9ICRSZWdFeHAoJ15yJywgJ2d5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdzdHInKSAhPT0gbnVsbDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQlJPS0VOX0NBUkVUOiBCUk9LRU5fQ0FSRVQsXG4gIE1JU1NFRF9TVElDS1k6IE1JU1NFRF9TVElDS1ksXG4gIFVOU1VQUE9SVEVEX1k6IFVOU1VQUE9SVEVEX1lcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJy4nLCAncycpIC0+IC8uL3MgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnLicsICdzJyk7XG4gIHJldHVybiAhKHJlLmRvdEFsbCAmJiByZS50ZXN0KCdcXG4nKSAmJiByZS5mbGFncyA9PT0gJ3MnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCcoPzxhPmIpJywgJ2cnKSAtPiAvKD88YT5iKS9nIGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJyg/PGE+YiknLCAnZycpO1xuICByZXR1cm4gcmUuZXhlYygnYicpLmdyb3Vwcy5hICE9PSAnYicgfHxcbiAgICAnYicucmVwbGFjZShyZSwgJyQ8YT5jJykgIT09ICdiYyc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tZW1wdHktY2FwdHVyaW5nLWdyb3VwLCByZWdleHAvbm8tZW1wdHktZ3JvdXAsIHJlZ2V4cC9uby1sYXp5LWVuZHMgLS0gdGVzdGluZyAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVnZXhwL25vLXVzZWxlc3MtcXVhbnRpZmllciAtLSB0ZXN0aW5nICovXG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzJyk7XG52YXIgc3RpY2t5SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtc3RpY2t5LWhlbHBlcnMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJykuZ2V0O1xudmFyIFVOU1VQUE9SVEVEX0RPVF9BTEwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwnKTtcbnZhciBVTlNVUFBPUlRFRF9OQ0cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLW5jZycpO1xuXG52YXIgbmF0aXZlUmVwbGFjZSA9IHNoYXJlZCgnbmF0aXZlLXN0cmluZy1yZXBsYWNlJywgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGluZGV4T2YgPSB1bmN1cnJ5VGhpcygnJy5pbmRleE9mKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvO1xuICB2YXIgcmUyID0gL2IqL2c7XG4gIGNhbGwobmF0aXZlRXhlYywgcmUxLCAnYScpO1xuICBjYWxsKG5hdGl2ZUV4ZWMsIHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMS5sYXN0SW5kZXggIT09IDAgfHwgcmUyLmxhc3RJbmRleCAhPT0gMDtcbn0pKCk7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gc3RpY2t5SGVscGVycy5CUk9LRU5fQ0FSRVQ7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEIHx8IFVOU1VQUE9SVEVEX1kgfHwgVU5TVVBQT1JURURfRE9UX0FMTCB8fCBVTlNVUFBPUlRFRF9OQ0c7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyaW5nKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHJlKTtcbiAgICB2YXIgc3RyID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICB2YXIgcmF3ID0gc3RhdGUucmF3O1xuICAgIHZhciByZXN1bHQsIHJlQ29weSwgbGFzdEluZGV4LCBtYXRjaCwgaSwgb2JqZWN0LCBncm91cDtcblxuICAgIGlmIChyYXcpIHtcbiAgICAgIHJhdy5sYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICByZXN1bHQgPSBjYWxsKHBhdGNoZWRFeGVjLCByYXcsIHN0cik7XG4gICAgICByZS5sYXN0SW5kZXggPSByYXcubGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB2YXIgZ3JvdXBzID0gc3RhdGUuZ3JvdXBzO1xuICAgIHZhciBzdGlja3kgPSBVTlNVUFBPUlRFRF9ZICYmIHJlLnN0aWNreTtcbiAgICB2YXIgZmxhZ3MgPSBjYWxsKHJlZ2V4cEZsYWdzLCByZSk7XG4gICAgdmFyIHNvdXJjZSA9IHJlLnNvdXJjZTtcbiAgICB2YXIgY2hhcnNBZGRlZCA9IDA7XG4gICAgdmFyIHN0ckNvcHkgPSBzdHI7XG5cbiAgICBpZiAoc3RpY2t5KSB7XG4gICAgICBmbGFncyA9IHJlcGxhY2UoZmxhZ3MsICd5JywgJycpO1xuICAgICAgaWYgKGluZGV4T2YoZmxhZ3MsICdnJykgPT09IC0xKSB7XG4gICAgICAgIGZsYWdzICs9ICdnJztcbiAgICAgIH1cblxuICAgICAgc3RyQ29weSA9IHN0cmluZ1NsaWNlKHN0ciwgcmUubGFzdEluZGV4KTtcbiAgICAgIC8vIFN1cHBvcnQgYW5jaG9yZWQgc3RpY2t5IGJlaGF2aW9yLlxuICAgICAgaWYgKHJlLmxhc3RJbmRleCA+IDAgJiYgKCFyZS5tdWx0aWxpbmUgfHwgcmUubXVsdGlsaW5lICYmIGNoYXJBdChzdHIsIHJlLmxhc3RJbmRleCAtIDEpICE9PSAnXFxuJykpIHtcbiAgICAgICAgc291cmNlID0gJyg/OiAnICsgc291cmNlICsgJyknO1xuICAgICAgICBzdHJDb3B5ID0gJyAnICsgc3RyQ29weTtcbiAgICAgICAgY2hhcnNBZGRlZCsrO1xuICAgICAgfVxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIHN0ciBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXig/OicgKyBzb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICB9XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyBzb3VyY2UgKyAnJCg/IVxcXFxzKScsIGZsYWdzKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmUubGFzdEluZGV4O1xuXG4gICAgbWF0Y2ggPSBjYWxsKG5hdGl2ZUV4ZWMsIHN0aWNreSA/IHJlQ29weSA6IHJlLCBzdHJDb3B5KTtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBtYXRjaC5pbnB1dCA9IHN0cmluZ1NsaWNlKG1hdGNoLmlucHV0LCBjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2hbMF0gPSBzdHJpbmdTbGljZShtYXRjaFswXSwgY2hhcnNBZGRlZCk7XG4gICAgICAgIG1hdGNoLmluZGV4ID0gcmUubGFzdEluZGV4O1xuICAgICAgICByZS5sYXN0SW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgfSBlbHNlIHJlLmxhc3RJbmRleCA9IDA7XG4gICAgfSBlbHNlIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJ3Qgd29yayBmb3IgLyguPyk/L1xuICAgICAgY2FsbChuYXRpdmVSZXBsYWNlLCBtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoICYmIGdyb3Vwcykge1xuICAgICAgbWF0Y2guZ3JvdXBzID0gb2JqZWN0ID0gY3JlYXRlKG51bGwpO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBncm91cCA9IGdyb3Vwc1tpXTtcbiAgICAgICAgb2JqZWN0W2dyb3VwWzBdXSA9IG1hdGNoW2dyb3VwWzFdXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5leGVjYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS5leGVjXG4kKHsgdGFyZ2V0OiAnUmVnRXhwJywgcHJvdG86IHRydWUsIGZvcmNlZDogLy4vLmV4ZWMgIT09IGV4ZWMgfSwge1xuICBleGVjOiBleGVjXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIG1vdmVkIHRvIGVudHJ5IHBvaW50c1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5yZWdleHAuZXhlYycpO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG52YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gIHZhciByZSA9IC9bYWNdLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBleGVjQ2FsbGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gLy4vLmV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHJlLnRlc3QoJ2FiYycpID09PSB0cnVlICYmIGV4ZWNDYWxsZWQ7XG59KCk7XG5cbnZhciBuYXRpdmVUZXN0ID0gLy4vLnRlc3Q7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLnRlc3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLnRlc3RcbiQoeyB0YXJnZXQ6ICdSZWdFeHAnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhREVMRUdBVEVTX1RPX0VYRUMgfSwge1xuICB0ZXN0OiBmdW5jdGlvbiAoUykge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKFMpO1xuICAgIHZhciBleGVjID0gUi5leGVjO1xuICAgIGlmICghaXNDYWxsYWJsZShleGVjKSkgcmV0dXJuIGNhbGwobmF0aXZlVGVzdCwgUiwgc3RyaW5nKTtcbiAgICB2YXIgcmVzdWx0ID0gY2FsbChleGVjLCBSLCBzdHJpbmcpO1xuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICBhbk9iamVjdChyZXN1bHQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciByZWdFeHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcblxudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIpIHtcbiAgdmFyIGZsYWdzID0gUi5mbGFncztcbiAgcmV0dXJuIGZsYWdzID09PSB1bmRlZmluZWQgJiYgISgnZmxhZ3MnIGluIFJlZ0V4cFByb3RvdHlwZSkgJiYgIWhhc093bihSLCAnZmxhZ3MnKSAmJiBpc1Byb3RvdHlwZU9mKFJlZ0V4cFByb3RvdHlwZSwgUilcbiAgICA/IGNhbGwocmVnRXhwRmxhZ3MsIFIpIDogZmxhZ3M7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuUFJPUEVSO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0UmVnRXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWdldC1mbGFncycpO1xuXG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xudmFyIG5hdGl2ZVRvU3RyaW5nID0gUmVnRXhwUHJvdG90eXBlW1RPX1NUUklOR107XG5cbnZhciBOT1RfR0VORVJJQyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZVRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPT0gJy9hL2InOyB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG52YXIgSU5DT1JSRUNUX05BTUUgPSBQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiBuYXRpdmVUb1N0cmluZy5uYW1lICE9PSBUT19TVFJJTkc7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKE5PVF9HRU5FUklDIHx8IElOQ09SUkVDVF9OQU1FKSB7XG4gIGRlZmluZUJ1aWx0SW4oUmVnRXhwUHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIHBhdHRlcm4gPSAkdG9TdHJpbmcoUi5zb3VyY2UpO1xuICAgIHZhciBmbGFncyA9ICR0b1N0cmluZyhnZXRSZWdFeHBGbGFncyhSKSk7XG4gICAgcmV0dXJuICcvJyArIHBhdHRlcm4gKyAnLycgKyBmbGFncztcbiAgfSwgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICB2YXIgcG9zaXRpb24gPSB0b0ludGVnZXJPckluZmluaXR5KHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IGNoYXJBdChTLCBwb3NpdGlvbilcbiAgICAgICAgICA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IHN0cmluZ1NsaWNlKFMsIHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpXG4gICAgICAgICAgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmNvZGVwb2ludGF0XG4gIGNvZGVBdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuYXRgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG4gIGNoYXJBdDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG5cbnZhciBTVFJJTkdfSVRFUkFUT1IgPSAnU3RyaW5nIEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNUUklOR19JVEVSQVRPUik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG5kZWZpbmVJdGVyYXRvcihTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogU1RSSU5HX0lURVJBVE9SLFxuICAgIHN0cmluZzogdG9TdHJpbmcoaXRlcmF0ZWQpLFxuICAgIGluZGV4OiAwXG4gIH0pO1xuLy8gYCVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVzdHJpbmdpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHN0cmluZyA9IHN0YXRlLnN0cmluZztcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXg7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IHN0cmluZy5sZW5ndGgpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIHBvaW50ID0gY2hhckF0KHN0cmluZywgaW5kZXgpO1xuICBzdGF0ZS5pbmRleCArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHBvaW50LCBmYWxzZSk7XG59KTtcbiIsICIoZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcIkRvY3VtZW50RnJhZ21lbnRcImluIHNlbGYmJmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgRG9jdW1lbnRGcmFnbWVudCwhMH1jYXRjaChuKXtyZXR1cm4hMX19KClcbikpIHtcbi8vIERvY3VtZW50RnJhZ21lbnRcbihmdW5jdGlvbiAoZ2xvYmFsKSB7XG5cdGdsb2JhbC5Eb2N1bWVudEZyYWdtZW50ID0gZnVuY3Rpb24gRG9jdW1lbnRGcmFnbWVudCgpIHtcblx0XHRyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXHR9O1xuXG5cdHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0Z2xvYmFsLkRvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShmcmFnbWVudC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUpXG59KHNlbGYpKTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgIlxuLy8gX211dGF0aW9uXG52YXIgX211dGF0aW9uID0gKGZ1bmN0aW9uICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXG5cdGZ1bmN0aW9uIGlzTm9kZShvYmplY3QpIHtcblx0XHQvLyBET00sIExldmVsMlxuXHRcdGlmICh0eXBlb2YgTm9kZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIE5vZGU7XG5cdFx0fVxuXHRcdC8vIE9sZGVyIGJyb3dzZXJzLCBjaGVjayBpZiBpdCBsb29rcyBsaWtlIGEgTm9kZSBpbnN0YW5jZSlcblx0XHRyZXR1cm4gb2JqZWN0ICYmXG5cdFx0XHR0eXBlb2Ygb2JqZWN0ID09PSBcIm9iamVjdFwiICYmXG5cdFx0XHRvYmplY3Qubm9kZU5hbWUgJiZcblx0XHRcdG9iamVjdC5ub2RlVHlwZSA+PSAxICYmXG5cdFx0XHRvYmplY3Qubm9kZVR5cGUgPD0gMTI7XG5cdH1cblxuXHQvLyBodHRwOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jbXV0YXRpb24tbWV0aG9kLW1hY3JvXG5cdHJldHVybiBmdW5jdGlvbiBtdXRhdGlvbihub2Rlcykge1xuXHRcdGlmIChub2Rlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHJldHVybiBpc05vZGUobm9kZXNbMF0pID8gbm9kZXNbMF0gOiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShub2Rlc1swXSArICcnKTtcblx0XHR9XG5cblx0XHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0ZnJhZ21lbnQuYXBwZW5kQ2hpbGQoaXNOb2RlKG5vZGVzW2ldKSA/IG5vZGVzW2ldIDogZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobm9kZXNbaV0gKyAnJykpO1xuXG5cdFx0fVxuXHRcdHJldHVybiBmcmFnbWVudDtcblx0fTtcbn0oKSk7XG5leHBvcnQgZGVmYXVsdCBfbXV0YXRpb247XG4iLCAiaW1wb3J0IF9tdXRhdGlvbiBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fbXV0YXRpb25cIjtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiRG9jdW1lbnRGcmFnbWVudFwiaW4gc2VsZiYmXCJhcHBlbmRcImluIERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlXG4pKSB7XG4vLyBEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5hcHBlbmRcbi8qIGdsb2JhbCBfbXV0YXRpb24gKi9cbihmdW5jdGlvbiAoZ2xvYmFsKSB7XG5cdHZhciBmcmFnbWVudFByb3RvID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblx0ZnJhZ21lbnRQcm90by5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQoKSB7XG5cdFx0dGhpcy5hcHBlbmRDaGlsZChfbXV0YXRpb24oYXJndW1lbnRzKSk7XG5cdH07XG5cblx0Z2xvYmFsLkRvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZCgpIHtcblx0XHR0aGlzLmFwcGVuZENoaWxkKF9tdXRhdGlvbihhcmd1bWVudHMpKTtcblx0fTtcbn0oc2VsZikpO1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiaW1wb3J0IF9tdXRhdGlvbiBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fbXV0YXRpb25cIjtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiRWxlbWVudFwiaW4gc2VsZiYmXCJhcHBlbmRcImluIEVsZW1lbnQucHJvdG90eXBlXG4pKSB7XG4vLyBFbGVtZW50LnByb3RvdHlwZS5hcHBlbmRcbi8qIGdsb2JhbCBfbXV0YXRpb24gKi9cbkRvY3VtZW50LnByb3RvdHlwZS5hcHBlbmQgPSBFbGVtZW50LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQoKSB7XG5cdHRoaXMuYXBwZW5kQ2hpbGQoX211dGF0aW9uKGFyZ3VtZW50cykpO1xufTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgIlxuLy8gX0RPTVRva2VuTGlzdFxuLypcbkNvcHlyaWdodCAoYykgMjAxNiwgSm9obiBHYXJkbmVyXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbiovXG52YXIgX0RPTVRva2VuTGlzdCA9IChmdW5jdGlvbigpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXHR2YXIgZHBTdXBwb3J0ID0gdHJ1ZTtcblx0dmFyIGRlZmluZUdldHRlciA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWUsIGZuLCBjb25maWd1cmFibGUpIHtcblx0XHRpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KVxuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgbmFtZSwge1xuXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlID09PSBkcFN1cHBvcnQgPyB0cnVlIDogISFjb25maWd1cmFibGUsXG5cdFx0XHRcdGdldDogZm5cblx0XHRcdH0pO1xuXG5cdFx0ZWxzZSBvYmplY3QuX19kZWZpbmVHZXR0ZXJfXyhuYW1lLCBmbik7XG5cdH07XG5cblx0LyoqIEVuc3VyZSB0aGUgYnJvd3NlciBhbGxvd3MgT2JqZWN0LmRlZmluZVByb3BlcnR5IHRvIGJlIHVzZWQgb24gbmF0aXZlIEphdmFTY3JpcHQgb2JqZWN0cy4gKi9cblx0dHJ5IHtcblx0XHRkZWZpbmVHZXR0ZXIoe30sIFwic3VwcG9ydFwiKTtcblx0fVxuXHRjYXRjaCAoZSkge1xuXHRcdGRwU3VwcG9ydCA9IGZhbHNlO1xuXHR9XG5cblxuXHR2YXIgX0RPTVRva2VuTGlzdCA9IGZ1bmN0aW9uIChlbCwgcHJvcCkge1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblx0XHR2YXIgdG9rZW5zID0gW107XG5cdFx0dmFyIHRva2VuTWFwID0ge307XG5cdFx0dmFyIGxlbmd0aCA9IDA7XG5cdFx0dmFyIG1heExlbmd0aCA9IDA7XG5cdFx0dmFyIGFkZEluZGV4R2V0dGVyID0gZnVuY3Rpb24gKGkpIHtcblx0XHRcdGRlZmluZUdldHRlcih0aGF0LCBpLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHByZW9wKCk7XG5cdFx0XHRcdHJldHVybiB0b2tlbnNbaV07XG5cdFx0XHR9LCBmYWxzZSk7XG5cblx0XHR9O1xuXHRcdHZhciByZWluZGV4ID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHQvKiogRGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGFycmF5LWxpa2UgYWNjZXNzIHRvIHRoZSB0b2tlbkxpc3QncyBjb250ZW50cy4gKi9cblx0XHRcdGlmIChsZW5ndGggPj0gbWF4TGVuZ3RoKVxuXHRcdFx0XHRmb3IgKDsgbWF4TGVuZ3RoIDwgbGVuZ3RoOyArK21heExlbmd0aCkge1xuXHRcdFx0XHRcdGFkZEluZGV4R2V0dGVyKG1heExlbmd0aCk7XG5cdFx0XHRcdH1cblx0XHR9O1xuXG5cdFx0LyoqIEhlbHBlciBmdW5jdGlvbiBjYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggY2xhc3MgbWV0aG9kLiBJbnRlcm5hbCB1c2Ugb25seS4gKi9cblx0XHR2YXIgcHJlb3AgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHR2YXIgZXJyb3I7XG5cdFx0XHR2YXIgaTtcblx0XHRcdHZhciBhcmdzID0gYXJndW1lbnRzO1xuXHRcdFx0dmFyIHJTcGFjZSA9IC9cXHMrLztcblxuXHRcdFx0LyoqIFZhbGlkYXRlIHRoZSB0b2tlbi9zIHBhc3NlZCB0byBhbiBpbnN0YW5jZSBtZXRob2QsIGlmIGFueS4gKi9cblx0XHRcdGlmIChhcmdzLmxlbmd0aClcblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpXG5cdFx0XHRcdFx0aWYgKHJTcGFjZS50ZXN0KGFyZ3NbaV0pKSB7XG5cdFx0XHRcdFx0XHRlcnJvciA9IG5ldyBTeW50YXhFcnJvcignU3RyaW5nIFwiJyArIGFyZ3NbaV0gKyAnXCIgJyArIFwiY29udGFpbnNcIiArICcgYW4gaW52YWxpZCBjaGFyYWN0ZXInKTtcblx0XHRcdFx0XHRcdGVycm9yLmNvZGUgPSA1O1xuXHRcdFx0XHRcdFx0ZXJyb3IubmFtZSA9IFwiSW52YWxpZENoYXJhY3RlckVycm9yXCI7XG5cdFx0XHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdFx0XHR9XG5cblxuXHRcdFx0LyoqIFNwbGl0IHRoZSBuZXcgdmFsdWUgYXBhcnQgYnkgd2hpdGVzcGFjZSovXG5cdFx0XHRpZiAodHlwZW9mIGVsW3Byb3BdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdHRva2VucyA9IChcIlwiICsgZWxbcHJvcF0uYmFzZVZhbCkucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgXCJcIikuc3BsaXQoclNwYWNlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRva2VucyA9IChcIlwiICsgZWxbcHJvcF0pLnJlcGxhY2UoL15cXHMrfFxccyskL2csIFwiXCIpLnNwbGl0KHJTcGFjZSk7XG5cdFx0XHR9XG5cblx0XHRcdC8qKiBBdm9pZCB0cmVhdGluZyBibGFuayBzdHJpbmdzIGFzIHNpbmdsZS1pdGVtIHRva2VuIGxpc3RzICovXG5cdFx0XHRpZiAoXCJcIiA9PT0gdG9rZW5zWzBdKSB0b2tlbnMgPSBbXTtcblxuXHRcdFx0LyoqIFJlcG9wdWxhdGUgdGhlIGludGVybmFsIHRva2VuIGxpc3RzICovXG5cdFx0XHR0b2tlbk1hcCA9IHt9O1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7ICsraSlcblx0XHRcdFx0dG9rZW5NYXBbdG9rZW5zW2ldXSA9IHRydWU7XG5cdFx0XHRsZW5ndGggPSB0b2tlbnMubGVuZ3RoO1xuXHRcdFx0cmVpbmRleCgpO1xuXHRcdH07XG5cblx0XHQvKiogUG9wdWxhdGUgb3VyIGludGVybmFsIHRva2VuIGxpc3QgaWYgdGhlIHRhcmdldGVkIGF0dHJpYnV0ZSBvZiB0aGUgc3ViamVjdCBlbGVtZW50IGlzbid0IGVtcHR5LiAqL1xuXHRcdHByZW9wKCk7XG5cblx0XHQvKiogUmV0dXJuIHRoZSBudW1iZXIgb2YgdG9rZW5zIGluIHRoZSB1bmRlcmx5aW5nIHN0cmluZy4gUmVhZC1vbmx5LiAqL1xuXHRcdGRlZmluZUdldHRlcih0aGF0LCBcImxlbmd0aFwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRwcmVvcCgpO1xuXHRcdFx0cmV0dXJuIGxlbmd0aDtcblx0XHR9KTtcblxuXHRcdC8qKiBPdmVycmlkZSB0aGUgZGVmYXVsdCB0b1N0cmluZy90b0xvY2FsZVN0cmluZyBtZXRob2RzIHRvIHJldHVybiBhIHNwYWNlLWRlbGltaXRlZCBsaXN0IG9mIHRva2VucyB3aGVuIHR5cGVjYXN0LiAqL1xuXHRcdHRoYXQudG9Mb2NhbGVTdHJpbmcgPVxuXHRcdFx0dGhhdC50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cHJlb3AoKTtcblx0XHRcdFx0cmV0dXJuIHRva2Vucy5qb2luKFwiIFwiKTtcblx0XHRcdH07XG5cblx0XHR0aGF0Lml0ZW0gPSBmdW5jdGlvbiAoaWR4KSB7XG5cdFx0XHRwcmVvcCgpO1xuXHRcdFx0cmV0dXJuIHRva2Vuc1tpZHhdO1xuXHRcdH07XG5cblx0XHR0aGF0LmNvbnRhaW5zID0gZnVuY3Rpb24gKHRva2VuKSB7XG5cdFx0XHRwcmVvcCgpO1xuXHRcdFx0cmV0dXJuICEhdG9rZW5NYXBbdG9rZW5dO1xuXHRcdH07XG5cblx0XHR0aGF0LmFkZCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHByZW9wLmFwcGx5KHRoYXQsIGFyZ3MgPSBhcmd1bWVudHMpO1xuXG5cdFx0XHRmb3IgKHZhciBhcmdzLCB0b2tlbiwgaSA9IDAsIGwgPSBhcmdzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuXHRcdFx0XHR0b2tlbiA9IGFyZ3NbaV07XG5cdFx0XHRcdGlmICghdG9rZW5NYXBbdG9rZW5dKSB7XG5cdFx0XHRcdFx0dG9rZW5zLnB1c2godG9rZW4pO1xuXHRcdFx0XHRcdHRva2VuTWFwW3Rva2VuXSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0LyoqIFVwZGF0ZSB0aGUgdGFyZ2V0ZWQgYXR0cmlidXRlIG9mIHRoZSBhdHRhY2hlZCBlbGVtZW50IGlmIHRoZSB0b2tlbiBsaXN0J3MgY2hhbmdlZC4gKi9cblx0XHRcdGlmIChsZW5ndGggIT09IHRva2Vucy5sZW5ndGgpIHtcblx0XHRcdFx0bGVuZ3RoID0gdG9rZW5zLmxlbmd0aCA+Pj4gMDtcblx0XHRcdFx0aWYgKHR5cGVvZiBlbFtwcm9wXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdGVsW3Byb3BdLmJhc2VWYWwgPSB0b2tlbnMuam9pbihcIiBcIik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxbcHJvcF0gPSB0b2tlbnMuam9pbihcIiBcIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVpbmRleCgpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGF0LnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHByZW9wLmFwcGx5KHRoYXQsIGFyZ3MgPSBhcmd1bWVudHMpO1xuXG5cdFx0XHQvKiogQnVpbGQgYSBoYXNoIG9mIHRva2VuIG5hbWVzIHRvIGNvbXBhcmUgYWdhaW5zdCB3aGVuIHJlY29sbGVjdGluZyBvdXIgdG9rZW4gbGlzdC4gKi9cblx0XHRcdGZvciAodmFyIGFyZ3MsIGlnbm9yZSA9IHt9LCBpID0gMCwgdCA9IFtdOyBpIDwgYXJncy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZ25vcmVbYXJnc1tpXV0gPSB0cnVlO1xuXHRcdFx0XHRkZWxldGUgdG9rZW5NYXBbYXJnc1tpXV07XG5cdFx0XHR9XG5cblx0XHRcdC8qKiBSdW4gdGhyb3VnaCBvdXIgdG9rZW5zIGxpc3QgYW5kIHJlYXNzaWduIG9ubHkgdGhvc2UgdGhhdCBhcmVuJ3QgZGVmaW5lZCBpbiB0aGUgaGFzaCBkZWNsYXJlZCBhYm92ZS4gKi9cblx0XHRcdGZvciAoaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyArK2kpXG5cdFx0XHRcdGlmICghaWdub3JlW3Rva2Vuc1tpXV0pIHQucHVzaCh0b2tlbnNbaV0pO1xuXG5cdFx0XHR0b2tlbnMgPSB0O1xuXHRcdFx0bGVuZ3RoID0gdC5sZW5ndGggPj4+IDA7XG5cblx0XHRcdC8qKiBVcGRhdGUgdGhlIHRhcmdldGVkIGF0dHJpYnV0ZSBvZiB0aGUgYXR0YWNoZWQgZWxlbWVudC4gKi9cblx0XHRcdGlmICh0eXBlb2YgZWxbcHJvcF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0ZWxbcHJvcF0uYmFzZVZhbCA9IHRva2Vucy5qb2luKFwiIFwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsW3Byb3BdID0gdG9rZW5zLmpvaW4oXCIgXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmVpbmRleCgpO1xuXHRcdH07XG5cblx0XHR0aGF0LnRvZ2dsZSA9IGZ1bmN0aW9uICh0b2tlbiwgZm9yY2UpIHtcblx0XHRcdHByZW9wLmFwcGx5KHRoYXQsIFt0b2tlbl0pO1xuXG5cdFx0XHQvKiogVG9rZW4gc3RhdGUncyBiZWluZyBmb3JjZWQuICovXG5cdFx0XHRpZiAodW5kZWZpbmVkICE9PSBmb3JjZSkge1xuXHRcdFx0XHRpZiAoZm9yY2UpIHtcblx0XHRcdFx0XHR0aGF0LmFkZCh0b2tlbik7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhhdC5yZW1vdmUodG9rZW4pO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvKiogVG9rZW4gYWxyZWFkeSBleGlzdHMgaW4gdG9rZW5MaXN0LiBSZW1vdmUgaXQsIGFuZCByZXR1cm4gRkFMU0UuICovXG5cdFx0XHRpZiAodG9rZW5NYXBbdG9rZW5dKSB7XG5cdFx0XHRcdHRoYXQucmVtb3ZlKHRva2VuKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiogT3RoZXJ3aXNlLCBhZGQgdGhlIHRva2VuIGFuZCByZXR1cm4gVFJVRS4gKi9cblx0XHRcdHRoYXQuYWRkKHRva2VuKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH07XG5cblx0XHR0aGF0LmZvckVhY2ggPSBBcnJheS5wcm90b3R5cGUuZm9yRWFjaDtcblxuXHRcdHJldHVybiB0aGF0O1xuXHR9O1xuXG5cdHJldHVybiBfRE9NVG9rZW5MaXN0O1xufSgpKTtcbmV4cG9ydCBkZWZhdWx0IF9ET01Ub2tlbkxpc3Q7XG4iLCAiaW1wb3J0IF9ET01Ub2tlbkxpc3QgZnJvbSBcIkBtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX0RPTVRva2VuTGlzdFwiO1xuKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJET01Ub2tlbkxpc3RcImluIHNlbGYmJmZ1bmN0aW9uKGUpe3JldHVybiEoXCJjbGFzc0xpc3RcImluIGUpfHwhZS5jbGFzc0xpc3QudG9nZ2xlKFwieFwiLCExKSYmIWUuY2xhc3NOYW1lfShkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwieFwiKSlcbikpIHtcbi8vIERPTVRva2VuTGlzdFxuLyogZ2xvYmFsIF9ET01Ub2tlbkxpc3QgKi9cbihmdW5jdGlvbiAoZ2xvYmFsKSB7XG5cdHZhciBuYXRpdmVJbXBsID0gXCJET01Ub2tlbkxpc3RcIiBpbiBnbG9iYWwgJiYgZ2xvYmFsLkRPTVRva2VuTGlzdDtcblxuXHRpZiAoXG5cdFx0XHQhbmF0aXZlSW1wbCB8fFxuXHRcdFx0KFxuXHRcdFx0XHQhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyAmJlxuXHRcdFx0XHQhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnc3ZnJykgJiZcblx0XHRcdFx0IShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInN2Z1wiKS5jbGFzc0xpc3QgaW5zdGFuY2VvZiBET01Ub2tlbkxpc3QpXG5cdFx0XHQpXG5cdFx0KSB7XG5cdFx0Z2xvYmFsLkRPTVRva2VuTGlzdCA9IF9ET01Ub2tlbkxpc3Q7XG5cdH1cblxuXHQvLyBBZGQgc2Vjb25kIGFyZ3VtZW50IHRvIG5hdGl2ZSBET01Ub2tlbkxpc3QudG9nZ2xlKCkgaWYgbmVjZXNzYXJ5XG5cdChmdW5jdGlvbiAoKSB7XG5cdFx0dmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cdFx0aWYgKCEoJ2NsYXNzTGlzdCcgaW4gZSkpIHJldHVybjtcblx0XHRlLmNsYXNzTGlzdC50b2dnbGUoJ3gnLCBmYWxzZSk7XG5cdFx0aWYgKCFlLmNsYXNzTGlzdC5jb250YWlucygneCcpKSByZXR1cm47XG5cdFx0ZS5jbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIHRvZ2dsZSh0b2tlbiAvKiwgZm9yY2UqLykge1xuXHRcdFx0dmFyIGZvcmNlID0gYXJndW1lbnRzWzFdO1xuXHRcdFx0aWYgKGZvcmNlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dmFyIGFkZCA9ICF0aGlzLmNvbnRhaW5zKHRva2VuKTtcblx0XHRcdFx0dGhpc1thZGQgPyAnYWRkJyA6ICdyZW1vdmUnXSh0b2tlbik7XG5cdFx0XHRcdHJldHVybiBhZGQ7XG5cdFx0XHR9XG5cdFx0XHRmb3JjZSA9ICEhZm9yY2U7XG5cdFx0XHR0aGlzW2ZvcmNlID8gJ2FkZCcgOiAncmVtb3ZlJ10odG9rZW4pO1xuXHRcdFx0cmV0dXJuIGZvcmNlO1xuXHRcdH07XG5cdH0oKSk7XG5cblx0Ly8gQWRkIG11bHRpcGxlIGFyZ3VtZW50cyB0byBuYXRpdmUgRE9NVG9rZW5MaXN0LmFkZCgpIGlmIG5lY2Vzc2FyeVxuXHQoZnVuY3Rpb24gKCkge1xuXHRcdHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRcdGlmICghKCdjbGFzc0xpc3QnIGluIGUpKSByZXR1cm47XG5cdFx0ZS5jbGFzc0xpc3QuYWRkKCdhJywgJ2InKTtcblx0XHRpZiAoZS5jbGFzc0xpc3QuY29udGFpbnMoJ2InKSkgcmV0dXJuO1xuXHRcdHZhciBuYXRpdmUgPSBlLmNsYXNzTGlzdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuYWRkO1xuXHRcdGUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHR2YXIgYXJncyA9IGFyZ3VtZW50cztcblx0XHRcdHZhciBsID0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdG5hdGl2ZS5jYWxsKHRoaXMsIGFyZ3NbaV0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0oKSk7XG5cblx0Ly8gQWRkIG11bHRpcGxlIGFyZ3VtZW50cyB0byBuYXRpdmUgRE9NVG9rZW5MaXN0LnJlbW92ZSgpIGlmIG5lY2Vzc2FyeVxuXHQoZnVuY3Rpb24gKCkge1xuXHRcdHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRcdGlmICghKCdjbGFzc0xpc3QnIGluIGUpKSByZXR1cm47XG5cdFx0ZS5jbGFzc0xpc3QuYWRkKCdhJyk7XG5cdFx0ZS5jbGFzc0xpc3QuYWRkKCdiJyk7XG5cdFx0ZS5jbGFzc0xpc3QucmVtb3ZlKCdhJywgJ2InKTtcblx0XHRpZiAoIWUuY2xhc3NMaXN0LmNvbnRhaW5zKCdiJykpIHJldHVybjtcblx0XHR2YXIgbmF0aXZlID0gZS5jbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlLnJlbW92ZTtcblx0XHRlLmNsYXNzTGlzdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdFx0XHR2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRuYXRpdmUuY2FsbCh0aGlzLCBhcmdzW2ldKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9KCkpO1xuXG59KHNlbGYpKTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgImltcG9ydCBfRE9NVG9rZW5MaXN0IGZyb20gXCJAbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19ET01Ub2tlbkxpc3RcIjtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwicmVwbGFjZVwiaW4oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKS5jbGFzc0xpc3R8fHt9KVxuKSkge1xuLy8gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZXBsYWNlXG4oZnVuY3Rpb24gKCkge1xuXHR2YXIgY2xhc3NMaXN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuY2xhc3NMaXN0O1xuXHRjbGFzc0xpc3QgJiYgKGNsYXNzTGlzdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUucmVwbGFjZSA9XG5cdFx0ZnVuY3Rpb24gKHRva2VuLCBuZXdUb2tlbikge1xuXHRcdFx0dmFyIHRva2VuU3RyaW5nID0gJycgKyB0b2tlbiwgbmV3VG9rZW5TdHJpbmcgPSAnJyArIG5ld1Rva2VuO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRuZXcgRE9NRXhjZXB0aW9uKCk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHNlbGYuRE9NRXhjZXB0aW9uID0gZnVuY3Rpb24gKG1lc3NhZ2UsIG5hbWUpIHtcblx0XHRcdFx0XHRpZiAoISh0aGlzIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uKSkgcmV0dXJuIG5ldyBET01FeGNlcHRpb24obWVzc2FnZSwgbmFtZSk7XG5cdFx0XHRcdFx0dGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcblx0XHRcdFx0XHR0aGlzLm5hbWUgPSBuYW1lO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHZhciBlcnJvcjtcblx0XHRcdGlmICghKHRva2VuU3RyaW5nICYmIG5ld1Rva2VuU3RyaW5nKSkgZXJyb3IgPSAnU3ludGF4RXJyb3InO1xuXHRcdFx0aWYgKCFlcnJvciAmJiAoL1xccy8udGVzdCh0b2tlblN0cmluZykgfHwgL1xccy8udGVzdChuZXdUb2tlblN0cmluZykpKSBlcnJvciA9ICdJbnZhbGlkQ2hhcmFjdGVyRXJyb3InO1xuXHRcdFx0aWYgKGVycm9yKSB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdET01Ub2tlbkxpc3QucmVwbGFjZSB3YXMgcHJvdmlkZWQgdG9rZW5zIFxcJycgKyB0b2tlblN0cmluZyArICdcXCcgYW5kIFxcJycgKyBuZXdUb2tlblN0cmluZyArICdcXCcnLCBlcnJvcik7XG5cblx0XHRcdGlmICghdGhpcy5jb250YWlucyh0b2tlblN0cmluZykpIHJldHVybiBmYWxzZTtcblxuXHRcdFx0Ly8gdG9rZW5zVG9iZU1vdmVkIGFyZSBcInRva2VuU3RyaW5nXCIgYW5kIGFsbCB0b2tlbnMgZm91bmQgYWZ0ZXIgaXRcblx0XHRcdHZhciB0b2tlbnNUb2JlTW92ZWQgPSBbXTtcblx0XHRcdHZhciBuZXdUb2tlbkZvdW5kID0gZmFsc2U7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyArK2kpXG5cdFx0XHRcdGlmIChuZXdUb2tlblN0cmluZyA9PT0gdGhpcy5pdGVtKGkpKSBuZXdUb2tlbkZvdW5kID0gdHJ1ZTtcblx0XHRcdFx0ZWxzZSBpZiAodG9rZW5TdHJpbmcgPT09IHRoaXMuaXRlbShpKSkgYnJlYWs7XG5cdFx0XHRmb3IgKDsgaSA8IHRoaXMubGVuZ3RoOyArK2kpIHRva2Vuc1RvYmVNb3ZlZC5wdXNoKHRoaXMuaXRlbShpKSk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgdG9rZW5zVG9iZU1vdmVkLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRcdHZhciBjdXJyZW50VG9rZW4gPSB0b2tlbnNUb2JlTW92ZWRbaV07XG5cdFx0XHRcdGN1cnJlbnRUb2tlbiAhPT0gbmV3VG9rZW5TdHJpbmcgJiYgdGhpcy5yZW1vdmUoY3VycmVudFRva2VuKTtcblx0XHRcdFx0Y3VycmVudFRva2VuICE9PSB0b2tlblN0cmluZyAmJiB0aGlzLmFkZChjdXJyZW50VG9rZW4pO1xuXHRcdFx0XHRjdXJyZW50VG9rZW4gPT09IHRva2VuU3RyaW5nICYmICFuZXdUb2tlbkZvdW5kICYmICh0aGlzLnJlbW92ZShuZXdUb2tlblN0cmluZyksIHRoaXMuYWRkKG5ld1Rva2VuU3RyaW5nKSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdCk7XG59KSgpO1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmluZDtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xuXG52YXIgRklORCA9ICdmaW5kJztcbnZhciBTS0lQU19IT0xFUyA9IHRydWU7XG5cbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZpbmQgLS0gdGVzdGluZ1xuaWYgKEZJTkQgaW4gW10pIEFycmF5KDEpW0ZJTkRdKGZ1bmN0aW9uICgpIHsgU0tJUFNfSE9MRVMgPSBmYWxzZTsgfSk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTS0lQU19IT0xFUyB9LCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcyhGSU5EKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmNsdWRlcztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIEZGOTkrIGJ1Z1xudmFyIEJST0tFTl9PTl9TUEFSU0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtaW5jbHVkZXMgLS0gZGV0ZWN0aW9uXG4gIHJldHVybiAhQXJyYXkoMSkuaW5jbHVkZXMoKTtcbn0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCUk9LRU5fT05fU1BBUlNFIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2luY2x1ZGVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09IGRlZmluZVByb3BlcnR5LCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0eTogZGVmaW5lUHJvcGVydHlcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBGT1JDRUQgPSAhREVTQ1JJUFRPUlMgfHwgZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JbmRleGVkT2JqZWN0KGl0KSwga2V5KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJykuZjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuICFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcygxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogZ2V0T3duUHJvcGVydHlOYW1lc1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVHZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUdldFByb3RvdHlwZU9mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUywgc2hhbTogIUNPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiB9LCB7XG4gIGdldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiBuYXRpdmVHZXRQcm90b3R5cGVPZih0b09iamVjdChpdCkpO1xuICB9XG59KTtcblxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyB7fS50b1N0cmluZyA6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKCFUT19TVFJJTkdfVEFHX1NVUFBPUlQpIHtcbiAgZGVmaW5lQnVpbHRJbihPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCB0b1N0cmluZywgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG4vLyBgSXNSZWdFeHBgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc3JlZ2V4cFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY2xhc3NvZihpdCkgPT09ICdSZWdFeHAnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzUmVnRXhwKGl0KSkge1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiVGhlIG1ldGhvZCBkb2Vzbid0IGFjY2VwdCByZWd1bGFyIGV4cHJlc3Npb25zXCIpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHZhciByZWdleHAgPSAvLi87XG4gIHRyeSB7XG4gICAgJy8uLydbTUVUSE9EX05BTUVdKHJlZ2V4cCk7XG4gIH0gY2F0Y2ggKGVycm9yMSkge1xuICAgIHRyeSB7XG4gICAgICByZWdleHBbTUFUQ0hdID0gZmFsc2U7XG4gICAgICByZXR1cm4gJy8uLydbTUVUSE9EX05BTUVdKHJlZ2V4cCk7XG4gICAgfSBjYXRjaCAoZXJyb3IyKSB7IC8qIGVtcHR5ICovIH1cbiAgfSByZXR1cm4gZmFsc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIG5vdEFSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm90LWEtcmVnZXhwJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBjb3JyZWN0SXNSZWdFeHBMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYycpO1xuXG52YXIgc3RyaW5nSW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXNcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhY29ycmVjdElzUmVnRXhwTG9naWMoJ2luY2x1ZGVzJykgfSwge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgcmV0dXJuICEhfnN0cmluZ0luZGV4T2YoXG4gICAgICB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKSxcbiAgICAgIHRvU3RyaW5nKG5vdEFSZWdFeHAoc2VhcmNoU3RyaW5nKSksXG4gICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZFxuICAgICk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgbW92ZWQgdG8gZW50cnkgcG9pbnRzXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBGT1JDRUQsIFNIQU0pIHtcbiAgdmFyIFNZTUJPTCA9IHdlbGxLbm93blN5bWJvbChLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG5cbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBXZSBjYW4ndCB1c2UgcmVhbCByZWdleCBoZXJlIHNpbmNlIGl0IGNhdXNlcyBkZW9wdGltaXphdGlvblxuICAgICAgLy8gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gaW4gVjhcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMDZcbiAgICAgIHJlID0ge307XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgICByZS5mbGFncyA9ICcnO1xuICAgICAgcmVbU1lNQk9MXSA9IC8uL1tTWU1CT0xdO1xuICAgIH1cblxuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBleGVjQ2FsbGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIEZPUkNFRFxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIG1ldGhvZHMgPSBleGVjKFNZTUJPTCwgJydbS0VZXSwgZnVuY3Rpb24gKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICB2YXIgJGV4ZWMgPSByZWdleHAuZXhlYztcbiAgICAgIGlmICgkZXhlYyA9PT0gcmVnZXhwRXhlYyB8fCAkZXhlYyA9PT0gUmVnRXhwUHJvdG90eXBlLmV4ZWMpIHtcbiAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IGNhbGwobmF0aXZlUmVnRXhwTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogY2FsbChuYXRpdmVNZXRob2QsIHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW4oU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBtZXRob2RzWzBdKTtcbiAgICBkZWZpbmVCdWlsdEluKFJlZ0V4cFByb3RvdHlwZSwgU1lNQk9MLCBtZXRob2RzWzFdKTtcbiAgfVxuXG4gIGlmIChTSEFNKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUmVnRXhwUHJvdG90eXBlW1NZTUJPTF0sICdzaGFtJywgdHJ1ZSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcblxuLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBjaGFyQXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFMgPSAvXFwkKFskJidgXXxcXGR7MSwyfXw8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCYnYF18XFxkezEsMn0pL2c7XG5cbi8vIGBHZXRTdWJzdGl0dXRpb25gIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gIHZhciBtID0gY2FwdHVyZXMubGVuZ3RoO1xuICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbmFtZWRDYXB0dXJlcyA9IHRvT2JqZWN0KG5hbWVkQ2FwdHVyZXMpO1xuICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgfVxuICByZXR1cm4gcmVwbGFjZShyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgIHZhciBjYXB0dXJlO1xuICAgIHN3aXRjaCAoY2hhckF0KGNoLCAwKSkge1xuICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICBjYXNlICdgJzogcmV0dXJuIHN0cmluZ1NsaWNlKHN0ciwgMCwgcG9zaXRpb24pO1xuICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0cmluZ1NsaWNlKHN0ciwgdGFpbFBvcyk7XG4gICAgICBjYXNlICc8JzpcbiAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbc3RyaW5nU2xpY2UoY2gsIDEsIC0xKV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2hhckF0KGNoLCAxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoYXJBdChjaCwgMSk7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICB9XG4gICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgfVxuICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmIChpc0NhbGxhYmxlKGV4ZWMpKSB7XG4gICAgdmFyIHJlc3VsdCA9IGNhbGwoZXhlYywgUiwgUyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkgYW5PYmplY3QocmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpID09PSAnUmVnRXhwJykgcmV0dXJuIGNhbGwocmVnZXhwRXhlYywgUiwgUyk7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBnZXRTdWJzdGl0dXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXN1YnN0aXR1dGlvbicpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFJFUExBQ0UgPSB3ZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcbnZhciBzdHJpbmdJbmRleE9mID0gdW5jdXJyeVRoaXMoJycuaW5kZXhPZik7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gSUUgPD0gMTEgcmVwbGFjZXMgJDAgd2l0aCB0aGUgd2hvbGUgbWF0Y2gsIGFzIGlmIGl0IHdhcyAkJlxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjAyNDY2Ni9nZXR0aW5nLWllLXRvLXJlcGxhY2UtYS1yZWdleC13aXRoLXRoZS1saXRlcmFsLXN0cmluZy0wXG52YXIgUkVQTEFDRV9LRUVQU18kMCA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvcHJlZmVyLWVzY2FwZS1yZXBsYWNlbWVudC1kb2xsYXItY2hhciAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gJ2EnLnJlcGxhY2UoLy4vLCAnJDAnKSA9PT0gJyQwJztcbn0pKCk7XG5cbi8vIFNhZmFyaSA8PSAxMy4wLjMoPykgc3Vic3RpdHV0ZXMgbnRoIGNhcHR1cmUgd2hlcmUgbj5tIHdpdGggYW4gZW1wdHkgc3RyaW5nXG52YXIgUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPSAoZnVuY3Rpb24gKCkge1xuICBpZiAoLy4vW1JFUExBQ0VdKSB7XG4gICAgcmV0dXJuIC8uL1tSRVBMQUNFXSgnYScsICckMCcpID09PSAnJztcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59KSgpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tdXNlbGVzcy1kb2xsYXItcmVwbGFjZW1lbnRzIC0tIGZhbHNlIHBvc2l0aXZlXG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygncmVwbGFjZScsIGZ1bmN0aW9uIChfLCBuYXRpdmVSZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIFVOU0FGRV9TVUJTVElUVVRFID0gUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPyAnJCcgOiAnJDAnO1xuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGxhY2VcbiAgICBmdW5jdGlvbiByZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciByZXBsYWNlciA9IGlzTnVsbE9yVW5kZWZpbmVkKHNlYXJjaFZhbHVlKSA/IHVuZGVmaW5lZCA6IGdldE1ldGhvZChzZWFyY2hWYWx1ZSwgUkVQTEFDRSk7XG4gICAgICByZXR1cm4gcmVwbGFjZXJcbiAgICAgICAgPyBjYWxsKHJlcGxhY2VyLCBzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6IGNhbGwobmF0aXZlUmVwbGFjZSwgdG9TdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChzdHJpbmcsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QodGhpcyk7XG4gICAgICB2YXIgUyA9IHRvU3RyaW5nKHN0cmluZyk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PSAnc3RyaW5nJyAmJlxuICAgICAgICBzdHJpbmdJbmRleE9mKHJlcGxhY2VWYWx1ZSwgVU5TQUZFX1NVQlNUSVRVVEUpID09PSAtMSAmJlxuICAgICAgICBzdHJpbmdJbmRleE9mKHJlcGxhY2VWYWx1ZSwgJyQ8JykgPT09IC0xXG4gICAgICApIHtcbiAgICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVSZXBsYWNlLCByeCwgUywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgZnVuY3Rpb25hbFJlcGxhY2UgPSBpc0NhbGxhYmxlKHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSB0b1N0cmluZyhyZXBsYWNlVmFsdWUpO1xuXG4gICAgICB2YXIgZ2xvYmFsID0gcnguZ2xvYmFsO1xuICAgICAgdmFyIGZ1bGxVbmljb2RlO1xuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuXG4gICAgICAgIHB1c2gocmVzdWx0cywgcmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuXG4gICAgICAgIHZhciBtYXRjaFN0ciA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcblxuICAgICAgICB2YXIgbWF0Y2hlZCA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyT3JJbmZpbml0eShyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgdmFyIHJlcGxhY2VtZW50O1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIHB1c2goY2FwdHVyZXMsIG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IGNvbmNhdChbbWF0Y2hlZF0sIGNhcHR1cmVzLCBwb3NpdGlvbiwgUyk7XG4gICAgICAgICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkgcHVzaChyZXBsYWNlckFyZ3MsIG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gdG9TdHJpbmcoYXBwbHkocmVwbGFjZVZhbHVlLCB1bmRlZmluZWQsIHJlcGxhY2VyQXJncykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIFMsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRSZXN1bHQgKz0gc3RyaW5nU2xpY2UoUywgbmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIHN0cmluZ1NsaWNlKFMsIG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xufSwgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTIHx8ICFSRVBMQUNFX0tFRVBTXyQwIHx8IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFKTtcbiIsICJ7XG5cdFwibG9naW5FbGVtZW50U2VsZWN0b3JcIjogXCJhOmhhcyguYWpheGxvZ2luLW1vdW50LXBvaW50KSwjcHQtbG9naW4+YSwudmVjdG9yLXVzZXItbWVudS1sb2dpbj5hLCN1c2VyLXRvb2xzPmFbaHJlZio9XFxcIlNwZWNpYWxcXFwiXSwubWFpbnBhZ2UtdG9wLW1lbnU+bGk6bnRoLWNoaWxkKDIpIGFcIixcblx0XCJ2ZXJzaW9uXCI6IFwiNC4wXCJcbn1cbiIsICJpbXBvcnQgKiBhcyBPUFRJT05TIGZyb20gJy4vb3B0aW9ucy5qc29uJztcbmltcG9ydCB7Y2hlY2tBMTF5Q29uZmlybUtleSwgZ2V0Qm9keX0gZnJvbSAnZXh0LmdhZGdldC5VdGlsJztcbmltcG9ydCB7V0dfVVNFUl9OQU1FfSBmcm9tICcuL21vZHVsZXMvY29uc3RhbnQnO1xuaW1wb3J0IHthZGRMaXN0ZW5lcn0gZnJvbSAnLi9tb2R1bGVzL2FkZExpc3RlbmVyJztcbmltcG9ydCB7YWpheExvZ2lufSBmcm9tICcuL21vZHVsZXMvY29yZSc7XG5pbXBvcnQge3dpbmRvd01hbmFnZXJ9IGZyb20gJy4vbW9kdWxlcy9pbml0V2luZG93TWFuYWdlcic7XG5cbnZvaWQgZ2V0Qm9keSgpLnRoZW4oZnVuY3Rpb24gaW5pdEF1dG9Mb2dpbigkYm9keTogSlF1ZXJ5PEhUTUxCb2R5RWxlbWVudD4pOiB2b2lkIHtcblx0aWYgKFdHX1VTRVJfTkFNRSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0ICRsb2dpbkVsZW1lbnQ6IEpRdWVyeTxIVE1MQW5jaG9yRWxlbWVudD4gPSAkYm9keS5maW5kPEhUTUxBbmNob3JFbGVtZW50PihPUFRJT05TLmxvZ2luRWxlbWVudFNlbGVjdG9yKTtcblx0aWYgKCEkbG9naW5FbGVtZW50Lmxlbmd0aCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHdpbmRvd01hbmFnZXIuJGVsZW1lbnQuYXBwZW5kVG8oJGJvZHkpO1xuXG5cdGNvbnN0IGZha2VUb2FzdGlmeUluc3RhbmNlOiBUb2FzdGlmeUluc3RhbmNlID0ge1xuXHRcdGhpZGVUb2FzdDogKCkgPT4ge30sXG5cdH07XG5cblx0Y29uc3QgZXZlbnRMaXN0ZW5lciA9IChldmVudDogSlF1ZXJ5LkNsaWNrRXZlbnQgfCBKUXVlcnkuS2V5RG93bkV2ZW50KTogdm9pZCA9PiB7XG5cdFx0aWYgKCFjaGVja0ExMXlDb25maXJtS2V5KGV2ZW50KSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0YWpheExvZ2luKGZha2VUb2FzdGlmeUluc3RhbmNlKTtcblx0fTtcblx0YWRkTGlzdGVuZXIoJGxvZ2luRWxlbWVudCwgZXZlbnRMaXN0ZW5lcik7XG59KTtcbiIsICJjb25zdCBXR19VU0VSX05BTUU6IHN0cmluZyB8IG51bGwgPSBtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJyk7XG5cbmV4cG9ydCB7V0dfVVNFUl9OQU1FfTtcbiIsICJpbXBvcnQge2ZpbHRlckFsdGVyZWRDbGlja3N9IGZyb20gJ2V4dC5nYWRnZXQuRmlsdGVyQWx0ZXJlZENsaWNrcyc7XG5cbmNvbnN0IGFkZExpc3RlbmVyID0gKFxuXHQkZWxlbWVudDogSlF1ZXJ5LFxuXHRldmVudExpc3RlbmVyOiAoZXZlbnQ6IEpRdWVyeS5DbGlja0V2ZW50IHwgSlF1ZXJ5LktleURvd25FdmVudCkgPT4gdm9pZFxuKTogdm9pZCA9PiB7XG5cdCRlbGVtZW50Lm9uKFxuXHRcdCdjbGljaycsXG5cdFx0ZmlsdGVyQWx0ZXJlZENsaWNrcygoZXZlbnQ6IEpRdWVyeS5DbGlja0V2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRldmVudExpc3RlbmVyKGV2ZW50KTtcblx0XHR9KVxuXHQpO1xuXHQkZWxlbWVudC5vbigna2V5ZG93bicsIGV2ZW50TGlzdGVuZXIpO1xufTtcblxuZXhwb3J0IHthZGRMaXN0ZW5lcn07XG4iLCAiaW1wb3J0ICogYXMgT1BUSU9OUyBmcm9tICcuLi9vcHRpb25zLmpzb24nO1xuaW1wb3J0IHtpbml0TXdBcGl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5cbnR5cGUgQ2xpZW50TG9naW5QYXJhbXMgPSBBcGlDbGllbnRMb2dpblBhcmFtcyAmIHtcblx0bG9naW5jb250aW51ZT86IGJvb2xlYW47XG5cdGxvZ2ludG9rZW46IHN0cmluZztcblx0bG9naW5yZXR1cm51cmw/OiBzdHJpbmc7XG5cdHVzZXJuYW1lPzogc3RyaW5nO1xuXHRwYXNzd29yZD86IHN0cmluZztcblx0cmVtZW1iZXJNZT86IGJvb2xlYW47XG5cdHJldHlwZT86IHN0cmluZztcblx0T0FUSFRva2VuPzogc3RyaW5nO1xufTtcblxuY29uc3QgYXBpOiBtdy5BcGkgPSBpbml0TXdBcGkoYEFqYXhMb2dpbi8ke09QVElPTlMudmVyc2lvbn1gKTtcblxuZXhwb3J0IHt0eXBlIENsaWVudExvZ2luUGFyYW1zLCBhcGl9O1xuIiwgImltcG9ydCB7dHlwZSBDbGllbnRMb2dpblBhcmFtcywgYXBpfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAnZXh0LmdhZGdldC5SZWFjdCc7XG5pbXBvcnQge2NoZWNrVmFsaWR9IGZyb20gJy4vdXRpbC9jaGVja1ZhbGlkJztcbmltcG9ydCB7Z2VuZXJhdGVFbGVtZW50c30gZnJvbSAnLi91dGlsL2dlbmVyYXRlRWxlbWVudHMnO1xuaW1wb3J0IHtnZXRNZXNzYWdlfSBmcm9tICcuL2kxOG4nO1xuaW1wb3J0IHtvb3VpUHJvbXB0fSBmcm9tICcuL3V0aWwvb291aVByb21wdCc7XG5pbXBvcnQge3F1ZXJ5TG9naW5Ub2tlbn0gZnJvbSAnLi91dGlsL3F1ZXJ5TG9naW5Ub2tlbic7XG5pbXBvcnQge3JlZGlyZWN0T3JpZ2luTG9naW5QYWdlfSBmcm9tICcuL3V0aWwvcmVkaXJlY3RPcmlnaW5Mb2dpblBhZ2UnO1xuaW1wb3J0IHtyZW1vdmVXaW5kb3dSZXNpemVIYW5kbGVyfSBmcm9tICcuL3V0aWwvcmVtb3ZlV2luZG93UmVzaXplSGFuZGxlcic7XG5pbXBvcnQge3Nob3dFcnJvcn0gZnJvbSAnLi91dGlsL3Nob3dFcnJvcic7XG5pbXBvcnQge3RvYXN0aWZ5fSBmcm9tICdleHQuZ2FkZ2V0LlRvYXN0aWZ5JztcbmltcG9ydCB7d2luZG93TWFuYWdlcn0gZnJvbSAnLi9pbml0V2luZG93TWFuYWdlcic7XG5cbmNvbnN0IGFqYXhMb2dpbiA9ICh0b2FzdGlmeUluc3RhbmNlOiBUb2FzdGlmeUluc3RhbmNlLCBpc0FncmVlVG9zOiBib29sZWFuID0gZmFsc2UpOiB2b2lkID0+IHtcblx0Y29uc3Qge1xuXHRcdCRhZ3JlZVRvcyxcblx0XHQkZm9yZ290UGFzc3dvcmQsXG5cdFx0JGlucHV0Qm94LFxuXHRcdCRyZW1lbWJlck1lLFxuXHRcdCR0b3NMYWJlbCxcblx0XHRhZ3JlZVRvc0NoZWNrYm94LFxuXHRcdGtlZXBMb2dpbkNoZWNrYm94LFxuXHRcdG1lc3NhZ2VEaWFsb2csXG5cdFx0bmFtZUlucHV0LFxuXHRcdHB3ZElucHV0LFxuXHR9ID0gZ2VuZXJhdGVFbGVtZW50cyhpc0FncmVlVG9zKTtcblxuXHRsZXQgbG9naW5Ub2tlbjogc3RyaW5nID0gJyc7XG5cdGNvbnN0IGxvZ2luID0gYXN5bmMgKHtsb2dpbkNvbnRpbnVlID0gZmFsc2UsIHJldHlwZVBhc3N3b3JkID0gZmFsc2V9ID0ge30pOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKCFsb2dpbkNvbnRpbnVlKSB7XG5cdFx0XHRcdCh7bG9naW5Ub2tlbiwgdG9hc3RpZnlJbnN0YW5jZX0gPSBhd2FpdCBxdWVyeUxvZ2luVG9rZW4odG9hc3RpZnlJbnN0YW5jZSkpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBwYXJhbXM6IENsaWVudExvZ2luUGFyYW1zID0ge1xuXHRcdFx0XHRhY3Rpb246ICdjbGllbnRsb2dpbicsXG5cdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0XHRmb3JtYXR2ZXJzaW9uOiAnMicsXG5cdFx0XHRcdGxvZ2ludG9rZW46IGxvZ2luVG9rZW4sXG5cdFx0XHRcdGxvZ2lucmV0dXJudXJsOiBsb2NhdGlvbi5ocmVmLFxuXHRcdFx0XHR1c2VybmFtZTogbmFtZUlucHV0LmdldFZhbHVlKCksXG5cdFx0XHRcdHBhc3N3b3JkOiBwd2RJbnB1dC5nZXRWYWx1ZSgpLFxuXHRcdFx0fTtcblx0XHRcdGlmIChrZWVwTG9naW5DaGVja2JveC5pc1NlbGVjdGVkKCkpIHtcblx0XHRcdFx0cGFyYW1zLnJlbWVtYmVyTWUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGxvZ2luQ29udGludWUgfHwgcmV0eXBlUGFzc3dvcmQpIHtcblx0XHRcdFx0YXdhaXQgd2luZG93TWFuYWdlci5jbGVhcldpbmRvd3MoKTtcblx0XHRcdFx0ZGVsZXRlIHBhcmFtcy5sb2dpbnJldHVybnVybDtcblx0XHRcdFx0ZGVsZXRlIHBhcmFtcy51c2VybmFtZTtcblx0XHRcdFx0ZGVsZXRlIHBhcmFtcy5wYXNzd29yZDtcblx0XHRcdFx0cGFyYW1zLmxvZ2luY29udGludWUgPSB0cnVlO1xuXG5cdFx0XHRcdGNvbnN0IHZhbHVlOiBzdHJpbmcgfCBudWxsID0gYXdhaXQgb291aVByb21wdChyZXR5cGVQYXNzd29yZCk7XG5cblx0XHRcdFx0dG9hc3RpZnlJbnN0YW5jZS5oaWRlVG9hc3QoKTtcblxuXHRcdFx0XHRpZiAodmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0XHR0b2FzdGlmeShcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGV4dDogZ2V0TWVzc2FnZSgnTG9naW4gY2FuY2VsbGVkJyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J2luZm8nXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR2b2lkIHdpbmRvd01hbmFnZXIuY2xlYXJXaW5kb3dzKCk7XG5cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0gZWxzZSBpZiAodmFsdWUgPT09ICcnKSB7XG5cdFx0XHRcdFx0aWYgKHJldHlwZVBhc3N3b3JkKSB7XG5cdFx0XHRcdFx0XHR0b2FzdGlmeUluc3RhbmNlID0gdG9hc3RpZnkoXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBnZXRNZXNzYWdlKCdFbXB0eVBhc3N3b3JkJyksXG5cdFx0XHRcdFx0XHRcdFx0ZHVyYXRpb246IC0xLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHQnd2FybmluZydcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR2b2lkIGxvZ2luKHtcblx0XHRcdFx0XHRcdFx0cmV0eXBlUGFzc3dvcmQ6IHRydWUsXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dG9hc3RpZnlJbnN0YW5jZSA9IHRvYXN0aWZ5KFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogZ2V0TWVzc2FnZSgnRW1wdHkyRkEnKSxcblx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogLTEsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdCd3YXJuaW5nJ1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHZvaWQgbG9naW4oe1xuXHRcdFx0XHRcdFx0XHRsb2dpbkNvbnRpbnVlOiB0cnVlLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHJldHlwZVBhc3N3b3JkKSB7XG5cdFx0XHRcdFx0cGFyYW1zLnBhc3N3b3JkID0gdmFsdWU7XG5cdFx0XHRcdFx0cGFyYW1zLnJldHlwZSA9IHZhbHVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhcmFtcy5PQVRIVG9rZW4gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0b2FzdGlmeUluc3RhbmNlLmhpZGVUb2FzdCgpO1xuXHRcdFx0dG9hc3RpZnlJbnN0YW5jZSA9IHRvYXN0aWZ5KFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGV4dDogZ2V0TWVzc2FnZSgnTG9nZ2luZyBpbicpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnaW5mbydcblx0XHRcdCk7XG5cblx0XHRcdGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IGFwaS5wb3N0KHBhcmFtcykpIGFzIHtcblx0XHRcdFx0Y2xpZW50bG9naW46IHtcblx0XHRcdFx0XHRzdGF0dXM/OiBzdHJpbmc7XG5cdFx0XHRcdFx0bWVzc2FnZWNvZGU/OiBzdHJpbmc7XG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXG5cdFx0XHR0b2FzdGlmeUluc3RhbmNlLmhpZGVUb2FzdCgpO1xuXG5cdFx0XHRpZiAocmVzcG9uc2VbJ2NsaWVudGxvZ2luJ10/LnN0YXR1cyA9PT0gJ1BBU1MnKSB7XG5cdFx0XHRcdHRvYXN0aWZ5KFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHRleHQ6IGdldE1lc3NhZ2UoJ0xvZ2luIHN1Y2NlZWQnKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCdzdWNjZXNzJ1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRsb2NhdGlvbi5yZWxvYWQoKTtcblx0XHRcdH0gZWxzZSBpZiAocmVzcG9uc2VbJ2NsaWVudGxvZ2luJ10/Lm1lc3NhZ2Vjb2RlKSB7XG5cdFx0XHRcdGNvbnN0IHttZXNzYWdlY29kZX0gPSByZXNwb25zZVsnY2xpZW50bG9naW4nXTtcblx0XHRcdFx0c3dpdGNoIChtZXNzYWdlY29kZSkge1xuXHRcdFx0XHRcdGNhc2UgJ2xvZ2luLXRocm90dGxlZCc6XG5cdFx0XHRcdFx0XHR0b2FzdGlmeUluc3RhbmNlID0gdG9hc3RpZnkoXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBnZXRNZXNzYWdlKCdUb29GcmVxdWVudCcpLFxuXHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAtMSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0J2Vycm9yJ1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ29hdGhhdXRoLWF1dGgtdWknOlxuXHRcdFx0XHRcdFx0dm9pZCBsb2dpbih7XG5cdFx0XHRcdFx0XHRcdGxvZ2luQ29udGludWU6IHRydWUsXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ29hdGhhdXRoLWxvZ2luLWZhaWxlZCc6XG5cdFx0XHRcdFx0XHR0b2FzdGlmeUluc3RhbmNlID0gdG9hc3RpZnkoXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBnZXRNZXNzYWdlKCdJbnZhbGlkIDJGQSB2ZXJpZmljYXRpb24gY29kZScpLFxuXHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAtMSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0J3dhcm5pbmcnXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0dm9pZCBsb2dpbih7XG5cdFx0XHRcdFx0XHRcdGxvZ2luQ29udGludWU6IHRydWUsXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3Jlc2V0cGFzcy10ZW1wLWVtYWlsZWQnOlxuXHRcdFx0XHRcdFx0dG9hc3RpZnlJbnN0YW5jZSA9IHRvYXN0aWZ5KFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogZ2V0TWVzc2FnZSgnTmV3IHBhc3N3b3JkIGlzIHJlcXVpcmVkJyksXG5cdFx0XHRcdFx0XHRcdFx0ZHVyYXRpb246IC0xLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHQnd2FybmluZydcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR2b2lkIGxvZ2luKHtcblx0XHRcdFx0XHRcdFx0cmV0eXBlUGFzc3dvcmQ6IHRydWUsXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3dyb25ncGFzc3dvcmQnOlxuXHRcdFx0XHRcdFx0dG9hc3RpZnlJbnN0YW5jZSA9IHRvYXN0aWZ5KFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogZ2V0TWVzc2FnZSgnSW52YWxpZCB1c2VydWFtZSBvciBwYXNzd29yZCcpLFxuXHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAtMSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0J3dhcm5pbmcnXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0YXdhaXQgd2luZG93TWFuYWdlci5jbGVhcldpbmRvd3MoKTtcblx0XHRcdFx0XHRcdGFqYXhMb2dpbih0b2FzdGlmeUluc3RhbmNlKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHR0b2FzdGlmeShcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHRleHQ6IGdldE1lc3NhZ2UoJ1VuZXhwZWN0ZWQgQVBJIHJlc3BvbnNlJykucmVwbGFjZSgnJDEnLCBtZXNzYWdlY29kZSksXG5cdFx0XHRcdFx0XHRcdFx0Y2xvc2U6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0ZHVyYXRpb246IC0xLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHQnZXJyb3InXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0dm9pZCByZWRpcmVjdE9yaWdpbkxvZ2luUGFnZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdHNob3dFcnJvcihlcnJvciwgdG9hc3RpZnlJbnN0YW5jZSk7XG5cdFx0XHR2b2lkIHJlZGlyZWN0T3JpZ2luTG9naW5QYWdlKCk7XG5cdFx0fVxuXHR9O1xuXG5cdGNvbnN0IGNoZWNrID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdGNvbnN0IHtcblx0XHRcdGlzVmFsaWQsXG5cdFx0XHRpc0FncmVlVG9zOiBsYXN0SXNBZ3JlZVRvcyxcblx0XHRcdHRvYXN0aWZ5SW5zdGFuY2U6IGxhc3RUb2FzdGlmeUluc3RhbmNlLFxuXHRcdH0gPSBhd2FpdCBjaGVja1ZhbGlkKFthZ3JlZVRvc0NoZWNrYm94LCBuYW1lSW5wdXQsIHB3ZElucHV0XSwgdG9hc3RpZnlJbnN0YW5jZSk7XG5cblx0XHR0b2FzdGlmeUluc3RhbmNlID0gbGFzdFRvYXN0aWZ5SW5zdGFuY2U7XG5cblx0XHRpZiAoaXNWYWxpZCkge1xuXHRcdFx0dm9pZCBsb2dpbigpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhamF4TG9naW4odG9hc3RpZnlJbnN0YW5jZSwgbGFzdElzQWdyZWVUb3MpO1xuXHRcdH1cblx0fTtcblxuXHRwd2RJbnB1dC5vbignZW50ZXInLCAoKTogdm9pZCA9PiB7XG5cdFx0dm9pZCBjaGVjaygpO1xuXHR9KTtcblx0bWVzc2FnZURpYWxvZy5nZXRBY3Rpb25Qcm9jZXNzID0gKGFjdGlvbik6IE9PLnVpLlByb2Nlc3MgPT5cblx0XHRuZXcgT08udWkuUHJvY2VzcygoKTogdm9pZCA9PiB7XG5cdFx0XHRpZiAoYWN0aW9uID09PSAnbG9naW4nKSB7XG5cdFx0XHRcdHZvaWQgY2hlY2soKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRvYXN0aWZ5SW5zdGFuY2UuaGlkZVRvYXN0KCk7XG5cdFx0XHRcdHZvaWQgd2luZG93TWFuYWdlci5jbGVhcldpbmRvd3MoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHR3aW5kb3dNYW5hZ2VyLmFkZFdpbmRvd3MoW21lc3NhZ2VEaWFsb2ddKTtcblx0dm9pZCB3aW5kb3dNYW5hZ2VyLm9wZW5XaW5kb3cobWVzc2FnZURpYWxvZywge1xuXHRcdGFjdGlvbnM6IFtcblx0XHRcdHtcblx0XHRcdFx0YWN0aW9uOiAnbG9naW4nLFxuXHRcdFx0XHRmbGFnczogWydwcmltYXJ5JywgJ3Byb2dyZXNzaXZlJ10sXG5cdFx0XHRcdGxhYmVsOiAkKDxiPntnZXRNZXNzYWdlKCdMb2dpbicpfTwvYj4pLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0YWN0aW9uOiAnY2FuY2VsJyxcblx0XHRcdFx0ZmxhZ3M6IFsnc2FmZScsICdjbG9zZSddLFxuXHRcdFx0XHRsYWJlbDogJCg8Yj57Z2V0TWVzc2FnZSgnQ2FuY2VsJyl9PC9iPiksXG5cdFx0XHR9LFxuXHRcdF0sXG5cdFx0bWVzc2FnZTogJChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwib28tdWktd2luZG93LWZvb3RcIj57WyRpbnB1dEJveCwgJGZvcmdvdFBhc3N3b3JkLCAkcmVtZW1iZXJNZSwgJGFncmVlVG9zLCAkdG9zTGFiZWxdfTwvZGl2PlxuXHRcdCksXG5cdFx0dGl0bGU6ICQoPGIgY2xhc3NOYW1lPVwib28tdWktd2luZG93LWhlYWRcIj57Z2V0TWVzc2FnZSgnTG9naW4nKX08L2I+KSxcblx0XHRzaXplOiAnc21hbGwnLFxuXHR9KTtcblx0cmVtb3ZlV2luZG93UmVzaXplSGFuZGxlcigpO1xufTtcblxuZXhwb3J0IHthamF4TG9naW59O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tICdleHQuZ2FkZ2V0LlJlYWN0JztcbmltcG9ydCB7Z2V0TWVzc2FnZX0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQge29vdWlDb25maXJtfSBmcm9tICcuL29vdWlDb25maXJtJztcbmltcG9ydCB7dG9hc3RpZnl9IGZyb20gJ2V4dC5nYWRnZXQuVG9hc3RpZnknO1xuaW1wb3J0IHt3aW5kb3dNYW5hZ2VyfSBmcm9tICcuLi9pbml0V2luZG93TWFuYWdlcic7XG5cbmNvbnN0IGNoZWNrVmFsaWQgPSBhc3luYyAoXG5cdFthZ3JlZVRvc0NoZWNrYm94LCBuYW1lSW5wdXQsIHB3ZElucHV0XTogW09PLnVpLkNoZWNrYm94SW5wdXRXaWRnZXQsIE9PLnVpLlRleHRJbnB1dFdpZGdldCwgT08udWkuVGV4dElucHV0V2lkZ2V0XSxcblx0dG9hc3RpZnlJbnN0YW5jZTogVG9hc3RpZnlJbnN0YW5jZVxuKTogUHJvbWlzZTx7XG5cdGlzQWdyZWVUb3M6IGJvb2xlYW47XG5cdGlzVmFsaWQ6IGJvb2xlYW47XG5cdHRvYXN0aWZ5SW5zdGFuY2U6IFRvYXN0aWZ5SW5zdGFuY2U7XG59PiA9PiB7XG5cdGxldCBpc0FncmVlVG9zOiBib29sZWFuID0gYWdyZWVUb3NDaGVja2JveC5pc1NlbGVjdGVkKCk7XG5cdGNvbnN0IGlzRmlsbDogYm9vbGVhbiA9ICFbbmFtZUlucHV0LmdldFZhbHVlKCksIHB3ZElucHV0LmdldFZhbHVlKCldLmluY2x1ZGVzKCcnKTtcblxuXHR0b2FzdGlmeUluc3RhbmNlLmhpZGVUb2FzdCgpO1xuXHRhd2FpdCB3aW5kb3dNYW5hZ2VyLmNsZWFyV2luZG93cygpO1xuXG5cdGlmICghaXNBZ3JlZVRvcykge1xuXHRcdGlzQWdyZWVUb3MgPSBhd2FpdCBvb3VpQ29uZmlybSh7XG5cdFx0XHRtZXNzYWdlOiAkKDxzcGFuIGlubmVySFRNTD17Z2V0TWVzc2FnZSgnRG91YmxlQ2hlY2tBZ3JlZWRPck5vdCcpfSAvPikgYXMgSlF1ZXJ5LFxuXHRcdFx0YWN0aW9uczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6ICQoPGI+e2dldE1lc3NhZ2UoJ0NhbmNlbCcpfTwvYj4pLFxuXHRcdFx0XHRcdGFjdGlvbjogJ2NhbmNlbCcsXG5cdFx0XHRcdFx0ZmxhZ3M6IFsnc2FmZScsICdjbG9zZSddLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6ICQoPGI+e2dldE1lc3NhZ2UoJ0kgYWdyZWUnKX08L2I+KSxcblx0XHRcdFx0XHRhY3Rpb246ICdhY2NlcHQnLFxuXHRcdFx0XHRcdGZsYWdzOiBbJ3ByaW1hcnknLCAncHJvZ3Jlc3NpdmUnXSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSk7XG5cblx0XHRpZiAoIWlzQWdyZWVUb3MpIHtcblx0XHRcdHRvYXN0aWZ5SW5zdGFuY2UgPSB0b2FzdGlmeShcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRleHQ6IGdldE1lc3NhZ2UoJ0FncmVlZE9yTm90JyksXG5cdFx0XHRcdFx0ZHVyYXRpb246IC0xLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnaW5mbydcblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCFpc0ZpbGwpIHtcblx0XHR0b2FzdGlmeUluc3RhbmNlID0gdG9hc3RpZnkoXG5cdFx0XHR7XG5cdFx0XHRcdHRleHQ6IGdldE1lc3NhZ2UoJ0VtcHR5VXNlcm5hbWVPclBhc3N3b3JkJyksXG5cdFx0XHRcdGR1cmF0aW9uOiAtMSxcblx0XHRcdH0sXG5cdFx0XHQnaW5mbydcblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgaXNWYWxpZDogYm9vbGVhbiA9IGlzQWdyZWVUb3MgJiYgaXNGaWxsO1xuXG5cdHJldHVybiB7XG5cdFx0aXNBZ3JlZVRvcyxcblx0XHRpc1ZhbGlkLFxuXHRcdHRvYXN0aWZ5SW5zdGFuY2UsXG5cdH07XG59O1xuXG5leHBvcnQge2NoZWNrVmFsaWR9O1xuIiwgImltcG9ydCB7bG9jYWxpemV9IGZyb20gJ2V4dC5nYWRnZXQuaTE4bic7XG5cbmNvbnN0IGdldEkxOG5NZXNzYWdlcyA9ICgpID0+IHtcblx0cmV0dXJuIHtcblx0XHQnNi1kaWdpdCBudW1iZXInOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJzYtZGlnaXQgbnVtYmVyJyxcblx0XHRcdGphOiAnNuahgeOBruaVsOWtlycsXG5cdFx0XHQnemgtaGFucyc6ICc25L2N5pWw5a2XJyxcblx0XHRcdCd6aC1oYW50JzogJzbkvY3mlbjlrZcnLFxuXHRcdH0pLFxuXHRcdENhbmNlbDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdDYW5jZWwnLFxuXHRcdFx0amE6ICfjgq3jg6Pjg7Pjgrvjg6snLFxuXHRcdFx0emg6ICflj5bmtognLFxuXHRcdH0pLFxuXHRcdCdFbnRlciBwYXNzd29yZCc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnRW50ZXIgcGFzc3dvcmQnLFxuXHRcdFx0amE6ICfjg5Hjgrnjg6/jg7zjg4knLFxuXHRcdFx0J3poLWhhbnMnOiAn6K+36L6T5YWl5a+G56CBJyxcblx0XHRcdCd6aC1oYW50JzogJ+iri+i8uOWFpeWvhueivCcsXG5cdFx0fSksXG5cdFx0J0VudGVyIDJGQSB2ZXJpZmljYXRpb24gY29kZSc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnMkZBIHZlcmlmaWNhdGlvbiBjb2RlJyxcblx0XHRcdGphOiAnMkZB6KqN6Ki844Kz44O844OJJyxcblx0XHRcdCd6aC1oYW5zJzogJ+ivt+i+k+WFpTJGQemqjOivgeeggScsXG5cdFx0XHQnemgtaGFudCc6ICfoq4vovLjlhaUyRkHpqZforYnnorwnLFxuXHRcdH0pLFxuXHRcdCdGb3Jnb3QgcGFzc3dvcmQ/JzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdGb3Jnb3QgcGFzc3dvcmQ/Jyxcblx0XHRcdGphOiAn44OR44K544Ov44O844OJ44KS44GK5b+Y44KM44Gn44GZ44GL77yfJyxcblx0XHRcdCd6aC1oYW5zJzogJ+W/mOiusOWvhuegge+8nycsXG5cdFx0XHQnemgtaGFudCc6ICflv5joqJjlr4bnorzvvJ8nLFxuXHRcdH0pLFxuXHRcdCdHZXR0aW5nIGxvZ2luIHRva2VuJzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdHZXR0aW5nIGxvZ2luIHRva2VuJyxcblx0XHRcdGphOiAn44Ot44Kw44Kk44Oz44OI44O844Kv44Oz44KS5Y+W5b6X44GX44Gm44GE44G+44GZJyxcblx0XHRcdCd6aC1oYW5zJzogJ+ato+WcqOiOt+WPlueZu+W9leS7pOeJjCcsXG5cdFx0XHQnemgtaGFudCc6ICfmraPlnKjnjbLlj5bnmbvlhaXmrIrmnZYnLFxuXHRcdH0pLFxuXHRcdCdoZWxwIGZvciBJIGFncmVlIHdpdGggdGhlIHJlbGV2YW50IHRlcm1zJzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdXaGVuIHlvdSBsb2dpbiwgaXQgbWVhbnMgdGhhdCB5b3UgaGF2ZSBjYXJlZnVsbHkgcmVhZCwgZnVsbHkgdW5kZXJzdG9vZCBhbmQgYWdyZWVkIHRvIGNvbXBseSB3aXRoIG91ciA8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9RVzpUT1NcIiB0aXRsZT1cIlRlcm1zIG9mIFNlcnZpY2VcIj5UZXJtcyBvZiBTZXJ2aWNlPC9hPiwgPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvUVc6UElQUFwiIHRpdGxlPVwiUGVyc29uYWwgSW5mb3JtYXRpb24gUHJvdGVjdGlvbiBQb2xpY3lcIj5QZXJzb25hbCBJbmZvcm1hdGlvbiBQcm90ZWN0aW9uIFBvbGljeTwvYT4gYW5kIDxlbT50aGUgPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvUVc6R1RHTFwiIHRpdGxlPVwiQ29tbW9uIFByb2dyYW1cIj5Db21tb24gUHJvZ3JhbTwvYT48L2VtPi4nLFxuXHRcdFx0amE6ICfjg63jgrDjgqTjg7PjgpLjgZnjgovjgajjgIHjgYLjgarjgZ/jga/mnKzjgrXjgqTjg4jjga7jgI48YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9RVzpUT1NcIiB0aXRsZT1cIuWIqeeUqOimj+e0hFwiPuWIqeeUqOimj+e0hDwvYT7jgI/jgI48YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9RVzpQSVBQXCIgdGl0bGU9XCLlgIvkurrmg4XloLHkv53orbfmlrnph51cIj7lgIvkurrmg4XloLHkv53orbfmlrnph508L2E+44CP44COPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvUVc6R1RHTFwiIHRpdGxlPVwi5YWx5ZCM57ax6aCYXCI+5YWx5ZCM57ax6aCYPC9hPuOAj+OCkuWNgeWIhuOBq+eQhuino+OBl+OAgeWQjOaEj+OBl+OBn+OBk+OBqOOBq+OBquOCiuOBvuOBmeOAgicsXG5cdFx0XHQnemgtaGFucyc6XG5cdFx0XHRcdCfnmbvlvZXml7bvvIzljbPku6Pooajmgqjlt7Lku5Tnu4bpmIXor7vjgIHlhYXliIbkuobop6PlubblkIzmhI/pgbXlrojmnKznvZHnq5nnmoTjgIo8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9RVzpUT1NcIiB0aXRsZT1cIueUqOaIt+WNj+iurlwiPueUqOaIt+WNj+iurjwvYT7jgIvjgIHjgIo8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9RVzpQSVBQXCIgdGl0bGU9XCLkuKrkurrkv6Hmga/kv53miqTmlrnpkohcIj7kuKrkurrkv6Hmga/kv53miqTmlrnpkog8L2E+44CL5Y+K44CKPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvUVc6R1RHTFwiIHRpdGxlPVwi5YWx5ZCM57qy6aKGXCI+5YWx5ZCM57qy6aKGPC9hPuOAi+OAgicsXG5cdFx0XHQnemgtaGFudCc6XG5cdFx0XHRcdCfnmbvpjITmmYLvvIzljbPku6Pooajmgqjlt7Lku5TntLDplrHoroDjgIHlhYXliIbkuobop6PkuKblkIzmhI/pgbXlrojmnKzntrLnq5nnmoTjgIo8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9RVzpUT1NcIiB0aXRsZT1cIueUqOaItuWNlOitsFwiPueUqOaItuWNlOitsDwvYT7jgIvjgIHjgIo8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9RVzpQSVBQXCIgdGl0bGU9XCLlgIvkurrkv6Hmga/kv53orbfmlrnph51cIj7lgIvkurrkv6Hmga/kv53orbfmlrnph508L2E+44CL5Y+K44CKPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvUVc6R1RHTFwiIHRpdGxlPVwi5YWx5ZCM57ax6aCYXCI+5YWx5ZCM57ax6aCYPC9hPuOAi+OAgicsXG5cdFx0fSksXG5cdFx0J0kgYWdyZWUnOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0kgYWdyZWUnLFxuXHRcdFx0amE6ICflkIzmhI/jgZnjgosnLFxuXHRcdFx0emg6ICfmiJHlkIzmhI8nLFxuXHRcdH0pLFxuXHRcdCdJIGFncmVlIHdpdGggdGhlIHJlbGV2YW50IHRlcm1zJzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdJIGFncmVlIHdpdGggdGhlIHJlbGV2YW50IHRlcm1zJyxcblx0XHRcdGphOiAn6Zai6YCj44GZ44KL6KaP57SE44KS6Kqt44G/44CB5ZCM5oSPJyxcblx0XHRcdCd6aC1oYW5zJzogJ+aIkeW3sumYheivu+W5tuWQjOaEj+ebuOWFs+adoeasvicsXG5cdFx0XHQnemgtaGFudCc6ICfmiJHlt7LplrLoroDkuKblkIzmhI/nm7jpl5zmop3mrL4nLFxuXHRcdH0pLFxuXHRcdCdJbnZhbGlkIDJGQSB2ZXJpZmljYXRpb24gY29kZSc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnSW52YWxpZCAyRkEgdmVyaWZpY2F0aW9uIGNvZGUnLFxuXHRcdFx0amE6ICcyRkHoqo3oqLzjgrPjg7zjg4njgYzplpPpgZXjgaPjgabjgYTjgb7jgZknLFxuXHRcdFx0J3poLWhhbnMnOiAnMkZB6aqM6K+B56CB6ZSZ6K+vJyxcblx0XHRcdCd6aC1oYW50JzogJzJGQempl+itieeivOmMr+iqpCcsXG5cdFx0fSksXG5cdFx0J0ludmFsaWQgdXNlcnVhbWUgb3IgcGFzc3dvcmQnOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0ludmFsaWQgdXNlcnVhbWUgb3IgcGFzc3dvcmQnLFxuXHRcdFx0amE6ICfliKnnlKjogIXlkI3jgb7jgZ/jga/jg5Hjgrnjg6/jg7zjg4njgYzplpPpgZXjgaPjgabjgYTjgb7jgZknLFxuXHRcdFx0J3poLWNuJzogJ+eUqOaIt+WQjeaIluWvhueggemUmeivrycsXG5cdFx0XHQnemgtaGsnOiAn55So5oi25ZCN56ix5oiW5a+G56K86Yyv6KqkJyxcblx0XHRcdCd6aC10dyc6ICfkvb/nlKjogIXlkI3nqLHmiJblr4bnorzpjK/oqqQnLFxuXHRcdH0pLFxuXHRcdCdLZWVwIG1lIGxvZ2dlZCBpbic6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnS2VlcCBtZSBsb2dnZWQgaW4nLFxuXHRcdFx0amE6ICfjg63jgrDjgqTjg7PnirbmhYvjgpLkv53mjIEnLFxuXHRcdFx0J3poLWhhbnMnOiAn6K6w5L2P5oiR55qE55m75b2V54q25oCBJyxcblx0XHRcdCd6aC1oYW50JzogJ+iomOS9j+aIkeeahOeZu+WFpeeLgOaFiycsXG5cdFx0fSksXG5cdFx0J0xvZ2dpbmcgaW4nOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0xvZ2dpbmcgaW4nLFxuXHRcdFx0amE6ICfjg63jgrDjgqTjg7PjgZfjgabjgYTjgb7jgZknLFxuXHRcdFx0J3poLWhhbnMnOiAn5q2j5Zyo55m75b2VJyxcblx0XHRcdCd6aC1oYW50JzogJ+ato+WcqOeZu+WFpScsXG5cdFx0fSksXG5cdFx0TG9naW46IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnTG9naW4nLFxuXHRcdFx0amE6ICfjg63jgrDjgqTjg7MnLFxuXHRcdFx0J3poLWhhbnMnOiAn55m75b2VJyxcblx0XHRcdCd6aC1oYW50JzogJ+eZu+WFpScsXG5cdFx0fSksXG5cdFx0J0xvZ2luIGNhbmNlbGxlZCc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnTG9naW4gY2FuY2VsbGVkJyxcblx0XHRcdGphOiAn44Ot44Kw44Kk44Oz44Kt44Oj44Oz44K744OrJyxcblx0XHRcdCd6aC1oYW5zJzogJ+eZu+W9leWPlua2iCcsXG5cdFx0XHQnemgtaGFudCc6ICfnmbvlhaXlj5bmtognLFxuXHRcdH0pLFxuXHRcdCdMb2dpbiBzdWNjZWVkJzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdMb2dpbiBzdWNjZWVkJyxcblx0XHRcdGphOiAn44Ot44Kw44Kk44Oz44Gr5oiQ5Yqf44GX44G+44GX44GfJyxcblx0XHRcdCd6aC1oYW5zJzogJ+eZu+W9leaIkOWKnycsXG5cdFx0XHQnemgtaGFudCc6ICfnmbvlhaXmiJDlip8nLFxuXHRcdH0pLFxuXHRcdCdMb2dpbiB0b2tlbiBnZXR0ZWQnOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0xvZ2luIHRva2VuIGdldHRlZCcsXG5cdFx0XHRqYTogJ+ODreOCsOOCpOODs+ODiOODvOOCr+ODs+OBruWPluW+l+OBq+aIkOWKn+OBl+OBvuOBl+OBnycsXG5cdFx0XHQnemgtaGFucyc6ICfojrflj5bnmbvlvZXku6TniYzmiJDlip8nLFxuXHRcdFx0J3poLWhhbnQnOiAn542y5Y+W55m75YWl5qyK5p2W5oiQ5YqfJyxcblx0XHR9KSxcblx0XHQnTmV3IHBhc3N3b3JkJzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdOZXcgcGFzc3dvcmQnLFxuXHRcdFx0amE6ICfmlrDjgZfjgYTjg5Hjgrnjg6/jg7zjg4knLFxuXHRcdFx0J3poLWhhbnMnOiAn5paw5a+G56CBJyxcblx0XHRcdCd6aC1oYW50JzogJ+aWsOWvhueivCcsXG5cdFx0fSksXG5cdFx0J05ldyBwYXNzd29yZCBpcyByZXF1aXJlZCc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnTmV3IHBhc3N3b3JkIGlzIHJlcXVpcmVkJyxcblx0XHRcdGphOiAn5paw44GX44GE44OR44K544Ov44O844OJ44KS6Kit5a6a44GX44Gm44GP44Gg44GV44GEJyxcblx0XHRcdCd6aC1oYW5zJzogJ+mcgOimgeiuvue9ruaWsOWvhueggScsXG5cdFx0XHQnemgtaGFudCc6ICfpnIDopoHoqK3nva7mlrDlr4bnorwnLFxuXHRcdH0pLFxuXHRcdFBhc3N3b3JkOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ1Bhc3N3b3JkJyxcblx0XHRcdGphOiAn44OR44K544Ov44O844OJJyxcblx0XHRcdCd6aC1oYW5zJzogJ+WvhueggScsXG5cdFx0XHQnemgtaGFudCc6ICflr4bnorwnLFxuXHRcdH0pLFxuXHRcdCdSZXNldCBwYXNzd29yZCc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnUmVzZXQgcGFzc3dvcmQnLFxuXHRcdFx0amE6ICfjg5Hjgrnjg6/jg7zjg4njgpLjg6rjgrvjg4Pjg4gnLFxuXHRcdFx0J3poLWhhbnMnOiAn6YeN572u5a+G56CBJyxcblx0XHRcdCd6aC1oYW50JzogJ+mHjeaWsOioreWumuWvhueivCcsXG5cdFx0fSksXG5cdFx0VXNlcm5hbWU6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnVXNlcm5hbWUnLFxuXHRcdFx0amE6ICfliKnnlKjogIXlkI0nLFxuXHRcdFx0J3poLWNuJzogJ+eUqOaIt+WQjScsXG5cdFx0XHQnemgtaGsnOiAn55So5oi25ZCN56ixJyxcblx0XHRcdCd6aC10dyc6ICfkvb/nlKjogIXlkI3nqLEnLFxuXHRcdH0pLFxuXHRcdEFncmVlZE9yTm90OiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ1BsZWFzZSByZWFkIHRoZSByZWxldmFudCB0ZXJtcy4gSWYgeW91IGFncmVlLCBjaGVjayB0aGUgY2hlY2tib3ggdG8gY29uZmlybScsXG5cdFx0XHRqYTogJ+mWoumAo+OBmeOCi+imj+e0hOOCkuOBiuiqreOBv+OBhOOBn+OBoOOBjeOAgeWQjOaEj+OBleOCjOOCi+WgtOWQiOOBr+OAgeODgeOCp+ODg+OCr+ODnOODg+OCr+OCueOBq+ODgeOCp+ODg+OCr+OCkuWFpeOCjOOBpueiuuiqjeOBl+OBpuOBj+OBoOOBleOBhCcsXG5cdFx0XHQnemgtaGFucyc6ICfor7fpmIXor7vnm7jlhbPmnaHmrL7jgILoi6XlkIzmhI/vvIzli77pgInlpI3pgInmoYbku6Xnoa7orqQnLFxuXHRcdFx0J3poLWhhbnQnOiAn6KuL6Zay6K6A55u46Zec5qKd5qy+44CC6Iul5ZCM5oSP77yM5Yu+6YG46KSH6YG45qGG5Lul56K66KqNJyxcblx0XHR9KSxcblx0XHREb3VibGVDaGVja0FncmVlZE9yTm90OiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ1lvdSBoYXZlIGNhcmVmdWxseSByZWFkLCBmdWxseSB1bmRlcnN0b29kIGFuZCBhZ3JlZWQgdG8gY29tcGx5IHdpdGggb3VyIDxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL1FXOlRPU1wiIHRpdGxlPVwiVGVybXMgb2YgU2VydmljZVwiPlRlcm1zIG9mIFNlcnZpY2U8L2E+LCA8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9RVzpQSVBQXCIgdGl0bGU9XCJQZXJzb25hbCBJbmZvcm1hdGlvbiBQcm90ZWN0aW9uIFBvbGljeVwiPlBlcnNvbmFsIEluZm9ybWF0aW9uIFByb3RlY3Rpb24gUG9saWN5PC9hPiBhbmQgPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvUVc6R1RHTFwiIHRpdGxlPVwiQ29tbW9uIFByb2dyYW1cIj5Db21tb24gUHJvZ3JhbTwvYT4uJyxcblx0XHRcdGphOiAn44GC44Gq44Gf44Gv5pys44K144Kk44OI44Gu44COPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvUVc6VE9TXCIgdGl0bGU9XCLliKnnlKjopo/ntIRcIj7liKnnlKjopo/ntIQ8L2E+44CP44COPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvUVc6UElQUFwiIHRpdGxlPVwi5YCL5Lq65oOF5aCx5L+d6K235pa56YedXCI+5YCL5Lq65oOF5aCx5L+d6K235pa56YedPC9hPuOAj+OAjjxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL1FXOkdUR0xcIiB0aXRsZT1cIuWFseWQjOe2semgmFwiPuWFseWQjOe2semgmDwvYT7jgI/jgpLljYHliIbjgavnkIbop6PjgZfjgIHlkIzmhI/jgZfjgZ/jgZPjgajjgavjgarjgorjgb7jgZnjgIInLFxuXHRcdFx0J3poLWhhbnMnOlxuXHRcdFx0XHQn5oKo5bey5LuU57uG6ZiF6K+744CB5YWF5YiG5LqG6Kej5bm25ZCM5oSP6YG15a6I5pys572R56uZ55qE44CKPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvUVc6VE9TXCIgdGl0bGU9XCLnlKjmiLfljY/orq5cIj7nlKjmiLfljY/orq48L2E+44CL44CKPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvUVc6UElQUFwiIHRpdGxlPVwi5Liq5Lq65L+h5oGv5L+d5oqk5pa56ZKIXCI+5Liq5Lq65L+h5oGv5L+d5oqk5pa56ZKIPC9hPuOAi+OAijxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL1FXOkdUR0xcIiB0aXRsZT1cIuWFseWQjOe6sumihlwiPuWFseWQjOe6sumihjwvYT7jgIvjgIInLFxuXHRcdFx0J3poLWhhbnQnOlxuXHRcdFx0XHQn5oKo5bey5LuU57Sw6Zax6K6A44CB5YWF5YiG5LqG6Kej5Lim5ZCM5oSP6YG15a6I5pys57ay56uZ55qE44CKPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvUVc6VE9TXCIgdGl0bGU9XCLnlKjmiLbljZTorbBcIj7nlKjmiLbljZTorbA8L2E+44CL44CKPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvUVc6UElQUFwiIHRpdGxlPVwi5YCL5Lq65L+h5oGv5L+d6K235pa56YedXCI+5YCL5Lq65L+h5oGv5L+d6K235pa56YedPC9hPuOAi+OAijxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL1FXOkdUR0xcIiB0aXRsZT1cIuWFseWQjOe2semgmFwiPuWFseWQjOe2semgmDwvYT7jgIvjgIInLFxuXHRcdH0pLFxuXHRcdEVtcHR5MkZBOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ1RoZSAyRkEgdmVyaWZpY2F0aW9uIGNvZGUgY2Fubm90IGJlIGVtcHR5Jyxcblx0XHRcdGphOiAnMkZB6KqN6Ki844Kz44O844OJ44GM5YWl5Yqb44GV44KM44Gm44GE44G+44Gb44KTJyxcblx0XHRcdCd6aC1oYW5zJzogJzJGQemqjOivgeeggeS4jeiDveS4uuepuicsXG5cdFx0XHQnemgtaGFudCc6ICcyRkHpqZforYnnorzkuI3og73niLLnqbonLFxuXHRcdH0pLFxuXHRcdEVtcHR5UGFzc3dvcmQ6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnVGhlIHBhc3N3b3JkIGNhbm5vdCBiZSBlbXB0eScsXG5cdFx0XHRqYTogJ+ODkeOCueODr+ODvOODieOBjOWFpeWKm+OBleOCjOOBpuOBhOOBvuOBm+OCkycsXG5cdFx0XHQnemgtaGFucyc6ICflr4bnoIHkuI3og73kuLrnqbonLFxuXHRcdFx0J3poLWhhbnQnOiAn5a+G56K85LiN6IO954iy56m6Jyxcblx0XHR9KSxcblx0XHRFbXB0eVVzZXJuYW1lT3JQYXNzd29yZDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdUaGUgdXNlcm5hbWUgb3IgcGFzc3dvcmQgY2Fubm90IGJlIGVtcHR5Jyxcblx0XHRcdGphOiAn5Yip55So6ICF5ZCN44G+44Gf44Gv44OR44K544Ov44O844OJ44GM5YWl5Yqb44GV44KM44Gm44GE44G+44Gb44KTJyxcblx0XHRcdCd6aC1jbic6ICfnlKjmiLflkI3miJblr4bnoIHkuI3og73kuLrnqbonLFxuXHRcdFx0J3poLWhrJzogJ+eUqOaItuWQjeeoseaIluWvhueivOS4jeiDveeIsuepuicsXG5cdFx0XHQnemgtdHcnOiAn5L2/55So6ICF5ZCN56ix5oiW5a+G56K85LiN6IO954iy56m6Jyxcblx0XHR9KSxcblx0XHQnTmV0d29yayBlcnJvcic6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnTmV0d29yayBlcnJvci4gUmVkaXJlY3RpbmcuLi4nLFxuXHRcdFx0amE6ICfjg43jg4Pjg4jjg6/jg7zjgq/jgqjjg6njg7zjgIHjg6rjg4DjgqTjg6zjgq/jg4jkuK0uLi4nLFxuXHRcdFx0J3poLWhhbnMnOiAn572R57uc5byC5bi444CC6YeN5a6a5ZCR5Lit4oCm4oCmJyxcblx0XHRcdCd6aC1oYW50JzogJ+e2sui3r+eVsOW4uOOAgumHjeaWsOWwjuWQkeS4reKApuKApicsXG5cdFx0fSksXG5cdFx0U2VsZWN0ZWRPck5vdDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdJZiBzZWxlY3RlZCwgdGhlIGxvZ2luIHN0YXR1cyB3aWxsIGJlIGtlcHQgZm9yIDYgbW9udGhzLiBJZiBub3Qgc2VsZWN0ZWQsIGl0IHdpbGwgYmUga2VwdCBmb3IgMSBtb250aC4nLFxuXHRcdFx0amE6ICfjg4Hjgqfjg4Pjgq/jgpLlhaXjgozjgovjgajjg63jgrDjgqTjg7PnirbmhYvjgYw244O25pyI6ZaT5L+d5oyB44GV44KM44CB5YWl44KM44Gq44GE5aC05ZCI44GvMeODtuaciOmWk+S/neaMgeOBleOCjOOBvuOBmeOAgicsXG5cdFx0XHQnemgtaGFucyc6ICfli77pgInliJnkv53mjIHnmbvlvZXnirbmgIE25Liq5pyI77yM5LiN5Yu+6YCJ5YiZ5L+d5oyBMeS4quaciOOAgicsXG5cdFx0XHQnemgtaGFudCc6ICfli77pgbjliJnkv53mjIHnmbvlhaXni4DmhYs25YCL5pyI77yM5LiN5Yu+6YG45YmH5L+d5oyBMeWAi+aciOOAgicsXG5cdFx0fSksXG5cdFx0VG9vRnJlcXVlbnQ6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnVGhlIHVzZXIgbG9naW4gaXMgdG9vIGZyZXF1ZW50LCBwbGVhc2UgdHJ5IGFnYWluIGluIGZpdmUgbWludXRlcycsXG5cdFx0XHRqYTogJ+WIqeeUqOiAheOBjOmgu+e5geOBmeOBjuOCi+OBn+OCgeOAgTXliIblvozjgavlho3oqabooYzjgZfjgabjgY/jgaDjgZXjgYQnLFxuXHRcdFx0J3poLWNuJzogJ+eUqOaIt+eZu+W9lei/h+S6jumikee5ge+8jOivt+S6lOWIhumSn+WQjuWGjeivlScsXG5cdFx0XHQnemgtaGsnOiAn55So5oi255m75YWl6YGO5pa86aC757mB77yM6KuL5LqU5YiG6ZCY5b6M5YaN6KmmJyxcblx0XHRcdCd6aC10dyc6ICfkvb/nlKjogIXnmbvlhaXov4fkuo7popHnuYHvvIzor7fkupTliIbpkp/lkI7lho3or5UnLFxuXHRcdH0pLFxuXHRcdCdVbmV4cGVjdGVkIEFQSSByZXNwb25zZSc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnVW5leHBlY3RlZCBBUEkgcmVzcG9uc2U6ICQxLiBSZWRpcmVjdGluZy4uLicsXG5cdFx0XHRqYTogJ+S6iOacn+OBm+OBrEFQSeOBruW/nOetlO+8miQx44CB44Oq44OA44Kk44Os44Kv44OI5LitLi4uJyxcblx0XHRcdCd6aC1oYW5zJzogJ+aEj+WklueahEFQSeWTjeW6lO+8miQx44CC6YeN5a6a5ZCR5Lit4oCm4oCmJyxcblx0XHRcdCd6aC1oYW50JzogJ+aEj+WklueahEFQSemfv+aHie+8miQx44CC6YeN5paw5bCO5ZCR5Lit4oCm4oCmJyxcblx0XHR9KSxcblx0fTtcbn07XG5jb25zdCBpMThuTWVzc2FnZXMgPSBnZXRJMThuTWVzc2FnZXMoKTtcblxuY29uc3QgZ2V0TWVzc2FnZTogR2V0TWVzc2FnZXM8dHlwZW9mIGkxOG5NZXNzYWdlcz4gPSAoa2V5KSA9PiB7XG5cdHJldHVybiBpMThuTWVzc2FnZXNba2V5XSB8fCBrZXk7XG59O1xuXG5leHBvcnQge2dldE1lc3NhZ2V9O1xuIiwgImNvbnN0IGluaXRXaW5kb3dNYW5hZ2VyID0gKCk6IE9PLnVpLldpbmRvd01hbmFnZXIgPT4ge1xuXHRyZXR1cm4gbmV3IE9PLnVpLldpbmRvd01hbmFnZXIoKTtcbn07XG5cbmNvbnN0IHdpbmRvd01hbmFnZXI6IE9PLnVpLldpbmRvd01hbmFnZXIgPSBpbml0V2luZG93TWFuYWdlcigpO1xuXG5leHBvcnQge3dpbmRvd01hbmFnZXJ9O1xuIiwgImltcG9ydCB7d2luZG93TWFuYWdlcn0gZnJvbSAnLi4vaW5pdFdpbmRvd01hbmFnZXInO1xuXG5jb25zdCBvb3VpQ29uZmlybSA9IGFzeW5jIChvcHRpb25zOiBPTy51aS5NZXNzYWdlRGlhbG9nLlNldHVwRGF0YU1hcCkgPT4ge1xuXHRjb25zdCBtZXNzYWdlRGlhbG9nOiBPTy51aS5NZXNzYWdlRGlhbG9nID0gbmV3IE9PLnVpLk1lc3NhZ2VEaWFsb2coKTtcblx0d2luZG93TWFuYWdlci5hZGRXaW5kb3dzKFttZXNzYWdlRGlhbG9nXSk7XG5cblx0Y29uc3QgaW5zdGFuY2U6IE9PLnVpLldpbmRvd0luc3RhbmNlID0gd2luZG93TWFuYWdlci5vcGVuV2luZG93KG1lc3NhZ2VEaWFsb2csIG9wdGlvbnMpO1xuXG5cdGNvbnN0IGRhdGE6IHZvaWQgPSBhd2FpdCBpbnN0YW5jZS5jbG9zZWQ7XG5cdGNvbnN0IF9kYXRhID0gZGF0YSBhcyB7YWN0aW9uOiBzdHJpbmd9IHwgdm9pZDtcblxuXHRyZXR1cm4gISEoX2RhdGE/LmFjdGlvbiA9PT0gJ2FjY2VwdCcpO1xufTtcblxuZXhwb3J0IHtvb3VpQ29uZmlybX07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gJ2V4dC5nYWRnZXQuUmVhY3QnO1xuaW1wb3J0IHtnZXRNZXNzYWdlfSBmcm9tICcuLi9pMThuJztcblxuY29uc3QgZ2VuZXJhdGVFbGVtZW50cyA9IChpc0FncmVlVG9zOiBib29sZWFuKSA9PiB7XG5cdGNvbnN0IG1lc3NhZ2VEaWFsb2c6IE9PLnVpLk1lc3NhZ2VEaWFsb2cgPSBuZXcgT08udWkuTWVzc2FnZURpYWxvZygpO1xuXG5cdGNvbnN0IG5hbWVJbnB1dDogT08udWkuVGV4dElucHV0V2lkZ2V0ID0gbmV3IE9PLnVpLlRleHRJbnB1dFdpZGdldCh7XG5cdFx0aWNvbjogJ3VzZXJBdmF0YXInLFxuXHRcdHBsYWNlaG9sZGVyOiBnZXRNZXNzYWdlKCdVc2VybmFtZScpLFxuXHRcdHZhbGlkYXRlOiAnbm9uLWVtcHR5Jyxcblx0fSk7XG5cblx0Y29uc3QgcHdkSW5wdXQ6IE9PLnVpLlRleHRJbnB1dFdpZGdldCA9IG5ldyBPTy51aS5UZXh0SW5wdXRXaWRnZXQoe1xuXHRcdGljb246ICdrZXknLFxuXHRcdHBsYWNlaG9sZGVyOiBnZXRNZXNzYWdlKCdQYXNzd29yZCcpLFxuXHRcdHR5cGU6ICdwYXNzd29yZCcsXG5cdFx0dmFsaWRhdGU6ICdub24tZW1wdHknLFxuXHR9KTtcblxuXHRjb25zdCBhZ3JlZVRvc0NoZWNrYm94OiBPTy51aS5DaGVja2JveElucHV0V2lkZ2V0ID0gbmV3IE9PLnVpLkNoZWNrYm94SW5wdXRXaWRnZXQoe1xuXHRcdHNlbGVjdGVkOiBpc0FncmVlVG9zLFxuXHR9KTtcblx0Y29uc3QgYWdyZWVUb3NMYXlvdXQ6IE9PLnVpLkZpZWxkTGF5b3V0PE9PLnVpLkNoZWNrYm94SW5wdXRXaWRnZXQ+ID0gbmV3IE9PLnVpLkZpZWxkTGF5b3V0KGFncmVlVG9zQ2hlY2tib3gsIHtcblx0XHRhbGlnbjogJ2lubGluZScsXG5cdFx0bGFiZWw6IGdldE1lc3NhZ2UoJ0kgYWdyZWUgd2l0aCB0aGUgcmVsZXZhbnQgdGVybXMnKSxcblx0fSk7XG5cblx0Y29uc3Qga2VlcExvZ2luQ2hlY2tib3g6IE9PLnVpLkNoZWNrYm94SW5wdXRXaWRnZXQgPSBuZXcgT08udWkuQ2hlY2tib3hJbnB1dFdpZGdldCgpO1xuXHRjb25zdCBrZWVwTG9naW5MYXlvdXQ6IE9PLnVpLkZpZWxkTGF5b3V0PE9PLnVpLkNoZWNrYm94SW5wdXRXaWRnZXQ+ID0gbmV3IE9PLnVpLkZpZWxkTGF5b3V0KGtlZXBMb2dpbkNoZWNrYm94LCB7XG5cdFx0YWxpZ246ICdpbmxpbmUnLFxuXHRcdGhlbHA6IGdldE1lc3NhZ2UoJ1NlbGVjdGVkT3JOb3QnKSxcblx0XHRsYWJlbDogZ2V0TWVzc2FnZSgnS2VlcCBtZSBsb2dnZWQgaW4nKSxcblx0fSk7XG5cblx0Y29uc3QgbGFiZWwgPSAoXG5cdFx0PGxhYmVsXG5cdFx0XHRjbGFzc05hbWU9e1snb28tdWktbGFiZWxXaWRnZXQnLCAnb28tdWktbGFiZWxFbGVtZW50LWxhYmVsJ119XG5cdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRmb250U2l6ZTogJzkwJScsXG5cdFx0XHRcdHRleHRBbGlnbjogJ2p1c3RpZnknLFxuXHRcdFx0fX1cblx0XHQvPlxuXHQpO1xuXHRjb25zdCAkbGFiZWwgPSAkKGxhYmVsKSBhcyBKUXVlcnk7XG5cblx0Y29uc3QgJGFncmVlVG9zOiBKUXVlcnkgPSAkbGFiZWwuY2xvbmUoKS5hcHBlbmQoYWdyZWVUb3NMYXlvdXQuJGVsZW1lbnQpO1xuXHRjb25zdCAkZm9yZ290UGFzc3dvcmQ6IEpRdWVyeSA9ICRsYWJlbFxuXHRcdC5jbG9uZSgpXG5cdFx0LmNzcygnZmxvYXQnLCAncmlnaHQnKVxuXHRcdC5hcHBlbmQoXG5cdFx0XHQ8YSBocmVmPXttdy51dGlsLmdldFVybCgnU3BlY2lhbDpQYXNzd29yZFJlc2V0Jyl9IHRpdGxlPXtnZXRNZXNzYWdlKCdSZXNldCBwYXNzd29yZCcpfT5cblx0XHRcdFx0e2dldE1lc3NhZ2UoJ0ZvcmdvdCBwYXNzd29yZD8nKX1cblx0XHRcdDwvYT5cblx0XHQpO1xuXHRjb25zdCAkaW5wdXRCb3g6IEpRdWVyeSA9ICRsYWJlbFxuXHRcdC5jbG9uZSgpXG5cdFx0LmNzcyh7XG5cdFx0XHRkaXNwbGF5OiAnYmxvY2snLFxuXHRcdFx0J2ZvbnQtc2l6ZSc6ICdpbmhlcml0Jyxcblx0XHRcdHBhZGRpbmc6ICc2cHggMCcsXG5cdFx0fSlcblx0XHQuYXBwZW5kKG5hbWVJbnB1dC4kZWxlbWVudC5jc3MoJ21hcmdpbi1ib3R0b20nLCAnNnB4JyksIHB3ZElucHV0LiRlbGVtZW50KTtcblx0Y29uc3QgJHRvc0xhYmVsOiBKUXVlcnkgPSAkbGFiZWwuY2xvbmUoKS5odG1sKGdldE1lc3NhZ2UoJ2hlbHAgZm9yIEkgYWdyZWUgd2l0aCB0aGUgcmVsZXZhbnQgdGVybXMnKSk7XG5cdGNvbnN0ICRyZW1lbWJlck1lOiBKUXVlcnkgPSAkbGFiZWwuY2xvbmUoKS5hcHBlbmQoa2VlcExvZ2luTGF5b3V0LiRlbGVtZW50LmNzcygnbWFyZ2luLXRvcCcsICc2cHgnKSk7XG5cblx0cmV0dXJuIHtcblx0XHQkYWdyZWVUb3MsXG5cdFx0JGZvcmdvdFBhc3N3b3JkLFxuXHRcdCRpbnB1dEJveCxcblx0XHQkcmVtZW1iZXJNZSxcblx0XHQkdG9zTGFiZWwsXG5cdFx0YWdyZWVUb3NDaGVja2JveCxcblx0XHRrZWVwTG9naW5DaGVja2JveCxcblx0XHRtZXNzYWdlRGlhbG9nLFxuXHRcdG5hbWVJbnB1dCxcblx0XHRwd2RJbnB1dCxcblx0fTtcbn07XG5cbmV4cG9ydCB7Z2VuZXJhdGVFbGVtZW50c307XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gJ2V4dC5nYWRnZXQuUmVhY3QnO1xuaW1wb3J0IHtnZXRNZXNzYWdlfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7cmVtb3ZlV2luZG93UmVzaXplSGFuZGxlcn0gZnJvbSAnLi9yZW1vdmVXaW5kb3dSZXNpemVIYW5kbGVyJztcbmltcG9ydCB7d2luZG93TWFuYWdlcn0gZnJvbSAnLi4vaW5pdFdpbmRvd01hbmFnZXInO1xuXG5jb25zdCBvb3VpUHJvbXB0ID0gYXN5bmMgKHJldHlwZVBhc3N3b3JkOiBib29sZWFuKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiA9PiB7XG5cdGNvbnN0IGNvZGVEaWFsb2c6IE9PLnVpLk1lc3NhZ2VEaWFsb2cgPSBuZXcgT08udWkuTWVzc2FnZURpYWxvZygpO1xuXHRjb25zdCBjb2RlSW5wdXQ6IE9PLnVpLlRleHRJbnB1dFdpZGdldCA9IG5ldyBPTy51aS5UZXh0SW5wdXRXaWRnZXQoe1xuXHRcdGljb246ICdrZXknLFxuXHRcdHBsYWNlaG9sZGVyOiByZXR5cGVQYXNzd29yZCA/IGdldE1lc3NhZ2UoJ05ldyBwYXNzd29yZCcpIDogZ2V0TWVzc2FnZSgnNi1kaWdpdCBudW1iZXInKSxcblx0XHR2YWxpZGF0ZTogJ2ludGVnZXInLFxuXHR9KTtcblxuXHRjb25zdCBjb2RlTGF5b3V0OiBPTy51aS5GaWVsZExheW91dDxPTy51aS5UZXh0SW5wdXRXaWRnZXQ+ID0gbmV3IE9PLnVpLkZpZWxkTGF5b3V0KGNvZGVJbnB1dCwge1xuXHRcdGFsaWduOiAndG9wJyxcblx0XHRsYWJlbDogJChcblx0XHRcdDxiIGNsYXNzTmFtZT17Wydvby11aS1tZXNzYWdlRGlhbG9nLXRpdGxlJywgJ29vLXVpLXdpbmRvdy1oZWFkJ119PlxuXHRcdFx0XHR7cmV0eXBlUGFzc3dvcmQgPyBnZXRNZXNzYWdlKCdFbnRlciBwYXNzd29yZCcpIDogZ2V0TWVzc2FnZSgnRW50ZXIgMkZBIHZlcmlmaWNhdGlvbiBjb2RlJyl9XG5cdFx0XHQ8L2I+XG5cdFx0KSxcblx0fSk7XG5cblx0d2luZG93TWFuYWdlci5hZGRXaW5kb3dzKFtjb2RlRGlhbG9nXSk7XG5cblx0Y29uc3QgaW5zdGFuY2U6IE9PLnVpLldpbmRvd0luc3RhbmNlID0gd2luZG93TWFuYWdlci5vcGVuV2luZG93KGNvZGVEaWFsb2csIHtcblx0XHRtZXNzYWdlOiBjb2RlTGF5b3V0LiRlbGVtZW50LFxuXHR9KTtcblxuXHRyZW1vdmVXaW5kb3dSZXNpemVIYW5kbGVyKCk7XG5cblx0dm9pZCBpbnN0YW5jZS5vcGVuZWQudGhlbigoKTogdm9pZCA9PiB7XG5cdFx0Y29kZUlucHV0Lm9uKCdlbnRlcicsICgpOiB2b2lkID0+IHtcblx0XHRcdCh3aW5kb3dNYW5hZ2VyLmdldEN1cnJlbnRXaW5kb3coKSBhcyBPTy51aS5XaW5kb3cpLmNsb3NlKHtcblx0XHRcdFx0YWN0aW9uOiAnYWNjZXB0Jyxcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdGNvZGVJbnB1dC5mb2N1cygpO1xuXHR9KTtcblxuXHRjb25zdCBkYXRhOiB2b2lkID0gYXdhaXQgaW5zdGFuY2UuY2xvc2VkO1xuXHRjb25zdCBfZGF0YSA9IGRhdGEgYXMge2FjdGlvbjogc3RyaW5nfSB8IHZvaWQ7XG5cblx0cmV0dXJuIF9kYXRhPy5hY3Rpb24gPT09ICdhY2NlcHQnID8gY29kZUlucHV0LmdldFZhbHVlKCkgOiBudWxsO1xufTtcblxuZXhwb3J0IHtvb3VpUHJvbXB0fTtcbiIsICJpbXBvcnQge3dpbmRvd01hbmFnZXJ9IGZyb20gJy4uL2luaXRXaW5kb3dNYW5hZ2VyJztcblxuY29uc3QgcmVtb3ZlV2luZG93UmVzaXplSGFuZGxlciA9ICgpOiB2b2lkID0+IHtcblx0JCh3aW5kb3cpLm9mZih7XG5cdFx0J29yaWVudGF0aW9uY2hhbmdlIHJlc2l6ZSc6ICh3aW5kb3dNYW5hZ2VyIGFzIHVua25vd24gYXMge29uV2luZG93UmVzaXplSGFuZGxlcjogKCkgPT4gdm9pZH0pXG5cdFx0XHQub25XaW5kb3dSZXNpemVIYW5kbGVyLFxuXHR9KTtcbn07XG5cbmV4cG9ydCB7cmVtb3ZlV2luZG93UmVzaXplSGFuZGxlcn07XG4iLCAiaW1wb3J0IHthcGl9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQge2dldE1lc3NhZ2V9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHt0b2FzdGlmeX0gZnJvbSAnZXh0LmdhZGdldC5Ub2FzdGlmeSc7XG5cbmNvbnN0IHF1ZXJ5TG9naW5Ub2tlbiA9IGFzeW5jIChcblx0dG9hc3RpZnlJbnN0YW5jZTogVG9hc3RpZnlJbnN0YW5jZVxuKTogUHJvbWlzZTx7XG5cdGxvZ2luVG9rZW46IHN0cmluZztcblx0dG9hc3RpZnlJbnN0YW5jZTogVG9hc3RpZnlJbnN0YW5jZTtcbn0+ID0+IHtcblx0dG9hc3RpZnlJbnN0YW5jZS5oaWRlVG9hc3QoKTtcblx0dG9hc3RpZnlJbnN0YW5jZSA9IHRvYXN0aWZ5KHtcblx0XHR0ZXh0OiBnZXRNZXNzYWdlKCdHZXR0aW5nIGxvZ2luIHRva2VuJyksXG5cdH0pO1xuXG5cdGNvbnN0IGxvZ2luVG9rZW46IHN0cmluZyA9IGF3YWl0IGFwaS5nZXRUb2tlbignbG9naW4nKTtcblxuXHR0b2FzdGlmeUluc3RhbmNlLmhpZGVUb2FzdCgpO1xuXHR0b2FzdGlmeUluc3RhbmNlID0gdG9hc3RpZnkoe1xuXHRcdHRleHQ6IGdldE1lc3NhZ2UoJ0xvZ2luIHRva2VuIGdldHRlZCcpLFxuXHRcdGR1cmF0aW9uOiAtMSxcblx0fSk7XG5cblx0cmV0dXJuIHtcblx0XHRsb2dpblRva2VuLFxuXHRcdHRvYXN0aWZ5SW5zdGFuY2UsXG5cdH07XG59O1xuXG5leHBvcnQge3F1ZXJ5TG9naW5Ub2tlbn07XG4iLCAiaW1wb3J0IHtkZWxheX0gZnJvbSAnZXh0LmdhZGdldC5VdGlsJztcbmltcG9ydCB7d2luZG93TWFuYWdlcn0gZnJvbSAnLi4vaW5pdFdpbmRvd01hbmFnZXInO1xuXG5jb25zdCByZWRpcmVjdE9yaWdpbkxvZ2luUGFnZSA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0YXdhaXQgd2luZG93TWFuYWdlci5jbGVhcldpbmRvd3MoKTtcblx0YXdhaXQgZGVsYXkoMyAqIDEwMDApO1xuXHRsb2NhdGlvbi5ocmVmID0gbXcudXRpbC5nZXRVcmwoJ1NwZWNpYWw6VXNlcmxvZ2luJyk7XG59O1xuXG5leHBvcnQge3JlZGlyZWN0T3JpZ2luTG9naW5QYWdlfTtcbiIsICJpbXBvcnQge2dldE1lc3NhZ2V9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHt0b2FzdGlmeX0gZnJvbSAnZXh0LmdhZGdldC5Ub2FzdGlmeSc7XG5cbmNvbnN0IHNob3dFcnJvciA9IChlcnJvcjogdW5rbm93biwgdG9hc3RpZnlJbnN0YW5jZTogVG9hc3RpZnlJbnN0YW5jZSk6IHZvaWQgPT4ge1xuXHRjb25zb2xlLmVycm9yKCdbQWpheExvZ2luXSBBamF4IGVycm9yOicsIGVycm9yKTtcblx0dG9hc3RpZnlJbnN0YW5jZS5oaWRlVG9hc3QoKTtcblx0dG9hc3RpZnkoXG5cdFx0e1xuXHRcdFx0dGV4dDogZ2V0TWVzc2FnZSgnTmV0d29yayBlcnJvcicpLFxuXHRcdFx0Y2xvc2U6IHRydWUsXG5cdFx0XHRkdXJhdGlvbjogLTEsXG5cdFx0fSxcblx0XHQnZXJyb3InXG5cdCk7XG59O1xuXG5leHBvcnQge3Nob3dFcnJvcn07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLGtHQUFBQSxTQUFBO0FBQUE7QUFDQSxRQUFJLFFBQVEsU0FBVSxJQUFJO0FBQ3hCLGFBQU8sTUFBTSxHQUFHLFNBQVMsUUFBUTtBQUFB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QUM5Q2pKLFdBQVcsU0FBQUEsWUFBTTtJQUFDO0VBQ25CO0FBRUEsTUFBTWxGLGdCQUFnQixTQUFoQkEsZUFBaUJHLE9BQXlEO0FBQy9FLFFBQUksRUFBQSxHQUFDWixvQkFBQTZPLHFCQUFvQmpPLEtBQUssR0FBRztBQUNoQztJQUNEO0FBRUFBLFVBQU1rTyxlQUFlO0FBQ3JCeEQsY0FBVXNELG9CQUFvQjtFQUMvQjtBQUNBck8sY0FBWWtPLGVBQWVoTyxhQUFhO0FBQ3pDLENBQUM7IiwKICAibmFtZXMiOiBbIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiRGVubyIsICJ2ZXJzaW9uIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiU3ltYm9sIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbCIsICJkb2N1bWVudCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbCIsICJUeXBlRXJyb3IiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiYWN0aXZlWERvY3VtZW50IiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAibW9kdWxlIiwgIlN5bWJvbCIsICJtb2R1bGUiLCAiU3ltYm9sIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAic2VsZiIsICIkIiwgImdsb2JhbCIsICJUeXBlRXJyb3IiLCAiU3ltYm9sIiwgIm1vZHVsZSIsICIkIiwgIiQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICIkIiwgIiQiLCAiJCIsICJnbG9iYWwiLCAiU3ltYm9sIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAiZ2xvYmFsIiwgIkVycm9yIiwgIlJlZmVyZW5jZUVycm9yIiwgIlN5bnRheEVycm9yIiwgIlR5cGVFcnJvciIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICIkIiwgIm1vZHVsZSIsICIkIiwgImdsb2JhbCIsICIkIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbCIsICJGdW5jdGlvbiIsICJTdHJpbmciLCAibW9kdWxlIiwgImdsb2JhbCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImRvY3VtZW50IiwgIlByb21pc2UiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbCIsICJtb2R1bGUiLCAiJCIsICJnbG9iYWwiLCAiVHlwZUVycm9yIiwgImRvY3VtZW50IiwgIlByb21pc2UiLCAibW9kdWxlIiwgIm1vZHVsZSIsICIkIiwgIiQiLCAiJCIsICIkIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAibW9kdWxlIiwgImdsb2JhbCIsICJtb2R1bGUiLCAiJCIsICIkIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAidW5kZWZpbmVkIiwgImdsb2JhbCIsICJEb2N1bWVudEZyYWdtZW50IiwgInVuZGVmaW5lZCIsICJnbG9iYWwiLCAidW5kZWZpbmVkIiwgIl9ET01Ub2tlbkxpc3QiLCAiaW5pdF9ET01Ub2tlbkxpc3QiLCAidW5kZWZpbmVkIiwgImdsb2JhbCIsICJ1bmRlZmluZWQiLCAiJCIsICIkIiwgIiQiLCAiJCIsICIkIiwgIiQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbCIsICJsb2dpbkVsZW1lbnRTZWxlY3RvciIsICJ2ZXJzaW9uIiwgImltcG9ydF9leHRfZ2FkZ2V0MTMiLCAicmVxdWlyZSIsICJXR19VU0VSX05BTUUiLCAibXciLCAiY29uZmlnIiwgImdldCIsICJpbXBvcnRfZXh0X2dhZGdldCIsICJhZGRMaXN0ZW5lciIsICIkZWxlbWVudCIsICJldmVudExpc3RlbmVyIiwgIm9uIiwgImZpbHRlckFsdGVyZWRDbGlja3MiLCAiZXZlbnQiLCAiaW1wb3J0X2V4dF9nYWRnZXQyIiwgImFwaSIsICJpbml0TXdBcGkiLCAiY29uY2F0IiwgImltcG9ydF9leHRfZ2FkZ2V0MTEiLCAiX190b0VTTSIsICJpbXBvcnRfZXh0X2dhZGdldDQiLCAiaW1wb3J0X2V4dF9nYWRnZXQzIiwgImdldEkxOG5NZXNzYWdlcyIsICJsb2NhbGl6ZSIsICJlbiIsICJqYSIsICJDYW5jZWwiLCAiemgiLCAiTG9naW4iLCAiUGFzc3dvcmQiLCAiVXNlcm5hbWUiLCAiQWdyZWVkT3JOb3QiLCAiRG91YmxlQ2hlY2tBZ3JlZWRPck5vdCIsICJFbXB0eTJGQSIsICJFbXB0eVBhc3N3b3JkIiwgIkVtcHR5VXNlcm5hbWVPclBhc3N3b3JkIiwgIlNlbGVjdGVkT3JOb3QiLCAiVG9vRnJlcXVlbnQiLCAiaTE4bk1lc3NhZ2VzIiwgImdldE1lc3NhZ2UiLCAia2V5IiwgImluaXRXaW5kb3dNYW5hZ2VyIiwgIk9PIiwgInVpIiwgIldpbmRvd01hbmFnZXIiLCAid2luZG93TWFuYWdlciIsICJvb3VpQ29uZmlybSIsICJfcmVmIiwgIl9hc3luY1RvR2VuZXJhdG9yIiwgIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCAibWFyayIsICJfY2FsbGVlIiwgIm9wdGlvbnMiLCAibWVzc2FnZURpYWxvZyIsICJpbnN0YW5jZSIsICJkYXRhIiwgIl9kYXRhIiwgIndyYXAiLCAiX2NhbGxlZSQiLCAiX2NvbnRleHQiLCAicHJldiIsICJuZXh0IiwgIk1lc3NhZ2VEaWFsb2ciLCAiYWRkV2luZG93cyIsICJvcGVuV2luZG93IiwgImNsb3NlZCIsICJzZW50IiwgImFicnVwdCIsICJhY3Rpb24iLCAic3RvcCIsICJfeCIsICJhcHBseSIsICJhcmd1bWVudHMiLCAiaW1wb3J0X2V4dF9nYWRnZXQ1IiwgImNoZWNrVmFsaWQiLCAiX3JlZjMiLCAiX2NhbGxlZTIiLCAiX3JlZjIiLCAidG9hc3RpZnlJbnN0YW5jZSIsICJfcmVmNCIsICJhZ3JlZVRvc0NoZWNrYm94IiwgIm5hbWVJbnB1dCIsICJwd2RJbnB1dCIsICJpc0FncmVlVG9zIiwgImlzRmlsbCIsICJpc1ZhbGlkIiwgIl9jYWxsZWUyJCIsICJfY29udGV4dDIiLCAiX3NsaWNlZFRvQXJyYXkiLCAiaXNTZWxlY3RlZCIsICJnZXRWYWx1ZSIsICJpbmNsdWRlcyIsICJoaWRlVG9hc3QiLCAiY2xlYXJXaW5kb3dzIiwgIm1lc3NhZ2UiLCAiJCIsICJjcmVhdGVFbGVtZW50IiwgImlubmVySFRNTCIsICJhY3Rpb25zIiwgImxhYmVsIiwgImZsYWdzIiwgInRvYXN0aWZ5IiwgInRleHQiLCAiZHVyYXRpb24iLCAiX3gyIiwgIl94MyIsICJpbXBvcnRfZXh0X2dhZGdldDYiLCAiZ2VuZXJhdGVFbGVtZW50cyIsICJUZXh0SW5wdXRXaWRnZXQiLCAiaWNvbiIsICJwbGFjZWhvbGRlciIsICJ2YWxpZGF0ZSIsICJ0eXBlIiwgIkNoZWNrYm94SW5wdXRXaWRnZXQiLCAic2VsZWN0ZWQiLCAiYWdyZWVUb3NMYXlvdXQiLCAiRmllbGRMYXlvdXQiLCAiYWxpZ24iLCAia2VlcExvZ2luQ2hlY2tib3giLCAia2VlcExvZ2luTGF5b3V0IiwgImhlbHAiLCAiY2xhc3NOYW1lIiwgInN0eWxlIiwgImZvbnRTaXplIiwgInRleHRBbGlnbiIsICIkbGFiZWwiLCAiJGFncmVlVG9zIiwgImNsb25lIiwgImFwcGVuZCIsICIkZm9yZ290UGFzc3dvcmQiLCAiY3NzIiwgImhyZWYiLCAidXRpbCIsICJnZXRVcmwiLCAidGl0bGUiLCAiJGlucHV0Qm94IiwgImRpc3BsYXkiLCAicGFkZGluZyIsICIkdG9zTGFiZWwiLCAiaHRtbCIsICIkcmVtZW1iZXJNZSIsICJpbXBvcnRfZXh0X2dhZGdldDciLCAicmVtb3ZlV2luZG93UmVzaXplSGFuZGxlciIsICJ3aW5kb3ciLCAib2ZmIiwgIm9uV2luZG93UmVzaXplSGFuZGxlciIsICJvb3VpUHJvbXB0IiwgIl9yZWY1IiwgIl9jYWxsZWUzIiwgInJldHlwZVBhc3N3b3JkIiwgImNvZGVEaWFsb2ciLCAiY29kZUlucHV0IiwgImNvZGVMYXlvdXQiLCAiX2NhbGxlZTMkIiwgIl9jb250ZXh0MyIsICJvcGVuZWQiLCAidGhlbiIsICJnZXRDdXJyZW50V2luZG93IiwgImNsb3NlIiwgImZvY3VzIiwgIl94NCIsICJpbXBvcnRfZXh0X2dhZGdldDgiLCAicXVlcnlMb2dpblRva2VuIiwgIl9yZWY2IiwgIl9jYWxsZWU0IiwgImxvZ2luVG9rZW4iLCAiX2NhbGxlZTQkIiwgIl9jb250ZXh0NCIsICJnZXRUb2tlbiIsICJfeDUiLCAiaW1wb3J0X2V4dF9nYWRnZXQ5IiwgInJlZGlyZWN0T3JpZ2luTG9naW5QYWdlIiwgIl9yZWY3IiwgIl9jYWxsZWU1IiwgIl9jYWxsZWU1JCIsICJfY29udGV4dDUiLCAiZGVsYXkiLCAibG9jYXRpb24iLCAiaW1wb3J0X2V4dF9nYWRnZXQxMCIsICJzaG93RXJyb3IiLCAiZXJyb3IiLCAiY29uc29sZSIsICJpbXBvcnRfZXh0X2dhZGdldDEyIiwgImFqYXhMb2dpbiIsICJsZW5ndGgiLCAidW5kZWZpbmVkIiwgIl9nZW5lcmF0ZUVsZW1lbnRzIiwgImxvZ2luIiwgIl9yZWY4IiwgIl9jYWxsZWU2IiwgIl9yZWY5IiwgIl9yZWY5JGxvZ2luQ29udGludWUiLCAibG9naW5Db250aW51ZSIsICJfcmVmOSRyZXR5cGVQYXNzd29yZCIsICJfcmVzcG9uc2UkY2xpZW50bG9naW4iLCAiX3Jlc3BvbnNlJGNsaWVudGxvZ2luMiIsICJfeWllbGQkcXVlcnlMb2dpblRva2UiLCAicGFyYW1zIiwgInZhbHVlIiwgInJlc3BvbnNlIiwgIm1lc3NhZ2Vjb2RlIiwgIl9hcmdzNiIsICJfY2FsbGVlNiQiLCAiX2NvbnRleHQ2IiwgImZvcm1hdCIsICJmb3JtYXR2ZXJzaW9uIiwgImxvZ2ludG9rZW4iLCAibG9naW5yZXR1cm51cmwiLCAidXNlcm5hbWUiLCAicGFzc3dvcmQiLCAicmVtZW1iZXJNZSIsICJsb2dpbmNvbnRpbnVlIiwgInJldHlwZSIsICJPQVRIVG9rZW4iLCAicG9zdCIsICJzdGF0dXMiLCAicmVsb2FkIiwgInQwIiwgInJlcGxhY2UiLCAidDEiLCAiY2hlY2siLCAiX3JlZjEwIiwgIl9jYWxsZWU3IiwgIl95aWVsZCRjaGVja1ZhbGlkIiwgImxhc3RJc0FncmVlVG9zIiwgImxhc3RUb2FzdGlmeUluc3RhbmNlIiwgIl9jYWxsZWU3JCIsICJfY29udGV4dDciLCAiZ2V0QWN0aW9uUHJvY2VzcyIsICJQcm9jZXNzIiwgInNpemUiLCAiZ2V0Qm9keSIsICJpbml0QXV0b0xvZ2luIiwgIiRib2R5IiwgIiRsb2dpbkVsZW1lbnQiLCAiZmluZCIsICJhcHBlbmRUbyIsICJmYWtlVG9hc3RpZnlJbnN0YW5jZSIsICJjaGVja0ExMXlDb25maXJtS2V5IiwgInByZXZlbnREZWZhdWx0Il0KfQo= diff --git a/dist/FilterAlteredClicks/FilterAlteredClicks.js b/dist/FilterAlteredClicks/FilterAlteredClicks.js new file mode 100644 index 00000000..643b6958 --- /dev/null +++ b/dist/FilterAlteredClicks/FilterAlteredClicks.js @@ -0,0 +1,3831 @@ +/** + * SPDX-License-Identifier: MIT + * _addText: '{{Gadget Header|license=MIT}}' + * + * @base {@link https://github.com/fregante/filter-altered-clicks} + * @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/FilterAlteredClicks} + */ +/** + * +------------------------------------------------------------+ + * | === WARNING: GLOBAL GADGET FILE === | + * +------------------------------------------------------------+ + * | All changes should be made in the repository, | + * | otherwise they will be lost. | + * +------------------------------------------------------------+ + * | Changes to this page may affect many users. | + * | Please discuss changes by opening an issue before editing. | + * +------------------------------------------------------------+ + */ +/* */ + +(function() { + +"use strict"; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __commonJS = function(cb, mod) { + return function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; + }; +}; + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/global.js +var require_global = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/global.js": function(exports2, module2) { + "use strict"; + var check = function(it) { + return it && it.Math === Math && it; + }; + module2.exports = // eslint-disable-next-line es/no-global-this -- safe + check(typeof globalThis == "object" && globalThis) || check(typeof window == "object" && window) || // eslint-disable-next-line no-restricted-globals -- safe + check(typeof self == "object" && self) || check(typeof global == "object" && global) || check(typeof exports2 == "object" && exports2) || // eslint-disable-next-line no-new-func -- fallback + /* @__PURE__ */ function() { + return this; + }() || Function("return this")(); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/fails.js +var require_fails = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/fails.js": function(exports2, module2) { + "use strict"; + module2.exports = function(exec) { + try { + return !!exec(); + } catch (error) { + return true; + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/descriptors.js +var require_descriptors = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/descriptors.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = !fails(function() { + return Object.defineProperty({}, 1, { get: function() { + return 7; + } })[1] !== 7; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-native.js +var require_function_bind_native = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-native.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = !fails(function() { + var test = function() { + }.bind(); + return typeof test != "function" || test.hasOwnProperty("prototype"); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-call.js +var require_function_call = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-call.js": function(exports2, module2) { + "use strict"; + var NATIVE_BIND = require_function_bind_native(); + var call = Function.prototype.call; + module2.exports = NATIVE_BIND ? call.bind(call) : function() { + return call.apply(call, arguments); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-property-is-enumerable.js +var require_object_property_is_enumerable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-property-is-enumerable.js": function(exports2) { + "use strict"; + var $propertyIsEnumerable = {}.propertyIsEnumerable; + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1); + exports2.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; + } : $propertyIsEnumerable; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property-descriptor.js +var require_create_property_descriptor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property-descriptor.js": function(exports2, module2) { + "use strict"; + module2.exports = function(bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this.js +var require_function_uncurry_this = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this.js": function(exports2, module2) { + "use strict"; + var NATIVE_BIND = require_function_bind_native(); + var FunctionPrototype = Function.prototype; + var call = FunctionPrototype.call; + var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call); + module2.exports = NATIVE_BIND ? uncurryThisWithBind : function(fn) { + return function() { + return call.apply(fn, arguments); + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof-raw.js +var require_classof_raw = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof-raw.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toString = uncurryThis({}.toString); + var stringSlice = uncurryThis("".slice); + module2.exports = function(it) { + return stringSlice(toString(it), 8, -1); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/indexed-object.js +var require_indexed_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/indexed-object.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var classof = require_classof_raw(); + var $Object = Object; + var split = uncurryThis("".split); + module2.exports = fails(function() { + return !$Object("z").propertyIsEnumerable(0); + }) ? function(it) { + return classof(it) === "String" ? split(it, "") : $Object(it); + } : $Object; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-null-or-undefined.js +var require_is_null_or_undefined = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-null-or-undefined.js": function(exports2, module2) { + "use strict"; + module2.exports = function(it) { + return it === null || it === void 0; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/require-object-coercible.js +var require_require_object_coercible = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/require-object-coercible.js": function(exports2, module2) { + "use strict"; + var isNullOrUndefined = require_is_null_or_undefined(); + var $TypeError = TypeError; + module2.exports = function(it) { + if (isNullOrUndefined(it)) + throw new $TypeError("Can't call method on " + it); + return it; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-indexed-object.js +var require_to_indexed_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-indexed-object.js": function(exports2, module2) { + "use strict"; + var IndexedObject = require_indexed_object(); + var requireObjectCoercible = require_require_object_coercible(); + module2.exports = function(it) { + return IndexedObject(requireObjectCoercible(it)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-callable.js +var require_is_callable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-callable.js": function(exports2, module2) { + "use strict"; + var documentAll = typeof document == "object" && document.all; + module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { + return typeof argument == "function" || argument === documentAll; + } : function(argument) { + return typeof argument == "function"; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-object.js +var require_is_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-object.js": function(exports2, module2) { + "use strict"; + var isCallable = require_is_callable(); + module2.exports = function(it) { + return typeof it == "object" ? it !== null : isCallable(it); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-built-in.js +var require_get_built_in = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-built-in.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var isCallable = require_is_callable(); + var aFunction = function(argument) { + return isCallable(argument) ? argument : void 0; + }; + module2.exports = function(namespace, method) { + return arguments.length < 2 ? aFunction(global2[namespace]) : global2[namespace] && global2[namespace][method]; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-is-prototype-of.js +var require_object_is_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-is-prototype-of.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + module2.exports = uncurryThis({}.isPrototypeOf); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-user-agent.js +var require_engine_user_agent = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-user-agent.js": function(exports2, module2) { + "use strict"; + module2.exports = typeof navigator != "undefined" && String(navigator.userAgent) || ""; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-v8-version.js +var require_engine_v8_version = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-v8-version.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var userAgent = require_engine_user_agent(); + var process = global2.process; + var Deno = global2.Deno; + var versions = process && process.versions || Deno && Deno.version; + var v8 = versions && versions.v8; + var match; + var version; + if (v8) { + match = v8.split("."); + version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); + } + if (!version && userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) + version = +match[1]; + } + } + module2.exports = version; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-constructor-detection.js +var require_symbol_constructor_detection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-constructor-detection.js": function(exports2, module2) { + "use strict"; + var V8_VERSION = require_engine_v8_version(); + var fails = require_fails(); + var global2 = require_global(); + var $String = global2.String; + module2.exports = !!Object.getOwnPropertySymbols && !fails(function() { + var symbol = Symbol("symbol detection"); + return !$String(symbol) || !(Object(symbol) instanceof Symbol) || // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances + !Symbol.sham && V8_VERSION && V8_VERSION < 41; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/use-symbol-as-uid.js +var require_use_symbol_as_uid = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/use-symbol-as-uid.js": function(exports2, module2) { + "use strict"; + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-symbol.js +var require_is_symbol = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-symbol.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var isCallable = require_is_callable(); + var isPrototypeOf = require_object_is_prototype_of(); + var USE_SYMBOL_AS_UID = require_use_symbol_as_uid(); + var $Object = Object; + module2.exports = USE_SYMBOL_AS_UID ? function(it) { + return typeof it == "symbol"; + } : function(it) { + var $Symbol = getBuiltIn("Symbol"); + return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/try-to-string.js +var require_try_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/try-to-string.js": function(exports2, module2) { + "use strict"; + var $String = String; + module2.exports = function(argument) { + try { + return $String(argument); + } catch (error) { + return "Object"; + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-callable.js +var require_a_callable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-callable.js": function(exports2, module2) { + "use strict"; + var isCallable = require_is_callable(); + var tryToString = require_try_to_string(); + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isCallable(argument)) + return argument; + throw new $TypeError(tryToString(argument) + " is not a function"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-method.js +var require_get_method = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-method.js": function(exports2, module2) { + "use strict"; + var aCallable = require_a_callable(); + var isNullOrUndefined = require_is_null_or_undefined(); + module2.exports = function(V, P) { + var func = V[P]; + return isNullOrUndefined(func) ? void 0 : aCallable(func); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ordinary-to-primitive.js +var require_ordinary_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ordinary-to-primitive.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var isCallable = require_is_callable(); + var isObject = require_is_object(); + var $TypeError = TypeError; + module2.exports = function(input, pref) { + var fn, val; + if (pref === "string" && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) + return val; + if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) + return val; + if (pref !== "string" && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) + return val; + throw new $TypeError("Can't convert object to primitive value"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-pure.js +var require_is_pure = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-pure.js": function(exports2, module2) { + "use strict"; + module2.exports = false; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-global-property.js +var require_define_global_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-global-property.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var defineProperty = Object.defineProperty; + module2.exports = function(key, value) { + try { + defineProperty(global2, key, { value: value, configurable: true, writable: true }); + } catch (error) { + global2[key] = value; + } + return value; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-store.js +var require_shared_store = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-store.js": function(exports2, module2) { + "use strict"; + var IS_PURE = require_is_pure(); + var globalThis2 = require_global(); + var defineGlobalProperty = require_define_global_property(); + var SHARED = "__core-js_shared__"; + var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); + (store.versions || (store.versions = [])).push({ + version: "3.36.0", + mode: IS_PURE ? "pure" : "global", + copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", + license: "https://github.com/zloirock/core-js/blob/v3.36.0/LICENSE", + source: "https://github.com/zloirock/core-js" + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared.js +var require_shared = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared.js": function(exports2, module2) { + "use strict"; + var store = require_shared_store(); + module2.exports = function(key, value) { + return store[key] || (store[key] = value || {}); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-object.js +var require_to_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-object.js": function(exports2, module2) { + "use strict"; + var requireObjectCoercible = require_require_object_coercible(); + var $Object = Object; + module2.exports = function(argument) { + return $Object(requireObjectCoercible(argument)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/has-own-property.js +var require_has_own_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/has-own-property.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toObject = require_to_object(); + var hasOwnProperty = uncurryThis({}.hasOwnProperty); + module2.exports = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty(toObject(it), key); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/uid.js +var require_uid = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/uid.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var id = 0; + var postfix = Math.random(); + var toString = uncurryThis(1 .toString); + module2.exports = function(key) { + return "Symbol(" + (key === void 0 ? "" : key) + ")_" + toString(++id + postfix, 36); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol.js +var require_well_known_symbol = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var shared = require_shared(); + var hasOwn = require_has_own_property(); + var uid = require_uid(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var USE_SYMBOL_AS_UID = require_use_symbol_as_uid(); + var Symbol2 = global2.Symbol; + var WellKnownSymbolsStore = shared("wks"); + var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol2["for"] || Symbol2 : Symbol2 && Symbol2.withoutSetter || uid; + module2.exports = function(name) { + if (!hasOwn(WellKnownSymbolsStore, name)) { + WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol2, name) ? Symbol2[name] : createWellKnownSymbol("Symbol." + name); + } + return WellKnownSymbolsStore[name]; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-primitive.js +var require_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-primitive.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var isObject = require_is_object(); + var isSymbol = require_is_symbol(); + var getMethod = require_get_method(); + var ordinaryToPrimitive = require_ordinary_to_primitive(); + var wellKnownSymbol = require_well_known_symbol(); + var $TypeError = TypeError; + var TO_PRIMITIVE = wellKnownSymbol("toPrimitive"); + module2.exports = function(input, pref) { + if (!isObject(input) || isSymbol(input)) + return input; + var exoticToPrim = getMethod(input, TO_PRIMITIVE); + var result; + if (exoticToPrim) { + if (pref === void 0) + pref = "default"; + result = call(exoticToPrim, input, pref); + if (!isObject(result) || isSymbol(result)) + return result; + throw new $TypeError("Can't convert object to primitive value"); + } + if (pref === void 0) + pref = "number"; + return ordinaryToPrimitive(input, pref); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-property-key.js +var require_to_property_key = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-property-key.js": function(exports2, module2) { + "use strict"; + var toPrimitive = require_to_primitive(); + var isSymbol = require_is_symbol(); + module2.exports = function(argument) { + var key = toPrimitive(argument, "string"); + return isSymbol(key) ? key : key + ""; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/document-create-element.js +var require_document_create_element = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/document-create-element.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var isObject = require_is_object(); + var document2 = global2.document; + var EXISTS = isObject(document2) && isObject(document2.createElement); + module2.exports = function(it) { + return EXISTS ? document2.createElement(it) : {}; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ie8-dom-define.js +var require_ie8_dom_define = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ie8-dom-define.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var fails = require_fails(); + var createElement = require_document_create_element(); + module2.exports = !DESCRIPTORS && !fails(function() { + return Object.defineProperty(createElement("div"), "a", { + get: function() { + return 7; + } + }).a !== 7; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +var require_object_get_own_property_descriptor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-descriptor.js": function(exports2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var call = require_function_call(); + var propertyIsEnumerableModule = require_object_property_is_enumerable(); + var createPropertyDescriptor = require_create_property_descriptor(); + var toIndexedObject = require_to_indexed_object(); + var toPropertyKey = require_to_property_key(); + var hasOwn = require_has_own_property(); + var IE8_DOM_DEFINE = require_ie8_dom_define(); + var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + exports2.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPropertyKey(P); + if (IE8_DOM_DEFINE) + try { + return $getOwnPropertyDescriptor(O, P); + } catch (error) { + } + if (hasOwn(O, P)) + return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/v8-prototype-define-bug.js +var require_v8_prototype_define_bug = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/v8-prototype-define-bug.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var fails = require_fails(); + module2.exports = DESCRIPTORS && fails(function() { + return Object.defineProperty(function() { + }, "prototype", { + value: 42, + writable: false + }).prototype !== 42; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/an-object.js +var require_an_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/an-object.js": function(exports2, module2) { + "use strict"; + var isObject = require_is_object(); + var $String = String; + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isObject(argument)) + return argument; + throw new $TypeError($String(argument) + " is not an object"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-property.js +var require_object_define_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-property.js": function(exports2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var IE8_DOM_DEFINE = require_ie8_dom_define(); + var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug(); + var anObject = require_an_object(); + var toPropertyKey = require_to_property_key(); + var $TypeError = TypeError; + var $defineProperty = Object.defineProperty; + var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var ENUMERABLE = "enumerable"; + var CONFIGURABLE = "configurable"; + var WRITABLE = "writable"; + exports2.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (typeof O === "function" && P === "prototype" && "value" in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { + var current = $getOwnPropertyDescriptor(O, P); + if (current && current[WRITABLE]) { + O[P] = Attributes.value; + Attributes = { + configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE], + enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], + writable: false + }; + } + } + return $defineProperty(O, P, Attributes); + } : $defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (IE8_DOM_DEFINE) + try { + return $defineProperty(O, P, Attributes); + } catch (error) { + } + if ("get" in Attributes || "set" in Attributes) + throw new $TypeError("Accessors not supported"); + if ("value" in Attributes) + O[P] = Attributes.value; + return O; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-non-enumerable-property.js +var require_create_non_enumerable_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-non-enumerable-property.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var definePropertyModule = require_object_define_property(); + var createPropertyDescriptor = require_create_property_descriptor(); + module2.exports = DESCRIPTORS ? function(object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); + } : function(object, key, value) { + object[key] = value; + return object; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-name.js +var require_function_name = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-name.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var hasOwn = require_has_own_property(); + var FunctionPrototype = Function.prototype; + var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor; + var EXISTS = hasOwn(FunctionPrototype, "name"); + var PROPER = EXISTS && function something() { + }.name === "something"; + var CONFIGURABLE = EXISTS && (!DESCRIPTORS || DESCRIPTORS && getDescriptor(FunctionPrototype, "name").configurable); + module2.exports = { + EXISTS: EXISTS, + PROPER: PROPER, + CONFIGURABLE: CONFIGURABLE + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inspect-source.js +var require_inspect_source = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inspect-source.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var isCallable = require_is_callable(); + var store = require_shared_store(); + var functionToString = uncurryThis(Function.toString); + if (!isCallable(store.inspectSource)) { + store.inspectSource = function(it) { + return functionToString(it); + }; + } + module2.exports = store.inspectSource; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/weak-map-basic-detection.js +var require_weak_map_basic_detection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/weak-map-basic-detection.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var isCallable = require_is_callable(); + var WeakMap = global2.WeakMap; + module2.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap)); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-key.js +var require_shared_key = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-key.js": function(exports2, module2) { + "use strict"; + var shared = require_shared(); + var uid = require_uid(); + var keys = shared("keys"); + module2.exports = function(key) { + return keys[key] || (keys[key] = uid(key)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/hidden-keys.js +var require_hidden_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/hidden-keys.js": function(exports2, module2) { + "use strict"; + module2.exports = {}; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/internal-state.js +var require_internal_state = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/internal-state.js": function(exports2, module2) { + "use strict"; + var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); + var global2 = require_global(); + var isObject = require_is_object(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var hasOwn = require_has_own_property(); + var shared = require_shared_store(); + var sharedKey = require_shared_key(); + var hiddenKeys = require_hidden_keys(); + var OBJECT_ALREADY_INITIALIZED = "Object already initialized"; + var TypeError2 = global2.TypeError; + var WeakMap = global2.WeakMap; + var set; + var get; + var has; + var enforce = function(it) { + return has(it) ? get(it) : set(it, {}); + }; + var getterFor = function(TYPE) { + return function(it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw new TypeError2("Incompatible receiver, " + TYPE + " required"); + } + return state; + }; + }; + if (NATIVE_WEAK_MAP || shared.state) { + store = shared.state || (shared.state = new WeakMap()); + store.get = store.get; + store.has = store.has; + store.set = store.set; + set = function(it, metadata) { + if (store.has(it)) + throw new TypeError2(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + store.set(it, metadata); + return metadata; + }; + get = function(it) { + return store.get(it) || {}; + }; + has = function(it) { + return store.has(it); + }; + } else { + STATE = sharedKey("state"); + hiddenKeys[STATE] = true; + set = function(it, metadata) { + if (hasOwn(it, STATE)) + throw new TypeError2(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function(it) { + return hasOwn(it, STATE) ? it[STATE] : {}; + }; + has = function(it) { + return hasOwn(it, STATE); + }; + } + var store; + var STATE; + module2.exports = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/make-built-in.js +var require_make_built_in = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/make-built-in.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var isCallable = require_is_callable(); + var hasOwn = require_has_own_property(); + var DESCRIPTORS = require_descriptors(); + var CONFIGURABLE_FUNCTION_NAME = require_function_name().CONFIGURABLE; + var inspectSource = require_inspect_source(); + var InternalStateModule = require_internal_state(); + var enforceInternalState = InternalStateModule.enforce; + var getInternalState = InternalStateModule.get; + var $String = String; + var defineProperty = Object.defineProperty; + var stringSlice = uncurryThis("".slice); + var replace = uncurryThis("".replace); + var join = uncurryThis([].join); + var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function() { + return defineProperty(function() { + }, "length", { value: 8 }).length !== 8; + }); + var TEMPLATE = String(String).split("String"); + var makeBuiltIn = module2.exports = function(value, name, options) { + if (stringSlice($String(name), 0, 7) === "Symbol(") { + name = "[" + replace($String(name), /^Symbol\(([^)]*)\).*$/, "$1") + "]"; + } + if (options && options.getter) + name = "get " + name; + if (options && options.setter) + name = "set " + name; + if (!hasOwn(value, "name") || CONFIGURABLE_FUNCTION_NAME && value.name !== name) { + if (DESCRIPTORS) + defineProperty(value, "name", { value: name, configurable: true }); + else + value.name = name; + } + if (CONFIGURABLE_LENGTH && options && hasOwn(options, "arity") && value.length !== options.arity) { + defineProperty(value, "length", { value: options.arity }); + } + try { + if (options && hasOwn(options, "constructor") && options.constructor) { + if (DESCRIPTORS) + defineProperty(value, "prototype", { writable: false }); + } else if (value.prototype) + value.prototype = void 0; + } catch (error) { + } + var state = enforceInternalState(value); + if (!hasOwn(state, "source")) { + state.source = join(TEMPLATE, typeof name == "string" ? name : ""); + } + return value; + }; + Function.prototype.toString = makeBuiltIn(function toString() { + return isCallable(this) && getInternalState(this).source || inspectSource(this); + }, "toString"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in.js +var require_define_built_in = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in.js": function(exports2, module2) { + "use strict"; + var isCallable = require_is_callable(); + var definePropertyModule = require_object_define_property(); + var makeBuiltIn = require_make_built_in(); + var defineGlobalProperty = require_define_global_property(); + module2.exports = function(O, key, value, options) { + if (!options) + options = {}; + var simple = options.enumerable; + var name = options.name !== void 0 ? options.name : key; + if (isCallable(value)) + makeBuiltIn(value, name, options); + if (options.global) { + if (simple) + O[key] = value; + else + defineGlobalProperty(key, value); + } else { + try { + if (!options.unsafe) + delete O[key]; + else if (O[key]) + simple = true; + } catch (error) { + } + if (simple) + O[key] = value; + else + definePropertyModule.f(O, key, { + value: value, + enumerable: false, + configurable: !options.nonConfigurable, + writable: !options.nonWritable + }); + } + return O; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/math-trunc.js +var require_math_trunc = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/math-trunc.js": function(exports2, module2) { + "use strict"; + var ceil = Math.ceil; + var floor = Math.floor; + module2.exports = Math.trunc || function trunc(x) { + var n = +x; + return (n > 0 ? floor : ceil)(n); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-integer-or-infinity.js +var require_to_integer_or_infinity = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-integer-or-infinity.js": function(exports2, module2) { + "use strict"; + var trunc = require_math_trunc(); + module2.exports = function(argument) { + var number = +argument; + return number !== number || number === 0 ? 0 : trunc(number); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-absolute-index.js +var require_to_absolute_index = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-absolute-index.js": function(exports2, module2) { + "use strict"; + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var max = Math.max; + var min = Math.min; + module2.exports = function(index, length) { + var integer = toIntegerOrInfinity(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-length.js +var require_to_length = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-length.js": function(exports2, module2) { + "use strict"; + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var min = Math.min; + module2.exports = function(argument) { + var len = toIntegerOrInfinity(argument); + return len > 0 ? min(len, 9007199254740991) : 0; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/length-of-array-like.js +var require_length_of_array_like = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/length-of-array-like.js": function(exports2, module2) { + "use strict"; + var toLength = require_to_length(); + module2.exports = function(obj) { + return toLength(obj.length); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-includes.js +var require_array_includes = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-includes.js": function(exports2, module2) { + "use strict"; + var toIndexedObject = require_to_indexed_object(); + var toAbsoluteIndex = require_to_absolute_index(); + var lengthOfArrayLike = require_length_of_array_like(); + var createMethod = function(IS_INCLUDES) { + return function($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = lengthOfArrayLike(O); + if (length === 0) + return !IS_INCLUDES && -1; + var index = toAbsoluteIndex(fromIndex, length); + var value; + if (IS_INCLUDES && el !== el) + while (length > index) { + value = O[index++]; + if (value !== value) + return true; + } + else + for (; length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) + return IS_INCLUDES || index || 0; + } + return !IS_INCLUDES && -1; + }; + }; + module2.exports = { + // `Array.prototype.includes` method + // https://tc39.es/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys-internal.js +var require_object_keys_internal = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys-internal.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var hasOwn = require_has_own_property(); + var toIndexedObject = require_to_indexed_object(); + var indexOf = require_array_includes().indexOf; + var hiddenKeys = require_hidden_keys(); + var push = uncurryThis([].push); + module2.exports = function(object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) + !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key); + while (names.length > i) + if (hasOwn(O, key = names[i++])) { + ~indexOf(result, key) || push(result, key); + } + return result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/enum-bug-keys.js +var require_enum_bug_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/enum-bug-keys.js": function(exports2, module2) { + "use strict"; + module2.exports = [ + "constructor", + "hasOwnProperty", + "isPrototypeOf", + "propertyIsEnumerable", + "toLocaleString", + "toString", + "valueOf" + ]; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names.js +var require_object_get_own_property_names = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names.js": function(exports2) { + "use strict"; + var internalObjectKeys = require_object_keys_internal(); + var enumBugKeys = require_enum_bug_keys(); + var hiddenKeys = enumBugKeys.concat("length", "prototype"); + exports2.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-symbols.js +var require_object_get_own_property_symbols = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-symbols.js": function(exports2) { + "use strict"; + exports2.f = Object.getOwnPropertySymbols; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/own-keys.js +var require_own_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/own-keys.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var uncurryThis = require_function_uncurry_this(); + var getOwnPropertyNamesModule = require_object_get_own_property_names(); + var getOwnPropertySymbolsModule = require_object_get_own_property_symbols(); + var anObject = require_an_object(); + var concat = uncurryThis([].concat); + module2.exports = getBuiltIn("Reflect", "ownKeys") || function ownKeys(it) { + var keys = getOwnPropertyNamesModule.f(anObject(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/copy-constructor-properties.js +var require_copy_constructor_properties = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/copy-constructor-properties.js": function(exports2, module2) { + "use strict"; + var hasOwn = require_has_own_property(); + var ownKeys = require_own_keys(); + var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor(); + var definePropertyModule = require_object_define_property(); + module2.exports = function(target, source, exceptions) { + var keys = ownKeys(source); + var defineProperty = definePropertyModule.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) { + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-forced.js +var require_is_forced = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-forced.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var isCallable = require_is_callable(); + var replacement = /#|\.prototype\./; + var isForced = function(feature, detection) { + var value = data[normalize(feature)]; + return value === POLYFILL ? true : value === NATIVE ? false : isCallable(detection) ? fails(detection) : !!detection; + }; + var normalize = isForced.normalize = function(string) { + return String(string).replace(replacement, ".").toLowerCase(); + }; + var data = isForced.data = {}; + var NATIVE = isForced.NATIVE = "N"; + var POLYFILL = isForced.POLYFILL = "P"; + module2.exports = isForced; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/export.js +var require_export = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/export.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var defineBuiltIn = require_define_built_in(); + var defineGlobalProperty = require_define_global_property(); + var copyConstructorProperties = require_copy_constructor_properties(); + var isForced = require_is_forced(); + module2.exports = function(options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global2; + } else if (STATIC) { + target = global2[TARGET] || defineGlobalProperty(TARGET, {}); + } else { + target = global2[TARGET] && global2[TARGET].prototype; + } + if (target) + for (key in source) { + sourceProperty = source[key]; + if (options.dontCallGetSet) { + descriptor = getOwnPropertyDescriptor(target, key); + targetProperty = descriptor && descriptor.value; + } else + targetProperty = target[key]; + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? "." : "#") + key, options.forced); + if (!FORCED && targetProperty !== void 0) { + if (typeof sourceProperty == typeof targetProperty) + continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + if (options.sham || targetProperty && targetProperty.sham) { + createNonEnumerableProperty(sourceProperty, "sham", true); + } + defineBuiltIn(target, key, sourceProperty, options); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string-tag-support.js +var require_to_string_tag_support = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string-tag-support.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + var test = {}; + test[TO_STRING_TAG] = "z"; + module2.exports = String(test) === "[object z]"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof.js +var require_classof = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof.js": function(exports2, module2) { + "use strict"; + var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); + var isCallable = require_is_callable(); + var classofRaw = require_classof_raw(); + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + var $Object = Object; + var CORRECT_ARGUMENTS = classofRaw(/* @__PURE__ */ function() { + return arguments; + }()) === "Arguments"; + var tryGet = function(it, key) { + try { + return it[key]; + } catch (error) { + } + }; + module2.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function(it) { + var O, tag, result; + return it === void 0 ? "Undefined" : it === null ? "Null" : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == "string" ? tag : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) === "Object" && isCallable(O.callee) ? "Arguments" : result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string.js +var require_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string.js": function(exports2, module2) { + "use strict"; + var classof = require_classof(); + var $String = String; + module2.exports = function(argument) { + if (classof(argument) === "Symbol") + throw new TypeError("Cannot convert a Symbol value to a string"); + return $String(argument); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys.js +var require_object_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys.js": function(exports2, module2) { + "use strict"; + var internalObjectKeys = require_object_keys_internal(); + var enumBugKeys = require_enum_bug_keys(); + module2.exports = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-properties.js +var require_object_define_properties = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-properties.js": function(exports2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug(); + var definePropertyModule = require_object_define_property(); + var anObject = require_an_object(); + var toIndexedObject = require_to_indexed_object(); + var objectKeys = require_object_keys(); + exports2.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var props = toIndexedObject(Properties); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) + definePropertyModule.f(O, key = keys[index++], props[key]); + return O; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/html.js +var require_html = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/html.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + module2.exports = getBuiltIn("document", "documentElement"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-create.js +var require_object_create = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-create.js": function(exports2, module2) { + "use strict"; + var anObject = require_an_object(); + var definePropertiesModule = require_object_define_properties(); + var enumBugKeys = require_enum_bug_keys(); + var hiddenKeys = require_hidden_keys(); + var html = require_html(); + var documentCreateElement = require_document_create_element(); + var sharedKey = require_shared_key(); + var GT = ">"; + var LT = "<"; + var PROTOTYPE = "prototype"; + var SCRIPT = "script"; + var IE_PROTO = sharedKey("IE_PROTO"); + var EmptyConstructor = function() { + }; + var scriptTag = function(content) { + return LT + SCRIPT + GT + content + LT + "/" + SCRIPT + GT; + }; + var NullProtoObjectViaActiveX = function(activeXDocument2) { + activeXDocument2.write(scriptTag("")); + activeXDocument2.close(); + var temp = activeXDocument2.parentWindow.Object; + activeXDocument2 = null; + return temp; + }; + var NullProtoObjectViaIFrame = function() { + var iframe = documentCreateElement("iframe"); + var JS = "java" + SCRIPT + ":"; + var iframeDocument; + iframe.style.display = "none"; + html.appendChild(iframe); + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag("document.F=Object")); + iframeDocument.close(); + return iframeDocument.F; + }; + var activeXDocument; + var NullProtoObject = function() { + try { + activeXDocument = new ActiveXObject("htmlfile"); + } catch (error) { + } + NullProtoObject = typeof document != "undefined" ? document.domain && activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame() : NullProtoObjectViaActiveX(activeXDocument); + var length = enumBugKeys.length; + while (length--) + delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); + }; + hiddenKeys[IE_PROTO] = true; + module2.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + result[IE_PROTO] = O; + } else + result = NullProtoObject(); + return Properties === void 0 ? result : definePropertiesModule.f(result, Properties); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-slice.js +var require_array_slice = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-slice.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + module2.exports = uncurryThis([].slice); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names-external.js +var require_object_get_own_property_names_external = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names-external.js": function(exports2, module2) { + "use strict"; + var classof = require_classof_raw(); + var toIndexedObject = require_to_indexed_object(); + var $getOwnPropertyNames = require_object_get_own_property_names().f; + var arraySlice = require_array_slice(); + var windowNames = typeof window == "object" && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : []; + var getWindowNames = function(it) { + try { + return $getOwnPropertyNames(it); + } catch (error) { + return arraySlice(windowNames); + } + }; + module2.exports.f = function getOwnPropertyNames(it) { + return windowNames && classof(it) === "Window" ? getWindowNames(it) : $getOwnPropertyNames(toIndexedObject(it)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in-accessor.js +var require_define_built_in_accessor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in-accessor.js": function(exports2, module2) { + "use strict"; + var makeBuiltIn = require_make_built_in(); + var defineProperty = require_object_define_property(); + module2.exports = function(target, name, descriptor) { + if (descriptor.get) + makeBuiltIn(descriptor.get, name, { getter: true }); + if (descriptor.set) + makeBuiltIn(descriptor.set, name, { setter: true }); + return defineProperty.f(target, name, descriptor); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-wrapped.js +var require_well_known_symbol_wrapped = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-wrapped.js": function(exports2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + exports2.f = wellKnownSymbol; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/path.js +var require_path = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/path.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + module2.exports = global2; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-define.js +var require_well_known_symbol_define = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-define.js": function(exports2, module2) { + "use strict"; + var path = require_path(); + var hasOwn = require_has_own_property(); + var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped(); + var defineProperty = require_object_define_property().f; + module2.exports = function(NAME) { + var Symbol2 = path.Symbol || (path.Symbol = {}); + if (!hasOwn(Symbol2, NAME)) + defineProperty(Symbol2, NAME, { + value: wrappedWellKnownSymbolModule.f(NAME) + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-define-to-primitive.js +var require_symbol_define_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-define-to-primitive.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var getBuiltIn = require_get_built_in(); + var wellKnownSymbol = require_well_known_symbol(); + var defineBuiltIn = require_define_built_in(); + module2.exports = function() { + var Symbol2 = getBuiltIn("Symbol"); + var SymbolPrototype = Symbol2 && Symbol2.prototype; + var valueOf = SymbolPrototype && SymbolPrototype.valueOf; + var TO_PRIMITIVE = wellKnownSymbol("toPrimitive"); + if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) { + defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function(hint) { + return call(valueOf, this); + }, { arity: 1 }); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/set-to-string-tag.js +var require_set_to_string_tag = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/set-to-string-tag.js": function(exports2, module2) { + "use strict"; + var defineProperty = require_object_define_property().f; + var hasOwn = require_has_own_property(); + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + module2.exports = function(target, TAG, STATIC) { + if (target && !STATIC) + target = target.prototype; + if (target && !hasOwn(target, TO_STRING_TAG)) { + defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG }); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-clause.js +var require_function_uncurry_this_clause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-clause.js": function(exports2, module2) { + "use strict"; + var classofRaw = require_classof_raw(); + var uncurryThis = require_function_uncurry_this(); + module2.exports = function(fn) { + if (classofRaw(fn) === "Function") + return uncurryThis(fn); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-context.js +var require_function_bind_context = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-context.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this_clause(); + var aCallable = require_a_callable(); + var NATIVE_BIND = require_function_bind_native(); + var bind = uncurryThis(uncurryThis.bind); + module2.exports = function(fn, that) { + aCallable(fn); + return that === void 0 ? fn : NATIVE_BIND ? bind(fn, that) : function() { + return fn.apply(that, arguments); + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array.js +var require_is_array = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array.js": function(exports2, module2) { + "use strict"; + var classof = require_classof_raw(); + module2.exports = Array.isArray || function isArray(argument) { + return classof(argument) === "Array"; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-constructor.js +var require_is_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-constructor.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var isCallable = require_is_callable(); + var classof = require_classof(); + var getBuiltIn = require_get_built_in(); + var inspectSource = require_inspect_source(); + var noop = function() { + }; + var construct = getBuiltIn("Reflect", "construct"); + var constructorRegExp = /^\s*(?:class|function)\b/; + var exec = uncurryThis(constructorRegExp.exec); + var INCORRECT_TO_STRING = !constructorRegExp.test(noop); + var isConstructorModern = function isConstructor(argument) { + if (!isCallable(argument)) + return false; + try { + construct(noop, [], argument); + return true; + } catch (error) { + return false; + } + }; + var isConstructorLegacy = function isConstructor(argument) { + if (!isCallable(argument)) + return false; + switch (classof(argument)) { + case "AsyncFunction": + case "GeneratorFunction": + case "AsyncGeneratorFunction": + return false; + } + try { + return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument)); + } catch (error) { + return true; + } + }; + isConstructorLegacy.sham = true; + module2.exports = !construct || fails(function() { + var called; + return isConstructorModern(isConstructorModern.call) || !isConstructorModern(Object) || !isConstructorModern(function() { + called = true; + }) || called; + }) ? isConstructorLegacy : isConstructorModern; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-constructor.js +var require_array_species_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-constructor.js": function(exports2, module2) { + "use strict"; + var isArray = require_is_array(); + var isConstructor = require_is_constructor(); + var isObject = require_is_object(); + var wellKnownSymbol = require_well_known_symbol(); + var SPECIES = wellKnownSymbol("species"); + var $Array = Array; + module2.exports = function(originalArray) { + var C; + if (isArray(originalArray)) { + C = originalArray.constructor; + if (isConstructor(C) && (C === $Array || isArray(C.prototype))) + C = void 0; + else if (isObject(C)) { + C = C[SPECIES]; + if (C === null) + C = void 0; + } + } + return C === void 0 ? $Array : C; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-create.js +var require_array_species_create = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-create.js": function(exports2, module2) { + "use strict"; + var arraySpeciesConstructor = require_array_species_constructor(); + module2.exports = function(originalArray, length) { + return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-iteration.js +var require_array_iteration = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-iteration.js": function(exports2, module2) { + "use strict"; + var bind = require_function_bind_context(); + var uncurryThis = require_function_uncurry_this(); + var IndexedObject = require_indexed_object(); + var toObject = require_to_object(); + var lengthOfArrayLike = require_length_of_array_like(); + var arraySpeciesCreate = require_array_species_create(); + var push = uncurryThis([].push); + var createMethod = function(TYPE) { + var IS_MAP = TYPE === 1; + var IS_FILTER = TYPE === 2; + var IS_SOME = TYPE === 3; + var IS_EVERY = TYPE === 4; + var IS_FIND_INDEX = TYPE === 6; + var IS_FILTER_REJECT = TYPE === 7; + var NO_HOLES = TYPE === 5 || IS_FIND_INDEX; + return function($this, callbackfn, that, specificCreate) { + var O = toObject($this); + var self2 = IndexedObject(O); + var length = lengthOfArrayLike(self2); + var boundFunction = bind(callbackfn, that); + var index = 0; + var create = specificCreate || arraySpeciesCreate; + var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : void 0; + var value, result; + for (; length > index; index++) + if (NO_HOLES || index in self2) { + value = self2[index]; + result = boundFunction(value, index, O); + if (TYPE) { + if (IS_MAP) + target[index] = result; + else if (result) + switch (TYPE) { + case 3: + return true; + case 5: + return value; + case 6: + return index; + case 2: + push(target, value); + } + else + switch (TYPE) { + case 4: + return false; + case 7: + push(target, value); + } + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; + }; + module2.exports = { + // `Array.prototype.forEach` method + // https://tc39.es/ecma262/#sec-array.prototype.foreach + forEach: createMethod(0), + // `Array.prototype.map` method + // https://tc39.es/ecma262/#sec-array.prototype.map + map: createMethod(1), + // `Array.prototype.filter` method + // https://tc39.es/ecma262/#sec-array.prototype.filter + filter: createMethod(2), + // `Array.prototype.some` method + // https://tc39.es/ecma262/#sec-array.prototype.some + some: createMethod(3), + // `Array.prototype.every` method + // https://tc39.es/ecma262/#sec-array.prototype.every + every: createMethod(4), + // `Array.prototype.find` method + // https://tc39.es/ecma262/#sec-array.prototype.find + find: createMethod(5), + // `Array.prototype.findIndex` method + // https://tc39.es/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod(6), + // `Array.prototype.filterReject` method + // https://github.com/tc39/proposal-array-filtering + filterReject: createMethod(7) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.constructor.js +var require_es_symbol_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.constructor.js": function() { + "use strict"; + var $ = require_export(); + var global2 = require_global(); + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var IS_PURE = require_is_pure(); + var DESCRIPTORS = require_descriptors(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var fails = require_fails(); + var hasOwn = require_has_own_property(); + var isPrototypeOf = require_object_is_prototype_of(); + var anObject = require_an_object(); + var toIndexedObject = require_to_indexed_object(); + var toPropertyKey = require_to_property_key(); + var $toString = require_to_string(); + var createPropertyDescriptor = require_create_property_descriptor(); + var nativeObjectCreate = require_object_create(); + var objectKeys = require_object_keys(); + var getOwnPropertyNamesModule = require_object_get_own_property_names(); + var getOwnPropertyNamesExternal = require_object_get_own_property_names_external(); + var getOwnPropertySymbolsModule = require_object_get_own_property_symbols(); + var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor(); + var definePropertyModule = require_object_define_property(); + var definePropertiesModule = require_object_define_properties(); + var propertyIsEnumerableModule = require_object_property_is_enumerable(); + var defineBuiltIn = require_define_built_in(); + var defineBuiltInAccessor = require_define_built_in_accessor(); + var shared = require_shared(); + var sharedKey = require_shared_key(); + var hiddenKeys = require_hidden_keys(); + var uid = require_uid(); + var wellKnownSymbol = require_well_known_symbol(); + var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped(); + var defineWellKnownSymbol = require_well_known_symbol_define(); + var defineSymbolToPrimitive = require_symbol_define_to_primitive(); + var setToStringTag = require_set_to_string_tag(); + var InternalStateModule = require_internal_state(); + var $forEach = require_array_iteration().forEach; + var HIDDEN = sharedKey("hidden"); + var SYMBOL = "Symbol"; + var PROTOTYPE = "prototype"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(SYMBOL); + var ObjectPrototype = Object[PROTOTYPE]; + var $Symbol = global2.Symbol; + var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE]; + var RangeError = global2.RangeError; + var TypeError2 = global2.TypeError; + var QObject = global2.QObject; + var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + var nativeDefineProperty = definePropertyModule.f; + var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f; + var nativePropertyIsEnumerable = propertyIsEnumerableModule.f; + var push = uncurryThis([].push); + var AllSymbols = shared("symbols"); + var ObjectPrototypeSymbols = shared("op-symbols"); + var WellKnownSymbolsStore = shared("wks"); + var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; + var fallbackDefineProperty = function(O, P, Attributes) { + var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P); + if (ObjectPrototypeDescriptor) + delete ObjectPrototype[P]; + nativeDefineProperty(O, P, Attributes); + if (ObjectPrototypeDescriptor && O !== ObjectPrototype) { + nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor); + } + }; + var setSymbolDescriptor = DESCRIPTORS && fails(function() { + return nativeObjectCreate(nativeDefineProperty({}, "a", { + get: function() { + return nativeDefineProperty(this, "a", { value: 7 }).a; + } + })).a !== 7; + }) ? fallbackDefineProperty : nativeDefineProperty; + var wrap = function(tag, description) { + var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype); + setInternalState(symbol, { + type: SYMBOL, + tag: tag, + description: description + }); + if (!DESCRIPTORS) + symbol.description = description; + return symbol; + }; + var $defineProperty = function defineProperty(O, P, Attributes) { + if (O === ObjectPrototype) + $defineProperty(ObjectPrototypeSymbols, P, Attributes); + anObject(O); + var key = toPropertyKey(P); + anObject(Attributes); + if (hasOwn(AllSymbols, key)) { + if (!Attributes.enumerable) { + if (!hasOwn(O, HIDDEN)) + nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, nativeObjectCreate(null))); + O[HIDDEN][key] = true; + } else { + if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) + O[HIDDEN][key] = false; + Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) }); + } + return setSymbolDescriptor(O, key, Attributes); + } + return nativeDefineProperty(O, key, Attributes); + }; + var $defineProperties = function defineProperties(O, Properties) { + anObject(O); + var properties = toIndexedObject(Properties); + var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties)); + $forEach(keys, function(key) { + if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) + $defineProperty(O, key, properties[key]); + }); + return O; + }; + var $create = function create(O, Properties) { + return Properties === void 0 ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties); + }; + var $propertyIsEnumerable = function propertyIsEnumerable(V) { + var P = toPropertyKey(V); + var enumerable = call(nativePropertyIsEnumerable, this, P); + if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) + return false; + return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true; + }; + var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) { + var it = toIndexedObject(O); + var key = toPropertyKey(P); + if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) + return; + var descriptor = nativeGetOwnPropertyDescriptor(it, key); + if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) { + descriptor.enumerable = true; + } + return descriptor; + }; + var $getOwnPropertyNames = function getOwnPropertyNames(O) { + var names = nativeGetOwnPropertyNames(toIndexedObject(O)); + var result = []; + $forEach(names, function(key) { + if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) + push(result, key); + }); + return result; + }; + var $getOwnPropertySymbols = function(O) { + var IS_OBJECT_PROTOTYPE = O === ObjectPrototype; + var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O)); + var result = []; + $forEach(names, function(key) { + if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) { + push(result, AllSymbols[key]); + } + }); + return result; + }; + if (!NATIVE_SYMBOL) { + $Symbol = function Symbol2() { + if (isPrototypeOf(SymbolPrototype, this)) + throw new TypeError2("Symbol is not a constructor"); + var description = !arguments.length || arguments[0] === void 0 ? void 0 : $toString(arguments[0]); + var tag = uid(description); + var setter = function(value) { + var $this = this === void 0 ? global2 : this; + if ($this === ObjectPrototype) + call(setter, ObjectPrototypeSymbols, value); + if (hasOwn($this, HIDDEN) && hasOwn($this[HIDDEN], tag)) + $this[HIDDEN][tag] = false; + var descriptor = createPropertyDescriptor(1, value); + try { + setSymbolDescriptor($this, tag, descriptor); + } catch (error) { + if (!(error instanceof RangeError)) + throw error; + fallbackDefineProperty($this, tag, descriptor); + } + }; + if (DESCRIPTORS && USE_SETTER) + setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter }); + return wrap(tag, description); + }; + SymbolPrototype = $Symbol[PROTOTYPE]; + defineBuiltIn(SymbolPrototype, "toString", function toString() { + return getInternalState(this).tag; + }); + defineBuiltIn($Symbol, "withoutSetter", function(description) { + return wrap(uid(description), description); + }); + propertyIsEnumerableModule.f = $propertyIsEnumerable; + definePropertyModule.f = $defineProperty; + definePropertiesModule.f = $defineProperties; + getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor; + getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames; + getOwnPropertySymbolsModule.f = $getOwnPropertySymbols; + wrappedWellKnownSymbolModule.f = function(name) { + return wrap(wellKnownSymbol(name), name); + }; + if (DESCRIPTORS) { + defineBuiltInAccessor(SymbolPrototype, "description", { + configurable: true, + get: function description() { + return getInternalState(this).description; + } + }); + if (!IS_PURE) { + defineBuiltIn(ObjectPrototype, "propertyIsEnumerable", $propertyIsEnumerable, { unsafe: true }); + } + } + } + $({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, { + Symbol: $Symbol + }); + $forEach(objectKeys(WellKnownSymbolsStore), function(name) { + defineWellKnownSymbol(name); + }); + $({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, { + useSetter: function() { + USE_SETTER = true; + }, + useSimple: function() { + USE_SETTER = false; + } + }); + $({ target: "Object", stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, { + // `Object.create` method + // https://tc39.es/ecma262/#sec-object.create + create: $create, + // `Object.defineProperty` method + // https://tc39.es/ecma262/#sec-object.defineproperty + defineProperty: $defineProperty, + // `Object.defineProperties` method + // https://tc39.es/ecma262/#sec-object.defineproperties + defineProperties: $defineProperties, + // `Object.getOwnPropertyDescriptor` method + // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors + getOwnPropertyDescriptor: $getOwnPropertyDescriptor + }); + $({ target: "Object", stat: true, forced: !NATIVE_SYMBOL }, { + // `Object.getOwnPropertyNames` method + // https://tc39.es/ecma262/#sec-object.getownpropertynames + getOwnPropertyNames: $getOwnPropertyNames + }); + defineSymbolToPrimitive(); + setToStringTag($Symbol, SYMBOL); + hiddenKeys[HIDDEN] = true; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-registry-detection.js +var require_symbol_registry_detection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-registry-detection.js": function(exports2, module2) { + "use strict"; + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + module2.exports = NATIVE_SYMBOL && !!Symbol["for"] && !!Symbol.keyFor; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.for.js +var require_es_symbol_for = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.for.js": function() { + "use strict"; + var $ = require_export(); + var getBuiltIn = require_get_built_in(); + var hasOwn = require_has_own_property(); + var toString = require_to_string(); + var shared = require_shared(); + var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection(); + var StringToSymbolRegistry = shared("string-to-symbol-registry"); + var SymbolToStringRegistry = shared("symbol-to-string-registry"); + $({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, { + "for": function(key) { + var string = toString(key); + if (hasOwn(StringToSymbolRegistry, string)) + return StringToSymbolRegistry[string]; + var symbol = getBuiltIn("Symbol")(string); + StringToSymbolRegistry[string] = symbol; + SymbolToStringRegistry[symbol] = string; + return symbol; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.key-for.js +var require_es_symbol_key_for = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.key-for.js": function() { + "use strict"; + var $ = require_export(); + var hasOwn = require_has_own_property(); + var isSymbol = require_is_symbol(); + var tryToString = require_try_to_string(); + var shared = require_shared(); + var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection(); + var SymbolToStringRegistry = shared("symbol-to-string-registry"); + $({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, { + keyFor: function keyFor(sym) { + if (!isSymbol(sym)) + throw new TypeError(tryToString(sym) + " is not a symbol"); + if (hasOwn(SymbolToStringRegistry, sym)) + return SymbolToStringRegistry[sym]; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-apply.js +var require_function_apply = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-apply.js": function(exports2, module2) { + "use strict"; + var NATIVE_BIND = require_function_bind_native(); + var FunctionPrototype = Function.prototype; + var apply = FunctionPrototype.apply; + var call = FunctionPrototype.call; + module2.exports = typeof Reflect == "object" && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function() { + return call.apply(apply, arguments); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-json-replacer-function.js +var require_get_json_replacer_function = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-json-replacer-function.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var isArray = require_is_array(); + var isCallable = require_is_callable(); + var classof = require_classof_raw(); + var toString = require_to_string(); + var push = uncurryThis([].push); + module2.exports = function(replacer) { + if (isCallable(replacer)) + return replacer; + if (!isArray(replacer)) + return; + var rawLength = replacer.length; + var keys = []; + for (var i = 0; i < rawLength; i++) { + var element = replacer[i]; + if (typeof element == "string") + push(keys, element); + else if (typeof element == "number" || classof(element) === "Number" || classof(element) === "String") + push(keys, toString(element)); + } + var keysLength = keys.length; + var root = true; + return function(key, value) { + if (root) { + root = false; + return value; + } + if (isArray(this)) + return value; + for (var j = 0; j < keysLength; j++) + if (keys[j] === key) + return value; + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.json.stringify.js +var require_es_json_stringify = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.json.stringify.js": function() { + "use strict"; + var $ = require_export(); + var getBuiltIn = require_get_built_in(); + var apply = require_function_apply(); + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var isCallable = require_is_callable(); + var isSymbol = require_is_symbol(); + var arraySlice = require_array_slice(); + var getReplacerFunction = require_get_json_replacer_function(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var $String = String; + var $stringify = getBuiltIn("JSON", "stringify"); + var exec = uncurryThis(/./.exec); + var charAt = uncurryThis("".charAt); + var charCodeAt = uncurryThis("".charCodeAt); + var replace = uncurryThis("".replace); + var numberToString = uncurryThis(1 .toString); + var tester = /[\uD800-\uDFFF]/g; + var low = /^[\uD800-\uDBFF]$/; + var hi = /^[\uDC00-\uDFFF]$/; + var WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function() { + var symbol = getBuiltIn("Symbol")("stringify detection"); + return $stringify([symbol]) !== "[null]" || $stringify({ a: symbol }) !== "{}" || $stringify(Object(symbol)) !== "{}"; + }); + var ILL_FORMED_UNICODE = fails(function() { + return $stringify("\uDF06\uD834") !== '"\\udf06\\ud834"' || $stringify("\uDEAD") !== '"\\udead"'; + }); + var stringifyWithSymbolsFix = function(it, replacer) { + var args = arraySlice(arguments); + var $replacer = getReplacerFunction(replacer); + if (!isCallable($replacer) && (it === void 0 || isSymbol(it))) + return; + args[1] = function(key, value) { + if (isCallable($replacer)) + value = call($replacer, this, $String(key), value); + if (!isSymbol(value)) + return value; + }; + return apply($stringify, null, args); + }; + var fixIllFormed = function(match, offset, string) { + var prev = charAt(string, offset - 1); + var next = charAt(string, offset + 1); + if (exec(low, match) && !exec(hi, next) || exec(hi, match) && !exec(low, prev)) { + return "\\u" + numberToString(charCodeAt(match, 0), 16); + } + return match; + }; + if ($stringify) { + $({ target: "JSON", stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + stringify: function stringify(it, replacer, space) { + var args = arraySlice(arguments); + var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args); + return ILL_FORMED_UNICODE && typeof result == "string" ? replace(result, tester, fixIllFormed) : result; + } + }); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-symbols.js +var require_es_object_get_own_property_symbols = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-symbols.js": function() { + "use strict"; + var $ = require_export(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var fails = require_fails(); + var getOwnPropertySymbolsModule = require_object_get_own_property_symbols(); + var toObject = require_to_object(); + var FORCED = !NATIVE_SYMBOL || fails(function() { + getOwnPropertySymbolsModule.f(1); + }); + $({ target: "Object", stat: true, forced: FORCED }, { + getOwnPropertySymbols: function getOwnPropertySymbols(it) { + var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : []; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.js +var require_es_symbol = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.js": function() { + "use strict"; + require_es_symbol_constructor(); + require_es_symbol_for(); + require_es_symbol_key_for(); + require_es_json_stringify(); + require_es_object_get_own_property_symbols(); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.description.js +var require_es_symbol_description = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.description.js": function() { + "use strict"; + var $ = require_export(); + var DESCRIPTORS = require_descriptors(); + var global2 = require_global(); + var uncurryThis = require_function_uncurry_this(); + var hasOwn = require_has_own_property(); + var isCallable = require_is_callable(); + var isPrototypeOf = require_object_is_prototype_of(); + var toString = require_to_string(); + var defineBuiltInAccessor = require_define_built_in_accessor(); + var copyConstructorProperties = require_copy_constructor_properties(); + var NativeSymbol = global2.Symbol; + var SymbolPrototype = NativeSymbol && NativeSymbol.prototype; + if (DESCRIPTORS && isCallable(NativeSymbol) && (!("description" in SymbolPrototype) || // Safari 12 bug + NativeSymbol().description !== void 0)) { + EmptyStringDescriptionStore = {}; + SymbolWrapper = function Symbol2() { + var description = arguments.length < 1 || arguments[0] === void 0 ? void 0 : toString(arguments[0]); + var result = isPrototypeOf(SymbolPrototype, this) ? new NativeSymbol(description) : description === void 0 ? NativeSymbol() : NativeSymbol(description); + if (description === "") + EmptyStringDescriptionStore[result] = true; + return result; + }; + copyConstructorProperties(SymbolWrapper, NativeSymbol); + SymbolWrapper.prototype = SymbolPrototype; + SymbolPrototype.constructor = SymbolWrapper; + NATIVE_SYMBOL = String(NativeSymbol("description detection")) === "Symbol(description detection)"; + thisSymbolValue = uncurryThis(SymbolPrototype.valueOf); + symbolDescriptiveString = uncurryThis(SymbolPrototype.toString); + regexp = /^Symbol\((.*)\)[^)]+$/; + replace = uncurryThis("".replace); + stringSlice = uncurryThis("".slice); + defineBuiltInAccessor(SymbolPrototype, "description", { + configurable: true, + get: function description() { + var symbol = thisSymbolValue(this); + if (hasOwn(EmptyStringDescriptionStore, symbol)) + return ""; + var string = symbolDescriptiveString(symbol); + var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, "$1"); + return desc === "" ? void 0 : desc; + } + }); + $({ global: true, constructor: true, forced: true }, { + Symbol: SymbolWrapper + }); + } + var EmptyStringDescriptionStore; + var SymbolWrapper; + var NATIVE_SYMBOL; + var thisSymbolValue; + var symbolDescriptiveString; + var regexp; + var replace; + var stringSlice; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.iterator.js +var require_es_symbol_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.iterator.js": function() { + "use strict"; + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("iterator"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-accessor.js +var require_function_uncurry_this_accessor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-accessor.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var aCallable = require_a_callable(); + module2.exports = function(object, key, method) { + try { + return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method])); + } catch (error) { + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-possible-prototype.js +var require_is_possible_prototype = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-possible-prototype.js": function(exports2, module2) { + "use strict"; + var isObject = require_is_object(); + module2.exports = function(argument) { + return isObject(argument) || argument === null; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-possible-prototype.js +var require_a_possible_prototype = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-possible-prototype.js": function(exports2, module2) { + "use strict"; + var isPossiblePrototype = require_is_possible_prototype(); + var $String = String; + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isPossiblePrototype(argument)) + return argument; + throw new $TypeError("Can't set " + $String(argument) + " as a prototype"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-set-prototype-of.js +var require_object_set_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-set-prototype-of.js": function(exports2, module2) { + "use strict"; + var uncurryThisAccessor = require_function_uncurry_this_accessor(); + var anObject = require_an_object(); + var aPossiblePrototype = require_a_possible_prototype(); + module2.exports = Object.setPrototypeOf || ("__proto__" in {} ? function() { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = uncurryThisAccessor(Object.prototype, "__proto__", "set"); + setter(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { + } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) + setter(O, proto); + else + O.__proto__ = proto; + return O; + }; + }() : void 0); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/proxy-accessor.js +var require_proxy_accessor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/proxy-accessor.js": function(exports2, module2) { + "use strict"; + var defineProperty = require_object_define_property().f; + module2.exports = function(Target, Source, key) { + key in Target || defineProperty(Target, key, { + configurable: true, + get: function() { + return Source[key]; + }, + set: function(it) { + Source[key] = it; + } + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inherit-if-required.js +var require_inherit_if_required = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inherit-if-required.js": function(exports2, module2) { + "use strict"; + var isCallable = require_is_callable(); + var isObject = require_is_object(); + var setPrototypeOf = require_object_set_prototype_of(); + module2.exports = function($this, dummy, Wrapper) { + var NewTarget, NewTargetPrototype; + if ( + // it can work only with native `setPrototypeOf` + setPrototypeOf && // we haven't completely correct pre-ES6 way for getting `new.target`, so use this + isCallable(NewTarget = dummy.constructor) && NewTarget !== Wrapper && isObject(NewTargetPrototype = NewTarget.prototype) && NewTargetPrototype !== Wrapper.prototype + ) + setPrototypeOf($this, NewTargetPrototype); + return $this; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/normalize-string-argument.js +var require_normalize_string_argument = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/normalize-string-argument.js": function(exports2, module2) { + "use strict"; + var toString = require_to_string(); + module2.exports = function(argument, $default) { + return argument === void 0 ? arguments.length < 2 ? "" : $default : toString(argument); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/install-error-cause.js +var require_install_error_cause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/install-error-cause.js": function(exports2, module2) { + "use strict"; + var isObject = require_is_object(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + module2.exports = function(O, options) { + if (isObject(options) && "cause" in options) { + createNonEnumerableProperty(O, "cause", options.cause); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-clear.js +var require_error_stack_clear = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-clear.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var $Error = Error; + var replace = uncurryThis("".replace); + var TEST = function(arg) { + return String(new $Error(arg).stack); + }("zxcasd"); + var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/; + var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST); + module2.exports = function(stack, dropEntries) { + if (IS_V8_OR_CHAKRA_STACK && typeof stack == "string" && !$Error.prepareStackTrace) { + while (dropEntries--) + stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, ""); + } + return stack; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-installable.js +var require_error_stack_installable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-installable.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var createPropertyDescriptor = require_create_property_descriptor(); + module2.exports = !fails(function() { + var error = new Error("a"); + if (!("stack" in error)) + return true; + Object.defineProperty(error, "stack", createPropertyDescriptor(1, 7)); + return error.stack !== 7; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-install.js +var require_error_stack_install = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-install.js": function(exports2, module2) { + "use strict"; + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var clearErrorStack = require_error_stack_clear(); + var ERROR_STACK_INSTALLABLE = require_error_stack_installable(); + var captureStackTrace = Error.captureStackTrace; + module2.exports = function(error, C, stack, dropEntries) { + if (ERROR_STACK_INSTALLABLE) { + if (captureStackTrace) + captureStackTrace(error, C); + else + createNonEnumerableProperty(error, "stack", clearErrorStack(stack, dropEntries)); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/wrap-error-constructor-with-cause.js +var require_wrap_error_constructor_with_cause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/wrap-error-constructor-with-cause.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var hasOwn = require_has_own_property(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var isPrototypeOf = require_object_is_prototype_of(); + var setPrototypeOf = require_object_set_prototype_of(); + var copyConstructorProperties = require_copy_constructor_properties(); + var proxyAccessor = require_proxy_accessor(); + var inheritIfRequired = require_inherit_if_required(); + var normalizeStringArgument = require_normalize_string_argument(); + var installErrorCause = require_install_error_cause(); + var installErrorStack = require_error_stack_install(); + var DESCRIPTORS = require_descriptors(); + var IS_PURE = require_is_pure(); + module2.exports = function(FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) { + var STACK_TRACE_LIMIT = "stackTraceLimit"; + var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1; + var path = FULL_NAME.split("."); + var ERROR_NAME = path[path.length - 1]; + var OriginalError = getBuiltIn.apply(null, path); + if (!OriginalError) + return; + var OriginalErrorPrototype = OriginalError.prototype; + if (!IS_PURE && hasOwn(OriginalErrorPrototype, "cause")) + delete OriginalErrorPrototype.cause; + if (!FORCED) + return OriginalError; + var BaseError = getBuiltIn("Error"); + var WrappedError = wrapper(function(a, b) { + var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, void 0); + var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError(); + if (message !== void 0) + createNonEnumerableProperty(result, "message", message); + installErrorStack(result, WrappedError, result.stack, 2); + if (this && isPrototypeOf(OriginalErrorPrototype, this)) + inheritIfRequired(result, this, WrappedError); + if (arguments.length > OPTIONS_POSITION) + installErrorCause(result, arguments[OPTIONS_POSITION]); + return result; + }); + WrappedError.prototype = OriginalErrorPrototype; + if (ERROR_NAME !== "Error") { + if (setPrototypeOf) + setPrototypeOf(WrappedError, BaseError); + else + copyConstructorProperties(WrappedError, BaseError, { name: true }); + } else if (DESCRIPTORS && STACK_TRACE_LIMIT in OriginalError) { + proxyAccessor(WrappedError, OriginalError, STACK_TRACE_LIMIT); + proxyAccessor(WrappedError, OriginalError, "prepareStackTrace"); + } + copyConstructorProperties(WrappedError, OriginalError); + if (!IS_PURE) + try { + if (OriginalErrorPrototype.name !== ERROR_NAME) { + createNonEnumerableProperty(OriginalErrorPrototype, "name", ERROR_NAME); + } + OriginalErrorPrototype.constructor = WrappedError; + } catch (error) { + } + return WrappedError; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.cause.js +var require_es_error_cause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.cause.js": function() { + "use strict"; + var $ = require_export(); + var global2 = require_global(); + var apply = require_function_apply(); + var wrapErrorConstructorWithCause = require_wrap_error_constructor_with_cause(); + var WEB_ASSEMBLY = "WebAssembly"; + var WebAssembly = global2[WEB_ASSEMBLY]; + var FORCED = new Error("e", { cause: 7 }).cause !== 7; + var exportGlobalErrorCauseWrapper = function(ERROR_NAME, wrapper) { + var O = {}; + O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED); + $({ global: true, constructor: true, arity: 1, forced: FORCED }, O); + }; + var exportWebAssemblyErrorCauseWrapper = function(ERROR_NAME, wrapper) { + if (WebAssembly && WebAssembly[ERROR_NAME]) { + var O = {}; + O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + "." + ERROR_NAME, wrapper, FORCED); + $({ target: WEB_ASSEMBLY, stat: true, constructor: true, arity: 1, forced: FORCED }, O); + } + }; + exportGlobalErrorCauseWrapper("Error", function(init) { + return function Error2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("EvalError", function(init) { + return function EvalError(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("RangeError", function(init) { + return function RangeError(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("ReferenceError", function(init) { + return function ReferenceError2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("SyntaxError", function(init) { + return function SyntaxError(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("TypeError", function(init) { + return function TypeError2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("URIError", function(init) { + return function URIError(message) { + return apply(init, this, arguments); + }; + }); + exportWebAssemblyErrorCauseWrapper("CompileError", function(init) { + return function CompileError(message) { + return apply(init, this, arguments); + }; + }); + exportWebAssemblyErrorCauseWrapper("LinkError", function(init) { + return function LinkError(message) { + return apply(init, this, arguments); + }; + }); + exportWebAssemblyErrorCauseWrapper("RuntimeError", function(init) { + return function RuntimeError(message) { + return apply(init, this, arguments); + }; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-to-string.js +var require_error_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-to-string.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var fails = require_fails(); + var anObject = require_an_object(); + var normalizeStringArgument = require_normalize_string_argument(); + var nativeErrorToString = Error.prototype.toString; + var INCORRECT_TO_STRING = fails(function() { + if (DESCRIPTORS) { + var object = Object.create(Object.defineProperty({}, "name", { get: function() { + return this === object; + } })); + if (nativeErrorToString.call(object) !== "true") + return true; + } + return nativeErrorToString.call({ message: 1, name: 2 }) !== "2: 1" || nativeErrorToString.call({}) !== "Error"; + }); + module2.exports = INCORRECT_TO_STRING ? function toString() { + var O = anObject(this); + var name = normalizeStringArgument(O.name, "Error"); + var message = normalizeStringArgument(O.message); + return !name ? message : !message ? name : name + ": " + message; + } : nativeErrorToString; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.to-string.js +var require_es_error_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.to-string.js": function() { + "use strict"; + var defineBuiltIn = require_define_built_in(); + var errorToString = require_error_to_string(); + var ErrorPrototype = Error.prototype; + if (ErrorPrototype.toString !== errorToString) { + defineBuiltIn(ErrorPrototype, "toString", errorToString); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-close.js +var require_iterator_close = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-close.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var anObject = require_an_object(); + var getMethod = require_get_method(); + module2.exports = function(iterator, kind, value) { + var innerResult, innerError; + anObject(iterator); + try { + innerResult = getMethod(iterator, "return"); + if (!innerResult) { + if (kind === "throw") + throw value; + return value; + } + innerResult = call(innerResult, iterator); + } catch (error) { + innerError = true; + innerResult = error; + } + if (kind === "throw") + throw value; + if (innerError) + throw innerResult; + anObject(innerResult); + return value; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/call-with-safe-iteration-closing.js +var require_call_with_safe_iteration_closing = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/call-with-safe-iteration-closing.js": function(exports2, module2) { + "use strict"; + var anObject = require_an_object(); + var iteratorClose = require_iterator_close(); + module2.exports = function(iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); + } catch (error) { + iteratorClose(iterator, "throw", error); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators.js +var require_iterators = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators.js": function(exports2, module2) { + "use strict"; + module2.exports = {}; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array-iterator-method.js +var require_is_array_iterator_method = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array-iterator-method.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var Iterators = require_iterators(); + var ITERATOR = wellKnownSymbol("iterator"); + var ArrayPrototype = Array.prototype; + module2.exports = function(it) { + return it !== void 0 && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property.js +var require_create_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var definePropertyModule = require_object_define_property(); + var createPropertyDescriptor = require_create_property_descriptor(); + module2.exports = function(object, key, value) { + if (DESCRIPTORS) + definePropertyModule.f(object, key, createPropertyDescriptor(0, value)); + else + object[key] = value; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator-method.js +var require_get_iterator_method = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator-method.js": function(exports2, module2) { + "use strict"; + var classof = require_classof(); + var getMethod = require_get_method(); + var isNullOrUndefined = require_is_null_or_undefined(); + var Iterators = require_iterators(); + var wellKnownSymbol = require_well_known_symbol(); + var ITERATOR = wellKnownSymbol("iterator"); + module2.exports = function(it) { + if (!isNullOrUndefined(it)) + return getMethod(it, ITERATOR) || getMethod(it, "@@iterator") || Iterators[classof(it)]; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator.js +var require_get_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var aCallable = require_a_callable(); + var anObject = require_an_object(); + var tryToString = require_try_to_string(); + var getIteratorMethod = require_get_iterator_method(); + var $TypeError = TypeError; + module2.exports = function(argument, usingIterator) { + var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator; + if (aCallable(iteratorMethod)) + return anObject(call(iteratorMethod, argument)); + throw new $TypeError(tryToString(argument) + " is not iterable"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-from.js +var require_array_from = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-from.js": function(exports2, module2) { + "use strict"; + var bind = require_function_bind_context(); + var call = require_function_call(); + var toObject = require_to_object(); + var callWithSafeIterationClosing = require_call_with_safe_iteration_closing(); + var isArrayIteratorMethod = require_is_array_iterator_method(); + var isConstructor = require_is_constructor(); + var lengthOfArrayLike = require_length_of_array_like(); + var createProperty = require_create_property(); + var getIterator = require_get_iterator(); + var getIteratorMethod = require_get_iterator_method(); + var $Array = Array; + module2.exports = function from(arrayLike) { + var O = toObject(arrayLike); + var IS_CONSTRUCTOR = isConstructor(this); + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : void 0; + var mapping = mapfn !== void 0; + if (mapping) + mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : void 0); + var iteratorMethod = getIteratorMethod(O); + var index = 0; + var length, result, step, iterator, next, value; + if (iteratorMethod && !(this === $Array && isArrayIteratorMethod(iteratorMethod))) { + iterator = getIterator(O, iteratorMethod); + next = iterator.next; + result = IS_CONSTRUCTOR ? new this() : []; + for (; !(step = call(next, iterator)).done; index++) { + value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value; + createProperty(result, index, value); + } + } else { + length = lengthOfArrayLike(O); + result = IS_CONSTRUCTOR ? new this(length) : $Array(length); + for (; length > index; index++) { + value = mapping ? mapfn(O[index], index) : O[index]; + createProperty(result, index, value); + } + } + result.length = index; + return result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/check-correctness-of-iteration.js +var require_check_correctness_of_iteration = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/check-correctness-of-iteration.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var ITERATOR = wellKnownSymbol("iterator"); + var SAFE_CLOSING = false; + try { + called = 0; + iteratorWithReturn = { + next: function() { + return { done: !!called++ }; + }, + "return": function() { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function() { + return this; + }; + Array.from(iteratorWithReturn, function() { + throw 2; + }); + } catch (error) { + } + var called; + var iteratorWithReturn; + module2.exports = function(exec, SKIP_CLOSING) { + try { + if (!SKIP_CLOSING && !SAFE_CLOSING) + return false; + } catch (error) { + return false; + } + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function() { + return { + next: function() { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { + } + return ITERATION_SUPPORT; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.from.js +var require_es_array_from = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.from.js": function() { + "use strict"; + var $ = require_export(); + var from = require_array_from(); + var checkCorrectnessOfIteration = require_check_correctness_of_iteration(); + var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function(iterable) { + Array.from(iterable); + }); + $({ target: "Array", stat: true, forced: INCORRECT_ITERATION }, { + from: from + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/add-to-unscopables.js +var require_add_to_unscopables = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/add-to-unscopables.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var create = require_object_create(); + var defineProperty = require_object_define_property().f; + var UNSCOPABLES = wellKnownSymbol("unscopables"); + var ArrayPrototype = Array.prototype; + if (ArrayPrototype[UNSCOPABLES] === void 0) { + defineProperty(ArrayPrototype, UNSCOPABLES, { + configurable: true, + value: create(null) + }); + } + module2.exports = function(key) { + ArrayPrototype[UNSCOPABLES][key] = true; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/correct-prototype-getter.js +var require_correct_prototype_getter = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/correct-prototype-getter.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = !fails(function() { + function F() { + } + F.prototype.constructor = null; + return Object.getPrototypeOf(new F()) !== F.prototype; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-prototype-of.js +var require_object_get_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-prototype-of.js": function(exports2, module2) { + "use strict"; + var hasOwn = require_has_own_property(); + var isCallable = require_is_callable(); + var toObject = require_to_object(); + var sharedKey = require_shared_key(); + var CORRECT_PROTOTYPE_GETTER = require_correct_prototype_getter(); + var IE_PROTO = sharedKey("IE_PROTO"); + var $Object = Object; + var ObjectPrototype = $Object.prototype; + module2.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function(O) { + var object = toObject(O); + if (hasOwn(object, IE_PROTO)) + return object[IE_PROTO]; + var constructor = object.constructor; + if (isCallable(constructor) && object instanceof constructor) { + return constructor.prototype; + } + return object instanceof $Object ? ObjectPrototype : null; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators-core.js +var require_iterators_core = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators-core.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var isCallable = require_is_callable(); + var isObject = require_is_object(); + var create = require_object_create(); + var getPrototypeOf = require_object_get_prototype_of(); + var defineBuiltIn = require_define_built_in(); + var wellKnownSymbol = require_well_known_symbol(); + var IS_PURE = require_is_pure(); + var ITERATOR = wellKnownSymbol("iterator"); + var BUGGY_SAFARI_ITERATORS = false; + var IteratorPrototype; + var PrototypeOfArrayIteratorPrototype; + var arrayIterator; + if ([].keys) { + arrayIterator = [].keys(); + if (!("next" in arrayIterator)) + BUGGY_SAFARI_ITERATORS = true; + else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) + IteratorPrototype = PrototypeOfArrayIteratorPrototype; + } + } + var NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function() { + var test = {}; + return IteratorPrototype[ITERATOR].call(test) !== test; + }); + if (NEW_ITERATOR_PROTOTYPE) + IteratorPrototype = {}; + else if (IS_PURE) + IteratorPrototype = create(IteratorPrototype); + if (!isCallable(IteratorPrototype[ITERATOR])) { + defineBuiltIn(IteratorPrototype, ITERATOR, function() { + return this; + }); + } + module2.exports = { + IteratorPrototype: IteratorPrototype, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-create-constructor.js +var require_iterator_create_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-create-constructor.js": function(exports2, module2) { + "use strict"; + var IteratorPrototype = require_iterators_core().IteratorPrototype; + var create = require_object_create(); + var createPropertyDescriptor = require_create_property_descriptor(); + var setToStringTag = require_set_to_string_tag(); + var Iterators = require_iterators(); + var returnThis = function() { + return this; + }; + module2.exports = function(IteratorConstructor, NAME, next, ENUMERABLE_NEXT) { + var TO_STRING_TAG = NAME + " Iterator"; + IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); + Iterators[TO_STRING_TAG] = returnThis; + return IteratorConstructor; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-define.js +var require_iterator_define = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-define.js": function(exports2, module2) { + "use strict"; + var $ = require_export(); + var call = require_function_call(); + var IS_PURE = require_is_pure(); + var FunctionName = require_function_name(); + var isCallable = require_is_callable(); + var createIteratorConstructor = require_iterator_create_constructor(); + var getPrototypeOf = require_object_get_prototype_of(); + var setPrototypeOf = require_object_set_prototype_of(); + var setToStringTag = require_set_to_string_tag(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var defineBuiltIn = require_define_built_in(); + var wellKnownSymbol = require_well_known_symbol(); + var Iterators = require_iterators(); + var IteratorsCore = require_iterators_core(); + var PROPER_FUNCTION_NAME = FunctionName.PROPER; + var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE; + var IteratorPrototype = IteratorsCore.IteratorPrototype; + var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; + var ITERATOR = wellKnownSymbol("iterator"); + var KEYS = "keys"; + var VALUES = "values"; + var ENTRIES = "entries"; + var returnThis = function() { + return this; + }; + module2.exports = function(Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor(IteratorConstructor, NAME, next); + var getIterationMethod = function(KIND) { + if (KIND === DEFAULT && defaultIterator) + return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) + return IterablePrototype[KIND]; + switch (KIND) { + case KEYS: + return function keys() { + return new IteratorConstructor(this, KIND); + }; + case VALUES: + return function values() { + return new IteratorConstructor(this, KIND); + }; + case ENTRIES: + return function entries() { + return new IteratorConstructor(this, KIND); + }; + } + return function() { + return new IteratorConstructor(this); + }; + }; + var TO_STRING_TAG = NAME + " Iterator"; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR] || IterablePrototype["@@iterator"] || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME === "Array" ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); + if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) { + defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis); + } + } + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); + if (IS_PURE) + Iterators[TO_STRING_TAG] = returnThis; + } + } + if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) { + if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) { + createNonEnumerableProperty(IterablePrototype, "name", VALUES); + } else { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { + return call(nativeIterator, this); + }; + } + } + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) + for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + defineBuiltIn(IterablePrototype, KEY, methods[KEY]); + } + } + else + $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); + } + if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { + defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT }); + } + Iterators[NAME] = defaultIterator; + return methods; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-iter-result-object.js +var require_create_iter_result_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-iter-result-object.js": function(exports2, module2) { + "use strict"; + module2.exports = function(value, done) { + return { value: value, done: done }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.iterator.js +var require_es_array_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.iterator.js": function(exports2, module2) { + "use strict"; + var toIndexedObject = require_to_indexed_object(); + var addToUnscopables = require_add_to_unscopables(); + var Iterators = require_iterators(); + var InternalStateModule = require_internal_state(); + var defineProperty = require_object_define_property().f; + var defineIterator = require_iterator_define(); + var createIterResultObject = require_create_iter_result_object(); + var IS_PURE = require_is_pure(); + var DESCRIPTORS = require_descriptors(); + var ARRAY_ITERATOR = "Array Iterator"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); + module2.exports = defineIterator(Array, "Array", function(iterated, kind) { + setInternalState(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject(iterated), + // target + index: 0, + // next index + kind: kind + // kind + }); + }, function() { + var state = getInternalState(this); + var target = state.target; + var index = state.index++; + if (!target || index >= target.length) { + state.target = void 0; + return createIterResultObject(void 0, true); + } + switch (state.kind) { + case "keys": + return createIterResultObject(index, false); + case "values": + return createIterResultObject(target[index], false); + } + return createIterResultObject([index, target[index]], false); + }, "values"); + var values = Iterators.Arguments = Iterators.Array; + addToUnscopables("keys"); + addToUnscopables("values"); + addToUnscopables("entries"); + if (!IS_PURE && DESCRIPTORS && values.name !== "values") + try { + defineProperty(values, "name", { value: "values" }); + } catch (error) { + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-method-has-species-support.js +var require_array_method_has_species_support = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-method-has-species-support.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var wellKnownSymbol = require_well_known_symbol(); + var V8_VERSION = require_engine_v8_version(); + var SPECIES = wellKnownSymbol("species"); + module2.exports = function(METHOD_NAME) { + return V8_VERSION >= 51 || !fails(function() { + var array = []; + var constructor = array.constructor = {}; + constructor[SPECIES] = function() { + return { foo: 1 }; + }; + return array[METHOD_NAME](Boolean).foo !== 1; + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.slice.js +var require_es_array_slice = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.slice.js": function() { + "use strict"; + var $ = require_export(); + var isArray = require_is_array(); + var isConstructor = require_is_constructor(); + var isObject = require_is_object(); + var toAbsoluteIndex = require_to_absolute_index(); + var lengthOfArrayLike = require_length_of_array_like(); + var toIndexedObject = require_to_indexed_object(); + var createProperty = require_create_property(); + var wellKnownSymbol = require_well_known_symbol(); + var arrayMethodHasSpeciesSupport = require_array_method_has_species_support(); + var nativeSlice = require_array_slice(); + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("slice"); + var SPECIES = wellKnownSymbol("species"); + var $Array = Array; + var max = Math.max; + $({ target: "Array", proto: true, forced: !HAS_SPECIES_SUPPORT }, { + slice: function slice(start, end) { + var O = toIndexedObject(this); + var length = lengthOfArrayLike(O); + var k = toAbsoluteIndex(start, length); + var fin = toAbsoluteIndex(end === void 0 ? length : end, length); + var Constructor, result, n; + if (isArray(O)) { + Constructor = O.constructor; + if (isConstructor(Constructor) && (Constructor === $Array || isArray(Constructor.prototype))) { + Constructor = void 0; + } else if (isObject(Constructor)) { + Constructor = Constructor[SPECIES]; + if (Constructor === null) + Constructor = void 0; + } + if (Constructor === $Array || Constructor === void 0) { + return nativeSlice(O, k, fin); + } + } + result = new (Constructor === void 0 ? $Array : Constructor)(max(fin - k, 0)); + for (n = 0; k < fin; k++, n++) + if (k in O) + createProperty(result, n, O[k]); + result.length = n; + return result; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-to-string.js +var require_object_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-to-string.js": function(exports2, module2) { + "use strict"; + var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); + var classof = require_classof(); + module2.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { + return "[object " + classof(this) + "]"; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.to-string.js +var require_es_object_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.to-string.js": function() { + "use strict"; + var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); + var defineBuiltIn = require_define_built_in(); + var toString = require_object_to_string(); + if (!TO_STRING_TAG_SUPPORT) { + defineBuiltIn(Object.prototype, "toString", toString, { unsafe: true }); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-flags.js +var require_regexp_flags = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-flags.js": function(exports2, module2) { + "use strict"; + var anObject = require_an_object(); + module2.exports = function() { + var that = anObject(this); + var result = ""; + if (that.hasIndices) + result += "d"; + if (that.global) + result += "g"; + if (that.ignoreCase) + result += "i"; + if (that.multiline) + result += "m"; + if (that.dotAll) + result += "s"; + if (that.unicode) + result += "u"; + if (that.unicodeSets) + result += "v"; + if (that.sticky) + result += "y"; + return result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-sticky-helpers.js +var require_regexp_sticky_helpers = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-sticky-helpers.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var global2 = require_global(); + var $RegExp = global2.RegExp; + var UNSUPPORTED_Y = fails(function() { + var re = $RegExp("a", "y"); + re.lastIndex = 2; + return re.exec("abcd") !== null; + }); + var MISSED_STICKY = UNSUPPORTED_Y || fails(function() { + return !$RegExp("a", "y").sticky; + }); + var BROKEN_CARET = UNSUPPORTED_Y || fails(function() { + var re = $RegExp("^r", "gy"); + re.lastIndex = 2; + return re.exec("str") !== null; + }); + module2.exports = { + BROKEN_CARET: BROKEN_CARET, + MISSED_STICKY: MISSED_STICKY, + UNSUPPORTED_Y: UNSUPPORTED_Y + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-dot-all.js +var require_regexp_unsupported_dot_all = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-dot-all.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var global2 = require_global(); + var $RegExp = global2.RegExp; + module2.exports = fails(function() { + var re = $RegExp(".", "s"); + return !(re.dotAll && re.test("\n") && re.flags === "s"); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-ncg.js +var require_regexp_unsupported_ncg = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-ncg.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var global2 = require_global(); + var $RegExp = global2.RegExp; + module2.exports = fails(function() { + var re = $RegExp("(?b)", "g"); + return re.exec("b").groups.a !== "b" || "b".replace(re, "$c") !== "bc"; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-exec.js +var require_regexp_exec = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-exec.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var toString = require_to_string(); + var regexpFlags = require_regexp_flags(); + var stickyHelpers = require_regexp_sticky_helpers(); + var shared = require_shared(); + var create = require_object_create(); + var getInternalState = require_internal_state().get; + var UNSUPPORTED_DOT_ALL = require_regexp_unsupported_dot_all(); + var UNSUPPORTED_NCG = require_regexp_unsupported_ncg(); + var nativeReplace = shared("native-string-replace", String.prototype.replace); + var nativeExec = RegExp.prototype.exec; + var patchedExec = nativeExec; + var charAt = uncurryThis("".charAt); + var indexOf = uncurryThis("".indexOf); + var replace = uncurryThis("".replace); + var stringSlice = uncurryThis("".slice); + var UPDATES_LAST_INDEX_WRONG = function() { + var re1 = /a/; + var re2 = /b*/g; + call(nativeExec, re1, "a"); + call(nativeExec, re2, "a"); + return re1.lastIndex !== 0 || re2.lastIndex !== 0; + }(); + var UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET; + var NPCG_INCLUDED = /()??/.exec("")[1] !== void 0; + var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG; + if (PATCH) { + patchedExec = function exec(string) { + var re = this; + var state = getInternalState(re); + var str = toString(string); + var raw = state.raw; + var result, reCopy, lastIndex, match, i, object, group; + if (raw) { + raw.lastIndex = re.lastIndex; + result = call(patchedExec, raw, str); + re.lastIndex = raw.lastIndex; + return result; + } + var groups = state.groups; + var sticky = UNSUPPORTED_Y && re.sticky; + var flags = call(regexpFlags, re); + var source = re.source; + var charsAdded = 0; + var strCopy = str; + if (sticky) { + flags = replace(flags, "y", ""); + if (indexOf(flags, "g") === -1) { + flags += "g"; + } + strCopy = stringSlice(str, re.lastIndex); + if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== "\n")) { + source = "(?: " + source + ")"; + strCopy = " " + strCopy; + charsAdded++; + } + reCopy = new RegExp("^(?:" + source + ")", flags); + } + if (NPCG_INCLUDED) { + reCopy = new RegExp("^" + source + "$(?!\\s)", flags); + } + if (UPDATES_LAST_INDEX_WRONG) + lastIndex = re.lastIndex; + match = call(nativeExec, sticky ? reCopy : re, strCopy); + if (sticky) { + if (match) { + match.input = stringSlice(match.input, charsAdded); + match[0] = stringSlice(match[0], charsAdded); + match.index = re.lastIndex; + re.lastIndex += match[0].length; + } else + re.lastIndex = 0; + } else if (UPDATES_LAST_INDEX_WRONG && match) { + re.lastIndex = re.global ? match.index + match[0].length : lastIndex; + } + if (NPCG_INCLUDED && match && match.length > 1) { + call(nativeReplace, match[0], reCopy, function() { + for (i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === void 0) + match[i] = void 0; + } + }); + } + if (match && groups) { + match.groups = object = create(null); + for (i = 0; i < groups.length; i++) { + group = groups[i]; + object[group[0]] = match[group[1]]; + } + } + return match; + }; + } + module2.exports = patchedExec; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.exec.js +var require_es_regexp_exec = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.exec.js": function() { + "use strict"; + var $ = require_export(); + var exec = require_regexp_exec(); + $({ target: "RegExp", proto: true, forced: /./.exec !== exec }, { + exec: exec + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.test.js +var require_es_regexp_test = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.test.js": function() { + "use strict"; + require_es_regexp_exec(); + var $ = require_export(); + var call = require_function_call(); + var isCallable = require_is_callable(); + var anObject = require_an_object(); + var toString = require_to_string(); + var DELEGATES_TO_EXEC = function() { + var execCalled = false; + var re = /[ac]/; + re.exec = function() { + execCalled = true; + return /./.exec.apply(this, arguments); + }; + return re.test("abc") === true && execCalled; + }(); + var nativeTest = /./.test; + $({ target: "RegExp", proto: true, forced: !DELEGATES_TO_EXEC }, { + test: function(S) { + var R = anObject(this); + var string = toString(S); + var exec = R.exec; + if (!isCallable(exec)) + return call(nativeTest, R, string); + var result = call(exec, R, string); + if (result === null) + return false; + anObject(result); + return true; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-get-flags.js +var require_regexp_get_flags = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-get-flags.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var hasOwn = require_has_own_property(); + var isPrototypeOf = require_object_is_prototype_of(); + var regExpFlags = require_regexp_flags(); + var RegExpPrototype = RegExp.prototype; + module2.exports = function(R) { + var flags = R.flags; + return flags === void 0 && !("flags" in RegExpPrototype) && !hasOwn(R, "flags") && isPrototypeOf(RegExpPrototype, R) ? call(regExpFlags, R) : flags; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.to-string.js +var require_es_regexp_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.to-string.js": function() { + "use strict"; + var PROPER_FUNCTION_NAME = require_function_name().PROPER; + var defineBuiltIn = require_define_built_in(); + var anObject = require_an_object(); + var $toString = require_to_string(); + var fails = require_fails(); + var getRegExpFlags = require_regexp_get_flags(); + var TO_STRING = "toString"; + var RegExpPrototype = RegExp.prototype; + var nativeToString = RegExpPrototype[TO_STRING]; + var NOT_GENERIC = fails(function() { + return nativeToString.call({ source: "a", flags: "b" }) !== "/a/b"; + }); + var INCORRECT_NAME = PROPER_FUNCTION_NAME && nativeToString.name !== TO_STRING; + if (NOT_GENERIC || INCORRECT_NAME) { + defineBuiltIn(RegExpPrototype, TO_STRING, function toString() { + var R = anObject(this); + var pattern = $toString(R.source); + var flags = $toString(getRegExpFlags(R)); + return "/" + pattern + "/" + flags; + }, { unsafe: true }); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-multibyte.js +var require_string_multibyte = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-multibyte.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var toString = require_to_string(); + var requireObjectCoercible = require_require_object_coercible(); + var charAt = uncurryThis("".charAt); + var charCodeAt = uncurryThis("".charCodeAt); + var stringSlice = uncurryThis("".slice); + var createMethod = function(CONVERT_TO_STRING) { + return function($this, pos) { + var S = toString(requireObjectCoercible($this)); + var position = toIntegerOrInfinity(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) + return CONVERT_TO_STRING ? "" : void 0; + first = charCodeAt(S, position); + return first < 55296 || first > 56319 || position + 1 === size || (second = charCodeAt(S, position + 1)) < 56320 || second > 57343 ? CONVERT_TO_STRING ? charAt(S, position) : first : CONVERT_TO_STRING ? stringSlice(S, position, position + 2) : (first - 55296 << 10) + (second - 56320) + 65536; + }; + }; + module2.exports = { + // `String.prototype.codePointAt` method + // https://tc39.es/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod(true) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.iterator.js +var require_es_string_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.iterator.js": function() { + "use strict"; + var charAt = require_string_multibyte().charAt; + var toString = require_to_string(); + var InternalStateModule = require_internal_state(); + var defineIterator = require_iterator_define(); + var createIterResultObject = require_create_iter_result_object(); + var STRING_ITERATOR = "String Iterator"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); + defineIterator(String, "String", function(iterated) { + setInternalState(this, { + type: STRING_ITERATOR, + string: toString(iterated), + index: 0 + }); + }, function next() { + var state = getInternalState(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) + return createIterResultObject(void 0, true); + point = charAt(string, index); + state.index += point.length; + return createIterResultObject(point, false); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.define-property.js +var require_es_object_define_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.define-property.js": function() { + "use strict"; + var $ = require_export(); + var DESCRIPTORS = require_descriptors(); + var defineProperty = require_object_define_property().f; + $({ target: "Object", stat: true, forced: Object.defineProperty !== defineProperty, sham: !DESCRIPTORS }, { + defineProperty: defineProperty + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-descriptor.js +var require_es_object_get_own_property_descriptor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-descriptor.js": function() { + "use strict"; + var $ = require_export(); + var fails = require_fails(); + var toIndexedObject = require_to_indexed_object(); + var nativeGetOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; + var DESCRIPTORS = require_descriptors(); + var FORCED = !DESCRIPTORS || fails(function() { + nativeGetOwnPropertyDescriptor(1); + }); + $({ target: "Object", stat: true, forced: FORCED, sham: !DESCRIPTORS }, { + getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) { + return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-names.js +var require_es_object_get_own_property_names = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-names.js": function() { + "use strict"; + var $ = require_export(); + var fails = require_fails(); + var getOwnPropertyNames = require_object_get_own_property_names_external().f; + var FAILS_ON_PRIMITIVES = fails(function() { + return !Object.getOwnPropertyNames(1); + }); + $({ target: "Object", stat: true, forced: FAILS_ON_PRIMITIVES }, { + getOwnPropertyNames: getOwnPropertyNames + }); + } +}); + +// dist/FilterAlteredClicks/FilterAlteredClicks.js +require_es_symbol(); +require_es_symbol_description(); +require_es_symbol_iterator(); +require_es_error_cause(); +require_es_error_to_string(); +require_es_array_from(); +require_es_array_iterator(); +require_es_array_slice(); +require_es_object_to_string(); +require_es_regexp_exec(); +require_es_regexp_test(); +require_es_regexp_to_string(); +require_es_string_iterator(); +require_es_object_define_property(); +require_es_object_get_own_property_descriptor(); +require_es_object_get_own_property_names(); +function _createForOfIteratorHelper(o, allowArrayLike) { + var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; + if (!it) { + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) + o = it; + var i = 0; + var F = function F2() { + }; + return { s: F, n: function n() { + if (i >= o.length) + return { done: true }; + return { done: false, value: o[i++] }; + }, e: function e(_e) { + throw _e; + }, f: F }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + var normalCompletion = true, didErr = false, err; + return { s: function s() { + it = it.call(o); + }, n: function n() { + var step = it.next(); + normalCompletion = step.done; + return step; + }, e: function e(_e2) { + didErr = true; + err = _e2; + }, f: function f() { + try { + if (!normalCompletion && it["return"] != null) + it["return"](); + } finally { + if (didErr) + throw err; + } + } }; +} +function _unsupportedIterableToArray(o, minLen) { + if (!o) + return; + if (typeof o === "string") + return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) + n = o.constructor.name; + if (n === "Map" || n === "Set") + return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) + return _arrayLikeToArray(o, minLen); +} +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) + len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) + arr2[i] = arr[i]; + return arr2; +} +function _typeof(o) { + "@babel/helpers - typeof"; + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof(o); +} +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames2 = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = function __export2(target, all) { + for (var name in all) + __defProp(target, name, { + get: all[name], + enumerable: true + }); +}; +var __copyProps = function __copyProps2(to, from, except, desc) { + if (from && _typeof(from) === "object" || typeof from === "function") { + var _iterator = _createForOfIteratorHelper(__getOwnPropNames2(from)), _step; + try { + var _loop = function _loop2() { + var key = _step.value; + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { + get: function get() { + return from[key]; + }, + enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable + }); + }; + for (_iterator.s(); !(_step = _iterator.n()).done; ) { + _loop(); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } + return to; +}; +var __toCommonJS = function __toCommonJS2(mod) { + return __copyProps(__defProp({}, "__esModule", { + value: true + }), mod); +}; +//! src/FilterAlteredClicks/FilterAlteredClicks.ts +var FilterAlteredClicks_exports = {}; +__export(FilterAlteredClicks_exports, { + filterAlteredClicks: function filterAlteredClicks() { + return _filterAlteredClicks; + } +}); +module.exports = __toCommonJS(FilterAlteredClicks_exports); +function _filterAlteredClicks(callback, onlyPhysical) { + return function(event) { + event = event.originalEvent || event; + if (event instanceof MouseEvent && event.which > 1 || event.shiftKey || event.altKey || event.metaKey || event.ctrlKey || !onlyPhysical && event.defaultPrevented) { + return; + } + return callback.call(this, event); + }; +} + +})(); + +/* */ + +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZm9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcG9zc2libGUtcHJvdG90eXBlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb3h5LWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93cmFwLWVycm9yLWNvbnN0cnVjdG9yLXdpdGgtY2F1c2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IudG8tc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1mcm9tLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZyb20uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRlc3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZ2V0LWZsYWdzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAic3JjL0ZpbHRlckFsdGVyZWRDbGlja3MvRmlsdGVyQWx0ZXJlZENsaWNrcy50cyIsICJub2RlX21vZHVsZXMvLnBucG0vZmlsdGVyLWFsdGVyZWQtY2xpY2tzQDIuMC4xL25vZGVfbW9kdWxlcy9maWx0ZXItYWx0ZXJlZC1jbGlja3MvaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIGNoZWNrKHR5cGVvZiB0aGlzID09ICdvYmplY3QnICYmIHRoaXMpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsW25hbWVzcGFjZV0pIDogZ2xvYmFsW25hbWVzcGFjZV0gJiYgZ2xvYmFsW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIG5hdmlnYXRvciAhPSAndW5kZWZpbmVkJyAmJiBTdHJpbmcobmF2aWdhdG9yLnVzZXJBZ2VudCkgfHwgJyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgJFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWwsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zNi4wJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjQgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zNi4wL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zLmVudW1lcmFibGU7XG4gIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiBrZXk7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkgbWFrZUJ1aWx0SW4odmFsdWUsIG5hbWUsIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5nbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZUdsb2JhbFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdGlvbnMudW5zYWZlKSBkZWxldGUgT1trZXldO1xuICAgICAgZWxzZSBpZiAoT1trZXldKSBzaW1wbGUgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogIW9wdGlvbnMubm9uQ29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6ICFvcHRpb25zLm5vbldyaXRhYmxlXG4gICAgfSk7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBsZW4gPSB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcbiAgcmV0dXJuIGxlbiA+IDAgPyBtaW4obGVuLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbDtcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxbVEFSR0VUXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxbVEFSR0VUXSAmJiBnbG9iYWxbVEFSR0VUXS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpID09PSAnW29iamVjdCB6XSc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIENPUlJFQ1RfQVJHVU1FTlRTID0gY2xhc3NvZlJhdyhmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8gY2xhc3NvZlJhdyA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgdGFnLCByZXN1bHQ7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mICh0YWcgPSB0cnlHZXQoTyA9ICRPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PT0gJ09iamVjdCcgJiYgaXNDYWxsYWJsZShPLmNhbGxlZSkgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGNsYXNzb2YoYXJndW1lbnQpID09PSAnU3ltYm9sJykgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcbiAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1rZXlzIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgJiYgIVY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBwcm9wcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXkgPSBrZXlzW2luZGV4KytdLCBwcm9wc1trZXldKTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBBY3RpdmVYT2JqZWN0IC0tIG9sZCBJRSwgV1NIICovXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsOyAvLyBhdm9pZCBtZW1vcnkgbGVha1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgYWN0aXZlWERvY3VtZW50ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJ1xuICAgID8gZG9jdW1lbnQuZG9tYWluICYmIGFjdGl2ZVhEb2N1bWVudFxuICAgICAgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgLy8gb2xkIElFXG4gICAgICA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpXG4gICAgOiBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCk7IC8vIFdTSFxuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZihyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoW10uc2xpY2UpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmUgKi9cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGFycmF5U2xpY2Uod2luZG93TmFtZXMpO1xuICB9XG59O1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgY2xhc3NvZihpdCkgPT09ICdXaW5kb3cnXG4gICAgPyBnZXRXaW5kb3dOYW1lcyhpdClcbiAgICA6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKSB7XG4gIGlmIChkZXNjcmlwdG9yLmdldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5nZXQsIG5hbWUsIHsgZ2V0dGVyOiB0cnVlIH0pO1xuICBpZiAoZGVzY3JpcHRvci5zZXQpIG1ha2VCdWlsdEluKGRlc2NyaXB0b3Iuc2V0LCBuYW1lLCB7IHNldHRlcjogdHJ1ZSB9KTtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5LmYodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG5leHBvcnRzLmYgPSB3ZWxsS25vd25TeW1ib2w7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWw7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgdmFyIFN5bWJvbCA9IHBhdGguU3ltYm9sIHx8IChwYXRoLlN5bWJvbCA9IHt9KTtcbiAgaWYgKCFoYXNPd24oU3ltYm9sLCBOQU1FKSkgZGVmaW5lUHJvcGVydHkoU3ltYm9sLCBOQU1FLCB7XG4gICAgdmFsdWU6IHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZihOQU1FKVxuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgdmFyIFN5bWJvbFByb3RvdHlwZSA9IFN5bWJvbCAmJiBTeW1ib2wucHJvdG90eXBlO1xuICB2YXIgdmFsdWVPZiA9IFN5bWJvbFByb3RvdHlwZSAmJiBTeW1ib2xQcm90b3R5cGUudmFsdWVPZjtcbiAgdmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuICBpZiAoU3ltYm9sUHJvdG90eXBlICYmICFTeW1ib2xQcm90b3R5cGVbVE9fUFJJTUlUSVZFXSkge1xuICAgIC8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgLmxlbmd0aFxuICAgIGRlZmluZUJ1aWx0SW4oU3ltYm9sUHJvdG90eXBlLCBUT19QUklNSVRJVkUsIGZ1bmN0aW9uIChoaW50KSB7XG4gICAgICByZXR1cm4gY2FsbCh2YWx1ZU9mLCB0aGlzKTtcbiAgICB9LCB7IGFyaXR5OiAxIH0pO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBUQUcsIFNUQVRJQykge1xuICBpZiAodGFyZ2V0ICYmICFTVEFUSUMpIHRhcmdldCA9IHRhcmdldC5wcm90b3R5cGU7XG4gIGlmICh0YXJnZXQgJiYgIWhhc093bih0YXJnZXQsIFRPX1NUUklOR19UQUcpKSB7XG4gICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbikge1xuICAvLyBOYXNob3JuIGJ1ZzpcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEyOFxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTMwXG4gIGlmIChjbGFzc29mUmF3KGZuKSA9PT0gJ0Z1bmN0aW9uJykgcmV0dXJuIHVuY3VycnlUaGlzKGZuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBiaW5kID0gdW5jdXJyeVRoaXModW5jdXJyeVRoaXMuYmluZCk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQpIHtcbiAgYUNhbGxhYmxlKGZuKTtcbiAgcmV0dXJuIHRoYXQgPT09IHVuZGVmaW5lZCA/IGZuIDogTkFUSVZFX0JJTkQgPyBiaW5kKGZuLCB0aGF0KSA6IGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09PSAnQXJyYXknO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBub29wID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIGNvbnN0cnVjdCA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnY29uc3RydWN0Jyk7XG52YXIgY29uc3RydWN0b3JSZWdFeHAgPSAvXlxccyooPzpjbGFzc3xmdW5jdGlvbilcXGIvO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcyhjb25zdHJ1Y3RvclJlZ0V4cC5leGVjKTtcbnZhciBJTkNPUlJFQ1RfVE9fU1RSSU5HID0gIWNvbnN0cnVjdG9yUmVnRXhwLnRlc3Qobm9vcCk7XG5cbnZhciBpc0NvbnN0cnVjdG9yTW9kZXJuID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3RydWN0KG5vb3AsIFtdLCBhcmd1bWVudCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG52YXIgaXNDb25zdHJ1Y3RvckxlZ2FjeSA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICBzd2l0Y2ggKGNsYXNzb2YoYXJndW1lbnQpKSB7XG4gICAgY2FzZSAnQXN5bmNGdW5jdGlvbic6XG4gICAgY2FzZSAnR2VuZXJhdG9yRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nOiByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyB3ZSBjYW4ndCBjaGVjayAucHJvdG90eXBlIHNpbmNlIGNvbnN0cnVjdG9ycyBwcm9kdWNlZCBieSAuYmluZCBoYXZlbid0IGl0XG4gICAgLy8gYEZ1bmN0aW9uI3RvU3RyaW5nYCB0aHJvd3Mgb24gc29tZSBidWlsdC1pdCBmdW5jdGlvbiBpbiBzb21lIGxlZ2FjeSBlbmdpbmVzXG4gICAgLy8gKGZvciBleGFtcGxlLCBgRE9NUXVhZGAgYW5kIHNpbWlsYXIgaW4gRkY0MS0pXG4gICAgcmV0dXJuIElOQ09SUkVDVF9UT19TVFJJTkcgfHwgISFleGVjKGNvbnN0cnVjdG9yUmVnRXhwLCBpbnNwZWN0U291cmNlKGFyZ3VtZW50KSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbmlzQ29uc3RydWN0b3JMZWdhY3kuc2hhbSA9IHRydWU7XG5cbi8vIGBJc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSAhY29uc3RydWN0IHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNhbGxlZDtcbiAgcmV0dXJuIGlzQ29uc3RydWN0b3JNb2Rlcm4oaXNDb25zdHJ1Y3Rvck1vZGVybi5jYWxsKVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKE9iamVjdClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihmdW5jdGlvbiAoKSB7IGNhbGxlZCA9IHRydWU7IH0pXG4gICAgfHwgY2FsbGVkO1xufSkgPyBpc0NvbnN0cnVjdG9yTGVnYWN5IDogaXNDb25zdHJ1Y3Rvck1vZGVybjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYSBwYXJ0IG9mIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXkpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsQXJyYXkpKSB7XG4gICAgQyA9IG9yaWdpbmFsQXJyYXkuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAoaXNDb25zdHJ1Y3RvcihDKSAmJiAoQyA9PT0gJEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBlbHNlIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IEM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChhcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbEFycmF5KSkobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZm9yRWFjaCwgbWFwLCBmaWx0ZXIsIHNvbWUsIGV2ZXJ5LCBmaW5kLCBmaW5kSW5kZXgsIGZpbHRlclJlamVjdCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PT0gNjtcbiAgdmFyIElTX0ZJTFRFUl9SRUpFQ1QgPSBUWVBFID09PSA3O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQsIHNwZWNpZmljQ3JlYXRlKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShzZWxmKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgdGhhdCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY3JlYXRlID0gc3BlY2lmaWNDcmVhdGUgfHwgYXJyYXlTcGVjaWVzQ3JlYXRlO1xuICAgIHZhciB0YXJnZXQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgfHwgSVNfRklMVEVSX1JFSkVDVCA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbHVlLCByZXN1bHQ7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWx1ZSA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzdWx0ID0gYm91bmRGdW5jdGlvbih2YWx1ZSwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgdGFyZ2V0W2luZGV4XSA9IHJlc3VsdDsgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdCkgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWx1ZTsgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDQ6IHJldHVybiBmYWxzZTsgICAgICAgICAgICAgLy8gZXZlcnlcbiAgICAgICAgICBjYXNlIDc6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyUmVqZWN0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHRhcmdldDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4gIGZvckVhY2g6IGNyZWF0ZU1ldGhvZCgwKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbiAgbWFwOiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gIGZpbHRlcjogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4gIHNvbWU6IGNyZWF0ZU1ldGhvZCgzKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4gIGV2ZXJ5OiBjcmVhdGVNZXRob2QoNCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRcbiAgZmluZDogY3JlYXRlTWV0aG9kKDUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFxuICBmaW5kSW5kZXg6IGNyZWF0ZU1ldGhvZCg2KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJSZWplY3RgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maWx0ZXJpbmdcbiAgZmlsdGVyUmVqZWN0OiBjcmVhdGVNZXRob2QoNylcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIG5hdGl2ZU9iamVjdENyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG5cbnZhciBISURERU4gPSBzaGFyZWRLZXkoJ2hpZGRlbicpO1xudmFyIFNZTUJPTCA9ICdTeW1ib2wnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTWU1CT0wpO1xuXG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbCAmJiAkU3ltYm9sW1BST1RPVFlQRV07XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmY7XG52YXIgbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90b3R5cGVTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcblxuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgVVNFX1NFVFRFUiA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAoTywgUCwgQXR0cmlidXRlcykge1xuICB2YXIgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIFApO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcikgZGVsZXRlIE9iamVjdFByb3RvdHlwZVtQXTtcbiAgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yICYmIE8gIT09IE9iamVjdFByb3RvdHlwZSkge1xuICAgIG5hdGl2ZURlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZSwgUCwgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcik7XG4gIH1cbn07XG5cbnZhciBzZXRTeW1ib2xEZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0Q3JlYXRlKG5hdGl2ZURlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9PSA3O1xufSkgPyBmYWxsYmFja0RlZmluZVByb3BlcnR5IDogbmF0aXZlRGVmaW5lUHJvcGVydHk7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZywgZGVzY3JpcHRpb24pIHtcbiAgdmFyIHN5bWJvbCA9IEFsbFN5bWJvbHNbdGFnXSA9IG5hdGl2ZU9iamVjdENyZWF0ZShTeW1ib2xQcm90b3R5cGUpO1xuICBzZXRJbnRlcm5hbFN0YXRlKHN5bWJvbCwge1xuICAgIHR5cGU6IFNZTUJPTCxcbiAgICB0YWc6IHRhZyxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25cbiAgfSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHN5bWJvbC5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICByZXR1cm4gc3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgaWYgKE8gPT09IE9iamVjdFByb3RvdHlwZSkgJGRlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFAsIEF0dHJpYnV0ZXMpO1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUF0dHJpYnV0ZXMuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXNPd24oTywgSElEREVOKSkgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgSElEREVOLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgbmF0aXZlT2JqZWN0Q3JlYXRlKG51bGwpKSk7XG4gICAgICBPW0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNPd24oTywgSElEREVOKSAmJiBPW0hJRERFTl1ba2V5XSkgT1tISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSBuYXRpdmVPYmplY3RDcmVhdGUoQXR0cmlidXRlcywgeyBlbnVtZXJhYmxlOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2NyaXB0b3IoTywga2V5LCBBdHRyaWJ1dGVzKTtcbiAgfSByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywga2V5LCBBdHRyaWJ1dGVzKTtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BlcnRpZXMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhwcm9wZXJ0aWVzKS5jb25jYXQoJGdldE93blByb3BlcnR5U3ltYm9scyhwcm9wZXJ0aWVzKSk7XG4gICRmb3JFYWNoKGtleXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwoJHByb3BlcnR5SXNFbnVtZXJhYmxlLCBwcm9wZXJ0aWVzLCBrZXkpKSAkZGVmaW5lUHJvcGVydHkoTywga2V5LCBwcm9wZXJ0aWVzW2tleV0pO1xuICB9KTtcbiAgcmV0dXJuIE87XG59O1xuXG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyBuYXRpdmVPYmplY3RDcmVhdGUoTykgOiAkZGVmaW5lUHJvcGVydGllcyhuYXRpdmVPYmplY3RDcmVhdGUoTyksIFByb3BlcnRpZXMpO1xufTtcblxudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIFAgPSB0b1Byb3BlcnR5S2V5KFYpO1xuICB2YXIgZW51bWVyYWJsZSA9IGNhbGwobmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUsIHRoaXMsIFApO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBQKSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFApKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBlbnVtZXJhYmxlIHx8ICFoYXNPd24odGhpcywgUCkgfHwgIWhhc093bihBbGxTeW1ib2xzLCBQKSB8fCBoYXNPd24odGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1bUF1cbiAgICA/IGVudW1lcmFibGUgOiB0cnVlO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICB2YXIgaXQgPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIGRlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG4gIGlmIChkZXNjcmlwdG9yICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzT3duKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIHtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuICB9XG4gIHJldHVybiBkZXNjcmlwdG9yO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpKSBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBJU19PQkpFQ1RfUFJPVE9UWVBFID0gTyA9PT0gT2JqZWN0UHJvdG90eXBlO1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKElTX09CSkVDVF9QUk9UT1RZUEUgPyBPYmplY3RQcm90b3R5cGVTeW1ib2xzIDogdG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAoIUlTX09CSkVDVF9QUk9UT1RZUEUgfHwgaGFzT3duKE9iamVjdFByb3RvdHlwZSwga2V5KSkpIHtcbiAgICAgIHB1c2gocmVzdWx0LCBBbGxTeW1ib2xzW2tleV0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBgU3ltYm9sYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wtY29uc3RydWN0b3JcbmlmICghTkFUSVZFX1NZTUJPTCkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmIChpc1Byb3RvdHlwZU9mKFN5bWJvbFByb3RvdHlwZSwgdGhpcykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xuICAgIHZhciBkZXNjcmlwdGlvbiA9ICFhcmd1bWVudHMubGVuZ3RoIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogJHRvU3RyaW5nKGFyZ3VtZW50c1swXSk7XG4gICAgdmFyIHRhZyA9IHVpZChkZXNjcmlwdGlvbik7XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdmFyICR0aGlzID0gdGhpcyA9PT0gdW5kZWZpbmVkID8gZ2xvYmFsIDogdGhpcztcbiAgICAgIGlmICgkdGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlKSBjYWxsKHNldHRlciwgT2JqZWN0UHJvdG90eXBlU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhc093bigkdGhpcywgSElEREVOKSAmJiBoYXNPd24oJHRoaXNbSElEREVOXSwgdGFnKSkgJHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRTeW1ib2xEZXNjcmlwdG9yKCR0aGlzLCB0YWcsIGRlc2NyaXB0b3IpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBSYW5nZUVycm9yKSkgdGhyb3cgZXJyb3I7XG4gICAgICAgIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkoJHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgVVNFX1NFVFRFUikgc2V0U3ltYm9sRGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogc2V0dGVyIH0pO1xuICAgIHJldHVybiB3cmFwKHRhZywgZGVzY3JpcHRpb24pO1xuICB9O1xuXG4gIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2xbUFJPVE9UWVBFXTtcblxuICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykudGFnO1xuICB9KTtcblxuICBkZWZpbmVCdWlsdEluKCRTeW1ib2wsICd3aXRob3V0U2V0dGVyJywgZnVuY3Rpb24gKGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIHdyYXAodWlkKGRlc2NyaXB0aW9uKSwgZGVzY3JpcHRpb24pO1xuICB9KTtcblxuICBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mID0gJGRlZmluZVByb3BlcnR5O1xuICBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydGllcztcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3ZWxsS25vd25TeW1ib2wobmFtZSksIG5hbWUpO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLVN5bWJvbC1kZXNjcmlwdGlvblxuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmRlc2NyaXB0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghSVNfUFVSRSkge1xuICAgICAgZGVmaW5lQnVpbHRJbihPYmplY3RQcm90b3R5cGUsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIFN5bWJvbDogJFN5bWJvbFxufSk7XG5cbiRmb3JFYWNoKG9iamVjdEtleXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVmaW5lV2VsbEtub3duU3ltYm9sKG5hbWUpO1xufSk7XG5cbiQoeyB0YXJnZXQ6IFNZTUJPTCwgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSBmYWxzZTsgfVxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICAvLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsIFNZTUJPTCk7XG5cbmhpZGRlbktleXNbSElEREVOXSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gc2FmZSAqL1xubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MICYmICEhU3ltYm9sWydmb3InXSAmJiAhIVN5bWJvbC5rZXlGb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N0cmluZy10by1zeW1ib2wtcmVnaXN0cnknKTtcbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wuZm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhrZXkpO1xuICAgIGlmIChoYXNPd24oU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSwgc3RyaW5nKSkgcmV0dXJuIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXTtcbiAgICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoc3RyaW5nKTtcbiAgICBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ10gPSBzeW1ib2w7XG4gICAgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1ib2xdID0gc3RyaW5nO1xuICAgIHJldHVybiBzeW1ib2w7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5rZXlGb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wua2V5Zm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgbmV3IFR5cGVFcnJvcih0cnlUb1N0cmluZyhzeW0pICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICBpZiAoaGFzT3duKFN5bWJvbFRvU3RyaW5nUmVnaXN0cnksIHN5bSkpIHJldHVybiBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bV07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgYXBwbHkgPSBGdW5jdGlvblByb3RvdHlwZS5hcHBseTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXJlZmxlY3QgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgUmVmbGVjdCA9PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmFwcGx5IHx8IChOQVRJVkVfQklORCA/IGNhbGwuYmluZChhcHBseSkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGFwcGx5LCBhcmd1bWVudHMpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZXBsYWNlcikge1xuICBpZiAoaXNDYWxsYWJsZShyZXBsYWNlcikpIHJldHVybiByZXBsYWNlcjtcbiAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmV0dXJuO1xuICB2YXIgcmF3TGVuZ3RoID0gcmVwbGFjZXIubGVuZ3RoO1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJhd0xlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsZW1lbnQgPSByZXBsYWNlcltpXTtcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT0gJ3N0cmluZycpIHB1c2goa2V5cywgZWxlbWVudCk7XG4gICAgZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQgPT0gJ251bWJlcicgfHwgY2xhc3NvZihlbGVtZW50KSA9PT0gJ051bWJlcicgfHwgY2xhc3NvZihlbGVtZW50KSA9PT0gJ1N0cmluZycpIHB1c2goa2V5cywgdG9TdHJpbmcoZWxlbWVudCkpO1xuICB9XG4gIHZhciBrZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciByb290ID0gdHJ1ZTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKHJvb3QpIHtcbiAgICAgIHJvb3QgPSBmYWxzZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkodGhpcykpIHJldHVybiB2YWx1ZTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleXNMZW5ndGg7IGorKykgaWYgKGtleXNbal0gPT09IGtleSkgcmV0dXJuIHZhbHVlO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIGdldFJlcGxhY2VyRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWpzb24tcmVwbGFjZXItZnVuY3Rpb24nKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJHN0cmluZ2lmeSA9IGdldEJ1aWx0SW4oJ0pTT04nLCAnc3RyaW5naWZ5Jyk7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKC8uLy5leGVjKTtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgbnVtYmVyVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG52YXIgdGVzdGVyID0gL1tcXHVEODAwLVxcdURGRkZdL2c7XG52YXIgbG93ID0gL15bXFx1RDgwMC1cXHVEQkZGXSQvO1xudmFyIGhpID0gL15bXFx1REMwMC1cXHVERkZGXSQvO1xuXG52YXIgV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID0gIU5BVElWRV9TWU1CT0wgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoJ3N0cmluZ2lmeSBkZXRlY3Rpb24nKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgcmV0dXJuICRzdHJpbmdpZnkoW3N5bWJvbF0pICE9PSAnW251bGxdJ1xuICAgIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAgIHx8ICRzdHJpbmdpZnkoeyBhOiBzeW1ib2wgfSkgIT09ICd7fSdcbiAgICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICAgIHx8ICRzdHJpbmdpZnkoT2JqZWN0KHN5bWJvbCkpICE9PSAne30nO1xufSk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXdlbGwtZm9ybWVkLXN0cmluZ2lmeVxudmFyIElMTF9GT1JNRURfVU5JQ09ERSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICRzdHJpbmdpZnkoJ1xcdURGMDZcXHVEODM0JykgIT09ICdcIlxcXFx1ZGYwNlxcXFx1ZDgzNFwiJ1xuICAgIHx8ICRzdHJpbmdpZnkoJ1xcdURFQUQnKSAhPT0gJ1wiXFxcXHVkZWFkXCInO1xufSk7XG5cbnZhciBzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCA9IGZ1bmN0aW9uIChpdCwgcmVwbGFjZXIpIHtcbiAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gIHZhciAkcmVwbGFjZXIgPSBnZXRSZXBsYWNlckZ1bmN0aW9uKHJlcGxhY2VyKTtcbiAgaWYgKCFpc0NhbGxhYmxlKCRyZXBsYWNlcikgJiYgKGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gIGFyZ3NbMV0gPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIC8vIHNvbWUgb2xkIGltcGxlbWVudGF0aW9ucyAobGlrZSBXZWJLaXQpIGNvdWxkIHBhc3MgbnVtYmVycyBhcyBrZXlzXG4gICAgaWYgKGlzQ2FsbGFibGUoJHJlcGxhY2VyKSkgdmFsdWUgPSBjYWxsKCRyZXBsYWNlciwgdGhpcywgJFN0cmluZyhrZXkpLCB2YWx1ZSk7XG4gICAgaWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgfTtcbiAgcmV0dXJuIGFwcGx5KCRzdHJpbmdpZnksIG51bGwsIGFyZ3MpO1xufTtcblxudmFyIGZpeElsbEZvcm1lZCA9IGZ1bmN0aW9uIChtYXRjaCwgb2Zmc2V0LCBzdHJpbmcpIHtcbiAgdmFyIHByZXYgPSBjaGFyQXQoc3RyaW5nLCBvZmZzZXQgLSAxKTtcbiAgdmFyIG5leHQgPSBjaGFyQXQoc3RyaW5nLCBvZmZzZXQgKyAxKTtcbiAgaWYgKChleGVjKGxvdywgbWF0Y2gpICYmICFleGVjKGhpLCBuZXh0KSkgfHwgKGV4ZWMoaGksIG1hdGNoKSAmJiAhZXhlYyhsb3csIHByZXYpKSkge1xuICAgIHJldHVybiAnXFxcXHUnICsgbnVtYmVyVG9TdHJpbmcoY2hhckNvZGVBdChtYXRjaCwgMCksIDE2KTtcbiAgfSByZXR1cm4gbWF0Y2g7XG59O1xuXG5pZiAoJHN0cmluZ2lmeSkge1xuICAvLyBgSlNPTi5zdHJpbmdpZnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24uc3RyaW5naWZ5XG4gICQoeyB0YXJnZXQ6ICdKU09OJywgc3RhdDogdHJ1ZSwgYXJpdHk6IDMsIGZvcmNlZDogV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OIHx8IElMTF9GT1JNRURfVU5JQ09ERSB9LCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCwgcmVwbGFjZXIsIHNwYWNlKSB7XG4gICAgICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgICAgIHZhciByZXN1bHQgPSBhcHBseShXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPyBzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCA6ICRzdHJpbmdpZnksIG51bGwsIGFyZ3MpO1xuICAgICAgcmV0dXJuIElMTF9GT1JNRURfVU5JQ09ERSAmJiB0eXBlb2YgcmVzdWx0ID09ICdzdHJpbmcnID8gcmVwbGFjZShyZXN1bHQsIHRlc3RlciwgZml4SWxsRm9ybWVkKSA6IHJlc3VsdDtcbiAgICB9XG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxuLy8gVjggfiBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRk9SQ0VEID0gIU5BVElWRV9TWU1CT0wgfHwgZmFpbHMoZnVuY3Rpb24gKCkgeyBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZigxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5c3ltYm9sc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgICB2YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gJGdldE93blByb3BlcnR5U3ltYm9scyh0b09iamVjdChpdCkpIDogW107XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3Mgc3BsaXQgdG8gbW9kdWxlcyBsaXN0ZWQgYmVsb3dcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN5bWJvbC5mb3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3ltYm9sLmtleS1mb3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnknKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xuIiwgIi8vIGBTeW1ib2wucHJvdG90eXBlLmRlc2NyaXB0aW9uYCBnZXR0ZXJcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS5kZXNjcmlwdGlvblxuJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG5cbnZhciBOYXRpdmVTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIFN5bWJvbFByb3RvdHlwZSA9IE5hdGl2ZVN5bWJvbCAmJiBOYXRpdmVTeW1ib2wucHJvdG90eXBlO1xuXG5pZiAoREVTQ1JJUFRPUlMgJiYgaXNDYWxsYWJsZShOYXRpdmVTeW1ib2wpICYmICghKCdkZXNjcmlwdGlvbicgaW4gU3ltYm9sUHJvdG90eXBlKSB8fFxuICAvLyBTYWZhcmkgMTIgYnVnXG4gIE5hdGl2ZVN5bWJvbCgpLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWRcbikpIHtcbiAgdmFyIEVtcHR5U3RyaW5nRGVzY3JpcHRpb25TdG9yZSA9IHt9O1xuICAvLyB3cmFwIFN5bWJvbCBjb25zdHJ1Y3RvciBmb3IgY29ycmVjdCB3b3JrIHdpdGggdW5kZWZpbmVkIGRlc2NyaXB0aW9uXG4gIHZhciBTeW1ib2xXcmFwcGVyID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIHZhciBkZXNjcmlwdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPCAxIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdG9TdHJpbmcoYXJndW1lbnRzWzBdKTtcbiAgICB2YXIgcmVzdWx0ID0gaXNQcm90b3R5cGVPZihTeW1ib2xQcm90b3R5cGUsIHRoaXMpXG4gICAgICA/IG5ldyBOYXRpdmVTeW1ib2woZGVzY3JpcHRpb24pXG4gICAgICAvLyBpbiBFZGdlIDEzLCBTdHJpbmcoU3ltYm9sKHVuZGVmaW5lZCkpID09PSAnU3ltYm9sKHVuZGVmaW5lZCknXG4gICAgICA6IGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQgPyBOYXRpdmVTeW1ib2woKSA6IE5hdGl2ZVN5bWJvbChkZXNjcmlwdGlvbik7XG4gICAgaWYgKGRlc2NyaXB0aW9uID09PSAnJykgRW1wdHlTdHJpbmdEZXNjcmlwdGlvblN0b3JlW3Jlc3VsdF0gPSB0cnVlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhTeW1ib2xXcmFwcGVyLCBOYXRpdmVTeW1ib2wpO1xuICBTeW1ib2xXcmFwcGVyLnByb3RvdHlwZSA9IFN5bWJvbFByb3RvdHlwZTtcbiAgU3ltYm9sUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ltYm9sV3JhcHBlcjtcblxuICB2YXIgTkFUSVZFX1NZTUJPTCA9IFN0cmluZyhOYXRpdmVTeW1ib2woJ2Rlc2NyaXB0aW9uIGRldGVjdGlvbicpKSA9PT0gJ1N5bWJvbChkZXNjcmlwdGlvbiBkZXRlY3Rpb24pJztcbiAgdmFyIHRoaXNTeW1ib2xWYWx1ZSA9IHVuY3VycnlUaGlzKFN5bWJvbFByb3RvdHlwZS52YWx1ZU9mKTtcbiAgdmFyIHN5bWJvbERlc2NyaXB0aXZlU3RyaW5nID0gdW5jdXJyeVRoaXMoU3ltYm9sUHJvdG90eXBlLnRvU3RyaW5nKTtcbiAgdmFyIHJlZ2V4cCA9IC9eU3ltYm9sXFwoKC4qKVxcKVteKV0rJC87XG4gIHZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG4gIHZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoU3ltYm9sUHJvdG90eXBlLCAnZGVzY3JpcHRpb24nLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICB2YXIgc3ltYm9sID0gdGhpc1N5bWJvbFZhbHVlKHRoaXMpO1xuICAgICAgaWYgKGhhc093bihFbXB0eVN0cmluZ0Rlc2NyaXB0aW9uU3RvcmUsIHN5bWJvbCkpIHJldHVybiAnJztcbiAgICAgIHZhciBzdHJpbmcgPSBzeW1ib2xEZXNjcmlwdGl2ZVN0cmluZyhzeW1ib2wpO1xuICAgICAgdmFyIGRlc2MgPSBOQVRJVkVfU1lNQk9MID8gc3RyaW5nU2xpY2Uoc3RyaW5nLCA3LCAtMSkgOiByZXBsYWNlKHN0cmluZywgcmVnZXhwLCAnJDEnKTtcbiAgICAgIHJldHVybiBkZXNjID09PSAnJyA/IHVuZGVmaW5lZCA6IGRlc2M7XG4gICAgfVxuICB9KTtcblxuICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICBTeW1ib2w6IFN5bWJvbFdyYXBwZXJcbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5pdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLml0ZXJhdG9yXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCBtZXRob2QpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgcmV0dXJuIHVuY3VycnlUaGlzKGFDYWxsYWJsZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KVttZXRob2RdKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNPYmplY3QoYXJndW1lbnQpIHx8IGFyZ3VtZW50ID09PSBudWxsO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wb3NzaWJsZS1wcm90b3R5cGUnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzUG9zc2libGVQcm90b3R5cGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3Qgc2V0IFwiICsgJFN0cmluZyhhcmd1bWVudCkgKyAnIGFzIGEgcHJvdG90eXBlJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvIC0tIHNhZmUgKi9cbnZhciB1bmN1cnJ5VGhpc0FjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSB1bmN1cnJ5VGhpc0FjY2Vzc29yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nLCAnc2V0Jyk7XG4gICAgc2V0dGVyKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICBhbk9iamVjdChPKTtcbiAgICBhUG9zc2libGVQcm90b3R5cGUocHJvdG8pO1xuICAgIGlmIChDT1JSRUNUX1NFVFRFUikgc2V0dGVyKE8sIHByb3RvKTtcbiAgICBlbHNlIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgcmV0dXJuIE87XG4gIH07XG59KCkgOiB1bmRlZmluZWQpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVGFyZ2V0LCBTb3VyY2UsIGtleSkge1xuICBrZXkgaW4gVGFyZ2V0IHx8IGRlZmluZVByb3BlcnR5KFRhcmdldCwga2V5LCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU291cmNlW2tleV07IH0sXG4gICAgc2V0OiBmdW5jdGlvbiAoaXQpIHsgU291cmNlW2tleV0gPSBpdDsgfVxuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xuXG4vLyBtYWtlcyBzdWJjbGFzc2luZyB3b3JrIGNvcnJlY3QgZm9yIHdyYXBwZWQgYnVpbHQtaW5zXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgkdGhpcywgZHVtbXksIFdyYXBwZXIpIHtcbiAgdmFyIE5ld1RhcmdldCwgTmV3VGFyZ2V0UHJvdG90eXBlO1xuICBpZiAoXG4gICAgLy8gaXQgY2FuIHdvcmsgb25seSB3aXRoIG5hdGl2ZSBgc2V0UHJvdG90eXBlT2ZgXG4gICAgc2V0UHJvdG90eXBlT2YgJiZcbiAgICAvLyB3ZSBoYXZlbid0IGNvbXBsZXRlbHkgY29ycmVjdCBwcmUtRVM2IHdheSBmb3IgZ2V0dGluZyBgbmV3LnRhcmdldGAsIHNvIHVzZSB0aGlzXG4gICAgaXNDYWxsYWJsZShOZXdUYXJnZXQgPSBkdW1teS5jb25zdHJ1Y3RvcikgJiZcbiAgICBOZXdUYXJnZXQgIT09IFdyYXBwZXIgJiZcbiAgICBpc09iamVjdChOZXdUYXJnZXRQcm90b3R5cGUgPSBOZXdUYXJnZXQucHJvdG90eXBlKSAmJlxuICAgIE5ld1RhcmdldFByb3RvdHlwZSAhPT0gV3JhcHBlci5wcm90b3R5cGVcbiAgKSBzZXRQcm90b3R5cGVPZigkdGhpcywgTmV3VGFyZ2V0UHJvdG90eXBlKTtcbiAgcmV0dXJuICR0aGlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCAkZGVmYXVsdCkge1xuICByZXR1cm4gYXJndW1lbnQgPT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gJycgOiAkZGVmYXVsdCA6IHRvU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxuLy8gYEluc3RhbGxFcnJvckNhdXNlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1lcnJvci1jYXVzZS8jc2VjLWVycm9yb2JqZWN0cy1pbnN0YWxsLWVycm9yLWNhdXNlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBvcHRpb25zKSB7XG4gIGlmIChpc09iamVjdChvcHRpb25zKSAmJiAnY2F1c2UnIGluIG9wdGlvbnMpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoTywgJ2NhdXNlJywgb3B0aW9ucy5jYXVzZSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgJEVycm9yID0gRXJyb3I7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xuXG52YXIgVEVTVCA9IChmdW5jdGlvbiAoYXJnKSB7IHJldHVybiBTdHJpbmcobmV3ICRFcnJvcihhcmcpLnN0YWNrKTsgfSkoJ3p4Y2FzZCcpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZG9zL25vLXZ1bG5lcmFibGUgLS0gc2FmZVxudmFyIFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWSA9IC9cXG5cXHMqYXQgW146XSo6W15cXG5dKi87XG52YXIgSVNfVjhfT1JfQ0hBS1JBX1NUQUNLID0gVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZLnRlc3QoVEVTVCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0YWNrLCBkcm9wRW50cmllcykge1xuICBpZiAoSVNfVjhfT1JfQ0hBS1JBX1NUQUNLICYmIHR5cGVvZiBzdGFjayA9PSAnc3RyaW5nJyAmJiAhJEVycm9yLnByZXBhcmVTdGFja1RyYWNlKSB7XG4gICAgd2hpbGUgKGRyb3BFbnRyaWVzLS0pIHN0YWNrID0gcmVwbGFjZShzdGFjaywgVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZLCAnJyk7XG4gIH0gcmV0dXJuIHN0YWNrO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoJ2EnKTtcbiAgaWYgKCEoJ3N0YWNrJyBpbiBlcnJvcikpIHJldHVybiB0cnVlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9yLCAnc3RhY2snLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgNykpO1xuICByZXR1cm4gZXJyb3Iuc3RhY2sgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGNsZWFyRXJyb3JTdGFjayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1jbGVhcicpO1xudmFyIEVSUk9SX1NUQUNLX0lOU1RBTExBQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGxhYmxlJyk7XG5cbi8vIG5vbi1zdGFuZGFyZCBWOFxudmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGVycm9yLCBDLCBzdGFjaywgZHJvcEVudHJpZXMpIHtcbiAgaWYgKEVSUk9SX1NUQUNLX0lOU1RBTExBQkxFKSB7XG4gICAgaWYgKGNhcHR1cmVTdGFja1RyYWNlKSBjYXB0dXJlU3RhY2tUcmFjZShlcnJvciwgQyk7XG4gICAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNsZWFyRXJyb3JTdGFjayhzdGFjaywgZHJvcEVudHJpZXMpKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgcHJveHlBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm94eS1hY2Nlc3NvcicpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBub3JtYWxpemVTdHJpbmdBcmd1bWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50Jyk7XG52YXIgaW5zdGFsbEVycm9yQ2F1c2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zdGFsbC1lcnJvci1jYXVzZScpO1xudmFyIGluc3RhbGxFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChGVUxMX05BTUUsIHdyYXBwZXIsIEZPUkNFRCwgSVNfQUdHUkVHQVRFX0VSUk9SKSB7XG4gIHZhciBTVEFDS19UUkFDRV9MSU1JVCA9ICdzdGFja1RyYWNlTGltaXQnO1xuICB2YXIgT1BUSU9OU19QT1NJVElPTiA9IElTX0FHR1JFR0FURV9FUlJPUiA/IDIgOiAxO1xuICB2YXIgcGF0aCA9IEZVTExfTkFNRS5zcGxpdCgnLicpO1xuICB2YXIgRVJST1JfTkFNRSA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgdmFyIE9yaWdpbmFsRXJyb3IgPSBnZXRCdWlsdEluLmFwcGx5KG51bGwsIHBhdGgpO1xuXG4gIGlmICghT3JpZ2luYWxFcnJvcikgcmV0dXJuO1xuXG4gIHZhciBPcmlnaW5hbEVycm9yUHJvdG90eXBlID0gT3JpZ2luYWxFcnJvci5wcm90b3R5cGU7XG5cbiAgLy8gVjggOS4zLSBidWcgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTIwMDZcbiAgaWYgKCFJU19QVVJFICYmIGhhc093bihPcmlnaW5hbEVycm9yUHJvdG90eXBlLCAnY2F1c2UnKSkgZGVsZXRlIE9yaWdpbmFsRXJyb3JQcm90b3R5cGUuY2F1c2U7XG5cbiAgaWYgKCFGT1JDRUQpIHJldHVybiBPcmlnaW5hbEVycm9yO1xuXG4gIHZhciBCYXNlRXJyb3IgPSBnZXRCdWlsdEluKCdFcnJvcicpO1xuXG4gIHZhciBXcmFwcGVkRXJyb3IgPSB3cmFwcGVyKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgdmFyIG1lc3NhZ2UgPSBub3JtYWxpemVTdHJpbmdBcmd1bWVudChJU19BR0dSRUdBVEVfRVJST1IgPyBiIDogYSwgdW5kZWZpbmVkKTtcbiAgICB2YXIgcmVzdWx0ID0gSVNfQUdHUkVHQVRFX0VSUk9SID8gbmV3IE9yaWdpbmFsRXJyb3IoYSkgOiBuZXcgT3JpZ2luYWxFcnJvcigpO1xuICAgIGlmIChtZXNzYWdlICE9PSB1bmRlZmluZWQpIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShyZXN1bHQsICdtZXNzYWdlJywgbWVzc2FnZSk7XG4gICAgaW5zdGFsbEVycm9yU3RhY2socmVzdWx0LCBXcmFwcGVkRXJyb3IsIHJlc3VsdC5zdGFjaywgMik7XG4gICAgaWYgKHRoaXMgJiYgaXNQcm90b3R5cGVPZihPcmlnaW5hbEVycm9yUHJvdG90eXBlLCB0aGlzKSkgaW5oZXJpdElmUmVxdWlyZWQocmVzdWx0LCB0aGlzLCBXcmFwcGVkRXJyb3IpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gT1BUSU9OU19QT1NJVElPTikgaW5zdGFsbEVycm9yQ2F1c2UocmVzdWx0LCBhcmd1bWVudHNbT1BUSU9OU19QT1NJVElPTl0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIFdyYXBwZWRFcnJvci5wcm90b3R5cGUgPSBPcmlnaW5hbEVycm9yUHJvdG90eXBlO1xuXG4gIGlmIChFUlJPUl9OQU1FICE9PSAnRXJyb3InKSB7XG4gICAgaWYgKHNldFByb3RvdHlwZU9mKSBzZXRQcm90b3R5cGVPZihXcmFwcGVkRXJyb3IsIEJhc2VFcnJvcik7XG4gICAgZWxzZSBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKFdyYXBwZWRFcnJvciwgQmFzZUVycm9yLCB7IG5hbWU6IHRydWUgfSk7XG4gIH0gZWxzZSBpZiAoREVTQ1JJUFRPUlMgJiYgU1RBQ0tfVFJBQ0VfTElNSVQgaW4gT3JpZ2luYWxFcnJvcikge1xuICAgIHByb3h5QWNjZXNzb3IoV3JhcHBlZEVycm9yLCBPcmlnaW5hbEVycm9yLCBTVEFDS19UUkFDRV9MSU1JVCk7XG4gICAgcHJveHlBY2Nlc3NvcihXcmFwcGVkRXJyb3IsIE9yaWdpbmFsRXJyb3IsICdwcmVwYXJlU3RhY2tUcmFjZScpO1xuICB9XG5cbiAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhXcmFwcGVkRXJyb3IsIE9yaWdpbmFsRXJyb3IpO1xuXG4gIGlmICghSVNfUFVSRSkgdHJ5IHtcbiAgICAvLyBTYWZhcmkgMTMtIGJ1ZzogV2ViQXNzZW1ibHkgZXJyb3JzIGRvZXMgbm90IGhhdmUgYSBwcm9wZXIgYC5uYW1lYFxuICAgIGlmIChPcmlnaW5hbEVycm9yUHJvdG90eXBlLm5hbWUgIT09IEVSUk9SX05BTUUpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPcmlnaW5hbEVycm9yUHJvdG90eXBlLCAnbmFtZScsIEVSUk9SX05BTUUpO1xuICAgIH1cbiAgICBPcmlnaW5hbEVycm9yUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV3JhcHBlZEVycm9yO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbiAgcmV0dXJuIFdyYXBwZWRFcnJvcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGZ1bmN0aW9ucyBgLmxlbmd0aGAgKi9cbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIHdyYXBFcnJvckNvbnN0cnVjdG9yV2l0aENhdXNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dyYXAtZXJyb3ItY29uc3RydWN0b3Itd2l0aC1jYXVzZScpO1xuXG52YXIgV0VCX0FTU0VNQkxZID0gJ1dlYkFzc2VtYmx5JztcbnZhciBXZWJBc3NlbWJseSA9IGdsb2JhbFtXRUJfQVNTRU1CTFldO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZXJyb3ItY2F1c2UgLS0gZmVhdHVyZSBkZXRlY3Rpb25cbnZhciBGT1JDRUQgPSBuZXcgRXJyb3IoJ2UnLCB7IGNhdXNlOiA3IH0pLmNhdXNlICE9PSA3O1xuXG52YXIgZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIgPSBmdW5jdGlvbiAoRVJST1JfTkFNRSwgd3JhcHBlcikge1xuICB2YXIgTyA9IHt9O1xuICBPW0VSUk9SX05BTUVdID0gd3JhcEVycm9yQ29uc3RydWN0b3JXaXRoQ2F1c2UoRVJST1JfTkFNRSwgd3JhcHBlciwgRk9SQ0VEKTtcbiAgJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCBPKTtcbn07XG5cbnZhciBleHBvcnRXZWJBc3NlbWJseUVycm9yQ2F1c2VXcmFwcGVyID0gZnVuY3Rpb24gKEVSUk9SX05BTUUsIHdyYXBwZXIpIHtcbiAgaWYgKFdlYkFzc2VtYmx5ICYmIFdlYkFzc2VtYmx5W0VSUk9SX05BTUVdKSB7XG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW0VSUk9SX05BTUVdID0gd3JhcEVycm9yQ29uc3RydWN0b3JXaXRoQ2F1c2UoV0VCX0FTU0VNQkxZICsgJy4nICsgRVJST1JfTkFNRSwgd3JhcHBlciwgRk9SQ0VEKTtcbiAgICAkKHsgdGFyZ2V0OiBXRUJfQVNTRU1CTFksIHN0YXQ6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwgTyk7XG4gIH1cbn07XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbmF0aXZlZXJyb3JcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignRXZhbEVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEV2YWxFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignUmFuZ2VFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBSYW5nZUVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdSZWZlcmVuY2VFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBSZWZlcmVuY2VFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignU3ludGF4RXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gU3ludGF4RXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ1R5cGVFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBUeXBlRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ1VSSUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVSSUVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIoJ0NvbXBpbGVFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBDb21waWxlRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0V2ViQXNzZW1ibHlFcnJvckNhdXNlV3JhcHBlcignTGlua0Vycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIExpbmtFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRXZWJBc3NlbWJseUVycm9yQ2F1c2VXcmFwcGVyKCdSdW50aW1lRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gUnVudGltZUVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQnKTtcblxudmFyIG5hdGl2ZUVycm9yVG9TdHJpbmcgPSBFcnJvci5wcm90b3R5cGUudG9TdHJpbmc7XG5cbnZhciBJTkNPUlJFQ1RfVE9fU1RSSU5HID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICAvLyBDaHJvbWUgMzItIGluY29ycmVjdGx5IGNhbGwgYWNjZXNzb3JcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWNyZWF0ZSwgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICB2YXIgb2JqZWN0ID0gT2JqZWN0LmNyZWF0ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICduYW1lJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzID09PSBvYmplY3Q7XG4gICAgfSB9KSk7XG4gICAgaWYgKG5hdGl2ZUVycm9yVG9TdHJpbmcuY2FsbChvYmplY3QpICE9PSAndHJ1ZScpIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIEZGMTAtIGRvZXMgbm90IHByb3Blcmx5IGhhbmRsZSBub24tc3RyaW5nc1xuICByZXR1cm4gbmF0aXZlRXJyb3JUb1N0cmluZy5jYWxsKHsgbWVzc2FnZTogMSwgbmFtZTogMiB9KSAhPT0gJzI6IDEnXG4gICAgLy8gSUU4IGRvZXMgbm90IHByb3Blcmx5IGhhbmRsZSBkZWZhdWx0c1xuICAgIHx8IG5hdGl2ZUVycm9yVG9TdHJpbmcuY2FsbCh7fSkgIT09ICdFcnJvcic7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBJTkNPUlJFQ1RfVE9fU1RSSU5HID8gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHZhciBPID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciBuYW1lID0gbm9ybWFsaXplU3RyaW5nQXJndW1lbnQoTy5uYW1lLCAnRXJyb3InKTtcbiAgdmFyIG1lc3NhZ2UgPSBub3JtYWxpemVTdHJpbmdBcmd1bWVudChPLm1lc3NhZ2UpO1xuICByZXR1cm4gIW5hbWUgPyBtZXNzYWdlIDogIW1lc3NhZ2UgPyBuYW1lIDogbmFtZSArICc6ICcgKyBtZXNzYWdlO1xufSA6IG5hdGl2ZUVycm9yVG9TdHJpbmc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZXJyb3JUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci10by1zdHJpbmcnKTtcblxudmFyIEVycm9yUHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuXG4vLyBgRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2QgZml4XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWVycm9yLnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKEVycm9yUHJvdG90eXBlLnRvU3RyaW5nICE9PSBlcnJvclRvU3RyaW5nKSB7XG4gIGRlZmluZUJ1aWx0SW4oRXJyb3JQcm90b3R5cGUsICd0b1N0cmluZycsIGVycm9yVG9TdHJpbmcpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gY2FsbChpbm5lclJlc3VsdCwgaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBFTlRSSUVTKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVOVFJJRVMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG90eXBlW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtrZXldID0gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXQpKSByZXR1cm4gZ2V0TWV0aG9kKGl0LCBJVEVSQVRPUilcbiAgICB8fCBnZXRNZXRob2QoaXQsICdAQGl0ZXJhdG9yJylcbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsIHVzaW5nSXRlcmF0b3IpIHtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBnZXRJdGVyYXRvck1ldGhvZChhcmd1bWVudCkgOiB1c2luZ0l0ZXJhdG9yO1xuICBpZiAoYUNhbGxhYmxlKGl0ZXJhdG9yTWV0aG9kKSkgcmV0dXJuIGFuT2JqZWN0KGNhbGwoaXRlcmF0b3JNZXRob2QsIGFyZ3VtZW50KSk7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGBBcnJheS5mcm9tYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuZnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgdmFyIElTX0NPTlNUUlVDVE9SID0gaXNDb25zdHJ1Y3Rvcih0aGlzKTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBtYXBmbiA9IGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgaWYgKG1hcHBpbmcpIG1hcGZuID0gYmluZChtYXBmbiwgYXJndW1lbnRzTGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKE8pO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yLCBuZXh0LCB2YWx1ZTtcbiAgLy8gaWYgdGhlIHRhcmdldCBpcyBub3QgaXRlcmFibGUgb3IgaXQncyBhbiBhcnJheSB3aXRoIHRoZSBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIGEgc2ltcGxlIGNhc2VcbiAgaWYgKGl0ZXJhdG9yTWV0aG9kICYmICEodGhpcyA9PT0gJEFycmF5ICYmIGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyYXRvck1ldGhvZCkpKSB7XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihPLCBpdGVyYXRvck1ldGhvZCk7XG4gICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcygpIDogW107XG4gICAgZm9yICg7IShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWU7XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMobGVuZ3RoKSA6ICRBcnJheShsZW5ndGgpO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF07XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIG5vLXRocm93LWxpdGVyYWwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYXRvcldpdGhSZXR1cm4sIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIFNLSVBfQ0xPU0lORykge1xuICB0cnkge1xuICAgIGlmICghU0tJUF9DTE9TSU5HICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIHdvcmthcm91bmQgb2Ygb2xkIFdlYktpdCArIGBldmFsYCBidWdcbiAgdmFyIElURVJBVElPTl9TVVBQT1JUID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIG9iamVjdCA9IHt9O1xuICAgIG9iamVjdFtJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogSVRFUkFUSU9OX1NVUFBPUlQgPSB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBleGVjKG9iamVjdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIElURVJBVElPTl9TVVBQT1JUO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZyb20nKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG5cbnZhciBJTkNPUlJFQ1RfSVRFUkFUSU9OID0gIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20gLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYWJsZSk7XG59KTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBmcm9tOiBmcm9tXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIFVOU0NPUEFCTEVTID0gd2VsbEtub3duU3ltYm9sKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmlmIChBcnJheVByb3RvdHlwZVtVTlNDT1BBQkxFU10gPT09IHVuZGVmaW5lZCkge1xuICBkZWZpbmVQcm9wZXJ0eShBcnJheVByb3RvdHlwZSwgVU5TQ09QQUJMRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IGNyZWF0ZShudWxsKVxuICB9KTtcbn1cblxuLy8gYWRkIGEga2V5IHRvIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICBGLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG51bGw7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyJyk7XG5cbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIE9iamVjdFByb3RvdHlwZSA9ICRPYmplY3QucHJvdG90eXBlO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID8gJE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBvYmplY3QgPSB0b09iamVjdChPKTtcbiAgaWYgKGhhc093bihvYmplY3QsIElFX1BST1RPKSkgcmV0dXJuIG9iamVjdFtJRV9QUk9UT107XG4gIHZhciBjb25zdHJ1Y3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgaWYgKGlzQ2FsbGFibGUoY29uc3RydWN0b3IpICYmIG9iamVjdCBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgJE9iamVjdCA/IE9iamVjdFByb3RvdHlwZSA6IG51bGw7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLWFycmF5LXByb3RvdHlwZS1rZXlzIC0tIHNhZmUgKi9cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxudmFyIE5FV19JVEVSQVRPUl9QUk9UT1RZUEUgPSAhaXNPYmplY3QoSXRlcmF0b3JQcm90b3R5cGUpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgLy8gRkY0NC0gbGVnYWN5IGl0ZXJhdG9ycyBjYXNlXG4gIHJldHVybiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0uY2FsbCh0ZXN0KSAhPT0gdGVzdDtcbn0pO1xuXG5pZiAoTkVXX0lURVJBVE9SX1BST1RPVFlQRSkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbmVsc2UgaWYgKElTX1BVUkUpIEl0ZXJhdG9yUHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtQEBpdGVyYXRvclxuaWYgKCFpc0NhbGxhYmxlKEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgZGVmaW5lQnVpbHRJbihJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0LCBFTlVNRVJBQkxFX05FWFQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigrIUVOVU1FUkFCTEVfTkVYVCwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLlBST1BFUjtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5DT05GSUdVUkFCTEU7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBJdGVyYXRvcnNDb3JlLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBJdGVyYXRvcnNDb3JlLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlM7XG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcbnZhciBFTlRSSUVTID0gJ2VudHJpZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhYmxlLCBOQU1FLCBJdGVyYXRvckNvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gIHZhciBnZXRJdGVyYXRpb25NZXRob2QgPSBmdW5jdGlvbiAoS0lORCkge1xuICAgIGlmIChLSU5EID09PSBERUZBVUxUICYmIGRlZmF1bHRJdGVyYXRvcikgcmV0dXJuIGRlZmF1bHRJdGVyYXRvcjtcbiAgICBpZiAoIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgS0lORCAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG5cbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT09ICdBcnJheScgPyBJdGVyYWJsZVByb3RvdHlwZS5lbnRyaWVzIHx8IG5hdGl2ZUl0ZXJhdG9yIDogbmF0aXZlSXRlcmF0b3I7XG4gIHZhciBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIG1ldGhvZHMsIEtFWTtcblxuICAvLyBmaXggbmF0aXZlXG4gIGlmIChhbnlOYXRpdmVJdGVyYXRvcikge1xuICAgIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGFueU5hdGl2ZUl0ZXJhdG9yLmNhbGwobmV3IEl0ZXJhYmxlKCkpKTtcbiAgICBpZiAoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQ2FsbGFibGUoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgICAgICAgICBkZWZpbmVCdWlsdEluKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5LnByb3RvdHlwZS57IHZhbHVlcywgQEBpdGVyYXRvciB9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgREVGQVVMVCA9PT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIGlmICghSVNfUFVSRSAmJiBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCAnbmFtZScsIFZBTFVFUyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBjYWxsKG5hdGl2ZUl0ZXJhdG9yLCB0aGlzKTsgfTtcbiAgICB9XG4gIH1cblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgS0VZLCBtZXRob2RzW0tFWV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSAkKHsgdGFyZ2V0OiBOQU1FLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB9LCBtZXRob2RzKTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yLCB7IG5hbWU6IERFRkFVTFQgfSk7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBgQ3JlYXRlSXRlclJlc3VsdE9iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWl0ZXJyZXN1bHRvYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBkb25lKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogZG9uZSB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5lbnRyaWVzXG4vLyBgQXJyYXkucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUua2V5c1xuLy8gYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAaXRlcmF0b3Jcbi8vIGBDcmVhdGVBcnJheUl0ZXJhdG9yYCBpbnRlcm5hbCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlYXJyYXlpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVJdGVyYXRvcihBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IEFSUkFZX0lURVJBVE9SLFxuICAgIHRhcmdldDogdG9JbmRleGVkT2JqZWN0KGl0ZXJhdGVkKSwgLy8gdGFyZ2V0XG4gICAgaW5kZXg6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gICAga2luZDoga2luZCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gIH0pO1xuLy8gYCVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXgrKztcbiAgaWYgKCF0YXJnZXQgfHwgaW5kZXggPj0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgIHN0YXRlLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICB9XG4gIHN3aXRjaCAoc3RhdGUua2luZCkge1xuICAgIGNhc2UgJ2tleXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChpbmRleCwgZmFsc2UpO1xuICAgIGNhc2UgJ3ZhbHVlcyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHRhcmdldFtpbmRleF0sIGZhbHNlKTtcbiAgfSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbaW5kZXgsIHRhcmdldFtpbmRleF1dLCBmYWxzZSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGV1bm1hcHBlZGFyZ3VtZW50c29iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVtYXBwZWRhcmd1bWVudHNvYmplY3RcbnZhciB2YWx1ZXMgPSBJdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcblxuLy8gVjggfiBDaHJvbWUgNDUtIGJ1Z1xuaWYgKCFJU19QVVJFICYmIERFU0NSSVBUT1JTICYmIHZhbHVlcy5uYW1lICE9PSAndmFsdWVzJykgdHJ5IHtcbiAgZGVmaW5lUHJvcGVydHkodmFsdWVzLCAnbmFtZScsIHsgdmFsdWU6ICd2YWx1ZXMnIH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgbmF0aXZlU2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdzbGljZScpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyICRBcnJheSA9IEFycmF5O1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNsaWNlXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBrID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW5ndGgpO1xuICAgIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gICAgLy8gaW5saW5lIGBBcnJheVNwZWNpZXNDcmVhdGVgIGZvciB1c2FnZSBuYXRpdmUgYEFycmF5I3NsaWNlYCB3aGVyZSBpdCdzIHBvc3NpYmxlXG4gICAgdmFyIENvbnN0cnVjdG9yLCByZXN1bHQsIG47XG4gICAgaWYgKGlzQXJyYXkoTykpIHtcbiAgICAgIENvbnN0cnVjdG9yID0gTy5jb25zdHJ1Y3RvcjtcbiAgICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgICBpZiAoaXNDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvcikgJiYgKENvbnN0cnVjdG9yID09PSAkQXJyYXkgfHwgaXNBcnJheShDb25zdHJ1Y3Rvci5wcm90b3R5cGUpKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JbU1BFQ0lFU107XG4gICAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gbnVsbCkgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoQ29uc3RydWN0b3IgPT09ICRBcnJheSB8fCBDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVTbGljZShPLCBrLCBmaW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQgPSBuZXcgKENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDb25zdHJ1Y3RvcikobWF4KGZpbiAtIGssIDApKTtcbiAgICBmb3IgKG4gPSAwOyBrIDwgZmluOyBrKyssIG4rKykgaWYgKGsgaW4gTykgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBuLCBPW2tdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZycpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbmlmICghVE9fU1RSSU5HX1RBR19TVVBQT1JUKSB7XG4gIGRlZmluZUJ1aWx0SW4oT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgdG9TdHJpbmcsIHsgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NgIGdldHRlciBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLnByb3RvdHlwZS5mbGFnc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuaGFzSW5kaWNlcykgcmVzdWx0ICs9ICdkJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LmRvdEFsbCkgcmVzdWx0ICs9ICdzJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQudW5pY29kZVNldHMpIHJlc3VsdCArPSAndic7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJ2EnLCAneScpIC0+IC9hL3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xuXG52YXIgVU5TVVBQT1JURURfWSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnYScsICd5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdhYmNkJykgIT09IG51bGw7XG59KTtcblxuLy8gVUMgQnJvd3NlciBidWdcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMDA4XG52YXIgTUlTU0VEX1NUSUNLWSA9IFVOU1VQUE9SVEVEX1kgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gISRSZWdFeHAoJ2EnLCAneScpLnN0aWNreTtcbn0pO1xuXG52YXIgQlJPS0VOX0NBUkVUID0gVU5TVVBQT1JURURfWSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MzY4N1xuICB2YXIgcmUgPSAkUmVnRXhwKCdecicsICdneScpO1xuICByZS5sYXN0SW5kZXggPSAyO1xuICByZXR1cm4gcmUuZXhlYygnc3RyJykgIT09IG51bGw7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEJST0tFTl9DQVJFVDogQlJPS0VOX0NBUkVULFxuICBNSVNTRURfU1RJQ0tZOiBNSVNTRURfU1RJQ0tZLFxuICBVTlNVUFBPUlRFRF9ZOiBVTlNVUFBPUlRFRF9ZXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCcuJywgJ3MnKSAtPiAvLi9zIGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJy4nLCAncycpO1xuICByZXR1cm4gIShyZS5kb3RBbGwgJiYgcmUudGVzdCgnXFxuJykgJiYgcmUuZmxhZ3MgPT09ICdzJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnKD88YT5iKScsICdnJykgLT4gLyg/PGE+YikvZyBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAkUmVnRXhwKCcoPzxhPmIpJywgJ2cnKTtcbiAgcmV0dXJuIHJlLmV4ZWMoJ2InKS5ncm91cHMuYSAhPT0gJ2InIHx8XG4gICAgJ2InLnJlcGxhY2UocmUsICckPGE+YycpICE9PSAnYmMnO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgcmVnZXhwL25vLWVtcHR5LWNhcHR1cmluZy1ncm91cCwgcmVnZXhwL25vLWVtcHR5LWdyb3VwLCByZWdleHAvbm8tbGF6eS1lbmRzIC0tIHRlc3RpbmcgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby11c2VsZXNzLXF1YW50aWZpZXIgLS0gdGVzdGluZyAqL1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlZ2V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xudmFyIHN0aWNreUhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpLmdldDtcbnZhciBVTlNVUFBPUlRFRF9ET1RfQUxMID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1kb3QtYWxsJyk7XG52YXIgVU5TVVBQT1JURURfTkNHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1uY2cnKTtcblxudmFyIG5hdGl2ZVJlcGxhY2UgPSBzaGFyZWQoJ25hdGl2ZS1zdHJpbmctcmVwbGFjZScsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSk7XG52YXIgbmF0aXZlRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbnZhciBwYXRjaGVkRXhlYyA9IG5hdGl2ZUV4ZWM7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBpbmRleE9mID0gdW5jdXJyeVRoaXMoJycuaW5kZXhPZik7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLztcbiAgdmFyIHJlMiA9IC9iKi9nO1xuICBjYWxsKG5hdGl2ZUV4ZWMsIHJlMSwgJ2EnKTtcbiAgY2FsbChuYXRpdmVFeGVjLCByZTIsICdhJyk7XG4gIHJldHVybiByZTEubGFzdEluZGV4ICE9PSAwIHx8IHJlMi5sYXN0SW5kZXggIT09IDA7XG59KSgpO1xuXG52YXIgVU5TVVBQT1JURURfWSA9IHN0aWNreUhlbHBlcnMuQlJPS0VOX0NBUkVUO1xuXG4vLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cCwgY29waWVkIGZyb20gZXM1LXNoaW0ncyBTdHJpbmcjc3BsaXQgcGF0Y2guXG52YXIgTlBDR19JTkNMVURFRCA9IC8oKT8/Ly5leGVjKCcnKVsxXSAhPT0gdW5kZWZpbmVkO1xuXG52YXIgUEFUQ0ggPSBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgfHwgTlBDR19JTkNMVURFRCB8fCBVTlNVUFBPUlRFRF9ZIHx8IFVOU1VQUE9SVEVEX0RPVF9BTEwgfHwgVU5TVVBQT1JURURfTkNHO1xuXG5pZiAoUEFUQ0gpIHtcbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cmluZykge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZShyZSk7XG4gICAgdmFyIHN0ciA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgdmFyIHJhdyA9IHN0YXRlLnJhdztcbiAgICB2YXIgcmVzdWx0LCByZUNvcHksIGxhc3RJbmRleCwgbWF0Y2gsIGksIG9iamVjdCwgZ3JvdXA7XG5cbiAgICBpZiAocmF3KSB7XG4gICAgICByYXcubGFzdEluZGV4ID0gcmUubGFzdEluZGV4O1xuICAgICAgcmVzdWx0ID0gY2FsbChwYXRjaGVkRXhlYywgcmF3LCBzdHIpO1xuICAgICAgcmUubGFzdEluZGV4ID0gcmF3Lmxhc3RJbmRleDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdmFyIGdyb3VwcyA9IHN0YXRlLmdyb3VwcztcbiAgICB2YXIgc3RpY2t5ID0gVU5TVVBQT1JURURfWSAmJiByZS5zdGlja3k7XG4gICAgdmFyIGZsYWdzID0gY2FsbChyZWdleHBGbGFncywgcmUpO1xuICAgIHZhciBzb3VyY2UgPSByZS5zb3VyY2U7XG4gICAgdmFyIGNoYXJzQWRkZWQgPSAwO1xuICAgIHZhciBzdHJDb3B5ID0gc3RyO1xuXG4gICAgaWYgKHN0aWNreSkge1xuICAgICAgZmxhZ3MgPSByZXBsYWNlKGZsYWdzLCAneScsICcnKTtcbiAgICAgIGlmIChpbmRleE9mKGZsYWdzLCAnZycpID09PSAtMSkge1xuICAgICAgICBmbGFncyArPSAnZyc7XG4gICAgICB9XG5cbiAgICAgIHN0ckNvcHkgPSBzdHJpbmdTbGljZShzdHIsIHJlLmxhc3RJbmRleCk7XG4gICAgICAvLyBTdXBwb3J0IGFuY2hvcmVkIHN0aWNreSBiZWhhdmlvci5cbiAgICAgIGlmIChyZS5sYXN0SW5kZXggPiAwICYmICghcmUubXVsdGlsaW5lIHx8IHJlLm11bHRpbGluZSAmJiBjaGFyQXQoc3RyLCByZS5sYXN0SW5kZXggLSAxKSAhPT0gJ1xcbicpKSB7XG4gICAgICAgIHNvdXJjZSA9ICcoPzogJyArIHNvdXJjZSArICcpJztcbiAgICAgICAgc3RyQ29weSA9ICcgJyArIHN0ckNvcHk7XG4gICAgICAgIGNoYXJzQWRkZWQrKztcbiAgICAgIH1cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBzdHIgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14oPzonICsgc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgfVxuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgc291cmNlICsgJyQoPyFcXFxccyknLCBmbGFncyk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDtcblxuICAgIG1hdGNoID0gY2FsbChuYXRpdmVFeGVjLCBzdGlja3kgPyByZUNvcHkgOiByZSwgc3RyQ29weSk7XG5cbiAgICBpZiAoc3RpY2t5KSB7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgbWF0Y2guaW5wdXQgPSBzdHJpbmdTbGljZShtYXRjaC5pbnB1dCwgY2hhcnNBZGRlZCk7XG4gICAgICAgIG1hdGNoWzBdID0gc3RyaW5nU2xpY2UobWF0Y2hbMF0sIGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaC5pbmRleCA9IHJlLmxhc3RJbmRleDtcbiAgICAgICAgcmUubGFzdEluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgIH0gZWxzZSByZS5sYXN0SW5kZXggPSAwO1xuICAgIH0gZWxzZSBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZS5sYXN0SW5kZXggPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbid0IHdvcmsgZm9yIC8oLj8pPy9cbiAgICAgIGNhbGwobmF0aXZlUmVwbGFjZSwgbWF0Y2hbMF0sIHJlQ29weSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZCkgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChtYXRjaCAmJiBncm91cHMpIHtcbiAgICAgIG1hdGNoLmdyb3VwcyA9IG9iamVjdCA9IGNyZWF0ZShudWxsKTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZ3JvdXAgPSBncm91cHNbaV07XG4gICAgICAgIG9iamVjdFtncm91cFswXV0gPSBtYXRjaFtncm91cFsxXV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoZWRFeGVjO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZXhlY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUuZXhlY1xuJCh7IHRhcmdldDogJ1JlZ0V4cCcsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IC8uLy5leGVjICE9PSBleGVjIH0sIHtcbiAgZXhlYzogZXhlY1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBtb3ZlZCB0byBlbnRyeSBwb2ludHNcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMnKTtcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxudmFyIERFTEVHQVRFU19UT19FWEVDID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICB2YXIgcmUgPSAvW2FjXS87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgZXhlY0NhbGxlZCA9IHRydWU7XG4gICAgcmV0dXJuIC8uLy5leGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG4gIHJldHVybiByZS50ZXN0KCdhYmMnKSA9PT0gdHJ1ZSAmJiBleGVjQ2FsbGVkO1xufSgpO1xuXG52YXIgbmF0aXZlVGVzdCA9IC8uLy50ZXN0O1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS50ZXN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50ZXN0XG4kKHsgdGFyZ2V0OiAnUmVnRXhwJywgcHJvdG86IHRydWUsIGZvcmNlZDogIURFTEVHQVRFU19UT19FWEVDIH0sIHtcbiAgdGVzdDogZnVuY3Rpb24gKFMpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhTKTtcbiAgICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgICBpZiAoIWlzQ2FsbGFibGUoZXhlYykpIHJldHVybiBjYWxsKG5hdGl2ZVRlc3QsIFIsIHN0cmluZyk7XG4gICAgdmFyIHJlc3VsdCA9IGNhbGwoZXhlYywgUiwgc3RyaW5nKTtcbiAgICBpZiAocmVzdWx0ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgYW5PYmplY3QocmVzdWx0KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgcmVnRXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzJyk7XG5cbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSKSB7XG4gIHZhciBmbGFncyA9IFIuZmxhZ3M7XG4gIHJldHVybiBmbGFncyA9PT0gdW5kZWZpbmVkICYmICEoJ2ZsYWdzJyBpbiBSZWdFeHBQcm90b3R5cGUpICYmICFoYXNPd24oUiwgJ2ZsYWdzJykgJiYgaXNQcm90b3R5cGVPZihSZWdFeHBQcm90b3R5cGUsIFIpXG4gICAgPyBjYWxsKHJlZ0V4cEZsYWdzLCBSKSA6IGZsYWdzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLlBST1BFUjtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldFJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MnKTtcblxudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcbnZhciBuYXRpdmVUb1N0cmluZyA9IFJlZ0V4cFByb3RvdHlwZVtUT19TVFJJTkddO1xuXG52YXIgTk9UX0dFTkVSSUMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVUb1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT09ICcvYS9iJzsgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxudmFyIElOQ09SUkVDVF9OQU1FID0gUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgbmF0aXZlVG9TdHJpbmcubmFtZSAhPT0gVE9fU1RSSU5HO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbmlmIChOT1RfR0VORVJJQyB8fCBJTkNPUlJFQ1RfTkFNRSkge1xuICBkZWZpbmVCdWlsdEluKFJlZ0V4cFByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwYXR0ZXJuID0gJHRvU3RyaW5nKFIuc291cmNlKTtcbiAgICB2YXIgZmxhZ3MgPSAkdG9TdHJpbmcoZ2V0UmVnRXhwRmxhZ3MoUikpO1xuICAgIHJldHVybiAnLycgKyBwYXR0ZXJuICsgJy8nICsgZmxhZ3M7XG4gIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoQ09OVkVSVF9UT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgcG9zKSB7XG4gICAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyT3JJbmZpbml0eShwb3MpO1xuICAgIHZhciBzaXplID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0LCBzZWNvbmQ7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBzaXplKSByZXR1cm4gQ09OVkVSVF9UT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBmaXJzdCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24pO1xuICAgIHJldHVybiBmaXJzdCA8IDB4RDgwMCB8fCBmaXJzdCA+IDB4REJGRiB8fCBwb3NpdGlvbiArIDEgPT09IHNpemVcbiAgICAgIHx8IChzZWNvbmQgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBjaGFyQXQoUywgcG9zaXRpb24pXG4gICAgICAgICAgOiBmaXJzdFxuICAgICAgICA6IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBzdHJpbmdTbGljZShTLCBwb3NpdGlvbiwgcG9zaXRpb24gKyAyKVxuICAgICAgICAgIDogKGZpcnN0IC0gMHhEODAwIDw8IDEwKSArIChzZWNvbmQgLSAweERDMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xuXG52YXIgU1RSSU5HX0lURVJBVE9SID0gJ1N0cmluZyBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTVFJJTkdfSVRFUkFUT1IpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUtQEBpdGVyYXRvclxuZGVmaW5lSXRlcmF0b3IoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFNUUklOR19JVEVSQVRPUixcbiAgICBzdHJpbmc6IHRvU3RyaW5nKGl0ZXJhdGVkKSxcbiAgICBpbmRleDogMFxuICB9KTtcbi8vIGAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciBzdHJpbmcgPSBzdGF0ZS5zdHJpbmc7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4O1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBzdHJpbmcubGVuZ3RoKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICBwb2ludCA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgc3RhdGUuaW5kZXggKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChwb2ludCwgZmFsc2UpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09IGRlZmluZVByb3BlcnR5LCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0eTogZGVmaW5lUHJvcGVydHlcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBGT1JDRUQgPSAhREVTQ1JJUFRPUlMgfHwgZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JbmRleGVkT2JqZWN0KGl0KSwga2V5KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJykuZjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuICFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcygxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogZ2V0T3duUHJvcGVydHlOYW1lc1xufSk7XG4iLCAiZXhwb3J0IHtkZWZhdWx0IGFzIGZpbHRlckFsdGVyZWRDbGlja3N9IGZyb20gJ2ZpbHRlci1hbHRlcmVkLWNsaWNrcyc7XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmlsdGVyQWx0ZXJlZENsaWNrcyhjYWxsYmFjaywgb25seVBoeXNpY2FsKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRldmVudCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQgfHwgZXZlbnQ7IC8vIEpRdWVyeSBzdXBwb3J0XG5cdFx0aWYgKFxuXHRcdFx0KGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCAmJiBldmVudC53aGljaCA+IDEpXG5cdFx0XHR8fCBldmVudC5zaGlmdEtleVxuXHRcdFx0fHwgZXZlbnQuYWx0S2V5XG5cdFx0XHR8fCBldmVudC5tZXRhS2V5XG5cdFx0XHR8fCBldmVudC5jdHJsS2V5XG5cdFx0XHR8fCAoIW9ubHlQaHlzaWNhbCAmJiBldmVudC5kZWZhdWx0UHJldmVudGVkKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHJldHVybiBjYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTtcblx0fTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLHlGQUFBQSxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFFBQVEsU0FBVSxJQUFJO0FBQ3hCLGFBQU8sTUFBTSxHQUFHLFNBQVMsUUFBUTtBQUFBLElBQ25DO0FBR0EsSUFBQUEsUUFBTztBQUFBLElBRUwsTUFBTSxPQUFPLGNBQWMsWUFBWSxVQUFVLEtBQ2pELE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTTtBQUFBLElBRXpDLE1BQU0sT0FBTyxRQUFRLFlBQVksSUFBSSxLQUNyQyxNQUFNLE9BQU8sVUFBVSxZQUFZLE1BQU0sS0FDekMsTUFBTSxPQUFPRCxZQUFRLFlBQVlBLFFBQUk7QUFBQSxJQUVwQywyQkFBWTtBQUFFLGFBQU87QUFBQSxJQUFNLEVBQUcsS0FBSyxTQUFTLGFBQWEsRUFBRTtBQUFBO0FBQUE7OztBQ2Y5RDtBQUFBLHdGQUFBRSxVQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxNQUFNO0FBQy9CLFVBQUk7QUFDRixlQUFPLENBQUMsQ0FBQyxLQUFLO0FBQUEsTUFDaEIs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LFFBQUksc0JBQXNCLE1BQU0sV0FBWTtBQUFFLGFBQU8sQ0FBQyxPQUFPLG9CQUFvQixDQUFDO0FBQUEsSUFBRyxDQUFDO0FBSXRGLE1BQUUsRUFBRSxRQUFRLFVBQVUsTUFBTSxNQUFNLFFBQVEsb0JBQW9CLEdBQUc7QUFBQSxNQUMvRCxxQkFBcUI7QUFBQSxJQUN2QixDQUFDO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNaRCxJQUFBQyw4QkFBQSxDQUFBO0FBQUFDLFNBQUFELDZCQUFBO0VBQUFFLHFCQUFBLFNBQUFBLHNCQUFBO0FBQUEsV0FBQUE7RUFBQTtBQUFBLENBQUE7QUFBQUMsT0FBQUMsVUFBQUMsYUFBQUwsMkJBQUE7QUNBZSxTQUFSRSxxQkFBcUNJLFVBQVVDLGNBQWM7QUFDbkUsU0FBTyxTQUFVQyxPQUFPO0FBQ3ZCQSxZQUFRQSxNQUFNQyxpQkFBaUJEO0FBQy9CLFFBQ0VBLGlCQUFpQkUsY0FBY0YsTUFBTUcsUUFBUSxLQUMzQ0gsTUFBTUksWUFDTkosTUFBTUssVUFDTkwsTUFBTU0sV0FDTk4sTUFBTU8sV0FDTCxDQUFDUixnQkFBZ0JDLE1BQU1RLGtCQUMxQjtBQUNEO0lBQ0Q7QUFFQSxXQUFPVixTQUFTVyxLQUFLLE1BQU1ULEtBQUs7RUFDakM7QUFDRDsiLAogICJuYW1lcyI6IFsiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiU3ltYm9sIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJkb2N1bWVudCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJUeXBlRXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImFjdGl2ZVhEb2N1bWVudCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTeW1ib2wiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU3ltYm9sIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInNlbGYiLCAiZ2xvYmFsIiwgIlR5cGVFcnJvciIsICJTeW1ib2wiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgIlN5bWJvbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiRXJyb3IiLCAiUmVmZXJlbmNlRXJyb3IiLCAiVHlwZUVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkZpbHRlckFsdGVyZWRDbGlja3NfZXhwb3J0cyIsICJfX2V4cG9ydCIsICJmaWx0ZXJBbHRlcmVkQ2xpY2tzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIl9fdG9Db21tb25KUyIsICJjYWxsYmFjayIsICJvbmx5UGh5c2ljYWwiLCAiZXZlbnQiLCAib3JpZ2luYWxFdmVudCIsICJNb3VzZUV2ZW50IiwgIndoaWNoIiwgInNoaWZ0S2V5IiwgImFsdEtleSIsICJtZXRhS2V5IiwgImN0cmxLZXkiLCAiZGVmYXVsdFByZXZlbnRlZCIsICJjYWxsIl0KfQo= diff --git a/dist/InPageEdit/InPageEdit.js b/dist/InPageEdit/InPageEdit.js new file mode 100644 index 00000000..093cf0f3 --- /dev/null +++ b/dist/InPageEdit/InPageEdit.js @@ -0,0 +1,53 @@ +/** + * SPDX-License-Identifier: CC-BY-SA-4.0 + * _addText: '{{Gadget Header|license=CC-BY-SA-4.0}}' + * + * @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/InPageEdit} + * @license CC-BY-SA-4.0 {@link https://www.qiuwenbaike.cn/wiki/H:CC-BY-SA-4.0} + * @dependency mediawiki.util + */ +/** + * +--------------------------------------------------------+ + * | === WARNING: GLOBAL GADGET FILE === | + * +--------------------------------------------------------+ + * | All changes should be made in the repository, | + * | otherwise they will be lost. | + * +--------------------------------------------------------+ + * | Changes to this page may affect many users. | + * | Please discuss changes at talk page before editing. | + * +--------------------------------------------------------+ + */ +/* */ +/** + * +------------------------------------------------------------+ + * | === WARNING: GLOBAL GADGET FILE === | + * +------------------------------------------------------------+ + * | All changes should be made in the repository, | + * | otherwise they will be lost. | + * +------------------------------------------------------------+ + * | Changes to this page may affect many users. | + * | Please discuss changes by opening an issue before editing. | + * +------------------------------------------------------------+ + */ +/* */ + +(function() { + +"use strict"; + +// dist/InPageEdit/InPageEdit.js +//! src/InPageEdit/InPageEdit.ts +(function inPageEditLoader() { + /** + * @see {@link https://git.qiuwen.net.cn/AnYi/inpageedit-v2/src/branch/master} + * @author 机智的小鱼君 Dragon-Fish + * @license GPL-3.0-or-later {@link https://git.qiuwen.net.cn/AnYi/inpageedit-v2/src/branch/master/LICENSE} + */ + mw.loader.load("https://gitcdn.qiuwen.net.cn/AnYi/inpageedit-v2/raw/branch/master/dist/InPageEdit.min.js"); +})(); + +})(); + +/* */ + +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL0luUGFnZUVkaXQvSW5QYWdlRWRpdC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiKGZ1bmN0aW9uIGluUGFnZUVkaXRMb2FkZXIoKTogdm9pZCB7XG5cdC8qKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2dpdC5xaXV3ZW4ubmV0LmNuL0FuWWkvaW5wYWdlZWRpdC12Mi9zcmMvYnJhbmNoL21hc3Rlcn1cblx0ICogQGF1dGhvciDmnLrmmbrnmoTlsI/psbzlkJsgRHJhZ29uLUZpc2ggPGRyYWdvbi1maXNoQHFxLmNvbT5cblx0ICogQGxpY2Vuc2UgR1BMLTMuMC1vci1sYXRlciB7QGxpbmsgaHR0cHM6Ly9naXQucWl1d2VuLm5ldC5jbi9BbllpL2lucGFnZWVkaXQtdjIvc3JjL2JyYW5jaC9tYXN0ZXIvTElDRU5TRX1cblx0ICovXG5cdG13LmxvYWRlci5sb2FkKCdodHRwczovL2dpdGNkbi5xaXV3ZW4ubmV0LmNuL0FuWWkvaW5wYWdlZWRpdC12Mi9yYXcvYnJhbmNoL21hc3Rlci9kaXN0L0luUGFnZUVkaXQubWluLmpzJyk7XG59KSgpO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBQUMsU0FBU0EsbUJBQXlCO0VBQ2xDOzs7OztBQUtBQyxLQUFHQyxPQUFPQyxLQUFLLDBGQUEwRjtBQUMxRyxHQUFHOyIsCiAgIm5hbWVzIjogWyJpblBhZ2VFZGl0TG9hZGVyIiwgIm13IiwgImxvYWRlciIsICJsb2FkIl0KfQo= diff --git a/dist/React/React.js b/dist/React/React.js index 37a7081e..3ca08a3e 100644 --- a/dist/React/React.js +++ b/dist/React/React.js @@ -14,9 +14,10389 @@ (function() { "use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __esm = function(fn, res) { + return function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; + }; +}; +var __commonJS = function(cb, mod) { + return function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; + }; +}; +var __copyProps = function(to, from, except, desc) { + if (from && typeof from === "object" || typeof from === "function") + for (var keys2 = __getOwnPropNames(from), i = 0, n = keys2.length, key; i < n; i++) { + key = keys2[i]; + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: function(k) { + return from[k]; + }.bind(null, key), enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = function(mod) { + return __copyProps(__defProp({}, "__esModule", { value: true }), mod); +}; + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/global.js +var require_global = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/global.js": function(exports2, module2) { + "use strict"; + var check = function(it) { + return it && it.Math === Math && it; + }; + module2.exports = // eslint-disable-next-line es/no-global-this -- safe + check(typeof globalThis == "object" && globalThis) || check(typeof window == "object" && window) || // eslint-disable-next-line no-restricted-globals -- safe + check(typeof self == "object" && self) || check(typeof global == "object" && global) || check(typeof exports2 == "object" && exports2) || // eslint-disable-next-line no-new-func -- fallback + /* @__PURE__ */ function() { + return this; + }() || Function("return this")(); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/path.js +var require_path = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/path.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + module2.exports = global2; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/fails.js +var require_fails = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/fails.js": function(exports2, module2) { + "use strict"; + module2.exports = function(exec) { + try { + return !!exec(); + } catch (error) { + return true; + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-native.js +var require_function_bind_native = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-native.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = !fails(function() { + var test = function() { + }.bind(); + return typeof test != "function" || test.hasOwnProperty("prototype"); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this.js +var require_function_uncurry_this = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this.js": function(exports2, module2) { + "use strict"; + var NATIVE_BIND = require_function_bind_native(); + var FunctionPrototype = Function.prototype; + var call = FunctionPrototype.call; + var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call); + module2.exports = NATIVE_BIND ? uncurryThisWithBind : function(fn) { + return function() { + return call.apply(fn, arguments); + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-null-or-undefined.js +var require_is_null_or_undefined = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-null-or-undefined.js": function(exports2, module2) { + "use strict"; + module2.exports = function(it) { + return it === null || it === void 0; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/require-object-coercible.js +var require_require_object_coercible = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/require-object-coercible.js": function(exports2, module2) { + "use strict"; + var isNullOrUndefined = require_is_null_or_undefined(); + var $TypeError = TypeError; + module2.exports = function(it) { + if (isNullOrUndefined(it)) + throw new $TypeError("Can't call method on " + it); + return it; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-object.js +var require_to_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-object.js": function(exports2, module2) { + "use strict"; + var requireObjectCoercible = require_require_object_coercible(); + var $Object = Object; + module2.exports = function(argument) { + return $Object(requireObjectCoercible(argument)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/has-own-property.js +var require_has_own_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/has-own-property.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toObject = require_to_object(); + var hasOwnProperty = uncurryThis({}.hasOwnProperty); + module2.exports = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty(toObject(it), key); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-pure.js +var require_is_pure = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-pure.js": function(exports2, module2) { + "use strict"; + module2.exports = false; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-global-property.js +var require_define_global_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-global-property.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var defineProperty = Object.defineProperty; + module2.exports = function(key, value) { + try { + defineProperty(global2, key, { value: value, configurable: true, writable: true }); + } catch (error) { + global2[key] = value; + } + return value; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-store.js +var require_shared_store = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-store.js": function(exports2, module2) { + "use strict"; + var IS_PURE = require_is_pure(); + var globalThis2 = require_global(); + var defineGlobalProperty = require_define_global_property(); + var SHARED = "__core-js_shared__"; + var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); + (store.versions || (store.versions = [])).push({ + version: "3.36.0", + mode: IS_PURE ? "pure" : "global", + copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", + license: "https://github.com/zloirock/core-js/blob/v3.36.0/LICENSE", + source: "https://github.com/zloirock/core-js" + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared.js +var require_shared = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared.js": function(exports2, module2) { + "use strict"; + var store = require_shared_store(); + module2.exports = function(key, value) { + return store[key] || (store[key] = value || {}); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/uid.js +var require_uid = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/uid.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var id = 0; + var postfix = Math.random(); + var toString = uncurryThis(1 .toString); + module2.exports = function(key) { + return "Symbol(" + (key === void 0 ? "" : key) + ")_" + toString(++id + postfix, 36); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-user-agent.js +var require_engine_user_agent = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-user-agent.js": function(exports2, module2) { + "use strict"; + module2.exports = typeof navigator != "undefined" && String(navigator.userAgent) || ""; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-v8-version.js +var require_engine_v8_version = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-v8-version.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var userAgent = require_engine_user_agent(); + var process2 = global2.process; + var Deno = global2.Deno; + var versions = process2 && process2.versions || Deno && Deno.version; + var v8 = versions && versions.v8; + var match; + var version; + if (v8) { + match = v8.split("."); + version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); + } + if (!version && userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) + version = +match[1]; + } + } + module2.exports = version; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-constructor-detection.js +var require_symbol_constructor_detection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-constructor-detection.js": function(exports2, module2) { + "use strict"; + var V8_VERSION = require_engine_v8_version(); + var fails = require_fails(); + var global2 = require_global(); + var $String = global2.String; + module2.exports = !!Object.getOwnPropertySymbols && !fails(function() { + var symbol = Symbol("symbol detection"); + return !$String(symbol) || !(Object(symbol) instanceof Symbol) || // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances + !Symbol.sham && V8_VERSION && V8_VERSION < 41; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/use-symbol-as-uid.js +var require_use_symbol_as_uid = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/use-symbol-as-uid.js": function(exports2, module2) { + "use strict"; + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol.js +var require_well_known_symbol = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var shared = require_shared(); + var hasOwn = require_has_own_property(); + var uid = require_uid(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var USE_SYMBOL_AS_UID = require_use_symbol_as_uid(); + var Symbol2 = global2.Symbol; + var WellKnownSymbolsStore = shared("wks"); + var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol2["for"] || Symbol2 : Symbol2 && Symbol2.withoutSetter || uid; + module2.exports = function(name) { + if (!hasOwn(WellKnownSymbolsStore, name)) { + WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol2, name) ? Symbol2[name] : createWellKnownSymbol("Symbol." + name); + } + return WellKnownSymbolsStore[name]; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-wrapped.js +var require_well_known_symbol_wrapped = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-wrapped.js": function(exports2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + exports2.f = wellKnownSymbol; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/descriptors.js +var require_descriptors = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/descriptors.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = !fails(function() { + return Object.defineProperty({}, 1, { get: function() { + return 7; + } })[1] !== 7; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-callable.js +var require_is_callable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-callable.js": function(exports2, module2) { + "use strict"; + var documentAll = typeof document == "object" && document.all; + module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { + return typeof argument == "function" || argument === documentAll; + } : function(argument) { + return typeof argument == "function"; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-object.js +var require_is_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-object.js": function(exports2, module2) { + "use strict"; + var isCallable = require_is_callable(); + module2.exports = function(it) { + return typeof it == "object" ? it !== null : isCallable(it); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/document-create-element.js +var require_document_create_element = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/document-create-element.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var isObject2 = require_is_object(); + var document2 = global2.document; + var EXISTS = isObject2(document2) && isObject2(document2.createElement); + module2.exports = function(it) { + return EXISTS ? document2.createElement(it) : {}; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ie8-dom-define.js +var require_ie8_dom_define = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ie8-dom-define.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var fails = require_fails(); + var createElement2 = require_document_create_element(); + module2.exports = !DESCRIPTORS && !fails(function() { + return Object.defineProperty(createElement2("div"), "a", { + get: function() { + return 7; + } + }).a !== 7; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/v8-prototype-define-bug.js +var require_v8_prototype_define_bug = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/v8-prototype-define-bug.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var fails = require_fails(); + module2.exports = DESCRIPTORS && fails(function() { + return Object.defineProperty(function() { + }, "prototype", { + value: 42, + writable: false + }).prototype !== 42; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/an-object.js +var require_an_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/an-object.js": function(exports2, module2) { + "use strict"; + var isObject2 = require_is_object(); + var $String = String; + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isObject2(argument)) + return argument; + throw new $TypeError($String(argument) + " is not an object"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-call.js +var require_function_call = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-call.js": function(exports2, module2) { + "use strict"; + var NATIVE_BIND = require_function_bind_native(); + var call = Function.prototype.call; + module2.exports = NATIVE_BIND ? call.bind(call) : function() { + return call.apply(call, arguments); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-built-in.js +var require_get_built_in = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-built-in.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var isCallable = require_is_callable(); + var aFunction = function(argument) { + return isCallable(argument) ? argument : void 0; + }; + module2.exports = function(namespace, method) { + return arguments.length < 2 ? aFunction(global2[namespace]) : global2[namespace] && global2[namespace][method]; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-is-prototype-of.js +var require_object_is_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-is-prototype-of.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + module2.exports = uncurryThis({}.isPrototypeOf); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-symbol.js +var require_is_symbol = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-symbol.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var isCallable = require_is_callable(); + var isPrototypeOf = require_object_is_prototype_of(); + var USE_SYMBOL_AS_UID = require_use_symbol_as_uid(); + var $Object = Object; + module2.exports = USE_SYMBOL_AS_UID ? function(it) { + return typeof it == "symbol"; + } : function(it) { + var $Symbol = getBuiltIn("Symbol"); + return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/try-to-string.js +var require_try_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/try-to-string.js": function(exports2, module2) { + "use strict"; + var $String = String; + module2.exports = function(argument) { + try { + return $String(argument); + } catch (error) { + return "Object"; + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-callable.js +var require_a_callable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-callable.js": function(exports2, module2) { + "use strict"; + var isCallable = require_is_callable(); + var tryToString = require_try_to_string(); + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isCallable(argument)) + return argument; + throw new $TypeError(tryToString(argument) + " is not a function"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-method.js +var require_get_method = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-method.js": function(exports2, module2) { + "use strict"; + var aCallable = require_a_callable(); + var isNullOrUndefined = require_is_null_or_undefined(); + module2.exports = function(V, P) { + var func = V[P]; + return isNullOrUndefined(func) ? void 0 : aCallable(func); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ordinary-to-primitive.js +var require_ordinary_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ordinary-to-primitive.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var isCallable = require_is_callable(); + var isObject2 = require_is_object(); + var $TypeError = TypeError; + module2.exports = function(input, pref) { + var fn, val; + if (pref === "string" && isCallable(fn = input.toString) && !isObject2(val = call(fn, input))) + return val; + if (isCallable(fn = input.valueOf) && !isObject2(val = call(fn, input))) + return val; + if (pref !== "string" && isCallable(fn = input.toString) && !isObject2(val = call(fn, input))) + return val; + throw new $TypeError("Can't convert object to primitive value"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-primitive.js +var require_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-primitive.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var isObject2 = require_is_object(); + var isSymbol = require_is_symbol(); + var getMethod = require_get_method(); + var ordinaryToPrimitive = require_ordinary_to_primitive(); + var wellKnownSymbol = require_well_known_symbol(); + var $TypeError = TypeError; + var TO_PRIMITIVE = wellKnownSymbol("toPrimitive"); + module2.exports = function(input, pref) { + if (!isObject2(input) || isSymbol(input)) + return input; + var exoticToPrim = getMethod(input, TO_PRIMITIVE); + var result; + if (exoticToPrim) { + if (pref === void 0) + pref = "default"; + result = call(exoticToPrim, input, pref); + if (!isObject2(result) || isSymbol(result)) + return result; + throw new $TypeError("Can't convert object to primitive value"); + } + if (pref === void 0) + pref = "number"; + return ordinaryToPrimitive(input, pref); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-property-key.js +var require_to_property_key = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-property-key.js": function(exports2, module2) { + "use strict"; + var toPrimitive = require_to_primitive(); + var isSymbol = require_is_symbol(); + module2.exports = function(argument) { + var key = toPrimitive(argument, "string"); + return isSymbol(key) ? key : key + ""; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-property.js +var require_object_define_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-property.js": function(exports2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var IE8_DOM_DEFINE = require_ie8_dom_define(); + var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug(); + var anObject = require_an_object(); + var toPropertyKey = require_to_property_key(); + var $TypeError = TypeError; + var $defineProperty = Object.defineProperty; + var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var ENUMERABLE = "enumerable"; + var CONFIGURABLE = "configurable"; + var WRITABLE = "writable"; + exports2.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (typeof O === "function" && P === "prototype" && "value" in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { + var current = $getOwnPropertyDescriptor(O, P); + if (current && current[WRITABLE]) { + O[P] = Attributes.value; + Attributes = { + configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE], + enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], + writable: false + }; + } + } + return $defineProperty(O, P, Attributes); + } : $defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (IE8_DOM_DEFINE) + try { + return $defineProperty(O, P, Attributes); + } catch (error) { + } + if ("get" in Attributes || "set" in Attributes) + throw new $TypeError("Accessors not supported"); + if ("value" in Attributes) + O[P] = Attributes.value; + return O; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-define.js +var require_well_known_symbol_define = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-define.js": function(exports2, module2) { + "use strict"; + var path = require_path(); + var hasOwn = require_has_own_property(); + var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped(); + var defineProperty = require_object_define_property().f; + module2.exports = function(NAME) { + var Symbol2 = path.Symbol || (path.Symbol = {}); + if (!hasOwn(Symbol2, NAME)) + defineProperty(Symbol2, NAME, { + value: wrappedWellKnownSymbolModule.f(NAME) + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.iterator.js +var require_es_symbol_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.iterator.js": function() { + "use strict"; + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("iterator"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-name.js +var require_function_name = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-name.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var hasOwn = require_has_own_property(); + var FunctionPrototype = Function.prototype; + var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor; + var EXISTS = hasOwn(FunctionPrototype, "name"); + var PROPER = EXISTS && function something() { + }.name === "something"; + var CONFIGURABLE = EXISTS && (!DESCRIPTORS || DESCRIPTORS && getDescriptor(FunctionPrototype, "name").configurable); + module2.exports = { + EXISTS: EXISTS, + PROPER: PROPER, + CONFIGURABLE: CONFIGURABLE + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inspect-source.js +var require_inspect_source = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inspect-source.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var isCallable = require_is_callable(); + var store = require_shared_store(); + var functionToString = uncurryThis(Function.toString); + if (!isCallable(store.inspectSource)) { + store.inspectSource = function(it) { + return functionToString(it); + }; + } + module2.exports = store.inspectSource; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/weak-map-basic-detection.js +var require_weak_map_basic_detection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/weak-map-basic-detection.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var isCallable = require_is_callable(); + var WeakMap2 = global2.WeakMap; + module2.exports = isCallable(WeakMap2) && /native code/.test(String(WeakMap2)); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property-descriptor.js +var require_create_property_descriptor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property-descriptor.js": function(exports2, module2) { + "use strict"; + module2.exports = function(bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-non-enumerable-property.js +var require_create_non_enumerable_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-non-enumerable-property.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var definePropertyModule = require_object_define_property(); + var createPropertyDescriptor = require_create_property_descriptor(); + module2.exports = DESCRIPTORS ? function(object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); + } : function(object, key, value) { + object[key] = value; + return object; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-key.js +var require_shared_key = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-key.js": function(exports2, module2) { + "use strict"; + var shared = require_shared(); + var uid = require_uid(); + var keys2 = shared("keys"); + module2.exports = function(key) { + return keys2[key] || (keys2[key] = uid(key)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/hidden-keys.js +var require_hidden_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/hidden-keys.js": function(exports2, module2) { + "use strict"; + module2.exports = {}; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/internal-state.js +var require_internal_state = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/internal-state.js": function(exports2, module2) { + "use strict"; + var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); + var global2 = require_global(); + var isObject2 = require_is_object(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var hasOwn = require_has_own_property(); + var shared = require_shared_store(); + var sharedKey = require_shared_key(); + var hiddenKeys = require_hidden_keys(); + var OBJECT_ALREADY_INITIALIZED = "Object already initialized"; + var TypeError2 = global2.TypeError; + var WeakMap2 = global2.WeakMap; + var set; + var get2; + var has; + var enforce = function(it) { + return has(it) ? get2(it) : set(it, {}); + }; + var getterFor = function(TYPE) { + return function(it) { + var state; + if (!isObject2(it) || (state = get2(it)).type !== TYPE) { + throw new TypeError2("Incompatible receiver, " + TYPE + " required"); + } + return state; + }; + }; + if (NATIVE_WEAK_MAP || shared.state) { + store = shared.state || (shared.state = new WeakMap2()); + store.get = store.get; + store.has = store.has; + store.set = store.set; + set = function(it, metadata) { + if (store.has(it)) + throw new TypeError2(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + store.set(it, metadata); + return metadata; + }; + get2 = function(it) { + return store.get(it) || {}; + }; + has = function(it) { + return store.has(it); + }; + } else { + STATE = sharedKey("state"); + hiddenKeys[STATE] = true; + set = function(it, metadata) { + if (hasOwn(it, STATE)) + throw new TypeError2(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get2 = function(it) { + return hasOwn(it, STATE) ? it[STATE] : {}; + }; + has = function(it) { + return hasOwn(it, STATE); + }; + } + var store; + var STATE; + module2.exports = { + set: set, + get: get2, + has: has, + enforce: enforce, + getterFor: getterFor + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/make-built-in.js +var require_make_built_in = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/make-built-in.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var isCallable = require_is_callable(); + var hasOwn = require_has_own_property(); + var DESCRIPTORS = require_descriptors(); + var CONFIGURABLE_FUNCTION_NAME = require_function_name().CONFIGURABLE; + var inspectSource = require_inspect_source(); + var InternalStateModule = require_internal_state(); + var enforceInternalState = InternalStateModule.enforce; + var getInternalState = InternalStateModule.get; + var $String = String; + var defineProperty = Object.defineProperty; + var stringSlice = uncurryThis("".slice); + var replace = uncurryThis("".replace); + var join = uncurryThis([].join); + var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function() { + return defineProperty(function() { + }, "length", { value: 8 }).length !== 8; + }); + var TEMPLATE = String(String).split("String"); + var makeBuiltIn = module2.exports = function(value, name, options) { + if (stringSlice($String(name), 0, 7) === "Symbol(") { + name = "[" + replace($String(name), /^Symbol\(([^)]*)\).*$/, "$1") + "]"; + } + if (options && options.getter) + name = "get " + name; + if (options && options.setter) + name = "set " + name; + if (!hasOwn(value, "name") || CONFIGURABLE_FUNCTION_NAME && value.name !== name) { + if (DESCRIPTORS) + defineProperty(value, "name", { value: name, configurable: true }); + else + value.name = name; + } + if (CONFIGURABLE_LENGTH && options && hasOwn(options, "arity") && value.length !== options.arity) { + defineProperty(value, "length", { value: options.arity }); + } + try { + if (options && hasOwn(options, "constructor") && options.constructor) { + if (DESCRIPTORS) + defineProperty(value, "prototype", { writable: false }); + } else if (value.prototype) + value.prototype = void 0; + } catch (error) { + } + var state = enforceInternalState(value); + if (!hasOwn(state, "source")) { + state.source = join(TEMPLATE, typeof name == "string" ? name : ""); + } + return value; + }; + Function.prototype.toString = makeBuiltIn(function toString() { + return isCallable(this) && getInternalState(this).source || inspectSource(this); + }, "toString"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in.js +var require_define_built_in = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in.js": function(exports2, module2) { + "use strict"; + var isCallable = require_is_callable(); + var definePropertyModule = require_object_define_property(); + var makeBuiltIn = require_make_built_in(); + var defineGlobalProperty = require_define_global_property(); + module2.exports = function(O, key, value, options) { + if (!options) + options = {}; + var simple = options.enumerable; + var name = options.name !== void 0 ? options.name : key; + if (isCallable(value)) + makeBuiltIn(value, name, options); + if (options.global) { + if (simple) + O[key] = value; + else + defineGlobalProperty(key, value); + } else { + try { + if (!options.unsafe) + delete O[key]; + else if (O[key]) + simple = true; + } catch (error) { + } + if (simple) + O[key] = value; + else + definePropertyModule.f(O, key, { + value: value, + enumerable: false, + configurable: !options.nonConfigurable, + writable: !options.nonWritable + }); + } + return O; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-define-to-primitive.js +var require_symbol_define_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-define-to-primitive.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var getBuiltIn = require_get_built_in(); + var wellKnownSymbol = require_well_known_symbol(); + var defineBuiltIn = require_define_built_in(); + module2.exports = function() { + var Symbol2 = getBuiltIn("Symbol"); + var SymbolPrototype = Symbol2 && Symbol2.prototype; + var valueOf = SymbolPrototype && SymbolPrototype.valueOf; + var TO_PRIMITIVE = wellKnownSymbol("toPrimitive"); + if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) { + defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function(hint) { + return call(valueOf, this); + }, { arity: 1 }); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.to-primitive.js +var require_es_symbol_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.to-primitive.js": function() { + "use strict"; + var defineWellKnownSymbol = require_well_known_symbol_define(); + var defineSymbolToPrimitive = require_symbol_define_to_primitive(); + defineWellKnownSymbol("toPrimitive"); + defineSymbolToPrimitive(); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-property-is-enumerable.js +var require_object_property_is_enumerable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-property-is-enumerable.js": function(exports2) { + "use strict"; + var $propertyIsEnumerable = {}.propertyIsEnumerable; + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1); + exports2.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; + } : $propertyIsEnumerable; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof-raw.js +var require_classof_raw = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof-raw.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toString = uncurryThis({}.toString); + var stringSlice = uncurryThis("".slice); + module2.exports = function(it) { + return stringSlice(toString(it), 8, -1); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/indexed-object.js +var require_indexed_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/indexed-object.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var classof = require_classof_raw(); + var $Object = Object; + var split = uncurryThis("".split); + module2.exports = fails(function() { + return !$Object("z").propertyIsEnumerable(0); + }) ? function(it) { + return classof(it) === "String" ? split(it, "") : $Object(it); + } : $Object; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-indexed-object.js +var require_to_indexed_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-indexed-object.js": function(exports2, module2) { + "use strict"; + var IndexedObject = require_indexed_object(); + var requireObjectCoercible = require_require_object_coercible(); + module2.exports = function(it) { + return IndexedObject(requireObjectCoercible(it)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +var require_object_get_own_property_descriptor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-descriptor.js": function(exports2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var call = require_function_call(); + var propertyIsEnumerableModule = require_object_property_is_enumerable(); + var createPropertyDescriptor = require_create_property_descriptor(); + var toIndexedObject = require_to_indexed_object(); + var toPropertyKey = require_to_property_key(); + var hasOwn = require_has_own_property(); + var IE8_DOM_DEFINE = require_ie8_dom_define(); + var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + exports2.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPropertyKey(P); + if (IE8_DOM_DEFINE) + try { + return $getOwnPropertyDescriptor(O, P); + } catch (error) { + } + if (hasOwn(O, P)) + return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/math-trunc.js +var require_math_trunc = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/math-trunc.js": function(exports2, module2) { + "use strict"; + var ceil = Math.ceil; + var floor = Math.floor; + module2.exports = Math.trunc || function trunc(x) { + var n = +x; + return (n > 0 ? floor : ceil)(n); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-integer-or-infinity.js +var require_to_integer_or_infinity = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-integer-or-infinity.js": function(exports2, module2) { + "use strict"; + var trunc = require_math_trunc(); + module2.exports = function(argument) { + var number = +argument; + return number !== number || number === 0 ? 0 : trunc(number); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-absolute-index.js +var require_to_absolute_index = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-absolute-index.js": function(exports2, module2) { + "use strict"; + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var max = Math.max; + var min = Math.min; + module2.exports = function(index, length) { + var integer = toIntegerOrInfinity(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-length.js +var require_to_length = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-length.js": function(exports2, module2) { + "use strict"; + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var min = Math.min; + module2.exports = function(argument) { + var len = toIntegerOrInfinity(argument); + return len > 0 ? min(len, 9007199254740991) : 0; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/length-of-array-like.js +var require_length_of_array_like = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/length-of-array-like.js": function(exports2, module2) { + "use strict"; + var toLength = require_to_length(); + module2.exports = function(obj) { + return toLength(obj.length); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-includes.js +var require_array_includes = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-includes.js": function(exports2, module2) { + "use strict"; + var toIndexedObject = require_to_indexed_object(); + var toAbsoluteIndex = require_to_absolute_index(); + var lengthOfArrayLike = require_length_of_array_like(); + var createMethod = function(IS_INCLUDES) { + return function($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = lengthOfArrayLike(O); + if (length === 0) + return !IS_INCLUDES && -1; + var index = toAbsoluteIndex(fromIndex, length); + var value; + if (IS_INCLUDES && el !== el) + while (length > index) { + value = O[index++]; + if (value !== value) + return true; + } + else + for (; length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) + return IS_INCLUDES || index || 0; + } + return !IS_INCLUDES && -1; + }; + }; + module2.exports = { + // `Array.prototype.includes` method + // https://tc39.es/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys-internal.js +var require_object_keys_internal = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys-internal.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var hasOwn = require_has_own_property(); + var toIndexedObject = require_to_indexed_object(); + var indexOf = require_array_includes().indexOf; + var hiddenKeys = require_hidden_keys(); + var push = uncurryThis([].push); + module2.exports = function(object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) + !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key); + while (names.length > i) + if (hasOwn(O, key = names[i++])) { + ~indexOf(result, key) || push(result, key); + } + return result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/enum-bug-keys.js +var require_enum_bug_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/enum-bug-keys.js": function(exports2, module2) { + "use strict"; + module2.exports = [ + "constructor", + "hasOwnProperty", + "isPrototypeOf", + "propertyIsEnumerable", + "toLocaleString", + "toString", + "valueOf" + ]; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names.js +var require_object_get_own_property_names = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names.js": function(exports2) { + "use strict"; + var internalObjectKeys = require_object_keys_internal(); + var enumBugKeys = require_enum_bug_keys(); + var hiddenKeys = enumBugKeys.concat("length", "prototype"); + exports2.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-symbols.js +var require_object_get_own_property_symbols = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-symbols.js": function(exports2) { + "use strict"; + exports2.f = Object.getOwnPropertySymbols; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/own-keys.js +var require_own_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/own-keys.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var uncurryThis = require_function_uncurry_this(); + var getOwnPropertyNamesModule = require_object_get_own_property_names(); + var getOwnPropertySymbolsModule = require_object_get_own_property_symbols(); + var anObject = require_an_object(); + var concat = uncurryThis([].concat); + module2.exports = getBuiltIn("Reflect", "ownKeys") || function ownKeys2(it) { + var keys2 = getOwnPropertyNamesModule.f(anObject(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols ? concat(keys2, getOwnPropertySymbols(it)) : keys2; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/copy-constructor-properties.js +var require_copy_constructor_properties = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/copy-constructor-properties.js": function(exports2, module2) { + "use strict"; + var hasOwn = require_has_own_property(); + var ownKeys2 = require_own_keys(); + var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor(); + var definePropertyModule = require_object_define_property(); + module2.exports = function(target, source, exceptions) { + var keys2 = ownKeys2(source); + var defineProperty = definePropertyModule.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys2.length; i++) { + var key = keys2[i]; + if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) { + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-forced.js +var require_is_forced = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-forced.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var isCallable = require_is_callable(); + var replacement = /#|\.prototype\./; + var isForced = function(feature, detection) { + var value = data[normalize(feature)]; + return value === POLYFILL ? true : value === NATIVE ? false : isCallable(detection) ? fails(detection) : !!detection; + }; + var normalize = isForced.normalize = function(string) { + return String(string).replace(replacement, ".").toLowerCase(); + }; + var data = isForced.data = {}; + var NATIVE = isForced.NATIVE = "N"; + var POLYFILL = isForced.POLYFILL = "P"; + module2.exports = isForced; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/export.js +var require_export = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/export.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var defineBuiltIn = require_define_built_in(); + var defineGlobalProperty = require_define_global_property(); + var copyConstructorProperties = require_copy_constructor_properties(); + var isForced = require_is_forced(); + module2.exports = function(options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global2; + } else if (STATIC) { + target = global2[TARGET] || defineGlobalProperty(TARGET, {}); + } else { + target = global2[TARGET] && global2[TARGET].prototype; + } + if (target) + for (key in source) { + sourceProperty = source[key]; + if (options.dontCallGetSet) { + descriptor = getOwnPropertyDescriptor(target, key); + targetProperty = descriptor && descriptor.value; + } else + targetProperty = target[key]; + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? "." : "#") + key, options.forced); + if (!FORCED && targetProperty !== void 0) { + if (typeof sourceProperty == typeof targetProperty) + continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + if (options.sham || targetProperty && targetProperty.sham) { + createNonEnumerableProperty(sourceProperty, "sham", true); + } + defineBuiltIn(target, key, sourceProperty, options); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-clause.js +var require_function_uncurry_this_clause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-clause.js": function(exports2, module2) { + "use strict"; + var classofRaw = require_classof_raw(); + var uncurryThis = require_function_uncurry_this(); + module2.exports = function(fn) { + if (classofRaw(fn) === "Function") + return uncurryThis(fn); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-context.js +var require_function_bind_context = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-context.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this_clause(); + var aCallable = require_a_callable(); + var NATIVE_BIND = require_function_bind_native(); + var bind = uncurryThis(uncurryThis.bind); + module2.exports = function(fn, that) { + aCallable(fn); + return that === void 0 ? fn : NATIVE_BIND ? bind(fn, that) : function() { + return fn.apply(that, arguments); + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-close.js +var require_iterator_close = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-close.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var anObject = require_an_object(); + var getMethod = require_get_method(); + module2.exports = function(iterator, kind, value) { + var innerResult, innerError; + anObject(iterator); + try { + innerResult = getMethod(iterator, "return"); + if (!innerResult) { + if (kind === "throw") + throw value; + return value; + } + innerResult = call(innerResult, iterator); + } catch (error) { + innerError = true; + innerResult = error; + } + if (kind === "throw") + throw value; + if (innerError) + throw innerResult; + anObject(innerResult); + return value; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/call-with-safe-iteration-closing.js +var require_call_with_safe_iteration_closing = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/call-with-safe-iteration-closing.js": function(exports2, module2) { + "use strict"; + var anObject = require_an_object(); + var iteratorClose = require_iterator_close(); + module2.exports = function(iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); + } catch (error) { + iteratorClose(iterator, "throw", error); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators.js +var require_iterators = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators.js": function(exports2, module2) { + "use strict"; + module2.exports = {}; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array-iterator-method.js +var require_is_array_iterator_method = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array-iterator-method.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var Iterators = require_iterators(); + var ITERATOR = wellKnownSymbol("iterator"); + var ArrayPrototype = Array.prototype; + module2.exports = function(it) { + return it !== void 0 && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string-tag-support.js +var require_to_string_tag_support = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string-tag-support.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + var test = {}; + test[TO_STRING_TAG] = "z"; + module2.exports = String(test) === "[object z]"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof.js +var require_classof = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof.js": function(exports2, module2) { + "use strict"; + var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); + var isCallable = require_is_callable(); + var classofRaw = require_classof_raw(); + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + var $Object = Object; + var CORRECT_ARGUMENTS = classofRaw(/* @__PURE__ */ function() { + return arguments; + }()) === "Arguments"; + var tryGet = function(it, key) { + try { + return it[key]; + } catch (error) { + } + }; + module2.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function(it) { + var O, tag, result; + return it === void 0 ? "Undefined" : it === null ? "Null" : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == "string" ? tag : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) === "Object" && isCallable(O.callee) ? "Arguments" : result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-constructor.js +var require_is_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-constructor.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var isCallable = require_is_callable(); + var classof = require_classof(); + var getBuiltIn = require_get_built_in(); + var inspectSource = require_inspect_source(); + var noop = function() { + }; + var construct = getBuiltIn("Reflect", "construct"); + var constructorRegExp = /^\s*(?:class|function)\b/; + var exec = uncurryThis(constructorRegExp.exec); + var INCORRECT_TO_STRING = !constructorRegExp.test(noop); + var isConstructorModern = function isConstructor(argument) { + if (!isCallable(argument)) + return false; + try { + construct(noop, [], argument); + return true; + } catch (error) { + return false; + } + }; + var isConstructorLegacy = function isConstructor(argument) { + if (!isCallable(argument)) + return false; + switch (classof(argument)) { + case "AsyncFunction": + case "GeneratorFunction": + case "AsyncGeneratorFunction": + return false; + } + try { + return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument)); + } catch (error) { + return true; + } + }; + isConstructorLegacy.sham = true; + module2.exports = !construct || fails(function() { + var called; + return isConstructorModern(isConstructorModern.call) || !isConstructorModern(Object) || !isConstructorModern(function() { + called = true; + }) || called; + }) ? isConstructorLegacy : isConstructorModern; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property.js +var require_create_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var definePropertyModule = require_object_define_property(); + var createPropertyDescriptor = require_create_property_descriptor(); + module2.exports = function(object, key, value) { + if (DESCRIPTORS) + definePropertyModule.f(object, key, createPropertyDescriptor(0, value)); + else + object[key] = value; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator-method.js +var require_get_iterator_method = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator-method.js": function(exports2, module2) { + "use strict"; + var classof = require_classof(); + var getMethod = require_get_method(); + var isNullOrUndefined = require_is_null_or_undefined(); + var Iterators = require_iterators(); + var wellKnownSymbol = require_well_known_symbol(); + var ITERATOR = wellKnownSymbol("iterator"); + module2.exports = function(it) { + if (!isNullOrUndefined(it)) + return getMethod(it, ITERATOR) || getMethod(it, "@@iterator") || Iterators[classof(it)]; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator.js +var require_get_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var aCallable = require_a_callable(); + var anObject = require_an_object(); + var tryToString = require_try_to_string(); + var getIteratorMethod = require_get_iterator_method(); + var $TypeError = TypeError; + module2.exports = function(argument, usingIterator) { + var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator; + if (aCallable(iteratorMethod)) + return anObject(call(iteratorMethod, argument)); + throw new $TypeError(tryToString(argument) + " is not iterable"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-from.js +var require_array_from = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-from.js": function(exports2, module2) { + "use strict"; + var bind = require_function_bind_context(); + var call = require_function_call(); + var toObject = require_to_object(); + var callWithSafeIterationClosing = require_call_with_safe_iteration_closing(); + var isArrayIteratorMethod = require_is_array_iterator_method(); + var isConstructor = require_is_constructor(); + var lengthOfArrayLike = require_length_of_array_like(); + var createProperty = require_create_property(); + var getIterator = require_get_iterator(); + var getIteratorMethod = require_get_iterator_method(); + var $Array = Array; + module2.exports = function from(arrayLike) { + var O = toObject(arrayLike); + var IS_CONSTRUCTOR = isConstructor(this); + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : void 0; + var mapping = mapfn !== void 0; + if (mapping) + mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : void 0); + var iteratorMethod = getIteratorMethod(O); + var index = 0; + var length, result, step, iterator, next, value; + if (iteratorMethod && !(this === $Array && isArrayIteratorMethod(iteratorMethod))) { + iterator = getIterator(O, iteratorMethod); + next = iterator.next; + result = IS_CONSTRUCTOR ? new this() : []; + for (; !(step = call(next, iterator)).done; index++) { + value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value; + createProperty(result, index, value); + } + } else { + length = lengthOfArrayLike(O); + result = IS_CONSTRUCTOR ? new this(length) : $Array(length); + for (; length > index; index++) { + value = mapping ? mapfn(O[index], index) : O[index]; + createProperty(result, index, value); + } + } + result.length = index; + return result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/check-correctness-of-iteration.js +var require_check_correctness_of_iteration = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/check-correctness-of-iteration.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var ITERATOR = wellKnownSymbol("iterator"); + var SAFE_CLOSING = false; + try { + called = 0; + iteratorWithReturn = { + next: function() { + return { done: !!called++ }; + }, + "return": function() { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function() { + return this; + }; + Array.from(iteratorWithReturn, function() { + throw 2; + }); + } catch (error) { + } + var called; + var iteratorWithReturn; + module2.exports = function(exec, SKIP_CLOSING) { + try { + if (!SKIP_CLOSING && !SAFE_CLOSING) + return false; + } catch (error) { + return false; + } + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function() { + return { + next: function() { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { + } + return ITERATION_SUPPORT; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.from.js +var require_es_array_from = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.from.js": function() { + "use strict"; + var $ = require_export(); + var from = require_array_from(); + var checkCorrectnessOfIteration = require_check_correctness_of_iteration(); + var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function(iterable) { + Array.from(iterable); + }); + $({ target: "Array", stat: true, forced: INCORRECT_ITERATION }, { + from: from + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array.js +var require_is_array = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array.js": function(exports2, module2) { + "use strict"; + var classof = require_classof_raw(); + module2.exports = Array.isArray || function isArray(argument) { + return classof(argument) === "Array"; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-set-length.js +var require_array_set_length = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-set-length.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var isArray = require_is_array(); + var $TypeError = TypeError; + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function() { + if (this !== void 0) + return true; + try { + Object.defineProperty([], "length", { writable: false }).length = 1; + } catch (error) { + return error instanceof TypeError; + } + }(); + module2.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function(O, length) { + if (isArray(O) && !getOwnPropertyDescriptor(O, "length").writable) { + throw new $TypeError("Cannot set read only .length"); + } + return O.length = length; + } : function(O, length) { + return O.length = length; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js +var require_does_not_exceed_safe_integer = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js": function(exports2, module2) { + "use strict"; + var $TypeError = TypeError; + var MAX_SAFE_INTEGER = 9007199254740991; + module2.exports = function(it) { + if (it > MAX_SAFE_INTEGER) + throw $TypeError("Maximum allowed index exceeded"); + return it; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.push.js +var require_es_array_push = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.push.js": function() { + "use strict"; + var $ = require_export(); + var toObject = require_to_object(); + var lengthOfArrayLike = require_length_of_array_like(); + var setArrayLength = require_array_set_length(); + var doesNotExceedSafeInteger = require_does_not_exceed_safe_integer(); + var fails = require_fails(); + var INCORRECT_TO_LENGTH = fails(function() { + return [].push.call({ length: 4294967296 }, 1) !== 4294967297; + }); + var properErrorOnNonWritableLength = function() { + try { + Object.defineProperty([], "length", { writable: false }).push(); + } catch (error) { + return error instanceof TypeError; + } + }; + var FORCED = INCORRECT_TO_LENGTH || !properErrorOnNonWritableLength(); + $({ target: "Array", proto: true, arity: 1, forced: FORCED }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + push: function push(item) { + var O = toObject(this); + var len = lengthOfArrayLike(O); + var argCount = arguments.length; + doesNotExceedSafeInteger(len + argCount); + for (var i = 0; i < argCount; i++) { + O[len] = arguments[i]; + len++; + } + setArrayLength(O, len); + return len; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/date-to-primitive.js +var require_date_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/date-to-primitive.js": function(exports2, module2) { + "use strict"; + var anObject = require_an_object(); + var ordinaryToPrimitive = require_ordinary_to_primitive(); + var $TypeError = TypeError; + module2.exports = function(hint) { + anObject(this); + if (hint === "string" || hint === "default") + hint = "string"; + else if (hint !== "number") + throw new $TypeError("Incorrect hint"); + return ordinaryToPrimitive(this, hint); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.date.to-primitive.js +var require_es_date_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.date.to-primitive.js": function() { + "use strict"; + var hasOwn = require_has_own_property(); + var defineBuiltIn = require_define_built_in(); + var dateToPrimitive = require_date_to_primitive(); + var wellKnownSymbol = require_well_known_symbol(); + var TO_PRIMITIVE = wellKnownSymbol("toPrimitive"); + var DatePrototype = Date.prototype; + if (!hasOwn(DatePrototype, TO_PRIMITIVE)) { + defineBuiltIn(DatePrototype, TO_PRIMITIVE, dateToPrimitive); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-accessor.js +var require_function_uncurry_this_accessor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-accessor.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var aCallable = require_a_callable(); + module2.exports = function(object, key, method) { + try { + return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method])); + } catch (error) { + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-possible-prototype.js +var require_is_possible_prototype = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-possible-prototype.js": function(exports2, module2) { + "use strict"; + var isObject2 = require_is_object(); + module2.exports = function(argument) { + return isObject2(argument) || argument === null; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-possible-prototype.js +var require_a_possible_prototype = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-possible-prototype.js": function(exports2, module2) { + "use strict"; + var isPossiblePrototype = require_is_possible_prototype(); + var $String = String; + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isPossiblePrototype(argument)) + return argument; + throw new $TypeError("Can't set " + $String(argument) + " as a prototype"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-set-prototype-of.js +var require_object_set_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-set-prototype-of.js": function(exports2, module2) { + "use strict"; + var uncurryThisAccessor = require_function_uncurry_this_accessor(); + var anObject = require_an_object(); + var aPossiblePrototype = require_a_possible_prototype(); + module2.exports = Object.setPrototypeOf || ("__proto__" in {} ? function() { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = uncurryThisAccessor(Object.prototype, "__proto__", "set"); + setter(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { + } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) + setter(O, proto); + else + O.__proto__ = proto; + return O; + }; + }() : void 0); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inherit-if-required.js +var require_inherit_if_required = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inherit-if-required.js": function(exports2, module2) { + "use strict"; + var isCallable = require_is_callable(); + var isObject2 = require_is_object(); + var setPrototypeOf = require_object_set_prototype_of(); + module2.exports = function($this, dummy, Wrapper) { + var NewTarget, NewTargetPrototype; + if ( + // it can work only with native `setPrototypeOf` + setPrototypeOf && // we haven't completely correct pre-ES6 way for getting `new.target`, so use this + isCallable(NewTarget = dummy.constructor) && NewTarget !== Wrapper && isObject2(NewTargetPrototype = NewTarget.prototype) && NewTargetPrototype !== Wrapper.prototype + ) + setPrototypeOf($this, NewTargetPrototype); + return $this; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/this-number-value.js +var require_this_number_value = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/this-number-value.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + module2.exports = uncurryThis(1 .valueOf); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string.js +var require_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string.js": function(exports2, module2) { + "use strict"; + var classof = require_classof(); + var $String = String; + module2.exports = function(argument) { + if (classof(argument) === "Symbol") + throw new TypeError("Cannot convert a Symbol value to a string"); + return $String(argument); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/whitespaces.js +var require_whitespaces = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/whitespaces.js": function(exports2, module2) { + "use strict"; + module2.exports = " \n\v\f\r                 \u2028\u2029\uFEFF"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-trim.js +var require_string_trim = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-trim.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var requireObjectCoercible = require_require_object_coercible(); + var toString = require_to_string(); + var whitespaces = require_whitespaces(); + var replace = uncurryThis("".replace); + var ltrim = RegExp("^[" + whitespaces + "]+"); + var rtrim = RegExp("(^|[^" + whitespaces + "])[" + whitespaces + "]+$"); + var createMethod = function(TYPE) { + return function($this) { + var string = toString(requireObjectCoercible($this)); + if (TYPE & 1) + string = replace(string, ltrim, ""); + if (TYPE & 2) + string = replace(string, rtrim, "$1"); + return string; + }; + }; + module2.exports = { + // `String.prototype.{ trimLeft, trimStart }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimstart + start: createMethod(1), + // `String.prototype.{ trimRight, trimEnd }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimend + end: createMethod(2), + // `String.prototype.trim` method + // https://tc39.es/ecma262/#sec-string.prototype.trim + trim: createMethod(3) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.number.constructor.js +var require_es_number_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.number.constructor.js": function() { + "use strict"; + var $ = require_export(); + var IS_PURE = require_is_pure(); + var DESCRIPTORS = require_descriptors(); + var global2 = require_global(); + var path = require_path(); + var uncurryThis = require_function_uncurry_this(); + var isForced = require_is_forced(); + var hasOwn = require_has_own_property(); + var inheritIfRequired = require_inherit_if_required(); + var isPrototypeOf = require_object_is_prototype_of(); + var isSymbol = require_is_symbol(); + var toPrimitive = require_to_primitive(); + var fails = require_fails(); + var getOwnPropertyNames = require_object_get_own_property_names().f; + var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; + var defineProperty = require_object_define_property().f; + var thisNumberValue = require_this_number_value(); + var trim = require_string_trim().trim; + var NUMBER = "Number"; + var NativeNumber = global2[NUMBER]; + var PureNumberNamespace = path[NUMBER]; + var NumberPrototype = NativeNumber.prototype; + var TypeError2 = global2.TypeError; + var stringSlice = uncurryThis("".slice); + var charCodeAt = uncurryThis("".charCodeAt); + var toNumeric = function(value) { + var primValue = toPrimitive(value, "number"); + return typeof primValue == "bigint" ? primValue : toNumber(primValue); + }; + var toNumber = function(argument) { + var it = toPrimitive(argument, "number"); + var first, third, radix, maxCode, digits, length, index, code; + if (isSymbol(it)) + throw new TypeError2("Cannot convert a Symbol value to a number"); + if (typeof it == "string" && it.length > 2) { + it = trim(it); + first = charCodeAt(it, 0); + if (first === 43 || first === 45) { + third = charCodeAt(it, 2); + if (third === 88 || third === 120) + return NaN; + } else if (first === 48) { + switch (charCodeAt(it, 1)) { + case 66: + case 98: + radix = 2; + maxCode = 49; + break; + case 79: + case 111: + radix = 8; + maxCode = 55; + break; + default: + return +it; + } + digits = stringSlice(it, 2); + length = digits.length; + for (index = 0; index < length; index++) { + code = charCodeAt(digits, index); + if (code < 48 || code > maxCode) + return NaN; + } + return parseInt(digits, radix); + } + } + return +it; + }; + var FORCED = isForced(NUMBER, !NativeNumber(" 0o1") || !NativeNumber("0b1") || NativeNumber("+0x1")); + var calledWithNew = function(dummy) { + return isPrototypeOf(NumberPrototype, dummy) && fails(function() { + thisNumberValue(dummy); + }); + }; + var NumberWrapper = function Number2(value) { + var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value)); + return calledWithNew(this) ? inheritIfRequired(Object(n), this, NumberWrapper) : n; + }; + NumberWrapper.prototype = NumberPrototype; + if (FORCED && !IS_PURE) + NumberPrototype.constructor = NumberWrapper; + $({ global: true, constructor: true, wrap: true, forced: FORCED }, { + Number: NumberWrapper + }); + var copyConstructorProperties = function(target, source) { + for (var keys2 = DESCRIPTORS ? getOwnPropertyNames(source) : ( + // ES3: + "MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(",") + ), j = 0, key; keys2.length > j; j++) { + if (hasOwn(source, key = keys2[j]) && !hasOwn(target, key)) { + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + } + }; + if (IS_PURE && PureNumberNamespace) + copyConstructorProperties(path[NUMBER], PureNumberNamespace); + if (FORCED || IS_PURE) + copyConstructorProperties(path[NUMBER], NativeNumber); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-flags.js +var require_regexp_flags = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-flags.js": function(exports2, module2) { + "use strict"; + var anObject = require_an_object(); + module2.exports = function() { + var that = anObject(this); + var result = ""; + if (that.hasIndices) + result += "d"; + if (that.global) + result += "g"; + if (that.ignoreCase) + result += "i"; + if (that.multiline) + result += "m"; + if (that.dotAll) + result += "s"; + if (that.unicode) + result += "u"; + if (that.unicodeSets) + result += "v"; + if (that.sticky) + result += "y"; + return result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-get-flags.js +var require_regexp_get_flags = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-get-flags.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var hasOwn = require_has_own_property(); + var isPrototypeOf = require_object_is_prototype_of(); + var regExpFlags = require_regexp_flags(); + var RegExpPrototype = RegExp.prototype; + module2.exports = function(R) { + var flags = R.flags; + return flags === void 0 && !("flags" in RegExpPrototype) && !hasOwn(R, "flags") && isPrototypeOf(RegExpPrototype, R) ? call(regExpFlags, R) : flags; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.to-string.js +var require_es_regexp_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.to-string.js": function() { + "use strict"; + var PROPER_FUNCTION_NAME = require_function_name().PROPER; + var defineBuiltIn = require_define_built_in(); + var anObject = require_an_object(); + var $toString = require_to_string(); + var fails = require_fails(); + var getRegExpFlags = require_regexp_get_flags(); + var TO_STRING = "toString"; + var RegExpPrototype = RegExp.prototype; + var nativeToString = RegExpPrototype[TO_STRING]; + var NOT_GENERIC = fails(function() { + return nativeToString.call({ source: "a", flags: "b" }) !== "/a/b"; + }); + var INCORRECT_NAME = PROPER_FUNCTION_NAME && nativeToString.name !== TO_STRING; + if (NOT_GENERIC || INCORRECT_NAME) { + defineBuiltIn(RegExpPrototype, TO_STRING, function toString() { + var R = anObject(this); + var pattern = $toString(R.source); + var flags = $toString(getRegExpFlags(R)); + return "/" + pattern + "/" + flags; + }, { unsafe: true }); + } + } +}); + +// node_modules/.pnpm/proxy-polyfill@0.3.2/node_modules/proxy-polyfill/proxy.min.js +var require_proxy_min = __commonJS({ + "node_modules/.pnpm/proxy-polyfill@0.3.2/node_modules/proxy-polyfill/proxy.min.js": function() { + (function() { + function n() { + function v() { + return null; + } + function l(a) { + return a ? "object" === typeof a || "function" === typeof a : false; + } + function p(a) { + if (null !== a && !l(a)) + throw new TypeError("Object prototype may only be an Object or null: " + a); + } + var q = null, e = Object, w = !!e.create || !({ __proto__: null } instanceof e), A = e.create || (w ? function(a) { + p(a); + return { __proto__: a }; + } : function(a) { + function c() { + } + p(a); + if (null === a) + throw new SyntaxError("Native Object.create is required to create objects with null prototype"); + c.prototype = a; + return new c(); + }), B = e.getPrototypeOf || ([].__proto__ === Array.prototype ? function(a) { + a = a.__proto__; + return l(a) ? a : null; + } : v); + var m = function(a, c) { + function k() { + } + if (void 0 === (this && this instanceof m ? this.constructor : void 0)) + throw new TypeError("Constructor Proxy requires 'new'"); + if (!l(a) || !l(c)) + throw new TypeError("Cannot create proxy with a non-object as target or handler"); + q = function() { + a = null; + k = function(b) { + throw new TypeError("Cannot perform '" + b + "' on a proxy that has been revoked"); + }; + }; + setTimeout(function() { + q = null; + }, 0); + var g = c; + c = { get: null, set: null, apply: null, construct: null }; + for (var h2 in g) { + if (!(h2 in c)) + throw new TypeError("Proxy polyfill does not support trap '" + h2 + "'"); + c[h2] = g[h2]; + } + "function" === typeof g && (c.apply = g.apply.bind(g)); + g = B(a); + var r = false, t = false; + if ("function" === typeof a) { + var f = function() { + var b = this && this.constructor === f, d = Array.prototype.slice.call(arguments); + k(b ? "construct" : "apply"); + return b && c.construct ? c.construct.call(this, a, d) : !b && c.apply ? c.apply(a, this, d) : b ? (d.unshift(a), new (a.bind.apply(a, d))()) : a.apply( + this, + d + ); + }; + r = true; + } else + a instanceof Array ? (f = [], t = true) : f = w || null !== g ? A(g) : {}; + var x = c.get ? function(b) { + k("get"); + return c.get(this, b, f); + } : function(b) { + k("get"); + return this[b]; + }, C = c.set ? function(b, d) { + k("set"); + c.set(this, b, d, f); + } : function(b, d) { + k("set"); + this[b] = d; + }, y = {}; + e.getOwnPropertyNames(a).forEach(function(b) { + if (!((r || t) && b in f)) { + var d = e.getOwnPropertyDescriptor(a, b); + e.defineProperty(f, b, { enumerable: !!d.enumerable, get: x.bind(a, b), set: C.bind(a, b) }); + y[b] = true; + } + }); + h2 = true; + if (r || t) { + var D = e.setPrototypeOf || ([].__proto__ === Array.prototype ? function(b, d) { + p(d); + b.__proto__ = d; + return b; + } : v); + g && D(f, g) || (h2 = false); + } + if (c.get || !h2) + for (var u in a) + y[u] || e.defineProperty(f, u, { get: x.bind(a, u) }); + e.seal(a); + e.seal(f); + return f; + }; + m.revocable = function(a, c) { + return { proxy: new m(a, c), revoke: q }; + }; + return m; + } + ; + var z = "undefined" !== typeof process && "[object process]" === {}.toString.call(process) || "undefined" !== typeof navigator && "ReactNative" === navigator.product ? global : self; + z.Proxy || (z.Proxy = n(), z.Proxy.revocable = z.Proxy.revocable); + })(); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/helpers/_DOMTokenList.js +var _DOMTokenList, DOMTokenList_default; +var init_DOMTokenList = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/helpers/_DOMTokenList.js": function() { + _DOMTokenList = function() { + var dpSupport = true; + var defineGetter = function(object, name, fn, configurable) { + if (Object.defineProperty) + Object.defineProperty(object, name, { + configurable: false === dpSupport ? true : !!configurable, + get: fn + }); + else + object.__defineGetter__(name, fn); + }; + try { + defineGetter({}, "support"); + } catch (e) { + dpSupport = false; + } + var _DOMTokenList2 = function(el, prop) { + var that = this; + var tokens = []; + var tokenMap = {}; + var length = 0; + var maxLength = 0; + var addIndexGetter = function(i) { + defineGetter(that, i, function() { + preop(); + return tokens[i]; + }, false); + }; + var reindex = function() { + if (length >= maxLength) + for (; maxLength < length; ++maxLength) { + addIndexGetter(maxLength); + } + }; + var preop = function() { + var error; + var i; + var args = arguments; + var rSpace = /\s+/; + if (args.length) { + for (i = 0; i < args.length; ++i) + if (rSpace.test(args[i])) { + error = new SyntaxError('String "' + args[i] + '" contains an invalid character'); + error.code = 5; + error.name = "InvalidCharacterError"; + throw error; + } + } + if (typeof el[prop] === "object") { + tokens = ("" + el[prop].baseVal).replace(/^\s+|\s+$/g, "").split(rSpace); + } else { + tokens = ("" + el[prop]).replace(/^\s+|\s+$/g, "").split(rSpace); + } + if ("" === tokens[0]) + tokens = []; + tokenMap = {}; + for (i = 0; i < tokens.length; ++i) + tokenMap[tokens[i]] = true; + length = tokens.length; + reindex(); + }; + preop(); + defineGetter(that, "length", function() { + preop(); + return length; + }); + that.toLocaleString = that.toString = function() { + preop(); + return tokens.join(" "); + }; + that.item = function(idx) { + preop(); + return tokens[idx]; + }; + that.contains = function(token) { + preop(); + return !!tokenMap[token]; + }; + that.add = function() { + preop.apply(that, args = arguments); + for (var args, token, i = 0, l = args.length; i < l; ++i) { + token = args[i]; + if (!tokenMap[token]) { + tokens.push(token); + tokenMap[token] = true; + } + } + if (length !== tokens.length) { + length = tokens.length >>> 0; + if (typeof el[prop] === "object") { + el[prop].baseVal = tokens.join(" "); + } else { + el[prop] = tokens.join(" "); + } + reindex(); + } + }; + that.remove = function() { + preop.apply(that, args = arguments); + for (var args, ignore = {}, i = 0, t = []; i < args.length; ++i) { + ignore[args[i]] = true; + delete tokenMap[args[i]]; + } + for (i = 0; i < tokens.length; ++i) + if (!ignore[tokens[i]]) + t.push(tokens[i]); + tokens = t; + length = t.length >>> 0; + if (typeof el[prop] === "object") { + el[prop].baseVal = tokens.join(" "); + } else { + el[prop] = tokens.join(" "); + } + reindex(); + }; + that.toggle = function(token, force) { + preop.apply(that, [token]); + if (void 0 !== force) { + if (force) { + that.add(token); + return true; + } else { + that.remove(token); + return false; + } + } + if (tokenMap[token]) { + that.remove(token); + return false; + } + that.add(token); + return true; + }; + that.forEach = Array.prototype.forEach; + return that; + }; + return _DOMTokenList2; + }(); + DOMTokenList_default = _DOMTokenList; + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DOMTokenList.js +var DOMTokenList_exports = {}; +var init_DOMTokenList2 = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DOMTokenList.js": function() { + init_DOMTokenList(); + (function(undefined2) { + if (!("DOMTokenList" in self && function(e) { + return !("classList" in e) || !e.classList.toggle("x", false) && !e.className; + }(document.createElement("x")))) { + (function(global2) { + var nativeImpl = "DOMTokenList" in global2 && global2.DOMTokenList; + if (!nativeImpl || !!document.createElementNS && !!document.createElementNS("http://www.w3.org/2000/svg", "svg") && !(document.createElementNS("http://www.w3.org/2000/svg", "svg").classList instanceof DOMTokenList)) { + global2.DOMTokenList = DOMTokenList_default; + } + (function() { + var e = document.createElement("span"); + if (!("classList" in e)) + return; + e.classList.toggle("x", false); + if (!e.classList.contains("x")) + return; + e.classList.constructor.prototype.toggle = function toggle(token) { + var force = arguments[1]; + if (force === undefined2) { + var add = !this.contains(token); + this[add ? "add" : "remove"](token); + return add; + } + force = !!force; + this[force ? "add" : "remove"](token); + return force; + }; + })(); + (function() { + var e = document.createElement("span"); + if (!("classList" in e)) + return; + e.classList.add("a", "b"); + if (e.classList.contains("b")) + return; + var native = e.classList.constructor.prototype.add; + e.classList.constructor.prototype.add = function() { + var args = arguments; + var l = arguments.length; + for (var i = 0; i < l; i++) { + native.call(this, args[i]); + } + }; + })(); + (function() { + var e = document.createElement("span"); + if (!("classList" in e)) + return; + e.classList.add("a"); + e.classList.add("b"); + e.classList.remove("a", "b"); + if (!e.classList.contains("b")) + return; + var native = e.classList.constructor.prototype.remove; + e.classList.constructor.prototype.remove = function() { + var args = arguments; + var l = arguments.length; + for (var i = 0; i < l; i++) { + native.call(this, args[i]); + } + }; + })(); + })(self); + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/helpers/_Iterator.js +var Iterator, Iterator_default; +var init_Iterator = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/helpers/_Iterator.js": function() { + Iterator = function() { + var clear = function() { + this.length = 0; + return this; + }; + var callable = function(fn) { + if (typeof fn !== "function") + throw new TypeError(fn + " is not a function"); + return fn; + }; + var Iterator2 = function(list, context) { + if (!(this instanceof Iterator2)) { + return new Iterator2(list, context); + } + Object.defineProperties(this, { + __list__: { + writable: true, + value: list + }, + __context__: { + writable: true, + value: context + }, + __nextIndex__: { + writable: true, + value: 0 + } + }); + if (!context) + return; + callable(context.on); + context.on("_add", this._onAdd.bind(this)); + context.on("_delete", this._onDelete.bind(this)); + context.on("_clear", this._onClear.bind(this)); + }; + Object.defineProperties(Iterator2.prototype, Object.assign({ + constructor: { + value: Iterator2, + configurable: true, + enumerable: false, + writable: true + }, + _next: { + value: function() { + var i; + if (!this.__list__) + return; + if (this.__redo__) { + i = this.__redo__.shift(); + if (i !== void 0) + return i; + } + if (this.__nextIndex__ < this.__list__.length) + return this.__nextIndex__++; + this._unBind(); + }, + configurable: true, + enumerable: false, + writable: true + }, + next: { + value: function() { + return this._createResult(this._next()); + }, + configurable: true, + enumerable: false, + writable: true + }, + _createResult: { + value: function(i) { + if (i === void 0) + return { + done: true, + value: void 0 + }; + return { + done: false, + value: this._resolve(i) + }; + }, + configurable: true, + enumerable: false, + writable: true + }, + _resolve: { + value: function(i) { + return this.__list__[i]; + }, + configurable: true, + enumerable: false, + writable: true + }, + _unBind: { + value: function() { + this.__list__ = null; + delete this.__redo__; + if (!this.__context__) + return; + this.__context__.off("_add", this._onAdd.bind(this)); + this.__context__.off("_delete", this._onDelete.bind(this)); + this.__context__.off("_clear", this._onClear.bind(this)); + this.__context__ = null; + }, + configurable: true, + enumerable: false, + writable: true + }, + toString: { + value: function() { + return "[object Iterator]"; + }, + configurable: true, + enumerable: false, + writable: true + } + }, { + _onAdd: { + value: function(index) { + if (index >= this.__nextIndex__) + return; + ++this.__nextIndex__; + if (!this.__redo__) { + Object.defineProperty(this, "__redo__", { + value: [index], + configurable: true, + enumerable: false, + writable: false + }); + return; + } + this.__redo__.forEach(function(redo, i) { + if (redo >= index) + this.__redo__[i] = ++redo; + }, this); + this.__redo__.push(index); + }, + configurable: true, + enumerable: false, + writable: true + }, + _onDelete: { + value: function(index) { + var i; + if (index >= this.__nextIndex__) + return; + --this.__nextIndex__; + if (!this.__redo__) + return; + i = this.__redo__.indexOf(index); + if (i !== -1) + this.__redo__.splice(i, 1); + this.__redo__.forEach(function(redo, i2) { + if (redo > index) + this.__redo__[i2] = --redo; + }, this); + }, + configurable: true, + enumerable: false, + writable: true + }, + _onClear: { + value: function() { + if (this.__redo__) + clear.call(this.__redo__); + this.__nextIndex__ = 0; + }, + configurable: true, + enumerable: false, + writable: true + } + })); + Object.defineProperty(Iterator2.prototype, Symbol.iterator, { + value: function() { + return this; + }, + configurable: true, + enumerable: false, + writable: true + }); + Object.defineProperty(Iterator2.prototype, Symbol.toStringTag, { + value: "Iterator", + configurable: false, + enumerable: false, + writable: true + }); + return Iterator2; + }(); + Iterator_default = Iterator; + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/helpers/_ArrayIterator.js +var ArrayIterator, ArrayIterator_default; +var init_ArrayIterator = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/helpers/_ArrayIterator.js": function() { + init_Iterator(); + ArrayIterator = function() { + var ArrayIterator2 = function(arr, kind) { + if (!(this instanceof ArrayIterator2)) + return new ArrayIterator2(arr, kind); + Iterator_default.call(this, arr); + if (!kind) + kind = "value"; + else if (String.prototype.includes.call(kind, "key+value")) + kind = "key+value"; + else if (String.prototype.includes.call(kind, "key")) + kind = "key"; + else + kind = "value"; + Object.defineProperty(this, "__kind__", { + value: kind, + configurable: false, + enumerable: false, + writable: false + }); + }; + if (Object.setPrototypeOf) + Object.setPrototypeOf(ArrayIterator2, Iterator_default.prototype); + ArrayIterator2.prototype = Object.create(Iterator_default.prototype, { + constructor: { + value: ArrayIterator2, + configurable: true, + enumerable: false, + writable: true + }, + _resolve: { + value: function(i) { + if (this.__kind__ === "value") + return this.__list__[i]; + if (this.__kind__ === "key+value") + return [i, this.__list__[i]]; + return i; + }, + configurable: true, + enumerable: false, + writable: true + }, + toString: { + value: function() { + return "[object Array Iterator]"; + }, + configurable: true, + enumerable: false, + writable: true + } + }); + Object.defineProperty(ArrayIterator2.prototype, Symbol.toStringTag, { + value: "Array Iterator", + writable: false, + enumerable: false, + configurable: true + }); + return ArrayIterator2; + }(); + ArrayIterator_default = ArrayIterator; + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/NodeList.prototype.@@iterator.js +var NodeList_prototype_iterator_exports = {}; +var init_NodeList_prototype_iterator = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/NodeList.prototype.@@iterator.js": function() { + init_ArrayIterator(); + init_Iterator(); + (function(undefined2) { + if (!("Symbol" in self && "iterator" in self.Symbol && function() { + var e = document.createDocumentFragment(); + return e.appendChild(document.createElement("div")), !!e.childNodes[self.Symbol.iterator]; + }())) { + NodeList.prototype[Symbol.iterator] = function() { + return new ArrayIterator_default(this); + }; + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/NodeList.prototype.forEach.js +var require_NodeList_prototype_forEach = __commonJS({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/NodeList.prototype.forEach.js": function() { + (function(undefined2) { + if (!("forEach" in NodeList.prototype)) { + NodeList.prototype.forEach = Array.prototype.forEach; + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/Event.js +var require_Event = __commonJS({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/Event.js": function() { + (function(undefined2) { + if (!function(n) { + if (!("Event" in n)) + return false; + try { + return new Event("click"), true; + } catch (n2) { + return false; + } + }(self)) { + (function() { + if (typeof document === "undefined" || typeof window === "undefined") + return; + var existingProto = window.Event && window.Event.prototype || null; + function Event2(type, eventInitDict) { + if (!type) { + throw new Error("Not enough arguments"); + } + var event; + if ("createEvent" in document) { + event = document.createEvent("Event"); + var bubbles = eventInitDict && eventInitDict.bubbles !== undefined2 ? eventInitDict.bubbles : false; + var cancelable = eventInitDict && eventInitDict.cancelable !== undefined2 ? eventInitDict.cancelable : false; + event.initEvent(type, bubbles, cancelable); + return event; + } + event = document.createEventObject(); + event.type = type; + event.bubbles = eventInitDict && eventInitDict.bubbles !== undefined2 ? eventInitDict.bubbles : false; + event.cancelable = eventInitDict && eventInitDict.cancelable !== undefined2 ? eventInitDict.cancelable : false; + return event; + } + Event2.NONE = 0; + Event2.CAPTURING_PHASE = 1; + Event2.AT_TARGET = 2; + Event2.BUBBLING_PHASE = 3; + window.Event = Window.prototype.Event = Event2; + if (existingProto) { + Object.defineProperty(window.Event, "prototype", { + configurable: false, + enumerable: false, + writable: true, + value: existingProto + }); + } + if (!("createEvent" in document)) { + window.addEventListener = Window.prototype.addEventListener = Document.prototype.addEventListener = Element.prototype.addEventListener = function addEventListener() { + var element = this, type = arguments[0], listener = arguments[1]; + if (!element._events) { + element._events = {}; + } + if (!element._events[type]) { + element._events[type] = function(event) { + var list = element._events[event.type].list, events = list.slice(), index = -1, length = events.length, eventElement; + event.preventDefault = function preventDefault2() { + if (event.cancelable !== false) { + event.returnValue = false; + } + }; + event.stopPropagation = function stopPropagation2() { + event.cancelBubble = true; + }; + event.stopImmediatePropagation = function stopImmediatePropagation() { + event.cancelBubble = true; + event.cancelImmediate = true; + }; + event.currentTarget = element; + event.relatedTarget = event.fromElement || null; + event.target = event.target || event.srcElement || element; + event.timeStamp = (/* @__PURE__ */ new Date()).getTime(); + if (event.clientX) { + event.pageX = event.clientX + document.documentElement.scrollLeft; + event.pageY = event.clientY + document.documentElement.scrollTop; + } + while (++index < length && !event.cancelImmediate) { + if (index in events) { + eventElement = events[index]; + if (list.includes(eventElement) && typeof eventElement === "function") { + eventElement.call(element, event); + } + } + } + }; + element._events[type].list = []; + if (element.attachEvent) { + element.attachEvent("on" + type, element._events[type]); + } + } + element._events[type].list.push(listener); + }; + window.removeEventListener = Window.prototype.removeEventListener = Document.prototype.removeEventListener = Element.prototype.removeEventListener = function removeEventListener() { + var element = this, type = arguments[0], listener = arguments[1], index; + if (element._events && element._events[type] && element._events[type].list) { + index = element._events[type].list.indexOf(listener); + if (index !== -1) { + element._events[type].list.splice(index, 1); + if (!element._events[type].list.length) { + if (element.detachEvent) { + element.detachEvent("on" + type, element._events[type]); + } + delete element._events[type]; + } + } + } + }; + window.dispatchEvent = Window.prototype.dispatchEvent = Document.prototype.dispatchEvent = Element.prototype.dispatchEvent = function dispatchEvent(event) { + if (!arguments.length) { + throw new Error("Not enough arguments"); + } + if (!event || typeof event.type !== "string") { + throw new Error("DOM Events Exception 0"); + } + var element = this, type = event.type; + try { + if (!event.bubbles) { + event.cancelBubble = true; + var cancelBubbleEvent = function(event2) { + event2.cancelBubble = true; + (element || window).detachEvent("on" + type, cancelBubbleEvent); + }; + this.attachEvent("on" + type, cancelBubbleEvent); + } + this.fireEvent("on" + type, event); + } catch (error) { + event.target = element; + do { + event.currentTarget = element; + if ("_events" in element && typeof element._events[type] === "function") { + element._events[type].call(element, event); + } + if (typeof element["on" + type] === "function") { + element["on" + type].call(element, event); + } + element = element.nodeType === 9 ? element.parentWindow : element.parentNode; + } while (element && !event.cancelBubble); + } + return true; + }; + document.attachEvent("onreadystatechange", function() { + if (document.readyState === "complete") { + document.dispatchEvent(new Event2("DOMContentLoaded", { + bubbles: true + })); + } + }); + } + })(); + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/CustomEvent.js +var require_CustomEvent = __commonJS({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/CustomEvent.js": function() { + (function(undefined2) { + if (!("CustomEvent" in self && ("function" == typeof self.CustomEvent || self.CustomEvent.toString().indexOf("CustomEventConstructor") > -1))) { + self.CustomEvent = function CustomEvent2(type, eventInitDict) { + if (!type) { + throw Error('TypeError: Failed to construct "CustomEvent": An event name must be provided.'); + } + var event; + eventInitDict = eventInitDict || { bubbles: false, cancelable: false, detail: null }; + try { + event = document.createEvent("CustomEvent"); + event.initCustomEvent(type, eventInitDict.bubbles, eventInitDict.cancelable, eventInitDict.detail); + } catch (error) { + event = document.createEvent("Event"); + event.initEvent(type, eventInitDict.bubbles, eventInitDict.cancelable); + event.detail = eventInitDict.detail; + } + return event; + }; + CustomEvent.prototype = Event.prototype; + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DocumentFragment.js +var require_DocumentFragment = __commonJS({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DocumentFragment.js": function() { + (function(undefined2) { + if (!("DocumentFragment" in self && function() { + try { + return new DocumentFragment(), true; + } catch (n) { + return false; + } + }())) { + (function(global2) { + global2.DocumentFragment = function DocumentFragment2() { + return document.createDocumentFragment(); + }; + var fragment = document.createDocumentFragment(); + global2.DocumentFragment.prototype = Object.create(fragment.constructor.prototype); + })(self); + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/Element.prototype.matches.js +var require_Element_prototype_matches = __commonJS({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/Element.prototype.matches.js": function() { + (function(undefined2) { + if (!("document" in self && "matches" in document.documentElement)) { + Element.prototype.matches = Element.prototype.webkitMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.mozMatchesSelector || function matches(selector) { + var element = this; + var elements = (element.document || element.ownerDocument).querySelectorAll(selector); + var index = 0; + while (elements[index] && elements[index] !== element) { + ++index; + } + return !!elements[index]; + }; + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/HTMLTemplateElement.js +var require_HTMLTemplateElement = __commonJS({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/HTMLTemplateElement.js": function() { + /** + * @license + * Copyright (c) 2016 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt + */ + (function() { + "use strict"; + var needsTemplate = typeof HTMLTemplateElement === "undefined"; + var brokenDocFragment = !(document.createDocumentFragment().cloneNode() instanceof DocumentFragment); + var needsDocFrag = false; + if (/Trident/.test(navigator.userAgent)) { + (function() { + needsDocFrag = true; + var origCloneNode = Node.prototype.cloneNode; + Node.prototype.cloneNode = function cloneNode2(deep) { + var newDom = origCloneNode.call(this, deep); + if (this instanceof DocumentFragment) { + newDom.__proto__ = DocumentFragment.prototype; + } + return newDom; + }; + DocumentFragment.prototype.querySelectorAll = HTMLElement.prototype.querySelectorAll; + DocumentFragment.prototype.querySelector = HTMLElement.prototype.querySelector; + Object.defineProperties(DocumentFragment.prototype, { + "nodeType": { + get: function() { + return Node.DOCUMENT_FRAGMENT_NODE; + }, + configurable: true + }, + "localName": { + get: function() { + return void 0; + }, + configurable: true + }, + "nodeName": { + get: function() { + return "#document-fragment"; + }, + configurable: true + } + }); + var origInsertBefore = Node.prototype.insertBefore; + function insertBefore(newNode, refNode) { + if (newNode instanceof DocumentFragment) { + var child; + while (child = newNode.firstChild) { + origInsertBefore.call(this, child, refNode); + } + } else { + origInsertBefore.call(this, newNode, refNode); + } + return newNode; + } + Node.prototype.insertBefore = insertBefore; + var origAppendChild = Node.prototype.appendChild; + Node.prototype.appendChild = function appendChild2(child) { + if (child instanceof DocumentFragment) { + insertBefore.call(this, child, null); + } else { + origAppendChild.call(this, child); + } + return child; + }; + var origRemoveChild = Node.prototype.removeChild; + var origReplaceChild = Node.prototype.replaceChild; + Node.prototype.replaceChild = function replaceChild(newChild, oldChild) { + if (newChild instanceof DocumentFragment) { + insertBefore.call(this, newChild, oldChild); + origRemoveChild.call(this, oldChild); + } else { + origReplaceChild.call(this, newChild, oldChild); + } + return oldChild; + }; + Document.prototype.createDocumentFragment = function createDocumentFragment() { + var frag = this.createElement("df"); + frag.__proto__ = DocumentFragment.prototype; + return frag; + }; + var origImportNode = Document.prototype.importNode; + Document.prototype.importNode = function importNode2(impNode, deep) { + deep = deep || false; + var newNode = origImportNode.call(this, impNode, deep); + if (impNode instanceof DocumentFragment) { + newNode.__proto__ = DocumentFragment.prototype; + } + return newNode; + }; + })(); + } + var capturedCloneNode = Node.prototype.cloneNode; + var capturedCreateElement = Document.prototype.createElement; + var capturedImportNode = Document.prototype.importNode; + var capturedRemoveChild = Node.prototype.removeChild; + var capturedAppendChild = Node.prototype.appendChild; + var capturedReplaceChild = Node.prototype.replaceChild; + var capturedParseFromString = DOMParser.prototype.parseFromString; + var capturedHTMLElementInnerHTML = Object.getOwnPropertyDescriptor( + window.HTMLElement.prototype, + "innerHTML" + ) || { + /** + * @this {!HTMLElement} + * @return {string} + */ + get: function() { + return this.innerHTML; + }, + /** + * @this {!HTMLElement} + * @param {string} + */ + set: function(text) { + this.innerHTML = text; + } + }; + var capturedChildNodes = Object.getOwnPropertyDescriptor( + window.Node.prototype, + "childNodes" + ) || { + /** + * @this {!Node} + * @return {!NodeList} + */ + get: function() { + return this.childNodes; + } + }; + var elementQuerySelectorAll = Element.prototype.querySelectorAll; + var docQuerySelectorAll = Document.prototype.querySelectorAll; + var fragQuerySelectorAll = DocumentFragment.prototype.querySelectorAll; + var scriptSelector = 'script:not([type]),script[type="application/javascript"],script[type="text/javascript"]'; + function QSA(node, selector) { + if (!node.childNodes.length) { + return []; + } + switch (node.nodeType) { + case Node.DOCUMENT_NODE: + return docQuerySelectorAll.call(node, selector); + case Node.DOCUMENT_FRAGMENT_NODE: + return fragQuerySelectorAll.call(node, selector); + default: + return elementQuerySelectorAll.call(node, selector); + } + } + var needsCloning = function() { + if (!needsTemplate) { + var t = document.createElement("template"); + var t2 = document.createElement("template"); + t2.content.appendChild(document.createElement("div")); + t.content.appendChild(t2); + var clone = t.cloneNode(true); + return clone.content.childNodes.length === 0 || clone.content.firstChild.content.childNodes.length === 0 || brokenDocFragment; + } + }(); + var TEMPLATE_TAG = "template"; + var PolyfilledHTMLTemplateElement = function() { + }; + if (needsTemplate) { + var contentDoc = document.implementation.createHTMLDocument("template"); + var canDecorate = true; + var templateStyle = document.createElement("style"); + templateStyle.textContent = TEMPLATE_TAG + "{display:none;}"; + var head = document.head; + head.insertBefore(templateStyle, head.firstElementChild); + PolyfilledHTMLTemplateElement.prototype = Object.create( + HTMLElement.prototype + ); + var canProtoPatch = !document.createElement("div").hasOwnProperty("innerHTML"); + PolyfilledHTMLTemplateElement.decorate = function(template) { + if (template.content || template.namespaceURI !== document.documentElement.namespaceURI) { + return; + } + template.content = contentDoc.createDocumentFragment(); + var child; + while (child = template.firstChild) { + capturedAppendChild.call(template.content, child); + } + if (canProtoPatch) { + template.__proto__ = PolyfilledHTMLTemplateElement.prototype; + } else { + template.cloneNode = function(deep) { + return PolyfilledHTMLTemplateElement._cloneNode(this, deep); + }; + if (canDecorate) { + try { + defineInnerHTML(template); + defineOuterHTML(template); + } catch (err) { + canDecorate = false; + } + } + } + PolyfilledHTMLTemplateElement.bootstrap(template.content); + }; + var topLevelWrappingMap = { + "option": ["select"], + "thead": ["table"], + "col": ["colgroup", "table"], + "tr": ["tbody", "table"], + "th": ["tr", "tbody", "table"], + "td": ["tr", "tbody", "table"] + }; + var getTagName = function(text) { + return (/<([a-z][^/\0>\x20\t\r\n\f]+)/i.exec(text) || [ + "", + "" + ])[1].toLowerCase(); + }; + var defineInnerHTML = function defineInnerHTML2(obj) { + Object.defineProperty(obj, "innerHTML", { + get: function() { + return getInnerHTML(this); + }, + set: function(text) { + var wrap = topLevelWrappingMap[getTagName(text)]; + if (wrap) { + for (var i = 0; i < wrap.length; i++) { + text = "<" + wrap[i] + ">" + text + ""; + } + } + contentDoc.body.innerHTML = text; + PolyfilledHTMLTemplateElement.bootstrap(contentDoc); + while (this.content.firstChild) { + capturedRemoveChild.call(this.content, this.content.firstChild); + } + var body = contentDoc.body; + if (wrap) { + for (var j = 0; j < wrap.length; j++) { + body = body.lastChild; + } + } + while (body.firstChild) { + capturedAppendChild.call(this.content, body.firstChild); + } + }, + configurable: true + }); + }; + var defineOuterHTML = function defineOuterHTML2(obj) { + Object.defineProperty(obj, "outerHTML", { + get: function() { + return "<".concat(TEMPLATE_TAG, ">").concat(this.innerHTML, ""); + }, + set: function(innerHTML) { + if (this.parentNode) { + contentDoc.body.innerHTML = innerHTML; + var docFrag = this.ownerDocument.createDocumentFragment(); + while (contentDoc.body.firstChild) { + capturedAppendChild.call(docFrag, contentDoc.body.firstChild); + } + capturedReplaceChild.call(this.parentNode, docFrag, this); + } else { + throw new Error( + "Failed to set the 'outerHTML' property on 'Element': This element has no parent node." + ); + } + }, + configurable: true + }); + }; + defineInnerHTML(PolyfilledHTMLTemplateElement.prototype); + defineOuterHTML(PolyfilledHTMLTemplateElement.prototype); + PolyfilledHTMLTemplateElement.bootstrap = function bootstrap(doc) { + var templates = QSA(doc, TEMPLATE_TAG); + for (var i = 0, l = templates.length, t; i < l && (t = templates[i]); i++) { + PolyfilledHTMLTemplateElement.decorate(t); + } + }; + document.addEventListener("DOMContentLoaded", function() { + PolyfilledHTMLTemplateElement.bootstrap(document); + }); + Document.prototype.createElement = function createElement2() { + var el = capturedCreateElement.apply(this, arguments); + if (el.localName === "template") { + PolyfilledHTMLTemplateElement.decorate(el); + } + return el; + }; + DOMParser.prototype.parseFromString = function() { + var el = capturedParseFromString.apply(this, arguments); + PolyfilledHTMLTemplateElement.bootstrap(el); + return el; + }; + Object.defineProperty(HTMLElement.prototype, "innerHTML", { + get: function() { + return getInnerHTML(this); + }, + set: function(text) { + capturedHTMLElementInnerHTML.set.call(this, text); + PolyfilledHTMLTemplateElement.bootstrap(this); + }, + configurable: true, + enumerable: true + }); + var escapeAttrRegExp = /[&\u00A0"]/g; + var escapeDataRegExp = /[&\u00A0<>]/g; + var escapeReplace = function(c) { + switch (c) { + case "&": + return "&"; + case "<": + return "<"; + case ">": + return ">"; + case '"': + return """; + case " ": + return " "; + } + }; + var escapeAttr = function(s) { + return s.replace(escapeAttrRegExp, escapeReplace); + }; + var escapeData = function(s) { + return s.replace(escapeDataRegExp, escapeReplace); + }; + var makeSet = function(arr) { + var set = {}; + for (var i = 0; i < arr.length; i++) { + set[arr[i]] = true; + } + return set; + }; + var voidElements = makeSet([ + "area", + "base", + "br", + "col", + "command", + "embed", + "hr", + "img", + "input", + "keygen", + "link", + "meta", + "param", + "source", + "track", + "wbr" + ]); + var plaintextParents = makeSet([ + "style", + "script", + "xmp", + "iframe", + "noembed", + "noframes", + "plaintext", + "noscript" + ]); + var getOuterHTML = function(node, parentNode, callback) { + switch (node.nodeType) { + case Node.ELEMENT_NODE: { + var tagName = node.localName; + var s = "<" + tagName; + var attrs = node.attributes; + for (var i = 0, attr2; attr2 = attrs[i]; i++) { + s += " " + attr2.name + '="' + escapeAttr(attr2.value) + '"'; + } + s += ">"; + if (voidElements[tagName]) { + return s; + } + return s + getInnerHTML(node, callback) + ""; + } + case Node.TEXT_NODE: { + var data = ( + /** @type {Text} */ + node.data + ); + if (parentNode && plaintextParents[parentNode.localName]) { + return data; + } + return escapeData(data); + } + case Node.COMMENT_NODE: { + return ""; + } + default: { + window.console.error(node); + throw new Error("not implemented"); + } + } + }; + var getInnerHTML = function(node, callback) { + if (node.localName === "template") { + node = /** @type {HTMLTemplateElement} */ + node.content; + } + var s = ""; + var c$ = callback ? callback(node) : capturedChildNodes.get.call(node); + for (var i = 0, l = c$.length, child; i < l && (child = c$[i]); i++) { + s += getOuterHTML(child, node, callback); + } + return s; + }; + } + if (needsTemplate || needsCloning) { + PolyfilledHTMLTemplateElement._cloneNode = function _cloneNode(template, deep) { + var clone = capturedCloneNode.call(template, false); + if (this.decorate) { + this.decorate(clone); + } + if (deep) { + capturedAppendChild.call( + clone.content, + capturedCloneNode.call(template.content, true) + ); + fixClonedDom(clone.content, template.content); + } + return clone; + }; + var fixClonedDom = function fixClonedDom2(clone, source) { + if (!source.querySelectorAll) { + return; + } + var s$ = QSA(source, TEMPLATE_TAG); + if (s$.length === 0) { + return; + } + var t$ = QSA(clone, TEMPLATE_TAG); + for (var i = 0, l = t$.length, t, s; i < l; i++) { + s = s$[i]; + t = t$[i]; + if (PolyfilledHTMLTemplateElement && PolyfilledHTMLTemplateElement.decorate) { + PolyfilledHTMLTemplateElement.decorate(s); + } + capturedReplaceChild.call(t.parentNode, cloneNode.call(s, true), t); + } + }; + var fixClonedScripts = function fixClonedScripts2(fragment) { + var scripts = QSA(fragment, scriptSelector); + for (var ns, s, i = 0; i < scripts.length; i++) { + s = scripts[i]; + ns = capturedCreateElement.call(document, "script"); + ns.textContent = s.textContent; + var attrs = s.attributes; + for (var ai = 0, a; ai < attrs.length; ai++) { + a = attrs[ai]; + ns.setAttribute(a.name, a.value); + } + capturedReplaceChild.call(s.parentNode, ns, s); + } + }; + var cloneNode = Node.prototype.cloneNode = function cloneNode2(deep) { + var dom; + if (!needsDocFrag && brokenDocFragment && this instanceof DocumentFragment) { + if (!deep) { + return this.ownerDocument.createDocumentFragment(); + } else { + dom = importNode.call(this.ownerDocument, this, true); + } + } else if (this.nodeType === Node.ELEMENT_NODE && this.localName === TEMPLATE_TAG && this.namespaceURI == document.documentElement.namespaceURI) { + dom = PolyfilledHTMLTemplateElement._cloneNode(this, deep); + } else { + dom = capturedCloneNode.call(this, deep); + } + if (deep) { + fixClonedDom(dom, this); + } + return dom; + }; + var importNode = Document.prototype.importNode = function importNode2(element, deep) { + deep = deep || false; + if (element.localName === TEMPLATE_TAG) { + return PolyfilledHTMLTemplateElement._cloneNode(element, deep); + } else { + var dom = capturedImportNode.call(this, element, deep); + if (deep) { + fixClonedDom(dom, element); + fixClonedScripts(dom); + } + return dom; + } + }; + } + if (needsTemplate) { + window.HTMLTemplateElement = PolyfilledHTMLTemplateElement; + } + })(); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/MutationObserver.js +var require_MutationObserver = __commonJS({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/MutationObserver.js": function() { + (function(undefined2) { + if (!("MutationObserver" in self)) { + /*! + * Shim for MutationObserver interface + * Author: Graeme Yeates (github.com/megawac) + * Repository: https://github.com/megawac/MutationObserver.js + * License: WTFPL V2, 2004 (wtfpl.net). + * Though credit and staring the repo will make me feel pretty, you can modify and redistribute as you please. + * Attempts to follow spec (https://www.w3.org/TR/dom/#mutation-observers) as closely as possible for native javascript + * See https://github.com/WebKit/webkit/blob/master/Source/WebCore/dom/MutationObserver.cpp for current webkit source c++ implementation + */ + if (!window.MutationObserver) { + window.MutationObserver = function(undefined3) { + "use strict"; + function MutationObserver2(listener) { + this._watched = []; + this._listener = listener; + } + function startMutationChecker(observer) { + (function check() { + var mutations = observer.takeRecords(); + if (mutations.length) { + observer._listener(mutations, observer); + } + observer._timeout = setTimeout(check, MutationObserver2._period); + })(); + } + MutationObserver2._period = 30; + MutationObserver2.prototype = { + /** + * see https://dom.spec.whatwg.org/#dom-mutationobserver-observe + * not going to throw here but going to follow the current spec config sets + * @param {Node|null} $target + * @param {Object|null} config : MutationObserverInit configuration dictionary + * @expose + * @return undefined + */ + observe: function($target, config) { + var settings = { + attr: !!(config.attributes || config.attributeFilter || config.attributeOldValue), + // some browsers enforce that subtree must be set with childList, attributes or characterData. + // We don't care as spec doesn't specify this rule. + kids: !!config.childList, + descendents: !!config.subtree, + charData: !!(config.characterData || config.characterDataOldValue) + }; + var watched = this._watched; + for (var i = 0; i < watched.length; i++) { + if (watched[i].tar === $target) + watched.splice(i, 1); + } + if (config.attributeFilter) { + settings.afilter = reduce(config.attributeFilter, function(a, b) { + a[b] = true; + return a; + }, {}); + } + watched.push({ + tar: $target, + fn: createMutationSearcher($target, settings) + }); + if (!this._timeout) { + startMutationChecker(this); + } + }, + /** + * Finds mutations since last check and empties the "record queue" i.e. mutations will only be found once + * @expose + * @return {Array.} + */ + takeRecords: function() { + var mutations = []; + var watched = this._watched; + for (var i = 0; i < watched.length; i++) { + watched[i].fn(mutations); + } + return mutations; + }, + /** + * @expose + * @return undefined + */ + disconnect: function() { + this._watched = []; + clearTimeout(this._timeout); + this._timeout = null; + } + }; + function MutationRecord(data) { + var settings = { + // technically these should be on proto so hasOwnProperty will return false for non explicitly props + type: null, + target: null, + addedNodes: [], + removedNodes: [], + previousSibling: null, + nextSibling: null, + attributeName: null, + attributeNamespace: null, + oldValue: null + }; + for (var prop in data) { + if (has(settings, prop) && data[prop] !== undefined3) + settings[prop] = data[prop]; + } + return settings; + } + function createMutationSearcher($target, config) { + var $oldstate = clone($target, config); + return function(mutations) { + var olen = mutations.length, dirty; + if (config.charData && $target.nodeType === 3 && $target.nodeValue !== $oldstate.charData) { + mutations.push(new MutationRecord({ + type: "characterData", + target: $target, + oldValue: $oldstate.charData + })); + } + if (config.attr && $oldstate.attr) { + findAttributeMutations(mutations, $target, $oldstate.attr, config.afilter); + } + if (config.kids || config.descendents) { + dirty = searchSubtree(mutations, $target, $oldstate, config); + } + if (dirty || mutations.length !== olen) { + $oldstate = clone($target, config); + } + }; + } + var hasAttributeBug = document.createElement("i"); + hasAttributeBug.style.top = 0; + hasAttributeBug = hasAttributeBug.attributes.style.value != "null"; + function getAttributeSimple(el, attr2) { + return attr2.value; + } + function getAttributeWithStyleHack(el, attr2) { + return attr2.name !== "style" ? attr2.value : el.style.cssText; + } + var getAttributeValue = hasAttributeBug ? getAttributeSimple : getAttributeWithStyleHack; + function findAttributeMutations(mutations, $target, $oldstate, filter) { + var checked = {}; + var attributes2 = $target.attributes; + var attr2; + var name; + var i = attributes2.length; + while (i--) { + attr2 = attributes2[i]; + name = attr2.name; + if (!filter || has(filter, name)) { + if (getAttributeValue($target, attr2) !== $oldstate[name]) { + mutations.push(MutationRecord({ + type: "attributes", + target: $target, + attributeName: name, + oldValue: $oldstate[name], + attributeNamespace: attr2.namespaceURI + // in ie<8 it incorrectly will return undefined + })); + } + checked[name] = true; + } + } + for (name in $oldstate) { + if (!checked[name]) { + mutations.push(MutationRecord({ + target: $target, + type: "attributes", + attributeName: name, + oldValue: $oldstate[name] + })); + } + } + } + function searchSubtree(mutations, $target, $oldstate, config) { + var dirty; + function resolveConflicts(conflicts, node, $kids, $oldkids, numAddedNodes) { + var distance = conflicts.length - 1; + var counter2 = -~((distance - numAddedNodes) / 2); + var $cur; + var oldstruct; + var conflict; + while (conflict = conflicts.pop()) { + $cur = $kids[conflict.i]; + oldstruct = $oldkids[conflict.j]; + if (config.kids && counter2 && Math.abs(conflict.i - conflict.j) >= distance) { + mutations.push(MutationRecord({ + type: "childList", + target: node, + addedNodes: [$cur], + removedNodes: [$cur], + // haha don't rely on this please + nextSibling: $cur.nextSibling, + previousSibling: $cur.previousSibling + })); + counter2--; + } + if (config.attr && oldstruct.attr) + findAttributeMutations(mutations, $cur, oldstruct.attr, config.afilter); + if (config.charData && $cur.nodeType === 3 && $cur.nodeValue !== oldstruct.charData) { + mutations.push(MutationRecord({ + type: "characterData", + target: $cur, + oldValue: oldstruct.charData + })); + } + if (config.descendents) + findMutations($cur, oldstruct); + } + } + function findMutations(node, old) { + var $kids = node.childNodes; + var $oldkids = old.kids; + var klen = $kids.length; + var olen = $oldkids ? $oldkids.length : 0; + var map2; + var conflicts; + var id; + var idx; + var oldstruct; + var $cur; + var $old; + var numAddedNodes = 0; + var i = 0, j = 0; + while (i < klen || j < olen) { + $cur = $kids[i]; + oldstruct = $oldkids[j]; + $old = oldstruct && oldstruct.node; + if ($cur === $old) { + if (config.attr && oldstruct.attr) + findAttributeMutations(mutations, $cur, oldstruct.attr, config.afilter); + if (config.charData && oldstruct.charData !== undefined3 && $cur.nodeValue !== oldstruct.charData) { + mutations.push(MutationRecord({ + type: "characterData", + target: $cur, + oldValue: oldstruct.charData + })); + } + if (conflicts) + resolveConflicts(conflicts, node, $kids, $oldkids, numAddedNodes); + if (config.descendents && ($cur.childNodes.length || oldstruct.kids && oldstruct.kids.length)) + findMutations($cur, oldstruct); + i++; + j++; + } else { + dirty = true; + if (!map2) { + map2 = {}; + conflicts = []; + } + if ($cur) { + if (!map2[id = getElementId($cur)]) { + map2[id] = true; + if ((idx = indexOfCustomNode($oldkids, $cur, j)) === -1) { + if (config.kids) { + mutations.push(MutationRecord({ + type: "childList", + target: node, + addedNodes: [$cur], + // $cur is a new node + nextSibling: $cur.nextSibling, + previousSibling: $cur.previousSibling + })); + numAddedNodes++; + } + } else { + conflicts.push({ + // add conflict + i: i, + j: idx + }); + } + } + i++; + } + if ($old && // special case: the changes may have been resolved: i and j appear congurent so we can continue using the expected case + $old !== $kids[i]) { + if (!map2[id = getElementId($old)]) { + map2[id] = true; + if ((idx = indexOf($kids, $old, i)) === -1) { + if (config.kids) { + mutations.push(MutationRecord({ + type: "childList", + target: old.node, + removedNodes: [$old], + nextSibling: $oldkids[j + 1], + // praise no indexoutofbounds exception + previousSibling: $oldkids[j - 1] + })); + numAddedNodes--; + } + } else { + conflicts.push({ + i: idx, + j: j + }); + } + } + j++; + } + } + } + if (conflicts) + resolveConflicts(conflicts, node, $kids, $oldkids, numAddedNodes); + } + findMutations($target, $oldstate); + return dirty; + } + function clone($target, config) { + var recurse = true; + return function copy($target2) { + var elestruct = { + /** @type {Node} */ + node: $target2 + }; + if (config.charData && ($target2.nodeType === 3 || $target2.nodeType === 8)) { + elestruct.charData = $target2.nodeValue; + } else { + if (config.attr && recurse && $target2.nodeType === 1) { + elestruct.attr = reduce($target2.attributes, function(memo2, attr2) { + if (!config.afilter || config.afilter[attr2.name]) { + memo2[attr2.name] = getAttributeValue($target2, attr2); + } + return memo2; + }, {}); + } + if (recurse && (config.kids || config.charData || config.attr && config.descendents)) { + elestruct.kids = map($target2.childNodes, copy); + } + recurse = config.descendents; + } + return elestruct; + }($target); + } + function indexOfCustomNode(set, $node, idx) { + return indexOf(set, $node, idx, JSCompiler_renameProperty("node")); + } + var counter = 1; + var expando = "mo_id"; + function getElementId($ele) { + try { + return $ele.id || ($ele[expando] = $ele[expando] || counter++); + } catch (o_O) { + try { + return $ele.nodeValue; + } catch (shitie) { + return counter++; + } + } + } + function map(set, iterator) { + var results = []; + for (var index = 0; index < set.length; index++) { + results[index] = iterator(set[index], index, set); + } + return results; + } + function reduce(set, iterator, memo2) { + for (var index = 0; index < set.length; index++) { + memo2 = iterator(memo2, set[index], index, set); + } + return memo2; + } + function indexOf(set, item, idx, prop) { + for (; idx < set.length; idx++) { + if ((prop ? set[idx][prop] : set[idx]) === item) + return idx; + } + return -1; + } + function has(obj, prop) { + return obj[prop] !== undefined3; + } + function JSCompiler_renameProperty(a) { + return a; + } + return MutationObserver2; + }(void 0); + } + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/Node.prototype.contains.js +var require_Node_prototype_contains = __commonJS({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/Node.prototype.contains.js": function() { + (function(undefined2) { + if (!document.contains) { + (function() { + function contains(node) { + if (!(0 in arguments)) { + throw new TypeError("1 argument is required"); + } + do { + if (this === node) { + return true; + } + } while (node = node && node.parentNode); + return false; + } + if ("HTMLElement" in self && "contains" in HTMLElement.prototype) { + try { + delete HTMLElement.prototype.contains; + } catch (e) { + } + } + if ("Node" in self) { + Node.prototype.contains = contains; + } else { + document.contains = Element.prototype.contains = contains; + } + })(); + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/~shadydom.js +var require_shadydom = __commonJS({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/~shadydom.js": function(exports2) { + (function() { + try { + window["ShadyDOM"] = window["ShadyDOM"] || {}; + window["ShadyDOM"]["querySelectorImplementation"] = window["ShadyDOM"]["querySelectorImplementation"] || "native"; + } catch (err) { + } + })(); + (function() { + "use strict"; + var n; + function aa(a) { + var b = 0; + return function() { + return b < a.length ? { done: false, value: a[b++] } : { done: true }; + }; + } + function p(a) { + var b = "undefined" != typeof Symbol && Symbol.iterator && a[Symbol.iterator]; + return b ? b.call(a) : { next: aa(a) }; + } + function q(a) { + if (!(a instanceof Array)) { + a = p(a); + for (var b, c = []; !(b = a.next()).done; ) + c.push(b.value); + a = c; + } + return a; + } + function ba(a) { + a = ["object" == typeof globalThis && globalThis, a, "object" == typeof window && window, "object" == typeof self && self, "object" == typeof global && global]; + for (var b = 0; b < a.length; ++b) { + var c = a[b]; + if (c && c.Math == Math) + return c; + } + throw Error("Cannot find global object"); + } + var ca = ba(this); + function da() { + } + da.prototype.toJSON = function() { + return {}; + }; + function t(a) { + a.__shady || (a.__shady = new da()); + return a.__shady; + } + function u(a) { + return a && a.__shady; + } + ; + var v = window.ShadyDOM || {}; + v.da = !(!Element.prototype.attachShadow || !Node.prototype.getRootNode); + var ea = Object.getOwnPropertyDescriptor(Node.prototype, "firstChild"); + v.i = !!(ea && ea.configurable && ea.get); + v.N = v.force || !v.da; + v.l = v.noPatch || false; + v.C = v.preferPerformance; + v.O = "on-demand" === v.l; + var fa; + var ha = v.querySelectorImplementation; + fa = -1 < ["native", "selectorEngine"].indexOf(ha) ? ha : void 0; + v.ga = fa; + v.V = navigator.userAgent.match("Trident"); + function ia() { + return Document.prototype.msElementsFromPoint ? "msElementsFromPoint" : "elementsFromPoint"; + } + function w(a) { + return (a = u(a)) && void 0 !== a.firstChild; + } + function x(a) { + return a instanceof ShadowRoot; + } + function ja(a) { + return (a = (a = u(a)) && a.root) && ka(a); + } + var y = Element.prototype, la = y.matches || y.matchesSelector || y.mozMatchesSelector || y.msMatchesSelector || y.oMatchesSelector || y.webkitMatchesSelector, ma = document.createTextNode(""), na = 0, oa = []; + new MutationObserver(function() { + for (; oa.length; ) + try { + oa.shift()(); + } catch (a) { + throw ma.textContent = na++, a; + } + }).observe(ma, { characterData: true }); + function pa(a) { + oa.push(a); + ma.textContent = na++; + } + var qa = document.contains ? function(a, b) { + return a.__shady_native_contains(b); + } : function(a, b) { + return a === b || a.documentElement && a.documentElement.__shady_native_contains(b); + }; + function ra(a, b) { + for (; b; ) { + if (b == a) + return true; + b = b.__shady_parentNode; + } + return false; + } + function z(a) { + for (var b = a.length - 1; 0 <= b; b--) { + var c = a[b], d = c.getAttribute("id") || c.getAttribute("name"); + d && "length" !== d && isNaN(d) && (a[d] = c); + } + a.item = function(e) { + return a[e]; + }; + a.namedItem = function(e) { + if ("length" !== e && isNaN(e) && a[e]) + return a[e]; + for (var f = p(a), g = f.next(); !g.done; g = f.next()) + if (g = g.value, (g.getAttribute("id") || g.getAttribute("name")) == e) + return g; + return null; + }; + return a; + } + function sa(a) { + var b = []; + for (a = a.__shady_native_firstChild; a; a = a.__shady_native_nextSibling) + b.push(a); + return b; + } + function ta(a) { + var b = []; + for (a = a.__shady_firstChild; a; a = a.__shady_nextSibling) + b.push(a); + return b; + } + function ua(a, b, c) { + c.configurable = true; + if (c.value) + a[b] = c.value; + else + try { + Object.defineProperty(a, b, c); + } catch (d) { + } + } + function A(a, b, c, d) { + c = void 0 === c ? "" : c; + for (var e in b) + d && 0 <= d.indexOf(e) || ua(a, c + e, b[e]); + } + function va(a, b) { + for (var c in b) + c in a && ua(a, c, b[c]); + } + function B(a) { + var b = {}; + Object.getOwnPropertyNames(a).forEach(function(c) { + b[c] = Object.getOwnPropertyDescriptor(a, c); + }); + return b; + } + function wa(a, b) { + for (var c = Object.getOwnPropertyNames(b), d = 0, e; d < c.length; d++) + e = c[d], a[e] = b[e]; + } + function xa(a) { + return a instanceof Node ? a : document.createTextNode("" + a); + } + function D(a) { + for (var b = [], c = 0; c < arguments.length; ++c) + b[c] = arguments[c]; + if (1 === b.length) + return xa(b[0]); + c = document.createDocumentFragment(); + b = p(b); + for (var d = b.next(); !d.done; d = b.next()) + c.appendChild(xa(d.value)); + return c; + } + function ya(a) { + var b; + for (b = void 0 === b ? 1 : b; 0 < b; b--) + a = a.reduce(function(c, d) { + Array.isArray(d) ? c.push.apply(c, q(d)) : c.push(d); + return c; + }, []); + return a; + } + function za(a) { + var b = [], c = /* @__PURE__ */ new Set(); + a = p(a); + for (var d = a.next(); !d.done; d = a.next()) + d = d.value, c.has(d) || (b.push(d), c.add(d)); + return b; + } + ; + var E = [], Aa; + function Ba(a) { + Aa || (Aa = true, pa(F)); + E.push(a); + } + function F() { + Aa = false; + for (var a = !!E.length; E.length; ) + E.shift()(); + return a; + } + F.list = E; + function Ca() { + this.g = false; + this.addedNodes = []; + this.removedNodes = []; + this.H = /* @__PURE__ */ new Set(); + } + function Da(a) { + a.g || (a.g = true, pa(function() { + a.flush(); + })); + } + Ca.prototype.flush = function() { + if (this.g) { + this.g = false; + var a = this.takeRecords(); + a.length && this.H.forEach(function(b) { + b(a); + }); + } + }; + Ca.prototype.takeRecords = function() { + if (this.addedNodes.length || this.removedNodes.length) { + var a = [{ addedNodes: this.addedNodes, removedNodes: this.removedNodes }]; + this.addedNodes = []; + this.removedNodes = []; + return a; + } + return []; + }; + function Ea(a, b) { + var c = t(a); + c.B || (c.B = new Ca()); + c.B.H.add(b); + var d = c.B; + return { Z: b, ba: d, aa: a, takeRecords: function() { + return d.takeRecords(); + } }; + } + function Fa(a) { + var b = a && a.ba; + b && (b.H.delete(a.Z), b.H.size || (t(a.aa).B = null)); + } + function Ga(a, b) { + var c = b.getRootNode(); + return a.map(function(d) { + var e = c === d.target.getRootNode(); + if (e && d.addedNodes) { + if (e = [].slice.call(d.addedNodes).filter(function(f) { + return c === f.getRootNode(); + }), e.length) + return d = Object.create(d), Object.defineProperty(d, "addedNodes", { value: e, configurable: true }), d; + } else if (e) + return d; + }).filter(function(d) { + return d; + }); + } + ; + var Ha = /[&\u00A0"]/g, Ia = /[&\u00A0<>]/g; + function Ja(a) { + switch (a) { + case "&": + return "&"; + case "<": + return "<"; + case ">": + return ">"; + case '"': + return """; + case " ": + return " "; + } + } + function Ka(a) { + for (var b = {}, c = 0; c < a.length; c++) + b[a[c]] = true; + return b; + } + var La = Ka("area base br col command embed hr img input keygen link meta param source track wbr".split(" ")), Ma = Ka("style script xmp iframe noembed noframes plaintext noscript".split(" ")); + function Na(a, b) { + "template" === a.localName && (a = a.content); + for (var c = "", d = b ? b(a) : a.childNodes, e = 0, f = d.length, g = void 0; e < f && (g = d[e]); e++) { + a: { + var h2 = g; + var k = a, l = b; + switch (h2.nodeType) { + case Node.ELEMENT_NODE: + k = h2.localName; + for (var m = "<" + k, r = h2.attributes, C = 0, S; S = r[C]; C++) + m += " " + S.name + '="' + S.value.replace(Ha, Ja) + '"'; + m += ">"; + h2 = La[k] ? m : m + Na(h2, l) + ""; + break a; + case Node.TEXT_NODE: + h2 = h2.data; + h2 = k && Ma[k.localName] ? h2 : h2.replace(Ia, Ja); + break a; + case Node.COMMENT_NODE: + h2 = ""; + break a; + default: + throw window.console.error(h2), Error("not implemented"); + } + } + c += h2; + } + return c; + } + ; + var G = v.i, Oa = { querySelector: function(a) { + return this.__shady_native_querySelector(a); + }, querySelectorAll: function(a) { + return this.__shady_native_querySelectorAll(a); + } }, Pa = {}; + function Qa(a) { + Pa[a] = function(b) { + return b["__shady_native_" + a]; + }; + } + function H(a, b) { + A(a, b, "__shady_native_"); + for (var c in b) + Qa(c); + } + function I(a, b) { + b = void 0 === b ? [] : b; + for (var c = 0; c < b.length; c++) { + var d = b[c], e = Object.getOwnPropertyDescriptor(a, d); + e && (Object.defineProperty(a, "__shady_native_" + d, e), e.value ? Oa[d] || (Oa[d] = e.value) : Qa(d)); + } + } + var J = document.createTreeWalker(document, NodeFilter.SHOW_ALL, null, false), K = document.createTreeWalker(document, NodeFilter.SHOW_ELEMENT, null, false), Ra = document.implementation.createHTMLDocument("inert"); + function Sa(a) { + for (var b; b = a.__shady_native_firstChild; ) + a.__shady_native_removeChild(b); + } + var Ta = ["firstElementChild", "lastElementChild", "children", "childElementCount"], Ua = ["querySelector", "querySelectorAll", "append", "prepend", "replaceChildren"]; + function Va() { + var a = ["dispatchEvent", "addEventListener", "removeEventListener"]; + window.EventTarget ? (I(window.EventTarget.prototype, a), void 0 === window.__shady_native_addEventListener && I(Window.prototype, a)) : (I(Node.prototype, a), I(Window.prototype, a), I(XMLHttpRequest.prototype, a)); + G ? I(Node.prototype, "parentNode firstChild lastChild previousSibling nextSibling childNodes parentElement textContent".split(" ")) : H(Node.prototype, { parentNode: { get: function() { + J.currentNode = this; + return J.parentNode(); + } }, firstChild: { get: function() { + J.currentNode = this; + return J.firstChild(); + } }, lastChild: { get: function() { + J.currentNode = this; + return J.lastChild(); + } }, previousSibling: { get: function() { + J.currentNode = this; + return J.previousSibling(); + } }, nextSibling: { get: function() { + J.currentNode = this; + return J.nextSibling(); + } }, childNodes: { get: function() { + var b = []; + J.currentNode = this; + for (var c = J.firstChild(); c; ) + b.push(c), c = J.nextSibling(); + return b; + } }, parentElement: { get: function() { + K.currentNode = this; + return K.parentNode(); + } }, textContent: { get: function() { + switch (this.nodeType) { + case Node.ELEMENT_NODE: + case Node.DOCUMENT_FRAGMENT_NODE: + for (var b = document.createTreeWalker(this, NodeFilter.SHOW_TEXT, null, false), c = "", d; d = b.nextNode(); ) + c += d.nodeValue; + return c; + default: + return this.nodeValue; + } + }, set: function(b) { + if ("undefined" === typeof b || null === b) + b = ""; + switch (this.nodeType) { + case Node.ELEMENT_NODE: + case Node.DOCUMENT_FRAGMENT_NODE: + Sa(this); + (0 < b.length || this.nodeType === Node.ELEMENT_NODE) && this.__shady_native_insertBefore(document.createTextNode(b), void 0); + break; + default: + this.nodeValue = b; + } + } } }); + I(Node.prototype, "appendChild insertBefore removeChild replaceChild cloneNode contains".split(" ")); + I(HTMLElement.prototype, ["parentElement", "contains"]); + a = { firstElementChild: { get: function() { + K.currentNode = this; + return K.firstChild(); + } }, lastElementChild: { get: function() { + K.currentNode = this; + return K.lastChild(); + } }, children: { get: function() { + var b = []; + K.currentNode = this; + for (var c = K.firstChild(); c; ) + b.push(c), c = K.nextSibling(); + return z(b); + } }, childElementCount: { get: function() { + return this.children ? this.children.length : 0; + } } }; + G ? (I(Element.prototype, Ta), I(Element.prototype, [ + "previousElementSibling", + "nextElementSibling", + "innerHTML", + "className" + ]), I(HTMLElement.prototype, ["children", "innerHTML", "className"])) : (H(Element.prototype, a), H(Element.prototype, { previousElementSibling: { get: function() { + K.currentNode = this; + return K.previousSibling(); + } }, nextElementSibling: { get: function() { + K.currentNode = this; + return K.nextSibling(); + } }, innerHTML: { get: function() { + return Na(this, sa); + }, set: function(b) { + var c = "template" === this.localName ? this.content : this; + Sa(c); + var d = this.localName || "div"; + d = this.namespaceURI && this.namespaceURI !== Ra.namespaceURI ? Ra.createElementNS(this.namespaceURI, d) : Ra.createElement(d); + d.innerHTML = b; + for (b = "template" === this.localName ? d.content : d; d = b.__shady_native_firstChild; ) + c.__shady_native_insertBefore(d, void 0); + } }, className: { get: function() { + return this.getAttribute("class") || ""; + }, set: function(b) { + this.setAttribute("class", b); + } } })); + I(Element.prototype, "setAttribute getAttribute hasAttribute removeAttribute toggleAttribute focus blur".split(" ")); + I(Element.prototype, Ua); + I(HTMLElement.prototype, ["focus", "blur"]); + window.HTMLTemplateElement && I(window.HTMLTemplateElement.prototype, ["innerHTML"]); + G ? I(DocumentFragment.prototype, Ta) : H(DocumentFragment.prototype, a); + I(DocumentFragment.prototype, Ua); + G ? (I(Document.prototype, Ta), I(Document.prototype, ["activeElement"])) : H(Document.prototype, a); + I(Document.prototype, ["importNode", "getElementById", "elementFromPoint", ia()]); + I(Document.prototype, Ua); + } + ; + var Wa = B({ get childNodes() { + return this.__shady_childNodes; + }, get firstChild() { + return this.__shady_firstChild; + }, get lastChild() { + return this.__shady_lastChild; + }, get childElementCount() { + return this.__shady_childElementCount; + }, get children() { + return this.__shady_children; + }, get firstElementChild() { + return this.__shady_firstElementChild; + }, get lastElementChild() { + return this.__shady_lastElementChild; + }, get shadowRoot() { + return this.__shady_shadowRoot; + } }), Xa = B({ get textContent() { + return this.__shady_textContent; + }, set textContent(a) { + this.__shady_textContent = a; + }, get innerHTML() { + return this.__shady_innerHTML; + }, set innerHTML(a) { + this.__shady_innerHTML = a; + } }), Ya = B({ get parentElement() { + return this.__shady_parentElement; + }, get parentNode() { + return this.__shady_parentNode; + }, get nextSibling() { + return this.__shady_nextSibling; + }, get previousSibling() { + return this.__shady_previousSibling; + }, get nextElementSibling() { + return this.__shady_nextElementSibling; + }, get previousElementSibling() { + return this.__shady_previousElementSibling; + }, get className() { + return this.__shady_className; + }, set className(a) { + this.__shady_className = a; + } }); + function Za(a) { + for (var b in a) { + var c = a[b]; + c && (c.enumerable = false); + } + } + Za(Wa); + Za(Xa); + Za(Ya); + var $a = v.i || true === v.l, ab = $a ? function() { + } : function(a) { + var b = t(a); + b.X || (b.X = true, va(a, Ya)); + }, bb = $a ? function() { + } : function(a) { + var b = t(a); + b.W || (b.W = true, va(a, Wa), window.customElements && window.customElements.polyfillWrapFlushCallback && !v.l || va(a, Xa)); + }; + var L = "__eventWrappers" + Date.now(), cb = function() { + var a = Object.getOwnPropertyDescriptor(Event.prototype, "composed"); + return a ? function(b) { + return a.get.call(b); + } : null; + }(), db = function() { + function a() { + } + var b = false, c = { get capture() { + b = true; + return false; + } }; + window.addEventListener("test", a, c); + window.removeEventListener("test", a, c); + return b; + }(); + function eb(a) { + if (null === a || "object" !== typeof a && "function" !== typeof a) { + var b = !!a; + var c = false; + } else { + b = !!a.capture; + c = !!a.once; + var d = a.o; + } + return { U: d, capture: b, once: c, T: db ? a : b }; + } + var fb = { + blur: true, + focus: true, + focusin: true, + focusout: true, + click: true, + dblclick: true, + mousedown: true, + mouseenter: true, + mouseleave: true, + mousemove: true, + mouseout: true, + mouseover: true, + mouseup: true, + wheel: true, + beforeinput: true, + input: true, + keydown: true, + keyup: true, + compositionstart: true, + compositionupdate: true, + compositionend: true, + touchstart: true, + touchend: true, + touchmove: true, + touchcancel: true, + pointerover: true, + pointerenter: true, + pointerdown: true, + pointermove: true, + pointerup: true, + pointercancel: true, + pointerout: true, + pointerleave: true, + gotpointercapture: true, + lostpointercapture: true, + dragstart: true, + drag: true, + dragenter: true, + dragleave: true, + dragover: true, + drop: true, + dragend: true, + DOMActivate: true, + DOMFocusIn: true, + DOMFocusOut: true, + keypress: true + }, gb = { DOMAttrModified: true, DOMAttributeNameChanged: true, DOMCharacterDataModified: true, DOMElementNameChanged: true, DOMNodeInserted: true, DOMNodeInsertedIntoDocument: true, DOMNodeRemoved: true, DOMNodeRemovedFromDocument: true, DOMSubtreeModified: true }; + function hb(a) { + return a instanceof Node ? a.__shady_getRootNode() : a; + } + function M(a, b) { + var c = [], d = a; + for (a = hb(a); d; ) + c.push(d), d = d.__shady_assignedSlot ? d.__shady_assignedSlot : d.nodeType === Node.DOCUMENT_FRAGMENT_NODE && d.host && (b || d !== a) ? d.host : d.__shady_parentNode; + c[c.length - 1] === document && c.push(window); + return c; + } + function ib(a) { + a.__composedPath || (a.__composedPath = M(a.target, true)); + return a.__composedPath; + } + function jb(a, b) { + if (!x) + return a; + a = M(a, true); + for (var c = 0, d, e = void 0, f, g = void 0; c < b.length; c++) + if (d = b[c], f = hb(d), f !== e && (g = a.indexOf(f), e = f), !x(f) || -1 < g) + return d; + } + var kb = { get composed() { + void 0 === this.__composed && (cb ? this.__composed = "focusin" === this.type || "focusout" === this.type || cb(this) : false !== this.isTrusted && (this.__composed = fb[this.type])); + return this.__composed || false; + }, composedPath: function() { + this.__composedPath || (this.__composedPath = M(this.__target, this.composed)); + return this.__composedPath; + }, get target() { + return jb(this.currentTarget || this.__previousCurrentTarget, this.composedPath()); + }, get relatedTarget() { + if (!this.__relatedTarget) + return null; + this.__relatedTargetComposedPath || (this.__relatedTargetComposedPath = M(this.__relatedTarget, true)); + return jb(this.currentTarget || this.__previousCurrentTarget, this.__relatedTargetComposedPath); + }, stopPropagation: function() { + Event.prototype.stopPropagation.call(this); + this.K = true; + }, stopImmediatePropagation: function() { + Event.prototype.stopImmediatePropagation.call(this); + this.K = this.__immediatePropagationStopped = true; + } }, lb = v.i && Object.getOwnPropertyDescriptor(Event.prototype, "eventPhase"); + lb && (Object.defineProperty(kb, "eventPhase", { get: function() { + return this.currentTarget === this.target ? Event.AT_TARGET : this.__shady_native_eventPhase; + }, enumerable: true, configurable: true }), Object.defineProperty(kb, "__shady_native_eventPhase", lb)); + function mb(a) { + function b(c, d) { + c = new a(c, d); + c.__composed = d && !!d.composed; + return c; + } + b.__proto__ = a; + b.prototype = a.prototype; + return b; + } + var nb = { focus: true, blur: true }; + function ob(a) { + return a.__target !== a.target || a.__relatedTarget !== a.relatedTarget; + } + function pb(a, b, c) { + if (c = b.__handlers && b.__handlers[a.type] && b.__handlers[a.type][c]) + for (var d = 0, e; (e = c[d]) && (!ob(a) || a.target !== a.relatedTarget) && (e.call(b, a), !a.__immediatePropagationStopped); d++) + ; + } + var qb = new Event("e").hasOwnProperty("currentTarget"); + function rb(a) { + a = qb ? Object.create(a) : a; + var b = a.composedPath(), c = b.map(function(m) { + return jb(m, b); + }), d = a.bubbles, e = Object.getOwnPropertyDescriptor(a, "currentTarget"); + Object.defineProperty(a, "currentTarget", { configurable: true, enumerable: true, get: function() { + return k; + } }); + var f = Event.CAPTURING_PHASE, g = Object.getOwnPropertyDescriptor(a, "eventPhase"); + Object.defineProperty(a, "eventPhase", { configurable: true, enumerable: true, get: function() { + return f; + } }); + try { + for (var h2 = b.length - 1; 0 <= h2; h2--) { + var k = b[h2]; + f = k === c[h2] ? Event.AT_TARGET : Event.CAPTURING_PHASE; + pb(a, k, "capture"); + if (a.K) + return; + } + for (h2 = 0; h2 < b.length; h2++) { + k = b[h2]; + var l = k === c[h2]; + if (l || d) { + if (f = l ? Event.AT_TARGET : Event.BUBBLING_PHASE, pb(a, k, "bubble"), a.K) + break; + } + } + } finally { + qb || (e ? Object.defineProperty(a, "currentTarget", e) : delete a.currentTarget, g ? Object.defineProperty(a, "eventPhase", g) : delete a.eventPhase); + } + } + function sb(a, b, c, d) { + for (var e = 0; e < a.length; e++) { + var f = a[e], g = f.type, h2 = f.capture; + if (b === f.node && c === g && d === h2) + return e; + } + return -1; + } + function tb(a) { + F(); + return !v.C && this instanceof Node && !qa(document, this) ? (a.__target || ub(a, this), rb(a)) : this.__shady_native_dispatchEvent(a); + } + function vb(a, b, c) { + var d = this, e = eb(c), f = e.capture, g = e.once, h2 = e.U; + e = e.T; + if (b) { + var k = typeof b; + if ("function" === k || "object" === k) { + if ("object" !== k || b.handleEvent && "function" === typeof b.handleEvent) { + if (gb[a]) + return this.__shady_native_addEventListener(a, b, e); + var l = h2 || this; + if (h2 = b[L]) { + if (-1 < sb(h2, l, a, f)) + return; + } else + b[L] = []; + h2 = function(m) { + g && d.__shady_removeEventListener(a, b, c); + m.__target || ub(m); + if (l !== d) { + var r = Object.getOwnPropertyDescriptor(m, "currentTarget"); + Object.defineProperty(m, "currentTarget", { + get: function() { + return l; + }, + configurable: true + }); + var C = Object.getOwnPropertyDescriptor(m, "eventPhase"); + Object.defineProperty(m, "eventPhase", { configurable: true, enumerable: true, get: function() { + return f ? Event.CAPTURING_PHASE : Event.BUBBLING_PHASE; + } }); + } + m.__previousCurrentTarget = m.currentTarget; + if (!x(l) && "slot" !== l.localName || -1 != m.composedPath().indexOf(l)) { + if (m.composed || -1 < m.composedPath().indexOf(l)) { + if (ob(m) && m.target === m.relatedTarget) + m.eventPhase === Event.BUBBLING_PHASE && m.stopImmediatePropagation(); + else if (m.eventPhase === Event.CAPTURING_PHASE || m.bubbles || m.target === l || l instanceof Window) { + var S = "function" === k ? b.call(l, m) : b.handleEvent && b.handleEvent(m); + l !== d && (r ? (Object.defineProperty(m, "currentTarget", r), r = null) : delete m.currentTarget, C ? (Object.defineProperty(m, "eventPhase", C), C = null) : delete m.eventPhase); + return S; + } + } + } + }; + b[L].push({ node: l, type: a, capture: f, fa: h2 }); + this.__handlers = this.__handlers || {}; + this.__handlers[a] = this.__handlers[a] || { capture: [], bubble: [] }; + this.__handlers[a][f ? "capture" : "bubble"].push(h2); + nb[a] || this.__shady_native_addEventListener( + a, + h2, + e + ); + } + } + } + } + function wb(a, b, c) { + if (b) { + var d = eb(c); + c = d.capture; + var e = d.U; + d = d.T; + if (gb[a]) + return this.__shady_native_removeEventListener(a, b, d); + var f = e || this; + e = void 0; + var g = null; + try { + g = b[L]; + } catch (h2) { + } + g && (f = sb(g, f, a, c), -1 < f && (e = g.splice(f, 1)[0].fa, g.length || (b[L] = void 0))); + this.__shady_native_removeEventListener(a, e || b, d); + e && this.__handlers && this.__handlers[a] && (a = this.__handlers[a][c ? "capture" : "bubble"], b = a.indexOf(e), -1 < b && a.splice(b, 1)); + } + } + function xb() { + for (var a in nb) + window.__shady_native_addEventListener(a, function(b) { + b.__target || (ub(b), rb(b)); + }, true); + } + var yb = B(kb); + function ub(a, b) { + b = void 0 === b ? a.target : b; + a.__target = b; + a.__relatedTarget = a.relatedTarget; + if (v.i) { + b = Object.getPrototypeOf(a); + if (!b.hasOwnProperty("__shady_patchedProto")) { + var c = Object.create(b); + c.__shady_sourceProto = b; + A(c, yb); + b.__shady_patchedProto = c; + } + a.__proto__ = b.__shady_patchedProto; + } else + A(a, yb); + } + var zb = mb(Event), Ab = mb(CustomEvent), Bb = mb(MouseEvent); + function Cb() { + if (!cb && Object.getOwnPropertyDescriptor(Event.prototype, "isTrusted")) { + var a = function() { + var b = new MouseEvent("click", { bubbles: true, cancelable: true, composed: true }); + this.__shady_dispatchEvent(b); + }; + Element.prototype.click ? Element.prototype.click = a : HTMLElement.prototype.click && (HTMLElement.prototype.click = a); + } + } + var Db = Object.getOwnPropertyNames(Element.prototype).filter(function(a) { + return "on" === a.substring(0, 2); + }), Eb = Object.getOwnPropertyNames(HTMLElement.prototype).filter(function(a) { + return "on" === a.substring(0, 2); + }); + function Fb(a) { + return { set: function(b) { + var c = t(this), d = a.substring(2); + c.m || (c.m = {}); + c.m[a] && this.removeEventListener(d, c.m[a]); + this.__shady_addEventListener(d, b); + c.m[a] = b; + }, get: function() { + var b = u(this); + return b && b.m && b.m[a]; + }, configurable: true }; + } + ; + function N(a, b) { + return { index: a, D: [], G: b }; + } + function Gb(a, b, c, d) { + var e = 0, f = 0, g = 0, h2 = 0, k = Math.min(b - e, d - f); + if (0 == e && 0 == f) + a: { + for (g = 0; g < k; g++) + if (a[g] !== c[g]) + break a; + g = k; + } + if (b == a.length && d == c.length) { + h2 = a.length; + for (var l = c.length, m = 0; m < k - g && Hb(a[--h2], c[--l]); ) + m++; + h2 = m; + } + e += g; + f += g; + b -= h2; + d -= h2; + if (0 == b - e && 0 == d - f) + return []; + if (e == b) { + for (b = N(e, 0); f < d; ) + b.D.push(c[f++]); + return [b]; + } + if (f == d) + return [N(e, b - e)]; + k = e; + g = f; + d = d - g + 1; + h2 = b - k + 1; + b = Array(d); + for (l = 0; l < d; l++) + b[l] = Array(h2), b[l][0] = l; + for (l = 0; l < h2; l++) + b[0][l] = l; + for (l = 1; l < d; l++) + for (m = 1; m < h2; m++) + if (a[k + m - 1] === c[g + l - 1]) + b[l][m] = b[l - 1][m - 1]; + else { + var r = b[l - 1][m] + 1, C = b[l][m - 1] + 1; + b[l][m] = r < C ? r : C; + } + k = b.length - 1; + g = b[0].length - 1; + d = b[k][g]; + for (a = []; 0 < k || 0 < g; ) + 0 == k ? (a.push(2), g--) : 0 == g ? (a.push(3), k--) : (h2 = b[k - 1][g - 1], l = b[k - 1][g], m = b[k][g - 1], r = l < m ? l < h2 ? l : h2 : m < h2 ? m : h2, r == h2 ? (h2 == d ? a.push(0) : (a.push(1), d = h2), k--, g--) : r == l ? (a.push(3), k--, d = l) : (a.push(2), g--, d = m)); + a.reverse(); + b = void 0; + k = []; + for (g = 0; g < a.length; g++) + switch (a[g]) { + case 0: + b && (k.push(b), b = void 0); + e++; + f++; + break; + case 1: + b || (b = N(e, 0)); + b.G++; + e++; + b.D.push(c[f]); + f++; + break; + case 2: + b || (b = N(e, 0)); + b.G++; + e++; + break; + case 3: + b || (b = N(e, 0)), b.D.push(c[f]), f++; + } + b && k.push(b); + return k; + } + function Hb(a, b) { + return a === b; + } + ; + var Ib = B({ dispatchEvent: tb, addEventListener: vb, removeEventListener: wb }); + var Jb = null; + function O() { + Jb || (Jb = window.ShadyCSS && window.ShadyCSS.ScopingShim); + return Jb || null; + } + function Kb(a, b, c) { + var d = O(); + return d && "class" === b ? (d.setElementClass(a, c), true) : false; + } + function Lb(a, b) { + var c = O(); + c && c.unscopeNode(a, b); + } + function Mb(a, b) { + var c = O(); + if (!c) + return true; + if (a.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { + c = true; + for (a = a.__shady_firstChild; a; a = a.__shady_nextSibling) + c = c && Mb(a, b); + return c; + } + return a.nodeType !== Node.ELEMENT_NODE ? true : c.currentScopeForNode(a) === b; + } + function Nb(a) { + if (a.nodeType !== Node.ELEMENT_NODE) + return ""; + var b = O(); + return b ? b.currentScopeForNode(a) : ""; + } + function Ob(a, b) { + if (a) + for (a.nodeType === Node.ELEMENT_NODE && b(a), a = a.__shady_firstChild; a; a = a.__shady_nextSibling) + a.nodeType === Node.ELEMENT_NODE && Ob(a, b); + } + ; + var Pb = window.document, Qb = v.C, Rb = Object.getOwnPropertyDescriptor(Node.prototype, "isConnected"), Sb = Rb && Rb.get; + function Tb(a) { + for (var b; b = a.__shady_firstChild; ) + a.__shady_removeChild(b); + } + function Ub(a) { + var b = u(a); + if (b && void 0 !== b.J) + for (b = a.__shady_firstChild; b; b = b.__shady_nextSibling) + Ub(b); + if (a = u(a)) + a.J = void 0; + } + function Vb(a) { + var b = a; + if (a && "slot" === a.localName) { + var c = u(a); + (c = c && c.u) && (b = c.length ? c[0] : Vb(a.__shady_nextSibling)); + } + return b; + } + function Wb(a, b, c) { + if (a = (a = u(a)) && a.B) { + if (b) + if (b.nodeType === Node.DOCUMENT_FRAGMENT_NODE) + for (var d = 0, e = b.childNodes.length; d < e; d++) + a.addedNodes.push(b.childNodes[d]); + else + a.addedNodes.push(b); + c && a.removedNodes.push(c); + Da(a); + } + } + var ac = B({ + get parentNode() { + var a = u(this); + a = a && a.parentNode; + return void 0 !== a ? a : this.__shady_native_parentNode; + }, + get firstChild() { + var a = u(this); + a = a && a.firstChild; + return void 0 !== a ? a : this.__shady_native_firstChild; + }, + get lastChild() { + var a = u(this); + a = a && a.lastChild; + return void 0 !== a ? a : this.__shady_native_lastChild; + }, + get nextSibling() { + var a = u(this); + a = a && a.nextSibling; + return void 0 !== a ? a : this.__shady_native_nextSibling; + }, + get previousSibling() { + var a = u(this); + a = a && a.previousSibling; + return void 0 !== a ? a : this.__shady_native_previousSibling; + }, + get childNodes() { + if (w(this)) { + var a = u(this); + if (!a.childNodes) { + a.childNodes = []; + for (var b = this.__shady_firstChild; b; b = b.__shady_nextSibling) + a.childNodes.push(b); + } + var c = a.childNodes; + } else + c = this.__shady_native_childNodes; + c.item = function(d) { + return c[d]; + }; + return c; + }, + get parentElement() { + var a = u(this); + (a = a && a.parentNode) && a.nodeType !== Node.ELEMENT_NODE && (a = null); + return void 0 !== a ? a : this.__shady_native_parentElement; + }, + get isConnected() { + if (Sb && Sb.call(this)) + return true; + if (this.nodeType == Node.DOCUMENT_FRAGMENT_NODE) + return false; + var a = this.ownerDocument; + if (null === a || qa(a, this)) + return true; + for (a = this; a && !(a instanceof Document); ) + a = a.__shady_parentNode || (x(a) ? a.host : void 0); + return !!(a && a instanceof Document); + }, + get textContent() { + if (w(this)) { + for (var a = [], b = this.__shady_firstChild; b; b = b.__shady_nextSibling) + b.nodeType !== Node.COMMENT_NODE && a.push(b.__shady_textContent); + return a.join(""); + } + return this.__shady_native_textContent; + }, + set textContent(a) { + if ("undefined" === typeof a || null === a) + a = ""; + switch (this.nodeType) { + case Node.ELEMENT_NODE: + case Node.DOCUMENT_FRAGMENT_NODE: + if (!w(this) && v.i) { + var b = this.__shady_firstChild; + (b != this.__shady_lastChild || b && b.nodeType != Node.TEXT_NODE) && Tb(this); + this.__shady_native_textContent = a; + } else + Tb(this), (0 < a.length || this.nodeType === Node.ELEMENT_NODE) && this.__shady_insertBefore(document.createTextNode(a)); + break; + default: + this.nodeValue = a; + } + }, + insertBefore: function(a, b) { + if (this.ownerDocument !== Pb && a.ownerDocument !== Pb) + return this.__shady_native_insertBefore(a, b), a; + if (a === this) + throw Error("Failed to execute 'appendChild' on 'Node': The new child element contains the parent."); + if (b) { + var c = u(b); + c = c && c.parentNode; + if (void 0 !== c && c !== this || void 0 === c && b.__shady_native_parentNode !== this) + throw Error("Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node."); + } + if (b === a) + return a; + Wb(this, a); + var d = [], e = (c = P(this)) ? c.host.localName : Nb(this), f = a.__shady_parentNode; + if (f) { + var g = Nb(a); + var h2 = !!c || !P(a) || Qb && void 0 !== this.__noInsertionPoint; + f.__shady_removeChild(a, h2); + } + f = true; + var k = (!Qb || void 0 === a.__noInsertionPoint && void 0 === this.__noInsertionPoint) && !Mb(a, e), l = c && !a.__noInsertionPoint && (!Qb || a.nodeType === Node.DOCUMENT_FRAGMENT_NODE); + if (l || k) + k && (g = g || Nb(a)), Ob(a, function(m) { + l && "slot" === m.localName && d.push(m); + if (k) { + var r = g; + O() && (r && Lb(m, r), (r = O()) && r.scopeNode(m, e)); + } + }); + d.length && (Xb(c), c.j.push.apply(c.j, q(d)), Q(c)); + w(this) && (Yb(a, this, b), h2 = u(this), h2.root ? (f = false, ja(this) && Q(h2.root)) : c && "slot" === this.localName && (f = false, Q(c))); + f ? (c = x(this) ? this.host : this, b ? (b = Vb(b), c.__shady_native_insertBefore(a, b)) : c.__shady_native_appendChild(a)) : a.ownerDocument !== this.ownerDocument && this.ownerDocument.adoptNode(a); + return a; + }, + appendChild: function(a) { + if (this != a || !x(a)) + return this.__shady_insertBefore(a); + }, + removeChild: function(a, b) { + b = void 0 === b ? false : b; + if (this.ownerDocument !== Pb) + return this.__shady_native_removeChild(a); + if (a.__shady_parentNode !== this) + throw Error("The node to be removed is not a child of this node: " + a); + Wb(this, null, a); + var c = P(a), d = c && Zb(c, a), e = u(this); + if (w(this) && ($b(a, this), ja(this))) { + Q(e.root); + var f = true; + } + if (O() && !b && c && a.nodeType !== Node.TEXT_NODE) { + var g = Nb(a); + Ob(a, function(h2) { + Lb(h2, g); + }); + } + Ub(a); + c && ((b = "slot" === this.localName) && (f = true), (d || b) && Q(c)); + f || (f = x(this) ? this.host : this, (!e.root && "slot" !== a.localName || f === a.__shady_native_parentNode) && f.__shady_native_removeChild(a)); + return a; + }, + replaceChild: function(a, b) { + this.__shady_insertBefore(a, b); + this.__shady_removeChild(b); + return a; + }, + cloneNode: function(a) { + if ("template" == this.localName) + return this.__shady_native_cloneNode(a); + var b = this.__shady_native_cloneNode(false); + if (a && b.nodeType !== Node.ATTRIBUTE_NODE) { + a = this.__shady_firstChild; + for (var c; a; a = a.__shady_nextSibling) + c = a.__shady_cloneNode(true), b.__shady_appendChild(c); + } + return b; + }, + getRootNode: function(a) { + if (this && this.nodeType) { + var b = t(this), c = b.J; + void 0 === c && (x(this) ? (c = this, b.J = c) : (c = (c = this.__shady_parentNode) ? c.__shady_getRootNode(a) : this, document.documentElement.__shady_native_contains(this) && (b.J = c))); + return c; + } + }, + contains: function(a) { + return ra(this, a); + } + }); + var R = B({ get assignedSlot() { + var a = this.__shady_parentNode; + (a = a && a.__shady_shadowRoot) && bc(a); + return (a = u(this)) && a.assignedSlot || null; + } }); + var cc = /* @__PURE__ */ new Map(); + [["(", { end: ")", I: true }], ["[", { end: "]", I: true }], ['"', { end: '"', I: false }], ["'", { end: "'", I: false }]].forEach(function(a) { + var b = p(a); + a = b.next().value; + b = b.next().value; + cc.set(a, b); + }); + function dc(a, b, c, d) { + for (d = void 0 === d ? true : d; b < a.length; b++) + if ("\\" === a[b] && b < a.length - 1 && "\n" !== a[b + 1]) + b++; + else { + if (-1 !== c.indexOf(a[b])) + return b; + if (d && cc.has(a[b])) { + var e = cc.get(a[b]); + b = dc(a, b + 1, [e.end], e.I); + } + } + return a.length; + } + function ec(a) { + function b() { + if (0 < d.length) { + for (; " " === d[d.length - 1]; ) + d.pop(); + c.push({ S: d.filter(function(k, l) { + return 0 === l % 2; + }), ca: d.filter(function(k, l) { + return 1 === l % 2; + }) }); + d.length = 0; + } + } + for (var c = [], d = [], e = 0; e < a.length; ) { + var f = d[d.length - 1], g = dc(a, e, [",", " ", ">", "+", "~"]), h2 = g === e ? a[e] : a.substring(e, g); + if ("," === h2) + b(); + else if (-1 === [void 0, " ", ">", "+", "~"].indexOf(f) || " " !== h2) + " " === f && -1 !== [">", "+", "~"].indexOf(h2) ? d[d.length - 1] = h2 : d.push(h2); + e = g + (g === e ? 1 : 0); + } + b(); + return c; + } + ; + function fc(a, b, c) { + var d = []; + gc(a, b, c, d); + return d; + } + function gc(a, b, c, d) { + for (a = a.__shady_firstChild; a; a = a.__shady_nextSibling) { + var e; + if (e = a.nodeType === Node.ELEMENT_NODE) { + e = a; + var f = b, g = c, h2 = d, k = f(e); + k && h2.push(e); + g && g(k) ? e = k : (gc(e, f, g, h2), e = void 0); + } + if (e) + break; + } + } + var hc = { get firstElementChild() { + var a = u(this); + if (a && void 0 !== a.firstChild) { + for (a = this.__shady_firstChild; a && a.nodeType !== Node.ELEMENT_NODE; ) + a = a.__shady_nextSibling; + return a; + } + return this.__shady_native_firstElementChild; + }, get lastElementChild() { + var a = u(this); + if (a && void 0 !== a.lastChild) { + for (a = this.__shady_lastChild; a && a.nodeType !== Node.ELEMENT_NODE; ) + a = a.__shady_previousSibling; + return a; + } + return this.__shady_native_lastElementChild; + }, get children() { + return w(this) ? z(Array.prototype.filter.call(ta(this), function(a) { + return a.nodeType === Node.ELEMENT_NODE; + })) : this.__shady_native_children; + }, get childElementCount() { + var a = this.__shady_children; + return a ? a.length : 0; + } }, T = B((hc.append = function(a) { + for (var b = [], c = 0; c < arguments.length; ++c) + b[c] = arguments[c]; + this.__shady_insertBefore(D.apply(null, q(b)), null); + }, hc.prepend = function(a) { + for (var b = [], c = 0; c < arguments.length; ++c) + b[c] = arguments[c]; + this.__shady_insertBefore(D.apply(null, q(b)), this.__shady_firstChild); + }, hc.replaceChildren = function(a) { + for (var b = [], c = 0; c < arguments.length; ++c) + b[c] = arguments[c]; + for (; null !== (c = this.__shady_firstChild); ) + this.__shady_removeChild(c); + this.__shady_insertBefore(D.apply(null, q(b)), null); + }, hc)); + function ic(a, b) { + function c(e, f) { + return (e === a || -1 === f.indexOf(":scope")) && la.call(e, f); + } + var d = ec(b); + if (1 > d.length) + return []; + for (b = ya(fc(a, function() { + return true; + }).map(function(e) { + return ya(d.map(function(f) { + var g = f.S, h2 = g.length - 1; + return c(e, g[h2]) ? { target: e, v: f, A: e, index: h2 } : []; + })); + })); b.some(function(e) { + return 0 < e.index; + }); ) + b = ya(b.map(function(e) { + if (0 >= e.index) + return e; + var f = e.target, g = e.A, h2 = e.v; + e = e.index - 1; + var k = h2.ca[e], l = h2.S[e]; + if (" " === k) { + k = []; + for (g = g.__shady_parentElement; g; g = g.__shady_parentElement) + c( + g, + l + ) && k.push({ target: f, v: h2, A: g, index: e }); + return k; + } + if (">" === k) + return g = g.__shady_parentElement, c(g, l) ? { target: f, v: h2, A: g, index: e } : []; + if ("+" === k) + return (g = g.__shady_previousElementSibling) && c(g, l) ? { target: f, v: h2, A: g, index: e } : []; + if ("~" === k) { + k = []; + for (g = g.__shady_previousElementSibling; g; g = g.__shady_previousElementSibling) + c(g, l) && k.push({ target: f, v: h2, A: g, index: e }); + return k; + } + throw Error("Unrecognized combinator: '" + k + "'."); + })); + return za(b.map(function(e) { + return e.target; + })); + } + var U = v.querySelectorImplementation, jc = B({ querySelector: function(a) { + if ("native" === U) { + var b = Array.prototype.slice.call((this instanceof ShadowRoot ? this.host : this).__shady_native_querySelectorAll(a)), c = this.__shady_getRootNode(); + b = p(b); + for (var d = b.next(); !d.done; d = b.next()) + if (d = d.value, d.__shady_getRootNode() == c) + return d; + return null; + } + if ("selectorEngine" === U) + return ic(this, a)[0] || null; + if (void 0 === U) + return fc(this, function(e) { + return la.call(e, a); + }, function(e) { + return !!e; + })[0] || null; + throw Error("Unrecognized value of ShadyDOM.querySelectorImplementation: '" + (U + "'")); + }, querySelectorAll: function(a, b) { + if (b || "native" === U) { + b = Array.prototype.slice.call((this instanceof ShadowRoot ? this.host : this).__shady_native_querySelectorAll(a)); + var c = this.__shady_getRootNode(); + return z(b.filter(function(d) { + return d.__shady_getRootNode() == c; + })); + } + if ("selectorEngine" === U) + return z(ic(this, a)); + if (void 0 === U) + return z(fc(this, function(d) { + return la.call(d, a); + })); + throw Error("Unrecognized value of ShadyDOM.querySelectorImplementation: '" + (U + "'")); + } }), kc = v.C && !v.l ? wa({}, T) : T; + wa(T, jc); + var lc = B({ after: function(a) { + for (var b = [], c = 0; c < arguments.length; ++c) + b[c] = arguments[c]; + c = this.__shady_parentNode; + if (null !== c) { + var d = this.__shady_nextSibling; + c.__shady_insertBefore(D.apply(null, q(b)), d); + } + }, before: function(a) { + for (var b = [], c = 0; c < arguments.length; ++c) + b[c] = arguments[c]; + c = this.__shady_parentNode; + null !== c && c.__shady_insertBefore(D.apply(null, q(b)), this); + }, remove: function() { + var a = this.__shady_parentNode; + null !== a && a.__shady_removeChild(this); + }, replaceWith: function(a) { + for (var b = [], c = 0; c < arguments.length; ++c) + b[c] = arguments[c]; + c = this.__shady_parentNode; + if (null !== c) { + var d = this.__shady_nextSibling; + c.__shady_removeChild(this); + c.__shady_insertBefore(D.apply(null, q(b)), d); + } + } }); + var mc = window.document; + function nc(a, b) { + if ("slot" === b) + a = a.__shady_parentNode, ja(a) && Q(u(a).root); + else if ("slot" === a.localName && "name" === b && (b = P(a))) { + if (b.g) { + oc(b); + var c = a.Y, d = pc(a); + if (d !== c) { + c = b.h[c]; + var e = c.indexOf(a); + 0 <= e && c.splice(e, 1); + c = b.h[d] || (b.h[d] = []); + c.push(a); + 1 < c.length && (b.h[d] = qc(c)); + } + } + Q(b); + } + } + var rc = B({ + get previousElementSibling() { + var a = u(this); + if (a && void 0 !== a.previousSibling) { + for (a = this.__shady_previousSibling; a && a.nodeType !== Node.ELEMENT_NODE; ) + a = a.__shady_previousSibling; + return a; + } + return this.__shady_native_previousElementSibling; + }, + get nextElementSibling() { + var a = u(this); + if (a && void 0 !== a.nextSibling) { + for (a = this.__shady_nextSibling; a && a.nodeType !== Node.ELEMENT_NODE; ) + a = a.__shady_nextSibling; + return a; + } + return this.__shady_native_nextElementSibling; + }, + get slot() { + return this.getAttribute("slot"); + }, + set slot(a) { + this.__shady_setAttribute("slot", a); + }, + get className() { + return this.getAttribute("class") || ""; + }, + set className(a) { + this.__shady_setAttribute("class", a); + }, + setAttribute: function(a, b) { + this.ownerDocument !== mc ? this.__shady_native_setAttribute(a, b) : Kb(this, a, b) || (this.__shady_native_setAttribute(a, b), nc(this, a)); + }, + removeAttribute: function(a) { + this.ownerDocument !== mc ? this.__shady_native_removeAttribute(a) : Kb(this, a, "") ? "" === this.getAttribute(a) && this.__shady_native_removeAttribute(a) : (this.__shady_native_removeAttribute(a), nc(this, a)); + }, + toggleAttribute: function(a, b) { + if (this.ownerDocument !== mc) + return this.__shady_native_toggleAttribute(a, b); + if (!Kb(this, a, "")) + return b = this.__shady_native_toggleAttribute(a, b), nc(this, a), b; + if ("" === this.getAttribute(a) && !b) + return this.__shady_native_toggleAttribute(a, b); + } + }); + v.C || Db.forEach(function(a) { + rc[a] = Fb(a); + }); + var wc = B({ attachShadow: function(a) { + if (!this) + throw Error("Must provide a host."); + if (!a) + throw Error("Not enough arguments."); + if (a.shadyUpgradeFragment && !v.V) { + var b = a.shadyUpgradeFragment; + b.__proto__ = ShadowRoot.prototype; + sc(b, this, a); + tc(b, b); + a = b.__noInsertionPoint ? null : b.querySelectorAll("slot"); + b.__noInsertionPoint = void 0; + if (a && a.length) { + var c = b; + Xb(c); + c.j.push.apply(c.j, q(a)); + Q(b); + } + b.host.__shady_native_appendChild(b); + } else + b = new uc(vc, this, a); + return this.__CE_shadowRoot = b; + }, get shadowRoot() { + var a = u(this); + return a && a.ea || null; + } }); + wa(rc, wc); + var xc = document.implementation.createHTMLDocument("inert"), yc = B({ get innerHTML() { + return w(this) ? Na("template" === this.localName ? this.content : this, ta) : this.__shady_native_innerHTML; + }, set innerHTML(a) { + if ("template" === this.localName) + this.__shady_native_innerHTML = a; + else { + Tb(this); + var b = this.localName || "div"; + b = this.namespaceURI && this.namespaceURI !== xc.namespaceURI ? xc.createElementNS(this.namespaceURI, b) : xc.createElement(b); + for (v.i ? b.__shady_native_innerHTML = a : b.innerHTML = a; a = b.__shady_firstChild; ) + this.__shady_insertBefore(a); + } + } }); + var zc = B({ blur: function() { + var a = u(this); + (a = (a = a && a.root) && a.activeElement) ? a.__shady_blur() : this.__shady_native_blur(); + } }); + v.C || Eb.forEach(function(a) { + zc[a] = Fb(a); + }); + var Ac = B({ assignedNodes: function(a) { + if ("slot" === this.localName) { + var b = this.__shady_getRootNode(); + b && x(b) && bc(b); + return (b = u(this)) ? (a && a.flatten ? b.u : b.assignedNodes) || [] : []; + } + }, addEventListener: function(a, b, c) { + if ("slot" !== this.localName || "slotchange" === a) + vb.call(this, a, b, c); + else { + "object" !== typeof c && (c = { capture: !!c }); + var d = this.__shady_parentNode; + if (!d) + throw Error("ShadyDOM cannot attach event to slot unless it has a `parentNode`"); + c.o = this; + d.__shady_addEventListener(a, b, c); + } + }, removeEventListener: function(a, b, c) { + if ("slot" !== this.localName || "slotchange" === a) + wb.call(this, a, b, c); + else { + "object" !== typeof c && (c = { capture: !!c }); + var d = this.__shady_parentNode; + if (!d) + throw Error("ShadyDOM cannot attach event to slot unless it has a `parentNode`"); + c.o = this; + d.__shady_removeEventListener(a, b, c); + } + } }); + var Bc = B({ getElementById: function(a) { + return "" === a ? null : fc(this, function(b) { + return b.id == a; + }, function(b) { + return !!b; + })[0] || null; + } }); + function Cc(a, b) { + for (var c; b && !a.has(c = b.__shady_getRootNode()); ) + b = c.host; + return b; + } + function Dc(a) { + var b = /* @__PURE__ */ new Set(); + for (b.add(a); x(a) && a.host; ) + a = a.host.__shady_getRootNode(), b.add(a); + return b; + } + var Ec = "__shady_native_" + ia(), Fc = B({ get activeElement() { + var a = v.i ? document.__shady_native_activeElement : document.activeElement; + if (!a || !a.nodeType) + return null; + var b = !!x(this); + if (!(this === document || b && this.host !== a && this.host.__shady_native_contains(a))) + return null; + for (b = P(a); b && b !== this; ) + a = b.host, b = P(a); + return this === document ? b ? null : a : b === this ? a : null; + }, elementsFromPoint: function(a, b) { + a = document[Ec](a, b); + if (this === document && v.useNativeDocumentEFP) + return a; + a = [].slice.call(a); + b = Dc(this); + for (var c = /* @__PURE__ */ new Set(), d = 0; d < a.length; d++) + c.add(Cc(b, a[d])); + var e = []; + c.forEach(function(f) { + return e.push(f); + }); + return e; + }, elementFromPoint: function(a, b) { + return this === document && v.useNativeDocumentEFP ? this.__shady_native_elementFromPoint(a, b) : this.__shady_elementsFromPoint(a, b)[0] || null; + } }); + var Gc = window.document, Hc = B({ importNode: function(a, b) { + if (a.ownerDocument !== Gc || "template" === a.localName) + return this.__shady_native_importNode(a, b); + var c = this.__shady_native_importNode(a, false); + if (b) + for (a = a.__shady_firstChild; a; a = a.__shady_nextSibling) + b = this.__shady_importNode(a, true), c.__shady_appendChild(b); + return c; + } }); + var Ic = B({ dispatchEvent: tb, addEventListener: vb.bind(window), removeEventListener: wb.bind(window) }); + var V = {}; + Object.getOwnPropertyDescriptor(HTMLElement.prototype, "parentElement") && (V.parentElement = ac.parentElement); + Object.getOwnPropertyDescriptor(HTMLElement.prototype, "contains") && (V.contains = ac.contains); + Object.getOwnPropertyDescriptor(HTMLElement.prototype, "children") && (V.children = T.children); + Object.getOwnPropertyDescriptor(HTMLElement.prototype, "innerHTML") && (V.innerHTML = yc.innerHTML); + Object.getOwnPropertyDescriptor(HTMLElement.prototype, "className") && (V.className = rc.className); + var W = { EventTarget: [Ib], Node: [ac, window.EventTarget ? null : Ib], Text: [R], Comment: [R], CDATASection: [R], ProcessingInstruction: [R], Element: [rc, T, lc, R, !v.i || "innerHTML" in Element.prototype ? yc : null, window.HTMLSlotElement ? null : Ac], HTMLElement: [zc, V], HTMLSlotElement: [Ac], DocumentFragment: [kc, Bc], Document: [Hc, kc, Bc, Fc], Window: [Ic], CharacterData: [lc], XMLHttpRequest: [window.EventTarget ? null : Ib] }, Jc = v.i ? null : ["innerHTML", "textContent"]; + function X(a, b, c, d) { + b.forEach(function(e) { + return a && e && A(a, e, c, d); + }); + } + function Kc(a) { + var b = a ? null : Jc, c; + for (c in W) + X(window[c] && window[c].prototype, W[c], a, b); + } + ["Text", "Comment", "CDATASection", "ProcessingInstruction"].forEach(function(a) { + var b = window[a], c = Object.create(b.prototype); + c.__shady_protoIsPatched = true; + X(c, W.EventTarget); + X(c, W.Node); + W[a] && X(c, W[a]); + b.prototype.__shady_patchedProto = c; + }); + function Lc(a) { + a.__shady_protoIsPatched = true; + X(a, W.EventTarget); + X(a, W.Node); + X(a, W.Element); + X(a, W.HTMLElement); + X(a, W.HTMLSlotElement); + return a; + } + ; + var Mc = v.O, Nc = v.i; + function Oc(a, b) { + if (Mc && !a.__shady_protoIsPatched && !x(a)) { + var c = Object.getPrototypeOf(a), d = c.hasOwnProperty("__shady_patchedProto") && c.__shady_patchedProto; + d || (d = Object.create(c), Lc(d), c.__shady_patchedProto = d); + Object.setPrototypeOf(a, d); + } + Nc || (1 === b ? ab(a) : 2 === b && bb(a)); + } + function Pc(a, b, c, d) { + Oc(a, 1); + d = d || null; + var e = t(a), f = d ? t(d) : null; + e.previousSibling = d ? f.previousSibling : b.__shady_lastChild; + if (f = u(e.previousSibling)) + f.nextSibling = a; + if (f = u(e.nextSibling = d)) + f.previousSibling = a; + e.parentNode = b; + d ? d === c.firstChild && (c.firstChild = a) : (c.lastChild = a, c.firstChild || (c.firstChild = a)); + c.childNodes = null; + } + function Yb(a, b, c) { + Oc(b, 2); + var d = t(b); + void 0 !== d.firstChild && (d.childNodes = null); + if (a.nodeType === Node.DOCUMENT_FRAGMENT_NODE) + for (a = a.__shady_native_firstChild; a; a = a.__shady_native_nextSibling) + Pc(a, b, d, c); + else + Pc(a, b, d, c); + } + function $b(a, b) { + var c = t(a); + b = t(b); + a === b.firstChild && (b.firstChild = c.nextSibling); + a === b.lastChild && (b.lastChild = c.previousSibling); + a = c.previousSibling; + var d = c.nextSibling; + a && (t(a).nextSibling = d); + d && (t(d).previousSibling = a); + c.parentNode = c.previousSibling = c.nextSibling = void 0; + void 0 !== b.childNodes && (b.childNodes = null); + } + function tc(a, b) { + var c = t(a); + if (b || void 0 === c.firstChild) { + c.childNodes = null; + var d = c.firstChild = a.__shady_native_firstChild; + c.lastChild = a.__shady_native_lastChild; + Oc(a, 2); + c = d; + for (d = void 0; c; c = c.__shady_native_nextSibling) { + var e = t(c); + e.parentNode = b || a; + e.nextSibling = c.__shady_native_nextSibling; + e.previousSibling = d || null; + d = c; + Oc(c, 1); + } + } + } + ; + var Qc = B({ addEventListener: function(a, b, c) { + "object" !== typeof c && (c = { capture: !!c }); + c.o = c.o || this; + this.host.__shady_addEventListener(a, b, c); + }, removeEventListener: function(a, b, c) { + "object" !== typeof c && (c = { capture: !!c }); + c.o = c.o || this; + this.host.__shady_removeEventListener(a, b, c); + } }); + function Rc(a, b) { + A(a, Qc, b); + A(a, Fc, b); + A(a, yc, b); + A(a, T, b); + v.l && !b ? (A(a, ac, b), A(a, Bc, b)) : v.i || (A(a, Ya), A(a, Wa), A(a, Xa)); + } + ; + var vc = {}, Y = v.deferConnectionCallbacks && "loading" === document.readyState, Sc; + function Tc(a) { + var b = []; + do + b.unshift(a); + while (a = a.__shady_parentNode); + return b; + } + function uc(a, b, c) { + if (a !== vc) + throw new TypeError("Illegal constructor"); + this.g = null; + sc(this, b, c); + } + function sc(a, b, c) { + a.host = b; + a.mode = c && c.mode; + tc(a.host); + b = t(a.host); + b.root = a; + b.ea = "closed" !== a.mode ? a : null; + b = t(a); + b.firstChild = b.lastChild = b.parentNode = b.nextSibling = b.previousSibling = null; + if (v.preferPerformance) + for (; b = a.host.__shady_native_firstChild; ) + a.host.__shady_native_removeChild(b); + else + Q(a); + } + function Q(a) { + a.s || (a.s = true, Ba(function() { + return bc(a); + })); + } + function bc(a) { + var b; + if (b = a.s) { + for (var c; a; ) + a: { + a.s && (c = a), b = a; + a = b.host.__shady_getRootNode(); + if (x(a) && (b = u(b.host)) && 0 < b.F) + break a; + a = void 0; + } + b = c; + } + (c = b) && c._renderSelf(); + } + uc.prototype._renderSelf = function() { + var a = Y; + Y = true; + this.s = false; + if (this.g) { + oc(this); + for (var b = 0, c; b < this.g.length; b++) { + c = this.g[b]; + var d = u(c), e = d.assignedNodes; + d.assignedNodes = []; + d.u = []; + if (d.R = e) + for (d = 0; d < e.length; d++) { + var f = u(e[d]); + f.L = f.assignedSlot; + f.assignedSlot === c && (f.assignedSlot = null); + } + } + for (b = this.host.__shady_firstChild; b; b = b.__shady_nextSibling) + Uc(this, b); + for (b = 0; b < this.g.length; b++) { + c = this.g[b]; + e = u(c); + if (!e.assignedNodes.length) + for (d = c.__shady_firstChild; d; d = d.__shady_nextSibling) + Uc(this, d, c); + (d = (d = u(c.__shady_parentNode)) && d.root) && (ka(d) || d.s) && d._renderSelf(); + Vc(this, e.u, e.assignedNodes); + if (d = e.R) { + for (f = 0; f < d.length; f++) + u(d[f]).L = null; + e.R = null; + d.length > e.assignedNodes.length && (e.M = true); + } + e.M && (e.M = false, Wc(this, c)); + } + c = this.g; + b = []; + for (e = 0; e < c.length; e++) + d = c[e].__shady_parentNode, (f = u(d)) && f.root || !(0 > b.indexOf(d)) || b.push(d); + for (c = 0; c < b.length; c++) { + f = b[c]; + e = f === this ? this.host : f; + d = []; + for (f = f.__shady_firstChild; f; f = f.__shady_nextSibling) + if ("slot" == f.localName) + for (var g = u(f).u, h2 = 0; h2 < g.length; h2++) + d.push(g[h2]); + else + d.push(f); + f = sa(e); + g = Gb(d, d.length, f, f.length); + for (var k = h2 = 0, l = void 0; h2 < g.length && (l = g[h2]); h2++) { + for (var m = 0, r = void 0; m < l.D.length && (r = l.D[m]); m++) + r.__shady_native_parentNode === e && e.__shady_native_removeChild(r), f.splice(l.index + k, 1); + k -= l.G; + } + k = 0; + for (l = void 0; k < g.length && (l = g[k]); k++) + for (h2 = f[l.index], m = l.index; m < l.index + l.G; m++) + r = d[m], e.__shady_native_insertBefore(r, h2), f.splice(m, 0, r); + } + } + if (!v.preferPerformance && !this.P) + for (b = this.host.__shady_firstChild; b; b = b.__shady_nextSibling) + c = u(b), b.__shady_native_parentNode !== this.host || "slot" !== b.localName && c.assignedSlot || this.host.__shady_native_removeChild(b); + this.P = true; + Y = a; + Sc && Sc(); + }; + function Uc(a, b, c) { + var d = t(b), e = d.L; + d.L = null; + c || (c = (a = a.h[b.__shady_slot || "__catchall"]) && a[0]); + c ? (t(c).assignedNodes.push(b), d.assignedSlot = c) : d.assignedSlot = void 0; + e !== d.assignedSlot && d.assignedSlot && (t(d.assignedSlot).M = true); + } + function Vc(a, b, c) { + for (var d = 0, e = void 0; d < c.length && (e = c[d]); d++) + if ("slot" == e.localName) { + var f = u(e).assignedNodes; + f && f.length && Vc(a, b, f); + } else + b.push(c[d]); + } + function Wc(a, b) { + b.__shady_native_dispatchEvent(new Event("slotchange")); + b = u(b); + b.assignedSlot && Wc(a, b.assignedSlot); + } + function Xb(a) { + a.j = a.j || []; + a.g = a.g || []; + a.h = a.h || {}; + } + function oc(a) { + if (a.j && a.j.length) { + for (var b = a.j, c, d = 0; d < b.length; d++) { + var e = b[d]; + tc(e); + var f = e.__shady_parentNode; + tc(f); + f = u(f); + f.F = (f.F || 0) + 1; + f = pc(e); + a.h[f] ? (c = c || {}, c[f] = true, a.h[f].push(e)) : a.h[f] = [e]; + a.g.push(e); + } + if (c) + for (var g in c) + a.h[g] = qc(a.h[g]); + a.j = []; + } + } + function pc(a) { + var b = a.name || a.getAttribute("name") || "__catchall"; + return a.Y = b; + } + function qc(a) { + return a.sort(function(b, c) { + b = Tc(b); + for (var d = Tc(c), e = 0; e < b.length; e++) { + c = b[e]; + var f = d[e]; + if (c !== f) + return b = ta(c.__shady_parentNode), b.indexOf(c) - b.indexOf(f); + } + }); + } + function Zb(a, b) { + if (a.g) { + oc(a); + var c = a.h, d; + for (d in c) + for (var e = c[d], f = 0; f < e.length; f++) { + var g = e[f]; + if (ra(b, g)) { + e.splice(f, 1); + var h2 = a.g.indexOf(g); + 0 <= h2 && (a.g.splice(h2, 1), (h2 = u(g.__shady_parentNode)) && h2.F && h2.F--); + f--; + g = u(g); + if (h2 = g.u) + for (var k = 0; k < h2.length; k++) { + var l = h2[k], m = l.__shady_native_parentNode; + m && m.__shady_native_removeChild(l); + } + g.u = []; + g.assignedNodes = []; + h2 = true; + } + } + return h2; + } + } + function ka(a) { + oc(a); + return !(!a.g || !a.g.length); + } + (function(a) { + a.__proto__ = DocumentFragment.prototype; + Rc(a, "__shady_"); + Rc(a); + Object.defineProperties(a, { nodeType: { value: Node.DOCUMENT_FRAGMENT_NODE, configurable: true }, nodeName: { value: "#document-fragment", configurable: true }, nodeValue: { value: null, configurable: true } }); + ["localName", "namespaceURI", "prefix"].forEach(function(b) { + Object.defineProperty(a, b, { value: void 0, configurable: true }); + }); + ["ownerDocument", "baseURI", "isConnected"].forEach(function(b) { + Object.defineProperty(a, b, { + get: function() { + return this.host[b]; + }, + configurable: true + }); + }); + })(uc.prototype); + if (window.customElements && window.customElements.define && v.N && !v.preferPerformance) { + var Xc = /* @__PURE__ */ new Map(); + Sc = function() { + var a = []; + Xc.forEach(function(d, e) { + a.push([e, d]); + }); + Xc.clear(); + for (var b = 0; b < a.length; b++) { + var c = a[b][0]; + a[b][1] ? c.__shadydom_connectedCallback() : c.__shadydom_disconnectedCallback(); + } + }; + Y && document.addEventListener("readystatechange", function() { + Y = false; + Sc(); + }, { once: true }); + var Yc = function(a, b, c) { + var d = 0, e = "__isConnected" + d++; + if (b || c) + a.prototype.connectedCallback = a.prototype.__shadydom_connectedCallback = function() { + Y ? Xc.set(this, true) : this[e] || (this[e] = true, b && b.call(this)); + }, a.prototype.disconnectedCallback = a.prototype.__shadydom_disconnectedCallback = function() { + Y ? this.isConnected || Xc.set(this, false) : this[e] && (this[e] = false, c && c.call(this)); + }; + return a; + }, Zc = window.customElements.define, $c = function(a, b) { + var c = b.prototype.connectedCallback, d = b.prototype.disconnectedCallback; + Zc.call(window.customElements, a, Yc(b, c, d)); + b.prototype.connectedCallback = c; + b.prototype.disconnectedCallback = d; + }; + window.customElements.define = $c; + Object.defineProperty(window.CustomElementRegistry.prototype, "define", { value: $c, configurable: true }); + } + function P(a) { + a = a.__shady_getRootNode(); + if (x(a)) + return a; + } + ; + function Z(a) { + this.node = a; + } + n = Z.prototype; + n.addEventListener = function(a, b, c) { + return this.node.__shady_addEventListener(a, b, c); + }; + n.removeEventListener = function(a, b, c) { + return this.node.__shady_removeEventListener(a, b, c); + }; + n.appendChild = function(a) { + return this.node.__shady_appendChild(a); + }; + n.insertBefore = function(a, b) { + return this.node.__shady_insertBefore(a, b); + }; + n.removeChild = function(a) { + return this.node.__shady_removeChild(a); + }; + n.replaceChild = function(a, b) { + return this.node.__shady_replaceChild(a, b); + }; + n.cloneNode = function(a) { + return this.node.__shady_cloneNode(a); + }; + n.getRootNode = function(a) { + return this.node.__shady_getRootNode(a); + }; + n.contains = function(a) { + return this.node.__shady_contains(a); + }; + n.dispatchEvent = function(a) { + return this.node.__shady_dispatchEvent(a); + }; + n.setAttribute = function(a, b) { + this.node.__shady_setAttribute(a, b); + }; + n.getAttribute = function(a) { + return this.node.__shady_native_getAttribute(a); + }; + n.removeAttribute = function(a) { + this.node.__shady_removeAttribute(a); + }; + n.toggleAttribute = function(a, b) { + return this.node.__shady_toggleAttribute(a, b); + }; + n.attachShadow = function(a) { + return this.node.__shady_attachShadow(a); + }; + n.focus = function() { + this.node.__shady_native_focus(); + }; + n.blur = function() { + this.node.__shady_blur(); + }; + n.importNode = function(a, b) { + if (this.node.nodeType === Node.DOCUMENT_NODE) + return this.node.__shady_importNode(a, b); + }; + n.getElementById = function(a) { + if (this.node.nodeType === Node.DOCUMENT_NODE) + return this.node.__shady_getElementById(a); + }; + n.elementsFromPoint = function(a, b) { + return this.node.__shady_elementsFromPoint(a, b); + }; + n.elementFromPoint = function(a, b) { + return this.node.__shady_elementFromPoint(a, b); + }; + n.querySelector = function(a) { + return this.node.__shady_querySelector(a); + }; + n.querySelectorAll = function(a, b) { + return this.node.__shady_querySelectorAll(a, b); + }; + n.assignedNodes = function(a) { + if ("slot" === this.node.localName) + return this.node.__shady_assignedNodes(a); + }; + n.append = function(a) { + for (var b = [], c = 0; c < arguments.length; ++c) + b[c] = arguments[c]; + return this.node.__shady_append.apply(this.node, q(b)); + }; + n.prepend = function(a) { + for (var b = [], c = 0; c < arguments.length; ++c) + b[c] = arguments[c]; + return this.node.__shady_prepend.apply(this.node, q(b)); + }; + n.after = function(a) { + for (var b = [], c = 0; c < arguments.length; ++c) + b[c] = arguments[c]; + return this.node.__shady_after.apply(this.node, q(b)); + }; + n.before = function(a) { + for (var b = [], c = 0; c < arguments.length; ++c) + b[c] = arguments[c]; + return this.node.__shady_before.apply(this.node, q(b)); + }; + n.remove = function() { + return this.node.__shady_remove(); + }; + n.replaceWith = function(a) { + for (var b = [], c = 0; c < arguments.length; ++c) + b[c] = arguments[c]; + return this.node.__shady_replaceWith.apply(this.node, q(b)); + }; + ca.Object.defineProperties(Z.prototype, { + activeElement: { configurable: true, enumerable: true, get: function() { + if (x(this.node) || this.node.nodeType === Node.DOCUMENT_NODE) + return this.node.__shady_activeElement; + } }, + _activeElement: { configurable: true, enumerable: true, get: function() { + return this.activeElement; + } }, + host: { configurable: true, enumerable: true, get: function() { + if (x(this.node)) + return this.node.host; + } }, + parentNode: { configurable: true, enumerable: true, get: function() { + return this.node.__shady_parentNode; + } }, + firstChild: { + configurable: true, + enumerable: true, + get: function() { + return this.node.__shady_firstChild; + } + }, + lastChild: { configurable: true, enumerable: true, get: function() { + return this.node.__shady_lastChild; + } }, + nextSibling: { configurable: true, enumerable: true, get: function() { + return this.node.__shady_nextSibling; + } }, + previousSibling: { configurable: true, enumerable: true, get: function() { + return this.node.__shady_previousSibling; + } }, + childNodes: { configurable: true, enumerable: true, get: function() { + return this.node.__shady_childNodes; + } }, + parentElement: { + configurable: true, + enumerable: true, + get: function() { + return this.node.__shady_parentElement; + } + }, + firstElementChild: { configurable: true, enumerable: true, get: function() { + return this.node.__shady_firstElementChild; + } }, + lastElementChild: { configurable: true, enumerable: true, get: function() { + return this.node.__shady_lastElementChild; + } }, + nextElementSibling: { configurable: true, enumerable: true, get: function() { + return this.node.__shady_nextElementSibling; + } }, + previousElementSibling: { configurable: true, enumerable: true, get: function() { + return this.node.__shady_previousElementSibling; + } }, + children: { configurable: true, enumerable: true, get: function() { + return this.node.__shady_children; + } }, + childElementCount: { configurable: true, enumerable: true, get: function() { + return this.node.__shady_childElementCount; + } }, + shadowRoot: { configurable: true, enumerable: true, get: function() { + return this.node.__shady_shadowRoot; + } }, + assignedSlot: { configurable: true, enumerable: true, get: function() { + return this.node.__shady_assignedSlot; + } }, + isConnected: { configurable: true, enumerable: true, get: function() { + return this.node.__shady_isConnected; + } }, + innerHTML: { + configurable: true, + enumerable: true, + get: function() { + return this.node.__shady_innerHTML; + }, + set: function(a) { + this.node.__shady_innerHTML = a; + } + }, + textContent: { configurable: true, enumerable: true, get: function() { + return this.node.__shady_textContent; + }, set: function(a) { + this.node.__shady_textContent = a; + } }, + slot: { configurable: true, enumerable: true, get: function() { + return this.node.__shady_slot; + }, set: function(a) { + this.node.__shady_slot = a; + } }, + className: { configurable: true, enumerable: true, get: function() { + return this.node.__shady_className; + }, set: function(a) { + this.node.__shady_className = a; + } } + }); + function ad(a) { + Object.defineProperty(Z.prototype, a, { get: function() { + return this.node["__shady_" + a]; + }, set: function(b) { + this.node["__shady_" + a] = b; + }, configurable: true }); + } + Db.forEach(function(a) { + return ad(a); + }); + Eb.forEach(function(a) { + return ad(a); + }); + var bd = /* @__PURE__ */ new WeakMap(); + function cd(a) { + if (x(a) || a instanceof Z) + return a; + var b = bd.get(a); + b || (b = new Z(a), bd.set(a, b)); + return b; + } + ; + if (v.N) { + var dd = v.i ? function(a) { + return a; + } : function(a) { + bb(a); + ab(a); + return a; + }; + window.ShadyDOM = { + inUse: v.N, + patch: dd, + isShadyRoot: x, + enqueue: Ba, + flush: F, + flushInitial: function(a) { + !a.P && a.s && bc(a); + }, + settings: v, + filterMutations: Ga, + observeChildren: Ea, + unobserveChildren: Fa, + deferConnectionCallbacks: v.deferConnectionCallbacks, + preferPerformance: v.preferPerformance, + handlesDynamicScoping: true, + wrap: v.l ? cd : dd, + wrapIfNeeded: true === v.l ? cd : function(a) { + return a; + }, + Wrapper: Z, + composedPath: ib, + noPatch: v.l, + patchOnDemand: v.O, + nativeMethods: Oa, + nativeTree: Pa, + patchElementProto: Lc, + querySelectorImplementation: v.querySelectorImplementation + }; + Va(); + Kc("__shady_"); + Object.defineProperty(document, "_activeElement", Fc.activeElement); + A(Window.prototype, Ic, "__shady_"); + v.l ? v.O && A(Element.prototype, wc) : (Kc(), Cb()); + xb(); + window.Event = zb; + window.CustomEvent = Ab; + window.MouseEvent = Bb; + window.ShadowRoot = uc; + } + ; + }).call(exports2); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.replace.js +var DOMTokenList_prototype_replace_exports = {}; +var init_DOMTokenList_prototype_replace = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.replace.js": function() { + init_DOMTokenList(); + (function(undefined2) { + if (!("replace" in (document.createElement("div").classList || {}))) { + (function() { + var classList = document.createElement("div").classList; + classList && (classList.constructor.prototype.replace = function(token, newToken) { + var tokenString = "" + token, newTokenString = "" + newToken; + try { + new DOMException(); + } catch (e) { + self.DOMException = function(message, name) { + if (!(this instanceof DOMException)) + return new DOMException(message, name); + this.message = message; + this.name = name; + }; + } + var error; + if (!(tokenString && newTokenString)) + error = "SyntaxError"; + if (!error && (/\s/.test(tokenString) || /\s/.test(newTokenString))) + error = "InvalidCharacterError"; + if (error) + throw new DOMException("DOMTokenList.replace was provided tokens '" + tokenString + "' and '" + newTokenString + "'", error); + if (!this.contains(tokenString)) + return false; + var tokensTobeMoved = []; + var newTokenFound = false; + for (var i = 0; i < this.length; ++i) + if (newTokenString === this.item(i)) + newTokenFound = true; + else if (tokenString === this.item(i)) + break; + for (; i < this.length; ++i) + tokensTobeMoved.push(this.item(i)); + for (i = 0; i < tokensTobeMoved.length; ++i) { + var currentToken = tokensTobeMoved[i]; + currentToken !== newTokenString && this.remove(currentToken); + currentToken !== tokenString && this.add(currentToken); + currentToken === tokenString && !newTokenFound && (this.remove(newTokenString), this.add(newTokenString)); + } + return true; + }); + })(); + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.@@iterator.js +var DOMTokenList_prototype_iterator_exports = {}; +var init_DOMTokenList_prototype_iterator = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.@@iterator.js": function() { + init_ArrayIterator(); + init_Iterator(); + init_DOMTokenList(); + (function(undefined2) { + if (!("Symbol" in self && "iterator" in self.Symbol && function() { + try { + var t = document.createElement("div"); + return !(!t.classList || !t.classList[self.Symbol.iterator]); + } catch (t2) { + return false; + } + }())) { + (function(global2) { + global2.DOMTokenList.prototype[global2.Symbol.iterator] = function() { + return new ArrayIterator_default(this); + }; + var e = document.createElement("span"); + if (e.classList && e.classList.constructor && e.classList.constructor.prototype && !e.classList.constructor.prototype[global2.Symbol.iterator]) { + e.classList.constructor.prototype[global2.Symbol.iterator] = function() { + return new ArrayIterator_default(this); + }; + } + })(self); + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.forEach.js +var DOMTokenList_prototype_forEach_exports = {}; +var init_DOMTokenList_prototype_forEach = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.forEach.js": function() { + init_DOMTokenList(); + (function(undefined2) { + if (!("DOMTokenList" in self && "forEach" in self.DOMTokenList.prototype)) { + (function(global2) { + global2.DOMTokenList.prototype.forEach = global2.Array.prototype.forEach; + var e = document.createElement("span"); + if (e.classList && e.classList.constructor && e.classList.constructor.prototype && !e.classList.constructor.prototype.forEach) { + e.classList.constructor.prototype.forEach = global2.Array.prototype.forEach; + } + })(self); + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/helpers/_mutation.js +var init_mutation = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/helpers/_mutation.js": function() { + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/Element.prototype.remove.js +var Element_prototype_remove_exports = {}; +var init_Element_prototype_remove = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/Element.prototype.remove.js": function() { + init_mutation(); + (function(undefined2) { + if (!("Element" in self && "remove" in Element.prototype)) { + Document.prototype.remove = Element.prototype.remove = function remove() { + if (this.parentNode) { + this.parentNode.removeChild(this); + } + }; + if ("Text" in self) { + Text.prototype.remove = Element.prototype.remove; + } + (function() { + var originalRemove = HTMLSelectElement.prototype.remove; + HTMLSelectElement.prototype.remove = function remove(index) { + if (arguments.length === 0) { + return Element.prototype.remove.call(this); + } + return originalRemove.call(this, index); + }; + })(); + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/CharacterData.prototype.remove.js +var CharacterData_prototype_remove_exports = {}; +var init_CharacterData_prototype_remove = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/CharacterData.prototype.remove.js": function() { + init_mutation(); + (function(undefined2) { + if (!("remove" in CharacterData.prototype)) { + CharacterData.prototype.remove = Element.prototype.remove; + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys.js +var require_object_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys.js": function(exports2, module2) { + "use strict"; + var internalObjectKeys = require_object_keys_internal(); + var enumBugKeys = require_enum_bug_keys(); + module2.exports = Object.keys || function keys2(O) { + return internalObjectKeys(O, enumBugKeys); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-properties.js +var require_object_define_properties = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-properties.js": function(exports2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug(); + var definePropertyModule = require_object_define_property(); + var anObject = require_an_object(); + var toIndexedObject = require_to_indexed_object(); + var objectKeys = require_object_keys(); + exports2.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var props = toIndexedObject(Properties); + var keys2 = objectKeys(Properties); + var length = keys2.length; + var index = 0; + var key; + while (length > index) + definePropertyModule.f(O, key = keys2[index++], props[key]); + return O; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/html.js +var require_html = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/html.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + module2.exports = getBuiltIn("document", "documentElement"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-create.js +var require_object_create = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-create.js": function(exports2, module2) { + "use strict"; + var anObject = require_an_object(); + var definePropertiesModule = require_object_define_properties(); + var enumBugKeys = require_enum_bug_keys(); + var hiddenKeys = require_hidden_keys(); + var html = require_html(); + var documentCreateElement = require_document_create_element(); + var sharedKey = require_shared_key(); + var GT = ">"; + var LT = "<"; + var PROTOTYPE = "prototype"; + var SCRIPT = "script"; + var IE_PROTO = sharedKey("IE_PROTO"); + var EmptyConstructor = function() { + }; + var scriptTag = function(content) { + return LT + SCRIPT + GT + content + LT + "/" + SCRIPT + GT; + }; + var NullProtoObjectViaActiveX = function(activeXDocument2) { + activeXDocument2.write(scriptTag("")); + activeXDocument2.close(); + var temp = activeXDocument2.parentWindow.Object; + activeXDocument2 = null; + return temp; + }; + var NullProtoObjectViaIFrame = function() { + var iframe = documentCreateElement("iframe"); + var JS = "java" + SCRIPT + ":"; + var iframeDocument; + iframe.style.display = "none"; + html.appendChild(iframe); + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag("document.F=Object")); + iframeDocument.close(); + return iframeDocument.F; + }; + var activeXDocument; + var NullProtoObject = function() { + try { + activeXDocument = new ActiveXObject("htmlfile"); + } catch (error) { + } + NullProtoObject = typeof document != "undefined" ? document.domain && activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame() : NullProtoObjectViaActiveX(activeXDocument); + var length = enumBugKeys.length; + while (length--) + delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); + }; + hiddenKeys[IE_PROTO] = true; + module2.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + result[IE_PROTO] = O; + } else + result = NullProtoObject(); + return Properties === void 0 ? result : definePropertiesModule.f(result, Properties); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-slice.js +var require_array_slice = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-slice.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + module2.exports = uncurryThis([].slice); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names-external.js +var require_object_get_own_property_names_external = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names-external.js": function(exports2, module2) { + "use strict"; + var classof = require_classof_raw(); + var toIndexedObject = require_to_indexed_object(); + var $getOwnPropertyNames = require_object_get_own_property_names().f; + var arraySlice = require_array_slice(); + var windowNames = typeof window == "object" && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : []; + var getWindowNames = function(it) { + try { + return $getOwnPropertyNames(it); + } catch (error) { + return arraySlice(windowNames); + } + }; + module2.exports.f = function getOwnPropertyNames(it) { + return windowNames && classof(it) === "Window" ? getWindowNames(it) : $getOwnPropertyNames(toIndexedObject(it)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in-accessor.js +var require_define_built_in_accessor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in-accessor.js": function(exports2, module2) { + "use strict"; + var makeBuiltIn = require_make_built_in(); + var defineProperty = require_object_define_property(); + module2.exports = function(target, name, descriptor) { + if (descriptor.get) + makeBuiltIn(descriptor.get, name, { getter: true }); + if (descriptor.set) + makeBuiltIn(descriptor.set, name, { setter: true }); + return defineProperty.f(target, name, descriptor); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/set-to-string-tag.js +var require_set_to_string_tag = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/set-to-string-tag.js": function(exports2, module2) { + "use strict"; + var defineProperty = require_object_define_property().f; + var hasOwn = require_has_own_property(); + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + module2.exports = function(target, TAG, STATIC) { + if (target && !STATIC) + target = target.prototype; + if (target && !hasOwn(target, TO_STRING_TAG)) { + defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG }); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-constructor.js +var require_array_species_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-constructor.js": function(exports2, module2) { + "use strict"; + var isArray = require_is_array(); + var isConstructor = require_is_constructor(); + var isObject2 = require_is_object(); + var wellKnownSymbol = require_well_known_symbol(); + var SPECIES = wellKnownSymbol("species"); + var $Array = Array; + module2.exports = function(originalArray) { + var C; + if (isArray(originalArray)) { + C = originalArray.constructor; + if (isConstructor(C) && (C === $Array || isArray(C.prototype))) + C = void 0; + else if (isObject2(C)) { + C = C[SPECIES]; + if (C === null) + C = void 0; + } + } + return C === void 0 ? $Array : C; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-create.js +var require_array_species_create = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-create.js": function(exports2, module2) { + "use strict"; + var arraySpeciesConstructor = require_array_species_constructor(); + module2.exports = function(originalArray, length) { + return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-iteration.js +var require_array_iteration = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-iteration.js": function(exports2, module2) { + "use strict"; + var bind = require_function_bind_context(); + var uncurryThis = require_function_uncurry_this(); + var IndexedObject = require_indexed_object(); + var toObject = require_to_object(); + var lengthOfArrayLike = require_length_of_array_like(); + var arraySpeciesCreate = require_array_species_create(); + var push = uncurryThis([].push); + var createMethod = function(TYPE) { + var IS_MAP = TYPE === 1; + var IS_FILTER = TYPE === 2; + var IS_SOME = TYPE === 3; + var IS_EVERY = TYPE === 4; + var IS_FIND_INDEX = TYPE === 6; + var IS_FILTER_REJECT = TYPE === 7; + var NO_HOLES = TYPE === 5 || IS_FIND_INDEX; + return function($this, callbackfn, that, specificCreate) { + var O = toObject($this); + var self2 = IndexedObject(O); + var length = lengthOfArrayLike(self2); + var boundFunction = bind(callbackfn, that); + var index = 0; + var create = specificCreate || arraySpeciesCreate; + var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : void 0; + var value, result; + for (; length > index; index++) + if (NO_HOLES || index in self2) { + value = self2[index]; + result = boundFunction(value, index, O); + if (TYPE) { + if (IS_MAP) + target[index] = result; + else if (result) + switch (TYPE) { + case 3: + return true; + case 5: + return value; + case 6: + return index; + case 2: + push(target, value); + } + else + switch (TYPE) { + case 4: + return false; + case 7: + push(target, value); + } + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; + }; + module2.exports = { + // `Array.prototype.forEach` method + // https://tc39.es/ecma262/#sec-array.prototype.foreach + forEach: createMethod(0), + // `Array.prototype.map` method + // https://tc39.es/ecma262/#sec-array.prototype.map + map: createMethod(1), + // `Array.prototype.filter` method + // https://tc39.es/ecma262/#sec-array.prototype.filter + filter: createMethod(2), + // `Array.prototype.some` method + // https://tc39.es/ecma262/#sec-array.prototype.some + some: createMethod(3), + // `Array.prototype.every` method + // https://tc39.es/ecma262/#sec-array.prototype.every + every: createMethod(4), + // `Array.prototype.find` method + // https://tc39.es/ecma262/#sec-array.prototype.find + find: createMethod(5), + // `Array.prototype.findIndex` method + // https://tc39.es/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod(6), + // `Array.prototype.filterReject` method + // https://github.com/tc39/proposal-array-filtering + filterReject: createMethod(7) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.constructor.js +var require_es_symbol_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.constructor.js": function() { + "use strict"; + var $ = require_export(); + var global2 = require_global(); + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var IS_PURE = require_is_pure(); + var DESCRIPTORS = require_descriptors(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var fails = require_fails(); + var hasOwn = require_has_own_property(); + var isPrototypeOf = require_object_is_prototype_of(); + var anObject = require_an_object(); + var toIndexedObject = require_to_indexed_object(); + var toPropertyKey = require_to_property_key(); + var $toString = require_to_string(); + var createPropertyDescriptor = require_create_property_descriptor(); + var nativeObjectCreate = require_object_create(); + var objectKeys = require_object_keys(); + var getOwnPropertyNamesModule = require_object_get_own_property_names(); + var getOwnPropertyNamesExternal = require_object_get_own_property_names_external(); + var getOwnPropertySymbolsModule = require_object_get_own_property_symbols(); + var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor(); + var definePropertyModule = require_object_define_property(); + var definePropertiesModule = require_object_define_properties(); + var propertyIsEnumerableModule = require_object_property_is_enumerable(); + var defineBuiltIn = require_define_built_in(); + var defineBuiltInAccessor = require_define_built_in_accessor(); + var shared = require_shared(); + var sharedKey = require_shared_key(); + var hiddenKeys = require_hidden_keys(); + var uid = require_uid(); + var wellKnownSymbol = require_well_known_symbol(); + var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped(); + var defineWellKnownSymbol = require_well_known_symbol_define(); + var defineSymbolToPrimitive = require_symbol_define_to_primitive(); + var setToStringTag = require_set_to_string_tag(); + var InternalStateModule = require_internal_state(); + var $forEach = require_array_iteration().forEach; + var HIDDEN = sharedKey("hidden"); + var SYMBOL = "Symbol"; + var PROTOTYPE = "prototype"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(SYMBOL); + var ObjectPrototype = Object[PROTOTYPE]; + var $Symbol = global2.Symbol; + var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE]; + var RangeError = global2.RangeError; + var TypeError2 = global2.TypeError; + var QObject = global2.QObject; + var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + var nativeDefineProperty = definePropertyModule.f; + var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f; + var nativePropertyIsEnumerable = propertyIsEnumerableModule.f; + var push = uncurryThis([].push); + var AllSymbols = shared("symbols"); + var ObjectPrototypeSymbols = shared("op-symbols"); + var WellKnownSymbolsStore = shared("wks"); + var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; + var fallbackDefineProperty = function(O, P, Attributes) { + var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P); + if (ObjectPrototypeDescriptor) + delete ObjectPrototype[P]; + nativeDefineProperty(O, P, Attributes); + if (ObjectPrototypeDescriptor && O !== ObjectPrototype) { + nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor); + } + }; + var setSymbolDescriptor = DESCRIPTORS && fails(function() { + return nativeObjectCreate(nativeDefineProperty({}, "a", { + get: function() { + return nativeDefineProperty(this, "a", { value: 7 }).a; + } + })).a !== 7; + }) ? fallbackDefineProperty : nativeDefineProperty; + var wrap = function(tag, description) { + var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype); + setInternalState(symbol, { + type: SYMBOL, + tag: tag, + description: description + }); + if (!DESCRIPTORS) + symbol.description = description; + return symbol; + }; + var $defineProperty = function defineProperty(O, P, Attributes) { + if (O === ObjectPrototype) + $defineProperty(ObjectPrototypeSymbols, P, Attributes); + anObject(O); + var key = toPropertyKey(P); + anObject(Attributes); + if (hasOwn(AllSymbols, key)) { + if (!Attributes.enumerable) { + if (!hasOwn(O, HIDDEN)) + nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, nativeObjectCreate(null))); + O[HIDDEN][key] = true; + } else { + if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) + O[HIDDEN][key] = false; + Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) }); + } + return setSymbolDescriptor(O, key, Attributes); + } + return nativeDefineProperty(O, key, Attributes); + }; + var $defineProperties = function defineProperties(O, Properties) { + anObject(O); + var properties = toIndexedObject(Properties); + var keys2 = objectKeys(properties).concat($getOwnPropertySymbols(properties)); + $forEach(keys2, function(key) { + if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) + $defineProperty(O, key, properties[key]); + }); + return O; + }; + var $create = function create(O, Properties) { + return Properties === void 0 ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties); + }; + var $propertyIsEnumerable = function propertyIsEnumerable(V) { + var P = toPropertyKey(V); + var enumerable = call(nativePropertyIsEnumerable, this, P); + if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) + return false; + return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true; + }; + var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) { + var it = toIndexedObject(O); + var key = toPropertyKey(P); + if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) + return; + var descriptor = nativeGetOwnPropertyDescriptor(it, key); + if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) { + descriptor.enumerable = true; + } + return descriptor; + }; + var $getOwnPropertyNames = function getOwnPropertyNames(O) { + var names = nativeGetOwnPropertyNames(toIndexedObject(O)); + var result = []; + $forEach(names, function(key) { + if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) + push(result, key); + }); + return result; + }; + var $getOwnPropertySymbols = function(O) { + var IS_OBJECT_PROTOTYPE = O === ObjectPrototype; + var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O)); + var result = []; + $forEach(names, function(key) { + if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) { + push(result, AllSymbols[key]); + } + }); + return result; + }; + if (!NATIVE_SYMBOL) { + $Symbol = function Symbol2() { + if (isPrototypeOf(SymbolPrototype, this)) + throw new TypeError2("Symbol is not a constructor"); + var description = !arguments.length || arguments[0] === void 0 ? void 0 : $toString(arguments[0]); + var tag = uid(description); + var setter = function(value) { + var $this = this === void 0 ? global2 : this; + if ($this === ObjectPrototype) + call(setter, ObjectPrototypeSymbols, value); + if (hasOwn($this, HIDDEN) && hasOwn($this[HIDDEN], tag)) + $this[HIDDEN][tag] = false; + var descriptor = createPropertyDescriptor(1, value); + try { + setSymbolDescriptor($this, tag, descriptor); + } catch (error) { + if (!(error instanceof RangeError)) + throw error; + fallbackDefineProperty($this, tag, descriptor); + } + }; + if (DESCRIPTORS && USE_SETTER) + setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter }); + return wrap(tag, description); + }; + SymbolPrototype = $Symbol[PROTOTYPE]; + defineBuiltIn(SymbolPrototype, "toString", function toString() { + return getInternalState(this).tag; + }); + defineBuiltIn($Symbol, "withoutSetter", function(description) { + return wrap(uid(description), description); + }); + propertyIsEnumerableModule.f = $propertyIsEnumerable; + definePropertyModule.f = $defineProperty; + definePropertiesModule.f = $defineProperties; + getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor; + getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames; + getOwnPropertySymbolsModule.f = $getOwnPropertySymbols; + wrappedWellKnownSymbolModule.f = function(name) { + return wrap(wellKnownSymbol(name), name); + }; + if (DESCRIPTORS) { + defineBuiltInAccessor(SymbolPrototype, "description", { + configurable: true, + get: function description() { + return getInternalState(this).description; + } + }); + if (!IS_PURE) { + defineBuiltIn(ObjectPrototype, "propertyIsEnumerable", $propertyIsEnumerable, { unsafe: true }); + } + } + } + $({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, { + Symbol: $Symbol + }); + $forEach(objectKeys(WellKnownSymbolsStore), function(name) { + defineWellKnownSymbol(name); + }); + $({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, { + useSetter: function() { + USE_SETTER = true; + }, + useSimple: function() { + USE_SETTER = false; + } + }); + $({ target: "Object", stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, { + // `Object.create` method + // https://tc39.es/ecma262/#sec-object.create + create: $create, + // `Object.defineProperty` method + // https://tc39.es/ecma262/#sec-object.defineproperty + defineProperty: $defineProperty, + // `Object.defineProperties` method + // https://tc39.es/ecma262/#sec-object.defineproperties + defineProperties: $defineProperties, + // `Object.getOwnPropertyDescriptor` method + // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors + getOwnPropertyDescriptor: $getOwnPropertyDescriptor + }); + $({ target: "Object", stat: true, forced: !NATIVE_SYMBOL }, { + // `Object.getOwnPropertyNames` method + // https://tc39.es/ecma262/#sec-object.getownpropertynames + getOwnPropertyNames: $getOwnPropertyNames + }); + defineSymbolToPrimitive(); + setToStringTag($Symbol, SYMBOL); + hiddenKeys[HIDDEN] = true; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-registry-detection.js +var require_symbol_registry_detection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-registry-detection.js": function(exports2, module2) { + "use strict"; + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + module2.exports = NATIVE_SYMBOL && !!Symbol["for"] && !!Symbol.keyFor; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.for.js +var require_es_symbol_for = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.for.js": function() { + "use strict"; + var $ = require_export(); + var getBuiltIn = require_get_built_in(); + var hasOwn = require_has_own_property(); + var toString = require_to_string(); + var shared = require_shared(); + var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection(); + var StringToSymbolRegistry = shared("string-to-symbol-registry"); + var SymbolToStringRegistry = shared("symbol-to-string-registry"); + $({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, { + "for": function(key) { + var string = toString(key); + if (hasOwn(StringToSymbolRegistry, string)) + return StringToSymbolRegistry[string]; + var symbol = getBuiltIn("Symbol")(string); + StringToSymbolRegistry[string] = symbol; + SymbolToStringRegistry[symbol] = string; + return symbol; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.key-for.js +var require_es_symbol_key_for = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.key-for.js": function() { + "use strict"; + var $ = require_export(); + var hasOwn = require_has_own_property(); + var isSymbol = require_is_symbol(); + var tryToString = require_try_to_string(); + var shared = require_shared(); + var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection(); + var SymbolToStringRegistry = shared("symbol-to-string-registry"); + $({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, { + keyFor: function keyFor(sym) { + if (!isSymbol(sym)) + throw new TypeError(tryToString(sym) + " is not a symbol"); + if (hasOwn(SymbolToStringRegistry, sym)) + return SymbolToStringRegistry[sym]; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-apply.js +var require_function_apply = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-apply.js": function(exports2, module2) { + "use strict"; + var NATIVE_BIND = require_function_bind_native(); + var FunctionPrototype = Function.prototype; + var apply = FunctionPrototype.apply; + var call = FunctionPrototype.call; + module2.exports = typeof Reflect == "object" && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function() { + return call.apply(apply, arguments); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-json-replacer-function.js +var require_get_json_replacer_function = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-json-replacer-function.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var isArray = require_is_array(); + var isCallable = require_is_callable(); + var classof = require_classof_raw(); + var toString = require_to_string(); + var push = uncurryThis([].push); + module2.exports = function(replacer) { + if (isCallable(replacer)) + return replacer; + if (!isArray(replacer)) + return; + var rawLength = replacer.length; + var keys2 = []; + for (var i = 0; i < rawLength; i++) { + var element = replacer[i]; + if (typeof element == "string") + push(keys2, element); + else if (typeof element == "number" || classof(element) === "Number" || classof(element) === "String") + push(keys2, toString(element)); + } + var keysLength = keys2.length; + var root = true; + return function(key, value) { + if (root) { + root = false; + return value; + } + if (isArray(this)) + return value; + for (var j = 0; j < keysLength; j++) + if (keys2[j] === key) + return value; + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.json.stringify.js +var require_es_json_stringify = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.json.stringify.js": function() { + "use strict"; + var $ = require_export(); + var getBuiltIn = require_get_built_in(); + var apply = require_function_apply(); + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var isCallable = require_is_callable(); + var isSymbol = require_is_symbol(); + var arraySlice = require_array_slice(); + var getReplacerFunction = require_get_json_replacer_function(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var $String = String; + var $stringify = getBuiltIn("JSON", "stringify"); + var exec = uncurryThis(/./.exec); + var charAt = uncurryThis("".charAt); + var charCodeAt = uncurryThis("".charCodeAt); + var replace = uncurryThis("".replace); + var numberToString = uncurryThis(1 .toString); + var tester = /[\uD800-\uDFFF]/g; + var low = /^[\uD800-\uDBFF]$/; + var hi = /^[\uDC00-\uDFFF]$/; + var WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function() { + var symbol = getBuiltIn("Symbol")("stringify detection"); + return $stringify([symbol]) !== "[null]" || $stringify({ a: symbol }) !== "{}" || $stringify(Object(symbol)) !== "{}"; + }); + var ILL_FORMED_UNICODE = fails(function() { + return $stringify("\uDF06\uD834") !== '"\\udf06\\ud834"' || $stringify("\uDEAD") !== '"\\udead"'; + }); + var stringifyWithSymbolsFix = function(it, replacer) { + var args = arraySlice(arguments); + var $replacer = getReplacerFunction(replacer); + if (!isCallable($replacer) && (it === void 0 || isSymbol(it))) + return; + args[1] = function(key, value) { + if (isCallable($replacer)) + value = call($replacer, this, $String(key), value); + if (!isSymbol(value)) + return value; + }; + return apply($stringify, null, args); + }; + var fixIllFormed = function(match, offset, string) { + var prev = charAt(string, offset - 1); + var next = charAt(string, offset + 1); + if (exec(low, match) && !exec(hi, next) || exec(hi, match) && !exec(low, prev)) { + return "\\u" + numberToString(charCodeAt(match, 0), 16); + } + return match; + }; + if ($stringify) { + $({ target: "JSON", stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + stringify: function stringify(it, replacer, space) { + var args = arraySlice(arguments); + var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args); + return ILL_FORMED_UNICODE && typeof result == "string" ? replace(result, tester, fixIllFormed) : result; + } + }); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-symbols.js +var require_es_object_get_own_property_symbols = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-symbols.js": function() { + "use strict"; + var $ = require_export(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var fails = require_fails(); + var getOwnPropertySymbolsModule = require_object_get_own_property_symbols(); + var toObject = require_to_object(); + var FORCED = !NATIVE_SYMBOL || fails(function() { + getOwnPropertySymbolsModule.f(1); + }); + $({ target: "Object", stat: true, forced: FORCED }, { + getOwnPropertySymbols: function getOwnPropertySymbols(it) { + var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : []; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.js +var require_es_symbol = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.js": function() { + "use strict"; + require_es_symbol_constructor(); + require_es_symbol_for(); + require_es_symbol_key_for(); + require_es_json_stringify(); + require_es_object_get_own_property_symbols(); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.description.js +var require_es_symbol_description = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.description.js": function() { + "use strict"; + var $ = require_export(); + var DESCRIPTORS = require_descriptors(); + var global2 = require_global(); + var uncurryThis = require_function_uncurry_this(); + var hasOwn = require_has_own_property(); + var isCallable = require_is_callable(); + var isPrototypeOf = require_object_is_prototype_of(); + var toString = require_to_string(); + var defineBuiltInAccessor = require_define_built_in_accessor(); + var copyConstructorProperties = require_copy_constructor_properties(); + var NativeSymbol = global2.Symbol; + var SymbolPrototype = NativeSymbol && NativeSymbol.prototype; + if (DESCRIPTORS && isCallable(NativeSymbol) && (!("description" in SymbolPrototype) || // Safari 12 bug + NativeSymbol().description !== void 0)) { + EmptyStringDescriptionStore = {}; + SymbolWrapper = function Symbol2() { + var description = arguments.length < 1 || arguments[0] === void 0 ? void 0 : toString(arguments[0]); + var result = isPrototypeOf(SymbolPrototype, this) ? new NativeSymbol(description) : description === void 0 ? NativeSymbol() : NativeSymbol(description); + if (description === "") + EmptyStringDescriptionStore[result] = true; + return result; + }; + copyConstructorProperties(SymbolWrapper, NativeSymbol); + SymbolWrapper.prototype = SymbolPrototype; + SymbolPrototype.constructor = SymbolWrapper; + NATIVE_SYMBOL = String(NativeSymbol("description detection")) === "Symbol(description detection)"; + thisSymbolValue = uncurryThis(SymbolPrototype.valueOf); + symbolDescriptiveString = uncurryThis(SymbolPrototype.toString); + regexp = /^Symbol\((.*)\)[^)]+$/; + replace = uncurryThis("".replace); + stringSlice = uncurryThis("".slice); + defineBuiltInAccessor(SymbolPrototype, "description", { + configurable: true, + get: function description() { + var symbol = thisSymbolValue(this); + if (hasOwn(EmptyStringDescriptionStore, symbol)) + return ""; + var string = symbolDescriptiveString(symbol); + var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, "$1"); + return desc === "" ? void 0 : desc; + } + }); + $({ global: true, constructor: true, forced: true }, { + Symbol: SymbolWrapper + }); + } + var EmptyStringDescriptionStore; + var SymbolWrapper; + var NATIVE_SYMBOL; + var thisSymbolValue; + var symbolDescriptiveString; + var regexp; + var replace; + var stringSlice; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/proxy-accessor.js +var require_proxy_accessor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/proxy-accessor.js": function(exports2, module2) { + "use strict"; + var defineProperty = require_object_define_property().f; + module2.exports = function(Target, Source, key) { + key in Target || defineProperty(Target, key, { + configurable: true, + get: function() { + return Source[key]; + }, + set: function(it) { + Source[key] = it; + } + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/normalize-string-argument.js +var require_normalize_string_argument = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/normalize-string-argument.js": function(exports2, module2) { + "use strict"; + var toString = require_to_string(); + module2.exports = function(argument, $default) { + return argument === void 0 ? arguments.length < 2 ? "" : $default : toString(argument); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/install-error-cause.js +var require_install_error_cause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/install-error-cause.js": function(exports2, module2) { + "use strict"; + var isObject2 = require_is_object(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + module2.exports = function(O, options) { + if (isObject2(options) && "cause" in options) { + createNonEnumerableProperty(O, "cause", options.cause); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-clear.js +var require_error_stack_clear = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-clear.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var $Error = Error; + var replace = uncurryThis("".replace); + var TEST = function(arg) { + return String(new $Error(arg).stack); + }("zxcasd"); + var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/; + var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST); + module2.exports = function(stack, dropEntries) { + if (IS_V8_OR_CHAKRA_STACK && typeof stack == "string" && !$Error.prepareStackTrace) { + while (dropEntries--) + stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, ""); + } + return stack; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-installable.js +var require_error_stack_installable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-installable.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var createPropertyDescriptor = require_create_property_descriptor(); + module2.exports = !fails(function() { + var error = new Error("a"); + if (!("stack" in error)) + return true; + Object.defineProperty(error, "stack", createPropertyDescriptor(1, 7)); + return error.stack !== 7; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-install.js +var require_error_stack_install = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-install.js": function(exports2, module2) { + "use strict"; + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var clearErrorStack = require_error_stack_clear(); + var ERROR_STACK_INSTALLABLE = require_error_stack_installable(); + var captureStackTrace = Error.captureStackTrace; + module2.exports = function(error, C, stack, dropEntries) { + if (ERROR_STACK_INSTALLABLE) { + if (captureStackTrace) + captureStackTrace(error, C); + else + createNonEnumerableProperty(error, "stack", clearErrorStack(stack, dropEntries)); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/wrap-error-constructor-with-cause.js +var require_wrap_error_constructor_with_cause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/wrap-error-constructor-with-cause.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var hasOwn = require_has_own_property(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var isPrototypeOf = require_object_is_prototype_of(); + var setPrototypeOf = require_object_set_prototype_of(); + var copyConstructorProperties = require_copy_constructor_properties(); + var proxyAccessor = require_proxy_accessor(); + var inheritIfRequired = require_inherit_if_required(); + var normalizeStringArgument = require_normalize_string_argument(); + var installErrorCause = require_install_error_cause(); + var installErrorStack = require_error_stack_install(); + var DESCRIPTORS = require_descriptors(); + var IS_PURE = require_is_pure(); + module2.exports = function(FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) { + var STACK_TRACE_LIMIT = "stackTraceLimit"; + var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1; + var path = FULL_NAME.split("."); + var ERROR_NAME = path[path.length - 1]; + var OriginalError = getBuiltIn.apply(null, path); + if (!OriginalError) + return; + var OriginalErrorPrototype = OriginalError.prototype; + if (!IS_PURE && hasOwn(OriginalErrorPrototype, "cause")) + delete OriginalErrorPrototype.cause; + if (!FORCED) + return OriginalError; + var BaseError = getBuiltIn("Error"); + var WrappedError = wrapper(function(a, b) { + var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, void 0); + var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError(); + if (message !== void 0) + createNonEnumerableProperty(result, "message", message); + installErrorStack(result, WrappedError, result.stack, 2); + if (this && isPrototypeOf(OriginalErrorPrototype, this)) + inheritIfRequired(result, this, WrappedError); + if (arguments.length > OPTIONS_POSITION) + installErrorCause(result, arguments[OPTIONS_POSITION]); + return result; + }); + WrappedError.prototype = OriginalErrorPrototype; + if (ERROR_NAME !== "Error") { + if (setPrototypeOf) + setPrototypeOf(WrappedError, BaseError); + else + copyConstructorProperties(WrappedError, BaseError, { name: true }); + } else if (DESCRIPTORS && STACK_TRACE_LIMIT in OriginalError) { + proxyAccessor(WrappedError, OriginalError, STACK_TRACE_LIMIT); + proxyAccessor(WrappedError, OriginalError, "prepareStackTrace"); + } + copyConstructorProperties(WrappedError, OriginalError); + if (!IS_PURE) + try { + if (OriginalErrorPrototype.name !== ERROR_NAME) { + createNonEnumerableProperty(OriginalErrorPrototype, "name", ERROR_NAME); + } + OriginalErrorPrototype.constructor = WrappedError; + } catch (error) { + } + return WrappedError; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.cause.js +var require_es_error_cause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.cause.js": function() { + "use strict"; + var $ = require_export(); + var global2 = require_global(); + var apply = require_function_apply(); + var wrapErrorConstructorWithCause = require_wrap_error_constructor_with_cause(); + var WEB_ASSEMBLY = "WebAssembly"; + var WebAssembly = global2[WEB_ASSEMBLY]; + var FORCED = new Error("e", { cause: 7 }).cause !== 7; + var exportGlobalErrorCauseWrapper = function(ERROR_NAME, wrapper) { + var O = {}; + O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED); + $({ global: true, constructor: true, arity: 1, forced: FORCED }, O); + }; + var exportWebAssemblyErrorCauseWrapper = function(ERROR_NAME, wrapper) { + if (WebAssembly && WebAssembly[ERROR_NAME]) { + var O = {}; + O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + "." + ERROR_NAME, wrapper, FORCED); + $({ target: WEB_ASSEMBLY, stat: true, constructor: true, arity: 1, forced: FORCED }, O); + } + }; + exportGlobalErrorCauseWrapper("Error", function(init) { + return function Error2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("EvalError", function(init) { + return function EvalError(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("RangeError", function(init) { + return function RangeError(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("ReferenceError", function(init) { + return function ReferenceError2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("SyntaxError", function(init) { + return function SyntaxError2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("TypeError", function(init) { + return function TypeError2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("URIError", function(init) { + return function URIError(message) { + return apply(init, this, arguments); + }; + }); + exportWebAssemblyErrorCauseWrapper("CompileError", function(init) { + return function CompileError(message) { + return apply(init, this, arguments); + }; + }); + exportWebAssemblyErrorCauseWrapper("LinkError", function(init) { + return function LinkError(message) { + return apply(init, this, arguments); + }; + }); + exportWebAssemblyErrorCauseWrapper("RuntimeError", function(init) { + return function RuntimeError(message) { + return apply(init, this, arguments); + }; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-to-string.js +var require_error_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-to-string.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var fails = require_fails(); + var anObject = require_an_object(); + var normalizeStringArgument = require_normalize_string_argument(); + var nativeErrorToString = Error.prototype.toString; + var INCORRECT_TO_STRING = fails(function() { + if (DESCRIPTORS) { + var object = Object.create(Object.defineProperty({}, "name", { get: function() { + return this === object; + } })); + if (nativeErrorToString.call(object) !== "true") + return true; + } + return nativeErrorToString.call({ message: 1, name: 2 }) !== "2: 1" || nativeErrorToString.call({}) !== "Error"; + }); + module2.exports = INCORRECT_TO_STRING ? function toString() { + var O = anObject(this); + var name = normalizeStringArgument(O.name, "Error"); + var message = normalizeStringArgument(O.message); + return !name ? message : !message ? name : name + ": " + message; + } : nativeErrorToString; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.to-string.js +var require_es_error_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.to-string.js": function() { + "use strict"; + var defineBuiltIn = require_define_built_in(); + var errorToString = require_error_to_string(); + var ErrorPrototype = Error.prototype; + if (ErrorPrototype.toString !== errorToString) { + defineBuiltIn(ErrorPrototype, "toString", errorToString); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-method-has-species-support.js +var require_array_method_has_species_support = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-method-has-species-support.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var wellKnownSymbol = require_well_known_symbol(); + var V8_VERSION = require_engine_v8_version(); + var SPECIES = wellKnownSymbol("species"); + module2.exports = function(METHOD_NAME) { + return V8_VERSION >= 51 || !fails(function() { + var array = []; + var constructor = array.constructor = {}; + constructor[SPECIES] = function() { + return { foo: 1 }; + }; + return array[METHOD_NAME](Boolean).foo !== 1; + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.filter.js +var require_es_array_filter = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.filter.js": function() { + "use strict"; + var $ = require_export(); + var $filter = require_array_iteration().filter; + var arrayMethodHasSpeciesSupport = require_array_method_has_species_support(); + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("filter"); + $({ target: "Array", proto: true, forced: !HAS_SPECIES_SUPPORT }, { + filter: function filter(callbackfn) { + return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-method-is-strict.js +var require_array_method_is_strict = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-method-is-strict.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = function(METHOD_NAME, argument) { + var method = [][METHOD_NAME]; + return !!method && fails(function() { + method.call(null, argument || function() { + return 1; + }, 1); + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-for-each.js +var require_array_for_each = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-for-each.js": function(exports2, module2) { + "use strict"; + var $forEach = require_array_iteration().forEach; + var arrayMethodIsStrict = require_array_method_is_strict(); + var STRICT_METHOD = arrayMethodIsStrict("forEach"); + module2.exports = !STRICT_METHOD ? function forEach2(callbackfn) { + return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0); + } : [].forEach; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.for-each.js +var require_es_array_for_each = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.for-each.js": function() { + "use strict"; + var $ = require_export(); + var forEach2 = require_array_for_each(); + $({ target: "Array", proto: true, forced: [].forEach !== forEach2 }, { + forEach: forEach2 + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/add-to-unscopables.js +var require_add_to_unscopables = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/add-to-unscopables.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var create = require_object_create(); + var defineProperty = require_object_define_property().f; + var UNSCOPABLES = wellKnownSymbol("unscopables"); + var ArrayPrototype = Array.prototype; + if (ArrayPrototype[UNSCOPABLES] === void 0) { + defineProperty(ArrayPrototype, UNSCOPABLES, { + configurable: true, + value: create(null) + }); + } + module2.exports = function(key) { + ArrayPrototype[UNSCOPABLES][key] = true; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.includes.js +var require_es_array_includes = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.includes.js": function() { + "use strict"; + var $ = require_export(); + var $includes = require_array_includes().includes; + var fails = require_fails(); + var addToUnscopables = require_add_to_unscopables(); + var BROKEN_ON_SPARSE = fails(function() { + return !Array(1).includes(); + }); + $({ target: "Array", proto: true, forced: BROKEN_ON_SPARSE }, { + includes: function includes(el) { + return $includes(this, el, arguments.length > 1 ? arguments[1] : void 0); + } + }); + addToUnscopables("includes"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.index-of.js +var require_es_array_index_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.index-of.js": function() { + "use strict"; + var $ = require_export(); + var uncurryThis = require_function_uncurry_this_clause(); + var $indexOf = require_array_includes().indexOf; + var arrayMethodIsStrict = require_array_method_is_strict(); + var nativeIndexOf = uncurryThis([].indexOf); + var NEGATIVE_ZERO = !!nativeIndexOf && 1 / nativeIndexOf([1], 1, -0) < 0; + var FORCED = NEGATIVE_ZERO || !arrayMethodIsStrict("indexOf"); + $({ target: "Array", proto: true, forced: FORCED }, { + indexOf: function indexOf(searchElement) { + var fromIndex = arguments.length > 1 ? arguments[1] : void 0; + return NEGATIVE_ZERO ? nativeIndexOf(this, searchElement, fromIndex) || 0 : $indexOf(this, searchElement, fromIndex); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/correct-prototype-getter.js +var require_correct_prototype_getter = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/correct-prototype-getter.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = !fails(function() { + function F() { + } + F.prototype.constructor = null; + return Object.getPrototypeOf(new F()) !== F.prototype; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-prototype-of.js +var require_object_get_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-prototype-of.js": function(exports2, module2) { + "use strict"; + var hasOwn = require_has_own_property(); + var isCallable = require_is_callable(); + var toObject = require_to_object(); + var sharedKey = require_shared_key(); + var CORRECT_PROTOTYPE_GETTER = require_correct_prototype_getter(); + var IE_PROTO = sharedKey("IE_PROTO"); + var $Object = Object; + var ObjectPrototype = $Object.prototype; + module2.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function(O) { + var object = toObject(O); + if (hasOwn(object, IE_PROTO)) + return object[IE_PROTO]; + var constructor = object.constructor; + if (isCallable(constructor) && object instanceof constructor) { + return constructor.prototype; + } + return object instanceof $Object ? ObjectPrototype : null; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators-core.js +var require_iterators_core = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators-core.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var isCallable = require_is_callable(); + var isObject2 = require_is_object(); + var create = require_object_create(); + var getPrototypeOf = require_object_get_prototype_of(); + var defineBuiltIn = require_define_built_in(); + var wellKnownSymbol = require_well_known_symbol(); + var IS_PURE = require_is_pure(); + var ITERATOR = wellKnownSymbol("iterator"); + var BUGGY_SAFARI_ITERATORS = false; + var IteratorPrototype; + var PrototypeOfArrayIteratorPrototype; + var arrayIterator; + if ([].keys) { + arrayIterator = [].keys(); + if (!("next" in arrayIterator)) + BUGGY_SAFARI_ITERATORS = true; + else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) + IteratorPrototype = PrototypeOfArrayIteratorPrototype; + } + } + var NEW_ITERATOR_PROTOTYPE = !isObject2(IteratorPrototype) || fails(function() { + var test = {}; + return IteratorPrototype[ITERATOR].call(test) !== test; + }); + if (NEW_ITERATOR_PROTOTYPE) + IteratorPrototype = {}; + else if (IS_PURE) + IteratorPrototype = create(IteratorPrototype); + if (!isCallable(IteratorPrototype[ITERATOR])) { + defineBuiltIn(IteratorPrototype, ITERATOR, function() { + return this; + }); + } + module2.exports = { + IteratorPrototype: IteratorPrototype, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-create-constructor.js +var require_iterator_create_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-create-constructor.js": function(exports2, module2) { + "use strict"; + var IteratorPrototype = require_iterators_core().IteratorPrototype; + var create = require_object_create(); + var createPropertyDescriptor = require_create_property_descriptor(); + var setToStringTag = require_set_to_string_tag(); + var Iterators = require_iterators(); + var returnThis = function() { + return this; + }; + module2.exports = function(IteratorConstructor, NAME, next, ENUMERABLE_NEXT) { + var TO_STRING_TAG = NAME + " Iterator"; + IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); + Iterators[TO_STRING_TAG] = returnThis; + return IteratorConstructor; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-define.js +var require_iterator_define = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-define.js": function(exports2, module2) { + "use strict"; + var $ = require_export(); + var call = require_function_call(); + var IS_PURE = require_is_pure(); + var FunctionName = require_function_name(); + var isCallable = require_is_callable(); + var createIteratorConstructor = require_iterator_create_constructor(); + var getPrototypeOf = require_object_get_prototype_of(); + var setPrototypeOf = require_object_set_prototype_of(); + var setToStringTag = require_set_to_string_tag(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var defineBuiltIn = require_define_built_in(); + var wellKnownSymbol = require_well_known_symbol(); + var Iterators = require_iterators(); + var IteratorsCore = require_iterators_core(); + var PROPER_FUNCTION_NAME = FunctionName.PROPER; + var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE; + var IteratorPrototype = IteratorsCore.IteratorPrototype; + var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; + var ITERATOR = wellKnownSymbol("iterator"); + var KEYS = "keys"; + var VALUES = "values"; + var ENTRIES = "entries"; + var returnThis = function() { + return this; + }; + module2.exports = function(Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor(IteratorConstructor, NAME, next); + var getIterationMethod = function(KIND) { + if (KIND === DEFAULT && defaultIterator) + return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) + return IterablePrototype[KIND]; + switch (KIND) { + case KEYS: + return function keys2() { + return new IteratorConstructor(this, KIND); + }; + case VALUES: + return function values() { + return new IteratorConstructor(this, KIND); + }; + case ENTRIES: + return function entries() { + return new IteratorConstructor(this, KIND); + }; + } + return function() { + return new IteratorConstructor(this); + }; + }; + var TO_STRING_TAG = NAME + " Iterator"; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR] || IterablePrototype["@@iterator"] || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME === "Array" ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); + if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) { + defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis); + } + } + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); + if (IS_PURE) + Iterators[TO_STRING_TAG] = returnThis; + } + } + if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) { + if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) { + createNonEnumerableProperty(IterablePrototype, "name", VALUES); + } else { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { + return call(nativeIterator, this); + }; + } + } + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) + for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + defineBuiltIn(IterablePrototype, KEY, methods[KEY]); + } + } + else + $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); + } + if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { + defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT }); + } + Iterators[NAME] = defaultIterator; + return methods; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-iter-result-object.js +var require_create_iter_result_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-iter-result-object.js": function(exports2, module2) { + "use strict"; + module2.exports = function(value, done) { + return { value: value, done: done }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.iterator.js +var require_es_array_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.iterator.js": function(exports2, module2) { + "use strict"; + var toIndexedObject = require_to_indexed_object(); + var addToUnscopables = require_add_to_unscopables(); + var Iterators = require_iterators(); + var InternalStateModule = require_internal_state(); + var defineProperty = require_object_define_property().f; + var defineIterator = require_iterator_define(); + var createIterResultObject = require_create_iter_result_object(); + var IS_PURE = require_is_pure(); + var DESCRIPTORS = require_descriptors(); + var ARRAY_ITERATOR = "Array Iterator"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); + module2.exports = defineIterator(Array, "Array", function(iterated, kind) { + setInternalState(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject(iterated), + // target + index: 0, + // next index + kind: kind + // kind + }); + }, function() { + var state = getInternalState(this); + var target = state.target; + var index = state.index++; + if (!target || index >= target.length) { + state.target = void 0; + return createIterResultObject(void 0, true); + } + switch (state.kind) { + case "keys": + return createIterResultObject(index, false); + case "values": + return createIterResultObject(target[index], false); + } + return createIterResultObject([index, target[index]], false); + }, "values"); + var values = Iterators.Arguments = Iterators.Array; + addToUnscopables("keys"); + addToUnscopables("values"); + addToUnscopables("entries"); + if (!IS_PURE && DESCRIPTORS && values.name !== "values") + try { + defineProperty(values, "name", { value: "values" }); + } catch (error) { + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.join.js +var require_es_array_join = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.join.js": function() { + "use strict"; + var $ = require_export(); + var uncurryThis = require_function_uncurry_this(); + var IndexedObject = require_indexed_object(); + var toIndexedObject = require_to_indexed_object(); + var arrayMethodIsStrict = require_array_method_is_strict(); + var nativeJoin = uncurryThis([].join); + var ES3_STRINGS = IndexedObject !== Object; + var FORCED = ES3_STRINGS || !arrayMethodIsStrict("join", ","); + $({ target: "Array", proto: true, forced: FORCED }, { + join: function join(separator) { + return nativeJoin(toIndexedObject(this), separator === void 0 ? "," : separator); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.map.js +var require_es_array_map = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.map.js": function() { + "use strict"; + var $ = require_export(); + var $map = require_array_iteration().map; + var arrayMethodHasSpeciesSupport = require_array_method_has_species_support(); + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("map"); + $({ target: "Array", proto: true, forced: !HAS_SPECIES_SUPPORT }, { + map: function map(callbackfn) { + return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-reduce.js +var require_array_reduce = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-reduce.js": function(exports2, module2) { + "use strict"; + var aCallable = require_a_callable(); + var toObject = require_to_object(); + var IndexedObject = require_indexed_object(); + var lengthOfArrayLike = require_length_of_array_like(); + var $TypeError = TypeError; + var REDUCE_EMPTY = "Reduce of empty array with no initial value"; + var createMethod = function(IS_RIGHT) { + return function(that, callbackfn, argumentsLength, memo2) { + var O = toObject(that); + var self2 = IndexedObject(O); + var length = lengthOfArrayLike(O); + aCallable(callbackfn); + if (length === 0 && argumentsLength < 2) + throw new $TypeError(REDUCE_EMPTY); + var index = IS_RIGHT ? length - 1 : 0; + var i = IS_RIGHT ? -1 : 1; + if (argumentsLength < 2) + while (true) { + if (index in self2) { + memo2 = self2[index]; + index += i; + break; + } + index += i; + if (IS_RIGHT ? index < 0 : length <= index) { + throw new $TypeError(REDUCE_EMPTY); + } + } + for (; IS_RIGHT ? index >= 0 : length > index; index += i) + if (index in self2) { + memo2 = callbackfn(memo2, self2[index], index, O); + } + return memo2; + }; + }; + module2.exports = { + // `Array.prototype.reduce` method + // https://tc39.es/ecma262/#sec-array.prototype.reduce + left: createMethod(false), + // `Array.prototype.reduceRight` method + // https://tc39.es/ecma262/#sec-array.prototype.reduceright + right: createMethod(true) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-node.js +var require_engine_is_node = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-node.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var classof = require_classof_raw(); + module2.exports = classof(global2.process) === "process"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.reduce.js +var require_es_array_reduce = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.reduce.js": function() { + "use strict"; + var $ = require_export(); + var $reduce = require_array_reduce().left; + var arrayMethodIsStrict = require_array_method_is_strict(); + var CHROME_VERSION = require_engine_v8_version(); + var IS_NODE = require_engine_is_node(); + var CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83; + var FORCED = CHROME_BUG || !arrayMethodIsStrict("reduce"); + $({ target: "Array", proto: true, forced: FORCED }, { + reduce: function reduce(callbackfn) { + var length = arguments.length; + return $reduce(this, callbackfn, length, length > 1 ? arguments[1] : void 0); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.slice.js +var require_es_array_slice = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.slice.js": function() { + "use strict"; + var $ = require_export(); + var isArray = require_is_array(); + var isConstructor = require_is_constructor(); + var isObject2 = require_is_object(); + var toAbsoluteIndex = require_to_absolute_index(); + var lengthOfArrayLike = require_length_of_array_like(); + var toIndexedObject = require_to_indexed_object(); + var createProperty = require_create_property(); + var wellKnownSymbol = require_well_known_symbol(); + var arrayMethodHasSpeciesSupport = require_array_method_has_species_support(); + var nativeSlice = require_array_slice(); + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("slice"); + var SPECIES = wellKnownSymbol("species"); + var $Array = Array; + var max = Math.max; + $({ target: "Array", proto: true, forced: !HAS_SPECIES_SUPPORT }, { + slice: function slice(start, end) { + var O = toIndexedObject(this); + var length = lengthOfArrayLike(O); + var k = toAbsoluteIndex(start, length); + var fin = toAbsoluteIndex(end === void 0 ? length : end, length); + var Constructor, result, n; + if (isArray(O)) { + Constructor = O.constructor; + if (isConstructor(Constructor) && (Constructor === $Array || isArray(Constructor.prototype))) { + Constructor = void 0; + } else if (isObject2(Constructor)) { + Constructor = Constructor[SPECIES]; + if (Constructor === null) + Constructor = void 0; + } + if (Constructor === $Array || Constructor === void 0) { + return nativeSlice(O, k, fin); + } + } + result = new (Constructor === void 0 ? $Array : Constructor)(max(fin - k, 0)); + for (n = 0; k < fin; k++, n++) + if (k in O) + createProperty(result, n, O[k]); + result.length = n; + return result; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/delete-property-or-throw.js +var require_delete_property_or_throw = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/delete-property-or-throw.js": function(exports2, module2) { + "use strict"; + var tryToString = require_try_to_string(); + var $TypeError = TypeError; + module2.exports = function(O, P) { + if (!delete O[P]) + throw new $TypeError("Cannot delete property " + tryToString(P) + " of " + tryToString(O)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.unshift.js +var require_es_array_unshift = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.unshift.js": function() { + "use strict"; + var $ = require_export(); + var toObject = require_to_object(); + var lengthOfArrayLike = require_length_of_array_like(); + var setArrayLength = require_array_set_length(); + var deletePropertyOrThrow = require_delete_property_or_throw(); + var doesNotExceedSafeInteger = require_does_not_exceed_safe_integer(); + var INCORRECT_RESULT = [].unshift(0) !== 1; + var properErrorOnNonWritableLength = function() { + try { + Object.defineProperty([], "length", { writable: false }).unshift(); + } catch (error) { + return error instanceof TypeError; + } + }; + var FORCED = INCORRECT_RESULT || !properErrorOnNonWritableLength(); + $({ target: "Array", proto: true, arity: 1, forced: FORCED }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + unshift: function unshift(item) { + var O = toObject(this); + var len = lengthOfArrayLike(O); + var argCount = arguments.length; + if (argCount) { + doesNotExceedSafeInteger(len + argCount); + var k = len; + while (k--) { + var to = k + argCount; + if (k in O) + O[to] = O[k]; + else + deletePropertyOrThrow(O, to); + } + for (var j = 0; j < argCount; j++) { + O[j] = arguments[j]; + } + } + return setArrayLength(O, len + argCount); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-buffer-non-extensible.js +var require_array_buffer_non_extensible = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-buffer-non-extensible.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = fails(function() { + if (typeof ArrayBuffer == "function") { + var buffer = new ArrayBuffer(8); + if (Object.isExtensible(buffer)) + Object.defineProperty(buffer, "a", { value: 8 }); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-is-extensible.js +var require_object_is_extensible = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-is-extensible.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var isObject2 = require_is_object(); + var classof = require_classof_raw(); + var ARRAY_BUFFER_NON_EXTENSIBLE = require_array_buffer_non_extensible(); + var $isExtensible = Object.isExtensible; + var FAILS_ON_PRIMITIVES = fails(function() { + $isExtensible(1); + }); + module2.exports = FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE ? function isExtensible(it) { + if (!isObject2(it)) + return false; + if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) === "ArrayBuffer") + return false; + return $isExtensible ? $isExtensible(it) : true; + } : $isExtensible; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/freezing.js +var require_freezing = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/freezing.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = !fails(function() { + return Object.isExtensible(Object.preventExtensions({})); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/internal-metadata.js +var require_internal_metadata = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/internal-metadata.js": function(exports2, module2) { + "use strict"; + var $ = require_export(); + var uncurryThis = require_function_uncurry_this(); + var hiddenKeys = require_hidden_keys(); + var isObject2 = require_is_object(); + var hasOwn = require_has_own_property(); + var defineProperty = require_object_define_property().f; + var getOwnPropertyNamesModule = require_object_get_own_property_names(); + var getOwnPropertyNamesExternalModule = require_object_get_own_property_names_external(); + var isExtensible = require_object_is_extensible(); + var uid = require_uid(); + var FREEZING = require_freezing(); + var REQUIRED = false; + var METADATA = uid("meta"); + var id = 0; + var setMetadata = function(it) { + defineProperty(it, METADATA, { value: { + objectID: "O" + id++, + // object ID + weakData: {} + // weak collections IDs + } }); + }; + var fastKey = function(it, create) { + if (!isObject2(it)) + return typeof it == "symbol" ? it : (typeof it == "string" ? "S" : "P") + it; + if (!hasOwn(it, METADATA)) { + if (!isExtensible(it)) + return "F"; + if (!create) + return "E"; + setMetadata(it); + } + return it[METADATA].objectID; + }; + var getWeakData = function(it, create) { + if (!hasOwn(it, METADATA)) { + if (!isExtensible(it)) + return true; + if (!create) + return false; + setMetadata(it); + } + return it[METADATA].weakData; + }; + var onFreeze = function(it) { + if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) + setMetadata(it); + return it; + }; + var enable = function() { + meta.enable = function() { + }; + REQUIRED = true; + var getOwnPropertyNames = getOwnPropertyNamesModule.f; + var splice = uncurryThis([].splice); + var test = {}; + test[METADATA] = 1; + if (getOwnPropertyNames(test).length) { + getOwnPropertyNamesModule.f = function(it) { + var result = getOwnPropertyNames(it); + for (var i = 0, length = result.length; i < length; i++) { + if (result[i] === METADATA) { + splice(result, i, 1); + break; + } + } + return result; + }; + $({ target: "Object", stat: true, forced: true }, { + getOwnPropertyNames: getOwnPropertyNamesExternalModule.f + }); + } + }; + var meta = module2.exports = { + enable: enable, + fastKey: fastKey, + getWeakData: getWeakData, + onFreeze: onFreeze + }; + hiddenKeys[METADATA] = true; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterate.js +var require_iterate = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterate.js": function(exports2, module2) { + "use strict"; + var bind = require_function_bind_context(); + var call = require_function_call(); + var anObject = require_an_object(); + var tryToString = require_try_to_string(); + var isArrayIteratorMethod = require_is_array_iterator_method(); + var lengthOfArrayLike = require_length_of_array_like(); + var isPrototypeOf = require_object_is_prototype_of(); + var getIterator = require_get_iterator(); + var getIteratorMethod = require_get_iterator_method(); + var iteratorClose = require_iterator_close(); + var $TypeError = TypeError; + var Result = function(stopped, result) { + this.stopped = stopped; + this.result = result; + }; + var ResultPrototype = Result.prototype; + module2.exports = function(iterable, unboundFunction, options) { + var that = options && options.that; + var AS_ENTRIES = !!(options && options.AS_ENTRIES); + var IS_RECORD = !!(options && options.IS_RECORD); + var IS_ITERATOR = !!(options && options.IS_ITERATOR); + var INTERRUPTED = !!(options && options.INTERRUPTED); + var fn = bind(unboundFunction, that); + var iterator, iterFn, index, length, result, next, step; + var stop = function(condition) { + if (iterator) + iteratorClose(iterator, "normal", condition); + return new Result(true, condition); + }; + var callFn = function(value) { + if (AS_ENTRIES) { + anObject(value); + return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]); + } + return INTERRUPTED ? fn(value, stop) : fn(value); + }; + if (IS_RECORD) { + iterator = iterable.iterator; + } else if (IS_ITERATOR) { + iterator = iterable; + } else { + iterFn = getIteratorMethod(iterable); + if (!iterFn) + throw new $TypeError(tryToString(iterable) + " is not iterable"); + if (isArrayIteratorMethod(iterFn)) { + for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) { + result = callFn(iterable[index]); + if (result && isPrototypeOf(ResultPrototype, result)) + return result; + } + return new Result(false); + } + iterator = getIterator(iterable, iterFn); + } + next = IS_RECORD ? iterable.next : iterator.next; + while (!(step = call(next, iterator)).done) { + try { + result = callFn(step.value); + } catch (error) { + iteratorClose(iterator, "throw", error); + } + if (typeof result == "object" && result && isPrototypeOf(ResultPrototype, result)) + return result; + } + return new Result(false); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/an-instance.js +var require_an_instance = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/an-instance.js": function(exports2, module2) { + "use strict"; + var isPrototypeOf = require_object_is_prototype_of(); + var $TypeError = TypeError; + module2.exports = function(it, Prototype) { + if (isPrototypeOf(Prototype, it)) + return it; + throw new $TypeError("Incorrect invocation"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/collection.js +var require_collection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/collection.js": function(exports2, module2) { + "use strict"; + var $ = require_export(); + var global2 = require_global(); + var uncurryThis = require_function_uncurry_this(); + var isForced = require_is_forced(); + var defineBuiltIn = require_define_built_in(); + var InternalMetadataModule = require_internal_metadata(); + var iterate = require_iterate(); + var anInstance = require_an_instance(); + var isCallable = require_is_callable(); + var isNullOrUndefined = require_is_null_or_undefined(); + var isObject2 = require_is_object(); + var fails = require_fails(); + var checkCorrectnessOfIteration = require_check_correctness_of_iteration(); + var setToStringTag = require_set_to_string_tag(); + var inheritIfRequired = require_inherit_if_required(); + module2.exports = function(CONSTRUCTOR_NAME, wrapper, common) { + var IS_MAP = CONSTRUCTOR_NAME.indexOf("Map") !== -1; + var IS_WEAK = CONSTRUCTOR_NAME.indexOf("Weak") !== -1; + var ADDER = IS_MAP ? "set" : "add"; + var NativeConstructor = global2[CONSTRUCTOR_NAME]; + var NativePrototype = NativeConstructor && NativeConstructor.prototype; + var Constructor = NativeConstructor; + var exported = {}; + var fixMethod = function(KEY) { + var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]); + defineBuiltIn( + NativePrototype, + KEY, + KEY === "add" ? function add(value) { + uncurriedNativeMethod(this, value === 0 ? 0 : value); + return this; + } : KEY === "delete" ? function(key) { + return IS_WEAK && !isObject2(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key); + } : KEY === "get" ? function get2(key) { + return IS_WEAK && !isObject2(key) ? void 0 : uncurriedNativeMethod(this, key === 0 ? 0 : key); + } : KEY === "has" ? function has(key) { + return IS_WEAK && !isObject2(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key); + } : function set(key, value) { + uncurriedNativeMethod(this, key === 0 ? 0 : key, value); + return this; + } + ); + }; + var REPLACE = isForced( + CONSTRUCTOR_NAME, + !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function() { + new NativeConstructor().entries().next(); + })) + ); + if (REPLACE) { + Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER); + InternalMetadataModule.enable(); + } else if (isForced(CONSTRUCTOR_NAME, true)) { + var instance = new Constructor(); + var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) !== instance; + var THROWS_ON_PRIMITIVES = fails(function() { + instance.has(1); + }); + var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function(iterable) { + new NativeConstructor(iterable); + }); + var BUGGY_ZERO = !IS_WEAK && fails(function() { + var $instance = new NativeConstructor(); + var index = 5; + while (index--) + $instance[ADDER](index, index); + return !$instance.has(-0); + }); + if (!ACCEPT_ITERABLES) { + Constructor = wrapper(function(dummy, iterable) { + anInstance(dummy, NativePrototype); + var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor); + if (!isNullOrUndefined(iterable)) + iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP }); + return that; + }); + Constructor.prototype = NativePrototype; + NativePrototype.constructor = Constructor; + } + if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { + fixMethod("delete"); + fixMethod("has"); + IS_MAP && fixMethod("get"); + } + if (BUGGY_ZERO || HASNT_CHAINING) + fixMethod(ADDER); + if (IS_WEAK && NativePrototype.clear) + delete NativePrototype.clear; + } + exported[CONSTRUCTOR_NAME] = Constructor; + $({ global: true, constructor: true, forced: Constructor !== NativeConstructor }, exported); + setToStringTag(Constructor, CONSTRUCTOR_NAME); + if (!IS_WEAK) + common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP); + return Constructor; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-ins.js +var require_define_built_ins = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-ins.js": function(exports2, module2) { + "use strict"; + var defineBuiltIn = require_define_built_in(); + module2.exports = function(target, src, options) { + for (var key in src) + defineBuiltIn(target, key, src[key], options); + return target; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/set-species.js +var require_set_species = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/set-species.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var defineBuiltInAccessor = require_define_built_in_accessor(); + var wellKnownSymbol = require_well_known_symbol(); + var DESCRIPTORS = require_descriptors(); + var SPECIES = wellKnownSymbol("species"); + module2.exports = function(CONSTRUCTOR_NAME) { + var Constructor = getBuiltIn(CONSTRUCTOR_NAME); + if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { + defineBuiltInAccessor(Constructor, SPECIES, { + configurable: true, + get: function() { + return this; + } + }); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/collection-strong.js +var require_collection_strong = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/collection-strong.js": function(exports2, module2) { + "use strict"; + var create = require_object_create(); + var defineBuiltInAccessor = require_define_built_in_accessor(); + var defineBuiltIns = require_define_built_ins(); + var bind = require_function_bind_context(); + var anInstance = require_an_instance(); + var isNullOrUndefined = require_is_null_or_undefined(); + var iterate = require_iterate(); + var defineIterator = require_iterator_define(); + var createIterResultObject = require_create_iter_result_object(); + var setSpecies = require_set_species(); + var DESCRIPTORS = require_descriptors(); + var fastKey = require_internal_metadata().fastKey; + var InternalStateModule = require_internal_state(); + var setInternalState = InternalStateModule.set; + var internalStateGetterFor = InternalStateModule.getterFor; + module2.exports = { + getConstructor: function(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { + var Constructor = wrapper(function(that, iterable) { + anInstance(that, Prototype); + setInternalState(that, { + type: CONSTRUCTOR_NAME, + index: create(null), + first: void 0, + last: void 0, + size: 0 + }); + if (!DESCRIPTORS) + that.size = 0; + if (!isNullOrUndefined(iterable)) + iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP }); + }); + var Prototype = Constructor.prototype; + var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); + var define = function(that, key, value) { + var state = getInternalState(that); + var entry = getEntry(that, key); + var previous, index; + if (entry) { + entry.value = value; + } else { + state.last = entry = { + index: index = fastKey(key, true), + key: key, + value: value, + previous: previous = state.last, + next: void 0, + removed: false + }; + if (!state.first) + state.first = entry; + if (previous) + previous.next = entry; + if (DESCRIPTORS) + state.size++; + else + that.size++; + if (index !== "F") + state.index[index] = entry; + } + return that; + }; + var getEntry = function(that, key) { + var state = getInternalState(that); + var index = fastKey(key); + var entry; + if (index !== "F") + return state.index[index]; + for (entry = state.first; entry; entry = entry.next) { + if (entry.key === key) + return entry; + } + }; + defineBuiltIns(Prototype, { + // `{ Map, Set }.prototype.clear()` methods + // https://tc39.es/ecma262/#sec-map.prototype.clear + // https://tc39.es/ecma262/#sec-set.prototype.clear + clear: function clear() { + var that = this; + var state = getInternalState(that); + var entry = state.first; + while (entry) { + entry.removed = true; + if (entry.previous) + entry.previous = entry.previous.next = void 0; + entry = entry.next; + } + state.first = state.last = void 0; + state.index = create(null); + if (DESCRIPTORS) + state.size = 0; + else + that.size = 0; + }, + // `{ Map, Set }.prototype.delete(key)` methods + // https://tc39.es/ecma262/#sec-map.prototype.delete + // https://tc39.es/ecma262/#sec-set.prototype.delete + "delete": function(key) { + var that = this; + var state = getInternalState(that); + var entry = getEntry(that, key); + if (entry) { + var next = entry.next; + var prev = entry.previous; + delete state.index[entry.index]; + entry.removed = true; + if (prev) + prev.next = next; + if (next) + next.previous = prev; + if (state.first === entry) + state.first = next; + if (state.last === entry) + state.last = prev; + if (DESCRIPTORS) + state.size--; + else + that.size--; + } + return !!entry; + }, + // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods + // https://tc39.es/ecma262/#sec-map.prototype.foreach + // https://tc39.es/ecma262/#sec-set.prototype.foreach + forEach: function forEach2(callbackfn) { + var state = getInternalState(this); + var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : void 0); + var entry; + while (entry = entry ? entry.next : state.first) { + boundFunction(entry.value, entry.key, this); + while (entry && entry.removed) + entry = entry.previous; + } + }, + // `{ Map, Set}.prototype.has(key)` methods + // https://tc39.es/ecma262/#sec-map.prototype.has + // https://tc39.es/ecma262/#sec-set.prototype.has + has: function has(key) { + return !!getEntry(this, key); + } + }); + defineBuiltIns(Prototype, IS_MAP ? { + // `Map.prototype.get(key)` method + // https://tc39.es/ecma262/#sec-map.prototype.get + get: function get2(key) { + var entry = getEntry(this, key); + return entry && entry.value; + }, + // `Map.prototype.set(key, value)` method + // https://tc39.es/ecma262/#sec-map.prototype.set + set: function set(key, value) { + return define(this, key === 0 ? 0 : key, value); + } + } : { + // `Set.prototype.add(value)` method + // https://tc39.es/ecma262/#sec-set.prototype.add + add: function add(value) { + return define(this, value = value === 0 ? 0 : value, value); + } + }); + if (DESCRIPTORS) + defineBuiltInAccessor(Prototype, "size", { + configurable: true, + get: function() { + return getInternalState(this).size; + } + }); + return Constructor; + }, + setStrong: function(Constructor, CONSTRUCTOR_NAME, IS_MAP) { + var ITERATOR_NAME = CONSTRUCTOR_NAME + " Iterator"; + var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME); + var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME); + defineIterator(Constructor, CONSTRUCTOR_NAME, function(iterated, kind) { + setInternalState(this, { + type: ITERATOR_NAME, + target: iterated, + state: getInternalCollectionState(iterated), + kind: kind, + last: void 0 + }); + }, function() { + var state = getInternalIteratorState(this); + var kind = state.kind; + var entry = state.last; + while (entry && entry.removed) + entry = entry.previous; + if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) { + state.target = void 0; + return createIterResultObject(void 0, true); + } + if (kind === "keys") + return createIterResultObject(entry.key, false); + if (kind === "values") + return createIterResultObject(entry.value, false); + return createIterResultObject([entry.key, entry.value], false); + }, IS_MAP ? "entries" : "values", !IS_MAP, true); + setSpecies(CONSTRUCTOR_NAME); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.map.constructor.js +var require_es_map_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.map.constructor.js": function() { + "use strict"; + var collection = require_collection(); + var collectionStrong = require_collection_strong(); + collection("Map", function(init) { + return function Map2() { + return init(this, arguments.length ? arguments[0] : void 0); + }; + }, collectionStrong); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.map.js +var require_es_map = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.map.js": function() { + "use strict"; + require_es_map_constructor(); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.define-properties.js +var require_es_object_define_properties = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.define-properties.js": function() { + "use strict"; + var $ = require_export(); + var DESCRIPTORS = require_descriptors(); + var defineProperties = require_object_define_properties().f; + $({ target: "Object", stat: true, forced: Object.defineProperties !== defineProperties, sham: !DESCRIPTORS }, { + defineProperties: defineProperties + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.define-property.js +var require_es_object_define_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.define-property.js": function() { + "use strict"; + var $ = require_export(); + var DESCRIPTORS = require_descriptors(); + var defineProperty = require_object_define_property().f; + $({ target: "Object", stat: true, forced: Object.defineProperty !== defineProperty, sham: !DESCRIPTORS }, { + defineProperty: defineProperty + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-descriptor.js +var require_es_object_get_own_property_descriptor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-descriptor.js": function() { + "use strict"; + var $ = require_export(); + var fails = require_fails(); + var toIndexedObject = require_to_indexed_object(); + var nativeGetOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; + var DESCRIPTORS = require_descriptors(); + var FORCED = !DESCRIPTORS || fails(function() { + nativeGetOwnPropertyDescriptor(1); + }); + $({ target: "Object", stat: true, forced: FORCED, sham: !DESCRIPTORS }, { + getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) { + return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-descriptors.js +var require_es_object_get_own_property_descriptors = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-descriptors.js": function() { + "use strict"; + var $ = require_export(); + var DESCRIPTORS = require_descriptors(); + var ownKeys2 = require_own_keys(); + var toIndexedObject = require_to_indexed_object(); + var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor(); + var createProperty = require_create_property(); + $({ target: "Object", stat: true, sham: !DESCRIPTORS }, { + getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) { + var O = toIndexedObject(object); + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + var keys2 = ownKeys2(O); + var result = {}; + var index = 0; + var key, descriptor; + while (keys2.length > index) { + descriptor = getOwnPropertyDescriptor(O, key = keys2[index++]); + if (descriptor !== void 0) + createProperty(result, key, descriptor); + } + return result; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-names.js +var require_es_object_get_own_property_names = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-names.js": function() { + "use strict"; + var $ = require_export(); + var fails = require_fails(); + var getOwnPropertyNames = require_object_get_own_property_names_external().f; + var FAILS_ON_PRIMITIVES = fails(function() { + return !Object.getOwnPropertyNames(1); + }); + $({ target: "Object", stat: true, forced: FAILS_ON_PRIMITIVES }, { + getOwnPropertyNames: getOwnPropertyNames + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.keys.js +var require_es_object_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.keys.js": function() { + "use strict"; + var $ = require_export(); + var toObject = require_to_object(); + var nativeKeys = require_object_keys(); + var fails = require_fails(); + var FAILS_ON_PRIMITIVES = fails(function() { + nativeKeys(1); + }); + $({ target: "Object", stat: true, forced: FAILS_ON_PRIMITIVES }, { + keys: function keys2(it) { + return nativeKeys(toObject(it)); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.seal.js +var require_es_object_seal = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.seal.js": function() { + "use strict"; + var $ = require_export(); + var isObject2 = require_is_object(); + var onFreeze = require_internal_metadata().onFreeze; + var FREEZING = require_freezing(); + var fails = require_fails(); + var $seal = Object.seal; + var FAILS_ON_PRIMITIVES = fails(function() { + $seal(1); + }); + $({ target: "Object", stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, { + seal: function seal(it) { + return $seal && isObject2(it) ? $seal(onFreeze(it)) : it; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-to-string.js +var require_object_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-to-string.js": function(exports2, module2) { + "use strict"; + var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); + var classof = require_classof(); + module2.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { + return "[object " + classof(this) + "]"; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.to-string.js +var require_es_object_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.to-string.js": function() { + "use strict"; + var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); + var defineBuiltIn = require_define_built_in(); + var toString = require_object_to_string(); + if (!TO_STRING_TAG_SUPPORT) { + defineBuiltIn(Object.prototype, "toString", toString, { unsafe: true }); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-sticky-helpers.js +var require_regexp_sticky_helpers = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-sticky-helpers.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var global2 = require_global(); + var $RegExp = global2.RegExp; + var UNSUPPORTED_Y = fails(function() { + var re = $RegExp("a", "y"); + re.lastIndex = 2; + return re.exec("abcd") !== null; + }); + var MISSED_STICKY = UNSUPPORTED_Y || fails(function() { + return !$RegExp("a", "y").sticky; + }); + var BROKEN_CARET = UNSUPPORTED_Y || fails(function() { + var re = $RegExp("^r", "gy"); + re.lastIndex = 2; + return re.exec("str") !== null; + }); + module2.exports = { + BROKEN_CARET: BROKEN_CARET, + MISSED_STICKY: MISSED_STICKY, + UNSUPPORTED_Y: UNSUPPORTED_Y + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-dot-all.js +var require_regexp_unsupported_dot_all = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-dot-all.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var global2 = require_global(); + var $RegExp = global2.RegExp; + module2.exports = fails(function() { + var re = $RegExp(".", "s"); + return !(re.dotAll && re.test("\n") && re.flags === "s"); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-ncg.js +var require_regexp_unsupported_ncg = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-ncg.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var global2 = require_global(); + var $RegExp = global2.RegExp; + module2.exports = fails(function() { + var re = $RegExp("(?b)", "g"); + return re.exec("b").groups.a !== "b" || "b".replace(re, "$c") !== "bc"; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-exec.js +var require_regexp_exec = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-exec.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var toString = require_to_string(); + var regexpFlags = require_regexp_flags(); + var stickyHelpers = require_regexp_sticky_helpers(); + var shared = require_shared(); + var create = require_object_create(); + var getInternalState = require_internal_state().get; + var UNSUPPORTED_DOT_ALL = require_regexp_unsupported_dot_all(); + var UNSUPPORTED_NCG = require_regexp_unsupported_ncg(); + var nativeReplace = shared("native-string-replace", String.prototype.replace); + var nativeExec = RegExp.prototype.exec; + var patchedExec = nativeExec; + var charAt = uncurryThis("".charAt); + var indexOf = uncurryThis("".indexOf); + var replace = uncurryThis("".replace); + var stringSlice = uncurryThis("".slice); + var UPDATES_LAST_INDEX_WRONG = function() { + var re1 = /a/; + var re2 = /b*/g; + call(nativeExec, re1, "a"); + call(nativeExec, re2, "a"); + return re1.lastIndex !== 0 || re2.lastIndex !== 0; + }(); + var UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET; + var NPCG_INCLUDED = /()??/.exec("")[1] !== void 0; + var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG; + if (PATCH) { + patchedExec = function exec(string) { + var re = this; + var state = getInternalState(re); + var str = toString(string); + var raw = state.raw; + var result, reCopy, lastIndex, match, i, object, group; + if (raw) { + raw.lastIndex = re.lastIndex; + result = call(patchedExec, raw, str); + re.lastIndex = raw.lastIndex; + return result; + } + var groups = state.groups; + var sticky = UNSUPPORTED_Y && re.sticky; + var flags = call(regexpFlags, re); + var source = re.source; + var charsAdded = 0; + var strCopy = str; + if (sticky) { + flags = replace(flags, "y", ""); + if (indexOf(flags, "g") === -1) { + flags += "g"; + } + strCopy = stringSlice(str, re.lastIndex); + if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== "\n")) { + source = "(?: " + source + ")"; + strCopy = " " + strCopy; + charsAdded++; + } + reCopy = new RegExp("^(?:" + source + ")", flags); + } + if (NPCG_INCLUDED) { + reCopy = new RegExp("^" + source + "$(?!\\s)", flags); + } + if (UPDATES_LAST_INDEX_WRONG) + lastIndex = re.lastIndex; + match = call(nativeExec, sticky ? reCopy : re, strCopy); + if (sticky) { + if (match) { + match.input = stringSlice(match.input, charsAdded); + match[0] = stringSlice(match[0], charsAdded); + match.index = re.lastIndex; + re.lastIndex += match[0].length; + } else + re.lastIndex = 0; + } else if (UPDATES_LAST_INDEX_WRONG && match) { + re.lastIndex = re.global ? match.index + match[0].length : lastIndex; + } + if (NPCG_INCLUDED && match && match.length > 1) { + call(nativeReplace, match[0], reCopy, function() { + for (i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === void 0) + match[i] = void 0; + } + }); + } + if (match && groups) { + match.groups = object = create(null); + for (i = 0; i < groups.length; i++) { + group = groups[i]; + object[group[0]] = match[group[1]]; + } + } + return match; + }; + } + module2.exports = patchedExec; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.exec.js +var require_es_regexp_exec = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.exec.js": function() { + "use strict"; + var $ = require_export(); + var exec = require_regexp_exec(); + $({ target: "RegExp", proto: true, forced: /./.exec !== exec }, { + exec: exec + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.test.js +var require_es_regexp_test = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.test.js": function() { + "use strict"; + require_es_regexp_exec(); + var $ = require_export(); + var call = require_function_call(); + var isCallable = require_is_callable(); + var anObject = require_an_object(); + var toString = require_to_string(); + var DELEGATES_TO_EXEC = function() { + var execCalled = false; + var re = /[ac]/; + re.exec = function() { + execCalled = true; + return /./.exec.apply(this, arguments); + }; + return re.test("abc") === true && execCalled; + }(); + var nativeTest = /./.test; + $({ target: "RegExp", proto: true, forced: !DELEGATES_TO_EXEC }, { + test: function(S) { + var R = anObject(this); + var string = toString(S); + var exec = R.exec; + if (!isCallable(exec)) + return call(nativeTest, R, string); + var result = call(exec, R, string); + if (result === null) + return false; + anObject(result); + return true; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-regexp.js +var require_is_regexp = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-regexp.js": function(exports2, module2) { + "use strict"; + var isObject2 = require_is_object(); + var classof = require_classof_raw(); + var wellKnownSymbol = require_well_known_symbol(); + var MATCH = wellKnownSymbol("match"); + module2.exports = function(it) { + var isRegExp; + return isObject2(it) && ((isRegExp = it[MATCH]) !== void 0 ? !!isRegExp : classof(it) === "RegExp"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/not-a-regexp.js +var require_not_a_regexp = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/not-a-regexp.js": function(exports2, module2) { + "use strict"; + var isRegExp = require_is_regexp(); + var $TypeError = TypeError; + module2.exports = function(it) { + if (isRegExp(it)) { + throw new $TypeError("The method doesn't accept regular expressions"); + } + return it; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/correct-is-regexp-logic.js +var require_correct_is_regexp_logic = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/correct-is-regexp-logic.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var MATCH = wellKnownSymbol("match"); + module2.exports = function(METHOD_NAME) { + var regexp = /./; + try { + "/./"[METHOD_NAME](regexp); + } catch (error1) { + try { + regexp[MATCH] = false; + return "/./"[METHOD_NAME](regexp); + } catch (error2) { + } + } + return false; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.ends-with.js +var require_es_string_ends_with = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.ends-with.js": function() { + "use strict"; + var $ = require_export(); + var uncurryThis = require_function_uncurry_this_clause(); + var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; + var toLength = require_to_length(); + var toString = require_to_string(); + var notARegExp = require_not_a_regexp(); + var requireObjectCoercible = require_require_object_coercible(); + var correctIsRegExpLogic = require_correct_is_regexp_logic(); + var IS_PURE = require_is_pure(); + var slice = uncurryThis("".slice); + var min = Math.min; + var CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic("endsWith"); + var MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function() { + var descriptor = getOwnPropertyDescriptor(String.prototype, "endsWith"); + return descriptor && !descriptor.writable; + }(); + $({ target: "String", proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, { + endsWith: function endsWith(searchString) { + var that = toString(requireObjectCoercible(this)); + notARegExp(searchString); + var endPosition = arguments.length > 1 ? arguments[1] : void 0; + var len = that.length; + var end = endPosition === void 0 ? len : min(toLength(endPosition), len); + var search = toString(searchString); + return slice(that, end - search.length, end) === search; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.includes.js +var require_es_string_includes = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.includes.js": function() { + "use strict"; + var $ = require_export(); + var uncurryThis = require_function_uncurry_this(); + var notARegExp = require_not_a_regexp(); + var requireObjectCoercible = require_require_object_coercible(); + var toString = require_to_string(); + var correctIsRegExpLogic = require_correct_is_regexp_logic(); + var stringIndexOf = uncurryThis("".indexOf); + $({ target: "String", proto: true, forced: !correctIsRegExpLogic("includes") }, { + includes: function includes(searchString) { + return !!~stringIndexOf( + toString(requireObjectCoercible(this)), + toString(notARegExp(searchString)), + arguments.length > 1 ? arguments[1] : void 0 + ); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-multibyte.js +var require_string_multibyte = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-multibyte.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var toString = require_to_string(); + var requireObjectCoercible = require_require_object_coercible(); + var charAt = uncurryThis("".charAt); + var charCodeAt = uncurryThis("".charCodeAt); + var stringSlice = uncurryThis("".slice); + var createMethod = function(CONVERT_TO_STRING) { + return function($this, pos) { + var S = toString(requireObjectCoercible($this)); + var position = toIntegerOrInfinity(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) + return CONVERT_TO_STRING ? "" : void 0; + first = charCodeAt(S, position); + return first < 55296 || first > 56319 || position + 1 === size || (second = charCodeAt(S, position + 1)) < 56320 || second > 57343 ? CONVERT_TO_STRING ? charAt(S, position) : first : CONVERT_TO_STRING ? stringSlice(S, position, position + 2) : (first - 55296 << 10) + (second - 56320) + 65536; + }; + }; + module2.exports = { + // `String.prototype.codePointAt` method + // https://tc39.es/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod(true) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.iterator.js +var require_es_string_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.iterator.js": function() { + "use strict"; + var charAt = require_string_multibyte().charAt; + var toString = require_to_string(); + var InternalStateModule = require_internal_state(); + var defineIterator = require_iterator_define(); + var createIterResultObject = require_create_iter_result_object(); + var STRING_ITERATOR = "String Iterator"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); + defineIterator(String, "String", function(iterated) { + setInternalState(this, { + type: STRING_ITERATOR, + string: toString(iterated), + index: 0 + }); + }, function next() { + var state = getInternalState(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) + return createIterResultObject(void 0, true); + point = charAt(string, index); + state.index += point.length; + return createIterResultObject(point, false); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js +var require_fix_regexp_well_known_symbol_logic = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js": function(exports2, module2) { + "use strict"; + require_es_regexp_exec(); + var call = require_function_call(); + var defineBuiltIn = require_define_built_in(); + var regexpExec = require_regexp_exec(); + var fails = require_fails(); + var wellKnownSymbol = require_well_known_symbol(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var SPECIES = wellKnownSymbol("species"); + var RegExpPrototype = RegExp.prototype; + module2.exports = function(KEY, exec, FORCED, SHAM) { + var SYMBOL = wellKnownSymbol(KEY); + var DELEGATES_TO_SYMBOL = !fails(function() { + var O = {}; + O[SYMBOL] = function() { + return 7; + }; + return ""[KEY](O) !== 7; + }); + var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function() { + var execCalled = false; + var re = /a/; + if (KEY === "split") { + re = {}; + re.constructor = {}; + re.constructor[SPECIES] = function() { + return re; + }; + re.flags = ""; + re[SYMBOL] = /./[SYMBOL]; + } + re.exec = function() { + execCalled = true; + return null; + }; + re[SYMBOL](""); + return !execCalled; + }); + if (!DELEGATES_TO_SYMBOL || !DELEGATES_TO_EXEC || FORCED) { + var nativeRegExpMethod = /./[SYMBOL]; + var methods = exec(SYMBOL, ""[KEY], function(nativeMethod, regexp, str, arg2, forceStringMethod) { + var $exec = regexp.exec; + if ($exec === regexpExec || $exec === RegExpPrototype.exec) { + if (DELEGATES_TO_SYMBOL && !forceStringMethod) { + return { done: true, value: call(nativeRegExpMethod, regexp, str, arg2) }; + } + return { done: true, value: call(nativeMethod, str, regexp, arg2) }; + } + return { done: false }; + }); + defineBuiltIn(String.prototype, KEY, methods[0]); + defineBuiltIn(RegExpPrototype, SYMBOL, methods[1]); + } + if (SHAM) + createNonEnumerableProperty(RegExpPrototype[SYMBOL], "sham", true); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/advance-string-index.js +var require_advance_string_index = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/advance-string-index.js": function(exports2, module2) { + "use strict"; + var charAt = require_string_multibyte().charAt; + module2.exports = function(S, index, unicode) { + return index + (unicode ? charAt(S, index).length : 1); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-substitution.js +var require_get_substitution = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-substitution.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toObject = require_to_object(); + var floor = Math.floor; + var charAt = uncurryThis("".charAt); + var replace = uncurryThis("".replace); + var stringSlice = uncurryThis("".slice); + var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g; + var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g; + module2.exports = function(matched, str, position, captures, namedCaptures, replacement) { + var tailPos = position + matched.length; + var m = captures.length; + var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED; + if (namedCaptures !== void 0) { + namedCaptures = toObject(namedCaptures); + symbols = SUBSTITUTION_SYMBOLS; + } + return replace(replacement, symbols, function(match, ch) { + var capture; + switch (charAt(ch, 0)) { + case "$": + return "$"; + case "&": + return matched; + case "`": + return stringSlice(str, 0, position); + case "'": + return stringSlice(str, tailPos); + case "<": + capture = namedCaptures[stringSlice(ch, 1, -1)]; + break; + default: + var n = +ch; + if (n === 0) + return match; + if (n > m) { + var f = floor(n / 10); + if (f === 0) + return match; + if (f <= m) + return captures[f - 1] === void 0 ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1); + return match; + } + capture = captures[n - 1]; + } + return capture === void 0 ? "" : capture; + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-exec-abstract.js +var require_regexp_exec_abstract = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-exec-abstract.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var anObject = require_an_object(); + var isCallable = require_is_callable(); + var classof = require_classof_raw(); + var regexpExec = require_regexp_exec(); + var $TypeError = TypeError; + module2.exports = function(R, S) { + var exec = R.exec; + if (isCallable(exec)) { + var result = call(exec, R, S); + if (result !== null) + anObject(result); + return result; + } + if (classof(R) === "RegExp") + return call(regexpExec, R, S); + throw new $TypeError("RegExp#exec called on incompatible receiver"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.replace.js +var require_es_string_replace = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.replace.js": function() { + "use strict"; + var apply = require_function_apply(); + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var fixRegExpWellKnownSymbolLogic = require_fix_regexp_well_known_symbol_logic(); + var fails = require_fails(); + var anObject = require_an_object(); + var isCallable = require_is_callable(); + var isNullOrUndefined = require_is_null_or_undefined(); + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var toLength = require_to_length(); + var toString = require_to_string(); + var requireObjectCoercible = require_require_object_coercible(); + var advanceStringIndex = require_advance_string_index(); + var getMethod = require_get_method(); + var getSubstitution = require_get_substitution(); + var regExpExec = require_regexp_exec_abstract(); + var wellKnownSymbol = require_well_known_symbol(); + var REPLACE = wellKnownSymbol("replace"); + var max = Math.max; + var min = Math.min; + var concat = uncurryThis([].concat); + var push = uncurryThis([].push); + var stringIndexOf = uncurryThis("".indexOf); + var stringSlice = uncurryThis("".slice); + var maybeToString = function(it) { + return it === void 0 ? it : String(it); + }; + var REPLACE_KEEPS_$0 = function() { + return "a".replace(/./, "$0") === "$0"; + }(); + var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = function() { + if (/./[REPLACE]) { + return /./[REPLACE]("a", "$0") === ""; + } + return false; + }(); + var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function() { + var re = /./; + re.exec = function() { + var result = []; + result.groups = { a: "7" }; + return result; + }; + return "".replace(re, "$") !== "7"; + }); + fixRegExpWellKnownSymbolLogic("replace", function(_, nativeReplace, maybeCallNative) { + var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? "$" : "$0"; + return [ + // `String.prototype.replace` method + // https://tc39.es/ecma262/#sec-string.prototype.replace + function replace(searchValue, replaceValue) { + var O = requireObjectCoercible(this); + var replacer = isNullOrUndefined(searchValue) ? void 0 : getMethod(searchValue, REPLACE); + return replacer ? call(replacer, searchValue, O, replaceValue) : call(nativeReplace, toString(O), searchValue, replaceValue); + }, + // `RegExp.prototype[@@replace]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace + function(string, replaceValue) { + var rx = anObject(this); + var S = toString(string); + if (typeof replaceValue == "string" && stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 && stringIndexOf(replaceValue, "$<") === -1) { + var res = maybeCallNative(nativeReplace, rx, S, replaceValue); + if (res.done) + return res.value; + } + var functionalReplace = isCallable(replaceValue); + if (!functionalReplace) + replaceValue = toString(replaceValue); + var global2 = rx.global; + var fullUnicode; + if (global2) { + fullUnicode = rx.unicode; + rx.lastIndex = 0; + } + var results = []; + var result; + while (true) { + result = regExpExec(rx, S); + if (result === null) + break; + push(results, result); + if (!global2) + break; + var matchStr = toString(result[0]); + if (matchStr === "") + rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); + } + var accumulatedResult = ""; + var nextSourcePosition = 0; + for (var i = 0; i < results.length; i++) { + result = results[i]; + var matched = toString(result[0]); + var position = max(min(toIntegerOrInfinity(result.index), S.length), 0); + var captures = []; + var replacement; + for (var j = 1; j < result.length; j++) + push(captures, maybeToString(result[j])); + var namedCaptures = result.groups; + if (functionalReplace) { + var replacerArgs = concat([matched], captures, position, S); + if (namedCaptures !== void 0) + push(replacerArgs, namedCaptures); + replacement = toString(apply(replaceValue, void 0, replacerArgs)); + } else { + replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue); + } + if (position >= nextSourcePosition) { + accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement; + nextSourcePosition = position + matched.length; + } + } + return accumulatedResult + stringSlice(S, nextSourcePosition); + } + ]; + }, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE); + } +}); + +// dist/React/React.js +require_es_symbol_iterator(); +require_es_symbol_to_primitive(); +require_es_array_from(); +require_es_array_push(); +require_es_date_to_primitive(); +require_es_number_constructor(); +require_es_regexp_to_string(); +require_proxy_min(); +init_DOMTokenList2(); +init_NodeList_prototype_iterator(); +require_NodeList_prototype_forEach(); +require_Event(); +require_CustomEvent(); +require_DocumentFragment(); +require_Element_prototype_matches(); +require_HTMLTemplateElement(); +require_MutationObserver(); +require_Node_prototype_contains(); +require_shadydom(); +init_DOMTokenList_prototype_replace(); +init_DOMTokenList_prototype_iterator(); +init_DOMTokenList_prototype_forEach(); +init_Element_prototype_remove(); +init_CharacterData_prototype_remove(); +require_es_symbol(); +require_es_symbol_description(); +require_es_error_cause(); +require_es_error_to_string(); +require_es_array_filter(); +require_es_array_for_each(); +require_es_array_includes(); +require_es_array_index_of(); +require_es_array_iterator(); +require_es_array_join(); +require_es_array_map(); +require_es_array_reduce(); +require_es_array_slice(); +require_es_array_unshift(); +require_es_map(); +require_es_object_define_properties(); +require_es_object_define_property(); +require_es_object_get_own_property_descriptor(); +require_es_object_get_own_property_descriptors(); +require_es_object_get_own_property_names(); +require_es_object_keys(); +require_es_object_seal(); +require_es_object_to_string(); +require_es_regexp_exec(); +require_es_regexp_test(); +require_es_string_ends_with(); +require_es_string_includes(); +require_es_string_iterator(); +require_es_string_replace(); +var _excluded = ["children", "ref"]; +var _excluded2 = ["children"]; +var _excluded3 = ["children"]; +var _excluded4 = ["ref"]; +var _excluded5 = ["style"]; +function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); +} +function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) + return Array.from(iter); +} +function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) + return _arrayLikeToArray(arr); +} +function ownKeys(e, r) { + var t = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t.push.apply(t, o); + } + return t; +} +function _objectSpread(e) { + for (var r = 1; r < arguments.length; r++) { + var t = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys(Object(t), true).forEach(function(r2) { + _defineProperty(e, r2, t[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t, r2)); + }); + } + return e; +} +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) + descriptor.writable = true; + Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); + } +} +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) + _defineProperties(Constructor.prototype, protoProps); + if (staticProps) + _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { writable: false }); + return Constructor; +} +function _defineProperty(obj, key, value) { + key = _toPropertyKey(key); + if (key in obj) { + Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); + } else { + obj[key] = value; + } + return obj; +} +function _toPropertyKey(t) { + var i = _toPrimitive(t, "string"); + return "symbol" == _typeof(i) ? i : String(i); +} +function _toPrimitive(t, r) { + if ("object" != _typeof(t) || !t) + return t; + var e = t[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t, r || "default"); + if ("object" != _typeof(i)) + return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t); +} +function _objectWithoutProperties(source, excluded) { + if (source == null) + return {}; + var target = _objectWithoutPropertiesLoose(source, excluded); + var key, i; + if (Object.getOwnPropertySymbols) { + var sourceSymbolKeys = Object.getOwnPropertySymbols(source); + for (i = 0; i < sourceSymbolKeys.length; i++) { + key = sourceSymbolKeys[i]; + if (excluded.indexOf(key) >= 0) + continue; + if (!Object.prototype.propertyIsEnumerable.call(source, key)) + continue; + target[key] = source[key]; + } + } + return target; +} +function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) + return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) + continue; + target[key] = source[key]; + } + return target; +} +function _createForOfIteratorHelper(o, allowArrayLike) { + var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; + if (!it) { + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) + o = it; + var i = 0; + var F = function F2() { + }; + return { s: F, n: function n() { + if (i >= o.length) + return { done: true }; + return { done: false, value: o[i++] }; + }, e: function e(_e) { + throw _e; + }, f: F }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + var normalCompletion = true, didErr = false, err; + return { s: function s() { + it = it.call(o); + }, n: function n() { + var step = it.next(); + normalCompletion = step.done; + return step; + }, e: function e(_e2) { + didErr = true; + err = _e2; + }, f: function f() { + try { + if (!normalCompletion && it["return"] != null) + it["return"](); + } finally { + if (didErr) + throw err; + } + } }; +} +function _unsupportedIterableToArray(o, minLen) { + if (!o) + return; + if (typeof o === "string") + return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) + n = o.constructor.name; + if (n === "Map" || n === "Set") + return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) + return _arrayLikeToArray(o, minLen); +} +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) + len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) + arr2[i] = arr[i]; + return arr2; +} +function _typeof(o) { + "@babel/helpers - typeof"; + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof(o); +} +var __defProp2 = Object.defineProperty; +var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; +var __getOwnPropNames2 = Object.getOwnPropertyNames; +var __hasOwnProp2 = Object.prototype.hasOwnProperty; +var __export = function __export2(target, all) { + for (var name in all) + __defProp2(target, name, { + get: all[name], + enumerable: true + }); +}; +var __copyProps2 = function __copyProps3(to, from, except, desc) { + if (from && _typeof(from) === "object" || typeof from === "function") { + var _iterator = _createForOfIteratorHelper(__getOwnPropNames2(from)), _step; + try { + var _loop = function _loop2() { + var key = _step.value; + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { + get: function get2() { + return from[key]; + }, + enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable + }); + }; + for (_iterator.s(); !(_step = _iterator.n()).done; ) { + _loop(); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } + return to; +}; +var __toCommonJS2 = function __toCommonJS3(mod) { + return __copyProps2(__defProp2({}, "__esModule", { + value: true + }), mod); +}; +//! src/React/React.ts +var React_exports = {}; +__export(React_exports, { + Component: function Component() { + return _Component; + }, + Fragment: function Fragment() { + return _Fragment; + }, + PureComponent: function PureComponent() { + return _Component; + }, + SVGNamespace: function SVGNamespace() { + return _SVGNamespace; + }, + ShadowRoot: function ShadowRoot2() { + return _ShadowRoot; + }, + StrictMode: function StrictMode() { + return _Fragment; + }, + className: function className() { + return _className; + }, + createElement: function createElement() { + return _createElement; + }, + createFactory: function createFactory() { + return _createFactory; + }, + createRef: function createRef() { + return _createRef; + }, + forwardRef: function forwardRef() { + return _forwardRef; + }, + h: function h() { + return _createElement; + }, + isRef: function isRef() { + return _isRef; + }, + jsx: function jsx() { + return _jsx; + }, + jsxs: function jsxs() { + return _jsx; + }, + memo: function memo() { + return identity; + }, + preventDefault: function preventDefault() { + return _preventDefault; + }, + stopPropagation: function stopPropagation() { + return _stopPropagation; + }, + styled: function styled() { + return _styled; + }, + useCallback: function useCallback() { + return identity; + }, + useClassList: function useClassList() { + return _useClassList; + }, + useImperativeHandle: function useImperativeHandle() { + return _useImperativeHandle; + }, + useMemo: function useMemo() { + return _useMemo; + }, + useRef: function useRef() { + return _createRef; + }, + useText: function useText() { + return _useText; + } +}); +module.exports = __toCommonJS2(React_exports); +var keys = Object.keys; +function identity(value) { + return value; +} +function isBoolean(val) { + return typeof val === "boolean"; +} +function isElement(val) { + return val && typeof val.nodeType === "number"; +} +function isString(val) { + return typeof val === "string"; +} +function isNumber(val) { + return typeof val === "number"; +} +function isObject(val) { + return _typeof(val) === "object" ? val !== null : isFunction(val); +} +function isFunction(val) { + return typeof val === "function"; +} +function isComponentClass(Component2) { + var prototype = Component2.prototype; + return !!(prototype && prototype.isReactComponent); +} +function isArrayLike(obj) { + return isObject(obj) && typeof obj.length === "number" && typeof obj.nodeType !== "number"; +} +function forEach(value, fn) { + if (!value) + return; + var _iterator2 = _createForOfIteratorHelper(keys(value)), _step2; + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) { + var key = _step2.value; + fn(value[key], key); + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } +} +function _createRef() { + return Object.seal({ + current: null + }); +} +function _isRef(maybeRef) { + return isObject(maybeRef) && "current" in maybeRef; +} +var isUnitlessNumber = { + animationIterationCount: 0, + borderImageOutset: 0, + borderImageSlice: 0, + borderImageWidth: 0, + boxFlex: 0, + boxFlexGroup: 0, + boxOrdinalGroup: 0, + columnCount: 0, + columns: 0, + flex: 0, + flexGrow: 0, + flexPositive: 0, + flexShrink: 0, + flexNegative: 0, + flexOrder: 0, + gridArea: 0, + gridRow: 0, + gridRowEnd: 0, + gridRowSpan: 0, + gridRowStart: 0, + gridColumn: 0, + gridColumnEnd: 0, + gridColumnSpan: 0, + gridColumnStart: 0, + fontWeight: 0, + lineClamp: 0, + lineHeight: 0, + opacity: 0, + order: 0, + orphans: 0, + tabSize: 0, + widows: 0, + zIndex: 0, + zoom: 0, + // SVG-related properties + fillOpacity: 0, + floodOpacity: 0, + stopOpacity: 0, + strokeDasharray: 0, + strokeDashoffset: 0, + strokeMiterlimit: 0, + strokeOpacity: 0, + strokeWidth: 0 +}; +function prefixKey(prefix, key) { + return prefix + key.charAt(0).toUpperCase() + key.substring(1); +} +var prefixes = ["Webkit", "ms", "Moz", "O"]; +keys(isUnitlessNumber).forEach(function(prop) { + prefixes.forEach(function(prefix) { + isUnitlessNumber[prefixKey(prefix, prop)] = 0; + }); +}); +var jsxDomType = Symbol["for"]("jsx-dom:type"); +var JsxDomType = /* @__PURE__ */ function(JsxDomType2) { + JsxDomType2["ShadowRoot"] = "ShadowRoot"; + return JsxDomType2; +}(JsxDomType || {}); +function _ShadowRoot(_ref) { + var children = _ref.children, ref = _ref.ref, attr2 = _objectWithoutProperties(_ref, _excluded); + return _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, jsxDomType, JsxDomType.ShadowRoot), "ref", ref), "attr", attr2), "children", children); +} +function isShadowRoot(el) { + return el != null && el[jsxDomType] === JsxDomType.ShadowRoot; +} +var _SVGNamespace = "http://www.w3.org/2000/svg"; +var XLinkNamespace = "http://www.w3.org/1999/xlink"; +var XMLNamespace = "http://www.w3.org/XML/1998/namespace"; +function isVisibleChild(value) { + return !isBoolean(value) && value != null; +} +var DomTokenList = typeof DOMTokenList !== "undefined" ? DOMTokenList : function() { +}; +function _className(value) { + if (Array.isArray(value)) { + return value.map(_className).filter(Boolean).join(" "); + } else if (value instanceof DomTokenList) { + return "" + value; + } else if (isObject(value)) { + return keys(value).filter(function(k) { + return value[k]; + }).join(" "); + } else if (isVisibleChild(value)) { + return "" + value; + } else { + return ""; + } +} +var svg = { + animate: 0, + circle: 0, + clipPath: 0, + defs: 0, + desc: 0, + ellipse: 0, + feBlend: 0, + feColorMatrix: 0, + feComponentTransfer: 0, + feComposite: 0, + feConvolveMatrix: 0, + feDiffuseLighting: 0, + feDisplacementMap: 0, + feDistantLight: 0, + feFlood: 0, + feFuncA: 0, + feFuncB: 0, + feFuncG: 0, + feFuncR: 0, + feGaussianBlur: 0, + feImage: 0, + feMerge: 0, + feMergeNode: 0, + feMorphology: 0, + feOffset: 0, + fePointLight: 0, + feSpecularLighting: 0, + feSpotLight: 0, + feTile: 0, + feTurbulence: 0, + filter: 0, + foreignObject: 0, + g: 0, + image: 0, + line: 0, + linearGradient: 0, + marker: 0, + mask: 0, + metadata: 0, + path: 0, + pattern: 0, + polygon: 0, + polyline: 0, + radialGradient: 0, + rect: 0, + stop: 0, + svg: 0, + "switch": 0, + symbol: 0, + text: 0, + textPath: 0, + tspan: 0, + use: 0, + view: 0 +}; +var nonPresentationSVGAttributes = /^(a(ll|t|u)|base[FP]|c(al|lipPathU|on)|di|ed|ex|filter[RU]|g(lyphR|r)|ke|l(en|im)|ma(rker[HUW]|s)|n|pat|pr|point[^e]|re[^n]|s[puy]|st[^or]|ta|textL|vi|xC|y|z)/; +function _createFactory(tag) { + return _createElement.bind(null, tag); +} +function _Fragment(attr2) { + var fragment = document.createDocumentFragment(); + appendChild(attr2.children, fragment); + return fragment; +} +var _Component = /* @__PURE__ */ function() { + function _Component2(props) { + _classCallCheck(this, _Component2); + this.props = props; + } + _createClass(_Component2, [{ + key: "render", + value: function render() { + return null; + } + }]); + return _Component2; +}(); +/* @__PURE__ */ Object.defineProperties(_Component.prototype, { + isReactComponent: { + value: true + } +}); +function initComponentClass(Class, attr2, children) { + attr2 = _objectSpread(_objectSpread({}, attr2), {}, { + children: children + }); + var instance = new Class(attr2); + return instance.render(); +} +function _jsx(tag, _ref) { + var children = _ref.children, attr2 = _objectWithoutProperties(_ref, _excluded2); + if (!attr2.namespaceURI && svg[tag] === 0) { + attr2 = _objectSpread(_objectSpread({}, attr2), {}, { + namespaceURI: _SVGNamespace + }); + } + var node; + if (isString(tag)) { + node = attr2.namespaceURI ? document.createElementNS(attr2.namespaceURI, tag) : document.createElement(tag); + attributes(attr2, node); + appendChild(children, node); + if (node instanceof window.HTMLSelectElement && attr2.value != null) { + if (attr2.multiple === true && Array.isArray(attr2.value)) { + var values = attr2.value.map(function(value) { + return String(value); + }); + node.querySelectorAll("option").forEach(function(option) { + return option.selected = values.includes(option.value); + }); + } else { + node.value = attr2.value; + } + } + attachRef(attr2.ref, node); + } else if (isFunction(tag)) { + if (isObject(tag.defaultProps)) { + attr2 = _objectSpread(_objectSpread({}, tag.defaultProps), attr2); + } + node = isComponentClass(tag) ? initComponentClass(tag, attr2, children) : tag(_objectSpread(_objectSpread({}, attr2), {}, { + children: children + })); + } else { + throw new TypeError("Invalid JSX element type: ".concat(tag)); + } + return node; +} +function _createElement(tag, attr2) { + for (var _len = arguments.length, children = new Array(_len > 2 ? _len - 2 : 0), _key2 = 2; _key2 < _len; _key2++) { + children[_key2 - 2] = arguments[_key2]; + } + if (isString(attr2) || Array.isArray(attr2)) { + children.unshift(attr2); + attr2 = {}; + } + attr2 = attr2 || {}; + if (attr2.children != null && !children.length) { + ; + var _attr = attr2; + children = _attr.children; + attr2 = _objectWithoutProperties(_attr, _excluded3); + _attr; + } + return _jsx(tag, _objectSpread(_objectSpread({}, attr2), {}, { + children: children + }), attr2.key); +} +function attachRef(ref, node) { + if (_isRef(ref)) { + ref.current = node; + } else if (isFunction(ref)) { + ref(node); + } +} +function appendChild(child, node) { + if (isArrayLike(child)) { + appendChildren(child, node); + } else if (isString(child) || isNumber(child)) { + appendChildToNode(document.createTextNode(child), node); + } else if (child === null) { + appendChildToNode(document.createComment(""), node); + } else if (isElement(child)) { + appendChildToNode(child, node); + } else if (isShadowRoot(child)) { + var shadowRoot = node.attachShadow(child.attr); + appendChild(child.children, shadowRoot); + attachRef(child.ref, shadowRoot); + } +} +function appendChildren(children, node) { + for (var _i = 0, _arr = _toConsumableArray(children); _i < _arr.length; _i++) { + var child = _arr[_i]; + appendChild(child, node); + } + return node; +} +function appendChildToNode(child, node) { + if (node instanceof window.HTMLTemplateElement) { + node.content.appendChild(child); + } else { + node.appendChild(child); + } +} +function normalizeAttribute(s, separator) { + return s.replace(/[A-Z]/g, function(match) { + return separator + match.toLowerCase(); + }); +} +function style(node, value) { + if (value == null || value === false) + ; + else if (Array.isArray(value)) { + value.forEach(function(v) { + return style(node, v); + }); + } else if (isString(value)) { + node.setAttribute("style", value); + } else if (isObject(value)) { + forEach(value, function(val, key) { + if (key.indexOf("-") === 0) { + node.style.setProperty(key, val); + } else if (isNumber(val) && isUnitlessNumber[key] !== 0) { + node.style[key] = val + "px"; + } else { + node.style[key] = val; + } + }); + } +} +function attribute(key, value, node) { + switch (key) { + case "xlinkActuate": + case "xlinkArcrole": + case "xlinkHref": + case "xlinkRole": + case "xlinkShow": + case "xlinkTitle": + case "xlinkType": + attrNS(node, XLinkNamespace, normalizeAttribute(key, ":"), value); + return; + case "xmlnsXlink": + attr(node, normalizeAttribute(key, ":"), value); + return; + case "xmlBase": + case "xmlLang": + case "xmlSpace": + attrNS(node, XMLNamespace, normalizeAttribute(key, ":"), value); + return; + } + switch (key) { + case "htmlFor": + attr(node, "for", value); + return; + case "dataset": + forEach(value, function(dataValue, dataKey) { + if (dataValue != null) { + node.dataset[dataKey] = dataValue; + } + }); + return; + case "innerHTML": + case "innerText": + case "textContent": + if (isVisibleChild(value)) { + node[key] = value; + } + return; + case "dangerouslySetInnerHTML": + if (isObject(value)) { + node.innerHTML = value["__html"]; + } + return; + case "value": + if (value == null || node instanceof window.HTMLSelectElement) { + return; + } else if (node instanceof window.HTMLTextAreaElement) { + node.value = value; + return; + } + break; + case "spellCheck": + node.spellcheck = value; + return; + case "class": + case "className": + if (isFunction(value)) { + value(node); + } else { + attr(node, "class", _className(value)); + } + return; + case "ref": + case "namespaceURI": + return; + case "style": + style(node, value); + return; + case "on": + case "onCapture": + forEach(value, function(eventHandler, eventName2) { + node.addEventListener(eventName2, eventHandler, key === "onCapture"); + }); + return; + } + if (isFunction(value)) { + if (key[0] === "o" && key[1] === "n") { + var attribute2 = key.toLowerCase(); + var useCapture = attribute2.endsWith("capture"); + if (attribute2 === "ondoubleclick") { + attribute2 = "ondblclick"; + } else if (useCapture && attribute2 === "ondoubleclickcapture") { + attribute2 = "ondblclickcapture"; + } + if (!useCapture && node[attribute2] === null) { + node[attribute2] = value; + } else if (useCapture) { + node.addEventListener(attribute2.substring(2, attribute2.length - 7), value, true); + } else { + var eventName; + if (attribute2 in window) { + var standardEventName = attribute2.substring(2); + eventName = standardEventName; + } else { + var customEventName = attribute2[2] + key.slice(3); + eventName = customEventName; + } + node.addEventListener(eventName, value); + } + } + } else if (isObject(value)) { + node[key] = value; + } else if (value === true) { + attr(node, key, ""); + } else if (value !== false && value != null) { + if (node instanceof SVGElement && !nonPresentationSVGAttributes.test(key)) { + attr(node, normalizeAttribute(key, "-"), value); + } else { + attr(node, key, value); + } + } +} +function attr(node, key, value) { + node.setAttribute(key, value); +} +function attrNS(node, namespace, key, value) { + node.setAttributeNS(namespace, key, value); +} +function attributes(attr2, node) { + var _iterator3 = _createForOfIteratorHelper(keys(attr2)), _step3; + try { + for (_iterator3.s(); !(_step3 = _iterator3.n()).done; ) { + var key = _step3.value; + attribute(key, attr2[key], node); + } + } catch (err) { + _iterator3.e(err); + } finally { + _iterator3.f(); + } + return node; +} +function _useText(initialValue) { + var text = new Text(); + Object.defineProperty(text, "toString", { + value: function value() { + return this.textContent; + } + }); + function setText(value) { + text.textContent = value; + } + if (initialValue != null) { + setText(initialValue); + } + return [text, setText]; +} +function _useClassList(initialValue) { + var div = document.createElement("div"); + if (initialValue != null) { + div.className = _className(initialValue); + } + var list = div.classList; + function ClassList(value) { + value.setAttribute("class", list.value); + list = value.classList; + } + Object.defineProperties(ClassList, Object.getOwnPropertyDescriptors({ + get size() { + return list.length; + }, + get value() { + return list.value; + }, + add: function add() { + var _list; + (_list = list).add.apply(_list, arguments); + }, + remove: function remove() { + var _list2; + (_list2 = list).remove.apply(_list2, arguments); + }, + toggle: function toggle(token, force) { + list.toggle(token, force); + }, + contains: function contains(token) { + return list.contains(token); + } + })); + return ClassList; +} +function _useMemo(factory) { + return factory(); +} +function _forwardRef(render) { + return function(_ref) { + var ref = _ref.ref, props = _objectWithoutProperties(_ref, _excluded4); + return render(props, ref !== null && ref !== void 0 ? ref : _createRef()); + }; +} +function _useImperativeHandle(ref, init) { + attachRef(ref, init()); +} +var cache = /* @__PURE__ */ new Map(); +var createStyledComponent = function createStyledComponent2(name) { + return function(list) { + for (var _len = arguments.length, interpolations = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + interpolations[_key - 1] = arguments[_key]; + } + return function(_ref) { + var style2 = _ref.style, props = _objectWithoutProperties(_ref, _excluded5); + var lastIndex = list.length - 1; + var css = list.slice(0, lastIndex).reduce(function(p, s, i) { + return p + s + interpolations[i](props); + }, "") + list[lastIndex]; + return _createElement(name, _objectSpread({ + style: [css, style2] + }, props)); + }; + }; +}; +var baseStyled = function baseStyled2(customComponent) { + return createStyledComponent(customComponent); +}; +var _styled = /* @__PURE__ */ new Proxy(baseStyled, { + get: function get(_, name) { + return setIfAbsent(cache, name, function() { + return createStyledComponent(name); + }); + } +}); +function setIfAbsent(map, key, getValue) { + if (map.has(key)) { + return map.get(key); + } else { + var value = getValue(key); + map.set(key, value); + return value; + } +} +function _preventDefault(event) { + event.preventDefault(); + return event; +} +function _stopPropagation(event) { + event.stopPropagation(); + return event; +} })(); /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wYXRoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wudG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWF0aC10cnVuYy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vd24ta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWZvcmNlZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWZyb20uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZnJvbS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RhdGUtdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmRhdGUudG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcG9zc2libGUtcHJvdG90eXBlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90aGlzLW51bWJlci12YWx1ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3doaXRlc3BhY2VzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLXRyaW0uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWdldC1mbGFncy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAudG8tc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm94eS1wb2x5ZmlsbEAwLjMuMi9ub2RlX21vZHVsZXMvcHJveHktcG9seWZpbGwvcHJveHkubWluLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuMS9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fRE9NVG9rZW5MaXN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuMS9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9ET01Ub2tlbkxpc3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi4xL25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19JdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjEvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX0FycmF5SXRlcmF0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi4xL25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL05vZGVMaXN0LnByb3RvdHlwZS5AQGl0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuMS9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9Ob2RlTGlzdC5wcm90b3R5cGUuZm9yRWFjaC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjEvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvRXZlbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi4xL25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0N1c3RvbUV2ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuMS9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9Eb2N1bWVudEZyYWdtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuMS9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9FbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuMS9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9IVE1MVGVtcGxhdGVFbGVtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuMS9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9NdXRhdGlvbk9ic2VydmVyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuMS9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9Ob2RlLnByb3RvdHlwZS5jb250YWlucy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjEvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvfnNoYWR5ZG9tLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuMS9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9ET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlcGxhY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi4xL25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0RPTVRva2VuTGlzdC5wcm90b3R5cGUuQEBpdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjEvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5mb3JFYWNoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuMS9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fbXV0YXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi4xL25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0VsZW1lbnQucHJvdG90eXBlLnJlbW92ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjEvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUucmVtb3ZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9odG1sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNsaWNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuY29uc3RydWN0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5mb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmtleS1mb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1hcHBseS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5kZXNjcmlwdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb3h5LWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci1zdGFjay1jbGVhci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dyYXAtZXJyb3ItY29uc3RydWN0b3Itd2l0aC1jYXVzZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXRvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5lcnJvci50by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2guanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZm9yLWVhY2guanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5kZXgtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5qb2luLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXJlZHVjZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS51bnNoaWZ0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mcmVlemluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc3BlY2llcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hcC5jb25zdHJ1Y3Rvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5tYXAuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Quc2VhbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1kb3QtYWxsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLW5jZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50ZXN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcmVnZXhwLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbm90LWEtcmVnZXhwLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmVuZHMtd2l0aC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1zdWJzdGl0dXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyIsICJzcmMvUmVhY3QvUmVhY3QudHMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2pzeC1kb21AOC4xLjIvbm9kZV9tb2R1bGVzL2pzeC1kb20vaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIGNoZWNrKHR5cGVvZiB0aGlzID09ICdvYmplY3QnICYmIHRoaXMpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWwsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zNi4wJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjQgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zNi4wL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgbmF2aWdhdG9yICE9ICd1bmRlZmluZWQnICYmIFN0cmluZyhuYXZpZ2F0b3IudXNlckFnZW50KSB8fCAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWwuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuZXhwb3J0cy5mID0gd2VsbEtub3duU3ltYm9sO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsW25hbWVzcGFjZV0pIDogZ2xvYmFsW25hbWVzcGFjZV0gJiYgZ2xvYmFsW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgdmFyIFN5bWJvbCA9IHBhdGguU3ltYm9sIHx8IChwYXRoLlN5bWJvbCA9IHt9KTtcbiAgaWYgKCFoYXNPd24oU3ltYm9sLCBOQU1FKSkgZGVmaW5lUHJvcGVydHkoU3ltYm9sLCBOQU1FLCB7XG4gICAgdmFsdWU6IHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZihOQU1FKVxuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5pdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLml0ZXJhdG9yXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLkNPTkZJR1VSQUJMRTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgQ09ORklHVVJBQkxFX0xFTkdUSCA9IERFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdsZW5ndGgnLCB7IHZhbHVlOiA4IH0pLmxlbmd0aCAhPT0gODtcbn0pO1xuXG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbnZhciBtYWtlQnVpbHRJbiA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChzdHJpbmdTbGljZSgkU3RyaW5nKG5hbWUpLCAwLCA3KSA9PT0gJ1N5bWJvbCgnKSB7XG4gICAgbmFtZSA9ICdbJyArIHJlcGxhY2UoJFN0cmluZyhuYW1lKSwgL15TeW1ib2xcXCgoW14pXSopXFwpLiokLywgJyQxJykgKyAnXSc7XG4gIH1cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nZXR0ZXIpIG5hbWUgPSAnZ2V0ICcgKyBuYW1lO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNldHRlcikgbmFtZSA9ICdzZXQgJyArIG5hbWU7XG4gIGlmICghaGFzT3duKHZhbHVlLCAnbmFtZScpIHx8IChDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSAmJiB2YWx1ZS5uYW1lICE9PSBuYW1lKSkge1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICduYW1lJywgeyB2YWx1ZTogbmFtZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIGVsc2UgdmFsdWUubmFtZSA9IG5hbWU7XG4gIH1cbiAgaWYgKENPTkZJR1VSQUJMRV9MRU5HVEggJiYgb3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2FyaXR5JykgJiYgdmFsdWUubGVuZ3RoICE9PSBvcHRpb25zLmFyaXR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkodmFsdWUsICdsZW5ndGgnLCB7IHZhbHVlOiBvcHRpb25zLmFyaXR5IH0pO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdjb25zdHJ1Y3RvcicpICYmIG9wdGlvbnMuY29uc3RydWN0b3IpIHtcbiAgICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICdwcm90b3R5cGUnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAvLyBpbiBWOCB+IENocm9tZSA1MywgcHJvdG90eXBlcyBvZiBzb21lIG1ldGhvZHMsIGxpa2UgYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgLCBhcmUgbm9uLXdyaXRhYmxlXG4gICAgfSBlbHNlIGlmICh2YWx1ZS5wcm90b3R5cGUpIHZhbHVlLnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSk7XG4gIGlmICghaGFzT3duKHN0YXRlLCAnc291cmNlJykpIHtcbiAgICBzdGF0ZS5zb3VyY2UgPSBqb2luKFRFTVBMQVRFLCB0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJyA/IG5hbWUgOiAnJyk7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcblxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0ZW5kLW5hdGl2ZSAtLSByZXF1aXJlZFxuRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gbWFrZUJ1aWx0SW4oZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59LCAndG9TdHJpbmcnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICB2YXIgc2ltcGxlID0gb3B0aW9ucy5lbnVtZXJhYmxlO1xuICB2YXIgbmFtZSA9IG9wdGlvbnMubmFtZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uYW1lIDoga2V5O1xuICBpZiAoaXNDYWxsYWJsZSh2YWx1ZSkpIG1ha2VCdWlsdEluKHZhbHVlLCBuYW1lLCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMuZ2xvYmFsKSB7XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVHbG9iYWxQcm9wZXJ0eShrZXksIHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFvcHRpb25zLnVuc2FmZSkgZGVsZXRlIE9ba2V5XTtcbiAgICAgIGVsc2UgaWYgKE9ba2V5XSkgc2ltcGxlID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6ICFvcHRpb25zLm5vbkNvbmZpZ3VyYWJsZSxcbiAgICAgIHdyaXRhYmxlOiAhb3B0aW9ucy5ub25Xcml0YWJsZVxuICAgIH0pO1xuICB9IHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICB2YXIgU3ltYm9sUHJvdG90eXBlID0gU3ltYm9sICYmIFN5bWJvbC5wcm90b3R5cGU7XG4gIHZhciB2YWx1ZU9mID0gU3ltYm9sUHJvdG90eXBlICYmIFN5bWJvbFByb3RvdHlwZS52YWx1ZU9mO1xuICB2YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4gIGlmIChTeW1ib2xQcm90b3R5cGUgJiYgIVN5bWJvbFByb3RvdHlwZVtUT19QUklNSVRJVkVdKSB7XG4gICAgLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciAubGVuZ3RoXG4gICAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsIFRPX1BSSU1JVElWRSwgZnVuY3Rpb24gKGhpbnQpIHtcbiAgICAgIHJldHVybiBjYWxsKHZhbHVlT2YsIHRoaXMpO1xuICAgIH0sIHsgYXJpdHk6IDEgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZScpO1xuXG4vLyBgU3ltYm9sLnRvUHJpbWl0aXZlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9wcmltaXRpdmVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnVuYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLXRydW5jJyk7XG5cbi8vIGBUb0ludGVnZXJPckluZmluaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbnRlZ2Vyb3JpbmZpbml0eVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIG51bWJlciA9ICthcmd1bWVudDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiB0cnVuYyhudW1iZXIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChrZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIGV4Y2VwdGlvbnMpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpICYmICEoZXhjZXB0aW9ucyAmJiBoYXNPd24oZXhjZXB0aW9ucywga2V5KSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBGT1JDRUQsIHRhcmdldCwga2V5LCB0YXJnZXRQcm9wZXJ0eSwgc291cmNlUHJvcGVydHksIGRlc2NyaXB0b3I7XG4gIGlmIChHTE9CQUwpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWw7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsW1RBUkdFVF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsW1RBUkdFVF0gJiYgZ2xvYmFsW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuKSB7XG4gIC8vIE5hc2hvcm4gYnVnOlxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTI4XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMzBcbiAgaWYgKGNsYXNzb2ZSYXcoZm4pID09PSAnRnVuY3Rpb24nKSByZXR1cm4gdW5jdXJyeVRoaXMoZm4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGJpbmQgPSB1bmN1cnJ5VGhpcyh1bmN1cnJ5VGhpcy5iaW5kKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICByZXR1cm4gdGhhdCA9PT0gdW5kZWZpbmVkID8gZm4gOiBOQVRJVkVfQklORCA/IGJpbmQoZm4sIHRoYXQpIDogZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSAkT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT09ICdPYmplY3QnICYmIGlzQ2FsbGFibGUoTy5jYWxsZWUpID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgY29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBjb25zdHJ1Y3RvclJlZ0V4cCA9IC9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi87XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGNvbnN0cnVjdG9yUmVnRXhwLmV4ZWMpO1xudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSAhY29uc3RydWN0b3JSZWdFeHAudGVzdChub29wKTtcblxudmFyIGlzQ29uc3RydWN0b3JNb2Rlcm4gPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdHJ1Y3Qobm9vcCwgW10sIGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBpc0NvbnN0cnVjdG9yTGVnYWN5ID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHN3aXRjaCAoY2xhc3NvZihhcmd1bWVudCkpIHtcbiAgICBjYXNlICdBc3luY0Z1bmN0aW9uJzpcbiAgICBjYXNlICdHZW5lcmF0b3JGdW5jdGlvbic6XG4gICAgY2FzZSAnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbic6IHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIC8vIHdlIGNhbid0IGNoZWNrIC5wcm90b3R5cGUgc2luY2UgY29uc3RydWN0b3JzIHByb2R1Y2VkIGJ5IC5iaW5kIGhhdmVuJ3QgaXRcbiAgICAvLyBgRnVuY3Rpb24jdG9TdHJpbmdgIHRocm93cyBvbiBzb21lIGJ1aWx0LWl0IGZ1bmN0aW9uIGluIHNvbWUgbGVnYWN5IGVuZ2luZXNcbiAgICAvLyAoZm9yIGV4YW1wbGUsIGBET01RdWFkYCBhbmQgc2ltaWxhciBpbiBGRjQxLSlcbiAgICByZXR1cm4gSU5DT1JSRUNUX1RPX1NUUklORyB8fCAhIWV4ZWMoY29uc3RydWN0b3JSZWdFeHAsIGluc3BlY3RTb3VyY2UoYXJndW1lbnQpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuaXNDb25zdHJ1Y3RvckxlZ2FjeS5zaGFtID0gdHJ1ZTtcblxuLy8gYElzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9ICFjb25zdHJ1Y3QgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgY2FsbGVkO1xuICByZXR1cm4gaXNDb25zdHJ1Y3Rvck1vZGVybihpc0NvbnN0cnVjdG9yTW9kZXJuLmNhbGwpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oT2JqZWN0KVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKGZ1bmN0aW9uICgpIHsgY2FsbGVkID0gdHJ1ZTsgfSlcbiAgICB8fCBjYWxsZWQ7XG59KSA/IGlzQ29uc3RydWN0b3JMZWdhY3kgOiBpc0NvbnN0cnVjdG9yTW9kZXJuO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2tleV0gPSB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdCkpIHJldHVybiBnZXRNZXRob2QoaXQsIElURVJBVE9SKVxuICAgIHx8IGdldE1ldGhvZChpdCwgJ0BAaXRlcmF0b3InKVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgdXNpbmdJdGVyYXRvcikge1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGdldEl0ZXJhdG9yTWV0aG9kKGFyZ3VtZW50KSA6IHVzaW5nSXRlcmF0b3I7XG4gIGlmIChhQ2FsbGFibGUoaXRlcmF0b3JNZXRob2QpKSByZXR1cm4gYW5PYmplY3QoY2FsbChpdGVyYXRvck1ldGhvZCwgYXJndW1lbnQpKTtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICB2YXIgSVNfQ09OU1RSVUNUT1IgPSBpc0NvbnN0cnVjdG9yKHRoaXMpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcGZuID0gYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICBpZiAobWFwcGluZykgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoTyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3IsIG5leHQsIHZhbHVlO1xuICAvLyBpZiB0aGUgdGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSBvciBpdCdzIGFuIGFycmF5IHdpdGggdGhlIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2UgYSBzaW1wbGUgY2FzZVxuICBpZiAoaXRlcmF0b3JNZXRob2QgJiYgISh0aGlzID09PSAkQXJyYXkgJiYgaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkpIHtcbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKE8sIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKCkgOiBbXTtcbiAgICBmb3IgKDshKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcyhsZW5ndGgpIDogJEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIGNhbGxlZCA9IDA7XG4gIHZhciBpdGVyYXRvcldpdGhSZXR1cm4gPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogISFjYWxsZWQrKyB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIFNBRkVfQ0xPU0lORyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBpdGVyYXRvcldpdGhSZXR1cm5bSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlcnJvcikgeyByZXR1cm4gZmFsc2U7IH0gLy8gd29ya2Fyb3VuZCBvZiBvbGQgV2ViS2l0ICsgYGV2YWxgIGJ1Z1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhYmxlKTtcbn0pO1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09PSAnQXJyYXknO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIFNhZmFyaSA8IDEzIGRvZXMgbm90IHRocm93IGFuIGVycm9yIGluIHRoaXMgY2FzZVxudmFyIFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA9IERFU0NSSVBUT1JTICYmICFmdW5jdGlvbiAoKSB7XG4gIC8vIG1ha2VzIG5vIHNlbnNlIHdpdGhvdXQgcHJvcGVyIHN0cmljdCBtb2RlIHN1cHBvcnRcbiAgaWYgKHRoaXMgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkubGVuZ3RoID0gMTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPyBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIGlmIChpc0FycmF5KE8pICYmICFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgJ2xlbmd0aCcpLndyaXRhYmxlKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgnKTtcbiAgfSByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59IDogZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIElOQ09SUkVDVF9UT19MRU5HVEggPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbXS5wdXNoLmNhbGwoeyBsZW5ndGg6IDB4MTAwMDAwMDAwIH0sIDEpICE9PSA0Mjk0OTY3Mjk3O1xufSk7XG5cbi8vIFY4IDw9IDEyMSBhbmQgU2FmYXJpIDw9IDE1LjQ7IEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3Jcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyNjgxXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnB1c2goKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfVE9fTEVOR1RIIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5wdXNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnB1c2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBwdXNoOiBmdW5jdGlvbiBwdXNoKGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7XG4gICAgICBPW2xlbl0gPSBhcmd1bWVudHNbaV07XG4gICAgICBsZW4rKztcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBEYXRlLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWRhdGUucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgYW5PYmplY3QodGhpcyk7XG4gIGlmIChoaW50ID09PSAnc3RyaW5nJyB8fCBoaW50ID09PSAnZGVmYXVsdCcpIGhpbnQgPSAnc3RyaW5nJztcbiAgZWxzZSBpZiAoaGludCAhPT0gJ251bWJlcicpIHRocm93IG5ldyAkVHlwZUVycm9yKCdJbmNvcnJlY3QgaGludCcpO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZSh0aGlzLCBoaW50KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkYXRlVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGF0ZS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcbnZhciBEYXRlUHJvdG90eXBlID0gRGF0ZS5wcm90b3R5cGU7XG5cbi8vIGBEYXRlLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWRhdGUucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmlmICghaGFzT3duKERhdGVQcm90b3R5cGUsIFRPX1BSSU1JVElWRSkpIHtcbiAgZGVmaW5lQnVpbHRJbihEYXRlUHJvdG90eXBlLCBUT19QUklNSVRJVkUsIGRhdGVUb1ByaW1pdGl2ZSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCBtZXRob2QpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgcmV0dXJuIHVuY3VycnlUaGlzKGFDYWxsYWJsZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KVttZXRob2RdKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNPYmplY3QoYXJndW1lbnQpIHx8IGFyZ3VtZW50ID09PSBudWxsO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wb3NzaWJsZS1wcm90b3R5cGUnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzUG9zc2libGVQcm90b3R5cGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3Qgc2V0IFwiICsgJFN0cmluZyhhcmd1bWVudCkgKyAnIGFzIGEgcHJvdG90eXBlJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvIC0tIHNhZmUgKi9cbnZhciB1bmN1cnJ5VGhpc0FjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSB1bmN1cnJ5VGhpc0FjY2Vzc29yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nLCAnc2V0Jyk7XG4gICAgc2V0dGVyKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICBhbk9iamVjdChPKTtcbiAgICBhUG9zc2libGVQcm90b3R5cGUocHJvdG8pO1xuICAgIGlmIChDT1JSRUNUX1NFVFRFUikgc2V0dGVyKE8sIHByb3RvKTtcbiAgICBlbHNlIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgcmV0dXJuIE87XG4gIH07XG59KCkgOiB1bmRlZmluZWQpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcblxuLy8gbWFrZXMgc3ViY2xhc3Npbmcgd29yayBjb3JyZWN0IGZvciB3cmFwcGVkIGJ1aWx0LWluc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoJHRoaXMsIGR1bW15LCBXcmFwcGVyKSB7XG4gIHZhciBOZXdUYXJnZXQsIE5ld1RhcmdldFByb3RvdHlwZTtcbiAgaWYgKFxuICAgIC8vIGl0IGNhbiB3b3JrIG9ubHkgd2l0aCBuYXRpdmUgYHNldFByb3RvdHlwZU9mYFxuICAgIHNldFByb3RvdHlwZU9mICYmXG4gICAgLy8gd2UgaGF2ZW4ndCBjb21wbGV0ZWx5IGNvcnJlY3QgcHJlLUVTNiB3YXkgZm9yIGdldHRpbmcgYG5ldy50YXJnZXRgLCBzbyB1c2UgdGhpc1xuICAgIGlzQ2FsbGFibGUoTmV3VGFyZ2V0ID0gZHVtbXkuY29uc3RydWN0b3IpICYmXG4gICAgTmV3VGFyZ2V0ICE9PSBXcmFwcGVyICYmXG4gICAgaXNPYmplY3QoTmV3VGFyZ2V0UHJvdG90eXBlID0gTmV3VGFyZ2V0LnByb3RvdHlwZSkgJiZcbiAgICBOZXdUYXJnZXRQcm90b3R5cGUgIT09IFdyYXBwZXIucHJvdG90eXBlXG4gICkgc2V0UHJvdG90eXBlT2YoJHRoaXMsIE5ld1RhcmdldFByb3RvdHlwZSk7XG4gIHJldHVybiAkdGhpcztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG4vLyBgdGhpc051bWJlclZhbHVlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdGhpc251bWJlcnZhbHVlXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKDEuMC52YWx1ZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoY2xhc3NvZihhcmd1bWVudCkgPT09ICdTeW1ib2wnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZycpO1xuICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGEgc3RyaW5nIG9mIGFsbCB2YWxpZCB1bmljb2RlIHdoaXRlc3BhY2VzXG5tb2R1bGUuZXhwb3J0cyA9ICdcXHUwMDA5XFx1MDAwQVxcdTAwMEJcXHUwMDBDXFx1MDAwRFxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTIwMDBcXHUyMDAxXFx1MjAwMicgK1xuICAnXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ15bJyArIHdoaXRlc3BhY2VzICsgJ10rJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoJyhefFteJyArIHdoaXRlc3BhY2VzICsgJ10pWycgKyB3aGl0ZXNwYWNlcyArICddKyQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltLCB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1MZWZ0LCB0cmltUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIGlmIChUWVBFICYgMSkgc3RyaW5nID0gcmVwbGFjZShzdHJpbmcsIGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgcnRyaW0sICckMScpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1zdGFydFxuICBzdGFydDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1SaWdodCwgdHJpbUVuZCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltZW5kXG4gIGVuZDogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIHRoaXNOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90aGlzLW51bWJlci12YWx1ZScpO1xudmFyIHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xuXG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgTmF0aXZlTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgUHVyZU51bWJlck5hbWVzcGFjZSA9IHBhdGhbTlVNQkVSXTtcbnZhciBOdW1iZXJQcm90b3R5cGUgPSBOYXRpdmVOdW1iZXIucHJvdG90eXBlO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xuXG4vLyBgVG9OdW1lcmljYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9udW1lcmljXG52YXIgdG9OdW1lcmljID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcmltVmFsdWUgPSB0b1ByaW1pdGl2ZSh2YWx1ZSwgJ251bWJlcicpO1xuICByZXR1cm4gdHlwZW9mIHByaW1WYWx1ZSA9PSAnYmlnaW50JyA/IHByaW1WYWx1ZSA6IHRvTnVtYmVyKHByaW1WYWx1ZSk7XG59O1xuXG4vLyBgVG9OdW1iZXJgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b251bWJlclxudmFyIHRvTnVtYmVyID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBpdCA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnbnVtYmVyJyk7XG4gIHZhciBmaXJzdCwgdGhpcmQsIHJhZGl4LCBtYXhDb2RlLCBkaWdpdHMsIGxlbmd0aCwgaW5kZXgsIGNvZGU7XG4gIGlmIChpc1N5bWJvbChpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgJiYgaXQubGVuZ3RoID4gMikge1xuICAgIGl0ID0gdHJpbShpdCk7XG4gICAgZmlyc3QgPSBjaGFyQ29kZUF0KGl0LCAwKTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBjaGFyQ29kZUF0KGl0LCAyKTtcbiAgICAgIGlmICh0aGlyZCA9PT0gODggfHwgdGhpcmQgPT09IDEyMCkgcmV0dXJuIE5hTjsgLy8gTnVtYmVyKCcrMHgxJykgc2hvdWxkIGJlIE5hTiwgb2xkIFY4IGZpeFxuICAgIH0gZWxzZSBpZiAoZmlyc3QgPT09IDQ4KSB7XG4gICAgICBzd2l0Y2ggKGNoYXJDb2RlQXQoaXQsIDEpKSB7XG4gICAgICAgIC8vIGZhc3QgZXF1YWwgb2YgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNjY6XG4gICAgICAgIGNhc2UgOTg6XG4gICAgICAgICAgcmFkaXggPSAyO1xuICAgICAgICAgIG1heENvZGUgPSA0OTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgLy8gZmFzdCBlcXVhbCBvZiAvXjBvWzAtN10rJC9pXG4gICAgICAgIGNhc2UgNzk6XG4gICAgICAgIGNhc2UgMTExOlxuICAgICAgICAgIHJhZGl4ID0gODtcbiAgICAgICAgICBtYXhDb2RlID0gNTU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuICtpdDtcbiAgICAgIH1cbiAgICAgIGRpZ2l0cyA9IHN0cmluZ1NsaWNlKGl0LCAyKTtcbiAgICAgIGxlbmd0aCA9IGRpZ2l0cy5sZW5ndGg7XG4gICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29kZSA9IGNoYXJDb2RlQXQoZGlnaXRzLCBpbmRleCk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG52YXIgRk9SQ0VEID0gaXNGb3JjZWQoTlVNQkVSLCAhTmF0aXZlTnVtYmVyKCcgMG8xJykgfHwgIU5hdGl2ZU51bWJlcignMGIxJykgfHwgTmF0aXZlTnVtYmVyKCcrMHgxJykpO1xuXG52YXIgY2FsbGVkV2l0aE5ldyA9IGZ1bmN0aW9uIChkdW1teSkge1xuICAvLyBpbmNsdWRlcyBjaGVjayBvbiAxLi5jb25zdHJ1Y3Rvcihmb28pIGNhc2VcbiAgcmV0dXJuIGlzUHJvdG90eXBlT2YoTnVtYmVyUHJvdG90eXBlLCBkdW1teSkgJiYgZmFpbHMoZnVuY3Rpb24gKCkgeyB0aGlzTnVtYmVyVmFsdWUoZHVtbXkpOyB9KTtcbn07XG5cbi8vIGBOdW1iZXJgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW51bWJlci1jb25zdHJ1Y3RvclxudmFyIE51bWJlcldyYXBwZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgdmFyIG4gPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiBOYXRpdmVOdW1iZXIodG9OdW1lcmljKHZhbHVlKSk7XG4gIHJldHVybiBjYWxsZWRXaXRoTmV3KHRoaXMpID8gaW5oZXJpdElmUmVxdWlyZWQoT2JqZWN0KG4pLCB0aGlzLCBOdW1iZXJXcmFwcGVyKSA6IG47XG59O1xuXG5OdW1iZXJXcmFwcGVyLnByb3RvdHlwZSA9IE51bWJlclByb3RvdHlwZTtcbmlmIChGT1JDRUQgJiYgIUlTX1BVUkUpIE51bWJlclByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE51bWJlcldyYXBwZXI7XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIE51bWJlcjogTnVtYmVyV3JhcHBlclxufSk7XG5cbi8vIFVzZSBgaW50ZXJuYWwvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzYCBoZWxwZXIgaW4gYGNvcmUtanNANGBcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG4gIGZvciAodmFyIGtleXMgPSBERVNDUklQVE9SUyA/IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlKSA6IChcbiAgICAvLyBFUzM6XG4gICAgJ01BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLCcgK1xuICAgIC8vIEVTMjAxNSAoaW4gY2FzZSwgaWYgbW9kdWxlcyB3aXRoIEVTMjAxNSBOdW1iZXIgc3RhdGljcyByZXF1aXJlZCBiZWZvcmUpOlxuICAgICdFUFNJTE9OLE1BWF9TQUZFX0lOVEVHRVIsTUlOX1NBRkVfSU5URUdFUixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixwYXJzZUZsb2F0LHBhcnNlSW50LCcgK1xuICAgIC8vIEVTTmV4dFxuICAgICdmcm9tU3RyaW5nLHJhbmdlJ1xuICApLnNwbGl0KCcsJyksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajsgaisrKSB7XG4gICAgaWYgKGhhc093bihzb3VyY2UsIGtleSA9IGtleXNbal0pICYmICFoYXNPd24odGFyZ2V0LCBrZXkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuXG5pZiAoSVNfUFVSRSAmJiBQdXJlTnVtYmVyTmFtZXNwYWNlKSBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHBhdGhbTlVNQkVSXSwgUHVyZU51bWJlck5hbWVzcGFjZSk7XG5pZiAoRk9SQ0VEIHx8IElTX1BVUkUpIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMocGF0aFtOVU1CRVJdLCBOYXRpdmVOdW1iZXIpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NgIGdldHRlciBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLnByb3RvdHlwZS5mbGFnc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuaGFzSW5kaWNlcykgcmVzdWx0ICs9ICdkJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LmRvdEFsbCkgcmVzdWx0ICs9ICdzJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQudW5pY29kZVNldHMpIHJlc3VsdCArPSAndic7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgcmVnRXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzJyk7XG5cbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSKSB7XG4gIHZhciBmbGFncyA9IFIuZmxhZ3M7XG4gIHJldHVybiBmbGFncyA9PT0gdW5kZWZpbmVkICYmICEoJ2ZsYWdzJyBpbiBSZWdFeHBQcm90b3R5cGUpICYmICFoYXNPd24oUiwgJ2ZsYWdzJykgJiYgaXNQcm90b3R5cGVPZihSZWdFeHBQcm90b3R5cGUsIFIpXG4gICAgPyBjYWxsKHJlZ0V4cEZsYWdzLCBSKSA6IGZsYWdzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLlBST1BFUjtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldFJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MnKTtcblxudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcbnZhciBuYXRpdmVUb1N0cmluZyA9IFJlZ0V4cFByb3RvdHlwZVtUT19TVFJJTkddO1xuXG52YXIgTk9UX0dFTkVSSUMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVUb1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT09ICcvYS9iJzsgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxudmFyIElOQ09SUkVDVF9OQU1FID0gUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgbmF0aXZlVG9TdHJpbmcubmFtZSAhPT0gVE9fU1RSSU5HO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbmlmIChOT1RfR0VORVJJQyB8fCBJTkNPUlJFQ1RfTkFNRSkge1xuICBkZWZpbmVCdWlsdEluKFJlZ0V4cFByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwYXR0ZXJuID0gJHRvU3RyaW5nKFIuc291cmNlKTtcbiAgICB2YXIgZmxhZ3MgPSAkdG9TdHJpbmcoZ2V0UmVnRXhwRmxhZ3MoUikpO1xuICAgIHJldHVybiAnLycgKyBwYXR0ZXJuICsgJy8nICsgZmxhZ3M7XG4gIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwgIihmdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXtmdW5jdGlvbiB2KCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gbChhKXtyZXR1cm4gYT9cIm9iamVjdFwiPT09dHlwZW9mIGF8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhOiExfWZ1bmN0aW9uIHAoYSl7aWYobnVsbCE9PWEmJiFsKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgcHJvdG90eXBlIG1heSBvbmx5IGJlIGFuIE9iamVjdCBvciBudWxsOiBcIithKTt9dmFyIHE9bnVsbCxlPU9iamVjdCx3PSEhZS5jcmVhdGV8fCEoe19fcHJvdG9fXzpudWxsfWluc3RhbmNlb2YgZSksQT1lLmNyZWF0ZXx8KHc/ZnVuY3Rpb24oYSl7cChhKTtyZXR1cm57X19wcm90b19fOmF9fTpmdW5jdGlvbihhKXtmdW5jdGlvbiBjKCl7fXAoYSk7aWYobnVsbD09PWEpdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiTmF0aXZlIE9iamVjdC5jcmVhdGUgaXMgcmVxdWlyZWQgdG8gY3JlYXRlIG9iamVjdHMgd2l0aCBudWxsIHByb3RvdHlwZVwiKTtjLnByb3RvdHlwZT1hO3JldHVybiBuZXcgY30pLFxuQj1lLmdldFByb3RvdHlwZU9mfHwoW10uX19wcm90b19fPT09QXJyYXkucHJvdG90eXBlP2Z1bmN0aW9uKGEpe2E9YS5fX3Byb3RvX187cmV0dXJuIGwoYSk/YTpudWxsfTp2KTt2YXIgbT1mdW5jdGlvbihhLGMpe2Z1bmN0aW9uIGsoKXt9aWYodm9pZCAwPT09KHRoaXMmJnRoaXMgaW5zdGFuY2VvZiBtP3RoaXMuY29uc3RydWN0b3I6dm9pZCAwKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ29uc3RydWN0b3IgUHJveHkgcmVxdWlyZXMgJ25ldydcIik7aWYoIWwoYSl8fCFsKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY3JlYXRlIHByb3h5IHdpdGggYSBub24tb2JqZWN0IGFzIHRhcmdldCBvciBoYW5kbGVyXCIpO3E9ZnVuY3Rpb24oKXthPW51bGw7az1mdW5jdGlvbihiKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHBlcmZvcm0gJ1wiK2IrXCInIG9uIGEgcHJveHkgdGhhdCBoYXMgYmVlbiByZXZva2VkXCIpO319O3NldFRpbWVvdXQoZnVuY3Rpb24oKXtxPW51bGx9LDApO3ZhciBnPVxuYztjPXtnZXQ6bnVsbCxzZXQ6bnVsbCxhcHBseTpudWxsLGNvbnN0cnVjdDpudWxsfTtmb3IodmFyIGggaW4gZyl7aWYoIShoIGluIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm94eSBwb2x5ZmlsbCBkb2VzIG5vdCBzdXBwb3J0IHRyYXAgJ1wiK2grXCInXCIpO2NbaF09Z1toXX1cImZ1bmN0aW9uXCI9PT10eXBlb2YgZyYmKGMuYXBwbHk9Zy5hcHBseS5iaW5kKGcpKTtnPUIoYSk7dmFyIHI9ITEsdD0hMTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYSl7dmFyIGY9ZnVuY3Rpb24oKXt2YXIgYj10aGlzJiZ0aGlzLmNvbnN0cnVjdG9yPT09ZixkPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7ayhiP1wiY29uc3RydWN0XCI6XCJhcHBseVwiKTtyZXR1cm4gYiYmYy5jb25zdHJ1Y3Q/Yy5jb25zdHJ1Y3QuY2FsbCh0aGlzLGEsZCk6IWImJmMuYXBwbHk/Yy5hcHBseShhLHRoaXMsZCk6Yj8oZC51bnNoaWZ0KGEpLG5ldyAoYS5iaW5kLmFwcGx5KGEsZCkpKTphLmFwcGx5KHRoaXMsXG5kKX07cj0hMH1lbHNlIGEgaW5zdGFuY2VvZiBBcnJheT8oZj1bXSx0PSEwKTpmPXd8fG51bGwhPT1nP0EoZyk6e307dmFyIHg9Yy5nZXQ/ZnVuY3Rpb24oYil7ayhcImdldFwiKTtyZXR1cm4gYy5nZXQodGhpcyxiLGYpfTpmdW5jdGlvbihiKXtrKFwiZ2V0XCIpO3JldHVybiB0aGlzW2JdfSxDPWMuc2V0P2Z1bmN0aW9uKGIsZCl7ayhcInNldFwiKTtjLnNldCh0aGlzLGIsZCxmKX06ZnVuY3Rpb24oYixkKXtrKFwic2V0XCIpO3RoaXNbYl09ZH0seT17fTtlLmdldE93blByb3BlcnR5TmFtZXMoYSkuZm9yRWFjaChmdW5jdGlvbihiKXtpZighKChyfHx0KSYmYiBpbiBmKSl7dmFyIGQ9ZS5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSxiKTtlLmRlZmluZVByb3BlcnR5KGYsYix7ZW51bWVyYWJsZTohIWQuZW51bWVyYWJsZSxnZXQ6eC5iaW5kKGEsYiksc2V0OkMuYmluZChhLGIpfSk7eVtiXT0hMH19KTtoPSEwO2lmKHJ8fHQpe3ZhciBEPWUuc2V0UHJvdG90eXBlT2Z8fChbXS5fX3Byb3RvX189PT1cbkFycmF5LnByb3RvdHlwZT9mdW5jdGlvbihiLGQpe3AoZCk7Yi5fX3Byb3RvX189ZDtyZXR1cm4gYn06dik7ZyYmRChmLGcpfHwoaD0hMSl9aWYoYy5nZXR8fCFoKWZvcih2YXIgdSBpbiBhKXlbdV18fGUuZGVmaW5lUHJvcGVydHkoZix1LHtnZXQ6eC5iaW5kKGEsdSl9KTtlLnNlYWwoYSk7ZS5zZWFsKGYpO3JldHVybiBmfTttLnJldm9jYWJsZT1mdW5jdGlvbihhLGMpe3JldHVybntwcm94eTpuZXcgbShhLGMpLHJldm9rZTpxfX07cmV0dXJuIG19O3ZhciB6PVwidW5kZWZpbmVkXCIhPT10eXBlb2YgcHJvY2VzcyYmXCJbb2JqZWN0IHByb2Nlc3NdXCI9PT17fS50b1N0cmluZy5jYWxsKHByb2Nlc3MpfHxcInVuZGVmaW5lZFwiIT09dHlwZW9mIG5hdmlnYXRvciYmXCJSZWFjdE5hdGl2ZVwiPT09bmF2aWdhdG9yLnByb2R1Y3Q/Z2xvYmFsOnNlbGY7ei5Qcm94eXx8KHouUHJveHk9bigpLHouUHJveHkucmV2b2NhYmxlPXouUHJveHkucmV2b2NhYmxlKTt9KSgpO1xuIiwgIlxuLy8gX0RPTVRva2VuTGlzdFxuLypcbkNvcHlyaWdodCAoYykgMjAxNiwgSm9obiBHYXJkbmVyXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbiovXG52YXIgX0RPTVRva2VuTGlzdCA9IChmdW5jdGlvbigpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXHR2YXIgZHBTdXBwb3J0ID0gdHJ1ZTtcblx0dmFyIGRlZmluZUdldHRlciA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWUsIGZuLCBjb25maWd1cmFibGUpIHtcblx0XHRpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KVxuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgbmFtZSwge1xuXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlID09PSBkcFN1cHBvcnQgPyB0cnVlIDogISFjb25maWd1cmFibGUsXG5cdFx0XHRcdGdldDogZm5cblx0XHRcdH0pO1xuXG5cdFx0ZWxzZSBvYmplY3QuX19kZWZpbmVHZXR0ZXJfXyhuYW1lLCBmbik7XG5cdH07XG5cblx0LyoqIEVuc3VyZSB0aGUgYnJvd3NlciBhbGxvd3MgT2JqZWN0LmRlZmluZVByb3BlcnR5IHRvIGJlIHVzZWQgb24gbmF0aXZlIEphdmFTY3JpcHQgb2JqZWN0cy4gKi9cblx0dHJ5IHtcblx0XHRkZWZpbmVHZXR0ZXIoe30sIFwic3VwcG9ydFwiKTtcblx0fVxuXHRjYXRjaCAoZSkge1xuXHRcdGRwU3VwcG9ydCA9IGZhbHNlO1xuXHR9XG5cblxuXHR2YXIgX0RPTVRva2VuTGlzdCA9IGZ1bmN0aW9uIChlbCwgcHJvcCkge1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblx0XHR2YXIgdG9rZW5zID0gW107XG5cdFx0dmFyIHRva2VuTWFwID0ge307XG5cdFx0dmFyIGxlbmd0aCA9IDA7XG5cdFx0dmFyIG1heExlbmd0aCA9IDA7XG5cdFx0dmFyIGFkZEluZGV4R2V0dGVyID0gZnVuY3Rpb24gKGkpIHtcblx0XHRcdGRlZmluZUdldHRlcih0aGF0LCBpLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHByZW9wKCk7XG5cdFx0XHRcdHJldHVybiB0b2tlbnNbaV07XG5cdFx0XHR9LCBmYWxzZSk7XG5cblx0XHR9O1xuXHRcdHZhciByZWluZGV4ID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHQvKiogRGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGFycmF5LWxpa2UgYWNjZXNzIHRvIHRoZSB0b2tlbkxpc3QncyBjb250ZW50cy4gKi9cblx0XHRcdGlmIChsZW5ndGggPj0gbWF4TGVuZ3RoKVxuXHRcdFx0XHRmb3IgKDsgbWF4TGVuZ3RoIDwgbGVuZ3RoOyArK21heExlbmd0aCkge1xuXHRcdFx0XHRcdGFkZEluZGV4R2V0dGVyKG1heExlbmd0aCk7XG5cdFx0XHRcdH1cblx0XHR9O1xuXG5cdFx0LyoqIEhlbHBlciBmdW5jdGlvbiBjYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggY2xhc3MgbWV0aG9kLiBJbnRlcm5hbCB1c2Ugb25seS4gKi9cblx0XHR2YXIgcHJlb3AgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHR2YXIgZXJyb3I7XG5cdFx0XHR2YXIgaTtcblx0XHRcdHZhciBhcmdzID0gYXJndW1lbnRzO1xuXHRcdFx0dmFyIHJTcGFjZSA9IC9cXHMrLztcblxuXHRcdFx0LyoqIFZhbGlkYXRlIHRoZSB0b2tlbi9zIHBhc3NlZCB0byBhbiBpbnN0YW5jZSBtZXRob2QsIGlmIGFueS4gKi9cblx0XHRcdGlmIChhcmdzLmxlbmd0aClcblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpXG5cdFx0XHRcdFx0aWYgKHJTcGFjZS50ZXN0KGFyZ3NbaV0pKSB7XG5cdFx0XHRcdFx0XHRlcnJvciA9IG5ldyBTeW50YXhFcnJvcignU3RyaW5nIFwiJyArIGFyZ3NbaV0gKyAnXCIgJyArIFwiY29udGFpbnNcIiArICcgYW4gaW52YWxpZCBjaGFyYWN0ZXInKTtcblx0XHRcdFx0XHRcdGVycm9yLmNvZGUgPSA1O1xuXHRcdFx0XHRcdFx0ZXJyb3IubmFtZSA9IFwiSW52YWxpZENoYXJhY3RlckVycm9yXCI7XG5cdFx0XHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdFx0XHR9XG5cblxuXHRcdFx0LyoqIFNwbGl0IHRoZSBuZXcgdmFsdWUgYXBhcnQgYnkgd2hpdGVzcGFjZSovXG5cdFx0XHRpZiAodHlwZW9mIGVsW3Byb3BdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdHRva2VucyA9IChcIlwiICsgZWxbcHJvcF0uYmFzZVZhbCkucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgXCJcIikuc3BsaXQoclNwYWNlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRva2VucyA9IChcIlwiICsgZWxbcHJvcF0pLnJlcGxhY2UoL15cXHMrfFxccyskL2csIFwiXCIpLnNwbGl0KHJTcGFjZSk7XG5cdFx0XHR9XG5cblx0XHRcdC8qKiBBdm9pZCB0cmVhdGluZyBibGFuayBzdHJpbmdzIGFzIHNpbmdsZS1pdGVtIHRva2VuIGxpc3RzICovXG5cdFx0XHRpZiAoXCJcIiA9PT0gdG9rZW5zWzBdKSB0b2tlbnMgPSBbXTtcblxuXHRcdFx0LyoqIFJlcG9wdWxhdGUgdGhlIGludGVybmFsIHRva2VuIGxpc3RzICovXG5cdFx0XHR0b2tlbk1hcCA9IHt9O1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7ICsraSlcblx0XHRcdFx0dG9rZW5NYXBbdG9rZW5zW2ldXSA9IHRydWU7XG5cdFx0XHRsZW5ndGggPSB0b2tlbnMubGVuZ3RoO1xuXHRcdFx0cmVpbmRleCgpO1xuXHRcdH07XG5cblx0XHQvKiogUG9wdWxhdGUgb3VyIGludGVybmFsIHRva2VuIGxpc3QgaWYgdGhlIHRhcmdldGVkIGF0dHJpYnV0ZSBvZiB0aGUgc3ViamVjdCBlbGVtZW50IGlzbid0IGVtcHR5LiAqL1xuXHRcdHByZW9wKCk7XG5cblx0XHQvKiogUmV0dXJuIHRoZSBudW1iZXIgb2YgdG9rZW5zIGluIHRoZSB1bmRlcmx5aW5nIHN0cmluZy4gUmVhZC1vbmx5LiAqL1xuXHRcdGRlZmluZUdldHRlcih0aGF0LCBcImxlbmd0aFwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRwcmVvcCgpO1xuXHRcdFx0cmV0dXJuIGxlbmd0aDtcblx0XHR9KTtcblxuXHRcdC8qKiBPdmVycmlkZSB0aGUgZGVmYXVsdCB0b1N0cmluZy90b0xvY2FsZVN0cmluZyBtZXRob2RzIHRvIHJldHVybiBhIHNwYWNlLWRlbGltaXRlZCBsaXN0IG9mIHRva2VucyB3aGVuIHR5cGVjYXN0LiAqL1xuXHRcdHRoYXQudG9Mb2NhbGVTdHJpbmcgPVxuXHRcdFx0dGhhdC50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cHJlb3AoKTtcblx0XHRcdFx0cmV0dXJuIHRva2Vucy5qb2luKFwiIFwiKTtcblx0XHRcdH07XG5cblx0XHR0aGF0Lml0ZW0gPSBmdW5jdGlvbiAoaWR4KSB7XG5cdFx0XHRwcmVvcCgpO1xuXHRcdFx0cmV0dXJuIHRva2Vuc1tpZHhdO1xuXHRcdH07XG5cblx0XHR0aGF0LmNvbnRhaW5zID0gZnVuY3Rpb24gKHRva2VuKSB7XG5cdFx0XHRwcmVvcCgpO1xuXHRcdFx0cmV0dXJuICEhdG9rZW5NYXBbdG9rZW5dO1xuXHRcdH07XG5cblx0XHR0aGF0LmFkZCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHByZW9wLmFwcGx5KHRoYXQsIGFyZ3MgPSBhcmd1bWVudHMpO1xuXG5cdFx0XHRmb3IgKHZhciBhcmdzLCB0b2tlbiwgaSA9IDAsIGwgPSBhcmdzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuXHRcdFx0XHR0b2tlbiA9IGFyZ3NbaV07XG5cdFx0XHRcdGlmICghdG9rZW5NYXBbdG9rZW5dKSB7XG5cdFx0XHRcdFx0dG9rZW5zLnB1c2godG9rZW4pO1xuXHRcdFx0XHRcdHRva2VuTWFwW3Rva2VuXSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0LyoqIFVwZGF0ZSB0aGUgdGFyZ2V0ZWQgYXR0cmlidXRlIG9mIHRoZSBhdHRhY2hlZCBlbGVtZW50IGlmIHRoZSB0b2tlbiBsaXN0J3MgY2hhbmdlZC4gKi9cblx0XHRcdGlmIChsZW5ndGggIT09IHRva2Vucy5sZW5ndGgpIHtcblx0XHRcdFx0bGVuZ3RoID0gdG9rZW5zLmxlbmd0aCA+Pj4gMDtcblx0XHRcdFx0aWYgKHR5cGVvZiBlbFtwcm9wXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdGVsW3Byb3BdLmJhc2VWYWwgPSB0b2tlbnMuam9pbihcIiBcIik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxbcHJvcF0gPSB0b2tlbnMuam9pbihcIiBcIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVpbmRleCgpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGF0LnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHByZW9wLmFwcGx5KHRoYXQsIGFyZ3MgPSBhcmd1bWVudHMpO1xuXG5cdFx0XHQvKiogQnVpbGQgYSBoYXNoIG9mIHRva2VuIG5hbWVzIHRvIGNvbXBhcmUgYWdhaW5zdCB3aGVuIHJlY29sbGVjdGluZyBvdXIgdG9rZW4gbGlzdC4gKi9cblx0XHRcdGZvciAodmFyIGFyZ3MsIGlnbm9yZSA9IHt9LCBpID0gMCwgdCA9IFtdOyBpIDwgYXJncy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZ25vcmVbYXJnc1tpXV0gPSB0cnVlO1xuXHRcdFx0XHRkZWxldGUgdG9rZW5NYXBbYXJnc1tpXV07XG5cdFx0XHR9XG5cblx0XHRcdC8qKiBSdW4gdGhyb3VnaCBvdXIgdG9rZW5zIGxpc3QgYW5kIHJlYXNzaWduIG9ubHkgdGhvc2UgdGhhdCBhcmVuJ3QgZGVmaW5lZCBpbiB0aGUgaGFzaCBkZWNsYXJlZCBhYm92ZS4gKi9cblx0XHRcdGZvciAoaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyArK2kpXG5cdFx0XHRcdGlmICghaWdub3JlW3Rva2Vuc1tpXV0pIHQucHVzaCh0b2tlbnNbaV0pO1xuXG5cdFx0XHR0b2tlbnMgPSB0O1xuXHRcdFx0bGVuZ3RoID0gdC5sZW5ndGggPj4+IDA7XG5cblx0XHRcdC8qKiBVcGRhdGUgdGhlIHRhcmdldGVkIGF0dHJpYnV0ZSBvZiB0aGUgYXR0YWNoZWQgZWxlbWVudC4gKi9cblx0XHRcdGlmICh0eXBlb2YgZWxbcHJvcF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0ZWxbcHJvcF0uYmFzZVZhbCA9IHRva2Vucy5qb2luKFwiIFwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsW3Byb3BdID0gdG9rZW5zLmpvaW4oXCIgXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmVpbmRleCgpO1xuXHRcdH07XG5cblx0XHR0aGF0LnRvZ2dsZSA9IGZ1bmN0aW9uICh0b2tlbiwgZm9yY2UpIHtcblx0XHRcdHByZW9wLmFwcGx5KHRoYXQsIFt0b2tlbl0pO1xuXG5cdFx0XHQvKiogVG9rZW4gc3RhdGUncyBiZWluZyBmb3JjZWQuICovXG5cdFx0XHRpZiAodW5kZWZpbmVkICE9PSBmb3JjZSkge1xuXHRcdFx0XHRpZiAoZm9yY2UpIHtcblx0XHRcdFx0XHR0aGF0LmFkZCh0b2tlbik7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhhdC5yZW1vdmUodG9rZW4pO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvKiogVG9rZW4gYWxyZWFkeSBleGlzdHMgaW4gdG9rZW5MaXN0LiBSZW1vdmUgaXQsIGFuZCByZXR1cm4gRkFMU0UuICovXG5cdFx0XHRpZiAodG9rZW5NYXBbdG9rZW5dKSB7XG5cdFx0XHRcdHRoYXQucmVtb3ZlKHRva2VuKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiogT3RoZXJ3aXNlLCBhZGQgdGhlIHRva2VuIGFuZCByZXR1cm4gVFJVRS4gKi9cblx0XHRcdHRoYXQuYWRkKHRva2VuKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH07XG5cblx0XHR0aGF0LmZvckVhY2ggPSBBcnJheS5wcm90b3R5cGUuZm9yRWFjaDtcblxuXHRcdHJldHVybiB0aGF0O1xuXHR9O1xuXG5cdHJldHVybiBfRE9NVG9rZW5MaXN0O1xufSgpKTtcbmV4cG9ydCBkZWZhdWx0IF9ET01Ub2tlbkxpc3Q7XG4iLCAiaW1wb3J0IF9ET01Ub2tlbkxpc3QgZnJvbSBcIkBtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX0RPTVRva2VuTGlzdFwiO1xuKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJET01Ub2tlbkxpc3RcImluIHNlbGYmJmZ1bmN0aW9uKGUpe3JldHVybiEoXCJjbGFzc0xpc3RcImluIGUpfHwhZS5jbGFzc0xpc3QudG9nZ2xlKFwieFwiLCExKSYmIWUuY2xhc3NOYW1lfShkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwieFwiKSlcbikpIHtcbi8vIERPTVRva2VuTGlzdFxuLyogZ2xvYmFsIF9ET01Ub2tlbkxpc3QgKi9cbihmdW5jdGlvbiAoZ2xvYmFsKSB7XG5cdHZhciBuYXRpdmVJbXBsID0gXCJET01Ub2tlbkxpc3RcIiBpbiBnbG9iYWwgJiYgZ2xvYmFsLkRPTVRva2VuTGlzdDtcblxuXHRpZiAoXG5cdFx0XHQhbmF0aXZlSW1wbCB8fFxuXHRcdFx0KFxuXHRcdFx0XHQhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyAmJlxuXHRcdFx0XHQhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnc3ZnJykgJiZcblx0XHRcdFx0IShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInN2Z1wiKS5jbGFzc0xpc3QgaW5zdGFuY2VvZiBET01Ub2tlbkxpc3QpXG5cdFx0XHQpXG5cdFx0KSB7XG5cdFx0Z2xvYmFsLkRPTVRva2VuTGlzdCA9IF9ET01Ub2tlbkxpc3Q7XG5cdH1cblxuXHQvLyBBZGQgc2Vjb25kIGFyZ3VtZW50IHRvIG5hdGl2ZSBET01Ub2tlbkxpc3QudG9nZ2xlKCkgaWYgbmVjZXNzYXJ5XG5cdChmdW5jdGlvbiAoKSB7XG5cdFx0dmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cdFx0aWYgKCEoJ2NsYXNzTGlzdCcgaW4gZSkpIHJldHVybjtcblx0XHRlLmNsYXNzTGlzdC50b2dnbGUoJ3gnLCBmYWxzZSk7XG5cdFx0aWYgKCFlLmNsYXNzTGlzdC5jb250YWlucygneCcpKSByZXR1cm47XG5cdFx0ZS5jbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIHRvZ2dsZSh0b2tlbiAvKiwgZm9yY2UqLykge1xuXHRcdFx0dmFyIGZvcmNlID0gYXJndW1lbnRzWzFdO1xuXHRcdFx0aWYgKGZvcmNlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dmFyIGFkZCA9ICF0aGlzLmNvbnRhaW5zKHRva2VuKTtcblx0XHRcdFx0dGhpc1thZGQgPyAnYWRkJyA6ICdyZW1vdmUnXSh0b2tlbik7XG5cdFx0XHRcdHJldHVybiBhZGQ7XG5cdFx0XHR9XG5cdFx0XHRmb3JjZSA9ICEhZm9yY2U7XG5cdFx0XHR0aGlzW2ZvcmNlID8gJ2FkZCcgOiAncmVtb3ZlJ10odG9rZW4pO1xuXHRcdFx0cmV0dXJuIGZvcmNlO1xuXHRcdH07XG5cdH0oKSk7XG5cblx0Ly8gQWRkIG11bHRpcGxlIGFyZ3VtZW50cyB0byBuYXRpdmUgRE9NVG9rZW5MaXN0LmFkZCgpIGlmIG5lY2Vzc2FyeVxuXHQoZnVuY3Rpb24gKCkge1xuXHRcdHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRcdGlmICghKCdjbGFzc0xpc3QnIGluIGUpKSByZXR1cm47XG5cdFx0ZS5jbGFzc0xpc3QuYWRkKCdhJywgJ2InKTtcblx0XHRpZiAoZS5jbGFzc0xpc3QuY29udGFpbnMoJ2InKSkgcmV0dXJuO1xuXHRcdHZhciBuYXRpdmUgPSBlLmNsYXNzTGlzdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuYWRkO1xuXHRcdGUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHR2YXIgYXJncyA9IGFyZ3VtZW50cztcblx0XHRcdHZhciBsID0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdG5hdGl2ZS5jYWxsKHRoaXMsIGFyZ3NbaV0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0oKSk7XG5cblx0Ly8gQWRkIG11bHRpcGxlIGFyZ3VtZW50cyB0byBuYXRpdmUgRE9NVG9rZW5MaXN0LnJlbW92ZSgpIGlmIG5lY2Vzc2FyeVxuXHQoZnVuY3Rpb24gKCkge1xuXHRcdHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRcdGlmICghKCdjbGFzc0xpc3QnIGluIGUpKSByZXR1cm47XG5cdFx0ZS5jbGFzc0xpc3QuYWRkKCdhJyk7XG5cdFx0ZS5jbGFzc0xpc3QuYWRkKCdiJyk7XG5cdFx0ZS5jbGFzc0xpc3QucmVtb3ZlKCdhJywgJ2InKTtcblx0XHRpZiAoIWUuY2xhc3NMaXN0LmNvbnRhaW5zKCdiJykpIHJldHVybjtcblx0XHR2YXIgbmF0aXZlID0gZS5jbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlLnJlbW92ZTtcblx0XHRlLmNsYXNzTGlzdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdFx0XHR2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRuYXRpdmUuY2FsbCh0aGlzLCBhcmdzW2ldKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9KCkpO1xuXG59KHNlbGYpKTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgIlxuLy8gX0l0ZXJhdG9yXG4vKiBnbG9iYWwgU3ltYm9sICovXG4vLyBBIG1vZGlmaWNhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20vbWVkaWtvby9lczYtaXRlcmF0b3Jcbi8vIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IE1hcml1c3ogTm93YWsgKHd3dy5tZWRpa29vLmNvbSlcblxudmFyIEl0ZXJhdG9yID0gKGZ1bmN0aW9uICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXHR2YXIgY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0dGhpcy5sZW5ndGggPSAwO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXHR2YXIgY2FsbGFibGUgPSBmdW5jdGlvbiAoZm4pIHtcblx0XHRpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZuICsgXCIgaXMgbm90IGEgZnVuY3Rpb25cIik7XG5cdFx0cmV0dXJuIGZuO1xuXHR9O1xuXG5cdHZhciBJdGVyYXRvciA9IGZ1bmN0aW9uIChsaXN0LCBjb250ZXh0KSB7XG5cdFx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIEl0ZXJhdG9yKSkge1xuXHRcdFx0cmV0dXJuIG5ldyBJdGVyYXRvcihsaXN0LCBjb250ZXh0KTtcblx0XHR9XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge1xuXHRcdFx0X19saXN0X186IHtcblx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdHZhbHVlOiBsaXN0XG5cdFx0XHR9LFxuXHRcdFx0X19jb250ZXh0X186IHtcblx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdHZhbHVlOiBjb250ZXh0XG5cdFx0XHR9LFxuXHRcdFx0X19uZXh0SW5kZXhfXzoge1xuXHRcdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdFx0dmFsdWU6IDBcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpZiAoIWNvbnRleHQpIHJldHVybjtcblx0XHRjYWxsYWJsZShjb250ZXh0Lm9uKTtcblx0XHRjb250ZXh0Lm9uKCdfYWRkJywgdGhpcy5fb25BZGQuYmluZCh0aGlzKSk7XG5cdFx0Y29udGV4dC5vbignX2RlbGV0ZScsIHRoaXMuX29uRGVsZXRlLmJpbmQodGhpcykpO1xuXHRcdGNvbnRleHQub24oJ19jbGVhcicsIHRoaXMuX29uQ2xlYXIuYmluZCh0aGlzKSk7XG5cdH07XG5cblx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSXRlcmF0b3IucHJvdG90eXBlLCBPYmplY3QuYXNzaWduKHtcblx0XHRjb25zdHJ1Y3Rvcjoge1xuXHRcdFx0dmFsdWU6IEl0ZXJhdG9yLFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0X25leHQ6IHtcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHZhciBpO1xuXHRcdFx0XHRpZiAoIXRoaXMuX19saXN0X18pIHJldHVybjtcblx0XHRcdFx0aWYgKHRoaXMuX19yZWRvX18pIHtcblx0XHRcdFx0XHRpID0gdGhpcy5fX3JlZG9fXy5zaGlmdCgpO1xuXHRcdFx0XHRcdGlmIChpICE9PSB1bmRlZmluZWQpIHJldHVybiBpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLl9fbmV4dEluZGV4X18gPCB0aGlzLl9fbGlzdF9fLmxlbmd0aCkgcmV0dXJuIHRoaXMuX19uZXh0SW5kZXhfXysrO1xuXHRcdFx0XHR0aGlzLl91bkJpbmQoKTtcblx0XHRcdH0sXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSxcblx0XHRuZXh0OiB7XG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fY3JlYXRlUmVzdWx0KHRoaXMuX25leHQoKSk7XG5cdFx0XHR9LFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0X2NyZWF0ZVJlc3VsdDoge1xuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uIChpKSB7XG5cdFx0XHRcdGlmIChpID09PSB1bmRlZmluZWQpIHJldHVybiB7XG5cdFx0XHRcdFx0ZG9uZTogdHJ1ZSxcblx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkXG5cdFx0XHRcdH07XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0ZG9uZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHRoaXMuX3Jlc29sdmUoaSlcblx0XHRcdFx0fTtcblx0XHRcdH0sXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSxcblx0XHRfcmVzb2x2ZToge1xuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uIChpKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9fbGlzdF9fW2ldO1xuXHRcdFx0fSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9LFxuXHRcdF91bkJpbmQ6IHtcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHRoaXMuX19saXN0X18gPSBudWxsO1xuXHRcdFx0XHRkZWxldGUgdGhpcy5fX3JlZG9fXztcblx0XHRcdFx0aWYgKCF0aGlzLl9fY29udGV4dF9fKSByZXR1cm47XG5cdFx0XHRcdHRoaXMuX19jb250ZXh0X18ub2ZmKCdfYWRkJywgdGhpcy5fb25BZGQuYmluZCh0aGlzKSk7XG5cdFx0XHRcdHRoaXMuX19jb250ZXh0X18ub2ZmKCdfZGVsZXRlJywgdGhpcy5fb25EZWxldGUuYmluZCh0aGlzKSk7XG5cdFx0XHRcdHRoaXMuX19jb250ZXh0X18ub2ZmKCdfY2xlYXInLCB0aGlzLl9vbkNsZWFyLmJpbmQodGhpcykpO1xuXHRcdFx0XHR0aGlzLl9fY29udGV4dF9fID0gbnVsbDtcblx0XHRcdH0sXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSxcblx0XHR0b1N0cmluZzoge1xuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuICdbb2JqZWN0IEl0ZXJhdG9yXSc7XG5cdFx0XHR9LFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH1cblx0fSwge1xuXHRcdF9vbkFkZDoge1xuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uIChpbmRleCkge1xuXHRcdFx0XHRpZiAoaW5kZXggPj0gdGhpcy5fX25leHRJbmRleF9fKSByZXR1cm47XG5cdFx0XHRcdCsrdGhpcy5fX25leHRJbmRleF9fO1xuXHRcdFx0XHRpZiAoIXRoaXMuX19yZWRvX18pIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19fcmVkb19fJywge1xuXHRcdFx0XHRcdFx0dmFsdWU6IFtpbmRleF0sXG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl9fcmVkb19fLmZvckVhY2goZnVuY3Rpb24gKHJlZG8sIGkpIHtcblx0XHRcdFx0XHRpZiAocmVkbyA+PSBpbmRleCkgdGhpcy5fX3JlZG9fX1tpXSA9ICsrcmVkbztcblx0XHRcdFx0fSwgdGhpcyk7XG5cdFx0XHRcdHRoaXMuX19yZWRvX18ucHVzaChpbmRleCk7XG5cdFx0XHR9LFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0X29uRGVsZXRlOiB7XG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gKGluZGV4KSB7XG5cdFx0XHRcdHZhciBpO1xuXHRcdFx0XHRpZiAoaW5kZXggPj0gdGhpcy5fX25leHRJbmRleF9fKSByZXR1cm47XG5cdFx0XHRcdC0tdGhpcy5fX25leHRJbmRleF9fO1xuXHRcdFx0XHRpZiAoIXRoaXMuX19yZWRvX18pIHJldHVybjtcblx0XHRcdFx0aSA9IHRoaXMuX19yZWRvX18uaW5kZXhPZihpbmRleCk7XG5cdFx0XHRcdGlmIChpICE9PSAtMSkgdGhpcy5fX3JlZG9fXy5zcGxpY2UoaSwgMSk7XG5cdFx0XHRcdHRoaXMuX19yZWRvX18uZm9yRWFjaChmdW5jdGlvbiAocmVkbywgaSkge1xuXHRcdFx0XHRcdGlmIChyZWRvID4gaW5kZXgpIHRoaXMuX19yZWRvX19baV0gPSAtLXJlZG87XG5cdFx0XHRcdH0sIHRoaXMpO1xuXHRcdFx0fSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9LFxuXHRcdF9vbkNsZWFyOiB7XG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRpZiAodGhpcy5fX3JlZG9fXykgY2xlYXIuY2FsbCh0aGlzLl9fcmVkb19fKTtcblx0XHRcdFx0dGhpcy5fX25leHRJbmRleF9fID0gMDtcblx0XHRcdH0sXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fVxuXHR9KSk7XG5cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KEl0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLml0ZXJhdG9yLCB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdHdyaXRhYmxlOiB0cnVlXG5cdH0pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcblx0XHR2YWx1ZTogJ0l0ZXJhdG9yJyxcblx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuXHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdHdyaXRhYmxlOiB0cnVlXG5cdH0pO1xuXG5cdHJldHVybiBJdGVyYXRvcjtcbn0oKSk7XG5leHBvcnQgZGVmYXVsdCBJdGVyYXRvcjtcbiIsICJpbXBvcnQgSXRlcmF0b3IgZnJvbSBcIkBtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX0l0ZXJhdG9yXCI7XG5cbi8vIF9BcnJheUl0ZXJhdG9yXG4vKiBnbG9iYWwgSXRlcmF0b3IsIFN5bWJvbCAqL1xuLy8gQSBtb2RpZmljYXRpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL21lZGlrb28vZXM2LWl0ZXJhdG9yXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBNYXJpdXN6IE5vd2FrICh3d3cubWVkaWtvby5jb20pXG5cbnZhciBBcnJheUl0ZXJhdG9yID0gKGZ1bmN0aW9uKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cblx0dmFyIEFycmF5SXRlcmF0b3IgPSBmdW5jdGlvbihhcnIsIGtpbmQpIHtcblx0XHRpZiAoISh0aGlzIGluc3RhbmNlb2YgQXJyYXlJdGVyYXRvcikpIHJldHVybiBuZXcgQXJyYXlJdGVyYXRvcihhcnIsIGtpbmQpO1xuXHRcdEl0ZXJhdG9yLmNhbGwodGhpcywgYXJyKTtcblx0XHRpZiAoIWtpbmQpIGtpbmQgPSAndmFsdWUnO1xuXHRcdGVsc2UgaWYgKFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMuY2FsbChraW5kLCAna2V5K3ZhbHVlJykpIGtpbmQgPSAna2V5K3ZhbHVlJztcblx0XHRlbHNlIGlmIChTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzLmNhbGwoa2luZCwgJ2tleScpKSBraW5kID0gJ2tleSc7XG5cdFx0ZWxzZSBraW5kID0gJ3ZhbHVlJztcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19fa2luZF9fJywge1xuXHRcdFx0dmFsdWU6IGtpbmQsXG5cdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHR9KTtcblx0fTtcblx0aWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikgT2JqZWN0LnNldFByb3RvdHlwZU9mKEFycmF5SXRlcmF0b3IsIEl0ZXJhdG9yLnByb3RvdHlwZSk7XG5cblx0QXJyYXlJdGVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yLnByb3RvdHlwZSwge1xuXHRcdGNvbnN0cnVjdG9yOiB7XG5cdFx0XHR2YWx1ZTogQXJyYXlJdGVyYXRvcixcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9LFxuXHRcdF9yZXNvbHZlOiB7XG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24oaSkge1xuXHRcdFx0XHRpZiAodGhpcy5fX2tpbmRfXyA9PT0gJ3ZhbHVlJykgcmV0dXJuIHRoaXMuX19saXN0X19baV07XG5cdFx0XHRcdGlmICh0aGlzLl9fa2luZF9fID09PSAna2V5K3ZhbHVlJykgcmV0dXJuIFtpLCB0aGlzLl9fbGlzdF9fW2ldXTtcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHR9LFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0dG9TdHJpbmc6IHtcblx0XHRcdHZhbHVlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICdbb2JqZWN0IEFycmF5IEl0ZXJhdG9yXSc7XG5cdFx0XHR9LFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH1cblx0fSk7XG5cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5SXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcblx0XHR2YWx1ZTogJ0FycmF5IEl0ZXJhdG9yJyxcblx0XHR3cml0YWJsZTogZmFsc2UsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdH0pO1xuXG5cdHJldHVybiBBcnJheUl0ZXJhdG9yO1xufSgpKTtcbmV4cG9ydCBkZWZhdWx0IEFycmF5SXRlcmF0b3I7XG4iLCAiaW1wb3J0IEFycmF5SXRlcmF0b3IgZnJvbSBcIkBtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX0FycmF5SXRlcmF0b3JcIjtcbmltcG9ydCBJdGVyYXRvciBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fSXRlcmF0b3JcIjtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiU3ltYm9sXCJpbiBzZWxmJiZcIml0ZXJhdG9yXCJpbiBzZWxmLlN5bWJvbCYmZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KClcbnJldHVybiBlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLCEhZS5jaGlsZE5vZGVzW3NlbGYuU3ltYm9sLml0ZXJhdG9yXX0oKVxuKSkge1xuLy8gTm9kZUxpc3QucHJvdG90eXBlLkBAaXRlcmF0b3Jcbi8qIGdsb2JhbCBTeW1ib2wsIEFycmF5SXRlcmF0b3IqL1xuTm9kZUxpc3QucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG5cdHJldHVybiBuZXcgQXJyYXlJdGVyYXRvcih0aGlzKTtcbn07XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICIoZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcImZvckVhY2hcImluIE5vZGVMaXN0LnByb3RvdHlwZVxuKSkge1xuLy8gTm9kZUxpc3QucHJvdG90eXBlLmZvckVhY2hcbk5vZGVMaXN0LnByb3RvdHlwZS5mb3JFYWNoID0gQXJyYXkucHJvdG90eXBlLmZvckVhY2g7XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICIoZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoISgoZnVuY3Rpb24obil7aWYoIShcIkV2ZW50XCJpbiBuKSlyZXR1cm4hMVxudHJ5e3JldHVybiBuZXcgRXZlbnQoXCJjbGlja1wiKSwhMH1jYXRjaChuKXtyZXR1cm4hMX19KShzZWxmKVxuKSkge1xuLy8gRXZlbnRcbihmdW5jdGlvbiAoKSB7XG5cdC8vIFRoaXMgcG9seWZpbGwgZGVwZW5kcyBvbiBhdmFpbGFiaWxpdHkgb2YgYGRvY3VtZW50YCBzbyB3aWxsIG5vdCBydW4gaW4gYSB3b3JrZXJcblx0Ly8gSG93ZXZlciwgd2UgYXNzc3VtZSB0aGVyZSBhcmUgbm8gYnJvd3NlcnMgd2l0aCB3b3JrZXIgc3VwcG9ydCB0aGF0IGxhY2sgcHJvcGVyXG5cdC8vIHN1cHBvcnQgZm9yIGBFdmVudGAgd2l0aGluIHRoZSB3b3JrZXJcblx0aWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcblxuXHR2YXIgZXhpc3RpbmdQcm90byA9ICh3aW5kb3cuRXZlbnQgJiYgd2luZG93LkV2ZW50LnByb3RvdHlwZSkgfHwgbnVsbDtcblx0ZnVuY3Rpb24gRXZlbnQodHlwZSwgZXZlbnRJbml0RGljdCkge1xuXHRcdGlmICghdHlwZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdOb3QgZW5vdWdoIGFyZ3VtZW50cycpO1xuXHRcdH1cblxuXHRcdHZhciBldmVudDtcblx0XHQvLyBTaG9ydGN1dCBpZiBicm93c2VyIHN1cHBvcnRzIGNyZWF0ZUV2ZW50XG5cdFx0aWYgKCdjcmVhdGVFdmVudCcgaW4gZG9jdW1lbnQpIHtcblx0XHRcdGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG5cdFx0XHR2YXIgYnViYmxlcyA9IGV2ZW50SW5pdERpY3QgJiYgZXZlbnRJbml0RGljdC5idWJibGVzICE9PSB1bmRlZmluZWQgPyBldmVudEluaXREaWN0LmJ1YmJsZXMgOiBmYWxzZTtcblx0XHRcdHZhciBjYW5jZWxhYmxlID0gZXZlbnRJbml0RGljdCAmJiBldmVudEluaXREaWN0LmNhbmNlbGFibGUgIT09IHVuZGVmaW5lZCA/IGV2ZW50SW5pdERpY3QuY2FuY2VsYWJsZSA6IGZhbHNlO1xuXG5cdFx0XHRldmVudC5pbml0RXZlbnQodHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSk7XG5cblx0XHRcdHJldHVybiBldmVudDtcblx0XHR9XG5cblx0XHRldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KCk7XG5cblx0XHRldmVudC50eXBlID0gdHlwZTtcblx0XHRldmVudC5idWJibGVzID0gZXZlbnRJbml0RGljdCAmJiBldmVudEluaXREaWN0LmJ1YmJsZXMgIT09IHVuZGVmaW5lZCA/IGV2ZW50SW5pdERpY3QuYnViYmxlcyA6IGZhbHNlO1xuXHRcdGV2ZW50LmNhbmNlbGFibGUgPSBldmVudEluaXREaWN0ICYmIGV2ZW50SW5pdERpY3QuY2FuY2VsYWJsZSAhPT0gdW5kZWZpbmVkID8gZXZlbnRJbml0RGljdC5jYW5jZWxhYmxlIDogZmFsc2U7XG5cblx0XHRyZXR1cm4gZXZlbnQ7XG5cdH1cblx0RXZlbnQuTk9ORSA9IDA7XG5cdEV2ZW50LkNBUFRVUklOR19QSEFTRSA9IDE7XG5cdEV2ZW50LkFUX1RBUkdFVCA9IDI7XG5cdEV2ZW50LkJVQkJMSU5HX1BIQVNFID0gMztcblx0d2luZG93LkV2ZW50ID0gV2luZG93LnByb3RvdHlwZS5FdmVudCA9IEV2ZW50O1xuXHRpZiAoZXhpc3RpbmdQcm90bykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuRXZlbnQsICdwcm90b3R5cGUnLCB7XG5cdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdHZhbHVlOiBleGlzdGluZ1Byb3RvXG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoISgnY3JlYXRlRXZlbnQnIGluIGRvY3VtZW50KSkge1xuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyID0gV2luZG93LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gRG9jdW1lbnQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcigpIHtcblx0XHRcdHZhclxuXHRcdFx0ZWxlbWVudCA9IHRoaXMsXG5cdFx0XHR0eXBlID0gYXJndW1lbnRzWzBdLFxuXHRcdFx0bGlzdGVuZXIgPSBhcmd1bWVudHNbMV07XG5cblx0XHRcdGlmICghZWxlbWVudC5fZXZlbnRzKSB7XG5cdFx0XHRcdGVsZW1lbnQuX2V2ZW50cyA9IHt9O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWVsZW1lbnQuX2V2ZW50c1t0eXBlXSkge1xuXHRcdFx0XHRlbGVtZW50Ll9ldmVudHNbdHlwZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdFx0XHR2YXJcblx0XHRcdFx0XHRsaXN0ID0gZWxlbWVudC5fZXZlbnRzW2V2ZW50LnR5cGVdLmxpc3QsXG5cdFx0XHRcdFx0ZXZlbnRzID0gbGlzdC5zbGljZSgpLFxuXHRcdFx0XHRcdGluZGV4ID0gLTEsXG5cdFx0XHRcdFx0bGVuZ3RoID0gZXZlbnRzLmxlbmd0aCxcblx0XHRcdFx0XHRldmVudEVsZW1lbnQ7XG5cblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkge1xuXHRcdFx0XHRcdFx0aWYgKGV2ZW50LmNhbmNlbGFibGUgIT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbigpIHtcblx0XHRcdFx0XHRcdGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpIHtcblx0XHRcdFx0XHRcdGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRldmVudC5jYW5jZWxJbW1lZGlhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0ID0gZWxlbWVudDtcblx0XHRcdFx0XHRldmVudC5yZWxhdGVkVGFyZ2V0ID0gZXZlbnQuZnJvbUVsZW1lbnQgfHwgbnVsbDtcblx0XHRcdFx0XHRldmVudC50YXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudCB8fCBlbGVtZW50O1xuXHRcdFx0XHRcdGV2ZW50LnRpbWVTdGFtcCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG5cdFx0XHRcdFx0aWYgKGV2ZW50LmNsaWVudFgpIHtcblx0XHRcdFx0XHRcdGV2ZW50LnBhZ2VYID0gZXZlbnQuY2xpZW50WCArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0O1xuXHRcdFx0XHRcdFx0ZXZlbnQucGFnZVkgPSBldmVudC5jbGllbnRZICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR3aGlsZSAoKytpbmRleCA8IGxlbmd0aCAmJiAhZXZlbnQuY2FuY2VsSW1tZWRpYXRlKSB7XG5cdFx0XHRcdFx0XHRpZiAoaW5kZXggaW4gZXZlbnRzKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50RWxlbWVudCA9IGV2ZW50c1tpbmRleF07XG5cblx0XHRcdFx0XHRcdFx0aWYgKGxpc3QuaW5jbHVkZXMoZXZlbnRFbGVtZW50KSAmJiB0eXBlb2YgZXZlbnRFbGVtZW50ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnRFbGVtZW50LmNhbGwoZWxlbWVudCwgZXZlbnQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGVsZW1lbnQuX2V2ZW50c1t0eXBlXS5saXN0ID0gW107XG5cblx0XHRcdFx0aWYgKGVsZW1lbnQuYXR0YWNoRXZlbnQpIHtcblx0XHRcdFx0XHRlbGVtZW50LmF0dGFjaEV2ZW50KCdvbicgKyB0eXBlLCBlbGVtZW50Ll9ldmVudHNbdHlwZV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGVsZW1lbnQuX2V2ZW50c1t0eXBlXS5saXN0LnB1c2gobGlzdGVuZXIpO1xuXHRcdH07XG5cblx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IFdpbmRvdy5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IERvY3VtZW50LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyID0gRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIoKSB7XG5cdFx0XHR2YXJcblx0XHRcdGVsZW1lbnQgPSB0aGlzLFxuXHRcdFx0dHlwZSA9IGFyZ3VtZW50c1swXSxcblx0XHRcdGxpc3RlbmVyID0gYXJndW1lbnRzWzFdLFxuXHRcdFx0aW5kZXg7XG5cblx0XHRcdGlmIChlbGVtZW50Ll9ldmVudHMgJiYgZWxlbWVudC5fZXZlbnRzW3R5cGVdICYmIGVsZW1lbnQuX2V2ZW50c1t0eXBlXS5saXN0KSB7XG5cdFx0XHRcdGluZGV4ID0gZWxlbWVudC5fZXZlbnRzW3R5cGVdLmxpc3QuaW5kZXhPZihsaXN0ZW5lcik7XG5cblx0XHRcdFx0aWYgKGluZGV4ICE9PSAtMSkge1xuXHRcdFx0XHRcdGVsZW1lbnQuX2V2ZW50c1t0eXBlXS5saXN0LnNwbGljZShpbmRleCwgMSk7XG5cblx0XHRcdFx0XHRpZiAoIWVsZW1lbnQuX2V2ZW50c1t0eXBlXS5saXN0Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0aWYgKGVsZW1lbnQuZGV0YWNoRXZlbnQpIHtcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5kZXRhY2hFdmVudCgnb24nICsgdHlwZSwgZWxlbWVudC5fZXZlbnRzW3R5cGVdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGRlbGV0ZSBlbGVtZW50Ll9ldmVudHNbdHlwZV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHdpbmRvdy5kaXNwYXRjaEV2ZW50ID0gV2luZG93LnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50ID0gRG9jdW1lbnQucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQgPSBFbGVtZW50LnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChldmVudCkge1xuXHRcdFx0aWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignTm90IGVub3VnaCBhcmd1bWVudHMnKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFldmVudCB8fCB0eXBlb2YgZXZlbnQudHlwZSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdET00gRXZlbnRzIEV4Y2VwdGlvbiAwJyk7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBlbGVtZW50ID0gdGhpcywgdHlwZSA9IGV2ZW50LnR5cGU7XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmICghZXZlbnQuYnViYmxlcykge1xuXHRcdFx0XHRcdGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG5cblx0XHRcdFx0XHR2YXIgY2FuY2VsQnViYmxlRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdFx0XHRcdGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG5cblx0XHRcdFx0XHRcdChlbGVtZW50IHx8IHdpbmRvdykuZGV0YWNoRXZlbnQoJ29uJyArIHR5cGUsIGNhbmNlbEJ1YmJsZUV2ZW50KTtcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0dGhpcy5hdHRhY2hFdmVudCgnb24nICsgdHlwZSwgY2FuY2VsQnViYmxlRXZlbnQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoJ29uJyArIHR5cGUsIGV2ZW50KTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGV2ZW50LnRhcmdldCA9IGVsZW1lbnQ7XG5cblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBlbGVtZW50O1xuXG5cdFx0XHRcdFx0aWYgKCdfZXZlbnRzJyBpbiBlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50Ll9ldmVudHNbdHlwZV0gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRcdGVsZW1lbnQuX2V2ZW50c1t0eXBlXS5jYWxsKGVsZW1lbnQsIGV2ZW50KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAodHlwZW9mIGVsZW1lbnRbJ29uJyArIHR5cGVdID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50WydvbicgKyB0eXBlXS5jYWxsKGVsZW1lbnQsIGV2ZW50KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtZW50ID0gZWxlbWVudC5ub2RlVHlwZSA9PT0gOSA/IGVsZW1lbnQucGFyZW50V2luZG93IDogZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdFx0XHR9IHdoaWxlIChlbGVtZW50ICYmICFldmVudC5jYW5jZWxCdWJibGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXG5cdFx0Ly8gQWRkIHRoZSBET01Db250ZW50TG9hZGVkIEV2ZW50XG5cdFx0ZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29ucmVhZHlzdGF0ZWNoYW5nZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHtcblx0XHRcdFx0ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ0RPTUNvbnRlbnRMb2FkZWQnLCB7XG5cdFx0XHRcdFx0YnViYmxlczogdHJ1ZVxuXHRcdFx0XHR9KSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn0oKSk7XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICIoZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcIkN1c3RvbUV2ZW50XCJpbiBzZWxmJiYoXCJmdW5jdGlvblwiPT10eXBlb2Ygc2VsZi5DdXN0b21FdmVudHx8c2VsZi5DdXN0b21FdmVudC50b1N0cmluZygpLmluZGV4T2YoXCJDdXN0b21FdmVudENvbnN0cnVjdG9yXCIpPi0xKVxuKSkge1xuLy8gQ3VzdG9tRXZlbnRcbnNlbGYuQ3VzdG9tRXZlbnQgPSBmdW5jdGlvbiBDdXN0b21FdmVudCh0eXBlLCBldmVudEluaXREaWN0KSB7XG5cdGlmICghdHlwZSkge1xuXHRcdHRocm93IEVycm9yKCdUeXBlRXJyb3I6IEZhaWxlZCB0byBjb25zdHJ1Y3QgXCJDdXN0b21FdmVudFwiOiBBbiBldmVudCBuYW1lIG11c3QgYmUgcHJvdmlkZWQuJyk7XG5cdH1cblxuXHR2YXIgZXZlbnQ7XG5cdGV2ZW50SW5pdERpY3QgPSBldmVudEluaXREaWN0IHx8IHtidWJibGVzOiBmYWxzZSwgY2FuY2VsYWJsZTogZmFsc2UsIGRldGFpbDogbnVsbH07XG5cblx0dHJ5IHtcblx0XHRldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpO1xuXHRcdGV2ZW50LmluaXRDdXN0b21FdmVudCh0eXBlLCBldmVudEluaXREaWN0LmJ1YmJsZXMsIGV2ZW50SW5pdERpY3QuY2FuY2VsYWJsZSwgZXZlbnRJbml0RGljdC5kZXRhaWwpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIGZvciBicm93c2VycyB3aGljaCBkb24ndCBzdXBwb3J0IEN1c3RvbUV2ZW50IGF0IGFsbCwgd2UgdXNlIGEgcmVndWxhciBldmVudCBpbnN0ZWFkXG5cdFx0ZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcblx0XHRldmVudC5pbml0RXZlbnQodHlwZSwgZXZlbnRJbml0RGljdC5idWJibGVzLCBldmVudEluaXREaWN0LmNhbmNlbGFibGUpO1xuXHRcdGV2ZW50LmRldGFpbCA9IGV2ZW50SW5pdERpY3QuZGV0YWlsO1xuXHR9XG5cdHJldHVybiBldmVudDtcbn07XG5cbkN1c3RvbUV2ZW50LnByb3RvdHlwZSA9IEV2ZW50LnByb3RvdHlwZTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgIihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiRG9jdW1lbnRGcmFnbWVudFwiaW4gc2VsZiYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBEb2N1bWVudEZyYWdtZW50LCEwfWNhdGNoKG4pe3JldHVybiExfX0oKVxuKSkge1xuLy8gRG9jdW1lbnRGcmFnbWVudFxuKGZ1bmN0aW9uIChnbG9iYWwpIHtcblx0Z2xvYmFsLkRvY3VtZW50RnJhZ21lbnQgPSBmdW5jdGlvbiBEb2N1bWVudEZyYWdtZW50KCkge1xuXHRcdHJldHVybiBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdH07XG5cblx0dmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXHRnbG9iYWwuRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGZyYWdtZW50LmNvbnN0cnVjdG9yLnByb3RvdHlwZSlcbn0oc2VsZikpO1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJkb2N1bWVudFwiaW4gc2VsZiYmXCJtYXRjaGVzXCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbikpIHtcbi8vIEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXNcbkVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMgPSBFbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwgRWxlbWVudC5wcm90b3R5cGUub01hdGNoZXNTZWxlY3RvciB8fCBFbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3RvciB8fCBFbGVtZW50LnByb3RvdHlwZS5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgZnVuY3Rpb24gbWF0Y2hlcyhzZWxlY3Rvcikge1xuXG5cdHZhciBlbGVtZW50ID0gdGhpcztcblx0dmFyIGVsZW1lbnRzID0gKGVsZW1lbnQuZG9jdW1lbnQgfHwgZWxlbWVudC5vd25lckRvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcblx0dmFyIGluZGV4ID0gMDtcblxuXHR3aGlsZSAoZWxlbWVudHNbaW5kZXhdICYmIGVsZW1lbnRzW2luZGV4XSAhPT0gZWxlbWVudCkge1xuXHRcdCsraW5kZXg7XG5cdH1cblxuXHRyZXR1cm4gISFlbGVtZW50c1tpbmRleF07XG59O1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG5cbi8vIG1pbmltYWwgdGVtcGxhdGUgcG9seWZpbGxcbihmdW5jdGlvbiAoKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgbmVlZHNUZW1wbGF0ZSA9IHR5cGVvZiBIVE1MVGVtcGxhdGVFbGVtZW50ID09PSAndW5kZWZpbmVkJztcbiAgdmFyIGJyb2tlbkRvY0ZyYWdtZW50ID0gIShcbiAgICBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuY2xvbmVOb2RlKCkgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50XG4gICk7XG4gIHZhciBuZWVkc0RvY0ZyYWcgPSBmYWxzZTtcblxuICAvLyBOT1RFOiBSZXBsYWNlIERvY3VtZW50RnJhZ21lbnQgdG8gd29yayBhcm91bmQgSUUxMSBidWcgdGhhdFxuICAvLyBjYXVzZXMgY2hpbGRyZW4gb2YgYSBkb2N1bWVudCBmcmFnbWVudCBtb2RpZmllZCB3aGlsZVxuICAvLyB0aGVyZSBpcyBhIG11dGF0aW9uIG9ic2VydmVyIHRvIG5vdCBoYXZlIGEgcGFyZW50Tm9kZSwgb3JcbiAgLy8gaGF2ZSBhIGJyb2tlbiBwYXJlbnROb2RlICghPyEpXG4gIGlmICgvVHJpZGVudC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkge1xuICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICBuZWVkc0RvY0ZyYWcgPSB0cnVlO1xuXG4gICAgICB2YXIgb3JpZ0Nsb25lTm9kZSA9IE5vZGUucHJvdG90eXBlLmNsb25lTm9kZTtcbiAgICAgIE5vZGUucHJvdG90eXBlLmNsb25lTm9kZSA9IGZ1bmN0aW9uIGNsb25lTm9kZShkZWVwKSB7XG4gICAgICAgIHZhciBuZXdEb20gPSBvcmlnQ2xvbmVOb2RlLmNhbGwodGhpcywgZGVlcCk7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgICAgIG5ld0RvbS5fX3Byb3RvX18gPSBEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3RG9tO1xuICAgICAgfTtcblxuICAgICAgLy8gSUUncyBEb2N1bWVudEZyYWdtZW50IHF1ZXJ5U2VsZWN0b3IgY29kZSBkb2Vzbid0IHdvcmsgd2hlblxuICAgICAgLy8gY2FsbGVkIG9uIGFuIGVsZW1lbnQgaW5zdGFuY2VcbiAgICAgIERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGwgPVxuICAgICAgICBIVE1MRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbDtcbiAgICAgIERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3IgPVxuICAgICAgICBIVE1MRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvcjtcblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUsIHtcbiAgICAgICAgJ25vZGVUeXBlJzoge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcblxuICAgICAgICAnbG9jYWxOYW1lJzoge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcblxuICAgICAgICAnbm9kZU5hbWUnOiB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gJyNkb2N1bWVudC1mcmFnbWVudCc7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgdmFyIG9yaWdJbnNlcnRCZWZvcmUgPSBOb2RlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU7XG4gICAgICBmdW5jdGlvbiBpbnNlcnRCZWZvcmUobmV3Tm9kZSwgcmVmTm9kZSkge1xuICAgICAgICBpZiAobmV3Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgICAgICB2YXIgY2hpbGQ7XG4gICAgICAgICAgd2hpbGUgKChjaGlsZCA9IG5ld05vZGUuZmlyc3RDaGlsZCkpIHtcbiAgICAgICAgICAgIG9yaWdJbnNlcnRCZWZvcmUuY2FsbCh0aGlzLCBjaGlsZCwgcmVmTm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9yaWdJbnNlcnRCZWZvcmUuY2FsbCh0aGlzLCBuZXdOb2RlLCByZWZOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3Tm9kZTtcbiAgICAgIH1cbiAgICAgIE5vZGUucHJvdG90eXBlLmluc2VydEJlZm9yZSA9IGluc2VydEJlZm9yZTtcblxuICAgICAgdmFyIG9yaWdBcHBlbmRDaGlsZCA9IE5vZGUucHJvdG90eXBlLmFwcGVuZENoaWxkO1xuICAgICAgTm9kZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbiBhcHBlbmRDaGlsZChjaGlsZCkge1xuICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICAgICAgaW5zZXJ0QmVmb3JlLmNhbGwodGhpcywgY2hpbGQsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9yaWdBcHBlbmRDaGlsZC5jYWxsKHRoaXMsIGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9O1xuXG4gICAgICB2YXIgb3JpZ1JlbW92ZUNoaWxkID0gTm9kZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ7XG4gICAgICB2YXIgb3JpZ1JlcGxhY2VDaGlsZCA9IE5vZGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZDtcbiAgICAgIE5vZGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZCA9IGZ1bmN0aW9uIHJlcGxhY2VDaGlsZChuZXdDaGlsZCwgb2xkQ2hpbGQpIHtcbiAgICAgICAgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgICAgIGluc2VydEJlZm9yZS5jYWxsKHRoaXMsIG5ld0NoaWxkLCBvbGRDaGlsZCk7XG4gICAgICAgICAgb3JpZ1JlbW92ZUNoaWxkLmNhbGwodGhpcywgb2xkQ2hpbGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9yaWdSZXBsYWNlQ2hpbGQuY2FsbCh0aGlzLCBuZXdDaGlsZCwgb2xkQ2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvbGRDaGlsZDtcbiAgICAgIH07XG5cbiAgICAgIERvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50ID0gZnVuY3Rpb24gY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpIHtcbiAgICAgICAgdmFyIGZyYWcgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoJ2RmJyk7XG4gICAgICAgIGZyYWcuX19wcm90b19fID0gRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGU7XG4gICAgICAgIHJldHVybiBmcmFnO1xuICAgICAgfTtcblxuICAgICAgdmFyIG9yaWdJbXBvcnROb2RlID0gRG9jdW1lbnQucHJvdG90eXBlLmltcG9ydE5vZGU7XG4gICAgICBEb2N1bWVudC5wcm90b3R5cGUuaW1wb3J0Tm9kZSA9IGZ1bmN0aW9uIGltcG9ydE5vZGUoaW1wTm9kZSwgZGVlcCkge1xuICAgICAgICBkZWVwID0gZGVlcCB8fCBmYWxzZTtcbiAgICAgICAgdmFyIG5ld05vZGUgPSBvcmlnSW1wb3J0Tm9kZS5jYWxsKHRoaXMsIGltcE5vZGUsIGRlZXApO1xuICAgICAgICBpZiAoaW1wTm9kZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgICAgICBuZXdOb2RlLl9fcHJvdG9fXyA9IERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdOb2RlO1xuICAgICAgfTtcbiAgICB9KSgpO1xuICB9XG5cbiAgLy8gTk9URTogd2UgcmVseSBvbiB0aGlzIGNsb25lTm9kZSBub3QgY2F1c2luZyBlbGVtZW50IHVwZ3JhZGUuXG4gIC8vIFRoaXMgbWVhbnMgdGhpcyBwb2x5ZmlsbCBtdXN0IGxvYWQgYmVmb3JlIHRoZSBDRSBwb2x5ZmlsbCBhbmRcbiAgLy8gdGhpcyB3b3VsZCBuZWVkIHRvIGJlIHJlLXdvcmtlZCBpZiBhIGJyb3dzZXIgc3VwcG9ydHMgbmF0aXZlIENFXG4gIC8vIGJ1dCBub3QgPHRlbXBsYXRlPi5cbiAgdmFyIGNhcHR1cmVkQ2xvbmVOb2RlID0gTm9kZS5wcm90b3R5cGUuY2xvbmVOb2RlO1xuICB2YXIgY2FwdHVyZWRDcmVhdGVFbGVtZW50ID0gRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ7XG4gIHZhciBjYXB0dXJlZEltcG9ydE5vZGUgPSBEb2N1bWVudC5wcm90b3R5cGUuaW1wb3J0Tm9kZTtcbiAgdmFyIGNhcHR1cmVkUmVtb3ZlQ2hpbGQgPSBOb2RlLnByb3RvdHlwZS5yZW1vdmVDaGlsZDtcbiAgdmFyIGNhcHR1cmVkQXBwZW5kQ2hpbGQgPSBOb2RlLnByb3RvdHlwZS5hcHBlbmRDaGlsZDtcbiAgdmFyIGNhcHR1cmVkUmVwbGFjZUNoaWxkID0gTm9kZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkO1xuICB2YXIgY2FwdHVyZWRQYXJzZUZyb21TdHJpbmcgPSBET01QYXJzZXIucHJvdG90eXBlLnBhcnNlRnJvbVN0cmluZztcbiAgdmFyIGNhcHR1cmVkSFRNTEVsZW1lbnRJbm5lckhUTUwgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgIHdpbmRvdy5IVE1MRWxlbWVudC5wcm90b3R5cGUsXG4gICAgJ2lubmVySFRNTCdcbiAgKSB8fCB7XG4gICAgLyoqXG4gICAgICogQHRoaXMgeyFIVE1MRWxlbWVudH1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAgICovXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbm5lckhUTUw7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAdGhpcyB7IUhUTUxFbGVtZW50fVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHNldDogZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgIHRoaXMuaW5uZXJIVE1MID0gdGV4dDtcbiAgICB9LFxuICB9O1xuICB2YXIgY2FwdHVyZWRDaGlsZE5vZGVzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICB3aW5kb3cuTm9kZS5wcm90b3R5cGUsXG4gICAgJ2NoaWxkTm9kZXMnXG4gICkgfHwge1xuICAgIC8qKlxuICAgICAqIEB0aGlzIHshTm9kZX1cbiAgICAgKiBAcmV0dXJuIHshTm9kZUxpc3R9XG4gICAgICovXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzO1xuICAgIH0sXG4gIH07XG5cbiAgdmFyIGVsZW1lbnRRdWVyeVNlbGVjdG9yQWxsID0gRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbDtcbiAgdmFyIGRvY1F1ZXJ5U2VsZWN0b3JBbGwgPSBEb2N1bWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbDtcbiAgdmFyIGZyYWdRdWVyeVNlbGVjdG9yQWxsID0gRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbDtcblxuICB2YXIgc2NyaXB0U2VsZWN0b3IgPVxuICAgICdzY3JpcHQ6bm90KFt0eXBlXSksc2NyaXB0W3R5cGU9XCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0XCJdLHNjcmlwdFt0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCJdJztcblxuICBmdW5jdGlvbiBRU0Eobm9kZSwgc2VsZWN0b3IpIHtcbiAgICAvLyBJRSAxMSB0aHJvd3MgYSBTeW50YXhFcnJvciB3aXRoIGBzY3JpcHRTZWxlY3RvcmAgaWYgdGhlIG5vZGUgaGFzIG5vIGNoaWxkcmVuIGR1ZSB0byB0aGUgYDpub3QoW3R5cGVdKWAgc3ludGF4XG4gICAgaWYgKCFub2RlLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLkRPQ1VNRU5UX05PREU6XG4gICAgICAgIHJldHVybiBkb2NRdWVyeVNlbGVjdG9yQWxsLmNhbGwobm9kZSwgc2VsZWN0b3IpO1xuICAgICAgY2FzZSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6XG4gICAgICAgIHJldHVybiBmcmFnUXVlcnlTZWxlY3RvckFsbC5jYWxsKG5vZGUsIHNlbGVjdG9yKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBlbGVtZW50UXVlcnlTZWxlY3RvckFsbC5jYWxsKG5vZGUsIHNlbGVjdG9yKTtcbiAgICB9XG4gIH1cblxuICAvLyByZXR1cm5zIHRydWUgaWYgbmVzdGVkIHRlbXBsYXRlcyBjYW5ub3QgYmUgY2xvbmVkICh0aGV5IGNhbm5vdCBiZSBvblxuICAvLyBzb21lIGltcGwncyBsaWtlIFNhZmFyaSA4IGFuZCBFZGdlKVxuICAvLyBPUiBpZiBjbG9uaW5nIGEgZG9jdW1lbnQgZnJhZ21lbnQgZG9lcyBub3QgcmVzdWx0IGluIGEgZG9jdW1lbnQgZnJhZ21lbnRcbiAgdmFyIG5lZWRzQ2xvbmluZyA9IChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFuZWVkc1RlbXBsYXRlKSB7XG4gICAgICB2YXIgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgICB2YXIgdDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpO1xuICAgICAgdDIuY29udGVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4gICAgICB0LmNvbnRlbnQuYXBwZW5kQ2hpbGQodDIpO1xuICAgICAgdmFyIGNsb25lID0gdC5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBjbG9uZS5jb250ZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgIGNsb25lLmNvbnRlbnQuZmlyc3RDaGlsZC5jb250ZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgIGJyb2tlbkRvY0ZyYWdtZW50XG4gICAgICApO1xuICAgIH1cbiAgfSkoKTtcblxuICB2YXIgVEVNUExBVEVfVEFHID0gJ3RlbXBsYXRlJztcbiAgdmFyIFBvbHlmaWxsZWRIVE1MVGVtcGxhdGVFbGVtZW50ID0gZnVuY3Rpb24gKCkge307XG5cbiAgaWYgKG5lZWRzVGVtcGxhdGUpIHtcbiAgICB2YXIgY29udGVudERvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgndGVtcGxhdGUnKTtcbiAgICB2YXIgY2FuRGVjb3JhdGUgPSB0cnVlO1xuXG4gICAgdmFyIHRlbXBsYXRlU3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHRlbXBsYXRlU3R5bGUudGV4dENvbnRlbnQgPSBURU1QTEFURV9UQUcgKyAne2Rpc3BsYXk6bm9uZTt9JztcblxuICAgIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZDtcbiAgICBoZWFkLmluc2VydEJlZm9yZSh0ZW1wbGF0ZVN0eWxlLCBoZWFkLmZpcnN0RWxlbWVudENoaWxkKTtcblxuICAgIC8qKlxuICAgICAgUHJvdmlkZXMgYSBtaW5pbWFsIHNoaW0gZm9yIHRoZSA8dGVtcGxhdGU+IGVsZW1lbnQuXG4gICAgKi9cbiAgICBQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFxuICAgICAgSFRNTEVsZW1lbnQucHJvdG90eXBlXG4gICAgKTtcblxuICAgIC8vIGlmIGVsZW1lbnRzIGRvIG5vdCBoYXZlIGBpbm5lckhUTUxgIG9uIGluc3RhbmNlcywgdGhlblxuICAgIC8vIHRlbXBsYXRlcyBjYW4gYmUgcGF0Y2hlZCBieSBzd2l6emxpbmcgdGhlaXIgcHJvdG90eXBlcy5cbiAgICB2YXIgY2FuUHJvdG9QYXRjaCA9ICFkb2N1bWVudFxuICAgICAgLmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgICAuaGFzT3duUHJvcGVydHkoJ2lubmVySFRNTCcpO1xuXG4gICAgLyoqXG4gICAgICBUaGUgYGRlY29yYXRlYCBtZXRob2QgbW92ZXMgZWxlbWVudCBjaGlsZHJlbiB0byB0aGUgdGVtcGxhdGUncyBgY29udGVudGAuXG4gICAgICBOT1RFOiB0aGVyZSBpcyBubyBzdXBwb3J0IGZvciBkeW5hbWljYWxseSBhZGRpbmcgZWxlbWVudHMgdG8gdGVtcGxhdGVzLlxuICAgICovXG4gICAgUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUgPSBmdW5jdGlvbiAodGVtcGxhdGUpIHtcbiAgICAgIC8vIGlmIHRoZSB0ZW1wbGF0ZSBpcyBkZWNvcmF0ZWQgb3Igbm90IGluIEhUTUwgbmFtZXNwYWNlLCByZXR1cm4gZmFzdFxuICAgICAgaWYgKFxuICAgICAgICB0ZW1wbGF0ZS5jb250ZW50IHx8XG4gICAgICAgIHRlbXBsYXRlLm5hbWVzcGFjZVVSSSAhPT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSSVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRlbXBsYXRlLmNvbnRlbnQgPSBjb250ZW50RG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgIHZhciBjaGlsZDtcbiAgICAgIHdoaWxlICgoY2hpbGQgPSB0ZW1wbGF0ZS5maXJzdENoaWxkKSkge1xuICAgICAgICBjYXB0dXJlZEFwcGVuZENoaWxkLmNhbGwodGVtcGxhdGUuY29udGVudCwgY2hpbGQpO1xuICAgICAgfVxuICAgICAgLy8gTk9URTogcHJlZmVyIHByb3RvdHlwZSBwYXRjaGluZyBmb3IgcGVyZm9ybWFuY2UgYW5kXG4gICAgICAvLyBiZWNhdXNlIG9uIHNvbWUgYnJvd3NlcnMgKElFMTEpLCByZS1kZWZpbmluZyBgaW5uZXJIVE1MYFxuICAgICAgLy8gY2FuIHJlc3VsdCBpbiBpbnRlcm1pdHRlbnQgZXJyb3JzLlxuICAgICAgaWYgKGNhblByb3RvUGF0Y2gpIHtcbiAgICAgICAgdGVtcGxhdGUuX19wcm90b19fID0gUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQucHJvdG90eXBlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGVtcGxhdGUuY2xvbmVOb2RlID0gZnVuY3Rpb24gKGRlZXApIHtcbiAgICAgICAgICByZXR1cm4gUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuX2Nsb25lTm9kZSh0aGlzLCBkZWVwKTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gYWRkIGlubmVySFRNTCB0byB0ZW1wbGF0ZSwgaWYgcG9zc2libGVcbiAgICAgICAgLy8gTm90ZTogdGhpcyB0aHJvd3Mgb24gU2FmYXJpIDdcbiAgICAgICAgaWYgKGNhbkRlY29yYXRlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRlZmluZUlubmVySFRNTCh0ZW1wbGF0ZSk7XG4gICAgICAgICAgICBkZWZpbmVPdXRlckhUTUwodGVtcGxhdGUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY2FuRGVjb3JhdGUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGJvb3RzdHJhcCByZWN1cnNpdmVseVxuICAgICAgUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuYm9vdHN0cmFwKHRlbXBsYXRlLmNvbnRlbnQpO1xuICAgIH07XG5cbiAgICAvLyBUYWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L2Jsb2IvNzNkN2U2MjU5YzYzYWM0NWY0MmM2NTkzZGE4YzI3OTZjNmNlOTI4MS9zcmMvbWFuaXB1bGF0aW9uL3dyYXBNYXAuanNcbiAgICB2YXIgdG9wTGV2ZWxXcmFwcGluZ01hcCA9IHtcbiAgICAgICdvcHRpb24nOiBbJ3NlbGVjdCddLFxuICAgICAgJ3RoZWFkJzogWyd0YWJsZSddLFxuICAgICAgJ2NvbCc6IFsnY29sZ3JvdXAnLCAndGFibGUnXSxcbiAgICAgICd0cic6IFsndGJvZHknLCAndGFibGUnXSxcbiAgICAgICd0aCc6IFsndHInLCAndGJvZHknLCAndGFibGUnXSxcbiAgICAgICd0ZCc6IFsndHInLCAndGJvZHknLCAndGFibGUnXSxcbiAgICB9O1xuXG4gICAgdmFyIGdldFRhZ05hbWUgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgLy8gVGFrZW4gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iLzczZDdlNjI1OWM2M2FjNDVmNDJjNjU5M2RhOGMyNzk2YzZjZTkyODEvc3JjL21hbmlwdWxhdGlvbi92YXIvcnRhZ05hbWUuanNcbiAgICAgIHJldHVybiAoLzwoW2Etel1bXi9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKykvaS5leGVjKHRleHQpIHx8IFtcbiAgICAgICAgJycsXG4gICAgICAgICcnLFxuICAgICAgXSlbMV0udG9Mb3dlckNhc2UoKTtcbiAgICB9O1xuXG4gICAgdmFyIGRlZmluZUlubmVySFRNTCA9IGZ1bmN0aW9uIGRlZmluZUlubmVySFRNTChvYmopIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosICdpbm5lckhUTUwnLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBnZXRJbm5lckhUTUwodGhpcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgICAvLyBGb3IgSUUxMSwgd3JhcCB0aGUgdGV4dCBpbiB0aGUgY29ycmVjdCAodGFibGUpIGNvbnRleHRcbiAgICAgICAgICB2YXIgd3JhcCA9IHRvcExldmVsV3JhcHBpbmdNYXBbZ2V0VGFnTmFtZSh0ZXh0KV07XG4gICAgICAgICAgaWYgKHdyYXApIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd3JhcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICB0ZXh0ID0gJzwnICsgd3JhcFtpXSArICc+JyArIHRleHQgKyAnPC8nICsgd3JhcFtpXSArICc+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGVudERvYy5ib2R5LmlubmVySFRNTCA9IHRleHQ7XG4gICAgICAgICAgUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuYm9vdHN0cmFwKGNvbnRlbnREb2MpO1xuICAgICAgICAgIHdoaWxlICh0aGlzLmNvbnRlbnQuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgY2FwdHVyZWRSZW1vdmVDaGlsZC5jYWxsKHRoaXMuY29udGVudCwgdGhpcy5jb250ZW50LmZpcnN0Q2hpbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgYm9keSA9IGNvbnRlbnREb2MuYm9keTtcbiAgICAgICAgICAvLyBJZiB3ZSBoYWQgd3JhcHBlZCwgZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIG5vZGVcbiAgICAgICAgICBpZiAod3JhcCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB3cmFwLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgIGJvZHkgPSBib2R5Lmxhc3RDaGlsZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKGJvZHkuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgY2FwdHVyZWRBcHBlbmRDaGlsZC5jYWxsKHRoaXMuY29udGVudCwgYm9keS5maXJzdENoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB2YXIgZGVmaW5lT3V0ZXJIVE1MID0gZnVuY3Rpb24gZGVmaW5lT3V0ZXJIVE1MKG9iaikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgJ291dGVySFRNTCcsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGA8JHtURU1QTEFURV9UQUd9PiR7dGhpcy5pbm5lckhUTUx9PC8ke1RFTVBMQVRFX1RBR30+YDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoaW5uZXJIVE1MKSB7XG4gICAgICAgICAgaWYgKHRoaXMucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgY29udGVudERvYy5ib2R5LmlubmVySFRNTCA9IGlubmVySFRNTDtcbiAgICAgICAgICAgIHZhciBkb2NGcmFnID0gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgICAgIHdoaWxlIChjb250ZW50RG9jLmJvZHkuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICBjYXB0dXJlZEFwcGVuZENoaWxkLmNhbGwoZG9jRnJhZywgY29udGVudERvYy5ib2R5LmZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FwdHVyZWRSZXBsYWNlQ2hpbGQuY2FsbCh0aGlzLnBhcmVudE5vZGUsIGRvY0ZyYWcsIHRoaXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIFwiRmFpbGVkIHRvIHNldCB0aGUgJ291dGVySFRNTCcgcHJvcGVydHkgb24gJ0VsZW1lbnQnOiBUaGlzIGVsZW1lbnQgaGFzIG5vIHBhcmVudCBub2RlLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGRlZmluZUlubmVySFRNTChQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIGRlZmluZU91dGVySFRNTChQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUpO1xuXG4gICAgLyoqXG4gICAgICBUaGUgYGJvb3RzdHJhcGAgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGFuZCBcImZpeGVzXCIgYWxsXG4gICAgICA8dGVtcGxhdGU+IGVsZW1lbnRzIGluIHRoZSBkb2N1bWVudCByZWZlcmVuY2VkIGJ5IHRoZSBgZG9jYCBhcmd1bWVudC5cbiAgICAqL1xuICAgIFBvbHlmaWxsZWRIVE1MVGVtcGxhdGVFbGVtZW50LmJvb3RzdHJhcCA9IGZ1bmN0aW9uIGJvb3RzdHJhcChkb2MpIHtcbiAgICAgIHZhciB0ZW1wbGF0ZXMgPSBRU0EoZG9jLCBURU1QTEFURV9UQUcpO1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGkgPSAwLCBsID0gdGVtcGxhdGVzLmxlbmd0aCwgdDtcbiAgICAgICAgaSA8IGwgJiYgKHQgPSB0ZW1wbGF0ZXNbaV0pO1xuICAgICAgICBpKytcbiAgICAgICkge1xuICAgICAgICBQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudC5kZWNvcmF0ZSh0KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gYXV0by1ib290c3RyYXBwaW5nIGZvciBtYWluIGRvY3VtZW50XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFBvbHlmaWxsZWRIVE1MVGVtcGxhdGVFbGVtZW50LmJvb3RzdHJhcChkb2N1bWVudCk7XG4gICAgfSk7XG5cbiAgICAvLyBQYXRjaCBkb2N1bWVudC5jcmVhdGVFbGVtZW50IHRvIGVuc3VyZSBuZXdseSBjcmVhdGVkIHRlbXBsYXRlcyBoYXZlIGNvbnRlbnRcbiAgICBEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoKSB7XG4gICAgICB2YXIgZWwgPSBjYXB0dXJlZENyZWF0ZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIGlmIChlbC5sb2NhbE5hbWUgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUoZWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVsO1xuICAgIH07XG5cbiAgICBET01QYXJzZXIucHJvdG90eXBlLnBhcnNlRnJvbVN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBlbCA9IGNhcHR1cmVkUGFyc2VGcm9tU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICBQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudC5ib290c3RyYXAoZWwpO1xuICAgICAgcmV0dXJuIGVsO1xuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEVsZW1lbnQucHJvdG90eXBlLCAnaW5uZXJIVE1MJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbm5lckhUTUwodGhpcyk7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICBjYXB0dXJlZEhUTUxFbGVtZW50SW5uZXJIVE1MLnNldC5jYWxsKHRoaXMsIHRleHQpO1xuICAgICAgICBQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudC5ib290c3RyYXAodGhpcyk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RoZS1lbmQuaHRtbCNlc2NhcGluZ1N0cmluZ1xuICAgIHZhciBlc2NhcGVBdHRyUmVnRXhwID0gL1smXFx1MDBBMFwiXS9nO1xuICAgIHZhciBlc2NhcGVEYXRhUmVnRXhwID0gL1smXFx1MDBBMDw+XS9nO1xuXG4gICAgdmFyIGVzY2FwZVJlcGxhY2UgPSBmdW5jdGlvbiAoYykge1xuICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgIGNhc2UgJyYnOlxuICAgICAgICAgIHJldHVybiAnJmFtcDsnO1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICByZXR1cm4gJyZsdDsnO1xuICAgICAgICBjYXNlICc+JzpcbiAgICAgICAgICByZXR1cm4gJyZndDsnO1xuICAgICAgICBjYXNlICdcIic6XG4gICAgICAgICAgcmV0dXJuICcmcXVvdDsnO1xuICAgICAgICBjYXNlICdcXHUwMEEwJzpcbiAgICAgICAgICByZXR1cm4gJyZuYnNwOyc7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBlc2NhcGVBdHRyID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLnJlcGxhY2UoZXNjYXBlQXR0clJlZ0V4cCwgZXNjYXBlUmVwbGFjZSk7XG4gICAgfTtcblxuICAgIHZhciBlc2NhcGVEYXRhID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLnJlcGxhY2UoZXNjYXBlRGF0YVJlZ0V4cCwgZXNjYXBlUmVwbGFjZSk7XG4gICAgfTtcblxuICAgIHZhciBtYWtlU2V0ID0gZnVuY3Rpb24gKGFycikge1xuICAgICAgdmFyIHNldCA9IHt9O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc2V0W2FycltpXV0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldDtcbiAgICB9O1xuXG4gICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jdm9pZC1lbGVtZW50c1xuICAgIHZhciB2b2lkRWxlbWVudHMgPSBtYWtlU2V0KFtcbiAgICAgICdhcmVhJyxcbiAgICAgICdiYXNlJyxcbiAgICAgICdicicsXG4gICAgICAnY29sJyxcbiAgICAgICdjb21tYW5kJyxcbiAgICAgICdlbWJlZCcsXG4gICAgICAnaHInLFxuICAgICAgJ2ltZycsXG4gICAgICAnaW5wdXQnLFxuICAgICAgJ2tleWdlbicsXG4gICAgICAnbGluaycsXG4gICAgICAnbWV0YScsXG4gICAgICAncGFyYW0nLFxuICAgICAgJ3NvdXJjZScsXG4gICAgICAndHJhY2snLFxuICAgICAgJ3dicicsXG4gICAgXSk7XG5cbiAgICB2YXIgcGxhaW50ZXh0UGFyZW50cyA9IG1ha2VTZXQoW1xuICAgICAgJ3N0eWxlJyxcbiAgICAgICdzY3JpcHQnLFxuICAgICAgJ3htcCcsXG4gICAgICAnaWZyYW1lJyxcbiAgICAgICdub2VtYmVkJyxcbiAgICAgICdub2ZyYW1lcycsXG4gICAgICAncGxhaW50ZXh0JyxcbiAgICAgICdub3NjcmlwdCcsXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICAgKiBAcGFyYW0ge05vZGV9IHBhcmVudE5vZGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2tcbiAgICAgKi9cbiAgICB2YXIgZ2V0T3V0ZXJIVE1MID0gZnVuY3Rpb24gKG5vZGUsIHBhcmVudE5vZGUsIGNhbGxiYWNrKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToge1xuICAgICAgICAgIHZhciB0YWdOYW1lID0gbm9kZS5sb2NhbE5hbWU7XG4gICAgICAgICAgdmFyIHMgPSAnPCcgKyB0YWdOYW1lO1xuICAgICAgICAgIHZhciBhdHRycyA9IG5vZGUuYXR0cmlidXRlcztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgYXR0cjsgKGF0dHIgPSBhdHRyc1tpXSk7IGkrKykge1xuICAgICAgICAgICAgcyArPSAnICcgKyBhdHRyLm5hbWUgKyAnPVwiJyArIGVzY2FwZUF0dHIoYXR0ci52YWx1ZSkgKyAnXCInO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzICs9ICc+JztcbiAgICAgICAgICBpZiAodm9pZEVsZW1lbnRzW3RhZ05hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gcztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHMgKyBnZXRJbm5lckhUTUwobm9kZSwgY2FsbGJhY2spICsgJzwvJyArIHRhZ05hbWUgKyAnPic7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERToge1xuICAgICAgICAgIHZhciBkYXRhID0gLyoqIEB0eXBlIHtUZXh0fSAqLyAobm9kZSkuZGF0YTtcbiAgICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiBwbGFpbnRleHRQYXJlbnRzW3BhcmVudE5vZGUubG9jYWxOYW1lXSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBlc2NhcGVEYXRhKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTm9kZS5DT01NRU5UX05PREU6IHtcbiAgICAgICAgICByZXR1cm4gJzwhLS0nICsgLyoqIEB0eXBlIHtDb21tZW50fSAqLyAobm9kZSkuZGF0YSArICctLT4nO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICB3aW5kb3cuY29uc29sZS5lcnJvcihub2RlKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFja1xuICAgICAqL1xuICAgIHZhciBnZXRJbm5lckhUTUwgPSBmdW5jdGlvbiAobm9kZSwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChub2RlLmxvY2FsTmFtZSA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICBub2RlID0gLyoqIEB0eXBlIHtIVE1MVGVtcGxhdGVFbGVtZW50fSAqLyAobm9kZSkuY29udGVudDtcbiAgICAgIH1cbiAgICAgIHZhciBzID0gJyc7XG4gICAgICB2YXIgYyQgPSBjYWxsYmFjayA/IGNhbGxiYWNrKG5vZGUpIDogY2FwdHVyZWRDaGlsZE5vZGVzLmdldC5jYWxsKG5vZGUpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjJC5sZW5ndGgsIGNoaWxkOyBpIDwgbCAmJiAoY2hpbGQgPSBjJFtpXSk7IGkrKykge1xuICAgICAgICBzICs9IGdldE91dGVySFRNTChjaGlsZCwgbm9kZSwgY2FsbGJhY2spO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHM7XG4gICAgfTtcbiAgfVxuXG4gIC8vIG1ha2UgY2xvbmluZy9pbXBvcnRpbmcgd29yayFcbiAgaWYgKG5lZWRzVGVtcGxhdGUgfHwgbmVlZHNDbG9uaW5nKSB7XG4gICAgUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuX2Nsb25lTm9kZSA9IGZ1bmN0aW9uIF9jbG9uZU5vZGUoXG4gICAgICB0ZW1wbGF0ZSxcbiAgICAgIGRlZXBcbiAgICApIHtcbiAgICAgIHZhciBjbG9uZSA9IGNhcHR1cmVkQ2xvbmVOb2RlLmNhbGwodGVtcGxhdGUsIGZhbHNlKTtcbiAgICAgIC8vIE5PVEU6IGRlY29yYXRlIGRvZXNuJ3QgYXV0by1maXggY2hpbGRyZW4gYmVjYXVzZSB0aGV5IGFyZSBhbHJlYWR5XG4gICAgICAvLyBkZWNvcmF0ZWQgc28gdGhleSBuZWVkIHNwZWNpYWwgY2xvbmUgZml4dXAuXG4gICAgICBpZiAodGhpcy5kZWNvcmF0ZSkge1xuICAgICAgICB0aGlzLmRlY29yYXRlKGNsb25lKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWVwKSB7XG4gICAgICAgIC8vIE5PVEU6IHVzZSBuYXRpdmUgY2xvbmUgbm9kZSB0byBtYWtlIHN1cmUgQ0UncyB3cmFwcGVkXG4gICAgICAgIC8vIGNsb25lTm9kZSBkb2VzIG5vdCBjYXVzZSBlbGVtZW50cyB0byB1cGdyYWRlLlxuICAgICAgICBjYXB0dXJlZEFwcGVuZENoaWxkLmNhbGwoXG4gICAgICAgICAgY2xvbmUuY29udGVudCxcbiAgICAgICAgICBjYXB0dXJlZENsb25lTm9kZS5jYWxsKHRlbXBsYXRlLmNvbnRlbnQsIHRydWUpXG4gICAgICAgICk7XG4gICAgICAgIC8vIG5vdyBlbnN1cmUgbmVzdGVkIHRlbXBsYXRlcyBhcmUgY2xvbmVkIGNvcnJlY3RseS5cbiAgICAgICAgZml4Q2xvbmVkRG9tKGNsb25lLmNvbnRlbnQsIHRlbXBsYXRlLmNvbnRlbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH07XG5cbiAgICAvLyBHaXZlbiBhIHNvdXJjZSBhbmQgY2xvbmVkIHN1YnRyZWUsIGZpbmQgPHRlbXBsYXRlPidzIGluIHRoZSBjbG9uZWRcbiAgICAvLyBzdWJ0cmVlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCBjbG9uZWQgPHRlbXBsYXRlPidzIGZyb20gc291cmNlLlxuICAgIC8vIFdlIG11c3QgZG8gdGhpcyBiZWNhdXNlIG9ubHkgdGhlIHNvdXJjZSB0ZW1wbGF0ZXMgaGF2ZSBwcm9wZXIgLmNvbnRlbnQuXG4gICAgdmFyIGZpeENsb25lZERvbSA9IGZ1bmN0aW9uIGZpeENsb25lZERvbShjbG9uZSwgc291cmNlKSB7XG4gICAgICAvLyBkbyBub3RoaW5nIGlmIGNsb25lZCBub2RlIGlzIG5vdCBhbiBlbGVtZW50XG4gICAgICBpZiAoIXNvdXJjZS5xdWVyeVNlbGVjdG9yQWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIHRoZXNlIHR3byBsaXN0cyBzaG91bGQgYmUgY29pbmNpZGVudFxuICAgICAgdmFyIHMkID0gUVNBKHNvdXJjZSwgVEVNUExBVEVfVEFHKTtcbiAgICAgIGlmIChzJC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIHQkID0gUVNBKGNsb25lLCBURU1QTEFURV9UQUcpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0JC5sZW5ndGgsIHQsIHM7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgcyA9IHMkW2ldO1xuICAgICAgICB0ID0gdCRbaV07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudCAmJlxuICAgICAgICAgIFBvbHlmaWxsZWRIVE1MVGVtcGxhdGVFbGVtZW50LmRlY29yYXRlXG4gICAgICAgICkge1xuICAgICAgICAgIFBvbHlmaWxsZWRIVE1MVGVtcGxhdGVFbGVtZW50LmRlY29yYXRlKHMpO1xuICAgICAgICB9XG4gICAgICAgIGNhcHR1cmVkUmVwbGFjZUNoaWxkLmNhbGwodC5wYXJlbnROb2RlLCBjbG9uZU5vZGUuY2FsbChzLCB0cnVlKSwgdCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIG1ha2Ugc3VyZSBzY3JpcHRzIGluc2lkZSBvZiBhIGNsb25lZCB0ZW1wbGF0ZSBhcmUgZXhlY3V0YWJsZVxuICAgIHZhciBmaXhDbG9uZWRTY3JpcHRzID0gZnVuY3Rpb24gZml4Q2xvbmVkU2NyaXB0cyhmcmFnbWVudCkge1xuICAgICAgdmFyIHNjcmlwdHMgPSBRU0EoZnJhZ21lbnQsIHNjcmlwdFNlbGVjdG9yKTtcbiAgICAgIGZvciAodmFyIG5zLCBzLCBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcyA9IHNjcmlwdHNbaV07XG4gICAgICAgIG5zID0gY2FwdHVyZWRDcmVhdGVFbGVtZW50LmNhbGwoZG9jdW1lbnQsICdzY3JpcHQnKTtcbiAgICAgICAgbnMudGV4dENvbnRlbnQgPSBzLnRleHRDb250ZW50O1xuICAgICAgICB2YXIgYXR0cnMgPSBzLmF0dHJpYnV0ZXM7XG4gICAgICAgIGZvciAodmFyIGFpID0gMCwgYTsgYWkgPCBhdHRycy5sZW5ndGg7IGFpKyspIHtcbiAgICAgICAgICBhID0gYXR0cnNbYWldO1xuICAgICAgICAgIG5zLnNldEF0dHJpYnV0ZShhLm5hbWUsIGEudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNhcHR1cmVkUmVwbGFjZUNoaWxkLmNhbGwocy5wYXJlbnROb2RlLCBucywgcyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIG92ZXJyaWRlIGFsbCBjbG9uaW5nIHRvIGZpeCB0aGUgY2xvbmVkIHN1YnRyZWUgdG8gY29udGFpbiBwcm9wZXJseVxuICAgIC8vIGNsb25lZCB0ZW1wbGF0ZXMuXG4gICAgdmFyIGNsb25lTm9kZSA9IChOb2RlLnByb3RvdHlwZS5jbG9uZU5vZGUgPSBmdW5jdGlvbiBjbG9uZU5vZGUoZGVlcCkge1xuICAgICAgdmFyIGRvbTtcbiAgICAgIC8vIHdvcmthcm91bmQgZm9yIEVkZ2UgYnVnIGNsb25pbmcgZG9jdW1lbnRGcmFnbWVudHNcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1pY3Jvc29mdC5jb20vZW4tdXMvbWljcm9zb2Z0LWVkZ2UvcGxhdGZvcm0vaXNzdWVzLzg2MTk2NDYvXG4gICAgICBpZiAoXG4gICAgICAgICFuZWVkc0RvY0ZyYWcgJiZcbiAgICAgICAgYnJva2VuRG9jRnJhZ21lbnQgJiZcbiAgICAgICAgdGhpcyBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnRcbiAgICAgICkge1xuICAgICAgICBpZiAoIWRlZXApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb20gPSBpbXBvcnROb2RlLmNhbGwodGhpcy5vd25lckRvY3VtZW50LCB0aGlzLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgICAgdGhpcy5sb2NhbE5hbWUgPT09IFRFTVBMQVRFX1RBRyAmJlxuICAgICAgICB0aGlzLm5hbWVzcGFjZVVSSSA9PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJXG4gICAgICApIHtcbiAgICAgICAgZG9tID0gUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuX2Nsb25lTm9kZSh0aGlzLCBkZWVwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvbSA9IGNhcHR1cmVkQ2xvbmVOb2RlLmNhbGwodGhpcywgZGVlcCk7XG4gICAgICB9XG4gICAgICAvLyB0ZW1wbGF0ZS5jb250ZW50IGlzIGNsb25lZCBpZmYgYGRlZXBgLlxuICAgICAgaWYgKGRlZXApIHtcbiAgICAgICAgZml4Q2xvbmVkRG9tKGRvbSwgdGhpcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZG9tO1xuICAgIH0pO1xuXG4gICAgLy8gTk9URTogd2UgYXJlIGNsb25pbmcgaW5zdGVhZCBvZiBpbXBvcnRpbmcgPHRlbXBsYXRlPidzLlxuICAgIC8vIEhvd2V2ZXIsIHRoZSBvd25lckRvY3VtZW50IG9mIHRoZSBjbG9uZWQgdGVtcGxhdGUgd2lsbCBiZSBjb3JyZWN0IVxuICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGUgbmF0aXZlIGltcG9ydCBub2RlIGNyZWF0ZXMgdGhlIHJpZ2h0IGRvY3VtZW50IG93bmVkXG4gICAgLy8gc3VidHJlZSBhbmQgYGZpeENsb25lZERvbWAgaW5zZXJ0cyBjbG9uZWQgdGVtcGxhdGVzIGludG8gdGhpcyBzdWJ0cmVlLFxuICAgIC8vIHRodXMgdXBkYXRpbmcgdGhlIG93bmVyIGRvYy5cbiAgICB2YXIgaW1wb3J0Tm9kZSA9IChEb2N1bWVudC5wcm90b3R5cGUuaW1wb3J0Tm9kZSA9IGZ1bmN0aW9uIGltcG9ydE5vZGUoXG4gICAgICBlbGVtZW50LFxuICAgICAgZGVlcFxuICAgICkge1xuICAgICAgZGVlcCA9IGRlZXAgfHwgZmFsc2U7XG4gICAgICBpZiAoZWxlbWVudC5sb2NhbE5hbWUgPT09IFRFTVBMQVRFX1RBRykge1xuICAgICAgICByZXR1cm4gUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuX2Nsb25lTm9kZShlbGVtZW50LCBkZWVwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBkb20gPSBjYXB0dXJlZEltcG9ydE5vZGUuY2FsbCh0aGlzLCBlbGVtZW50LCBkZWVwKTtcbiAgICAgICAgaWYgKGRlZXApIHtcbiAgICAgICAgICBmaXhDbG9uZWREb20oZG9tLCBlbGVtZW50KTtcbiAgICAgICAgICBmaXhDbG9uZWRTY3JpcHRzKGRvbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRvbTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChuZWVkc1RlbXBsYXRlKSB7XG4gICAgd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQgPSBQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudDtcbiAgfVxufSkoKTtcbiIsICIoZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcIk11dGF0aW9uT2JzZXJ2ZXJcImluIHNlbGZcbikpIHtcbi8vIE11dGF0aW9uT2JzZXJ2ZXJcbi8qIVxuICogU2hpbSBmb3IgTXV0YXRpb25PYnNlcnZlciBpbnRlcmZhY2VcbiAqIEF1dGhvcjogR3JhZW1lIFllYXRlcyAoZ2l0aHViLmNvbS9tZWdhd2FjKVxuICogUmVwb3NpdG9yeTogaHR0cHM6Ly9naXRodWIuY29tL21lZ2F3YWMvTXV0YXRpb25PYnNlcnZlci5qc1xuICogTGljZW5zZTogV1RGUEwgVjIsIDIwMDQgKHd0ZnBsLm5ldCkuXG4gKiBUaG91Z2ggY3JlZGl0IGFuZCBzdGFyaW5nIHRoZSByZXBvIHdpbGwgbWFrZSBtZSBmZWVsIHByZXR0eSwgeW91IGNhbiBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSBhcyB5b3UgcGxlYXNlLlxuICogQXR0ZW1wdHMgdG8gZm9sbG93IHNwZWMgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9kb20vI211dGF0aW9uLW9ic2VydmVycykgYXMgY2xvc2VseSBhcyBwb3NzaWJsZSBmb3IgbmF0aXZlIGphdmFzY3JpcHRcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L3dlYmtpdC9ibG9iL21hc3Rlci9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlci5jcHAgZm9yIGN1cnJlbnQgd2Via2l0IHNvdXJjZSBjKysgaW1wbGVtZW50YXRpb25cbiAqL1xuXG4vKipcbiAqIHByZWZpeCBidWdzOlxuICAgIC0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1MTYxXG4gICAgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03NDk5MjBcbiAqIERvbid0IHVzZSBXZWJLaXRNdXRhdGlvbk9ic2VydmVyIGFzIFNhZmFyaSAoNi4wLjUtNi4xKSB1c2UgYSBidWdneSBpbXBsZW1lbnRhdGlvblxuKi9cbmlmICghd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIpIHtcbiAgICB3aW5kb3cuTXV0YXRpb25PYnNlcnZlciA9IChmdW5jdGlvbiAodW5kZWZpbmVkKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbihBcnJheS48TXV0YXRpb25SZWNvcmQ+LCBNdXRhdGlvbk9ic2VydmVyKX0gbGlzdGVuZXJcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBNdXRhdGlvbk9ic2VydmVyKGxpc3RlbmVyKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEB0eXBlIHtBcnJheS48T2JqZWN0Pn1cbiAgICAgICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuX3dhdGNoZWQgPSBbXTtcbiAgICAgICAgICAgIC8qKiBAcHJpdmF0ZSAqL1xuICAgICAgICAgICAgdGhpcy5fbGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTdGFydCBhIHJlY3Vyc2l2ZSB0aW1lb3V0IGZ1bmN0aW9uIHRvIGNoZWNrIGFsbCBpdGVtcyBiZWluZyBvYnNlcnZlZCBmb3IgbXV0YXRpb25zXG4gICAgICAgICAqIEB0eXBlIHtNdXRhdGlvbk9ic2VydmVyfSBvYnNlcnZlclxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gc3RhcnRNdXRhdGlvbkNoZWNrZXIob2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIChmdW5jdGlvbiBjaGVjaygpIHtcbiAgICAgICAgICAgICAgICB2YXIgbXV0YXRpb25zID0gb2JzZXJ2ZXIudGFrZVJlY29yZHMoKTtcblxuICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbnMubGVuZ3RoKSB7IC8vIGZpcmUgYXdheVxuICAgICAgICAgICAgICAgICAgICAvLyBjYWxsaW5nIHRoZSBsaXN0ZW5lciB3aXRoIGNvbnRleHQgaXMgbm90IHNwZWMgYnV0IGN1cnJlbnRseSBjb25zaXN0ZW50IHdpdGggRkYgYW5kIFdlYktpdFxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5fbGlzdGVuZXIobXV0YXRpb25zLCBvYnNlcnZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qKiBAcHJpdmF0ZSAqL1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLl90aW1lb3V0ID0gc2V0VGltZW91dChjaGVjaywgTXV0YXRpb25PYnNlcnZlci5fcGVyaW9kKTtcbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogUGVyaW9kIHRvIGNoZWNrIGZvciBtdXRhdGlvbnMgKH4zMiB0aW1lcy9zZWMpXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgICAqIEBleHBvc2VcbiAgICAgICAgICovXG4gICAgICAgIE11dGF0aW9uT2JzZXJ2ZXIuX3BlcmlvZCA9IDMwIC8qbXMrcnVudGltZSovO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFeHBvc2VkIEFQSVxuICAgICAgICAgKiBAZXhwb3NlXG4gICAgICAgICAqIEBmaW5hbFxuICAgICAgICAgKi9cbiAgICAgICAgTXV0YXRpb25PYnNlcnZlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1tdXRhdGlvbm9ic2VydmVyLW9ic2VydmVcbiAgICAgICAgICAgICAqIG5vdCBnb2luZyB0byB0aHJvdyBoZXJlIGJ1dCBnb2luZyB0byBmb2xsb3cgdGhlIGN1cnJlbnQgc3BlYyBjb25maWcgc2V0c1xuICAgICAgICAgICAgICogQHBhcmFtIHtOb2RlfG51bGx9ICR0YXJnZXRcbiAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bGx9IGNvbmZpZyA6IE11dGF0aW9uT2JzZXJ2ZXJJbml0IGNvbmZpZ3VyYXRpb24gZGljdGlvbmFyeVxuICAgICAgICAgICAgICogQGV4cG9zZVxuICAgICAgICAgICAgICogQHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgb2JzZXJ2ZTogZnVuY3Rpb24gKCR0YXJnZXQsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIFVzaW5nIHNsaWdodGx5IGRpZmZlcmVudCBuYW1lcyBzbyBjbG9zdXJlIGNhbiBnbyBoYW1cbiAgICAgICAgICAgICAgICAgKiBAdHlwZSB7IU9iamVjdH0gOiBBIGN1c3RvbSBtdXRhdGlvbiBjb25maWdcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHI6ICEhKGNvbmZpZy5hdHRyaWJ1dGVzIHx8IGNvbmZpZy5hdHRyaWJ1dGVGaWx0ZXIgfHwgY29uZmlnLmF0dHJpYnV0ZU9sZFZhbHVlKSxcblxuICAgICAgICAgICAgICAgICAgICAvLyBzb21lIGJyb3dzZXJzIGVuZm9yY2UgdGhhdCBzdWJ0cmVlIG11c3QgYmUgc2V0IHdpdGggY2hpbGRMaXN0LCBhdHRyaWJ1dGVzIG9yIGNoYXJhY3RlckRhdGEuXG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGNhcmUgYXMgc3BlYyBkb2Vzbid0IHNwZWNpZnkgdGhpcyBydWxlLlxuICAgICAgICAgICAgICAgICAgICBraWRzOiAhIWNvbmZpZy5jaGlsZExpc3QsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NlbmRlbnRzOiAhIWNvbmZpZy5zdWJ0cmVlLFxuICAgICAgICAgICAgICAgICAgICBjaGFyRGF0YTogISEoY29uZmlnLmNoYXJhY3RlckRhdGEgfHwgY29uZmlnLmNoYXJhY3RlckRhdGFPbGRWYWx1ZSlcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIHdhdGNoZWQgPSB0aGlzLl93YXRjaGVkO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGFscmVhZHkgb2JzZXJ2ZWQgdGFyZ2V0IGVsZW1lbnQgZnJvbSBwb29sXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3YXRjaGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3YXRjaGVkW2ldLnRhciA9PT0gJHRhcmdldCkgd2F0Y2hlZC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5hdHRyaWJ1dGVGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIGNvbnZlcnRzIHRvIGEge2tleTogdHJ1ZX0gZGljdCBmb3IgZmFzdGVyIGxvb2t1cFxuICAgICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7T2JqZWN0LjxTdHJpbmcsQm9vbGVhbj59XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5hZmlsdGVyID0gcmVkdWNlKGNvbmZpZy5hdHRyaWJ1dGVGaWx0ZXIsIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhW2JdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICAgICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2F0Y2hlZC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdGFyOiAkdGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICBmbjogY3JlYXRlTXV0YXRpb25TZWFyY2hlcigkdGFyZ2V0LCBzZXR0aW5ncylcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vIHJlY29ubmVjdCBpZiBub3QgY29ubmVjdGVkXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl90aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0TXV0YXRpb25DaGVja2VyKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRmluZHMgbXV0YXRpb25zIHNpbmNlIGxhc3QgY2hlY2sgYW5kIGVtcHRpZXMgdGhlIFwicmVjb3JkIHF1ZXVlXCIgaS5lLiBtdXRhdGlvbnMgd2lsbCBvbmx5IGJlIGZvdW5kIG9uY2VcbiAgICAgICAgICAgICAqIEBleHBvc2VcbiAgICAgICAgICAgICAqIEByZXR1cm4ge0FycmF5LjxNdXRhdGlvblJlY29yZD59XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRha2VSZWNvcmRzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG11dGF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciB3YXRjaGVkID0gdGhpcy5fd2F0Y2hlZDtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd2F0Y2hlZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB3YXRjaGVkW2ldLmZuKG11dGF0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG11dGF0aW9ucztcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQGV4cG9zZVxuICAgICAgICAgICAgICogQHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZGlzY29ubmVjdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dhdGNoZWQgPSBbXTsgLy8gY2xlYXIgdGhlIHN0dWZmIGJlaW5nIG9ic2VydmVkXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpOyAvLyByZWFkeSBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uXG4gICAgICAgICAgICAgICAgLyoqIEBwcml2YXRlICovXG4gICAgICAgICAgICAgICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNpbXBsZSBNdXRhdGlvblJlY29yZCBwc2V1ZG9jbGFzcy4gTm8gbG9uZ2VyIGV4cG9zaW5nIGFzIGl0cyBub3QgZnVsbHkgY29tcGxpYW50XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gYSBNdXRhdGlvblJlY29yZFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gTXV0YXRpb25SZWNvcmQoZGF0YSkge1xuICAgICAgICAgICAgdmFyIHNldHRpbmdzID0geyAvLyB0ZWNobmljYWxseSB0aGVzZSBzaG91bGQgYmUgb24gcHJvdG8gc28gaGFzT3duUHJvcGVydHkgd2lsbCByZXR1cm4gZmFsc2UgZm9yIG5vbiBleHBsaWNpdGx5IHByb3BzXG4gICAgICAgICAgICAgICAgdHlwZTogbnVsbCxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgICAgICAgICAgYWRkZWROb2RlczogW10sXG4gICAgICAgICAgICAgICAgcmVtb3ZlZE5vZGVzOiBbXSxcbiAgICAgICAgICAgICAgICBwcmV2aW91c1NpYmxpbmc6IG51bGwsXG4gICAgICAgICAgICAgICAgbmV4dFNpYmxpbmc6IG51bGwsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lc3BhY2U6IG51bGwsXG4gICAgICAgICAgICAgICAgb2xkVmFsdWU6IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzKHNldHRpbmdzLCBwcm9wKSAmJiBkYXRhW3Byb3BdICE9PSB1bmRlZmluZWQpIHNldHRpbmdzW3Byb3BdID0gZGF0YVtwcm9wXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZXR0aW5ncztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgZnVuYyB0byBmaW5kIGFsbCB0aGUgbXV0YXRpb25zXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gJHRhcmdldFxuICAgICAgICAgKiBAcGFyYW0geyFPYmplY3R9IGNvbmZpZyA6IEEgY3VzdG9tIG11dGF0aW9uIGNvbmZpZ1xuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlTXV0YXRpb25TZWFyY2hlcigkdGFyZ2V0LCBjb25maWcpIHtcbiAgICAgICAgICAgIC8qKiB0eXBlIHtFbGVzdHVjdH0gKi9cbiAgICAgICAgICAgIHZhciAkb2xkc3RhdGUgPSBjbG9uZSgkdGFyZ2V0LCBjb25maWcpOyAvLyBjcmVhdGUgdGhlIGNsb25lZCBkYXRhc3RydWN0dXJlXG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogY29uc3VtZXMgYXJyYXkgb2YgbXV0YXRpb25zIHdlIGNhbiBwdXNoIHRvXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheS48TXV0YXRpb25SZWNvcmQ+fSBtdXRhdGlvbnNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgb2xlbiA9IG11dGF0aW9ucy5sZW5ndGgsIGRpcnR5O1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5jaGFyRGF0YSAmJiAkdGFyZ2V0Lm5vZGVUeXBlID09PSAzICYmICR0YXJnZXQubm9kZVZhbHVlICE9PSAkb2xkc3RhdGUuY2hhckRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgbXV0YXRpb25zLnB1c2gobmV3IE11dGF0aW9uUmVjb3JkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY2hhcmFjdGVyRGF0YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiAkdGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgb2xkVmFsdWU6ICRvbGRzdGF0ZS5jaGFyRGF0YVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQWxyaWdodCB3ZSBjaGVjayBiYXNlIGxldmVsIGNoYW5nZXMgaW4gYXR0cmlidXRlcy4uLiBlYXN5XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5hdHRyICYmICRvbGRzdGF0ZS5hdHRyKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbmRBdHRyaWJ1dGVNdXRhdGlvbnMobXV0YXRpb25zLCAkdGFyZ2V0LCAkb2xkc3RhdGUuYXR0ciwgY29uZmlnLmFmaWx0ZXIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGNoaWxkbGlzdCBvciBzdWJ0cmVlIGZvciBtdXRhdGlvbnNcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmtpZHMgfHwgY29uZmlnLmRlc2NlbmRlbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcnR5ID0gc2VhcmNoU3VidHJlZShtdXRhdGlvbnMsICR0YXJnZXQsICRvbGRzdGF0ZSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyByZWNsb25lIGRhdGEgc3RydWN0dXJlIGlmIHRoZXJlcyBjaGFuZ2VzXG4gICAgICAgICAgICAgICAgaWYgKGRpcnR5IHx8IG11dGF0aW9ucy5sZW5ndGggIT09IG9sZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqIHR5cGUge0VsZXN0dWN0fSAqL1xuICAgICAgICAgICAgICAgICAgICAkb2xkc3RhdGUgPSBjbG9uZSgkdGFyZ2V0LCBjb25maWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKiBhdHRyaWJ1dGVzICsgYXR0cmlidXRlRmlsdGVyIGhlbHBlcnMgKi9cblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgZW52aXJvbm1lbnQgaGFzIHRoZSBhdHRyaWJ1dGUgYnVnICgjNCkgd2hpY2ggY2F1c2VcbiAgICAgICAgLy8gZWxlbWVudC5hdHRyaWJ1dGVzLnN0eWxlIHRvIGFsd2F5cyBiZSBudWxsLlxuICAgICAgICB2YXIgaGFzQXR0cmlidXRlQnVnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlcIik7XG4gICAgICAgIGhhc0F0dHJpYnV0ZUJ1Zy5zdHlsZS50b3AgPSAwO1xuICAgICAgICBoYXNBdHRyaWJ1dGVCdWcgPSBoYXNBdHRyaWJ1dGVCdWcuYXR0cmlidXRlcy5zdHlsZS52YWx1ZSAhPSBcIm51bGxcIjtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyBhbiBhdHRyaWJ1dGUgdmFsdWUgaW4gYW4gZW52aXJvbm1lbnQgd2l0aG91dCBhdHRyaWJ1dGUgYnVnXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxcbiAgICAgICAgICogQHBhcmFtIHtBdHRyfSBhdHRyXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gYW4gYXR0cmlidXRlIHZhbHVlXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVTaW1wbGUoZWwsIGF0dHIpIHtcbiAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgcG90ZW50aWFsIGZvciBhIHdhcm5pbmcgdG8gb2NjdXIgaGVyZSBpZiB0aGUgYXR0cmlidXRlIGlzIGFcbiAgICAgICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGUgaW4gSUU8OSB3aXRoIGEgY3VzdG9tIC50b1N0cmluZygpIG1ldGhvZC4gVGhpcyBpc1xuICAgICAgICAgICAgLy8ganVzdCBhIHdhcm5pbmcgYW5kIGRvZXNuJ3QgYWZmZWN0IGV4ZWN1dGlvbiAoc2VlICMyMSlcbiAgICAgICAgICAgIHJldHVybiBhdHRyLnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgYW4gYXR0cmlidXRlIHZhbHVlIHdpdGggc3BlY2lhbCBoYWNrIGZvciBzdHlsZSBhdHRyaWJ1dGUgKHNlZSAjNClcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSBlbFxuICAgICAgICAgKiBAcGFyYW0ge0F0dHJ9IGF0dHJcbiAgICAgICAgICogQHJldHVybiB7U3RyaW5nfSBhbiBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZVdpdGhTdHlsZUhhY2soZWwsIGF0dHIpIHtcbiAgICAgICAgICAgIC8vIEFzIHdpdGggZ2V0QXR0cmlidXRlU2ltcGxlIHRoZXJlIGlzIGEgcG90ZW50aWFsIHdhcm5pbmcgZm9yIGN1c3RvbSBhdHRyaWJ0dWVzIGluIElFNy5cbiAgICAgICAgICAgIHJldHVybiBhdHRyLm5hbWUgIT09IFwic3R5bGVcIiA/IGF0dHIudmFsdWUgOiBlbC5zdHlsZS5jc3NUZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGdldEF0dHJpYnV0ZVZhbHVlID0gaGFzQXR0cmlidXRlQnVnID8gZ2V0QXR0cmlidXRlU2ltcGxlIDogZ2V0QXR0cmlidXRlV2l0aFN0eWxlSGFjaztcblxuICAgICAgICAvKipcbiAgICAgICAgICogZmFzdCBoZWxwZXIgdG8gY2hlY2sgdG8gc2VlIGlmIGF0dHJpYnV0ZXMgb2JqZWN0IG9mIGFuIGVsZW1lbnQgaGFzIGNoYW5nZWRcbiAgICAgICAgICogZG9lc250IGhhbmRsZSB0aGUgdGV4dG5vZGUgY2FzZVxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5LjxNdXRhdGlvblJlY29yZD59IG11dGF0aW9uc1xuICAgICAgICAgKiBAcGFyYW0ge05vZGV9ICR0YXJnZXRcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywgc3RyaW5nPn0gJG9sZHN0YXRlIDogQ3VzdG9tIGF0dHJpYnV0ZSBjbG9uZSBkYXRhIHN0cnVjdHVyZSBmcm9tIGNsb25lXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaWx0ZXJcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGZpbmRBdHRyaWJ1dGVNdXRhdGlvbnMobXV0YXRpb25zLCAkdGFyZ2V0LCAkb2xkc3RhdGUsIGZpbHRlcikge1xuICAgICAgICAgICAgdmFyIGNoZWNrZWQgPSB7fTtcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gJHRhcmdldC5hdHRyaWJ1dGVzO1xuICAgICAgICAgICAgdmFyIGF0dHI7XG4gICAgICAgICAgICB2YXIgbmFtZTtcbiAgICAgICAgICAgIHZhciBpID0gYXR0cmlidXRlcy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAgICAgYXR0ciA9IGF0dHJpYnV0ZXNbaV07XG4gICAgICAgICAgICAgICAgbmFtZSA9IGF0dHIubmFtZTtcbiAgICAgICAgICAgICAgICBpZiAoIWZpbHRlciB8fCBoYXMoZmlsdGVyLCBuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0QXR0cmlidXRlVmFsdWUoJHRhcmdldCwgYXR0cikgIT09ICRvbGRzdGF0ZVtuYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHB1c2hpbmcgaXMgcmVkdW5kYW50IGJ1dCBnemlwcyB2ZXJ5IG5pY2VseVxuICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRpb25zLnB1c2goTXV0YXRpb25SZWNvcmQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXR0cmlidXRlc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogJHRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlOiAkb2xkc3RhdGVbbmFtZV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZXNwYWNlOiBhdHRyLm5hbWVzcGFjZVVSSSAvLyBpbiBpZTw4IGl0IGluY29ycmVjdGx5IHdpbGwgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWRbbmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobmFtZSBpbiAkb2xkc3RhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShjaGVja2VkW25hbWVdKSkge1xuICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbnMucHVzaChNdXRhdGlvblJlY29yZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6ICR0YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImF0dHJpYnV0ZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbGRWYWx1ZTogJG9sZHN0YXRlW25hbWVdXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogc2VhcmNoU3VidHJlZTogYXJyYXkgb2YgbXV0YXRpb25zIHNvIGZhciwgZWxlbWVudCwgZWxlbWVudCBjbG9uZSwgYm9vbFxuICAgICAgICAgKiBzeW5jaHJvbm91cyBkZnMgY29tcGFyaXNpb24gb2YgdHdvIG5vZGVzXG4gICAgICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgYXBwbGllZCB0byBhbnkgb2JzZXJ2ZWQgZWxlbWVudCB3aXRoIGNoaWxkTGlzdCBvciBzdWJ0cmVlIHNwZWNpZmllZFxuICAgICAgICAgKiBTb3JyeSB0aGlzIGlzIGtpbmQgb2YgY29uZnVzaW5nIGFzIHNoaXQsIHRyaWVkIHRvIGNvbW1lbnQgaXQgYSBiaXQuLi5cbiAgICAgICAgICogY29kZXJldmlldy5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMzgzNTEgZGlzY3Vzc2lvbiBvZiBhbiBlYXJsaWVyIHZlcnNpb24gb2YgdGhpcyBmdW5jXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IG11dGF0aW9uc1xuICAgICAgICAgKiBAcGFyYW0ge05vZGV9ICR0YXJnZXRcbiAgICAgICAgICogQHBhcmFtIHshT2JqZWN0fSAkb2xkc3RhdGUgOiBBIGN1c3RvbSBjbG9uZWQgbm9kZSBmcm9tIGNsb25lKClcbiAgICAgICAgICogQHBhcmFtIHshT2JqZWN0fSBjb25maWcgOiBBIGN1c3RvbSBtdXRhdGlvbiBjb25maWdcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHNlYXJjaFN1YnRyZWUobXV0YXRpb25zLCAkdGFyZ2V0LCAkb2xkc3RhdGUsIGNvbmZpZykge1xuICAgICAgICAgICAgLy8gVHJhY2sgaWYgdGhlIHRyZWUgaXMgZGlydHkgYW5kIGhhcyB0byBiZSByZWNvbXB1dGVkICgjMTQpLlxuICAgICAgICAgICAgdmFyIGRpcnR5O1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAqIEhlbHBlciB0byBpZGVudGlmeSBub2RlIHJlYXJyYW5nbWVudCBhbmQgc3R1ZmYuLi5cbiAgICAgICAgICAgICAqIFRoZXJlIGlzIG5vIGdhdXJlbnRlZSB0aGF0IHRoZSBzYW1lIG5vZGUgd2lsbCBiZSBpZGVudGlmaWVkIGZvciBib3RoIGFkZGVkIGFuZCByZW1vdmVkIG5vZGVzXG4gICAgICAgICAgICAgKiBpZiB0aGUgcG9zaXRpb25zIGhhdmUgYmVlbiBzaHVmZmxlZC5cbiAgICAgICAgICAgICAqIGNvbmZsaWN0cyBhcnJheSB3aWxsIGJlIGVtcHRpZWQgYnkgZW5kIG9mIG9wZXJhdGlvblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlQ29uZmxpY3RzKGNvbmZsaWN0cywgbm9kZSwgJGtpZHMsICRvbGRraWRzLCBudW1BZGRlZE5vZGVzKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGZpcnN0IGNvbmZsaWN0aW5nIG5vZGUgYW5kIHRoZSBsYXN0XG4gICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gY29uZmxpY3RzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudHMgc2FtZSBjb25mbGljdCBiZWluZyByZXNvbHZlZCB0d2ljZSBjb25zaWRlciB3aGVuIHR3byBub2RlcyBzd2l0Y2ggcGxhY2VzLlxuICAgICAgICAgICAgICAgIC8vIG9ubHkgb25lIHNob3VsZCBiZSBnaXZlbiBhIG11dGF0aW9uIGV2ZW50IChub3RlIC1+IGlzIHVzZWQgYXMgYSBtYXRoLmNlaWwgc2hvcnRoYW5kKVxuICAgICAgICAgICAgICAgIHZhciBjb3VudGVyID0gLX4oKGRpc3RhbmNlIC0gbnVtQWRkZWROb2RlcykgLyAyKTtcbiAgICAgICAgICAgICAgICB2YXIgJGN1cjtcbiAgICAgICAgICAgICAgICB2YXIgb2xkc3RydWN0O1xuICAgICAgICAgICAgICAgIHZhciBjb25mbGljdDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKGNvbmZsaWN0ID0gY29uZmxpY3RzLnBvcCgpKSkge1xuICAgICAgICAgICAgICAgICAgICAkY3VyID0gJGtpZHNbY29uZmxpY3QuaV07XG4gICAgICAgICAgICAgICAgICAgIG9sZHN0cnVjdCA9ICRvbGRraWRzW2NvbmZsaWN0LmpdO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGF0dGVtcHQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIHdhcyBub2RlIHJlYXJyYW5nZW1lbnQuLi4gd29uJ3QgZ2F1cmVudGVlIGFsbCBtYXRjaGVzXG4gICAgICAgICAgICAgICAgICAgIC8vIGFsc28gaGFuZGxlcyBjYXNlIHdoZXJlIGFkZGVkL3JlbW92ZWQgbm9kZXMgY2F1c2Ugbm9kZXMgdG8gYmUgaWRlbnRpZmllZCBhcyBjb25mbGljdHNcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5raWRzICYmIGNvdW50ZXIgJiYgTWF0aC5hYnMoY29uZmxpY3QuaSAtIGNvbmZsaWN0LmopID49IGRpc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbnMucHVzaChNdXRhdGlvblJlY29yZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJjaGlsZExpc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IG5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWROb2RlczogWyRjdXJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWROb2RlczogWyRjdXJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhaGEgZG9uJ3QgcmVseSBvbiB0aGlzIHBsZWFzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTaWJsaW5nOiAkY3VyLm5leHRTaWJsaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzU2libGluZzogJGN1ci5wcmV2aW91c1NpYmxpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXItLTsgLy8gZm91bmQgY29uZmxpY3RcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIEFscmlnaHQgd2UgZm91bmQgdGhlIHJlc29ydGVkIG5vZGVzIG5vdyBjaGVjayBmb3Igb3RoZXIgdHlwZXMgb2YgbXV0YXRpb25zXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuYXR0ciAmJiBvbGRzdHJ1Y3QuYXR0cikgZmluZEF0dHJpYnV0ZU11dGF0aW9ucyhtdXRhdGlvbnMsICRjdXIsIG9sZHN0cnVjdC5hdHRyLCBjb25maWcuYWZpbHRlcik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuY2hhckRhdGEgJiYgJGN1ci5ub2RlVHlwZSA9PT0gMyAmJiAkY3VyLm5vZGVWYWx1ZSAhPT0gb2xkc3RydWN0LmNoYXJEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbnMucHVzaChNdXRhdGlvblJlY29yZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJjaGFyYWN0ZXJEYXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiAkY3VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlOiBvbGRzdHJ1Y3QuY2hhckRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBub3cgbG9vayBAIHN1YnRyZWVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5kZXNjZW5kZW50cykgZmluZE11dGF0aW9ucygkY3VyLCBvbGRzdHJ1Y3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBNYWluIHdvcmtlci4gRmluZHMgYW5kIGFkZHMgbXV0YXRpb25zIGlmIHRoZXJlIGFyZSBhbnlcbiAgICAgICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgICAgICAgICAgICogQHBhcmFtIHshT2JqZWN0fSBvbGQgOiBBIGNsb25lZCBkYXRhIHN0cnVjdHVyZSB1c2luZyBpbnRlcm5hbCBjbG9uZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBmdW5jdGlvbiBmaW5kTXV0YXRpb25zKG5vZGUsIG9sZCkge1xuICAgICAgICAgICAgICAgIHZhciAka2lkcyA9IG5vZGUuY2hpbGROb2RlcztcbiAgICAgICAgICAgICAgICB2YXIgJG9sZGtpZHMgPSBvbGQua2lkcztcbiAgICAgICAgICAgICAgICB2YXIga2xlbiA9ICRraWRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAvLyAkb2xka2lkcyB3aWxsIGJlIHVuZGVmaW5lZCBmb3IgdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuICAgICAgICAgICAgICAgIHZhciBvbGVuID0gJG9sZGtpZHMgPyAkb2xka2lkcy5sZW5ndGggOiAwO1xuICAgICAgICAgICAgICAgIC8vIGlmICghb2xlbiAmJiAha2xlbikgcmV0dXJuOyAvLyBib3RoIGVtcHR5OyBjbGVhcmx5IG5vIGNoYW5nZXNcblxuICAgICAgICAgICAgICAgIC8vIHdlIGRlbGF5IHRoZSBpbnRpYWxpemF0aW9uIG9mIHRoZXNlIGZvciBtYXJnaW5hbCBwZXJmb3JtYW5jZSBpbiB0aGUgZXhwZWN0ZWQgY2FzZSAoYWN0dWFsbHkgcXVpdGUgc2lnbmZpY2FudCBvbiBsYXJnZSBzdWJ0cmVlcyB3aGVuIHRoZXNlIHdvdWxkIGJlIG90aGVyd2lzZSB1bnVzZWQpXG4gICAgICAgICAgICAgICAgLy8gbWFwIG9mIGNoZWNrZWQgZWxlbWVudCBvZiBpZHMgdG8gcHJldmVudCByZWdpc3RlcmluZyB0aGUgc2FtZSBjb25mbGljdCB0d2ljZVxuICAgICAgICAgICAgICAgIHZhciBtYXA7XG4gICAgICAgICAgICAgICAgLy8gYXJyYXkgb2YgcG90ZW50aWFsIGNvbmZsaWN0cyAoaWUgbm9kZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIHJlIGFycmFuZ2VkKVxuICAgICAgICAgICAgICAgIHZhciBjb25mbGljdHM7XG4gICAgICAgICAgICAgICAgdmFyIGlkOyAvLyBlbGVtZW50IGlkIGZyb20gZ2V0RWxlbWVudElkIGhlbHBlclxuICAgICAgICAgICAgICAgIHZhciBpZHg7IC8vIGluZGV4IG9mIGEgbW92ZWQgb3IgaW5zZXJ0ZWQgZWxlbWVudFxuXG4gICAgICAgICAgICAgICAgdmFyIG9sZHN0cnVjdDtcbiAgICAgICAgICAgICAgICAvLyBjdXJyZW50IGFuZCBvbGQgbm9kZXNcbiAgICAgICAgICAgICAgICB2YXIgJGN1cjtcbiAgICAgICAgICAgICAgICB2YXIgJG9sZDtcbiAgICAgICAgICAgICAgICAvLyB0cmFjayB0aGUgbnVtYmVyIG9mIGFkZGVkIG5vZGVzIHNvIHdlIGNhbiByZXNvbHZlIGNvbmZsaWN0cyBtb3JlIGFjY3VyYXRlbHlcbiAgICAgICAgICAgICAgICB2YXIgbnVtQWRkZWROb2RlcyA9IDA7XG5cbiAgICAgICAgICAgICAgICAvLyBpdGVyYXRlIG92ZXIgYm90aCBvbGQgYW5kIGN1cnJlbnQgY2hpbGQgbm9kZXMgYXQgdGhlIHNhbWUgdGltZVxuICAgICAgICAgICAgICAgIHZhciBpID0gMCwgaiA9IDA7XG4gICAgICAgICAgICAgICAgLy8gd2hpbGUgdGhlcmUgaXMgc3RpbGwgYW55dGhpbmcgbGVmdCBpbiAka2lkcyBvciAkb2xka2lkcyAoc2FtZSBhcyBpIDwgJGtpZHMubGVuZ3RoIHx8IGogPCAkb2xka2lkcy5sZW5ndGg7KVxuICAgICAgICAgICAgICAgIHdoaWxlIChpIDwga2xlbiB8fCBqIDwgb2xlbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBjdXJyZW50IGFuZCBvbGQgbm9kZXMgYXQgdGhlIGluZGV4c1xuICAgICAgICAgICAgICAgICAgICAkY3VyID0gJGtpZHNbaV07XG4gICAgICAgICAgICAgICAgICAgIG9sZHN0cnVjdCA9ICRvbGRraWRzW2pdO1xuICAgICAgICAgICAgICAgICAgICAkb2xkID0gb2xkc3RydWN0ICYmIG9sZHN0cnVjdC5ub2RlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICgkY3VyID09PSAkb2xkKSB7IC8vIGV4cGVjdGVkIGNhc2UgLSBvcHRpbWl6ZWQgZm9yIHRoaXMgY2FzZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgYXR0cmlidXRlcyBhcyBzcGVjaWZpZWQgYnkgY29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmF0dHIgJiYgb2xkc3RydWN0LmF0dHIpIC8qIG9sZHN0cnVjdC5hdHRyIGluc3RlYWQgb2YgdGV4dG5vZGUgY2hlY2sgKi9maW5kQXR0cmlidXRlTXV0YXRpb25zKG11dGF0aW9ucywgJGN1ciwgb2xkc3RydWN0LmF0dHIsIGNvbmZpZy5hZmlsdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGNoYXJhY3RlciBkYXRhIGlmIG5vZGUgaXMgYSBjb21tZW50IG9yIHRleHROb2RlIGFuZCBpdCdzIGJlaW5nIG9ic2VydmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmNoYXJEYXRhICYmIG9sZHN0cnVjdC5jaGFyRGF0YSAhPT0gdW5kZWZpbmVkICYmICRjdXIubm9kZVZhbHVlICE9PSBvbGRzdHJ1Y3QuY2hhckRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbnMucHVzaChNdXRhdGlvblJlY29yZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY2hhcmFjdGVyRGF0YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6ICRjdXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlOiBvbGRzdHJ1Y3QuY2hhckRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc29sdmUgY29uZmxpY3RzOyBpdCB3aWxsIGJlIHVuZGVmaW5lZCBpZiB0aGVyZSBhcmUgbm8gY29uZmxpY3RzIC0gb3RoZXJ3aXNlIGFuIGFycmF5XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmxpY3RzKSByZXNvbHZlQ29uZmxpY3RzKGNvbmZsaWN0cywgbm9kZSwgJGtpZHMsICRvbGRraWRzLCBudW1BZGRlZE5vZGVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVjdXJzZSBvbiBuZXh0IGxldmVsIG9mIGNoaWxkcmVuLiBBdm9pZHMgdGhlIHJlY3Vyc2l2ZSBjYWxsIHdoZW4gdGhlcmUgYXJlIG5vIGNoaWxkcmVuIGxlZnQgdG8gaXRlcmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5kZXNjZW5kZW50cyAmJiAoJGN1ci5jaGlsZE5vZGVzLmxlbmd0aCB8fCBvbGRzdHJ1Y3Qua2lkcyAmJiBvbGRzdHJ1Y3Qua2lkcy5sZW5ndGgpKSBmaW5kTXV0YXRpb25zKCRjdXIsIG9sZHN0cnVjdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gKHVuY29tbW9uIGNhc2UpIGxvb2thaGVhZCB1bnRpbCB0aGV5IGFyZSB0aGUgc2FtZSBhZ2FpbiBvciB0aGUgZW5kIG9mIGNoaWxkcmVuXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hcCkgeyAvLyBkZWxheWVkIGluaXRhbGl6YXRpb24gKGJpZyBwZXJmIGJlbmVmaXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGN1cikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlkIGlzIGluIHRoZSBsb2NhdGlvbiBtYXAgb3RoZXJ3aXNlIGRvIGEgaW5kZXhPZiBzZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtYXBbaWQgPSBnZXRFbGVtZW50SWQoJGN1cildKSkgeyAvLyB0byBwcmV2ZW50IGRvdWJsZSBjaGVja2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXJrIGlkIGFzIGZvdW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcFtpZF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjdXN0b20gaW5kZXhPZiB1c2luZyBjb21wYXJpdG9yIGNoZWNraW5nIG9sZGtpZHNbaV0ubm9kZSA9PT0gJGN1clxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGlkeCA9IGluZGV4T2ZDdXN0b21Ob2RlKCRvbGRraWRzLCAkY3VyLCBqKSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmtpZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbnMucHVzaChNdXRhdGlvblJlY29yZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY2hpbGRMaXN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWROb2RlczogWyRjdXJdLCAvLyAkY3VyIGlzIGEgbmV3IG5vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFNpYmxpbmc6ICRjdXIubmV4dFNpYmxpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzU2libGluZzogJGN1ci5wcmV2aW91c1NpYmxpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQWRkZWROb2RlcysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3RzLnB1c2goeyAvLyBhZGQgY29uZmxpY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGo6IGlkeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG9sZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogdGhlIGNoYW5nZXMgbWF5IGhhdmUgYmVlbiByZXNvbHZlZDogaSBhbmQgaiBhcHBlYXIgY29uZ3VyZW50IHNvIHdlIGNhbiBjb250aW51ZSB1c2luZyB0aGUgZXhwZWN0ZWQgY2FzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvbGQgIT09ICRraWRzW2ldXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtYXBbaWQgPSBnZXRFbGVtZW50SWQoJG9sZCldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBbaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpZHggPSBpbmRleE9mKCRraWRzLCAkb2xkLCBpKSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmtpZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbnMucHVzaChNdXRhdGlvblJlY29yZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY2hpbGRMaXN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogb2xkLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWROb2RlczogWyRvbGRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0U2libGluZzogJG9sZGtpZHNbaiArIDFdLCAvLyBwcmFpc2Ugbm8gaW5kZXhvdXRvZmJvdW5kcyBleGNlcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNTaWJsaW5nOiAkb2xka2lkc1tqIC0gMV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQWRkZWROb2Rlcy0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3RzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk6IGlkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqOiBqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0vLyBlbmQgdW5jb21tb24gY2FzZVxuICAgICAgICAgICAgICAgIH0vLyBlbmQgbG9vcFxuXG4gICAgICAgICAgICAgICAgLy8gcmVzb2x2ZSBhbnkgcmVtYWluaW5nIGNvbmZsaWN0c1xuICAgICAgICAgICAgICAgIGlmIChjb25mbGljdHMpIHJlc29sdmVDb25mbGljdHMoY29uZmxpY3RzLCBub2RlLCAka2lkcywgJG9sZGtpZHMsIG51bUFkZGVkTm9kZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluZE11dGF0aW9ucygkdGFyZ2V0LCAkb2xkc3RhdGUpO1xuICAgICAgICAgICAgcmV0dXJuIGRpcnR5O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFV0aWxpdHlcbiAgICAgICAgICogQ29uZXMgYSBlbGVtZW50IGludG8gYSBjdXN0b20gZGF0YSBzdHJ1Y3R1cmUgZGVzaWduZWQgZm9yIGNvbXBhcmlzaW9uLiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tZWdhd2FjLzgyMDEwMTJcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSAkdGFyZ2V0XG4gICAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gY29uZmlnIDogQSBjdXN0b20gbXV0YXRpb24gY29uZmlnXG4gICAgICAgICAqIEByZXR1cm4geyFPYmplY3R9IDogQ2xvbmVkIGRhdGEgc3RydWN0dXJlXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBjbG9uZSgkdGFyZ2V0LCBjb25maWcpIHtcbiAgICAgICAgICAgIHZhciByZWN1cnNlID0gdHJ1ZTsgLy8gc2V0IHRydWUgc28gY2hpbGRMaXN0IHdlJ2xsIGFsd2F5cyBjaGVjayB0aGUgZmlyc3QgbGV2ZWxcbiAgICAgICAgICAgIHJldHVybiAoZnVuY3Rpb24gY29weSgkdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGVsZXN0cnVjdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgLyoqIEB0eXBlIHtOb2RlfSAqL1xuICAgICAgICAgICAgICAgICAgICBub2RlOiAkdGFyZ2V0XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8vIFN0b3JlIGN1cnJlbnQgY2hhcmFjdGVyIGRhdGEgb2YgdGFyZ2V0IHRleHQgb3IgY29tbWVudCBub2RlIGlmIHRoZSBjb25maWcgcmVxdWVzdHNcbiAgICAgICAgICAgICAgICAvLyB0aG9zZSBwcm9wZXJ0aWVzIHRvIGJlIG9ic2VydmVkLlxuICAgICAgICAgICAgICAgIGlmIChjb25maWcuY2hhckRhdGEgJiYgKCR0YXJnZXQubm9kZVR5cGUgPT09IDMgfHwgJHRhcmdldC5ub2RlVHlwZSA9PT0gOCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlc3RydWN0LmNoYXJEYXRhID0gJHRhcmdldC5ub2RlVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGl0cyBlaXRoZXIgYSBlbGVtZW50LCBjb21tZW50LCBkb2MgZnJhZyBvciBkb2N1bWVudCBub2RlXG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBhdHRyIG9ubHkgaWYgc3VidHJlZSBpcyBzcGVjaWZpZWQgb3IgdG9wIGxldmVsIGFuZCBhdm9pZCBpZlxuICAgICAgICAgICAgICAgICAgICAvLyBhdHRyaWJ1dGVzIGlzIGEgZG9jdW1lbnQgb2JqZWN0ICgjMTMpLlxuICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmF0dHIgJiYgcmVjdXJzZSAmJiAkdGFyZ2V0Lm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIGNsb25lIGxpdmUgYXR0cmlidXRlIGxpc3QgdG8gYW4gb2JqZWN0IHN0cnVjdHVyZSB7bmFtZTogdmFsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUge09iamVjdC48c3RyaW5nLCBzdHJpbmc+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVzdHJ1Y3QuYXR0ciA9IHJlZHVjZSgkdGFyZ2V0LmF0dHJpYnV0ZXMsIGZ1bmN0aW9uIChtZW1vLCBhdHRyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maWcuYWZpbHRlciB8fCBjb25maWcuYWZpbHRlclthdHRyLm5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9bYXR0ci5uYW1lXSA9IGdldEF0dHJpYnV0ZVZhbHVlKCR0YXJnZXQsIGF0dHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVtbztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZXRoZXIgd2Ugc2hvdWxkIGl0ZXJhdGUgdGhlIGNoaWxkcmVuIG9mICR0YXJnZXQgbm9kZVxuICAgICAgICAgICAgICAgICAgICBpZiAocmVjdXJzZSAmJiAoKGNvbmZpZy5raWRzIHx8IGNvbmZpZy5jaGFyRGF0YSkgfHwgKGNvbmZpZy5hdHRyICYmIGNvbmZpZy5kZXNjZW5kZW50cykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiogQHR5cGUge0FycmF5LjwhT2JqZWN0Pn0gOiBBcnJheSBvZiBjdXN0b20gY2xvbmUgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZXN0cnVjdC5raWRzID0gbWFwKCR0YXJnZXQuY2hpbGROb2RlcywgY29weSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZWN1cnNlID0gY29uZmlnLmRlc2NlbmRlbnRzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlc3RydWN0O1xuICAgICAgICAgICAgfSkoJHRhcmdldCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogaW5kZXhPZiBhbiBlbGVtZW50IGluIGEgY29sbGVjdGlvbiBvZiBjdXN0b20gbm9kZXNcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtOb2RlTGlzdH0gc2V0XG4gICAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gJG5vZGUgOiBBIGN1c3RvbSBjbG9uZWQgbm9kZVxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gaWR4IDogaW5kZXggdG8gc3RhcnQgdGhlIGxvb3BcbiAgICAgICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gaW5kZXhPZkN1c3RvbU5vZGUoc2V0LCAkbm9kZSwgaWR4KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5kZXhPZihzZXQsICRub2RlLCBpZHgsIEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoXCJub2RlXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVzaW5nIGEgbm9uIGlkIChlZyBvdXRlckhUTUwgb3Igbm9kZVZhbHVlKSBpcyBleHRyZW1lbHkgbmFpdmUgYW5kIHdpbGwgcnVuIGludG8gaXNzdWVzIHdpdGggbm9kZXMgdGhhdCBtYXkgYXBwZWFyIHRoZSBzYW1lIGxpa2UgPGxpPjwvbGk+XG4gICAgICAgIHZhciBjb3VudGVyID0gMTsgLy8gZG9uJ3QgdXNlIDAgYXMgaWQgKGZhbHN5KVxuICAgICAgICAvKiogQGNvbnN0ICovXG4gICAgICAgIHZhciBleHBhbmRvID0gXCJtb19pZFwiO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBdHRlbXB0IHRvIHVuaXF1ZWx5IGlkIGFuIGVsZW1lbnQgZm9yIGhhc2hpbmcuIFdlIGNvdWxkIG9wdGltaXplIHRoaXMgZm9yIGxlZ2FjeSBicm93c2VycyBidXQgaXQgaG9wZWZ1bGx5IHdvbnQgYmUgY2FsbGVkIGVub3VnaCB0byBiZSBhIGNvbmNlcm5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSAkZWxlXG4gICAgICAgICAqIEByZXR1cm4geyhzdHJpbmd8bnVtYmVyKX1cbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGdldEVsZW1lbnRJZCgkZWxlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiAkZWxlLmlkIHx8ICgkZWxlW2V4cGFuZG9dID0gJGVsZVtleHBhbmRvXSB8fCBjb3VudGVyKyspO1xuICAgICAgICAgICAgfSBjYXRjaCAob19PKSB7IC8vIGllIDw4IHdpbGwgdGhyb3cgaWYgeW91IHNldCBhbiB1bmtub3duIHByb3BlcnR5IG9uIGEgdGV4dCBub2RlXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRlbGUubm9kZVZhbHVlOyAvLyBuYWl2ZVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKHNoaXRpZSkgeyAvLyB3aGVuIHRleHQgbm9kZSBpcyByZW1vdmVkOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tZWdhd2FjLzgzNTU5NzggOihcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogKiptYXAqKiBBcHBseSBhIG1hcHBpbmcgZnVuY3Rpb24gdG8gZWFjaCBpdGVtIG9mIGEgc2V0XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8Tm9kZUxpc3R9IHNldFxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRvclxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gbWFwKHNldCwgaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgc2V0Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gaXRlcmF0b3Ioc2V0W2luZGV4XSwgaW5kZXgsIHNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiAqKlJlZHVjZSoqIGJ1aWxkcyB1cCBhIHNpbmdsZSByZXN1bHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8Tm9kZUxpc3R8TmFtZWROb2RlTWFwfSBzZXRcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0b3JcbiAgICAgICAgICogQHBhcmFtIHsqfSBbbWVtb10gSW5pdGlhbCB2YWx1ZSBvZiB0aGUgbWVtby5cbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHJlZHVjZShzZXQsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgc2V0Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCBzZXRbaW5kZXhdLCBpbmRleCwgc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtZW1vO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqICoqaW5kZXhPZioqIGZpbmQgaW5kZXggb2YgaXRlbSBpbiBjb2xsZWN0aW9uLlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE5vZGVMaXN0fSBzZXRcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGl0ZW1cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGlkeFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3Byb3BdIFByb3BlcnR5IG9uIHNldCBpdGVtIHRvIGNvbXBhcmUgdG8gaXRlbVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gaW5kZXhPZihzZXQsIGl0ZW0sIGlkeCwgcHJvcCkge1xuICAgICAgICAgICAgZm9yICgvKmlkeCA9IH5+aWR4Ki87IGlkeCA8IHNldC5sZW5ndGg7IGlkeCsrKSB7Ly8gc3RhcnQgaWR4IGlzIGFsd2F5cyBnaXZlbiBhcyB0aGlzIGlzIGludGVybmFsXG4gICAgICAgICAgICAgICAgaWYgKChwcm9wID8gc2V0W2lkeF1bcHJvcF0gOiBzZXRbaWR4XSkgPT09IGl0ZW0pIHJldHVybiBpZHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9ialxuICAgICAgICAgKiBAcGFyYW0geyhzdHJpbmd8bnVtYmVyKX0gcHJvcFxuICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gaGFzKG9iaiwgcHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ialtwcm9wXSAhPT0gdW5kZWZpbmVkOyAvLyB3aWxsIGJlIG5pY2VseSBpbmxpbmVkIGJ5IGdjY1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR0NDIGhhY2sgc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMzIwMjQzOC8xNTE3OTE5XG4gICAgICAgIGZ1bmN0aW9uIEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoYSkge1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gTXV0YXRpb25PYnNlcnZlcjtcbiAgICB9KSh2b2lkIDApO1xufVxufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoZG9jdW1lbnQuY29udGFpbnNcbikpIHtcbi8vIE5vZGUucHJvdG90eXBlLmNvbnRhaW5zXG4oZnVuY3Rpb24oKSB7XG5cblx0ZnVuY3Rpb24gY29udGFpbnMobm9kZSkge1xuXHRcdGlmICghKDAgaW4gYXJndW1lbnRzKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignMSBhcmd1bWVudCBpcyByZXF1aXJlZCcpO1xuXHRcdH1cblxuXHRcdGRvIHtcblx0XHRcdGlmICh0aGlzID09PSBub2RlKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25kLWFzc2lnblxuXHRcdH0gd2hpbGUgKG5vZGUgPSBub2RlICYmIG5vZGUucGFyZW50Tm9kZSk7XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBJRVxuXHRpZiAoJ0hUTUxFbGVtZW50JyBpbiBzZWxmICYmICdjb250YWlucycgaW4gSFRNTEVsZW1lbnQucHJvdG90eXBlKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGRlbGV0ZSBIVE1MRWxlbWVudC5wcm90b3R5cGUuY29udGFpbnM7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG5cdFx0fSBjYXRjaCAoZSkge31cblx0fVxuXG5cdGlmICgnTm9kZScgaW4gc2VsZikge1xuXHRcdE5vZGUucHJvdG90eXBlLmNvbnRhaW5zID0gY29udGFpbnM7XG5cdH0gZWxzZSB7XG5cdFx0ZG9jdW1lbnQuY29udGFpbnMgPSBFbGVtZW50LnByb3RvdHlwZS5jb250YWlucyA9IGNvbnRhaW5zO1xuXHR9XG5cbn0oKSk7XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICJcbjsoZnVuY3Rpb24oKXsgdHJ5IHsgd2luZG93WydTaGFkeURPTSddID0gd2luZG93WydTaGFkeURPTSddIHx8IHt9OyB3aW5kb3dbJ1NoYWR5RE9NJ11bJ3F1ZXJ5U2VsZWN0b3JJbXBsZW1lbnRhdGlvbiddID0gd2luZG93WydTaGFkeURPTSddWydxdWVyeVNlbGVjdG9ySW1wbGVtZW50YXRpb24nXSB8fCAnbmF0aXZlJzsgfSBjYXRjaChlcnIpIHt9IH0pKCk7XG4oZnVuY3Rpb24oKXsvKlxuXG5Db3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcblRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4qL1xuJ3VzZSBzdHJpY3QnO3ZhciBuO2Z1bmN0aW9uIGFhKGEpe3ZhciBiPTA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGI8YS5sZW5ndGg/e2RvbmU6ITEsdmFsdWU6YVtiKytdfTp7ZG9uZTohMH19fWZ1bmN0aW9uIHAoYSl7dmFyIGI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yJiZhW1N5bWJvbC5pdGVyYXRvcl07cmV0dXJuIGI/Yi5jYWxsKGEpOntuZXh0OmFhKGEpfX1mdW5jdGlvbiBxKGEpe2lmKCEoYSBpbnN0YW5jZW9mIEFycmF5KSl7YT1wKGEpO2Zvcih2YXIgYixjPVtdOyEoYj1hLm5leHQoKSkuZG9uZTspYy5wdXNoKGIudmFsdWUpO2E9Y31yZXR1cm4gYX1cbmZ1bmN0aW9uIGJhKGEpe2E9W1wib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzLGEsXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmd2luZG93LFwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmLFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbF07Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDsrK2Ipe3ZhciBjPWFbYl07aWYoYyYmYy5NYXRoPT1NYXRoKXJldHVybiBjfXRocm93IEVycm9yKFwiQ2Fubm90IGZpbmQgZ2xvYmFsIG9iamVjdFwiKTt9dmFyIGNhPWJhKHRoaXMpO2Z1bmN0aW9uIGRhKCl7fWRhLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57fX07ZnVuY3Rpb24gdChhKXthLl9fc2hhZHl8fChhLl9fc2hhZHk9bmV3IGRhKTtyZXR1cm4gYS5fX3NoYWR5fWZ1bmN0aW9uIHUoYSl7cmV0dXJuIGEmJmEuX19zaGFkeX07dmFyIHY9d2luZG93LlNoYWR5RE9NfHx7fTt2LmRhPSEoIUVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvd3x8IU5vZGUucHJvdG90eXBlLmdldFJvb3ROb2RlKTt2YXIgZWE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihOb2RlLnByb3RvdHlwZSxcImZpcnN0Q2hpbGRcIik7di5pPSEhKGVhJiZlYS5jb25maWd1cmFibGUmJmVhLmdldCk7di5OPXYuZm9yY2V8fCF2LmRhO3YubD12Lm5vUGF0Y2h8fCExO3YuQz12LnByZWZlclBlcmZvcm1hbmNlO3YuTz1cIm9uLWRlbWFuZFwiPT09di5sO3ZhciBmYTt2YXIgaGE9di5xdWVyeVNlbGVjdG9ySW1wbGVtZW50YXRpb247ZmE9LTE8W1wibmF0aXZlXCIsXCJzZWxlY3RvckVuZ2luZVwiXS5pbmRleE9mKGhhKT9oYTp2b2lkIDA7di5nYT1mYTt2LlY9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChcIlRyaWRlbnRcIik7XG5mdW5jdGlvbiBpYSgpe3JldHVybiBEb2N1bWVudC5wcm90b3R5cGUubXNFbGVtZW50c0Zyb21Qb2ludD9cIm1zRWxlbWVudHNGcm9tUG9pbnRcIjpcImVsZW1lbnRzRnJvbVBvaW50XCJ9ZnVuY3Rpb24gdyhhKXtyZXR1cm4oYT11KGEpKSYmdm9pZCAwIT09YS5maXJzdENoaWxkfWZ1bmN0aW9uIHgoYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBTaGFkb3dSb290fWZ1bmN0aW9uIGphKGEpe3JldHVybihhPShhPXUoYSkpJiZhLnJvb3QpJiZrYShhKX12YXIgeT1FbGVtZW50LnByb3RvdHlwZSxsYT15Lm1hdGNoZXN8fHkubWF0Y2hlc1NlbGVjdG9yfHx5Lm1vek1hdGNoZXNTZWxlY3Rvcnx8eS5tc01hdGNoZXNTZWxlY3Rvcnx8eS5vTWF0Y2hlc1NlbGVjdG9yfHx5LndlYmtpdE1hdGNoZXNTZWxlY3RvcixtYT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKSxuYT0wLG9hPVtdO1xuKG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKCl7Zm9yKDtvYS5sZW5ndGg7KXRyeXtvYS5zaGlmdCgpKCl9Y2F0Y2goYSl7dGhyb3cgbWEudGV4dENvbnRlbnQ9bmErKyxhO319KSkub2JzZXJ2ZShtYSx7Y2hhcmFjdGVyRGF0YTohMH0pO2Z1bmN0aW9uIHBhKGEpe29hLnB1c2goYSk7bWEudGV4dENvbnRlbnQ9bmErK312YXIgcWE9ZG9jdW1lbnQuY29udGFpbnM/ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5fX3NoYWR5X25hdGl2ZV9jb250YWlucyhiKX06ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09PWJ8fGEuZG9jdW1lbnRFbGVtZW50JiZhLmRvY3VtZW50RWxlbWVudC5fX3NoYWR5X25hdGl2ZV9jb250YWlucyhiKX07ZnVuY3Rpb24gcmEoYSxiKXtmb3IoO2I7KXtpZihiPT1hKXJldHVybiEwO2I9Yi5fX3NoYWR5X3BhcmVudE5vZGV9cmV0dXJuITF9XG5mdW5jdGlvbiB6KGEpe2Zvcih2YXIgYj1hLmxlbmd0aC0xOzA8PWI7Yi0tKXt2YXIgYz1hW2JdLGQ9Yy5nZXRBdHRyaWJ1dGUoXCJpZFwiKXx8Yy5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpO2QmJlwibGVuZ3RoXCIhPT1kJiZpc05hTihkKSYmKGFbZF09Yyl9YS5pdGVtPWZ1bmN0aW9uKGUpe3JldHVybiBhW2VdfTthLm5hbWVkSXRlbT1mdW5jdGlvbihlKXtpZihcImxlbmd0aFwiIT09ZSYmaXNOYU4oZSkmJmFbZV0pcmV0dXJuIGFbZV07Zm9yKHZhciBmPXAoYSksZz1mLm5leHQoKTshZy5kb25lO2c9Zi5uZXh0KCkpaWYoZz1nLnZhbHVlLChnLmdldEF0dHJpYnV0ZShcImlkXCIpfHxnLmdldEF0dHJpYnV0ZShcIm5hbWVcIikpPT1lKXJldHVybiBnO3JldHVybiBudWxsfTtyZXR1cm4gYX1mdW5jdGlvbiBzYShhKXt2YXIgYj1bXTtmb3IoYT1hLl9fc2hhZHlfbmF0aXZlX2ZpcnN0Q2hpbGQ7YTthPWEuX19zaGFkeV9uYXRpdmVfbmV4dFNpYmxpbmcpYi5wdXNoKGEpO3JldHVybiBifVxuZnVuY3Rpb24gdGEoYSl7dmFyIGI9W107Zm9yKGE9YS5fX3NoYWR5X2ZpcnN0Q2hpbGQ7YTthPWEuX19zaGFkeV9uZXh0U2libGluZyliLnB1c2goYSk7cmV0dXJuIGJ9ZnVuY3Rpb24gdWEoYSxiLGMpe2MuY29uZmlndXJhYmxlPSEwO2lmKGMudmFsdWUpYVtiXT1jLnZhbHVlO2Vsc2UgdHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIsYyl9Y2F0Y2goZCl7fX1mdW5jdGlvbiBBKGEsYixjLGQpe2M9dm9pZCAwPT09Yz9cIlwiOmM7Zm9yKHZhciBlIGluIGIpZCYmMDw9ZC5pbmRleE9mKGUpfHx1YShhLGMrZSxiW2VdKX1mdW5jdGlvbiB2YShhLGIpe2Zvcih2YXIgYyBpbiBiKWMgaW4gYSYmdWEoYSxjLGJbY10pfWZ1bmN0aW9uIEIoYSl7dmFyIGI9e307T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSkuZm9yRWFjaChmdW5jdGlvbihjKXtiW2NdPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSxjKX0pO3JldHVybiBifVxuZnVuY3Rpb24gd2EoYSxiKXtmb3IodmFyIGM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYiksZD0wLGU7ZDxjLmxlbmd0aDtkKyspZT1jW2RdLGFbZV09YltlXX1mdW5jdGlvbiB4YShhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIE5vZGU/YTpkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiK2EpfWZ1bmN0aW9uIEQoYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7KytjKWJbY109YXJndW1lbnRzW2NdO2lmKDE9PT1iLmxlbmd0aClyZXR1cm4geGEoYlswXSk7Yz1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Yj1wKGIpO2Zvcih2YXIgZD1iLm5leHQoKTshZC5kb25lO2Q9Yi5uZXh0KCkpYy5hcHBlbmRDaGlsZCh4YShkLnZhbHVlKSk7cmV0dXJuIGN9XG5mdW5jdGlvbiB5YShhKXt2YXIgYjtmb3IoYj12b2lkIDA9PT1iPzE6YjswPGI7Yi0tKWE9YS5yZWR1Y2UoZnVuY3Rpb24oYyxkKXtBcnJheS5pc0FycmF5KGQpP2MucHVzaC5hcHBseShjLHEoZCkpOmMucHVzaChkKTtyZXR1cm4gY30sW10pO3JldHVybiBhfWZ1bmN0aW9uIHphKGEpe3ZhciBiPVtdLGM9bmV3IFNldDthPXAoYSk7Zm9yKHZhciBkPWEubmV4dCgpOyFkLmRvbmU7ZD1hLm5leHQoKSlkPWQudmFsdWUsYy5oYXMoZCl8fChiLnB1c2goZCksYy5hZGQoZCkpO3JldHVybiBifTt2YXIgRT1bXSxBYTtmdW5jdGlvbiBCYShhKXtBYXx8KEFhPSEwLHBhKEYpKTtFLnB1c2goYSl9ZnVuY3Rpb24gRigpe0FhPSExO2Zvcih2YXIgYT0hIUUubGVuZ3RoO0UubGVuZ3RoOylFLnNoaWZ0KCkoKTtyZXR1cm4gYX1GLmxpc3Q9RTtmdW5jdGlvbiBDYSgpe3RoaXMuZz0hMTt0aGlzLmFkZGVkTm9kZXM9W107dGhpcy5yZW1vdmVkTm9kZXM9W107dGhpcy5IPW5ldyBTZXR9ZnVuY3Rpb24gRGEoYSl7YS5nfHwoYS5nPSEwLHBhKGZ1bmN0aW9uKCl7YS5mbHVzaCgpfSkpfUNhLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuZyl7dGhpcy5nPSExO3ZhciBhPXRoaXMudGFrZVJlY29yZHMoKTthLmxlbmd0aCYmdGhpcy5ILmZvckVhY2goZnVuY3Rpb24oYil7YihhKX0pfX07Q2EucHJvdG90eXBlLnRha2VSZWNvcmRzPWZ1bmN0aW9uKCl7aWYodGhpcy5hZGRlZE5vZGVzLmxlbmd0aHx8dGhpcy5yZW1vdmVkTm9kZXMubGVuZ3RoKXt2YXIgYT1be2FkZGVkTm9kZXM6dGhpcy5hZGRlZE5vZGVzLHJlbW92ZWROb2Rlczp0aGlzLnJlbW92ZWROb2Rlc31dO3RoaXMuYWRkZWROb2Rlcz1bXTt0aGlzLnJlbW92ZWROb2Rlcz1bXTtyZXR1cm4gYX1yZXR1cm5bXX07XG5mdW5jdGlvbiBFYShhLGIpe3ZhciBjPXQoYSk7Yy5CfHwoYy5CPW5ldyBDYSk7Yy5CLkguYWRkKGIpO3ZhciBkPWMuQjtyZXR1cm57WjpiLGJhOmQsYWE6YSx0YWtlUmVjb3JkczpmdW5jdGlvbigpe3JldHVybiBkLnRha2VSZWNvcmRzKCl9fX1mdW5jdGlvbiBGYShhKXt2YXIgYj1hJiZhLmJhO2ImJihiLkguZGVsZXRlKGEuWiksYi5ILnNpemV8fCh0KGEuYWEpLkI9bnVsbCkpfVxuZnVuY3Rpb24gR2EoYSxiKXt2YXIgYz1iLmdldFJvb3ROb2RlKCk7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGQpe3ZhciBlPWM9PT1kLnRhcmdldC5nZXRSb290Tm9kZSgpO2lmKGUmJmQuYWRkZWROb2Rlcyl7aWYoZT1bXS5zbGljZS5jYWxsKGQuYWRkZWROb2RlcykuZmlsdGVyKGZ1bmN0aW9uKGYpe3JldHVybiBjPT09Zi5nZXRSb290Tm9kZSgpfSksZS5sZW5ndGgpcmV0dXJuIGQ9T2JqZWN0LmNyZWF0ZShkKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCxcImFkZGVkTm9kZXNcIix7dmFsdWU6ZSxjb25maWd1cmFibGU6ITB9KSxkfWVsc2UgaWYoZSlyZXR1cm4gZH0pLmZpbHRlcihmdW5jdGlvbihkKXtyZXR1cm4gZH0pfTt2YXIgSGE9L1smXFx1MDBBMFwiXS9nLElhPS9bJlxcdTAwQTA8Pl0vZztmdW5jdGlvbiBKYShhKXtzd2l0Y2goYSl7Y2FzZSBcIiZcIjpyZXR1cm5cIiZhbXA7XCI7Y2FzZSBcIjxcIjpyZXR1cm5cIiZsdDtcIjtjYXNlIFwiPlwiOnJldHVyblwiJmd0O1wiO2Nhc2UgJ1wiJzpyZXR1cm5cIiZxdW90O1wiO2Nhc2UgXCJcXHUwMGEwXCI6cmV0dXJuXCImbmJzcDtcIn19ZnVuY3Rpb24gS2EoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPGEubGVuZ3RoO2MrKyliW2FbY11dPSEwO3JldHVybiBifXZhciBMYT1LYShcImFyZWEgYmFzZSBiciBjb2wgY29tbWFuZCBlbWJlZCBociBpbWcgaW5wdXQga2V5Z2VuIGxpbmsgbWV0YSBwYXJhbSBzb3VyY2UgdHJhY2sgd2JyXCIuc3BsaXQoXCIgXCIpKSxNYT1LYShcInN0eWxlIHNjcmlwdCB4bXAgaWZyYW1lIG5vZW1iZWQgbm9mcmFtZXMgcGxhaW50ZXh0IG5vc2NyaXB0XCIuc3BsaXQoXCIgXCIpKTtcbmZ1bmN0aW9uIE5hKGEsYil7XCJ0ZW1wbGF0ZVwiPT09YS5sb2NhbE5hbWUmJihhPWEuY29udGVudCk7Zm9yKHZhciBjPVwiXCIsZD1iP2IoYSk6YS5jaGlsZE5vZGVzLGU9MCxmPWQubGVuZ3RoLGc9dm9pZCAwO2U8ZiYmKGc9ZFtlXSk7ZSsrKXthOnt2YXIgaD1nO3ZhciBrPWEsbD1iO3N3aXRjaChoLm5vZGVUeXBlKXtjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOms9aC5sb2NhbE5hbWU7Zm9yKHZhciBtPVwiPFwiK2sscj1oLmF0dHJpYnV0ZXMsQz0wLFM7Uz1yW0NdO0MrKyltKz1cIiBcIitTLm5hbWUrJz1cIicrUy52YWx1ZS5yZXBsYWNlKEhhLEphKSsnXCInO20rPVwiPlwiO2g9TGFba10/bTptK05hKGgsbCkrXCI8L1wiK2srXCI+XCI7YnJlYWsgYTtjYXNlIE5vZGUuVEVYVF9OT0RFOmg9aC5kYXRhO2g9ayYmTWFbay5sb2NhbE5hbWVdP2g6aC5yZXBsYWNlKElhLEphKTticmVhayBhO2Nhc2UgTm9kZS5DT01NRU5UX05PREU6aD1cIlxceDNjIS0tXCIraC5kYXRhK1wiLS1cXHgzZVwiO2JyZWFrIGE7ZGVmYXVsdDp0aHJvdyB3aW5kb3cuY29uc29sZS5lcnJvcihoKSxcbkVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO319Yys9aH1yZXR1cm4gY307dmFyIEc9di5pLE9hPXtxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3F1ZXJ5U2VsZWN0b3IoYSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfcXVlcnlTZWxlY3RvckFsbChhKX19LFBhPXt9O2Z1bmN0aW9uIFFhKGEpe1BhW2FdPWZ1bmN0aW9uKGIpe3JldHVybiBiW1wiX19zaGFkeV9uYXRpdmVfXCIrYV19fWZ1bmN0aW9uIEgoYSxiKXtBKGEsYixcIl9fc2hhZHlfbmF0aXZlX1wiKTtmb3IodmFyIGMgaW4gYilRYShjKX1mdW5jdGlvbiBJKGEsYil7Yj12b2lkIDA9PT1iP1tdOmI7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY10sZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsZCk7ZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFwiX19zaGFkeV9uYXRpdmVfXCIrZCxlKSxlLnZhbHVlP09hW2RdfHwoT2FbZF09ZS52YWx1ZSk6UWEoZCkpfX1cbnZhciBKPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZG9jdW1lbnQsTm9kZUZpbHRlci5TSE9XX0FMTCxudWxsLCExKSxLPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZG9jdW1lbnQsTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsbnVsbCwhMSksUmE9ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KFwiaW5lcnRcIik7ZnVuY3Rpb24gU2EoYSl7Zm9yKHZhciBiO2I9YS5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkOylhLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGIpfXZhciBUYT1bXCJmaXJzdEVsZW1lbnRDaGlsZFwiLFwibGFzdEVsZW1lbnRDaGlsZFwiLFwiY2hpbGRyZW5cIixcImNoaWxkRWxlbWVudENvdW50XCJdLFVhPVtcInF1ZXJ5U2VsZWN0b3JcIixcInF1ZXJ5U2VsZWN0b3JBbGxcIixcImFwcGVuZFwiLFwicHJlcGVuZFwiLFwicmVwbGFjZUNoaWxkcmVuXCJdO1xuZnVuY3Rpb24gVmEoKXt2YXIgYT1bXCJkaXNwYXRjaEV2ZW50XCIsXCJhZGRFdmVudExpc3RlbmVyXCIsXCJyZW1vdmVFdmVudExpc3RlbmVyXCJdO3dpbmRvdy5FdmVudFRhcmdldD8oSSh3aW5kb3cuRXZlbnRUYXJnZXQucHJvdG90eXBlLGEpLHZvaWQgMD09PXdpbmRvdy5fX3NoYWR5X25hdGl2ZV9hZGRFdmVudExpc3RlbmVyJiZJKFdpbmRvdy5wcm90b3R5cGUsYSkpOihJKE5vZGUucHJvdG90eXBlLGEpLEkoV2luZG93LnByb3RvdHlwZSxhKSxJKFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSxhKSk7Rz9JKE5vZGUucHJvdG90eXBlLFwicGFyZW50Tm9kZSBmaXJzdENoaWxkIGxhc3RDaGlsZCBwcmV2aW91c1NpYmxpbmcgbmV4dFNpYmxpbmcgY2hpbGROb2RlcyBwYXJlbnRFbGVtZW50IHRleHRDb250ZW50XCIuc3BsaXQoXCIgXCIpKTpIKE5vZGUucHJvdG90eXBlLHtwYXJlbnROb2RlOntnZXQ6ZnVuY3Rpb24oKXtKLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEoucGFyZW50Tm9kZSgpfX0sZmlyc3RDaGlsZDp7Z2V0OmZ1bmN0aW9uKCl7Si5jdXJyZW50Tm9kZT1cbnRoaXM7cmV0dXJuIEouZmlyc3RDaGlsZCgpfX0sbGFzdENoaWxkOntnZXQ6ZnVuY3Rpb24oKXtKLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEoubGFzdENoaWxkKCl9fSxwcmV2aW91c1NpYmxpbmc6e2dldDpmdW5jdGlvbigpe0ouY3VycmVudE5vZGU9dGhpcztyZXR1cm4gSi5wcmV2aW91c1NpYmxpbmcoKX19LG5leHRTaWJsaW5nOntnZXQ6ZnVuY3Rpb24oKXtKLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEoubmV4dFNpYmxpbmcoKX19LGNoaWxkTm9kZXM6e2dldDpmdW5jdGlvbigpe3ZhciBiPVtdO0ouY3VycmVudE5vZGU9dGhpcztmb3IodmFyIGM9Si5maXJzdENoaWxkKCk7YzspYi5wdXNoKGMpLGM9Si5uZXh0U2libGluZygpO3JldHVybiBifX0scGFyZW50RWxlbWVudDp7Z2V0OmZ1bmN0aW9uKCl7Sy5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBLLnBhcmVudE5vZGUoKX19LHRleHRDb250ZW50OntnZXQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpjYXNlIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpmb3IodmFyIGI9XG5kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKHRoaXMsTm9kZUZpbHRlci5TSE9XX1RFWFQsbnVsbCwhMSksYz1cIlwiLGQ7ZD1iLm5leHROb2RlKCk7KWMrPWQubm9kZVZhbHVlO3JldHVybiBjO2RlZmF1bHQ6cmV0dXJuIHRoaXMubm9kZVZhbHVlfX0sc2V0OmZ1bmN0aW9uKGIpe2lmKFwidW5kZWZpbmVkXCI9PT10eXBlb2YgYnx8bnVsbD09PWIpYj1cIlwiO3N3aXRjaCh0aGlzLm5vZGVUeXBlKXtjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOmNhc2UgTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFOlNhKHRoaXMpOygwPGIubGVuZ3RofHx0aGlzLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpJiZ0aGlzLl9fc2hhZHlfbmF0aXZlX2luc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShiKSx2b2lkIDApO2JyZWFrO2RlZmF1bHQ6dGhpcy5ub2RlVmFsdWU9Yn19fX0pO0koTm9kZS5wcm90b3R5cGUsXCJhcHBlbmRDaGlsZCBpbnNlcnRCZWZvcmUgcmVtb3ZlQ2hpbGQgcmVwbGFjZUNoaWxkIGNsb25lTm9kZSBjb250YWluc1wiLnNwbGl0KFwiIFwiKSk7XG5JKEhUTUxFbGVtZW50LnByb3RvdHlwZSxbXCJwYXJlbnRFbGVtZW50XCIsXCJjb250YWluc1wiXSk7YT17Zmlyc3RFbGVtZW50Q2hpbGQ6e2dldDpmdW5jdGlvbigpe0suY3VycmVudE5vZGU9dGhpcztyZXR1cm4gSy5maXJzdENoaWxkKCl9fSxsYXN0RWxlbWVudENoaWxkOntnZXQ6ZnVuY3Rpb24oKXtLLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEsubGFzdENoaWxkKCl9fSxjaGlsZHJlbjp7Z2V0OmZ1bmN0aW9uKCl7dmFyIGI9W107Sy5jdXJyZW50Tm9kZT10aGlzO2Zvcih2YXIgYz1LLmZpcnN0Q2hpbGQoKTtjOyliLnB1c2goYyksYz1LLm5leHRTaWJsaW5nKCk7cmV0dXJuIHooYil9fSxjaGlsZEVsZW1lbnRDb3VudDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4/dGhpcy5jaGlsZHJlbi5sZW5ndGg6MH19fTtHPyhJKEVsZW1lbnQucHJvdG90eXBlLFRhKSxJKEVsZW1lbnQucHJvdG90eXBlLFtcInByZXZpb3VzRWxlbWVudFNpYmxpbmdcIixcIm5leHRFbGVtZW50U2libGluZ1wiLFxuXCJpbm5lckhUTUxcIixcImNsYXNzTmFtZVwiXSksSShIVE1MRWxlbWVudC5wcm90b3R5cGUsW1wiY2hpbGRyZW5cIixcImlubmVySFRNTFwiLFwiY2xhc3NOYW1lXCJdKSk6KEgoRWxlbWVudC5wcm90b3R5cGUsYSksSChFbGVtZW50LnByb3RvdHlwZSx7cHJldmlvdXNFbGVtZW50U2libGluZzp7Z2V0OmZ1bmN0aW9uKCl7Sy5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBLLnByZXZpb3VzU2libGluZygpfX0sbmV4dEVsZW1lbnRTaWJsaW5nOntnZXQ6ZnVuY3Rpb24oKXtLLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEsubmV4dFNpYmxpbmcoKX19LGlubmVySFRNTDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE5hKHRoaXMsc2EpfSxzZXQ6ZnVuY3Rpb24oYil7dmFyIGM9XCJ0ZW1wbGF0ZVwiPT09dGhpcy5sb2NhbE5hbWU/dGhpcy5jb250ZW50OnRoaXM7U2EoYyk7dmFyIGQ9dGhpcy5sb2NhbE5hbWV8fFwiZGl2XCI7ZD10aGlzLm5hbWVzcGFjZVVSSSYmdGhpcy5uYW1lc3BhY2VVUkkhPT1SYS5uYW1lc3BhY2VVUkk/XG5SYS5jcmVhdGVFbGVtZW50TlModGhpcy5uYW1lc3BhY2VVUkksZCk6UmEuY3JlYXRlRWxlbWVudChkKTtkLmlubmVySFRNTD1iO2ZvcihiPVwidGVtcGxhdGVcIj09PXRoaXMubG9jYWxOYW1lP2QuY29udGVudDpkO2Q9Yi5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkOyljLl9fc2hhZHlfbmF0aXZlX2luc2VydEJlZm9yZShkLHZvaWQgMCl9fSxjbGFzc05hbWU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpfHxcIlwifSxzZXQ6ZnVuY3Rpb24oYil7dGhpcy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLGIpfX19KSk7SShFbGVtZW50LnByb3RvdHlwZSxcInNldEF0dHJpYnV0ZSBnZXRBdHRyaWJ1dGUgaGFzQXR0cmlidXRlIHJlbW92ZUF0dHJpYnV0ZSB0b2dnbGVBdHRyaWJ1dGUgZm9jdXMgYmx1clwiLnNwbGl0KFwiIFwiKSk7SShFbGVtZW50LnByb3RvdHlwZSxVYSk7SShIVE1MRWxlbWVudC5wcm90b3R5cGUsW1wiZm9jdXNcIixcImJsdXJcIl0pO3dpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50JiZcbkkod2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQucHJvdG90eXBlLFtcImlubmVySFRNTFwiXSk7Rz9JKERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLFRhKTpIKERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLGEpO0koRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUsVWEpO0c/KEkoRG9jdW1lbnQucHJvdG90eXBlLFRhKSxJKERvY3VtZW50LnByb3RvdHlwZSxbXCJhY3RpdmVFbGVtZW50XCJdKSk6SChEb2N1bWVudC5wcm90b3R5cGUsYSk7SShEb2N1bWVudC5wcm90b3R5cGUsW1wiaW1wb3J0Tm9kZVwiLFwiZ2V0RWxlbWVudEJ5SWRcIixcImVsZW1lbnRGcm9tUG9pbnRcIixpYSgpXSk7SShEb2N1bWVudC5wcm90b3R5cGUsVWEpfTt2YXIgV2E9Qih7Z2V0IGNoaWxkTm9kZXMoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2NoaWxkTm9kZXN9LGdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9maXJzdENoaWxkfSxnZXQgbGFzdENoaWxkKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9sYXN0Q2hpbGR9LGdldCBjaGlsZEVsZW1lbnRDb3VudCgpe3JldHVybiB0aGlzLl9fc2hhZHlfY2hpbGRFbGVtZW50Q291bnR9LGdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9fc2hhZHlfY2hpbGRyZW59LGdldCBmaXJzdEVsZW1lbnRDaGlsZCgpe3JldHVybiB0aGlzLl9fc2hhZHlfZmlyc3RFbGVtZW50Q2hpbGR9LGdldCBsYXN0RWxlbWVudENoaWxkKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9sYXN0RWxlbWVudENoaWxkfSxnZXQgc2hhZG93Um9vdCgpe3JldHVybiB0aGlzLl9fc2hhZHlfc2hhZG93Um9vdH19KSxYYT1CKHtnZXQgdGV4dENvbnRlbnQoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X3RleHRDb250ZW50fSxzZXQgdGV4dENvbnRlbnQoYSl7dGhpcy5fX3NoYWR5X3RleHRDb250ZW50PVxuYX0sZ2V0IGlubmVySFRNTCgpe3JldHVybiB0aGlzLl9fc2hhZHlfaW5uZXJIVE1MfSxzZXQgaW5uZXJIVE1MKGEpe3RoaXMuX19zaGFkeV9pbm5lckhUTUw9YX19KSxZYT1CKHtnZXQgcGFyZW50RWxlbWVudCgpe3JldHVybiB0aGlzLl9fc2hhZHlfcGFyZW50RWxlbWVudH0sZ2V0IHBhcmVudE5vZGUoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X3BhcmVudE5vZGV9LGdldCBuZXh0U2libGluZygpe3JldHVybiB0aGlzLl9fc2hhZHlfbmV4dFNpYmxpbmd9LGdldCBwcmV2aW91c1NpYmxpbmcoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X3ByZXZpb3VzU2libGluZ30sZ2V0IG5leHRFbGVtZW50U2libGluZygpe3JldHVybiB0aGlzLl9fc2hhZHlfbmV4dEVsZW1lbnRTaWJsaW5nfSxnZXQgcHJldmlvdXNFbGVtZW50U2libGluZygpe3JldHVybiB0aGlzLl9fc2hhZHlfcHJldmlvdXNFbGVtZW50U2libGluZ30sZ2V0IGNsYXNzTmFtZSgpe3JldHVybiB0aGlzLl9fc2hhZHlfY2xhc3NOYW1lfSxzZXQgY2xhc3NOYW1lKGEpe3RoaXMuX19zaGFkeV9jbGFzc05hbWU9XG5hfX0pO2Z1bmN0aW9uIFphKGEpe2Zvcih2YXIgYiBpbiBhKXt2YXIgYz1hW2JdO2MmJihjLmVudW1lcmFibGU9ITEpfX1aYShXYSk7WmEoWGEpO1phKFlhKTt2YXIgJGE9di5pfHwhMD09PXYubCxhYj0kYT9mdW5jdGlvbigpe306ZnVuY3Rpb24oYSl7dmFyIGI9dChhKTtiLlh8fChiLlg9ITAsdmEoYSxZYSkpfSxiYj0kYT9mdW5jdGlvbigpe306ZnVuY3Rpb24oYSl7dmFyIGI9dChhKTtiLld8fChiLlc9ITAsdmEoYSxXYSksd2luZG93LmN1c3RvbUVsZW1lbnRzJiZ3aW5kb3cuY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayYmIXYubHx8dmEoYSxYYSkpfTt2YXIgTD1cIl9fZXZlbnRXcmFwcGVyc1wiK0RhdGUubm93KCksY2I9ZnVuY3Rpb24oKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV2ZW50LnByb3RvdHlwZSxcImNvbXBvc2VkXCIpO3JldHVybiBhP2Z1bmN0aW9uKGIpe3JldHVybiBhLmdldC5jYWxsKGIpfTpudWxsfSgpLGRiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe312YXIgYj0hMSxjPXtnZXQgY2FwdHVyZSgpe2I9ITA7cmV0dXJuITF9fTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRlc3RcIixhLGMpO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFwiLGEsYyk7cmV0dXJuIGJ9KCk7ZnVuY3Rpb24gZWIoYSl7aWYobnVsbD09PWF8fFwib2JqZWN0XCIhPT10eXBlb2YgYSYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGEpe3ZhciBiPSEhYTt2YXIgYz0hMX1lbHNle2I9ISFhLmNhcHR1cmU7Yz0hIWEub25jZTt2YXIgZD1hLm99cmV0dXJue1U6ZCxjYXB0dXJlOmIsb25jZTpjLFQ6ZGI/YTpifX1cbnZhciBmYj17Ymx1cjohMCxmb2N1czohMCxmb2N1c2luOiEwLGZvY3Vzb3V0OiEwLGNsaWNrOiEwLGRibGNsaWNrOiEwLG1vdXNlZG93bjohMCxtb3VzZWVudGVyOiEwLG1vdXNlbGVhdmU6ITAsbW91c2Vtb3ZlOiEwLG1vdXNlb3V0OiEwLG1vdXNlb3ZlcjohMCxtb3VzZXVwOiEwLHdoZWVsOiEwLGJlZm9yZWlucHV0OiEwLGlucHV0OiEwLGtleWRvd246ITAsa2V5dXA6ITAsY29tcG9zaXRpb25zdGFydDohMCxjb21wb3NpdGlvbnVwZGF0ZTohMCxjb21wb3NpdGlvbmVuZDohMCx0b3VjaHN0YXJ0OiEwLHRvdWNoZW5kOiEwLHRvdWNobW92ZTohMCx0b3VjaGNhbmNlbDohMCxwb2ludGVyb3ZlcjohMCxwb2ludGVyZW50ZXI6ITAscG9pbnRlcmRvd246ITAscG9pbnRlcm1vdmU6ITAscG9pbnRlcnVwOiEwLHBvaW50ZXJjYW5jZWw6ITAscG9pbnRlcm91dDohMCxwb2ludGVybGVhdmU6ITAsZ290cG9pbnRlcmNhcHR1cmU6ITAsbG9zdHBvaW50ZXJjYXB0dXJlOiEwLGRyYWdzdGFydDohMCxcbmRyYWc6ITAsZHJhZ2VudGVyOiEwLGRyYWdsZWF2ZTohMCxkcmFnb3ZlcjohMCxkcm9wOiEwLGRyYWdlbmQ6ITAsRE9NQWN0aXZhdGU6ITAsRE9NRm9jdXNJbjohMCxET01Gb2N1c091dDohMCxrZXlwcmVzczohMH0sZ2I9e0RPTUF0dHJNb2RpZmllZDohMCxET01BdHRyaWJ1dGVOYW1lQ2hhbmdlZDohMCxET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQ6ITAsRE9NRWxlbWVudE5hbWVDaGFuZ2VkOiEwLERPTU5vZGVJbnNlcnRlZDohMCxET01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQ6ITAsRE9NTm9kZVJlbW92ZWQ6ITAsRE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQ6ITAsRE9NU3VidHJlZU1vZGlmaWVkOiEwfTtmdW5jdGlvbiBoYihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIE5vZGU/YS5fX3NoYWR5X2dldFJvb3ROb2RlKCk6YX1cbmZ1bmN0aW9uIE0oYSxiKXt2YXIgYz1bXSxkPWE7Zm9yKGE9aGIoYSk7ZDspYy5wdXNoKGQpLGQ9ZC5fX3NoYWR5X2Fzc2lnbmVkU2xvdD9kLl9fc2hhZHlfYXNzaWduZWRTbG90OmQubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJmQuaG9zdCYmKGJ8fGQhPT1hKT9kLmhvc3Q6ZC5fX3NoYWR5X3BhcmVudE5vZGU7Y1tjLmxlbmd0aC0xXT09PWRvY3VtZW50JiZjLnB1c2god2luZG93KTtyZXR1cm4gY31mdW5jdGlvbiBpYihhKXthLl9fY29tcG9zZWRQYXRofHwoYS5fX2NvbXBvc2VkUGF0aD1NKGEudGFyZ2V0LCEwKSk7cmV0dXJuIGEuX19jb21wb3NlZFBhdGh9ZnVuY3Rpb24gamIoYSxiKXtpZigheClyZXR1cm4gYTthPU0oYSwhMCk7Zm9yKHZhciBjPTAsZCxlPXZvaWQgMCxmLGc9dm9pZCAwO2M8Yi5sZW5ndGg7YysrKWlmKGQ9YltjXSxmPWhiKGQpLGYhPT1lJiYoZz1hLmluZGV4T2YoZiksZT1mKSwheChmKXx8LTE8ZylyZXR1cm4gZH1cbnZhciBrYj17Z2V0IGNvbXBvc2VkKCl7dm9pZCAwPT09dGhpcy5fX2NvbXBvc2VkJiYoY2I/dGhpcy5fX2NvbXBvc2VkPVwiZm9jdXNpblwiPT09dGhpcy50eXBlfHxcImZvY3Vzb3V0XCI9PT10aGlzLnR5cGV8fGNiKHRoaXMpOiExIT09dGhpcy5pc1RydXN0ZWQmJih0aGlzLl9fY29tcG9zZWQ9ZmJbdGhpcy50eXBlXSkpO3JldHVybiB0aGlzLl9fY29tcG9zZWR8fCExfSxjb21wb3NlZFBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9fY29tcG9zZWRQYXRofHwodGhpcy5fX2NvbXBvc2VkUGF0aD1NKHRoaXMuX190YXJnZXQsdGhpcy5jb21wb3NlZCkpO3JldHVybiB0aGlzLl9fY29tcG9zZWRQYXRofSxnZXQgdGFyZ2V0KCl7cmV0dXJuIGpiKHRoaXMuY3VycmVudFRhcmdldHx8dGhpcy5fX3ByZXZpb3VzQ3VycmVudFRhcmdldCx0aGlzLmNvbXBvc2VkUGF0aCgpKX0sZ2V0IHJlbGF0ZWRUYXJnZXQoKXtpZighdGhpcy5fX3JlbGF0ZWRUYXJnZXQpcmV0dXJuIG51bGw7dGhpcy5fX3JlbGF0ZWRUYXJnZXRDb21wb3NlZFBhdGh8fFxuKHRoaXMuX19yZWxhdGVkVGFyZ2V0Q29tcG9zZWRQYXRoPU0odGhpcy5fX3JlbGF0ZWRUYXJnZXQsITApKTtyZXR1cm4gamIodGhpcy5jdXJyZW50VGFyZ2V0fHx0aGlzLl9fcHJldmlvdXNDdXJyZW50VGFyZ2V0LHRoaXMuX19yZWxhdGVkVGFyZ2V0Q29tcG9zZWRQYXRoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7RXZlbnQucHJvdG90eXBlLnN0b3BQcm9wYWdhdGlvbi5jYWxsKHRoaXMpO3RoaXMuSz0hMH0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7RXZlbnQucHJvdG90eXBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbi5jYWxsKHRoaXMpO3RoaXMuSz10aGlzLl9faW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPSEwfX0sbGI9di5pJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV2ZW50LnByb3RvdHlwZSxcImV2ZW50UGhhc2VcIik7XG5sYiYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrYixcImV2ZW50UGhhc2VcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudFRhcmdldD09PXRoaXMudGFyZ2V0P0V2ZW50LkFUX1RBUkdFVDp0aGlzLl9fc2hhZHlfbmF0aXZlX2V2ZW50UGhhc2V9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGtiLFwiX19zaGFkeV9uYXRpdmVfZXZlbnRQaGFzZVwiLGxiKSk7ZnVuY3Rpb24gbWIoYSl7ZnVuY3Rpb24gYihjLGQpe2M9bmV3IGEoYyxkKTtjLl9fY29tcG9zZWQ9ZCYmISFkLmNvbXBvc2VkO3JldHVybiBjfWIuX19wcm90b19fPWE7Yi5wcm90b3R5cGU9YS5wcm90b3R5cGU7cmV0dXJuIGJ9dmFyIG5iPXtmb2N1czohMCxibHVyOiEwfTtmdW5jdGlvbiBvYihhKXtyZXR1cm4gYS5fX3RhcmdldCE9PWEudGFyZ2V0fHxhLl9fcmVsYXRlZFRhcmdldCE9PWEucmVsYXRlZFRhcmdldH1cbmZ1bmN0aW9uIHBiKGEsYixjKXtpZihjPWIuX19oYW5kbGVycyYmYi5fX2hhbmRsZXJzW2EudHlwZV0mJmIuX19oYW5kbGVyc1thLnR5cGVdW2NdKWZvcih2YXIgZD0wLGU7KGU9Y1tkXSkmJighb2IoYSl8fGEudGFyZ2V0IT09YS5yZWxhdGVkVGFyZ2V0KSYmKGUuY2FsbChiLGEpLCFhLl9faW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKTtkKyspO312YXIgcWI9KG5ldyBFdmVudChcImVcIikpLmhhc093blByb3BlcnR5KFwiY3VycmVudFRhcmdldFwiKTtcbmZ1bmN0aW9uIHJiKGEpe2E9cWI/T2JqZWN0LmNyZWF0ZShhKTphO3ZhciBiPWEuY29tcG9zZWRQYXRoKCksYz1iLm1hcChmdW5jdGlvbihtKXtyZXR1cm4gamIobSxiKX0pLGQ9YS5idWJibGVzLGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLFwiY3VycmVudFRhcmdldFwiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcImN1cnJlbnRUYXJnZXRcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGt9fSk7dmFyIGY9RXZlbnQuQ0FQVFVSSU5HX1BIQVNFLGc9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLFwiZXZlbnRQaGFzZVwiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcImV2ZW50UGhhc2VcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ9fSk7dHJ5e2Zvcih2YXIgaD1iLmxlbmd0aC0xOzA8PWg7aC0tKXt2YXIgaz1iW2hdO2Y9az09PWNbaF0/RXZlbnQuQVRfVEFSR0VUOlxuRXZlbnQuQ0FQVFVSSU5HX1BIQVNFO3BiKGEsayxcImNhcHR1cmVcIik7aWYoYS5LKXJldHVybn1mb3IoaD0wO2g8Yi5sZW5ndGg7aCsrKXtrPWJbaF07dmFyIGw9az09PWNbaF07aWYobHx8ZClpZihmPWw/RXZlbnQuQVRfVEFSR0VUOkV2ZW50LkJVQkJMSU5HX1BIQVNFLHBiKGEsayxcImJ1YmJsZVwiKSxhLkspYnJlYWt9fWZpbmFsbHl7cWJ8fChlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFwiY3VycmVudFRhcmdldFwiLGUpOmRlbGV0ZSBhLmN1cnJlbnRUYXJnZXQsZz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcImV2ZW50UGhhc2VcIixnKTpkZWxldGUgYS5ldmVudFBoYXNlKX19ZnVuY3Rpb24gc2IoYSxiLGMsZCl7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBmPWFbZV0sZz1mLnR5cGUsaD1mLmNhcHR1cmU7aWYoYj09PWYubm9kZSYmYz09PWcmJmQ9PT1oKXJldHVybiBlfXJldHVybi0xfVxuZnVuY3Rpb24gdGIoYSl7RigpO3JldHVybiF2LkMmJnRoaXMgaW5zdGFuY2VvZiBOb2RlJiYhcWEoZG9jdW1lbnQsdGhpcyk/KGEuX190YXJnZXR8fHViKGEsdGhpcykscmIoYSkpOnRoaXMuX19zaGFkeV9uYXRpdmVfZGlzcGF0Y2hFdmVudChhKX1cbmZ1bmN0aW9uIHZiKGEsYixjKXt2YXIgZD10aGlzLGU9ZWIoYyksZj1lLmNhcHR1cmUsZz1lLm9uY2UsaD1lLlU7ZT1lLlQ7aWYoYil7dmFyIGs9dHlwZW9mIGI7aWYoXCJmdW5jdGlvblwiPT09a3x8XCJvYmplY3RcIj09PWspaWYoXCJvYmplY3RcIiE9PWt8fGIuaGFuZGxlRXZlbnQmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBiLmhhbmRsZUV2ZW50KXtpZihnYlthXSlyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9hZGRFdmVudExpc3RlbmVyKGEsYixlKTt2YXIgbD1ofHx0aGlzO2lmKGg9YltMXSl7aWYoLTE8c2IoaCxsLGEsZikpcmV0dXJufWVsc2UgYltMXT1bXTtoPWZ1bmN0aW9uKG0pe2cmJmQuX19zaGFkeV9yZW1vdmVFdmVudExpc3RlbmVyKGEsYixjKTttLl9fdGFyZ2V0fHx1YihtKTtpZihsIT09ZCl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLFwiY3VycmVudFRhcmdldFwiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobSxcImN1cnJlbnRUYXJnZXRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LFxuY29uZmlndXJhYmxlOiEwfSk7dmFyIEM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLFwiZXZlbnRQaGFzZVwiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobSxcImV2ZW50UGhhc2VcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGY/RXZlbnQuQ0FQVFVSSU5HX1BIQVNFOkV2ZW50LkJVQkJMSU5HX1BIQVNFfX0pfW0uX19wcmV2aW91c0N1cnJlbnRUYXJnZXQ9bS5jdXJyZW50VGFyZ2V0O2lmKCF4KGwpJiZcInNsb3RcIiE9PWwubG9jYWxOYW1lfHwtMSE9bS5jb21wb3NlZFBhdGgoKS5pbmRleE9mKGwpKWlmKG0uY29tcG9zZWR8fC0xPG0uY29tcG9zZWRQYXRoKCkuaW5kZXhPZihsKSlpZihvYihtKSYmbS50YXJnZXQ9PT1tLnJlbGF0ZWRUYXJnZXQpbS5ldmVudFBoYXNlPT09RXZlbnQuQlVCQkxJTkdfUEhBU0UmJm0uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7ZWxzZSBpZihtLmV2ZW50UGhhc2U9PT1FdmVudC5DQVBUVVJJTkdfUEhBU0V8fFxubS5idWJibGVzfHxtLnRhcmdldD09PWx8fGwgaW5zdGFuY2VvZiBXaW5kb3cpe3ZhciBTPVwiZnVuY3Rpb25cIj09PWs/Yi5jYWxsKGwsbSk6Yi5oYW5kbGVFdmVudCYmYi5oYW5kbGVFdmVudChtKTtsIT09ZCYmKHI/KE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtLFwiY3VycmVudFRhcmdldFwiLHIpLHI9bnVsbCk6ZGVsZXRlIG0uY3VycmVudFRhcmdldCxDPyhPYmplY3QuZGVmaW5lUHJvcGVydHkobSxcImV2ZW50UGhhc2VcIixDKSxDPW51bGwpOmRlbGV0ZSBtLmV2ZW50UGhhc2UpO3JldHVybiBTfX07YltMXS5wdXNoKHtub2RlOmwsdHlwZTphLGNhcHR1cmU6ZixmYTpofSk7dGhpcy5fX2hhbmRsZXJzPXRoaXMuX19oYW5kbGVyc3x8e307dGhpcy5fX2hhbmRsZXJzW2FdPXRoaXMuX19oYW5kbGVyc1thXXx8e2NhcHR1cmU6W10sYnViYmxlOltdfTt0aGlzLl9faGFuZGxlcnNbYV1bZj9cImNhcHR1cmVcIjpcImJ1YmJsZVwiXS5wdXNoKGgpO25iW2FdfHx0aGlzLl9fc2hhZHlfbmF0aXZlX2FkZEV2ZW50TGlzdGVuZXIoYSxcbmgsZSl9fX1mdW5jdGlvbiB3YihhLGIsYyl7aWYoYil7dmFyIGQ9ZWIoYyk7Yz1kLmNhcHR1cmU7dmFyIGU9ZC5VO2Q9ZC5UO2lmKGdiW2FdKXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUV2ZW50TGlzdGVuZXIoYSxiLGQpO3ZhciBmPWV8fHRoaXM7ZT12b2lkIDA7dmFyIGc9bnVsbDt0cnl7Zz1iW0xdfWNhdGNoKGgpe31nJiYoZj1zYihnLGYsYSxjKSwtMTxmJiYoZT1nLnNwbGljZShmLDEpWzBdLmZhLGcubGVuZ3RofHwoYltMXT12b2lkIDApKSk7dGhpcy5fX3NoYWR5X25hdGl2ZV9yZW1vdmVFdmVudExpc3RlbmVyKGEsZXx8YixkKTtlJiZ0aGlzLl9faGFuZGxlcnMmJnRoaXMuX19oYW5kbGVyc1thXSYmKGE9dGhpcy5fX2hhbmRsZXJzW2FdW2M/XCJjYXB0dXJlXCI6XCJidWJibGVcIl0sYj1hLmluZGV4T2YoZSksLTE8YiYmYS5zcGxpY2UoYiwxKSl9fVxuZnVuY3Rpb24geGIoKXtmb3IodmFyIGEgaW4gbmIpd2luZG93Ll9fc2hhZHlfbmF0aXZlX2FkZEV2ZW50TGlzdGVuZXIoYSxmdW5jdGlvbihiKXtiLl9fdGFyZ2V0fHwodWIoYikscmIoYikpfSwhMCl9dmFyIHliPUIoa2IpO2Z1bmN0aW9uIHViKGEsYil7Yj12b2lkIDA9PT1iP2EudGFyZ2V0OmI7YS5fX3RhcmdldD1iO2EuX19yZWxhdGVkVGFyZ2V0PWEucmVsYXRlZFRhcmdldDtpZih2Lmkpe2I9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpO2lmKCFiLmhhc093blByb3BlcnR5KFwiX19zaGFkeV9wYXRjaGVkUHJvdG9cIikpe3ZhciBjPU9iamVjdC5jcmVhdGUoYik7Yy5fX3NoYWR5X3NvdXJjZVByb3RvPWI7QShjLHliKTtiLl9fc2hhZHlfcGF0Y2hlZFByb3RvPWN9YS5fX3Byb3RvX189Yi5fX3NoYWR5X3BhdGNoZWRQcm90b31lbHNlIEEoYSx5Yil9dmFyIHpiPW1iKEV2ZW50KSxBYj1tYihDdXN0b21FdmVudCksQmI9bWIoTW91c2VFdmVudCk7XG5mdW5jdGlvbiBDYigpe2lmKCFjYiYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFdmVudC5wcm90b3R5cGUsXCJpc1RydXN0ZWRcIikpe3ZhciBhPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE1vdXNlRXZlbnQoXCJjbGlja1wiLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITAsY29tcG9zZWQ6ITB9KTt0aGlzLl9fc2hhZHlfZGlzcGF0Y2hFdmVudChiKX07RWxlbWVudC5wcm90b3R5cGUuY2xpY2s/RWxlbWVudC5wcm90b3R5cGUuY2xpY2s9YTpIVE1MRWxlbWVudC5wcm90b3R5cGUuY2xpY2smJihIVE1MRWxlbWVudC5wcm90b3R5cGUuY2xpY2s9YSl9fVxudmFyIERiPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEVsZW1lbnQucHJvdG90eXBlKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuXCJvblwiPT09YS5zdWJzdHJpbmcoMCwyKX0pLEViPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEhUTUxFbGVtZW50LnByb3RvdHlwZSkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVyblwib25cIj09PWEuc3Vic3RyaW5nKDAsMil9KTtmdW5jdGlvbiBGYihhKXtyZXR1cm57c2V0OmZ1bmN0aW9uKGIpe3ZhciBjPXQodGhpcyksZD1hLnN1YnN0cmluZygyKTtjLm18fChjLm09e30pO2MubVthXSYmdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGQsYy5tW2FdKTt0aGlzLl9fc2hhZHlfYWRkRXZlbnRMaXN0ZW5lcihkLGIpO2MubVthXT1ifSxnZXQ6ZnVuY3Rpb24oKXt2YXIgYj11KHRoaXMpO3JldHVybiBiJiZiLm0mJmIubVthXX0sY29uZmlndXJhYmxlOiEwfX07ZnVuY3Rpb24gTihhLGIpe3JldHVybntpbmRleDphLEQ6W10sRzpifX1cbmZ1bmN0aW9uIEdiKGEsYixjLGQpe3ZhciBlPTAsZj0wLGc9MCxoPTAsaz1NYXRoLm1pbihiLWUsZC1mKTtpZigwPT1lJiYwPT1mKWE6e2ZvcihnPTA7ZzxrO2crKylpZihhW2ddIT09Y1tnXSlicmVhayBhO2c9a31pZihiPT1hLmxlbmd0aCYmZD09Yy5sZW5ndGgpe2g9YS5sZW5ndGg7Zm9yKHZhciBsPWMubGVuZ3RoLG09MDttPGstZyYmSGIoYVstLWhdLGNbLS1sXSk7KW0rKztoPW19ZSs9ZztmKz1nO2ItPWg7ZC09aDtpZigwPT1iLWUmJjA9PWQtZilyZXR1cm5bXTtpZihlPT1iKXtmb3IoYj1OKGUsMCk7ZjxkOyliLkQucHVzaChjW2YrK10pO3JldHVybltiXX1pZihmPT1kKXJldHVybltOKGUsYi1lKV07az1lO2c9ZjtkPWQtZysxO2g9Yi1rKzE7Yj1BcnJheShkKTtmb3IobD0wO2w8ZDtsKyspYltsXT1BcnJheShoKSxiW2xdWzBdPWw7Zm9yKGw9MDtsPGg7bCsrKWJbMF1bbF09bDtmb3IobD0xO2w8ZDtsKyspZm9yKG09MTttPGg7bSsrKWlmKGFbayttLTFdPT09Y1tnK2wtMV0pYltsXVttXT1cbmJbbC0xXVttLTFdO2Vsc2V7dmFyIHI9YltsLTFdW21dKzEsQz1iW2xdW20tMV0rMTtiW2xdW21dPXI8Qz9yOkN9az1iLmxlbmd0aC0xO2c9YlswXS5sZW5ndGgtMTtkPWJba11bZ107Zm9yKGE9W107MDxrfHwwPGc7KTA9PWs/KGEucHVzaCgyKSxnLS0pOjA9PWc/KGEucHVzaCgzKSxrLS0pOihoPWJbay0xXVtnLTFdLGw9YltrLTFdW2ddLG09YltrXVtnLTFdLHI9bDxtP2w8aD9sOmg6bTxoP206aCxyPT1oPyhoPT1kP2EucHVzaCgwKTooYS5wdXNoKDEpLGQ9aCksay0tLGctLSk6cj09bD8oYS5wdXNoKDMpLGstLSxkPWwpOihhLnB1c2goMiksZy0tLGQ9bSkpO2EucmV2ZXJzZSgpO2I9dm9pZCAwO2s9W107Zm9yKGc9MDtnPGEubGVuZ3RoO2crKylzd2l0Y2goYVtnXSl7Y2FzZSAwOmImJihrLnB1c2goYiksYj12b2lkIDApO2UrKztmKys7YnJlYWs7Y2FzZSAxOmJ8fChiPU4oZSwwKSk7Yi5HKys7ZSsrO2IuRC5wdXNoKGNbZl0pO2YrKzticmVhaztjYXNlIDI6Ynx8KGI9TihlLDApKTtcbmIuRysrO2UrKzticmVhaztjYXNlIDM6Ynx8KGI9TihlLDApKSxiLkQucHVzaChjW2ZdKSxmKyt9YiYmay5wdXNoKGIpO3JldHVybiBrfWZ1bmN0aW9uIEhiKGEsYil7cmV0dXJuIGE9PT1ifTt2YXIgSWI9Qih7ZGlzcGF0Y2hFdmVudDp0YixhZGRFdmVudExpc3RlbmVyOnZiLHJlbW92ZUV2ZW50TGlzdGVuZXI6d2J9KTt2YXIgSmI9bnVsbDtmdW5jdGlvbiBPKCl7SmJ8fChKYj13aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5TY29waW5nU2hpbSk7cmV0dXJuIEpifHxudWxsfWZ1bmN0aW9uIEtiKGEsYixjKXt2YXIgZD1PKCk7cmV0dXJuIGQmJlwiY2xhc3NcIj09PWI/KGQuc2V0RWxlbWVudENsYXNzKGEsYyksITApOiExfWZ1bmN0aW9uIExiKGEsYil7dmFyIGM9TygpO2MmJmMudW5zY29wZU5vZGUoYSxiKX1mdW5jdGlvbiBNYihhLGIpe3ZhciBjPU8oKTtpZighYylyZXR1cm4hMDtpZihhLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKXtjPSEwO2ZvcihhPWEuX19zaGFkeV9maXJzdENoaWxkO2E7YT1hLl9fc2hhZHlfbmV4dFNpYmxpbmcpYz1jJiZNYihhLGIpO3JldHVybiBjfXJldHVybiBhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU/ITA6Yy5jdXJyZW50U2NvcGVGb3JOb2RlKGEpPT09Yn1cbmZ1bmN0aW9uIE5iKGEpe2lmKGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm5cIlwiO3ZhciBiPU8oKTtyZXR1cm4gYj9iLmN1cnJlbnRTY29wZUZvck5vZGUoYSk6XCJcIn1mdW5jdGlvbiBPYihhLGIpe2lmKGEpZm9yKGEubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmYihhKSxhPWEuX19zaGFkeV9maXJzdENoaWxkO2E7YT1hLl9fc2hhZHlfbmV4dFNpYmxpbmcpYS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZPYihhLGIpfTt2YXIgUGI9d2luZG93LmRvY3VtZW50LFFiPXYuQyxSYj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE5vZGUucHJvdG90eXBlLFwiaXNDb25uZWN0ZWRcIiksU2I9UmImJlJiLmdldDtmdW5jdGlvbiBUYihhKXtmb3IodmFyIGI7Yj1hLl9fc2hhZHlfZmlyc3RDaGlsZDspYS5fX3NoYWR5X3JlbW92ZUNoaWxkKGIpfWZ1bmN0aW9uIFViKGEpe3ZhciBiPXUoYSk7aWYoYiYmdm9pZCAwIT09Yi5KKWZvcihiPWEuX19zaGFkeV9maXJzdENoaWxkO2I7Yj1iLl9fc2hhZHlfbmV4dFNpYmxpbmcpVWIoYik7aWYoYT11KGEpKWEuSj12b2lkIDB9ZnVuY3Rpb24gVmIoYSl7dmFyIGI9YTtpZihhJiZcInNsb3RcIj09PWEubG9jYWxOYW1lKXt2YXIgYz11KGEpOyhjPWMmJmMudSkmJihiPWMubGVuZ3RoP2NbMF06VmIoYS5fX3NoYWR5X25leHRTaWJsaW5nKSl9cmV0dXJuIGJ9XG5mdW5jdGlvbiBXYihhLGIsYyl7aWYoYT0oYT11KGEpKSYmYS5CKXtpZihiKWlmKGIubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpZm9yKHZhciBkPTAsZT1iLmNoaWxkTm9kZXMubGVuZ3RoO2Q8ZTtkKyspYS5hZGRlZE5vZGVzLnB1c2goYi5jaGlsZE5vZGVzW2RdKTtlbHNlIGEuYWRkZWROb2Rlcy5wdXNoKGIpO2MmJmEucmVtb3ZlZE5vZGVzLnB1c2goYyk7RGEoYSl9fVxudmFyIGFjPUIoe2dldCBwYXJlbnROb2RlKCl7dmFyIGE9dSh0aGlzKTthPWEmJmEucGFyZW50Tm9kZTtyZXR1cm4gdm9pZCAwIT09YT9hOnRoaXMuX19zaGFkeV9uYXRpdmVfcGFyZW50Tm9kZX0sZ2V0IGZpcnN0Q2hpbGQoKXt2YXIgYT11KHRoaXMpO2E9YSYmYS5maXJzdENoaWxkO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkfSxnZXQgbGFzdENoaWxkKCl7dmFyIGE9dSh0aGlzKTthPWEmJmEubGFzdENoaWxkO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9sYXN0Q2hpbGR9LGdldCBuZXh0U2libGluZygpe3ZhciBhPXUodGhpcyk7YT1hJiZhLm5leHRTaWJsaW5nO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9uZXh0U2libGluZ30sZ2V0IHByZXZpb3VzU2libGluZygpe3ZhciBhPXUodGhpcyk7YT1hJiZhLnByZXZpb3VzU2libGluZztyZXR1cm4gdm9pZCAwIT09YT9hOnRoaXMuX19zaGFkeV9uYXRpdmVfcHJldmlvdXNTaWJsaW5nfSxcbmdldCBjaGlsZE5vZGVzKCl7aWYodyh0aGlzKSl7dmFyIGE9dSh0aGlzKTtpZighYS5jaGlsZE5vZGVzKXthLmNoaWxkTm9kZXM9W107Zm9yKHZhciBiPXRoaXMuX19zaGFkeV9maXJzdENoaWxkO2I7Yj1iLl9fc2hhZHlfbmV4dFNpYmxpbmcpYS5jaGlsZE5vZGVzLnB1c2goYil9dmFyIGM9YS5jaGlsZE5vZGVzfWVsc2UgYz10aGlzLl9fc2hhZHlfbmF0aXZlX2NoaWxkTm9kZXM7Yy5pdGVtPWZ1bmN0aW9uKGQpe3JldHVybiBjW2RdfTtyZXR1cm4gY30sZ2V0IHBhcmVudEVsZW1lbnQoKXt2YXIgYT11KHRoaXMpOyhhPWEmJmEucGFyZW50Tm9kZSkmJmEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSYmKGE9bnVsbCk7cmV0dXJuIHZvaWQgMCE9PWE/YTp0aGlzLl9fc2hhZHlfbmF0aXZlX3BhcmVudEVsZW1lbnR9LGdldCBpc0Nvbm5lY3RlZCgpe2lmKFNiJiZTYi5jYWxsKHRoaXMpKXJldHVybiEwO2lmKHRoaXMubm9kZVR5cGU9PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSlyZXR1cm4hMTtcbnZhciBhPXRoaXMub3duZXJEb2N1bWVudDtpZihudWxsPT09YXx8cWEoYSx0aGlzKSlyZXR1cm4hMDtmb3IoYT10aGlzO2EmJiEoYSBpbnN0YW5jZW9mIERvY3VtZW50KTspYT1hLl9fc2hhZHlfcGFyZW50Tm9kZXx8KHgoYSk/YS5ob3N0OnZvaWQgMCk7cmV0dXJuISEoYSYmYSBpbnN0YW5jZW9mIERvY3VtZW50KX0sZ2V0IHRleHRDb250ZW50KCl7aWYodyh0aGlzKSl7Zm9yKHZhciBhPVtdLGI9dGhpcy5fX3NoYWR5X2ZpcnN0Q2hpbGQ7YjtiPWIuX19zaGFkeV9uZXh0U2libGluZyliLm5vZGVUeXBlIT09Tm9kZS5DT01NRU5UX05PREUmJmEucHVzaChiLl9fc2hhZHlfdGV4dENvbnRlbnQpO3JldHVybiBhLmpvaW4oXCJcIil9cmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfdGV4dENvbnRlbnR9LHNldCB0ZXh0Q29udGVudChhKXtpZihcInVuZGVmaW5lZFwiPT09dHlwZW9mIGF8fG51bGw9PT1hKWE9XCJcIjtzd2l0Y2godGhpcy5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpjYXNlIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERTppZighdyh0aGlzKSYmXG52Lmkpe3ZhciBiPXRoaXMuX19zaGFkeV9maXJzdENoaWxkOyhiIT10aGlzLl9fc2hhZHlfbGFzdENoaWxkfHxiJiZiLm5vZGVUeXBlIT1Ob2RlLlRFWFRfTk9ERSkmJlRiKHRoaXMpO3RoaXMuX19zaGFkeV9uYXRpdmVfdGV4dENvbnRlbnQ9YX1lbHNlIFRiKHRoaXMpLCgwPGEubGVuZ3RofHx0aGlzLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpJiZ0aGlzLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGEpKTticmVhaztkZWZhdWx0OnRoaXMubm9kZVZhbHVlPWF9fSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oYSxiKXtpZih0aGlzLm93bmVyRG9jdW1lbnQhPT1QYiYmYS5vd25lckRvY3VtZW50IT09UGIpcmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfaW5zZXJ0QmVmb3JlKGEsYiksYTtpZihhPT09dGhpcyl0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmRDaGlsZCcgb24gJ05vZGUnOiBUaGUgbmV3IGNoaWxkIGVsZW1lbnQgY29udGFpbnMgdGhlIHBhcmVudC5cIik7XG5pZihiKXt2YXIgYz11KGIpO2M9YyYmYy5wYXJlbnROb2RlO2lmKHZvaWQgMCE9PWMmJmMhPT10aGlzfHx2b2lkIDA9PT1jJiZiLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGUhPT10aGlzKXRocm93IEVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2luc2VydEJlZm9yZScgb24gJ05vZGUnOiBUaGUgbm9kZSBiZWZvcmUgd2hpY2ggdGhlIG5ldyBub2RlIGlzIHRvIGJlIGluc2VydGVkIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMgbm9kZS5cIik7fWlmKGI9PT1hKXJldHVybiBhO1diKHRoaXMsYSk7dmFyIGQ9W10sZT0oYz1QKHRoaXMpKT9jLmhvc3QubG9jYWxOYW1lOk5iKHRoaXMpLGY9YS5fX3NoYWR5X3BhcmVudE5vZGU7aWYoZil7dmFyIGc9TmIoYSk7dmFyIGg9ISFjfHwhUChhKXx8UWImJnZvaWQgMCE9PXRoaXMuX19ub0luc2VydGlvblBvaW50O2YuX19zaGFkeV9yZW1vdmVDaGlsZChhLGgpfWY9ITA7dmFyIGs9KCFRYnx8dm9pZCAwPT09YS5fX25vSW5zZXJ0aW9uUG9pbnQmJnZvaWQgMD09PVxudGhpcy5fX25vSW5zZXJ0aW9uUG9pbnQpJiYhTWIoYSxlKSxsPWMmJiFhLl9fbm9JbnNlcnRpb25Qb2ludCYmKCFRYnx8YS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSk7aWYobHx8aylrJiYoZz1nfHxOYihhKSksT2IoYSxmdW5jdGlvbihtKXtsJiZcInNsb3RcIj09PW0ubG9jYWxOYW1lJiZkLnB1c2gobSk7aWYoayl7dmFyIHI9ZztPKCkmJihyJiZMYihtLHIpLChyPU8oKSkmJnIuc2NvcGVOb2RlKG0sZSkpfX0pO2QubGVuZ3RoJiYoWGIoYyksYy5qLnB1c2guYXBwbHkoYy5qLHEoZCkpLFEoYykpO3codGhpcykmJihZYihhLHRoaXMsYiksaD11KHRoaXMpLGgucm9vdD8oZj0hMSxqYSh0aGlzKSYmUShoLnJvb3QpKTpjJiZcInNsb3RcIj09PXRoaXMubG9jYWxOYW1lJiYoZj0hMSxRKGMpKSk7Zj8oYz14KHRoaXMpP3RoaXMuaG9zdDp0aGlzLGI/KGI9VmIoYiksYy5fX3NoYWR5X25hdGl2ZV9pbnNlcnRCZWZvcmUoYSxiKSk6Yy5fX3NoYWR5X25hdGl2ZV9hcHBlbmRDaGlsZChhKSk6XG5hLm93bmVyRG9jdW1lbnQhPT10aGlzLm93bmVyRG9jdW1lbnQmJnRoaXMub3duZXJEb2N1bWVudC5hZG9wdE5vZGUoYSk7cmV0dXJuIGF9LGFwcGVuZENoaWxkOmZ1bmN0aW9uKGEpe2lmKHRoaXMhPWF8fCF4KGEpKXJldHVybiB0aGlzLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKGEpfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihhLGIpe2I9dm9pZCAwPT09Yj8hMTpiO2lmKHRoaXMub3duZXJEb2N1bWVudCE9PVBiKXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGEpO2lmKGEuX19zaGFkeV9wYXJlbnROb2RlIT09dGhpcyl0aHJvdyBFcnJvcihcIlRoZSBub2RlIHRvIGJlIHJlbW92ZWQgaXMgbm90IGEgY2hpbGQgb2YgdGhpcyBub2RlOiBcIithKTtXYih0aGlzLG51bGwsYSk7dmFyIGM9UChhKSxkPWMmJlpiKGMsYSksZT11KHRoaXMpO2lmKHcodGhpcykmJigkYihhLHRoaXMpLGphKHRoaXMpKSl7UShlLnJvb3QpO3ZhciBmPSEwfWlmKE8oKSYmIWImJmMmJmEubm9kZVR5cGUhPT1cbk5vZGUuVEVYVF9OT0RFKXt2YXIgZz1OYihhKTtPYihhLGZ1bmN0aW9uKGgpe0xiKGgsZyl9KX1VYihhKTtjJiYoKGI9XCJzbG90XCI9PT10aGlzLmxvY2FsTmFtZSkmJihmPSEwKSwoZHx8YikmJlEoYykpO2Z8fChmPXgodGhpcyk/dGhpcy5ob3N0OnRoaXMsKCFlLnJvb3QmJlwic2xvdFwiIT09YS5sb2NhbE5hbWV8fGY9PT1hLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGUpJiZmLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGEpKTtyZXR1cm4gYX0scmVwbGFjZUNoaWxkOmZ1bmN0aW9uKGEsYil7dGhpcy5fX3NoYWR5X2luc2VydEJlZm9yZShhLGIpO3RoaXMuX19zaGFkeV9yZW1vdmVDaGlsZChiKTtyZXR1cm4gYX0sY2xvbmVOb2RlOmZ1bmN0aW9uKGEpe2lmKFwidGVtcGxhdGVcIj09dGhpcy5sb2NhbE5hbWUpcmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfY2xvbmVOb2RlKGEpO3ZhciBiPXRoaXMuX19zaGFkeV9uYXRpdmVfY2xvbmVOb2RlKCExKTtpZihhJiZiLm5vZGVUeXBlIT09Tm9kZS5BVFRSSUJVVEVfTk9ERSl7YT1cbnRoaXMuX19zaGFkeV9maXJzdENoaWxkO2Zvcih2YXIgYzthO2E9YS5fX3NoYWR5X25leHRTaWJsaW5nKWM9YS5fX3NoYWR5X2Nsb25lTm9kZSghMCksYi5fX3NoYWR5X2FwcGVuZENoaWxkKGMpfXJldHVybiBifSxnZXRSb290Tm9kZTpmdW5jdGlvbihhKXtpZih0aGlzJiZ0aGlzLm5vZGVUeXBlKXt2YXIgYj10KHRoaXMpLGM9Yi5KO3ZvaWQgMD09PWMmJih4KHRoaXMpPyhjPXRoaXMsYi5KPWMpOihjPShjPXRoaXMuX19zaGFkeV9wYXJlbnROb2RlKT9jLl9fc2hhZHlfZ2V0Um9vdE5vZGUoYSk6dGhpcyxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuX19zaGFkeV9uYXRpdmVfY29udGFpbnModGhpcykmJihiLko9YykpKTtyZXR1cm4gY319LGNvbnRhaW5zOmZ1bmN0aW9uKGEpe3JldHVybiByYSh0aGlzLGEpfX0pO3ZhciBSPUIoe2dldCBhc3NpZ25lZFNsb3QoKXt2YXIgYT10aGlzLl9fc2hhZHlfcGFyZW50Tm9kZTsoYT1hJiZhLl9fc2hhZHlfc2hhZG93Um9vdCkmJmJjKGEpO3JldHVybihhPXUodGhpcykpJiZhLmFzc2lnbmVkU2xvdHx8bnVsbH19KTsvKlxuXG4gQ29weXJpZ2h0IChjKSAyMDIyIFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9yc1xuIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2VcbiovXG52YXIgY2M9bmV3IE1hcDtbW1wiKFwiLHtlbmQ6XCIpXCIsSTohMH1dLFtcIltcIix7ZW5kOlwiXVwiLEk6ITB9XSxbJ1wiJyx7ZW5kOidcIicsSTohMX1dLFtcIidcIix7ZW5kOlwiJ1wiLEk6ITF9XV0uZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYj1wKGEpO2E9Yi5uZXh0KCkudmFsdWU7Yj1iLm5leHQoKS52YWx1ZTtjYy5zZXQoYSxiKX0pO2Z1bmN0aW9uIGRjKGEsYixjLGQpe2ZvcihkPXZvaWQgMD09PWQ/ITA6ZDtiPGEubGVuZ3RoO2IrKylpZihcIlxcXFxcIj09PWFbYl0mJmI8YS5sZW5ndGgtMSYmXCJcXG5cIiE9PWFbYisxXSliKys7ZWxzZXtpZigtMSE9PWMuaW5kZXhPZihhW2JdKSlyZXR1cm4gYjtpZihkJiZjYy5oYXMoYVtiXSkpe3ZhciBlPWNjLmdldChhW2JdKTtiPWRjKGEsYisxLFtlLmVuZF0sZS5JKX19cmV0dXJuIGEubGVuZ3RofVxuZnVuY3Rpb24gZWMoYSl7ZnVuY3Rpb24gYigpe2lmKDA8ZC5sZW5ndGgpe2Zvcig7XCIgXCI9PT1kW2QubGVuZ3RoLTFdOylkLnBvcCgpO2MucHVzaCh7UzpkLmZpbHRlcihmdW5jdGlvbihrLGwpe3JldHVybiAwPT09bCUyfSksY2E6ZC5maWx0ZXIoZnVuY3Rpb24oayxsKXtyZXR1cm4gMT09PWwlMn0pfSk7ZC5sZW5ndGg9MH19Zm9yKHZhciBjPVtdLGQ9W10sZT0wO2U8YS5sZW5ndGg7KXt2YXIgZj1kW2QubGVuZ3RoLTFdLGc9ZGMoYSxlLFtcIixcIixcIiBcIixcIj5cIixcIitcIixcIn5cIl0pLGg9Zz09PWU/YVtlXTphLnN1YnN0cmluZyhlLGcpO2lmKFwiLFwiPT09aCliKCk7ZWxzZSBpZigtMT09PVt2b2lkIDAsXCIgXCIsXCI+XCIsXCIrXCIsXCJ+XCJdLmluZGV4T2YoZil8fFwiIFwiIT09aClcIiBcIj09PWYmJi0xIT09W1wiPlwiLFwiK1wiLFwiflwiXS5pbmRleE9mKGgpP2RbZC5sZW5ndGgtMV09aDpkLnB1c2goaCk7ZT1nKyhnPT09ZT8xOjApfWIoKTtyZXR1cm4gY307ZnVuY3Rpb24gZmMoYSxiLGMpe3ZhciBkPVtdO2djKGEsYixjLGQpO3JldHVybiBkfWZ1bmN0aW9uIGdjKGEsYixjLGQpe2ZvcihhPWEuX19zaGFkeV9maXJzdENoaWxkO2E7YT1hLl9fc2hhZHlfbmV4dFNpYmxpbmcpe3ZhciBlO2lmKGU9YS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXtlPWE7dmFyIGY9YixnPWMsaD1kLGs9ZihlKTtrJiZoLnB1c2goZSk7ZyYmZyhrKT9lPWs6KGdjKGUsZixnLGgpLGU9dm9pZCAwKX1pZihlKWJyZWFrfX1cbnZhciBoYz17Z2V0IGZpcnN0RWxlbWVudENoaWxkKCl7dmFyIGE9dSh0aGlzKTtpZihhJiZ2b2lkIDAhPT1hLmZpcnN0Q2hpbGQpe2ZvcihhPXRoaXMuX19zaGFkeV9maXJzdENoaWxkO2EmJmEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERTspYT1hLl9fc2hhZHlfbmV4dFNpYmxpbmc7cmV0dXJuIGF9cmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfZmlyc3RFbGVtZW50Q2hpbGR9LGdldCBsYXN0RWxlbWVudENoaWxkKCl7dmFyIGE9dSh0aGlzKTtpZihhJiZ2b2lkIDAhPT1hLmxhc3RDaGlsZCl7Zm9yKGE9dGhpcy5fX3NoYWR5X2xhc3RDaGlsZDthJiZhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU7KWE9YS5fX3NoYWR5X3ByZXZpb3VzU2libGluZztyZXR1cm4gYX1yZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9sYXN0RWxlbWVudENoaWxkfSxnZXQgY2hpbGRyZW4oKXtyZXR1cm4gdyh0aGlzKT96KEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbCh0YSh0aGlzKSxmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlVHlwZT09PVxuTm9kZS5FTEVNRU5UX05PREV9KSk6dGhpcy5fX3NoYWR5X25hdGl2ZV9jaGlsZHJlbn0sZ2V0IGNoaWxkRWxlbWVudENvdW50KCl7dmFyIGE9dGhpcy5fX3NoYWR5X2NoaWxkcmVuO3JldHVybiBhP2EubGVuZ3RoOjB9fSxUPUIoKGhjLmFwcGVuZD1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDsrK2MpYltjXT1hcmd1bWVudHNbY107dGhpcy5fX3NoYWR5X2luc2VydEJlZm9yZShELmFwcGx5KG51bGwscShiKSksbnVsbCl9LGhjLnByZXBlbmQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7KytjKWJbY109YXJndW1lbnRzW2NdO3RoaXMuX19zaGFkeV9pbnNlcnRCZWZvcmUoRC5hcHBseShudWxsLHEoYikpLHRoaXMuX19zaGFkeV9maXJzdENoaWxkKX0saGMucmVwbGFjZUNoaWxkcmVuPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoOysrYyliW2NdPWFyZ3VtZW50c1tjXTtcbmZvcig7bnVsbCE9PShjPXRoaXMuX19zaGFkeV9maXJzdENoaWxkKTspdGhpcy5fX3NoYWR5X3JlbW92ZUNoaWxkKGMpO3RoaXMuX19zaGFkeV9pbnNlcnRCZWZvcmUoRC5hcHBseShudWxsLHEoYikpLG51bGwpfSxoYykpO1xuZnVuY3Rpb24gaWMoYSxiKXtmdW5jdGlvbiBjKGUsZil7cmV0dXJuKGU9PT1hfHwtMT09PWYuaW5kZXhPZihcIjpzY29wZVwiKSkmJmxhLmNhbGwoZSxmKX12YXIgZD1lYyhiKTtpZigxPmQubGVuZ3RoKXJldHVybltdO2ZvcihiPXlhKGZjKGEsZnVuY3Rpb24oKXtyZXR1cm4hMH0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4geWEoZC5tYXAoZnVuY3Rpb24oZil7dmFyIGc9Zi5TLGg9Zy5sZW5ndGgtMTtyZXR1cm4gYyhlLGdbaF0pP3t0YXJnZXQ6ZSx2OmYsQTplLGluZGV4Omh9OltdfSkpfSkpO2Iuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gMDxlLmluZGV4fSk7KWI9eWEoYi5tYXAoZnVuY3Rpb24oZSl7aWYoMD49ZS5pbmRleClyZXR1cm4gZTt2YXIgZj1lLnRhcmdldCxnPWUuQSxoPWUudjtlPWUuaW5kZXgtMTt2YXIgaz1oLmNhW2VdLGw9aC5TW2VdO2lmKFwiIFwiPT09ayl7az1bXTtmb3IoZz1nLl9fc2hhZHlfcGFyZW50RWxlbWVudDtnO2c9Zy5fX3NoYWR5X3BhcmVudEVsZW1lbnQpYyhnLFxubCkmJmsucHVzaCh7dGFyZ2V0OmYsdjpoLEE6ZyxpbmRleDplfSk7cmV0dXJuIGt9aWYoXCI+XCI9PT1rKXJldHVybiBnPWcuX19zaGFkeV9wYXJlbnRFbGVtZW50LGMoZyxsKT97dGFyZ2V0OmYsdjpoLEE6ZyxpbmRleDplfTpbXTtpZihcIitcIj09PWspcmV0dXJuKGc9Zy5fX3NoYWR5X3ByZXZpb3VzRWxlbWVudFNpYmxpbmcpJiZjKGcsbCk/e3RhcmdldDpmLHY6aCxBOmcsaW5kZXg6ZX06W107aWYoXCJ+XCI9PT1rKXtrPVtdO2ZvcihnPWcuX19zaGFkeV9wcmV2aW91c0VsZW1lbnRTaWJsaW5nO2c7Zz1nLl9fc2hhZHlfcHJldmlvdXNFbGVtZW50U2libGluZyljKGcsbCkmJmsucHVzaCh7dGFyZ2V0OmYsdjpoLEE6ZyxpbmRleDplfSk7cmV0dXJuIGt9dGhyb3cgRXJyb3IoXCJVbnJlY29nbml6ZWQgY29tYmluYXRvcjogJ1wiK2srXCInLlwiKTt9KSk7cmV0dXJuIHphKGIubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRhcmdldH0pKX1cbnZhciBVPXYucXVlcnlTZWxlY3RvckltcGxlbWVudGF0aW9uLGpjPUIoe3F1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oYSl7aWYoXCJuYXRpdmVcIj09PVUpe3ZhciBiPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCh0aGlzIGluc3RhbmNlb2YgU2hhZG93Um9vdD90aGlzLmhvc3Q6dGhpcykuX19zaGFkeV9uYXRpdmVfcXVlcnlTZWxlY3RvckFsbChhKSksYz10aGlzLl9fc2hhZHlfZ2V0Um9vdE5vZGUoKTtiPXAoYik7Zm9yKHZhciBkPWIubmV4dCgpOyFkLmRvbmU7ZD1iLm5leHQoKSlpZihkPWQudmFsdWUsZC5fX3NoYWR5X2dldFJvb3ROb2RlKCk9PWMpcmV0dXJuIGQ7cmV0dXJuIG51bGx9aWYoXCJzZWxlY3RvckVuZ2luZVwiPT09VSlyZXR1cm4gaWModGhpcyxhKVswXXx8bnVsbDtpZih2b2lkIDA9PT1VKXJldHVybiBmYyh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybiBsYS5jYWxsKGUsYSl9LGZ1bmN0aW9uKGUpe3JldHVybiEhZX0pWzBdfHxudWxsO3Rocm93IEVycm9yKFwiVW5yZWNvZ25pemVkIHZhbHVlIG9mIFNoYWR5RE9NLnF1ZXJ5U2VsZWN0b3JJbXBsZW1lbnRhdGlvbjogJ1wiK1xuKFUrXCInXCIpKTt9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oYSxiKXtpZihifHxcIm5hdGl2ZVwiPT09VSl7Yj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCgodGhpcyBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q/dGhpcy5ob3N0OnRoaXMpLl9fc2hhZHlfbmF0aXZlX3F1ZXJ5U2VsZWN0b3JBbGwoYSkpO3ZhciBjPXRoaXMuX19zaGFkeV9nZXRSb290Tm9kZSgpO3JldHVybiB6KGIuZmlsdGVyKGZ1bmN0aW9uKGQpe3JldHVybiBkLl9fc2hhZHlfZ2V0Um9vdE5vZGUoKT09Y30pKX1pZihcInNlbGVjdG9yRW5naW5lXCI9PT1VKXJldHVybiB6KGljKHRoaXMsYSkpO2lmKHZvaWQgMD09PVUpcmV0dXJuIHooZmModGhpcyxmdW5jdGlvbihkKXtyZXR1cm4gbGEuY2FsbChkLGEpfSkpO3Rocm93IEVycm9yKFwiVW5yZWNvZ25pemVkIHZhbHVlIG9mIFNoYWR5RE9NLnF1ZXJ5U2VsZWN0b3JJbXBsZW1lbnRhdGlvbjogJ1wiKyhVK1wiJ1wiKSk7fX0pLGtjPXYuQyYmIXYubD93YSh7fSxUKTpUO3dhKFQsamMpOy8qXG5cbkNvcHlyaWdodCAoYykgMjAyMCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5UaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG5UaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG5Db2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiovXG52YXIgbGM9Qih7YWZ0ZXI6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7KytjKWJbY109YXJndW1lbnRzW2NdO2M9dGhpcy5fX3NoYWR5X3BhcmVudE5vZGU7aWYobnVsbCE9PWMpe3ZhciBkPXRoaXMuX19zaGFkeV9uZXh0U2libGluZztjLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKEQuYXBwbHkobnVsbCxxKGIpKSxkKX19LGJlZm9yZTpmdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDsrK2MpYltjXT1hcmd1bWVudHNbY107Yz10aGlzLl9fc2hhZHlfcGFyZW50Tm9kZTtudWxsIT09YyYmYy5fX3NoYWR5X2luc2VydEJlZm9yZShELmFwcGx5KG51bGwscShiKSksdGhpcyl9LHJlbW92ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX19zaGFkeV9wYXJlbnROb2RlO251bGwhPT1hJiZhLl9fc2hhZHlfcmVtb3ZlQ2hpbGQodGhpcyl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoOysrYyliW2NdPVxuYXJndW1lbnRzW2NdO2M9dGhpcy5fX3NoYWR5X3BhcmVudE5vZGU7aWYobnVsbCE9PWMpe3ZhciBkPXRoaXMuX19zaGFkeV9uZXh0U2libGluZztjLl9fc2hhZHlfcmVtb3ZlQ2hpbGQodGhpcyk7Yy5fX3NoYWR5X2luc2VydEJlZm9yZShELmFwcGx5KG51bGwscShiKSksZCl9fX0pO3ZhciBtYz13aW5kb3cuZG9jdW1lbnQ7ZnVuY3Rpb24gbmMoYSxiKXtpZihcInNsb3RcIj09PWIpYT1hLl9fc2hhZHlfcGFyZW50Tm9kZSxqYShhKSYmUSh1KGEpLnJvb3QpO2Vsc2UgaWYoXCJzbG90XCI9PT1hLmxvY2FsTmFtZSYmXCJuYW1lXCI9PT1iJiYoYj1QKGEpKSl7aWYoYi5nKXtvYyhiKTt2YXIgYz1hLlksZD1wYyhhKTtpZihkIT09Yyl7Yz1iLmhbY107dmFyIGU9Yy5pbmRleE9mKGEpOzA8PWUmJmMuc3BsaWNlKGUsMSk7Yz1iLmhbZF18fChiLmhbZF09W10pO2MucHVzaChhKTsxPGMubGVuZ3RoJiYoYi5oW2RdPXFjKGMpKX19UShiKX19XG52YXIgcmM9Qih7Z2V0IHByZXZpb3VzRWxlbWVudFNpYmxpbmcoKXt2YXIgYT11KHRoaXMpO2lmKGEmJnZvaWQgMCE9PWEucHJldmlvdXNTaWJsaW5nKXtmb3IoYT10aGlzLl9fc2hhZHlfcHJldmlvdXNTaWJsaW5nO2EmJmEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERTspYT1hLl9fc2hhZHlfcHJldmlvdXNTaWJsaW5nO3JldHVybiBhfXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3ByZXZpb3VzRWxlbWVudFNpYmxpbmd9LGdldCBuZXh0RWxlbWVudFNpYmxpbmcoKXt2YXIgYT11KHRoaXMpO2lmKGEmJnZvaWQgMCE9PWEubmV4dFNpYmxpbmcpe2ZvcihhPXRoaXMuX19zaGFkeV9uZXh0U2libGluZzthJiZhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU7KWE9YS5fX3NoYWR5X25leHRTaWJsaW5nO3JldHVybiBhfXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX25leHRFbGVtZW50U2libGluZ30sZ2V0IHNsb3QoKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJzbG90XCIpfSxcbnNldCBzbG90KGEpe3RoaXMuX19zaGFkeV9zZXRBdHRyaWJ1dGUoXCJzbG90XCIsYSl9LGdldCBjbGFzc05hbWUoKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIn0sc2V0IGNsYXNzTmFtZShhKXt0aGlzLl9fc2hhZHlfc2V0QXR0cmlidXRlKFwiY2xhc3NcIixhKX0sc2V0QXR0cmlidXRlOmZ1bmN0aW9uKGEsYil7dGhpcy5vd25lckRvY3VtZW50IT09bWM/dGhpcy5fX3NoYWR5X25hdGl2ZV9zZXRBdHRyaWJ1dGUoYSxiKTpLYih0aGlzLGEsYil8fCh0aGlzLl9fc2hhZHlfbmF0aXZlX3NldEF0dHJpYnV0ZShhLGIpLG5jKHRoaXMsYSkpfSxyZW1vdmVBdHRyaWJ1dGU6ZnVuY3Rpb24oYSl7dGhpcy5vd25lckRvY3VtZW50IT09bWM/dGhpcy5fX3NoYWR5X25hdGl2ZV9yZW1vdmVBdHRyaWJ1dGUoYSk6S2IodGhpcyxhLFwiXCIpP1wiXCI9PT10aGlzLmdldEF0dHJpYnV0ZShhKSYmdGhpcy5fX3NoYWR5X25hdGl2ZV9yZW1vdmVBdHRyaWJ1dGUoYSk6KHRoaXMuX19zaGFkeV9uYXRpdmVfcmVtb3ZlQXR0cmlidXRlKGEpLFxubmModGhpcyxhKSl9LHRvZ2dsZUF0dHJpYnV0ZTpmdW5jdGlvbihhLGIpe2lmKHRoaXMub3duZXJEb2N1bWVudCE9PW1jKXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3RvZ2dsZUF0dHJpYnV0ZShhLGIpO2lmKCFLYih0aGlzLGEsXCJcIikpcmV0dXJuIGI9dGhpcy5fX3NoYWR5X25hdGl2ZV90b2dnbGVBdHRyaWJ1dGUoYSxiKSxuYyh0aGlzLGEpLGI7aWYoXCJcIj09PXRoaXMuZ2V0QXR0cmlidXRlKGEpJiYhYilyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV90b2dnbGVBdHRyaWJ1dGUoYSxiKX19KTt2LkN8fERiLmZvckVhY2goZnVuY3Rpb24oYSl7cmNbYV09RmIoYSl9KTtcbnZhciB3Yz1CKHthdHRhY2hTaGFkb3c6ZnVuY3Rpb24oYSl7aWYoIXRoaXMpdGhyb3cgRXJyb3IoXCJNdXN0IHByb3ZpZGUgYSBob3N0LlwiKTtpZighYSl0aHJvdyBFcnJvcihcIk5vdCBlbm91Z2ggYXJndW1lbnRzLlwiKTtpZihhLnNoYWR5VXBncmFkZUZyYWdtZW50JiYhdi5WKXt2YXIgYj1hLnNoYWR5VXBncmFkZUZyYWdtZW50O2IuX19wcm90b19fPVNoYWRvd1Jvb3QucHJvdG90eXBlO3NjKGIsdGhpcyxhKTt0YyhiLGIpO2E9Yi5fX25vSW5zZXJ0aW9uUG9pbnQ/bnVsbDpiLnF1ZXJ5U2VsZWN0b3JBbGwoXCJzbG90XCIpO2IuX19ub0luc2VydGlvblBvaW50PXZvaWQgMDtpZihhJiZhLmxlbmd0aCl7dmFyIGM9YjtYYihjKTtjLmoucHVzaC5hcHBseShjLmoscShhKSk7UShiKX1iLmhvc3QuX19zaGFkeV9uYXRpdmVfYXBwZW5kQ2hpbGQoYil9ZWxzZSBiPW5ldyB1Yyh2Yyx0aGlzLGEpO3JldHVybiB0aGlzLl9fQ0Vfc2hhZG93Um9vdD1ifSxnZXQgc2hhZG93Um9vdCgpe3ZhciBhPXUodGhpcyk7XG5yZXR1cm4gYSYmYS5lYXx8bnVsbH19KTt3YShyYyx3Yyk7dmFyIHhjPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudChcImluZXJ0XCIpLHljPUIoe2dldCBpbm5lckhUTUwoKXtyZXR1cm4gdyh0aGlzKT9OYShcInRlbXBsYXRlXCI9PT10aGlzLmxvY2FsTmFtZT90aGlzLmNvbnRlbnQ6dGhpcyx0YSk6dGhpcy5fX3NoYWR5X25hdGl2ZV9pbm5lckhUTUx9LHNldCBpbm5lckhUTUwoYSl7aWYoXCJ0ZW1wbGF0ZVwiPT09dGhpcy5sb2NhbE5hbWUpdGhpcy5fX3NoYWR5X25hdGl2ZV9pbm5lckhUTUw9YTtlbHNle1RiKHRoaXMpO3ZhciBiPXRoaXMubG9jYWxOYW1lfHxcImRpdlwiO2I9dGhpcy5uYW1lc3BhY2VVUkkmJnRoaXMubmFtZXNwYWNlVVJJIT09eGMubmFtZXNwYWNlVVJJP3hjLmNyZWF0ZUVsZW1lbnROUyh0aGlzLm5hbWVzcGFjZVVSSSxiKTp4Yy5jcmVhdGVFbGVtZW50KGIpO2Zvcih2Lmk/Yi5fX3NoYWR5X25hdGl2ZV9pbm5lckhUTUw9YTpiLmlubmVySFRNTD1hO2E9Yi5fX3NoYWR5X2ZpcnN0Q2hpbGQ7KXRoaXMuX19zaGFkeV9pbnNlcnRCZWZvcmUoYSl9fX0pO3ZhciB6Yz1CKHtibHVyOmZ1bmN0aW9uKCl7dmFyIGE9dSh0aGlzKTsoYT0oYT1hJiZhLnJvb3QpJiZhLmFjdGl2ZUVsZW1lbnQpP2EuX19zaGFkeV9ibHVyKCk6dGhpcy5fX3NoYWR5X25hdGl2ZV9ibHVyKCl9fSk7di5DfHxFYi5mb3JFYWNoKGZ1bmN0aW9uKGEpe3pjW2FdPUZiKGEpfSk7dmFyIEFjPUIoe2Fzc2lnbmVkTm9kZXM6ZnVuY3Rpb24oYSl7aWYoXCJzbG90XCI9PT10aGlzLmxvY2FsTmFtZSl7dmFyIGI9dGhpcy5fX3NoYWR5X2dldFJvb3ROb2RlKCk7YiYmeChiKSYmYmMoYik7cmV0dXJuKGI9dSh0aGlzKSk/KGEmJmEuZmxhdHRlbj9iLnU6Yi5hc3NpZ25lZE5vZGVzKXx8W106W119fSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYixjKXtpZihcInNsb3RcIiE9PXRoaXMubG9jYWxOYW1lfHxcInNsb3RjaGFuZ2VcIj09PWEpdmIuY2FsbCh0aGlzLGEsYixjKTtlbHNle1wib2JqZWN0XCIhPT10eXBlb2YgYyYmKGM9e2NhcHR1cmU6ISFjfSk7dmFyIGQ9dGhpcy5fX3NoYWR5X3BhcmVudE5vZGU7aWYoIWQpdGhyb3cgRXJyb3IoXCJTaGFkeURPTSBjYW5ub3QgYXR0YWNoIGV2ZW50IHRvIHNsb3QgdW5sZXNzIGl0IGhhcyBhIGBwYXJlbnROb2RlYFwiKTtjLm89dGhpcztkLl9fc2hhZHlfYWRkRXZlbnRMaXN0ZW5lcihhLGIsYyl9fSxyZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsXG5iLGMpe2lmKFwic2xvdFwiIT09dGhpcy5sb2NhbE5hbWV8fFwic2xvdGNoYW5nZVwiPT09YSl3Yi5jYWxsKHRoaXMsYSxiLGMpO2Vsc2V7XCJvYmplY3RcIiE9PXR5cGVvZiBjJiYoYz17Y2FwdHVyZTohIWN9KTt2YXIgZD10aGlzLl9fc2hhZHlfcGFyZW50Tm9kZTtpZighZCl0aHJvdyBFcnJvcihcIlNoYWR5RE9NIGNhbm5vdCBhdHRhY2ggZXZlbnQgdG8gc2xvdCB1bmxlc3MgaXQgaGFzIGEgYHBhcmVudE5vZGVgXCIpO2Mubz10aGlzO2QuX19zaGFkeV9yZW1vdmVFdmVudExpc3RlbmVyKGEsYixjKX19fSk7dmFyIEJjPUIoe2dldEVsZW1lbnRCeUlkOmZ1bmN0aW9uKGEpe3JldHVyblwiXCI9PT1hP251bGw6ZmModGhpcyxmdW5jdGlvbihiKXtyZXR1cm4gYi5pZD09YX0sZnVuY3Rpb24oYil7cmV0dXJuISFifSlbMF18fG51bGx9fSk7ZnVuY3Rpb24gQ2MoYSxiKXtmb3IodmFyIGM7YiYmIWEuaGFzKGM9Yi5fX3NoYWR5X2dldFJvb3ROb2RlKCkpOyliPWMuaG9zdDtyZXR1cm4gYn1mdW5jdGlvbiBEYyhhKXt2YXIgYj1uZXcgU2V0O2ZvcihiLmFkZChhKTt4KGEpJiZhLmhvc3Q7KWE9YS5ob3N0Ll9fc2hhZHlfZ2V0Um9vdE5vZGUoKSxiLmFkZChhKTtyZXR1cm4gYn1cbnZhciBFYz1cIl9fc2hhZHlfbmF0aXZlX1wiK2lhKCksRmM9Qih7Z2V0IGFjdGl2ZUVsZW1lbnQoKXt2YXIgYT12Lmk/ZG9jdW1lbnQuX19zaGFkeV9uYXRpdmVfYWN0aXZlRWxlbWVudDpkb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKCFhfHwhYS5ub2RlVHlwZSlyZXR1cm4gbnVsbDt2YXIgYj0hIXgodGhpcyk7aWYoISh0aGlzPT09ZG9jdW1lbnR8fGImJnRoaXMuaG9zdCE9PWEmJnRoaXMuaG9zdC5fX3NoYWR5X25hdGl2ZV9jb250YWlucyhhKSkpcmV0dXJuIG51bGw7Zm9yKGI9UChhKTtiJiZiIT09dGhpczspYT1iLmhvc3QsYj1QKGEpO3JldHVybiB0aGlzPT09ZG9jdW1lbnQ/Yj9udWxsOmE6Yj09PXRoaXM/YTpudWxsfSxlbGVtZW50c0Zyb21Qb2ludDpmdW5jdGlvbihhLGIpe2E9ZG9jdW1lbnRbRWNdKGEsYik7aWYodGhpcz09PWRvY3VtZW50JiZ2LnVzZU5hdGl2ZURvY3VtZW50RUZQKXJldHVybiBhO2E9W10uc2xpY2UuY2FsbChhKTtiPURjKHRoaXMpO2Zvcih2YXIgYz1uZXcgU2V0LFxuZD0wO2Q8YS5sZW5ndGg7ZCsrKWMuYWRkKENjKGIsYVtkXSkpO3ZhciBlPVtdO2MuZm9yRWFjaChmdW5jdGlvbihmKXtyZXR1cm4gZS5wdXNoKGYpfSk7cmV0dXJuIGV9LGVsZW1lbnRGcm9tUG9pbnQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcz09PWRvY3VtZW50JiZ2LnVzZU5hdGl2ZURvY3VtZW50RUZQP3RoaXMuX19zaGFkeV9uYXRpdmVfZWxlbWVudEZyb21Qb2ludChhLGIpOnRoaXMuX19zaGFkeV9lbGVtZW50c0Zyb21Qb2ludChhLGIpWzBdfHxudWxsfX0pO3ZhciBHYz13aW5kb3cuZG9jdW1lbnQsSGM9Qih7aW1wb3J0Tm9kZTpmdW5jdGlvbihhLGIpe2lmKGEub3duZXJEb2N1bWVudCE9PUdjfHxcInRlbXBsYXRlXCI9PT1hLmxvY2FsTmFtZSlyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9pbXBvcnROb2RlKGEsYik7dmFyIGM9dGhpcy5fX3NoYWR5X25hdGl2ZV9pbXBvcnROb2RlKGEsITEpO2lmKGIpZm9yKGE9YS5fX3NoYWR5X2ZpcnN0Q2hpbGQ7YTthPWEuX19zaGFkeV9uZXh0U2libGluZyliPXRoaXMuX19zaGFkeV9pbXBvcnROb2RlKGEsITApLGMuX19zaGFkeV9hcHBlbmRDaGlsZChiKTtyZXR1cm4gY319KTt2YXIgSWM9Qih7ZGlzcGF0Y2hFdmVudDp0YixhZGRFdmVudExpc3RlbmVyOnZiLmJpbmQod2luZG93KSxyZW1vdmVFdmVudExpc3RlbmVyOndiLmJpbmQod2luZG93KX0pO3ZhciBWPXt9O09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTEVsZW1lbnQucHJvdG90eXBlLFwicGFyZW50RWxlbWVudFwiKSYmKFYucGFyZW50RWxlbWVudD1hYy5wYXJlbnRFbGVtZW50KTtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxFbGVtZW50LnByb3RvdHlwZSxcImNvbnRhaW5zXCIpJiYoVi5jb250YWlucz1hYy5jb250YWlucyk7T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsXCJjaGlsZHJlblwiKSYmKFYuY2hpbGRyZW49VC5jaGlsZHJlbik7T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsXCJpbm5lckhUTUxcIikmJihWLmlubmVySFRNTD15Yy5pbm5lckhUTUwpO09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTEVsZW1lbnQucHJvdG90eXBlLFwiY2xhc3NOYW1lXCIpJiYoVi5jbGFzc05hbWU9cmMuY2xhc3NOYW1lKTtcbnZhciBXPXtFdmVudFRhcmdldDpbSWJdLE5vZGU6W2FjLHdpbmRvdy5FdmVudFRhcmdldD9udWxsOkliXSxUZXh0OltSXSxDb21tZW50OltSXSxDREFUQVNlY3Rpb246W1JdLFByb2Nlc3NpbmdJbnN0cnVjdGlvbjpbUl0sRWxlbWVudDpbcmMsVCxsYyxSLCF2Lml8fFwiaW5uZXJIVE1MXCJpbiBFbGVtZW50LnByb3RvdHlwZT95YzpudWxsLHdpbmRvdy5IVE1MU2xvdEVsZW1lbnQ/bnVsbDpBY10sSFRNTEVsZW1lbnQ6W3pjLFZdLEhUTUxTbG90RWxlbWVudDpbQWNdLERvY3VtZW50RnJhZ21lbnQ6W2tjLEJjXSxEb2N1bWVudDpbSGMsa2MsQmMsRmNdLFdpbmRvdzpbSWNdLENoYXJhY3RlckRhdGE6W2xjXSxYTUxIdHRwUmVxdWVzdDpbd2luZG93LkV2ZW50VGFyZ2V0P251bGw6SWJdfSxKYz12Lmk/bnVsbDpbXCJpbm5lckhUTUxcIixcInRleHRDb250ZW50XCJdO2Z1bmN0aW9uIFgoYSxiLGMsZCl7Yi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBhJiZlJiZBKGEsZSxjLGQpfSl9XG5mdW5jdGlvbiBLYyhhKXt2YXIgYj1hP251bGw6SmMsYztmb3IoYyBpbiBXKVgod2luZG93W2NdJiZ3aW5kb3dbY10ucHJvdG90eXBlLFdbY10sYSxiKX1bXCJUZXh0XCIsXCJDb21tZW50XCIsXCJDREFUQVNlY3Rpb25cIixcIlByb2Nlc3NpbmdJbnN0cnVjdGlvblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPXdpbmRvd1thXSxjPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2MuX19zaGFkeV9wcm90b0lzUGF0Y2hlZD0hMDtYKGMsVy5FdmVudFRhcmdldCk7WChjLFcuTm9kZSk7V1thXSYmWChjLFdbYV0pO2IucHJvdG90eXBlLl9fc2hhZHlfcGF0Y2hlZFByb3RvPWN9KTtmdW5jdGlvbiBMYyhhKXthLl9fc2hhZHlfcHJvdG9Jc1BhdGNoZWQ9ITA7WChhLFcuRXZlbnRUYXJnZXQpO1goYSxXLk5vZGUpO1goYSxXLkVsZW1lbnQpO1goYSxXLkhUTUxFbGVtZW50KTtYKGEsVy5IVE1MU2xvdEVsZW1lbnQpO3JldHVybiBhfTt2YXIgTWM9di5PLE5jPXYuaTtmdW5jdGlvbiBPYyhhLGIpe2lmKE1jJiYhYS5fX3NoYWR5X3Byb3RvSXNQYXRjaGVkJiYheChhKSl7dmFyIGM9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpLGQ9Yy5oYXNPd25Qcm9wZXJ0eShcIl9fc2hhZHlfcGF0Y2hlZFByb3RvXCIpJiZjLl9fc2hhZHlfcGF0Y2hlZFByb3RvO2R8fChkPU9iamVjdC5jcmVhdGUoYyksTGMoZCksYy5fX3NoYWR5X3BhdGNoZWRQcm90bz1kKTtPYmplY3Quc2V0UHJvdG90eXBlT2YoYSxkKX1OY3x8KDE9PT1iP2FiKGEpOjI9PT1iJiZiYihhKSl9XG5mdW5jdGlvbiBQYyhhLGIsYyxkKXtPYyhhLDEpO2Q9ZHx8bnVsbDt2YXIgZT10KGEpLGY9ZD90KGQpOm51bGw7ZS5wcmV2aW91c1NpYmxpbmc9ZD9mLnByZXZpb3VzU2libGluZzpiLl9fc2hhZHlfbGFzdENoaWxkO2lmKGY9dShlLnByZXZpb3VzU2libGluZykpZi5uZXh0U2libGluZz1hO2lmKGY9dShlLm5leHRTaWJsaW5nPWQpKWYucHJldmlvdXNTaWJsaW5nPWE7ZS5wYXJlbnROb2RlPWI7ZD9kPT09Yy5maXJzdENoaWxkJiYoYy5maXJzdENoaWxkPWEpOihjLmxhc3RDaGlsZD1hLGMuZmlyc3RDaGlsZHx8KGMuZmlyc3RDaGlsZD1hKSk7Yy5jaGlsZE5vZGVzPW51bGx9XG5mdW5jdGlvbiBZYihhLGIsYyl7T2MoYiwyKTt2YXIgZD10KGIpO3ZvaWQgMCE9PWQuZmlyc3RDaGlsZCYmKGQuY2hpbGROb2Rlcz1udWxsKTtpZihhLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKWZvcihhPWEuX19zaGFkeV9uYXRpdmVfZmlyc3RDaGlsZDthO2E9YS5fX3NoYWR5X25hdGl2ZV9uZXh0U2libGluZylQYyhhLGIsZCxjKTtlbHNlIFBjKGEsYixkLGMpfVxuZnVuY3Rpb24gJGIoYSxiKXt2YXIgYz10KGEpO2I9dChiKTthPT09Yi5maXJzdENoaWxkJiYoYi5maXJzdENoaWxkPWMubmV4dFNpYmxpbmcpO2E9PT1iLmxhc3RDaGlsZCYmKGIubGFzdENoaWxkPWMucHJldmlvdXNTaWJsaW5nKTthPWMucHJldmlvdXNTaWJsaW5nO3ZhciBkPWMubmV4dFNpYmxpbmc7YSYmKHQoYSkubmV4dFNpYmxpbmc9ZCk7ZCYmKHQoZCkucHJldmlvdXNTaWJsaW5nPWEpO2MucGFyZW50Tm9kZT1jLnByZXZpb3VzU2libGluZz1jLm5leHRTaWJsaW5nPXZvaWQgMDt2b2lkIDAhPT1iLmNoaWxkTm9kZXMmJihiLmNoaWxkTm9kZXM9bnVsbCl9XG5mdW5jdGlvbiB0YyhhLGIpe3ZhciBjPXQoYSk7aWYoYnx8dm9pZCAwPT09Yy5maXJzdENoaWxkKXtjLmNoaWxkTm9kZXM9bnVsbDt2YXIgZD1jLmZpcnN0Q2hpbGQ9YS5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkO2MubGFzdENoaWxkPWEuX19zaGFkeV9uYXRpdmVfbGFzdENoaWxkO09jKGEsMik7Yz1kO2ZvcihkPXZvaWQgMDtjO2M9Yy5fX3NoYWR5X25hdGl2ZV9uZXh0U2libGluZyl7dmFyIGU9dChjKTtlLnBhcmVudE5vZGU9Ynx8YTtlLm5leHRTaWJsaW5nPWMuX19zaGFkeV9uYXRpdmVfbmV4dFNpYmxpbmc7ZS5wcmV2aW91c1NpYmxpbmc9ZHx8bnVsbDtkPWM7T2MoYywxKX19fTt2YXIgUWM9Qih7YWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIsYyl7XCJvYmplY3RcIiE9PXR5cGVvZiBjJiYoYz17Y2FwdHVyZTohIWN9KTtjLm89Yy5vfHx0aGlzO3RoaXMuaG9zdC5fX3NoYWR5X2FkZEV2ZW50TGlzdGVuZXIoYSxiLGMpfSxyZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYixjKXtcIm9iamVjdFwiIT09dHlwZW9mIGMmJihjPXtjYXB0dXJlOiEhY30pO2Mubz1jLm98fHRoaXM7dGhpcy5ob3N0Ll9fc2hhZHlfcmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGIsYyl9fSk7ZnVuY3Rpb24gUmMoYSxiKXtBKGEsUWMsYik7QShhLEZjLGIpO0EoYSx5YyxiKTtBKGEsVCxiKTt2LmwmJiFiPyhBKGEsYWMsYiksQShhLEJjLGIpKTp2Lml8fChBKGEsWWEpLEEoYSxXYSksQShhLFhhKSl9O3ZhciB2Yz17fSxZPXYuZGVmZXJDb25uZWN0aW9uQ2FsbGJhY2tzJiZcImxvYWRpbmdcIj09PWRvY3VtZW50LnJlYWR5U3RhdGUsU2M7ZnVuY3Rpb24gVGMoYSl7dmFyIGI9W107ZG8gYi51bnNoaWZ0KGEpO3doaWxlKGE9YS5fX3NoYWR5X3BhcmVudE5vZGUpO3JldHVybiBifWZ1bmN0aW9uIHVjKGEsYixjKXtpZihhIT09dmMpdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7dGhpcy5nPW51bGw7c2ModGhpcyxiLGMpfVxuZnVuY3Rpb24gc2MoYSxiLGMpe2EuaG9zdD1iO2EubW9kZT1jJiZjLm1vZGU7dGMoYS5ob3N0KTtiPXQoYS5ob3N0KTtiLnJvb3Q9YTtiLmVhPVwiY2xvc2VkXCIhPT1hLm1vZGU/YTpudWxsO2I9dChhKTtiLmZpcnN0Q2hpbGQ9Yi5sYXN0Q2hpbGQ9Yi5wYXJlbnROb2RlPWIubmV4dFNpYmxpbmc9Yi5wcmV2aW91c1NpYmxpbmc9bnVsbDtpZih2LnByZWZlclBlcmZvcm1hbmNlKWZvcig7Yj1hLmhvc3QuX19zaGFkeV9uYXRpdmVfZmlyc3RDaGlsZDspYS5ob3N0Ll9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGIpO2Vsc2UgUShhKX1mdW5jdGlvbiBRKGEpe2Euc3x8KGEucz0hMCxCYShmdW5jdGlvbigpe3JldHVybiBiYyhhKX0pKX1cbmZ1bmN0aW9uIGJjKGEpe3ZhciBiO2lmKGI9YS5zKXtmb3IodmFyIGM7YTspYTp7YS5zJiYoYz1hKSxiPWE7YT1iLmhvc3QuX19zaGFkeV9nZXRSb290Tm9kZSgpO2lmKHgoYSkmJihiPXUoYi5ob3N0KSkmJjA8Yi5GKWJyZWFrIGE7YT12b2lkIDB9Yj1jfShjPWIpJiZjLl9yZW5kZXJTZWxmKCl9XG51Yy5wcm90b3R5cGUuX3JlbmRlclNlbGY9ZnVuY3Rpb24oKXt2YXIgYT1ZO1k9ITA7dGhpcy5zPSExO2lmKHRoaXMuZyl7b2ModGhpcyk7Zm9yKHZhciBiPTAsYztiPHRoaXMuZy5sZW5ndGg7YisrKXtjPXRoaXMuZ1tiXTt2YXIgZD11KGMpLGU9ZC5hc3NpZ25lZE5vZGVzO2QuYXNzaWduZWROb2Rlcz1bXTtkLnU9W107aWYoZC5SPWUpZm9yKGQ9MDtkPGUubGVuZ3RoO2QrKyl7dmFyIGY9dShlW2RdKTtmLkw9Zi5hc3NpZ25lZFNsb3Q7Zi5hc3NpZ25lZFNsb3Q9PT1jJiYoZi5hc3NpZ25lZFNsb3Q9bnVsbCl9fWZvcihiPXRoaXMuaG9zdC5fX3NoYWR5X2ZpcnN0Q2hpbGQ7YjtiPWIuX19zaGFkeV9uZXh0U2libGluZylVYyh0aGlzLGIpO2ZvcihiPTA7Yjx0aGlzLmcubGVuZ3RoO2IrKyl7Yz10aGlzLmdbYl07ZT11KGMpO2lmKCFlLmFzc2lnbmVkTm9kZXMubGVuZ3RoKWZvcihkPWMuX19zaGFkeV9maXJzdENoaWxkO2Q7ZD1kLl9fc2hhZHlfbmV4dFNpYmxpbmcpVWModGhpcyxkLGMpO1xuKGQ9KGQ9dShjLl9fc2hhZHlfcGFyZW50Tm9kZSkpJiZkLnJvb3QpJiYoa2EoZCl8fGQucykmJmQuX3JlbmRlclNlbGYoKTtWYyh0aGlzLGUudSxlLmFzc2lnbmVkTm9kZXMpO2lmKGQ9ZS5SKXtmb3IoZj0wO2Y8ZC5sZW5ndGg7ZisrKXUoZFtmXSkuTD1udWxsO2UuUj1udWxsO2QubGVuZ3RoPmUuYXNzaWduZWROb2Rlcy5sZW5ndGgmJihlLk09ITApfWUuTSYmKGUuTT0hMSxXYyh0aGlzLGMpKX1jPXRoaXMuZztiPVtdO2ZvcihlPTA7ZTxjLmxlbmd0aDtlKyspZD1jW2VdLl9fc2hhZHlfcGFyZW50Tm9kZSwoZj11KGQpKSYmZi5yb290fHwhKDA+Yi5pbmRleE9mKGQpKXx8Yi5wdXNoKGQpO2ZvcihjPTA7YzxiLmxlbmd0aDtjKyspe2Y9YltjXTtlPWY9PT10aGlzP3RoaXMuaG9zdDpmO2Q9W107Zm9yKGY9Zi5fX3NoYWR5X2ZpcnN0Q2hpbGQ7ZjtmPWYuX19zaGFkeV9uZXh0U2libGluZylpZihcInNsb3RcIj09Zi5sb2NhbE5hbWUpZm9yKHZhciBnPXUoZikudSxoPTA7aDxnLmxlbmd0aDtoKyspZC5wdXNoKGdbaF0pO1xuZWxzZSBkLnB1c2goZik7Zj1zYShlKTtnPUdiKGQsZC5sZW5ndGgsZixmLmxlbmd0aCk7Zm9yKHZhciBrPWg9MCxsPXZvaWQgMDtoPGcubGVuZ3RoJiYobD1nW2hdKTtoKyspe2Zvcih2YXIgbT0wLHI9dm9pZCAwO208bC5ELmxlbmd0aCYmKHI9bC5EW21dKTttKyspci5fX3NoYWR5X25hdGl2ZV9wYXJlbnROb2RlPT09ZSYmZS5fX3NoYWR5X25hdGl2ZV9yZW1vdmVDaGlsZChyKSxmLnNwbGljZShsLmluZGV4K2ssMSk7ay09bC5HfWs9MDtmb3IobD12b2lkIDA7azxnLmxlbmd0aCYmKGw9Z1trXSk7aysrKWZvcihoPWZbbC5pbmRleF0sbT1sLmluZGV4O208bC5pbmRleCtsLkc7bSsrKXI9ZFttXSxlLl9fc2hhZHlfbmF0aXZlX2luc2VydEJlZm9yZShyLGgpLGYuc3BsaWNlKG0sMCxyKX19aWYoIXYucHJlZmVyUGVyZm9ybWFuY2UmJiF0aGlzLlApZm9yKGI9dGhpcy5ob3N0Ll9fc2hhZHlfZmlyc3RDaGlsZDtiO2I9Yi5fX3NoYWR5X25leHRTaWJsaW5nKWM9dShiKSxiLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGUhPT1cbnRoaXMuaG9zdHx8XCJzbG90XCIhPT1iLmxvY2FsTmFtZSYmYy5hc3NpZ25lZFNsb3R8fHRoaXMuaG9zdC5fX3NoYWR5X25hdGl2ZV9yZW1vdmVDaGlsZChiKTt0aGlzLlA9ITA7WT1hO1NjJiZTYygpfTtmdW5jdGlvbiBVYyhhLGIsYyl7dmFyIGQ9dChiKSxlPWQuTDtkLkw9bnVsbDtjfHwoYz0oYT1hLmhbYi5fX3NoYWR5X3Nsb3R8fFwiX19jYXRjaGFsbFwiXSkmJmFbMF0pO2M/KHQoYykuYXNzaWduZWROb2Rlcy5wdXNoKGIpLGQuYXNzaWduZWRTbG90PWMpOmQuYXNzaWduZWRTbG90PXZvaWQgMDtlIT09ZC5hc3NpZ25lZFNsb3QmJmQuYXNzaWduZWRTbG90JiYodChkLmFzc2lnbmVkU2xvdCkuTT0hMCl9ZnVuY3Rpb24gVmMoYSxiLGMpe2Zvcih2YXIgZD0wLGU9dm9pZCAwO2Q8Yy5sZW5ndGgmJihlPWNbZF0pO2QrKylpZihcInNsb3RcIj09ZS5sb2NhbE5hbWUpe3ZhciBmPXUoZSkuYXNzaWduZWROb2RlcztmJiZmLmxlbmd0aCYmVmMoYSxiLGYpfWVsc2UgYi5wdXNoKGNbZF0pfVxuZnVuY3Rpb24gV2MoYSxiKXtiLl9fc2hhZHlfbmF0aXZlX2Rpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwic2xvdGNoYW5nZVwiKSk7Yj11KGIpO2IuYXNzaWduZWRTbG90JiZXYyhhLGIuYXNzaWduZWRTbG90KX1mdW5jdGlvbiBYYihhKXthLmo9YS5qfHxbXTthLmc9YS5nfHxbXTthLmg9YS5ofHx7fX1mdW5jdGlvbiBvYyhhKXtpZihhLmomJmEuai5sZW5ndGgpe2Zvcih2YXIgYj1hLmosYyxkPTA7ZDxiLmxlbmd0aDtkKyspe3ZhciBlPWJbZF07dGMoZSk7dmFyIGY9ZS5fX3NoYWR5X3BhcmVudE5vZGU7dGMoZik7Zj11KGYpO2YuRj0oZi5GfHwwKSsxO2Y9cGMoZSk7YS5oW2ZdPyhjPWN8fHt9LGNbZl09ITAsYS5oW2ZdLnB1c2goZSkpOmEuaFtmXT1bZV07YS5nLnB1c2goZSl9aWYoYylmb3IodmFyIGcgaW4gYylhLmhbZ109cWMoYS5oW2ddKTthLmo9W119fVxuZnVuY3Rpb24gcGMoYSl7dmFyIGI9YS5uYW1lfHxhLmdldEF0dHJpYnV0ZShcIm5hbWVcIil8fFwiX19jYXRjaGFsbFwiO3JldHVybiBhLlk9Yn1mdW5jdGlvbiBxYyhhKXtyZXR1cm4gYS5zb3J0KGZ1bmN0aW9uKGIsYyl7Yj1UYyhiKTtmb3IodmFyIGQ9VGMoYyksZT0wO2U8Yi5sZW5ndGg7ZSsrKXtjPWJbZV07dmFyIGY9ZFtlXTtpZihjIT09ZilyZXR1cm4gYj10YShjLl9fc2hhZHlfcGFyZW50Tm9kZSksYi5pbmRleE9mKGMpLWIuaW5kZXhPZihmKX19KX1cbmZ1bmN0aW9uIFpiKGEsYil7aWYoYS5nKXtvYyhhKTt2YXIgYz1hLmgsZDtmb3IoZCBpbiBjKWZvcih2YXIgZT1jW2RdLGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIGc9ZVtmXTtpZihyYShiLGcpKXtlLnNwbGljZShmLDEpO3ZhciBoPWEuZy5pbmRleE9mKGcpOzA8PWgmJihhLmcuc3BsaWNlKGgsMSksKGg9dShnLl9fc2hhZHlfcGFyZW50Tm9kZSkpJiZoLkYmJmguRi0tKTtmLS07Zz11KGcpO2lmKGg9Zy51KWZvcih2YXIgaz0wO2s8aC5sZW5ndGg7aysrKXt2YXIgbD1oW2tdLG09bC5fX3NoYWR5X25hdGl2ZV9wYXJlbnROb2RlO20mJm0uX19zaGFkeV9uYXRpdmVfcmVtb3ZlQ2hpbGQobCl9Zy51PVtdO2cuYXNzaWduZWROb2Rlcz1bXTtoPSEwfX1yZXR1cm4gaH19ZnVuY3Rpb24ga2EoYSl7b2MoYSk7cmV0dXJuISghYS5nfHwhYS5nLmxlbmd0aCl9XG4oZnVuY3Rpb24oYSl7YS5fX3Byb3RvX189RG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGU7UmMoYSxcIl9fc2hhZHlfXCIpO1JjKGEpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGEse25vZGVUeXBlOnt2YWx1ZTpOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUsY29uZmlndXJhYmxlOiEwfSxub2RlTmFtZTp7dmFsdWU6XCIjZG9jdW1lbnQtZnJhZ21lbnRcIixjb25maWd1cmFibGU6ITB9LG5vZGVWYWx1ZTp7dmFsdWU6bnVsbCxjb25maWd1cmFibGU6ITB9fSk7W1wibG9jYWxOYW1lXCIsXCJuYW1lc3BhY2VVUklcIixcInByZWZpeFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIse3ZhbHVlOnZvaWQgMCxjb25maWd1cmFibGU6ITB9KX0pO1tcIm93bmVyRG9jdW1lbnRcIixcImJhc2VVUklcIixcImlzQ29ubmVjdGVkXCJdLmZvckVhY2goZnVuY3Rpb24oYil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaG9zdFtiXX0sXG5jb25maWd1cmFibGU6ITB9KX0pfSkodWMucHJvdG90eXBlKTtcbmlmKHdpbmRvdy5jdXN0b21FbGVtZW50cyYmd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSYmdi5OJiYhdi5wcmVmZXJQZXJmb3JtYW5jZSl7dmFyIFhjPW5ldyBNYXA7U2M9ZnVuY3Rpb24oKXt2YXIgYT1bXTtYYy5mb3JFYWNoKGZ1bmN0aW9uKGQsZSl7YS5wdXNoKFtlLGRdKX0pO1hjLmNsZWFyKCk7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspe3ZhciBjPWFbYl1bMF07YVtiXVsxXT9jLl9fc2hhZHlkb21fY29ubmVjdGVkQ2FsbGJhY2soKTpjLl9fc2hhZHlkb21fZGlzY29ubmVjdGVkQ2FsbGJhY2soKX19O1kmJmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJyZWFkeXN0YXRlY2hhbmdlXCIsZnVuY3Rpb24oKXtZPSExO1NjKCl9LHtvbmNlOiEwfSk7dmFyIFljPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD0wLGU9XCJfX2lzQ29ubmVjdGVkXCIrZCsrO2lmKGJ8fGMpYS5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2s9YS5wcm90b3R5cGUuX19zaGFkeWRvbV9jb25uZWN0ZWRDYWxsYmFjaz1cbmZ1bmN0aW9uKCl7WT9YYy5zZXQodGhpcywhMCk6dGhpc1tlXXx8KHRoaXNbZV09ITAsYiYmYi5jYWxsKHRoaXMpKX0sYS5wcm90b3R5cGUuZGlzY29ubmVjdGVkQ2FsbGJhY2s9YS5wcm90b3R5cGUuX19zaGFkeWRvbV9kaXNjb25uZWN0ZWRDYWxsYmFjaz1mdW5jdGlvbigpe1k/dGhpcy5pc0Nvbm5lY3RlZHx8WGMuc2V0KHRoaXMsITEpOnRoaXNbZV0mJih0aGlzW2VdPSExLGMmJmMuY2FsbCh0aGlzKSl9O3JldHVybiBhfSxaYz13aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lLCRjPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2ssZD1iLnByb3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjaztaYy5jYWxsKHdpbmRvdy5jdXN0b21FbGVtZW50cyxhLFljKGIsYyxkKSk7Yi5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2s9YztiLnByb3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjaz1kfTt3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lPVxuJGM7T2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5DdXN0b21FbGVtZW50UmVnaXN0cnkucHJvdG90eXBlLFwiZGVmaW5lXCIse3ZhbHVlOiRjLGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIFAoYSl7YT1hLl9fc2hhZHlfZ2V0Um9vdE5vZGUoKTtpZih4KGEpKXJldHVybiBhfTtmdW5jdGlvbiBaKGEpe3RoaXMubm9kZT1hfW49Wi5wcm90b3R5cGU7bi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfYWRkRXZlbnRMaXN0ZW5lcihhLGIsYyl9O24ucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3JlbW92ZUV2ZW50TGlzdGVuZXIoYSxiLGMpfTtuLmFwcGVuZENoaWxkPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9hcHBlbmRDaGlsZChhKX07bi5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKGEsYil9O24ucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3JlbW92ZUNoaWxkKGEpfTtuLnJlcGxhY2VDaGlsZD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9yZXBsYWNlQ2hpbGQoYSxiKX07XG5uLmNsb25lTm9kZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY2xvbmVOb2RlKGEpfTtuLmdldFJvb3ROb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9nZXRSb290Tm9kZShhKX07bi5jb250YWlucz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY29udGFpbnMoYSl9O24uZGlzcGF0Y2hFdmVudD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfZGlzcGF0Y2hFdmVudChhKX07bi5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXt0aGlzLm5vZGUuX19zaGFkeV9zZXRBdHRyaWJ1dGUoYSxiKX07bi5nZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X25hdGl2ZV9nZXRBdHRyaWJ1dGUoYSl9O24ucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKGEpe3RoaXMubm9kZS5fX3NoYWR5X3JlbW92ZUF0dHJpYnV0ZShhKX07XG5uLnRvZ2dsZUF0dHJpYnV0ZT1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV90b2dnbGVBdHRyaWJ1dGUoYSxiKX07bi5hdHRhY2hTaGFkb3c9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2F0dGFjaFNoYWRvdyhhKX07bi5mb2N1cz1mdW5jdGlvbigpe3RoaXMubm9kZS5fX3NoYWR5X25hdGl2ZV9mb2N1cygpfTtuLmJsdXI9ZnVuY3Rpb24oKXt0aGlzLm5vZGUuX19zaGFkeV9ibHVyKCl9O24uaW1wb3J0Tm9kZT1mdW5jdGlvbihhLGIpe2lmKHRoaXMubm9kZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfTk9ERSlyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfaW1wb3J0Tm9kZShhLGIpfTtuLmdldEVsZW1lbnRCeUlkPWZ1bmN0aW9uKGEpe2lmKHRoaXMubm9kZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfTk9ERSlyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfZ2V0RWxlbWVudEJ5SWQoYSl9O1xubi5lbGVtZW50c0Zyb21Qb2ludD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9lbGVtZW50c0Zyb21Qb2ludChhLGIpfTtuLmVsZW1lbnRGcm9tUG9pbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfZWxlbWVudEZyb21Qb2ludChhLGIpfTtuLnF1ZXJ5U2VsZWN0b3I9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3F1ZXJ5U2VsZWN0b3IoYSl9O24ucXVlcnlTZWxlY3RvckFsbD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9xdWVyeVNlbGVjdG9yQWxsKGEsYil9O24uYXNzaWduZWROb2Rlcz1mdW5jdGlvbihhKXtpZihcInNsb3RcIj09PXRoaXMubm9kZS5sb2NhbE5hbWUpcmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2Fzc2lnbmVkTm9kZXMoYSl9O1xubi5hcHBlbmQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7KytjKWJbY109YXJndW1lbnRzW2NdO3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9hcHBlbmQuYXBwbHkodGhpcy5ub2RlLHEoYikpfTtuLnByZXBlbmQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7KytjKWJbY109YXJndW1lbnRzW2NdO3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9wcmVwZW5kLmFwcGx5KHRoaXMubm9kZSxxKGIpKX07bi5hZnRlcj1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDsrK2MpYltjXT1hcmd1bWVudHNbY107cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2FmdGVyLmFwcGx5KHRoaXMubm9kZSxxKGIpKX07XG5uLmJlZm9yZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDsrK2MpYltjXT1hcmd1bWVudHNbY107cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2JlZm9yZS5hcHBseSh0aGlzLm5vZGUscShiKSl9O24ucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3JlbW92ZSgpfTtuLnJlcGxhY2VXaXRoPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoOysrYyliW2NdPWFyZ3VtZW50c1tjXTtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfcmVwbGFjZVdpdGguYXBwbHkodGhpcy5ub2RlLHEoYikpfTtcbmNhLk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFoucHJvdG90eXBlLHthY3RpdmVFbGVtZW50Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZih4KHRoaXMubm9kZSl8fHRoaXMubm9kZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfTk9ERSlyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfYWN0aXZlRWxlbWVudH19LF9hY3RpdmVFbGVtZW50Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RpdmVFbGVtZW50fX0saG9zdDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoeCh0aGlzLm5vZGUpKXJldHVybiB0aGlzLm5vZGUuaG9zdH19LHBhcmVudE5vZGU6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9wYXJlbnROb2RlfX0sZmlyc3RDaGlsZDp7Y29uZmlndXJhYmxlOiEwLFxuZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfZmlyc3RDaGlsZH19LGxhc3RDaGlsZDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2xhc3RDaGlsZH19LG5leHRTaWJsaW5nOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfbmV4dFNpYmxpbmd9fSxwcmV2aW91c1NpYmxpbmc6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9wcmV2aW91c1NpYmxpbmd9fSxjaGlsZE5vZGVzOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY2hpbGROb2Rlc319LHBhcmVudEVsZW1lbnQ6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLFxuZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3BhcmVudEVsZW1lbnR9fSxmaXJzdEVsZW1lbnRDaGlsZDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2ZpcnN0RWxlbWVudENoaWxkfX0sbGFzdEVsZW1lbnRDaGlsZDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2xhc3RFbGVtZW50Q2hpbGR9fSxuZXh0RWxlbWVudFNpYmxpbmc6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9uZXh0RWxlbWVudFNpYmxpbmd9fSxwcmV2aW91c0VsZW1lbnRTaWJsaW5nOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfcHJldmlvdXNFbGVtZW50U2libGluZ319LFxuY2hpbGRyZW46e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9jaGlsZHJlbn19LGNoaWxkRWxlbWVudENvdW50Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY2hpbGRFbGVtZW50Q291bnR9fSxzaGFkb3dSb290Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfc2hhZG93Um9vdH19LGFzc2lnbmVkU2xvdDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2Fzc2lnbmVkU2xvdH19LGlzQ29ubmVjdGVkOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfaXNDb25uZWN0ZWR9fSxpbm5lckhUTUw6e2NvbmZpZ3VyYWJsZTohMCxcbmVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2lubmVySFRNTH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMubm9kZS5fX3NoYWR5X2lubmVySFRNTD1hfX0sdGV4dENvbnRlbnQ6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV90ZXh0Q29udGVudH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMubm9kZS5fX3NoYWR5X3RleHRDb250ZW50PWF9fSxzbG90Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfc2xvdH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMubm9kZS5fX3NoYWR5X3Nsb3Q9YX19LGNsYXNzTmFtZTp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2NsYXNzTmFtZX0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMubm9kZS5fX3NoYWR5X2NsYXNzTmFtZT1cbmF9fX0pO2Z1bmN0aW9uIGFkKGEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShaLnByb3RvdHlwZSxhLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlW1wiX19zaGFkeV9cIithXX0sc2V0OmZ1bmN0aW9uKGIpe3RoaXMubm9kZVtcIl9fc2hhZHlfXCIrYV09Yn0sY29uZmlndXJhYmxlOiEwfSl9RGIuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gYWQoYSl9KTtFYi5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBhZChhKX0pO3ZhciBiZD1uZXcgV2Vha01hcDtmdW5jdGlvbiBjZChhKXtpZih4KGEpfHxhIGluc3RhbmNlb2YgWilyZXR1cm4gYTt2YXIgYj1iZC5nZXQoYSk7Ynx8KGI9bmV3IFooYSksYmQuc2V0KGEsYikpO3JldHVybiBifTtpZih2Lk4pe3ZhciBkZD12Lmk/ZnVuY3Rpb24oYSl7cmV0dXJuIGF9OmZ1bmN0aW9uKGEpe2JiKGEpO2FiKGEpO3JldHVybiBhfTt3aW5kb3cuU2hhZHlET009e2luVXNlOnYuTixwYXRjaDpkZCxpc1NoYWR5Um9vdDp4LGVucXVldWU6QmEsZmx1c2g6RixmbHVzaEluaXRpYWw6ZnVuY3Rpb24oYSl7IWEuUCYmYS5zJiZiYyhhKX0sc2V0dGluZ3M6dixmaWx0ZXJNdXRhdGlvbnM6R2Esb2JzZXJ2ZUNoaWxkcmVuOkVhLHVub2JzZXJ2ZUNoaWxkcmVuOkZhLGRlZmVyQ29ubmVjdGlvbkNhbGxiYWNrczp2LmRlZmVyQ29ubmVjdGlvbkNhbGxiYWNrcyxwcmVmZXJQZXJmb3JtYW5jZTp2LnByZWZlclBlcmZvcm1hbmNlLGhhbmRsZXNEeW5hbWljU2NvcGluZzohMCx3cmFwOnYubD9jZDpkZCx3cmFwSWZOZWVkZWQ6ITA9PT12Lmw/Y2Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LFdyYXBwZXI6Wixjb21wb3NlZFBhdGg6aWIsbm9QYXRjaDp2LmwscGF0Y2hPbkRlbWFuZDp2Lk8sbmF0aXZlTWV0aG9kczpPYSxcbm5hdGl2ZVRyZWU6UGEscGF0Y2hFbGVtZW50UHJvdG86TGMscXVlcnlTZWxlY3RvckltcGxlbWVudGF0aW9uOnYucXVlcnlTZWxlY3RvckltcGxlbWVudGF0aW9ufTtWYSgpO0tjKFwiX19zaGFkeV9cIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGRvY3VtZW50LFwiX2FjdGl2ZUVsZW1lbnRcIixGYy5hY3RpdmVFbGVtZW50KTtBKFdpbmRvdy5wcm90b3R5cGUsSWMsXCJfX3NoYWR5X1wiKTt2Lmw/di5PJiZBKEVsZW1lbnQucHJvdG90eXBlLHdjKTooS2MoKSxDYigpKTt4YigpO3dpbmRvdy5FdmVudD16Yjt3aW5kb3cuQ3VzdG9tRXZlbnQ9QWI7d2luZG93Lk1vdXNlRXZlbnQ9QmI7d2luZG93LlNoYWRvd1Jvb3Q9dWN9O30pLmNhbGwodGhpcyk7XG5cbiIsICJpbXBvcnQgX0RPTVRva2VuTGlzdCBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fRE9NVG9rZW5MaXN0XCI7XG4oZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcInJlcGxhY2VcImluKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuY2xhc3NMaXN0fHx7fSlcbikpIHtcbi8vIERPTVRva2VuTGlzdC5wcm90b3R5cGUucmVwbGFjZVxuKGZ1bmN0aW9uICgpIHtcblx0dmFyIGNsYXNzTGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNsYXNzTGlzdDtcblx0Y2xhc3NMaXN0ICYmIChjbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlLnJlcGxhY2UgPVxuXHRcdGZ1bmN0aW9uICh0b2tlbiwgbmV3VG9rZW4pIHtcblx0XHRcdHZhciB0b2tlblN0cmluZyA9ICcnICsgdG9rZW4sIG5ld1Rva2VuU3RyaW5nID0gJycgKyBuZXdUb2tlbjtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bmV3IERPTUV4Y2VwdGlvbigpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRzZWxmLkRPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uIChtZXNzYWdlLCBuYW1lKSB7XG5cdFx0XHRcdFx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbikpIHJldHVybiBuZXcgRE9NRXhjZXB0aW9uKG1lc3NhZ2UsIG5hbWUpO1xuXHRcdFx0XHRcdHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG5cdFx0XHRcdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZXJyb3I7XG5cdFx0XHRpZiAoISh0b2tlblN0cmluZyAmJiBuZXdUb2tlblN0cmluZykpIGVycm9yID0gJ1N5bnRheEVycm9yJztcblx0XHRcdGlmICghZXJyb3IgJiYgKC9cXHMvLnRlc3QodG9rZW5TdHJpbmcpIHx8IC9cXHMvLnRlc3QobmV3VG9rZW5TdHJpbmcpKSkgZXJyb3IgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcblx0XHRcdGlmIChlcnJvcikgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignRE9NVG9rZW5MaXN0LnJlcGxhY2Ugd2FzIHByb3ZpZGVkIHRva2VucyBcXCcnICsgdG9rZW5TdHJpbmcgKyAnXFwnIGFuZCBcXCcnICsgbmV3VG9rZW5TdHJpbmcgKyAnXFwnJywgZXJyb3IpO1xuXG5cdFx0XHRpZiAoIXRoaXMuY29udGFpbnModG9rZW5TdHJpbmcpKSByZXR1cm4gZmFsc2U7XG5cblx0XHRcdC8vIHRva2Vuc1RvYmVNb3ZlZCBhcmUgXCJ0b2tlblN0cmluZ1wiIGFuZCBhbGwgdG9rZW5zIGZvdW5kIGFmdGVyIGl0XG5cdFx0XHR2YXIgdG9rZW5zVG9iZU1vdmVkID0gW107XG5cdFx0XHR2YXIgbmV3VG9rZW5Gb3VuZCA9IGZhbHNlO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKVxuXHRcdFx0XHRpZiAobmV3VG9rZW5TdHJpbmcgPT09IHRoaXMuaXRlbShpKSkgbmV3VG9rZW5Gb3VuZCA9IHRydWU7XG5cdFx0XHRcdGVsc2UgaWYgKHRva2VuU3RyaW5nID09PSB0aGlzLml0ZW0oaSkpIGJyZWFrO1xuXHRcdFx0Zm9yICg7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB0b2tlbnNUb2JlTW92ZWQucHVzaCh0aGlzLml0ZW0oaSkpO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IHRva2Vuc1RvYmVNb3ZlZC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHR2YXIgY3VycmVudFRva2VuID0gdG9rZW5zVG9iZU1vdmVkW2ldO1xuXHRcdFx0XHRjdXJyZW50VG9rZW4gIT09IG5ld1Rva2VuU3RyaW5nICYmIHRoaXMucmVtb3ZlKGN1cnJlbnRUb2tlbik7XG5cdFx0XHRcdGN1cnJlbnRUb2tlbiAhPT0gdG9rZW5TdHJpbmcgJiYgdGhpcy5hZGQoY3VycmVudFRva2VuKTtcblx0XHRcdFx0Y3VycmVudFRva2VuID09PSB0b2tlblN0cmluZyAmJiAhbmV3VG9rZW5Gb3VuZCAmJiAodGhpcy5yZW1vdmUobmV3VG9rZW5TdHJpbmcpLCB0aGlzLmFkZChuZXdUb2tlblN0cmluZykpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHQpO1xufSkoKTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgImltcG9ydCBBcnJheUl0ZXJhdG9yIGZyb20gXCJAbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19BcnJheUl0ZXJhdG9yXCI7XG5pbXBvcnQgSXRlcmF0b3IgZnJvbSBcIkBtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX0l0ZXJhdG9yXCI7XG5pbXBvcnQgX0RPTVRva2VuTGlzdCBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fRE9NVG9rZW5MaXN0XCI7XG4oZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcIlN5bWJvbFwiaW4gc2VsZiYmXCJpdGVyYXRvclwiaW4gc2VsZi5TeW1ib2wmJmZ1bmN0aW9uKCl7dHJ5e3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcbnJldHVybiEoIXQuY2xhc3NMaXN0fHwhdC5jbGFzc0xpc3Rbc2VsZi5TeW1ib2wuaXRlcmF0b3JdKX1jYXRjaCh0KXtyZXR1cm4hMX19KClcbikpIHtcbi8vIERPTVRva2VuTGlzdC5wcm90b3R5cGUuQEBpdGVyYXRvclxuLyogZ2xvYmFsIEFycmF5SXRlcmF0b3IgKi9cbihmdW5jdGlvbiAoZ2xvYmFsKSB7XG5cdGdsb2JhbC5ET01Ub2tlbkxpc3QucHJvdG90eXBlW2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBuZXcgQXJyYXlJdGVyYXRvcih0aGlzKTtcblx0fTtcblxuXHR2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0aWYgKFxuXHRcdGUuY2xhc3NMaXN0ICYmXG5cdFx0ZS5jbGFzc0xpc3QuY29uc3RydWN0b3IgJiZcblx0XHRlLmNsYXNzTGlzdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgJiZcblx0XHQhZS5jbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlW2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdXG5cdCkge1xuXHRcdGUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZVtnbG9iYWwuU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBuZXcgQXJyYXlJdGVyYXRvcih0aGlzKTtcblx0XHR9XG5cdH1cbn0oc2VsZikpO1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiaW1wb3J0IF9ET01Ub2tlbkxpc3QgZnJvbSBcIkBtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX0RPTVRva2VuTGlzdFwiO1xuKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJET01Ub2tlbkxpc3RcImluIHNlbGYmJlwiZm9yRWFjaFwiaW4gc2VsZi5ET01Ub2tlbkxpc3QucHJvdG90eXBlXG4pKSB7XG4vLyBET01Ub2tlbkxpc3QucHJvdG90eXBlLmZvckVhY2hcbihmdW5jdGlvbiAoZ2xvYmFsKSB7XG5cdGdsb2JhbC5ET01Ub2tlbkxpc3QucHJvdG90eXBlLmZvckVhY2ggPSBnbG9iYWwuQXJyYXkucHJvdG90eXBlLmZvckVhY2g7XG5cblx0dmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cdGlmIChcblx0XHRlLmNsYXNzTGlzdCAmJlxuXHRcdGUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yICYmXG5cdFx0ZS5jbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlICYmXG5cdFx0IWUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5mb3JFYWNoXG5cdCkge1xuXHRcdGUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5mb3JFYWNoID0gZ2xvYmFsLkFycmF5LnByb3RvdHlwZS5mb3JFYWNoO1xuXHR9XG59KHNlbGYpKTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgIlxuLy8gX211dGF0aW9uXG52YXIgX211dGF0aW9uID0gKGZ1bmN0aW9uICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXG5cdGZ1bmN0aW9uIGlzTm9kZShvYmplY3QpIHtcblx0XHQvLyBET00sIExldmVsMlxuXHRcdGlmICh0eXBlb2YgTm9kZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIE5vZGU7XG5cdFx0fVxuXHRcdC8vIE9sZGVyIGJyb3dzZXJzLCBjaGVjayBpZiBpdCBsb29rcyBsaWtlIGEgTm9kZSBpbnN0YW5jZSlcblx0XHRyZXR1cm4gb2JqZWN0ICYmXG5cdFx0XHR0eXBlb2Ygb2JqZWN0ID09PSBcIm9iamVjdFwiICYmXG5cdFx0XHRvYmplY3Qubm9kZU5hbWUgJiZcblx0XHRcdG9iamVjdC5ub2RlVHlwZSA+PSAxICYmXG5cdFx0XHRvYmplY3Qubm9kZVR5cGUgPD0gMTI7XG5cdH1cblxuXHQvLyBodHRwOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jbXV0YXRpb24tbWV0aG9kLW1hY3JvXG5cdHJldHVybiBmdW5jdGlvbiBtdXRhdGlvbihub2Rlcykge1xuXHRcdGlmIChub2Rlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHJldHVybiBpc05vZGUobm9kZXNbMF0pID8gbm9kZXNbMF0gOiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShub2Rlc1swXSArICcnKTtcblx0XHR9XG5cblx0XHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0ZnJhZ21lbnQuYXBwZW5kQ2hpbGQoaXNOb2RlKG5vZGVzW2ldKSA/IG5vZGVzW2ldIDogZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobm9kZXNbaV0gKyAnJykpO1xuXG5cdFx0fVxuXHRcdHJldHVybiBmcmFnbWVudDtcblx0fTtcbn0oKSk7XG5leHBvcnQgZGVmYXVsdCBfbXV0YXRpb247XG4iLCAiaW1wb3J0IF9tdXRhdGlvbiBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fbXV0YXRpb25cIjtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiRWxlbWVudFwiaW4gc2VsZiYmXCJyZW1vdmVcImluIEVsZW1lbnQucHJvdG90eXBlXG4pKSB7XG4vLyBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVcbkRvY3VtZW50LnByb3RvdHlwZS5yZW1vdmUgPSBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoKSB7XG5cdGlmICh0aGlzLnBhcmVudE5vZGUpIHtcblx0XHR0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyk7XG5cdH1cbn07XG5cbi8vIE5vdCBhbGwgVUFzIHN1cHBvcnQgdGhlIFRleHQgY29uc3RydWN0b3IuICBQb2x5ZmlsbCBvbiB0aGUgVGV4dCBjb25zdHJ1Y3RvciBvbmx5IHdoZXJlIGl0IGV4aXN0c1xuLy8gVE9ETzogQWRkIGEgcG9seWZpbGwgZm9yIHRoZSBUZXh0IGNvbnN0cnVjdG9yLCBhbmQgbWFrZSBpdCBhIGRlcGVuZGVuY3kgb2YgdGhpcyBwb2x5ZmlsbC5cbmlmIChcIlRleHRcIiBpbiBzZWxmKSB7XG5cdFRleHQucHJvdG90eXBlLnJlbW92ZSA9IEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZTtcbn1cblxuKGZ1bmN0aW9uICgpIHtcblx0dmFyIG9yaWdpbmFsUmVtb3ZlID0gSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZTtcblxuXHRIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKGluZGV4KSB7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmUuY2FsbCh0aGlzKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9yaWdpbmFsUmVtb3ZlLmNhbGwodGhpcywgaW5kZXgpO1xuXHR9O1xufSkoKTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgImltcG9ydCBfbXV0YXRpb24gZnJvbSBcIkBtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX211dGF0aW9uXCI7XG4oZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcInJlbW92ZVwiaW4gQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGVcbikpIHtcbi8vIENoYXJhY3RlckRhdGEucHJvdG90eXBlLnJlbW92ZVxuQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUucmVtb3ZlID0gRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlXG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1rZXlzIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgJiYgIVY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBwcm9wcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXkgPSBrZXlzW2luZGV4KytdLCBwcm9wc1trZXldKTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBBY3RpdmVYT2JqZWN0IC0tIG9sZCBJRSwgV1NIICovXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsOyAvLyBhdm9pZCBtZW1vcnkgbGVha1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgYWN0aXZlWERvY3VtZW50ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJ1xuICAgID8gZG9jdW1lbnQuZG9tYWluICYmIGFjdGl2ZVhEb2N1bWVudFxuICAgICAgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgLy8gb2xkIElFXG4gICAgICA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpXG4gICAgOiBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCk7IC8vIFdTSFxuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZihyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoW10uc2xpY2UpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmUgKi9cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGFycmF5U2xpY2Uod2luZG93TmFtZXMpO1xuICB9XG59O1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgY2xhc3NvZihpdCkgPT09ICdXaW5kb3cnXG4gICAgPyBnZXRXaW5kb3dOYW1lcyhpdClcbiAgICA6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKSB7XG4gIGlmIChkZXNjcmlwdG9yLmdldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5nZXQsIG5hbWUsIHsgZ2V0dGVyOiB0cnVlIH0pO1xuICBpZiAoZGVzY3JpcHRvci5zZXQpIG1ha2VCdWlsdEluKGRlc2NyaXB0b3Iuc2V0LCBuYW1lLCB7IHNldHRlcjogdHJ1ZSB9KTtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5LmYodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIFRBRywgU1RBVElDKSB7XG4gIGlmICh0YXJnZXQgJiYgIVNUQVRJQykgdGFyZ2V0ID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgaWYgKHRhcmdldCAmJiAhaGFzT3duKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyICRBcnJheSA9IEFycmF5O1xuXG4vLyBhIHBhcnQgb2YgYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWxBcnJheSkpIHtcbiAgICBDID0gb3JpZ2luYWxBcnJheS5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmIChpc0NvbnN0cnVjdG9yKEMpICYmIChDID09PSAkQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gJEFycmF5IDogQztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFycmF5U3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxuLy8gYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKGFycmF5U3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsQXJyYXkpKShsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCwgZmlsdGVyUmVqZWN0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09PSA2O1xuICB2YXIgSVNfRklMVEVSX1JFSkVDVCA9IFRZUEUgPT09IDc7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKHNlbGYpO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiB8fCBJU19GSUxURVJfUkVKRUNUID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAvLyBldmVyeVxuICAgICAgICAgIGNhc2UgNzogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJSZWplY3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlclJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuICBmaWx0ZXJSZWplY3Q6IGNyZWF0ZU1ldGhvZCg3KVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgbmF0aXZlT2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcblxudmFyIEhJRERFTiA9IHNoYXJlZEtleSgnaGlkZGVuJyk7XG52YXIgU1lNQk9MID0gJ1N5bWJvbCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNZTUJPTCk7XG5cbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sICYmICRTeW1ib2xbUFJPVE9UWVBFXTtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZjtcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvdHlwZVN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBVU0VfU0VUVEVSID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIHZhciBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgUCk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKSBkZWxldGUgT2JqZWN0UHJvdG90eXBlW1BdO1xuICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgJiYgTyAhPT0gT2JqZWN0UHJvdG90eXBlKSB7XG4gICAgbmF0aXZlRGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlLCBQLCBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKTtcbiAgfVxufTtcblxudmFyIHNldFN5bWJvbERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RDcmVhdGUobmF0aXZlRGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT09IDc7XG59KSA/IGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgOiBuYXRpdmVEZWZpbmVQcm9wZXJ0eTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnLCBkZXNjcmlwdGlvbikge1xuICB2YXIgc3ltYm9sID0gQWxsU3ltYm9sc1t0YWddID0gbmF0aXZlT2JqZWN0Q3JlYXRlKFN5bWJvbFByb3RvdHlwZSk7XG4gIHNldEludGVybmFsU3RhdGUoc3ltYm9sLCB7XG4gICAgdHlwZTogU1lNQk9MLFxuICAgIHRhZzogdGFnLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICB9KTtcbiAgaWYgKCFERVNDUklQVE9SUykgc3ltYm9sLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gIHJldHVybiBzeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBpZiAoTyA9PT0gT2JqZWN0UHJvdG90eXBlKSAkZGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCwgQXR0cmlidXRlcyk7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghQXR0cmlidXRlcy5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhc093bihPLCBISURERU4pKSBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBISURERU4sIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCBuYXRpdmVPYmplY3RDcmVhdGUobnVsbCkpKTtcbiAgICAgIE9bSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc093bihPLCBISURERU4pICYmIE9bSElEREVOXVtrZXldKSBPW0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgQXR0cmlidXRlcyA9IG5hdGl2ZU9iamVjdENyZWF0ZShBdHRyaWJ1dGVzLCB7IGVudW1lcmFibGU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzY3JpcHRvcihPLCBrZXksIEF0dHJpYnV0ZXMpO1xuICB9IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBrZXksIEF0dHJpYnV0ZXMpO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcGVydGllcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKHByb3BlcnRpZXMpLmNvbmNhdCgkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHByb3BlcnRpZXMpKTtcbiAgJGZvckVhY2goa2V5cywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbCgkcHJvcGVydHlJc0VudW1lcmFibGUsIHByb3BlcnRpZXMsIGtleSkpICRkZWZpbmVQcm9wZXJ0eShPLCBrZXksIHByb3BlcnRpZXNba2V5XSk7XG4gIH0pO1xuICByZXR1cm4gTztcbn07XG5cbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IG5hdGl2ZU9iamVjdENyZWF0ZShPKSA6ICRkZWZpbmVQcm9wZXJ0aWVzKG5hdGl2ZU9iamVjdENyZWF0ZShPKSwgUHJvcGVydGllcyk7XG59O1xuXG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgUCA9IHRvUHJvcGVydHlLZXkoVik7XG4gIHZhciBlbnVtZXJhYmxlID0gY2FsbChuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSwgdGhpcywgUCk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIFApICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGVudW1lcmFibGUgfHwgIWhhc093bih0aGlzLCBQKSB8fCAhaGFzT3duKEFsbFN5bWJvbHMsIFApIHx8IGhhc093bih0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtQXVxuICAgID8gZW51bWVyYWJsZSA6IHRydWU7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIHZhciBpdCA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgZGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXNPd24oaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkge1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKGhpZGRlbktleXMsIGtleSkpIHB1c2gocmVzdWx0LCBrZXkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gKE8pIHtcbiAgdmFyIElTX09CSkVDVF9QUk9UT1RZUEUgPSBPID09PSBPYmplY3RQcm90b3R5cGU7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMoSVNfT0JKRUNUX1BST1RPVFlQRSA/IE9iamVjdFByb3RvdHlwZVN5bWJvbHMgOiB0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICghSVNfT0JKRUNUX1BST1RPVFlQRSB8fCBoYXNPd24oT2JqZWN0UHJvdG90eXBlLCBrZXkpKSkge1xuICAgICAgcHVzaChyZXN1bHQsIEFsbFN5bWJvbHNba2V5XSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIGBTeW1ib2xgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC1jb25zdHJ1Y3RvclxuaWYgKCFOQVRJVkVfU1lNQk9MKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKGlzUHJvdG90eXBlT2YoU3ltYm9sUHJvdG90eXBlLCB0aGlzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gIWFyZ3VtZW50cy5sZW5ndGggfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiAkdG9TdHJpbmcoYXJndW1lbnRzWzBdKTtcbiAgICB2YXIgdGFnID0gdWlkKGRlc2NyaXB0aW9uKTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB2YXIgJHRoaXMgPSB0aGlzID09PSB1bmRlZmluZWQgPyBnbG9iYWwgOiB0aGlzO1xuICAgICAgaWYgKCR0aGlzID09PSBPYmplY3RQcm90b3R5cGUpIGNhbGwoc2V0dGVyLCBPYmplY3RQcm90b3R5cGVTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzT3duKCR0aGlzLCBISURERU4pICYmIGhhc093bigkdGhpc1tISURERU5dLCB0YWcpKSAkdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFN5bWJvbERlc2NyaXB0b3IoJHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFJhbmdlRXJyb3IpKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSgkdGhpcywgdGFnLCBkZXNjcmlwdG9yKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBVU0VfU0VUVEVSKSBzZXRTeW1ib2xEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiBzZXR0ZXIgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnLCBkZXNjcmlwdGlvbik7XG4gIH07XG5cbiAgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbFtQUk9UT1RZUEVdO1xuXG4gIGRlZmluZUJ1aWx0SW4oU3ltYm9sUHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS50YWc7XG4gIH0pO1xuXG4gIGRlZmluZUJ1aWx0SW4oJFN5bWJvbCwgJ3dpdGhvdXRTZXR0ZXInLCBmdW5jdGlvbiAoZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4gd3JhcCh1aWQoZGVzY3JpcHRpb24pLCBkZXNjcmlwdGlvbik7XG4gIH0pO1xuXG4gIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIGRlZmluZVByb3BlcnR5TW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZiA9ICRkZWZpbmVQcm9wZXJ0aWVzO1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdlbGxLbm93blN5bWJvbChuYW1lKSwgbmFtZSk7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtU3ltYm9sLWRlc2NyaXB0aW9uXG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFN5bWJvbFByb3RvdHlwZSwgJ2Rlc2NyaXB0aW9uJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBkZXNjcmlwdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuZGVzY3JpcHRpb247XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFJU19QVVJFKSB7XG4gICAgICBkZWZpbmVCdWlsdEluKE9iamVjdFByb3RvdHlwZSwgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wsIHNoYW06ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgU3ltYm9sOiAkU3ltYm9sXG59KTtcblxuJGZvckVhY2gob2JqZWN0S2V5cyhXZWxsS25vd25TeW1ib2xzU3RvcmUpLCBmdW5jdGlvbiAobmFtZSkge1xuICBkZWZpbmVXZWxsS25vd25TeW1ib2wobmFtZSk7XG59KTtcblxuJCh7IHRhcmdldDogU1lNQk9MLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IGZhbHNlOyB9XG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIC8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Jcbn0pO1xuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXNcbn0pO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUoKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgU1lNQk9MKTtcblxuaGlkZGVuS2V5c1tISURERU5dID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSBzYWZlICovXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0wgJiYgISFTeW1ib2xbJ2ZvciddICYmICEhU3ltYm9sLmtleUZvcjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbicpO1xuXG52YXIgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3RyaW5nLXRvLXN5bWJvbC1yZWdpc3RyeScpO1xudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5mb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuZm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKGtleSk7XG4gICAgaWYgKGhhc093bihTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5LCBzdHJpbmcpKSByZXR1cm4gU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddO1xuICAgIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKShzdHJpbmcpO1xuICAgIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXSA9IHN5bWJvbDtcbiAgICBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bWJvbF0gPSBzdHJpbmc7XG4gICAgcmV0dXJuIHN5bWJvbDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbicpO1xuXG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xuXG4vLyBgU3ltYm9sLmtleUZvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5rZXlmb3JcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIH0sIHtcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBuZXcgVHlwZUVycm9yKHRyeVRvU3RyaW5nKHN5bSkgKyAnIGlzIG5vdCBhIHN5bWJvbCcpO1xuICAgIGlmIChoYXNPd24oU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSwgc3ltKSkgcmV0dXJuIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltXTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBhcHBseSA9IEZ1bmN0aW9uUHJvdG90eXBlLmFwcGx5O1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tcmVmbGVjdCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBSZWZsZWN0ID09ICdvYmplY3QnICYmIFJlZmxlY3QuYXBwbHkgfHwgKE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGFwcGx5KSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoYXBwbHksIGFyZ3VtZW50cyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlcGxhY2VyKSB7XG4gIGlmIChpc0NhbGxhYmxlKHJlcGxhY2VyKSkgcmV0dXJuIHJlcGxhY2VyO1xuICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXR1cm47XG4gIHZhciByYXdMZW5ndGggPSByZXBsYWNlci5sZW5ndGg7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3TGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlbWVudCA9IHJlcGxhY2VyW2ldO1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnc3RyaW5nJykgcHVzaChrZXlzLCBlbGVtZW50KTtcbiAgICBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnbnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnTnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnU3RyaW5nJykgcHVzaChrZXlzLCB0b1N0cmluZyhlbGVtZW50KSk7XG4gIH1cbiAgdmFyIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIHJvb3QgPSB0cnVlO1xuICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBpZiAocm9vdCkge1xuICAgICAgcm9vdCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgcmV0dXJuIHZhbHVlO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5c0xlbmd0aDsgaisrKSBpZiAoa2V5c1tqXSA9PT0ga2V5KSByZXR1cm4gdmFsdWU7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgZ2V0UmVwbGFjZXJGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbicpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkc3RyaW5naWZ5ID0gZ2V0QnVpbHRJbignSlNPTicsICdzdHJpbmdpZnknKTtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoLy4vLmV4ZWMpO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBudW1iZXJUb1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbnZhciB0ZXN0ZXIgPSAvW1xcdUQ4MDAtXFx1REZGRl0vZztcbnZhciBsb3cgPSAvXltcXHVEODAwLVxcdURCRkZdJC87XG52YXIgaGkgPSAvXltcXHVEQzAwLVxcdURGRkZdJC87XG5cbnZhciBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKSgnc3RyaW5naWZ5IGRldGVjdGlvbicpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICByZXR1cm4gJHN0cmluZ2lmeShbc3ltYm9sXSkgIT09ICdbbnVsbF0nXG4gICAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gICAgfHwgJHN0cmluZ2lmeSh7IGE6IHN5bWJvbCB9KSAhPT0gJ3t9J1xuICAgIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gICAgfHwgJHN0cmluZ2lmeShPYmplY3Qoc3ltYm9sKSkgIT09ICd7fSc7XG59KTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtd2VsbC1mb3JtZWQtc3RyaW5naWZ5XG52YXIgSUxMX0ZPUk1FRF9VTklDT0RFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHN0cmluZ2lmeSgnXFx1REYwNlxcdUQ4MzQnKSAhPT0gJ1wiXFxcXHVkZjA2XFxcXHVkODM0XCInXG4gICAgfHwgJHN0cmluZ2lmeSgnXFx1REVBRCcpICE9PSAnXCJcXFxcdWRlYWRcIic7XG59KTtcblxudmFyIHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4ID0gZnVuY3Rpb24gKGl0LCByZXBsYWNlcikge1xuICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgdmFyICRyZXBsYWNlciA9IGdldFJlcGxhY2VyRnVuY3Rpb24ocmVwbGFjZXIpO1xuICBpZiAoIWlzQ2FsbGFibGUoJHJlcGxhY2VyKSAmJiAoaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgYXJnc1sxXSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgLy8gc29tZSBvbGQgaW1wbGVtZW50YXRpb25zIChsaWtlIFdlYktpdCkgY291bGQgcGFzcyBudW1iZXJzIGFzIGtleXNcbiAgICBpZiAoaXNDYWxsYWJsZSgkcmVwbGFjZXIpKSB2YWx1ZSA9IGNhbGwoJHJlcGxhY2VyLCB0aGlzLCAkU3RyaW5nKGtleSksIHZhbHVlKTtcbiAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICB9O1xuICByZXR1cm4gYXBwbHkoJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG59O1xuXG52YXIgZml4SWxsRm9ybWVkID0gZnVuY3Rpb24gKG1hdGNoLCBvZmZzZXQsIHN0cmluZykge1xuICB2YXIgcHJldiA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCAtIDEpO1xuICB2YXIgbmV4dCA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCArIDEpO1xuICBpZiAoKGV4ZWMobG93LCBtYXRjaCkgJiYgIWV4ZWMoaGksIG5leHQpKSB8fCAoZXhlYyhoaSwgbWF0Y2gpICYmICFleGVjKGxvdywgcHJldikpKSB7XG4gICAgcmV0dXJuICdcXFxcdScgKyBudW1iZXJUb1N0cmluZyhjaGFyQ29kZUF0KG1hdGNoLCAwKSwgMTYpO1xuICB9IHJldHVybiBtYXRjaDtcbn07XG5cbmlmICgkc3RyaW5naWZ5KSB7XG4gIC8vIGBKU09OLnN0cmluZ2lmeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi5zdHJpbmdpZnlcbiAgJCh7IHRhcmdldDogJ0pTT04nLCBzdGF0OiB0cnVlLCBhcml0eTogMywgZm9yY2VkOiBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gfHwgSUxMX0ZPUk1FRF9VTklDT0RFIH0sIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICAgICAgdmFyIHJlc3VsdCA9IGFwcGx5KFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA/IHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4IDogJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG4gICAgICByZXR1cm4gSUxMX0ZPUk1FRF9VTklDT0RFICYmIHR5cGVvZiByZXN1bHQgPT0gJ3N0cmluZycgPyByZXBsYWNlKHJlc3VsdCwgdGVzdGVyLCBmaXhJbGxGb3JtZWQpIDogcmVzdWx0O1xuICAgIH1cbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG4vLyBWOCB+IENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbnZhciBGT1JDRUQgPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlzeW1ib2xzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyAkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRvT2JqZWN0KGl0KSkgOiBbXTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBzcGxpdCB0byBtb2R1bGVzIGxpc3RlZCBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zeW1ib2wuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3ltYm9sLmZvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zeW1ib2wua2V5LWZvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG4iLCAiLy8gYFN5bWJvbC5wcm90b3R5cGUuZGVzY3JpcHRpb25gIGdldHRlclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLmRlc2NyaXB0aW9uXG4ndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcblxudmFyIE5hdGl2ZVN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgU3ltYm9sUHJvdG90eXBlID0gTmF0aXZlU3ltYm9sICYmIE5hdGl2ZVN5bWJvbC5wcm90b3R5cGU7XG5cbmlmIChERVNDUklQVE9SUyAmJiBpc0NhbGxhYmxlKE5hdGl2ZVN5bWJvbCkgJiYgKCEoJ2Rlc2NyaXB0aW9uJyBpbiBTeW1ib2xQcm90b3R5cGUpIHx8XG4gIC8vIFNhZmFyaSAxMiBidWdcbiAgTmF0aXZlU3ltYm9sKCkuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZFxuKSkge1xuICB2YXIgRW1wdHlTdHJpbmdEZXNjcmlwdGlvblN0b3JlID0ge307XG4gIC8vIHdyYXAgU3ltYm9sIGNvbnN0cnVjdG9yIGZvciBjb3JyZWN0IHdvcmsgd2l0aCB1bmRlZmluZWQgZGVzY3JpcHRpb25cbiAgdmFyIFN5bWJvbFdyYXBwZXIgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0b1N0cmluZyhhcmd1bWVudHNbMF0pO1xuICAgIHZhciByZXN1bHQgPSBpc1Byb3RvdHlwZU9mKFN5bWJvbFByb3RvdHlwZSwgdGhpcylcbiAgICAgID8gbmV3IE5hdGl2ZVN5bWJvbChkZXNjcmlwdGlvbilcbiAgICAgIC8vIGluIEVkZ2UgMTMsIFN0cmluZyhTeW1ib2wodW5kZWZpbmVkKSkgPT09ICdTeW1ib2wodW5kZWZpbmVkKSdcbiAgICAgIDogZGVzY3JpcHRpb24gPT09IHVuZGVmaW5lZCA/IE5hdGl2ZVN5bWJvbCgpIDogTmF0aXZlU3ltYm9sKGRlc2NyaXB0aW9uKTtcbiAgICBpZiAoZGVzY3JpcHRpb24gPT09ICcnKSBFbXB0eVN0cmluZ0Rlc2NyaXB0aW9uU3RvcmVbcmVzdWx0XSA9IHRydWU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKFN5bWJvbFdyYXBwZXIsIE5hdGl2ZVN5bWJvbCk7XG4gIFN5bWJvbFdyYXBwZXIucHJvdG90eXBlID0gU3ltYm9sUHJvdG90eXBlO1xuICBTeW1ib2xQcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeW1ib2xXcmFwcGVyO1xuXG4gIHZhciBOQVRJVkVfU1lNQk9MID0gU3RyaW5nKE5hdGl2ZVN5bWJvbCgnZGVzY3JpcHRpb24gZGV0ZWN0aW9uJykpID09PSAnU3ltYm9sKGRlc2NyaXB0aW9uIGRldGVjdGlvbiknO1xuICB2YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sUHJvdG90eXBlLnZhbHVlT2YpO1xuICB2YXIgc3ltYm9sRGVzY3JpcHRpdmVTdHJpbmcgPSB1bmN1cnJ5VGhpcyhTeW1ib2xQcm90b3R5cGUudG9TdHJpbmcpO1xuICB2YXIgcmVnZXhwID0gL15TeW1ib2xcXCgoLiopXFwpW14pXSskLztcbiAgdmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbiAgdmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBkZXNjcmlwdGlvbigpIHtcbiAgICAgIHZhciBzeW1ib2wgPSB0aGlzU3ltYm9sVmFsdWUodGhpcyk7XG4gICAgICBpZiAoaGFzT3duKEVtcHR5U3RyaW5nRGVzY3JpcHRpb25TdG9yZSwgc3ltYm9sKSkgcmV0dXJuICcnO1xuICAgICAgdmFyIHN0cmluZyA9IHN5bWJvbERlc2NyaXB0aXZlU3RyaW5nKHN5bWJvbCk7XG4gICAgICB2YXIgZGVzYyA9IE5BVElWRV9TWU1CT0wgPyBzdHJpbmdTbGljZShzdHJpbmcsIDcsIC0xKSA6IHJlcGxhY2Uoc3RyaW5nLCByZWdleHAsICckMScpO1xuICAgICAgcmV0dXJuIGRlc2MgPT09ICcnID8gdW5kZWZpbmVkIDogZGVzYztcbiAgICB9XG4gIH0pO1xuXG4gICQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgIFN5bWJvbDogU3ltYm9sV3JhcHBlclxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRhcmdldCwgU291cmNlLCBrZXkpIHtcbiAga2V5IGluIFRhcmdldCB8fCBkZWZpbmVQcm9wZXJ0eShUYXJnZXQsIGtleSwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFNvdXJjZVtrZXldOyB9LFxuICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IFNvdXJjZVtrZXldID0gaXQ7IH1cbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsICRkZWZhdWx0KSB7XG4gIHJldHVybiBhcmd1bWVudCA9PT0gdW5kZWZpbmVkID8gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyAnJyA6ICRkZWZhdWx0IDogdG9TdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRXJyb3IgPSBFcnJvcjtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG5cbnZhciBURVNUID0gKGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIFN0cmluZyhuZXcgJEVycm9yKGFyZykuc3RhY2spOyB9KSgnenhjYXNkJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZID0gL1xcblxccyphdCBbXjpdKjpbXlxcbl0qLztcbnZhciBJU19WOF9PUl9DSEFLUkFfU1RBQ0sgPSBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkudGVzdChURVNUKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChJU19WOF9PUl9DSEFLUkFfU1RBQ0sgJiYgdHlwZW9mIHN0YWNrID09ICdzdHJpbmcnICYmICEkRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpIHtcbiAgICB3aGlsZSAoZHJvcEVudHJpZXMtLSkgc3RhY2sgPSByZXBsYWNlKHN0YWNrLCBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlksICcnKTtcbiAgfSByZXR1cm4gc3RhY2s7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcignYScpO1xuICBpZiAoISgnc3RhY2snIGluIGVycm9yKSkgcmV0dXJuIHRydWU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCA3KSk7XG4gIHJldHVybiBlcnJvci5zdGFjayAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY2xlYXJFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyJyk7XG52YXIgRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUnKTtcblxuLy8gbm9uLXN0YW5kYXJkIFY4XG52YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXJyb3IsIEMsIHN0YWNrLCBkcm9wRW50cmllcykge1xuICBpZiAoRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUpIHtcbiAgICBpZiAoY2FwdHVyZVN0YWNrVHJhY2UpIGNhcHR1cmVTdGFja1RyYWNlKGVycm9yLCBDKTtcbiAgICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY2xlYXJFcnJvclN0YWNrKHN0YWNrLCBkcm9wRW50cmllcykpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBwcm94eUFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb3h5LWFjY2Vzc29yJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQnKTtcbnZhciBpbnN0YWxsRXJyb3JDYXVzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlJyk7XG52YXIgaW5zdGFsbEVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEZVTExfTkFNRSwgd3JhcHBlciwgRk9SQ0VELCBJU19BR0dSRUdBVEVfRVJST1IpIHtcbiAgdmFyIFNUQUNLX1RSQUNFX0xJTUlUID0gJ3N0YWNrVHJhY2VMaW1pdCc7XG4gIHZhciBPUFRJT05TX1BPU0lUSU9OID0gSVNfQUdHUkVHQVRFX0VSUk9SID8gMiA6IDE7XG4gIHZhciBwYXRoID0gRlVMTF9OQU1FLnNwbGl0KCcuJyk7XG4gIHZhciBFUlJPUl9OQU1FID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICB2YXIgT3JpZ2luYWxFcnJvciA9IGdldEJ1aWx0SW4uYXBwbHkobnVsbCwgcGF0aCk7XG5cbiAgaWYgKCFPcmlnaW5hbEVycm9yKSByZXR1cm47XG5cbiAgdmFyIE9yaWdpbmFsRXJyb3JQcm90b3R5cGUgPSBPcmlnaW5hbEVycm9yLnByb3RvdHlwZTtcblxuICAvLyBWOCA5LjMtIGJ1ZyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjAwNlxuICBpZiAoIUlTX1BVUkUgJiYgaGFzT3duKE9yaWdpbmFsRXJyb3JQcm90b3R5cGUsICdjYXVzZScpKSBkZWxldGUgT3JpZ2luYWxFcnJvclByb3RvdHlwZS5jYXVzZTtcblxuICBpZiAoIUZPUkNFRCkgcmV0dXJuIE9yaWdpbmFsRXJyb3I7XG5cbiAgdmFyIEJhc2VFcnJvciA9IGdldEJ1aWx0SW4oJ0Vycm9yJyk7XG5cbiAgdmFyIFdyYXBwZWRFcnJvciA9IHdyYXBwZXIoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgbWVzc2FnZSA9IG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KElTX0FHR1JFR0FURV9FUlJPUiA/IGIgOiBhLCB1bmRlZmluZWQpO1xuICAgIHZhciByZXN1bHQgPSBJU19BR0dSRUdBVEVfRVJST1IgPyBuZXcgT3JpZ2luYWxFcnJvcihhKSA6IG5ldyBPcmlnaW5hbEVycm9yKCk7XG4gICAgaWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHJlc3VsdCwgJ21lc3NhZ2UnLCBtZXNzYWdlKTtcbiAgICBpbnN0YWxsRXJyb3JTdGFjayhyZXN1bHQsIFdyYXBwZWRFcnJvciwgcmVzdWx0LnN0YWNrLCAyKTtcbiAgICBpZiAodGhpcyAmJiBpc1Byb3RvdHlwZU9mKE9yaWdpbmFsRXJyb3JQcm90b3R5cGUsIHRoaXMpKSBpbmhlcml0SWZSZXF1aXJlZChyZXN1bHQsIHRoaXMsIFdyYXBwZWRFcnJvcik7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiBPUFRJT05TX1BPU0lUSU9OKSBpbnN0YWxsRXJyb3JDYXVzZShyZXN1bHQsIGFyZ3VtZW50c1tPUFRJT05TX1BPU0lUSU9OXSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgV3JhcHBlZEVycm9yLnByb3RvdHlwZSA9IE9yaWdpbmFsRXJyb3JQcm90b3R5cGU7XG5cbiAgaWYgKEVSUk9SX05BTUUgIT09ICdFcnJvcicpIHtcbiAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHNldFByb3RvdHlwZU9mKFdyYXBwZWRFcnJvciwgQmFzZUVycm9yKTtcbiAgICBlbHNlIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoV3JhcHBlZEVycm9yLCBCYXNlRXJyb3IsIHsgbmFtZTogdHJ1ZSB9KTtcbiAgfSBlbHNlIGlmIChERVNDUklQVE9SUyAmJiBTVEFDS19UUkFDRV9MSU1JVCBpbiBPcmlnaW5hbEVycm9yKSB7XG4gICAgcHJveHlBY2Nlc3NvcihXcmFwcGVkRXJyb3IsIE9yaWdpbmFsRXJyb3IsIFNUQUNLX1RSQUNFX0xJTUlUKTtcbiAgICBwcm94eUFjY2Vzc29yKFdyYXBwZWRFcnJvciwgT3JpZ2luYWxFcnJvciwgJ3ByZXBhcmVTdGFja1RyYWNlJyk7XG4gIH1cblxuICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKFdyYXBwZWRFcnJvciwgT3JpZ2luYWxFcnJvcik7XG5cbiAgaWYgKCFJU19QVVJFKSB0cnkge1xuICAgIC8vIFNhZmFyaSAxMy0gYnVnOiBXZWJBc3NlbWJseSBlcnJvcnMgZG9lcyBub3QgaGF2ZSBhIHByb3BlciBgLm5hbWVgXG4gICAgaWYgKE9yaWdpbmFsRXJyb3JQcm90b3R5cGUubmFtZSAhPT0gRVJST1JfTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KE9yaWdpbmFsRXJyb3JQcm90b3R5cGUsICduYW1lJywgRVJST1JfTkFNRSk7XG4gICAgfVxuICAgIE9yaWdpbmFsRXJyb3JQcm90b3R5cGUuY29uc3RydWN0b3IgPSBXcmFwcGVkRXJyb3I7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxuICByZXR1cm4gV3JhcHBlZEVycm9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgZnVuY3Rpb25zIGAubGVuZ3RoYCAqL1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgd3JhcEVycm9yQ29uc3RydWN0b3JXaXRoQ2F1c2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd3JhcC1lcnJvci1jb25zdHJ1Y3Rvci13aXRoLWNhdXNlJyk7XG5cbnZhciBXRUJfQVNTRU1CTFkgPSAnV2ViQXNzZW1ibHknO1xudmFyIFdlYkFzc2VtYmx5ID0gZ2xvYmFsW1dFQl9BU1NFTUJMWV07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1lcnJvci1jYXVzZSAtLSBmZWF0dXJlIGRldGVjdGlvblxudmFyIEZPUkNFRCA9IG5ldyBFcnJvcignZScsIHsgY2F1c2U6IDcgfSkuY2F1c2UgIT09IDc7XG5cbnZhciBleHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlciA9IGZ1bmN0aW9uIChFUlJPUl9OQU1FLCB3cmFwcGVyKSB7XG4gIHZhciBPID0ge307XG4gIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIE8pO1xufTtcblxudmFyIGV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIgPSBmdW5jdGlvbiAoRVJST1JfTkFNRSwgd3JhcHBlcikge1xuICBpZiAoV2ViQXNzZW1ibHkgJiYgV2ViQXNzZW1ibHlbRVJST1JfTkFNRV0pIHtcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShXRUJfQVNTRU1CTFkgKyAnLicgKyBFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAgICQoeyB0YXJnZXQ6IFdFQl9BU1NFTUJMWSwgc3RhdDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCBPKTtcbiAgfVxufTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uYXRpdmVlcnJvclxuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ0Vycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdFdmFsRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRXZhbEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdSYW5nZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJhbmdlRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ1JlZmVyZW5jZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJlZmVyZW5jZUVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdTeW50YXhFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTeW50YXhFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVHlwZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFR5cGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVVJJRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVVJJRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0V2ViQXNzZW1ibHlFcnJvckNhdXNlV3JhcHBlcignQ29tcGlsZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIENvbXBpbGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRXZWJBc3NlbWJseUVycm9yQ2F1c2VXcmFwcGVyKCdMaW5rRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gTGlua0Vycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIoJ1J1bnRpbWVFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBSdW50aW1lRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudCcpO1xuXG52YXIgbmF0aXZlRXJyb3JUb1N0cmluZyA9IEVycm9yLnByb3RvdHlwZS50b1N0cmluZztcblxudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIENocm9tZSAzMi0gaW5jb3JyZWN0bHkgY2FsbCBhY2Nlc3NvclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlLCBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIHZhciBvYmplY3QgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ25hbWUnLCB7IGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMgPT09IG9iamVjdDtcbiAgICB9IH0pKTtcbiAgICBpZiAobmF0aXZlRXJyb3JUb1N0cmluZy5jYWxsKG9iamVjdCkgIT09ICd0cnVlJykgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gRkYxMC0gZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIG5vbi1zdHJpbmdzXG4gIHJldHVybiBuYXRpdmVFcnJvclRvU3RyaW5nLmNhbGwoeyBtZXNzYWdlOiAxLCBuYW1lOiAyIH0pICE9PSAnMjogMSdcbiAgICAvLyBJRTggZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIGRlZmF1bHRzXG4gICAgfHwgbmF0aXZlRXJyb3JUb1N0cmluZy5jYWxsKHt9KSAhPT0gJ0Vycm9yJztcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IElOQ09SUkVDVF9UT19TVFJJTkcgPyBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgdmFyIE8gPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIG5hbWUgPSBub3JtYWxpemVTdHJpbmdBcmd1bWVudChPLm5hbWUsICdFcnJvcicpO1xuICB2YXIgbWVzc2FnZSA9IG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KE8ubWVzc2FnZSk7XG4gIHJldHVybiAhbmFtZSA/IG1lc3NhZ2UgOiAhbWVzc2FnZSA/IG5hbWUgOiBuYW1lICsgJzogJyArIG1lc3NhZ2U7XG59IDogbmF0aXZlRXJyb3JUb1N0cmluZztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBlcnJvclRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXRvLXN0cmluZycpO1xuXG52YXIgRXJyb3JQcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG5cbi8vIGBFcnJvci5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBmaXhcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZXJyb3IucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoRXJyb3JQcm90b3R5cGUudG9TdHJpbmcgIT09IGVycm9yVG9TdHJpbmcpIHtcbiAgZGVmaW5lQnVpbHRJbihFcnJvclByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZXJyb3JUb1N0cmluZyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICAvLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3N1xuICByZXR1cm4gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBmb286IDEgfTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheVtNRVRIT0RfTkFNRV0oQm9vbGVhbikuZm9vICE9PSAxO1xuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2ZpbHRlcicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIGFyZ3VtZW50KSB7XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0sIDEpO1xuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnZm9yRWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxubW9kdWxlLmV4cG9ydHMgPSAhU1RSSUNUX01FVEhPRCA/IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG59IDogW10uZm9yRWFjaDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZvcmVhY2ggLS0gc2FmZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogW10uZm9yRWFjaCAhPT0gZm9yRWFjaCB9LCB7XG4gIGZvckVhY2g6IGZvckVhY2hcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG52YXIgVU5TQ09QQUJMRVMgPSB3ZWxsS25vd25TeW1ib2woJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuaWYgKEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXSA9PT0gdW5kZWZpbmVkKSB7XG4gIGRlZmluZVByb3BlcnR5KEFycmF5UHJvdG90eXBlLCBVTlNDT1BBQkxFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogY3JlYXRlKG51bGwpXG4gIH0pO1xufVxuXG4vLyBhZGQgYSBrZXkgdG8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b3R5cGVbVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmNsdWRlcztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIEZGOTkrIGJ1Z1xudmFyIEJST0tFTl9PTl9TUEFSU0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtaW5jbHVkZXMgLS0gZGV0ZWN0aW9uXG4gIHJldHVybiAhQXJyYXkoMSkuaW5jbHVkZXMoKTtcbn0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCUk9LRU5fT05fU1BBUlNFIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2luY2x1ZGVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWluZGV4b2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciAkaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBuYXRpdmVJbmRleE9mID0gdW5jdXJyeVRoaXMoW10uaW5kZXhPZik7XG5cbnZhciBORUdBVElWRV9aRVJPID0gISFuYXRpdmVJbmRleE9mICYmIDEgLyBuYXRpdmVJbmRleE9mKFsxXSwgMSwgLTApIDwgMDtcbnZhciBGT1JDRUQgPSBORUdBVElWRV9aRVJPIHx8ICFhcnJheU1ldGhvZElzU3RyaWN0KCdpbmRleE9mJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgdmFyIGZyb21JbmRleCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBORUdBVElWRV9aRVJPXG4gICAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgICA/IG5hdGl2ZUluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgZnJvbUluZGV4KSB8fCAwXG4gICAgICA6ICRpbmRleE9mKHRoaXMsIHNlYXJjaEVsZW1lbnQsIGZyb21JbmRleCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBPYmplY3RQcm90b3R5cGUgPSAkT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/ICRPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXNPd24ob2JqZWN0LCBJRV9QUk9UTykpIHJldHVybiBvYmplY3RbSUVfUFJPVE9dO1xuICB2YXIgY29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIGlmIChpc0NhbGxhYmxlKGNvbnN0cnVjdG9yKSAmJiBvYmplY3QgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mICRPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUta2V5cyAtLSBzYWZlICovXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbnZhciBORVdfSVRFUkFUT1JfUFJPVE9UWVBFID0gIWlzT2JqZWN0KEl0ZXJhdG9yUHJvdG90eXBlKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXN0ID0ge307XG4gIC8vIEZGNDQtIGxlZ2FjeSBpdGVyYXRvcnMgY2FzZVxuICByZXR1cm4gSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdLmNhbGwodGVzdCkgIT09IHRlc3Q7XG59KTtcblxuaWYgKE5FV19JVEVSQVRPUl9QUk9UT1RZUEUpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5lbHNlIGlmIChJU19QVVJFKSBJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLUBAaXRlcmF0b3JcbmlmICghaXNDYWxsYWJsZShJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gIGRlZmluZUJ1aWx0SW4oSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCwgRU5VTUVSQUJMRV9ORVhUKSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoKyFFTlVNRVJBQkxFX05FWFQsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBGdW5jdGlvbk5hbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5QUk9QRVI7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuQ09ORklHVVJBQkxFO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgJiYgS0lORCBpbiBJdGVyYWJsZVByb3RvdHlwZSkgcmV0dXJuIEl0ZXJhYmxlUHJvdG90eXBlW0tJTkRdO1xuXG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzKTsgfTtcbiAgfTtcblxuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IGZhbHNlO1xuICB2YXIgSXRlcmFibGVQcm90b3R5cGUgPSBJdGVyYWJsZS5wcm90b3R5cGU7XG4gIHZhciBuYXRpdmVJdGVyYXRvciA9IEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXVxuICAgIHx8IEl0ZXJhYmxlUHJvdG90eXBlWydAQGl0ZXJhdG9yJ11cbiAgICB8fCBERUZBVUxUICYmIEl0ZXJhYmxlUHJvdG90eXBlW0RFRkFVTFRdO1xuICB2YXIgZGVmYXVsdEl0ZXJhdG9yID0gIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgbmF0aXZlSXRlcmF0b3IgfHwgZ2V0SXRlcmF0aW9uTWV0aG9kKERFRkFVTFQpO1xuICB2YXIgYW55TmF0aXZlSXRlcmF0b3IgPSBOQU1FID09PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0NhbGxhYmxlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gICAgICAgICAgZGVmaW5lQnVpbHRJbihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheS5wcm90b3R5cGUueyB2YWx1ZXMsIEBAaXRlcmF0b3IgfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIERFRkFVTFQgPT09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBpZiAoIUlTX1BVUkUgJiYgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYWJsZVByb3RvdHlwZSwgJ25hbWUnLCBWQUxVRVMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gY2FsbChuYXRpdmVJdGVyYXRvciwgdGhpcyk7IH07XG4gICAgfVxuICB9XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgSVRFUkFUT1IsIGRlZmF1bHRJdGVyYXRvciwgeyBuYW1lOiBERUZBVUxUIH0pO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYENyZWF0ZUl0ZXJSZXN1bHRPYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVpdGVycmVzdWx0b2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgZG9uZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6IGRvbmUgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmtleXNcbi8vIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWFycmF5aXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lSXRlcmF0b3IoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBBUlJBWV9JVEVSQVRPUixcbiAgICB0YXJnZXQ6IHRvSW5kZXhlZE9iamVjdChpdGVyYXRlZCksIC8vIHRhcmdldFxuICAgIGluZGV4OiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICAgIGtpbmQ6IGtpbmQgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICB9KTtcbi8vIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuICBzd2l0Y2ggKHN0YXRlLmtpbmQpIHtcbiAgICBjYXNlICdrZXlzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoaW5kZXgsIGZhbHNlKTtcbiAgICBjYXNlICd2YWx1ZXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh0YXJnZXRbaW5kZXhdLCBmYWxzZSk7XG4gIH0gcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZmFsc2UpO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyVcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRldW5tYXBwZWRhcmd1bWVudHNvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG52YXIgdmFsdWVzID0gSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDQ1LSBidWdcbmlmICghSVNfUFVSRSAmJiBERVNDUklQVE9SUyAmJiB2YWx1ZXMubmFtZSAhPT0gJ3ZhbHVlcycpIHRyeSB7XG4gIGRlZmluZVByb3BlcnR5KHZhbHVlcywgJ25hbWUnLCB7IHZhbHVlOiAndmFsdWVzJyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBuYXRpdmVKb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBFUzNfU1RSSU5HUyA9IEluZGV4ZWRPYmplY3QgIT09IE9iamVjdDtcbnZhciBGT1JDRUQgPSBFUzNfU1RSSU5HUyB8fCAhYXJyYXlNZXRob2RJc1N0cmljdCgnam9pbicsICcsJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuam9pbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5qb2luXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikge1xuICAgIHJldHVybiBuYXRpdmVKb2luKHRvSW5kZXhlZE9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLm1hcDtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnbWFwJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFJFRFVDRV9FTVBUWSA9ICdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJztcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IHJlZHVjZSwgcmVkdWNlUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19SSUdIVCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c0xlbmd0aCwgbWVtbykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICBhQ2FsbGFibGUoY2FsbGJhY2tmbik7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCAmJiBhcmd1bWVudHNMZW5ndGggPCAyKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihSRURVQ0VfRU1QVFkpO1xuICAgIHZhciBpbmRleCA9IElTX1JJR0hUID8gbGVuZ3RoIC0gMSA6IDA7XG4gICAgdmFyIGkgPSBJU19SSUdIVCA/IC0xIDogMTtcbiAgICBpZiAoYXJndW1lbnRzTGVuZ3RoIDwgMikgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgICAgaW5kZXggKz0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgaWYgKElTX1JJR0hUID8gaW5kZXggPCAwIDogbGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFJFRFVDRV9FTVBUWSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoO0lTX1JJR0hUID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VcbiAgbGVmdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZXJpZ2h0XG4gIHJpZ2h0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3NvZihnbG9iYWwucHJvY2VzcykgPT09ICdwcm9jZXNzJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXJlZHVjZScpLmxlZnQ7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG52YXIgQ0hST01FX1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbi8vIENocm9tZSA4MC04MiBoYXMgYSBjcml0aWNhbCBidWdcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwNDk5ODJcbnZhciBDSFJPTUVfQlVHID0gIUlTX05PREUgJiYgQ0hST01FX1ZFUlNJT04gPiA3OSAmJiBDSFJPTUVfVkVSU0lPTiA8IDgzO1xudmFyIEZPUkNFRCA9IENIUk9NRV9CVUcgfHwgIWFycmF5TWV0aG9kSXNTdHJpY3QoJ3JlZHVjZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBsZW5ndGgsIGxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIG5hdGl2ZVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnc2xpY2UnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciAkQXJyYXkgPSBBcnJheTtcbnZhciBtYXggPSBNYXRoLm1heDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zbGljZVxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICAgIC8vIGlubGluZSBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBmb3IgdXNhZ2UgbmF0aXZlIGBBcnJheSNzbGljZWAgd2hlcmUgaXQncyBwb3NzaWJsZVxuICAgIHZhciBDb25zdHJ1Y3RvciwgcmVzdWx0LCBuO1xuICAgIGlmIChpc0FycmF5KE8pKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IE8uY29uc3RydWN0b3I7XG4gICAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgICAgaWYgKGlzQ29uc3RydWN0b3IoQ29uc3RydWN0b3IpICYmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IGlzQXJyYXkoQ29uc3RydWN0b3IucHJvdG90eXBlKSkpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KENvbnN0cnVjdG9yKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yW1NQRUNJRVNdO1xuICAgICAgICBpZiAoQ29uc3RydWN0b3IgPT09IG51bGwpIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKENvbnN0cnVjdG9yID09PSAkQXJyYXkgfHwgQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbmF0aXZlU2xpY2UoTywgaywgZmluKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gbmV3IChDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkID8gJEFycmF5IDogQ29uc3RydWN0b3IpKG1heChmaW4gLSBrLCAwKSk7XG4gICAgZm9yIChuID0gMDsgayA8IGZpbjsgaysrLCBuKyspIGlmIChrIGluIE8pIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IG47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIFApIHtcbiAgaWYgKCFkZWxldGUgT1tQXSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBkZWxldGUgcHJvcGVydHkgJyArIHRyeVRvU3RyaW5nKFApICsgJyBvZiAnICsgdHJ5VG9TdHJpbmcoTykpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHNldEFycmF5TGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGgnKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93Jyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcblxuLy8gSUU4LVxudmFyIElOQ09SUkVDVF9SRVNVTFQgPSBbXS51bnNoaWZ0KDApICE9PSAxO1xuXG4vLyBWOCB+IENocm9tZSA8IDcxIGFuZCBTYWZhcmkgPD0gMTUuNCwgRkYgPCAyMyB0aHJvd3MgSW50ZXJuYWxFcnJvclxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS51bnNoaWZ0KCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1JFU1VMVCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUudW5zaGlmdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS51bnNoaWZ0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgdW5zaGlmdDogZnVuY3Rpb24gdW5zaGlmdChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZiAoYXJnQ291bnQpIHtcbiAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgICB2YXIgayA9IGxlbjtcbiAgICAgIHdoaWxlIChrLS0pIHtcbiAgICAgICAgdmFyIHRvID0gayArIGFyZ0NvdW50O1xuICAgICAgICBpZiAoayBpbiBPKSBPW3RvXSA9IE9ba107XG4gICAgICAgIGVsc2UgZGVsZXRlUHJvcGVydHlPclRocm93KE8sIHRvKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXJnQ291bnQ7IGorKykge1xuICAgICAgICBPW2pdID0gYXJndW1lbnRzW2pdO1xuICAgICAgfVxuICAgIH0gcmV0dXJuIHNldEFycmF5TGVuZ3RoKE8sIGxlbiArIGFyZ0NvdW50KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gRkYyNi0gYnVnOiBBcnJheUJ1ZmZlcnMgYXJlIG5vbi1leHRlbnNpYmxlLCBidXQgT2JqZWN0LmlzRXh0ZW5zaWJsZSBkb2VzIG5vdCByZXBvcnQgaXRcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciA9PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig4KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBpZiAoT2JqZWN0LmlzRXh0ZW5zaWJsZShidWZmZXIpKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoYnVmZmVyLCAnYScsIHsgdmFsdWU6IDggfSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlIC0tIHNhZmVcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyAkaXNFeHRlbnNpYmxlKDEpOyB9KTtcblxuLy8gYE9iamVjdC5pc0V4dGVuc2libGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuaXNleHRlbnNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IChGQUlMU19PTl9QUklNSVRJVkVTIHx8IEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSkgPyBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBmYWxzZTtcbiAgaWYgKEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSAmJiBjbGFzc29mKGl0KSA9PT0gJ0FycmF5QnVmZmVyJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZTtcbn0gOiAkaXNFeHRlbnNpYmxlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlLCBlcy9uby1vYmplY3QtcHJldmVudGV4dGVuc2lvbnMgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgaXNFeHRlbnNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIEZSRUVaSU5HID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZyZWV6aW5nJyk7XG5cbnZhciBSRVFVSVJFRCA9IGZhbHNlO1xudmFyIE1FVEFEQVRBID0gdWlkKCdtZXRhJyk7XG52YXIgaWQgPSAwO1xuXG52YXIgc2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgZGVmaW5lUHJvcGVydHkoaXQsIE1FVEFEQVRBLCB7IHZhbHVlOiB7XG4gICAgb2JqZWN0SUQ6ICdPJyArIGlkKyssIC8vIG9iamVjdCBJRFxuICAgIHdlYWtEYXRhOiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcblxudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gYSBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS5vYmplY3RJRDtcbn07XG5cbnZhciBnZXRXZWFrRGF0YSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gdGhlIHN0b3JlIG9mIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS53ZWFrRGF0YTtcbn07XG5cbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWklORyAmJiBSRVFVSVJFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXNPd24oaXQsIE1FVEFEQVRBKSkgc2V0TWV0YWRhdGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuXG52YXIgZW5hYmxlID0gZnVuY3Rpb24gKCkge1xuICBtZXRhLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiAgUkVRVUlSRUQgPSB0cnVlO1xuICB2YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZjtcbiAgdmFyIHNwbGljZSA9IHVuY3VycnlUaGlzKFtdLnNwbGljZSk7XG4gIHZhciB0ZXN0ID0ge307XG4gIHRlc3RbTUVUQURBVEFdID0gMTtcblxuICAvLyBwcmV2ZW50IGV4cG9zaW5nIG9mIG1ldGFkYXRhIGtleVxuICBpZiAoZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0KS5sZW5ndGgpIHtcbiAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByZXN1bHQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJlc3VsdFtpXSA9PT0gTUVUQURBVEEpIHtcbiAgICAgICAgICBzcGxpY2UocmVzdWx0LCBpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAkKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIGdldE93blByb3BlcnR5TmFtZXM6IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZS5mXG4gICAgfSk7XG4gIH1cbn07XG5cbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVuYWJsZTogZW5hYmxlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrRGF0YTogZ2V0V2Vha0RhdGEsXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcblxuaGlkZGVuS2V5c1tNRVRBREFUQV0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFJlc3VsdCA9IGZ1bmN0aW9uIChzdG9wcGVkLCByZXN1bHQpIHtcbiAgdGhpcy5zdG9wcGVkID0gc3RvcHBlZDtcbiAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG59O1xuXG52YXIgUmVzdWx0UHJvdG90eXBlID0gUmVzdWx0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIHVuYm91bmRGdW5jdGlvbiwgb3B0aW9ucykge1xuICB2YXIgdGhhdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50aGF0O1xuICB2YXIgQVNfRU5UUklFUyA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5BU19FTlRSSUVTKTtcbiAgdmFyIElTX1JFQ09SRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19SRUNPUkQpO1xuICB2YXIgSVNfSVRFUkFUT1IgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfSVRFUkFUT1IpO1xuICB2YXIgSU5URVJSVVBURUQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSU5URVJSVVBURUQpO1xuICB2YXIgZm4gPSBiaW5kKHVuYm91bmRGdW5jdGlvbiwgdGhhdCk7XG4gIHZhciBpdGVyYXRvciwgaXRlckZuLCBpbmRleCwgbGVuZ3RoLCByZXN1bHQsIG5leHQsIHN0ZXA7XG5cbiAgdmFyIHN0b3AgPSBmdW5jdGlvbiAoY29uZGl0aW9uKSB7XG4gICAgaWYgKGl0ZXJhdG9yKSBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgY29uZGl0aW9uKTtcbiAgICByZXR1cm4gbmV3IFJlc3VsdCh0cnVlLCBjb25kaXRpb24pO1xuICB9O1xuXG4gIHZhciBjYWxsRm4gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAoQVNfRU5UUklFUykge1xuICAgICAgYW5PYmplY3QodmFsdWUpO1xuICAgICAgcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWVbMF0sIHZhbHVlWzFdLCBzdG9wKSA6IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgfSByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZSwgc3RvcCkgOiBmbih2YWx1ZSk7XG4gIH07XG5cbiAgaWYgKElTX1JFQ09SRCkge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGUuaXRlcmF0b3I7XG4gIH0gZWxzZSBpZiAoSVNfSVRFUkFUT1IpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJGbiA9IGdldEl0ZXJhdG9yTWV0aG9kKGl0ZXJhYmxlKTtcbiAgICBpZiAoIWl0ZXJGbikgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoaXRlcmFibGUpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAvLyBvcHRpbWlzYXRpb24gZm9yIGFycmF5IGl0ZXJhdG9yc1xuICAgIGlmIChpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlckZuKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZXJhYmxlKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbEZuKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbiAgICB9XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihpdGVyYWJsZSwgaXRlckZuKTtcbiAgfVxuXG4gIG5leHQgPSBJU19SRUNPUkQgPyBpdGVyYWJsZS5uZXh0IDogaXRlcmF0b3IubmV4dDtcbiAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGNhbGxGbihzdGVwLnZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUHJvdG90eXBlKSB7XG4gIGlmIChpc1Byb3RvdHlwZU9mKFByb3RvdHlwZSwgaXQpKSByZXR1cm4gaXQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCdJbmNvcnJlY3QgaW52b2NhdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FLCB3cmFwcGVyLCBjb21tb24pIHtcbiAgdmFyIElTX01BUCA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignTWFwJykgIT09IC0xO1xuICB2YXIgSVNfV0VBSyA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignV2VhaycpICE9PSAtMTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsW0NPTlNUUlVDVE9SX05BTUVdO1xuICB2YXIgTmF0aXZlUHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IgJiYgTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICB2YXIgQ29uc3RydWN0b3IgPSBOYXRpdmVDb25zdHJ1Y3RvcjtcbiAgdmFyIGV4cG9ydGVkID0ge307XG5cbiAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICB2YXIgdW5jdXJyaWVkTmF0aXZlTWV0aG9kID0gdW5jdXJyeVRoaXMoTmF0aXZlUHJvdG90eXBlW0tFWV0pO1xuICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvdG90eXBlLCBLRVksXG4gICAgICBLRVkgPT09ICdhZGQnID8gZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgIHVuY3VycmllZE5hdGl2ZU1ldGhvZCh0aGlzLCB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSA6IEtFWSA9PT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChrZXkpID8gZmFsc2UgOiB1bmN1cnJpZWROYXRpdmVNZXRob2QodGhpcywga2V5ID09PSAwID8gMCA6IGtleSk7XG4gICAgICB9IDogS0VZID09PSAnZ2V0JyA/IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGtleSkgPyB1bmRlZmluZWQgOiB1bmN1cnJpZWROYXRpdmVNZXRob2QodGhpcywga2V5ID09PSAwID8gMCA6IGtleSk7XG4gICAgICB9IDogS0VZID09PSAnaGFzJyA/IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGtleSkgPyBmYWxzZSA6IHVuY3VycmllZE5hdGl2ZU1ldGhvZCh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5KTtcbiAgICAgIH0gOiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICB1bmN1cnJpZWROYXRpdmVNZXRob2QodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICApO1xuICB9O1xuXG4gIHZhciBSRVBMQUNFID0gaXNGb3JjZWQoXG4gICAgQ09OU1RSVUNUT1JfTkFNRSxcbiAgICAhaXNDYWxsYWJsZShOYXRpdmVDb25zdHJ1Y3RvcikgfHwgIShJU19XRUFLIHx8IE5hdGl2ZVByb3RvdHlwZS5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKS5lbnRyaWVzKCkubmV4dCgpO1xuICAgIH0pKVxuICApO1xuXG4gIGlmIChSRVBMQUNFKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDb25zdHJ1Y3RvciA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlLmVuYWJsZSgpO1xuICB9IGVsc2UgaWYgKGlzRm9yY2VkKENPTlNUUlVDVE9SX05BTUUsIHRydWUpKSB7XG4gICAgdmFyIGluc3RhbmNlID0gbmV3IENvbnN0cnVjdG9yKCk7XG4gICAgLy8gZWFybHkgaW1wbGVtZW50YXRpb25zIG5vdCBzdXBwb3J0cyBjaGFpbmluZ1xuICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT09IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gQ2hyb21pdW0gNDAtIHdlYWstY29sbGVjdGlvbnMgdGhyb3dzIG9uIHByaW1pdGl2ZXMsIGJ1dCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgdmFyIFRIUk9XU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBpbnN0YW5jZS5oYXMoMSk7IH0pO1xuICAgIC8vIG1vc3QgZWFybHkgaW1wbGVtZW50YXRpb25zIGRvZXNuJ3Qgc3VwcG9ydHMgaXRlcmFibGVzLCBtb3N0IG1vZGVybiAtIG5vdCBjbG9zZSBpdCBjb3JyZWN0bHlcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24oZnVuY3Rpb24gKGl0ZXJhYmxlKSB7IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihpdGVyYWJsZSk7IH0pO1xuICAgIC8vIGZvciBlYXJseSBpbXBsZW1lbnRhdGlvbnMgLTAgYW5kICswIG5vdCB0aGUgc2FtZVxuICAgIHZhciBCVUdHWV9aRVJPID0gIUlTX1dFQUsgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVjggfiBDaHJvbWl1bSA0Mi0gZmFpbHMgb25seSB3aXRoIDUrIGVsZW1lbnRzXG4gICAgICB2YXIgJGluc3RhbmNlID0gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCk7XG4gICAgICB2YXIgaW5kZXggPSA1O1xuICAgICAgd2hpbGUgKGluZGV4LS0pICRpbnN0YW5jZVtBRERFUl0oaW5kZXgsIGluZGV4KTtcbiAgICAgIHJldHVybiAhJGluc3RhbmNlLmhhcygtMCk7XG4gICAgfSk7XG5cbiAgICBpZiAoIUFDQ0VQVF9JVEVSQUJMRVMpIHtcbiAgICAgIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAoZHVtbXksIGl0ZXJhYmxlKSB7XG4gICAgICAgIGFuSW5zdGFuY2UoZHVtbXksIE5hdGl2ZVByb3RvdHlwZSk7XG4gICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCksIGR1bW15LCBDb25zdHJ1Y3Rvcik7XG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlcmFibGUpKSBpdGVyYXRlKGl0ZXJhYmxlLCB0aGF0W0FEREVSXSwgeyB0aGF0OiB0aGF0LCBBU19FTlRSSUVTOiBJU19NQVAgfSk7XG4gICAgICAgIHJldHVybiB0aGF0O1xuICAgICAgfSk7XG4gICAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBOYXRpdmVQcm90b3R5cGU7XG4gICAgICBOYXRpdmVQcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjtcbiAgICB9XG5cbiAgICBpZiAoVEhST1dTX09OX1BSSU1JVElWRVMgfHwgQlVHR1lfWkVSTykge1xuICAgICAgZml4TWV0aG9kKCdkZWxldGUnKTtcbiAgICAgIGZpeE1ldGhvZCgnaGFzJyk7XG4gICAgICBJU19NQVAgJiYgZml4TWV0aG9kKCdnZXQnKTtcbiAgICB9XG5cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcblxuICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgc2hvdWxkIG5vdCBjb250YWlucyAuY2xlYXIgbWV0aG9kXG4gICAgaWYgKElTX1dFQUsgJiYgTmF0aXZlUHJvdG90eXBlLmNsZWFyKSBkZWxldGUgTmF0aXZlUHJvdG90eXBlLmNsZWFyO1xuICB9XG5cbiAgZXhwb3J0ZWRbQ09OU1RSVUNUT1JfTkFNRV0gPSBDb25zdHJ1Y3RvcjtcbiAgJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGZvcmNlZDogQ29uc3RydWN0b3IgIT09IE5hdGl2ZUNvbnN0cnVjdG9yIH0sIGV4cG9ydGVkKTtcblxuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApO1xuXG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBvcHRpb25zKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIGRlZmluZUJ1aWx0SW4odGFyZ2V0LCBrZXksIHNyY1trZXldLCBvcHRpb25zKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUpIHtcbiAgdmFyIENvbnN0cnVjdG9yID0gZ2V0QnVpbHRJbihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgQ29uc3RydWN0b3IgJiYgIUNvbnN0cnVjdG9yW1NQRUNJRVNdKSB7XG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKENvbnN0cnVjdG9yLCBTUEVDSUVTLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgICB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFzdEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpLmZhc3RLZXk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDb25zdHJ1Y3RvciA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIFByb3RvdHlwZSk7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoYXQsIHtcbiAgICAgICAgdHlwZTogQ09OU1RSVUNUT1JfTkFNRSxcbiAgICAgICAgaW5kZXg6IGNyZWF0ZShudWxsKSxcbiAgICAgICAgZmlyc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgbGFzdDogdW5kZWZpbmVkLFxuICAgICAgICBzaXplOiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMpIHRoYXQuc2l6ZSA9IDA7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICB2YXIgcHJldmlvdXMsIGluZGV4O1xuICAgICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcbiAgICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmxhc3QgPSBlbnRyeSA9IHtcbiAgICAgICAgICBpbmRleDogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksXG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzOiBwcmV2aW91cyA9IHN0YXRlLmxhc3QsXG4gICAgICAgICAgbmV4dDogdW5kZWZpbmVkLFxuICAgICAgICAgIHJlbW92ZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIGlmICghc3RhdGUuZmlyc3QpIHN0YXRlLmZpcnN0ID0gZW50cnk7XG4gICAgICAgIGlmIChwcmV2aW91cykgcHJldmlvdXMubmV4dCA9IGVudHJ5O1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUrKztcbiAgICAgICAgZWxzZSB0aGF0LnNpemUrKztcbiAgICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSBzdGF0ZS5pbmRleFtpbmRleF0gPSBlbnRyeTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfTtcblxuICAgIHZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uICh0aGF0LCBrZXkpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAvLyBmYXN0IGNhc2VcbiAgICAgIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KTtcbiAgICAgIHZhciBlbnRyeTtcbiAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gc3RhdGUuaW5kZXhbaW5kZXhdO1xuICAgICAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gICAgICBmb3IgKGVudHJ5ID0gc3RhdGUuZmlyc3Q7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm5leHQpIHtcbiAgICAgICAgaWYgKGVudHJ5LmtleSA9PT0ga2V5KSByZXR1cm4gZW50cnk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwge1xuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuY2xlYXIoKWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmNsZWFyXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuY2xlYXJcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZW50cnkgPSBzdGF0ZS5maXJzdDtcbiAgICAgICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICAgICAgZW50cnkucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnByZXZpb3VzKSBlbnRyeS5wcmV2aW91cyA9IGVudHJ5LnByZXZpb3VzLm5leHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmZpcnN0ID0gc3RhdGUubGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgc3RhdGUuaW5kZXggPSBjcmVhdGUobnVsbCk7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSA9IDA7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5kZWxldGUoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm5leHQ7XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgICBkZWxldGUgc3RhdGUuaW5kZXhbZW50cnkuaW5kZXhdO1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm5leHQgPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnByZXZpb3VzID0gcHJldjtcbiAgICAgICAgICBpZiAoc3RhdGUuZmlyc3QgPT09IGVudHJ5KSBzdGF0ZS5maXJzdCA9IG5leHQ7XG4gICAgICAgICAgaWYgKHN0YXRlLmxhc3QgPT09IGVudHJ5KSBzdGF0ZS5sYXN0ID0gcHJldjtcbiAgICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUtLTtcbiAgICAgICAgICBlbHNlIHRoYXQuc2l6ZS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLmZpcnN0KSB7XG4gICAgICAgICAgYm91bmRGdW5jdGlvbihlbnRyeS52YWx1ZSwgZW50cnkua2V5LCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0fS5wcm90b3R5cGUuaGFzKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5oYXNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5oYXNcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCBJU19NQVAgPyB7XG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5nZXQoa2V5KWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZ2V0XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnZhbHVlO1xuICAgICAgfSxcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuc2V0XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gOiB7XG4gICAgICAvLyBgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5hZGRcbiAgICAgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH0sXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApIHtcbiAgICB2YXIgSVRFUkFUT1JfTkFNRSA9IENPTlNUUlVDVE9SX05BTUUgKyAnIEl0ZXJhdG9yJztcbiAgICB2YXIgZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuICAgIHZhciBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKElURVJBVE9SX05BTUUpO1xuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLnsga2V5cywgdmFsdWVzLCBlbnRyaWVzLCBAQGl0ZXJhdG9yIH0oKWAgbWV0aG9kc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgZGVmaW5lSXRlcmF0b3IoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICAgIHR5cGU6IElURVJBVE9SX05BTUUsXG4gICAgICAgIHRhcmdldDogaXRlcmF0ZWQsXG4gICAgICAgIHN0YXRlOiBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZShpdGVyYXRlZCksXG4gICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgIGxhc3Q6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlKHRoaXMpO1xuICAgICAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICAgICAgdmFyIGVudHJ5ID0gc3RhdGUubGFzdDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnJlbW92ZWQpIGVudHJ5ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAvLyBnZXQgbmV4dCBlbnRyeVxuICAgICAgaWYgKCFzdGF0ZS50YXJnZXQgfHwgIShzdGF0ZS5sYXN0ID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm5leHQgOiBzdGF0ZS5zdGF0ZS5maXJzdCkpIHtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT09ICdrZXlzJykgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkua2V5LCBmYWxzZSk7XG4gICAgICBpZiAoa2luZCA9PT0gJ3ZhbHVlcycpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LnZhbHVlLCBmYWxzZSk7XG4gICAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbZW50cnkua2V5LCBlbnRyeS52YWx1ZV0sIGZhbHNlKTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJywgIUlTX01BUCwgdHJ1ZSk7XG5cbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZVtAQHNwZWNpZXNdYCBhY2Nlc3NvcnNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1tYXAtQEBzcGVjaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtc2V0LUBAc3BlY2llc1xuICAgIHNldFNwZWNpZXMoQ09OU1RSVUNUT1JfTkFNRSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25TdHJvbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gYE1hcGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLW9iamVjdHNcbmNvbGxlY3Rpb24oJ01hcCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKSB7IHJldHVybiBpbml0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwgY29sbGVjdGlvblN0cm9uZyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyByZXBsYWNlZCB0byBtb2R1bGUgYmVsb3dcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMubWFwLmNvbnN0cnVjdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgIT09IGRlZmluZVByb3BlcnRpZXMsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnRpZXM6IGRlZmluZVByb3BlcnRpZXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnR5ICE9PSBkZWZpbmVQcm9wZXJ0eSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydHk6IGRlZmluZVByb3BlcnR5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRk9SQ0VEID0gIURFU0NSSVBUT1JTIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSW5kZXhlZE9iamVjdChpdCksIGtleSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGtleSwgZGVzY3JpcHRvcjtcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpbmRleCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBrZXkgPSBrZXlzW2luZGV4KytdKTtcbiAgICAgIGlmIChkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJykuZjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuICFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcygxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogZ2V0T3duUHJvcGVydHlOYW1lc1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbmF0aXZlS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVLZXlzKDEpOyB9KTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMgfSwge1xuICBrZXlzOiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXModG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgb25GcmVlemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKS5vbkZyZWV6ZTtcbnZhciBGUkVFWklORyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mcmVlemluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2VhbCAtLSBzYWZlXG52YXIgJHNlYWwgPSBPYmplY3Quc2VhbDtcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyAkc2VhbCgxKTsgfSk7XG5cbi8vIGBPYmplY3Quc2VhbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZWFsXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTLCBzaGFtOiAhRlJFRVpJTkcgfSwge1xuICBzZWFsOiBmdW5jdGlvbiBzZWFsKGl0KSB7XG4gICAgcmV0dXJuICRzZWFsICYmIGlzT2JqZWN0KGl0KSA/ICRzZWFsKG9uRnJlZXplKGl0KSkgOiBpdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IHt9LnRvU3RyaW5nIDogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICBkZWZpbmVCdWlsdEluKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIHRvU3RyaW5nLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnYScsICd5JykgLT4gL2EveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAkUmVnRXhwKCdhJywgJ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ2FiY2QnKSAhPT0gbnVsbDtcbn0pO1xuXG4vLyBVQyBCcm93c2VyIGJ1Z1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzEwMDhcbnZhciBNSVNTRURfU1RJQ0tZID0gVU5TVVBQT1JURURfWSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhJFJlZ0V4cCgnYScsICd5Jykuc3RpY2t5O1xufSk7XG5cbnZhciBCUk9LRU5fQ0FSRVQgPSBVTlNVUFBPUlRFRF9ZIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNjg3XG4gIHZhciByZSA9ICRSZWdFeHAoJ15yJywgJ2d5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdzdHInKSAhPT0gbnVsbDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQlJPS0VOX0NBUkVUOiBCUk9LRU5fQ0FSRVQsXG4gIE1JU1NFRF9TVElDS1k6IE1JU1NFRF9TVElDS1ksXG4gIFVOU1VQUE9SVEVEX1k6IFVOU1VQUE9SVEVEX1lcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJy4nLCAncycpIC0+IC8uL3MgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnLicsICdzJyk7XG4gIHJldHVybiAhKHJlLmRvdEFsbCAmJiByZS50ZXN0KCdcXG4nKSAmJiByZS5mbGFncyA9PT0gJ3MnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCcoPzxhPmIpJywgJ2cnKSAtPiAvKD88YT5iKS9nIGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJyg/PGE+YiknLCAnZycpO1xuICByZXR1cm4gcmUuZXhlYygnYicpLmdyb3Vwcy5hICE9PSAnYicgfHxcbiAgICAnYicucmVwbGFjZShyZSwgJyQ8YT5jJykgIT09ICdiYyc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tZW1wdHktY2FwdHVyaW5nLWdyb3VwLCByZWdleHAvbm8tZW1wdHktZ3JvdXAsIHJlZ2V4cC9uby1sYXp5LWVuZHMgLS0gdGVzdGluZyAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVnZXhwL25vLXVzZWxlc3MtcXVhbnRpZmllciAtLSB0ZXN0aW5nICovXG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzJyk7XG52YXIgc3RpY2t5SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtc3RpY2t5LWhlbHBlcnMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJykuZ2V0O1xudmFyIFVOU1VQUE9SVEVEX0RPVF9BTEwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwnKTtcbnZhciBVTlNVUFBPUlRFRF9OQ0cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLW5jZycpO1xuXG52YXIgbmF0aXZlUmVwbGFjZSA9IHNoYXJlZCgnbmF0aXZlLXN0cmluZy1yZXBsYWNlJywgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGluZGV4T2YgPSB1bmN1cnJ5VGhpcygnJy5pbmRleE9mKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvO1xuICB2YXIgcmUyID0gL2IqL2c7XG4gIGNhbGwobmF0aXZlRXhlYywgcmUxLCAnYScpO1xuICBjYWxsKG5hdGl2ZUV4ZWMsIHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMS5sYXN0SW5kZXggIT09IDAgfHwgcmUyLmxhc3RJbmRleCAhPT0gMDtcbn0pKCk7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gc3RpY2t5SGVscGVycy5CUk9LRU5fQ0FSRVQ7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEIHx8IFVOU1VQUE9SVEVEX1kgfHwgVU5TVVBQT1JURURfRE9UX0FMTCB8fCBVTlNVUFBPUlRFRF9OQ0c7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyaW5nKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHJlKTtcbiAgICB2YXIgc3RyID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICB2YXIgcmF3ID0gc3RhdGUucmF3O1xuICAgIHZhciByZXN1bHQsIHJlQ29weSwgbGFzdEluZGV4LCBtYXRjaCwgaSwgb2JqZWN0LCBncm91cDtcblxuICAgIGlmIChyYXcpIHtcbiAgICAgIHJhdy5sYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICByZXN1bHQgPSBjYWxsKHBhdGNoZWRFeGVjLCByYXcsIHN0cik7XG4gICAgICByZS5sYXN0SW5kZXggPSByYXcubGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB2YXIgZ3JvdXBzID0gc3RhdGUuZ3JvdXBzO1xuICAgIHZhciBzdGlja3kgPSBVTlNVUFBPUlRFRF9ZICYmIHJlLnN0aWNreTtcbiAgICB2YXIgZmxhZ3MgPSBjYWxsKHJlZ2V4cEZsYWdzLCByZSk7XG4gICAgdmFyIHNvdXJjZSA9IHJlLnNvdXJjZTtcbiAgICB2YXIgY2hhcnNBZGRlZCA9IDA7XG4gICAgdmFyIHN0ckNvcHkgPSBzdHI7XG5cbiAgICBpZiAoc3RpY2t5KSB7XG4gICAgICBmbGFncyA9IHJlcGxhY2UoZmxhZ3MsICd5JywgJycpO1xuICAgICAgaWYgKGluZGV4T2YoZmxhZ3MsICdnJykgPT09IC0xKSB7XG4gICAgICAgIGZsYWdzICs9ICdnJztcbiAgICAgIH1cblxuICAgICAgc3RyQ29weSA9IHN0cmluZ1NsaWNlKHN0ciwgcmUubGFzdEluZGV4KTtcbiAgICAgIC8vIFN1cHBvcnQgYW5jaG9yZWQgc3RpY2t5IGJlaGF2aW9yLlxuICAgICAgaWYgKHJlLmxhc3RJbmRleCA+IDAgJiYgKCFyZS5tdWx0aWxpbmUgfHwgcmUubXVsdGlsaW5lICYmIGNoYXJBdChzdHIsIHJlLmxhc3RJbmRleCAtIDEpICE9PSAnXFxuJykpIHtcbiAgICAgICAgc291cmNlID0gJyg/OiAnICsgc291cmNlICsgJyknO1xuICAgICAgICBzdHJDb3B5ID0gJyAnICsgc3RyQ29weTtcbiAgICAgICAgY2hhcnNBZGRlZCsrO1xuICAgICAgfVxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIHN0ciBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXig/OicgKyBzb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICB9XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyBzb3VyY2UgKyAnJCg/IVxcXFxzKScsIGZsYWdzKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmUubGFzdEluZGV4O1xuXG4gICAgbWF0Y2ggPSBjYWxsKG5hdGl2ZUV4ZWMsIHN0aWNreSA/IHJlQ29weSA6IHJlLCBzdHJDb3B5KTtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBtYXRjaC5pbnB1dCA9IHN0cmluZ1NsaWNlKG1hdGNoLmlucHV0LCBjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2hbMF0gPSBzdHJpbmdTbGljZShtYXRjaFswXSwgY2hhcnNBZGRlZCk7XG4gICAgICAgIG1hdGNoLmluZGV4ID0gcmUubGFzdEluZGV4O1xuICAgICAgICByZS5sYXN0SW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgfSBlbHNlIHJlLmxhc3RJbmRleCA9IDA7XG4gICAgfSBlbHNlIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJ3Qgd29yayBmb3IgLyguPyk/L1xuICAgICAgY2FsbChuYXRpdmVSZXBsYWNlLCBtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoICYmIGdyb3Vwcykge1xuICAgICAgbWF0Y2guZ3JvdXBzID0gb2JqZWN0ID0gY3JlYXRlKG51bGwpO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBncm91cCA9IGdyb3Vwc1tpXTtcbiAgICAgICAgb2JqZWN0W2dyb3VwWzBdXSA9IG1hdGNoW2dyb3VwWzFdXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5leGVjYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS5leGVjXG4kKHsgdGFyZ2V0OiAnUmVnRXhwJywgcHJvdG86IHRydWUsIGZvcmNlZDogLy4vLmV4ZWMgIT09IGV4ZWMgfSwge1xuICBleGVjOiBleGVjXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIG1vdmVkIHRvIGVudHJ5IHBvaW50c1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5yZWdleHAuZXhlYycpO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG52YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gIHZhciByZSA9IC9bYWNdLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBleGVjQ2FsbGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gLy4vLmV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHJlLnRlc3QoJ2FiYycpID09PSB0cnVlICYmIGV4ZWNDYWxsZWQ7XG59KCk7XG5cbnZhciBuYXRpdmVUZXN0ID0gLy4vLnRlc3Q7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLnRlc3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLnRlc3RcbiQoeyB0YXJnZXQ6ICdSZWdFeHAnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhREVMRUdBVEVTX1RPX0VYRUMgfSwge1xuICB0ZXN0OiBmdW5jdGlvbiAoUykge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKFMpO1xuICAgIHZhciBleGVjID0gUi5leGVjO1xuICAgIGlmICghaXNDYWxsYWJsZShleGVjKSkgcmV0dXJuIGNhbGwobmF0aXZlVGVzdCwgUiwgc3RyaW5nKTtcbiAgICB2YXIgcmVzdWx0ID0gY2FsbChleGVjLCBSLCBzdHJpbmcpO1xuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICBhbk9iamVjdChyZXN1bHQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG5cbi8vIGBJc1JlZ0V4cGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzcmVnZXhwXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjbGFzc29mKGl0KSA9PT0gJ1JlZ0V4cCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcmVnZXhwJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNSZWdFeHAoaXQpKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJUaGUgbWV0aG9kIGRvZXNuJ3QgYWNjZXB0IHJlZ3VsYXIgZXhwcmVzc2lvbnNcIik7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgdmFyIHJlZ2V4cCA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tNRVRIT0RfTkFNRV0ocmVnZXhwKTtcbiAgfSBjYXRjaCAoZXJyb3IxKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlZ2V4cFtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAnLy4vJ1tNRVRIT0RfTkFNRV0ocmVnZXhwKTtcbiAgICB9IGNhdGNoIChlcnJvcjIpIHsgLyogZW1wdHkgKi8gfVxuICB9IHJldHVybiBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBub3RBUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vdC1hLXJlZ2V4cCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgY29ycmVjdElzUmVnRXhwTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIHNsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG52YXIgQ09SUkVDVF9JU19SRUdFWFBfTE9HSUMgPSBjb3JyZWN0SXNSZWdFeHBMb2dpYygnZW5kc1dpdGgnKTtcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL3B1bGwvNzAyXG52YXIgTUROX1BPTFlGSUxMX0JVRyA9ICFJU19QVVJFICYmICFDT1JSRUNUX0lTX1JFR0VYUF9MT0dJQyAmJiAhIWZ1bmN0aW9uICgpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU3RyaW5nLnByb3RvdHlwZSwgJ2VuZHNXaXRoJyk7XG4gIHJldHVybiBkZXNjcmlwdG9yICYmICFkZXNjcmlwdG9yLndyaXRhYmxlO1xufSgpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuZW5kc3dpdGhcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhTUROX1BPTFlGSUxMX0JVRyAmJiAhQ09SUkVDVF9JU19SRUdFWFBfTE9HSUMgfSwge1xuICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgZW5kUG9zaXRpb24gPSBAbGVuZ3RoICovKSB7XG4gICAgdmFyIHRoYXQgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKTtcbiAgICBub3RBUmVnRXhwKHNlYXJjaFN0cmluZyk7XG4gICAgdmFyIGVuZFBvc2l0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGxlbiA9IHRoYXQubGVuZ3RoO1xuICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogbWluKHRvTGVuZ3RoKGVuZFBvc2l0aW9uKSwgbGVuKTtcbiAgICB2YXIgc2VhcmNoID0gdG9TdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gc2xpY2UodGhhdCwgZW5kIC0gc2VhcmNoLmxlbmd0aCwgZW5kKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBub3RBUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vdC1hLXJlZ2V4cCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY29ycmVjdElzUmVnRXhwTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMnKTtcblxudmFyIHN0cmluZ0luZGV4T2YgPSB1bmN1cnJ5VGhpcygnJy5pbmRleE9mKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogIWNvcnJlY3RJc1JlZ0V4cExvZ2ljKCdpbmNsdWRlcycpIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5zdHJpbmdJbmRleE9mKFxuICAgICAgdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSksXG4gICAgICB0b1N0cmluZyhub3RBUmVnRXhwKHNlYXJjaFN0cmluZykpLFxuICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWRcbiAgICApO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlck9ySW5maW5pdHkocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gY2hhckF0KFMsIHBvc2l0aW9uKVxuICAgICAgICAgIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gc3RyaW5nU2xpY2UoUywgcG9zaXRpb24sIHBvc2l0aW9uICsgMilcbiAgICAgICAgICA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcblxudmFyIFNUUklOR19JVEVSQVRPUiA9ICdTdHJpbmcgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1RSSU5HX0lURVJBVE9SKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLUBAaXRlcmF0b3JcbmRlZmluZUl0ZXJhdG9yKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBTVFJJTkdfSVRFUkFUT1IsXG4gICAgc3RyaW5nOiB0b1N0cmluZyhpdGVyYXRlZCksXG4gICAgaW5kZXg6IDBcbiAgfSk7XG4vLyBgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXN0cmluZ2l0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgc3RyaW5nID0gc3RhdGUuc3RyaW5nO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleDtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgcG9pbnQgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gIHN0YXRlLmluZGV4ICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QocG9pbnQsIGZhbHNlKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgbW92ZWQgdG8gZW50cnkgcG9pbnRzXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBGT1JDRUQsIFNIQU0pIHtcbiAgdmFyIFNZTUJPTCA9IHdlbGxLbm93blN5bWJvbChLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG5cbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBXZSBjYW4ndCB1c2UgcmVhbCByZWdleCBoZXJlIHNpbmNlIGl0IGNhdXNlcyBkZW9wdGltaXphdGlvblxuICAgICAgLy8gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gaW4gVjhcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMDZcbiAgICAgIHJlID0ge307XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgICByZS5mbGFncyA9ICcnO1xuICAgICAgcmVbU1lNQk9MXSA9IC8uL1tTWU1CT0xdO1xuICAgIH1cblxuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBleGVjQ2FsbGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIEZPUkNFRFxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIG1ldGhvZHMgPSBleGVjKFNZTUJPTCwgJydbS0VZXSwgZnVuY3Rpb24gKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICB2YXIgJGV4ZWMgPSByZWdleHAuZXhlYztcbiAgICAgIGlmICgkZXhlYyA9PT0gcmVnZXhwRXhlYyB8fCAkZXhlYyA9PT0gUmVnRXhwUHJvdG90eXBlLmV4ZWMpIHtcbiAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IGNhbGwobmF0aXZlUmVnRXhwTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogY2FsbChuYXRpdmVNZXRob2QsIHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW4oU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBtZXRob2RzWzBdKTtcbiAgICBkZWZpbmVCdWlsdEluKFJlZ0V4cFByb3RvdHlwZSwgU1lNQk9MLCBtZXRob2RzWzFdKTtcbiAgfVxuXG4gIGlmIChTSEFNKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUmVnRXhwUHJvdG90eXBlW1NZTUJPTF0sICdzaGFtJywgdHJ1ZSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcblxuLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBjaGFyQXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFMgPSAvXFwkKFskJidgXXxcXGR7MSwyfXw8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCYnYF18XFxkezEsMn0pL2c7XG5cbi8vIGBHZXRTdWJzdGl0dXRpb25gIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gIHZhciBtID0gY2FwdHVyZXMubGVuZ3RoO1xuICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbmFtZWRDYXB0dXJlcyA9IHRvT2JqZWN0KG5hbWVkQ2FwdHVyZXMpO1xuICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgfVxuICByZXR1cm4gcmVwbGFjZShyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgIHZhciBjYXB0dXJlO1xuICAgIHN3aXRjaCAoY2hhckF0KGNoLCAwKSkge1xuICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICBjYXNlICdgJzogcmV0dXJuIHN0cmluZ1NsaWNlKHN0ciwgMCwgcG9zaXRpb24pO1xuICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0cmluZ1NsaWNlKHN0ciwgdGFpbFBvcyk7XG4gICAgICBjYXNlICc8JzpcbiAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbc3RyaW5nU2xpY2UoY2gsIDEsIC0xKV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2hhckF0KGNoLCAxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoYXJBdChjaCwgMSk7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICB9XG4gICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgfVxuICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmIChpc0NhbGxhYmxlKGV4ZWMpKSB7XG4gICAgdmFyIHJlc3VsdCA9IGNhbGwoZXhlYywgUiwgUyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkgYW5PYmplY3QocmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpID09PSAnUmVnRXhwJykgcmV0dXJuIGNhbGwocmVnZXhwRXhlYywgUiwgUyk7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBnZXRTdWJzdGl0dXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXN1YnN0aXR1dGlvbicpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFJFUExBQ0UgPSB3ZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcbnZhciBzdHJpbmdJbmRleE9mID0gdW5jdXJyeVRoaXMoJycuaW5kZXhPZik7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gSUUgPD0gMTEgcmVwbGFjZXMgJDAgd2l0aCB0aGUgd2hvbGUgbWF0Y2gsIGFzIGlmIGl0IHdhcyAkJlxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjAyNDY2Ni9nZXR0aW5nLWllLXRvLXJlcGxhY2UtYS1yZWdleC13aXRoLXRoZS1saXRlcmFsLXN0cmluZy0wXG52YXIgUkVQTEFDRV9LRUVQU18kMCA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvcHJlZmVyLWVzY2FwZS1yZXBsYWNlbWVudC1kb2xsYXItY2hhciAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gJ2EnLnJlcGxhY2UoLy4vLCAnJDAnKSA9PT0gJyQwJztcbn0pKCk7XG5cbi8vIFNhZmFyaSA8PSAxMy4wLjMoPykgc3Vic3RpdHV0ZXMgbnRoIGNhcHR1cmUgd2hlcmUgbj5tIHdpdGggYW4gZW1wdHkgc3RyaW5nXG52YXIgUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPSAoZnVuY3Rpb24gKCkge1xuICBpZiAoLy4vW1JFUExBQ0VdKSB7XG4gICAgcmV0dXJuIC8uL1tSRVBMQUNFXSgnYScsICckMCcpID09PSAnJztcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59KSgpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tdXNlbGVzcy1kb2xsYXItcmVwbGFjZW1lbnRzIC0tIGZhbHNlIHBvc2l0aXZlXG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygncmVwbGFjZScsIGZ1bmN0aW9uIChfLCBuYXRpdmVSZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIFVOU0FGRV9TVUJTVElUVVRFID0gUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPyAnJCcgOiAnJDAnO1xuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGxhY2VcbiAgICBmdW5jdGlvbiByZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciByZXBsYWNlciA9IGlzTnVsbE9yVW5kZWZpbmVkKHNlYXJjaFZhbHVlKSA/IHVuZGVmaW5lZCA6IGdldE1ldGhvZChzZWFyY2hWYWx1ZSwgUkVQTEFDRSk7XG4gICAgICByZXR1cm4gcmVwbGFjZXJcbiAgICAgICAgPyBjYWxsKHJlcGxhY2VyLCBzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6IGNhbGwobmF0aXZlUmVwbGFjZSwgdG9TdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChzdHJpbmcsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QodGhpcyk7XG4gICAgICB2YXIgUyA9IHRvU3RyaW5nKHN0cmluZyk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PSAnc3RyaW5nJyAmJlxuICAgICAgICBzdHJpbmdJbmRleE9mKHJlcGxhY2VWYWx1ZSwgVU5TQUZFX1NVQlNUSVRVVEUpID09PSAtMSAmJlxuICAgICAgICBzdHJpbmdJbmRleE9mKHJlcGxhY2VWYWx1ZSwgJyQ8JykgPT09IC0xXG4gICAgICApIHtcbiAgICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVSZXBsYWNlLCByeCwgUywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgZnVuY3Rpb25hbFJlcGxhY2UgPSBpc0NhbGxhYmxlKHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSB0b1N0cmluZyhyZXBsYWNlVmFsdWUpO1xuXG4gICAgICB2YXIgZ2xvYmFsID0gcnguZ2xvYmFsO1xuICAgICAgdmFyIGZ1bGxVbmljb2RlO1xuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuXG4gICAgICAgIHB1c2gocmVzdWx0cywgcmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuXG4gICAgICAgIHZhciBtYXRjaFN0ciA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcblxuICAgICAgICB2YXIgbWF0Y2hlZCA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyT3JJbmZpbml0eShyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgdmFyIHJlcGxhY2VtZW50O1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIHB1c2goY2FwdHVyZXMsIG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IGNvbmNhdChbbWF0Y2hlZF0sIGNhcHR1cmVzLCBwb3NpdGlvbiwgUyk7XG4gICAgICAgICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkgcHVzaChyZXBsYWNlckFyZ3MsIG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gdG9TdHJpbmcoYXBwbHkocmVwbGFjZVZhbHVlLCB1bmRlZmluZWQsIHJlcGxhY2VyQXJncykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIFMsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRSZXN1bHQgKz0gc3RyaW5nU2xpY2UoUywgbmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIHN0cmluZ1NsaWNlKFMsIG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xufSwgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTIHx8ICFSRVBMQUNFX0tFRVBTXyQwIHx8IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFKTtcbiIsICIvLyDlpoLmnpzkvb/nlKgganN4LWRvbe+8jOWImeWPlua2iOazqOmHiuS7peS4i+ihjCAvIFRvIFVzZSBqc3gtZG9tLCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lXG5leHBvcnQgKiBmcm9tICdqc3gtZG9tJztcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWVcbn1cbmZ1bmN0aW9uIGlzQm9vbGVhbih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09IFwiYm9vbGVhblwiXG59XG5mdW5jdGlvbiBpc0VsZW1lbnQodmFsKSB7XG4gIHJldHVybiB2YWwgJiYgdHlwZW9mIHZhbC5ub2RlVHlwZSA9PT0gXCJudW1iZXJcIlxufVxuZnVuY3Rpb24gaXNTdHJpbmcodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiXG59XG5mdW5jdGlvbiBpc051bWJlcih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCJcbn1cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIiA/IHZhbCAhPT0gbnVsbCA6IGlzRnVuY3Rpb24odmFsKVxufVxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09IFwiZnVuY3Rpb25cIlxufVxuZnVuY3Rpb24gaXNDb21wb25lbnRDbGFzcyhDb21wb25lbnQpIHtcbiAgY29uc3QgeyBwcm90b3R5cGUgfSA9IENvbXBvbmVudFxuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KVxufVxuZnVuY3Rpb24gaXNBcnJheUxpa2Uob2JqKSB7XG4gIHJldHVybiBpc09iamVjdChvYmopICYmIHR5cGVvZiBvYmoubGVuZ3RoID09PSBcIm51bWJlclwiICYmIHR5cGVvZiBvYmoubm9kZVR5cGUgIT09IFwibnVtYmVyXCJcbn1cbmZ1bmN0aW9uIGZvckVhY2godmFsdWUsIGZuKSB7XG4gIGlmICghdmFsdWUpIHJldHVyblxuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKHZhbHVlKSkge1xuICAgIGZuKHZhbHVlW2tleV0sIGtleSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVSZWYoKSB7XG4gIHJldHVybiBPYmplY3Quc2VhbCh7XG4gICAgY3VycmVudDogbnVsbCxcbiAgfSlcbn1cbmZ1bmN0aW9uIGlzUmVmKG1heWJlUmVmKSB7XG4gIHJldHVybiBpc09iamVjdChtYXliZVJlZikgJiYgXCJjdXJyZW50XCIgaW4gbWF5YmVSZWZcbn1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBvblxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvYjg3YWFiZGZlMWI3NDYxZTczMzFhYmIzNjAxZDllNmJiMjc1NDRiYy9MSUNFTlNFXG4gKi9cblxuLyoqXG4gKiBDU1MgcHJvcGVydGllcyB3aGljaCBhY2NlcHQgbnVtYmVycyBidXQgYXJlIG5vdCBpbiB1bml0cyBvZiBcInB4XCIuXG4gKi9cbmNvbnN0IGlzVW5pdGxlc3NOdW1iZXIgPSB7XG4gIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAwLFxuICBib3JkZXJJbWFnZU91dHNldDogMCxcbiAgYm9yZGVySW1hZ2VTbGljZTogMCxcbiAgYm9yZGVySW1hZ2VXaWR0aDogMCxcbiAgYm94RmxleDogMCxcbiAgYm94RmxleEdyb3VwOiAwLFxuICBib3hPcmRpbmFsR3JvdXA6IDAsXG4gIGNvbHVtbkNvdW50OiAwLFxuICBjb2x1bW5zOiAwLFxuICBmbGV4OiAwLFxuICBmbGV4R3JvdzogMCxcbiAgZmxleFBvc2l0aXZlOiAwLFxuICBmbGV4U2hyaW5rOiAwLFxuICBmbGV4TmVnYXRpdmU6IDAsXG4gIGZsZXhPcmRlcjogMCxcbiAgZ3JpZEFyZWE6IDAsXG4gIGdyaWRSb3c6IDAsXG4gIGdyaWRSb3dFbmQ6IDAsXG4gIGdyaWRSb3dTcGFuOiAwLFxuICBncmlkUm93U3RhcnQ6IDAsXG4gIGdyaWRDb2x1bW46IDAsXG4gIGdyaWRDb2x1bW5FbmQ6IDAsXG4gIGdyaWRDb2x1bW5TcGFuOiAwLFxuICBncmlkQ29sdW1uU3RhcnQ6IDAsXG4gIGZvbnRXZWlnaHQ6IDAsXG4gIGxpbmVDbGFtcDogMCxcbiAgbGluZUhlaWdodDogMCxcbiAgb3BhY2l0eTogMCxcbiAgb3JkZXI6IDAsXG4gIG9ycGhhbnM6IDAsXG4gIHRhYlNpemU6IDAsXG4gIHdpZG93czogMCxcbiAgekluZGV4OiAwLFxuICB6b29tOiAwLFxuICAvLyBTVkctcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIGZpbGxPcGFjaXR5OiAwLFxuICBmbG9vZE9wYWNpdHk6IDAsXG4gIHN0b3BPcGFjaXR5OiAwLFxuICBzdHJva2VEYXNoYXJyYXk6IDAsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IDAsXG4gIHN0cm9rZU1pdGVybGltaXQ6IDAsXG4gIHN0cm9rZU9wYWNpdHk6IDAsXG4gIHN0cm9rZVdpZHRoOiAwLFxufVxuXG4vKipcbiAqIEBwYXJhbSBwcmVmaXggdmVuZG9yLXNwZWNpZmljIHByZWZpeCwgZWc6IFdlYmtpdFxuICogQHBhcmFtIGtleSBzdHlsZSBuYW1lLCBlZzogdHJhbnNpdGlvbkR1cmF0aW9uXG4gKiBAcmV0dXJuIHN0eWxlIG5hbWUgcHJlZml4ZWQgd2l0aCBgcHJlZml4YCwgcHJvcGVybHkgY2FtZWxDYXNlZCwgZWc6XG4gKiBXZWJraXRUcmFuc2l0aW9uRHVyYXRpb25cbiAqL1xuZnVuY3Rpb24gcHJlZml4S2V5KHByZWZpeCwga2V5KSB7XG4gIHJldHVybiBwcmVmaXggKyBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc3Vic3RyaW5nKDEpXG59XG5cbi8qKlxuICogU3VwcG9ydCBzdHlsZSBuYW1lcyB0aGF0IG1heSBjb21lIHBhc3NlZCBpbiBwcmVmaXhlZCBieSBhZGRpbmcgcGVybXV0YXRpb25zXG4gKiBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cbmNvbnN0IHByZWZpeGVzID0gW1wiV2Via2l0XCIsIFwibXNcIiwgXCJNb3pcIiwgXCJPXCJdXG4vLyBVc2luZyBPYmplY3Qua2V5cyBoZXJlLCBvciBlbHNlIHRoZSB2YW5pbGxhIGZvci1pbiBsb29wIG1ha2VzIElFOCBnbyBpbnRvIGFuXG4vLyBpbmZpbml0ZSBsb29wLCBiZWNhdXNlIGl0IGl0ZXJhdGVzIG92ZXIgdGhlIG5ld2x5IGFkZGVkIHByb3BzIHRvby5cbmtleXMoaXNVbml0bGVzc051bWJlcikuZm9yRWFjaChwcm9wID0+IHtcbiAgcHJlZml4ZXMuZm9yRWFjaChwcmVmaXggPT4ge1xuICAgIGlzVW5pdGxlc3NOdW1iZXJbcHJlZml4S2V5KHByZWZpeCwgcHJvcCldID0gMCAvLyBpc1VuaXRsZXNzTnVtYmVyW3Byb3BdXG4gIH0pXG59KVxuXG5jb25zdCBqc3hEb21UeXBlID0gU3ltYm9sLmZvcihcImpzeC1kb206dHlwZVwiKVxudmFyIEpzeERvbVR5cGUgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoSnN4RG9tVHlwZSkge1xuICBKc3hEb21UeXBlW1wiU2hhZG93Um9vdFwiXSA9IFwiU2hhZG93Um9vdFwiXG4gIHJldHVybiBKc3hEb21UeXBlXG59KShKc3hEb21UeXBlIHx8IHt9KVxuZnVuY3Rpb24gU2hhZG93Um9vdChfcmVmKSB7XG4gIGxldCB7IGNoaWxkcmVuLCByZWYsIC4uLmF0dHIgfSA9IF9yZWZcbiAgcmV0dXJuIHtcbiAgICBbanN4RG9tVHlwZV06IEpzeERvbVR5cGUuU2hhZG93Um9vdCxcbiAgICByZWYsXG4gICAgYXR0cixcbiAgICBjaGlsZHJlbixcbiAgfVxufVxuZnVuY3Rpb24gaXNTaGFkb3dSb290KGVsKSB7XG4gIHJldHVybiBlbCAhPSBudWxsICYmIGVsW2pzeERvbVR5cGVdID09PSBKc3hEb21UeXBlLlNoYWRvd1Jvb3Rcbn1cblxuY29uc3QgU1ZHTmFtZXNwYWNlID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG5jb25zdCBYTGlua05hbWVzcGFjZSA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXG5jb25zdCBYTUxOYW1lc3BhY2UgPSBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiXG5cbi8vIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvanN4LWluLWRlcHRoLmh0bWwjYm9vbGVhbnMtbnVsbC1hbmQtdW5kZWZpbmVkLWFyZS1pZ25vcmVkXG4vLyBFbXVsYXRlIEpTWCBFeHByZXNzaW9uIGxvZ2ljIHRvIGlnbm9yZSBjZXJ0YWluIHR5cGUgb2YgY2hpbGRyZW4gb3IgY2xhc3NOYW1lLlxuZnVuY3Rpb24gaXNWaXNpYmxlQ2hpbGQodmFsdWUpIHtcbiAgcmV0dXJuICFpc0Jvb2xlYW4odmFsdWUpICYmIHZhbHVlICE9IG51bGxcbn1cbmNvbnN0IERvbVRva2VuTGlzdCA9IHR5cGVvZiBET01Ub2tlbkxpc3QgIT09IFwidW5kZWZpbmVkXCIgPyBET01Ub2tlbkxpc3QgOiBmdW5jdGlvbiAoKSB7fVxuXG4vKipcbiAqIENvbnZlcnQgYSBgdmFsdWVgIHRvIGEgY2xhc3NOYW1lIHN0cmluZy5cbiAqIGB2YWx1ZWAgY2FuIGJlIGEgc3RyaW5nLCBhbiBhcnJheSBvciBhIGBEaWN0aW9uYXJ5PGJvb2xlYW4+YC5cbiAqL1xuZnVuY3Rpb24gY2xhc3NOYW1lKHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5tYXAoY2xhc3NOYW1lKS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIilcbiAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERvbVRva2VuTGlzdCkge1xuICAgIHJldHVybiBcIlwiICsgdmFsdWVcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4ga2V5cyh2YWx1ZSlcbiAgICAgIC5maWx0ZXIoayA9PiB2YWx1ZVtrXSlcbiAgICAgIC5qb2luKFwiIFwiKVxuICB9IGVsc2UgaWYgKGlzVmlzaWJsZUNoaWxkKHZhbHVlKSkge1xuICAgIHJldHVybiBcIlwiICsgdmFsdWVcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCJcIlxuICB9XG59XG5jb25zdCBzdmcgPSB7XG4gIGFuaW1hdGU6IDAsXG4gIGNpcmNsZTogMCxcbiAgY2xpcFBhdGg6IDAsXG4gIGRlZnM6IDAsXG4gIGRlc2M6IDAsXG4gIGVsbGlwc2U6IDAsXG4gIGZlQmxlbmQ6IDAsXG4gIGZlQ29sb3JNYXRyaXg6IDAsXG4gIGZlQ29tcG9uZW50VHJhbnNmZXI6IDAsXG4gIGZlQ29tcG9zaXRlOiAwLFxuICBmZUNvbnZvbHZlTWF0cml4OiAwLFxuICBmZURpZmZ1c2VMaWdodGluZzogMCxcbiAgZmVEaXNwbGFjZW1lbnRNYXA6IDAsXG4gIGZlRGlzdGFudExpZ2h0OiAwLFxuICBmZUZsb29kOiAwLFxuICBmZUZ1bmNBOiAwLFxuICBmZUZ1bmNCOiAwLFxuICBmZUZ1bmNHOiAwLFxuICBmZUZ1bmNSOiAwLFxuICBmZUdhdXNzaWFuQmx1cjogMCxcbiAgZmVJbWFnZTogMCxcbiAgZmVNZXJnZTogMCxcbiAgZmVNZXJnZU5vZGU6IDAsXG4gIGZlTW9ycGhvbG9neTogMCxcbiAgZmVPZmZzZXQ6IDAsXG4gIGZlUG9pbnRMaWdodDogMCxcbiAgZmVTcGVjdWxhckxpZ2h0aW5nOiAwLFxuICBmZVNwb3RMaWdodDogMCxcbiAgZmVUaWxlOiAwLFxuICBmZVR1cmJ1bGVuY2U6IDAsXG4gIGZpbHRlcjogMCxcbiAgZm9yZWlnbk9iamVjdDogMCxcbiAgZzogMCxcbiAgaW1hZ2U6IDAsXG4gIGxpbmU6IDAsXG4gIGxpbmVhckdyYWRpZW50OiAwLFxuICBtYXJrZXI6IDAsXG4gIG1hc2s6IDAsXG4gIG1ldGFkYXRhOiAwLFxuICBwYXRoOiAwLFxuICBwYXR0ZXJuOiAwLFxuICBwb2x5Z29uOiAwLFxuICBwb2x5bGluZTogMCxcbiAgcmFkaWFsR3JhZGllbnQ6IDAsXG4gIHJlY3Q6IDAsXG4gIHN0b3A6IDAsXG4gIHN2ZzogMCxcbiAgc3dpdGNoOiAwLFxuICBzeW1ib2w6IDAsXG4gIHRleHQ6IDAsXG4gIHRleHRQYXRoOiAwLFxuICB0c3BhbjogMCxcbiAgdXNlOiAwLFxuICB2aWV3OiAwLFxufVxuY29uc3Qgbm9uUHJlc2VudGF0aW9uU1ZHQXR0cmlidXRlcyA9XG4gIC9eKGEobGx8dHx1KXxiYXNlW0ZQXXxjKGFsfGxpcFBhdGhVfG9uKXxkaXxlZHxleHxmaWx0ZXJbUlVdfGcobHlwaFJ8cil8a2V8bChlbnxpbSl8bWEocmtlcltIVVddfHMpfG58cGF0fHByfHBvaW50W15lXXxyZVtebl18c1twdXldfHN0W15vcl18dGF8dGV4dEx8dml8eEN8eXx6KS9cbmZ1bmN0aW9uIGNyZWF0ZUZhY3RvcnkodGFnKSB7XG4gIHJldHVybiBjcmVhdGVFbGVtZW50LmJpbmQobnVsbCwgdGFnKVxufVxuZnVuY3Rpb24gRnJhZ21lbnQoYXR0cikge1xuICBjb25zdCBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKVxuICBhcHBlbmRDaGlsZChhdHRyLmNoaWxkcmVuLCBmcmFnbWVudClcbiAgcmV0dXJuIGZyYWdtZW50XG59XG5jbGFzcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wc1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbi8qIEBfX1BVUkVfXyAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29tcG9uZW50LnByb3RvdHlwZSwge1xuICBpc1JlYWN0Q29tcG9uZW50OiB7XG4gICAgdmFsdWU6IHRydWUsXG4gIH0sXG59KVxuZnVuY3Rpb24gaW5pdENvbXBvbmVudENsYXNzKENsYXNzLCBhdHRyLCBjaGlsZHJlbikge1xuICBhdHRyID0ge1xuICAgIC4uLmF0dHIsXG4gICAgY2hpbGRyZW4sXG4gIH1cbiAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQ2xhc3MoYXR0cilcbiAgcmV0dXJuIGluc3RhbmNlLnJlbmRlcigpXG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmZ1bmN0aW9uIGpzeCh0YWcsIF9yZWYpIHtcbiAgbGV0IHsgY2hpbGRyZW4sIC4uLmF0dHIgfSA9IF9yZWZcbiAgaWYgKCFhdHRyLm5hbWVzcGFjZVVSSSAmJiBzdmdbdGFnXSA9PT0gMCkge1xuICAgIGF0dHIgPSB7XG4gICAgICAuLi5hdHRyLFxuICAgICAgbmFtZXNwYWNlVVJJOiBTVkdOYW1lc3BhY2UsXG4gICAgfVxuICB9XG4gIGxldCBub2RlXG4gIGlmIChpc1N0cmluZyh0YWcpKSB7XG4gICAgbm9kZSA9IGF0dHIubmFtZXNwYWNlVVJJXG4gICAgICA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhhdHRyLm5hbWVzcGFjZVVSSSwgdGFnKVxuICAgICAgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZylcbiAgICBhdHRyaWJ1dGVzKGF0dHIsIG5vZGUpXG4gICAgYXBwZW5kQ2hpbGQoY2hpbGRyZW4sIG5vZGUpXG5cbiAgICAvLyBTZWxlY3QgYG9wdGlvbmAgZWxlbWVudHMgaW4gYHNlbGVjdGBcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MU2VsZWN0RWxlbWVudCAmJiBhdHRyLnZhbHVlICE9IG51bGwpIHtcbiAgICAgIGlmIChhdHRyLm11bHRpcGxlID09PSB0cnVlICYmIEFycmF5LmlzQXJyYXkoYXR0ci52YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXR0ci52YWx1ZS5tYXAodmFsdWUgPT4gU3RyaW5nKHZhbHVlKSlcbiAgICAgICAgbm9kZVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKFwib3B0aW9uXCIpXG4gICAgICAgICAgLmZvckVhY2gob3B0aW9uID0+IChvcHRpb24uc2VsZWN0ZWQgPSB2YWx1ZXMuaW5jbHVkZXMob3B0aW9uLnZhbHVlKSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLnZhbHVlID0gYXR0ci52YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgICBhdHRhY2hSZWYoYXR0ci5yZWYsIG5vZGUpXG4gIH0gZWxzZSBpZiAoaXNGdW5jdGlvbih0YWcpKSB7XG4gICAgLy8gQ3VzdG9tIGVsZW1lbnRzLlxuICAgIGlmIChpc09iamVjdCh0YWcuZGVmYXVsdFByb3BzKSkge1xuICAgICAgYXR0ciA9IHtcbiAgICAgICAgLi4udGFnLmRlZmF1bHRQcm9wcyxcbiAgICAgICAgLi4uYXR0cixcbiAgICAgIH1cbiAgICB9XG4gICAgbm9kZSA9IGlzQ29tcG9uZW50Q2xhc3ModGFnKVxuICAgICAgPyBpbml0Q29tcG9uZW50Q2xhc3ModGFnLCBhdHRyLCBjaGlsZHJlbilcbiAgICAgIDogdGFnKHtcbiAgICAgICAgICAuLi5hdHRyLFxuICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICB9KVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgSlNYIGVsZW1lbnQgdHlwZTogJHt0YWd9YClcbiAgfVxuICByZXR1cm4gbm9kZVxufVxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWcsIGF0dHIpIHtcbiAgZm9yIChcbiAgICB2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGNoaWxkcmVuID0gbmV3IEFycmF5KF9sZW4gPiAyID8gX2xlbiAtIDIgOiAwKSwgX2tleTIgPSAyO1xuICAgIF9rZXkyIDwgX2xlbjtcbiAgICBfa2V5MisrXG4gICkge1xuICAgIGNoaWxkcmVuW19rZXkyIC0gMl0gPSBhcmd1bWVudHNbX2tleTJdXG4gIH1cbiAgaWYgKGlzU3RyaW5nKGF0dHIpIHx8IEFycmF5LmlzQXJyYXkoYXR0cikpIHtcbiAgICBjaGlsZHJlbi51bnNoaWZ0KGF0dHIpXG4gICAgYXR0ciA9IHt9XG4gIH1cbiAgYXR0ciA9IGF0dHIgfHwge31cbiAgaWYgKGF0dHIuY2hpbGRyZW4gIT0gbnVsbCAmJiAhY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgOyh7IGNoaWxkcmVuLCAuLi5hdHRyIH0gPSBhdHRyKVxuICB9XG4gIHJldHVybiBqc3goXG4gICAgdGFnLFxuICAgIHtcbiAgICAgIC4uLmF0dHIsXG4gICAgICBjaGlsZHJlbixcbiAgICB9LFxuICAgIGF0dHIua2V5XG4gIClcbn1cbmZ1bmN0aW9uIGF0dGFjaFJlZihyZWYsIG5vZGUpIHtcbiAgaWYgKGlzUmVmKHJlZikpIHtcbiAgICByZWYuY3VycmVudCA9IG5vZGVcbiAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHJlZikpIHtcbiAgICByZWYobm9kZSlcbiAgfVxufVxuZnVuY3Rpb24gYXBwZW5kQ2hpbGQoY2hpbGQsIG5vZGUpIHtcbiAgaWYgKGlzQXJyYXlMaWtlKGNoaWxkKSkge1xuICAgIGFwcGVuZENoaWxkcmVuKGNoaWxkLCBub2RlKVxuICB9IGVsc2UgaWYgKGlzU3RyaW5nKGNoaWxkKSB8fCBpc051bWJlcihjaGlsZCkpIHtcbiAgICBhcHBlbmRDaGlsZFRvTm9kZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjaGlsZCksIG5vZGUpXG4gIH0gZWxzZSBpZiAoY2hpbGQgPT09IG51bGwpIHtcbiAgICBhcHBlbmRDaGlsZFRvTm9kZShkb2N1bWVudC5jcmVhdGVDb21tZW50KFwiXCIpLCBub2RlKVxuICB9IGVsc2UgaWYgKGlzRWxlbWVudChjaGlsZCkpIHtcbiAgICBhcHBlbmRDaGlsZFRvTm9kZShjaGlsZCwgbm9kZSlcbiAgfSBlbHNlIGlmIChpc1NoYWRvd1Jvb3QoY2hpbGQpKSB7XG4gICAgY29uc3Qgc2hhZG93Um9vdCA9IG5vZGUuYXR0YWNoU2hhZG93KGNoaWxkLmF0dHIpXG4gICAgYXBwZW5kQ2hpbGQoY2hpbGQuY2hpbGRyZW4sIHNoYWRvd1Jvb3QpXG4gICAgYXR0YWNoUmVmKGNoaWxkLnJlZiwgc2hhZG93Um9vdClcbiAgfVxufVxuZnVuY3Rpb24gYXBwZW5kQ2hpbGRyZW4oY2hpbGRyZW4sIG5vZGUpIHtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBbLi4uY2hpbGRyZW5dKSB7XG4gICAgYXBwZW5kQ2hpbGQoY2hpbGQsIG5vZGUpXG4gIH1cbiAgcmV0dXJuIG5vZGVcbn1cbmZ1bmN0aW9uIGFwcGVuZENoaWxkVG9Ob2RlKGNoaWxkLCBub2RlKSB7XG4gIGlmIChub2RlIGluc3RhbmNlb2Ygd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQpIHtcbiAgICBub2RlLmNvbnRlbnQuYXBwZW5kQ2hpbGQoY2hpbGQpXG4gIH0gZWxzZSB7XG4gICAgbm9kZS5hcHBlbmRDaGlsZChjaGlsZClcbiAgfVxufVxuZnVuY3Rpb24gbm9ybWFsaXplQXR0cmlidXRlKHMsIHNlcGFyYXRvcikge1xuICByZXR1cm4gcy5yZXBsYWNlKC9bQS1aXS9nLCBtYXRjaCA9PiBzZXBhcmF0b3IgKyBtYXRjaC50b0xvd2VyQ2FzZSgpKVxufVxuZnVuY3Rpb24gc3R5bGUobm9kZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09IGZhbHNlKTtcbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICB2YWx1ZS5mb3JFYWNoKHYgPT4gc3R5bGUobm9kZSwgdikpXG4gIH0gZWxzZSBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCB2YWx1ZSlcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICBmb3JFYWNoKHZhbHVlLCAodmFsLCBrZXkpID0+IHtcbiAgICAgIGlmIChrZXkuaW5kZXhPZihcIi1cIikgPT09IDApIHtcbiAgICAgICAgLy8gQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzICh2YXJpYWJsZXMpIHN0YXJ0IHdpdGggYC1gIChlLmcuIGAtLW15LXZhcmlhYmxlYClcbiAgICAgICAgLy8gYW5kIG11c3QgYmUgYXNzaWduZWQgdmlhIGBzZXRQcm9wZXJ0eWAuXG4gICAgICAgIG5vZGUuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YWwpXG4gICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKHZhbCkgJiYgaXNVbml0bGVzc051bWJlcltrZXldICE9PSAwKSB7XG4gICAgICAgIG5vZGUuc3R5bGVba2V5XSA9IHZhbCArIFwicHhcIlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5zdHlsZVtrZXldID0gdmFsXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuZnVuY3Rpb24gYXR0cmlidXRlKGtleSwgdmFsdWUsIG5vZGUpIHtcbiAgc3dpdGNoIChrZXkpIHtcbiAgICBjYXNlIFwieGxpbmtBY3R1YXRlXCI6XG4gICAgY2FzZSBcInhsaW5rQXJjcm9sZVwiOlxuICAgIGNhc2UgXCJ4bGlua0hyZWZcIjpcbiAgICBjYXNlIFwieGxpbmtSb2xlXCI6XG4gICAgY2FzZSBcInhsaW5rU2hvd1wiOlxuICAgIGNhc2UgXCJ4bGlua1RpdGxlXCI6XG4gICAgY2FzZSBcInhsaW5rVHlwZVwiOlxuICAgICAgYXR0ck5TKG5vZGUsIFhMaW5rTmFtZXNwYWNlLCBub3JtYWxpemVBdHRyaWJ1dGUoa2V5LCBcIjpcIiksIHZhbHVlKVxuICAgICAgcmV0dXJuXG4gICAgY2FzZSBcInhtbG5zWGxpbmtcIjpcbiAgICAgIGF0dHIobm9kZSwgbm9ybWFsaXplQXR0cmlidXRlKGtleSwgXCI6XCIpLCB2YWx1ZSlcbiAgICAgIHJldHVyblxuICAgIGNhc2UgXCJ4bWxCYXNlXCI6XG4gICAgY2FzZSBcInhtbExhbmdcIjpcbiAgICBjYXNlIFwieG1sU3BhY2VcIjpcbiAgICAgIGF0dHJOUyhub2RlLCBYTUxOYW1lc3BhY2UsIG5vcm1hbGl6ZUF0dHJpYnV0ZShrZXksIFwiOlwiKSwgdmFsdWUpXG4gICAgICByZXR1cm5cbiAgfVxuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2UgXCJodG1sRm9yXCI6XG4gICAgICBhdHRyKG5vZGUsIFwiZm9yXCIsIHZhbHVlKVxuICAgICAgcmV0dXJuXG4gICAgY2FzZSBcImRhdGFzZXRcIjpcbiAgICAgIGZvckVhY2godmFsdWUsIChkYXRhVmFsdWUsIGRhdGFLZXkpID0+IHtcbiAgICAgICAgaWYgKGRhdGFWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgbm9kZS5kYXRhc2V0W2RhdGFLZXldID0gZGF0YVZhbHVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICBjYXNlIFwiaW5uZXJIVE1MXCI6XG4gICAgY2FzZSBcImlubmVyVGV4dFwiOlxuICAgIGNhc2UgXCJ0ZXh0Q29udGVudFwiOlxuICAgICAgaWYgKGlzVmlzaWJsZUNoaWxkKHZhbHVlKSkge1xuICAgICAgICBub2RlW2tleV0gPSB2YWx1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIG5vZGUuaW5uZXJIVE1MID0gdmFsdWVbXCJfX2h0bWxcIl1cbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgbm9kZSBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MU2VsZWN0RWxlbWVudCkge1xuICAgICAgICAvLyBza2lwIG51bGxpc2ggdmFsdWVzXG4gICAgICAgIC8vIGZvciBgPHNlbGVjdD5gIGFwcGx5IHZhbHVlIGFmdGVyIGFwcGVuZGluZyBgPG9wdGlvbj5gIGVsZW1lbnRzXG4gICAgICAgIHJldHVyblxuICAgICAgfSBlbHNlIGlmIChub2RlIGluc3RhbmNlb2Ygd2luZG93LkhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcbiAgICAgICAgbm9kZS52YWx1ZSA9IHZhbHVlXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLy8gdXNlIGF0dHJpYnV0ZSBmb3Igb3RoZXIgZWxlbWVudHNcbiAgICAgIGJyZWFrXG4gICAgY2FzZSBcInNwZWxsQ2hlY2tcIjpcbiAgICAgIG5vZGUuc3BlbGxjaGVjayA9IHZhbHVlXG4gICAgICByZXR1cm5cbiAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICBjYXNlIFwiY2xhc3NOYW1lXCI6XG4gICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUobm9kZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF0dHIobm9kZSwgXCJjbGFzc1wiLCBjbGFzc05hbWUodmFsdWUpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgY2FzZSBcInJlZlwiOlxuICAgIGNhc2UgXCJuYW1lc3BhY2VVUklcIjpcbiAgICAgIHJldHVyblxuICAgIGNhc2UgXCJzdHlsZVwiOlxuICAgICAgc3R5bGUobm9kZSwgdmFsdWUpXG4gICAgICByZXR1cm5cbiAgICBjYXNlIFwib25cIjpcbiAgICBjYXNlIFwib25DYXB0dXJlXCI6XG4gICAgICBmb3JFYWNoKHZhbHVlLCAoZXZlbnRIYW5kbGVyLCBldmVudE5hbWUpID0+IHtcbiAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZXZlbnRIYW5kbGVyLCBrZXkgPT09IFwib25DYXB0dXJlXCIpXG4gICAgICB9KVxuICAgICAgcmV0dXJuXG4gICAgLy8gZmFsbHRocm91Z2hcbiAgfVxuXG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIGlmIChrZXlbMF0gPT09IFwib1wiICYmIGtleVsxXSA9PT0gXCJuXCIpIHtcbiAgICAgIGxldCBhdHRyaWJ1dGUgPSBrZXkudG9Mb3dlckNhc2UoKVxuICAgICAgY29uc3QgdXNlQ2FwdHVyZSA9IGF0dHJpYnV0ZS5lbmRzV2l0aChcImNhcHR1cmVcIilcbiAgICAgIGlmIChhdHRyaWJ1dGUgPT09IFwib25kb3VibGVjbGlja1wiKSB7XG4gICAgICAgIGF0dHJpYnV0ZSA9IFwib25kYmxjbGlja1wiXG4gICAgICB9IGVsc2UgaWYgKHVzZUNhcHR1cmUgJiYgYXR0cmlidXRlID09PSBcIm9uZG91YmxlY2xpY2tjYXB0dXJlXCIpIHtcbiAgICAgICAgYXR0cmlidXRlID0gXCJvbmRibGNsaWNrY2FwdHVyZVwiXG4gICAgICB9XG4gICAgICBpZiAoIXVzZUNhcHR1cmUgJiYgbm9kZVthdHRyaWJ1dGVdID09PSBudWxsKSB7XG4gICAgICAgIC8vIHVzZSBwcm9wZXJ0eSB3aGVuIHBvc3NpYmxlIFBSICMxN1xuICAgICAgICBub2RlW2F0dHJpYnV0ZV0gPSB2YWx1ZVxuICAgICAgfSBlbHNlIGlmICh1c2VDYXB0dXJlKSB7XG4gICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihhdHRyaWJ1dGUuc3Vic3RyaW5nKDIsIGF0dHJpYnV0ZS5sZW5ndGggLSA3KSwgdmFsdWUsIHRydWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgZXZlbnROYW1lXG4gICAgICAgIGlmIChhdHRyaWJ1dGUgaW4gd2luZG93KSB7XG4gICAgICAgICAgLy8gc3RhbmRhcmQgZXZlbnRcbiAgICAgICAgICAvLyB0aGUgSlNYIGF0dHJpYnV0ZSBjb3VsZCBoYXZlIGJlZW4gXCJvbk1vdXNlT3ZlclwiIGFuZCB0aGVcbiAgICAgICAgICAvLyBtZW1iZXIgbmFtZSBcIm9ubW91c2VvdmVyXCIgaXMgb24gdGhlIHdpbmRvdydzIHByb3RvdHlwZVxuICAgICAgICAgIC8vIHNvIGxldCdzIGFkZCB0aGUgbGlzdGVuZXIgXCJtb3VzZW92ZXJcIiwgd2hpY2ggaXMgYWxsIGxvd2VyY2FzZWRcbiAgICAgICAgICBjb25zdCBzdGFuZGFyZEV2ZW50TmFtZSA9IGF0dHJpYnV0ZS5zdWJzdHJpbmcoMilcbiAgICAgICAgICBldmVudE5hbWUgPSBzdGFuZGFyZEV2ZW50TmFtZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGN1c3RvbSBldmVudFxuICAgICAgICAgIC8vIHRoZSBKU1ggYXR0cmlidXRlIGNvdWxkIGhhdmUgYmVlbiBcIm9uTXlDdXN0b21FdmVudFwiXG4gICAgICAgICAgLy8gc28gbGV0J3MgdHJpbSBvZmYgdGhlIFwib25cIiBwcmVmaXggYW5kIGxvd2VyY2FzZSB0aGUgZmlyc3QgY2hhcmFjdGVyXG4gICAgICAgICAgLy8gYW5kIGFkZCB0aGUgbGlzdGVuZXIgXCJteUN1c3RvbUV2ZW50XCJcbiAgICAgICAgICAvLyBleGNlcHQgZm9yIHRoZSBmaXJzdCBjaGFyYWN0ZXIsIHdlIGtlZXAgdGhlIGV2ZW50IG5hbWUgY2FzZVxuICAgICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50TmFtZSA9IGF0dHJpYnV0ZVsyXSArIGtleS5zbGljZSgzKVxuICAgICAgICAgIGV2ZW50TmFtZSA9IGN1c3RvbUV2ZW50TmFtZVxuICAgICAgICB9XG4gICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICBub2RlW2tleV0gPSB2YWx1ZVxuICB9IGVsc2UgaWYgKHZhbHVlID09PSB0cnVlKSB7XG4gICAgYXR0cihub2RlLCBrZXksIFwiXCIpXG4gIH0gZWxzZSBpZiAodmFsdWUgIT09IGZhbHNlICYmIHZhbHVlICE9IG51bGwpIHtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQgJiYgIW5vblByZXNlbnRhdGlvblNWR0F0dHJpYnV0ZXMudGVzdChrZXkpKSB7XG4gICAgICBhdHRyKG5vZGUsIG5vcm1hbGl6ZUF0dHJpYnV0ZShrZXksIFwiLVwiKSwgdmFsdWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGF0dHIobm9kZSwga2V5LCB2YWx1ZSlcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGF0dHIobm9kZSwga2V5LCB2YWx1ZSkge1xuICBub2RlLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKVxufVxuZnVuY3Rpb24gYXR0ck5TKG5vZGUsIG5hbWVzcGFjZSwga2V5LCB2YWx1ZSkge1xuICBub2RlLnNldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZSwga2V5LCB2YWx1ZSlcbn1cbmZ1bmN0aW9uIGF0dHJpYnV0ZXMoYXR0ciwgbm9kZSkge1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKGF0dHIpKSB7XG4gICAgYXR0cmlidXRlKGtleSwgYXR0cltrZXldLCBub2RlKVxuICB9XG4gIHJldHVybiBub2RlXG59XG5cbmZ1bmN0aW9uIHVzZVRleHQoaW5pdGlhbFZhbHVlKSB7XG4gIGNvbnN0IHRleHQgPSBuZXcgVGV4dCgpXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0ZXh0LCBcInRvU3RyaW5nXCIsIHtcbiAgICB2YWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHRDb250ZW50XG4gICAgfSxcbiAgfSlcbiAgZnVuY3Rpb24gc2V0VGV4dCh2YWx1ZSkge1xuICAgIHRleHQudGV4dENvbnRlbnQgPSB2YWx1ZVxuICB9XG4gIGlmIChpbml0aWFsVmFsdWUgIT0gbnVsbCkge1xuICAgIHNldFRleHQoaW5pdGlhbFZhbHVlKVxuICB9XG4gIHJldHVybiBbdGV4dCwgc2V0VGV4dF1cbn1cbmZ1bmN0aW9uIHVzZUNsYXNzTGlzdChpbml0aWFsVmFsdWUpIHtcbiAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICBpZiAoaW5pdGlhbFZhbHVlICE9IG51bGwpIHtcbiAgICBkaXYuY2xhc3NOYW1lID0gY2xhc3NOYW1lKGluaXRpYWxWYWx1ZSlcbiAgfVxuICBsZXQgbGlzdCA9IGRpdi5jbGFzc0xpc3RcbiAgZnVuY3Rpb24gQ2xhc3NMaXN0KHZhbHVlKSB7XG4gICAgdmFsdWUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgbGlzdC52YWx1ZSlcbiAgICBsaXN0ID0gdmFsdWUuY2xhc3NMaXN0XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoXG4gICAgQ2xhc3NMaXN0LFxuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHtcbiAgICAgIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gbGlzdC5sZW5ndGhcbiAgICAgIH0sXG4gICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiBsaXN0LnZhbHVlXG4gICAgICB9LFxuICAgICAgYWRkKCkge1xuICAgICAgICBsaXN0LmFkZCguLi5hcmd1bWVudHMpXG4gICAgICB9LFxuICAgICAgcmVtb3ZlKCkge1xuICAgICAgICBsaXN0LnJlbW92ZSguLi5hcmd1bWVudHMpXG4gICAgICB9LFxuICAgICAgdG9nZ2xlKHRva2VuLCBmb3JjZSkge1xuICAgICAgICBsaXN0LnRvZ2dsZSh0b2tlbiwgZm9yY2UpXG4gICAgICB9LFxuICAgICAgY29udGFpbnModG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIGxpc3QuY29udGFpbnModG9rZW4pXG4gICAgICB9LFxuICAgIH0pXG4gIClcbiAgcmV0dXJuIENsYXNzTGlzdFxufVxuXG5mdW5jdGlvbiB1c2VNZW1vKGZhY3RvcnkpIHtcbiAgcmV0dXJuIGZhY3RvcnkoKVxufVxuZnVuY3Rpb24gZm9yd2FyZFJlZihyZW5kZXIpIHtcbiAgcmV0dXJuIF9yZWYgPT4ge1xuICAgIGxldCB7IHJlZiwgLi4ucHJvcHMgfSA9IF9yZWZcbiAgICByZXR1cm4gcmVuZGVyKHByb3BzLCByZWYgPz8gY3JlYXRlUmVmKCkpXG4gIH1cbn1cbmZ1bmN0aW9uIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBpbml0KSB7XG4gIGF0dGFjaFJlZihyZWYsIGluaXQoKSlcbn1cblxuY29uc3QgY2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpXG5jb25zdCBjcmVhdGVTdHlsZWRDb21wb25lbnQgPSBuYW1lID0+XG4gIGZ1bmN0aW9uIChsaXN0KSB7XG4gICAgZm9yIChcbiAgICAgIHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgaW50ZXJwb2xhdGlvbnMgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTtcbiAgICAgIF9rZXkgPCBfbGVuO1xuICAgICAgX2tleSsrXG4gICAgKSB7XG4gICAgICBpbnRlcnBvbGF0aW9uc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV1cbiAgICB9XG4gICAgcmV0dXJuIF9yZWYgPT4ge1xuICAgICAgbGV0IHsgc3R5bGUsIC4uLnByb3BzIH0gPSBfcmVmXG4gICAgICBjb25zdCBsYXN0SW5kZXggPSBsaXN0Lmxlbmd0aCAtIDFcbiAgICAgIGNvbnN0IGNzcyA9XG4gICAgICAgIGxpc3Quc2xpY2UoMCwgbGFzdEluZGV4KS5yZWR1Y2UoKHAsIHMsIGkpID0+IHAgKyBzICsgaW50ZXJwb2xhdGlvbnNbaV0ocHJvcHMpLCBcIlwiKSArXG4gICAgICAgIGxpc3RbbGFzdEluZGV4XVxuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQobmFtZSwge1xuICAgICAgICBzdHlsZTogW2Nzcywgc3R5bGVdLFxuICAgICAgICAuLi5wcm9wcyxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5jb25zdCBiYXNlU3R5bGVkID0gY3VzdG9tQ29tcG9uZW50ID0+IGNyZWF0ZVN0eWxlZENvbXBvbmVudChjdXN0b21Db21wb25lbnQpXG5jb25zdCBzdHlsZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFByb3h5KGJhc2VTdHlsZWQsIHtcbiAgZ2V0KF8sIG5hbWUpIHtcbiAgICByZXR1cm4gc2V0SWZBYnNlbnQoY2FjaGUsIG5hbWUsICgpID0+IGNyZWF0ZVN0eWxlZENvbXBvbmVudChuYW1lKSlcbiAgfSxcbn0pXG5mdW5jdGlvbiBzZXRJZkFic2VudChtYXAsIGtleSwgZ2V0VmFsdWUpIHtcbiAgaWYgKG1hcC5oYXMoa2V5KSkge1xuICAgIHJldHVybiBtYXAuZ2V0KGtleSlcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB2YWx1ZSA9IGdldFZhbHVlKGtleSlcbiAgICBtYXAuc2V0KGtleSwgdmFsdWUpXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cblxudmFyIGluZGV4ID0ge1xuICBDb21wb25lbnQsXG4gIFB1cmVDb21wb25lbnQ6IENvbXBvbmVudCxcbiAgY3JlYXRlRWxlbWVudCxcbiAgRnJhZ21lbnQsXG4gIFNoYWRvd1Jvb3QsXG59XG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIHJldHVybiBldmVudFxufVxuZnVuY3Rpb24gc3RvcFByb3BhZ2F0aW9uKGV2ZW50KSB7XG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIHJldHVybiBldmVudFxufVxuXG5leHBvcnQge1xuICBDb21wb25lbnQsXG4gIEZyYWdtZW50LFxuICBDb21wb25lbnQgYXMgUHVyZUNvbXBvbmVudCxcbiAgU1ZHTmFtZXNwYWNlLFxuICBTaGFkb3dSb290LFxuICBGcmFnbWVudCBhcyBTdHJpY3RNb2RlLFxuICBjbGFzc05hbWUsXG4gIGNyZWF0ZUVsZW1lbnQsXG4gIGNyZWF0ZUZhY3RvcnksXG4gIGNyZWF0ZVJlZixcbiAgaW5kZXggYXMgZGVmYXVsdCxcbiAgZm9yd2FyZFJlZixcbiAgY3JlYXRlRWxlbWVudCBhcyBoLFxuICBpc1JlZixcbiAganN4LFxuICBqc3ggYXMganN4cyxcbiAgaWRlbnRpdHkgYXMgbWVtbyxcbiAgcHJldmVudERlZmF1bHQsXG4gIHN0b3BQcm9wYWdhdGlvbixcbiAgc3R5bGVkLFxuICBpZGVudGl0eSBhcyB1c2VDYWxsYmFjayxcbiAgdXNlQ2xhc3NMaXN0LFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlLFxuICB1c2VNZW1vLFxuICBjcmVhdGVSZWYgYXMgdXNlUmVmLFxuICB1c2VUZXh0LFxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEseUZBQUFBLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUSxTQUFVLElBQUk7QUFDeEIsYUFBTyxNQUFNLEdBQUcsU0FBUyxRQUFRO0FBQUEsSUFDbkM7QUFHQSxJQUFBQSxRQUFPO0FBQUEsSUFFTCxNQUFNLE9BQU8sY0FBYyxZQUFZLFVBQVUsS0FDakQsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNO0FBQUEsSUFFekMsTUFBTSxPQUFPLFFBQVEsWUFBWSxJQUFJLEtBQ3JDLE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTSxLQUN6QyxNQUFNLE9BQU9ELFlBQVEsWUFBWUEsUUFBSTtBQUFBLElBRXBDLDJCQUFZO0FBQUUsYUFBTztBQUFBLElBQU0sRUFBRyxLQUFLLFNBQVMsYUFBYSxFQUFFO0FBQUE7QUFBQTs7O0FDZjlEO0FBQUEsdUZBQUFFLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUlDLFVBQVM7QUFFYixJQUFBRCxRQUFPLFVBQVVDO0FBQUE7QUFBQTs7O0FDSGpCO0FBQUEsd0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLElBQUFBLFFBQU8sVUFBVSxTQUFVLE1BQU07QUFDL0IsVUFBSTtBQUNGLGVBQU8sQ0FBQyxDQUFDLEtBQUs7QUFBQSxNQUNoQixTQUFTLE9BQU87QUFDZCxlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUNQQTtBQUFBLHVHQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFFBQVE7QUFFWixJQUFBQSxRQUFPLFVBQVUsQ0FBQyxNQUFN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ZUFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxZQUFJLElBQUUsR0FBRSxJQUFFLEdBQUUsSUFBRSxHQUFFQSxLQUFFLEdBQUUsSUFBRSxLQUFLLElBQUksSUFBRSxHQUFFLElBQUUsQ0FBQztBQUFFLFlBQUcsS0FBRyxLQUFHLEtBQUc7QUFBRSxhQUFFO0FBQUMsaUJBQUksSUFBRSxHQUFFLElBQUUsR0FBRTtBQUFJLGtCQUFHLEVBQUUsQ0FBQyxNQUFJLEVBQUUsQ0FBQztBQUFFLHNCQUFNO0FBQUUsZ0JBQUU7QUFBQSxVQUFDO0FBQUMsWUFBRyxLQUFHLEVBQUUsVUFBUSxLQUFHLEVBQUUsUUFBTztBQUFDLFVBQUFBLEtBQUUsRUFBRTtBQUFPLG1CQUFRLElBQUUsRUFBRSxRQUFPLElBQUUsR0FBRSxJQUFFLElBQUUsS0FBRyxHQUFHLEVBQUUsRUFBRUEsRUFBQyxHQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFBRztBQUFJLFVBQUFBLEtBQUU7QUFBQSxRQUFDO0FBQUMsYUFBRztBQUFFLGFBQUc7QUFBRSxhQUFHQTtBQUFFLGFBQUdBO0FBQUUsWUFBRyxLQUFHLElBQUUsS0FBRyxLQUFHLElBQUU7QUFBRSxpQkFBTSxDQUFDO0FBQUUsWUFBRyxLQUFHLEdBQUU7QUFBQyxlQUFJLElBQUUsRUFBRSxHQUFFLENBQUMsR0FBRSxJQUFFO0FBQUcsY0FBRSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUM7QUFBRSxpQkFBTSxDQUFDLENBQUM7QUFBQSxRQUFDO0FBQUMsWUFBRyxLQUFHO0FBQUUsaUJBQU0sQ0FBQyxFQUFFLEdBQUUsSUFBRSxDQUFDLENBQUM7QUFBRSxZQUFFO0FBQUUsWUFBRTtBQUFFLFlBQUUsSUFBRSxJQUFFO0FBQUUsUUFBQUEsS0FBRSxJQUFFLElBQUU7QUFBRSxZQUFFLE1BQU0sQ0FBQztBQUFFLGFBQUksSUFBRSxHQUFFLElBQUUsR0FBRTtBQUFJLFlBQUUsQ0FBQyxJQUFFLE1BQU1BLEVBQUMsR0FBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUU7QUFBRSxhQUFJLElBQUUsR0FBRSxJQUFFQSxJQUFFO0FBQUksWUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFO0FBQUUsYUFBSSxJQUFFLEdBQUUsSUFBRSxHQUFFO0FBQUksZUFBSSxJQUFFLEdBQUUsSUFBRUEsSUFBRTtBQUFJLGdCQUFHLEVBQUUsSUFBRSxJQUFFLENBQUMsTUFBSSxFQUFFLElBQUUsSUFBRSxDQUFDO0FBQUUsZ0JBQUUsQ0FBQyxFQUFFLENBQUMsSUFDMWYsRUFBRSxJQUFFLENBQUMsRUFBRSxJQUFFLENBQUM7QUFBQSxpQkFBTTtBQUFDLGtCQUFJLElBQUUsRUFBRSxJQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsR0FBRSxJQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUUsQ0FBQyxJQUFFO0FBQUUsZ0JBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxJQUFFLElBQUUsSUFBRTtBQUFBLFlBQUM7QUFBQyxZQUFFLEVBQUUsU0FBTztBQUFFLFlBQUUsRUFBRSxDQUFDLEVBQUUsU0FBTztBQUFFLFlBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUFFLGFBQUksSUFBRSxDQUFDLEdBQUUsSUFBRSxLQUFHLElBQUU7QUFBRyxlQUFHLEtBQUcsRUFBRSxLQUFLLENBQUMsR0FBRSxPQUFLLEtBQUcsS0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFFLFFBQU1BLEtBQUUsRUFBRSxJQUFFLENBQUMsRUFBRSxJQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsSUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxDQUFDLEVBQUUsSUFBRSxDQUFDLEdBQUUsSUFBRSxJQUFFLElBQUUsSUFBRUEsS0FBRSxJQUFFQSxLQUFFLElBQUVBLEtBQUUsSUFBRUEsSUFBRSxLQUFHQSxNQUFHQSxNQUFHLElBQUUsRUFBRSxLQUFLLENBQUMsS0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFFLElBQUVBLEtBQUcsS0FBSSxPQUFLLEtBQUcsS0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFFLEtBQUksSUFBRSxNQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUUsS0FBSSxJQUFFO0FBQUksVUFBRSxRQUFRO0FBQUUsWUFBRTtBQUFPLFlBQUUsQ0FBQztBQUFFLGFBQUksSUFBRSxHQUFFLElBQUUsRUFBRSxRQUFPO0FBQUksa0JBQU8sRUFBRSxDQUFDLEdBQUU7QUFBQSxZQUFDLEtBQUs7QUFBRSxvQkFBSSxFQUFFLEtBQUssQ0FBQyxHQUFFLElBQUU7QUFBUTtBQUFJO0FBQUk7QUFBQSxZQUFNLEtBQUs7QUFBRSxvQkFBSSxJQUFFLEVBQUUsR0FBRSxDQUFDO0FBQUcsZ0JBQUU7QUFBSTtBQUFJLGdCQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUFFO0FBQUk7QUFBQSxZQUFNLEtBQUs7QUFBRSxvQkFBSSxJQUFFLEVBQUUsR0FBRSxDQUFDO0FBQ25mLGdCQUFFO0FBQUk7QUFBSTtBQUFBLFlBQU0sS0FBSztBQUFFLG9CQUFJLElBQUUsRUFBRSxHQUFFLENBQUMsSUFBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFFO0FBQUEsVUFBRztBQUFDLGFBQUcsRUFBRSxLQUFLLENBQUM7QUFBRSxlQUFPO0FBQUEsTUFBQztBQUFDLGVBQVMsR0FBRyxHQUFFLEdBQUU7QUFBQyxlQUFPLE1BQUk7QUFBQSxNQUFDO0FBQUM7QUFBQyxVQUFJLEtBQUcsRUFBRSxFQUFDLGVBQWMsSUFBRyxrQkFBaUIsSUFBRyxxQkFBb0IsR0FBRSxDQUFDO0FBQUUsVUFBSSxLQUFHO0FBQUssZUFBUyxJQUFHO0FBQUMsZUFBSyxLQUFHLE9BQU8sWUFBVSxPQUFPLFNBQVM7QUFBYSxlQUFPLE1BQUk7QUFBQSxNQUFJO0FBQUMsZUFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFO0FBQUMsWUFBSSxJQUFFLEVBQUU7QUFBRSxlQUFPLEtBQUcsWUFBVSxLQUFHLEVBQUUsZ0JBQWdCLEdBQUUsQ0FBQyxHQUFFLFFBQUk7QUFBQSxNQUFFO0FBQUMsZUFBUyxHQUFHLEdBQUUsR0FBRTtBQUFDLFlBQUksSUFBRSxFQUFFO0FBQUUsYUFBRyxFQUFFLFlBQVksR0FBRSxDQUFDO0FBQUEsTUFBQztBQUFDLGVBQVMsR0FBRyxHQUFFLEdBQUU7QUFBQyxZQUFJLElBQUUsRUFBRTtBQUFFLFlBQUcsQ0FBQztBQUFFLGlCQUFNO0FBQUcsWUFBRyxFQUFFLGFBQVcsS0FBSyx3QkFBdUI7QUFBQyxjQUFFO0FBQUcsZUFBSSxJQUFFLEVBQUUsb0JBQW1CLEdBQUUsSUFBRSxFQUFFO0FBQW9CLGdCQUFFLEtBQUcsR0FBRyxHQUFFLENBQUM7QUFBRSxpQkFBTztBQUFBLFFBQUM7QUFBQyxlQUFPLEVBQUUsYUFBVyxLQUFLLGVBQWEsT0FBRyxFQUFFLG9CQUFvQixDQUFDLE1BQUk7QUFBQSxNQUFDO0FBQ25vQixlQUFTLEdBQUcsR0FBRTtBQUFDLFlBQUcsRUFBRSxhQUFXLEtBQUs7QUFBYSxpQkFBTTtBQUFHLFlBQUksSUFBRSxFQUFFO0FBQUUsZUFBTyxJQUFFLEVBQUUsb0JBQW9CLENBQUMsSUFBRTtBQUFBLE1BQUU7QUFBQyxlQUFTLEdBQUcsR0FBRSxHQUFFO0FBQUMsWUFBRztBQUFFLGVBQUksRUFBRSxhQUFXLEtBQUssZ0JBQWMsRUFBRSxDQUFDLEdBQUUsSUFBRSxFQUFFLG9CQUFtQixHQUFFLElBQUUsRUFBRTtBQUFvQixjQUFFLGFBQVcsS0FBSyxnQkFBYyxHQUFHLEdBQUUsQ0FBQztBQUFBLE1BQUM7QUFBQztBQUFDLFVBQUksS0FBRyxPQUFPLFVBQVMsS0FBRyxFQUFFLEdBQUUsS0FBRyxPQUFPLHlCQUF5QixLQUFLLFdBQVUsYUFBYSxHQUFFLEtBQUcsTUFBSSxHQUFHO0FBQUksZUFBUyxHQUFHLEdBQUU7QUFBQyxpQkFBUSxHQUFFLElBQUUsRUFBRTtBQUFvQixZQUFFLG9CQUFvQixDQUFDO0FBQUEsTUFBQztBQUFDLGVBQVMsR0FBRyxHQUFFO0FBQUMsWUFBSSxJQUFFLEVBQUUsQ0FBQztBQUFFLFlBQUcsS0FBRyxXQUFTLEVBQUU7QUFBRSxlQUFJLElBQUUsRUFBRSxvQkFBbUIsR0FBRSxJQUFFLEVBQUU7QUFBb0IsZUFBRyxDQUFDO0FBQUUsWUFBRyxJQUFFLEVBQUUsQ0FBQztBQUFFLFlBQUUsSUFBRTtBQUFBLE1BQU07QUFBQyxlQUFTLEdBQUcsR0FBRTtBQUFDLFlBQUksSUFBRTtBQUFFLFlBQUcsS0FBRyxXQUFTLEVBQUUsV0FBVTtBQUFDLGNBQUksSUFBRSxFQUFFLENBQUM7QUFBRSxXQUFDLElBQUUsS0FBRyxFQUFFLE9BQUssSUFBRSxFQUFFLFNBQU8sRUFBRSxDQUFDLElBQUUsR0FBRyxFQUFFLG1CQUFtQjtBQUFBLFFBQUU7QUFBQyxlQUFPO0FBQUEsTUFBQztBQUNwckIsZUFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFO0FBQUMsWUFBRyxLQUFHLElBQUUsRUFBRSxDQUFDLE1BQUksRUFBRSxHQUFFO0FBQUMsY0FBRztBQUFFLGdCQUFHLEVBQUUsYUFBVyxLQUFLO0FBQXVCLHVCQUFRLElBQUUsR0FBRSxJQUFFLEVBQUUsV0FBVyxRQUFPLElBQUUsR0FBRTtBQUFJLGtCQUFFLFdBQVcsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQUE7QUFBTyxnQkFBRSxXQUFXLEtBQUssQ0FBQztBQUFFLGVBQUcsRUFBRSxhQUFhLEtBQUssQ0FBQztBQUFFLGFBQUcsQ0FBQztBQUFBLFFBQUM7QUFBQSxNQUFDO0FBQy9OLFVBQUksS0FBRyxFQUFFO0FBQUEsUUFBQyxJQUFJLGFBQVk7QUFBQyxjQUFJLElBQUUsRUFBRSxJQUFJO0FBQUUsY0FBRSxLQUFHLEVBQUU7QUFBVyxpQkFBTyxXQUFTLElBQUUsSUFBRSxLQUFLO0FBQUEsUUFBeUI7QUFBQSxRQUFFLElBQUksYUFBWTtBQUFDLGNBQUksSUFBRSxFQUFFLElBQUk7QUFBRSxjQUFFLEtBQUcsRUFBRTtBQUFXLGlCQUFPLFdBQVMsSUFBRSxJQUFFLEtBQUs7QUFBQSxRQUF5QjtBQUFBLFFBQUUsSUFBSSxZQUFXO0FBQUMsY0FBSSxJQUFFLEVBQUUsSUFBSTtBQUFFLGNBQUUsS0FBRyxFQUFFO0FBQVUsaUJBQU8sV0FBUyxJQUFFLElBQUUsS0FBSztBQUFBLFFBQXdCO0FBQUEsUUFBRSxJQUFJLGNBQWE7QUFBQyxjQUFJLElBQUUsRUFBRSxJQUFJO0FBQUUsY0FBRSxLQUFHLEVBQUU7QUFBWSxpQkFBTyxXQUFTLElBQUUsSUFBRSxLQUFLO0FBQUEsUUFBMEI7QUFBQSxRQUFFLElBQUksa0JBQWlCO0FBQUMsY0FBSSxJQUFFLEVBQUUsSUFBSTtBQUFFLGNBQUUsS0FBRyxFQUFFO0FBQWdCLGlCQUFPLFdBQVMsSUFBRSxJQUFFLEtBQUs7QUFBQSxRQUE4QjtBQUFBLFFBQ2hoQixJQUFJLGFBQVk7QUFBQyxjQUFHLEVBQUUsSUFBSSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFLElBQUk7QUFBRSxnQkFBRyxDQUFDLEVBQUUsWUFBVztBQUFDLGdCQUFFLGFBQVcsQ0FBQztBQUFFLHVCQUFRLElBQUUsS0FBSyxvQkFBbUIsR0FBRSxJQUFFLEVBQUU7QUFBb0Isa0JBQUUsV0FBVyxLQUFLLENBQUM7QUFBQSxZQUFDO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUEsVUFBVTtBQUFNLGdCQUFFLEtBQUs7QUFBMEIsWUFBRSxPQUFLLFNBQVMsR0FBRTtBQUFDLG1CQUFPLEVBQUUsQ0FBQztBQUFBLFVBQUM7QUFBRSxpQkFBTztBQUFBLFFBQUM7QUFBQSxRQUFFLElBQUksZ0JBQWU7QUFBQyxjQUFJLElBQUUsRUFBRSxJQUFJO0FBQUUsV0FBQyxJQUFFLEtBQUcsRUFBRSxlQUFhLEVBQUUsYUFBVyxLQUFLLGlCQUFlLElBQUU7QUFBTSxpQkFBTyxXQUFTLElBQUUsSUFBRSxLQUFLO0FBQUEsUUFBNEI7QUFBQSxRQUFFLElBQUksY0FBYTtBQUFDLGNBQUcsTUFBSSxHQUFHLEtBQUssSUFBSTtBQUFFLG1CQUFNO0FBQUcsY0FBRyxLQUFLLFlBQVUsS0FBSztBQUF1QixtQkFBTTtBQUM1ZixjQUFJLElBQUUsS0FBSztBQUFjLGNBQUcsU0FBTyxLQUFHLEdBQUcsR0FBRSxJQUFJO0FBQUUsbUJBQU07QUFBRyxlQUFJLElBQUUsTUFBSyxLQUFHLEVBQUUsYUFBYTtBQUFXLGdCQUFFLEVBQUUsdUJBQXFCLEVBQUUsQ0FBQyxJQUFFLEVBQUUsT0FBSztBQUFRLGlCQUFNLENBQUMsRUFBRSxLQUFHLGFBQWE7QUFBQSxRQUFTO0FBQUEsUUFBRSxJQUFJLGNBQWE7QUFBQyxjQUFHLEVBQUUsSUFBSSxHQUFFO0FBQUMscUJBQVEsSUFBRSxDQUFDLEdBQUUsSUFBRSxLQUFLLG9CQUFtQixHQUFFLElBQUUsRUFBRTtBQUFvQixnQkFBRSxhQUFXLEtBQUssZ0JBQWMsRUFBRSxLQUFLLEVBQUUsbUJBQW1CO0FBQUUsbUJBQU8sRUFBRSxLQUFLLEVBQUU7QUFBQSxVQUFDO0FBQUMsaUJBQU8sS0FBSztBQUFBLFFBQTBCO0FBQUEsUUFBRSxJQUFJLFlBQVksR0FBRTtBQUFDLGNBQUcsZ0JBQWMsT0FBTyxLQUFHLFNBQU87QUFBRSxnQkFBRTtBQUFHLGtCQUFPLEtBQUssVUFBUztBQUFBLFlBQUMsS0FBSyxLQUFLO0FBQUEsWUFBYSxLQUFLLEtBQUs7QUFBdUIsa0JBQUcsQ0FBQyxFQUFFLElBQUksS0FDOWhCLEVBQUUsR0FBRTtBQUFDLG9CQUFJLElBQUUsS0FBSztBQUFtQixpQkFBQyxLQUFHLEtBQUsscUJBQW1CLEtBQUcsRUFBRSxZQUFVLEtBQUssY0FBWSxHQUFHLElBQUk7QUFBRSxxQkFBSyw2QkFBMkI7QUFBQSxjQUFDO0FBQU0sbUJBQUcsSUFBSSxJQUFHLElBQUUsRUFBRSxVQUFRLEtBQUssYUFBVyxLQUFLLGlCQUFlLEtBQUsscUJBQXFCLFNBQVMsZUFBZSxDQUFDLENBQUM7QUFBRTtBQUFBLFlBQU07QUFBUSxtQkFBSyxZQUFVO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQSxRQUFFLGNBQWEsU0FBUyxHQUFFLEdBQUU7QUFBQyxjQUFHLEtBQUssa0JBQWdCLE1BQUksRUFBRSxrQkFBZ0I7QUFBRyxtQkFBTyxLQUFLLDRCQUE0QixHQUFFLENBQUMsR0FBRTtBQUFFLGNBQUcsTUFBSTtBQUFLLGtCQUFNLE1BQU0sdUZBQXVGO0FBQzFnQixjQUFHLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUUsQ0FBQztBQUFFLGdCQUFFLEtBQUcsRUFBRTtBQUFXLGdCQUFHLFdBQVMsS0FBRyxNQUFJLFFBQU0sV0FBUyxLQUFHLEVBQUUsOEJBQTRCO0FBQUssb0JBQU0sTUFBTSwrSEFBK0g7QUFBQSxVQUFFO0FBQUMsY0FBRyxNQUFJO0FBQUUsbUJBQU87QUFBRSxhQUFHLE1BQUssQ0FBQztBQUFFLGNBQUksSUFBRSxDQUFDLEdBQUUsS0FBRyxJQUFFLEVBQUUsSUFBSSxLQUFHLEVBQUUsS0FBSyxZQUFVLEdBQUcsSUFBSSxHQUFFLElBQUUsRUFBRTtBQUFtQixjQUFHLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEdBQUcsQ0FBQztBQUFFLGdCQUFJQSxLQUFFLENBQUMsQ0FBQyxLQUFHLENBQUMsRUFBRSxDQUFDLEtBQUcsTUFBSSxXQUFTLEtBQUs7QUFBbUIsY0FBRSxvQkFBb0IsR0FBRUEsRUFBQztBQUFBLFVBQUM7QUFBQyxjQUFFO0FBQUcsY0FBSSxLQUFHLENBQUMsTUFBSSxXQUFTLEVBQUUsc0JBQW9CLFdBQ2xmLEtBQUssdUJBQXFCLENBQUMsR0FBRyxHQUFFLENBQUMsR0FBRSxJQUFFLEtBQUcsQ0FBQyxFQUFFLHVCQUFxQixDQUFDLE1BQUksRUFBRSxhQUFXLEtBQUs7QUFBd0IsY0FBRyxLQUFHO0FBQUUsa0JBQUksSUFBRSxLQUFHLEdBQUcsQ0FBQyxJQUFHLEdBQUcsR0FBRSxTQUFTLEdBQUU7QUFBQyxtQkFBRyxXQUFTLEVBQUUsYUFBVyxFQUFFLEtBQUssQ0FBQztBQUFFLGtCQUFHLEdBQUU7QUFBQyxvQkFBSSxJQUFFO0FBQUUsa0JBQUUsTUFBSSxLQUFHLEdBQUcsR0FBRSxDQUFDLElBQUcsSUFBRSxFQUFFLE1BQUksRUFBRSxVQUFVLEdBQUUsQ0FBQztBQUFBLGNBQUU7QUFBQSxZQUFDLENBQUM7QUFBRSxZQUFFLFdBQVMsR0FBRyxDQUFDLEdBQUUsRUFBRSxFQUFFLEtBQUssTUFBTSxFQUFFLEdBQUUsRUFBRSxDQUFDLENBQUMsR0FBRSxFQUFFLENBQUM7QUFBRyxZQUFFLElBQUksTUFBSSxHQUFHLEdBQUUsTUFBSyxDQUFDLEdBQUVBLEtBQUUsRUFBRSxJQUFJLEdBQUVBLEdBQUUsUUFBTSxJQUFFLE9BQUcsR0FBRyxJQUFJLEtBQUcsRUFBRUEsR0FBRSxJQUFJLEtBQUcsS0FBRyxXQUFTLEtBQUssY0FBWSxJQUFFLE9BQUcsRUFBRSxDQUFDO0FBQUksZUFBRyxJQUFFLEVBQUUsSUFBSSxJQUFFLEtBQUssT0FBSyxNQUFLLEtBQUcsSUFBRSxHQUFHLENBQUMsR0FBRSxFQUFFLDRCQUE0QixHQUFFLENBQUMsS0FBRyxFQUFFLDJCQUEyQixDQUFDLEtBQzdmLEVBQUUsa0JBQWdCLEtBQUssaUJBQWUsS0FBSyxjQUFjLFVBQVUsQ0FBQztBQUFFLGlCQUFPO0FBQUEsUUFBQztBQUFBLFFBQUUsYUFBWSxTQUFTLEdBQUU7QUFBQyxjQUFHLFFBQU0sS0FBRyxDQUFDLEVBQUUsQ0FBQztBQUFFLG1CQUFPLEtBQUsscUJBQXFCLENBQUM7QUFBQSxRQUFDO0FBQUEsUUFBRSxhQUFZLFNBQVMsR0FBRSxHQUFFO0FBQUMsY0FBRSxXQUFTLElBQUUsUUFBRztBQUFFLGNBQUcsS0FBSyxrQkFBZ0I7QUFBRyxtQkFBTyxLQUFLLDJCQUEyQixDQUFDO0FBQUUsY0FBRyxFQUFFLHVCQUFxQjtBQUFLLGtCQUFNLE1BQU0seURBQXVELENBQUM7QUFBRSxhQUFHLE1BQUssTUFBSyxDQUFDO0FBQUUsY0FBSSxJQUFFLEVBQUUsQ0FBQyxHQUFFLElBQUUsS0FBRyxHQUFHLEdBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxJQUFJO0FBQUUsY0FBRyxFQUFFLElBQUksTUFBSSxHQUFHLEdBQUUsSUFBSSxHQUFFLEdBQUcsSUFBSSxJQUFHO0FBQUMsY0FBRSxFQUFFLElBQUk7QUFBRSxnQkFBSSxJQUFFO0FBQUEsVUFBRTtBQUFDLGNBQUcsRUFBRSxLQUFHLENBQUMsS0FBRyxLQUFHLEVBQUUsYUFDOWUsS0FBSyxXQUFVO0FBQUMsZ0JBQUksSUFBRSxHQUFHLENBQUM7QUFBRSxlQUFHLEdBQUUsU0FBU0EsSUFBRTtBQUFDLGlCQUFHQSxJQUFFLENBQUM7QUFBQSxZQUFDLENBQUM7QUFBQSxVQUFDO0FBQUMsYUFBRyxDQUFDO0FBQUUsaUJBQUssSUFBRSxXQUFTLEtBQUssZUFBYSxJQUFFLFFBQUssS0FBRyxNQUFJLEVBQUUsQ0FBQztBQUFHLGdCQUFJLElBQUUsRUFBRSxJQUFJLElBQUUsS0FBSyxPQUFLLE9BQU0sQ0FBQyxFQUFFLFFBQU0sV0FBUyxFQUFFLGFBQVcsTUFBSSxFQUFFLDhCQUE0QixFQUFFLDJCQUEyQixDQUFDO0FBQUcsaUJBQU87QUFBQSxRQUFDO0FBQUEsUUFBRSxjQUFhLFNBQVMsR0FBRSxHQUFFO0FBQUMsZUFBSyxxQkFBcUIsR0FBRSxDQUFDO0FBQUUsZUFBSyxvQkFBb0IsQ0FBQztBQUFFLGlCQUFPO0FBQUEsUUFBQztBQUFBLFFBQUUsV0FBVSxTQUFTLEdBQUU7QUFBQyxjQUFHLGNBQVksS0FBSztBQUFVLG1CQUFPLEtBQUsseUJBQXlCLENBQUM7QUFBRSxjQUFJLElBQUUsS0FBSyx5QkFBeUIsS0FBRTtBQUFFLGNBQUcsS0FBRyxFQUFFLGFBQVcsS0FBSyxnQkFBZTtBQUFDLGdCQUN6Z0IsS0FBSztBQUFtQixxQkFBUSxHQUFFLEdBQUUsSUFBRSxFQUFFO0FBQW9CLGtCQUFFLEVBQUUsa0JBQWtCLElBQUUsR0FBRSxFQUFFLG9CQUFvQixDQUFDO0FBQUEsVUFBQztBQUFDLGlCQUFPO0FBQUEsUUFBQztBQUFBLFFBQUUsYUFBWSxTQUFTLEdBQUU7QUFBQyxjQUFHLFFBQU0sS0FBSyxVQUFTO0FBQUMsZ0JBQUksSUFBRSxFQUFFLElBQUksR0FBRSxJQUFFLEVBQUU7QUFBRSx1QkFBUyxNQUFJLEVBQUUsSUFBSSxLQUFHLElBQUUsTUFBSyxFQUFFLElBQUUsTUFBSSxLQUFHLElBQUUsS0FBSyxzQkFBb0IsRUFBRSxvQkFBb0IsQ0FBQyxJQUFFLE1BQUssU0FBUyxnQkFBZ0Isd0JBQXdCLElBQUksTUFBSSxFQUFFLElBQUU7QUFBSyxtQkFBTztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQUEsUUFBRSxVQUFTLFNBQVMsR0FBRTtBQUFDLGlCQUFPLEdBQUcsTUFBSyxDQUFDO0FBQUEsUUFBQztBQUFBLE1BQUMsQ0FBQztBQUFFLFVBQUksSUFBRSxFQUFFLEVBQUMsSUFBSSxlQUFjO0FBQUMsWUFBSSxJQUFFLEtBQUs7QUFBbUIsU0FBQyxJQUFFLEtBQUcsRUFBRSx1QkFBcUIsR0FBRyxDQUFDO0FBQUUsZ0JBQU8sSUFBRSxFQUFFLElBQUksTUFBSSxFQUFFLGdCQUFjO0FBQUEsTUFBSSxFQUFDLENBQUM7QUFLM2hCLFVBQUksS0FBRyxvQkFBSTtBQUFJLE9BQUMsQ0FBQyxLQUFJLEVBQUMsS0FBSSxLQUFJLEdBQUUsS0FBRSxDQUFDLEdBQUUsQ0FBQyxLQUFJLEVBQUMsS0FBSSxLQUFJLEdBQUUsS0FBRSxDQUFDLEdBQUUsQ0FBQyxLQUFJLEVBQUMsS0FBSSxLQUFJLEdBQUUsTUFBRSxDQUFDLEdBQUUsQ0FBQyxLQUFJLEVBQUMsS0FBSSxLQUFJLEdBQUUsTUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLFNBQVMsR0FBRTtBQUFDLFlBQUksSUFBRSxFQUFFLENBQUM7QUFBRSxZQUFFLEVBQUUsS0FBSyxFQUFFO0FBQU0sWUFBRSxFQUFFLEtBQUssRUFBRTtBQUFNLFdBQUcsSUFBSSxHQUFFLENBQUM7QUFBQSxNQUFDLENBQUM7QUFBRSxlQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGFBQUksSUFBRSxXQUFTLElBQUUsT0FBRyxHQUFFLElBQUUsRUFBRSxRQUFPO0FBQUksY0FBRyxTQUFPLEVBQUUsQ0FBQyxLQUFHLElBQUUsRUFBRSxTQUFPLEtBQUcsU0FBTyxFQUFFLElBQUUsQ0FBQztBQUFFO0FBQUEsZUFBUTtBQUFDLGdCQUFHLE9BQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQUUscUJBQU87QUFBRSxnQkFBRyxLQUFHLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFFO0FBQUMsa0JBQUksSUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7QUFBRSxrQkFBRSxHQUFHLEdBQUUsSUFBRSxHQUFFLENBQUMsRUFBRSxHQUFHLEdBQUUsRUFBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxlQUFPLEVBQUU7QUFBQSxNQUFNO0FBQ25aLGVBQVMsR0FBRyxHQUFFO0FBQUMsaUJBQVMsSUFBRztBQUFDLGNBQUcsSUFBRSxFQUFFLFFBQU87QUFBQyxtQkFBSyxRQUFNLEVBQUUsRUFBRSxTQUFPLENBQUM7QUFBRyxnQkFBRSxJQUFJO0FBQUUsY0FBRSxLQUFLLEVBQUMsR0FBRSxFQUFFLE9BQU8sU0FBUyxHQUFFLEdBQUU7QUFBQyxxQkFBTyxNQUFJLElBQUU7QUFBQSxZQUFDLENBQUMsR0FBRSxJQUFHLEVBQUUsT0FBTyxTQUFTLEdBQUUsR0FBRTtBQUFDLHFCQUFPLE1BQUksSUFBRTtBQUFBLFlBQUMsQ0FBQyxFQUFDLENBQUM7QUFBRSxjQUFFLFNBQU87QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFRLElBQUUsQ0FBQyxHQUFFLElBQUUsQ0FBQyxHQUFFLElBQUUsR0FBRSxJQUFFLEVBQUUsVUFBUTtBQUFDLGNBQUksSUFBRSxFQUFFLEVBQUUsU0FBTyxDQUFDLEdBQUUsSUFBRSxHQUFHLEdBQUUsR0FBRSxDQUFDLEtBQUksS0FBSSxLQUFJLEtBQUksR0FBRyxDQUFDLEdBQUVBLEtBQUUsTUFBSSxJQUFFLEVBQUUsQ0FBQyxJQUFFLEVBQUUsVUFBVSxHQUFFLENBQUM7QUFBRSxjQUFHLFFBQU1BO0FBQUUsY0FBRTtBQUFBLG1CQUFVLE9BQUssQ0FBQyxRQUFPLEtBQUksS0FBSSxLQUFJLEdBQUcsRUFBRSxRQUFRLENBQUMsS0FBRyxRQUFNQTtBQUFFLG9CQUFNLEtBQUcsT0FBSyxDQUFDLEtBQUksS0FBSSxHQUFHLEVBQUUsUUFBUUEsRUFBQyxJQUFFLEVBQUUsRUFBRSxTQUFPLENBQUMsSUFBRUEsS0FBRSxFQUFFLEtBQUtBLEVBQUM7QUFBRSxjQUFFLEtBQUcsTUFBSSxJQUFFLElBQUU7QUFBQSxRQUFFO0FBQUMsVUFBRTtBQUFFLGVBQU87QUFBQSxNQUFDO0FBQUM7QUFBQyxlQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUU7QUFBQyxZQUFJLElBQUUsQ0FBQztBQUFFLFdBQUcsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFFLGVBQU87QUFBQSxNQUFDO0FBQUMsZUFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxhQUFJLElBQUUsRUFBRSxvQkFBbUIsR0FBRSxJQUFFLEVBQUUscUJBQW9CO0FBQUMsY0FBSTtBQUFFLGNBQUcsSUFBRSxFQUFFLGFBQVcsS0FBSyxjQUFhO0FBQUMsZ0JBQUU7QUFBRSxnQkFBSSxJQUFFLEdBQUUsSUFBRSxHQUFFQSxLQUFFLEdBQUUsSUFBRSxFQUFFLENBQUM7QUFBRSxpQkFBR0EsR0FBRSxLQUFLLENBQUM7QUFBRSxpQkFBRyxFQUFFLENBQUMsSUFBRSxJQUFFLEtBQUcsR0FBRyxHQUFFLEdBQUUsR0FBRUEsRUFBQyxHQUFFLElBQUU7QUFBQSxVQUFPO0FBQUMsY0FBRztBQUFFO0FBQUEsUUFBSztBQUFBLE1BQUM7QUFDbHRCLFVBQUksS0FBRyxFQUFDLElBQUksb0JBQW1CO0FBQUMsWUFBSSxJQUFFLEVBQUUsSUFBSTtBQUFFLFlBQUcsS0FBRyxXQUFTLEVBQUUsWUFBVztBQUFDLGVBQUksSUFBRSxLQUFLLG9CQUFtQixLQUFHLEVBQUUsYUFBVyxLQUFLO0FBQWMsZ0JBQUUsRUFBRTtBQUFvQixpQkFBTztBQUFBLFFBQUM7QUFBQyxlQUFPLEtBQUs7QUFBQSxNQUFnQyxHQUFFLElBQUksbUJBQWtCO0FBQUMsWUFBSSxJQUFFLEVBQUUsSUFBSTtBQUFFLFlBQUcsS0FBRyxXQUFTLEVBQUUsV0FBVTtBQUFDLGVBQUksSUFBRSxLQUFLLG1CQUFrQixLQUFHLEVBQUUsYUFBVyxLQUFLO0FBQWMsZ0JBQUUsRUFBRTtBQUF3QixpQkFBTztBQUFBLFFBQUM7QUFBQyxlQUFPLEtBQUs7QUFBQSxNQUErQixHQUFFLElBQUksV0FBVTtBQUFDLGVBQU8sRUFBRSxJQUFJLElBQUUsRUFBRSxNQUFNLFVBQVUsT0FBTyxLQUFLLEdBQUcsSUFBSSxHQUFFLFNBQVMsR0FBRTtBQUFDLGlCQUFPLEVBQUUsYUFDeGdCLEtBQUs7QUFBQSxRQUFZLENBQUMsQ0FBQyxJQUFFLEtBQUs7QUFBQSxNQUF1QixHQUFFLElBQUksb0JBQW1CO0FBQUMsWUFBSSxJQUFFLEtBQUs7QUFBaUIsZUFBTyxJQUFFLEVBQUUsU0FBTztBQUFBLE1BQUMsRUFBQyxHQUFFLElBQUUsR0FBRyxHQUFHLFNBQU8sU0FBUyxHQUFFO0FBQUMsaUJBQVEsSUFBRSxDQUFDLEdBQUUsSUFBRSxHQUFFLElBQUUsVUFBVSxRQUFPLEVBQUU7QUFBRSxZQUFFLENBQUMsSUFBRSxVQUFVLENBQUM7QUFBRSxhQUFLLHFCQUFxQixFQUFFLE1BQU0sTUFBSyxFQUFFLENBQUMsQ0FBQyxHQUFFLElBQUk7QUFBQSxNQUFDLEdBQUUsR0FBRyxVQUFRLFNBQVMsR0FBRTtBQUFDLGlCQUFRLElBQUUsQ0FBQyxHQUFFLElBQUUsR0FBRSxJQUFFLFVBQVUsUUFBTyxFQUFFO0FBQUUsWUFBRSxDQUFDLElBQUUsVUFBVSxDQUFDO0FBQUUsYUFBSyxxQkFBcUIsRUFBRSxNQUFNLE1BQUssRUFBRSxDQUFDLENBQUMsR0FBRSxLQUFLLGtCQUFrQjtBQUFBLE1BQUMsR0FBRSxHQUFHLGtCQUFnQixTQUFTLEdBQUU7QUFBQyxpQkFBUSxJQUFFLENBQUMsR0FBRSxJQUFFLEdBQUUsSUFBRSxVQUFVLFFBQU8sRUFBRTtBQUFFLFlBQUUsQ0FBQyxJQUFFLFVBQVUsQ0FBQztBQUNyZixlQUFLLFVBQVEsSUFBRSxLQUFLO0FBQXFCLGVBQUssb0JBQW9CLENBQUM7QUFBRSxhQUFLLHFCQUFxQixFQUFFLE1BQU0sTUFBSyxFQUFFLENBQUMsQ0FBQyxHQUFFLElBQUk7QUFBQSxNQUFDLEdBQUUsR0FBRztBQUM1SCxlQUFTLEdBQUcsR0FBRSxHQUFFO0FBQUMsaUJBQVMsRUFBRSxHQUFFLEdBQUU7QUFBQyxrQkFBTyxNQUFJLEtBQUcsT0FBSyxFQUFFLFFBQVEsUUFBUSxNQUFJLEdBQUcsS0FBSyxHQUFFLENBQUM7QUFBQSxRQUFDO0FBQUMsWUFBSSxJQUFFLEdBQUcsQ0FBQztBQUFFLFlBQUcsSUFBRSxFQUFFO0FBQU8saUJBQU0sQ0FBQztBQUFFLGFBQUksSUFBRSxHQUFHLEdBQUcsR0FBRSxXQUFVO0FBQUMsaUJBQU07QUFBQSxRQUFFLENBQUMsRUFBRSxJQUFJLFNBQVMsR0FBRTtBQUFDLGlCQUFPLEdBQUcsRUFBRSxJQUFJLFNBQVMsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRSxHQUFFQSxLQUFFLEVBQUUsU0FBTztBQUFFLG1CQUFPLEVBQUUsR0FBRSxFQUFFQSxFQUFDLENBQUMsSUFBRSxFQUFDLFFBQU8sR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQU1BLEdBQUMsSUFBRSxDQUFDO0FBQUEsVUFBQyxDQUFDLENBQUM7QUFBQSxRQUFDLENBQUMsQ0FBQyxHQUFFLEVBQUUsS0FBSyxTQUFTLEdBQUU7QUFBQyxpQkFBTyxJQUFFLEVBQUU7QUFBQSxRQUFLLENBQUM7QUFBRyxjQUFFLEdBQUcsRUFBRSxJQUFJLFNBQVMsR0FBRTtBQUFDLGdCQUFHLEtBQUcsRUFBRTtBQUFNLHFCQUFPO0FBQUUsZ0JBQUksSUFBRSxFQUFFLFFBQU8sSUFBRSxFQUFFLEdBQUVBLEtBQUUsRUFBRTtBQUFFLGdCQUFFLEVBQUUsUUFBTTtBQUFFLGdCQUFJLElBQUVBLEdBQUUsR0FBRyxDQUFDLEdBQUUsSUFBRUEsR0FBRSxFQUFFLENBQUM7QUFBRSxnQkFBRyxRQUFNLEdBQUU7QUFBQyxrQkFBRSxDQUFDO0FBQUUsbUJBQUksSUFBRSxFQUFFLHVCQUFzQixHQUFFLElBQUUsRUFBRTtBQUFzQjtBQUFBLGtCQUFFO0FBQUEsa0JBQ3RmO0FBQUEsZ0JBQUMsS0FBRyxFQUFFLEtBQUssRUFBQyxRQUFPLEdBQUUsR0FBRUEsSUFBRSxHQUFFLEdBQUUsT0FBTSxFQUFDLENBQUM7QUFBRSxxQkFBTztBQUFBLFlBQUM7QUFBQyxnQkFBRyxRQUFNO0FBQUUscUJBQU8sSUFBRSxFQUFFLHVCQUFzQixFQUFFLEdBQUUsQ0FBQyxJQUFFLEVBQUMsUUFBTyxHQUFFLEdBQUVBLElBQUUsR0FBRSxHQUFFLE9BQU0sRUFBQyxJQUFFLENBQUM7QUFBRSxnQkFBRyxRQUFNO0FBQUUsc0JBQU8sSUFBRSxFQUFFLG1DQUFpQyxFQUFFLEdBQUUsQ0FBQyxJQUFFLEVBQUMsUUFBTyxHQUFFLEdBQUVBLElBQUUsR0FBRSxHQUFFLE9BQU0sRUFBQyxJQUFFLENBQUM7QUFBRSxnQkFBRyxRQUFNLEdBQUU7QUFBQyxrQkFBRSxDQUFDO0FBQUUsbUJBQUksSUFBRSxFQUFFLGdDQUErQixHQUFFLElBQUUsRUFBRTtBQUErQixrQkFBRSxHQUFFLENBQUMsS0FBRyxFQUFFLEtBQUssRUFBQyxRQUFPLEdBQUUsR0FBRUEsSUFBRSxHQUFFLEdBQUUsT0FBTSxFQUFDLENBQUM7QUFBRSxxQkFBTztBQUFBLFlBQUM7QUFBQyxrQkFBTSxNQUFNLCtCQUE2QixJQUFFLElBQUk7QUFBQSxVQUFFLENBQUMsQ0FBQztBQUFFLGVBQU8sR0FBRyxFQUFFLElBQUksU0FBUyxHQUFFO0FBQUMsaUJBQU8sRUFBRTtBQUFBLFFBQU0sQ0FBQyxDQUFDO0FBQUEsTUFBQztBQUNqZCxVQUFJLElBQUUsRUFBRSw2QkFBNEIsS0FBRyxFQUFFLEVBQUMsZUFBYyxTQUFTLEdBQUU7QUFBQyxZQUFHLGFBQVcsR0FBRTtBQUFDLGNBQUksSUFBRSxNQUFNLFVBQVUsTUFBTSxNQUFNLGdCQUFnQixhQUFXLEtBQUssT0FBSyxNQUFNLGdDQUFnQyxDQUFDLENBQUMsR0FBRSxJQUFFLEtBQUssb0JBQW9CO0FBQUUsY0FBRSxFQUFFLENBQUM7QUFBRSxtQkFBUSxJQUFFLEVBQUUsS0FBSyxHQUFFLENBQUMsRUFBRSxNQUFLLElBQUUsRUFBRSxLQUFLO0FBQUUsZ0JBQUcsSUFBRSxFQUFFLE9BQU0sRUFBRSxvQkFBb0IsS0FBRztBQUFFLHFCQUFPO0FBQUUsaUJBQU87QUFBQSxRQUFJO0FBQUMsWUFBRyxxQkFBbUI7QUFBRSxpQkFBTyxHQUFHLE1BQUssQ0FBQyxFQUFFLENBQUMsS0FBRztBQUFLLFlBQUcsV0FBUztBQUFFLGlCQUFPLEdBQUcsTUFBSyxTQUFTLEdBQUU7QUFBQyxtQkFBTyxHQUFHLEtBQUssR0FBRSxDQUFDO0FBQUEsVUFBQyxHQUFFLFNBQVMsR0FBRTtBQUFDLG1CQUFNLENBQUMsQ0FBQztBQUFBLFVBQUMsQ0FBQyxFQUFFLENBQUMsS0FBRztBQUFLLGNBQU0sTUFBTSxtRUFDMWUsSUFBRSxJQUFJO0FBQUEsTUFBRSxHQUFFLGtCQUFpQixTQUFTLEdBQUUsR0FBRTtBQUFDLFlBQUcsS0FBRyxhQUFXLEdBQUU7QUFBQyxjQUFFLE1BQU0sVUFBVSxNQUFNLE1BQU0sZ0JBQWdCLGFBQVcsS0FBSyxPQUFLLE1BQU0sZ0NBQWdDLENBQUMsQ0FBQztBQUFFLGNBQUksSUFBRSxLQUFLLG9CQUFvQjtBQUFFLGlCQUFPLEVBQUUsRUFBRSxPQUFPLFNBQVMsR0FBRTtBQUFDLG1CQUFPLEVBQUUsb0JBQW9CLEtBQUc7QUFBQSxVQUFDLENBQUMsQ0FBQztBQUFBLFFBQUM7QUFBQyxZQUFHLHFCQUFtQjtBQUFFLGlCQUFPLEVBQUUsR0FBRyxNQUFLLENBQUMsQ0FBQztBQUFFLFlBQUcsV0FBUztBQUFFLGlCQUFPLEVBQUUsR0FBRyxNQUFLLFNBQVMsR0FBRTtBQUFDLG1CQUFPLEdBQUcsS0FBSyxHQUFFLENBQUM7QUFBQSxVQUFDLENBQUMsQ0FBQztBQUFFLGNBQU0sTUFBTSxtRUFBaUUsSUFBRSxJQUFJO0FBQUEsTUFBRSxFQUFDLENBQUMsR0FBRSxLQUFHLEVBQUUsS0FBRyxDQUFDLEVBQUUsSUFBRSxHQUFHLENBQUMsR0FBRSxDQUFDLElBQUU7QUFBRSxTQUFHLEdBQUUsRUFBRTtBQVN0ZixVQUFJLEtBQUcsRUFBRSxFQUFDLE9BQU0sU0FBUyxHQUFFO0FBQUMsaUJBQVEsSUFBRSxDQUFDLEdBQUUsSUFBRSxHQUFFLElBQUUsVUFBVSxRQUFPLEVBQUU7QUFBRSxZQUFFLENBQUMsSUFBRSxVQUFVLENBQUM7QUFBRSxZQUFFLEtBQUs7QUFBbUIsWUFBRyxTQUFPLEdBQUU7QUFBQyxjQUFJLElBQUUsS0FBSztBQUFvQixZQUFFLHFCQUFxQixFQUFFLE1BQU0sTUFBSyxFQUFFLENBQUMsQ0FBQyxHQUFFLENBQUM7QUFBQSxRQUFDO0FBQUEsTUFBQyxHQUFFLFFBQU8sU0FBUyxHQUFFO0FBQUMsaUJBQVEsSUFBRSxDQUFDLEdBQUUsSUFBRSxHQUFFLElBQUUsVUFBVSxRQUFPLEVBQUU7QUFBRSxZQUFFLENBQUMsSUFBRSxVQUFVLENBQUM7QUFBRSxZQUFFLEtBQUs7QUFBbUIsaUJBQU8sS0FBRyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sTUFBSyxFQUFFLENBQUMsQ0FBQyxHQUFFLElBQUk7QUFBQSxNQUFDLEdBQUUsUUFBTyxXQUFVO0FBQUMsWUFBSSxJQUFFLEtBQUs7QUFBbUIsaUJBQU8sS0FBRyxFQUFFLG9CQUFvQixJQUFJO0FBQUEsTUFBQyxHQUFFLGFBQVksU0FBUyxHQUFFO0FBQUMsaUJBQVEsSUFBRSxDQUFDLEdBQUUsSUFBRSxHQUFFLElBQUUsVUFBVSxRQUFPLEVBQUU7QUFBRSxZQUFFLENBQUMsSUFDdmdCLFVBQVUsQ0FBQztBQUFFLFlBQUUsS0FBSztBQUFtQixZQUFHLFNBQU8sR0FBRTtBQUFDLGNBQUksSUFBRSxLQUFLO0FBQW9CLFlBQUUsb0JBQW9CLElBQUk7QUFBRSxZQUFFLHFCQUFxQixFQUFFLE1BQU0sTUFBSyxFQUFFLENBQUMsQ0FBQyxHQUFFLENBQUM7QUFBQSxRQUFDO0FBQUEsTUFBQyxFQUFDLENBQUM7QUFBRSxVQUFJLEtBQUcsT0FBTztBQUFTLGVBQVMsR0FBRyxHQUFFLEdBQUU7QUFBQyxZQUFHLFdBQVM7QUFBRSxjQUFFLEVBQUUsb0JBQW1CLEdBQUcsQ0FBQyxLQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSTtBQUFBLGlCQUFVLFdBQVMsRUFBRSxhQUFXLFdBQVMsTUFBSSxJQUFFLEVBQUUsQ0FBQyxJQUFHO0FBQUMsY0FBRyxFQUFFLEdBQUU7QUFBQyxlQUFHLENBQUM7QUFBRSxnQkFBSSxJQUFFLEVBQUUsR0FBRSxJQUFFLEdBQUcsQ0FBQztBQUFFLGdCQUFHLE1BQUksR0FBRTtBQUFDLGtCQUFFLEVBQUUsRUFBRSxDQUFDO0FBQUUsa0JBQUksSUFBRSxFQUFFLFFBQVEsQ0FBQztBQUFFLG1CQUFHLEtBQUcsRUFBRSxPQUFPLEdBQUUsQ0FBQztBQUFFLGtCQUFFLEVBQUUsRUFBRSxDQUFDLE1BQUksRUFBRSxFQUFFLENBQUMsSUFBRSxDQUFDO0FBQUcsZ0JBQUUsS0FBSyxDQUFDO0FBQUUsa0JBQUUsRUFBRSxXQUFTLEVBQUUsRUFBRSxDQUFDLElBQUUsR0FBRyxDQUFDO0FBQUEsWUFBRTtBQUFBLFVBQUM7QUFBQyxZQUFFLENBQUM7QUFBQSxRQUFDO0FBQUEsTUFBQztBQUNoZCxVQUFJLEtBQUcsRUFBRTtBQUFBLFFBQUMsSUFBSSx5QkFBd0I7QUFBQyxjQUFJLElBQUUsRUFBRSxJQUFJO0FBQUUsY0FBRyxLQUFHLFdBQVMsRUFBRSxpQkFBZ0I7QUFBQyxpQkFBSSxJQUFFLEtBQUsseUJBQXdCLEtBQUcsRUFBRSxhQUFXLEtBQUs7QUFBYyxrQkFBRSxFQUFFO0FBQXdCLG1CQUFPO0FBQUEsVUFBQztBQUFDLGlCQUFPLEtBQUs7QUFBQSxRQUFxQztBQUFBLFFBQUUsSUFBSSxxQkFBb0I7QUFBQyxjQUFJLElBQUUsRUFBRSxJQUFJO0FBQUUsY0FBRyxLQUFHLFdBQVMsRUFBRSxhQUFZO0FBQUMsaUJBQUksSUFBRSxLQUFLLHFCQUFvQixLQUFHLEVBQUUsYUFBVyxLQUFLO0FBQWMsa0JBQUUsRUFBRTtBQUFvQixtQkFBTztBQUFBLFVBQUM7QUFBQyxpQkFBTyxLQUFLO0FBQUEsUUFBaUM7QUFBQSxRQUFFLElBQUksT0FBTTtBQUFDLGlCQUFPLEtBQUssYUFBYSxNQUFNO0FBQUEsUUFBQztBQUFBLFFBQ3ZmLElBQUksS0FBSyxHQUFFO0FBQUMsZUFBSyxxQkFBcUIsUUFBTyxDQUFDO0FBQUEsUUFBQztBQUFBLFFBQUUsSUFBSSxZQUFXO0FBQUMsaUJBQU8sS0FBSyxhQUFhLE9BQU8sS0FBRztBQUFBLFFBQUU7QUFBQSxRQUFFLElBQUksVUFBVSxHQUFFO0FBQUMsZUFBSyxxQkFBcUIsU0FBUSxDQUFDO0FBQUEsUUFBQztBQUFBLFFBQUUsY0FBYSxTQUFTLEdBQUUsR0FBRTtBQUFDLGVBQUssa0JBQWdCLEtBQUcsS0FBSyw0QkFBNEIsR0FBRSxDQUFDLElBQUUsR0FBRyxNQUFLLEdBQUUsQ0FBQyxNQUFJLEtBQUssNEJBQTRCLEdBQUUsQ0FBQyxHQUFFLEdBQUcsTUFBSyxDQUFDO0FBQUEsUUFBRTtBQUFBLFFBQUUsaUJBQWdCLFNBQVMsR0FBRTtBQUFDLGVBQUssa0JBQWdCLEtBQUcsS0FBSywrQkFBK0IsQ0FBQyxJQUFFLEdBQUcsTUFBSyxHQUFFLEVBQUUsSUFBRSxPQUFLLEtBQUssYUFBYSxDQUFDLEtBQUcsS0FBSywrQkFBK0IsQ0FBQyxLQUFHLEtBQUssK0JBQStCLENBQUMsR0FDM2dCLEdBQUcsTUFBSyxDQUFDO0FBQUEsUUFBRTtBQUFBLFFBQUUsaUJBQWdCLFNBQVMsR0FBRSxHQUFFO0FBQUMsY0FBRyxLQUFLLGtCQUFnQjtBQUFHLG1CQUFPLEtBQUssK0JBQStCLEdBQUUsQ0FBQztBQUFFLGNBQUcsQ0FBQyxHQUFHLE1BQUssR0FBRSxFQUFFO0FBQUUsbUJBQU8sSUFBRSxLQUFLLCtCQUErQixHQUFFLENBQUMsR0FBRSxHQUFHLE1BQUssQ0FBQyxHQUFFO0FBQUUsY0FBRyxPQUFLLEtBQUssYUFBYSxDQUFDLEtBQUcsQ0FBQztBQUFFLG1CQUFPLEtBQUssK0JBQStCLEdBQUUsQ0FBQztBQUFBLFFBQUM7QUFBQSxNQUFDLENBQUM7QUFBRSxRQUFFLEtBQUcsR0FBRyxRQUFRLFNBQVMsR0FBRTtBQUFDLFdBQUcsQ0FBQyxJQUFFLEdBQUcsQ0FBQztBQUFBLE1BQUMsQ0FBQztBQUNuVSxVQUFJLEtBQUcsRUFBRSxFQUFDLGNBQWEsU0FBUyxHQUFFO0FBQUMsWUFBRyxDQUFDO0FBQUssZ0JBQU0sTUFBTSxzQkFBc0I7QUFBRSxZQUFHLENBQUM7QUFBRSxnQkFBTSxNQUFNLHVCQUF1QjtBQUFFLFlBQUcsRUFBRSx3QkFBc0IsQ0FBQyxFQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFxQixZQUFFLFlBQVUsV0FBVztBQUFVLGFBQUcsR0FBRSxNQUFLLENBQUM7QUFBRSxhQUFHLEdBQUUsQ0FBQztBQUFFLGNBQUUsRUFBRSxxQkFBbUIsT0FBSyxFQUFFLGlCQUFpQixNQUFNO0FBQUUsWUFBRSxxQkFBbUI7QUFBTyxjQUFHLEtBQUcsRUFBRSxRQUFPO0FBQUMsZ0JBQUksSUFBRTtBQUFFLGVBQUcsQ0FBQztBQUFFLGNBQUUsRUFBRSxLQUFLLE1BQU0sRUFBRSxHQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQUUsY0FBRSxDQUFDO0FBQUEsVUFBQztBQUFDLFlBQUUsS0FBSywyQkFBMkIsQ0FBQztBQUFBLFFBQUM7QUFBTSxjQUFFLElBQUksR0FBRyxJQUFHLE1BQUssQ0FBQztBQUFFLGVBQU8sS0FBSyxrQkFBZ0I7QUFBQSxNQUFDLEdBQUUsSUFBSSxhQUFZO0FBQUMsWUFBSSxJQUFFLEVBQUUsSUFBSTtBQUN4ZixlQUFPLEtBQUcsRUFBRSxNQUFJO0FBQUEsTUFBSSxFQUFDLENBQUM7QUFBRSxTQUFHLElBQUcsRUFBRTtBQUFFLFVBQUksS0FBRyxTQUFTLGVBQWUsbUJBQW1CLE9BQU8sR0FBRSxLQUFHLEVBQUUsRUFBQyxJQUFJLFlBQVc7QUFBQyxlQUFPLEVBQUUsSUFBSSxJQUFFLEdBQUcsZUFBYSxLQUFLLFlBQVUsS0FBSyxVQUFRLE1BQUssRUFBRSxJQUFFLEtBQUs7QUFBQSxNQUF3QixHQUFFLElBQUksVUFBVSxHQUFFO0FBQUMsWUFBRyxlQUFhLEtBQUs7QUFBVSxlQUFLLDJCQUF5QjtBQUFBLGFBQU07QUFBQyxhQUFHLElBQUk7QUFBRSxjQUFJLElBQUUsS0FBSyxhQUFXO0FBQU0sY0FBRSxLQUFLLGdCQUFjLEtBQUssaUJBQWUsR0FBRyxlQUFhLEdBQUcsZ0JBQWdCLEtBQUssY0FBYSxDQUFDLElBQUUsR0FBRyxjQUFjLENBQUM7QUFBRSxlQUFJLEVBQUUsSUFBRSxFQUFFLDJCQUF5QixJQUFFLEVBQUUsWUFBVSxHQUFFLElBQUUsRUFBRTtBQUFvQixpQkFBSyxxQkFBcUIsQ0FBQztBQUFBLFFBQUM7QUFBQSxNQUFDLEVBQUMsQ0FBQztBQUFFLFVBQUksS0FBRyxFQUFFLEVBQUMsTUFBSyxXQUFVO0FBQUMsWUFBSSxJQUFFLEVBQUUsSUFBSTtBQUFFLFNBQUMsS0FBRyxJQUFFLEtBQUcsRUFBRSxTQUFPLEVBQUUsaUJBQWUsRUFBRSxhQUFhLElBQUUsS0FBSyxvQkFBb0I7QUFBQSxNQUFDLEVBQUMsQ0FBQztBQUFFLFFBQUUsS0FBRyxHQUFHLFFBQVEsU0FBUyxHQUFFO0FBQUMsV0FBRyxDQUFDLElBQUUsR0FBRyxDQUFDO0FBQUEsTUFBQyxDQUFDO0FBQUUsVUFBSSxLQUFHLEVBQUUsRUFBQyxlQUFjLFNBQVMsR0FBRTtBQUFDLFlBQUcsV0FBUyxLQUFLLFdBQVU7QUFBQyxjQUFJLElBQUUsS0FBSyxvQkFBb0I7QUFBRSxlQUFHLEVBQUUsQ0FBQyxLQUFHLEdBQUcsQ0FBQztBQUFFLGtCQUFPLElBQUUsRUFBRSxJQUFJLE1BQUksS0FBRyxFQUFFLFVBQVEsRUFBRSxJQUFFLEVBQUUsa0JBQWdCLENBQUMsSUFBRSxDQUFDO0FBQUEsUUFBQztBQUFBLE1BQUMsR0FBRSxrQkFBaUIsU0FBUyxHQUFFLEdBQUUsR0FBRTtBQUFDLFlBQUcsV0FBUyxLQUFLLGFBQVcsaUJBQWU7QUFBRSxhQUFHLEtBQUssTUFBSyxHQUFFLEdBQUUsQ0FBQztBQUFBLGFBQU07QUFBQyx1QkFBVyxPQUFPLE1BQUksSUFBRSxFQUFDLFNBQVEsQ0FBQyxDQUFDLEVBQUM7QUFBRyxjQUFJLElBQUUsS0FBSztBQUFtQixjQUFHLENBQUM7QUFBRSxrQkFBTSxNQUFNLG1FQUFtRTtBQUFFLFlBQUUsSUFBRTtBQUFLLFlBQUUseUJBQXlCLEdBQUUsR0FBRSxDQUFDO0FBQUEsUUFBQztBQUFBLE1BQUMsR0FBRSxxQkFBb0IsU0FBUyxHQUNodEMsR0FBRSxHQUFFO0FBQUMsWUFBRyxXQUFTLEtBQUssYUFBVyxpQkFBZTtBQUFFLGFBQUcsS0FBSyxNQUFLLEdBQUUsR0FBRSxDQUFDO0FBQUEsYUFBTTtBQUFDLHVCQUFXLE9BQU8sTUFBSSxJQUFFLEVBQUMsU0FBUSxDQUFDLENBQUMsRUFBQztBQUFHLGNBQUksSUFBRSxLQUFLO0FBQW1CLGNBQUcsQ0FBQztBQUFFLGtCQUFNLE1BQU0sbUVBQW1FO0FBQUUsWUFBRSxJQUFFO0FBQUssWUFBRSw0QkFBNEIsR0FBRSxHQUFFLENBQUM7QUFBQSxRQUFDO0FBQUEsTUFBQyxFQUFDLENBQUM7QUFBRSxVQUFJLEtBQUcsRUFBRSxFQUFDLGdCQUFlLFNBQVMsR0FBRTtBQUFDLGVBQU0sT0FBSyxJQUFFLE9BQUssR0FBRyxNQUFLLFNBQVMsR0FBRTtBQUFDLGlCQUFPLEVBQUUsTUFBSTtBQUFBLFFBQUMsR0FBRSxTQUFTLEdBQUU7QUFBQyxpQkFBTSxDQUFDLENBQUM7QUFBQSxRQUFDLENBQUMsRUFBRSxDQUFDLEtBQUc7QUFBQSxNQUFJLEVBQUMsQ0FBQztBQUFFLGVBQVMsR0FBRyxHQUFFLEdBQUU7QUFBQyxpQkFBUSxHQUFFLEtBQUcsQ0FBQyxFQUFFLElBQUksSUFBRSxFQUFFLG9CQUFvQixDQUFDO0FBQUcsY0FBRSxFQUFFO0FBQUssZUFBTztBQUFBLE1BQUM7QUFBQyxlQUFTLEdBQUcsR0FBRTtBQUFDLFlBQUksSUFBRSxvQkFBSTtBQUFJLGFBQUksRUFBRSxJQUFJLENBQUMsR0FBRSxFQUFFLENBQUMsS0FBRyxFQUFFO0FBQU0sY0FBRSxFQUFFLEtBQUssb0JBQW9CLEdBQUUsRUFBRSxJQUFJLENBQUM7QUFBRSxlQUFPO0FBQUEsTUFBQztBQUNubEIsVUFBSSxLQUFHLG9CQUFrQixHQUFHLEdBQUUsS0FBRyxFQUFFLEVBQUMsSUFBSSxnQkFBZTtBQUFDLFlBQUksSUFBRSxFQUFFLElBQUUsU0FBUywrQkFBNkIsU0FBUztBQUFjLFlBQUcsQ0FBQyxLQUFHLENBQUMsRUFBRTtBQUFTLGlCQUFPO0FBQUssWUFBSSxJQUFFLENBQUMsQ0FBQyxFQUFFLElBQUk7QUFBRSxZQUFHLEVBQUUsU0FBTyxZQUFVLEtBQUcsS0FBSyxTQUFPLEtBQUcsS0FBSyxLQUFLLHdCQUF3QixDQUFDO0FBQUcsaUJBQU87QUFBSyxhQUFJLElBQUUsRUFBRSxDQUFDLEdBQUUsS0FBRyxNQUFJO0FBQU0sY0FBRSxFQUFFLE1BQUssSUFBRSxFQUFFLENBQUM7QUFBRSxlQUFPLFNBQU8sV0FBUyxJQUFFLE9BQUssSUFBRSxNQUFJLE9BQUssSUFBRTtBQUFBLE1BQUksR0FBRSxtQkFBa0IsU0FBUyxHQUFFLEdBQUU7QUFBQyxZQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUUsQ0FBQztBQUFFLFlBQUcsU0FBTyxZQUFVLEVBQUU7QUFBcUIsaUJBQU87QUFBRSxZQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUFFLFlBQUUsR0FBRyxJQUFJO0FBQUUsaUJBQVEsSUFBRSxvQkFBSSxPQUNyZixJQUFFLEdBQUUsSUFBRSxFQUFFLFFBQU87QUFBSSxZQUFFLElBQUksR0FBRyxHQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFBRSxZQUFJLElBQUUsQ0FBQztBQUFFLFVBQUUsUUFBUSxTQUFTLEdBQUU7QUFBQyxpQkFBTyxFQUFFLEtBQUssQ0FBQztBQUFBLFFBQUMsQ0FBQztBQUFFLGVBQU87QUFBQSxNQUFDLEdBQUUsa0JBQWlCLFNBQVMsR0FBRSxHQUFFO0FBQUMsZUFBTyxTQUFPLFlBQVUsRUFBRSx1QkFBcUIsS0FBSyxnQ0FBZ0MsR0FBRSxDQUFDLElBQUUsS0FBSywwQkFBMEIsR0FBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHO0FBQUEsTUFBSSxFQUFDLENBQUM7QUFBRSxVQUFJLEtBQUcsT0FBTyxVQUFTLEtBQUcsRUFBRSxFQUFDLFlBQVcsU0FBUyxHQUFFLEdBQUU7QUFBQyxZQUFHLEVBQUUsa0JBQWdCLE1BQUksZUFBYSxFQUFFO0FBQVUsaUJBQU8sS0FBSywwQkFBMEIsR0FBRSxDQUFDO0FBQUUsWUFBSSxJQUFFLEtBQUssMEJBQTBCLEdBQUUsS0FBRTtBQUFFLFlBQUc7QUFBRSxlQUFJLElBQUUsRUFBRSxvQkFBbUIsR0FBRSxJQUFFLEVBQUU7QUFBb0IsZ0JBQUUsS0FBSyxtQkFBbUIsR0FBRSxJQUFFLEdBQUUsRUFBRSxvQkFBb0IsQ0FBQztBQUFFLGVBQU87QUFBQSxNQUFDLEVBQUMsQ0FBQztBQUFFLFVBQUksS0FBRyxFQUFFLEVBQUMsZUFBYyxJQUFHLGtCQUFpQixHQUFHLEtBQUssTUFBTSxHQUFFLHFCQUFvQixHQUFHLEtBQUssTUFBTSxFQUFDLENBQUM7QUFBRSxVQUFJLElBQUUsQ0FBQztBQUFFLGFBQU8seUJBQXlCLFlBQVksV0FBVSxlQUFlLE1BQUksRUFBRSxnQkFBYyxHQUFHO0FBQWUsYUFBTyx5QkFBeUIsWUFBWSxXQUFVLFVBQVUsTUFBSSxFQUFFLFdBQVMsR0FBRztBQUFVLGFBQU8seUJBQXlCLFlBQVksV0FBVSxVQUFVLE1BQUksRUFBRSxXQUFTLEVBQUU7QUFBVSxhQUFPLHlCQUF5QixZQUFZLFdBQVUsV0FBVyxNQUFJLEVBQUUsWUFBVSxHQUFHO0FBQVcsYUFBTyx5QkFBeUIsWUFBWSxXQUFVLFdBQVcsTUFBSSxFQUFFLFlBQVUsR0FBRztBQUN0b0MsVUFBSSxJQUFFLEVBQUMsYUFBWSxDQUFDLEVBQUUsR0FBRSxNQUFLLENBQUMsSUFBRyxPQUFPLGNBQVksT0FBSyxFQUFFLEdBQUUsTUFBSyxDQUFDLENBQUMsR0FBRSxTQUFRLENBQUMsQ0FBQyxHQUFFLGNBQWEsQ0FBQyxDQUFDLEdBQUUsdUJBQXNCLENBQUMsQ0FBQyxHQUFFLFNBQVEsQ0FBQyxJQUFHLEdBQUUsSUFBRyxHQUFFLENBQUMsRUFBRSxLQUFHLGVBQWMsUUFBUSxZQUFVLEtBQUcsTUFBSyxPQUFPLGtCQUFnQixPQUFLLEVBQUUsR0FBRSxhQUFZLENBQUMsSUFBRyxDQUFDLEdBQUUsaUJBQWdCLENBQUMsRUFBRSxHQUFFLGtCQUFpQixDQUFDLElBQUcsRUFBRSxHQUFFLFVBQVMsQ0FBQyxJQUFHLElBQUcsSUFBRyxFQUFFLEdBQUUsUUFBTyxDQUFDLEVBQUUsR0FBRSxlQUFjLENBQUMsRUFBRSxHQUFFLGdCQUFlLENBQUMsT0FBTyxjQUFZLE9BQUssRUFBRSxFQUFDLEdBQUUsS0FBRyxFQUFFLElBQUUsT0FBSyxDQUFDLGFBQVksYUFBYTtBQUFFLGVBQVMsRUFBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsVUFBRSxRQUFRLFNBQVMsR0FBRTtBQUFDLGlCQUFPLEtBQUcsS0FBRyxFQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxRQUFDLENBQUM7QUFBQSxNQUFDO0FBQzdlLGVBQVMsR0FBRyxHQUFFO0FBQUMsWUFBSSxJQUFFLElBQUUsT0FBSyxJQUFHO0FBQUUsYUFBSSxLQUFLO0FBQUUsWUFBRSxPQUFPLENBQUMsS0FBRyxPQUFPLENBQUMsRUFBRSxXQUFVLEVBQUUsQ0FBQyxHQUFFLEdBQUUsQ0FBQztBQUFBLE1BQUM7QUFBQyxPQUFDLFFBQU8sV0FBVSxnQkFBZSx1QkFBdUIsRUFBRSxRQUFRLFNBQVMsR0FBRTtBQUFDLFlBQUksSUFBRSxPQUFPLENBQUMsR0FBRSxJQUFFLE9BQU8sT0FBTyxFQUFFLFNBQVM7QUFBRSxVQUFFLHlCQUF1QjtBQUFHLFVBQUUsR0FBRSxFQUFFLFdBQVc7QUFBRSxVQUFFLEdBQUUsRUFBRSxJQUFJO0FBQUUsVUFBRSxDQUFDLEtBQUcsRUFBRSxHQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQUUsVUFBRSxVQUFVLHVCQUFxQjtBQUFBLE1BQUMsQ0FBQztBQUFFLGVBQVMsR0FBRyxHQUFFO0FBQUMsVUFBRSx5QkFBdUI7QUFBRyxVQUFFLEdBQUUsRUFBRSxXQUFXO0FBQUUsVUFBRSxHQUFFLEVBQUUsSUFBSTtBQUFFLFVBQUUsR0FBRSxFQUFFLE9BQU87QUFBRSxVQUFFLEdBQUUsRUFBRSxXQUFXO0FBQUUsVUFBRSxHQUFFLEVBQUUsZUFBZTtBQUFFLGVBQU87QUFBQSxNQUFDO0FBQUM7QUFBQyxVQUFJLEtBQUcsRUFBRSxHQUFFLEtBQUcsRUFBRTtBQUFFLGVBQVMsR0FBRyxHQUFFLEdBQUU7QUFBQyxZQUFHLE1BQUksQ0FBQyxFQUFFLDBCQUF3QixDQUFDLEVBQUUsQ0FBQyxHQUFFO0FBQUMsY0FBSSxJQUFFLE9BQU8sZUFBZSxDQUFDLEdBQUUsSUFBRSxFQUFFLGVBQWUsc0JBQXNCLEtBQUcsRUFBRTtBQUFxQixnQkFBSSxJQUFFLE9BQU8sT0FBTyxDQUFDLEdBQUUsR0FBRyxDQUFDLEdBQUUsRUFBRSx1QkFBcUI7QUFBRyxpQkFBTyxlQUFlLEdBQUUsQ0FBQztBQUFBLFFBQUM7QUFBQyxlQUFLLE1BQUksSUFBRSxHQUFHLENBQUMsSUFBRSxNQUFJLEtBQUcsR0FBRyxDQUFDO0FBQUEsTUFBRTtBQUM3dUIsZUFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxXQUFHLEdBQUUsQ0FBQztBQUFFLFlBQUUsS0FBRztBQUFLLFlBQUksSUFBRSxFQUFFLENBQUMsR0FBRSxJQUFFLElBQUUsRUFBRSxDQUFDLElBQUU7QUFBSyxVQUFFLGtCQUFnQixJQUFFLEVBQUUsa0JBQWdCLEVBQUU7QUFBa0IsWUFBRyxJQUFFLEVBQUUsRUFBRSxlQUFlO0FBQUUsWUFBRSxjQUFZO0FBQUUsWUFBRyxJQUFFLEVBQUUsRUFBRSxjQUFZLENBQUM7QUFBRSxZQUFFLGtCQUFnQjtBQUFFLFVBQUUsYUFBVztBQUFFLFlBQUUsTUFBSSxFQUFFLGVBQWEsRUFBRSxhQUFXLE1BQUksRUFBRSxZQUFVLEdBQUUsRUFBRSxlQUFhLEVBQUUsYUFBVztBQUFJLFVBQUUsYUFBVztBQUFBLE1BQUk7QUFDcFUsZUFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFO0FBQUMsV0FBRyxHQUFFLENBQUM7QUFBRSxZQUFJLElBQUUsRUFBRSxDQUFDO0FBQUUsbUJBQVMsRUFBRSxlQUFhLEVBQUUsYUFBVztBQUFNLFlBQUcsRUFBRSxhQUFXLEtBQUs7QUFBdUIsZUFBSSxJQUFFLEVBQUUsMkJBQTBCLEdBQUUsSUFBRSxFQUFFO0FBQTJCLGVBQUcsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBO0FBQU8sYUFBRyxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsTUFBQztBQUM1TixlQUFTLEdBQUcsR0FBRSxHQUFFO0FBQUMsWUFBSSxJQUFFLEVBQUUsQ0FBQztBQUFFLFlBQUUsRUFBRSxDQUFDO0FBQUUsY0FBSSxFQUFFLGVBQWEsRUFBRSxhQUFXLEVBQUU7QUFBYSxjQUFJLEVBQUUsY0FBWSxFQUFFLFlBQVUsRUFBRTtBQUFpQixZQUFFLEVBQUU7QUFBZ0IsWUFBSSxJQUFFLEVBQUU7QUFBWSxjQUFJLEVBQUUsQ0FBQyxFQUFFLGNBQVk7QUFBRyxjQUFJLEVBQUUsQ0FBQyxFQUFFLGtCQUFnQjtBQUFHLFVBQUUsYUFBVyxFQUFFLGtCQUFnQixFQUFFLGNBQVk7QUFBTyxtQkFBUyxFQUFFLGVBQWEsRUFBRSxhQUFXO0FBQUEsTUFBSztBQUM3VCxlQUFTLEdBQUcsR0FBRSxHQUFFO0FBQUMsWUFBSSxJQUFFLEVBQUUsQ0FBQztBQUFFLFlBQUcsS0FBRyxXQUFTLEVBQUUsWUFBVztBQUFDLFlBQUUsYUFBVztBQUFLLGNBQUksSUFBRSxFQUFFLGFBQVcsRUFBRTtBQUEwQixZQUFFLFlBQVUsRUFBRTtBQUF5QixhQUFHLEdBQUUsQ0FBQztBQUFFLGNBQUU7QUFBRSxlQUFJLElBQUUsUUFBTyxHQUFFLElBQUUsRUFBRSw0QkFBMkI7QUFBQyxnQkFBSSxJQUFFLEVBQUUsQ0FBQztBQUFFLGNBQUUsYUFBVyxLQUFHO0FBQUUsY0FBRSxjQUFZLEVBQUU7QUFBMkIsY0FBRSxrQkFBZ0IsS0FBRztBQUFLLGdCQUFFO0FBQUUsZUFBRyxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFBLE1BQUM7QUFBQztBQUFDLFVBQUksS0FBRyxFQUFFLEVBQUMsa0JBQWlCLFNBQVMsR0FBRSxHQUFFLEdBQUU7QUFBQyxxQkFBVyxPQUFPLE1BQUksSUFBRSxFQUFDLFNBQVEsQ0FBQyxDQUFDLEVBQUM7QUFBRyxVQUFFLElBQUUsRUFBRSxLQUFHO0FBQUssYUFBSyxLQUFLLHlCQUF5QixHQUFFLEdBQUUsQ0FBQztBQUFBLE1BQUMsR0FBRSxxQkFBb0IsU0FBUyxHQUFFLEdBQUUsR0FBRTtBQUFDLHFCQUFXLE9BQU8sTUFBSSxJQUFFLEVBQUMsU0FBUSxDQUFDLENBQUMsRUFBQztBQUFHLFVBQUUsSUFBRSxFQUFFLEtBQUc7QUFBSyxhQUFLLEtBQUssNEJBQTRCLEdBQUUsR0FBRSxDQUFDO0FBQUEsTUFBQyxFQUFDLENBQUM7QUFBRSxlQUFTLEdBQUcsR0FBRSxHQUFFO0FBQUMsVUFBRSxHQUFFLElBQUcsQ0FBQztBQUFFLFVBQUUsR0FBRSxJQUFHLENBQUM7QUFBRSxVQUFFLEdBQUUsSUFBRyxDQUFDO0FBQUUsVUFBRSxHQUFFLEdBQUUsQ0FBQztBQUFFLFVBQUUsS0FBRyxDQUFDLEtBQUcsRUFBRSxHQUFFLElBQUcsQ0FBQyxHQUFFLEVBQUUsR0FBRSxJQUFHLENBQUMsS0FBRyxFQUFFLE1BQUksRUFBRSxHQUFFLEVBQUUsR0FBRSxFQUFFLEdBQUUsRUFBRSxHQUFFLEVBQUUsR0FBRSxFQUFFO0FBQUEsTUFBRTtBQUFDO0FBQUMsVUFBSSxLQUFHLENBQUMsR0FBRSxJQUFFLEVBQUUsNEJBQTBCLGNBQVksU0FBUyxZQUFXO0FBQUcsZUFBUyxHQUFHLEdBQUU7QUFBQyxZQUFJLElBQUUsQ0FBQztBQUFFO0FBQUcsWUFBRSxRQUFRLENBQUM7QUFBQSxlQUFRLElBQUUsRUFBRTtBQUFvQixlQUFPO0FBQUEsTUFBQztBQUFDLGVBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRTtBQUFDLFlBQUcsTUFBSTtBQUFHLGdCQUFNLElBQUksVUFBVSxxQkFBcUI7QUFBRSxhQUFLLElBQUU7QUFBSyxXQUFHLE1BQUssR0FBRSxDQUFDO0FBQUEsTUFBQztBQUNqOUIsZUFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFO0FBQUMsVUFBRSxPQUFLO0FBQUUsVUFBRSxPQUFLLEtBQUcsRUFBRTtBQUFLLFdBQUcsRUFBRSxJQUFJO0FBQUUsWUFBRSxFQUFFLEVBQUUsSUFBSTtBQUFFLFVBQUUsT0FBSztBQUFFLFVBQUUsS0FBRyxhQUFXLEVBQUUsT0FBSyxJQUFFO0FBQUssWUFBRSxFQUFFLENBQUM7QUFBRSxVQUFFLGFBQVcsRUFBRSxZQUFVLEVBQUUsYUFBVyxFQUFFLGNBQVksRUFBRSxrQkFBZ0I7QUFBSyxZQUFHLEVBQUU7QUFBa0IsaUJBQUssSUFBRSxFQUFFLEtBQUs7QUFBMkIsY0FBRSxLQUFLLDJCQUEyQixDQUFDO0FBQUE7QUFBTyxZQUFFLENBQUM7QUFBQSxNQUFDO0FBQUMsZUFBUyxFQUFFLEdBQUU7QUFBQyxVQUFFLE1BQUksRUFBRSxJQUFFLE1BQUcsR0FBRyxXQUFVO0FBQUMsaUJBQU8sR0FBRyxDQUFDO0FBQUEsUUFBQyxDQUFDO0FBQUEsTUFBRTtBQUNwVyxlQUFTLEdBQUcsR0FBRTtBQUFDLFlBQUk7QUFBRSxZQUFHLElBQUUsRUFBRSxHQUFFO0FBQUMsbUJBQVEsR0FBRTtBQUFHLGVBQUU7QUFBQyxnQkFBRSxNQUFJLElBQUUsSUFBRyxJQUFFO0FBQUUsa0JBQUUsRUFBRSxLQUFLLG9CQUFvQjtBQUFFLGtCQUFHLEVBQUUsQ0FBQyxNQUFJLElBQUUsRUFBRSxFQUFFLElBQUksTUFBSSxJQUFFLEVBQUU7QUFBRSxzQkFBTTtBQUFFLGtCQUFFO0FBQUEsWUFBTTtBQUFDLGNBQUU7QUFBQSxRQUFDO0FBQUMsU0FBQyxJQUFFLE1BQUksRUFBRSxZQUFZO0FBQUEsTUFBQztBQUN0SyxTQUFHLFVBQVUsY0FBWSxXQUFVO0FBQUMsWUFBSSxJQUFFO0FBQUUsWUFBRTtBQUFHLGFBQUssSUFBRTtBQUFHLFlBQUcsS0FBSyxHQUFFO0FBQUMsYUFBRyxJQUFJO0FBQUUsbUJBQVEsSUFBRSxHQUFFLEdBQUUsSUFBRSxLQUFLLEVBQUUsUUFBTyxLQUFJO0FBQUMsZ0JBQUUsS0FBSyxFQUFFLENBQUM7QUFBRSxnQkFBSSxJQUFFLEVBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRTtBQUFjLGNBQUUsZ0JBQWMsQ0FBQztBQUFFLGNBQUUsSUFBRSxDQUFDO0FBQUUsZ0JBQUcsRUFBRSxJQUFFO0FBQUUsbUJBQUksSUFBRSxHQUFFLElBQUUsRUFBRSxRQUFPLEtBQUk7QUFBQyxvQkFBSSxJQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFBRSxrQkFBRSxJQUFFLEVBQUU7QUFBYSxrQkFBRSxpQkFBZSxNQUFJLEVBQUUsZUFBYTtBQUFBLGNBQUs7QUFBQSxVQUFDO0FBQUMsZUFBSSxJQUFFLEtBQUssS0FBSyxvQkFBbUIsR0FBRSxJQUFFLEVBQUU7QUFBb0IsZUFBRyxNQUFLLENBQUM7QUFBRSxlQUFJLElBQUUsR0FBRSxJQUFFLEtBQUssRUFBRSxRQUFPLEtBQUk7QUFBQyxnQkFBRSxLQUFLLEVBQUUsQ0FBQztBQUFFLGdCQUFFLEVBQUUsQ0FBQztBQUFFLGdCQUFHLENBQUMsRUFBRSxjQUFjO0FBQU8sbUJBQUksSUFBRSxFQUFFLG9CQUFtQixHQUFFLElBQUUsRUFBRTtBQUFvQixtQkFBRyxNQUFLLEdBQUUsQ0FBQztBQUNyZixhQUFDLEtBQUcsSUFBRSxFQUFFLEVBQUUsa0JBQWtCLE1BQUksRUFBRSxVQUFRLEdBQUcsQ0FBQyxLQUFHLEVBQUUsTUFBSSxFQUFFLFlBQVk7QUFBRSxlQUFHLE1BQUssRUFBRSxHQUFFLEVBQUUsYUFBYTtBQUFFLGdCQUFHLElBQUUsRUFBRSxHQUFFO0FBQUMsbUJBQUksSUFBRSxHQUFFLElBQUUsRUFBRSxRQUFPO0FBQUksa0JBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFFO0FBQUssZ0JBQUUsSUFBRTtBQUFLLGdCQUFFLFNBQU8sRUFBRSxjQUFjLFdBQVMsRUFBRSxJQUFFO0FBQUEsWUFBRztBQUFDLGNBQUUsTUFBSSxFQUFFLElBQUUsT0FBRyxHQUFHLE1BQUssQ0FBQztBQUFBLFVBQUU7QUFBQyxjQUFFLEtBQUs7QUFBRSxjQUFFLENBQUM7QUFBRSxlQUFJLElBQUUsR0FBRSxJQUFFLEVBQUUsUUFBTztBQUFJLGdCQUFFLEVBQUUsQ0FBQyxFQUFFLHFCQUFvQixJQUFFLEVBQUUsQ0FBQyxNQUFJLEVBQUUsUUFBTSxFQUFFLElBQUUsRUFBRSxRQUFRLENBQUMsTUFBSSxFQUFFLEtBQUssQ0FBQztBQUFFLGVBQUksSUFBRSxHQUFFLElBQUUsRUFBRSxRQUFPLEtBQUk7QUFBQyxnQkFBRSxFQUFFLENBQUM7QUFBRSxnQkFBRSxNQUFJLE9BQUssS0FBSyxPQUFLO0FBQUUsZ0JBQUUsQ0FBQztBQUFFLGlCQUFJLElBQUUsRUFBRSxvQkFBbUIsR0FBRSxJQUFFLEVBQUU7QUFBb0Isa0JBQUcsVUFBUSxFQUFFO0FBQVUseUJBQVEsSUFBRSxFQUFFLENBQUMsRUFBRSxHQUFFQSxLQUFFLEdBQUVBLEtBQUUsRUFBRSxRQUFPQTtBQUFJLG9CQUFFLEtBQUssRUFBRUEsRUFBQyxDQUFDO0FBQUE7QUFDL2Ysa0JBQUUsS0FBSyxDQUFDO0FBQUUsZ0JBQUUsR0FBRyxDQUFDO0FBQUUsZ0JBQUUsR0FBRyxHQUFFLEVBQUUsUUFBTyxHQUFFLEVBQUUsTUFBTTtBQUFFLHFCQUFRLElBQUVBLEtBQUUsR0FBRSxJQUFFLFFBQU9BLEtBQUUsRUFBRSxXQUFTLElBQUUsRUFBRUEsRUFBQyxJQUFHQSxNQUFJO0FBQUMsdUJBQVEsSUFBRSxHQUFFLElBQUUsUUFBTyxJQUFFLEVBQUUsRUFBRSxXQUFTLElBQUUsRUFBRSxFQUFFLENBQUMsSUFBRztBQUFJLGtCQUFFLDhCQUE0QixLQUFHLEVBQUUsMkJBQTJCLENBQUMsR0FBRSxFQUFFLE9BQU8sRUFBRSxRQUFNLEdBQUUsQ0FBQztBQUFFLG1CQUFHLEVBQUU7QUFBQSxZQUFDO0FBQUMsZ0JBQUU7QUFBRSxpQkFBSSxJQUFFLFFBQU8sSUFBRSxFQUFFLFdBQVMsSUFBRSxFQUFFLENBQUMsSUFBRztBQUFJLG1CQUFJQSxLQUFFLEVBQUUsRUFBRSxLQUFLLEdBQUUsSUFBRSxFQUFFLE9BQU0sSUFBRSxFQUFFLFFBQU0sRUFBRSxHQUFFO0FBQUksb0JBQUUsRUFBRSxDQUFDLEdBQUUsRUFBRSw0QkFBNEIsR0FBRUEsRUFBQyxHQUFFLEVBQUUsT0FBTyxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQUMsWUFBRyxDQUFDLEVBQUUscUJBQW1CLENBQUMsS0FBSztBQUFFLGVBQUksSUFBRSxLQUFLLEtBQUssb0JBQW1CLEdBQUUsSUFBRSxFQUFFO0FBQW9CLGdCQUFFLEVBQUUsQ0FBQyxHQUFFLEVBQUUsOEJBQzdlLEtBQUssUUFBTSxXQUFTLEVBQUUsYUFBVyxFQUFFLGdCQUFjLEtBQUssS0FBSywyQkFBMkIsQ0FBQztBQUFFLGFBQUssSUFBRTtBQUFHLFlBQUU7QUFBRSxjQUFJLEdBQUc7QUFBQSxNQUFDO0FBQUUsZUFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFO0FBQUMsWUFBSSxJQUFFLEVBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRTtBQUFFLFVBQUUsSUFBRTtBQUFLLGNBQUksS0FBRyxJQUFFLEVBQUUsRUFBRSxFQUFFLGdCQUFjLFlBQVksTUFBSSxFQUFFLENBQUM7QUFBRyxhQUFHLEVBQUUsQ0FBQyxFQUFFLGNBQWMsS0FBSyxDQUFDLEdBQUUsRUFBRSxlQUFhLEtBQUcsRUFBRSxlQUFhO0FBQU8sY0FBSSxFQUFFLGdCQUFjLEVBQUUsaUJBQWUsRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFFO0FBQUEsTUFBRztBQUFDLGVBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRTtBQUFDLGlCQUFRLElBQUUsR0FBRSxJQUFFLFFBQU8sSUFBRSxFQUFFLFdBQVMsSUFBRSxFQUFFLENBQUMsSUFBRztBQUFJLGNBQUcsVUFBUSxFQUFFLFdBQVU7QUFBQyxnQkFBSSxJQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQWMsaUJBQUcsRUFBRSxVQUFRLEdBQUcsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQU0sY0FBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQUEsTUFBQztBQUM5ZSxlQUFTLEdBQUcsR0FBRSxHQUFFO0FBQUMsVUFBRSw2QkFBNkIsSUFBSSxNQUFNLFlBQVksQ0FBQztBQUFFLFlBQUUsRUFBRSxDQUFDO0FBQUUsVUFBRSxnQkFBYyxHQUFHLEdBQUUsRUFBRSxZQUFZO0FBQUEsTUFBQztBQUFDLGVBQVMsR0FBRyxHQUFFO0FBQUMsVUFBRSxJQUFFLEVBQUUsS0FBRyxDQUFDO0FBQUUsVUFBRSxJQUFFLEVBQUUsS0FBRyxDQUFDO0FBQUUsVUFBRSxJQUFFLEVBQUUsS0FBRyxDQUFDO0FBQUEsTUFBQztBQUFDLGVBQVMsR0FBRyxHQUFFO0FBQUMsWUFBRyxFQUFFLEtBQUcsRUFBRSxFQUFFLFFBQU87QUFBQyxtQkFBUSxJQUFFLEVBQUUsR0FBRSxHQUFFLElBQUUsR0FBRSxJQUFFLEVBQUUsUUFBTyxLQUFJO0FBQUMsZ0JBQUksSUFBRSxFQUFFLENBQUM7QUFBRSxlQUFHLENBQUM7QUFBRSxnQkFBSSxJQUFFLEVBQUU7QUFBbUIsZUFBRyxDQUFDO0FBQUUsZ0JBQUUsRUFBRSxDQUFDO0FBQUUsY0FBRSxLQUFHLEVBQUUsS0FBRyxLQUFHO0FBQUUsZ0JBQUUsR0FBRyxDQUFDO0FBQUUsY0FBRSxFQUFFLENBQUMsS0FBRyxJQUFFLEtBQUcsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxJQUFFLE1BQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFFLENBQUMsQ0FBQztBQUFFLGNBQUUsRUFBRSxLQUFLLENBQUM7QUFBQSxVQUFDO0FBQUMsY0FBRztBQUFFLHFCQUFRLEtBQUs7QUFBRSxnQkFBRSxFQUFFLENBQUMsSUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFBRSxZQUFFLElBQUUsQ0FBQztBQUFBLFFBQUM7QUFBQSxNQUFDO0FBQzNhLGVBQVMsR0FBRyxHQUFFO0FBQUMsWUFBSSxJQUFFLEVBQUUsUUFBTSxFQUFFLGFBQWEsTUFBTSxLQUFHO0FBQWEsZUFBTyxFQUFFLElBQUU7QUFBQSxNQUFDO0FBQUMsZUFBUyxHQUFHLEdBQUU7QUFBQyxlQUFPLEVBQUUsS0FBSyxTQUFTLEdBQUUsR0FBRTtBQUFDLGNBQUUsR0FBRyxDQUFDO0FBQUUsbUJBQVEsSUFBRSxHQUFHLENBQUMsR0FBRSxJQUFFLEdBQUUsSUFBRSxFQUFFLFFBQU8sS0FBSTtBQUFDLGdCQUFFLEVBQUUsQ0FBQztBQUFFLGdCQUFJLElBQUUsRUFBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSTtBQUFFLHFCQUFPLElBQUUsR0FBRyxFQUFFLGtCQUFrQixHQUFFLEVBQUUsUUFBUSxDQUFDLElBQUUsRUFBRSxRQUFRLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQyxDQUFDO0FBQUEsTUFBQztBQUMvUCxlQUFTLEdBQUcsR0FBRSxHQUFFO0FBQUMsWUFBRyxFQUFFLEdBQUU7QUFBQyxhQUFHLENBQUM7QUFBRSxjQUFJLElBQUUsRUFBRSxHQUFFO0FBQUUsZUFBSSxLQUFLO0FBQUUscUJBQVEsSUFBRSxFQUFFLENBQUMsR0FBRSxJQUFFLEdBQUUsSUFBRSxFQUFFLFFBQU8sS0FBSTtBQUFDLGtCQUFJLElBQUUsRUFBRSxDQUFDO0FBQUUsa0JBQUcsR0FBRyxHQUFFLENBQUMsR0FBRTtBQUFDLGtCQUFFLE9BQU8sR0FBRSxDQUFDO0FBQUUsb0JBQUlBLEtBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQztBQUFFLHFCQUFHQSxPQUFJLEVBQUUsRUFBRSxPQUFPQSxJQUFFLENBQUMsSUFBR0EsS0FBRSxFQUFFLEVBQUUsa0JBQWtCLE1BQUlBLEdBQUUsS0FBR0EsR0FBRTtBQUFLO0FBQUksb0JBQUUsRUFBRSxDQUFDO0FBQUUsb0JBQUdBLEtBQUUsRUFBRTtBQUFFLDJCQUFRLElBQUUsR0FBRSxJQUFFQSxHQUFFLFFBQU8sS0FBSTtBQUFDLHdCQUFJLElBQUVBLEdBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRTtBQUEwQix5QkFBRyxFQUFFLDJCQUEyQixDQUFDO0FBQUEsa0JBQUM7QUFBQyxrQkFBRSxJQUFFLENBQUM7QUFBRSxrQkFBRSxnQkFBYyxDQUFDO0FBQUUsZ0JBQUFBLEtBQUU7QUFBQSxjQUFFO0FBQUEsWUFBQztBQUFDLGlCQUFPQTtBQUFBLFFBQUM7QUFBQSxNQUFDO0FBQUMsZUFBUyxHQUFHLEdBQUU7QUFBQyxXQUFHLENBQUM7QUFBRSxlQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUcsQ0FBQyxFQUFFLEVBQUU7QUFBQSxNQUFPO0FBQ3hhLE9BQUMsU0FBUyxHQUFFO0FBQUMsVUFBRSxZQUFVLGlCQUFpQjtBQUFVLFdBQUcsR0FBRSxVQUFVO0FBQUUsV0FBRyxDQUFDO0FBQUUsZUFBTyxpQkFBaUIsR0FBRSxFQUFDLFVBQVMsRUFBQyxPQUFNLEtBQUssd0JBQXVCLGNBQWEsS0FBRSxHQUFFLFVBQVMsRUFBQyxPQUFNLHNCQUFxQixjQUFhLEtBQUUsR0FBRSxXQUFVLEVBQUMsT0FBTSxNQUFLLGNBQWEsS0FBRSxFQUFDLENBQUM7QUFBRSxTQUFDLGFBQVksZ0JBQWUsUUFBUSxFQUFFLFFBQVEsU0FBUyxHQUFFO0FBQUMsaUJBQU8sZUFBZSxHQUFFLEdBQUUsRUFBQyxPQUFNLFFBQU8sY0FBYSxLQUFFLENBQUM7QUFBQSxRQUFDLENBQUM7QUFBRSxTQUFDLGlCQUFnQixXQUFVLGFBQWEsRUFBRSxRQUFRLFNBQVMsR0FBRTtBQUFDLGlCQUFPLGVBQWUsR0FBRSxHQUFFO0FBQUEsWUFBQyxLQUFJLFdBQVU7QUFBQyxxQkFBTyxLQUFLLEtBQUssQ0FBQztBQUFBLFlBQUM7QUFBQSxZQUNuZixjQUFhO0FBQUEsVUFBRSxDQUFDO0FBQUEsUUFBQyxDQUFDO0FBQUEsTUFBQyxHQUFHLEdBQUcsU0FBUztBQUNsQyxVQUFHLE9BQU8sa0JBQWdCLE9BQU8sZUFBZSxVQUFRLEVBQUUsS0FBRyxDQUFDLEVBQUUsbUJBQWtCO0FBQUMsWUFBSSxLQUFHLG9CQUFJO0FBQUksYUFBRyxXQUFVO0FBQUMsY0FBSSxJQUFFLENBQUM7QUFBRSxhQUFHLFFBQVEsU0FBUyxHQUFFLEdBQUU7QUFBQyxjQUFFLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQztBQUFBLFVBQUMsQ0FBQztBQUFFLGFBQUcsTUFBTTtBQUFFLG1CQUFRLElBQUUsR0FBRSxJQUFFLEVBQUUsUUFBTyxLQUFJO0FBQUMsZ0JBQUksSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQUUsY0FBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEVBQUUsNkJBQTZCLElBQUUsRUFBRSxnQ0FBZ0M7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFFLGFBQUcsU0FBUyxpQkFBaUIsb0JBQW1CLFdBQVU7QUFBQyxjQUFFO0FBQUcsYUFBRztBQUFBLFFBQUMsR0FBRSxFQUFDLE1BQUssS0FBRSxDQUFDO0FBQUUsWUFBSSxLQUFHLFNBQVMsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsR0FBRSxJQUFFLGtCQUFnQjtBQUFJLGNBQUcsS0FBRztBQUFFLGNBQUUsVUFBVSxvQkFBa0IsRUFBRSxVQUFVLCtCQUM5ZCxXQUFVO0FBQUMsa0JBQUUsR0FBRyxJQUFJLE1BQUssSUFBRSxJQUFFLEtBQUssQ0FBQyxNQUFJLEtBQUssQ0FBQyxJQUFFLE1BQUcsS0FBRyxFQUFFLEtBQUssSUFBSTtBQUFBLFlBQUUsR0FBRSxFQUFFLFVBQVUsdUJBQXFCLEVBQUUsVUFBVSxrQ0FBZ0MsV0FBVTtBQUFDLGtCQUFFLEtBQUssZUFBYSxHQUFHLElBQUksTUFBSyxLQUFFLElBQUUsS0FBSyxDQUFDLE1BQUksS0FBSyxDQUFDLElBQUUsT0FBRyxLQUFHLEVBQUUsS0FBSyxJQUFJO0FBQUEsWUFBRTtBQUFFLGlCQUFPO0FBQUEsUUFBQyxHQUFFLEtBQUcsT0FBTyxlQUFlLFFBQU8sS0FBRyxTQUFTLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFLFVBQVUsbUJBQWtCLElBQUUsRUFBRSxVQUFVO0FBQXFCLGFBQUcsS0FBSyxPQUFPLGdCQUFlLEdBQUUsR0FBRyxHQUFFLEdBQUUsQ0FBQyxDQUFDO0FBQUUsWUFBRSxVQUFVLG9CQUFrQjtBQUFFLFlBQUUsVUFBVSx1QkFBcUI7QUFBQSxRQUFDO0FBQUUsZUFBTyxlQUFlLFNBQzllO0FBQUcsZUFBTyxlQUFlLE9BQU8sc0JBQXNCLFdBQVUsVUFBUyxFQUFDLE9BQU0sSUFBRyxjQUFhLEtBQUUsQ0FBQztBQUFBLE1BQUM7QUFBQyxlQUFTLEVBQUUsR0FBRTtBQUFDLFlBQUUsRUFBRSxvQkFBb0I7QUFBRSxZQUFHLEVBQUUsQ0FBQztBQUFFLGlCQUFPO0FBQUEsTUFBQztBQUFDO0FBQUMsZUFBUyxFQUFFLEdBQUU7QUFBQyxhQUFLLE9BQUs7QUFBQSxNQUFDO0FBQUMsVUFBRSxFQUFFO0FBQVUsUUFBRSxtQkFBaUIsU0FBUyxHQUFFLEdBQUUsR0FBRTtBQUFDLGVBQU8sS0FBSyxLQUFLLHlCQUF5QixHQUFFLEdBQUUsQ0FBQztBQUFBLE1BQUM7QUFBRSxRQUFFLHNCQUFvQixTQUFTLEdBQUUsR0FBRSxHQUFFO0FBQUMsZUFBTyxLQUFLLEtBQUssNEJBQTRCLEdBQUUsR0FBRSxDQUFDO0FBQUEsTUFBQztBQUFFLFFBQUUsY0FBWSxTQUFTLEdBQUU7QUFBQyxlQUFPLEtBQUssS0FBSyxvQkFBb0IsQ0FBQztBQUFBLE1BQUM7QUFBRSxRQUFFLGVBQWEsU0FBUyxHQUFFLEdBQUU7QUFBQyxlQUFPLEtBQUssS0FBSyxxQkFBcUIsR0FBRSxDQUFDO0FBQUEsTUFBQztBQUFFLFFBQUUsY0FBWSxTQUFTLEdBQUU7QUFBQyxlQUFPLEtBQUssS0FBSyxvQkFBb0IsQ0FBQztBQUFBLE1BQUM7QUFBRSxRQUFFLGVBQWEsU0FBUyxHQUFFLEdBQUU7QUFBQyxlQUFPLEtBQUssS0FBSyxxQkFBcUIsR0FBRSxDQUFDO0FBQUEsTUFBQztBQUM3b0IsUUFBRSxZQUFVLFNBQVMsR0FBRTtBQUFDLGVBQU8sS0FBSyxLQUFLLGtCQUFrQixDQUFDO0FBQUEsTUFBQztBQUFFLFFBQUUsY0FBWSxTQUFTLEdBQUU7QUFBQyxlQUFPLEtBQUssS0FBSyxvQkFBb0IsQ0FBQztBQUFBLE1BQUM7QUFBRSxRQUFFLFdBQVMsU0FBUyxHQUFFO0FBQUMsZUFBTyxLQUFLLEtBQUssaUJBQWlCLENBQUM7QUFBQSxNQUFDO0FBQUUsUUFBRSxnQkFBYyxTQUFTLEdBQUU7QUFBQyxlQUFPLEtBQUssS0FBSyxzQkFBc0IsQ0FBQztBQUFBLE1BQUM7QUFBRSxRQUFFLGVBQWEsU0FBUyxHQUFFLEdBQUU7QUFBQyxhQUFLLEtBQUsscUJBQXFCLEdBQUUsQ0FBQztBQUFBLE1BQUM7QUFBRSxRQUFFLGVBQWEsU0FBUyxHQUFFO0FBQUMsZUFBTyxLQUFLLEtBQUssNEJBQTRCLENBQUM7QUFBQSxNQUFDO0FBQUUsUUFBRSxrQkFBZ0IsU0FBUyxHQUFFO0FBQUMsYUFBSyxLQUFLLHdCQUF3QixDQUFDO0FBQUEsTUFBQztBQUN0ZCxRQUFFLGtCQUFnQixTQUFTLEdBQUUsR0FBRTtBQUFDLGVBQU8sS0FBSyxLQUFLLHdCQUF3QixHQUFFLENBQUM7QUFBQSxNQUFDO0FBQUUsUUFBRSxlQUFhLFNBQVMsR0FBRTtBQUFDLGVBQU8sS0FBSyxLQUFLLHFCQUFxQixDQUFDO0FBQUEsTUFBQztBQUFFLFFBQUUsUUFBTSxXQUFVO0FBQUMsYUFBSyxLQUFLLHFCQUFxQjtBQUFBLE1BQUM7QUFBRSxRQUFFLE9BQUssV0FBVTtBQUFDLGFBQUssS0FBSyxhQUFhO0FBQUEsTUFBQztBQUFFLFFBQUUsYUFBVyxTQUFTLEdBQUUsR0FBRTtBQUFDLFlBQUcsS0FBSyxLQUFLLGFBQVcsS0FBSztBQUFjLGlCQUFPLEtBQUssS0FBSyxtQkFBbUIsR0FBRSxDQUFDO0FBQUEsTUFBQztBQUFFLFFBQUUsaUJBQWUsU0FBUyxHQUFFO0FBQUMsWUFBRyxLQUFLLEtBQUssYUFBVyxLQUFLO0FBQWMsaUJBQU8sS0FBSyxLQUFLLHVCQUF1QixDQUFDO0FBQUEsTUFBQztBQUN2ZCxRQUFFLG9CQUFrQixTQUFTLEdBQUUsR0FBRTtBQUFDLGVBQU8sS0FBSyxLQUFLLDBCQUEwQixHQUFFLENBQUM7QUFBQSxNQUFDO0FBQUUsUUFBRSxtQkFBaUIsU0FBUyxHQUFFLEdBQUU7QUFBQyxlQUFPLEtBQUssS0FBSyx5QkFBeUIsR0FBRSxDQUFDO0FBQUEsTUFBQztBQUFFLFFBQUUsZ0JBQWMsU0FBUyxHQUFFO0FBQUMsZUFBTyxLQUFLLEtBQUssc0JBQXNCLENBQUM7QUFBQSxNQUFDO0FBQUUsUUFBRSxtQkFBaUIsU0FBUyxHQUFFLEdBQUU7QUFBQyxlQUFPLEtBQUssS0FBSyx5QkFBeUIsR0FBRSxDQUFDO0FBQUEsTUFBQztBQUFFLFFBQUUsZ0JBQWMsU0FBUyxHQUFFO0FBQUMsWUFBRyxXQUFTLEtBQUssS0FBSztBQUFVLGlCQUFPLEtBQUssS0FBSyxzQkFBc0IsQ0FBQztBQUFBLE1BQUM7QUFDamEsUUFBRSxTQUFPLFNBQVMsR0FBRTtBQUFDLGlCQUFRLElBQUUsQ0FBQyxHQUFFLElBQUUsR0FBRSxJQUFFLFVBQVUsUUFBTyxFQUFFO0FBQUUsWUFBRSxDQUFDLElBQUUsVUFBVSxDQUFDO0FBQUUsZUFBTyxLQUFLLEtBQUssZUFBZSxNQUFNLEtBQUssTUFBSyxFQUFFLENBQUMsQ0FBQztBQUFBLE1BQUM7QUFBRSxRQUFFLFVBQVEsU0FBUyxHQUFFO0FBQUMsaUJBQVEsSUFBRSxDQUFDLEdBQUUsSUFBRSxHQUFFLElBQUUsVUFBVSxRQUFPLEVBQUU7QUFBRSxZQUFFLENBQUMsSUFBRSxVQUFVLENBQUM7QUFBRSxlQUFPLEtBQUssS0FBSyxnQkFBZ0IsTUFBTSxLQUFLLE1BQUssRUFBRSxDQUFDLENBQUM7QUFBQSxNQUFDO0FBQUUsUUFBRSxRQUFNLFNBQVMsR0FBRTtBQUFDLGlCQUFRLElBQUUsQ0FBQyxHQUFFLElBQUUsR0FBRSxJQUFFLFVBQVUsUUFBTyxFQUFFO0FBQUUsWUFBRSxDQUFDLElBQUUsVUFBVSxDQUFDO0FBQUUsZUFBTyxLQUFLLEtBQUssY0FBYyxNQUFNLEtBQUssTUFBSyxFQUFFLENBQUMsQ0FBQztBQUFBLE1BQUM7QUFDaFosUUFBRSxTQUFPLFNBQVMsR0FBRTtBQUFDLGlCQUFRLElBQUUsQ0FBQyxHQUFFLElBQUUsR0FBRSxJQUFFLFVBQVUsUUFBTyxFQUFFO0FBQUUsWUFBRSxDQUFDLElBQUUsVUFBVSxDQUFDO0FBQUUsZUFBTyxLQUFLLEtBQUssZUFBZSxNQUFNLEtBQUssTUFBSyxFQUFFLENBQUMsQ0FBQztBQUFBLE1BQUM7QUFBRSxRQUFFLFNBQU8sV0FBVTtBQUFDLGVBQU8sS0FBSyxLQUFLLGVBQWU7QUFBQSxNQUFDO0FBQUUsUUFBRSxjQUFZLFNBQVMsR0FBRTtBQUFDLGlCQUFRLElBQUUsQ0FBQyxHQUFFLElBQUUsR0FBRSxJQUFFLFVBQVUsUUFBTyxFQUFFO0FBQUUsWUFBRSxDQUFDLElBQUUsVUFBVSxDQUFDO0FBQUUsZUFBTyxLQUFLLEtBQUssb0JBQW9CLE1BQU0sS0FBSyxNQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQUEsTUFBQztBQUMzVSxTQUFHLE9BQU8saUJBQWlCLEVBQUUsV0FBVTtBQUFBLFFBQUMsZUFBYyxFQUFDLGNBQWEsTUFBRyxZQUFXLE1BQUcsS0FBSSxXQUFVO0FBQUMsY0FBRyxFQUFFLEtBQUssSUFBSSxLQUFHLEtBQUssS0FBSyxhQUFXLEtBQUs7QUFBYyxtQkFBTyxLQUFLLEtBQUs7QUFBQSxRQUFxQixFQUFDO0FBQUEsUUFBRSxnQkFBZSxFQUFDLGNBQWEsTUFBRyxZQUFXLE1BQUcsS0FBSSxXQUFVO0FBQUMsaUJBQU8sS0FBSztBQUFBLFFBQWEsRUFBQztBQUFBLFFBQUUsTUFBSyxFQUFDLGNBQWEsTUFBRyxZQUFXLE1BQUcsS0FBSSxXQUFVO0FBQUMsY0FBRyxFQUFFLEtBQUssSUFBSTtBQUFFLG1CQUFPLEtBQUssS0FBSztBQUFBLFFBQUksRUFBQztBQUFBLFFBQUUsWUFBVyxFQUFDLGNBQWEsTUFBRyxZQUFXLE1BQUcsS0FBSSxXQUFVO0FBQUMsaUJBQU8sS0FBSyxLQUFLO0FBQUEsUUFBa0IsRUFBQztBQUFBLFFBQUUsWUFBVztBQUFBLFVBQUMsY0FBYTtBQUFBLFVBQ2xmLFlBQVc7QUFBQSxVQUFHLEtBQUksV0FBVTtBQUFDLG1CQUFPLEtBQUssS0FBSztBQUFBLFVBQWtCO0FBQUEsUUFBQztBQUFBLFFBQUUsV0FBVSxFQUFDLGNBQWEsTUFBRyxZQUFXLE1BQUcsS0FBSSxXQUFVO0FBQUMsaUJBQU8sS0FBSyxLQUFLO0FBQUEsUUFBaUIsRUFBQztBQUFBLFFBQUUsYUFBWSxFQUFDLGNBQWEsTUFBRyxZQUFXLE1BQUcsS0FBSSxXQUFVO0FBQUMsaUJBQU8sS0FBSyxLQUFLO0FBQUEsUUFBbUIsRUFBQztBQUFBLFFBQUUsaUJBQWdCLEVBQUMsY0FBYSxNQUFHLFlBQVcsTUFBRyxLQUFJLFdBQVU7QUFBQyxpQkFBTyxLQUFLLEtBQUs7QUFBQSxRQUF1QixFQUFDO0FBQUEsUUFBRSxZQUFXLEVBQUMsY0FBYSxNQUFHLFlBQVcsTUFBRyxLQUFJLFdBQVU7QUFBQyxpQkFBTyxLQUFLLEtBQUs7QUFBQSxRQUFrQixFQUFDO0FBQUEsUUFBRSxlQUFjO0FBQUEsVUFBQyxjQUFhO0FBQUEsVUFBRyxZQUFXO0FBQUEsVUFDbmYsS0FBSSxXQUFVO0FBQUMsbUJBQU8sS0FBSyxLQUFLO0FBQUEsVUFBcUI7QUFBQSxRQUFDO0FBQUEsUUFBRSxtQkFBa0IsRUFBQyxjQUFhLE1BQUcsWUFBVyxNQUFHLEtBQUksV0FBVTtBQUFDLGlCQUFPLEtBQUssS0FBSztBQUFBLFFBQXlCLEVBQUM7QUFBQSxRQUFFLGtCQUFpQixFQUFDLGNBQWEsTUFBRyxZQUFXLE1BQUcsS0FBSSxXQUFVO0FBQUMsaUJBQU8sS0FBSyxLQUFLO0FBQUEsUUFBd0IsRUFBQztBQUFBLFFBQUUsb0JBQW1CLEVBQUMsY0FBYSxNQUFHLFlBQVcsTUFBRyxLQUFJLFdBQVU7QUFBQyxpQkFBTyxLQUFLLEtBQUs7QUFBQSxRQUEwQixFQUFDO0FBQUEsUUFBRSx3QkFBdUIsRUFBQyxjQUFhLE1BQUcsWUFBVyxNQUFHLEtBQUksV0FBVTtBQUFDLGlCQUFPLEtBQUssS0FBSztBQUFBLFFBQThCLEVBQUM7QUFBQSxRQUNwZixVQUFTLEVBQUMsY0FBYSxNQUFHLFlBQVcsTUFBRyxLQUFJLFdBQVU7QUFBQyxpQkFBTyxLQUFLLEtBQUs7QUFBQSxRQUFnQixFQUFDO0FBQUEsUUFBRSxtQkFBa0IsRUFBQyxjQUFhLE1BQUcsWUFBVyxNQUFHLEtBQUksV0FBVTtBQUFDLGlCQUFPLEtBQUssS0FBSztBQUFBLFFBQXlCLEVBQUM7QUFBQSxRQUFFLFlBQVcsRUFBQyxjQUFhLE1BQUcsWUFBVyxNQUFHLEtBQUksV0FBVTtBQUFDLGlCQUFPLEtBQUssS0FBSztBQUFBLFFBQWtCLEVBQUM7QUFBQSxRQUFFLGNBQWEsRUFBQyxjQUFhLE1BQUcsWUFBVyxNQUFHLEtBQUksV0FBVTtBQUFDLGlCQUFPLEtBQUssS0FBSztBQUFBLFFBQW9CLEVBQUM7QUFBQSxRQUFFLGFBQVksRUFBQyxjQUFhLE1BQUcsWUFBVyxNQUFHLEtBQUksV0FBVTtBQUFDLGlCQUFPLEtBQUssS0FBSztBQUFBLFFBQW1CLEVBQUM7QUFBQSxRQUFFLFdBQVU7QUFBQSxVQUFDLGNBQWE7QUFBQSxVQUNuZ0IsWUFBVztBQUFBLFVBQUcsS0FBSSxXQUFVO0FBQUMsbUJBQU8sS0FBSyxLQUFLO0FBQUEsVUFBaUI7QUFBQSxVQUFFLEtBQUksU0FBUyxHQUFFO0FBQUMsaUJBQUssS0FBSyxvQkFBa0I7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFBLFFBQUUsYUFBWSxFQUFDLGNBQWEsTUFBRyxZQUFXLE1BQUcsS0FBSSxXQUFVO0FBQUMsaUJBQU8sS0FBSyxLQUFLO0FBQUEsUUFBbUIsR0FBRSxLQUFJLFNBQVMsR0FBRTtBQUFDLGVBQUssS0FBSyxzQkFBb0I7QUFBQSxRQUFDLEVBQUM7QUFBQSxRQUFFLE1BQUssRUFBQyxjQUFhLE1BQUcsWUFBVyxNQUFHLEtBQUksV0FBVTtBQUFDLGlCQUFPLEtBQUssS0FBSztBQUFBLFFBQVksR0FBRSxLQUFJLFNBQVMsR0FBRTtBQUFDLGVBQUssS0FBSyxlQUFhO0FBQUEsUUFBQyxFQUFDO0FBQUEsUUFBRSxXQUFVLEVBQUMsY0FBYSxNQUFHLFlBQVcsTUFBRyxLQUFJLFdBQVU7QUFBQyxpQkFBTyxLQUFLLEtBQUs7QUFBQSxRQUFpQixHQUFFLEtBQUksU0FBUyxHQUFFO0FBQUMsZUFBSyxLQUFLLG9CQUN0ZjtBQUFBLFFBQUMsRUFBQztBQUFBLE1BQUMsQ0FBQztBQUFFLGVBQVMsR0FBRyxHQUFFO0FBQUMsZUFBTyxlQUFlLEVBQUUsV0FBVSxHQUFFLEVBQUMsS0FBSSxXQUFVO0FBQUMsaUJBQU8sS0FBSyxLQUFLLGFBQVcsQ0FBQztBQUFBLFFBQUMsR0FBRSxLQUFJLFNBQVMsR0FBRTtBQUFDLGVBQUssS0FBSyxhQUFXLENBQUMsSUFBRTtBQUFBLFFBQUMsR0FBRSxjQUFhLEtBQUUsQ0FBQztBQUFBLE1BQUM7QUFBQyxTQUFHLFFBQVEsU0FBUyxHQUFFO0FBQUMsZUFBTyxHQUFHLENBQUM7QUFBQSxNQUFDLENBQUM7QUFBRSxTQUFHLFFBQVEsU0FBUyxHQUFFO0FBQUMsZUFBTyxHQUFHLENBQUM7QUFBQSxNQUFDLENBQUM7QUFBRSxVQUFJLEtBQUcsb0JBQUk7QUFBUSxlQUFTLEdBQUcsR0FBRTtBQUFDLFlBQUcsRUFBRSxDQUFDLEtBQUcsYUFBYTtBQUFFLGlCQUFPO0FBQUUsWUFBSSxJQUFFLEdBQUcsSUFBSSxDQUFDO0FBQUUsY0FBSSxJQUFFLElBQUksRUFBRSxDQUFDLEdBQUUsR0FBRyxJQUFJLEdBQUUsQ0FBQztBQUFHLGVBQU87QUFBQSxNQUFDO0FBQUM7QUFBQyxVQUFHLEVBQUUsR0FBRTtBQUFDLFlBQUksS0FBRyxFQUFFLElBQUUsU0FBUyxHQUFFO0FBQUMsaUJBQU87QUFBQSxRQUFDLElBQUUsU0FBUyxHQUFFO0FBQUMsYUFBRyxDQUFDO0FBQUUsYUFBRyxDQUFDO0FBQUUsaUJBQU87QUFBQSxRQUFDO0FBQUUsZUFBTyxXQUFTO0FBQUEsVUFBQyxPQUFNLEVBQUU7QUFBQSxVQUFFLE9BQU07QUFBQSxVQUFHLGFBQVk7QUFBQSxVQUFFLFNBQVE7QUFBQSxVQUFHLE9BQU07QUFBQSxVQUFFLGNBQWEsU0FBUyxHQUFFO0FBQUMsYUFBQyxFQUFFLEtBQUcsRUFBRSxLQUFHLEdBQUcsQ0FBQztBQUFBLFVBQUM7QUFBQSxVQUFFLFVBQVM7QUFBQSxVQUFFLGlCQUFnQjtBQUFBLFVBQUcsaUJBQWdCO0FBQUEsVUFBRyxtQkFBa0I7QUFBQSxVQUFHLDBCQUF5QixFQUFFO0FBQUEsVUFBeUIsbUJBQWtCLEVBQUU7QUFBQSxVQUFrQix1QkFBc0I7QUFBQSxVQUFHLE1BQUssRUFBRSxJQUFFLEtBQUc7QUFBQSxVQUFHLGNBQWEsU0FBSyxFQUFFLElBQUUsS0FBRyxTQUFTLEdBQUU7QUFBQyxtQkFBTztBQUFBLFVBQUM7QUFBQSxVQUFFLFNBQVE7QUFBQSxVQUFFLGNBQWE7QUFBQSxVQUFHLFNBQVEsRUFBRTtBQUFBLFVBQUUsZUFBYyxFQUFFO0FBQUEsVUFBRSxlQUFjO0FBQUEsVUFDbjJCLFlBQVc7QUFBQSxVQUFHLG1CQUFrQjtBQUFBLFVBQUcsNkJBQTRCLEVBQUU7QUFBQSxRQUEyQjtBQUFFLFdBQUc7QUFBRSxXQUFHLFVBQVU7QUFBRSxlQUFPLGVBQWUsVUFBUyxrQkFBaUIsR0FBRyxhQUFhO0FBQUUsVUFBRSxPQUFPLFdBQVUsSUFBRyxVQUFVO0FBQUUsVUFBRSxJQUFFLEVBQUUsS0FBRyxFQUFFLFFBQVEsV0FBVSxFQUFFLEtBQUcsR0FBRyxHQUFFLEdBQUc7QUFBRyxXQUFHO0FBQUUsZUFBTyxRQUFNO0FBQUcsZUFBTyxjQUFZO0FBQUcsZUFBTyxhQUFXO0FBQUcsZUFBTyxhQUFXO0FBQUEsTUFBRTtBQUFDO0FBQUEsSUFBQyxHQUFHLEtBQUtELFFBQUk7QUFBQTtBQUFBOzs7QUM5SHJXO0FBQUE7QUFBQTtBQUFBO0FBQ0EsS0FBQyxTQUFTRSxZQUFXO0FBQ3JCLFVBQUksRUFBRSxjQUFZLFNBQVMsY0FBYyxLQUFLLEVBQUUsYUFBVyxDQUFDLEtBQ3pEO0FBRUgsU0FBQyxXQUFZO0FBQ1osY0FBSSxZQUFZLFNBQVMsY0FBYyxLQUFLLEVBQUU7QUFDOUMsd0JBQWMsVUFBVSxZQUFZLFVBQVUsVUFDN0MsU0FBVSxPQUFPLFVBQVU7QUFDMUIsZ0JBQUksY0FBYyxLQUFLLE9BQU8saUJBQWlCLEtBQUs7QUFFcEQsZ0JBQUk7QUFDSCxrQkFBSSxhQUFhO0FBQUEsWUFDbEIsU0FBUyxHQUFHO0FBQ1gsbUJBQUssZUFBZSxTQUFVLFNBQVMsTUFBTTtBQUM1QyxvQkFBSSxFQUFFLGdCQUFnQjtBQUFlLHlCQUFPLElBQUksYUFBYSxTQUFTLElBQUk7QUFDMUUscUJBQUssVUFBVTtBQUNmLHFCQUFLLE9BQU87QUFBQSxjQUNiO0FBQUEsWUFDRDtBQUVBLGdCQUFJO0FBQ0osZ0JBQUksRUFBRSxlQUFlO0FBQWlCLHNCQUFRO0FBQzlDLGdCQUFJLENBQUMsVUFBVSxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssS0FBSyxjQUFjO0FBQUksc0JBQVE7QUFDN0UsZ0JBQUk7QUFBTyxvQkFBTSxJQUFJLGFBQWEsK0NBQWdELGNBQWMsWUFBYyxpQkFBaUIsS0FBTSxLQUFLO0FBRTFJLGdCQUFJLENBQUMsS0FBSyxTQUFTLFdBQVc7QUFBRyxxQkFBTztBQUd4QyxnQkFBSSxrQkFBa0IsQ0FBQztBQUN2QixnQkFBSSxnQkFBZ0I7QUFDcEIscUJBQVMsSUFBSSxHQUFHLElBQUksS0FBSyxRQUFRLEVBQUU7QUFDbEMsa0JBQUksbUJBQW1CLEtBQUssS0FBSyxDQUFDO0FBQUcsZ0NBQWdCO0FBQUEsdUJBQzVDLGdCQUFnQixLQUFLLEtBQUssQ0FBQztBQUFHO0FBQ3hDLG1CQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7QUFBRyw4QkFBZ0IsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzlELGlCQUFLLElBQUksR0FBRyxJQUFJLGdCQUFnQixRQUFRLEVBQUUsR0FBRztBQUM1QyxrQkFBSSxlQUFlLGdCQUFnQixDQUFDO0FBQ3BDLCtCQUFpQixrQkFBa0IsS0FBSyxPQUFPLFlBQVk7QUFDM0QsK0JBQWlCLGVBQWUsS0FBSyxJQUFJLFlBQVk7QUFDckQsK0JBQWlCLGVBQWUsQ0FBQyxrQkFBa0IsS0FBSyxPQUFPLGNBQWMsR0FBRyxLQUFLLElBQUksY0FBYztBQUFBLFlBQ3hHO0FBQ0EsbUJBQU87QUFBQSxVQUNSO0FBQUEsUUFFRixHQUFHO0FBQUEsTUFDSDtBQUFBLElBQUMsR0FBRyxLQUFLLGFBQWEsT0FBTyxVQUFVLFVBQVUsYUFBYSxPQUFPLFFBQVEsUUFBUSxhQUFhLE9BQU8sVUFBVSxVQUFVLENBQUMsQ0FBQztBQUFBO0FBQUE7OztBQzdDL0g7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0EsS0FBQyxTQUFTQyxZQUFXO0FBQ3JCLFVBQUksRUFBRSxZQUFXLFFBQU0sY0FBYSxLQUFLLFVBQVEsV0FBVTtBQUFDLFlBQUc7QUFBQyxjQUFJLElBQUUsU0FBUyxjQUFjLEtBQUs7QUFDbEcsaUJBQU0sRUFBRSxDQUFDLEVBQUUsYUFBVyxDQUFDLEVBQUUsVUFBVSxLQUFLLE9BQU8sUUFBUTtBQUFBLFFBQUUsU0FBT0MsSUFBRTtBQUFDLGlCQUFNO0FBQUEsUUFBRTtBQUFBLE1BQUMsRUFBRSxJQUMzRTtBQUdILFNBQUMsU0FBVUMsU0FBUTtBQUNsQixVQUFBQSxRQUFPLGFBQWEsVUFBVUEsUUFBTyxPQUFPLFFBQVEsSUFBSSxXQUFZO0FBQ25FLG1CQUFPLElBQUksc0JBQWMsSUFBSTtBQUFBLFVBQzlCO0FBRUEsY0FBSSxJQUFJLFNBQVMsY0FBYyxNQUFNO0FBQ3JDLGNBQ0MsRUFBRSxhQUNGLEVBQUUsVUFBVSxlQUNaLEVBQUUsVUFBVSxZQUFZLGFBQ3hCLENBQUMsRUFBRSxVQUFVLFlBQVksVUFBVUEsUUFBTyxPQUFPLFFBQVEsR0FDeEQ7QUFDRCxjQUFFLFVBQVUsWUFBWSxVQUFVQSxRQUFPLE9BQU8sUUFBUSxJQUFJLFdBQVk7QUFDdkUscUJBQU8sSUFBSSxzQkFBYyxJQUFJO0FBQUEsWUFDOUI7QUFBQSxVQUNEO0FBQUEsUUFDRCxHQUFFLElBQUk7QUFBQSxNQUNOO0FBQUEsSUFBQyxHQUFHLEtBQUssYUFBYSxPQUFPLFVBQVUsVUFBVSxhQUFhLE9BQU8sUUFBUSxRQUFRLGFBQWEsT0FBTyxVQUFVLFVBQVUsQ0FBQyxDQUFDO0FBQUE7QUFBQTs7O0FDMUIvSDtBQUFBO0FBQUE7QUFBQTtBQUNBLEtBQUMsU0FBU0MsWUFBVztBQUNyQixVQUFJLEVBQUUsa0JBQWlCLFFBQU0sYUFBWSxLQUFLLGFBQWEsWUFDeEQ7QUFFSCxTQUFDLFNBQVVDLFNBQVE7QUFDbEIsVUFBQUEsUUFBTyxhQUFhLFVBQVUsVUFBVUEsUUFBTyxNQUFNLFVBQVU7QUFFL0QsY0FBSSxJQUFJLFNBQVMsY0FBYyxNQUFNO0FBQ3JDLGNBQ0MsRUFBRSxhQUNGLEVBQUUsVUFBVSxlQUNaLEVBQUUsVUFBVSxZQUFZLGFBQ3hCLENBQUMsRUFBRSxVQUFVLFlBQVksVUFBVSxTQUNsQztBQUNELGNBQUUsVUFBVSxZQUFZLFVBQVUsVUFBVUEsUUFBTyxNQUFNLFVBQVU7QUFBQSxVQUNwRTtBQUFBLFFBQ0QsR0FBRSxJQUFJO0FBQUEsTUFDTjtBQUFBLElBQUMsR0FBRyxLQUFLLGFBQWEsT0FBTyxVQUFVLFVBQVUsYUFBYSxPQUFPLFFBQVEsUUFBUSxhQUFhLE9BQU8sVUFBVSxVQUFVLENBQUMsQ0FBQztBQUFBO0FBQUE7OztBQ2xCL0g7QUFBQTtBQUFBO0FBQUE7OztBQ0FBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsS0FBQyxTQUFTQyxZQUFXO0FBQ3JCLFVBQUksRUFBRSxhQUFZLFFBQU0sWUFBVyxRQUFRLFlBQ3hDO0FBRUgsaUJBQVMsVUFBVSxTQUFTLFFBQVEsVUFBVSxTQUFTLFNBQVMsU0FBUztBQUN4RSxjQUFJLEtBQUssWUFBWTtBQUNwQixpQkFBSyxXQUFXLFlBQVksSUFBSTtBQUFBLFVBQ2pDO0FBQUEsUUFDRDtBQUlBLFlBQUksVUFBVSxNQUFNO0FBQ25CLGVBQUssVUFBVSxTQUFTLFFBQVEsVUFBVTtBQUFBLFFBQzNDO0FBRUEsU0FBQyxXQUFZO0FBQ1osY0FBSSxpQkFBaUIsa0JBQWtCLFVBQVU7QUFFakQsNEJBQWtCLFVBQVUsU0FBUyxTQUFTLE9BQU8sT0FBTztBQUMzRCxnQkFBSSxVQUFVLFdBQVcsR0FBRztBQUMzQixxQkFBTyxRQUFRLFVBQVUsT0FBTyxLQUFLLElBQUk7QUFBQSxZQUMxQztBQUNBLG1CQUFPLGVBQWUsS0FBSyxNQUFNLEtBQUs7QUFBQSxVQUN2QztBQUFBLFFBQ0QsR0FBRztBQUFBLE1BQ0g7QUFBQSxJQUFDLEdBQUcsS0FBSyxhQUFhLE9BQU8sVUFBVSxVQUFVLGFBQWEsT0FBTyxRQUFRLFFBQVEsYUFBYSxPQUFPLFVBQVUsVUFBVSxDQUFDLENBQUM7QUFBQTtBQUFBOzs7QUMzQi9IO0FBQUE7QUFBQTtBQUFBO0FBQ0EsS0FBQyxTQUFTQyxZQUFXO0FBQ3JCLFVBQUksRUFBRSxZQUFXLGNBQWMsWUFDNUI7QUFFSCxzQkFBYyxVQUFVLFNBQVMsUUFBUSxVQUFVO0FBQUEsTUFDbkQ7QUFBQSxJQUFDLEdBQUcsS0FBSyxhQUFhLE9BQU8sVUFBVSxVQUFVLGFBQWEsT0FBTyxRQUFRLFFBQVEsYUFBYSxPQUFPLFVBQVUsVUFBVSxDQUFDLENBQUM7QUFBQTtBQUFBOzs7QUNOL0g7QUFBQSw4RkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxxQkFBcUI7QUFDekIsUUFBSSxjQUFjO0FBS2xCLElBQUFBLFFBQU8sVUFBVSxPQUFPLFFBQVEsU0FBU0MsTUFBSyxHQUFHO0FBQy9DLGFBQU8sbUJBQW1CLEdBQUcsV0FBVztBQUFBLElBQzFDO0FBQUE7QUFBQTs7O0FDVEE7QUFBQSwyR0FBQUMsVUFBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksMEJBQTBCO0FBQzlCLFFBQUksdUJBQXVCO0FBQzNCLFFBQUksV0FBVztBQUNmLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUksYUFBYTtBQUtqQixJQUFBQSxTQUFRLElBQUksZUFBZSxDQUFDLDBCQUEwQixPQUFPLG1CQUFtQixTQUFTLGlCQUFpQixHQUFHLFlBQVk7QUFDdkgsZUFBUyxDQUFDO0FBQ1YsVUFBSSxRQUFRLGdCQUFnQixVQUFVO0FBQ3RDLFVBQUlDLFFBQU8sV0FBVyxVQUFVO0FBQ2hDLFVBQUksU0FBU0EsTUFBSztBQUNsQixVQUFJLFFBQVE7QUFDWixVQUFJO0FBQ0osYUFBTyxTQUFTO0FBQU8sNkJBQXFCLEVBQUUsR0FBRyxNQUFNQSxNQUFLLE9BQU8sR0FBRyxNQUFNLEdBQUcsQ0FBQztBQUNoRixhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7OztBQ3BCQTtBQUFBLHVGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGFBQWE7QUFFakIsSUFBQUEsUUFBTyxVQUFVLFdBQVcsWUFBWSxpQkFBaUI7QUFBQTtBQUFBOzs7QUNIekQ7QUFBQSxnR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBSSxXQUFXO0FBQ2YsUUFBSSx5QkFBeUI7QUFDN0IsUUFBSSxjQUFjO0FBQ2xCLFFBQUksYUFBYTtBQUNqQixRQUFJLE9BQU87QUFDWCxRQUFJLHdCQUF3QjtBQUM1QixRQUFJLFlBQVk7QUFFaEIsUUFBSSxLQUFLO0FBQ1QsUUFBSSxLQUFLO0FBQ1QsUUFBSSxZQUFZO0FBQ2hCLFFBQUksU0FBUztBQUNiLFFBQUksV0FBVyxVQUFVLFVBQVU7QUFFbkMsUUFBSSxtQkFBbUIsV0FBWTtBQUFBLElBQWM7QUFFakQsUUFBSSxZQUFZLFNBQVUsU0FBUztBQUNqQyxhQUFPLEtBQUssU0FBUyxLQUFLLFVBQVUsS0FBSyxNQUFNLFNBQVM7QUFBQSxJQUMxRDtBQUdBLFFBQUksNEJBQTRCLFNBQVVDLGtCQUFpQjtBQUN6RCxNQUFBQSxpQkFBZ0IsTUFBTSxVQUFVLEVBQUUsQ0FBQztBQUNuQyxNQUFBQSxpQkFBZ0IsTUFBTTtBQUN0QixVQUFJLE9BQU9BLGlCQUFnQixhQUFhO0FBQ3hDLE1BQUFBLG1CQUFrQjtBQUNsQixhQUFPO0FBQUEsSUFDVDtBQUdBLFFBQUksMkJBQTJCLFdBQVk7QUFFekMsVUFBSSxTQUFTLHNCQUFzQixRQUFRO0FBQzNDLFVBQUksS0FBSyxTQUFTLFNBQVM7QUFDM0IsVUFBSTtBQUNKLGFBQU8sTUFBTSxVQUFVO0FBQ3ZCLFdBQUssWUFBWSxNQUFNO0FBRXZCLGFBQU8sTUFBTSxPQUFPLEVBQUU7QUFDdEIsdUJBQWlCLE9BQU8sY0FBYztBQUN0QyxxQkFBZSxLQUFLO0FBQ3BCLHFCQUFlLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQztBQUNuRCxxQkFBZSxNQUFNO0FBQ3JCLGFBQU8sZUFBZTtBQUFBLElBQ3hCO0FBT0EsUUFBSTtBQUNKLFFBQUksa0JBQWtCLFdBQVk7QUFDaEMsVUFBSTtBQUNGLDBCQUFrQixJQUFJLGNBQWMsVUFBVTtBQUFBLE1BQ2hELFNBQVMsT0FBTztBQUFBLE1BQWU7QUFDL0Isd0JBQWtCLE9BQU8sWUFBWSxjQUNqQyxTQUFTLFVBQVUsa0JBQ2pCLDBCQUEwQixlQUFlLElBQ3pDLHlCQUF5QixJQUMzQiwwQkFBMEIsZUFBZTtBQUM3QyxVQUFJLFNBQVMsWUFBWTtBQUN6QixhQUFPO0FBQVUsZUFBTyxnQkFBZ0IsU0FBUyxFQUFFLFlBQVksTUFBTSxDQUFDO0FBQ3RFLGFBQU8sZ0JBQWdCO0FBQUEsSUFDekI7QUFFQSxlQUFXLFFBQVEsSUFBSTtBQUt2QixJQUFBRCxRQUFPLFVBQVUsT0FBTyxVQUFVLFNBQVMsT0FBTyxHQUFHLFlBQVk7QUFDL0QsVUFBSTtBQUNKLFVBQUksTUFBTSxNQUFNO0FBQ2QseUJBQWlCLFNBQVMsSUFBSSxTQUFTLENBQUM7QUFDeEMsaUJBQVMsSUFBSSxpQkFBaUI7QUFDOUIseUJBQWlCLFNBQVMsSUFBSTtBQUU5QixlQUFPLFFBQVEsSUFBSTtBQUFBLE1BQ3JCO0FBQU8saUJBQVMsZ0JBQWdCO0FBQ2hDLGFBQU8sZUFBZSxTQUFZLFNBQVMsdUJBQXVCLEVBQUUsUUFBUSxVQUFVO0FBQUEsSUFDeEY7QUFBQTtBQUFBOzs7QUNuRkE7QUFBQSw4RkFBQUUsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBRWxCLElBQUFBLFFBQU8sVUFBVSxZQUFZLENBQUMsRUFBRSxLQUFLO0FBQUE7QUFBQTs7O0FDSHJDO0FBQUEseUhBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQUksVUFBVTtBQUNkLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUksdUJBQXVCLHdDQUFzRDtBQUNqRixRQUFJLGFBQWE7QUFFakIsUUFBSSxjQUFjLE9BQU8sVUFBVSxZQUFZLFVBQVUsT0FBTyxzQkFDNUQsT0FBTyxvQkFBb0IsTUFBTSxJQUFJLENBQUM7QUFFMUMsUUFBSSxpQkFBaUIsU0FBVSxJQUFJO0FBQ2pDLFVBQUk7QUFDRixlQUFPLHFCQUFxQixFQUFFO0FBQUEsTUFDaEMsU0FBUyxPQUFPO0FBQ2QsZUFBTyxXQUFXLFdBQVc7QUFBQSxNQUMvQjtBQUFBLElBQ0Y7QUFHQSxJQUFBQSxRQUFPLFFBQVEsSUFBSSxTQUFTLG9CQUFvQixJQUFJO0FBQ2xELGFBQU8sZUFBZSxRQUFRLEVBQUUsTUFBTSxXQUNsQyxlQUFlLEVBQUUsSUFDakIscUJBQXFCLGdCQUFnQixFQUFFLENBQUM7QUFBQSxJQUM5QztBQUFBO0FBQUE7OztBQ3ZCQTtBQUFBLDJHQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxpQkFBaUI7QUFFckIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsUUFBUSxNQUFNLFlBQVk7QUFDbkQsVUFBSSxXQUFXO0FBQUssb0JBQVksV0FBVyxLQUFLLE1BQU0sRUFBRSxRQUFRLEtBQUssQ0FBQztBQUN0RSxVQUFJLFdBQVc7QUFBSyxvQkFBWSxXQUFXLEtBQUssTUFBTSxFQUFFLFFBQVEsS0FBSyxDQUFDO0FBQ3RFLGFBQU8sZUFBZSxFQUFFLFFBQVEsTUFBTSxVQUFVO0FBQUEsSUFDbEQ7QUFBQTtBQUFBOzs7QUNSQTtBQUFBLG9HQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGlCQUFpQixpQ0FBK0M7QUFDcEUsUUFBSSxTQUFTO0FBQ2IsUUFBSSxrQkFBa0I7QUFFdEIsUUFBSSxnQkFBZ0IsZ0JBQWdCLGFBQWE7QUFFakQsSUFBQUEsUUFBTyxVQUFVLFNBQVUsUUFBUSxLQUFLLFFBQVE7QUFDOUMsVUFBSSxVQUFVLENBQUM7QUFBUSxpQkFBUyxPQUFPO0FBQ3ZDLFVBQUksVUFBVSxDQUFDLE9BQU8sUUFBUSxhQUFhLEdBQUc7QUFDNUMsdUJBQWUsUUFBUSxlQUFlLEVBQUUsY0FBYyxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQUEsTUFDMUU7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDWkE7QUFBQSw0R0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxVQUFVO0FBQ2QsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSUMsWUFBVztBQUNmLFFBQUksa0JBQWtCO0FBRXRCLFFBQUksVUFBVSxnQkFBZ0IsU0FBUztBQUN2QyxRQUFJLFNBQVM7QUFJYixJQUFBRCxRQUFPLFVBQVUsU0FBVSxlQUFlO0FBQ3hDLFVBQUk7QUFDSixVQUFJLFFBQVEsYUFBYSxHQUFHO0FBQzFCLFlBQUksY0FBYztBQUVsQixZQUFJLGNBQWMsQ0FBQyxNQUFNLE1BQU0sVUFBVSxRQUFRLEVBQUUsU0FBUztBQUFJLGNBQUk7QUFBQSxpQkFDM0RDLFVBQVMsQ0FBQyxHQUFHO0FBQ3BCLGNBQUksRUFBRSxPQUFPO0FBQ2IsY0FBSSxNQUFNO0FBQU0sZ0JBQUk7QUFBQSxRQUN0QjtBQUFBLE1BQ0Y7QUFBRSxhQUFPLE1BQU0sU0FBWSxTQUFTO0FBQUEsSUFDdEM7QUFBQTtBQUFBOzs7QUN0QkE7QUFBQSx1R0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSwwQkFBMEI7QUFJOUIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsZUFBZSxRQUFRO0FBQ2hELGFBQU8sS0FBSyx3QkFBd0IsYUFBYSxHQUFHLFdBQVcsSUFBSSxJQUFJLE1BQU07QUFBQSxJQUMvRTtBQUFBO0FBQUE7OztBQ1BBO0FBQUEsa0dBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksT0FBTztBQUNYLFFBQUksY0FBYztBQUNsQixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLFdBQVc7QUFDZixRQUFJLG9CQUFvQjtBQUN4QixRQUFJLHFCQUFxQjtBQUV6QixRQUFJLE9BQU8sWUFBWSxDQUFDLEVBQUUsSUFBSTtBQUc5QixRQUFJLGVBQWUsU0FBVSxNQUFNO0FBQ2pDLFVBQUksU0FBUyxTQUFTO0FBQ3RCLFVBQUksWUFBWSxTQUFTO0FBQ3pCLFVBQUksVUFBVSxTQUFTO0FBQ3ZCLFVBQUksV0FBVyxTQUFTO0FBQ3hCLFVBQUksZ0JBQWdCLFNBQVM7QUFDN0IsVUFBSSxtQkFBbUIsU0FBUztBQUNoQyxVQUFJLFdBQVcsU0FBUyxLQUFLO0FBQzdCLGFBQU8sU0FBVSxPQUFPLFlBQVksTUFBTSxnQkFBZ0I7QUFDeEQsWUFBSSxJQUFJLFNBQVMsS0FBSztBQUN0QixZQUFJQyxRQUFPLGNBQWMsQ0FBQztBQUMxQixZQUFJLFNBQVMsa0JBQWtCQSxLQUFJO0FBQ25DLFlBQUksZ0JBQWdCLEtBQUssWUFBWSxJQUFJO0FBQ3pDLFlBQUksUUFBUTtBQUNaLFlBQUksU0FBUyxrQkFBa0I7QUFDL0IsWUFBSSxTQUFTLFNBQVMsT0FBTyxPQUFPLE1BQU0sSUFBSSxhQUFhLG1CQUFtQixPQUFPLE9BQU8sQ0FBQyxJQUFJO0FBQ2pHLFlBQUksT0FBTztBQUNYLGVBQU0sU0FBUyxPQUFPO0FBQVMsY0FBSSxZQUFZLFNBQVNBLE9BQU07QUFDNUQsb0JBQVFBLE1BQUssS0FBSztBQUNsQixxQkFBUyxjQUFjLE9BQU8sT0FBTyxDQUFDO0FBQ3RDLGdCQUFJLE1BQU07QUFDUixrQkFBSTtBQUFRLHVCQUFPLEtBQUssSUFBSTtBQUFBLHVCQUNuQjtBQUFRLHdCQUFRLE1BQU07QUFBQSxrQkFDN0IsS0FBSztBQUFHLDJCQUFPO0FBQUEsa0JBQ2YsS0FBSztBQUFHLDJCQUFPO0FBQUEsa0JBQ2YsS0FBSztBQUFHLDJCQUFPO0FBQUEsa0JBQ2YsS0FBSztBQUFHLHlCQUFLLFFBQVEsS0FBSztBQUFBLGdCQUM1QjtBQUFBO0FBQU8sd0JBQVEsTUFBTTtBQUFBLGtCQUNuQixLQUFLO0FBQUcsMkJBQU87QUFBQSxrQkFDZixLQUFLO0FBQUcseUJBQUssUUFBUSxLQUFLO0FBQUEsZ0JBQzVCO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFDQSxlQUFPLGdCQUFnQixLQUFLLFdBQVcsV0FBVyxXQUFXO0FBQUEsTUFDL0Q7QUFBQSxJQUNGO0FBRUEsSUFBQUQsUUFBTyxVQUFVO0FBQUE7QUFBQTtBQUFBLE1BR2YsU0FBUyxhQUFhLENBQUM7QUFBQTtBQUFBO0FBQUEsTUFHdkIsS0FBSyxhQUFhLENBQUM7QUFBQTtBQUFBO0FBQUEsTUFHbkIsUUFBUSxhQUFhLENBQUM7QUFBQTtBQUFBO0FBQUEsTUFHdEIsTUFBTSxhQUFhLENBQUM7QUFBQTtBQUFBO0FBQUEsTUFHcEIsT0FBTyxhQUFhLENBQUM7QUFBQTtBQUFBO0FBQUEsTUFHckIsTUFBTSxhQUFhLENBQUM7QUFBQTtBQUFBO0FBQUEsTUFHcEIsV0FBVyxhQUFhLENBQUM7QUFBQTtBQUFBO0FBQUEsTUFHekIsY0FBYyxhQUFhLENBQUM7QUFBQSxJQUM5QjtBQUFBO0FBQUE7OztBQ3pFQTtBQUFBO0FBQUE7QUFDQSxRQUFJLElBQUk7QUFDUixRQUFJRSxVQUFTO0FBQ2IsUUFBSSxPQUFPO0FBQ1gsUUFBSSxjQUFjO0FBQ2xCLFFBQUksVUFBVTtBQUNkLFFBQUksY0FBYztBQUNsQixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLFFBQVE7QUFDWixRQUFJLFNBQVM7QUFDYixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLFdBQVc7QUFDZixRQUFJLGtCQUFrQjtBQUN0QixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLFlBQVk7QUFDaEIsUUFBSSwyQkFBMkI7QUFDL0IsUUFBSSxxQkFBcUI7QUFDekIsUUFBSSxhQUFhO0FBQ2pCLFFBQUksNEJBQTRCO0FBQ2hDLFFBQUksOEJBQThCO0FBQ2xDLFFBQUksOEJBQThCO0FBQ2xDLFFBQUksaUNBQWlDO0FBQ3JDLFFBQUksdUJBQXVCO0FBQzNCLFFBQUkseUJBQXlCO0FBQzdCLFFBQUksNkJBQTZCO0FBQ2pDLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksd0JBQXdCO0FBQzVCLFFBQUksU0FBUztBQUNiLFFBQUksWUFBWTtBQUNoQixRQUFJLGFBQWE7QUFDakIsUUFBSSxNQUFNO0FBQ1YsUUFBSSxrQkFBa0I7QUFDdEIsUUFBSSwrQkFBK0I7QUFDbkMsUUFBSSx3QkFBd0I7QUFDNUIsUUFBSSwwQkFBMEI7QUFDOUIsUUFBSSxpQkFBaUI7QUFDckIsUUFBSSxzQkFBc0I7QUFDMUIsUUFBSSxXQUFXLDBCQUF3QztBQUV2RCxRQUFJLFNBQVMsVUFBVSxRQUFRO0FBQy9CLFFBQUksU0FBUztBQUNiLFFBQUksWUFBWTtBQUVoQixRQUFJLG1CQUFtQixvQkFBb0I7QUFDM0MsUUFBSSxtQkFBbUIsb0JBQW9CLFVBQVUsTUFBTTtBQUUzRCxRQUFJLGtCQUFrQixPQUFPLFNBQVM7QUFDdEMsUUFBSSxVQUFVQSxRQUFPO0FBQ3JCLFFBQUksa0JBQWtCLFdBQVcsUUFBUSxTQUFTO0FBQ2xELFFBQUksYUFBYUEsUUFBTztBQUN4QixRQUFJQyxhQUFZRCxRQUFPO0FBQ3ZCLFFBQUksVUFBVUEsUUFBTztBQUNyQixRQUFJLGlDQUFpQywrQkFBK0I7QUFDcEUsUUFBSSx1QkFBdUIscUJBQXFCO0FBQ2hELFFBQUksNEJBQTRCLDRCQUE0QjtBQUM1RCxRQUFJLDZCQUE2QiwyQkFBMkI7QUFDNUQsUUFBSSxPQUFPLFlBQVksQ0FBQyxFQUFFLElBQUk7QUFFOUIsUUFBSSxhQUFhLE9BQU8sU0FBUztBQUNqQyxRQUFJLHlCQUF5QixPQUFPLFlBQVk7QUFDaEQsUUFBSSx3QkFBd0IsT0FBTyxLQUFLO0FBR3hDLFFBQUksYUFBYSxDQUFDLFdBQVcsQ0FBQyxRQUFRLFNBQVMsS0FBSyxDQUFDLFFBQVEsU0FBUyxFQUFFO0FBR3hFLFFBQUkseUJBQXlCLFNBQVUsR0FBRyxHQUFHLFlBQVk7QUFDdkQsVUFBSSw0QkFBNEIsK0JBQStCLGlCQUFpQixDQUFDO0FBQ2pGLFVBQUk7QUFBMkIsZUFBTyxnQkFBZ0IsQ0FBQztBQUN2RCwyQkFBcUIsR0FBRyxHQUFHLFVBQVU7QUFDckMsVUFBSSw2QkFBNkIsTUFBTSxpQkFBaUI7QUFDdEQsNkJBQXFCLGlCQUFpQixHQUFHLHlCQUF5QjtBQUFBLE1BQ3BFO0FBQUEsSUFDRjtBQUVBLFFBQUksc0JBQXNCLGVBQWUsTUFBTSxXQUFZO0FBQ3pELGFBQU8sbUJBQW1CLHFCQUFxQixDQUFDLEdBQUcsS0FBSztBQUFBLFFBQ3RELEtBQUssV0FBWTtBQUFFLGlCQUFPLHFCQUFxQixNQUFNLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFO0FBQUEsUUFBRztBQUFBLE1BQzdFLENBQUMsQ0FBQyxFQUFFLE1BQU07QUFBQSxJQUNaLENBQUMsSUFBSSx5QkFBeUI7QUFFOUIsUUFBSSxPQUFPLFNBQVUsS0FBSyxhQUFhO0FBQ3JDLFVBQUksU0FBUyxXQUFXLEdBQUcsSUFBSSxtQkFBbUIsZUFBZTtBQUNqRSx1QkFBaUIsUUFBUTtBQUFBLFFBQ3ZCLE1BQU07QUFBQSxRQUNOLEtBQUs7QUFBQSxRQUNMLGFBQWE7QUFBQSxNQUNmLENBQUM7QUFDRCxVQUFJLENBQUM7QUFBYSxlQUFPLGNBQWM7QUFDdkMsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLGtCQUFrQixTQUFTLGVBQWUsR0FBRyxHQUFHLFlBQVk7QUFDOUQsVUFBSSxNQUFNO0FBQWlCLHdCQUFnQix3QkFBd0IsR0FBRyxVQUFVO0FBQ2hGLGVBQVMsQ0FBQztBQUNWLFVBQUksTUFBTSxjQUFjLENBQUM7QUFDekIsZUFBUyxVQUFVO0FBQ25CLFVBQUksT0FBTyxZQUFZLEdBQUcsR0FBRztBQUMzQixZQUFJLENBQUMsV0FBVyxZQUFZO0FBQzFCLGNBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTTtBQUFHLGlDQUFxQixHQUFHLFFBQVEseUJBQXlCLEdBQUcsbUJBQW1CLElBQUksQ0FBQyxDQUFDO0FBQzdHLFlBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSTtBQUFBLFFBQ25CLE9BQU87QUFDTCxjQUFJLE9BQU8sR0FBRyxNQUFNLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRztBQUFHLGNBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSTtBQUMxRCx1QkFBYSxtQkFBbUIsWUFBWSxFQUFFLFlBQVkseUJBQXlCLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFBQSxRQUNoRztBQUFFLGVBQU8sb0JBQW9CLEdBQUcsS0FBSyxVQUFVO0FBQUEsTUFDakQ7QUFBRSxhQUFPLHFCQUFxQixHQUFHLEtBQUssVUFBVTtBQUFBLElBQ2xEO0FBRUEsUUFBSSxvQkFBb0IsU0FBUyxpQkFBaUIsR0FBRyxZQUFZO0FBQy9ELGVBQVMsQ0FBQztBQUNWLFVBQUksYUFBYSxnQkFBZ0IsVUFBVTtBQUMzQyxVQUFJRSxRQUFPLFdBQVcsVUFBVSxFQUFFLE9BQU8sdUJBQXVCLFVBQVUsQ0FBQztBQUMzRSxlQUFTQSxPQUFNLFNBQVUsS0FBSztBQUM1QixZQUFJLENBQUMsZUFBZSxLQUFLLHVCQUF1QixZQUFZLEdBQUc7QUFBRywwQkFBZ0IsR0FBRyxLQUFLLFdBQVcsR0FBRyxDQUFDO0FBQUEsTUFDM0csQ0FBQztBQUNELGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBSSxVQUFVLFNBQVMsT0FBTyxHQUFHLFlBQVk7QUFDM0MsYUFBTyxlQUFlLFNBQVksbUJBQW1CLENBQUMsSUFBSSxrQkFBa0IsbUJBQW1CLENBQUMsR0FBRyxVQUFVO0FBQUEsSUFDL0c7QUFFQSxRQUFJLHdCQUF3QixTQUFTLHFCQUFxQixHQUFHO0FBQzNELFVBQUksSUFBSSxjQUFjLENBQUM7QUFDdkIsVUFBSSxhQUFhLEtBQUssNEJBQTRCLE1BQU0sQ0FBQztBQUN6RCxVQUFJLFNBQVMsbUJBQW1CLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLHdCQUF3QixDQUFDO0FBQUcsZUFBTztBQUNwRyxhQUFPLGNBQWMsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxZQUFZLENBQUMsS0FBSyxPQUFPLE1BQU0sTUFBTSxLQUFLLEtBQUssTUFBTSxFQUFFLENBQUMsSUFDckcsYUFBYTtBQUFBLElBQ25CO0FBRUEsUUFBSSw0QkFBNEIsU0FBUyx5QkFBeUIsR0FBRyxHQUFHO0FBQ3RFLFVBQUksS0FBSyxnQkFBZ0IsQ0FBQztBQUMxQixVQUFJLE1BQU0sY0FBYyxDQUFDO0FBQ3pCLFVBQUksT0FBTyxtQkFBbUIsT0FBTyxZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sd0JBQXdCLEdBQUc7QUFBRztBQUMvRixVQUFJLGFBQWEsK0JBQStCLElBQUksR0FBRztBQUN2RCxVQUFJLGNBQWMsT0FBTyxZQUFZLEdBQUcsS0FBSyxFQUFFLE9BQU8sSUFBSSxNQUFNLEtBQUssR0FBRyxNQUFNLEVBQUUsR0FBRyxJQUFJO0FBQ3JGLG1CQUFXLGFBQWE7QUFBQSxNQUMxQjtBQUNBLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBSSx1QkFBdUIsU0FBUyxvQkFBb0IsR0FBRztBQUN6RCxVQUFJLFFBQVEsMEJBQTBCLGdCQUFnQixDQUFDLENBQUM7QUFDeEQsVUFBSSxTQUFTLENBQUM7QUFDZCxlQUFTLE9BQU8sU0FBVSxLQUFLO0FBQzdCLFlBQUksQ0FBQyxPQUFPLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxZQUFZLEdBQUc7QUFBRyxlQUFLLFFBQVEsR0FBRztBQUFBLE1BQzVFLENBQUM7QUFDRCxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUkseUJBQXlCLFNBQVUsR0FBRztBQUN4QyxVQUFJLHNCQUFzQixNQUFNO0FBQ2hDLFVBQUksUUFBUSwwQkFBMEIsc0JBQXNCLHlCQUF5QixnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3ZHLFVBQUksU0FBUyxDQUFDO0FBQ2QsZUFBUyxPQUFPLFNBQVUsS0FBSztBQUM3QixZQUFJLE9BQU8sWUFBWSxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsT0FBTyxpQkFBaUIsR0FBRyxJQUFJO0FBQ3JGLGVBQUssUUFBUSxXQUFXLEdBQUcsQ0FBQztBQUFBLFFBQzlCO0FBQUEsTUFDRixDQUFDO0FBQ0QsYUFBTztBQUFBLElBQ1Q7QUFJQSxRQUFJLENBQUMsZUFBZTtBQUNsQixnQkFBVSxTQUFTQyxVQUFTO0FBQzFCLFlBQUksY0FBYyxpQkFBaUIsSUFBSTtBQUFHLGdCQUFNLElBQUlGLFdBQVUsNkJBQTZCO0FBQzNGLFlBQUksY0FBYyxDQUFDLFVBQVUsVUFBVSxVQUFVLENBQUMsTUFBTSxTQUFZLFNBQVksVUFBVSxVQUFVLENBQUMsQ0FBQztBQUN0RyxZQUFJLE1BQU0sSUFBSSxXQUFXO0FBQ3pCLFlBQUksU0FBUyxTQUFVLE9BQU87QUFDNUIsY0FBSSxRQUFRLFNBQVMsU0FBWUQsVUFBUztBQUMxQyxjQUFJLFVBQVU7QUFBaUIsaUJBQUssUUFBUSx3QkFBd0IsS0FBSztBQUN6RSxjQUFJLE9BQU8sT0FBTyxNQUFNLEtBQUssT0FBTyxNQUFNLE1BQU0sR0FBRyxHQUFHO0FBQUcsa0JBQU0sTUFBTSxFQUFFLEdBQUcsSUFBSTtBQUM5RSxjQUFJLGFBQWEseUJBQXlCLEdBQUcsS0FBSztBQUNsRCxjQUFJO0FBQ0YsZ0NBQW9CLE9BQU8sS0FBSyxVQUFVO0FBQUEsVUFDNUMsU0FBUyxPQUFPO0FBQ2QsZ0JBQUksRUFBRSxpQkFBaUI7QUFBYSxvQkFBTTtBQUMxQyxtQ0FBdUIsT0FBTyxLQUFLLFVBQVU7QUFBQSxVQUMvQztBQUFBLFFBQ0Y7QUFDQSxZQUFJLGVBQWU7QUFBWSw4QkFBb0IsaUJBQWlCLEtBQUssRUFBRSxjQUFjLE1BQU0sS0FBSyxPQUFPLENBQUM7QUFDNUcsZUFBTyxLQUFLLEtBQUssV0FBVztBQUFBLE1BQzlCO0FBRUEsd0JBQWtCLFFBQVEsU0FBUztBQUVuQyxvQkFBYyxpQkFBaUIsWUFBWSxTQUFTLFdBQVc7QUFDN0QsZUFBTyxpQkFBaUIsSUFBSSxFQUFFO0FBQUEsTUFDaEMsQ0FBQztBQUVELG9CQUFjLFNBQVMsaUJBQWlCLFNBQVUsYUFBYTtBQUM3RCxlQUFPLEtBQUssSUFBSSxXQUFXLEdBQUcsV0FBVztBQUFBLE1BQzNDLENBQUM7QUFFRCxpQ0FBMkIsSUFBSTtBQUMvQiwyQkFBcUIsSUFBSTtBQUN6Qiw2QkFBdUIsSUFBSTtBQUMzQixxQ0FBK0IsSUFBSTtBQUNuQyxnQ0FBMEIsSUFBSSw0QkFBNEIsSUFBSTtBQUM5RCxrQ0FBNEIsSUFBSTtBQUVoQyxtQ0FBNkIsSUFBSSxTQUFVLE1BQU07QUFDL0MsZUFBTyxLQUFLLGdCQUFnQixJQUFJLEdBQUcsSUFBSTtBQUFBLE1BQ3pDO0FBRUEsVUFBSSxhQUFhO0FBRWYsOEJBQXNCLGlCQUFpQixlQUFlO0FBQUEsVUFDcEQsY0FBYztBQUFBLFVBQ2QsS0FBSyxTQUFTLGNBQWM7QUFDMUIsbUJBQU8saUJBQWlCLElBQUksRUFBRTtBQUFBLFVBQ2hDO0FBQUEsUUFDRixDQUFDO0FBQ0QsWUFBSSxDQUFDLFNBQVM7QUFDWix3QkFBYyxpQkFBaUIsd0JBQXdCLHVCQUF1QixFQUFFLFFBQVEsS0FBSyxDQUFDO0FBQUEsUUFDaEc7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLE1BQUUsRUFBRSxRQUFRLE1BQU0sYUFBYSxNQUFNLE1BQU0sTUFBTSxRQUFRLENBQUMsZUFBZSxNQUFNLENBQUMsY0FBYyxHQUFHO0FBQUEsTUFDL0YsUUFBUTtBQUFBLElBQ1YsQ0FBQztBQUVELGFBQVMsV0FBVyxxQkFBcUIsR0FBRyxTQUFVLE1BQU07QUFDMUQsNEJBQXNCLElBQUk7QUFBQSxJQUM1QixDQUFDO0FBRUQsTUFBRSxFQUFFLFFBQVEsUUFBUSxNQUFNLE1BQU0sUUFBUSxDQUFDLGNBQWMsR0FBRztBQUFBLE1BQ3hELFdBQVcsV0FBWTtBQUFFLHFCQUFhO0FBQUEsTUFBTTtBQUFBLE1BQzVDLFdBQVcsV0FBWTtBQUFFLHFCQUFhO0FBQUEsTUFBTztBQUFBLElBQy9DLENBQUM7QUFFRCxNQUFFLEVBQUUsUUFBUSxVQUFVLE1BQU0sTUFBTSxRQUFRLENBQUMsZUFBZSxNQUFNLENBQUMsWUFBWSxHQUFHO0FBQUE7QUFBQTtBQUFBLE1BRzlFLFFBQVE7QUFBQTtBQUFBO0FBQUEsTUFHUixnQkFBZ0I7QUFBQTtBQUFBO0FBQUEsTUFHaEIsa0JBQWtCO0FBQUE7QUFBQTtBQUFBLE1BR2xCLDBCQUEwQjtBQUFBLElBQzVCLENBQUM7QUFFRCxNQUFFLEVBQUUsUUFBUSxVQUFVLE1BQU0sTUFBTSxRQUFRLENBQUMsY0FBYyxHQUFHO0FBQUE7QUFBQTtBQUFBLE1BRzFELHFCQUFxQjtBQUFBLElBQ3ZCLENBQUM7QUFJRCw0QkFBd0I7QUFJeEIsbUJBQWUsU0FBUyxNQUFNO0FBRTlCLGVBQVcsTUFBTSxJQUFJO0FBQUE7QUFBQTs7O0FDdFFyQjtBQUFBLDRHQUFBSSxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGdCQUFnQjtBQUdwQixJQUFBQSxRQUFPLFVBQVUsaUJBQWlCLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLENBQUMsT0FBTztBQUFBO0FBQUE7OztBQ0o5RDtBQUFBO0FBQUE7QUFDQSxRQUFJLElBQUk7QUFDUixRQUFJLGFBQWE7QUFDakIsUUFBSSxTQUFTO0FBQ2IsUUFBSSxXQUFXO0FBQ2YsUUFBSSxTQUFTO0FBQ2IsUUFBSSx5QkFBeUI7QUFFN0IsUUFBSSx5QkFBeUIsT0FBTywyQkFBMkI7QUFDL0QsUUFBSSx5QkFBeUIsT0FBTywyQkFBMkI7QUFJL0QsTUFBRSxFQUFFLFFBQVEsVUFBVSxNQUFNLE1BQU0sUUFBUSxDQUFDLHVCQUF1QixHQUFHO0FBQUEsTUFDbkUsT0FBTyxTQUFVLEtBQUs7QUFDcEIsWUFBSSxTQUFTLFNBQVMsR0FBRztBQUN6QixZQUFJLE9BQU8sd0JBQXdCLE1BQU07QUFBRyxpQkFBTyx1QkFBdUIsTUFBTTtBQUNoRixZQUFJLFNBQVMsV0FBVyxRQUFRLEVBQUUsTUFBTTtBQUN4QywrQkFBdUIsTUFBTSxJQUFJO0FBQ2pDLCtCQUF1QixNQUFNLElBQUk7QUFDakMsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGLENBQUM7QUFBQTtBQUFBOzs7QUN0QkQ7QUFBQTtBQUFBO0FBQ0EsUUFBSSxJQUFJO0FBQ1IsUUFBSSxTQUFTO0FBQ2IsUUFBSSxXQUFXO0FBQ2YsUUFBSSxjQUFjO0FBQ2xCLFFBQUksU0FBUztBQUNiLFFBQUkseUJBQXlCO0FBRTdCLFFBQUkseUJBQXlCLE9BQU8sMkJBQTJCO0FBSS9ELE1BQUUsRUFBRSxRQUFRLFVBQVUsTUFBTSxNQUFNLFFBQVEsQ0FBQyx1QkFBdUIsR0FBRztBQUFBLE1BQ25FLFFBQVEsU0FBUyxPQUFPLEtBQUs7QUFDM0IsWUFBSSxDQUFDLFNBQVMsR0FBRztBQUFHLGdCQUFNLElBQUksVUFBVSxZQUFZLEdBQUcsSUFBSSxrQkFBa0I7QUFDN0UsWUFBSSxPQUFPLHdCQUF3QixHQUFHO0FBQUcsaUJBQU8sdUJBQXVCLEdBQUc7QUFBQSxNQUM1RTtBQUFBLElBQ0YsQ0FBQztBQUFBO0FBQUE7OztBQ2pCRDtBQUFBLGlHQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFFbEIsUUFBSSxvQkFBb0IsU0FBUztBQUNqQyxRQUFJLFFBQVEsa0JBQWtCO0FBQzlCLFFBQUksT0FBTyxrQkFBa0I7QUFHN0IsSUFBQUEsUUFBTyxVQUFVLE9BQU8sV0FBVyxZQUFZLFFBQVEsVUFBVSxjQUFjLEtBQUssS0FBSyxLQUFLLElBQUksV0FBWTtBQUM1RyxhQUFPLEtBQUssTUFBTSxPQUFPLFNBQVM7QUFBQSxJQUNwQztBQUFBO0FBQUE7OztBQ1ZBO0FBQUEsNkdBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLFVBQVU7QUFDZCxRQUFJLGFBQWE7QUFDakIsUUFBSSxVQUFVO0FBQ2QsUUFBSSxXQUFXO0FBRWYsUUFBSSxPQUFPLFlBQVksQ0FBQyxFQUFFLElBQUk7QUFFOUIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsVUFBVTtBQUNuQyxVQUFJLFdBQVcsUUFBUTtBQUFHLGVBQU87QUFDakMsVUFBSSxDQUFDLFFBQVEsUUFBUTtBQUFHO0FBQ3hCLFVBQUksWUFBWSxTQUFTO0FBQ3pCLFVBQUlDLFFBQU8sQ0FBQztBQUNaLGVBQVMsSUFBSSxHQUFHLElBQUksV0FBVyxLQUFLO0FBQ2xDLFlBQUksVUFBVSxTQUFTLENBQUM7QUFDeEIsWUFBSSxPQUFPLFdBQVc7QUFBVSxlQUFLQSxPQUFNLE9BQU87QUFBQSxpQkFDekMsT0FBTyxXQUFXLFlBQVksUUFBUSxPQUFPLE1BQU0sWUFBWSxRQUFRLE9BQU8sTUFBTTtBQUFVLGVBQUtBLE9BQU0sU0FBUyxPQUFPLENBQUM7QUFBQSxNQUNySTtBQUNBLFVBQUksYUFBYUEsTUFBSztBQUN0QixVQUFJLE9BQU87QUFDWCxhQUFPLFNBQVUsS0FBSyxPQUFPO0FBQzNCLFlBQUksTUFBTTtBQUNSLGlCQUFPO0FBQ1AsaUJBQU87QUFBQSxRQUNUO0FBQ0EsWUFBSSxRQUFRLElBQUk7QUFBRyxpQkFBTztBQUMxQixpQkFBUyxJQUFJLEdBQUcsSUFBSSxZQUFZO0FBQUssY0FBSUEsTUFBSyxDQUFDLE1BQU07QUFBSyxtQkFBTztBQUFBLE1BQ25FO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQzdCQTtBQUFBO0FBQUE7QUFDQSxRQUFJLElBQUk7QUFDUixRQUFJLGFBQWE7QUFDakIsUUFBSSxRQUFRO0FBQ1osUUFBSSxPQUFPO0FBQ1gsUUFBSSxjQUFjO0FBQ2xCLFFBQUksUUFBUTtBQUNaLFFBQUksYUFBYTtBQUNqQixRQUFJLFdBQVc7QUFDZixRQUFJLGFBQWE7QUFDakIsUUFBSSxzQkFBc0I7QUFDMUIsUUFBSSxnQkFBZ0I7QUFFcEIsUUFBSSxVQUFVO0FBQ2QsUUFBSSxhQUFhLFdBQVcsUUFBUSxXQUFXO0FBQy9DLFFBQUksT0FBTyxZQUFZLElBQUksSUFBSTtBQUMvQixRQUFJLFNBQVMsWUFBWSxHQUFHLE1BQU07QUFDbEMsUUFBSSxhQUFhLFlBQVksR0FBRyxVQUFVO0FBQzFDLFFBQUksVUFBVSxZQUFZLEdBQUcsT0FBTztBQUNwQyxRQUFJLGlCQUFpQixZQUFZLEdBQUksUUFBUTtBQUU3QyxRQUFJLFNBQVM7QUFDYixRQUFJLE1BQU07QUFDVixRQUFJLEtBQUs7QUFFVCxRQUFJLDJCQUEyQixDQUFDLGlCQUFpQixNQUFNLFdBQVk7QUFDakUsVUFBSSxTQUFTLFdBQVcsUUFBUSxFQUFFLHFCQUFxQjtBQUV2RCxhQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxZQUUzQixXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxRQUU5QixXQUFXLE9BQU8sTUFBTSxDQUFDLE1BQU07QUFBQSxJQUN0QyxDQUFDO0FBR0QsUUFBSSxxQkFBcUIsTUFBTSxXQUFZO0FBQ3pDLGFBQU8sV0FBVyxjQUFjLE1BQU0sc0JBQ2pDLFdBQVcsUUFBUSxNQUFNO0FBQUEsSUFDaEMsQ0FBQztBQUVELFFBQUksMEJBQTBCLFNBQVUsSUFBSSxVQUFVO0FBQ3BELFVBQUksT0FBTyxXQUFXLFNBQVM7QUFDL0IsVUFBSSxZQUFZLG9CQUFvQixRQUFRO0FBQzVDLFVBQUksQ0FBQyxXQUFXLFNBQVMsTUFBTSxPQUFPLFVBQWEsU0FBUyxFQUFFO0FBQUk7QUFDbEUsV0FBSyxDQUFDLElBQUksU0FBVSxLQUFLLE9BQU87QUFFOUIsWUFBSSxXQUFXLFNBQVM7QUFBRyxrQkFBUSxLQUFLLFdBQVcsTUFBTSxRQUFRLEdBQUcsR0FBRyxLQUFLO0FBQzVFLFlBQUksQ0FBQyxTQUFTLEtBQUs7QUFBRyxpQkFBTztBQUFBLE1BQy9CO0FBQ0EsYUFBTyxNQUFNLFlBQVksTUFBTSxJQUFJO0FBQUEsSUFDckM7QUFFQSxRQUFJLGVBQWUsU0FBVSxPQUFPLFFBQVEsUUFBUTtBQUNsRCxVQUFJLE9BQU8sT0FBTyxRQUFRLFNBQVMsQ0FBQztBQUNwQyxVQUFJLE9BQU8sT0FBTyxRQUFRLFNBQVMsQ0FBQztBQUNwQyxVQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxLQUFPLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFJO0FBQ2xGLGVBQU8sUUFBUSxlQUFlLFdBQVcsT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUFBLE1BQ3hEO0FBQUUsYUFBTztBQUFBLElBQ1g7QUFFQSxRQUFJLFlBQVk7QUFHZCxRQUFFLEVBQUUsUUFBUSxRQUFRLE1BQU0sTUFBTSxPQUFPLEdBQUcsUUFBUSw0QkFBNEIsbUJBQW1CLEdBQUc7QUFBQTtBQUFBLFFBRWxHLFdBQVcsU0FBUyxVQUFVLElBQUksVUFBVSxPQUFPO0FBQ2pELGNBQUksT0FBTyxXQUFXLFNBQVM7QUFDL0IsY0FBSSxTQUFTLE1BQU0sMkJBQTJCLDBCQUEwQixZQUFZLE1BQU0sSUFBSTtBQUM5RixpQkFBTyxzQkFBc0IsT0FBTyxVQUFVLFdBQVcsUUFBUSxRQUFRLFFBQVEsWUFBWSxJQUFJO0FBQUEsUUFDbkc7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBQUE7QUFBQTs7O0FDeEVBO0FBQUE7QUFBQTtBQUNBLFFBQUksSUFBSTtBQUNSLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksUUFBUTtBQUNaLFFBQUksOEJBQThCO0FBQ2xDLFFBQUksV0FBVztBQUlmLFFBQUksU0FBUyxDQUFDLGlCQUFpQixNQUFNLFdBQVk7QUFBRSxrQ0FBNEIsRUFBRSxDQUFDO0FBQUEsSUFBRyxDQUFDO0FBSXRGLE1BQUUsRUFBRSxRQUFRLFVBQVUsTUFBTSxNQUFNLFFBQVEsT0FBTyxHQUFHO0FBQUEsTUFDbEQsdUJBQXVCLFNBQVMsc0JBQXNCLElBQUk7QUFDeEQsWUFBSSx5QkFBeUIsNEJBQTRCO0FBQ3pELGVBQU8seUJBQXlCLHVCQUF1QixTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFBQSxNQUMxRTtBQUFBLElBQ0YsQ0FBQztBQUFBO0FBQUE7OztBQ2xCRDtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTs7O0FDTkE7QUFBQTtBQUFBO0FBR0EsUUFBSSxJQUFJO0FBQ1IsUUFBSSxjQUFjO0FBQ2xCLFFBQUlDLFVBQVM7QUFDYixRQUFJLGNBQWM7QUFDbEIsUUFBSSxTQUFTO0FBQ2IsUUFBSSxhQUFhO0FBQ2pCLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksV0FBVztBQUNmLFFBQUksd0JBQXdCO0FBQzVCLFFBQUksNEJBQTRCO0FBRWhDLFFBQUksZUFBZUEsUUFBTztBQUMxQixRQUFJLGtCQUFrQixnQkFBZ0IsYUFBYTtBQUVuRCxRQUFJLGVBQWUsV0FBVyxZQUFZLE1BQU0sRUFBRSxpQkFBaUI7QUFBQSxJQUVqRSxhQUFhLEVBQUUsZ0JBQWdCLFNBQzlCO0FBQ0csb0NBQThCLENBQUM7QUFFL0Isc0JBQWdCLFNBQVNDLFVBQVM7QUFDcEMsWUFBSSxjQUFjLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksU0FBWSxTQUFTLFVBQVUsQ0FBQyxDQUFDO0FBQ3hHLFlBQUksU0FBUyxjQUFjLGlCQUFpQixJQUFJLElBQzVDLElBQUksYUFBYSxXQUFXLElBRTVCLGdCQUFnQixTQUFZLGFBQWEsSUFBSSxhQUFhLFdBQVc7QUFDekUsWUFBSSxnQkFBZ0I7QUFBSSxzQ0FBNEIsTUFBTSxJQUFJO0FBQzlELGVBQU87QUFBQSxNQUNUO0FBRUEsZ0NBQTBCLGVBQWUsWUFBWTtBQUNyRCxvQkFBYyxZQUFZO0FBQzFCLHNCQUFnQixjQUFjO0FBRTFCLHNCQUFnQixPQUFPLGFBQWEsdUJBQXVCLENBQUMsTUFBTTtBQUNsRSx3QkFBa0IsWUFBWSxnQkFBZ0IsT0FBTztBQUNyRCxnQ0FBMEIsWUFBWSxnQkFBZ0IsUUFBUTtBQUM5RCxlQUFTO0FBQ1QsZ0JBQVUsWUFBWSxHQUFHLE9BQU87QUFDaEMsb0JBQWMsWUFBWSxHQUFHLEtBQUs7QUFFdEMsNEJBQXNCLGlCQUFpQixlQUFlO0FBQUEsUUFDcEQsY0FBYztBQUFBLFFBQ2QsS0FBSyxTQUFTLGNBQWM7QUFDMUIsY0FBSSxTQUFTLGdCQUFnQixJQUFJO0FBQ2pDLGNBQUksT0FBTyw2QkFBNkIsTUFBTTtBQUFHLG1CQUFPO0FBQ3hELGNBQUksU0FBUyx3QkFBd0IsTUFBTTtBQUMzQyxjQUFJLE9BQU8sZ0JBQWdCLFlBQVksUUFBUSxHQUFHLEVBQUUsSUFBSSxRQUFRLFFBQVEsUUFBUSxJQUFJO0FBQ3BGLGlCQUFPLFNBQVMsS0FBSyxTQUFZO0FBQUEsUUFDbkM7QUFBQSxNQUNGLENBQUM7QUFFRCxRQUFFLEVBQUUsUUFBUSxNQUFNLGFBQWEsTUFBTSxRQUFRLEtBQUssR0FBRztBQUFBLFFBQ25ELFFBQVE7QUFBQSxNQUNWLENBQUM7QUFBQSxJQUNIO0FBckNNO0FBRUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBOzs7QUMxQ047QUFBQSxpR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxpQkFBaUIsaUNBQStDO0FBRXBFLElBQUFBLFFBQU8sVUFBVSxTQUFVLFFBQVEsUUFBUSxLQUFLO0FBQzlDLGFBQU8sVUFBVSxlQUFlLFFBQVEsS0FBSztBQUFBLFFBQzNDLGNBQWM7QUFBQSxRQUNkLEtBQUssV0FBWTtBQUFFLGlCQUFPLE9BQU8sR0FBRztBQUFBLFFBQUc7QUFBQSxRQUN2QyxLQUFLLFNBQVUsSUFBSTtBQUFFLGlCQUFPLEdBQUcsSUFBSTtBQUFBLFFBQUk7QUFBQSxNQUN6QyxDQUFDO0FBQUEsSUFDSDtBQUFBO0FBQUE7OztBQ1RBO0FBQUEsNEdBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksV0FBVztBQUVmLElBQUFBLFFBQU8sVUFBVSxTQUFVLFVBQVUsVUFBVTtBQUM3QyxhQUFPLGFBQWEsU0FBWSxVQUFVLFNBQVMsSUFBSSxLQUFLLFdBQVcsU0FBUyxRQUFRO0FBQUEsSUFDMUY7QUFBQTtBQUFBOzs7QUNMQTtBQUFBLHNHQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxZQUFXO0FBQ2YsUUFBSSw4QkFBOEI7QUFJbEMsSUFBQUQsUUFBTyxVQUFVLFNBQVUsR0FBRyxTQUFTO0FBQ3JDLFVBQUlDLFVBQVMsT0FBTyxLQUFLLFdBQVcsU0FBUztBQUMzQyxvQ0FBNEIsR0FBRyxTQUFTLFFBQVEsS0FBSztBQUFBLE1BQ3ZEO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ1ZBO0FBQUEsb0dBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUVsQixRQUFJLFNBQVM7QUFDYixRQUFJLFVBQVUsWUFBWSxHQUFHLE9BQU87QUFFcEMsUUFBSSxPQUFRLFNBQVUsS0FBSztBQUFFLGFBQU8sT0FBTyxJQUFJLE9BQU8sR0FBRyxFQUFFLEtBQUs7QUFBQSxJQUFHLEVBQUcsUUFBUTtBQUU5RSxRQUFJLDJCQUEyQjtBQUMvQixRQUFJLHdCQUF3Qix5QkFBeUIsS0FBSyxJQUFJO0FBRTlELElBQUFBLFFBQU8sVUFBVSxTQUFVLE9BQU8sYUFBYTtBQUM3QyxVQUFJLHlCQUF5QixPQUFPLFNBQVMsWUFBWSxDQUFDLE9BQU8sbUJBQW1CO0FBQ2xGLGVBQU87QUFBZSxrQkFBUSxRQUFRLE9BQU8sMEJBQTBCLEVBQUU7QUFBQSxNQUMzRTtBQUFFLGFBQU87QUFBQSxJQUNYO0FBQUE7QUFBQTs7O0FDZkE7QUFBQSwwR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRO0FBQ1osUUFBSSwyQkFBMkI7QUFFL0IsSUFBQUEsUUFBTyxVQUFVLENBQUMsTUFBTSxXQUFZO0FBQ2xDLFVBQUksUUFBUSxJQUFJLE1BQU0sR0FBRztBQUN6QixVQUFJLEVBQUUsV0FBVztBQUFRLGVBQU87QUFFaEMsYUFBTyxlQUFlLE9BQU8sU0FBUyx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUFDcEUsYUFBTyxNQUFNLFVBQVU7QUFBQSxJQUN6QixDQUFDO0FBQUE7QUFBQTs7O0FDVkQ7QUFBQSxzR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSw4QkFBOEI7QUFDbEMsUUFBSSxrQkFBa0I7QUFDdEIsUUFBSSwwQkFBMEI7QUFHOUIsUUFBSSxvQkFBb0IsTUFBTTtBQUU5QixJQUFBQSxRQUFPLFVBQVUsU0FBVSxPQUFPLEdBQUcsT0FBTyxhQUFhO0FBQ3ZELFVBQUkseUJBQXlCO0FBQzNCLFlBQUk7QUFBbUIsNEJBQWtCLE9BQU8sQ0FBQztBQUFBO0FBQzVDLHNDQUE0QixPQUFPLFNBQVMsZ0JBQWdCLE9BQU8sV0FBVyxDQUFDO0FBQUEsTUFDdEY7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDYkE7QUFBQSxvSEFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxhQUFhO0FBQ2pCLFFBQUksU0FBUztBQUNiLFFBQUksOEJBQThCO0FBQ2xDLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksaUJBQWlCO0FBQ3JCLFFBQUksNEJBQTRCO0FBQ2hDLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksb0JBQW9CO0FBQ3hCLFFBQUksMEJBQTBCO0FBQzlCLFFBQUksb0JBQW9CO0FBQ3hCLFFBQUksb0JBQW9CO0FBQ3hCLFFBQUksY0FBYztBQUNsQixRQUFJLFVBQVU7QUFFZCxJQUFBQSxRQUFPLFVBQVUsU0FBVSxXQUFXLFNBQVMsUUFBUSxvQkFBb0I7QUFDekUsVUFBSSxvQkFBb0I7QUFDeEIsVUFBSSxtQkFBbUIscUJBQXFCLElBQUk7QUFDaEQsVUFBSSxPQUFPLFVBQVUsTUFBTSxHQUFHO0FBQzlCLFVBQUksYUFBYSxLQUFLLEtBQUssU0FBUyxDQUFDO0FBQ3JDLFVBQUksZ0JBQWdCLFdBQVcsTUFBTSxNQUFNLElBQUk7QUFFL0MsVUFBSSxDQUFDO0FBQWU7QUFFcEIsVUFBSSx5QkFBeUIsY0FBYztBQUczQyxVQUFJLENBQUMsV0FBVyxPQUFPLHdCQUF3QixPQUFPO0FBQUcsZUFBTyx1QkFBdUI7QUFFdkYsVUFBSSxDQUFDO0FBQVEsZUFBTztBQUVwQixVQUFJLFlBQVksV0FBVyxPQUFPO0FBRWxDLFVBQUksZUFBZSxRQUFRLFNBQVUsR0FBRyxHQUFHO0FBQ3pDLFlBQUksVUFBVSx3QkFBd0IscUJBQXFCLElBQUksR0FBRyxNQUFTO0FBQzNFLFlBQUksU0FBUyxxQkFBcUIsSUFBSSxjQUFjLENBQUMsSUFBSSxJQUFJLGNBQWM7QUFDM0UsWUFBSSxZQUFZO0FBQVcsc0NBQTRCLFFBQVEsV0FBVyxPQUFPO0FBQ2pGLDBCQUFrQixRQUFRLGNBQWMsT0FBTyxPQUFPLENBQUM7QUFDdkQsWUFBSSxRQUFRLGNBQWMsd0JBQXdCLElBQUk7QUFBRyw0QkFBa0IsUUFBUSxNQUFNLFlBQVk7QUFDckcsWUFBSSxVQUFVLFNBQVM7QUFBa0IsNEJBQWtCLFFBQVEsVUFBVSxnQkFBZ0IsQ0FBQztBQUM5RixlQUFPO0FBQUEsTUFDVCxDQUFDO0FBRUQsbUJBQWEsWUFBWTtBQUV6QixVQUFJLGVBQWUsU0FBUztBQUMxQixZQUFJO0FBQWdCLHlCQUFlLGNBQWMsU0FBUztBQUFBO0FBQ3JELG9DQUEwQixjQUFjLFdBQVcsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUFBLE1BQ3hFLFdBQVcsZUFBZSxxQkFBcUIsZUFBZTtBQUM1RCxzQkFBYyxjQUFjLGVBQWUsaUJBQWlCO0FBQzVELHNCQUFjLGNBQWMsZUFBZSxtQkFBbUI7QUFBQSxNQUNoRTtBQUVBLGdDQUEwQixjQUFjLGFBQWE7QUFFckQsVUFBSSxDQUFDO0FBQVMsWUFBSTtBQUVoQixjQUFJLHVCQUF1QixTQUFTLFlBQVk7QUFDOUMsd0NBQTRCLHdCQUF3QixRQUFRLFVBQVU7QUFBQSxVQUN4RTtBQUNBLGlDQUF1QixjQUFjO0FBQUEsUUFDdkMsU0FBUyxPQUFPO0FBQUEsUUFBYztBQUU5QixhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7OztBQ2hFQTtBQUFBO0FBQUE7QUFFQSxRQUFJLElBQUk7QUFDUixRQUFJQyxVQUFTO0FBQ2IsUUFBSSxRQUFRO0FBQ1osUUFBSSxnQ0FBZ0M7QUFFcEMsUUFBSSxlQUFlO0FBQ25CLFFBQUksY0FBY0EsUUFBTyxZQUFZO0FBR3JDLFFBQUksU0FBUyxJQUFJLE1BQU0sS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsVUFBVTtBQUVwRCxRQUFJLGdDQUFnQyxTQUFVLFlBQVksU0FBUztBQUNqRSxVQUFJLElBQUksQ0FBQztBQUNULFFBQUUsVUFBVSxJQUFJLDhCQUE4QixZQUFZLFNBQVMsTUFBTTtBQUN6RSxRQUFFLEVBQUUsUUFBUSxNQUFNLGFBQWEsTUFBTSxPQUFPLEdBQUcsUUFBUSxPQUFPLEdBQUcsQ0FBQztBQUFBLElBQ3BFO0FBRUEsUUFBSSxxQ0FBcUMsU0FBVSxZQUFZLFNBQVM7QUFDdEUsVUFBSSxlQUFlLFlBQVksVUFBVSxHQUFHO0FBQzFDLFlBQUksSUFBSSxDQUFDO0FBQ1QsVUFBRSxVQUFVLElBQUksOEJBQThCLGVBQWUsTUFBTSxZQUFZLFNBQVMsTUFBTTtBQUM5RixVQUFFLEVBQUUsUUFBUSxjQUFjLE1BQU0sTUFBTSxhQUFhLE1BQU0sT0FBTyxHQUFHLFFBQVEsT0FBTyxHQUFHLENBQUM7QUFBQSxNQUN4RjtBQUFBLElBQ0Y7QUFHQSxrQ0FBOEIsU0FBUyxTQUFVLE1BQU07QUFDckQsYUFBTyxTQUFTQyxPQUFNLFNBQVM7QUFBRSxlQUFPLE1BQU0sTUFBTSxNQUFNLFNBQVM7QUFBQSxNQUFHO0FBQUEsSUFDeEUsQ0FBQztBQUNELGtDQUE4QixhQUFhLFNBQVUsTUFBTTtBQUN6RCxhQUFPLFNBQVMsVUFBVSxTQUFTO0FBQUUsZUFBTyxNQUFNLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFBRztBQUFBLElBQzVFLENBQUM7QUFDRCxrQ0FBOEIsY0FBYyxTQUFVLE1BQU07QUFDMUQsYUFBTyxTQUFTLFdBQVcsU0FBUztBQUFFLGVBQU8sTUFBTSxNQUFNLE1BQU0sU0FBUztBQUFBLE1BQUc7QUFBQSxJQUM3RSxDQUFDO0FBQ0Qsa0NBQThCLGtCQUFrQixTQUFVLE1BQU07QUFDOUQsYUFBTyxTQUFTQyxnQkFBZSxTQUFTO0FBQUUsZUFBTyxNQUFNLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFBRztBQUFBLElBQ2pGLENBQUM7QUFDRCxrQ0FBOEIsZUFBZSxTQUFVLE1BQU07QUFDM0QsYUFBTyxTQUFTQyxhQUFZLFNBQVM7QUFBRSxlQUFPLE1BQU0sTUFBTSxNQUFNLFNBQVM7QUFBQSxNQUFHO0FBQUEsSUFDOUUsQ0FBQztBQUNELGtDQUE4QixhQUFhLFNBQVUsTUFBTTtBQUN6RCxhQUFPLFNBQVNDLFdBQVUsU0FBUztBQUFFLGVBQU8sTUFBTSxNQUFNLE1BQU0sU0FBUztBQUFBLE1BQUc7QUFBQSxJQUM1RSxDQUFDO0FBQ0Qsa0NBQThCLFlBQVksU0FBVSxNQUFNO0FBQ3hELGFBQU8sU0FBUyxTQUFTLFNBQVM7QUFBRSxlQUFPLE1BQU0sTUFBTSxNQUFNLFNBQVM7QUFBQSxNQUFHO0FBQUEsSUFDM0UsQ0FBQztBQUNELHVDQUFtQyxnQkFBZ0IsU0FBVSxNQUFNO0FBQ2pFLGFBQU8sU0FBUyxhQUFhLFNBQVM7QUFBRSxlQUFPLE1BQU0sTUFBTSxNQUFNLFNBQVM7QUFBQSxNQUFHO0FBQUEsSUFDL0UsQ0FBQztBQUNELHVDQUFtQyxhQUFhLFNBQVUsTUFBTTtBQUM5RCxhQUFPLFNBQVMsVUFBVSxTQUFTO0FBQUUsZUFBTyxNQUFNLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFBRztBQUFBLElBQzVFLENBQUM7QUFDRCx1Q0FBbUMsZ0JBQWdCLFNBQVUsTUFBTTtBQUNqRSxhQUFPLFNBQVMsYUFBYSxTQUFTO0FBQUUsZUFBTyxNQUFNLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFBRztBQUFBLElBQy9FLENBQUM7QUFBQTtBQUFBOzs7QUN6REQ7QUFBQSxrR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksUUFBUTtBQUNaLFFBQUksV0FBVztBQUNmLFFBQUksMEJBQTBCO0FBRTlCLFFBQUksc0JBQXNCLE1BQU0sVUFBVTtBQUUxQyxRQUFJLHNCQUFzQixNQUFNLFdBQVk7QUFDMUMsVUFBSSxhQUFhO0FBR2YsWUFBSSxTQUFTLE9BQU8sT0FBTyxPQUFPLGVBQWUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxLQUFLLFdBQVk7QUFDOUUsaUJBQU8sU0FBUztBQUFBLFFBQ2xCLEVBQUUsQ0FBQyxDQUFDO0FBQ0osWUFBSSxvQkFBb0IsS0FBSyxNQUFNLE1BQU07QUFBUSxpQkFBTztBQUFBLE1BQzFEO0FBRUEsYUFBTyxvQkFBb0IsS0FBSyxFQUFFLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxNQUFNLFVBRXhELG9CQUFvQixLQUFLLENBQUMsQ0FBQyxNQUFNO0FBQUEsSUFDeEMsQ0FBQztBQUVELElBQUFBLFFBQU8sVUFBVSxzQkFBc0IsU0FBUyxXQUFXO0FBQ3pELFVBQUksSUFBSSxTQUFTLElBQUk7QUFDckIsVUFBSSxPQUFPLHdCQUF3QixFQUFFLE1BQU0sT0FBTztBQUNsRCxVQUFJLFVBQVUsd0JBQXdCLEVBQUUsT0FBTztBQUMvQyxhQUFPLENBQUMsT0FBTyxVQUFVLENBQUMsVUFBVSxPQUFPLE9BQU8sT0FBTztBQUFBLElBQzNELElBQUk7QUFBQTtBQUFBOzs7QUM1Qko7QUFBQTtBQUFBO0FBQ0EsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSSxnQkFBZ0I7QUFFcEIsUUFBSSxpQkFBaUIsTUFBTTtBQUkzQixRQUFJLGVBQWUsYUFBYSxlQUFlO0FBQzdDLG9CQUFjLGdCQUFnQixZQUFZLGFBQWE7QUFBQSxJQUN6RDtBQUFBO0FBQUE7OztBQ1ZBO0FBQUEsbUhBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUTtBQUNaLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUksYUFBYTtBQUVqQixRQUFJLFVBQVUsZ0JBQWdCLFNBQVM7QUFFdkMsSUFBQUEsUUFBTyxVQUFVLFNBQVUsYUFBYTtBQUl0QyxhQUFPLGNBQWMsTUFBTSxDQUFDLE1BQU0sV0FBWTtBQUM1QyxZQUFJLFFBQVEsQ0FBQztBQUNiLFlBQUksY0FBYyxNQUFNLGNBQWMsQ0FBQztBQUN2QyxvQkFBWSxPQUFPLElBQUksV0FBWTtBQUNqQyxpQkFBTyxFQUFFLEtBQUssRUFBRTtBQUFBLFFBQ2xCO0FBQ0EsZUFBTyxNQUFNLFdBQVcsRUFBRSxPQUFPLEVBQUUsUUFBUTtBQUFBLE1BQzdDLENBQUM7QUFBQSxJQUNIO0FBQUE7QUFBQTs7O0FDbkJBO0FBQUE7QUFBQTtBQUNBLFFBQUksSUFBSTtBQUNSLFFBQUksVUFBVSwwQkFBd0M7QUFDdEQsUUFBSSwrQkFBK0I7QUFFbkMsUUFBSSxzQkFBc0IsNkJBQTZCLFFBQVE7QUFLL0QsTUFBRSxFQUFFLFFBQVEsU0FBUyxPQUFPLE1BQU0sUUFBUSxDQUFDLG9CQUFvQixHQUFHO0FBQUEsTUFDaEUsUUFBUSxTQUFTLE9BQU8sWUFBNEI7QUFDbEQsZUFBTyxRQUFRLE1BQU0sWUFBWSxVQUFVLFNBQVMsSUFBSSxVQUFVLENBQUMsSUFBSSxNQUFTO0FBQUEsTUFDbEY7QUFBQSxJQUNGLENBQUM7QUFBQTtBQUFBOzs7QUNkRDtBQUFBLHlHQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFFBQVE7QUFFWixJQUFBQSxRQUFPLFVBQVUsU0FBVSxhQUFhLFVBQVU7QUFDaEQsVUFBSSxTQUFTLENBQUMsRUFBRSxXQUFXO0FBQzNCLGFBQU8sQ0FBQyxDQUFDLFVBQVUsTUFBTSxXQUFZO0FBRW5DLGVBQU8sS0FBSyxNQUFNLFlBQVksV0FBWTtBQUFFLGlCQUFPO0FBQUEsUUFBRyxHQUFHLENBQUM7QUFBQSxNQUM1RCxDQUFDO0FBQUEsSUFDSDtBQUFBO0FBQUE7OztBQ1RBO0FBQUEsaUdBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksV0FBVywwQkFBd0M7QUFDdkQsUUFBSSxzQkFBc0I7QUFFMUIsUUFBSSxnQkFBZ0Isb0JBQW9CLFNBQVM7QUFJakQsSUFBQUEsUUFBTyxVQUFVLENBQUMsZ0JBQWdCLFNBQVNDLFNBQVEsWUFBNEI7QUFDN0UsYUFBTyxTQUFTLE1BQU0sWUFBWSxVQUFVLFNBQVMsSUFBSSxVQUFVLENBQUMsSUFBSSxNQUFTO0FBQUEsSUFFbkYsSUFBSSxDQUFDLEVBQUU7QUFBQTtBQUFBOzs7QUNYUDtBQUFBO0FBQUE7QUFDQSxRQUFJLElBQUk7QUFDUixRQUFJQyxXQUFVO0FBS2QsTUFBRSxFQUFFLFFBQVEsU0FBUyxPQUFPLE1BQU0sUUFBUSxDQUFDLEVBQUUsWUFBWUEsU0FBUSxHQUFHO0FBQUEsTUFDbEUsU0FBU0E7QUFBQSxJQUNYLENBQUM7QUFBQTtBQUFBOzs7QUNURDtBQUFBLHFHQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGtCQUFrQjtBQUN0QixRQUFJLFNBQVM7QUFDYixRQUFJLGlCQUFpQixpQ0FBK0M7QUFFcEUsUUFBSSxjQUFjLGdCQUFnQixhQUFhO0FBQy9DLFFBQUksaUJBQWlCLE1BQU07QUFJM0IsUUFBSSxlQUFlLFdBQVcsTUFBTSxRQUFXO0FBQzdDLHFCQUFlLGdCQUFnQixhQUFhO0FBQUEsUUFDMUMsY0FBYztBQUFBLFFBQ2QsT0FBTyxPQUFPLElBQUk7QUFBQSxNQUNwQixDQUFDO0FBQUEsSUFDSDtBQUdBLElBQUFBLFFBQU8sVUFBVSxTQUFVLEtBQUs7QUFDOUIscUJBQWUsV0FBVyxFQUFFLEdBQUcsSUFBSTtBQUFBLElBQ3JDO0FBQUE7QUFBQTs7O0FDcEJBO0FBQUE7QUFBQTtBQUNBLFFBQUksSUFBSTtBQUNSLFFBQUksWUFBWSx5QkFBdUM7QUFDdkQsUUFBSSxRQUFRO0FBQ1osUUFBSSxtQkFBbUI7QUFHdkIsUUFBSSxtQkFBbUIsTUFBTSxXQUFZO0FBRXZDLGFBQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTO0FBQUEsSUFDNUIsQ0FBQztBQUlELE1BQUUsRUFBRSxRQUFRLFNBQVMsT0FBTyxNQUFNLFFBQVEsaUJBQWlCLEdBQUc7QUFBQSxNQUM1RCxVQUFVLFNBQVMsU0FBUyxJQUEwQjtBQUNwRCxlQUFPLFVBQVUsTUFBTSxJQUFJLFVBQVUsU0FBUyxJQUFJLFVBQVUsQ0FBQyxJQUFJLE1BQVM7QUFBQSxNQUM1RTtBQUFBLElBQ0YsQ0FBQztBQUdELHFCQUFpQixVQUFVO0FBQUE7QUFBQTs7O0FDckIzQjtBQUFBO0FBQUE7QUFFQSxRQUFJLElBQUk7QUFDUixRQUFJLGNBQWM7QUFDbEIsUUFBSSxXQUFXLHlCQUF1QztBQUN0RCxRQUFJLHNCQUFzQjtBQUUxQixRQUFJLGdCQUFnQixZQUFZLENBQUMsRUFBRSxPQUFPO0FBRTFDLFFBQUksZ0JBQWdCLENBQUMsQ0FBQyxpQkFBaUIsSUFBSSxjQUFjLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJO0FBQ3ZFLFFBQUksU0FBUyxpQkFBaUIsQ0FBQyxvQkFBb0IsU0FBUztBQUk1RCxNQUFFLEVBQUUsUUFBUSxTQUFTLE9BQU8sTUFBTSxRQUFRLE9BQU8sR0FBRztBQUFBLE1BQ2xELFNBQVMsU0FBUyxRQUFRLGVBQXFDO0FBQzdELFlBQUksWUFBWSxVQUFVLFNBQVMsSUFBSSxVQUFVLENBQUMsSUFBSTtBQUN0RCxlQUFPLGdCQUVILGNBQWMsTUFBTSxlQUFlLFNBQVMsS0FBSyxJQUNqRCxTQUFTLE1BQU0sZUFBZSxTQUFTO0FBQUEsTUFDN0M7QUFBQSxJQUNGLENBQUM7QUFBQTtBQUFBOzs7QUN0QkQ7QUFBQSwyR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRO0FBRVosSUFBQUEsUUFBTyxVQUFVLENBQUMsTUFBTSxXQUFZO0FBQ2xDLGVBQVMsSUFBSTtBQUFBLE1BQWM7QUFDM0IsUUFBRSxVQUFVLGNBQWM7QUFFMUIsYUFBTyxPQUFPLGVBQWUsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO0FBQUEsSUFDOUMsQ0FBQztBQUFBO0FBQUE7OztBQ1JEO0FBQUEsMEdBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksU0FBUztBQUNiLFFBQUksYUFBYTtBQUNqQixRQUFJLFdBQVc7QUFDZixRQUFJLFlBQVk7QUFDaEIsUUFBSSwyQkFBMkI7QUFFL0IsUUFBSSxXQUFXLFVBQVUsVUFBVTtBQUNuQyxRQUFJLFVBQVU7QUFDZCxRQUFJLGtCQUFrQixRQUFRO0FBSzlCLElBQUFBLFFBQU8sVUFBVSwyQkFBMkIsUUFBUSxpQkFBaUIsU0FBVSxHQUFHO0FBQ2hGLFVBQUksU0FBUyxTQUFTLENBQUM7QUFDdkIsVUFBSSxPQUFPLFFBQVEsUUFBUTtBQUFHLGVBQU8sT0FBTyxRQUFRO0FBQ3BELFVBQUksY0FBYyxPQUFPO0FBQ3pCLFVBQUksV0FBVyxXQUFXLEtBQUssa0JBQWtCLGFBQWE7QUFDNUQsZUFBTyxZQUFZO0FBQUEsTUFDckI7QUFBRSxhQUFPLGtCQUFrQixVQUFVLGtCQUFrQjtBQUFBLElBQ3pEO0FBQUE7QUFBQTs7O0FDckJBO0FBQUEsaUdBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUTtBQUNaLFFBQUksYUFBYTtBQUNqQixRQUFJQyxZQUFXO0FBQ2YsUUFBSSxTQUFTO0FBQ2IsUUFBSSxpQkFBaUI7QUFDckIsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSSxrQkFBa0I7QUFDdEIsUUFBSSxVQUFVO0FBRWQsUUFBSSxXQUFXLGdCQUFnQixVQUFVO0FBQ3pDLFFBQUkseUJBQXlCO0FBSTdCLFFBQUk7QUFBSixRQUF1QjtBQUF2QixRQUEwRDtBQUcxRCxRQUFJLENBQUMsRUFBRSxNQUFNO0FBQ1gsc0JBQWdCLENBQUMsRUFBRSxLQUFLO0FBRXhCLFVBQUksRUFBRSxVQUFVO0FBQWdCLGlDQUF5QjtBQUFBLFdBQ3BEO0FBQ0gsNENBQW9DLGVBQWUsZUFBZSxhQUFhLENBQUM7QUFDaEYsWUFBSSxzQ0FBc0MsT0FBTztBQUFXLDhCQUFvQjtBQUFBLE1BQ2xGO0FBQUEsSUFDRjtBQUVBLFFBQUkseUJBQXlCLENBQUNBLFVBQVMsaUJBQWlCLEtBQUssTUFBTSxXQUFZO0FBQzdFLFVBQUksT0FBTyxDQUFDO0FBRVosYUFBTyxrQkFBa0IsUUFBUSxFQUFFLEtBQUssSUFBSSxNQUFNO0FBQUEsSUFDcEQsQ0FBQztBQUVELFFBQUk7QUFBd0IsMEJBQW9CLENBQUM7QUFBQSxhQUN4QztBQUFTLDBCQUFvQixPQUFPLGlCQUFpQjtBQUk5RCxRQUFJLENBQUMsV0FBVyxrQkFBa0IsUUFBUSxDQUFDLEdBQUc7QUFDNUMsb0JBQWMsbUJBQW1CLFVBQVUsV0FBWTtBQUNyRCxlQUFPO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDSDtBQUVBLElBQUFELFFBQU8sVUFBVTtBQUFBLE1BQ2YsbUJBQW1CO0FBQUEsTUFDbkIsd0JBQXdCO0FBQUEsSUFDMUI7QUFBQTtBQUFBOzs7QUNoREE7QUFBQSw4R0FBQUUsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxvQkFBb0IseUJBQXVDO0FBQy9ELFFBQUksU0FBUztBQUNiLFFBQUksMkJBQTJCO0FBQy9CLFFBQUksaUJBQWlCO0FBQ3JCLFFBQUksWUFBWTtBQUVoQixRQUFJLGFBQWEsV0FBWTtBQUFFLGFBQU87QUFBQSxJQUFNO0FBRTVDLElBQUFBLFFBQU8sVUFBVSxTQUFVLHFCQUFxQixNQUFNLE1BQU0saUJBQWlCO0FBQzNFLFVBQUksZ0JBQWdCLE9BQU87QUFDM0IsMEJBQW9CLFlBQVksT0FBTyxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDO0FBQ3JILHFCQUFlLHFCQUFxQixlQUFlLE9BQU8sSUFBSTtBQUM5RCxnQkFBVSxhQUFhLElBQUk7QUFDM0IsYUFBTztBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUNmQTtBQUFBLGtHQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLElBQUk7QUFDUixRQUFJLE9BQU87QUFDWCxRQUFJLFVBQVU7QUFDZCxRQUFJLGVBQWU7QUFDbkIsUUFBSSxhQUFhO0FBQ2pCLFFBQUksNEJBQTRCO0FBQ2hDLFFBQUksaUJBQWlCO0FBQ3JCLFFBQUksaUJBQWlCO0FBQ3JCLFFBQUksaUJBQWlCO0FBQ3JCLFFBQUksOEJBQThCO0FBQ2xDLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUksWUFBWTtBQUNoQixRQUFJLGdCQUFnQjtBQUVwQixRQUFJLHVCQUF1QixhQUFhO0FBQ3hDLFFBQUksNkJBQTZCLGFBQWE7QUFDOUMsUUFBSSxvQkFBb0IsY0FBYztBQUN0QyxRQUFJLHlCQUF5QixjQUFjO0FBQzNDLFFBQUksV0FBVyxnQkFBZ0IsVUFBVTtBQUN6QyxRQUFJLE9BQU87QUFDWCxRQUFJLFNBQVM7QUFDYixRQUFJLFVBQVU7QUFFZCxRQUFJLGFBQWEsV0FBWTtBQUFFLGFBQU87QUFBQSxJQUFNO0FBRTVDLElBQUFBLFFBQU8sVUFBVSxTQUFVLFVBQVUsTUFBTSxxQkFBcUIsTUFBTSxTQUFTLFFBQVEsUUFBUTtBQUM3RixnQ0FBMEIscUJBQXFCLE1BQU0sSUFBSTtBQUV6RCxVQUFJLHFCQUFxQixTQUFVLE1BQU07QUFDdkMsWUFBSSxTQUFTLFdBQVc7QUFBaUIsaUJBQU87QUFDaEQsWUFBSSxDQUFDLDBCQUEwQixRQUFRLFFBQVE7QUFBbUIsaUJBQU8sa0JBQWtCLElBQUk7QUFFL0YsZ0JBQVEsTUFBTTtBQUFBLFVBQ1osS0FBSztBQUFNLG1CQUFPLFNBQVNDLFFBQU87QUFBRSxxQkFBTyxJQUFJLG9CQUFvQixNQUFNLElBQUk7QUFBQSxZQUFHO0FBQUEsVUFDaEYsS0FBSztBQUFRLG1CQUFPLFNBQVMsU0FBUztBQUFFLHFCQUFPLElBQUksb0JBQW9CLE1BQU0sSUFBSTtBQUFBLFlBQUc7QUFBQSxVQUNwRixLQUFLO0FBQVMsbUJBQU8sU0FBUyxVQUFVO0FBQUUscUJBQU8sSUFBSSxvQkFBb0IsTUFBTSxJQUFJO0FBQUEsWUFBRztBQUFBLFFBQ3hGO0FBRUEsZUFBTyxXQUFZO0FBQUUsaUJBQU8sSUFBSSxvQkFBb0IsSUFBSTtBQUFBLFFBQUc7QUFBQSxNQUM3RDtBQUVBLFVBQUksZ0JBQWdCLE9BQU87QUFDM0IsVUFBSSx3QkFBd0I7QUFDNUIsVUFBSSxvQkFBb0IsU0FBUztBQUNqQyxVQUFJLGlCQUFpQixrQkFBa0IsUUFBUSxLQUMxQyxrQkFBa0IsWUFBWSxLQUM5QixXQUFXLGtCQUFrQixPQUFPO0FBQ3pDLFVBQUksa0JBQWtCLENBQUMsMEJBQTBCLGtCQUFrQixtQkFBbUIsT0FBTztBQUM3RixVQUFJLG9CQUFvQixTQUFTLFVBQVUsa0JBQWtCLFdBQVcsaUJBQWlCO0FBQ3pGLFVBQUksMEJBQTBCLFNBQVM7QUFHdkMsVUFBSSxtQkFBbUI7QUFDckIsbUNBQTJCLGVBQWUsa0JBQWtCLEtBQUssSUFBSSxTQUFTLENBQUMsQ0FBQztBQUNoRixZQUFJLDZCQUE2QixPQUFPLGFBQWEseUJBQXlCLE1BQU07QUFDbEYsY0FBSSxDQUFDLFdBQVcsZUFBZSx3QkFBd0IsTUFBTSxtQkFBbUI7QUFDOUUsZ0JBQUksZ0JBQWdCO0FBQ2xCLDZCQUFlLDBCQUEwQixpQkFBaUI7QUFBQSxZQUM1RCxXQUFXLENBQUMsV0FBVyx5QkFBeUIsUUFBUSxDQUFDLEdBQUc7QUFDMUQsNEJBQWMsMEJBQTBCLFVBQVUsVUFBVTtBQUFBLFlBQzlEO0FBQUEsVUFDRjtBQUVBLHlCQUFlLDBCQUEwQixlQUFlLE1BQU0sSUFBSTtBQUNsRSxjQUFJO0FBQVMsc0JBQVUsYUFBYSxJQUFJO0FBQUEsUUFDMUM7QUFBQSxNQUNGO0FBR0EsVUFBSSx3QkFBd0IsWUFBWSxVQUFVLGtCQUFrQixlQUFlLFNBQVMsUUFBUTtBQUNsRyxZQUFJLENBQUMsV0FBVyw0QkFBNEI7QUFDMUMsc0NBQTRCLG1CQUFtQixRQUFRLE1BQU07QUFBQSxRQUMvRCxPQUFPO0FBQ0wsa0NBQXdCO0FBQ3hCLDRCQUFrQixTQUFTLFNBQVM7QUFBRSxtQkFBTyxLQUFLLGdCQUFnQixJQUFJO0FBQUEsVUFBRztBQUFBLFFBQzNFO0FBQUEsTUFDRjtBQUdBLFVBQUksU0FBUztBQUNYLGtCQUFVO0FBQUEsVUFDUixRQUFRLG1CQUFtQixNQUFNO0FBQUEsVUFDakMsTUFBTSxTQUFTLGtCQUFrQixtQkFBbUIsSUFBSTtBQUFBLFVBQ3hELFNBQVMsbUJBQW1CLE9BQU87QUFBQSxRQUNyQztBQUNBLFlBQUk7QUFBUSxlQUFLLE9BQU8sU0FBUztBQUMvQixnQkFBSSwwQkFBMEIseUJBQXlCLEVBQUUsT0FBTyxvQkFBb0I7QUFDbEYsNEJBQWMsbUJBQW1CLEtBQUssUUFBUSxHQUFHLENBQUM7QUFBQSxZQUNwRDtBQUFBLFVBQ0Y7QUFBQTtBQUFPLFlBQUUsRUFBRSxRQUFRLE1BQU0sT0FBTyxNQUFNLFFBQVEsMEJBQTBCLHNCQUFzQixHQUFHLE9BQU87QUFBQSxNQUMxRztBQUdBLFdBQUssQ0FBQyxXQUFXLFdBQVcsa0JBQWtCLFFBQVEsTUFBTSxpQkFBaUI7QUFDM0Usc0JBQWMsbUJBQW1CLFVBQVUsaUJBQWlCLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFBQSxNQUMvRTtBQUNBLGdCQUFVLElBQUksSUFBSTtBQUVsQixhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7OztBQ3JHQTtBQUFBLDRHQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFHQSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxPQUFPLE1BQU07QUFDdEMsYUFBTyxFQUFFLE9BQU8sT0FBTyxNQUFNLEtBQUs7QUFBQSxJQUNwQztBQUFBO0FBQUE7OztBQ0xBO0FBQUEsa0dBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUksbUJBQW1CO0FBQ3ZCLFFBQUksWUFBWTtBQUNoQixRQUFJLHNCQUFzQjtBQUMxQixRQUFJLGlCQUFpQixpQ0FBK0M7QUFDcEUsUUFBSSxpQkFBaUI7QUFDckIsUUFBSSx5QkFBeUI7QUFDN0IsUUFBSSxVQUFVO0FBQ2QsUUFBSSxjQUFjO0FBRWxCLFFBQUksaUJBQWlCO0FBQ3JCLFFBQUksbUJBQW1CLG9CQUFvQjtBQUMzQyxRQUFJLG1CQUFtQixvQkFBb0IsVUFBVSxjQUFjO0FBWW5FLElBQUFBLFFBQU8sVUFBVSxlQUFlLE9BQU8sU0FBUyxTQUFVLFVBQVUsTUFBTTtBQUN4RSx1QkFBaUIsTUFBTTtBQUFBLFFBQ3JCLE1BQU07QUFBQSxRQUNOLFFBQVEsZ0JBQWdCLFFBQVE7QUFBQTtBQUFBLFFBQ2hDLE9BQU87QUFBQTtBQUFBLFFBQ1AsTUFBTTtBQUFBO0FBQUEsTUFDUixDQUFDO0FBQUEsSUFHSCxHQUFHLFdBQVk7QUFDYixVQUFJLFFBQVEsaUJBQWlCLElBQUk7QUFDakMsVUFBSSxTQUFTLE1BQU07QUFDbkIsVUFBSSxRQUFRLE1BQU07QUFDbEIsVUFBSSxDQUFDLFVBQVUsU0FBUyxPQUFPLFFBQVE7QUFDckMsY0FBTSxTQUFTO0FBQ2YsZUFBTyx1QkFBdUIsUUFBVyxJQUFJO0FBQUEsTUFDL0M7QUFDQSxjQUFRLE1BQU0sTUFBTTtBQUFBLFFBQ2xCLEtBQUs7QUFBUSxpQkFBTyx1QkFBdUIsT0FBTyxLQUFLO0FBQUEsUUFDdkQsS0FBSztBQUFVLGlCQUFPLHVCQUF1QixPQUFPLEtBQUssR0FBRyxLQUFLO0FBQUEsTUFDbkU7QUFBRSxhQUFPLHVCQUF1QixDQUFDLE9BQU8sT0FBTyxLQUFLLENBQUMsR0FBRyxLQUFLO0FBQUEsSUFDL0QsR0FBRyxRQUFRO0FBS1gsUUFBSSxTQUFTLFVBQVUsWUFBWSxVQUFVO0FBRzdDLHFCQUFpQixNQUFNO0FBQ3ZCLHFCQUFpQixRQUFRO0FBQ3pCLHFCQUFpQixTQUFTO0FBRzFCLFFBQUksQ0FBQyxXQUFXLGVBQWUsT0FBTyxTQUFTO0FBQVUsVUFBSTtBQUMzRCx1QkFBZSxRQUFRLFFBQVEsRUFBRSxPQUFPLFNBQVMsQ0FBQztBQUFBLE1BQ3BELFNBQVMsT0FBTztBQUFBLE1BQWM7QUFBQTtBQUFBOzs7QUM3RDlCO0FBQUE7QUFBQTtBQUNBLFFBQUksSUFBSTtBQUNSLFFBQUksY0FBYztBQUNsQixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLGtCQUFrQjtBQUN0QixRQUFJLHNCQUFzQjtBQUUxQixRQUFJLGFBQWEsWUFBWSxDQUFDLEVBQUUsSUFBSTtBQUVwQyxRQUFJLGNBQWMsa0JBQWtCO0FBQ3BDLFFBQUksU0FBUyxlQUFlLENBQUMsb0JBQW9CLFFBQVEsR0FBRztBQUk1RCxNQUFFLEVBQUUsUUFBUSxTQUFTLE9BQU8sTUFBTSxRQUFRLE9BQU8sR0FBRztBQUFBLE1BQ2xELE1BQU0sU0FBUyxLQUFLLFdBQVc7QUFDN0IsZUFBTyxXQUFXLGdCQUFnQixJQUFJLEdBQUcsY0FBYyxTQUFZLE1BQU0sU0FBUztBQUFBLE1BQ3BGO0FBQUEsSUFDRixDQUFDO0FBQUE7QUFBQTs7O0FDbEJEO0FBQUE7QUFBQTtBQUNBLFFBQUksSUFBSTtBQUNSLFFBQUksT0FBTywwQkFBd0M7QUFDbkQsUUFBSSwrQkFBK0I7QUFFbkMsUUFBSSxzQkFBc0IsNkJBQTZCLEtBQUs7QUFLNUQsTUFBRSxFQUFFLFFBQVEsU0FBUyxPQUFPLE1BQU0sUUFBUSxDQUFDLG9CQUFvQixHQUFHO0FBQUEsTUFDaEUsS0FBSyxTQUFTLElBQUksWUFBNEI7QUFDNUMsZUFBTyxLQUFLLE1BQU0sWUFBWSxVQUFVLFNBQVMsSUFBSSxVQUFVLENBQUMsSUFBSSxNQUFTO0FBQUEsTUFDL0U7QUFBQSxJQUNGLENBQUM7QUFBQTtBQUFBOzs7QUNkRDtBQUFBLCtGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFlBQVk7QUFDaEIsUUFBSSxXQUFXO0FBQ2YsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSSxvQkFBb0I7QUFFeEIsUUFBSSxhQUFhO0FBRWpCLFFBQUksZUFBZTtBQUduQixRQUFJLGVBQWUsU0FBVSxVQUFVO0FBQ3JDLGFBQU8sU0FBVSxNQUFNLFlBQVksaUJBQWlCQyxPQUFNO0FBQ3hELFlBQUksSUFBSSxTQUFTLElBQUk7QUFDckIsWUFBSUMsUUFBTyxjQUFjLENBQUM7QUFDMUIsWUFBSSxTQUFTLGtCQUFrQixDQUFDO0FBQ2hDLGtCQUFVLFVBQVU7QUFDcEIsWUFBSSxXQUFXLEtBQUssa0JBQWtCO0FBQUcsZ0JBQU0sSUFBSSxXQUFXLFlBQVk7QUFDMUUsWUFBSSxRQUFRLFdBQVcsU0FBUyxJQUFJO0FBQ3BDLFlBQUksSUFBSSxXQUFXLEtBQUs7QUFDeEIsWUFBSSxrQkFBa0I7QUFBRyxpQkFBTyxNQUFNO0FBQ3BDLGdCQUFJLFNBQVNBLE9BQU07QUFDakIsY0FBQUQsUUFBT0MsTUFBSyxLQUFLO0FBQ2pCLHVCQUFTO0FBQ1Q7QUFBQSxZQUNGO0FBQ0EscUJBQVM7QUFDVCxnQkFBSSxXQUFXLFFBQVEsSUFBSSxVQUFVLE9BQU87QUFDMUMsb0JBQU0sSUFBSSxXQUFXLFlBQVk7QUFBQSxZQUNuQztBQUFBLFVBQ0Y7QUFDQSxlQUFNLFdBQVcsU0FBUyxJQUFJLFNBQVMsT0FBTyxTQUFTO0FBQUcsY0FBSSxTQUFTQSxPQUFNO0FBQzNFLFlBQUFELFFBQU8sV0FBV0EsT0FBTUMsTUFBSyxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBQUEsVUFDL0M7QUFDQSxlQUFPRDtBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBRUEsSUFBQUQsUUFBTyxVQUFVO0FBQUE7QUFBQTtBQUFBLE1BR2YsTUFBTSxhQUFhLEtBQUs7QUFBQTtBQUFBO0FBQUEsTUFHeEIsT0FBTyxhQUFhLElBQUk7QUFBQSxJQUMxQjtBQUFBO0FBQUE7OztBQzdDQTtBQUFBLGlHQUFBRyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxVQUFTO0FBQ2IsUUFBSSxVQUFVO0FBRWQsSUFBQUQsUUFBTyxVQUFVLFFBQVFDLFFBQU8sT0FBTyxNQUFNO0FBQUE7QUFBQTs7O0FDSjdDO0FBQUE7QUFBQTtBQUNBLFFBQUksSUFBSTtBQUNSLFFBQUksVUFBVSx1QkFBcUM7QUFDbkQsUUFBSSxzQkFBc0I7QUFDMUIsUUFBSSxpQkFBaUI7QUFDckIsUUFBSSxVQUFVO0FBSWQsUUFBSSxhQUFhLENBQUMsV0FBVyxpQkFBaUIsTUFBTSxpQkFBaUI7QUFDckUsUUFBSSxTQUFTLGNBQWMsQ0FBQyxvQkFBb0IsUUFBUTtBQUl4RCxNQUFFLEVBQUUsUUFBUSxTQUFTLE9BQU8sTUFBTSxRQUFRLE9BQU8sR0FBRztBQUFBLE1BQ2xELFFBQVEsU0FBUyxPQUFPLFlBQWlDO0FBQ3ZELFlBQUksU0FBUyxVQUFVO0FBQ3ZCLGVBQU8sUUFBUSxNQUFNLFlBQVksUUFBUSxTQUFTLElBQUksVUFBVSxDQUFDLElBQUksTUFBUztBQUFBLE1BQ2hGO0FBQUEsSUFDRixDQUFDO0FBQUE7QUFBQTs7O0FDbkJEO0FBQUE7QUFBQTtBQUNBLFFBQUksSUFBSTtBQUNSLFFBQUksVUFBVTtBQUNkLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUlDLFlBQVc7QUFDZixRQUFJLGtCQUFrQjtBQUN0QixRQUFJLG9CQUFvQjtBQUN4QixRQUFJLGtCQUFrQjtBQUN0QixRQUFJLGlCQUFpQjtBQUNyQixRQUFJLGtCQUFrQjtBQUN0QixRQUFJLCtCQUErQjtBQUNuQyxRQUFJLGNBQWM7QUFFbEIsUUFBSSxzQkFBc0IsNkJBQTZCLE9BQU87QUFFOUQsUUFBSSxVQUFVLGdCQUFnQixTQUFTO0FBQ3ZDLFFBQUksU0FBUztBQUNiLFFBQUksTUFBTSxLQUFLO0FBS2YsTUFBRSxFQUFFLFFBQVEsU0FBUyxPQUFPLE1BQU0sUUFBUSxDQUFDLG9CQUFvQixHQUFHO0FBQUEsTUFDaEUsT0FBTyxTQUFTLE1BQU0sT0FBTyxLQUFLO0FBQ2hDLFlBQUksSUFBSSxnQkFBZ0IsSUFBSTtBQUM1QixZQUFJLFNBQVMsa0JBQWtCLENBQUM7QUFDaEMsWUFBSSxJQUFJLGdCQUFnQixPQUFPLE1BQU07QUFDckMsWUFBSSxNQUFNLGdCQUFnQixRQUFRLFNBQVksU0FBUyxLQUFLLE1BQU07QUFFbEUsWUFBSSxhQUFhLFFBQVE7QUFDekIsWUFBSSxRQUFRLENBQUMsR0FBRztBQUNkLHdCQUFjLEVBQUU7QUFFaEIsY0FBSSxjQUFjLFdBQVcsTUFBTSxnQkFBZ0IsVUFBVSxRQUFRLFlBQVksU0FBUyxJQUFJO0FBQzVGLDBCQUFjO0FBQUEsVUFDaEIsV0FBV0EsVUFBUyxXQUFXLEdBQUc7QUFDaEMsMEJBQWMsWUFBWSxPQUFPO0FBQ2pDLGdCQUFJLGdCQUFnQjtBQUFNLDRCQUFjO0FBQUEsVUFDMUM7QUFDQSxjQUFJLGdCQUFnQixVQUFVLGdCQUFnQixRQUFXO0FBQ3ZELG1CQUFPLFlBQVksR0FBRyxHQUFHLEdBQUc7QUFBQSxVQUM5QjtBQUFBLFFBQ0Y7QUFDQSxpQkFBUyxLQUFLLGdCQUFnQixTQUFZLFNBQVMsYUFBYSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDL0UsYUFBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLEtBQUs7QUFBSyxjQUFJLEtBQUs7QUFBRywyQkFBZSxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDekUsZUFBTyxTQUFTO0FBQ2hCLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRixDQUFDO0FBQUE7QUFBQTs7O0FDaEREO0FBQUEsMkdBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUVsQixRQUFJLGFBQWE7QUFFakIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsR0FBRyxHQUFHO0FBQy9CLFVBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUFHLGNBQU0sSUFBSSxXQUFXLDRCQUE0QixZQUFZLENBQUMsSUFBSSxTQUFTLFlBQVksQ0FBQyxDQUFDO0FBQUEsSUFDN0c7QUFBQTtBQUFBOzs7QUNQQTtBQUFBO0FBQUE7QUFDQSxRQUFJLElBQUk7QUFDUixRQUFJLFdBQVc7QUFDZixRQUFJLG9CQUFvQjtBQUN4QixRQUFJLGlCQUFpQjtBQUNyQixRQUFJLHdCQUF3QjtBQUM1QixRQUFJLDJCQUEyQjtBQUcvQixRQUFJLG1CQUFtQixDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU07QUFHekMsUUFBSSxpQ0FBaUMsV0FBWTtBQUMvQyxVQUFJO0FBRUYsZUFBTyxlQUFlLENBQUMsR0FBRyxVQUFVLEVBQUUsVUFBVSxNQUFNLENBQUMsRUFBRSxRQUFRO0FBQUEsTUFDbkUsU0FBUyxPQUFPO0FBQ2QsZUFBTyxpQkFBaUI7QUFBQSxNQUMxQjtBQUFBLElBQ0Y7QUFFQSxRQUFJLFNBQVMsb0JBQW9CLENBQUMsK0JBQStCO0FBSWpFLE1BQUUsRUFBRSxRQUFRLFNBQVMsT0FBTyxNQUFNLE9BQU8sR0FBRyxRQUFRLE9BQU8sR0FBRztBQUFBO0FBQUEsTUFFNUQsU0FBUyxTQUFTLFFBQVEsTUFBTTtBQUM5QixZQUFJLElBQUksU0FBUyxJQUFJO0FBQ3JCLFlBQUksTUFBTSxrQkFBa0IsQ0FBQztBQUM3QixZQUFJLFdBQVcsVUFBVTtBQUN6QixZQUFJLFVBQVU7QUFDWixtQ0FBeUIsTUFBTSxRQUFRO0FBQ3ZDLGNBQUksSUFBSTtBQUNSLGlCQUFPLEtBQUs7QUFDVixnQkFBSSxLQUFLLElBQUk7QUFDYixnQkFBSSxLQUFLO0FBQUcsZ0JBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUFBO0FBQ2xCLG9DQUFzQixHQUFHLEVBQUU7QUFBQSxVQUNsQztBQUNBLG1CQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsS0FBSztBQUNqQyxjQUFFLENBQUMsSUFBSSxVQUFVLENBQUM7QUFBQSxVQUNwQjtBQUFBLFFBQ0Y7QUFBRSxlQUFPLGVBQWUsR0FBRyxNQUFNLFFBQVE7QUFBQSxNQUMzQztBQUFBLElBQ0YsQ0FBQztBQUFBO0FBQUE7OztBQzVDRDtBQUFBLDhHQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFJLFFBQVE7QUFFWixJQUFBQSxRQUFPLFVBQVUsTUFBTSxXQUFZO0FBQ2pDLFVBQUksT0FBTyxlQUFlLFlBQVk7QUFDcEMsWUFBSSxTQUFTLElBQUksWUFBWSxDQUFDO0FBRTlCLFlBQUksT0FBTyxhQUFhLE1BQU07QUFBRyxpQkFBTyxlQUFlLFFBQVEsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQUEsTUFDbEY7QUFBQSxJQUNGLENBQUM7QUFBQTtBQUFBOzs7QUNWRDtBQUFBLHVHQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFFBQVE7QUFDWixRQUFJQyxZQUFXO0FBQ2YsUUFBSSxVQUFVO0FBQ2QsUUFBSSw4QkFBOEI7QUFHbEMsUUFBSSxnQkFBZ0IsT0FBTztBQUMzQixRQUFJLHNCQUFzQixNQUFNLFdBQVk7QUFBRSxvQkFBYyxDQUFDO0FBQUEsSUFBRyxDQUFDO0FBSWpFLElBQUFELFFBQU8sVUFBVyx1QkFBdUIsOEJBQStCLFNBQVMsYUFBYSxJQUFJO0FBQ2hHLFVBQUksQ0FBQ0MsVUFBUyxFQUFFO0FBQUcsZUFBTztBQUMxQixVQUFJLCtCQUErQixRQUFRLEVBQUUsTUFBTTtBQUFlLGVBQU87QUFDekUsYUFBTyxnQkFBZ0IsY0FBYyxFQUFFLElBQUk7QUFBQSxJQUM3QyxJQUFJO0FBQUE7QUFBQTs7O0FDaEJKO0FBQUEsMkZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUTtBQUVaLElBQUFBLFFBQU8sVUFBVSxDQUFDLE1BQU0sV0FBWTtBQUVsQyxhQUFPLE9BQU8sYUFBYSxPQUFPLGtCQUFrQixDQUFDLENBQUMsQ0FBQztBQUFBLElBQ3pELENBQUM7QUFBQTtBQUFBOzs7QUNORDtBQUFBLG9HQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLElBQUk7QUFDUixRQUFJLGNBQWM7QUFDbEIsUUFBSSxhQUFhO0FBQ2pCLFFBQUlDLFlBQVc7QUFDZixRQUFJLFNBQVM7QUFDYixRQUFJLGlCQUFpQixpQ0FBK0M7QUFDcEUsUUFBSSw0QkFBNEI7QUFDaEMsUUFBSSxvQ0FBb0M7QUFDeEMsUUFBSSxlQUFlO0FBQ25CLFFBQUksTUFBTTtBQUNWLFFBQUksV0FBVztBQUVmLFFBQUksV0FBVztBQUNmLFFBQUksV0FBVyxJQUFJLE1BQU07QUFDekIsUUFBSSxLQUFLO0FBRVQsUUFBSSxjQUFjLFNBQVUsSUFBSTtBQUM5QixxQkFBZSxJQUFJLFVBQVUsRUFBRSxPQUFPO0FBQUEsUUFDcEMsVUFBVSxNQUFNO0FBQUE7QUFBQSxRQUNoQixVQUFVLENBQUM7QUFBQTtBQUFBLE1BQ2IsRUFBRSxDQUFDO0FBQUEsSUFDTDtBQUVBLFFBQUksVUFBVSxTQUFVLElBQUksUUFBUTtBQUVsQyxVQUFJLENBQUNBLFVBQVMsRUFBRTtBQUFHLGVBQU8sT0FBTyxNQUFNLFdBQVcsTUFBTSxPQUFPLE1BQU0sV0FBVyxNQUFNLE9BQU87QUFDN0YsVUFBSSxDQUFDLE9BQU8sSUFBSSxRQUFRLEdBQUc7QUFFekIsWUFBSSxDQUFDLGFBQWEsRUFBRTtBQUFHLGlCQUFPO0FBRTlCLFlBQUksQ0FBQztBQUFRLGlCQUFPO0FBRXBCLG9CQUFZLEVBQUU7QUFBQSxNQUVoQjtBQUFFLGFBQU8sR0FBRyxRQUFRLEVBQUU7QUFBQSxJQUN4QjtBQUVBLFFBQUksY0FBYyxTQUFVLElBQUksUUFBUTtBQUN0QyxVQUFJLENBQUMsT0FBTyxJQUFJLFFBQVEsR0FBRztBQUV6QixZQUFJLENBQUMsYUFBYSxFQUFFO0FBQUcsaUJBQU87QUFFOUIsWUFBSSxDQUFDO0FBQVEsaUJBQU87QUFFcEIsb0JBQVksRUFBRTtBQUFBLE1BRWhCO0FBQUUsYUFBTyxHQUFHLFFBQVEsRUFBRTtBQUFBLElBQ3hCO0FBR0EsUUFBSSxXQUFXLFNBQVUsSUFBSTtBQUMzQixVQUFJLFlBQVksWUFBWSxhQUFhLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxRQUFRO0FBQUcsb0JBQVksRUFBRTtBQUNyRixhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksU0FBUyxXQUFZO0FBQ3ZCLFdBQUssU0FBUyxXQUFZO0FBQUEsTUFBYztBQUN4QyxpQkFBVztBQUNYLFVBQUksc0JBQXNCLDBCQUEwQjtBQUNwRCxVQUFJLFNBQVMsWUFBWSxDQUFDLEVBQUUsTUFBTTtBQUNsQyxVQUFJLE9BQU8sQ0FBQztBQUNaLFdBQUssUUFBUSxJQUFJO0FBR2pCLFVBQUksb0JBQW9CLElBQUksRUFBRSxRQUFRO0FBQ3BDLGtDQUEwQixJQUFJLFNBQVUsSUFBSTtBQUMxQyxjQUFJLFNBQVMsb0JBQW9CLEVBQUU7QUFDbkMsbUJBQVMsSUFBSSxHQUFHLFNBQVMsT0FBTyxRQUFRLElBQUksUUFBUSxLQUFLO0FBQ3ZELGdCQUFJLE9BQU8sQ0FBQyxNQUFNLFVBQVU7QUFDMUIscUJBQU8sUUFBUSxHQUFHLENBQUM7QUFDbkI7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUFFLGlCQUFPO0FBQUEsUUFDWDtBQUVBLFVBQUUsRUFBRSxRQUFRLFVBQVUsTUFBTSxNQUFNLFFBQVEsS0FBSyxHQUFHO0FBQUEsVUFDaEQscUJBQXFCLGtDQUFrQztBQUFBLFFBQ3pELENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRjtBQUVBLFFBQUksT0FBT0QsUUFBTyxVQUFVO0FBQUEsTUFDMUIsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsYUFBYTtBQUFBLE1BQ2IsVUFBVTtBQUFBLElBQ1o7QUFFQSxlQUFXLFFBQVEsSUFBSTtBQUFBO0FBQUE7OztBQ3pGdkI7QUFBQSwwRkFBQUUsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxPQUFPO0FBQ1gsUUFBSSxPQUFPO0FBQ1gsUUFBSSxXQUFXO0FBQ2YsUUFBSSxjQUFjO0FBQ2xCLFFBQUksd0JBQXdCO0FBQzVCLFFBQUksb0JBQW9CO0FBQ3hCLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksY0FBYztBQUNsQixRQUFJLG9CQUFvQjtBQUN4QixRQUFJLGdCQUFnQjtBQUVwQixRQUFJLGFBQWE7QUFFakIsUUFBSSxTQUFTLFNBQVUsU0FBUyxRQUFRO0FBQ3RDLFdBQUssVUFBVTtBQUNmLFdBQUssU0FBUztBQUFBLElBQ2hCO0FBRUEsUUFBSSxrQkFBa0IsT0FBTztBQUU3QixJQUFBQSxRQUFPLFVBQVUsU0FBVSxVQUFVLGlCQUFpQixTQUFTO0FBQzdELFVBQUksT0FBTyxXQUFXLFFBQVE7QUFDOUIsVUFBSSxhQUFhLENBQUMsRUFBRSxXQUFXLFFBQVE7QUFDdkMsVUFBSSxZQUFZLENBQUMsRUFBRSxXQUFXLFFBQVE7QUFDdEMsVUFBSSxjQUFjLENBQUMsRUFBRSxXQUFXLFFBQVE7QUFDeEMsVUFBSSxjQUFjLENBQUMsRUFBRSxXQUFXLFFBQVE7QUFDeEMsVUFBSSxLQUFLLEtBQUssaUJBQWlCLElBQUk7QUFDbkMsVUFBSSxVQUFVLFFBQVEsT0FBTyxRQUFRLFFBQVEsTUFBTTtBQUVuRCxVQUFJLE9BQU8sU0FBVSxXQUFXO0FBQzlCLFlBQUk7QUFBVSx3QkFBYyxVQUFVLFVBQVUsU0FBUztBQUN6RCxlQUFPLElBQUksT0FBTyxNQUFNLFNBQVM7QUFBQSxNQUNuQztBQUVBLFVBQUksU0FBUyxTQUFVLE9BQU87QUFDNUIsWUFBSSxZQUFZO0FBQ2QsbUJBQVMsS0FBSztBQUNkLGlCQUFPLGNBQWMsR0FBRyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUFBLFFBQzNFO0FBQUUsZUFBTyxjQUFjLEdBQUcsT0FBTyxJQUFJLElBQUksR0FBRyxLQUFLO0FBQUEsTUFDbkQ7QUFFQSxVQUFJLFdBQVc7QUFDYixtQkFBVyxTQUFTO0FBQUEsTUFDdEIsV0FBVyxhQUFhO0FBQ3RCLG1CQUFXO0FBQUEsTUFDYixPQUFPO0FBQ0wsaUJBQVMsa0JBQWtCLFFBQVE7QUFDbkMsWUFBSSxDQUFDO0FBQVEsZ0JBQU0sSUFBSSxXQUFXLFlBQVksUUFBUSxJQUFJLGtCQUFrQjtBQUU1RSxZQUFJLHNCQUFzQixNQUFNLEdBQUc7QUFDakMsZUFBSyxRQUFRLEdBQUcsU0FBUyxrQkFBa0IsUUFBUSxHQUFHLFNBQVMsT0FBTyxTQUFTO0FBQzdFLHFCQUFTLE9BQU8sU0FBUyxLQUFLLENBQUM7QUFDL0IsZ0JBQUksVUFBVSxjQUFjLGlCQUFpQixNQUFNO0FBQUcscUJBQU87QUFBQSxVQUMvRDtBQUFFLGlCQUFPLElBQUksT0FBTyxLQUFLO0FBQUEsUUFDM0I7QUFDQSxtQkFBVyxZQUFZLFVBQVUsTUFBTTtBQUFBLE1BQ3pDO0FBRUEsYUFBTyxZQUFZLFNBQVMsT0FBTyxTQUFTO0FBQzVDLGFBQU8sRUFBRSxPQUFPLEtBQUssTUFBTSxRQUFRLEdBQUcsTUFBTTtBQUMxQyxZQUFJO0FBQ0YsbUJBQVMsT0FBTyxLQUFLLEtBQUs7QUFBQSxRQUM1QixTQUFTLE9BQU87QUFDZCx3QkFBYyxVQUFVLFNBQVMsS0FBSztBQUFBLFFBQ3hDO0FBQ0EsWUFBSSxPQUFPLFVBQVUsWUFBWSxVQUFVLGNBQWMsaUJBQWlCLE1BQU07QUFBRyxpQkFBTztBQUFBLE1BQzVGO0FBQUUsYUFBTyxJQUFJLE9BQU8sS0FBSztBQUFBLElBQzNCO0FBQUE7QUFBQTs7O0FDcEVBO0FBQUEsOEZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksZ0JBQWdCO0FBRXBCLFFBQUksYUFBYTtBQUVqQixJQUFBQSxRQUFPLFVBQVUsU0FBVSxJQUFJLFdBQVc7QUFDeEMsVUFBSSxjQUFjLFdBQVcsRUFBRTtBQUFHLGVBQU87QUFDekMsWUFBTSxJQUFJLFdBQVcsc0JBQXNCO0FBQUEsSUFDN0M7QUFBQTtBQUFBOzs7QUNSQTtBQUFBLDZGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLElBQUk7QUFDUixRQUFJQyxVQUFTO0FBQ2IsUUFBSSxjQUFjO0FBQ2xCLFFBQUksV0FBVztBQUNmLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUkseUJBQXlCO0FBQzdCLFFBQUksVUFBVTtBQUNkLFFBQUksYUFBYTtBQUNqQixRQUFJLGFBQWE7QUFDakIsUUFBSSxvQkFBb0I7QUFDeEIsUUFBSUMsWUFBVztBQUNmLFFBQUksUUFBUTtBQUNaLFFBQUksOEJBQThCO0FBQ2xDLFFBQUksaUJBQWlCO0FBQ3JCLFFBQUksb0JBQW9CO0FBRXhCLElBQUFGLFFBQU8sVUFBVSxTQUFVLGtCQUFrQixTQUFTLFFBQVE7QUFDNUQsVUFBSSxTQUFTLGlCQUFpQixRQUFRLEtBQUssTUFBTTtBQUNqRCxVQUFJLFVBQVUsaUJBQWlCLFFBQVEsTUFBTSxNQUFNO0FBQ25ELFVBQUksUUFBUSxTQUFTLFFBQVE7QUFDN0IsVUFBSSxvQkFBb0JDLFFBQU8sZ0JBQWdCO0FBQy9DLFVBQUksa0JBQWtCLHFCQUFxQixrQkFBa0I7QUFDN0QsVUFBSSxjQUFjO0FBQ2xCLFVBQUksV0FBVyxDQUFDO0FBRWhCLFVBQUksWUFBWSxTQUFVLEtBQUs7QUFDN0IsWUFBSSx3QkFBd0IsWUFBWSxnQkFBZ0IsR0FBRyxDQUFDO0FBQzVEO0FBQUEsVUFBYztBQUFBLFVBQWlCO0FBQUEsVUFDN0IsUUFBUSxRQUFRLFNBQVMsSUFBSSxPQUFPO0FBQ2xDLGtDQUFzQixNQUFNLFVBQVUsSUFBSSxJQUFJLEtBQUs7QUFDbkQsbUJBQU87QUFBQSxVQUNULElBQUksUUFBUSxXQUFXLFNBQVUsS0FBSztBQUNwQyxtQkFBTyxXQUFXLENBQUNDLFVBQVMsR0FBRyxJQUFJLFFBQVEsc0JBQXNCLE1BQU0sUUFBUSxJQUFJLElBQUksR0FBRztBQUFBLFVBQzVGLElBQUksUUFBUSxRQUFRLFNBQVNDLEtBQUksS0FBSztBQUNwQyxtQkFBTyxXQUFXLENBQUNELFVBQVMsR0FBRyxJQUFJLFNBQVksc0JBQXNCLE1BQU0sUUFBUSxJQUFJLElBQUksR0FBRztBQUFBLFVBQ2hHLElBQUksUUFBUSxRQUFRLFNBQVMsSUFBSSxLQUFLO0FBQ3BDLG1CQUFPLFdBQVcsQ0FBQ0EsVUFBUyxHQUFHLElBQUksUUFBUSxzQkFBc0IsTUFBTSxRQUFRLElBQUksSUFBSSxHQUFHO0FBQUEsVUFDNUYsSUFBSSxTQUFTLElBQUksS0FBSyxPQUFPO0FBQzNCLGtDQUFzQixNQUFNLFFBQVEsSUFBSSxJQUFJLEtBQUssS0FBSztBQUN0RCxtQkFBTztBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLFVBQUksVUFBVTtBQUFBLFFBQ1o7QUFBQSxRQUNBLENBQUMsV0FBVyxpQkFBaUIsS0FBSyxFQUFFLFdBQVcsZ0JBQWdCLFdBQVcsQ0FBQyxNQUFNLFdBQVk7QUFDM0YsY0FBSSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsS0FBSztBQUFBLFFBQ3pDLENBQUM7QUFBQSxNQUNIO0FBRUEsVUFBSSxTQUFTO0FBRVgsc0JBQWMsT0FBTyxlQUFlLFNBQVMsa0JBQWtCLFFBQVEsS0FBSztBQUM1RSwrQkFBdUIsT0FBTztBQUFBLE1BQ2hDLFdBQVcsU0FBUyxrQkFBa0IsSUFBSSxHQUFHO0FBQzNDLFlBQUksV0FBVyxJQUFJLFlBQVk7QUFFL0IsWUFBSSxpQkFBaUIsU0FBUyxLQUFLLEVBQUUsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU07QUFFL0QsWUFBSSx1QkFBdUIsTUFBTSxXQUFZO0FBQUUsbUJBQVMsSUFBSSxDQUFDO0FBQUEsUUFBRyxDQUFDO0FBR2pFLFlBQUksbUJBQW1CLDRCQUE0QixTQUFVLFVBQVU7QUFBRSxjQUFJLGtCQUFrQixRQUFRO0FBQUEsUUFBRyxDQUFDO0FBRTNHLFlBQUksYUFBYSxDQUFDLFdBQVcsTUFBTSxXQUFZO0FBRTdDLGNBQUksWUFBWSxJQUFJLGtCQUFrQjtBQUN0QyxjQUFJLFFBQVE7QUFDWixpQkFBTztBQUFTLHNCQUFVLEtBQUssRUFBRSxPQUFPLEtBQUs7QUFDN0MsaUJBQU8sQ0FBQyxVQUFVLElBQUksRUFBRTtBQUFBLFFBQzFCLENBQUM7QUFFRCxZQUFJLENBQUMsa0JBQWtCO0FBQ3JCLHdCQUFjLFFBQVEsU0FBVSxPQUFPLFVBQVU7QUFDL0MsdUJBQVcsT0FBTyxlQUFlO0FBQ2pDLGdCQUFJLE9BQU8sa0JBQWtCLElBQUksa0JBQWtCLEdBQUcsT0FBTyxXQUFXO0FBQ3hFLGdCQUFJLENBQUMsa0JBQWtCLFFBQVE7QUFBRyxzQkFBUSxVQUFVLEtBQUssS0FBSyxHQUFHLEVBQUUsTUFBTSxNQUFNLFlBQVksT0FBTyxDQUFDO0FBQ25HLG1CQUFPO0FBQUEsVUFDVCxDQUFDO0FBQ0Qsc0JBQVksWUFBWTtBQUN4QiwwQkFBZ0IsY0FBYztBQUFBLFFBQ2hDO0FBRUEsWUFBSSx3QkFBd0IsWUFBWTtBQUN0QyxvQkFBVSxRQUFRO0FBQ2xCLG9CQUFVLEtBQUs7QUFDZixvQkFBVSxVQUFVLEtBQUs7QUFBQSxRQUMzQjtBQUVBLFlBQUksY0FBYztBQUFnQixvQkFBVSxLQUFLO0FBR2pELFlBQUksV0FBVyxnQkFBZ0I7QUFBTyxpQkFBTyxnQkFBZ0I7QUFBQSxNQUMvRDtBQUVBLGVBQVMsZ0JBQWdCLElBQUk7QUFDN0IsUUFBRSxFQUFFLFFBQVEsTUFBTSxhQUFhLE1BQU0sUUFBUSxnQkFBZ0Isa0JBQWtCLEdBQUcsUUFBUTtBQUUxRixxQkFBZSxhQUFhLGdCQUFnQjtBQUU1QyxVQUFJLENBQUM7QUFBUyxlQUFPLFVBQVUsYUFBYSxrQkFBa0IsTUFBTTtBQUVwRSxhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7OztBQ3pHQTtBQUFBLG1HQUFBRSxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGdCQUFnQjtBQUVwQixJQUFBQSxRQUFPLFVBQVUsU0FBVSxRQUFRLEtBQUssU0FBUztBQUMvQyxlQUFTLE9BQU87QUFBSyxzQkFBYyxRQUFRLEtBQUssSUFBSSxHQUFHLEdBQUcsT0FBTztBQUNqRSxhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7OztBQ05BO0FBQUEsOEZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksYUFBYTtBQUNqQixRQUFJLHdCQUF3QjtBQUM1QixRQUFJLGtCQUFrQjtBQUN0QixRQUFJLGNBQWM7QUFFbEIsUUFBSSxVQUFVLGdCQUFnQixTQUFTO0FBRXZDLElBQUFBLFFBQU8sVUFBVSxTQUFVLGtCQUFrQjtBQUMzQyxVQUFJLGNBQWMsV0FBVyxnQkFBZ0I7QUFFN0MsVUFBSSxlQUFlLGVBQWUsQ0FBQyxZQUFZLE9BQU8sR0FBRztBQUN2RCw4QkFBc0IsYUFBYSxTQUFTO0FBQUEsVUFDMUMsY0FBYztBQUFBLFVBQ2QsS0FBSyxXQUFZO0FBQUUsbUJBQU87QUFBQSxVQUFNO0FBQUEsUUFDbEMsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDakJBO0FBQUEsb0dBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksU0FBUztBQUNiLFFBQUksd0JBQXdCO0FBQzVCLFFBQUksaUJBQWlCO0FBQ3JCLFFBQUksT0FBTztBQUNYLFFBQUksYUFBYTtBQUNqQixRQUFJLG9CQUFvQjtBQUN4QixRQUFJLFVBQVU7QUFDZCxRQUFJLGlCQUFpQjtBQUNyQixRQUFJLHlCQUF5QjtBQUM3QixRQUFJLGFBQWE7QUFDakIsUUFBSSxjQUFjO0FBQ2xCLFFBQUksVUFBVSw0QkFBMEM7QUFDeEQsUUFBSSxzQkFBc0I7QUFFMUIsUUFBSSxtQkFBbUIsb0JBQW9CO0FBQzNDLFFBQUkseUJBQXlCLG9CQUFvQjtBQUVqRCxJQUFBQSxRQUFPLFVBQVU7QUFBQSxNQUNmLGdCQUFnQixTQUFVLFNBQVMsa0JBQWtCLFFBQVEsT0FBTztBQUNsRSxZQUFJLGNBQWMsUUFBUSxTQUFVLE1BQU0sVUFBVTtBQUNsRCxxQkFBVyxNQUFNLFNBQVM7QUFDMUIsMkJBQWlCLE1BQU07QUFBQSxZQUNyQixNQUFNO0FBQUEsWUFDTixPQUFPLE9BQU8sSUFBSTtBQUFBLFlBQ2xCLE9BQU87QUFBQSxZQUNQLE1BQU07QUFBQSxZQUNOLE1BQU07QUFBQSxVQUNSLENBQUM7QUFDRCxjQUFJLENBQUM7QUFBYSxpQkFBSyxPQUFPO0FBQzlCLGNBQUksQ0FBQyxrQkFBa0IsUUFBUTtBQUFHLG9CQUFRLFVBQVUsS0FBSyxLQUFLLEdBQUcsRUFBRSxNQUFNLE1BQU0sWUFBWSxPQUFPLENBQUM7QUFBQSxRQUNyRyxDQUFDO0FBRUQsWUFBSSxZQUFZLFlBQVk7QUFFNUIsWUFBSSxtQkFBbUIsdUJBQXVCLGdCQUFnQjtBQUU5RCxZQUFJLFNBQVMsU0FBVSxNQUFNLEtBQUssT0FBTztBQUN2QyxjQUFJLFFBQVEsaUJBQWlCLElBQUk7QUFDakMsY0FBSSxRQUFRLFNBQVMsTUFBTSxHQUFHO0FBQzlCLGNBQUksVUFBVTtBQUVkLGNBQUksT0FBTztBQUNULGtCQUFNLFFBQVE7QUFBQSxVQUVoQixPQUFPO0FBQ0wsa0JBQU0sT0FBTyxRQUFRO0FBQUEsY0FDbkIsT0FBTyxRQUFRLFFBQVEsS0FBSyxJQUFJO0FBQUEsY0FDaEMsS0FBSztBQUFBLGNBQ0wsT0FBTztBQUFBLGNBQ1AsVUFBVSxXQUFXLE1BQU07QUFBQSxjQUMzQixNQUFNO0FBQUEsY0FDTixTQUFTO0FBQUEsWUFDWDtBQUNBLGdCQUFJLENBQUMsTUFBTTtBQUFPLG9CQUFNLFFBQVE7QUFDaEMsZ0JBQUk7QUFBVSx1QkFBUyxPQUFPO0FBQzlCLGdCQUFJO0FBQWEsb0JBQU07QUFBQTtBQUNsQixtQkFBSztBQUVWLGdCQUFJLFVBQVU7QUFBSyxvQkFBTSxNQUFNLEtBQUssSUFBSTtBQUFBLFVBQzFDO0FBQUUsaUJBQU87QUFBQSxRQUNYO0FBRUEsWUFBSSxXQUFXLFNBQVUsTUFBTSxLQUFLO0FBQ2xDLGNBQUksUUFBUSxpQkFBaUIsSUFBSTtBQUVqQyxjQUFJLFFBQVEsUUFBUSxHQUFHO0FBQ3ZCLGNBQUk7QUFDSixjQUFJLFVBQVU7QUFBSyxtQkFBTyxNQUFNLE1BQU0sS0FBSztBQUUzQyxlQUFLLFFBQVEsTUFBTSxPQUFPLE9BQU8sUUFBUSxNQUFNLE1BQU07QUFDbkQsZ0JBQUksTUFBTSxRQUFRO0FBQUsscUJBQU87QUFBQSxVQUNoQztBQUFBLFFBQ0Y7QUFFQSx1QkFBZSxXQUFXO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFJeEIsT0FBTyxTQUFTLFFBQVE7QUFDdEIsZ0JBQUksT0FBTztBQUNYLGdCQUFJLFFBQVEsaUJBQWlCLElBQUk7QUFDakMsZ0JBQUksUUFBUSxNQUFNO0FBQ2xCLG1CQUFPLE9BQU87QUFDWixvQkFBTSxVQUFVO0FBQ2hCLGtCQUFJLE1BQU07QUFBVSxzQkFBTSxXQUFXLE1BQU0sU0FBUyxPQUFPO0FBQzNELHNCQUFRLE1BQU07QUFBQSxZQUNoQjtBQUNBLGtCQUFNLFFBQVEsTUFBTSxPQUFPO0FBQzNCLGtCQUFNLFFBQVEsT0FBTyxJQUFJO0FBQ3pCLGdCQUFJO0FBQWEsb0JBQU0sT0FBTztBQUFBO0FBQ3pCLG1CQUFLLE9BQU87QUFBQSxVQUNuQjtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBSUEsVUFBVSxTQUFVLEtBQUs7QUFDdkIsZ0JBQUksT0FBTztBQUNYLGdCQUFJLFFBQVEsaUJBQWlCLElBQUk7QUFDakMsZ0JBQUksUUFBUSxTQUFTLE1BQU0sR0FBRztBQUM5QixnQkFBSSxPQUFPO0FBQ1Qsa0JBQUksT0FBTyxNQUFNO0FBQ2pCLGtCQUFJLE9BQU8sTUFBTTtBQUNqQixxQkFBTyxNQUFNLE1BQU0sTUFBTSxLQUFLO0FBQzlCLG9CQUFNLFVBQVU7QUFDaEIsa0JBQUk7QUFBTSxxQkFBSyxPQUFPO0FBQ3RCLGtCQUFJO0FBQU0scUJBQUssV0FBVztBQUMxQixrQkFBSSxNQUFNLFVBQVU7QUFBTyxzQkFBTSxRQUFRO0FBQ3pDLGtCQUFJLE1BQU0sU0FBUztBQUFPLHNCQUFNLE9BQU87QUFDdkMsa0JBQUk7QUFBYSxzQkFBTTtBQUFBO0FBQ2xCLHFCQUFLO0FBQUEsWUFDWjtBQUFFLG1CQUFPLENBQUMsQ0FBQztBQUFBLFVBQ2I7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUlBLFNBQVMsU0FBU0MsU0FBUSxZQUFxQztBQUM3RCxnQkFBSSxRQUFRLGlCQUFpQixJQUFJO0FBQ2pDLGdCQUFJLGdCQUFnQixLQUFLLFlBQVksVUFBVSxTQUFTLElBQUksVUFBVSxDQUFDLElBQUksTUFBUztBQUNwRixnQkFBSTtBQUNKLG1CQUFPLFFBQVEsUUFBUSxNQUFNLE9BQU8sTUFBTSxPQUFPO0FBQy9DLDRCQUFjLE1BQU0sT0FBTyxNQUFNLEtBQUssSUFBSTtBQUUxQyxxQkFBTyxTQUFTLE1BQU07QUFBUyx3QkFBUSxNQUFNO0FBQUEsWUFDL0M7QUFBQSxVQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFJQSxLQUFLLFNBQVMsSUFBSSxLQUFLO0FBQ3JCLG1CQUFPLENBQUMsQ0FBQyxTQUFTLE1BQU0sR0FBRztBQUFBLFVBQzdCO0FBQUEsUUFDRixDQUFDO0FBRUQsdUJBQWUsV0FBVyxTQUFTO0FBQUE7QUFBQTtBQUFBLFVBR2pDLEtBQUssU0FBU0MsS0FBSSxLQUFLO0FBQ3JCLGdCQUFJLFFBQVEsU0FBUyxNQUFNLEdBQUc7QUFDOUIsbUJBQU8sU0FBUyxNQUFNO0FBQUEsVUFDeEI7QUFBQTtBQUFBO0FBQUEsVUFHQSxLQUFLLFNBQVMsSUFBSSxLQUFLLE9BQU87QUFDNUIsbUJBQU8sT0FBTyxNQUFNLFFBQVEsSUFBSSxJQUFJLEtBQUssS0FBSztBQUFBLFVBQ2hEO0FBQUEsUUFDRixJQUFJO0FBQUE7QUFBQTtBQUFBLFVBR0YsS0FBSyxTQUFTLElBQUksT0FBTztBQUN2QixtQkFBTyxPQUFPLE1BQU0sUUFBUSxVQUFVLElBQUksSUFBSSxPQUFPLEtBQUs7QUFBQSxVQUM1RDtBQUFBLFFBQ0YsQ0FBQztBQUNELFlBQUk7QUFBYSxnQ0FBc0IsV0FBVyxRQUFRO0FBQUEsWUFDeEQsY0FBYztBQUFBLFlBQ2QsS0FBSyxXQUFZO0FBQ2YscUJBQU8saUJBQWlCLElBQUksRUFBRTtBQUFBLFlBQ2hDO0FBQUEsVUFDRixDQUFDO0FBQ0QsZUFBTztBQUFBLE1BQ1Q7QUFBQSxNQUNBLFdBQVcsU0FBVSxhQUFhLGtCQUFrQixRQUFRO0FBQzFELFlBQUksZ0JBQWdCLG1CQUFtQjtBQUN2QyxZQUFJLDZCQUE2Qix1QkFBdUIsZ0JBQWdCO0FBQ3hFLFlBQUksMkJBQTJCLHVCQUF1QixhQUFhO0FBVW5FLHVCQUFlLGFBQWEsa0JBQWtCLFNBQVUsVUFBVSxNQUFNO0FBQ3RFLDJCQUFpQixNQUFNO0FBQUEsWUFDckIsTUFBTTtBQUFBLFlBQ04sUUFBUTtBQUFBLFlBQ1IsT0FBTywyQkFBMkIsUUFBUTtBQUFBLFlBQzFDLE1BQU07QUFBQSxZQUNOLE1BQU07QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNILEdBQUcsV0FBWTtBQUNiLGNBQUksUUFBUSx5QkFBeUIsSUFBSTtBQUN6QyxjQUFJLE9BQU8sTUFBTTtBQUNqQixjQUFJLFFBQVEsTUFBTTtBQUVsQixpQkFBTyxTQUFTLE1BQU07QUFBUyxvQkFBUSxNQUFNO0FBRTdDLGNBQUksQ0FBQyxNQUFNLFVBQVUsRUFBRSxNQUFNLE9BQU8sUUFBUSxRQUFRLE1BQU0sT0FBTyxNQUFNLE1BQU0sUUFBUTtBQUVuRixrQkFBTSxTQUFTO0FBQ2YsbUJBQU8sdUJBQXVCLFFBQVcsSUFBSTtBQUFBLFVBQy9DO0FBRUEsY0FBSSxTQUFTO0FBQVEsbUJBQU8sdUJBQXVCLE1BQU0sS0FBSyxLQUFLO0FBQ25FLGNBQUksU0FBUztBQUFVLG1CQUFPLHVCQUF1QixNQUFNLE9BQU8sS0FBSztBQUN2RSxpQkFBTyx1QkFBdUIsQ0FBQyxNQUFNLEtBQUssTUFBTSxLQUFLLEdBQUcsS0FBSztBQUFBLFFBQy9ELEdBQUcsU0FBUyxZQUFZLFVBQVUsQ0FBQyxRQUFRLElBQUk7QUFLL0MsbUJBQVcsZ0JBQWdCO0FBQUEsTUFDN0I7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDN01BO0FBQUE7QUFBQTtBQUNBLFFBQUksYUFBYTtBQUNqQixRQUFJLG1CQUFtQjtBQUl2QixlQUFXLE9BQU8sU0FBVSxNQUFNO0FBQ2hDLGFBQU8sU0FBU0MsT0FBTTtBQUFFLGVBQU8sS0FBSyxNQUFNLFVBQVUsU0FBUyxVQUFVLENBQUMsSUFBSSxNQUFTO0FBQUEsTUFBRztBQUFBLElBQzFGLEdBQUcsZ0JBQWdCO0FBQUE7QUFBQTs7O0FDUm5CO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTs7O0FDRkE7QUFBQTtBQUFBO0FBQ0EsUUFBSSxJQUFJO0FBQ1IsUUFBSSxjQUFjO0FBQ2xCLFFBQUksbUJBQW1CLG1DQUFpRDtBQUt4RSxNQUFFLEVBQUUsUUFBUSxVQUFVLE1BQU0sTUFBTSxRQUFRLE9BQU8scUJBQXFCLGtCQUFrQixNQUFNLENBQUMsWUFBWSxHQUFHO0FBQUEsTUFDNUcsa0JBQWtCO0FBQUEsSUFDcEIsQ0FBQztBQUFBO0FBQUE7OztBQ1ZEO0FBQUE7QUFBQTtBQUNBLFFBQUksSUFBSTtBQUNSLFFBQUksY0FBYztBQUNsQixRQUFJLGlCQUFpQixpQ0FBK0M7QUFLcEUsTUFBRSxFQUFFLFFBQVEsVUFBVSxNQUFNLE1BQU0sUUFBUSxPQUFPLG1CQUFtQixnQkFBZ0IsTUFBTSxDQUFDLFlBQVksR0FBRztBQUFBLE1BQ3hHLGdCQUFnQjtBQUFBLElBQ2xCLENBQUM7QUFBQTtBQUFBOzs7QUNWRDtBQUFBO0FBQUE7QUFDQSxRQUFJLElBQUk7QUFDUixRQUFJLFFBQVE7QUFDWixRQUFJLGtCQUFrQjtBQUN0QixRQUFJLGlDQUFpQyw2Q0FBMkQ7QUFDaEcsUUFBSSxjQUFjO0FBRWxCLFFBQUksU0FBUyxDQUFDLGVBQWUsTUFBTSxXQUFZO0FBQUUscUNBQStCLENBQUM7QUFBQSxJQUFHLENBQUM7QUFJckYsTUFBRSxFQUFFLFFBQVEsVUFBVSxNQUFNLE1BQU0sUUFBUSxRQUFRLE1BQU0sQ0FBQyxZQUFZLEdBQUc7QUFBQSxNQUN0RSwwQkFBMEIsU0FBUyx5QkFBeUIsSUFBSSxLQUFLO0FBQ25FLGVBQU8sK0JBQStCLGdCQUFnQixFQUFFLEdBQUcsR0FBRztBQUFBLE1BQ2hFO0FBQUEsSUFDRixDQUFDO0FBQUE7QUFBQTs7O0FDZkQ7QUFBQTtBQUFBO0FBQ0EsUUFBSSxJQUFJO0FBQ1IsUUFBSSxjQUFjO0FBQ2xCLFFBQUlDLFdBQVU7QUFDZCxRQUFJLGtCQUFrQjtBQUN0QixRQUFJLGlDQUFpQztBQUNyQyxRQUFJLGlCQUFpQjtBQUlyQixNQUFFLEVBQUUsUUFBUSxVQUFVLE1BQU0sTUFBTSxNQUFNLENBQUMsWUFBWSxHQUFHO0FBQUEsTUFDdEQsMkJBQTJCLFNBQVMsMEJBQTBCLFFBQVE7QUFDcEUsWUFBSSxJQUFJLGdCQUFnQixNQUFNO0FBQzlCLFlBQUksMkJBQTJCLCtCQUErQjtBQUM5RCxZQUFJQyxRQUFPRCxTQUFRLENBQUM7QUFDcEIsWUFBSSxTQUFTLENBQUM7QUFDZCxZQUFJLFFBQVE7QUFDWixZQUFJLEtBQUs7QUFDVCxlQUFPQyxNQUFLLFNBQVMsT0FBTztBQUMxQix1QkFBYSx5QkFBeUIsR0FBRyxNQUFNQSxNQUFLLE9BQU8sQ0FBQztBQUM1RCxjQUFJLGVBQWU7QUFBVywyQkFBZSxRQUFRLEtBQUssVUFBVTtBQUFBLFFBQ3RFO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGLENBQUM7QUFBQTtBQUFBOzs7QUN4QkQ7QUFBQTtBQUFBO0FBQ0EsUUFBSSxJQUFJO0FBQ1IsUUFBSSxRQUFRO0FBQ1osUUFBSSxzQkFBc0IsaURBQStEO0FBR3pGLFFBQUksc0JBQXNCLE1BQU0sV0FBWTtBQUFFLGFBQU8sQ0FBQyxPQUFPLG9CQUFvQixDQUFDO0FBQUEsSUFBRyxDQUFDO0FBSXRGLE1BQUUsRUFBRSxRQUFRLFVBQVUsTUFBTSxNQUFNLFFBQVEsb0JBQW9CLEdBQUc7QUFBQSxNQUMvRCxxQkFBcUI7QUFBQSxJQUN2QixDQUFDO0FBQUE7QUFBQTs7O0FDWkQ7QUFBQTtBQUFBO0FBQ0EsUUFBSSxJQUFJO0FBQ1IsUUFBSSxXQUFXO0FBQ2YsUUFBSSxhQUFhO0FBQ2pCLFFBQUksUUFBUTtBQUVaLFFBQUksc0JBQXNCLE1BQU0sV0FBWTtBQUFFLGlCQUFXLENBQUM7QUFBQSxJQUFHLENBQUM7QUFJOUQsTUFBRSxFQUFFLFFBQVEsVUFBVSxNQUFNLE1BQU0sUUFBUSxvQkFBb0IsR0FBRztBQUFBLE1BQy9ELE1BQU0sU0FBU0MsTUFBSyxJQUFJO0FBQ3RCLGVBQU8sV0FBVyxTQUFTLEVBQUUsQ0FBQztBQUFBLE1BQ2hDO0FBQUEsSUFDRixDQUFDO0FBQUE7QUFBQTs7O0FDZEQ7QUFBQTtBQUFBO0FBQ0EsUUFBSSxJQUFJO0FBQ1IsUUFBSUMsWUFBVztBQUNmLFFBQUksV0FBVyw0QkFBMEM7QUFDekQsUUFBSSxXQUFXO0FBQ2YsUUFBSSxRQUFRO0FBR1osUUFBSSxRQUFRLE9BQU87QUFDbkIsUUFBSSxzQkFBc0IsTUFBTSxXQUFZO0FBQUUsWUFBTSxDQUFDO0FBQUEsSUFBRyxDQUFDO0FBSXpELE1BQUUsRUFBRSxRQUFRLFVBQVUsTUFBTSxNQUFNLFFBQVEscUJBQXFCLE1BQU0sQ0FBQyxTQUFTLEdBQUc7QUFBQSxNQUNoRixNQUFNLFNBQVMsS0FBSyxJQUFJO0FBQ3RCLGVBQU8sU0FBU0EsVUFBUyxFQUFFLElBQUksTUFBTSxTQUFTLEVBQUUsQ0FBQyxJQUFJO0FBQUEsTUFDdkQ7QUFBQSxJQUNGLENBQUM7QUFBQTtBQUFBOzs7QUNqQkQ7QUFBQSxtR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSx3QkFBd0I7QUFDNUIsUUFBSSxVQUFVO0FBSWQsSUFBQUEsUUFBTyxVQUFVLHdCQUF3QixDQUFDLEVBQUUsV0FBVyxTQUFTLFdBQVc7QUFDekUsYUFBTyxhQUFhLFFBQVEsSUFBSSxJQUFJO0FBQUEsSUFDdEM7QUFBQTtBQUFBOzs7QUNSQTtBQUFBO0FBQUE7QUFDQSxRQUFJLHdCQUF3QjtBQUM1QixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLFdBQVc7QUFJZixRQUFJLENBQUMsdUJBQXVCO0FBQzFCLG9CQUFjLE9BQU8sV0FBVyxZQUFZLFVBQVUsRUFBRSxRQUFRLEtBQUssQ0FBQztBQUFBLElBQ3hFO0FBQUE7QUFBQTs7O0FDVEE7QUFBQSx3R0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRO0FBQ1osUUFBSUMsVUFBUztBQUdiLFFBQUksVUFBVUEsUUFBTztBQUVyQixRQUFJLGdCQUFnQixNQUFNLFdBQVk7QUFDcEMsVUFBSSxLQUFLLFFBQVEsS0FBSyxHQUFHO0FBQ3pCLFNBQUcsWUFBWTtBQUNmLGFBQU8sR0FBRyxLQUFLLE1BQU0sTUFBTTtBQUFBLElBQzdCLENBQUM7QUFJRCxRQUFJLGdCQUFnQixpQkFBaUIsTUFBTSxXQUFZO0FBQ3JELGFBQU8sQ0FBQyxRQUFRLEtBQUssR0FBRyxFQUFFO0FBQUEsSUFDNUIsQ0FBQztBQUVELFFBQUksZUFBZSxpQkFBaUIsTUFBTSxXQUFZO0FBRXBELFVBQUksS0FBSyxRQUFRLE1BQU0sSUFBSTtBQUMzQixTQUFHLFlBQVk7QUFDZixhQUFPLEdBQUcsS0FBSyxLQUFLLE1BQU07QUFBQSxJQUM1QixDQUFDO0FBRUQsSUFBQUQsUUFBTyxVQUFVO0FBQUEsTUFDZixjQUFjO0FBQUEsTUFDZCxlQUFlO0FBQUEsTUFDZixlQUFlO0FBQUEsSUFDakI7QUFBQTtBQUFBOzs7QUM5QkE7QUFBQSw2R0FBQUUsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRO0FBQ1osUUFBSUMsVUFBUztBQUdiLFFBQUksVUFBVUEsUUFBTztBQUVyQixJQUFBRCxRQUFPLFVBQVUsTUFBTSxXQUFZO0FBQ2pDLFVBQUksS0FBSyxRQUFRLEtBQUssR0FBRztBQUN6QixhQUFPLEVBQUUsR0FBRyxVQUFVLEdBQUcsS0FBSyxJQUFJLEtBQUssR0FBRyxVQUFVO0FBQUEsSUFDdEQsQ0FBQztBQUFBO0FBQUE7OztBQ1ZEO0FBQUEseUdBQUFFLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUTtBQUNaLFFBQUlDLFVBQVM7QUFHYixRQUFJLFVBQVVBLFFBQU87QUFFckIsSUFBQUQsUUFBTyxVQUFVLE1BQU0sV0FBWTtBQUNqQyxVQUFJLEtBQUssUUFBUSxXQUFXLEdBQUc7QUFDL0IsYUFBTyxHQUFHLEtBQUssR0FBRyxFQUFFLE9BQU8sTUFBTSxPQUMvQixJQUFJLFFBQVEsSUFBSSxPQUFPLE1BQU07QUFBQSxJQUNqQyxDQUFDO0FBQUE7QUFBQTs7O0FDWEQ7QUFBQSw4RkFBQUUsVUFBQUMsU0FBQTtBQUFBO0FBR0EsUUFBSSxPQUFPO0FBQ1gsUUFBSSxjQUFjO0FBQ2xCLFFBQUksV0FBVztBQUNmLFFBQUksY0FBYztBQUNsQixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLFNBQVM7QUFDYixRQUFJLFNBQVM7QUFDYixRQUFJLG1CQUFtQix5QkFBdUM7QUFDOUQsUUFBSSxzQkFBc0I7QUFDMUIsUUFBSSxrQkFBa0I7QUFFdEIsUUFBSSxnQkFBZ0IsT0FBTyx5QkFBeUIsT0FBTyxVQUFVLE9BQU87QUFDNUUsUUFBSSxhQUFhLE9BQU8sVUFBVTtBQUNsQyxRQUFJLGNBQWM7QUFDbEIsUUFBSSxTQUFTLFlBQVksR0FBRyxNQUFNO0FBQ2xDLFFBQUksVUFBVSxZQUFZLEdBQUcsT0FBTztBQUNwQyxRQUFJLFVBQVUsWUFBWSxHQUFHLE9BQU87QUFDcEMsUUFBSSxjQUFjLFlBQVksR0FBRyxLQUFLO0FBRXRDLFFBQUksMkJBQTRCLFdBQVk7QUFDMUMsVUFBSSxNQUFNO0FBQ1YsVUFBSSxNQUFNO0FBQ1YsV0FBSyxZQUFZLEtBQUssR0FBRztBQUN6QixXQUFLLFlBQVksS0FBSyxHQUFHO0FBQ3pCLGFBQU8sSUFBSSxjQUFjLEtBQUssSUFBSSxjQUFjO0FBQUEsSUFDbEQsRUFBRztBQUVILFFBQUksZ0JBQWdCLGNBQWM7QUFHbEMsUUFBSSxnQkFBZ0IsT0FBTyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU07QUFFM0MsUUFBSSxRQUFRLDRCQUE0QixpQkFBaUIsaUJBQWlCLHVCQUF1QjtBQUVqRyxRQUFJLE9BQU87QUFDVCxvQkFBYyxTQUFTLEtBQUssUUFBUTtBQUNsQyxZQUFJLEtBQUs7QUFDVCxZQUFJLFFBQVEsaUJBQWlCLEVBQUU7QUFDL0IsWUFBSSxNQUFNLFNBQVMsTUFBTTtBQUN6QixZQUFJLE1BQU0sTUFBTTtBQUNoQixZQUFJLFFBQVEsUUFBUSxXQUFXLE9BQU8sR0FBRyxRQUFRO0FBRWpELFlBQUksS0FBSztBQUNQLGNBQUksWUFBWSxHQUFHO0FBQ25CLG1CQUFTLEtBQUssYUFBYSxLQUFLLEdBQUc7QUFDbkMsYUFBRyxZQUFZLElBQUk7QUFDbkIsaUJBQU87QUFBQSxRQUNUO0FBRUEsWUFBSSxTQUFTLE1BQU07QUFDbkIsWUFBSSxTQUFTLGlCQUFpQixHQUFHO0FBQ2pDLFlBQUksUUFBUSxLQUFLLGFBQWEsRUFBRTtBQUNoQyxZQUFJLFNBQVMsR0FBRztBQUNoQixZQUFJLGFBQWE7QUFDakIsWUFBSSxVQUFVO0FBRWQsWUFBSSxRQUFRO0FBQ1Ysa0JBQVEsUUFBUSxPQUFPLEtBQUssRUFBRTtBQUM5QixjQUFJLFFBQVEsT0FBTyxHQUFHLE1BQU0sSUFBSTtBQUM5QixxQkFBUztBQUFBLFVBQ1g7QUFFQSxvQkFBVSxZQUFZLEtBQUssR0FBRyxTQUFTO0FBRXZDLGNBQUksR0FBRyxZQUFZLE1BQU0sQ0FBQyxHQUFHLGFBQWEsR0FBRyxhQUFhLE9BQU8sS0FBSyxHQUFHLFlBQVksQ0FBQyxNQUFNLE9BQU87QUFDakcscUJBQVMsU0FBUyxTQUFTO0FBQzNCLHNCQUFVLE1BQU07QUFDaEI7QUFBQSxVQUNGO0FBR0EsbUJBQVMsSUFBSSxPQUFPLFNBQVMsU0FBUyxLQUFLLEtBQUs7QUFBQSxRQUNsRDtBQUVBLFlBQUksZUFBZTtBQUNqQixtQkFBUyxJQUFJLE9BQU8sTUFBTSxTQUFTLFlBQVksS0FBSztBQUFBLFFBQ3REO0FBQ0EsWUFBSTtBQUEwQixzQkFBWSxHQUFHO0FBRTdDLGdCQUFRLEtBQUssWUFBWSxTQUFTLFNBQVMsSUFBSSxPQUFPO0FBRXRELFlBQUksUUFBUTtBQUNWLGNBQUksT0FBTztBQUNULGtCQUFNLFFBQVEsWUFBWSxNQUFNLE9BQU8sVUFBVTtBQUNqRCxrQkFBTSxDQUFDLElBQUksWUFBWSxNQUFNLENBQUMsR0FBRyxVQUFVO0FBQzNDLGtCQUFNLFFBQVEsR0FBRztBQUNqQixlQUFHLGFBQWEsTUFBTSxDQUFDLEVBQUU7QUFBQSxVQUMzQjtBQUFPLGVBQUcsWUFBWTtBQUFBLFFBQ3hCLFdBQVcsNEJBQTRCLE9BQU87QUFDNUMsYUFBRyxZQUFZLEdBQUcsU0FBUyxNQUFNLFFBQVEsTUFBTSxDQUFDLEVBQUUsU0FBUztBQUFBLFFBQzdEO0FBQ0EsWUFBSSxpQkFBaUIsU0FBUyxNQUFNLFNBQVMsR0FBRztBQUc5QyxlQUFLLGVBQWUsTUFBTSxDQUFDLEdBQUcsUUFBUSxXQUFZO0FBQ2hELGlCQUFLLElBQUksR0FBRyxJQUFJLFVBQVUsU0FBUyxHQUFHLEtBQUs7QUFDekMsa0JBQUksVUFBVSxDQUFDLE1BQU07QUFBVyxzQkFBTSxDQUFDLElBQUk7QUFBQSxZQUM3QztBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFFQSxZQUFJLFNBQVMsUUFBUTtBQUNuQixnQkFBTSxTQUFTLFNBQVMsT0FBTyxJQUFJO0FBQ25DLGVBQUssSUFBSSxHQUFHLElBQUksT0FBTyxRQUFRLEtBQUs7QUFDbEMsb0JBQVEsT0FBTyxDQUFDO0FBQ2hCLG1CQUFPLE1BQU0sQ0FBQyxDQUFDLElBQUksTUFBTSxNQUFNLENBQUMsQ0FBQztBQUFBLFVBQ25DO0FBQUEsUUFDRjtBQUVBLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUVBLElBQUFBLFFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQ3BIakI7QUFBQTtBQUFBO0FBQ0EsUUFBSSxJQUFJO0FBQ1IsUUFBSSxPQUFPO0FBSVgsTUFBRSxFQUFFLFFBQVEsVUFBVSxPQUFPLE1BQU0sUUFBUSxJQUFJLFNBQVMsS0FBSyxHQUFHO0FBQUEsTUFDOUQsTUFBTTtBQUFBLElBQ1IsQ0FBQztBQUFBO0FBQUE7OztBQ1JEO0FBQUE7QUFBQTtBQUVBO0FBQ0EsUUFBSSxJQUFJO0FBQ1IsUUFBSSxPQUFPO0FBQ1gsUUFBSSxhQUFhO0FBQ2pCLFFBQUksV0FBVztBQUNmLFFBQUksV0FBVztBQUVmLFFBQUksb0JBQW9CLFdBQVk7QUFDbEMsVUFBSSxhQUFhO0FBQ2pCLFVBQUksS0FBSztBQUNULFNBQUcsT0FBTyxXQUFZO0FBQ3BCLHFCQUFhO0FBQ2IsZUFBTyxJQUFJLEtBQUssTUFBTSxNQUFNLFNBQVM7QUFBQSxNQUN2QztBQUNBLGFBQU8sR0FBRyxLQUFLLEtBQUssTUFBTSxRQUFRO0FBQUEsSUFDcEMsRUFBRTtBQUVGLFFBQUksYUFBYSxJQUFJO0FBSXJCLE1BQUUsRUFBRSxRQUFRLFVBQVUsT0FBTyxNQUFNLFFBQVEsQ0FBQyxrQkFBa0IsR0FBRztBQUFBLE1BQy9ELE1BQU0sU0FBVSxHQUFHO0FBQ2pCLFlBQUksSUFBSSxTQUFTLElBQUk7QUFDckIsWUFBSSxTQUFTLFNBQVMsQ0FBQztBQUN2QixZQUFJLE9BQU8sRUFBRTtBQUNiLFlBQUksQ0FBQyxXQUFXLElBQUk7QUFBRyxpQkFBTyxLQUFLLFlBQVksR0FBRyxNQUFNO0FBQ3hELFlBQUksU0FBUyxLQUFLLE1BQU0sR0FBRyxNQUFNO0FBQ2pDLFlBQUksV0FBVztBQUFNLGlCQUFPO0FBQzVCLGlCQUFTLE1BQU07QUFDZixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0YsQ0FBQztBQUFBO0FBQUE7OztBQ2xDRDtBQUFBLDRGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxZQUFXO0FBQ2YsUUFBSSxVQUFVO0FBQ2QsUUFBSSxrQkFBa0I7QUFFdEIsUUFBSSxRQUFRLGdCQUFnQixPQUFPO0FBSW5DLElBQUFELFFBQU8sVUFBVSxTQUFVLElBQUk7QUFDN0IsVUFBSTtBQUNKLGFBQU9DLFVBQVMsRUFBRSxPQUFPLFdBQVcsR0FBRyxLQUFLLE9BQU8sU0FBWSxDQUFDLENBQUMsV0FBVyxRQUFRLEVBQUUsTUFBTTtBQUFBLElBQzlGO0FBQUE7QUFBQTs7O0FDWkE7QUFBQSwrRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxXQUFXO0FBRWYsUUFBSSxhQUFhO0FBRWpCLElBQUFBLFFBQU8sVUFBVSxTQUFVLElBQUk7QUFDN0IsVUFBSSxTQUFTLEVBQUUsR0FBRztBQUNoQixjQUFNLElBQUksV0FBVywrQ0FBK0M7QUFBQSxNQUN0RTtBQUFFLGFBQU87QUFBQSxJQUNYO0FBQUE7QUFBQTs7O0FDVEE7QUFBQSwwR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxrQkFBa0I7QUFFdEIsUUFBSSxRQUFRLGdCQUFnQixPQUFPO0FBRW5DLElBQUFBLFFBQU8sVUFBVSxTQUFVLGFBQWE7QUFDdEMsVUFBSSxTQUFTO0FBQ2IsVUFBSTtBQUNGLGNBQU0sV0FBVyxFQUFFLE1BQU07QUFBQSxNQUMzQixTQUFTLFFBQVE7QUFDZixZQUFJO0FBQ0YsaUJBQU8sS0FBSyxJQUFJO0FBQ2hCLGlCQUFPLE1BQU0sV0FBVyxFQUFFLE1BQU07QUFBQSxRQUNsQyxTQUFTLFFBQVE7QUFBQSxRQUFjO0FBQUEsTUFDakM7QUFBRSxhQUFPO0FBQUEsSUFDWDtBQUFBO0FBQUE7OztBQ2ZBO0FBQUE7QUFBQTtBQUNBLFFBQUksSUFBSTtBQUNSLFFBQUksY0FBYztBQUNsQixRQUFJLDJCQUEyQiw2Q0FBMkQ7QUFDMUYsUUFBSSxXQUFXO0FBQ2YsUUFBSSxXQUFXO0FBQ2YsUUFBSSxhQUFhO0FBQ2pCLFFBQUkseUJBQXlCO0FBQzdCLFFBQUksdUJBQXVCO0FBQzNCLFFBQUksVUFBVTtBQUVkLFFBQUksUUFBUSxZQUFZLEdBQUcsS0FBSztBQUNoQyxRQUFJLE1BQU0sS0FBSztBQUVmLFFBQUksMEJBQTBCLHFCQUFxQixVQUFVO0FBRTdELFFBQUksbUJBQW1CLENBQUMsV0FBVyxDQUFDLDJCQUEyQixDQUFDLENBQUMsV0FBWTtBQUMzRSxVQUFJLGFBQWEseUJBQXlCLE9BQU8sV0FBVyxVQUFVO0FBQ3RFLGFBQU8sY0FBYyxDQUFDLFdBQVc7QUFBQSxJQUNuQyxFQUFFO0FBSUYsTUFBRSxFQUFFLFFBQVEsVUFBVSxPQUFPLE1BQU0sUUFBUSxDQUFDLG9CQUFvQixDQUFDLHdCQUF3QixHQUFHO0FBQUEsTUFDMUYsVUFBVSxTQUFTLFNBQVMsY0FBNEM7QUFDdEUsWUFBSSxPQUFPLFNBQVMsdUJBQXVCLElBQUksQ0FBQztBQUNoRCxtQkFBVyxZQUFZO0FBQ3ZCLFlBQUksY0FBYyxVQUFVLFNBQVMsSUFBSSxVQUFVLENBQUMsSUFBSTtBQUN4RCxZQUFJLE1BQU0sS0FBSztBQUNmLFlBQUksTUFBTSxnQkFBZ0IsU0FBWSxNQUFNLElBQUksU0FBUyxXQUFXLEdBQUcsR0FBRztBQUMxRSxZQUFJLFNBQVMsU0FBUyxZQUFZO0FBQ2xDLGVBQU8sTUFBTSxNQUFNLE1BQU0sT0FBTyxRQUFRLEdBQUcsTUFBTTtBQUFBLE1BQ25EO0FBQUEsSUFDRixDQUFDO0FBQUE7QUFBQTs7O0FDakNEO0FBQUE7QUFBQTtBQUNBLFFBQUksSUFBSTtBQUNSLFFBQUksY0FBYztBQUNsQixRQUFJLGFBQWE7QUFDakIsUUFBSSx5QkFBeUI7QUFDN0IsUUFBSSxXQUFXO0FBQ2YsUUFBSSx1QkFBdUI7QUFFM0IsUUFBSSxnQkFBZ0IsWUFBWSxHQUFHLE9BQU87QUFJMUMsTUFBRSxFQUFFLFFBQVEsVUFBVSxPQUFPLE1BQU0sUUFBUSxDQUFDLHFCQUFxQixVQUFVLEVBQUUsR0FBRztBQUFBLE1BQzlFLFVBQVUsU0FBUyxTQUFTLGNBQW1DO0FBQzdELGVBQU8sQ0FBQyxDQUFDLENBQUM7QUFBQSxVQUNSLFNBQVMsdUJBQXVCLElBQUksQ0FBQztBQUFBLFVBQ3JDLFNBQVMsV0FBVyxZQUFZLENBQUM7QUFBQSxVQUNqQyxVQUFVLFNBQVMsSUFBSSxVQUFVLENBQUMsSUFBSTtBQUFBLFFBQ3hDO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQztBQUFBO0FBQUE7OztBQ3BCRDtBQUFBLG1HQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxzQkFBc0I7QUFDMUIsUUFBSSxXQUFXO0FBQ2YsUUFBSSx5QkFBeUI7QUFFN0IsUUFBSSxTQUFTLFlBQVksR0FBRyxNQUFNO0FBQ2xDLFFBQUksYUFBYSxZQUFZLEdBQUcsVUFBVTtBQUMxQyxRQUFJLGNBQWMsWUFBWSxHQUFHLEtBQUs7QUFFdEMsUUFBSSxlQUFlLFNBQVUsbUJBQW1CO0FBQzlDLGFBQU8sU0FBVSxPQUFPLEtBQUs7QUFDM0IsWUFBSSxJQUFJLFNBQVMsdUJBQXVCLEtBQUssQ0FBQztBQUM5QyxZQUFJLFdBQVcsb0JBQW9CLEdBQUc7QUFDdEMsWUFBSSxPQUFPLEVBQUU7QUFDYixZQUFJLE9BQU87QUFDWCxZQUFJLFdBQVcsS0FBSyxZQUFZO0FBQU0saUJBQU8sb0JBQW9CLEtBQUs7QUFDdEUsZ0JBQVEsV0FBVyxHQUFHLFFBQVE7QUFDOUIsZUFBTyxRQUFRLFNBQVUsUUFBUSxTQUFVLFdBQVcsTUFBTSxTQUN0RCxTQUFTLFdBQVcsR0FBRyxXQUFXLENBQUMsS0FBSyxTQUFVLFNBQVMsUUFDM0Qsb0JBQ0UsT0FBTyxHQUFHLFFBQVEsSUFDbEIsUUFDRixvQkFDRSxZQUFZLEdBQUcsVUFBVSxXQUFXLENBQUMsS0FDcEMsUUFBUSxTQUFVLE9BQU8sU0FBUyxTQUFVO0FBQUEsTUFDdkQ7QUFBQSxJQUNGO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQUE7QUFBQTtBQUFBLE1BR2YsUUFBUSxhQUFhLEtBQUs7QUFBQTtBQUFBO0FBQUEsTUFHMUIsUUFBUSxhQUFhLElBQUk7QUFBQSxJQUMzQjtBQUFBO0FBQUE7OztBQ3BDQTtBQUFBO0FBQUE7QUFDQSxRQUFJLFNBQVMsMkJBQXlDO0FBQ3RELFFBQUksV0FBVztBQUNmLFFBQUksc0JBQXNCO0FBQzFCLFFBQUksaUJBQWlCO0FBQ3JCLFFBQUkseUJBQXlCO0FBRTdCLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUksbUJBQW1CLG9CQUFvQjtBQUMzQyxRQUFJLG1CQUFtQixvQkFBb0IsVUFBVSxlQUFlO0FBSXBFLG1CQUFlLFFBQVEsVUFBVSxTQUFVLFVBQVU7QUFDbkQsdUJBQWlCLE1BQU07QUFBQSxRQUNyQixNQUFNO0FBQUEsUUFDTixRQUFRLFNBQVMsUUFBUTtBQUFBLFFBQ3pCLE9BQU87QUFBQSxNQUNULENBQUM7QUFBQSxJQUdILEdBQUcsU0FBUyxPQUFPO0FBQ2pCLFVBQUksUUFBUSxpQkFBaUIsSUFBSTtBQUNqQyxVQUFJLFNBQVMsTUFBTTtBQUNuQixVQUFJLFFBQVEsTUFBTTtBQUNsQixVQUFJO0FBQ0osVUFBSSxTQUFTLE9BQU87QUFBUSxlQUFPLHVCQUF1QixRQUFXLElBQUk7QUFDekUsY0FBUSxPQUFPLFFBQVEsS0FBSztBQUM1QixZQUFNLFNBQVMsTUFBTTtBQUNyQixhQUFPLHVCQUF1QixPQUFPLEtBQUs7QUFBQSxJQUM1QyxDQUFDO0FBQUE7QUFBQTs7O0FDOUJEO0FBQUEscUhBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBO0FBQ0EsUUFBSSxPQUFPO0FBQ1gsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSSxhQUFhO0FBQ2pCLFFBQUksUUFBUTtBQUNaLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUksOEJBQThCO0FBRWxDLFFBQUksVUFBVSxnQkFBZ0IsU0FBUztBQUN2QyxRQUFJLGtCQUFrQixPQUFPO0FBRTdCLElBQUFBLFFBQU8sVUFBVSxTQUFVLEtBQUssTUFBTSxRQUFRLE1BQU07QUFDbEQsVUFBSSxTQUFTLGdCQUFnQixHQUFHO0FBRWhDLFVBQUksc0JBQXNCLENBQUMsTUFBTSxXQUFZO0FBRTNDLFlBQUksSUFBSSxDQUFDO0FBQ1QsVUFBRSxNQUFNLElBQUksV0FBWTtBQUFFLGlCQUFPO0FBQUEsUUFBRztBQUNwQyxlQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTTtBQUFBLE1BQ3hCLENBQUM7QUFFRCxVQUFJLG9CQUFvQix1QkFBdUIsQ0FBQyxNQUFNLFdBQVk7QUFFaEUsWUFBSSxhQUFhO0FBQ2pCLFlBQUksS0FBSztBQUVULFlBQUksUUFBUSxTQUFTO0FBSW5CLGVBQUssQ0FBQztBQUdOLGFBQUcsY0FBYyxDQUFDO0FBQ2xCLGFBQUcsWUFBWSxPQUFPLElBQUksV0FBWTtBQUFFLG1CQUFPO0FBQUEsVUFBSTtBQUNuRCxhQUFHLFFBQVE7QUFDWCxhQUFHLE1BQU0sSUFBSSxJQUFJLE1BQU07QUFBQSxRQUN6QjtBQUVBLFdBQUcsT0FBTyxXQUFZO0FBQ3BCLHVCQUFhO0FBQ2IsaUJBQU87QUFBQSxRQUNUO0FBRUEsV0FBRyxNQUFNLEVBQUUsRUFBRTtBQUNiLGVBQU8sQ0FBQztBQUFBLE1BQ1YsQ0FBQztBQUVELFVBQ0UsQ0FBQyx1QkFDRCxDQUFDLHFCQUNELFFBQ0E7QUFDQSxZQUFJLHFCQUFxQixJQUFJLE1BQU07QUFDbkMsWUFBSSxVQUFVLEtBQUssUUFBUSxHQUFHLEdBQUcsR0FBRyxTQUFVLGNBQWMsUUFBUSxLQUFLLE1BQU0sbUJBQW1CO0FBQ2hHLGNBQUksUUFBUSxPQUFPO0FBQ25CLGNBQUksVUFBVSxjQUFjLFVBQVUsZ0JBQWdCLE1BQU07QUFDMUQsZ0JBQUksdUJBQXVCLENBQUMsbUJBQW1CO0FBSTdDLHFCQUFPLEVBQUUsTUFBTSxNQUFNLE9BQU8sS0FBSyxvQkFBb0IsUUFBUSxLQUFLLElBQUksRUFBRTtBQUFBLFlBQzFFO0FBQ0EsbUJBQU8sRUFBRSxNQUFNLE1BQU0sT0FBTyxLQUFLLGNBQWMsS0FBSyxRQUFRLElBQUksRUFBRTtBQUFBLFVBQ3BFO0FBQ0EsaUJBQU8sRUFBRSxNQUFNLE1BQU07QUFBQSxRQUN2QixDQUFDO0FBRUQsc0JBQWMsT0FBTyxXQUFXLEtBQUssUUFBUSxDQUFDLENBQUM7QUFDL0Msc0JBQWMsaUJBQWlCLFFBQVEsUUFBUSxDQUFDLENBQUM7QUFBQSxNQUNuRDtBQUVBLFVBQUk7QUFBTSxvQ0FBNEIsZ0JBQWdCLE1BQU0sR0FBRyxRQUFRLElBQUk7QUFBQSxJQUM3RTtBQUFBO0FBQUE7OztBQzNFQTtBQUFBLHVHQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFNBQVMsMkJBQXlDO0FBSXRELElBQUFBLFFBQU8sVUFBVSxTQUFVLEdBQUcsT0FBTyxTQUFTO0FBQzVDLGFBQU8sU0FBUyxVQUFVLE9BQU8sR0FBRyxLQUFLLEVBQUUsU0FBUztBQUFBLElBQ3REO0FBQUE7QUFBQTs7O0FDUEE7QUFBQSxtR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksV0FBVztBQUVmLFFBQUksUUFBUSxLQUFLO0FBQ2pCLFFBQUksU0FBUyxZQUFZLEdBQUcsTUFBTTtBQUNsQyxRQUFJLFVBQVUsWUFBWSxHQUFHLE9BQU87QUFDcEMsUUFBSSxjQUFjLFlBQVksR0FBRyxLQUFLO0FBRXRDLFFBQUksdUJBQXVCO0FBQzNCLFFBQUksZ0NBQWdDO0FBSXBDLElBQUFBLFFBQU8sVUFBVSxTQUFVLFNBQVMsS0FBSyxVQUFVLFVBQVUsZUFBZSxhQUFhO0FBQ3ZGLFVBQUksVUFBVSxXQUFXLFFBQVE7QUFDakMsVUFBSSxJQUFJLFNBQVM7QUFDakIsVUFBSSxVQUFVO0FBQ2QsVUFBSSxrQkFBa0IsUUFBVztBQUMvQix3QkFBZ0IsU0FBUyxhQUFhO0FBQ3RDLGtCQUFVO0FBQUEsTUFDWjtBQUNBLGFBQU8sUUFBUSxhQUFhLFNBQVMsU0FBVSxPQUFPLElBQUk7QUFDeEQsWUFBSTtBQUNKLGdCQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUc7QUFBQSxVQUNyQixLQUFLO0FBQUssbUJBQU87QUFBQSxVQUNqQixLQUFLO0FBQUssbUJBQU87QUFBQSxVQUNqQixLQUFLO0FBQUssbUJBQU8sWUFBWSxLQUFLLEdBQUcsUUFBUTtBQUFBLFVBQzdDLEtBQUs7QUFBSyxtQkFBTyxZQUFZLEtBQUssT0FBTztBQUFBLFVBQ3pDLEtBQUs7QUFDSCxzQkFBVSxjQUFjLFlBQVksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUM5QztBQUFBLFVBQ0Y7QUFDRSxnQkFBSSxJQUFJLENBQUM7QUFDVCxnQkFBSSxNQUFNO0FBQUcscUJBQU87QUFDcEIsZ0JBQUksSUFBSSxHQUFHO0FBQ1Qsa0JBQUksSUFBSSxNQUFNLElBQUksRUFBRTtBQUNwQixrQkFBSSxNQUFNO0FBQUcsdUJBQU87QUFDcEIsa0JBQUksS0FBSztBQUFHLHVCQUFPLFNBQVMsSUFBSSxDQUFDLE1BQU0sU0FBWSxPQUFPLElBQUksQ0FBQyxJQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksT0FBTyxJQUFJLENBQUM7QUFDakcscUJBQU87QUFBQSxZQUNUO0FBQ0Esc0JBQVUsU0FBUyxJQUFJLENBQUM7QUFBQSxRQUM1QjtBQUNBLGVBQU8sWUFBWSxTQUFZLEtBQUs7QUFBQSxNQUN0QyxDQUFDO0FBQUEsSUFDSDtBQUFBO0FBQUE7OztBQzdDQTtBQUFBLHVHQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLE9BQU87QUFDWCxRQUFJLFdBQVc7QUFDZixRQUFJLGFBQWE7QUFDakIsUUFBSSxVQUFVO0FBQ2QsUUFBSSxhQUFhO0FBRWpCLFFBQUksYUFBYTtBQUlqQixJQUFBQSxRQUFPLFVBQVUsU0FBVSxHQUFHLEdBQUc7QUFDL0IsVUFBSSxPQUFPLEVBQUU7QUFDYixVQUFJLFdBQVcsSUFBSSxHQUFHO0FBQ3BCLFlBQUksU0FBUyxLQUFLLE1BQU0sR0FBRyxDQUFDO0FBQzVCLFlBQUksV0FBVztBQUFNLG1CQUFTLE1BQU07QUFDcEMsZUFBTztBQUFBLE1BQ1Q7QUFDQSxVQUFJLFFBQVEsQ0FBQyxNQUFNO0FBQVUsZUFBTyxLQUFLLFlBQVksR0FBRyxDQUFDO0FBQ3pELFlBQU0sSUFBSSxXQUFXLDZDQUE2QztBQUFBLElBQ3BFO0FBQUE7QUFBQTs7O0FDcEJBO0FBQUE7QUFBQTtBQUNBLFFBQUksUUFBUTtBQUNaLFFBQUksT0FBTztBQUNYLFFBQUksY0FBYztBQUNsQixRQUFJLGdDQUFnQztBQUNwQyxRQUFJLFFBQVE7QUFDWixRQUFJLFdBQVc7QUFDZixRQUFJLGFBQWE7QUFDakIsUUFBSSxvQkFBb0I7QUFDeEIsUUFBSSxzQkFBc0I7QUFDMUIsUUFBSSxXQUFXO0FBQ2YsUUFBSSxXQUFXO0FBQ2YsUUFBSSx5QkFBeUI7QUFDN0IsUUFBSSxxQkFBcUI7QUFDekIsUUFBSSxZQUFZO0FBQ2hCLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUksYUFBYTtBQUNqQixRQUFJLGtCQUFrQjtBQUV0QixRQUFJLFVBQVUsZ0JBQWdCLFNBQVM7QUFDdkMsUUFBSSxNQUFNLEtBQUs7QUFDZixRQUFJLE1BQU0sS0FBSztBQUNmLFFBQUksU0FBUyxZQUFZLENBQUMsRUFBRSxNQUFNO0FBQ2xDLFFBQUksT0FBTyxZQUFZLENBQUMsRUFBRSxJQUFJO0FBQzlCLFFBQUksZ0JBQWdCLFlBQVksR0FBRyxPQUFPO0FBQzFDLFFBQUksY0FBYyxZQUFZLEdBQUcsS0FBSztBQUV0QyxRQUFJLGdCQUFnQixTQUFVLElBQUk7QUFDaEMsYUFBTyxPQUFPLFNBQVksS0FBSyxPQUFPLEVBQUU7QUFBQSxJQUMxQztBQUlBLFFBQUksbUJBQW9CLFdBQVk7QUFFbEMsYUFBTyxJQUFJLFFBQVEsS0FBSyxJQUFJLE1BQU07QUFBQSxJQUNwQyxFQUFHO0FBR0gsUUFBSSwrQ0FBZ0QsV0FBWTtBQUM5RCxVQUFJLElBQUksT0FBTyxHQUFHO0FBQ2hCLGVBQU8sSUFBSSxPQUFPLEVBQUUsS0FBSyxJQUFJLE1BQU07QUFBQSxNQUNyQztBQUNBLGFBQU87QUFBQSxJQUNULEVBQUc7QUFFSCxRQUFJLGdDQUFnQyxDQUFDLE1BQU0sV0FBWTtBQUNyRCxVQUFJLEtBQUs7QUFDVCxTQUFHLE9BQU8sV0FBWTtBQUNwQixZQUFJLFNBQVMsQ0FBQztBQUNkLGVBQU8sU0FBUyxFQUFFLEdBQUcsSUFBSTtBQUN6QixlQUFPO0FBQUEsTUFDVDtBQUVBLGFBQU8sR0FBRyxRQUFRLElBQUksTUFBTSxNQUFNO0FBQUEsSUFDcEMsQ0FBQztBQUdELGtDQUE4QixXQUFXLFNBQVUsR0FBRyxlQUFlLGlCQUFpQjtBQUNwRixVQUFJLG9CQUFvQiwrQ0FBK0MsTUFBTTtBQUU3RSxhQUFPO0FBQUE7QUFBQTtBQUFBLFFBR0wsU0FBUyxRQUFRLGFBQWEsY0FBYztBQUMxQyxjQUFJLElBQUksdUJBQXVCLElBQUk7QUFDbkMsY0FBSSxXQUFXLGtCQUFrQixXQUFXLElBQUksU0FBWSxVQUFVLGFBQWEsT0FBTztBQUMxRixpQkFBTyxXQUNILEtBQUssVUFBVSxhQUFhLEdBQUcsWUFBWSxJQUMzQyxLQUFLLGVBQWUsU0FBUyxDQUFDLEdBQUcsYUFBYSxZQUFZO0FBQUEsUUFDaEU7QUFBQTtBQUFBO0FBQUEsUUFHQSxTQUFVLFFBQVEsY0FBYztBQUM5QixjQUFJLEtBQUssU0FBUyxJQUFJO0FBQ3RCLGNBQUksSUFBSSxTQUFTLE1BQU07QUFFdkIsY0FDRSxPQUFPLGdCQUFnQixZQUN2QixjQUFjLGNBQWMsaUJBQWlCLE1BQU0sTUFDbkQsY0FBYyxjQUFjLElBQUksTUFBTSxJQUN0QztBQUNBLGdCQUFJLE1BQU0sZ0JBQWdCLGVBQWUsSUFBSSxHQUFHLFlBQVk7QUFDNUQsZ0JBQUksSUFBSTtBQUFNLHFCQUFPLElBQUk7QUFBQSxVQUMzQjtBQUVBLGNBQUksb0JBQW9CLFdBQVcsWUFBWTtBQUMvQyxjQUFJLENBQUM7QUFBbUIsMkJBQWUsU0FBUyxZQUFZO0FBRTVELGNBQUlDLFVBQVMsR0FBRztBQUNoQixjQUFJO0FBQ0osY0FBSUEsU0FBUTtBQUNWLDBCQUFjLEdBQUc7QUFDakIsZUFBRyxZQUFZO0FBQUEsVUFDakI7QUFFQSxjQUFJLFVBQVUsQ0FBQztBQUNmLGNBQUk7QUFDSixpQkFBTyxNQUFNO0FBQ1gscUJBQVMsV0FBVyxJQUFJLENBQUM7QUFDekIsZ0JBQUksV0FBVztBQUFNO0FBRXJCLGlCQUFLLFNBQVMsTUFBTTtBQUNwQixnQkFBSSxDQUFDQTtBQUFRO0FBRWIsZ0JBQUksV0FBVyxTQUFTLE9BQU8sQ0FBQyxDQUFDO0FBQ2pDLGdCQUFJLGFBQWE7QUFBSSxpQkFBRyxZQUFZLG1CQUFtQixHQUFHLFNBQVMsR0FBRyxTQUFTLEdBQUcsV0FBVztBQUFBLFVBQy9GO0FBRUEsY0FBSSxvQkFBb0I7QUFDeEIsY0FBSSxxQkFBcUI7QUFDekIsbUJBQVMsSUFBSSxHQUFHLElBQUksUUFBUSxRQUFRLEtBQUs7QUFDdkMscUJBQVMsUUFBUSxDQUFDO0FBRWxCLGdCQUFJLFVBQVUsU0FBUyxPQUFPLENBQUMsQ0FBQztBQUNoQyxnQkFBSSxXQUFXLElBQUksSUFBSSxvQkFBb0IsT0FBTyxLQUFLLEdBQUcsRUFBRSxNQUFNLEdBQUcsQ0FBQztBQUN0RSxnQkFBSSxXQUFXLENBQUM7QUFDaEIsZ0JBQUk7QUFNSixxQkFBUyxJQUFJLEdBQUcsSUFBSSxPQUFPLFFBQVE7QUFBSyxtQkFBSyxVQUFVLGNBQWMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUMvRSxnQkFBSSxnQkFBZ0IsT0FBTztBQUMzQixnQkFBSSxtQkFBbUI7QUFDckIsa0JBQUksZUFBZSxPQUFPLENBQUMsT0FBTyxHQUFHLFVBQVUsVUFBVSxDQUFDO0FBQzFELGtCQUFJLGtCQUFrQjtBQUFXLHFCQUFLLGNBQWMsYUFBYTtBQUNqRSw0QkFBYyxTQUFTLE1BQU0sY0FBYyxRQUFXLFlBQVksQ0FBQztBQUFBLFlBQ3JFLE9BQU87QUFDTCw0QkFBYyxnQkFBZ0IsU0FBUyxHQUFHLFVBQVUsVUFBVSxlQUFlLFlBQVk7QUFBQSxZQUMzRjtBQUNBLGdCQUFJLFlBQVksb0JBQW9CO0FBQ2xDLG1DQUFxQixZQUFZLEdBQUcsb0JBQW9CLFFBQVEsSUFBSTtBQUNwRSxtQ0FBcUIsV0FBVyxRQUFRO0FBQUEsWUFDMUM7QUFBQSxVQUNGO0FBRUEsaUJBQU8sb0JBQW9CLFlBQVksR0FBRyxrQkFBa0I7QUFBQSxRQUM5RDtBQUFBLE1BQ0Y7QUFBQSxJQUNGLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQyxvQkFBb0IsNENBQTRDO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDN0l0RyxJQUFBQyxnQkFBQSxDQUFBO0FBQUFDLFNBQUFELGVBQUE7RUFBQUUsV0FBQSxTQUFBQSxZQUFBO0FBQUEsV0FBQUE7RUFBQTtFQUFBQyxVQUFBLFNBQUFBLFdBQUE7QUFBQSxXQUFBQTtFQUFBO0VBQUFDLGVBQUEsU0FBQUEsZ0JBQUE7QUFBQSxXQUFBRjtFQUFBO0VBQUFHLGNBQUEsU0FBQUEsZUFBQTtBQUFBLFdBQUFBO0VBQUE7RUFBQUMsWUFBQSxTQUFBQSxjQUFBO0FBQUEsV0FBQUE7RUFBQTtFQUFBQyxZQUFBLFNBQUFBLGFBQUE7QUFBQSxXQUFBSjtFQUFBO0VBQUFLLFdBQUEsU0FBQUEsWUFBQTtBQUFBLFdBQUFBO0VBQUE7RUFBQUMsZUFBQSxTQUFBQSxnQkFBQTtBQUFBLFdBQUFBO0VBQUE7RUFBQUMsZUFBQSxTQUFBQSxnQkFBQTtBQUFBLFdBQUFBO0VBQUE7RUFBQUMsV0FBQSxTQUFBQSxZQUFBO0FBQUEsV0FBQUE7RUFBQTtFQUFBQyxZQUFBLFNBQUFBLGFBQUE7QUFBQSxXQUFBQTtFQUFBO0VBQUFDLEdBQUEsU0FBQUEsSUFBQTtBQUFBLFdBQUFKO0VBQUE7RUFBQUssT0FBQSxTQUFBQSxRQUFBO0FBQUEsV0FBQUE7RUFBQTtFQUFBQyxLQUFBLFNBQUFBLE1BQUE7QUFBQSxXQUFBQTtFQUFBO0VBQUFDLE1BQUEsU0FBQUEsT0FBQTtBQUFBLFdBQUFEO0VBQUE7RUFBQUUsTUFBQSxTQUFBQSxPQUFBO0FBQUEsV0FBQUM7RUFBQTtFQUFBQyxnQkFBQSxTQUFBQSxpQkFBQTtBQUFBLFdBQUFBO0VBQUE7RUFBQUMsaUJBQUEsU0FBQUEsa0JBQUE7QUFBQSxXQUFBQTtFQUFBO0VBQUFDLFFBQUEsU0FBQUEsU0FBQTtBQUFBLFdBQUFBO0VBQUE7RUFBQUMsYUFBQSxTQUFBQSxjQUFBO0FBQUEsV0FBQUo7RUFBQTtFQUFBSyxjQUFBLFNBQUFBLGVBQUE7QUFBQSxXQUFBQTtFQUFBO0VBQUFDLHFCQUFBLFNBQUFBLHNCQUFBO0FBQUEsV0FBQUE7RUFBQTtFQUFBQyxTQUFBLFNBQUFBLFVBQUE7QUFBQSxXQUFBQTtFQUFBO0VBQUFDLFFBQUEsU0FBQUEsU0FBQTtBQUFBLFdBQUFmO0VBQUE7RUFBQWdCLFNBQUEsU0FBQUEsVUFBQTtBQUFBLFdBQUFBO0VBQUE7QUFBQSxDQUFBO0FBQUFDLE9BQUFDLFVBQUFDLGNBQUE5QixhQUFBO0FDQ0EsSUFBTStCLE9BQU9DLE9BQU9EO0FBQ3BCLFNBQVNiLFNBQVNlLE9BQU87QUFDdkIsU0FBT0E7QUFDVDtBQUNBLFNBQVNDLFVBQVVDLEtBQUs7QUFDdEIsU0FBTyxPQUFPQSxRQUFRO0FBQ3hCO0FBQ0EsU0FBU0MsVUFBVUQsS0FBSztBQUN0QixTQUFPQSxPQUFPLE9BQU9BLElBQUlFLGFBQWE7QUFDeEM7QUFDQSxTQUFTQyxTQUFTSCxLQUFLO0FBQ3JCLFNBQU8sT0FBT0EsUUFBUTtBQUN4QjtBQUNBLFNBQVNJLFNBQVNKLEtBQUs7QUFDckIsU0FBTyxPQUFPQSxRQUFRO0FBQ3hCO0FBQ0EsU0FBU0ssU0FBU0wsS0FBSztBQUNyQixTQUFPTSxRQUFPTixHQUFBLE1BQVEsV0FBV0EsUUFBUSxPQUFPTyxXQUFXUCxHQUFHO0FBQ2hFO0FBQ0EsU0FBU08sV0FBV1AsS0FBSztBQUN2QixTQUFPLE9BQU9BLFFBQVE7QUFDeEI7QUFDQSxTQUFTUSxpQkFBaUJDLFlBQVc7QUFDbkMsTUFBUUMsWUFBY0QsV0FBZEM7QUFDUixTQUFPLENBQUMsRUFBRUEsYUFBYUEsVUFBVUM7QUFDbkM7QUFDQSxTQUFTQyxZQUFZQyxLQUFLO0FBQ3hCLFNBQU9SLFNBQVNRLEdBQUcsS0FBSyxPQUFPQSxJQUFJQyxXQUFXLFlBQVksT0FBT0QsSUFBSVgsYUFBYTtBQUNwRjtBQUNBLFNBQVNhLFFBQVFqQixPQUFPa0IsSUFBSTtBQUMxQixNQUFJLENBQUNsQjtBQUFPO0FBQUEsTUFBQW1CLGFBQUFDLDJCQUNNdEIsS0FBS0UsS0FBSyxDQUFBLEdBQUFxQjtBQUFBLE1BQUE7QUFBNUIsU0FBQUYsV0FBQUcsRUFBQSxHQUFBLEVBQUFELFNBQUFGLFdBQUFJLEVBQUEsR0FBQUMsUUFBK0I7QUFBQSxVQUFwQkMsTUFBQUosT0FBQXJCO0FBQ1RrQixTQUFHbEIsTUFBTXlCLEdBQUcsR0FBR0EsR0FBRztJQUNwQjtFQUFBLFNBQUFDLEtBQUE7QUFBQVAsZUFBQVEsRUFBQUQsR0FBQTtFQUFBLFVBQUE7QUFBQVAsZUFBQVMsRUFBQTtFQUFBO0FBQ0Y7QUFFQSxTQUFTbEQsYUFBWTtBQUNuQixTQUFPcUIsT0FBTzhCLEtBQUs7SUFDakJDLFNBQVM7RUFDWCxDQUFDO0FBQ0g7QUFDQSxTQUFTakQsT0FBTWtELFVBQVU7QUFDdkIsU0FBT3hCLFNBQVN3QixRQUFRLEtBQUssYUFBYUE7QUFDNUM7QUFZQSxJQUFNQyxtQkFBbUI7RUFDdkJDLHlCQUF5QjtFQUN6QkMsbUJBQW1CO0VBQ25CQyxrQkFBa0I7RUFDbEJDLGtCQUFrQjtFQUNsQkMsU0FBUztFQUNUQyxjQUFjO0VBQ2RDLGlCQUFpQjtFQUNqQkMsYUFBYTtFQUNiQyxTQUFTO0VBQ1RDLE1BQU07RUFDTkMsVUFBVTtFQUNWQyxjQUFjO0VBQ2RDLFlBQVk7RUFDWkMsY0FBYztFQUNkQyxXQUFXO0VBQ1hDLFVBQVU7RUFDVkMsU0FBUztFQUNUQyxZQUFZO0VBQ1pDLGFBQWE7RUFDYkMsY0FBYztFQUNkQyxZQUFZO0VBQ1pDLGVBQWU7RUFDZkMsZ0JBQWdCO0VBQ2hCQyxpQkFBaUI7RUFDakJDLFlBQVk7RUFDWkMsV0FBVztFQUNYQyxZQUFZO0VBQ1pDLFNBQVM7RUFDVEMsT0FBTztFQUNQQyxTQUFTO0VBQ1RDLFNBQVM7RUFDVEMsUUFBUTtFQUNSQyxRQUFRO0VBQ1JDLE1BQU07O0VBRU5DLGFBQWE7RUFDYkMsY0FBYztFQUNkQyxhQUFhO0VBQ2JDLGlCQUFpQjtFQUNqQkMsa0JBQWtCO0VBQ2xCQyxrQkFBa0I7RUFDbEJDLGVBQWU7RUFDZkMsYUFBYTtBQUNmO0FBUUEsU0FBU0MsVUFBVUMsUUFBUW5ELEtBQUs7QUFDOUIsU0FBT21ELFNBQVNuRCxJQUFJb0QsT0FBTyxDQUFDLEVBQUVDLFlBQVksSUFBSXJELElBQUlzRCxVQUFVLENBQUM7QUFDL0Q7QUFNQSxJQUFNQyxXQUFXLENBQUMsVUFBVSxNQUFNLE9BQU8sR0FBRztBQUc1Q2xGLEtBQUtrQyxnQkFBZ0IsRUFBRWYsUUFBUSxTQUFBZ0UsTUFBUTtBQUNyQ0QsV0FBUy9ELFFBQVEsU0FBQTJELFFBQVU7QUFDekI1QyxxQkFBaUIyQyxVQUFVQyxRQUFRSyxJQUFJLENBQUMsSUFBSTtFQUM5QyxDQUFDO0FBQ0gsQ0FBQztBQUVELElBQU1DLGFBQWFDLE9BQUEsS0FBQSxFQUFXLGNBQWM7QUFDNUMsSUFBSUMsYUFBNEIseUJBQVVDLGFBQVk7QUFDcERBLGNBQVcsWUFBWSxJQUFJO0FBQzNCLFNBQU9BO0FBQ1QsRUFBR0QsY0FBYyxDQUFDLENBQUM7QUFDbkIsU0FBUy9HLFlBQVdpSCxNQUFNO0FBQ3hCLE1BQU1DLFdBQTJCRCxLQUEzQkMsVUFBVUMsTUFBaUJGLEtBQWpCRSxLQUFRQyxRQUFBQyx5QkFBU0osTUFBQUssU0FBQTtBQUNqQyxTQUFBQyxnQkFBQUEsZ0JBQUFBLGdCQUFBQSxnQkFBQSxDQUFBLEdBQ0dWLFlBQWFFLFdBQVcvRyxVQUFBLEdBQUEsT0FDekJtSCxHQUFBLEdBQUEsUUFDQUMsS0FBQSxHQUFBLFlBQ0FGLFFBQUE7QUFFSjtBQUNBLFNBQVNNLGFBQWFDLElBQUk7QUFDeEIsU0FBT0EsTUFBTSxRQUFRQSxHQUFHWixVQUFVLE1BQU1FLFdBQVcvRztBQUNyRDtBQUVBLElBQU1ELGdCQUFlO0FBQ3JCLElBQU0ySCxpQkFBaUI7QUFDdkIsSUFBTUMsZUFBZTtBQUlyQixTQUFTQyxlQUFlakcsT0FBTztBQUM3QixTQUFPLENBQUNDLFVBQVVELEtBQUssS0FBS0EsU0FBUztBQUN2QztBQUNBLElBQU1rRyxlQUFlLE9BQU9DLGlCQUFpQixjQUFjQSxlQUFlLFdBQVk7QUFBQztBQU12RixTQUFTNUgsV0FBVXlCLE9BQU87QUFDeEIsTUFBSW9HLE1BQU1DLFFBQVFyRyxLQUFLLEdBQUc7QUFDeEIsV0FBT0EsTUFBTXNHLElBQUkvSCxVQUFTLEVBQUVnSSxPQUFPQyxPQUFPLEVBQUVDLEtBQUssR0FBRztFQUN0RCxXQUFXekcsaUJBQWlCa0csY0FBYztBQUN4QyxXQUFPLEtBQUtsRztFQUNkLFdBQVdPLFNBQVNQLEtBQUssR0FBRztBQUMxQixXQUFPRixLQUFLRSxLQUFLLEVBQ2R1RyxPQUFPLFNBQUFHLEdBQUE7QUFBQSxhQUFLMUcsTUFBTTBHLENBQUM7SUFBQyxDQUFBLEVBQ3BCRCxLQUFLLEdBQUc7RUFDYixXQUFXUixlQUFlakcsS0FBSyxHQUFHO0FBQ2hDLFdBQU8sS0FBS0E7RUFDZCxPQUFPO0FBQ0wsV0FBTztFQUNUO0FBQ0Y7QUFDQSxJQUFNMkcsTUFBTTtFQUNWQyxTQUFTO0VBQ1RDLFFBQVE7RUFDUkMsVUFBVTtFQUNWQyxNQUFNO0VBQ05DLE1BQU07RUFDTkMsU0FBUztFQUNUQyxTQUFTO0VBQ1RDLGVBQWU7RUFDZkMscUJBQXFCO0VBQ3JCQyxhQUFhO0VBQ2JDLGtCQUFrQjtFQUNsQkMsbUJBQW1CO0VBQ25CQyxtQkFBbUI7RUFDbkJDLGdCQUFnQjtFQUNoQkMsU0FBUztFQUNUQyxTQUFTO0VBQ1RDLFNBQVM7RUFDVEMsU0FBUztFQUNUQyxTQUFTO0VBQ1RDLGdCQUFnQjtFQUNoQkMsU0FBUztFQUNUQyxTQUFTO0VBQ1RDLGFBQWE7RUFDYkMsY0FBYztFQUNkQyxVQUFVO0VBQ1ZDLGNBQWM7RUFDZEMsb0JBQW9CO0VBQ3BCQyxhQUFhO0VBQ2JDLFFBQVE7RUFDUkMsY0FBYztFQUNkbEMsUUFBUTtFQUNSbUMsZUFBZTtFQUNmQyxHQUFHO0VBQ0hDLE9BQU87RUFDUEMsTUFBTTtFQUNOQyxnQkFBZ0I7RUFDaEJDLFFBQVE7RUFDUkMsTUFBTTtFQUNOQyxVQUFVO0VBQ1ZDLE1BQU07RUFDTkMsU0FBUztFQUNUQyxTQUFTO0VBQ1RDLFVBQVU7RUFDVkMsZ0JBQWdCO0VBQ2hCQyxNQUFNO0VBQ05DLE1BQU07RUFDTjdDLEtBQUs7RUFDTCxVQUFRO0VBQ1I4QyxRQUFRO0VBQ1JDLE1BQU07RUFDTkMsVUFBVTtFQUNWQyxPQUFPO0VBQ1BDLEtBQUs7RUFDTEMsTUFBTTtBQUNSO0FBQ0EsSUFBTUMsK0JBQ0o7QUFDRixTQUFTdEwsZUFBY3VMLEtBQUs7QUFDMUIsU0FBT3hMLGVBQWN5TCxLQUFLLE1BQU1ELEdBQUc7QUFDckM7QUFDQSxTQUFTOUwsVUFBU3VILE9BQU07QUFDdEIsTUFBTXlFLFdBQVdDLFNBQVNDLHVCQUF1QjtBQUNqREMsY0FBWTVFLE1BQUtGLFVBQVUyRSxRQUFRO0FBQ25DLFNBQU9BO0FBQ1Q7QUFDQSxJQUFNak0sYUFBQSwyQkFBQTtBQUNKLFdBQUFxTSxZQUFZQyxPQUFPO0FBQUFDLG9CQUFBLE1BQUFGLFdBQUE7QUFDakIsU0FBS0MsUUFBUUE7RUFDZjtBQUFBRSxlQUFBSCxhQUFBLENBQUE7SUFBQTdJLEtBQUE7SUFBQXpCLE9BQ0EsU0FBQTBLLFNBQVM7QUFDUCxhQUFPO0lBQ1Q7RUFBQSxDQUFBLENBQUE7QUFBQSxTQUFBSjtBQUFBLEVBQUE7QUFJRnZLLHVCQUFPNEssaUJBQWlCMU0sV0FBVTJDLFdBQVc7RUFDM0NDLGtCQUFrQjtJQUNoQmIsT0FBTztFQUNUO0FBQ0YsQ0FBQztBQUNELFNBQVM0SyxtQkFBbUJDLE9BQU9wRixPQUFNRixVQUFVO0FBQ2pERSxVQUFBcUYsY0FBQUEsY0FBQSxDQUFBLEdBQ0tyRixLQUFBLEdBQUEsQ0FBQSxHQUFBO0lBQ0hGLFVBQUFBO0VBQUEsQ0FBQTtBQUVGLE1BQU13RixXQUFXLElBQUlGLE1BQU1wRixLQUFJO0FBQy9CLFNBQU9zRixTQUFTTCxPQUFPO0FBQ3pCO0FBR0EsU0FBUzVMLEtBQUlrTCxLQUFLMUUsTUFBTTtBQUN0QixNQUFNQyxXQUFzQkQsS0FBdEJDLFVBQWFFLFFBQUFDLHlCQUFTSixNQUFBMEYsVUFBQTtBQUM1QixNQUFJLENBQUN2RixNQUFLd0YsZ0JBQWdCdEUsSUFBSXFELEdBQUcsTUFBTSxHQUFHO0FBQ3hDdkUsWUFBQXFGLGNBQUFBLGNBQUEsQ0FBQSxHQUNLckYsS0FBQSxHQUFBLENBQUEsR0FBQTtNQUNId0YsY0FBYzdNO0lBQUEsQ0FBQTtFQUVsQjtBQUNBLE1BQUk4TTtBQUNKLE1BQUk3SyxTQUFTMkosR0FBRyxHQUFHO0FBQ2pCa0IsV0FBT3pGLE1BQUt3RixlQUNSZCxTQUFTZ0IsZ0JBQWdCMUYsTUFBS3dGLGNBQWNqQixHQUFHLElBQy9DRyxTQUFTM0wsY0FBY3dMLEdBQUc7QUFDOUJvQixlQUFXM0YsT0FBTXlGLElBQUk7QUFDckJiLGdCQUFZOUUsVUFBVTJGLElBQUk7QUFHMUIsUUFBSUEsZ0JBQWdCRyxPQUFPQyxxQkFBcUI3RixNQUFLekYsU0FBUyxNQUFNO0FBQ2xFLFVBQUl5RixNQUFLOEYsYUFBYSxRQUFRbkYsTUFBTUMsUUFBUVosTUFBS3pGLEtBQUssR0FBRztBQUN2RCxZQUFNd0wsU0FBUy9GLE1BQUt6RixNQUFNc0csSUFBSSxTQUFBdEcsT0FBQTtBQUFBLGlCQUFTeUwsT0FBT3pMLEtBQUs7UUFBQyxDQUFBO0FBQ3BEa0wsYUFDR1EsaUJBQWlCLFFBQVEsRUFDekJ6SyxRQUFRLFNBQUEwSyxRQUFBO0FBQUEsaUJBQVdBLE9BQU9DLFdBQVdKLE9BQU9LLFNBQVNGLE9BQU8zTCxLQUFLO1FBQUUsQ0FBQTtNQUN4RSxPQUFPO0FBQ0xrTCxhQUFLbEwsUUFBUXlGLE1BQUt6RjtNQUNwQjtJQUNGO0FBQ0E4TCxjQUFVckcsTUFBS0QsS0FBSzBGLElBQUk7RUFDMUIsV0FBV3pLLFdBQVd1SixHQUFHLEdBQUc7QUFFMUIsUUFBSXpKLFNBQVN5SixJQUFJK0IsWUFBWSxHQUFHO0FBQzlCdEcsY0FBQXFGLGNBQUFBLGNBQUEsQ0FBQSxHQUNLZCxJQUFJK0IsWUFBQSxHQUNKdEcsS0FBQTtJQUVQO0FBQ0F5RixXQUFPeEssaUJBQWlCc0osR0FBRyxJQUN2QlksbUJBQW1CWixLQUFLdkUsT0FBTUYsUUFBUSxJQUN0Q3lFLElBQUFjLGNBQUFBLGNBQUEsQ0FBQSxHQUNLckYsS0FBQSxHQUFBLENBQUEsR0FBQTtNQUNIRixVQUFBQTtJQUFBLENBQUEsQ0FDRDtFQUNQLE9BQU87QUFDTCxVQUFNLElBQUl5RyxVQUFBLDZCQUFBQyxPQUF1Q2pDLEdBQUcsQ0FBRTtFQUN4RDtBQUNBLFNBQU9rQjtBQUNUO0FBQ0EsU0FBUzFNLGVBQWN3TCxLQUFLdkUsT0FBTTtBQUNoQyxXQUNNeUcsT0FBT0MsVUFBVW5MLFFBQVF1RSxXQUFXLElBQUlhLE1BQU04RixPQUFPLElBQUlBLE9BQU8sSUFBSSxDQUFDLEdBQUdFLFFBQVEsR0FDcEZBLFFBQVFGLE1BQ1JFLFNBQ0E7QUFDQTdHLGFBQVM2RyxRQUFRLENBQUMsSUFBSUQsVUFBVUMsS0FBSztFQUN2QztBQUNBLE1BQUkvTCxTQUFTb0YsS0FBSSxLQUFLVyxNQUFNQyxRQUFRWixLQUFJLEdBQUc7QUFDekNGLGFBQVM4RyxRQUFRNUcsS0FBSTtBQUNyQkEsWUFBTyxDQUFDO0VBQ1Y7QUFDQUEsVUFBT0EsU0FBUSxDQUFDO0FBQ2hCLE1BQUlBLE1BQUtGLFlBQVksUUFBUSxDQUFDQSxTQUFTdkUsUUFBUTtBQUM3QztBQUFBLFFBQUFzTCxRQUEwQjdHO0FBQXRCRixlQUFBK0csTUFBQS9HO0FBQWFFLFlBQUFDLHlCQUFBNEcsT0FBQUMsVUFBQTtBQUFBRDtFQUNuQjtBQUNBLFNBQU94TixLQUNMa0wsS0FBQWMsY0FBQUEsY0FBQSxDQUFBLEdBRUtyRixLQUFBLEdBQUEsQ0FBQSxHQUFBO0lBQ0hGLFVBQUFBO0VBQUEsQ0FBQSxHQUVGRSxNQUFLaEUsR0FDUDtBQUNGO0FBQ0EsU0FBU3FLLFVBQVV0RyxLQUFLMEYsTUFBTTtBQUM1QixNQUFJck0sT0FBTTJHLEdBQUcsR0FBRztBQUNkQSxRQUFJMUQsVUFBVW9KO0VBQ2hCLFdBQVd6SyxXQUFXK0UsR0FBRyxHQUFHO0FBQzFCQSxRQUFJMEYsSUFBSTtFQUNWO0FBQ0Y7QUFDQSxTQUFTYixZQUFZbUMsT0FBT3RCLE1BQU07QUFDaEMsTUFBSXBLLFlBQVkwTCxLQUFLLEdBQUc7QUFDdEJDLG1CQUFlRCxPQUFPdEIsSUFBSTtFQUM1QixXQUFXN0ssU0FBU21NLEtBQUssS0FBS2xNLFNBQVNrTSxLQUFLLEdBQUc7QUFDN0NFLHNCQUFrQnZDLFNBQVN3QyxlQUFlSCxLQUFLLEdBQUd0QixJQUFJO0VBQ3hELFdBQVdzQixVQUFVLE1BQU07QUFDekJFLHNCQUFrQnZDLFNBQVN5QyxjQUFjLEVBQUUsR0FBRzFCLElBQUk7RUFDcEQsV0FBVy9LLFVBQVVxTSxLQUFLLEdBQUc7QUFDM0JFLHNCQUFrQkYsT0FBT3RCLElBQUk7RUFDL0IsV0FBV3JGLGFBQWEyRyxLQUFLLEdBQUc7QUFDOUIsUUFBTUssYUFBYTNCLEtBQUs0QixhQUFhTixNQUFNTyxJQUFJO0FBQy9DMUMsZ0JBQVltQyxNQUFNakgsVUFBVXNILFVBQVU7QUFDdENmLGNBQVVVLE1BQU1oSCxLQUFLcUgsVUFBVTtFQUNqQztBQUNGO0FBQ0EsU0FBU0osZUFBZWxILFVBQVUyRixNQUFNO0FBQ3RDLFdBQUE4QixLQUFBLEdBQUFDLE9BQUFDLG1CQUF3QjNILFFBQVEsR0FBQXlILEtBQUFDLEtBQUFqTSxRQUFBZ00sTUFBRztBQUFuQyxRQUFXUixRQUFBUyxLQUFBRCxFQUFBO0FBQ1QzQyxnQkFBWW1DLE9BQU90QixJQUFJO0VBQ3pCO0FBQ0EsU0FBT0E7QUFDVDtBQUNBLFNBQVN3QixrQkFBa0JGLE9BQU90QixNQUFNO0FBQ3RDLE1BQUlBLGdCQUFnQkcsT0FBTzhCLHFCQUFxQjtBQUM5Q2pDLFNBQUtrQyxRQUFRL0MsWUFBWW1DLEtBQUs7RUFDaEMsT0FBTztBQUNMdEIsU0FBS2IsWUFBWW1DLEtBQUs7RUFDeEI7QUFDRjtBQUNBLFNBQVNhLG1CQUFtQi9MLEdBQUdnTSxXQUFXO0FBQ3hDLFNBQU9oTSxFQUFFaU0sUUFBUSxVQUFVLFNBQUFDLE9BQUE7QUFBQSxXQUFTRixZQUFZRSxNQUFNQyxZQUFZO0VBQUMsQ0FBQTtBQUNyRTtBQUNBLFNBQVNDLE1BQU14QyxNQUFNbEwsT0FBTztBQUMxQixNQUFJQSxTQUFTLFFBQVFBLFVBQVU7QUFBTTtXQUM1Qm9HLE1BQU1DLFFBQVFyRyxLQUFLLEdBQUc7QUFDN0JBLFVBQU1pQixRQUFRLFNBQUEwTSxHQUFBO0FBQUEsYUFBS0QsTUFBTXhDLE1BQU15QyxDQUFDO0lBQUMsQ0FBQTtFQUNuQyxXQUFXdE4sU0FBU0wsS0FBSyxHQUFHO0FBQzFCa0wsU0FBSzBDLGFBQWEsU0FBUzVOLEtBQUs7RUFDbEMsV0FBV08sU0FBU1AsS0FBSyxHQUFHO0FBQzFCaUIsWUFBUWpCLE9BQU8sU0FBQ0UsS0FBS3VCLEtBQVE7QUFDM0IsVUFBSUEsSUFBSW9NLFFBQVEsR0FBRyxNQUFNLEdBQUc7QUFHMUIzQyxhQUFLd0MsTUFBTUksWUFBWXJNLEtBQUt2QixHQUFHO01BQ2pDLFdBQVdJLFNBQVNKLEdBQUcsS0FBSzhCLGlCQUFpQlAsR0FBRyxNQUFNLEdBQUc7QUFDdkR5SixhQUFLd0MsTUFBTWpNLEdBQUcsSUFBSXZCLE1BQU07TUFDMUIsT0FBTztBQUNMZ0wsYUFBS3dDLE1BQU1qTSxHQUFHLElBQUl2QjtNQUNwQjtJQUNGLENBQUM7RUFDSDtBQUNGO0FBQ0EsU0FBUzZOLFVBQVV0TSxLQUFLekIsT0FBT2tMLE1BQU07QUFDbkMsVUFBUXpKLEtBQUE7SUFDTixLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0FBQ0h1TSxhQUFPOUMsTUFBTW5GLGdCQUFnQnNILG1CQUFtQjVMLEtBQUssR0FBRyxHQUFHekIsS0FBSztBQUNoRTtJQUNGLEtBQUs7QUFDSCtNLFdBQUs3QixNQUFNbUMsbUJBQW1CNUwsS0FBSyxHQUFHLEdBQUd6QixLQUFLO0FBQzlDO0lBQ0YsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0FBQ0hnTyxhQUFPOUMsTUFBTWxGLGNBQWNxSCxtQkFBbUI1TCxLQUFLLEdBQUcsR0FBR3pCLEtBQUs7QUFDOUQ7RUFDSjtBQUNBLFVBQVF5QixLQUFBO0lBQ04sS0FBSztBQUNIc0wsV0FBSzdCLE1BQU0sT0FBT2xMLEtBQUs7QUFDdkI7SUFDRixLQUFLO0FBQ0hpQixjQUFRakIsT0FBTyxTQUFDaU8sV0FBV0MsU0FBWTtBQUNyQyxZQUFJRCxhQUFhLE1BQU07QUFDckIvQyxlQUFLaUQsUUFBUUQsT0FBTyxJQUFJRDtRQUMxQjtNQUNGLENBQUM7QUFDRDtJQUNGLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztBQUNILFVBQUloSSxlQUFlakcsS0FBSyxHQUFHO0FBQ3pCa0wsYUFBS3pKLEdBQUcsSUFBSXpCO01BQ2Q7QUFDQTtJQUNGLEtBQUs7QUFDSCxVQUFJTyxTQUFTUCxLQUFLLEdBQUc7QUFDbkJrTCxhQUFLa0QsWUFBWXBPLE1BQU0sUUFBUTtNQUNqQztBQUNBO0lBQ0YsS0FBSztBQUNILFVBQUlBLFNBQVMsUUFBUWtMLGdCQUFnQkcsT0FBT0MsbUJBQW1CO0FBRzdEO01BQ0YsV0FBV0osZ0JBQWdCRyxPQUFPZ0QscUJBQXFCO0FBQ3JEbkQsYUFBS2xMLFFBQVFBO0FBQ2I7TUFDRjtBQUVBO0lBQ0YsS0FBSztBQUNIa0wsV0FBS29ELGFBQWF0TztBQUNsQjtJQUNGLEtBQUs7SUFDTCxLQUFLO0FBQ0gsVUFBSVMsV0FBV1QsS0FBSyxHQUFHO0FBQ3JCQSxjQUFNa0wsSUFBSTtNQUNaLE9BQU87QUFDTDZCLGFBQUs3QixNQUFNLFNBQVMzTSxXQUFVeUIsS0FBSyxDQUFDO01BQ3RDO0FBQ0E7SUFDRixLQUFLO0lBQ0wsS0FBSztBQUNIO0lBQ0YsS0FBSztBQUNIME4sWUFBTXhDLE1BQU1sTCxLQUFLO0FBQ2pCO0lBQ0YsS0FBSztJQUNMLEtBQUs7QUFDSGlCLGNBQVFqQixPQUFPLFNBQUN1TyxjQUFjQyxZQUFjO0FBQzFDdEQsYUFBS3VELGlCQUFpQkQsWUFBV0QsY0FBYzlNLFFBQVEsV0FBVztNQUNwRSxDQUFDO0FBQ0Q7RUFFSjtBQUVBLE1BQUloQixXQUFXVCxLQUFLLEdBQUc7QUFDckIsUUFBSXlCLElBQUksQ0FBQyxNQUFNLE9BQU9BLElBQUksQ0FBQyxNQUFNLEtBQUs7QUFDcEMsVUFBSWlOLGFBQVlqTixJQUFJZ00sWUFBWTtBQUNoQyxVQUFNa0IsYUFBYUQsV0FBVUUsU0FBUyxTQUFTO0FBQy9DLFVBQUlGLGVBQWMsaUJBQWlCO0FBQ2pDQSxxQkFBWTtNQUNkLFdBQVdDLGNBQWNELGVBQWMsd0JBQXdCO0FBQzdEQSxxQkFBWTtNQUNkO0FBQ0EsVUFBSSxDQUFDQyxjQUFjekQsS0FBS3dELFVBQVMsTUFBTSxNQUFNO0FBRTNDeEQsYUFBS3dELFVBQVMsSUFBSTFPO01BQ3BCLFdBQVcyTyxZQUFZO0FBQ3JCekQsYUFBS3VELGlCQUFpQkMsV0FBVTNKLFVBQVUsR0FBRzJKLFdBQVUxTixTQUFTLENBQUMsR0FBR2hCLE9BQU8sSUFBSTtNQUNqRixPQUFPO0FBQ0wsWUFBSXdPO0FBQ0osWUFBSUUsY0FBYXJELFFBQVE7QUFLdkIsY0FBTXdELG9CQUFvQkgsV0FBVTNKLFVBQVUsQ0FBQztBQUMvQ3lKLHNCQUFZSztRQUNkLE9BQU87QUFNTCxjQUFNQyxrQkFBa0JKLFdBQVUsQ0FBQyxJQUFJak4sSUFBSXNOLE1BQU0sQ0FBQztBQUNsRFAsc0JBQVlNO1FBQ2Q7QUFDQTVELGFBQUt1RCxpQkFBaUJELFdBQVd4TyxLQUFLO01BQ3hDO0lBQ0Y7RUFDRixXQUFXTyxTQUFTUCxLQUFLLEdBQUc7QUFDMUJrTCxTQUFLekosR0FBRyxJQUFJekI7RUFDZCxXQUFXQSxVQUFVLE1BQU07QUFDekIrTSxTQUFLN0IsTUFBTXpKLEtBQUssRUFBRTtFQUNwQixXQUFXekIsVUFBVSxTQUFTQSxTQUFTLE1BQU07QUFDM0MsUUFBSWtMLGdCQUFnQjhELGNBQWMsQ0FBQ2pGLDZCQUE2QmtGLEtBQUt4TixHQUFHLEdBQUc7QUFDekVzTCxXQUFLN0IsTUFBTW1DLG1CQUFtQjVMLEtBQUssR0FBRyxHQUFHekIsS0FBSztJQUNoRCxPQUFPO0FBQ0wrTSxXQUFLN0IsTUFBTXpKLEtBQUt6QixLQUFLO0lBQ3ZCO0VBQ0Y7QUFDRjtBQUNBLFNBQVMrTSxLQUFLN0IsTUFBTXpKLEtBQUt6QixPQUFPO0FBQzlCa0wsT0FBSzBDLGFBQWFuTSxLQUFLekIsS0FBSztBQUM5QjtBQUNBLFNBQVNnTyxPQUFPOUMsTUFBTWdFLFdBQVd6TixLQUFLekIsT0FBTztBQUMzQ2tMLE9BQUtpRSxlQUFlRCxXQUFXek4sS0FBS3pCLEtBQUs7QUFDM0M7QUFDQSxTQUFTb0wsV0FBVzNGLE9BQU15RixNQUFNO0FBQUEsTUFBQWtFLGFBQUFoTywyQkFDWnRCLEtBQUsyRixLQUFJLENBQUEsR0FBQTRKO0FBQUEsTUFBQTtBQUEzQixTQUFBRCxXQUFBOU4sRUFBQSxHQUFBLEVBQUErTixTQUFBRCxXQUFBN04sRUFBQSxHQUFBQyxRQUE4QjtBQUFBLFVBQW5CQyxNQUFBNE4sT0FBQXJQO0FBQ1QrTixnQkFBVXRNLEtBQUtnRSxNQUFLaEUsR0FBRyxHQUFHeUosSUFBSTtJQUNoQztFQUFBLFNBQUF4SixLQUFBO0FBQUEwTixlQUFBek4sRUFBQUQsR0FBQTtFQUFBLFVBQUE7QUFBQTBOLGVBQUF4TixFQUFBO0VBQUE7QUFDQSxTQUFPc0o7QUFDVDtBQUVBLFNBQVN4TCxTQUFRNFAsY0FBYztBQUM3QixNQUFNNUYsT0FBTyxJQUFJNkYsS0FBSztBQUN0QnhQLFNBQU95UCxlQUFlOUYsTUFBTSxZQUFZO0lBQ3RDMUosT0FBQSxTQUFBQSxRQUFRO0FBQ04sYUFBTyxLQUFLeVA7SUFDZDtFQUNGLENBQUM7QUFDRCxXQUFTQyxRQUFRMVAsT0FBTztBQUN0QjBKLFNBQUsrRixjQUFjelA7RUFDckI7QUFDQSxNQUFJc1AsZ0JBQWdCLE1BQU07QUFDeEJJLFlBQVFKLFlBQVk7RUFDdEI7QUFDQSxTQUFPLENBQUM1RixNQUFNZ0csT0FBTztBQUN2QjtBQUNBLFNBQVNwUSxjQUFhZ1EsY0FBYztBQUNsQyxNQUFNSyxNQUFNeEYsU0FBUzNMLGNBQWMsS0FBSztBQUN4QyxNQUFJOFEsZ0JBQWdCLE1BQU07QUFDeEJLLFFBQUlwUixZQUFZQSxXQUFVK1EsWUFBWTtFQUN4QztBQUNBLE1BQUlNLE9BQU9ELElBQUlFO0FBQ2YsV0FBU0MsVUFBVTlQLE9BQU87QUFDeEJBLFVBQU00TixhQUFhLFNBQVNnQyxLQUFLNVAsS0FBSztBQUN0QzRQLFdBQU81UCxNQUFNNlA7RUFDZjtBQUNBOVAsU0FBTzRLLGlCQUNMbUYsV0FDQS9QLE9BQU9nUSwwQkFBMEI7SUFDL0IsSUFBSUMsT0FBTztBQUNULGFBQU9KLEtBQUs1TztJQUNkO0lBQ0EsSUFBSWhCLFFBQVE7QUFDVixhQUFPNFAsS0FBSzVQO0lBQ2Q7SUFDQWlRLEtBQUEsU0FBQUEsTUFBTTtBQUFBLFVBQUFDO0FBQ0osT0FBQUEsUUFBQU4sTUFBS0ssSUFBQUUsTUFBQUQsT0FBTy9ELFNBQVM7SUFDdkI7SUFDQWlFLFFBQUEsU0FBQUEsU0FBUztBQUFBLFVBQUFDO0FBQ1AsT0FBQUEsU0FBQVQsTUFBS1EsT0FBQUQsTUFBQUUsUUFBVWxFLFNBQVM7SUFDMUI7SUFDQW1FLFFBQUEsU0FBQUEsT0FBT0MsT0FBT0MsT0FBTztBQUNuQlosV0FBS1UsT0FBT0MsT0FBT0MsS0FBSztJQUMxQjtJQUNBQyxVQUFBLFNBQUFBLFNBQVNGLE9BQU87QUFDZCxhQUFPWCxLQUFLYSxTQUFTRixLQUFLO0lBQzVCO0VBQ0YsQ0FBQyxDQUNIO0FBQ0EsU0FBT1Q7QUFDVDtBQUVBLFNBQVN0USxTQUFRa1IsU0FBUztBQUN4QixTQUFPQSxRQUFRO0FBQ2pCO0FBQ0EsU0FBUy9SLFlBQVcrTCxRQUFRO0FBQzFCLFNBQU8sU0FBQXBGLE1BQVE7QUFDYixRQUFNRSxNQUFrQkYsS0FBbEJFLEtBQVErRSxRQUFBN0UseUJBQVVKLE1BQUFxTCxVQUFBO0FBQ3hCLFdBQU9qRyxPQUFPSCxPQUFPL0UsUUFBQSxRQUFBQSxRQUFBLFNBQUFBLE1BQU85RyxXQUFVLENBQUM7RUFDekM7QUFDRjtBQUNBLFNBQVNhLHFCQUFvQmlHLEtBQUtvTCxNQUFNO0FBQ3RDOUUsWUFBVXRHLEtBQUtvTCxLQUFLLENBQUM7QUFDdkI7QUFFQSxJQUFNQyxRQUF3QixvQkFBSUMsSUFBSTtBQUN0QyxJQUFNQyx3QkFBd0IsU0FBeEJBLHVCQUF3QkMsTUFBQTtBQUFBLFNBQzVCLFNBQVVwQixNQUFNO0FBQ2QsYUFDTTFELE9BQU9DLFVBQVVuTCxRQUFRaVEsaUJBQWlCLElBQUk3SyxNQUFNOEYsT0FBTyxJQUFJQSxPQUFPLElBQUksQ0FBQyxHQUFHZ0YsT0FBTyxHQUN6RkEsT0FBT2hGLE1BQ1BnRixRQUNBO0FBQ0FELHFCQUFlQyxPQUFPLENBQUMsSUFBSS9FLFVBQVUrRSxJQUFJO0lBQzNDO0FBQ0EsV0FBTyxTQUFBNUwsTUFBUTtBQUNiLFVBQU02TCxTQUFvQjdMLEtBQXBCb0ksT0FBVW5ELFFBQUE3RSx5QkFBVUosTUFBQThMLFVBQUE7QUFDMUIsVUFBTUMsWUFBWXpCLEtBQUs1TyxTQUFTO0FBQ2hDLFVBQU1zUSxNQUNKMUIsS0FBS2IsTUFBTSxHQUFHc0MsU0FBUyxFQUFFRSxPQUFPLFNBQUNDLEdBQUdsUSxHQUFHbVEsR0FBQTtBQUFBLGVBQU1ELElBQUlsUSxJQUFJMlAsZUFBZVEsQ0FBQyxFQUFFbEgsS0FBSztNQUFBLEdBQUcsRUFBRSxJQUNqRnFGLEtBQUt5QixTQUFTO0FBQ2hCLGFBQU83UyxlQUFjd1MsTUFBQWxHLGNBQUE7UUFDbkI0QyxPQUFPLENBQUM0RCxLQUFLSCxNQUFLO01BQUEsR0FDZjVHLEtBQUEsQ0FDSjtJQUNIO0VBQ0Y7QUFBQTtBQUNGLElBQU1tSCxhQUFhLFNBQWJBLFlBQWFDLGlCQUFBO0FBQUEsU0FBbUJaLHNCQUFzQlksZUFBZTtBQUFBO0FBQzNFLElBQU12UyxVQUF5QixvQkFBSXdTLE1BQU1GLFlBQVk7RUFDbkRHLEtBQUEsU0FBQUEsSUFBSUMsR0FBR2QsTUFBTTtBQUNYLFdBQU9lLFlBQVlsQixPQUFPRyxNQUFNLFdBQUE7QUFBQSxhQUFNRCxzQkFBc0JDLElBQUk7SUFBQyxDQUFBO0VBQ25FO0FBQ0YsQ0FBQztBQUNELFNBQVNlLFlBQVl6TCxLQUFLN0UsS0FBS3VRLFVBQVU7QUFDdkMsTUFBSTFMLElBQUkyTCxJQUFJeFEsR0FBRyxHQUFHO0FBQ2hCLFdBQU82RSxJQUFJdUwsSUFBSXBRLEdBQUc7RUFDcEIsT0FBTztBQUNMLFFBQU16QixRQUFRZ1MsU0FBU3ZRLEdBQUc7QUFDMUI2RSxRQUFJNEwsSUFBSXpRLEtBQUt6QixLQUFLO0FBQ2xCLFdBQU9BO0VBQ1Q7QUFDRjtBQVNBLFNBQVNkLGdCQUFlaVQsT0FBTztBQUM3QkEsUUFBTWpULGVBQWU7QUFDckIsU0FBT2lUO0FBQ1Q7QUFDQSxTQUFTaFQsaUJBQWdCZ1QsT0FBTztBQUM5QkEsUUFBTWhULGdCQUFnQjtBQUN0QixTQUFPZ1Q7QUFDVDsiLAogICJuYW1lcyI6IFsiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJwcm9jZXNzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiU3ltYm9sIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImlzT2JqZWN0IiwgImRvY3VtZW50IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNyZWF0ZUVsZW1lbnQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaXNPYmplY3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU3ltYm9sIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJXZWFrTWFwIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtleXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImlzT2JqZWN0IiwgIlR5cGVFcnJvciIsICJXZWFrTWFwIiwgImdldCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTeW1ib2wiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJvd25LZXlzIiwgImtleXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAib3duS2V5cyIsICJrZXlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJpc09iamVjdCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJpc09iamVjdCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiVHlwZUVycm9yIiwgIk51bWJlciIsICJrZXlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImgiLCAiX0RPTVRva2VuTGlzdCIsICJpbml0X0RPTVRva2VuTGlzdCIsICJ1bmRlZmluZWQiLCAiZ2xvYmFsIiwgIkl0ZXJhdG9yIiwgImkiLCAiQXJyYXlJdGVyYXRvciIsICJ1bmRlZmluZWQiLCAidW5kZWZpbmVkIiwgInVuZGVmaW5lZCIsICJuIiwgIkV2ZW50IiwgInByZXZlbnREZWZhdWx0IiwgInN0b3BQcm9wYWdhdGlvbiIsICJldmVudCIsICJ1bmRlZmluZWQiLCAiQ3VzdG9tRXZlbnQiLCAidW5kZWZpbmVkIiwgImdsb2JhbCIsICJEb2N1bWVudEZyYWdtZW50IiwgInVuZGVmaW5lZCIsICJjbG9uZU5vZGUiLCAiYXBwZW5kQ2hpbGQiLCAiaW1wb3J0Tm9kZSIsICJkZWZpbmVJbm5lckhUTUwiLCAiZGVmaW5lT3V0ZXJIVE1MIiwgImNyZWF0ZUVsZW1lbnQiLCAiYXR0ciIsICJmaXhDbG9uZWREb20iLCAiZml4Q2xvbmVkU2NyaXB0cyIsICJ1bmRlZmluZWQiLCAiTXV0YXRpb25PYnNlcnZlciIsICJhdHRyIiwgImF0dHJpYnV0ZXMiLCAiY291bnRlciIsICJtYXAiLCAiJHRhcmdldCIsICJtZW1vIiwgInVuZGVmaW5lZCIsICJleHBvcnRzIiwgImgiLCAidW5kZWZpbmVkIiwgInVuZGVmaW5lZCIsICJ0IiwgImdsb2JhbCIsICJ1bmRlZmluZWQiLCAiZ2xvYmFsIiwgInVuZGVmaW5lZCIsICJ1bmRlZmluZWQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAia2V5cyIsICJleHBvcnRzIiwgImtleXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYWN0aXZlWERvY3VtZW50IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInNlbGYiLCAiZ2xvYmFsIiwgIlR5cGVFcnJvciIsICJrZXlzIiwgIlN5bWJvbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrZXlzIiwgImdsb2JhbCIsICJTeW1ib2wiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaXNPYmplY3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgIkVycm9yIiwgIlJlZmVyZW5jZUVycm9yIiwgIlN5bnRheEVycm9yIiwgIlR5cGVFcnJvciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmb3JFYWNoIiwgImZvckVhY2giLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaXNPYmplY3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAia2V5cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJtZW1vIiwgInNlbGYiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJpc09iamVjdCIsICJnZXQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZm9yRWFjaCIsICJnZXQiLCAiTWFwIiwgIm93bktleXMiLCAia2V5cyIsICJrZXlzIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJSZWFjdF9leHBvcnRzIiwgIl9fZXhwb3J0IiwgIkNvbXBvbmVudCIsICJGcmFnbWVudCIsICJQdXJlQ29tcG9uZW50IiwgIlNWR05hbWVzcGFjZSIsICJTaGFkb3dSb290IiwgIlN0cmljdE1vZGUiLCAiY2xhc3NOYW1lIiwgImNyZWF0ZUVsZW1lbnQiLCAiY3JlYXRlRmFjdG9yeSIsICJjcmVhdGVSZWYiLCAiZm9yd2FyZFJlZiIsICJoIiwgImlzUmVmIiwgImpzeCIsICJqc3hzIiwgIm1lbW8iLCAiaWRlbnRpdHkiLCAicHJldmVudERlZmF1bHQiLCAic3RvcFByb3BhZ2F0aW9uIiwgInN0eWxlZCIsICJ1c2VDYWxsYmFjayIsICJ1c2VDbGFzc0xpc3QiLCAidXNlSW1wZXJhdGl2ZUhhbmRsZSIsICJ1c2VNZW1vIiwgInVzZVJlZiIsICJ1c2VUZXh0IiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIl9fdG9Db21tb25KUyIsICJrZXlzIiwgIk9iamVjdCIsICJ2YWx1ZSIsICJpc0Jvb2xlYW4iLCAidmFsIiwgImlzRWxlbWVudCIsICJub2RlVHlwZSIsICJpc1N0cmluZyIsICJpc051bWJlciIsICJpc09iamVjdCIsICJfdHlwZW9mIiwgImlzRnVuY3Rpb24iLCAiaXNDb21wb25lbnRDbGFzcyIsICJDb21wb25lbnQyIiwgInByb3RvdHlwZSIsICJpc1JlYWN0Q29tcG9uZW50IiwgImlzQXJyYXlMaWtlIiwgIm9iaiIsICJsZW5ndGgiLCAiZm9yRWFjaCIsICJmbiIsICJfaXRlcmF0b3IyIiwgIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwgIl9zdGVwMiIsICJzIiwgIm4iLCAiZG9uZSIsICJrZXkiLCAiZXJyIiwgImUiLCAiZiIsICJzZWFsIiwgImN1cnJlbnQiLCAibWF5YmVSZWYiLCAiaXNVbml0bGVzc051bWJlciIsICJhbmltYXRpb25JdGVyYXRpb25Db3VudCIsICJib3JkZXJJbWFnZU91dHNldCIsICJib3JkZXJJbWFnZVNsaWNlIiwgImJvcmRlckltYWdlV2lkdGgiLCAiYm94RmxleCIsICJib3hGbGV4R3JvdXAiLCAiYm94T3JkaW5hbEdyb3VwIiwgImNvbHVtbkNvdW50IiwgImNvbHVtbnMiLCAiZmxleCIsICJmbGV4R3JvdyIsICJmbGV4UG9zaXRpdmUiLCAiZmxleFNocmluayIsICJmbGV4TmVnYXRpdmUiLCAiZmxleE9yZGVyIiwgImdyaWRBcmVhIiwgImdyaWRSb3ciLCAiZ3JpZFJvd0VuZCIsICJncmlkUm93U3BhbiIsICJncmlkUm93U3RhcnQiLCAiZ3JpZENvbHVtbiIsICJncmlkQ29sdW1uRW5kIiwgImdyaWRDb2x1bW5TcGFuIiwgImdyaWRDb2x1bW5TdGFydCIsICJmb250V2VpZ2h0IiwgImxpbmVDbGFtcCIsICJsaW5lSGVpZ2h0IiwgIm9wYWNpdHkiLCAib3JkZXIiLCAib3JwaGFucyIsICJ0YWJTaXplIiwgIndpZG93cyIsICJ6SW5kZXgiLCAiem9vbSIsICJmaWxsT3BhY2l0eSIsICJmbG9vZE9wYWNpdHkiLCAic3RvcE9wYWNpdHkiLCAic3Ryb2tlRGFzaGFycmF5IiwgInN0cm9rZURhc2hvZmZzZXQiLCAic3Ryb2tlTWl0ZXJsaW1pdCIsICJzdHJva2VPcGFjaXR5IiwgInN0cm9rZVdpZHRoIiwgInByZWZpeEtleSIsICJwcmVmaXgiLCAiY2hhckF0IiwgInRvVXBwZXJDYXNlIiwgInN1YnN0cmluZyIsICJwcmVmaXhlcyIsICJwcm9wIiwgImpzeERvbVR5cGUiLCAiU3ltYm9sIiwgIkpzeERvbVR5cGUiLCAiSnN4RG9tVHlwZTIiLCAiX3JlZiIsICJjaGlsZHJlbiIsICJyZWYiLCAiYXR0cjIiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiaXNTaGFkb3dSb290IiwgImVsIiwgIlhMaW5rTmFtZXNwYWNlIiwgIlhNTE5hbWVzcGFjZSIsICJpc1Zpc2libGVDaGlsZCIsICJEb21Ub2tlbkxpc3QiLCAiRE9NVG9rZW5MaXN0IiwgIkFycmF5IiwgImlzQXJyYXkiLCAibWFwIiwgImZpbHRlciIsICJCb29sZWFuIiwgImpvaW4iLCAiayIsICJzdmciLCAiYW5pbWF0ZSIsICJjaXJjbGUiLCAiY2xpcFBhdGgiLCAiZGVmcyIsICJkZXNjIiwgImVsbGlwc2UiLCAiZmVCbGVuZCIsICJmZUNvbG9yTWF0cml4IiwgImZlQ29tcG9uZW50VHJhbnNmZXIiLCAiZmVDb21wb3NpdGUiLCAiZmVDb252b2x2ZU1hdHJpeCIsICJmZURpZmZ1c2VMaWdodGluZyIsICJmZURpc3BsYWNlbWVudE1hcCIsICJmZURpc3RhbnRMaWdodCIsICJmZUZsb29kIiwgImZlRnVuY0EiLCAiZmVGdW5jQiIsICJmZUZ1bmNHIiwgImZlRnVuY1IiLCAiZmVHYXVzc2lhbkJsdXIiLCAiZmVJbWFnZSIsICJmZU1lcmdlIiwgImZlTWVyZ2VOb2RlIiwgImZlTW9ycGhvbG9neSIsICJmZU9mZnNldCIsICJmZVBvaW50TGlnaHQiLCAiZmVTcGVjdWxhckxpZ2h0aW5nIiwgImZlU3BvdExpZ2h0IiwgImZlVGlsZSIsICJmZVR1cmJ1bGVuY2UiLCAiZm9yZWlnbk9iamVjdCIsICJnIiwgImltYWdlIiwgImxpbmUiLCAibGluZWFyR3JhZGllbnQiLCAibWFya2VyIiwgIm1hc2siLCAibWV0YWRhdGEiLCAicGF0aCIsICJwYXR0ZXJuIiwgInBvbHlnb24iLCAicG9seWxpbmUiLCAicmFkaWFsR3JhZGllbnQiLCAicmVjdCIsICJzdG9wIiwgInN5bWJvbCIsICJ0ZXh0IiwgInRleHRQYXRoIiwgInRzcGFuIiwgInVzZSIsICJ2aWV3IiwgIm5vblByZXNlbnRhdGlvblNWR0F0dHJpYnV0ZXMiLCAidGFnIiwgImJpbmQiLCAiZnJhZ21lbnQiLCAiZG9jdW1lbnQiLCAiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsICJhcHBlbmRDaGlsZCIsICJfQ29tcG9uZW50IiwgInByb3BzIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfY3JlYXRlQ2xhc3MiLCAicmVuZGVyIiwgImRlZmluZVByb3BlcnRpZXMiLCAiaW5pdENvbXBvbmVudENsYXNzIiwgIkNsYXNzIiwgIl9vYmplY3RTcHJlYWQiLCAiaW5zdGFuY2UiLCAiX2V4Y2x1ZGVkMiIsICJuYW1lc3BhY2VVUkkiLCAibm9kZSIsICJjcmVhdGVFbGVtZW50TlMiLCAiYXR0cmlidXRlcyIsICJ3aW5kb3ciLCAiSFRNTFNlbGVjdEVsZW1lbnQiLCAibXVsdGlwbGUiLCAidmFsdWVzIiwgIlN0cmluZyIsICJxdWVyeVNlbGVjdG9yQWxsIiwgIm9wdGlvbiIsICJzZWxlY3RlZCIsICJpbmNsdWRlcyIsICJhdHRhY2hSZWYiLCAiZGVmYXVsdFByb3BzIiwgIlR5cGVFcnJvciIsICJjb25jYXQiLCAiX2xlbiIsICJhcmd1bWVudHMiLCAiX2tleTIiLCAidW5zaGlmdCIsICJfYXR0ciIsICJfZXhjbHVkZWQzIiwgImNoaWxkIiwgImFwcGVuZENoaWxkcmVuIiwgImFwcGVuZENoaWxkVG9Ob2RlIiwgImNyZWF0ZVRleHROb2RlIiwgImNyZWF0ZUNvbW1lbnQiLCAic2hhZG93Um9vdCIsICJhdHRhY2hTaGFkb3ciLCAiYXR0ciIsICJfaSIsICJfYXJyIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJIVE1MVGVtcGxhdGVFbGVtZW50IiwgImNvbnRlbnQiLCAibm9ybWFsaXplQXR0cmlidXRlIiwgInNlcGFyYXRvciIsICJyZXBsYWNlIiwgIm1hdGNoIiwgInRvTG93ZXJDYXNlIiwgInN0eWxlIiwgInYiLCAic2V0QXR0cmlidXRlIiwgImluZGV4T2YiLCAic2V0UHJvcGVydHkiLCAiYXR0cmlidXRlIiwgImF0dHJOUyIsICJkYXRhVmFsdWUiLCAiZGF0YUtleSIsICJkYXRhc2V0IiwgImlubmVySFRNTCIsICJIVE1MVGV4dEFyZWFFbGVtZW50IiwgInNwZWxsY2hlY2siLCAiZXZlbnRIYW5kbGVyIiwgImV2ZW50TmFtZSIsICJhZGRFdmVudExpc3RlbmVyIiwgImF0dHJpYnV0ZTIiLCAidXNlQ2FwdHVyZSIsICJlbmRzV2l0aCIsICJzdGFuZGFyZEV2ZW50TmFtZSIsICJjdXN0b21FdmVudE5hbWUiLCAic2xpY2UiLCAiU1ZHRWxlbWVudCIsICJ0ZXN0IiwgIm5hbWVzcGFjZSIsICJzZXRBdHRyaWJ1dGVOUyIsICJfaXRlcmF0b3IzIiwgIl9zdGVwMyIsICJpbml0aWFsVmFsdWUiLCAiVGV4dCIsICJkZWZpbmVQcm9wZXJ0eSIsICJ0ZXh0Q29udGVudCIsICJzZXRUZXh0IiwgImRpdiIsICJsaXN0IiwgImNsYXNzTGlzdCIsICJDbGFzc0xpc3QiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsICJzaXplIiwgImFkZCIsICJfbGlzdCIsICJhcHBseSIsICJyZW1vdmUiLCAiX2xpc3QyIiwgInRvZ2dsZSIsICJ0b2tlbiIsICJmb3JjZSIsICJjb250YWlucyIsICJmYWN0b3J5IiwgIl9leGNsdWRlZDQiLCAiaW5pdCIsICJjYWNoZSIsICJNYXAiLCAiY3JlYXRlU3R5bGVkQ29tcG9uZW50IiwgIm5hbWUiLCAiaW50ZXJwb2xhdGlvbnMiLCAiX2tleSIsICJzdHlsZTIiLCAiX2V4Y2x1ZGVkNSIsICJsYXN0SW5kZXgiLCAiY3NzIiwgInJlZHVjZSIsICJwIiwgImkiLCAiYmFzZVN0eWxlZCIsICJjdXN0b21Db21wb25lbnQiLCAiUHJveHkiLCAiZ2V0IiwgIl8iLCAic2V0SWZBYnNlbnQiLCAiZ2V0VmFsdWUiLCAiaGFzIiwgInNldCIsICJldmVudCJdCn0K diff --git a/dist/Toastify/Toastify.css b/dist/Toastify/Toastify.css new file mode 100644 index 00000000..8ff358cc --- /dev/null +++ b/dist/Toastify/Toastify.css @@ -0,0 +1,225 @@ +/** + * SPDX-License-Identifier: MIT + * _addText: '{{Gadget Header|license=MIT|attribution=2018 apvarun}}' + * + * @base {@link https://github.com/apvarun/toastify-js} + * @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/Toastify} + */ +/** + * +------------------------------------------------------------+ + * | === WARNING: GLOBAL GADGET FILE === | + * +------------------------------------------------------------+ + * | All changes should be made in the repository, | + * | otherwise they will be lost. | + * +------------------------------------------------------------+ + * | Changes to this page may affect many users. | + * | Please discuss changes by opening an issue before editing. | + * +------------------------------------------------------------+ + */ +/* */ + +/* node_modules/.pnpm/toastify-js@1.12.0/node_modules/toastify-js/src/toastify.css */ +/*! + * Toastify js 1.12.0 + * https://github.com/apvarun/toastify-js + * @license MIT licensed + * + * Copyright (C) 2018 Varun A P + */ +.toastify { + padding: 12px 20px; + color: #ffffff; + display: inline-block; + box-shadow: 0 3px 6px -1px rgba(0, 0, 0, 0.12), 0 10px 36px -4px rgba(77, 96, 232, 0.3); + background: -webkit-linear-gradient(315deg, #73a5ff, #5477f5); + background: + linear-gradient( + 135deg, + #73a5ff, + #5477f5); + position: fixed; + opacity: 0; + -webkit-transition: all 0.4s cubic-bezier(0.215, 0.61, 0.355, 1); + transition: all 0.4s cubic-bezier(0.215, 0.61, 0.355, 1); + border-radius: 2px; + cursor: pointer; + -webkit-text-decoration: none; + text-decoration: none; + max-width: -webkit-calc(50% - 20px); + max-width: calc(50% - 20px); + z-index: 2147483647; +} +.toastify.on { + opacity: 1; +} +.toast-close { + background: transparent; + border: 0; + color: white; + cursor: pointer; + font-family: inherit; + font-size: 1em; + opacity: 0.4; + padding: 0 5px; +} +.toastify-right { + right: 15px; +} +.toastify-left { + left: 15px; +} +.toastify-top { + top: -150px; +} +.toastify-bottom { + bottom: -150px; +} +.toastify-rounded { + border-radius: 25px; +} +.toastify-avatar { + width: 1.5em; + height: 1.5em; + margin: -7px 5px; + border-radius: 2px; +} +.toastify-center { + margin-left: auto; + margin-right: auto; + left: 0; + right: 0; + max-width: -webkit-fit-content; + max-width: fit-content; + max-width: -moz-fit-content; +} +@media only screen and (max-width: 360px) { + .toastify-right, + .toastify-left { + margin-left: auto; + margin-right: auto; + left: 0; + right: 0; + max-width: -webkit-fit-content; + max-width: -moz-fit-content; + max-width: fit-content; + } +} + +/* src/Toastify/style-modules/style.less */ +.gadget-toastify { + background: #e6e6e6; + border-radius: 0.5em; + box-shadow: 0 3px 6px -1px rgba(0, 0, 0, 0.1), 0 10px 36px -4px rgba(0, 0, 0, 0.2); + cursor: auto; + color: #191919; + display: -webkit-box; + display: -webkit-flex; + display: -moz-box; + display: flex; + -webkit-box-align: baseline; + -webkit-align-items: baseline; + -moz-box-align: baseline; + align-items: baseline; + word-break: break-all; + z-index: 9999; +} +.gadget-toastify a, +.gadget-toastify a:hover, +.gadget-toastify a:visited, +.gadget-toastify a:visited:hover { + color: #f4ff7f !important; +} +.gadget-toastify--error, +.gadget-toastify--info, +.gadget-toastify--success, +.gadget-toastify--warning { + color: #fff; +} +.gadget-toastify--error { + background: #b32424; +} +.gadget-toastify--info { + background: #36c; +} +.gadget-toastify--success { + background: #181; +} +.gadget-toastify--warning { + background: #a60; +} +.gadget-toastify .toast-close { + color: inherit; + font-family: + "-apple-system", + "BlinkMacSystemFont", + "MiSans", + "小米兰亭 Pro VF", + "OPPO Sans", + "HarmonyOS Sans", + "HONOR Sans", + "Source Sans Pro", + "Source Sans 3", + "Noto Sans CJK SC", + "Source Han Sans SC", + "DejaVu Sans", + "Liberation Sans", + "Helvetica", + "Roboto", + "Microsoft YaHei", + "SFProDisplay-Regular", + sans-serif, + "Apple Color Emoji", + "Segoe UI Emoji", + "Segoe UI Symbol"; + font-size: 0.8em; + padding: 0 0 0 1em; +} +html:lang(zh-hant) .gadget-toastify .toast-close { + font-family: + "-apple-system", + "BlinkMacSystemFont", + "MiSans", + "小米兰亭 Pro VF", + "OPPO Sans", + "HarmonyOS Sans", + "HONOR Sans", + "Source Sans Pro", + "Source Sans 3", + "Noto Sans CJK TC", + "Source Han Sans TC", + "DejaVu Sans", + "Liberation Sans", + "Helvetica", + "Roboto", + "Microsoft JhengHei", + "SFProDisplay-Regular", + sans-serif, + "Apple Color Emoji", + "Segoe UI Emoji", + "Segoe UI Symbol"; +} +.gadget-toastify.toastify-left .toast-close { + padding: 0 1em 0 0; +} +.gadget-toastify.toastify-left, +.gadget-toastify.toastify-right { + max-width: 17.5em; +} +.client-darkmode .gadget-toastify:not(.gadget-toastify--error):not(.gadget-toastify--info):not(.gadget-toastify--success):not(.gadget-toastify--warning) { + box-shadow: none; + border: 5px solid #c8ccd1; +} +.client-darkmode .gadget-toastify a, +.client-darkmode .gadget-toastify a:hover, +.client-darkmode .gadget-toastify a:visited, +.client-darkmode .gadget-toastify a:visited:hover { + color: #000 !important; +} +.client-darkmode .gadget-toastify .toast-close { + color: #000; + color: initial; +} + +/* */ + +/*# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3RvYXN0aWZ5LWpzQDEuMTIuMC9ub2RlX21vZHVsZXMvdG9hc3RpZnktanMvc3JjL3RvYXN0aWZ5LmNzcyIsICIuLi8uLi9zcmMvVG9hc3RpZnkvc3R5bGUtbW9kdWxlcy9zdHlsZS5sZXNzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiFcbiAqIFRvYXN0aWZ5IGpzIDEuMTIuMFxuICogaHR0cHM6Ly9naXRodWIuY29tL2FwdmFydW4vdG9hc3RpZnktanNcbiAqIEBsaWNlbnNlIE1JVCBsaWNlbnNlZFxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxOCBWYXJ1biBBIFBcbiAqL1xuXG4udG9hc3RpZnkge1xuICAgIHBhZGRpbmc6IDEycHggMjBweDtcbiAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgYm94LXNoYWRvdzogMCAzcHggNnB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjEyKSwgMCAxMHB4IDM2cHggLTRweCByZ2JhKDc3LCA5NiwgMjMyLCAwLjMpO1xuICAgIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KDMxNWRlZywgIzczYTVmZiwgIzU0NzdmNSk7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzczYTVmZiwgIzU0NzdmNSk7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC40cyBjdWJpYy1iZXppZXIoMC4yMTUsIDAuNjEsIDAuMzU1LCAxKTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC40cyBjdWJpYy1iZXppZXIoMC4yMTUsIDAuNjEsIDAuMzU1LCAxKTtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBtYXgtd2lkdGg6IC13ZWJraXQtY2FsYyg1MCUgLSAyMHB4KTtcbiAgICBtYXgtd2lkdGg6IGNhbGMoNTAlIC0gMjBweCk7XG4gICAgei1pbmRleDogMjE0NzQ4MzY0Nztcbn1cblxuLnRvYXN0aWZ5Lm9uIHtcbiAgICBvcGFjaXR5OiAxO1xufVxuXG4udG9hc3QtY2xvc2Uge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlcjogMDtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgIG9wYWNpdHk6IDAuNDtcbiAgICBwYWRkaW5nOiAwIDVweDtcbn1cblxuLnRvYXN0aWZ5LXJpZ2h0IHtcbiAgICByaWdodDogMTVweDtcbn1cblxuLnRvYXN0aWZ5LWxlZnQge1xuICAgIGxlZnQ6IDE1cHg7XG59XG5cbi50b2FzdGlmeS10b3Age1xuICAgIHRvcDogLTE1MHB4O1xufVxuXG4udG9hc3RpZnktYm90dG9tIHtcbiAgICBib3R0b206IC0xNTBweDtcbn1cblxuLnRvYXN0aWZ5LXJvdW5kZWQge1xuICAgIGJvcmRlci1yYWRpdXM6IDI1cHg7XG59XG5cbi50b2FzdGlmeS1hdmF0YXIge1xuICAgIHdpZHRoOiAxLjVlbTtcbiAgICBoZWlnaHQ6IDEuNWVtO1xuICAgIG1hcmdpbjogLTdweCA1cHg7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xufVxuXG4udG9hc3RpZnktY2VudGVyIHtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBtYXgtd2lkdGg6IC13ZWJraXQtZml0LWNvbnRlbnQ7XG4gICAgbWF4LXdpZHRoOiBmaXQtY29udGVudDtcbiAgICBtYXgtd2lkdGg6IC1tb3otZml0LWNvbnRlbnQ7XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzYwcHgpIHtcbiAgICAudG9hc3RpZnktcmlnaHQsIC50b2FzdGlmeS1sZWZ0IHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIG1heC13aWR0aDogLXdlYmtpdC1maXQtY29udGVudDtcbiAgICAgICAgbWF4LXdpZHRoOiAtbW96LWZpdC1jb250ZW50O1xuICAgICAgICBtYXgtd2lkdGg6IGZpdC1jb250ZW50O1xuICAgIH1cbn1cbiIsICIuZ2FkZ2V0LXRvYXN0aWZ5IHtcbiAgYmFja2dyb3VuZDogI2U2ZTZlNjtcbiAgYm9yZGVyLXJhZGl1czogMC41ZW07XG4gIGJveC1zaGFkb3c6IDAgM3B4IDZweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAxMHB4IDM2cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIGN1cnNvcjogYXV0bztcbiAgY29sb3I6ICMxOTE5MTk7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XG4gIGRpc3BsYXk6IC1tb3otYm94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogYmFzZWxpbmU7XG4gIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICAgICAtbW96LWJveC1hbGlnbjogYmFzZWxpbmU7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIHotaW5kZXg6IDk5OTk7XG59XG4uZ2FkZ2V0LXRvYXN0aWZ5IGEsXG4uZ2FkZ2V0LXRvYXN0aWZ5IGE6aG92ZXIsXG4uZ2FkZ2V0LXRvYXN0aWZ5IGE6dmlzaXRlZCxcbi5nYWRnZXQtdG9hc3RpZnkgYTp2aXNpdGVkOmhvdmVyIHtcbiAgY29sb3I6ICNmNGZmN2YgIWltcG9ydGFudDtcbn1cbi5nYWRnZXQtdG9hc3RpZnktLWVycm9yLFxuLmdhZGdldC10b2FzdGlmeS0taW5mbyxcbi5nYWRnZXQtdG9hc3RpZnktLXN1Y2Nlc3MsXG4uZ2FkZ2V0LXRvYXN0aWZ5LS13YXJuaW5nIHtcbiAgY29sb3I6ICNmZmY7XG59XG4uZ2FkZ2V0LXRvYXN0aWZ5LS1lcnJvciB7XG4gIGJhY2tncm91bmQ6ICNiMzI0MjQ7XG59XG4uZ2FkZ2V0LXRvYXN0aWZ5LS1pbmZvIHtcbiAgYmFja2dyb3VuZDogIzM2Yztcbn1cbi5nYWRnZXQtdG9hc3RpZnktLXN1Y2Nlc3Mge1xuICBiYWNrZ3JvdW5kOiAjMTgxO1xufVxuLmdhZGdldC10b2FzdGlmeS0td2FybmluZyB7XG4gIGJhY2tncm91bmQ6ICNhNjA7XG59XG4uZ2FkZ2V0LXRvYXN0aWZ5IC50b2FzdC1jbG9zZSB7XG4gIGNvbG9yOiBpbmhlcml0O1xuICBmb250LWZhbWlseTogJy1hcHBsZS1zeXN0ZW0nLCAnQmxpbmtNYWNTeXN0ZW1Gb250JywgJ01pU2FucycsICflsI/nsbPlhbDkuq0gUHJvIFZGJywgJ09QUE8gU2FucycsICdIYXJtb255T1MgU2FucycsICdIT05PUiBTYW5zJywgJ1NvdXJjZSBTYW5zIFBybycsICdTb3VyY2UgU2FucyAzJywgJ05vdG8gU2FucyBDSksgU0MnLCAnU291cmNlIEhhbiBTYW5zIFNDJywgJ0RlamFWdSBTYW5zJywgJ0xpYmVyYXRpb24gU2FucycsICdIZWx2ZXRpY2EnLCAnUm9ib3RvJywgJ01pY3Jvc29mdCBZYUhlaScsICdTRlByb0Rpc3BsYXktUmVndWxhcicsIHNhbnMtc2VyaWYsICdBcHBsZSBDb2xvciBFbW9qaScsICdTZWdvZSBVSSBFbW9qaScsICdTZWdvZSBVSSBTeW1ib2wnO1xuICBmb250LXNpemU6IDAuOGVtO1xuICBwYWRkaW5nOiAwIDAgMCAxZW07XG59XG5odG1sOmxhbmcoemgtaGFudCkgLmdhZGdldC10b2FzdGlmeSAudG9hc3QtY2xvc2Uge1xuICBmb250LWZhbWlseTogJy1hcHBsZS1zeXN0ZW0nLCAnQmxpbmtNYWNTeXN0ZW1Gb250JywgJ01pU2FucycsICflsI/nsbPlhbDkuq0gUHJvIFZGJywgJ09QUE8gU2FucycsICdIYXJtb255T1MgU2FucycsICdIT05PUiBTYW5zJywgJ1NvdXJjZSBTYW5zIFBybycsICdTb3VyY2UgU2FucyAzJywgJ05vdG8gU2FucyBDSksgVEMnLCAnU291cmNlIEhhbiBTYW5zIFRDJywgJ0RlamFWdSBTYW5zJywgJ0xpYmVyYXRpb24gU2FucycsICdIZWx2ZXRpY2EnLCAnUm9ib3RvJywgJ01pY3Jvc29mdCBKaGVuZ0hlaScsICdTRlByb0Rpc3BsYXktUmVndWxhcicsIHNhbnMtc2VyaWYsICdBcHBsZSBDb2xvciBFbW9qaScsICdTZWdvZSBVSSBFbW9qaScsICdTZWdvZSBVSSBTeW1ib2wnO1xufVxuLmdhZGdldC10b2FzdGlmeS50b2FzdGlmeS1sZWZ0IC50b2FzdC1jbG9zZSB7XG4gIHBhZGRpbmc6IDAgMWVtIDAgMDtcbn1cbi5nYWRnZXQtdG9hc3RpZnkudG9hc3RpZnktbGVmdCxcbi5nYWRnZXQtdG9hc3RpZnkudG9hc3RpZnktcmlnaHQge1xuICBtYXgtd2lkdGg6IDE3LjVlbTtcbn1cbi5jbGllbnQtZGFya21vZGUgLmdhZGdldC10b2FzdGlmeTpub3QoLmdhZGdldC10b2FzdGlmeS0tZXJyb3IpOm5vdCguZ2FkZ2V0LXRvYXN0aWZ5LS1pbmZvKTpub3QoLmdhZGdldC10b2FzdGlmeS0tc3VjY2Vzcyk6bm90KC5nYWRnZXQtdG9hc3RpZnktLXdhcm5pbmcpIHtcbiAgYm94LXNoYWRvdzogbm9uZTtcbiAgYm9yZGVyOiA1cHggc29saWQgI2M4Y2NkMTtcbn1cbi5jbGllbnQtZGFya21vZGUgLmdhZGdldC10b2FzdGlmeSBhLFxuLmNsaWVudC1kYXJrbW9kZSAuZ2FkZ2V0LXRvYXN0aWZ5IGE6aG92ZXIsXG4uY2xpZW50LWRhcmttb2RlIC5nYWRnZXQtdG9hc3RpZnkgYTp2aXNpdGVkLFxuLmNsaWVudC1kYXJrbW9kZSAuZ2FkZ2V0LXRvYXN0aWZ5IGE6dmlzaXRlZDpob3ZlciB7XG4gIGNvbG9yOiAjMDAwICFpbXBvcnRhbnQ7XG59XG4uY2xpZW50LWRhcmttb2RlIC5nYWRnZXQtdG9hc3RpZnkgLnRvYXN0LWNsb3NlIHtcbiAgY29sb3I6ICMwMDA7XG4gIGNvbG9yOiBpbml0aWFsO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQSxDQUFDO0FBQ0csV0FBUyxLQUFLO0FBQ2QsU0FBTztBQUNQLFdBQVM7QUFDVCxjQUFZLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEtBQUssS0FBSyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFO0FBQ25GLGNBQVksd0JBQXdCLE1BQU0sRUFBRSxPQUFPLEVBQUU7QUFDckQ7QUFBQSxJQUFZO0FBQUEsTUFBZ0IsTUFBaEI7QUFBQSxNQUF3QixPQUF4QjtBQUFBLE1BQWlDO0FBQzdDLFlBQVU7QUFDVixXQUFTO0FBQ1Qsc0JBQW9CLElBQUksS0FBSyxhQUFhLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQzlELGNBQVksSUFBSSxLQUFLLGFBQWEsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDdEQsaUJBQWU7QUFDZixVQUFRO0FBQ1IsMkJBQXlCO0FBQ3pCLG1CQUFpQjtBQUNqQixhQUFXLGFBQWEsSUFBSSxFQUFFO0FBQzlCLGFBQVcsS0FBSyxJQUFJLEVBQUU7QUFDdEIsV0FBUztBQUNiO0FBRUEsQ0FwQkMsUUFvQlEsQ0FBQztBQUNOLFdBQVM7QUFDYjtBQUVBLENBQUM7QUFDRyxjQUFZO0FBQ1osVUFBUTtBQUNSLFNBQU87QUFDUCxVQUFRO0FBQ1IsZUFBYTtBQUNiLGFBQVc7QUFDWCxXQUFTO0FBQ1QsV0FBUyxFQUFFO0FBQ2Y7QUFFQSxDQUFDO0FBQ0csU0FB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 */ diff --git a/dist/Toastify/Toastify.js b/dist/Toastify/Toastify.js new file mode 100644 index 00000000..fdcf4a68 --- /dev/null +++ b/dist/Toastify/Toastify.js @@ -0,0 +1,5005 @@ +/** + * SPDX-License-Identifier: MIT + * _addText: '{{Gadget Header|license=MIT|attribution=2018 apvarun}}' + * + * @base {@link https://github.com/apvarun/toastify-js} + * @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/Toastify} + */ +/** + * +------------------------------------------------------------+ + * | === WARNING: GLOBAL GADGET FILE === | + * +------------------------------------------------------------+ + * | All changes should be made in the repository, | + * | otherwise they will be lost. | + * +------------------------------------------------------------+ + * | Changes to this page may affect many users. | + * | Please discuss changes by opening an issue before editing. | + * +------------------------------------------------------------+ + */ +/* */ + +(function() { + +"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __esm = function(fn, res) { + return function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; + }; +}; +var __commonJS = function(cb, mod) { + return function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; + }; +}; +var __copyProps = function(to, from, except, desc) { + if (from && typeof from === "object" || typeof from === "function") + for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) { + key = keys[i]; + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: function(k) { + return from[k]; + }.bind(null, key), enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = function(mod) { + return __copyProps(__defProp({}, "__esModule", { value: true }), mod); +}; + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/global.js +var require_global = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/global.js": function(exports2, module2) { + "use strict"; + var check = function(it) { + return it && it.Math === Math && it; + }; + module2.exports = // eslint-disable-next-line es/no-global-this -- safe + check(typeof globalThis == "object" && globalThis) || check(typeof window == "object" && window) || // eslint-disable-next-line no-restricted-globals -- safe + check(typeof self == "object" && self) || check(typeof global == "object" && global) || check(typeof exports2 == "object" && exports2) || // eslint-disable-next-line no-new-func -- fallback + /* @__PURE__ */ function() { + return this; + }() || Function("return this")(); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/fails.js +var require_fails = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/fails.js": function(exports2, module2) { + "use strict"; + module2.exports = function(exec) { + try { + return !!exec(); + } catch (error) { + return true; + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/descriptors.js +var require_descriptors = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/descriptors.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = !fails(function() { + return Object.defineProperty({}, 1, { get: function() { + return 7; + } })[1] !== 7; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-native.js +var require_function_bind_native = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-native.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = !fails(function() { + var test = function() { + }.bind(); + return typeof test != "function" || test.hasOwnProperty("prototype"); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-call.js +var require_function_call = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-call.js": function(exports2, module2) { + "use strict"; + var NATIVE_BIND = require_function_bind_native(); + var call = Function.prototype.call; + module2.exports = NATIVE_BIND ? call.bind(call) : function() { + return call.apply(call, arguments); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-property-is-enumerable.js +var require_object_property_is_enumerable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-property-is-enumerable.js": function(exports2) { + "use strict"; + var $propertyIsEnumerable = {}.propertyIsEnumerable; + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1); + exports2.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; + } : $propertyIsEnumerable; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property-descriptor.js +var require_create_property_descriptor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property-descriptor.js": function(exports2, module2) { + "use strict"; + module2.exports = function(bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this.js +var require_function_uncurry_this = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this.js": function(exports2, module2) { + "use strict"; + var NATIVE_BIND = require_function_bind_native(); + var FunctionPrototype = Function.prototype; + var call = FunctionPrototype.call; + var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call); + module2.exports = NATIVE_BIND ? uncurryThisWithBind : function(fn) { + return function() { + return call.apply(fn, arguments); + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof-raw.js +var require_classof_raw = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof-raw.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toString = uncurryThis({}.toString); + var stringSlice = uncurryThis("".slice); + module2.exports = function(it) { + return stringSlice(toString(it), 8, -1); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/indexed-object.js +var require_indexed_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/indexed-object.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var classof = require_classof_raw(); + var $Object = Object; + var split = uncurryThis("".split); + module2.exports = fails(function() { + return !$Object("z").propertyIsEnumerable(0); + }) ? function(it) { + return classof(it) === "String" ? split(it, "") : $Object(it); + } : $Object; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-null-or-undefined.js +var require_is_null_or_undefined = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-null-or-undefined.js": function(exports2, module2) { + "use strict"; + module2.exports = function(it) { + return it === null || it === void 0; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/require-object-coercible.js +var require_require_object_coercible = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/require-object-coercible.js": function(exports2, module2) { + "use strict"; + var isNullOrUndefined = require_is_null_or_undefined(); + var $TypeError = TypeError; + module2.exports = function(it) { + if (isNullOrUndefined(it)) + throw new $TypeError("Can't call method on " + it); + return it; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-indexed-object.js +var require_to_indexed_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-indexed-object.js": function(exports2, module2) { + "use strict"; + var IndexedObject = require_indexed_object(); + var requireObjectCoercible = require_require_object_coercible(); + module2.exports = function(it) { + return IndexedObject(requireObjectCoercible(it)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-callable.js +var require_is_callable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-callable.js": function(exports2, module2) { + "use strict"; + var documentAll = typeof document == "object" && document.all; + module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { + return typeof argument == "function" || argument === documentAll; + } : function(argument) { + return typeof argument == "function"; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-object.js +var require_is_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-object.js": function(exports2, module2) { + "use strict"; + var isCallable = require_is_callable(); + module2.exports = function(it) { + return typeof it == "object" ? it !== null : isCallable(it); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-built-in.js +var require_get_built_in = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-built-in.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var isCallable = require_is_callable(); + var aFunction = function(argument) { + return isCallable(argument) ? argument : void 0; + }; + module2.exports = function(namespace, method) { + return arguments.length < 2 ? aFunction(global2[namespace]) : global2[namespace] && global2[namespace][method]; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-is-prototype-of.js +var require_object_is_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-is-prototype-of.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + module2.exports = uncurryThis({}.isPrototypeOf); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-user-agent.js +var require_engine_user_agent = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-user-agent.js": function(exports2, module2) { + "use strict"; + module2.exports = typeof navigator != "undefined" && String(navigator.userAgent) || ""; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-v8-version.js +var require_engine_v8_version = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-v8-version.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var userAgent = require_engine_user_agent(); + var process = global2.process; + var Deno = global2.Deno; + var versions = process && process.versions || Deno && Deno.version; + var v8 = versions && versions.v8; + var match; + var version; + if (v8) { + match = v8.split("."); + version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); + } + if (!version && userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) + version = +match[1]; + } + } + module2.exports = version; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-constructor-detection.js +var require_symbol_constructor_detection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-constructor-detection.js": function(exports2, module2) { + "use strict"; + var V8_VERSION = require_engine_v8_version(); + var fails = require_fails(); + var global2 = require_global(); + var $String = global2.String; + module2.exports = !!Object.getOwnPropertySymbols && !fails(function() { + var symbol = Symbol("symbol detection"); + return !$String(symbol) || !(Object(symbol) instanceof Symbol) || // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances + !Symbol.sham && V8_VERSION && V8_VERSION < 41; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/use-symbol-as-uid.js +var require_use_symbol_as_uid = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/use-symbol-as-uid.js": function(exports2, module2) { + "use strict"; + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-symbol.js +var require_is_symbol = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-symbol.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var isCallable = require_is_callable(); + var isPrototypeOf = require_object_is_prototype_of(); + var USE_SYMBOL_AS_UID = require_use_symbol_as_uid(); + var $Object = Object; + module2.exports = USE_SYMBOL_AS_UID ? function(it) { + return typeof it == "symbol"; + } : function(it) { + var $Symbol = getBuiltIn("Symbol"); + return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/try-to-string.js +var require_try_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/try-to-string.js": function(exports2, module2) { + "use strict"; + var $String = String; + module2.exports = function(argument) { + try { + return $String(argument); + } catch (error) { + return "Object"; + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-callable.js +var require_a_callable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-callable.js": function(exports2, module2) { + "use strict"; + var isCallable = require_is_callable(); + var tryToString = require_try_to_string(); + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isCallable(argument)) + return argument; + throw new $TypeError(tryToString(argument) + " is not a function"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-method.js +var require_get_method = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-method.js": function(exports2, module2) { + "use strict"; + var aCallable = require_a_callable(); + var isNullOrUndefined = require_is_null_or_undefined(); + module2.exports = function(V, P) { + var func = V[P]; + return isNullOrUndefined(func) ? void 0 : aCallable(func); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ordinary-to-primitive.js +var require_ordinary_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ordinary-to-primitive.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var isCallable = require_is_callable(); + var isObject = require_is_object(); + var $TypeError = TypeError; + module2.exports = function(input, pref) { + var fn, val; + if (pref === "string" && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) + return val; + if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) + return val; + if (pref !== "string" && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) + return val; + throw new $TypeError("Can't convert object to primitive value"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-pure.js +var require_is_pure = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-pure.js": function(exports2, module2) { + "use strict"; + module2.exports = false; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-global-property.js +var require_define_global_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-global-property.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var defineProperty = Object.defineProperty; + module2.exports = function(key, value) { + try { + defineProperty(global2, key, { value: value, configurable: true, writable: true }); + } catch (error) { + global2[key] = value; + } + return value; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-store.js +var require_shared_store = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-store.js": function(exports2, module2) { + "use strict"; + var IS_PURE = require_is_pure(); + var globalThis2 = require_global(); + var defineGlobalProperty = require_define_global_property(); + var SHARED = "__core-js_shared__"; + var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); + (store.versions || (store.versions = [])).push({ + version: "3.36.0", + mode: IS_PURE ? "pure" : "global", + copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", + license: "https://github.com/zloirock/core-js/blob/v3.36.0/LICENSE", + source: "https://github.com/zloirock/core-js" + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared.js +var require_shared = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared.js": function(exports2, module2) { + "use strict"; + var store = require_shared_store(); + module2.exports = function(key, value) { + return store[key] || (store[key] = value || {}); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-object.js +var require_to_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-object.js": function(exports2, module2) { + "use strict"; + var requireObjectCoercible = require_require_object_coercible(); + var $Object = Object; + module2.exports = function(argument) { + return $Object(requireObjectCoercible(argument)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/has-own-property.js +var require_has_own_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/has-own-property.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toObject = require_to_object(); + var hasOwnProperty = uncurryThis({}.hasOwnProperty); + module2.exports = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty(toObject(it), key); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/uid.js +var require_uid = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/uid.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var id = 0; + var postfix = Math.random(); + var toString = uncurryThis(1 .toString); + module2.exports = function(key) { + return "Symbol(" + (key === void 0 ? "" : key) + ")_" + toString(++id + postfix, 36); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol.js +var require_well_known_symbol = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var shared = require_shared(); + var hasOwn = require_has_own_property(); + var uid = require_uid(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var USE_SYMBOL_AS_UID = require_use_symbol_as_uid(); + var Symbol2 = global2.Symbol; + var WellKnownSymbolsStore = shared("wks"); + var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol2["for"] || Symbol2 : Symbol2 && Symbol2.withoutSetter || uid; + module2.exports = function(name) { + if (!hasOwn(WellKnownSymbolsStore, name)) { + WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol2, name) ? Symbol2[name] : createWellKnownSymbol("Symbol." + name); + } + return WellKnownSymbolsStore[name]; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-primitive.js +var require_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-primitive.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var isObject = require_is_object(); + var isSymbol = require_is_symbol(); + var getMethod = require_get_method(); + var ordinaryToPrimitive = require_ordinary_to_primitive(); + var wellKnownSymbol = require_well_known_symbol(); + var $TypeError = TypeError; + var TO_PRIMITIVE = wellKnownSymbol("toPrimitive"); + module2.exports = function(input, pref) { + if (!isObject(input) || isSymbol(input)) + return input; + var exoticToPrim = getMethod(input, TO_PRIMITIVE); + var result; + if (exoticToPrim) { + if (pref === void 0) + pref = "default"; + result = call(exoticToPrim, input, pref); + if (!isObject(result) || isSymbol(result)) + return result; + throw new $TypeError("Can't convert object to primitive value"); + } + if (pref === void 0) + pref = "number"; + return ordinaryToPrimitive(input, pref); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-property-key.js +var require_to_property_key = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-property-key.js": function(exports2, module2) { + "use strict"; + var toPrimitive = require_to_primitive(); + var isSymbol = require_is_symbol(); + module2.exports = function(argument) { + var key = toPrimitive(argument, "string"); + return isSymbol(key) ? key : key + ""; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/document-create-element.js +var require_document_create_element = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/document-create-element.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var isObject = require_is_object(); + var document2 = global2.document; + var EXISTS = isObject(document2) && isObject(document2.createElement); + module2.exports = function(it) { + return EXISTS ? document2.createElement(it) : {}; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ie8-dom-define.js +var require_ie8_dom_define = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ie8-dom-define.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var fails = require_fails(); + var createElement = require_document_create_element(); + module2.exports = !DESCRIPTORS && !fails(function() { + return Object.defineProperty(createElement("div"), "a", { + get: function() { + return 7; + } + }).a !== 7; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +var require_object_get_own_property_descriptor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-descriptor.js": function(exports2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var call = require_function_call(); + var propertyIsEnumerableModule = require_object_property_is_enumerable(); + var createPropertyDescriptor = require_create_property_descriptor(); + var toIndexedObject = require_to_indexed_object(); + var toPropertyKey = require_to_property_key(); + var hasOwn = require_has_own_property(); + var IE8_DOM_DEFINE = require_ie8_dom_define(); + var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + exports2.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPropertyKey(P); + if (IE8_DOM_DEFINE) + try { + return $getOwnPropertyDescriptor(O, P); + } catch (error) { + } + if (hasOwn(O, P)) + return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/v8-prototype-define-bug.js +var require_v8_prototype_define_bug = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/v8-prototype-define-bug.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var fails = require_fails(); + module2.exports = DESCRIPTORS && fails(function() { + return Object.defineProperty(function() { + }, "prototype", { + value: 42, + writable: false + }).prototype !== 42; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/an-object.js +var require_an_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/an-object.js": function(exports2, module2) { + "use strict"; + var isObject = require_is_object(); + var $String = String; + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isObject(argument)) + return argument; + throw new $TypeError($String(argument) + " is not an object"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-property.js +var require_object_define_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-property.js": function(exports2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var IE8_DOM_DEFINE = require_ie8_dom_define(); + var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug(); + var anObject = require_an_object(); + var toPropertyKey = require_to_property_key(); + var $TypeError = TypeError; + var $defineProperty = Object.defineProperty; + var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var ENUMERABLE = "enumerable"; + var CONFIGURABLE = "configurable"; + var WRITABLE = "writable"; + exports2.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (typeof O === "function" && P === "prototype" && "value" in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { + var current = $getOwnPropertyDescriptor(O, P); + if (current && current[WRITABLE]) { + O[P] = Attributes.value; + Attributes = { + configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE], + enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], + writable: false + }; + } + } + return $defineProperty(O, P, Attributes); + } : $defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (IE8_DOM_DEFINE) + try { + return $defineProperty(O, P, Attributes); + } catch (error) { + } + if ("get" in Attributes || "set" in Attributes) + throw new $TypeError("Accessors not supported"); + if ("value" in Attributes) + O[P] = Attributes.value; + return O; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-non-enumerable-property.js +var require_create_non_enumerable_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-non-enumerable-property.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var definePropertyModule = require_object_define_property(); + var createPropertyDescriptor = require_create_property_descriptor(); + module2.exports = DESCRIPTORS ? function(object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); + } : function(object, key, value) { + object[key] = value; + return object; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-name.js +var require_function_name = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-name.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var hasOwn = require_has_own_property(); + var FunctionPrototype = Function.prototype; + var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor; + var EXISTS = hasOwn(FunctionPrototype, "name"); + var PROPER = EXISTS && function something() { + }.name === "something"; + var CONFIGURABLE = EXISTS && (!DESCRIPTORS || DESCRIPTORS && getDescriptor(FunctionPrototype, "name").configurable); + module2.exports = { + EXISTS: EXISTS, + PROPER: PROPER, + CONFIGURABLE: CONFIGURABLE + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inspect-source.js +var require_inspect_source = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inspect-source.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var isCallable = require_is_callable(); + var store = require_shared_store(); + var functionToString = uncurryThis(Function.toString); + if (!isCallable(store.inspectSource)) { + store.inspectSource = function(it) { + return functionToString(it); + }; + } + module2.exports = store.inspectSource; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/weak-map-basic-detection.js +var require_weak_map_basic_detection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/weak-map-basic-detection.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var isCallable = require_is_callable(); + var WeakMap = global2.WeakMap; + module2.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap)); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-key.js +var require_shared_key = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-key.js": function(exports2, module2) { + "use strict"; + var shared = require_shared(); + var uid = require_uid(); + var keys = shared("keys"); + module2.exports = function(key) { + return keys[key] || (keys[key] = uid(key)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/hidden-keys.js +var require_hidden_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/hidden-keys.js": function(exports2, module2) { + "use strict"; + module2.exports = {}; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/internal-state.js +var require_internal_state = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/internal-state.js": function(exports2, module2) { + "use strict"; + var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); + var global2 = require_global(); + var isObject = require_is_object(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var hasOwn = require_has_own_property(); + var shared = require_shared_store(); + var sharedKey = require_shared_key(); + var hiddenKeys = require_hidden_keys(); + var OBJECT_ALREADY_INITIALIZED = "Object already initialized"; + var TypeError2 = global2.TypeError; + var WeakMap = global2.WeakMap; + var set; + var get; + var has; + var enforce = function(it) { + return has(it) ? get(it) : set(it, {}); + }; + var getterFor = function(TYPE) { + return function(it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw new TypeError2("Incompatible receiver, " + TYPE + " required"); + } + return state; + }; + }; + if (NATIVE_WEAK_MAP || shared.state) { + store = shared.state || (shared.state = new WeakMap()); + store.get = store.get; + store.has = store.has; + store.set = store.set; + set = function(it, metadata) { + if (store.has(it)) + throw new TypeError2(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + store.set(it, metadata); + return metadata; + }; + get = function(it) { + return store.get(it) || {}; + }; + has = function(it) { + return store.has(it); + }; + } else { + STATE = sharedKey("state"); + hiddenKeys[STATE] = true; + set = function(it, metadata) { + if (hasOwn(it, STATE)) + throw new TypeError2(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function(it) { + return hasOwn(it, STATE) ? it[STATE] : {}; + }; + has = function(it) { + return hasOwn(it, STATE); + }; + } + var store; + var STATE; + module2.exports = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/make-built-in.js +var require_make_built_in = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/make-built-in.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var isCallable = require_is_callable(); + var hasOwn = require_has_own_property(); + var DESCRIPTORS = require_descriptors(); + var CONFIGURABLE_FUNCTION_NAME = require_function_name().CONFIGURABLE; + var inspectSource = require_inspect_source(); + var InternalStateModule = require_internal_state(); + var enforceInternalState = InternalStateModule.enforce; + var getInternalState = InternalStateModule.get; + var $String = String; + var defineProperty = Object.defineProperty; + var stringSlice = uncurryThis("".slice); + var replace = uncurryThis("".replace); + var join = uncurryThis([].join); + var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function() { + return defineProperty(function() { + }, "length", { value: 8 }).length !== 8; + }); + var TEMPLATE = String(String).split("String"); + var makeBuiltIn = module2.exports = function(value, name, options) { + if (stringSlice($String(name), 0, 7) === "Symbol(") { + name = "[" + replace($String(name), /^Symbol\(([^)]*)\).*$/, "$1") + "]"; + } + if (options && options.getter) + name = "get " + name; + if (options && options.setter) + name = "set " + name; + if (!hasOwn(value, "name") || CONFIGURABLE_FUNCTION_NAME && value.name !== name) { + if (DESCRIPTORS) + defineProperty(value, "name", { value: name, configurable: true }); + else + value.name = name; + } + if (CONFIGURABLE_LENGTH && options && hasOwn(options, "arity") && value.length !== options.arity) { + defineProperty(value, "length", { value: options.arity }); + } + try { + if (options && hasOwn(options, "constructor") && options.constructor) { + if (DESCRIPTORS) + defineProperty(value, "prototype", { writable: false }); + } else if (value.prototype) + value.prototype = void 0; + } catch (error) { + } + var state = enforceInternalState(value); + if (!hasOwn(state, "source")) { + state.source = join(TEMPLATE, typeof name == "string" ? name : ""); + } + return value; + }; + Function.prototype.toString = makeBuiltIn(function toString() { + return isCallable(this) && getInternalState(this).source || inspectSource(this); + }, "toString"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in.js +var require_define_built_in = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in.js": function(exports2, module2) { + "use strict"; + var isCallable = require_is_callable(); + var definePropertyModule = require_object_define_property(); + var makeBuiltIn = require_make_built_in(); + var defineGlobalProperty = require_define_global_property(); + module2.exports = function(O, key, value, options) { + if (!options) + options = {}; + var simple = options.enumerable; + var name = options.name !== void 0 ? options.name : key; + if (isCallable(value)) + makeBuiltIn(value, name, options); + if (options.global) { + if (simple) + O[key] = value; + else + defineGlobalProperty(key, value); + } else { + try { + if (!options.unsafe) + delete O[key]; + else if (O[key]) + simple = true; + } catch (error) { + } + if (simple) + O[key] = value; + else + definePropertyModule.f(O, key, { + value: value, + enumerable: false, + configurable: !options.nonConfigurable, + writable: !options.nonWritable + }); + } + return O; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/math-trunc.js +var require_math_trunc = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/math-trunc.js": function(exports2, module2) { + "use strict"; + var ceil = Math.ceil; + var floor = Math.floor; + module2.exports = Math.trunc || function trunc(x) { + var n = +x; + return (n > 0 ? floor : ceil)(n); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-integer-or-infinity.js +var require_to_integer_or_infinity = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-integer-or-infinity.js": function(exports2, module2) { + "use strict"; + var trunc = require_math_trunc(); + module2.exports = function(argument) { + var number = +argument; + return number !== number || number === 0 ? 0 : trunc(number); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-absolute-index.js +var require_to_absolute_index = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-absolute-index.js": function(exports2, module2) { + "use strict"; + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var max = Math.max; + var min = Math.min; + module2.exports = function(index, length) { + var integer = toIntegerOrInfinity(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-length.js +var require_to_length = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-length.js": function(exports2, module2) { + "use strict"; + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var min = Math.min; + module2.exports = function(argument) { + var len = toIntegerOrInfinity(argument); + return len > 0 ? min(len, 9007199254740991) : 0; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/length-of-array-like.js +var require_length_of_array_like = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/length-of-array-like.js": function(exports2, module2) { + "use strict"; + var toLength = require_to_length(); + module2.exports = function(obj) { + return toLength(obj.length); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-includes.js +var require_array_includes = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-includes.js": function(exports2, module2) { + "use strict"; + var toIndexedObject = require_to_indexed_object(); + var toAbsoluteIndex = require_to_absolute_index(); + var lengthOfArrayLike = require_length_of_array_like(); + var createMethod = function(IS_INCLUDES) { + return function($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = lengthOfArrayLike(O); + if (length === 0) + return !IS_INCLUDES && -1; + var index = toAbsoluteIndex(fromIndex, length); + var value; + if (IS_INCLUDES && el !== el) + while (length > index) { + value = O[index++]; + if (value !== value) + return true; + } + else + for (; length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) + return IS_INCLUDES || index || 0; + } + return !IS_INCLUDES && -1; + }; + }; + module2.exports = { + // `Array.prototype.includes` method + // https://tc39.es/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys-internal.js +var require_object_keys_internal = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys-internal.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var hasOwn = require_has_own_property(); + var toIndexedObject = require_to_indexed_object(); + var indexOf = require_array_includes().indexOf; + var hiddenKeys = require_hidden_keys(); + var push = uncurryThis([].push); + module2.exports = function(object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) + !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key); + while (names.length > i) + if (hasOwn(O, key = names[i++])) { + ~indexOf(result, key) || push(result, key); + } + return result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/enum-bug-keys.js +var require_enum_bug_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/enum-bug-keys.js": function(exports2, module2) { + "use strict"; + module2.exports = [ + "constructor", + "hasOwnProperty", + "isPrototypeOf", + "propertyIsEnumerable", + "toLocaleString", + "toString", + "valueOf" + ]; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names.js +var require_object_get_own_property_names = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names.js": function(exports2) { + "use strict"; + var internalObjectKeys = require_object_keys_internal(); + var enumBugKeys = require_enum_bug_keys(); + var hiddenKeys = enumBugKeys.concat("length", "prototype"); + exports2.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-symbols.js +var require_object_get_own_property_symbols = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-symbols.js": function(exports2) { + "use strict"; + exports2.f = Object.getOwnPropertySymbols; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/own-keys.js +var require_own_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/own-keys.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var uncurryThis = require_function_uncurry_this(); + var getOwnPropertyNamesModule = require_object_get_own_property_names(); + var getOwnPropertySymbolsModule = require_object_get_own_property_symbols(); + var anObject = require_an_object(); + var concat = uncurryThis([].concat); + module2.exports = getBuiltIn("Reflect", "ownKeys") || function ownKeys(it) { + var keys = getOwnPropertyNamesModule.f(anObject(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/copy-constructor-properties.js +var require_copy_constructor_properties = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/copy-constructor-properties.js": function(exports2, module2) { + "use strict"; + var hasOwn = require_has_own_property(); + var ownKeys = require_own_keys(); + var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor(); + var definePropertyModule = require_object_define_property(); + module2.exports = function(target, source, exceptions) { + var keys = ownKeys(source); + var defineProperty = definePropertyModule.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) { + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-forced.js +var require_is_forced = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-forced.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var isCallable = require_is_callable(); + var replacement = /#|\.prototype\./; + var isForced = function(feature, detection) { + var value = data[normalize(feature)]; + return value === POLYFILL ? true : value === NATIVE ? false : isCallable(detection) ? fails(detection) : !!detection; + }; + var normalize = isForced.normalize = function(string) { + return String(string).replace(replacement, ".").toLowerCase(); + }; + var data = isForced.data = {}; + var NATIVE = isForced.NATIVE = "N"; + var POLYFILL = isForced.POLYFILL = "P"; + module2.exports = isForced; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/export.js +var require_export = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/export.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var defineBuiltIn = require_define_built_in(); + var defineGlobalProperty = require_define_global_property(); + var copyConstructorProperties = require_copy_constructor_properties(); + var isForced = require_is_forced(); + module2.exports = function(options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global2; + } else if (STATIC) { + target = global2[TARGET] || defineGlobalProperty(TARGET, {}); + } else { + target = global2[TARGET] && global2[TARGET].prototype; + } + if (target) + for (key in source) { + sourceProperty = source[key]; + if (options.dontCallGetSet) { + descriptor = getOwnPropertyDescriptor(target, key); + targetProperty = descriptor && descriptor.value; + } else + targetProperty = target[key]; + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? "." : "#") + key, options.forced); + if (!FORCED && targetProperty !== void 0) { + if (typeof sourceProperty == typeof targetProperty) + continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + if (options.sham || targetProperty && targetProperty.sham) { + createNonEnumerableProperty(sourceProperty, "sham", true); + } + defineBuiltIn(target, key, sourceProperty, options); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string-tag-support.js +var require_to_string_tag_support = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string-tag-support.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + var test = {}; + test[TO_STRING_TAG] = "z"; + module2.exports = String(test) === "[object z]"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof.js +var require_classof = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof.js": function(exports2, module2) { + "use strict"; + var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); + var isCallable = require_is_callable(); + var classofRaw = require_classof_raw(); + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + var $Object = Object; + var CORRECT_ARGUMENTS = classofRaw(/* @__PURE__ */ function() { + return arguments; + }()) === "Arguments"; + var tryGet = function(it, key) { + try { + return it[key]; + } catch (error) { + } + }; + module2.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function(it) { + var O, tag, result; + return it === void 0 ? "Undefined" : it === null ? "Null" : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == "string" ? tag : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) === "Object" && isCallable(O.callee) ? "Arguments" : result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string.js +var require_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string.js": function(exports2, module2) { + "use strict"; + var classof = require_classof(); + var $String = String; + module2.exports = function(argument) { + if (classof(argument) === "Symbol") + throw new TypeError("Cannot convert a Symbol value to a string"); + return $String(argument); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys.js +var require_object_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys.js": function(exports2, module2) { + "use strict"; + var internalObjectKeys = require_object_keys_internal(); + var enumBugKeys = require_enum_bug_keys(); + module2.exports = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-properties.js +var require_object_define_properties = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-properties.js": function(exports2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug(); + var definePropertyModule = require_object_define_property(); + var anObject = require_an_object(); + var toIndexedObject = require_to_indexed_object(); + var objectKeys = require_object_keys(); + exports2.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var props = toIndexedObject(Properties); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) + definePropertyModule.f(O, key = keys[index++], props[key]); + return O; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/html.js +var require_html = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/html.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + module2.exports = getBuiltIn("document", "documentElement"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-create.js +var require_object_create = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-create.js": function(exports2, module2) { + "use strict"; + var anObject = require_an_object(); + var definePropertiesModule = require_object_define_properties(); + var enumBugKeys = require_enum_bug_keys(); + var hiddenKeys = require_hidden_keys(); + var html = require_html(); + var documentCreateElement = require_document_create_element(); + var sharedKey = require_shared_key(); + var GT = ">"; + var LT = "<"; + var PROTOTYPE = "prototype"; + var SCRIPT = "script"; + var IE_PROTO = sharedKey("IE_PROTO"); + var EmptyConstructor = function() { + }; + var scriptTag = function(content) { + return LT + SCRIPT + GT + content + LT + "/" + SCRIPT + GT; + }; + var NullProtoObjectViaActiveX = function(activeXDocument2) { + activeXDocument2.write(scriptTag("")); + activeXDocument2.close(); + var temp = activeXDocument2.parentWindow.Object; + activeXDocument2 = null; + return temp; + }; + var NullProtoObjectViaIFrame = function() { + var iframe = documentCreateElement("iframe"); + var JS = "java" + SCRIPT + ":"; + var iframeDocument; + iframe.style.display = "none"; + html.appendChild(iframe); + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag("document.F=Object")); + iframeDocument.close(); + return iframeDocument.F; + }; + var activeXDocument; + var NullProtoObject = function() { + try { + activeXDocument = new ActiveXObject("htmlfile"); + } catch (error) { + } + NullProtoObject = typeof document != "undefined" ? document.domain && activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame() : NullProtoObjectViaActiveX(activeXDocument); + var length = enumBugKeys.length; + while (length--) + delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); + }; + hiddenKeys[IE_PROTO] = true; + module2.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + result[IE_PROTO] = O; + } else + result = NullProtoObject(); + return Properties === void 0 ? result : definePropertiesModule.f(result, Properties); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-slice.js +var require_array_slice = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-slice.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + module2.exports = uncurryThis([].slice); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names-external.js +var require_object_get_own_property_names_external = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names-external.js": function(exports2, module2) { + "use strict"; + var classof = require_classof_raw(); + var toIndexedObject = require_to_indexed_object(); + var $getOwnPropertyNames = require_object_get_own_property_names().f; + var arraySlice = require_array_slice(); + var windowNames = typeof window == "object" && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : []; + var getWindowNames = function(it) { + try { + return $getOwnPropertyNames(it); + } catch (error) { + return arraySlice(windowNames); + } + }; + module2.exports.f = function getOwnPropertyNames(it) { + return windowNames && classof(it) === "Window" ? getWindowNames(it) : $getOwnPropertyNames(toIndexedObject(it)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in-accessor.js +var require_define_built_in_accessor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in-accessor.js": function(exports2, module2) { + "use strict"; + var makeBuiltIn = require_make_built_in(); + var defineProperty = require_object_define_property(); + module2.exports = function(target, name, descriptor) { + if (descriptor.get) + makeBuiltIn(descriptor.get, name, { getter: true }); + if (descriptor.set) + makeBuiltIn(descriptor.set, name, { setter: true }); + return defineProperty.f(target, name, descriptor); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-wrapped.js +var require_well_known_symbol_wrapped = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-wrapped.js": function(exports2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + exports2.f = wellKnownSymbol; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/path.js +var require_path = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/path.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + module2.exports = global2; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-define.js +var require_well_known_symbol_define = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-define.js": function(exports2, module2) { + "use strict"; + var path = require_path(); + var hasOwn = require_has_own_property(); + var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped(); + var defineProperty = require_object_define_property().f; + module2.exports = function(NAME) { + var Symbol2 = path.Symbol || (path.Symbol = {}); + if (!hasOwn(Symbol2, NAME)) + defineProperty(Symbol2, NAME, { + value: wrappedWellKnownSymbolModule.f(NAME) + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-define-to-primitive.js +var require_symbol_define_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-define-to-primitive.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var getBuiltIn = require_get_built_in(); + var wellKnownSymbol = require_well_known_symbol(); + var defineBuiltIn = require_define_built_in(); + module2.exports = function() { + var Symbol2 = getBuiltIn("Symbol"); + var SymbolPrototype = Symbol2 && Symbol2.prototype; + var valueOf = SymbolPrototype && SymbolPrototype.valueOf; + var TO_PRIMITIVE = wellKnownSymbol("toPrimitive"); + if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) { + defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function(hint) { + return call(valueOf, this); + }, { arity: 1 }); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/set-to-string-tag.js +var require_set_to_string_tag = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/set-to-string-tag.js": function(exports2, module2) { + "use strict"; + var defineProperty = require_object_define_property().f; + var hasOwn = require_has_own_property(); + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + module2.exports = function(target, TAG, STATIC) { + if (target && !STATIC) + target = target.prototype; + if (target && !hasOwn(target, TO_STRING_TAG)) { + defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG }); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-clause.js +var require_function_uncurry_this_clause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-clause.js": function(exports2, module2) { + "use strict"; + var classofRaw = require_classof_raw(); + var uncurryThis = require_function_uncurry_this(); + module2.exports = function(fn) { + if (classofRaw(fn) === "Function") + return uncurryThis(fn); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-context.js +var require_function_bind_context = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-context.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this_clause(); + var aCallable = require_a_callable(); + var NATIVE_BIND = require_function_bind_native(); + var bind = uncurryThis(uncurryThis.bind); + module2.exports = function(fn, that) { + aCallable(fn); + return that === void 0 ? fn : NATIVE_BIND ? bind(fn, that) : function() { + return fn.apply(that, arguments); + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array.js +var require_is_array = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array.js": function(exports2, module2) { + "use strict"; + var classof = require_classof_raw(); + module2.exports = Array.isArray || function isArray(argument) { + return classof(argument) === "Array"; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-constructor.js +var require_is_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-constructor.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var isCallable = require_is_callable(); + var classof = require_classof(); + var getBuiltIn = require_get_built_in(); + var inspectSource = require_inspect_source(); + var noop = function() { + }; + var construct = getBuiltIn("Reflect", "construct"); + var constructorRegExp = /^\s*(?:class|function)\b/; + var exec = uncurryThis(constructorRegExp.exec); + var INCORRECT_TO_STRING = !constructorRegExp.test(noop); + var isConstructorModern = function isConstructor(argument) { + if (!isCallable(argument)) + return false; + try { + construct(noop, [], argument); + return true; + } catch (error) { + return false; + } + }; + var isConstructorLegacy = function isConstructor(argument) { + if (!isCallable(argument)) + return false; + switch (classof(argument)) { + case "AsyncFunction": + case "GeneratorFunction": + case "AsyncGeneratorFunction": + return false; + } + try { + return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument)); + } catch (error) { + return true; + } + }; + isConstructorLegacy.sham = true; + module2.exports = !construct || fails(function() { + var called; + return isConstructorModern(isConstructorModern.call) || !isConstructorModern(Object) || !isConstructorModern(function() { + called = true; + }) || called; + }) ? isConstructorLegacy : isConstructorModern; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-constructor.js +var require_array_species_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-constructor.js": function(exports2, module2) { + "use strict"; + var isArray = require_is_array(); + var isConstructor = require_is_constructor(); + var isObject = require_is_object(); + var wellKnownSymbol = require_well_known_symbol(); + var SPECIES = wellKnownSymbol("species"); + var $Array = Array; + module2.exports = function(originalArray) { + var C; + if (isArray(originalArray)) { + C = originalArray.constructor; + if (isConstructor(C) && (C === $Array || isArray(C.prototype))) + C = void 0; + else if (isObject(C)) { + C = C[SPECIES]; + if (C === null) + C = void 0; + } + } + return C === void 0 ? $Array : C; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-create.js +var require_array_species_create = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-create.js": function(exports2, module2) { + "use strict"; + var arraySpeciesConstructor = require_array_species_constructor(); + module2.exports = function(originalArray, length) { + return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-iteration.js +var require_array_iteration = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-iteration.js": function(exports2, module2) { + "use strict"; + var bind = require_function_bind_context(); + var uncurryThis = require_function_uncurry_this(); + var IndexedObject = require_indexed_object(); + var toObject = require_to_object(); + var lengthOfArrayLike = require_length_of_array_like(); + var arraySpeciesCreate = require_array_species_create(); + var push = uncurryThis([].push); + var createMethod = function(TYPE) { + var IS_MAP = TYPE === 1; + var IS_FILTER = TYPE === 2; + var IS_SOME = TYPE === 3; + var IS_EVERY = TYPE === 4; + var IS_FIND_INDEX = TYPE === 6; + var IS_FILTER_REJECT = TYPE === 7; + var NO_HOLES = TYPE === 5 || IS_FIND_INDEX; + return function($this, callbackfn, that, specificCreate) { + var O = toObject($this); + var self2 = IndexedObject(O); + var length = lengthOfArrayLike(self2); + var boundFunction = bind(callbackfn, that); + var index = 0; + var create = specificCreate || arraySpeciesCreate; + var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : void 0; + var value, result; + for (; length > index; index++) + if (NO_HOLES || index in self2) { + value = self2[index]; + result = boundFunction(value, index, O); + if (TYPE) { + if (IS_MAP) + target[index] = result; + else if (result) + switch (TYPE) { + case 3: + return true; + case 5: + return value; + case 6: + return index; + case 2: + push(target, value); + } + else + switch (TYPE) { + case 4: + return false; + case 7: + push(target, value); + } + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; + }; + module2.exports = { + // `Array.prototype.forEach` method + // https://tc39.es/ecma262/#sec-array.prototype.foreach + forEach: createMethod(0), + // `Array.prototype.map` method + // https://tc39.es/ecma262/#sec-array.prototype.map + map: createMethod(1), + // `Array.prototype.filter` method + // https://tc39.es/ecma262/#sec-array.prototype.filter + filter: createMethod(2), + // `Array.prototype.some` method + // https://tc39.es/ecma262/#sec-array.prototype.some + some: createMethod(3), + // `Array.prototype.every` method + // https://tc39.es/ecma262/#sec-array.prototype.every + every: createMethod(4), + // `Array.prototype.find` method + // https://tc39.es/ecma262/#sec-array.prototype.find + find: createMethod(5), + // `Array.prototype.findIndex` method + // https://tc39.es/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod(6), + // `Array.prototype.filterReject` method + // https://github.com/tc39/proposal-array-filtering + filterReject: createMethod(7) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.constructor.js +var require_es_symbol_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.constructor.js": function() { + "use strict"; + var $ = require_export(); + var global2 = require_global(); + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var IS_PURE = require_is_pure(); + var DESCRIPTORS = require_descriptors(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var fails = require_fails(); + var hasOwn = require_has_own_property(); + var isPrototypeOf = require_object_is_prototype_of(); + var anObject = require_an_object(); + var toIndexedObject = require_to_indexed_object(); + var toPropertyKey = require_to_property_key(); + var $toString = require_to_string(); + var createPropertyDescriptor = require_create_property_descriptor(); + var nativeObjectCreate = require_object_create(); + var objectKeys = require_object_keys(); + var getOwnPropertyNamesModule = require_object_get_own_property_names(); + var getOwnPropertyNamesExternal = require_object_get_own_property_names_external(); + var getOwnPropertySymbolsModule = require_object_get_own_property_symbols(); + var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor(); + var definePropertyModule = require_object_define_property(); + var definePropertiesModule = require_object_define_properties(); + var propertyIsEnumerableModule = require_object_property_is_enumerable(); + var defineBuiltIn = require_define_built_in(); + var defineBuiltInAccessor = require_define_built_in_accessor(); + var shared = require_shared(); + var sharedKey = require_shared_key(); + var hiddenKeys = require_hidden_keys(); + var uid = require_uid(); + var wellKnownSymbol = require_well_known_symbol(); + var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped(); + var defineWellKnownSymbol = require_well_known_symbol_define(); + var defineSymbolToPrimitive = require_symbol_define_to_primitive(); + var setToStringTag = require_set_to_string_tag(); + var InternalStateModule = require_internal_state(); + var $forEach = require_array_iteration().forEach; + var HIDDEN = sharedKey("hidden"); + var SYMBOL = "Symbol"; + var PROTOTYPE = "prototype"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(SYMBOL); + var ObjectPrototype = Object[PROTOTYPE]; + var $Symbol = global2.Symbol; + var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE]; + var RangeError = global2.RangeError; + var TypeError2 = global2.TypeError; + var QObject = global2.QObject; + var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + var nativeDefineProperty = definePropertyModule.f; + var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f; + var nativePropertyIsEnumerable = propertyIsEnumerableModule.f; + var push = uncurryThis([].push); + var AllSymbols = shared("symbols"); + var ObjectPrototypeSymbols = shared("op-symbols"); + var WellKnownSymbolsStore = shared("wks"); + var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; + var fallbackDefineProperty = function(O, P, Attributes) { + var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P); + if (ObjectPrototypeDescriptor) + delete ObjectPrototype[P]; + nativeDefineProperty(O, P, Attributes); + if (ObjectPrototypeDescriptor && O !== ObjectPrototype) { + nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor); + } + }; + var setSymbolDescriptor = DESCRIPTORS && fails(function() { + return nativeObjectCreate(nativeDefineProperty({}, "a", { + get: function() { + return nativeDefineProperty(this, "a", { value: 7 }).a; + } + })).a !== 7; + }) ? fallbackDefineProperty : nativeDefineProperty; + var wrap = function(tag, description) { + var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype); + setInternalState(symbol, { + type: SYMBOL, + tag: tag, + description: description + }); + if (!DESCRIPTORS) + symbol.description = description; + return symbol; + }; + var $defineProperty = function defineProperty(O, P, Attributes) { + if (O === ObjectPrototype) + $defineProperty(ObjectPrototypeSymbols, P, Attributes); + anObject(O); + var key = toPropertyKey(P); + anObject(Attributes); + if (hasOwn(AllSymbols, key)) { + if (!Attributes.enumerable) { + if (!hasOwn(O, HIDDEN)) + nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, nativeObjectCreate(null))); + O[HIDDEN][key] = true; + } else { + if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) + O[HIDDEN][key] = false; + Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) }); + } + return setSymbolDescriptor(O, key, Attributes); + } + return nativeDefineProperty(O, key, Attributes); + }; + var $defineProperties = function defineProperties(O, Properties) { + anObject(O); + var properties = toIndexedObject(Properties); + var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties)); + $forEach(keys, function(key) { + if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) + $defineProperty(O, key, properties[key]); + }); + return O; + }; + var $create = function create(O, Properties) { + return Properties === void 0 ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties); + }; + var $propertyIsEnumerable = function propertyIsEnumerable(V) { + var P = toPropertyKey(V); + var enumerable = call(nativePropertyIsEnumerable, this, P); + if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) + return false; + return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true; + }; + var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) { + var it = toIndexedObject(O); + var key = toPropertyKey(P); + if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) + return; + var descriptor = nativeGetOwnPropertyDescriptor(it, key); + if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) { + descriptor.enumerable = true; + } + return descriptor; + }; + var $getOwnPropertyNames = function getOwnPropertyNames(O) { + var names = nativeGetOwnPropertyNames(toIndexedObject(O)); + var result = []; + $forEach(names, function(key) { + if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) + push(result, key); + }); + return result; + }; + var $getOwnPropertySymbols = function(O) { + var IS_OBJECT_PROTOTYPE = O === ObjectPrototype; + var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O)); + var result = []; + $forEach(names, function(key) { + if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) { + push(result, AllSymbols[key]); + } + }); + return result; + }; + if (!NATIVE_SYMBOL) { + $Symbol = function Symbol2() { + if (isPrototypeOf(SymbolPrototype, this)) + throw new TypeError2("Symbol is not a constructor"); + var description = !arguments.length || arguments[0] === void 0 ? void 0 : $toString(arguments[0]); + var tag = uid(description); + var setter = function(value) { + var $this = this === void 0 ? global2 : this; + if ($this === ObjectPrototype) + call(setter, ObjectPrototypeSymbols, value); + if (hasOwn($this, HIDDEN) && hasOwn($this[HIDDEN], tag)) + $this[HIDDEN][tag] = false; + var descriptor = createPropertyDescriptor(1, value); + try { + setSymbolDescriptor($this, tag, descriptor); + } catch (error) { + if (!(error instanceof RangeError)) + throw error; + fallbackDefineProperty($this, tag, descriptor); + } + }; + if (DESCRIPTORS && USE_SETTER) + setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter }); + return wrap(tag, description); + }; + SymbolPrototype = $Symbol[PROTOTYPE]; + defineBuiltIn(SymbolPrototype, "toString", function toString() { + return getInternalState(this).tag; + }); + defineBuiltIn($Symbol, "withoutSetter", function(description) { + return wrap(uid(description), description); + }); + propertyIsEnumerableModule.f = $propertyIsEnumerable; + definePropertyModule.f = $defineProperty; + definePropertiesModule.f = $defineProperties; + getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor; + getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames; + getOwnPropertySymbolsModule.f = $getOwnPropertySymbols; + wrappedWellKnownSymbolModule.f = function(name) { + return wrap(wellKnownSymbol(name), name); + }; + if (DESCRIPTORS) { + defineBuiltInAccessor(SymbolPrototype, "description", { + configurable: true, + get: function description() { + return getInternalState(this).description; + } + }); + if (!IS_PURE) { + defineBuiltIn(ObjectPrototype, "propertyIsEnumerable", $propertyIsEnumerable, { unsafe: true }); + } + } + } + $({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, { + Symbol: $Symbol + }); + $forEach(objectKeys(WellKnownSymbolsStore), function(name) { + defineWellKnownSymbol(name); + }); + $({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, { + useSetter: function() { + USE_SETTER = true; + }, + useSimple: function() { + USE_SETTER = false; + } + }); + $({ target: "Object", stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, { + // `Object.create` method + // https://tc39.es/ecma262/#sec-object.create + create: $create, + // `Object.defineProperty` method + // https://tc39.es/ecma262/#sec-object.defineproperty + defineProperty: $defineProperty, + // `Object.defineProperties` method + // https://tc39.es/ecma262/#sec-object.defineproperties + defineProperties: $defineProperties, + // `Object.getOwnPropertyDescriptor` method + // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors + getOwnPropertyDescriptor: $getOwnPropertyDescriptor + }); + $({ target: "Object", stat: true, forced: !NATIVE_SYMBOL }, { + // `Object.getOwnPropertyNames` method + // https://tc39.es/ecma262/#sec-object.getownpropertynames + getOwnPropertyNames: $getOwnPropertyNames + }); + defineSymbolToPrimitive(); + setToStringTag($Symbol, SYMBOL); + hiddenKeys[HIDDEN] = true; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-registry-detection.js +var require_symbol_registry_detection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-registry-detection.js": function(exports2, module2) { + "use strict"; + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + module2.exports = NATIVE_SYMBOL && !!Symbol["for"] && !!Symbol.keyFor; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.for.js +var require_es_symbol_for = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.for.js": function() { + "use strict"; + var $ = require_export(); + var getBuiltIn = require_get_built_in(); + var hasOwn = require_has_own_property(); + var toString = require_to_string(); + var shared = require_shared(); + var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection(); + var StringToSymbolRegistry = shared("string-to-symbol-registry"); + var SymbolToStringRegistry = shared("symbol-to-string-registry"); + $({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, { + "for": function(key) { + var string = toString(key); + if (hasOwn(StringToSymbolRegistry, string)) + return StringToSymbolRegistry[string]; + var symbol = getBuiltIn("Symbol")(string); + StringToSymbolRegistry[string] = symbol; + SymbolToStringRegistry[symbol] = string; + return symbol; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.key-for.js +var require_es_symbol_key_for = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.key-for.js": function() { + "use strict"; + var $ = require_export(); + var hasOwn = require_has_own_property(); + var isSymbol = require_is_symbol(); + var tryToString = require_try_to_string(); + var shared = require_shared(); + var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection(); + var SymbolToStringRegistry = shared("symbol-to-string-registry"); + $({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, { + keyFor: function keyFor(sym) { + if (!isSymbol(sym)) + throw new TypeError(tryToString(sym) + " is not a symbol"); + if (hasOwn(SymbolToStringRegistry, sym)) + return SymbolToStringRegistry[sym]; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-apply.js +var require_function_apply = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-apply.js": function(exports2, module2) { + "use strict"; + var NATIVE_BIND = require_function_bind_native(); + var FunctionPrototype = Function.prototype; + var apply = FunctionPrototype.apply; + var call = FunctionPrototype.call; + module2.exports = typeof Reflect == "object" && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function() { + return call.apply(apply, arguments); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-json-replacer-function.js +var require_get_json_replacer_function = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-json-replacer-function.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var isArray = require_is_array(); + var isCallable = require_is_callable(); + var classof = require_classof_raw(); + var toString = require_to_string(); + var push = uncurryThis([].push); + module2.exports = function(replacer) { + if (isCallable(replacer)) + return replacer; + if (!isArray(replacer)) + return; + var rawLength = replacer.length; + var keys = []; + for (var i = 0; i < rawLength; i++) { + var element = replacer[i]; + if (typeof element == "string") + push(keys, element); + else if (typeof element == "number" || classof(element) === "Number" || classof(element) === "String") + push(keys, toString(element)); + } + var keysLength = keys.length; + var root = true; + return function(key, value) { + if (root) { + root = false; + return value; + } + if (isArray(this)) + return value; + for (var j = 0; j < keysLength; j++) + if (keys[j] === key) + return value; + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.json.stringify.js +var require_es_json_stringify = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.json.stringify.js": function() { + "use strict"; + var $ = require_export(); + var getBuiltIn = require_get_built_in(); + var apply = require_function_apply(); + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var isCallable = require_is_callable(); + var isSymbol = require_is_symbol(); + var arraySlice = require_array_slice(); + var getReplacerFunction = require_get_json_replacer_function(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var $String = String; + var $stringify = getBuiltIn("JSON", "stringify"); + var exec = uncurryThis(/./.exec); + var charAt = uncurryThis("".charAt); + var charCodeAt = uncurryThis("".charCodeAt); + var replace = uncurryThis("".replace); + var numberToString = uncurryThis(1 .toString); + var tester = /[\uD800-\uDFFF]/g; + var low = /^[\uD800-\uDBFF]$/; + var hi = /^[\uDC00-\uDFFF]$/; + var WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function() { + var symbol = getBuiltIn("Symbol")("stringify detection"); + return $stringify([symbol]) !== "[null]" || $stringify({ a: symbol }) !== "{}" || $stringify(Object(symbol)) !== "{}"; + }); + var ILL_FORMED_UNICODE = fails(function() { + return $stringify("\uDF06\uD834") !== '"\\udf06\\ud834"' || $stringify("\uDEAD") !== '"\\udead"'; + }); + var stringifyWithSymbolsFix = function(it, replacer) { + var args = arraySlice(arguments); + var $replacer = getReplacerFunction(replacer); + if (!isCallable($replacer) && (it === void 0 || isSymbol(it))) + return; + args[1] = function(key, value) { + if (isCallable($replacer)) + value = call($replacer, this, $String(key), value); + if (!isSymbol(value)) + return value; + }; + return apply($stringify, null, args); + }; + var fixIllFormed = function(match, offset, string) { + var prev = charAt(string, offset - 1); + var next = charAt(string, offset + 1); + if (exec(low, match) && !exec(hi, next) || exec(hi, match) && !exec(low, prev)) { + return "\\u" + numberToString(charCodeAt(match, 0), 16); + } + return match; + }; + if ($stringify) { + $({ target: "JSON", stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + stringify: function stringify(it, replacer, space) { + var args = arraySlice(arguments); + var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args); + return ILL_FORMED_UNICODE && typeof result == "string" ? replace(result, tester, fixIllFormed) : result; + } + }); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-symbols.js +var require_es_object_get_own_property_symbols = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-symbols.js": function() { + "use strict"; + var $ = require_export(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var fails = require_fails(); + var getOwnPropertySymbolsModule = require_object_get_own_property_symbols(); + var toObject = require_to_object(); + var FORCED = !NATIVE_SYMBOL || fails(function() { + getOwnPropertySymbolsModule.f(1); + }); + $({ target: "Object", stat: true, forced: FORCED }, { + getOwnPropertySymbols: function getOwnPropertySymbols(it) { + var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : []; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.js +var require_es_symbol = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.js": function() { + "use strict"; + require_es_symbol_constructor(); + require_es_symbol_for(); + require_es_symbol_key_for(); + require_es_json_stringify(); + require_es_object_get_own_property_symbols(); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.description.js +var require_es_symbol_description = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.description.js": function() { + "use strict"; + var $ = require_export(); + var DESCRIPTORS = require_descriptors(); + var global2 = require_global(); + var uncurryThis = require_function_uncurry_this(); + var hasOwn = require_has_own_property(); + var isCallable = require_is_callable(); + var isPrototypeOf = require_object_is_prototype_of(); + var toString = require_to_string(); + var defineBuiltInAccessor = require_define_built_in_accessor(); + var copyConstructorProperties = require_copy_constructor_properties(); + var NativeSymbol = global2.Symbol; + var SymbolPrototype = NativeSymbol && NativeSymbol.prototype; + if (DESCRIPTORS && isCallable(NativeSymbol) && (!("description" in SymbolPrototype) || // Safari 12 bug + NativeSymbol().description !== void 0)) { + EmptyStringDescriptionStore = {}; + SymbolWrapper = function Symbol2() { + var description = arguments.length < 1 || arguments[0] === void 0 ? void 0 : toString(arguments[0]); + var result = isPrototypeOf(SymbolPrototype, this) ? new NativeSymbol(description) : description === void 0 ? NativeSymbol() : NativeSymbol(description); + if (description === "") + EmptyStringDescriptionStore[result] = true; + return result; + }; + copyConstructorProperties(SymbolWrapper, NativeSymbol); + SymbolWrapper.prototype = SymbolPrototype; + SymbolPrototype.constructor = SymbolWrapper; + NATIVE_SYMBOL = String(NativeSymbol("description detection")) === "Symbol(description detection)"; + thisSymbolValue = uncurryThis(SymbolPrototype.valueOf); + symbolDescriptiveString = uncurryThis(SymbolPrototype.toString); + regexp = /^Symbol\((.*)\)[^)]+$/; + replace = uncurryThis("".replace); + stringSlice = uncurryThis("".slice); + defineBuiltInAccessor(SymbolPrototype, "description", { + configurable: true, + get: function description() { + var symbol = thisSymbolValue(this); + if (hasOwn(EmptyStringDescriptionStore, symbol)) + return ""; + var string = symbolDescriptiveString(symbol); + var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, "$1"); + return desc === "" ? void 0 : desc; + } + }); + $({ global: true, constructor: true, forced: true }, { + Symbol: SymbolWrapper + }); + } + var EmptyStringDescriptionStore; + var SymbolWrapper; + var NATIVE_SYMBOL; + var thisSymbolValue; + var symbolDescriptiveString; + var regexp; + var replace; + var stringSlice; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.iterator.js +var require_es_symbol_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.iterator.js": function() { + "use strict"; + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("iterator"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-accessor.js +var require_function_uncurry_this_accessor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-accessor.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var aCallable = require_a_callable(); + module2.exports = function(object, key, method) { + try { + return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method])); + } catch (error) { + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-possible-prototype.js +var require_is_possible_prototype = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-possible-prototype.js": function(exports2, module2) { + "use strict"; + var isObject = require_is_object(); + module2.exports = function(argument) { + return isObject(argument) || argument === null; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-possible-prototype.js +var require_a_possible_prototype = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-possible-prototype.js": function(exports2, module2) { + "use strict"; + var isPossiblePrototype = require_is_possible_prototype(); + var $String = String; + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isPossiblePrototype(argument)) + return argument; + throw new $TypeError("Can't set " + $String(argument) + " as a prototype"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-set-prototype-of.js +var require_object_set_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-set-prototype-of.js": function(exports2, module2) { + "use strict"; + var uncurryThisAccessor = require_function_uncurry_this_accessor(); + var anObject = require_an_object(); + var aPossiblePrototype = require_a_possible_prototype(); + module2.exports = Object.setPrototypeOf || ("__proto__" in {} ? function() { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = uncurryThisAccessor(Object.prototype, "__proto__", "set"); + setter(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { + } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) + setter(O, proto); + else + O.__proto__ = proto; + return O; + }; + }() : void 0); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/proxy-accessor.js +var require_proxy_accessor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/proxy-accessor.js": function(exports2, module2) { + "use strict"; + var defineProperty = require_object_define_property().f; + module2.exports = function(Target, Source, key) { + key in Target || defineProperty(Target, key, { + configurable: true, + get: function() { + return Source[key]; + }, + set: function(it) { + Source[key] = it; + } + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inherit-if-required.js +var require_inherit_if_required = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inherit-if-required.js": function(exports2, module2) { + "use strict"; + var isCallable = require_is_callable(); + var isObject = require_is_object(); + var setPrototypeOf = require_object_set_prototype_of(); + module2.exports = function($this, dummy, Wrapper) { + var NewTarget, NewTargetPrototype; + if ( + // it can work only with native `setPrototypeOf` + setPrototypeOf && // we haven't completely correct pre-ES6 way for getting `new.target`, so use this + isCallable(NewTarget = dummy.constructor) && NewTarget !== Wrapper && isObject(NewTargetPrototype = NewTarget.prototype) && NewTargetPrototype !== Wrapper.prototype + ) + setPrototypeOf($this, NewTargetPrototype); + return $this; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/normalize-string-argument.js +var require_normalize_string_argument = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/normalize-string-argument.js": function(exports2, module2) { + "use strict"; + var toString = require_to_string(); + module2.exports = function(argument, $default) { + return argument === void 0 ? arguments.length < 2 ? "" : $default : toString(argument); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/install-error-cause.js +var require_install_error_cause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/install-error-cause.js": function(exports2, module2) { + "use strict"; + var isObject = require_is_object(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + module2.exports = function(O, options) { + if (isObject(options) && "cause" in options) { + createNonEnumerableProperty(O, "cause", options.cause); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-clear.js +var require_error_stack_clear = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-clear.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var $Error = Error; + var replace = uncurryThis("".replace); + var TEST = function(arg) { + return String(new $Error(arg).stack); + }("zxcasd"); + var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/; + var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST); + module2.exports = function(stack, dropEntries) { + if (IS_V8_OR_CHAKRA_STACK && typeof stack == "string" && !$Error.prepareStackTrace) { + while (dropEntries--) + stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, ""); + } + return stack; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-installable.js +var require_error_stack_installable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-installable.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var createPropertyDescriptor = require_create_property_descriptor(); + module2.exports = !fails(function() { + var error = new Error("a"); + if (!("stack" in error)) + return true; + Object.defineProperty(error, "stack", createPropertyDescriptor(1, 7)); + return error.stack !== 7; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-install.js +var require_error_stack_install = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-install.js": function(exports2, module2) { + "use strict"; + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var clearErrorStack = require_error_stack_clear(); + var ERROR_STACK_INSTALLABLE = require_error_stack_installable(); + var captureStackTrace = Error.captureStackTrace; + module2.exports = function(error, C, stack, dropEntries) { + if (ERROR_STACK_INSTALLABLE) { + if (captureStackTrace) + captureStackTrace(error, C); + else + createNonEnumerableProperty(error, "stack", clearErrorStack(stack, dropEntries)); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/wrap-error-constructor-with-cause.js +var require_wrap_error_constructor_with_cause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/wrap-error-constructor-with-cause.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var hasOwn = require_has_own_property(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var isPrototypeOf = require_object_is_prototype_of(); + var setPrototypeOf = require_object_set_prototype_of(); + var copyConstructorProperties = require_copy_constructor_properties(); + var proxyAccessor = require_proxy_accessor(); + var inheritIfRequired = require_inherit_if_required(); + var normalizeStringArgument = require_normalize_string_argument(); + var installErrorCause = require_install_error_cause(); + var installErrorStack = require_error_stack_install(); + var DESCRIPTORS = require_descriptors(); + var IS_PURE = require_is_pure(); + module2.exports = function(FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) { + var STACK_TRACE_LIMIT = "stackTraceLimit"; + var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1; + var path = FULL_NAME.split("."); + var ERROR_NAME = path[path.length - 1]; + var OriginalError = getBuiltIn.apply(null, path); + if (!OriginalError) + return; + var OriginalErrorPrototype = OriginalError.prototype; + if (!IS_PURE && hasOwn(OriginalErrorPrototype, "cause")) + delete OriginalErrorPrototype.cause; + if (!FORCED) + return OriginalError; + var BaseError = getBuiltIn("Error"); + var WrappedError = wrapper(function(a, b) { + var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, void 0); + var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError(); + if (message !== void 0) + createNonEnumerableProperty(result, "message", message); + installErrorStack(result, WrappedError, result.stack, 2); + if (this && isPrototypeOf(OriginalErrorPrototype, this)) + inheritIfRequired(result, this, WrappedError); + if (arguments.length > OPTIONS_POSITION) + installErrorCause(result, arguments[OPTIONS_POSITION]); + return result; + }); + WrappedError.prototype = OriginalErrorPrototype; + if (ERROR_NAME !== "Error") { + if (setPrototypeOf) + setPrototypeOf(WrappedError, BaseError); + else + copyConstructorProperties(WrappedError, BaseError, { name: true }); + } else if (DESCRIPTORS && STACK_TRACE_LIMIT in OriginalError) { + proxyAccessor(WrappedError, OriginalError, STACK_TRACE_LIMIT); + proxyAccessor(WrappedError, OriginalError, "prepareStackTrace"); + } + copyConstructorProperties(WrappedError, OriginalError); + if (!IS_PURE) + try { + if (OriginalErrorPrototype.name !== ERROR_NAME) { + createNonEnumerableProperty(OriginalErrorPrototype, "name", ERROR_NAME); + } + OriginalErrorPrototype.constructor = WrappedError; + } catch (error) { + } + return WrappedError; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.cause.js +var require_es_error_cause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.cause.js": function() { + "use strict"; + var $ = require_export(); + var global2 = require_global(); + var apply = require_function_apply(); + var wrapErrorConstructorWithCause = require_wrap_error_constructor_with_cause(); + var WEB_ASSEMBLY = "WebAssembly"; + var WebAssembly = global2[WEB_ASSEMBLY]; + var FORCED = new Error("e", { cause: 7 }).cause !== 7; + var exportGlobalErrorCauseWrapper = function(ERROR_NAME, wrapper) { + var O = {}; + O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED); + $({ global: true, constructor: true, arity: 1, forced: FORCED }, O); + }; + var exportWebAssemblyErrorCauseWrapper = function(ERROR_NAME, wrapper) { + if (WebAssembly && WebAssembly[ERROR_NAME]) { + var O = {}; + O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + "." + ERROR_NAME, wrapper, FORCED); + $({ target: WEB_ASSEMBLY, stat: true, constructor: true, arity: 1, forced: FORCED }, O); + } + }; + exportGlobalErrorCauseWrapper("Error", function(init) { + return function Error2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("EvalError", function(init) { + return function EvalError(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("RangeError", function(init) { + return function RangeError(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("ReferenceError", function(init) { + return function ReferenceError2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("SyntaxError", function(init) { + return function SyntaxError2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("TypeError", function(init) { + return function TypeError2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("URIError", function(init) { + return function URIError(message) { + return apply(init, this, arguments); + }; + }); + exportWebAssemblyErrorCauseWrapper("CompileError", function(init) { + return function CompileError(message) { + return apply(init, this, arguments); + }; + }); + exportWebAssemblyErrorCauseWrapper("LinkError", function(init) { + return function LinkError(message) { + return apply(init, this, arguments); + }; + }); + exportWebAssemblyErrorCauseWrapper("RuntimeError", function(init) { + return function RuntimeError(message) { + return apply(init, this, arguments); + }; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-to-string.js +var require_error_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-to-string.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var fails = require_fails(); + var anObject = require_an_object(); + var normalizeStringArgument = require_normalize_string_argument(); + var nativeErrorToString = Error.prototype.toString; + var INCORRECT_TO_STRING = fails(function() { + if (DESCRIPTORS) { + var object = Object.create(Object.defineProperty({}, "name", { get: function() { + return this === object; + } })); + if (nativeErrorToString.call(object) !== "true") + return true; + } + return nativeErrorToString.call({ message: 1, name: 2 }) !== "2: 1" || nativeErrorToString.call({}) !== "Error"; + }); + module2.exports = INCORRECT_TO_STRING ? function toString() { + var O = anObject(this); + var name = normalizeStringArgument(O.name, "Error"); + var message = normalizeStringArgument(O.message); + return !name ? message : !message ? name : name + ": " + message; + } : nativeErrorToString; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.to-string.js +var require_es_error_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.to-string.js": function() { + "use strict"; + var defineBuiltIn = require_define_built_in(); + var errorToString = require_error_to_string(); + var ErrorPrototype = Error.prototype; + if (ErrorPrototype.toString !== errorToString) { + defineBuiltIn(ErrorPrototype, "toString", errorToString); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-close.js +var require_iterator_close = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-close.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var anObject = require_an_object(); + var getMethod = require_get_method(); + module2.exports = function(iterator, kind, value) { + var innerResult, innerError; + anObject(iterator); + try { + innerResult = getMethod(iterator, "return"); + if (!innerResult) { + if (kind === "throw") + throw value; + return value; + } + innerResult = call(innerResult, iterator); + } catch (error) { + innerError = true; + innerResult = error; + } + if (kind === "throw") + throw value; + if (innerError) + throw innerResult; + anObject(innerResult); + return value; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/call-with-safe-iteration-closing.js +var require_call_with_safe_iteration_closing = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/call-with-safe-iteration-closing.js": function(exports2, module2) { + "use strict"; + var anObject = require_an_object(); + var iteratorClose = require_iterator_close(); + module2.exports = function(iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); + } catch (error) { + iteratorClose(iterator, "throw", error); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators.js +var require_iterators = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators.js": function(exports2, module2) { + "use strict"; + module2.exports = {}; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array-iterator-method.js +var require_is_array_iterator_method = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array-iterator-method.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var Iterators = require_iterators(); + var ITERATOR = wellKnownSymbol("iterator"); + var ArrayPrototype = Array.prototype; + module2.exports = function(it) { + return it !== void 0 && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property.js +var require_create_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var definePropertyModule = require_object_define_property(); + var createPropertyDescriptor = require_create_property_descriptor(); + module2.exports = function(object, key, value) { + if (DESCRIPTORS) + definePropertyModule.f(object, key, createPropertyDescriptor(0, value)); + else + object[key] = value; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator-method.js +var require_get_iterator_method = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator-method.js": function(exports2, module2) { + "use strict"; + var classof = require_classof(); + var getMethod = require_get_method(); + var isNullOrUndefined = require_is_null_or_undefined(); + var Iterators = require_iterators(); + var wellKnownSymbol = require_well_known_symbol(); + var ITERATOR = wellKnownSymbol("iterator"); + module2.exports = function(it) { + if (!isNullOrUndefined(it)) + return getMethod(it, ITERATOR) || getMethod(it, "@@iterator") || Iterators[classof(it)]; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator.js +var require_get_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var aCallable = require_a_callable(); + var anObject = require_an_object(); + var tryToString = require_try_to_string(); + var getIteratorMethod = require_get_iterator_method(); + var $TypeError = TypeError; + module2.exports = function(argument, usingIterator) { + var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator; + if (aCallable(iteratorMethod)) + return anObject(call(iteratorMethod, argument)); + throw new $TypeError(tryToString(argument) + " is not iterable"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-from.js +var require_array_from = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-from.js": function(exports2, module2) { + "use strict"; + var bind = require_function_bind_context(); + var call = require_function_call(); + var toObject = require_to_object(); + var callWithSafeIterationClosing = require_call_with_safe_iteration_closing(); + var isArrayIteratorMethod = require_is_array_iterator_method(); + var isConstructor = require_is_constructor(); + var lengthOfArrayLike = require_length_of_array_like(); + var createProperty = require_create_property(); + var getIterator = require_get_iterator(); + var getIteratorMethod = require_get_iterator_method(); + var $Array = Array; + module2.exports = function from(arrayLike) { + var O = toObject(arrayLike); + var IS_CONSTRUCTOR = isConstructor(this); + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : void 0; + var mapping = mapfn !== void 0; + if (mapping) + mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : void 0); + var iteratorMethod = getIteratorMethod(O); + var index = 0; + var length, result, step, iterator, next, value; + if (iteratorMethod && !(this === $Array && isArrayIteratorMethod(iteratorMethod))) { + iterator = getIterator(O, iteratorMethod); + next = iterator.next; + result = IS_CONSTRUCTOR ? new this() : []; + for (; !(step = call(next, iterator)).done; index++) { + value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value; + createProperty(result, index, value); + } + } else { + length = lengthOfArrayLike(O); + result = IS_CONSTRUCTOR ? new this(length) : $Array(length); + for (; length > index; index++) { + value = mapping ? mapfn(O[index], index) : O[index]; + createProperty(result, index, value); + } + } + result.length = index; + return result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/check-correctness-of-iteration.js +var require_check_correctness_of_iteration = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/check-correctness-of-iteration.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var ITERATOR = wellKnownSymbol("iterator"); + var SAFE_CLOSING = false; + try { + called = 0; + iteratorWithReturn = { + next: function() { + return { done: !!called++ }; + }, + "return": function() { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function() { + return this; + }; + Array.from(iteratorWithReturn, function() { + throw 2; + }); + } catch (error) { + } + var called; + var iteratorWithReturn; + module2.exports = function(exec, SKIP_CLOSING) { + try { + if (!SKIP_CLOSING && !SAFE_CLOSING) + return false; + } catch (error) { + return false; + } + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function() { + return { + next: function() { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { + } + return ITERATION_SUPPORT; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.from.js +var require_es_array_from = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.from.js": function() { + "use strict"; + var $ = require_export(); + var from = require_array_from(); + var checkCorrectnessOfIteration = require_check_correctness_of_iteration(); + var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function(iterable) { + Array.from(iterable); + }); + $({ target: "Array", stat: true, forced: INCORRECT_ITERATION }, { + from: from + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/add-to-unscopables.js +var require_add_to_unscopables = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/add-to-unscopables.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var create = require_object_create(); + var defineProperty = require_object_define_property().f; + var UNSCOPABLES = wellKnownSymbol("unscopables"); + var ArrayPrototype = Array.prototype; + if (ArrayPrototype[UNSCOPABLES] === void 0) { + defineProperty(ArrayPrototype, UNSCOPABLES, { + configurable: true, + value: create(null) + }); + } + module2.exports = function(key) { + ArrayPrototype[UNSCOPABLES][key] = true; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/correct-prototype-getter.js +var require_correct_prototype_getter = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/correct-prototype-getter.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = !fails(function() { + function F() { + } + F.prototype.constructor = null; + return Object.getPrototypeOf(new F()) !== F.prototype; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-prototype-of.js +var require_object_get_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-prototype-of.js": function(exports2, module2) { + "use strict"; + var hasOwn = require_has_own_property(); + var isCallable = require_is_callable(); + var toObject = require_to_object(); + var sharedKey = require_shared_key(); + var CORRECT_PROTOTYPE_GETTER = require_correct_prototype_getter(); + var IE_PROTO = sharedKey("IE_PROTO"); + var $Object = Object; + var ObjectPrototype = $Object.prototype; + module2.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function(O) { + var object = toObject(O); + if (hasOwn(object, IE_PROTO)) + return object[IE_PROTO]; + var constructor = object.constructor; + if (isCallable(constructor) && object instanceof constructor) { + return constructor.prototype; + } + return object instanceof $Object ? ObjectPrototype : null; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators-core.js +var require_iterators_core = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators-core.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var isCallable = require_is_callable(); + var isObject = require_is_object(); + var create = require_object_create(); + var getPrototypeOf = require_object_get_prototype_of(); + var defineBuiltIn = require_define_built_in(); + var wellKnownSymbol = require_well_known_symbol(); + var IS_PURE = require_is_pure(); + var ITERATOR = wellKnownSymbol("iterator"); + var BUGGY_SAFARI_ITERATORS = false; + var IteratorPrototype; + var PrototypeOfArrayIteratorPrototype; + var arrayIterator; + if ([].keys) { + arrayIterator = [].keys(); + if (!("next" in arrayIterator)) + BUGGY_SAFARI_ITERATORS = true; + else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) + IteratorPrototype = PrototypeOfArrayIteratorPrototype; + } + } + var NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function() { + var test = {}; + return IteratorPrototype[ITERATOR].call(test) !== test; + }); + if (NEW_ITERATOR_PROTOTYPE) + IteratorPrototype = {}; + else if (IS_PURE) + IteratorPrototype = create(IteratorPrototype); + if (!isCallable(IteratorPrototype[ITERATOR])) { + defineBuiltIn(IteratorPrototype, ITERATOR, function() { + return this; + }); + } + module2.exports = { + IteratorPrototype: IteratorPrototype, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-create-constructor.js +var require_iterator_create_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-create-constructor.js": function(exports2, module2) { + "use strict"; + var IteratorPrototype = require_iterators_core().IteratorPrototype; + var create = require_object_create(); + var createPropertyDescriptor = require_create_property_descriptor(); + var setToStringTag = require_set_to_string_tag(); + var Iterators = require_iterators(); + var returnThis = function() { + return this; + }; + module2.exports = function(IteratorConstructor, NAME, next, ENUMERABLE_NEXT) { + var TO_STRING_TAG = NAME + " Iterator"; + IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); + Iterators[TO_STRING_TAG] = returnThis; + return IteratorConstructor; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-define.js +var require_iterator_define = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-define.js": function(exports2, module2) { + "use strict"; + var $ = require_export(); + var call = require_function_call(); + var IS_PURE = require_is_pure(); + var FunctionName = require_function_name(); + var isCallable = require_is_callable(); + var createIteratorConstructor = require_iterator_create_constructor(); + var getPrototypeOf = require_object_get_prototype_of(); + var setPrototypeOf = require_object_set_prototype_of(); + var setToStringTag = require_set_to_string_tag(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var defineBuiltIn = require_define_built_in(); + var wellKnownSymbol = require_well_known_symbol(); + var Iterators = require_iterators(); + var IteratorsCore = require_iterators_core(); + var PROPER_FUNCTION_NAME = FunctionName.PROPER; + var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE; + var IteratorPrototype = IteratorsCore.IteratorPrototype; + var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; + var ITERATOR = wellKnownSymbol("iterator"); + var KEYS = "keys"; + var VALUES = "values"; + var ENTRIES = "entries"; + var returnThis = function() { + return this; + }; + module2.exports = function(Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor(IteratorConstructor, NAME, next); + var getIterationMethod = function(KIND) { + if (KIND === DEFAULT && defaultIterator) + return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) + return IterablePrototype[KIND]; + switch (KIND) { + case KEYS: + return function keys() { + return new IteratorConstructor(this, KIND); + }; + case VALUES: + return function values() { + return new IteratorConstructor(this, KIND); + }; + case ENTRIES: + return function entries() { + return new IteratorConstructor(this, KIND); + }; + } + return function() { + return new IteratorConstructor(this); + }; + }; + var TO_STRING_TAG = NAME + " Iterator"; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR] || IterablePrototype["@@iterator"] || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME === "Array" ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); + if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) { + defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis); + } + } + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); + if (IS_PURE) + Iterators[TO_STRING_TAG] = returnThis; + } + } + if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) { + if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) { + createNonEnumerableProperty(IterablePrototype, "name", VALUES); + } else { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { + return call(nativeIterator, this); + }; + } + } + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) + for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + defineBuiltIn(IterablePrototype, KEY, methods[KEY]); + } + } + else + $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); + } + if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { + defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT }); + } + Iterators[NAME] = defaultIterator; + return methods; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-iter-result-object.js +var require_create_iter_result_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-iter-result-object.js": function(exports2, module2) { + "use strict"; + module2.exports = function(value, done) { + return { value: value, done: done }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.iterator.js +var require_es_array_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.iterator.js": function(exports2, module2) { + "use strict"; + var toIndexedObject = require_to_indexed_object(); + var addToUnscopables = require_add_to_unscopables(); + var Iterators = require_iterators(); + var InternalStateModule = require_internal_state(); + var defineProperty = require_object_define_property().f; + var defineIterator = require_iterator_define(); + var createIterResultObject = require_create_iter_result_object(); + var IS_PURE = require_is_pure(); + var DESCRIPTORS = require_descriptors(); + var ARRAY_ITERATOR = "Array Iterator"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); + module2.exports = defineIterator(Array, "Array", function(iterated, kind) { + setInternalState(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject(iterated), + // target + index: 0, + // next index + kind: kind + // kind + }); + }, function() { + var state = getInternalState(this); + var target = state.target; + var index = state.index++; + if (!target || index >= target.length) { + state.target = void 0; + return createIterResultObject(void 0, true); + } + switch (state.kind) { + case "keys": + return createIterResultObject(index, false); + case "values": + return createIterResultObject(target[index], false); + } + return createIterResultObject([index, target[index]], false); + }, "values"); + var values = Iterators.Arguments = Iterators.Array; + addToUnscopables("keys"); + addToUnscopables("values"); + addToUnscopables("entries"); + if (!IS_PURE && DESCRIPTORS && values.name !== "values") + try { + defineProperty(values, "name", { value: "values" }); + } catch (error) { + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-method-has-species-support.js +var require_array_method_has_species_support = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-method-has-species-support.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var wellKnownSymbol = require_well_known_symbol(); + var V8_VERSION = require_engine_v8_version(); + var SPECIES = wellKnownSymbol("species"); + module2.exports = function(METHOD_NAME) { + return V8_VERSION >= 51 || !fails(function() { + var array = []; + var constructor = array.constructor = {}; + constructor[SPECIES] = function() { + return { foo: 1 }; + }; + return array[METHOD_NAME](Boolean).foo !== 1; + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.slice.js +var require_es_array_slice = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.slice.js": function() { + "use strict"; + var $ = require_export(); + var isArray = require_is_array(); + var isConstructor = require_is_constructor(); + var isObject = require_is_object(); + var toAbsoluteIndex = require_to_absolute_index(); + var lengthOfArrayLike = require_length_of_array_like(); + var toIndexedObject = require_to_indexed_object(); + var createProperty = require_create_property(); + var wellKnownSymbol = require_well_known_symbol(); + var arrayMethodHasSpeciesSupport = require_array_method_has_species_support(); + var nativeSlice = require_array_slice(); + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("slice"); + var SPECIES = wellKnownSymbol("species"); + var $Array = Array; + var max = Math.max; + $({ target: "Array", proto: true, forced: !HAS_SPECIES_SUPPORT }, { + slice: function slice(start, end) { + var O = toIndexedObject(this); + var length = lengthOfArrayLike(O); + var k = toAbsoluteIndex(start, length); + var fin = toAbsoluteIndex(end === void 0 ? length : end, length); + var Constructor, result, n; + if (isArray(O)) { + Constructor = O.constructor; + if (isConstructor(Constructor) && (Constructor === $Array || isArray(Constructor.prototype))) { + Constructor = void 0; + } else if (isObject(Constructor)) { + Constructor = Constructor[SPECIES]; + if (Constructor === null) + Constructor = void 0; + } + if (Constructor === $Array || Constructor === void 0) { + return nativeSlice(O, k, fin); + } + } + result = new (Constructor === void 0 ? $Array : Constructor)(max(fin - k, 0)); + for (n = 0; k < fin; k++, n++) + if (k in O) + createProperty(result, n, O[k]); + result.length = n; + return result; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-to-string.js +var require_object_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-to-string.js": function(exports2, module2) { + "use strict"; + var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); + var classof = require_classof(); + module2.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { + return "[object " + classof(this) + "]"; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.to-string.js +var require_es_object_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.to-string.js": function() { + "use strict"; + var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); + var defineBuiltIn = require_define_built_in(); + var toString = require_object_to_string(); + if (!TO_STRING_TAG_SUPPORT) { + defineBuiltIn(Object.prototype, "toString", toString, { unsafe: true }); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-flags.js +var require_regexp_flags = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-flags.js": function(exports2, module2) { + "use strict"; + var anObject = require_an_object(); + module2.exports = function() { + var that = anObject(this); + var result = ""; + if (that.hasIndices) + result += "d"; + if (that.global) + result += "g"; + if (that.ignoreCase) + result += "i"; + if (that.multiline) + result += "m"; + if (that.dotAll) + result += "s"; + if (that.unicode) + result += "u"; + if (that.unicodeSets) + result += "v"; + if (that.sticky) + result += "y"; + return result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-sticky-helpers.js +var require_regexp_sticky_helpers = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-sticky-helpers.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var global2 = require_global(); + var $RegExp = global2.RegExp; + var UNSUPPORTED_Y = fails(function() { + var re = $RegExp("a", "y"); + re.lastIndex = 2; + return re.exec("abcd") !== null; + }); + var MISSED_STICKY = UNSUPPORTED_Y || fails(function() { + return !$RegExp("a", "y").sticky; + }); + var BROKEN_CARET = UNSUPPORTED_Y || fails(function() { + var re = $RegExp("^r", "gy"); + re.lastIndex = 2; + return re.exec("str") !== null; + }); + module2.exports = { + BROKEN_CARET: BROKEN_CARET, + MISSED_STICKY: MISSED_STICKY, + UNSUPPORTED_Y: UNSUPPORTED_Y + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-dot-all.js +var require_regexp_unsupported_dot_all = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-dot-all.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var global2 = require_global(); + var $RegExp = global2.RegExp; + module2.exports = fails(function() { + var re = $RegExp(".", "s"); + return !(re.dotAll && re.test("\n") && re.flags === "s"); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-ncg.js +var require_regexp_unsupported_ncg = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-ncg.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var global2 = require_global(); + var $RegExp = global2.RegExp; + module2.exports = fails(function() { + var re = $RegExp("(?b)", "g"); + return re.exec("b").groups.a !== "b" || "b".replace(re, "$c") !== "bc"; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-exec.js +var require_regexp_exec = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-exec.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var toString = require_to_string(); + var regexpFlags = require_regexp_flags(); + var stickyHelpers = require_regexp_sticky_helpers(); + var shared = require_shared(); + var create = require_object_create(); + var getInternalState = require_internal_state().get; + var UNSUPPORTED_DOT_ALL = require_regexp_unsupported_dot_all(); + var UNSUPPORTED_NCG = require_regexp_unsupported_ncg(); + var nativeReplace = shared("native-string-replace", String.prototype.replace); + var nativeExec = RegExp.prototype.exec; + var patchedExec = nativeExec; + var charAt = uncurryThis("".charAt); + var indexOf = uncurryThis("".indexOf); + var replace = uncurryThis("".replace); + var stringSlice = uncurryThis("".slice); + var UPDATES_LAST_INDEX_WRONG = function() { + var re1 = /a/; + var re2 = /b*/g; + call(nativeExec, re1, "a"); + call(nativeExec, re2, "a"); + return re1.lastIndex !== 0 || re2.lastIndex !== 0; + }(); + var UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET; + var NPCG_INCLUDED = /()??/.exec("")[1] !== void 0; + var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG; + if (PATCH) { + patchedExec = function exec(string) { + var re = this; + var state = getInternalState(re); + var str = toString(string); + var raw = state.raw; + var result, reCopy, lastIndex, match, i, object, group; + if (raw) { + raw.lastIndex = re.lastIndex; + result = call(patchedExec, raw, str); + re.lastIndex = raw.lastIndex; + return result; + } + var groups = state.groups; + var sticky = UNSUPPORTED_Y && re.sticky; + var flags = call(regexpFlags, re); + var source = re.source; + var charsAdded = 0; + var strCopy = str; + if (sticky) { + flags = replace(flags, "y", ""); + if (indexOf(flags, "g") === -1) { + flags += "g"; + } + strCopy = stringSlice(str, re.lastIndex); + if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== "\n")) { + source = "(?: " + source + ")"; + strCopy = " " + strCopy; + charsAdded++; + } + reCopy = new RegExp("^(?:" + source + ")", flags); + } + if (NPCG_INCLUDED) { + reCopy = new RegExp("^" + source + "$(?!\\s)", flags); + } + if (UPDATES_LAST_INDEX_WRONG) + lastIndex = re.lastIndex; + match = call(nativeExec, sticky ? reCopy : re, strCopy); + if (sticky) { + if (match) { + match.input = stringSlice(match.input, charsAdded); + match[0] = stringSlice(match[0], charsAdded); + match.index = re.lastIndex; + re.lastIndex += match[0].length; + } else + re.lastIndex = 0; + } else if (UPDATES_LAST_INDEX_WRONG && match) { + re.lastIndex = re.global ? match.index + match[0].length : lastIndex; + } + if (NPCG_INCLUDED && match && match.length > 1) { + call(nativeReplace, match[0], reCopy, function() { + for (i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === void 0) + match[i] = void 0; + } + }); + } + if (match && groups) { + match.groups = object = create(null); + for (i = 0; i < groups.length; i++) { + group = groups[i]; + object[group[0]] = match[group[1]]; + } + } + return match; + }; + } + module2.exports = patchedExec; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.exec.js +var require_es_regexp_exec = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.exec.js": function() { + "use strict"; + var $ = require_export(); + var exec = require_regexp_exec(); + $({ target: "RegExp", proto: true, forced: /./.exec !== exec }, { + exec: exec + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.test.js +var require_es_regexp_test = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.test.js": function() { + "use strict"; + require_es_regexp_exec(); + var $ = require_export(); + var call = require_function_call(); + var isCallable = require_is_callable(); + var anObject = require_an_object(); + var toString = require_to_string(); + var DELEGATES_TO_EXEC = function() { + var execCalled = false; + var re = /[ac]/; + re.exec = function() { + execCalled = true; + return /./.exec.apply(this, arguments); + }; + return re.test("abc") === true && execCalled; + }(); + var nativeTest = /./.test; + $({ target: "RegExp", proto: true, forced: !DELEGATES_TO_EXEC }, { + test: function(S) { + var R = anObject(this); + var string = toString(S); + var exec = R.exec; + if (!isCallable(exec)) + return call(nativeTest, R, string); + var result = call(exec, R, string); + if (result === null) + return false; + anObject(result); + return true; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-get-flags.js +var require_regexp_get_flags = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-get-flags.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var hasOwn = require_has_own_property(); + var isPrototypeOf = require_object_is_prototype_of(); + var regExpFlags = require_regexp_flags(); + var RegExpPrototype = RegExp.prototype; + module2.exports = function(R) { + var flags = R.flags; + return flags === void 0 && !("flags" in RegExpPrototype) && !hasOwn(R, "flags") && isPrototypeOf(RegExpPrototype, R) ? call(regExpFlags, R) : flags; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.to-string.js +var require_es_regexp_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.to-string.js": function() { + "use strict"; + var PROPER_FUNCTION_NAME = require_function_name().PROPER; + var defineBuiltIn = require_define_built_in(); + var anObject = require_an_object(); + var $toString = require_to_string(); + var fails = require_fails(); + var getRegExpFlags = require_regexp_get_flags(); + var TO_STRING = "toString"; + var RegExpPrototype = RegExp.prototype; + var nativeToString = RegExpPrototype[TO_STRING]; + var NOT_GENERIC = fails(function() { + return nativeToString.call({ source: "a", flags: "b" }) !== "/a/b"; + }); + var INCORRECT_NAME = PROPER_FUNCTION_NAME && nativeToString.name !== TO_STRING; + if (NOT_GENERIC || INCORRECT_NAME) { + defineBuiltIn(RegExpPrototype, TO_STRING, function toString() { + var R = anObject(this); + var pattern = $toString(R.source); + var flags = $toString(getRegExpFlags(R)); + return "/" + pattern + "/" + flags; + }, { unsafe: true }); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-multibyte.js +var require_string_multibyte = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-multibyte.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var toString = require_to_string(); + var requireObjectCoercible = require_require_object_coercible(); + var charAt = uncurryThis("".charAt); + var charCodeAt = uncurryThis("".charCodeAt); + var stringSlice = uncurryThis("".slice); + var createMethod = function(CONVERT_TO_STRING) { + return function($this, pos) { + var S = toString(requireObjectCoercible($this)); + var position = toIntegerOrInfinity(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) + return CONVERT_TO_STRING ? "" : void 0; + first = charCodeAt(S, position); + return first < 55296 || first > 56319 || position + 1 === size || (second = charCodeAt(S, position + 1)) < 56320 || second > 57343 ? CONVERT_TO_STRING ? charAt(S, position) : first : CONVERT_TO_STRING ? stringSlice(S, position, position + 2) : (first - 55296 << 10) + (second - 56320) + 65536; + }; + }; + module2.exports = { + // `String.prototype.codePointAt` method + // https://tc39.es/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod(true) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.iterator.js +var require_es_string_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.iterator.js": function() { + "use strict"; + var charAt = require_string_multibyte().charAt; + var toString = require_to_string(); + var InternalStateModule = require_internal_state(); + var defineIterator = require_iterator_define(); + var createIterResultObject = require_create_iter_result_object(); + var STRING_ITERATOR = "String Iterator"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); + defineIterator(String, "String", function(iterated) { + setInternalState(this, { + type: STRING_ITERATOR, + string: toString(iterated), + index: 0 + }); + }, function next() { + var state = getInternalState(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) + return createIterResultObject(void 0, true); + point = charAt(string, index); + state.index += point.length; + return createIterResultObject(point, false); + }); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/helpers/_DOMTokenList.js +var _DOMTokenList, DOMTokenList_default; +var init_DOMTokenList = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/helpers/_DOMTokenList.js": function() { + _DOMTokenList = function() { + var dpSupport = true; + var defineGetter = function(object, name, fn, configurable) { + if (Object.defineProperty) + Object.defineProperty(object, name, { + configurable: false === dpSupport ? true : !!configurable, + get: fn + }); + else + object.__defineGetter__(name, fn); + }; + try { + defineGetter({}, "support"); + } catch (e) { + dpSupport = false; + } + var _DOMTokenList2 = function(el, prop) { + var that = this; + var tokens = []; + var tokenMap = {}; + var length = 0; + var maxLength = 0; + var addIndexGetter = function(i) { + defineGetter(that, i, function() { + preop(); + return tokens[i]; + }, false); + }; + var reindex = function() { + if (length >= maxLength) + for (; maxLength < length; ++maxLength) { + addIndexGetter(maxLength); + } + }; + var preop = function() { + var error; + var i; + var args = arguments; + var rSpace = /\s+/; + if (args.length) { + for (i = 0; i < args.length; ++i) + if (rSpace.test(args[i])) { + error = new SyntaxError('String "' + args[i] + '" contains an invalid character'); + error.code = 5; + error.name = "InvalidCharacterError"; + throw error; + } + } + if (typeof el[prop] === "object") { + tokens = ("" + el[prop].baseVal).replace(/^\s+|\s+$/g, "").split(rSpace); + } else { + tokens = ("" + el[prop]).replace(/^\s+|\s+$/g, "").split(rSpace); + } + if ("" === tokens[0]) + tokens = []; + tokenMap = {}; + for (i = 0; i < tokens.length; ++i) + tokenMap[tokens[i]] = true; + length = tokens.length; + reindex(); + }; + preop(); + defineGetter(that, "length", function() { + preop(); + return length; + }); + that.toLocaleString = that.toString = function() { + preop(); + return tokens.join(" "); + }; + that.item = function(idx) { + preop(); + return tokens[idx]; + }; + that.contains = function(token) { + preop(); + return !!tokenMap[token]; + }; + that.add = function() { + preop.apply(that, args = arguments); + for (var args, token, i = 0, l = args.length; i < l; ++i) { + token = args[i]; + if (!tokenMap[token]) { + tokens.push(token); + tokenMap[token] = true; + } + } + if (length !== tokens.length) { + length = tokens.length >>> 0; + if (typeof el[prop] === "object") { + el[prop].baseVal = tokens.join(" "); + } else { + el[prop] = tokens.join(" "); + } + reindex(); + } + }; + that.remove = function() { + preop.apply(that, args = arguments); + for (var args, ignore = {}, i = 0, t = []; i < args.length; ++i) { + ignore[args[i]] = true; + delete tokenMap[args[i]]; + } + for (i = 0; i < tokens.length; ++i) + if (!ignore[tokens[i]]) + t.push(tokens[i]); + tokens = t; + length = t.length >>> 0; + if (typeof el[prop] === "object") { + el[prop].baseVal = tokens.join(" "); + } else { + el[prop] = tokens.join(" "); + } + reindex(); + }; + that.toggle = function(token, force) { + preop.apply(that, [token]); + if (void 0 !== force) { + if (force) { + that.add(token); + return true; + } else { + that.remove(token); + return false; + } + } + if (tokenMap[token]) { + that.remove(token); + return false; + } + that.add(token); + return true; + }; + that.forEach = Array.prototype.forEach; + return that; + }; + return _DOMTokenList2; + }(); + DOMTokenList_default = _DOMTokenList; + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DOMTokenList.js +var DOMTokenList_exports = {}; +var init_DOMTokenList2 = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DOMTokenList.js": function() { + init_DOMTokenList(); + (function(undefined2) { + if (!("DOMTokenList" in self && function(e) { + return !("classList" in e) || !e.classList.toggle("x", false) && !e.className; + }(document.createElement("x")))) { + (function(global2) { + var nativeImpl = "DOMTokenList" in global2 && global2.DOMTokenList; + if (!nativeImpl || !!document.createElementNS && !!document.createElementNS("http://www.w3.org/2000/svg", "svg") && !(document.createElementNS("http://www.w3.org/2000/svg", "svg").classList instanceof DOMTokenList)) { + global2.DOMTokenList = DOMTokenList_default; + } + (function() { + var e = document.createElement("span"); + if (!("classList" in e)) + return; + e.classList.toggle("x", false); + if (!e.classList.contains("x")) + return; + e.classList.constructor.prototype.toggle = function toggle(token) { + var force = arguments[1]; + if (force === undefined2) { + var add = !this.contains(token); + this[add ? "add" : "remove"](token); + return add; + } + force = !!force; + this[force ? "add" : "remove"](token); + return force; + }; + })(); + (function() { + var e = document.createElement("span"); + if (!("classList" in e)) + return; + e.classList.add("a", "b"); + if (e.classList.contains("b")) + return; + var native = e.classList.constructor.prototype.add; + e.classList.constructor.prototype.add = function() { + var args = arguments; + var l = arguments.length; + for (var i = 0; i < l; i++) { + native.call(this, args[i]); + } + }; + })(); + (function() { + var e = document.createElement("span"); + if (!("classList" in e)) + return; + e.classList.add("a"); + e.classList.add("b"); + e.classList.remove("a", "b"); + if (!e.classList.contains("b")) + return; + var native = e.classList.constructor.prototype.remove; + e.classList.constructor.prototype.remove = function() { + var args = arguments; + var l = arguments.length; + for (var i = 0; i < l; i++) { + native.call(this, args[i]); + } + }; + })(); + })(self); + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.replace.js +var DOMTokenList_prototype_replace_exports = {}; +var init_DOMTokenList_prototype_replace = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.replace.js": function() { + init_DOMTokenList(); + (function(undefined2) { + if (!("replace" in (document.createElement("div").classList || {}))) { + (function() { + var classList = document.createElement("div").classList; + classList && (classList.constructor.prototype.replace = function(token, newToken) { + var tokenString = "" + token, newTokenString = "" + newToken; + try { + new DOMException(); + } catch (e) { + self.DOMException = function(message, name) { + if (!(this instanceof DOMException)) + return new DOMException(message, name); + this.message = message; + this.name = name; + }; + } + var error; + if (!(tokenString && newTokenString)) + error = "SyntaxError"; + if (!error && (/\s/.test(tokenString) || /\s/.test(newTokenString))) + error = "InvalidCharacterError"; + if (error) + throw new DOMException("DOMTokenList.replace was provided tokens '" + tokenString + "' and '" + newTokenString + "'", error); + if (!this.contains(tokenString)) + return false; + var tokensTobeMoved = []; + var newTokenFound = false; + for (var i = 0; i < this.length; ++i) + if (newTokenString === this.item(i)) + newTokenFound = true; + else if (tokenString === this.item(i)) + break; + for (; i < this.length; ++i) + tokensTobeMoved.push(this.item(i)); + for (i = 0; i < tokensTobeMoved.length; ++i) { + var currentToken = tokensTobeMoved[i]; + currentToken !== newTokenString && this.remove(currentToken); + currentToken !== tokenString && this.add(currentToken); + currentToken === tokenString && !newTokenFound && (this.remove(newTokenString), this.add(newTokenString)); + } + return true; + }); + })(); + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-method-is-strict.js +var require_array_method_is_strict = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-method-is-strict.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = function(METHOD_NAME, argument) { + var method = [][METHOD_NAME]; + return !!method && fails(function() { + method.call(null, argument || function() { + return 1; + }, 1); + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.index-of.js +var require_es_array_index_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.index-of.js": function() { + "use strict"; + var $ = require_export(); + var uncurryThis = require_function_uncurry_this_clause(); + var $indexOf = require_array_includes().indexOf; + var arrayMethodIsStrict = require_array_method_is_strict(); + var nativeIndexOf = uncurryThis([].indexOf); + var NEGATIVE_ZERO = !!nativeIndexOf && 1 / nativeIndexOf([1], 1, -0) < 0; + var FORCED = NEGATIVE_ZERO || !arrayMethodIsStrict("indexOf"); + $({ target: "Array", proto: true, forced: FORCED }, { + indexOf: function indexOf(searchElement) { + var fromIndex = arguments.length > 1 ? arguments[1] : void 0; + return NEGATIVE_ZERO ? nativeIndexOf(this, searchElement, fromIndex) || 0 : $indexOf(this, searchElement, fromIndex); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.define-property.js +var require_es_object_define_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.define-property.js": function() { + "use strict"; + var $ = require_export(); + var DESCRIPTORS = require_descriptors(); + var defineProperty = require_object_define_property().f; + $({ target: "Object", stat: true, forced: Object.defineProperty !== defineProperty, sham: !DESCRIPTORS }, { + defineProperty: defineProperty + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-descriptor.js +var require_es_object_get_own_property_descriptor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-descriptor.js": function() { + "use strict"; + var $ = require_export(); + var fails = require_fails(); + var toIndexedObject = require_to_indexed_object(); + var nativeGetOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; + var DESCRIPTORS = require_descriptors(); + var FORCED = !DESCRIPTORS || fails(function() { + nativeGetOwnPropertyDescriptor(1); + }); + $({ target: "Object", stat: true, forced: FORCED, sham: !DESCRIPTORS }, { + getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) { + return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-names.js +var require_es_object_get_own_property_names = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-names.js": function() { + "use strict"; + var $ = require_export(); + var fails = require_fails(); + var getOwnPropertyNames = require_object_get_own_property_names_external().f; + var FAILS_ON_PRIMITIVES = fails(function() { + return !Object.getOwnPropertyNames(1); + }); + $({ target: "Object", stat: true, forced: FAILS_ON_PRIMITIVES }, { + getOwnPropertyNames: getOwnPropertyNames + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-prototype-of.js +var require_es_object_get_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-prototype-of.js": function() { + "use strict"; + var $ = require_export(); + var fails = require_fails(); + var toObject = require_to_object(); + var nativeGetPrototypeOf = require_object_get_prototype_of(); + var CORRECT_PROTOTYPE_GETTER = require_correct_prototype_getter(); + var FAILS_ON_PRIMITIVES = fails(function() { + nativeGetPrototypeOf(1); + }); + $({ target: "Object", stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, { + getPrototypeOf: function getPrototypeOf(it) { + return nativeGetPrototypeOf(toObject(it)); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js +var require_fix_regexp_well_known_symbol_logic = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js": function(exports2, module2) { + "use strict"; + require_es_regexp_exec(); + var call = require_function_call(); + var defineBuiltIn = require_define_built_in(); + var regexpExec = require_regexp_exec(); + var fails = require_fails(); + var wellKnownSymbol = require_well_known_symbol(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var SPECIES = wellKnownSymbol("species"); + var RegExpPrototype = RegExp.prototype; + module2.exports = function(KEY, exec, FORCED, SHAM) { + var SYMBOL = wellKnownSymbol(KEY); + var DELEGATES_TO_SYMBOL = !fails(function() { + var O = {}; + O[SYMBOL] = function() { + return 7; + }; + return ""[KEY](O) !== 7; + }); + var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function() { + var execCalled = false; + var re = /a/; + if (KEY === "split") { + re = {}; + re.constructor = {}; + re.constructor[SPECIES] = function() { + return re; + }; + re.flags = ""; + re[SYMBOL] = /./[SYMBOL]; + } + re.exec = function() { + execCalled = true; + return null; + }; + re[SYMBOL](""); + return !execCalled; + }); + if (!DELEGATES_TO_SYMBOL || !DELEGATES_TO_EXEC || FORCED) { + var nativeRegExpMethod = /./[SYMBOL]; + var methods = exec(SYMBOL, ""[KEY], function(nativeMethod, regexp, str, arg2, forceStringMethod) { + var $exec = regexp.exec; + if ($exec === regexpExec || $exec === RegExpPrototype.exec) { + if (DELEGATES_TO_SYMBOL && !forceStringMethod) { + return { done: true, value: call(nativeRegExpMethod, regexp, str, arg2) }; + } + return { done: true, value: call(nativeMethod, str, regexp, arg2) }; + } + return { done: false }; + }); + defineBuiltIn(String.prototype, KEY, methods[0]); + defineBuiltIn(RegExpPrototype, SYMBOL, methods[1]); + } + if (SHAM) + createNonEnumerableProperty(RegExpPrototype[SYMBOL], "sham", true); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/advance-string-index.js +var require_advance_string_index = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/advance-string-index.js": function(exports2, module2) { + "use strict"; + var charAt = require_string_multibyte().charAt; + module2.exports = function(S, index, unicode) { + return index + (unicode ? charAt(S, index).length : 1); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-substitution.js +var require_get_substitution = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-substitution.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toObject = require_to_object(); + var floor = Math.floor; + var charAt = uncurryThis("".charAt); + var replace = uncurryThis("".replace); + var stringSlice = uncurryThis("".slice); + var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g; + var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g; + module2.exports = function(matched, str, position, captures, namedCaptures, replacement) { + var tailPos = position + matched.length; + var m = captures.length; + var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED; + if (namedCaptures !== void 0) { + namedCaptures = toObject(namedCaptures); + symbols = SUBSTITUTION_SYMBOLS; + } + return replace(replacement, symbols, function(match, ch) { + var capture; + switch (charAt(ch, 0)) { + case "$": + return "$"; + case "&": + return matched; + case "`": + return stringSlice(str, 0, position); + case "'": + return stringSlice(str, tailPos); + case "<": + capture = namedCaptures[stringSlice(ch, 1, -1)]; + break; + default: + var n = +ch; + if (n === 0) + return match; + if (n > m) { + var f = floor(n / 10); + if (f === 0) + return match; + if (f <= m) + return captures[f - 1] === void 0 ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1); + return match; + } + capture = captures[n - 1]; + } + return capture === void 0 ? "" : capture; + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-exec-abstract.js +var require_regexp_exec_abstract = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-exec-abstract.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var anObject = require_an_object(); + var isCallable = require_is_callable(); + var classof = require_classof_raw(); + var regexpExec = require_regexp_exec(); + var $TypeError = TypeError; + module2.exports = function(R, S) { + var exec = R.exec; + if (isCallable(exec)) { + var result = call(exec, R, S); + if (result !== null) + anObject(result); + return result; + } + if (classof(R) === "RegExp") + return call(regexpExec, R, S); + throw new $TypeError("RegExp#exec called on incompatible receiver"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.replace.js +var require_es_string_replace = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.replace.js": function() { + "use strict"; + var apply = require_function_apply(); + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var fixRegExpWellKnownSymbolLogic = require_fix_regexp_well_known_symbol_logic(); + var fails = require_fails(); + var anObject = require_an_object(); + var isCallable = require_is_callable(); + var isNullOrUndefined = require_is_null_or_undefined(); + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var toLength = require_to_length(); + var toString = require_to_string(); + var requireObjectCoercible = require_require_object_coercible(); + var advanceStringIndex = require_advance_string_index(); + var getMethod = require_get_method(); + var getSubstitution = require_get_substitution(); + var regExpExec = require_regexp_exec_abstract(); + var wellKnownSymbol = require_well_known_symbol(); + var REPLACE = wellKnownSymbol("replace"); + var max = Math.max; + var min = Math.min; + var concat = uncurryThis([].concat); + var push = uncurryThis([].push); + var stringIndexOf = uncurryThis("".indexOf); + var stringSlice = uncurryThis("".slice); + var maybeToString = function(it) { + return it === void 0 ? it : String(it); + }; + var REPLACE_KEEPS_$0 = function() { + return "a".replace(/./, "$0") === "$0"; + }(); + var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = function() { + if (/./[REPLACE]) { + return /./[REPLACE]("a", "$0") === ""; + } + return false; + }(); + var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function() { + var re = /./; + re.exec = function() { + var result = []; + result.groups = { a: "7" }; + return result; + }; + return "".replace(re, "$") !== "7"; + }); + fixRegExpWellKnownSymbolLogic("replace", function(_, nativeReplace, maybeCallNative) { + var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? "$" : "$0"; + return [ + // `String.prototype.replace` method + // https://tc39.es/ecma262/#sec-string.prototype.replace + function replace(searchValue, replaceValue) { + var O = requireObjectCoercible(this); + var replacer = isNullOrUndefined(searchValue) ? void 0 : getMethod(searchValue, REPLACE); + return replacer ? call(replacer, searchValue, O, replaceValue) : call(nativeReplace, toString(O), searchValue, replaceValue); + }, + // `RegExp.prototype[@@replace]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace + function(string, replaceValue) { + var rx = anObject(this); + var S = toString(string); + if (typeof replaceValue == "string" && stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 && stringIndexOf(replaceValue, "$<") === -1) { + var res = maybeCallNative(nativeReplace, rx, S, replaceValue); + if (res.done) + return res.value; + } + var functionalReplace = isCallable(replaceValue); + if (!functionalReplace) + replaceValue = toString(replaceValue); + var global2 = rx.global; + var fullUnicode; + if (global2) { + fullUnicode = rx.unicode; + rx.lastIndex = 0; + } + var results = []; + var result; + while (true) { + result = regExpExec(rx, S); + if (result === null) + break; + push(results, result); + if (!global2) + break; + var matchStr = toString(result[0]); + if (matchStr === "") + rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); + } + var accumulatedResult = ""; + var nextSourcePosition = 0; + for (var i = 0; i < results.length; i++) { + result = results[i]; + var matched = toString(result[0]); + var position = max(min(toIntegerOrInfinity(result.index), S.length), 0); + var captures = []; + var replacement; + for (var j = 1; j < result.length; j++) + push(captures, maybeToString(result[j])); + var namedCaptures = result.groups; + if (functionalReplace) { + var replacerArgs = concat([matched], captures, position, S); + if (namedCaptures !== void 0) + push(replacerArgs, namedCaptures); + replacement = toString(apply(replaceValue, void 0, replacerArgs)); + } else { + replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue); + } + if (position >= nextSourcePosition) { + accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement; + nextSourcePosition = position + matched.length; + } + } + return accumulatedResult + stringSlice(S, nextSourcePosition); + } + ]; + }, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-constructor.js +var require_a_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-constructor.js": function(exports2, module2) { + "use strict"; + var isConstructor = require_is_constructor(); + var tryToString = require_try_to_string(); + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isConstructor(argument)) + return argument; + throw new $TypeError(tryToString(argument) + " is not a constructor"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/species-constructor.js +var require_species_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/species-constructor.js": function(exports2, module2) { + "use strict"; + var anObject = require_an_object(); + var aConstructor = require_a_constructor(); + var isNullOrUndefined = require_is_null_or_undefined(); + var wellKnownSymbol = require_well_known_symbol(); + var SPECIES = wellKnownSymbol("species"); + module2.exports = function(O, defaultConstructor) { + var C = anObject(O).constructor; + var S; + return C === void 0 || isNullOrUndefined(S = anObject(C)[SPECIES]) ? defaultConstructor : aConstructor(S); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.split.js +var require_es_string_split = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.split.js": function() { + "use strict"; + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var fixRegExpWellKnownSymbolLogic = require_fix_regexp_well_known_symbol_logic(); + var anObject = require_an_object(); + var isNullOrUndefined = require_is_null_or_undefined(); + var requireObjectCoercible = require_require_object_coercible(); + var speciesConstructor = require_species_constructor(); + var advanceStringIndex = require_advance_string_index(); + var toLength = require_to_length(); + var toString = require_to_string(); + var getMethod = require_get_method(); + var regExpExec = require_regexp_exec_abstract(); + var stickyHelpers = require_regexp_sticky_helpers(); + var fails = require_fails(); + var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y; + var MAX_UINT32 = 4294967295; + var min = Math.min; + var push = uncurryThis([].push); + var stringSlice = uncurryThis("".slice); + var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function() { + var re = /(?:)/; + var originalExec = re.exec; + re.exec = function() { + return originalExec.apply(this, arguments); + }; + var result = "ab".split(re); + return result.length !== 2 || result[0] !== "a" || result[1] !== "b"; + }); + var BUGGY = "abbc".split(/(b)*/)[1] === "c" || // eslint-disable-next-line regexp/no-empty-group -- required for testing + "test".split(/(?:)/, -1).length !== 4 || "ab".split(/(?:ab)*/).length !== 2 || ".".split(/(.?)(.?)/).length !== 4 || // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing + ".".split(/()()/).length > 1 || "".split(/.?/).length; + fixRegExpWellKnownSymbolLogic("split", function(SPLIT, nativeSplit, maybeCallNative) { + var internalSplit = "0".split(void 0, 0).length ? function(separator, limit) { + return separator === void 0 && limit === 0 ? [] : call(nativeSplit, this, separator, limit); + } : nativeSplit; + return [ + // `String.prototype.split` method + // https://tc39.es/ecma262/#sec-string.prototype.split + function split(separator, limit) { + var O = requireObjectCoercible(this); + var splitter = isNullOrUndefined(separator) ? void 0 : getMethod(separator, SPLIT); + return splitter ? call(splitter, separator, O, limit) : call(internalSplit, toString(O), separator, limit); + }, + // `RegExp.prototype[@@split]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@split + // + // NOTE: This cannot be properly polyfilled in engines that don't support + // the 'y' flag. + function(string, limit) { + var rx = anObject(this); + var S = toString(string); + if (!BUGGY) { + var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit); + if (res.done) + return res.value; + } + var C = speciesConstructor(rx, RegExp); + var unicodeMatching = rx.unicode; + var flags = (rx.ignoreCase ? "i" : "") + (rx.multiline ? "m" : "") + (rx.unicode ? "u" : "") + (UNSUPPORTED_Y ? "g" : "y"); + var splitter = new C(UNSUPPORTED_Y ? "^(?:" + rx.source + ")" : rx, flags); + var lim = limit === void 0 ? MAX_UINT32 : limit >>> 0; + if (lim === 0) + return []; + if (S.length === 0) + return regExpExec(splitter, S) === null ? [S] : []; + var p = 0; + var q = 0; + var A = []; + while (q < S.length) { + splitter.lastIndex = UNSUPPORTED_Y ? 0 : q; + var z = regExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S); + var e; + if (z === null || (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p) { + q = advanceStringIndex(S, q, unicodeMatching); + } else { + push(A, stringSlice(S, p, q)); + if (A.length === lim) + return A; + for (var i = 1; i <= z.length - 1; i++) { + push(A, z[i]); + if (A.length === lim) + return A; + } + q = p = e; + } + } + push(A, stringSlice(S, p)); + return A; + } + ]; + }, BUGGY || !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/whitespaces.js +var require_whitespaces = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/whitespaces.js": function(exports2, module2) { + "use strict"; + module2.exports = " \n\v\f\r                 \u2028\u2029\uFEFF"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-trim.js +var require_string_trim = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-trim.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var requireObjectCoercible = require_require_object_coercible(); + var toString = require_to_string(); + var whitespaces = require_whitespaces(); + var replace = uncurryThis("".replace); + var ltrim = RegExp("^[" + whitespaces + "]+"); + var rtrim = RegExp("(^|[^" + whitespaces + "])[" + whitespaces + "]+$"); + var createMethod = function(TYPE) { + return function($this) { + var string = toString(requireObjectCoercible($this)); + if (TYPE & 1) + string = replace(string, ltrim, ""); + if (TYPE & 2) + string = replace(string, rtrim, "$1"); + return string; + }; + }; + module2.exports = { + // `String.prototype.{ trimLeft, trimStart }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimstart + start: createMethod(1), + // `String.prototype.{ trimRight, trimEnd }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimend + end: createMethod(2), + // `String.prototype.trim` method + // https://tc39.es/ecma262/#sec-string.prototype.trim + trim: createMethod(3) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-trim-forced.js +var require_string_trim_forced = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-trim-forced.js": function(exports2, module2) { + "use strict"; + var PROPER_FUNCTION_NAME = require_function_name().PROPER; + var fails = require_fails(); + var whitespaces = require_whitespaces(); + var non = "​…᠎"; + module2.exports = function(METHOD_NAME) { + return fails(function() { + return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() !== non || PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME; + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.trim.js +var require_es_string_trim = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.trim.js": function() { + "use strict"; + var $ = require_export(); + var $trim = require_string_trim().trim; + var forcedStringTrimMethod = require_string_trim_forced(); + $({ target: "String", proto: true, forced: forcedStringTrimMethod("trim") }, { + trim: function trim() { + return $trim(this); + } + }); + } +}); + +// dist/Toastify/Toastify.js +require_es_symbol(); +require_es_symbol_description(); +require_es_symbol_iterator(); +require_es_error_cause(); +require_es_error_to_string(); +require_es_array_from(); +require_es_array_iterator(); +require_es_array_slice(); +require_es_object_to_string(); +require_es_regexp_test(); +require_es_regexp_to_string(); +require_es_string_iterator(); +init_DOMTokenList2(); +init_DOMTokenList_prototype_replace(); +require_es_array_index_of(); +require_es_object_define_property(); +require_es_object_get_own_property_descriptor(); +require_es_object_get_own_property_names(); +require_es_object_get_prototype_of(); +require_es_regexp_exec(); +require_es_string_replace(); +require_es_string_split(); +require_es_string_trim(); +function _createForOfIteratorHelper(o, allowArrayLike) { + var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; + if (!it) { + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) + o = it; + var i = 0; + var F = function F2() { + }; + return { s: F, n: function n() { + if (i >= o.length) + return { done: true }; + return { done: false, value: o[i++] }; + }, e: function e(_e) { + throw _e; + }, f: F }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + var normalCompletion = true, didErr = false, err; + return { s: function s() { + it = it.call(o); + }, n: function n() { + var step = it.next(); + normalCompletion = step.done; + return step; + }, e: function e(_e2) { + didErr = true; + err = _e2; + }, f: function f() { + try { + if (!normalCompletion && it["return"] != null) + it["return"](); + } finally { + if (didErr) + throw err; + } + } }; +} +function _unsupportedIterableToArray(o, minLen) { + if (!o) + return; + if (typeof o === "string") + return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) + n = o.constructor.name; + if (n === "Map" || n === "Set") + return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) + return _arrayLikeToArray(o, minLen); +} +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) + len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) + arr2[i] = arr[i]; + return arr2; +} +function _typeof(o) { + "@babel/helpers - typeof"; + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof(o); +} +var __create = Object.create; +var __defProp2 = Object.defineProperty; +var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; +var __getOwnPropNames2 = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp2 = Object.prototype.hasOwnProperty; +var __commonJS2 = function __commonJS3(cb, mod) { + return function __require() { + return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { + exports: {} + }).exports, mod), mod.exports; + }; +}; +var __export = function __export2(target, all) { + for (var name in all) + __defProp2(target, name, { + get: all[name], + enumerable: true + }); +}; +var __copyProps2 = function __copyProps3(to, from, except, desc) { + if (from && _typeof(from) === "object" || typeof from === "function") { + var _iterator = _createForOfIteratorHelper(__getOwnPropNames2(from)), _step; + try { + var _loop = function _loop2() { + var key = _step.value; + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { + get: function get() { + return from[key]; + }, + enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable + }); + }; + for (_iterator.s(); !(_step = _iterator.n()).done; ) { + _loop(); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } + return to; +}; +var __toESM = function __toESM2(mod, isNodeMode, target) { + return target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps2( + // 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 ? __defProp2(target, "default", { + value: mod, + enumerable: true + }) : target, + mod + ); +}; +var __toCommonJS2 = function __toCommonJS3(mod) { + return __copyProps2(__defProp2({}, "__esModule", { + value: true + }), mod); +}; +var require_toastify = __commonJS2({ + "node_modules/.pnpm/toastify-js@1.12.0/node_modules/toastify-js/src/toastify.js": function node_modulesPnpmToastifyJs1120Node_modulesToastifyJsSrcToastifyJs(exports2, module2) { + /*! + * Toastify js 1.12.0 + * https://github.com/apvarun/toastify-js + * @license MIT licensed + * + * Copyright (C) 2018 Varun A P + */ + (function(root, factory) { + if (_typeof(module2) === "object" && module2.exports) { + module2.exports = factory(); + } else { + root.Toastify = factory(); + } + })(exports2, function(global2) { + var Toastify2 = function Toastify22(options) { + return new Toastify22.lib.init(options); + }, version = "1.12.0"; + Toastify2.defaults = { + oldestFirst: true, + text: "Toastify is awesome!", + node: void 0, + duration: 3e3, + selector: void 0, + callback: function callback() { + }, + destination: void 0, + newWindow: false, + close: false, + gravity: "toastify-top", + positionLeft: false, + position: "", + backgroundColor: "", + avatar: "", + className: "", + stopOnFocus: true, + onClick: function onClick() { + }, + offset: { + x: 0, + y: 0 + }, + escapeMarkup: true, + ariaLive: "polite", + style: { + background: "" + } + }; + Toastify2.lib = Toastify2.prototype = { + toastify: version, + constructor: Toastify2, + // Initializing the object with required parameters + init: function init(options) { + if (!options) { + options = {}; + } + this.options = {}; + this.toastElement = null; + this.options.text = options.text || Toastify2.defaults.text; + this.options.node = options.node || Toastify2.defaults.node; + this.options.duration = options.duration === 0 ? 0 : options.duration || Toastify2.defaults.duration; + this.options.selector = options.selector || Toastify2.defaults.selector; + this.options.callback = options.callback || Toastify2.defaults.callback; + this.options.destination = options.destination || Toastify2.defaults.destination; + this.options.newWindow = options.newWindow || Toastify2.defaults.newWindow; + this.options.close = options.close || Toastify2.defaults.close; + this.options.gravity = options.gravity === "bottom" ? "toastify-bottom" : Toastify2.defaults.gravity; + this.options.positionLeft = options.positionLeft || Toastify2.defaults.positionLeft; + this.options.position = options.position || Toastify2.defaults.position; + this.options.backgroundColor = options.backgroundColor || Toastify2.defaults.backgroundColor; + this.options.avatar = options.avatar || Toastify2.defaults.avatar; + this.options.className = options.className || Toastify2.defaults.className; + this.options.stopOnFocus = options.stopOnFocus === void 0 ? Toastify2.defaults.stopOnFocus : options.stopOnFocus; + this.options.onClick = options.onClick || Toastify2.defaults.onClick; + this.options.offset = options.offset || Toastify2.defaults.offset; + this.options.escapeMarkup = options.escapeMarkup !== void 0 ? options.escapeMarkup : Toastify2.defaults.escapeMarkup; + this.options.ariaLive = options.ariaLive || Toastify2.defaults.ariaLive; + this.options.style = options.style || Toastify2.defaults.style; + if (options.backgroundColor) { + this.options.style.background = options.backgroundColor; + } + return this; + }, + // Building the DOM element + buildToast: function buildToast() { + if (!this.options) { + throw "Toastify is not initialized"; + } + var divElement = document.createElement("div"); + divElement.className = "toastify on " + this.options.className; + if (!!this.options.position) { + divElement.className += " toastify-" + this.options.position; + } else { + if (this.options.positionLeft === true) { + divElement.className += " toastify-left"; + console.warn("Property `positionLeft` will be depreciated in further versions. Please use `position` instead."); + } else { + divElement.className += " toastify-right"; + } + } + divElement.className += " " + this.options.gravity; + if (this.options.backgroundColor) { + console.warn('DEPRECATION NOTICE: "backgroundColor" is being deprecated. Please use the "style.background" property.'); + } + for (var property in this.options.style) { + divElement.style[property] = this.options.style[property]; + } + if (this.options.ariaLive) { + divElement.setAttribute("aria-live", this.options.ariaLive); + } + if (this.options.node && this.options.node.nodeType === Node.ELEMENT_NODE) { + divElement.appendChild(this.options.node); + } else { + if (this.options.escapeMarkup) { + divElement.innerText = this.options.text; + } else { + divElement.innerHTML = this.options.text; + } + if (this.options.avatar !== "") { + var avatarElement = document.createElement("img"); + avatarElement.src = this.options.avatar; + avatarElement.className = "toastify-avatar"; + if (this.options.position == "left" || this.options.positionLeft === true) { + divElement.appendChild(avatarElement); + } else { + divElement.insertAdjacentElement("afterbegin", avatarElement); + } + } + } + if (this.options.close === true) { + var closeElement = document.createElement("button"); + closeElement.type = "button"; + closeElement.setAttribute("aria-label", "Close"); + closeElement.className = "toast-close"; + closeElement.innerHTML = "✖"; + closeElement.addEventListener("click", function(event) { + event.stopPropagation(); + this.removeElement(this.toastElement); + window.clearTimeout(this.toastElement.timeOutValue); + }.bind(this)); + var width = window.innerWidth > 0 ? window.innerWidth : screen.width; + if ((this.options.position == "left" || this.options.positionLeft === true) && width > 360) { + divElement.insertAdjacentElement("afterbegin", closeElement); + } else { + divElement.appendChild(closeElement); + } + } + if (this.options.stopOnFocus && this.options.duration > 0) { + var self2 = this; + divElement.addEventListener("mouseover", function(event) { + window.clearTimeout(divElement.timeOutValue); + }); + divElement.addEventListener("mouseleave", function() { + divElement.timeOutValue = window.setTimeout(function() { + self2.removeElement(divElement); + }, self2.options.duration); + }); + } + if (typeof this.options.destination !== "undefined") { + divElement.addEventListener("click", function(event) { + event.stopPropagation(); + if (this.options.newWindow === true) { + window.open(this.options.destination, "_blank"); + } else { + window.location = this.options.destination; + } + }.bind(this)); + } + if (typeof this.options.onClick === "function" && typeof this.options.destination === "undefined") { + divElement.addEventListener("click", function(event) { + event.stopPropagation(); + this.options.onClick(); + }.bind(this)); + } + if (_typeof(this.options.offset) === "object") { + var x = getAxisOffsetAValue("x", this.options); + var y = getAxisOffsetAValue("y", this.options); + var xOffset = this.options.position == "left" ? x : "-" + x; + var yOffset = this.options.gravity == "toastify-top" ? y : "-" + y; + divElement.style.transform = "translate(" + xOffset + "," + yOffset + ")"; + } + return divElement; + }, + // Displaying the toast + showToast: function showToast() { + this.toastElement = this.buildToast(); + var rootElement; + if (typeof this.options.selector === "string") { + rootElement = document.getElementById(this.options.selector); + } else if (this.options.selector instanceof HTMLElement || typeof ShadowRoot !== "undefined" && this.options.selector instanceof ShadowRoot) { + rootElement = this.options.selector; + } else { + rootElement = document.body; + } + if (!rootElement) { + throw "Root element is not defined"; + } + var elementToInsert = Toastify2.defaults.oldestFirst ? rootElement.firstChild : rootElement.lastChild; + rootElement.insertBefore(this.toastElement, elementToInsert); + Toastify2.reposition(); + if (this.options.duration > 0) { + this.toastElement.timeOutValue = window.setTimeout(function() { + this.removeElement(this.toastElement); + }.bind(this), this.options.duration); + } + return this; + }, + hideToast: function hideToast() { + if (this.toastElement.timeOutValue) { + clearTimeout(this.toastElement.timeOutValue); + } + this.removeElement(this.toastElement); + }, + // Removing the element from the DOM + removeElement: function removeElement(toastElement) { + toastElement.className = toastElement.className.replace(" on", ""); + window.setTimeout(function() { + if (this.options.node && this.options.node.parentNode) { + this.options.node.parentNode.removeChild(this.options.node); + } + if (toastElement.parentNode) { + toastElement.parentNode.removeChild(toastElement); + } + this.options.callback.call(toastElement); + Toastify2.reposition(); + }.bind(this), 400); + } + }; + Toastify2.reposition = function() { + var topLeftOffsetSize = { + top: 15, + bottom: 15 + }; + var topRightOffsetSize = { + top: 15, + bottom: 15 + }; + var offsetSize = { + top: 15, + bottom: 15 + }; + var allToasts = document.getElementsByClassName("toastify"); + var classUsed; + for (var i = 0; i < allToasts.length; i++) { + if (containsClass(allToasts[i], "toastify-top") === true) { + classUsed = "toastify-top"; + } else { + classUsed = "toastify-bottom"; + } + var height = allToasts[i].offsetHeight; + classUsed = classUsed.substr(9, classUsed.length - 1); + var offset = 15; + var width = window.innerWidth > 0 ? window.innerWidth : screen.width; + if (width <= 360) { + allToasts[i].style[classUsed] = offsetSize[classUsed] + "px"; + offsetSize[classUsed] += height + offset; + } else { + if (containsClass(allToasts[i], "toastify-left") === true) { + allToasts[i].style[classUsed] = topLeftOffsetSize[classUsed] + "px"; + topLeftOffsetSize[classUsed] += height + offset; + } else { + allToasts[i].style[classUsed] = topRightOffsetSize[classUsed] + "px"; + topRightOffsetSize[classUsed] += height + offset; + } + } + } + return this; + }; + function getAxisOffsetAValue(axis, options) { + if (options.offset[axis]) { + if (isNaN(options.offset[axis])) { + return options.offset[axis]; + } else { + return options.offset[axis] + "px"; + } + } + return "0px"; + } + function containsClass(elem, yourClass) { + if (!elem || typeof yourClass !== "string") { + return false; + } else if (elem.className && elem.className.trim().split(/\s+/gi).indexOf(yourClass) > -1) { + return true; + } else { + return false; + } + } + Toastify2.lib.init.prototype = Toastify2.lib; + return Toastify2; + }); + } +}); +//! src/Toastify/Toastify.ts +var Toastify_exports = {}; +__export(Toastify_exports, { + toastify: function toastify() { + return _toastify; + } +}); +module.exports = __toCommonJS2(Toastify_exports); +var import_toastify_js = __toESM(require_toastify(), 1); +var _toastify = function _toastify2(options, type) { + var _options; + (_options = options) !== null && _options !== void 0 ? _options : options = {}; + var className = "gadget-toastify"; + if (type) { + switch (type) { + case "error": + className += " ".concat(className, "--error"); + break; + case "success": + className += " ".concat(className, "--success"); + break; + case "warning": + className += " ".concat(className, "--warning"); + break; + default: + className += " ".concat(className, "--info"); + } + } + options.className = className; + if (!options.gravity) { + options.gravity = "bottom"; + } + if (!options.position) { + options.position = "center"; + } + var instance = (0, import_toastify_js["default"])(options); + instance.showToast(); + return { + hideToast: instance.hideToast.bind(instance) + }; +}; + +})(); + +/* */ + +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZm9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcG9zc2libGUtcHJvdG90eXBlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb3h5LWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93cmFwLWVycm9yLWNvbnN0cnVjdG9yLXdpdGgtY2F1c2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IudG8tc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1mcm9tLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZyb20uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRlc3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZ2V0LWZsYWdzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjEvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX0RPTVRva2VuTGlzdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjEvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvRE9NVG9rZW5MaXN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuMS9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9ET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlcGxhY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluZGV4LW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1zdWJzdGl0dXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtY29uc3RydWN0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zcGxpdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3doaXRlc3BhY2VzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLXRyaW0uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL3RvYXN0aWZ5LWpzQDEuMTIuMC9ub2RlX21vZHVsZXMvdG9hc3RpZnktanMvc3JjL3RvYXN0aWZ5LmpzIiwgInNyYy9Ub2FzdGlmeS9Ub2FzdGlmeS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3RcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSkgOiBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgbmF2aWdhdG9yICE9ICd1bmRlZmluZWQnICYmIFN0cmluZyhuYXZpZ2F0b3IudXNlckFnZW50KSB8fCAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWwuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFRoaXNbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxuKHN0b3JlLnZlcnNpb25zIHx8IChzdG9yZS52ZXJzaW9ucyA9IFtdKSkucHVzaCh7XG4gIHZlcnNpb246ICczLjM2LjAnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjM2LjAvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGxlbiA9IHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuICByZXR1cm4gbGVuID4gMCA/IG1pbihsZW4sIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFtUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFtUQVJHRVRdICYmIGdsb2JhbFtUQVJHRVRdLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLmRvbnRDYWxsR2V0U2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gdHlwZW9mIHRhcmdldFByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KTtcbiAgICB9XG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoc291cmNlUHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuICAgIGRlZmluZUJ1aWx0SW4odGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gJE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoY2xhc3NvZihhcmd1bWVudCkgPT09ICdTeW1ib2wnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZycpO1xuICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyAmJiAhVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIHByb3BzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgLS0gb2xkIElFLCBXU0ggKi9cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIGFjdGl2ZVhEb2N1bWVudCA9IG51bGw7IC8vIGF2b2lkIG1lbW9yeSBsZWFrXG4gIHJldHVybiB0ZW1wO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUlGcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHZhciBKUyA9ICdqYXZhJyArIFNDUklQVCArICc6JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaHRtbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDc1XG4gIGlmcmFtZS5zcmMgPSBTdHJpbmcoSlMpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnZG9jdW1lbnQuRj1PYmplY3QnKSk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIHJldHVybiBpZnJhbWVEb2N1bWVudC5GO1xufTtcblxuLy8gQ2hlY2sgZm9yIGRvY3VtZW50LmRvbWFpbiBhbmQgYWN0aXZlIHggc3VwcG9ydFxuLy8gTm8gbmVlZCB0byB1c2UgYWN0aXZlIHggYXBwcm9hY2ggd2hlbiBkb2N1bWVudC5kb21haW4gaXMgbm90IHNldFxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9pc3N1ZXMvMTUwXG4vLyB2YXJpYXRpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL2tpdGNhbWJyaWRnZS9lczUtc2hpbS9jb21taXQvNGY3MzhhYzA2NjM0NlxuLy8gYXZvaWQgSUUgR0MgYnVnXG52YXIgYWN0aXZlWERvY3VtZW50O1xudmFyIE51bGxQcm90b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBhY3RpdmVYRG9jdW1lbnQgPSBuZXcgQWN0aXZlWE9iamVjdCgnaHRtbGZpbGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogaWdub3JlICovIH1cbiAgTnVsbFByb3RvT2JqZWN0ID0gdHlwZW9mIGRvY3VtZW50ICE9ICd1bmRlZmluZWQnXG4gICAgPyBkb2N1bWVudC5kb21haW4gJiYgYWN0aXZlWERvY3VtZW50XG4gICAgICA/IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KSAvLyBvbGQgSUVcbiAgICAgIDogTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lKClcbiAgICA6IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KTsgLy8gV1NIXG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkgZGVsZXRlIE51bGxQcm90b09iamVjdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gTnVsbFByb3RvT2JqZWN0KCk7XG59O1xuXG5oaWRkZW5LZXlzW0lFX1BST1RPXSA9IHRydWU7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1jcmVhdGUgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5Q29uc3RydWN0b3IoKTtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IE51bGxQcm90b09iamVjdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZGVmaW5lUHJvcGVydGllc01vZHVsZS5mKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyhbXS5zbGljZSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZSAqL1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gYXJyYXlTbGljZSh3aW5kb3dOYW1lcyk7XG4gIH1cbn07XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiBjbGFzc29mKGl0KSA9PT0gJ1dpbmRvdydcbiAgICA/IGdldFdpbmRvd05hbWVzKGl0KVxuICAgIDogJGdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgaWYgKGRlc2NyaXB0b3IuZ2V0KSBtYWtlQnVpbHRJbihkZXNjcmlwdG9yLmdldCwgbmFtZSwgeyBnZXR0ZXI6IHRydWUgfSk7XG4gIGlmIChkZXNjcmlwdG9yLnNldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5zZXQsIG5hbWUsIHsgc2V0dGVyOiB0cnVlIH0pO1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbmV4cG9ydHMuZiA9IHdlbGxLbm93blN5bWJvbDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICB2YXIgU3ltYm9sID0gcGF0aC5TeW1ib2wgfHwgKHBhdGguU3ltYm9sID0ge30pO1xuICBpZiAoIWhhc093bihTeW1ib2wsIE5BTUUpKSBkZWZpbmVQcm9wZXJ0eShTeW1ib2wsIE5BTUUsIHtcbiAgICB2YWx1ZTogd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKE5BTUUpXG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICB2YXIgU3ltYm9sUHJvdG90eXBlID0gU3ltYm9sICYmIFN5bWJvbC5wcm90b3R5cGU7XG4gIHZhciB2YWx1ZU9mID0gU3ltYm9sUHJvdG90eXBlICYmIFN5bWJvbFByb3RvdHlwZS52YWx1ZU9mO1xuICB2YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4gIGlmIChTeW1ib2xQcm90b3R5cGUgJiYgIVN5bWJvbFByb3RvdHlwZVtUT19QUklNSVRJVkVdKSB7XG4gICAgLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciAubGVuZ3RoXG4gICAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsIFRPX1BSSU1JVElWRSwgZnVuY3Rpb24gKGhpbnQpIHtcbiAgICAgIHJldHVybiBjYWxsKHZhbHVlT2YsIHRoaXMpO1xuICAgIH0sIHsgYXJpdHk6IDEgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIFRBRywgU1RBVElDKSB7XG4gIGlmICh0YXJnZXQgJiYgIVNUQVRJQykgdGFyZ2V0ID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgaWYgKHRhcmdldCAmJiAhaGFzT3duKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuKSB7XG4gIC8vIE5hc2hvcm4gYnVnOlxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTI4XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMzBcbiAgaWYgKGNsYXNzb2ZSYXcoZm4pID09PSAnRnVuY3Rpb24nKSByZXR1cm4gdW5jdXJyeVRoaXMoZm4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGJpbmQgPSB1bmN1cnJ5VGhpcyh1bmN1cnJ5VGhpcy5iaW5kKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICByZXR1cm4gdGhhdCA9PT0gdW5kZWZpbmVkID8gZm4gOiBOQVRJVkVfQklORCA/IGJpbmQoZm4sIHRoYXQpIDogZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgY29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBjb25zdHJ1Y3RvclJlZ0V4cCA9IC9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi87XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGNvbnN0cnVjdG9yUmVnRXhwLmV4ZWMpO1xudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSAhY29uc3RydWN0b3JSZWdFeHAudGVzdChub29wKTtcblxudmFyIGlzQ29uc3RydWN0b3JNb2Rlcm4gPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdHJ1Y3Qobm9vcCwgW10sIGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBpc0NvbnN0cnVjdG9yTGVnYWN5ID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHN3aXRjaCAoY2xhc3NvZihhcmd1bWVudCkpIHtcbiAgICBjYXNlICdBc3luY0Z1bmN0aW9uJzpcbiAgICBjYXNlICdHZW5lcmF0b3JGdW5jdGlvbic6XG4gICAgY2FzZSAnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbic6IHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIC8vIHdlIGNhbid0IGNoZWNrIC5wcm90b3R5cGUgc2luY2UgY29uc3RydWN0b3JzIHByb2R1Y2VkIGJ5IC5iaW5kIGhhdmVuJ3QgaXRcbiAgICAvLyBgRnVuY3Rpb24jdG9TdHJpbmdgIHRocm93cyBvbiBzb21lIGJ1aWx0LWl0IGZ1bmN0aW9uIGluIHNvbWUgbGVnYWN5IGVuZ2luZXNcbiAgICAvLyAoZm9yIGV4YW1wbGUsIGBET01RdWFkYCBhbmQgc2ltaWxhciBpbiBGRjQxLSlcbiAgICByZXR1cm4gSU5DT1JSRUNUX1RPX1NUUklORyB8fCAhIWV4ZWMoY29uc3RydWN0b3JSZWdFeHAsIGluc3BlY3RTb3VyY2UoYXJndW1lbnQpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuaXNDb25zdHJ1Y3RvckxlZ2FjeS5zaGFtID0gdHJ1ZTtcblxuLy8gYElzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9ICFjb25zdHJ1Y3QgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgY2FsbGVkO1xuICByZXR1cm4gaXNDb25zdHJ1Y3Rvck1vZGVybihpc0NvbnN0cnVjdG9yTW9kZXJuLmNhbGwpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oT2JqZWN0KVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKGZ1bmN0aW9uICgpIHsgY2FsbGVkID0gdHJ1ZTsgfSlcbiAgICB8fCBjYWxsZWQ7XG59KSA/IGlzQ29uc3RydWN0b3JMZWdhY3kgOiBpc0NvbnN0cnVjdG9yTW9kZXJuO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyICRBcnJheSA9IEFycmF5O1xuXG4vLyBhIHBhcnQgb2YgYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWxBcnJheSkpIHtcbiAgICBDID0gb3JpZ2luYWxBcnJheS5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmIChpc0NvbnN0cnVjdG9yKEMpICYmIChDID09PSAkQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gJEFycmF5IDogQztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFycmF5U3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxuLy8gYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKGFycmF5U3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsQXJyYXkpKShsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCwgZmlsdGVyUmVqZWN0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09PSA2O1xuICB2YXIgSVNfRklMVEVSX1JFSkVDVCA9IFRZUEUgPT09IDc7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKHNlbGYpO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiB8fCBJU19GSUxURVJfUkVKRUNUID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAvLyBldmVyeVxuICAgICAgICAgIGNhc2UgNzogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJSZWplY3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlclJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuICBmaWx0ZXJSZWplY3Q6IGNyZWF0ZU1ldGhvZCg3KVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgbmF0aXZlT2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcblxudmFyIEhJRERFTiA9IHNoYXJlZEtleSgnaGlkZGVuJyk7XG52YXIgU1lNQk9MID0gJ1N5bWJvbCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNZTUJPTCk7XG5cbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sICYmICRTeW1ib2xbUFJPVE9UWVBFXTtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZjtcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvdHlwZVN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBVU0VfU0VUVEVSID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIHZhciBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgUCk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKSBkZWxldGUgT2JqZWN0UHJvdG90eXBlW1BdO1xuICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgJiYgTyAhPT0gT2JqZWN0UHJvdG90eXBlKSB7XG4gICAgbmF0aXZlRGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlLCBQLCBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKTtcbiAgfVxufTtcblxudmFyIHNldFN5bWJvbERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RDcmVhdGUobmF0aXZlRGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT09IDc7XG59KSA/IGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgOiBuYXRpdmVEZWZpbmVQcm9wZXJ0eTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnLCBkZXNjcmlwdGlvbikge1xuICB2YXIgc3ltYm9sID0gQWxsU3ltYm9sc1t0YWddID0gbmF0aXZlT2JqZWN0Q3JlYXRlKFN5bWJvbFByb3RvdHlwZSk7XG4gIHNldEludGVybmFsU3RhdGUoc3ltYm9sLCB7XG4gICAgdHlwZTogU1lNQk9MLFxuICAgIHRhZzogdGFnLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICB9KTtcbiAgaWYgKCFERVNDUklQVE9SUykgc3ltYm9sLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gIHJldHVybiBzeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBpZiAoTyA9PT0gT2JqZWN0UHJvdG90eXBlKSAkZGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCwgQXR0cmlidXRlcyk7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghQXR0cmlidXRlcy5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhc093bihPLCBISURERU4pKSBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBISURERU4sIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCBuYXRpdmVPYmplY3RDcmVhdGUobnVsbCkpKTtcbiAgICAgIE9bSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc093bihPLCBISURERU4pICYmIE9bSElEREVOXVtrZXldKSBPW0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgQXR0cmlidXRlcyA9IG5hdGl2ZU9iamVjdENyZWF0ZShBdHRyaWJ1dGVzLCB7IGVudW1lcmFibGU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzY3JpcHRvcihPLCBrZXksIEF0dHJpYnV0ZXMpO1xuICB9IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBrZXksIEF0dHJpYnV0ZXMpO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcGVydGllcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKHByb3BlcnRpZXMpLmNvbmNhdCgkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHByb3BlcnRpZXMpKTtcbiAgJGZvckVhY2goa2V5cywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbCgkcHJvcGVydHlJc0VudW1lcmFibGUsIHByb3BlcnRpZXMsIGtleSkpICRkZWZpbmVQcm9wZXJ0eShPLCBrZXksIHByb3BlcnRpZXNba2V5XSk7XG4gIH0pO1xuICByZXR1cm4gTztcbn07XG5cbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IG5hdGl2ZU9iamVjdENyZWF0ZShPKSA6ICRkZWZpbmVQcm9wZXJ0aWVzKG5hdGl2ZU9iamVjdENyZWF0ZShPKSwgUHJvcGVydGllcyk7XG59O1xuXG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgUCA9IHRvUHJvcGVydHlLZXkoVik7XG4gIHZhciBlbnVtZXJhYmxlID0gY2FsbChuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSwgdGhpcywgUCk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIFApICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGVudW1lcmFibGUgfHwgIWhhc093bih0aGlzLCBQKSB8fCAhaGFzT3duKEFsbFN5bWJvbHMsIFApIHx8IGhhc093bih0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtQXVxuICAgID8gZW51bWVyYWJsZSA6IHRydWU7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIHZhciBpdCA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgZGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXNPd24oaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkge1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKGhpZGRlbktleXMsIGtleSkpIHB1c2gocmVzdWx0LCBrZXkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gKE8pIHtcbiAgdmFyIElTX09CSkVDVF9QUk9UT1RZUEUgPSBPID09PSBPYmplY3RQcm90b3R5cGU7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMoSVNfT0JKRUNUX1BST1RPVFlQRSA/IE9iamVjdFByb3RvdHlwZVN5bWJvbHMgOiB0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICghSVNfT0JKRUNUX1BST1RPVFlQRSB8fCBoYXNPd24oT2JqZWN0UHJvdG90eXBlLCBrZXkpKSkge1xuICAgICAgcHVzaChyZXN1bHQsIEFsbFN5bWJvbHNba2V5XSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIGBTeW1ib2xgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC1jb25zdHJ1Y3RvclxuaWYgKCFOQVRJVkVfU1lNQk9MKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKGlzUHJvdG90eXBlT2YoU3ltYm9sUHJvdG90eXBlLCB0aGlzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gIWFyZ3VtZW50cy5sZW5ndGggfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiAkdG9TdHJpbmcoYXJndW1lbnRzWzBdKTtcbiAgICB2YXIgdGFnID0gdWlkKGRlc2NyaXB0aW9uKTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB2YXIgJHRoaXMgPSB0aGlzID09PSB1bmRlZmluZWQgPyBnbG9iYWwgOiB0aGlzO1xuICAgICAgaWYgKCR0aGlzID09PSBPYmplY3RQcm90b3R5cGUpIGNhbGwoc2V0dGVyLCBPYmplY3RQcm90b3R5cGVTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzT3duKCR0aGlzLCBISURERU4pICYmIGhhc093bigkdGhpc1tISURERU5dLCB0YWcpKSAkdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFN5bWJvbERlc2NyaXB0b3IoJHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFJhbmdlRXJyb3IpKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSgkdGhpcywgdGFnLCBkZXNjcmlwdG9yKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBVU0VfU0VUVEVSKSBzZXRTeW1ib2xEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiBzZXR0ZXIgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnLCBkZXNjcmlwdGlvbik7XG4gIH07XG5cbiAgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbFtQUk9UT1RZUEVdO1xuXG4gIGRlZmluZUJ1aWx0SW4oU3ltYm9sUHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS50YWc7XG4gIH0pO1xuXG4gIGRlZmluZUJ1aWx0SW4oJFN5bWJvbCwgJ3dpdGhvdXRTZXR0ZXInLCBmdW5jdGlvbiAoZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4gd3JhcCh1aWQoZGVzY3JpcHRpb24pLCBkZXNjcmlwdGlvbik7XG4gIH0pO1xuXG4gIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIGRlZmluZVByb3BlcnR5TW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZiA9ICRkZWZpbmVQcm9wZXJ0aWVzO1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdlbGxLbm93blN5bWJvbChuYW1lKSwgbmFtZSk7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtU3ltYm9sLWRlc2NyaXB0aW9uXG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFN5bWJvbFByb3RvdHlwZSwgJ2Rlc2NyaXB0aW9uJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBkZXNjcmlwdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuZGVzY3JpcHRpb247XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFJU19QVVJFKSB7XG4gICAgICBkZWZpbmVCdWlsdEluKE9iamVjdFByb3RvdHlwZSwgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wsIHNoYW06ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgU3ltYm9sOiAkU3ltYm9sXG59KTtcblxuJGZvckVhY2gob2JqZWN0S2V5cyhXZWxsS25vd25TeW1ib2xzU3RvcmUpLCBmdW5jdGlvbiAobmFtZSkge1xuICBkZWZpbmVXZWxsS25vd25TeW1ib2wobmFtZSk7XG59KTtcblxuJCh7IHRhcmdldDogU1lNQk9MLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IGZhbHNlOyB9XG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIC8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Jcbn0pO1xuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXNcbn0pO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUoKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgU1lNQk9MKTtcblxuaGlkZGVuS2V5c1tISURERU5dID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSBzYWZlICovXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0wgJiYgISFTeW1ib2xbJ2ZvciddICYmICEhU3ltYm9sLmtleUZvcjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbicpO1xuXG52YXIgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3RyaW5nLXRvLXN5bWJvbC1yZWdpc3RyeScpO1xudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5mb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuZm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKGtleSk7XG4gICAgaWYgKGhhc093bihTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5LCBzdHJpbmcpKSByZXR1cm4gU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddO1xuICAgIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKShzdHJpbmcpO1xuICAgIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXSA9IHN5bWJvbDtcbiAgICBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bWJvbF0gPSBzdHJpbmc7XG4gICAgcmV0dXJuIHN5bWJvbDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbicpO1xuXG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xuXG4vLyBgU3ltYm9sLmtleUZvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5rZXlmb3JcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIH0sIHtcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBuZXcgVHlwZUVycm9yKHRyeVRvU3RyaW5nKHN5bSkgKyAnIGlzIG5vdCBhIHN5bWJvbCcpO1xuICAgIGlmIChoYXNPd24oU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSwgc3ltKSkgcmV0dXJuIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltXTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBhcHBseSA9IEZ1bmN0aW9uUHJvdG90eXBlLmFwcGx5O1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tcmVmbGVjdCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBSZWZsZWN0ID09ICdvYmplY3QnICYmIFJlZmxlY3QuYXBwbHkgfHwgKE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGFwcGx5KSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoYXBwbHksIGFyZ3VtZW50cyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlcGxhY2VyKSB7XG4gIGlmIChpc0NhbGxhYmxlKHJlcGxhY2VyKSkgcmV0dXJuIHJlcGxhY2VyO1xuICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXR1cm47XG4gIHZhciByYXdMZW5ndGggPSByZXBsYWNlci5sZW5ndGg7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3TGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlbWVudCA9IHJlcGxhY2VyW2ldO1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnc3RyaW5nJykgcHVzaChrZXlzLCBlbGVtZW50KTtcbiAgICBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnbnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnTnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnU3RyaW5nJykgcHVzaChrZXlzLCB0b1N0cmluZyhlbGVtZW50KSk7XG4gIH1cbiAgdmFyIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIHJvb3QgPSB0cnVlO1xuICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBpZiAocm9vdCkge1xuICAgICAgcm9vdCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgcmV0dXJuIHZhbHVlO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5c0xlbmd0aDsgaisrKSBpZiAoa2V5c1tqXSA9PT0ga2V5KSByZXR1cm4gdmFsdWU7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgZ2V0UmVwbGFjZXJGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbicpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkc3RyaW5naWZ5ID0gZ2V0QnVpbHRJbignSlNPTicsICdzdHJpbmdpZnknKTtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoLy4vLmV4ZWMpO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBudW1iZXJUb1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbnZhciB0ZXN0ZXIgPSAvW1xcdUQ4MDAtXFx1REZGRl0vZztcbnZhciBsb3cgPSAvXltcXHVEODAwLVxcdURCRkZdJC87XG52YXIgaGkgPSAvXltcXHVEQzAwLVxcdURGRkZdJC87XG5cbnZhciBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKSgnc3RyaW5naWZ5IGRldGVjdGlvbicpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICByZXR1cm4gJHN0cmluZ2lmeShbc3ltYm9sXSkgIT09ICdbbnVsbF0nXG4gICAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gICAgfHwgJHN0cmluZ2lmeSh7IGE6IHN5bWJvbCB9KSAhPT0gJ3t9J1xuICAgIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gICAgfHwgJHN0cmluZ2lmeShPYmplY3Qoc3ltYm9sKSkgIT09ICd7fSc7XG59KTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtd2VsbC1mb3JtZWQtc3RyaW5naWZ5XG52YXIgSUxMX0ZPUk1FRF9VTklDT0RFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHN0cmluZ2lmeSgnXFx1REYwNlxcdUQ4MzQnKSAhPT0gJ1wiXFxcXHVkZjA2XFxcXHVkODM0XCInXG4gICAgfHwgJHN0cmluZ2lmeSgnXFx1REVBRCcpICE9PSAnXCJcXFxcdWRlYWRcIic7XG59KTtcblxudmFyIHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4ID0gZnVuY3Rpb24gKGl0LCByZXBsYWNlcikge1xuICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgdmFyICRyZXBsYWNlciA9IGdldFJlcGxhY2VyRnVuY3Rpb24ocmVwbGFjZXIpO1xuICBpZiAoIWlzQ2FsbGFibGUoJHJlcGxhY2VyKSAmJiAoaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgYXJnc1sxXSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgLy8gc29tZSBvbGQgaW1wbGVtZW50YXRpb25zIChsaWtlIFdlYktpdCkgY291bGQgcGFzcyBudW1iZXJzIGFzIGtleXNcbiAgICBpZiAoaXNDYWxsYWJsZSgkcmVwbGFjZXIpKSB2YWx1ZSA9IGNhbGwoJHJlcGxhY2VyLCB0aGlzLCAkU3RyaW5nKGtleSksIHZhbHVlKTtcbiAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICB9O1xuICByZXR1cm4gYXBwbHkoJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG59O1xuXG52YXIgZml4SWxsRm9ybWVkID0gZnVuY3Rpb24gKG1hdGNoLCBvZmZzZXQsIHN0cmluZykge1xuICB2YXIgcHJldiA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCAtIDEpO1xuICB2YXIgbmV4dCA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCArIDEpO1xuICBpZiAoKGV4ZWMobG93LCBtYXRjaCkgJiYgIWV4ZWMoaGksIG5leHQpKSB8fCAoZXhlYyhoaSwgbWF0Y2gpICYmICFleGVjKGxvdywgcHJldikpKSB7XG4gICAgcmV0dXJuICdcXFxcdScgKyBudW1iZXJUb1N0cmluZyhjaGFyQ29kZUF0KG1hdGNoLCAwKSwgMTYpO1xuICB9IHJldHVybiBtYXRjaDtcbn07XG5cbmlmICgkc3RyaW5naWZ5KSB7XG4gIC8vIGBKU09OLnN0cmluZ2lmeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi5zdHJpbmdpZnlcbiAgJCh7IHRhcmdldDogJ0pTT04nLCBzdGF0OiB0cnVlLCBhcml0eTogMywgZm9yY2VkOiBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gfHwgSUxMX0ZPUk1FRF9VTklDT0RFIH0sIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICAgICAgdmFyIHJlc3VsdCA9IGFwcGx5KFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA/IHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4IDogJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG4gICAgICByZXR1cm4gSUxMX0ZPUk1FRF9VTklDT0RFICYmIHR5cGVvZiByZXN1bHQgPT0gJ3N0cmluZycgPyByZXBsYWNlKHJlc3VsdCwgdGVzdGVyLCBmaXhJbGxGb3JtZWQpIDogcmVzdWx0O1xuICAgIH1cbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG4vLyBWOCB+IENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbnZhciBGT1JDRUQgPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlzeW1ib2xzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyAkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRvT2JqZWN0KGl0KSkgOiBbXTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBzcGxpdCB0byBtb2R1bGVzIGxpc3RlZCBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zeW1ib2wuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3ltYm9sLmZvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zeW1ib2wua2V5LWZvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG4iLCAiLy8gYFN5bWJvbC5wcm90b3R5cGUuZGVzY3JpcHRpb25gIGdldHRlclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLmRlc2NyaXB0aW9uXG4ndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcblxudmFyIE5hdGl2ZVN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgU3ltYm9sUHJvdG90eXBlID0gTmF0aXZlU3ltYm9sICYmIE5hdGl2ZVN5bWJvbC5wcm90b3R5cGU7XG5cbmlmIChERVNDUklQVE9SUyAmJiBpc0NhbGxhYmxlKE5hdGl2ZVN5bWJvbCkgJiYgKCEoJ2Rlc2NyaXB0aW9uJyBpbiBTeW1ib2xQcm90b3R5cGUpIHx8XG4gIC8vIFNhZmFyaSAxMiBidWdcbiAgTmF0aXZlU3ltYm9sKCkuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZFxuKSkge1xuICB2YXIgRW1wdHlTdHJpbmdEZXNjcmlwdGlvblN0b3JlID0ge307XG4gIC8vIHdyYXAgU3ltYm9sIGNvbnN0cnVjdG9yIGZvciBjb3JyZWN0IHdvcmsgd2l0aCB1bmRlZmluZWQgZGVzY3JpcHRpb25cbiAgdmFyIFN5bWJvbFdyYXBwZXIgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0b1N0cmluZyhhcmd1bWVudHNbMF0pO1xuICAgIHZhciByZXN1bHQgPSBpc1Byb3RvdHlwZU9mKFN5bWJvbFByb3RvdHlwZSwgdGhpcylcbiAgICAgID8gbmV3IE5hdGl2ZVN5bWJvbChkZXNjcmlwdGlvbilcbiAgICAgIC8vIGluIEVkZ2UgMTMsIFN0cmluZyhTeW1ib2wodW5kZWZpbmVkKSkgPT09ICdTeW1ib2wodW5kZWZpbmVkKSdcbiAgICAgIDogZGVzY3JpcHRpb24gPT09IHVuZGVmaW5lZCA/IE5hdGl2ZVN5bWJvbCgpIDogTmF0aXZlU3ltYm9sKGRlc2NyaXB0aW9uKTtcbiAgICBpZiAoZGVzY3JpcHRpb24gPT09ICcnKSBFbXB0eVN0cmluZ0Rlc2NyaXB0aW9uU3RvcmVbcmVzdWx0XSA9IHRydWU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKFN5bWJvbFdyYXBwZXIsIE5hdGl2ZVN5bWJvbCk7XG4gIFN5bWJvbFdyYXBwZXIucHJvdG90eXBlID0gU3ltYm9sUHJvdG90eXBlO1xuICBTeW1ib2xQcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeW1ib2xXcmFwcGVyO1xuXG4gIHZhciBOQVRJVkVfU1lNQk9MID0gU3RyaW5nKE5hdGl2ZVN5bWJvbCgnZGVzY3JpcHRpb24gZGV0ZWN0aW9uJykpID09PSAnU3ltYm9sKGRlc2NyaXB0aW9uIGRldGVjdGlvbiknO1xuICB2YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sUHJvdG90eXBlLnZhbHVlT2YpO1xuICB2YXIgc3ltYm9sRGVzY3JpcHRpdmVTdHJpbmcgPSB1bmN1cnJ5VGhpcyhTeW1ib2xQcm90b3R5cGUudG9TdHJpbmcpO1xuICB2YXIgcmVnZXhwID0gL15TeW1ib2xcXCgoLiopXFwpW14pXSskLztcbiAgdmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbiAgdmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBkZXNjcmlwdGlvbigpIHtcbiAgICAgIHZhciBzeW1ib2wgPSB0aGlzU3ltYm9sVmFsdWUodGhpcyk7XG4gICAgICBpZiAoaGFzT3duKEVtcHR5U3RyaW5nRGVzY3JpcHRpb25TdG9yZSwgc3ltYm9sKSkgcmV0dXJuICcnO1xuICAgICAgdmFyIHN0cmluZyA9IHN5bWJvbERlc2NyaXB0aXZlU3RyaW5nKHN5bWJvbCk7XG4gICAgICB2YXIgZGVzYyA9IE5BVElWRV9TWU1CT0wgPyBzdHJpbmdTbGljZShzdHJpbmcsIDcsIC0xKSA6IHJlcGxhY2Uoc3RyaW5nLCByZWdleHAsICckMScpO1xuICAgICAgcmV0dXJuIGRlc2MgPT09ICcnID8gdW5kZWZpbmVkIDogZGVzYztcbiAgICB9XG4gIH0pO1xuXG4gICQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgIFN5bWJvbDogU3ltYm9sV3JhcHBlclxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLml0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIG1ldGhvZCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICByZXR1cm4gdW5jdXJyeVRoaXMoYUNhbGxhYmxlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpW21ldGhvZF0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc09iamVjdChhcmd1bWVudCkgfHwgYXJndW1lbnQgPT09IG51bGw7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Bvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNQb3NzaWJsZVByb3RvdHlwZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyAkU3RyaW5nKGFyZ3VtZW50KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gLS0gc2FmZSAqL1xudmFyIHVuY3VycnlUaGlzQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIHNldHRlciA9IHVuY3VycnlUaGlzQWNjZXNzb3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycsICdzZXQnKTtcbiAgICBzZXR0ZXIodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUYXJnZXQsIFNvdXJjZSwga2V5KSB7XG4gIGtleSBpbiBUYXJnZXQgfHwgZGVmaW5lUHJvcGVydHkoVGFyZ2V0LCBrZXksIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTb3VyY2Vba2V5XTsgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBTb3VyY2Vba2V5XSA9IGl0OyB9XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIG1ha2VzIHN1YmNsYXNzaW5nIHdvcmsgY29ycmVjdCBmb3Igd3JhcHBlZCBidWlsdC1pbnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCR0aGlzLCBkdW1teSwgV3JhcHBlcikge1xuICB2YXIgTmV3VGFyZ2V0LCBOZXdUYXJnZXRQcm90b3R5cGU7XG4gIGlmIChcbiAgICAvLyBpdCBjYW4gd29yayBvbmx5IHdpdGggbmF0aXZlIGBzZXRQcm90b3R5cGVPZmBcbiAgICBzZXRQcm90b3R5cGVPZiAmJlxuICAgIC8vIHdlIGhhdmVuJ3QgY29tcGxldGVseSBjb3JyZWN0IHByZS1FUzYgd2F5IGZvciBnZXR0aW5nIGBuZXcudGFyZ2V0YCwgc28gdXNlIHRoaXNcbiAgICBpc0NhbGxhYmxlKE5ld1RhcmdldCA9IGR1bW15LmNvbnN0cnVjdG9yKSAmJlxuICAgIE5ld1RhcmdldCAhPT0gV3JhcHBlciAmJlxuICAgIGlzT2JqZWN0KE5ld1RhcmdldFByb3RvdHlwZSA9IE5ld1RhcmdldC5wcm90b3R5cGUpICYmXG4gICAgTmV3VGFyZ2V0UHJvdG90eXBlICE9PSBXcmFwcGVyLnByb3RvdHlwZVxuICApIHNldFByb3RvdHlwZU9mKCR0aGlzLCBOZXdUYXJnZXRQcm90b3R5cGUpO1xuICByZXR1cm4gJHRoaXM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsICRkZWZhdWx0KSB7XG4gIHJldHVybiBhcmd1bWVudCA9PT0gdW5kZWZpbmVkID8gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyAnJyA6ICRkZWZhdWx0IDogdG9TdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRXJyb3IgPSBFcnJvcjtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG5cbnZhciBURVNUID0gKGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIFN0cmluZyhuZXcgJEVycm9yKGFyZykuc3RhY2spOyB9KSgnenhjYXNkJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZID0gL1xcblxccyphdCBbXjpdKjpbXlxcbl0qLztcbnZhciBJU19WOF9PUl9DSEFLUkFfU1RBQ0sgPSBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkudGVzdChURVNUKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChJU19WOF9PUl9DSEFLUkFfU1RBQ0sgJiYgdHlwZW9mIHN0YWNrID09ICdzdHJpbmcnICYmICEkRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpIHtcbiAgICB3aGlsZSAoZHJvcEVudHJpZXMtLSkgc3RhY2sgPSByZXBsYWNlKHN0YWNrLCBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlksICcnKTtcbiAgfSByZXR1cm4gc3RhY2s7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcignYScpO1xuICBpZiAoISgnc3RhY2snIGluIGVycm9yKSkgcmV0dXJuIHRydWU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCA3KSk7XG4gIHJldHVybiBlcnJvci5zdGFjayAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY2xlYXJFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyJyk7XG52YXIgRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUnKTtcblxuLy8gbm9uLXN0YW5kYXJkIFY4XG52YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXJyb3IsIEMsIHN0YWNrLCBkcm9wRW50cmllcykge1xuICBpZiAoRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUpIHtcbiAgICBpZiAoY2FwdHVyZVN0YWNrVHJhY2UpIGNhcHR1cmVTdGFja1RyYWNlKGVycm9yLCBDKTtcbiAgICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY2xlYXJFcnJvclN0YWNrKHN0YWNrLCBkcm9wRW50cmllcykpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBwcm94eUFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb3h5LWFjY2Vzc29yJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQnKTtcbnZhciBpbnN0YWxsRXJyb3JDYXVzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlJyk7XG52YXIgaW5zdGFsbEVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEZVTExfTkFNRSwgd3JhcHBlciwgRk9SQ0VELCBJU19BR0dSRUdBVEVfRVJST1IpIHtcbiAgdmFyIFNUQUNLX1RSQUNFX0xJTUlUID0gJ3N0YWNrVHJhY2VMaW1pdCc7XG4gIHZhciBPUFRJT05TX1BPU0lUSU9OID0gSVNfQUdHUkVHQVRFX0VSUk9SID8gMiA6IDE7XG4gIHZhciBwYXRoID0gRlVMTF9OQU1FLnNwbGl0KCcuJyk7XG4gIHZhciBFUlJPUl9OQU1FID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICB2YXIgT3JpZ2luYWxFcnJvciA9IGdldEJ1aWx0SW4uYXBwbHkobnVsbCwgcGF0aCk7XG5cbiAgaWYgKCFPcmlnaW5hbEVycm9yKSByZXR1cm47XG5cbiAgdmFyIE9yaWdpbmFsRXJyb3JQcm90b3R5cGUgPSBPcmlnaW5hbEVycm9yLnByb3RvdHlwZTtcblxuICAvLyBWOCA5LjMtIGJ1ZyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjAwNlxuICBpZiAoIUlTX1BVUkUgJiYgaGFzT3duKE9yaWdpbmFsRXJyb3JQcm90b3R5cGUsICdjYXVzZScpKSBkZWxldGUgT3JpZ2luYWxFcnJvclByb3RvdHlwZS5jYXVzZTtcblxuICBpZiAoIUZPUkNFRCkgcmV0dXJuIE9yaWdpbmFsRXJyb3I7XG5cbiAgdmFyIEJhc2VFcnJvciA9IGdldEJ1aWx0SW4oJ0Vycm9yJyk7XG5cbiAgdmFyIFdyYXBwZWRFcnJvciA9IHdyYXBwZXIoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgbWVzc2FnZSA9IG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KElTX0FHR1JFR0FURV9FUlJPUiA/IGIgOiBhLCB1bmRlZmluZWQpO1xuICAgIHZhciByZXN1bHQgPSBJU19BR0dSRUdBVEVfRVJST1IgPyBuZXcgT3JpZ2luYWxFcnJvcihhKSA6IG5ldyBPcmlnaW5hbEVycm9yKCk7XG4gICAgaWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHJlc3VsdCwgJ21lc3NhZ2UnLCBtZXNzYWdlKTtcbiAgICBpbnN0YWxsRXJyb3JTdGFjayhyZXN1bHQsIFdyYXBwZWRFcnJvciwgcmVzdWx0LnN0YWNrLCAyKTtcbiAgICBpZiAodGhpcyAmJiBpc1Byb3RvdHlwZU9mKE9yaWdpbmFsRXJyb3JQcm90b3R5cGUsIHRoaXMpKSBpbmhlcml0SWZSZXF1aXJlZChyZXN1bHQsIHRoaXMsIFdyYXBwZWRFcnJvcik7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiBPUFRJT05TX1BPU0lUSU9OKSBpbnN0YWxsRXJyb3JDYXVzZShyZXN1bHQsIGFyZ3VtZW50c1tPUFRJT05TX1BPU0lUSU9OXSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgV3JhcHBlZEVycm9yLnByb3RvdHlwZSA9IE9yaWdpbmFsRXJyb3JQcm90b3R5cGU7XG5cbiAgaWYgKEVSUk9SX05BTUUgIT09ICdFcnJvcicpIHtcbiAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHNldFByb3RvdHlwZU9mKFdyYXBwZWRFcnJvciwgQmFzZUVycm9yKTtcbiAgICBlbHNlIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoV3JhcHBlZEVycm9yLCBCYXNlRXJyb3IsIHsgbmFtZTogdHJ1ZSB9KTtcbiAgfSBlbHNlIGlmIChERVNDUklQVE9SUyAmJiBTVEFDS19UUkFDRV9MSU1JVCBpbiBPcmlnaW5hbEVycm9yKSB7XG4gICAgcHJveHlBY2Nlc3NvcihXcmFwcGVkRXJyb3IsIE9yaWdpbmFsRXJyb3IsIFNUQUNLX1RSQUNFX0xJTUlUKTtcbiAgICBwcm94eUFjY2Vzc29yKFdyYXBwZWRFcnJvciwgT3JpZ2luYWxFcnJvciwgJ3ByZXBhcmVTdGFja1RyYWNlJyk7XG4gIH1cblxuICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKFdyYXBwZWRFcnJvciwgT3JpZ2luYWxFcnJvcik7XG5cbiAgaWYgKCFJU19QVVJFKSB0cnkge1xuICAgIC8vIFNhZmFyaSAxMy0gYnVnOiBXZWJBc3NlbWJseSBlcnJvcnMgZG9lcyBub3QgaGF2ZSBhIHByb3BlciBgLm5hbWVgXG4gICAgaWYgKE9yaWdpbmFsRXJyb3JQcm90b3R5cGUubmFtZSAhPT0gRVJST1JfTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KE9yaWdpbmFsRXJyb3JQcm90b3R5cGUsICduYW1lJywgRVJST1JfTkFNRSk7XG4gICAgfVxuICAgIE9yaWdpbmFsRXJyb3JQcm90b3R5cGUuY29uc3RydWN0b3IgPSBXcmFwcGVkRXJyb3I7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxuICByZXR1cm4gV3JhcHBlZEVycm9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgZnVuY3Rpb25zIGAubGVuZ3RoYCAqL1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgd3JhcEVycm9yQ29uc3RydWN0b3JXaXRoQ2F1c2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd3JhcC1lcnJvci1jb25zdHJ1Y3Rvci13aXRoLWNhdXNlJyk7XG5cbnZhciBXRUJfQVNTRU1CTFkgPSAnV2ViQXNzZW1ibHknO1xudmFyIFdlYkFzc2VtYmx5ID0gZ2xvYmFsW1dFQl9BU1NFTUJMWV07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1lcnJvci1jYXVzZSAtLSBmZWF0dXJlIGRldGVjdGlvblxudmFyIEZPUkNFRCA9IG5ldyBFcnJvcignZScsIHsgY2F1c2U6IDcgfSkuY2F1c2UgIT09IDc7XG5cbnZhciBleHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlciA9IGZ1bmN0aW9uIChFUlJPUl9OQU1FLCB3cmFwcGVyKSB7XG4gIHZhciBPID0ge307XG4gIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIE8pO1xufTtcblxudmFyIGV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIgPSBmdW5jdGlvbiAoRVJST1JfTkFNRSwgd3JhcHBlcikge1xuICBpZiAoV2ViQXNzZW1ibHkgJiYgV2ViQXNzZW1ibHlbRVJST1JfTkFNRV0pIHtcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShXRUJfQVNTRU1CTFkgKyAnLicgKyBFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAgICQoeyB0YXJnZXQ6IFdFQl9BU1NFTUJMWSwgc3RhdDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCBPKTtcbiAgfVxufTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uYXRpdmVlcnJvclxuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ0Vycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdFdmFsRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRXZhbEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdSYW5nZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJhbmdlRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ1JlZmVyZW5jZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJlZmVyZW5jZUVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdTeW50YXhFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTeW50YXhFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVHlwZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFR5cGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVVJJRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVVJJRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0V2ViQXNzZW1ibHlFcnJvckNhdXNlV3JhcHBlcignQ29tcGlsZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIENvbXBpbGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRXZWJBc3NlbWJseUVycm9yQ2F1c2VXcmFwcGVyKCdMaW5rRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gTGlua0Vycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIoJ1J1bnRpbWVFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBSdW50aW1lRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudCcpO1xuXG52YXIgbmF0aXZlRXJyb3JUb1N0cmluZyA9IEVycm9yLnByb3RvdHlwZS50b1N0cmluZztcblxudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIENocm9tZSAzMi0gaW5jb3JyZWN0bHkgY2FsbCBhY2Nlc3NvclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlLCBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIHZhciBvYmplY3QgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ25hbWUnLCB7IGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMgPT09IG9iamVjdDtcbiAgICB9IH0pKTtcbiAgICBpZiAobmF0aXZlRXJyb3JUb1N0cmluZy5jYWxsKG9iamVjdCkgIT09ICd0cnVlJykgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gRkYxMC0gZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIG5vbi1zdHJpbmdzXG4gIHJldHVybiBuYXRpdmVFcnJvclRvU3RyaW5nLmNhbGwoeyBtZXNzYWdlOiAxLCBuYW1lOiAyIH0pICE9PSAnMjogMSdcbiAgICAvLyBJRTggZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIGRlZmF1bHRzXG4gICAgfHwgbmF0aXZlRXJyb3JUb1N0cmluZy5jYWxsKHt9KSAhPT0gJ0Vycm9yJztcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IElOQ09SUkVDVF9UT19TVFJJTkcgPyBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgdmFyIE8gPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIG5hbWUgPSBub3JtYWxpemVTdHJpbmdBcmd1bWVudChPLm5hbWUsICdFcnJvcicpO1xuICB2YXIgbWVzc2FnZSA9IG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KE8ubWVzc2FnZSk7XG4gIHJldHVybiAhbmFtZSA/IG1lc3NhZ2UgOiAhbWVzc2FnZSA/IG5hbWUgOiBuYW1lICsgJzogJyArIG1lc3NhZ2U7XG59IDogbmF0aXZlRXJyb3JUb1N0cmluZztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBlcnJvclRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXRvLXN0cmluZycpO1xuXG52YXIgRXJyb3JQcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG5cbi8vIGBFcnJvci5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBmaXhcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZXJyb3IucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoRXJyb3JQcm90b3R5cGUudG9TdHJpbmcgIT09IGVycm9yVG9TdHJpbmcpIHtcbiAgZGVmaW5lQnVpbHRJbihFcnJvclByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZXJyb3JUb1N0cmluZyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2tleV0gPSB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdCkpIHJldHVybiBnZXRNZXRob2QoaXQsIElURVJBVE9SKVxuICAgIHx8IGdldE1ldGhvZChpdCwgJ0BAaXRlcmF0b3InKVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgdXNpbmdJdGVyYXRvcikge1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGdldEl0ZXJhdG9yTWV0aG9kKGFyZ3VtZW50KSA6IHVzaW5nSXRlcmF0b3I7XG4gIGlmIChhQ2FsbGFibGUoaXRlcmF0b3JNZXRob2QpKSByZXR1cm4gYW5PYmplY3QoY2FsbChpdGVyYXRvck1ldGhvZCwgYXJndW1lbnQpKTtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICB2YXIgSVNfQ09OU1RSVUNUT1IgPSBpc0NvbnN0cnVjdG9yKHRoaXMpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcGZuID0gYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICBpZiAobWFwcGluZykgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoTyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3IsIG5leHQsIHZhbHVlO1xuICAvLyBpZiB0aGUgdGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSBvciBpdCdzIGFuIGFycmF5IHdpdGggdGhlIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2UgYSBzaW1wbGUgY2FzZVxuICBpZiAoaXRlcmF0b3JNZXRob2QgJiYgISh0aGlzID09PSAkQXJyYXkgJiYgaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkpIHtcbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKE8sIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKCkgOiBbXTtcbiAgICBmb3IgKDshKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcyhsZW5ndGgpIDogJEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIGNhbGxlZCA9IDA7XG4gIHZhciBpdGVyYXRvcldpdGhSZXR1cm4gPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogISFjYWxsZWQrKyB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIFNBRkVfQ0xPU0lORyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBpdGVyYXRvcldpdGhSZXR1cm5bSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlcnJvcikgeyByZXR1cm4gZmFsc2U7IH0gLy8gd29ya2Fyb3VuZCBvZiBvbGQgV2ViS2l0ICsgYGV2YWxgIGJ1Z1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhYmxlKTtcbn0pO1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG52YXIgVU5TQ09QQUJMRVMgPSB3ZWxsS25vd25TeW1ib2woJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuaWYgKEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXSA9PT0gdW5kZWZpbmVkKSB7XG4gIGRlZmluZVByb3BlcnR5KEFycmF5UHJvdG90eXBlLCBVTlNDT1BBQkxFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogY3JlYXRlKG51bGwpXG4gIH0pO1xufVxuXG4vLyBhZGQgYSBrZXkgdG8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b3R5cGVbVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBGKCkpICE9PSBGLnByb3RvdHlwZTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gJE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0cHJvdG90eXBlb2Zcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPyAkT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gKE8pIHtcbiAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzT3duKG9iamVjdCwgSUVfUFJPVE8pKSByZXR1cm4gb2JqZWN0W0lFX1BST1RPXTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBpZiAoaXNDYWxsYWJsZShjb25zdHJ1Y3RvcikgJiYgb2JqZWN0IGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiAkT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IGZhbHNlO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtb2JqZWN0XG52YXIgSXRlcmF0b3JQcm90b3R5cGUsIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgYXJyYXlJdGVyYXRvcjtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWtleXMgLS0gc2FmZSAqL1xuaWYgKFtdLmtleXMpIHtcbiAgYXJyYXlJdGVyYXRvciA9IFtdLmtleXMoKTtcbiAgLy8gU2FmYXJpIDggaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gIGlmICghKCduZXh0JyBpbiBhcnJheUl0ZXJhdG9yKSkgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IHRydWU7XG4gIGVsc2Uge1xuICAgIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKGFycmF5SXRlcmF0b3IpKTtcbiAgICBpZiAoUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSBJdGVyYXRvclByb3RvdHlwZSA9IFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxufVxuXG52YXIgTkVXX0lURVJBVE9SX1BST1RPVFlQRSA9ICFpc09iamVjdChJdGVyYXRvclByb3RvdHlwZSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgdGVzdCA9IHt9O1xuICAvLyBGRjQ0LSBsZWdhY3kgaXRlcmF0b3JzIGNhc2VcbiAgcmV0dXJuIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXS5jYWxsKHRlc3QpICE9PSB0ZXN0O1xufSk7XG5cbmlmIChORVdfSVRFUkFUT1JfUFJPVE9UWVBFKSBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuZWxzZSBpZiAoSVNfUFVSRSkgSXRlcmF0b3JQcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1AQGl0ZXJhdG9yXG5pZiAoIWlzQ2FsbGFibGUoSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICBkZWZpbmVCdWlsdEluKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEl0ZXJhdG9yUHJvdG90eXBlOiBJdGVyYXRvclByb3RvdHlwZSxcbiAgQlVHR1lfU0FGQVJJX0lURVJBVE9SUzogQlVHR1lfU0FGQVJJX0lURVJBVE9SU1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQsIEVOVU1FUkFCTEVfTkVYVCkge1xuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgSXRlcmF0b3JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCshRU5VTUVSQUJMRV9ORVhULCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JDb25zdHJ1Y3RvciwgVE9fU1RSSU5HX1RBRywgZmFsc2UsIHRydWUpO1xuICBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICByZXR1cm4gSXRlcmF0b3JDb25zdHJ1Y3Rvcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRnVuY3Rpb25OYW1lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtY29uc3RydWN0b3InKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSXRlcmF0b3JzQ29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpO1xuXG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuUFJPUEVSO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLkNPTkZJR1VSQUJMRTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcblxuICAgIHN3aXRjaCAoS0lORCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgRU5UUklFUzogcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIGlmICghSVNfUFVSRSAmJiBnZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUpICE9PSBJdGVyYXRvclByb3RvdHlwZSkge1xuICAgICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICBzZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNDYWxsYWJsZShDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICAgICAgICAgIGRlZmluZUJ1aWx0SW4oQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBpZiAoSVNfUFVSRSkgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgICB9XG4gIH1cblxuICAvLyBmaXggQXJyYXkucHJvdG90eXBlLnsgdmFsdWVzLCBAQGl0ZXJhdG9yIH0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiBERUZBVUxUID09PSBWQUxVRVMgJiYgbmF0aXZlSXRlcmF0b3IgJiYgbmF0aXZlSXRlcmF0b3IubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgaWYgKCFJU19QVVJFICYmIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmFibGVQcm90b3R5cGUsICduYW1lJywgVkFMVUVTKTtcbiAgICB9IGVsc2Uge1xuICAgICAgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gdHJ1ZTtcbiAgICAgIGRlZmF1bHRJdGVyYXRvciA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIGNhbGwobmF0aXZlSXRlcmF0b3IsIHRoaXMpOyB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIGV4cG9ydCBhZGRpdGlvbmFsIG1ldGhvZHNcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBnZXRJdGVyYXRpb25NZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/IGRlZmF1bHRJdGVyYXRvciA6IGdldEl0ZXJhdGlvbk1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChFTlRSSUVTKVxuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChLRVkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIHx8ICEoS0VZIGluIEl0ZXJhYmxlUHJvdG90eXBlKSkge1xuICAgICAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBLRVksIG1ldGhvZHNbS0VZXSk7XG4gICAgICB9XG4gICAgfSBlbHNlICQoeyB0YXJnZXQ6IE5BTUUsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIH0sIG1ldGhvZHMpO1xuICB9XG5cbiAgLy8gZGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUlTX1BVUkUgfHwgRk9SQ0VEKSAmJiBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl0gIT09IGRlZmF1bHRJdGVyYXRvcikge1xuICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IsIHsgbmFtZTogREVGQVVMVCB9KTtcbiAgfVxuICBJdGVyYXRvcnNbTkFNRV0gPSBkZWZhdWx0SXRlcmF0b3I7XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIGRvbmUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiBkb25lIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIEFSUkFZX0lURVJBVE9SID0gJ0FycmF5IEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKEFSUkFZX0lURVJBVE9SKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS52YWx1ZXNcbi8vIGBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgdGFyZ2V0ID0gc3RhdGUudGFyZ2V0O1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbiAgc3dpdGNoIChzdGF0ZS5raW5kKSB7XG4gICAgY2FzZSAna2V5cyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGluZGV4LCBmYWxzZSk7XG4gICAgY2FzZSAndmFsdWVzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodGFyZ2V0W2luZGV4XSwgZmFsc2UpO1xuICB9IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGZhbHNlKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxudmFyIHZhbHVlcyA9IEl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG4vLyBWOCB+IENocm9tZSA0NS0gYnVnXG5pZiAoIUlTX1BVUkUgJiYgREVTQ1JJUFRPUlMgJiYgdmFsdWVzLm5hbWUgIT09ICd2YWx1ZXMnKSB0cnkge1xuICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZXMsICduYW1lJywgeyB2YWx1ZTogJ3ZhbHVlcycgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICAvLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3N1xuICByZXR1cm4gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBmb286IDEgfTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheVtNRVRIT0RfTkFNRV0oQm9vbGVhbikuZm9vICE9PSAxO1xuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBuYXRpdmVTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NsaWNlJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc2xpY2Vcbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgICAvLyBpbmxpbmUgYEFycmF5U3BlY2llc0NyZWF0ZWAgZm9yIHVzYWdlIG5hdGl2ZSBgQXJyYXkjc2xpY2VgIHdoZXJlIGl0J3MgcG9zc2libGVcbiAgICB2YXIgQ29uc3RydWN0b3IsIHJlc3VsdCwgbjtcbiAgICBpZiAoaXNBcnJheShPKSkge1xuICAgICAgQ29uc3RydWN0b3IgPSBPLmNvbnN0cnVjdG9yO1xuICAgICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICAgIGlmIChpc0NvbnN0cnVjdG9yKENvbnN0cnVjdG9yKSAmJiAoQ29uc3RydWN0b3IgPT09ICRBcnJheSB8fCBpc0FycmF5KENvbnN0cnVjdG9yLnByb3RvdHlwZSkpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcltTUEVDSUVTXTtcbiAgICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBudWxsKSBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlKE8sIGssIGZpbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IG5ldyAoQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IENvbnN0cnVjdG9yKShtYXgoZmluIC0gaywgMCkpO1xuICAgIGZvciAobiA9IDA7IGsgPCBmaW47IGsrKywgbisrKSBpZiAoayBpbiBPKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyB7fS50b1N0cmluZyA6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKCFUT19TVFJJTkdfVEFHX1NVUFBPUlQpIHtcbiAgZGVmaW5lQnVpbHRJbihPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCB0b1N0cmluZywgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5mbGFnc2AgZ2V0dGVyIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5oYXNJbmRpY2VzKSByZXN1bHQgKz0gJ2QnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQuZG90QWxsKSByZXN1bHQgKz0gJ3MnO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC51bmljb2RlU2V0cykgcmVzdWx0ICs9ICd2JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnYScsICd5JykgLT4gL2EveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAkUmVnRXhwKCdhJywgJ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ2FiY2QnKSAhPT0gbnVsbDtcbn0pO1xuXG4vLyBVQyBCcm93c2VyIGJ1Z1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzEwMDhcbnZhciBNSVNTRURfU1RJQ0tZID0gVU5TVVBQT1JURURfWSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhJFJlZ0V4cCgnYScsICd5Jykuc3RpY2t5O1xufSk7XG5cbnZhciBCUk9LRU5fQ0FSRVQgPSBVTlNVUFBPUlRFRF9ZIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNjg3XG4gIHZhciByZSA9ICRSZWdFeHAoJ15yJywgJ2d5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdzdHInKSAhPT0gbnVsbDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQlJPS0VOX0NBUkVUOiBCUk9LRU5fQ0FSRVQsXG4gIE1JU1NFRF9TVElDS1k6IE1JU1NFRF9TVElDS1ksXG4gIFVOU1VQUE9SVEVEX1k6IFVOU1VQUE9SVEVEX1lcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJy4nLCAncycpIC0+IC8uL3MgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnLicsICdzJyk7XG4gIHJldHVybiAhKHJlLmRvdEFsbCAmJiByZS50ZXN0KCdcXG4nKSAmJiByZS5mbGFncyA9PT0gJ3MnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCcoPzxhPmIpJywgJ2cnKSAtPiAvKD88YT5iKS9nIGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJyg/PGE+YiknLCAnZycpO1xuICByZXR1cm4gcmUuZXhlYygnYicpLmdyb3Vwcy5hICE9PSAnYicgfHxcbiAgICAnYicucmVwbGFjZShyZSwgJyQ8YT5jJykgIT09ICdiYyc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tZW1wdHktY2FwdHVyaW5nLWdyb3VwLCByZWdleHAvbm8tZW1wdHktZ3JvdXAsIHJlZ2V4cC9uby1sYXp5LWVuZHMgLS0gdGVzdGluZyAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVnZXhwL25vLXVzZWxlc3MtcXVhbnRpZmllciAtLSB0ZXN0aW5nICovXG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzJyk7XG52YXIgc3RpY2t5SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtc3RpY2t5LWhlbHBlcnMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJykuZ2V0O1xudmFyIFVOU1VQUE9SVEVEX0RPVF9BTEwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwnKTtcbnZhciBVTlNVUFBPUlRFRF9OQ0cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLW5jZycpO1xuXG52YXIgbmF0aXZlUmVwbGFjZSA9IHNoYXJlZCgnbmF0aXZlLXN0cmluZy1yZXBsYWNlJywgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGluZGV4T2YgPSB1bmN1cnJ5VGhpcygnJy5pbmRleE9mKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvO1xuICB2YXIgcmUyID0gL2IqL2c7XG4gIGNhbGwobmF0aXZlRXhlYywgcmUxLCAnYScpO1xuICBjYWxsKG5hdGl2ZUV4ZWMsIHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMS5sYXN0SW5kZXggIT09IDAgfHwgcmUyLmxhc3RJbmRleCAhPT0gMDtcbn0pKCk7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gc3RpY2t5SGVscGVycy5CUk9LRU5fQ0FSRVQ7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEIHx8IFVOU1VQUE9SVEVEX1kgfHwgVU5TVVBQT1JURURfRE9UX0FMTCB8fCBVTlNVUFBPUlRFRF9OQ0c7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyaW5nKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHJlKTtcbiAgICB2YXIgc3RyID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICB2YXIgcmF3ID0gc3RhdGUucmF3O1xuICAgIHZhciByZXN1bHQsIHJlQ29weSwgbGFzdEluZGV4LCBtYXRjaCwgaSwgb2JqZWN0LCBncm91cDtcblxuICAgIGlmIChyYXcpIHtcbiAgICAgIHJhdy5sYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICByZXN1bHQgPSBjYWxsKHBhdGNoZWRFeGVjLCByYXcsIHN0cik7XG4gICAgICByZS5sYXN0SW5kZXggPSByYXcubGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB2YXIgZ3JvdXBzID0gc3RhdGUuZ3JvdXBzO1xuICAgIHZhciBzdGlja3kgPSBVTlNVUFBPUlRFRF9ZICYmIHJlLnN0aWNreTtcbiAgICB2YXIgZmxhZ3MgPSBjYWxsKHJlZ2V4cEZsYWdzLCByZSk7XG4gICAgdmFyIHNvdXJjZSA9IHJlLnNvdXJjZTtcbiAgICB2YXIgY2hhcnNBZGRlZCA9IDA7XG4gICAgdmFyIHN0ckNvcHkgPSBzdHI7XG5cbiAgICBpZiAoc3RpY2t5KSB7XG4gICAgICBmbGFncyA9IHJlcGxhY2UoZmxhZ3MsICd5JywgJycpO1xuICAgICAgaWYgKGluZGV4T2YoZmxhZ3MsICdnJykgPT09IC0xKSB7XG4gICAgICAgIGZsYWdzICs9ICdnJztcbiAgICAgIH1cblxuICAgICAgc3RyQ29weSA9IHN0cmluZ1NsaWNlKHN0ciwgcmUubGFzdEluZGV4KTtcbiAgICAgIC8vIFN1cHBvcnQgYW5jaG9yZWQgc3RpY2t5IGJlaGF2aW9yLlxuICAgICAgaWYgKHJlLmxhc3RJbmRleCA+IDAgJiYgKCFyZS5tdWx0aWxpbmUgfHwgcmUubXVsdGlsaW5lICYmIGNoYXJBdChzdHIsIHJlLmxhc3RJbmRleCAtIDEpICE9PSAnXFxuJykpIHtcbiAgICAgICAgc291cmNlID0gJyg/OiAnICsgc291cmNlICsgJyknO1xuICAgICAgICBzdHJDb3B5ID0gJyAnICsgc3RyQ29weTtcbiAgICAgICAgY2hhcnNBZGRlZCsrO1xuICAgICAgfVxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIHN0ciBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXig/OicgKyBzb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICB9XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyBzb3VyY2UgKyAnJCg/IVxcXFxzKScsIGZsYWdzKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmUubGFzdEluZGV4O1xuXG4gICAgbWF0Y2ggPSBjYWxsKG5hdGl2ZUV4ZWMsIHN0aWNreSA/IHJlQ29weSA6IHJlLCBzdHJDb3B5KTtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBtYXRjaC5pbnB1dCA9IHN0cmluZ1NsaWNlKG1hdGNoLmlucHV0LCBjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2hbMF0gPSBzdHJpbmdTbGljZShtYXRjaFswXSwgY2hhcnNBZGRlZCk7XG4gICAgICAgIG1hdGNoLmluZGV4ID0gcmUubGFzdEluZGV4O1xuICAgICAgICByZS5sYXN0SW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgfSBlbHNlIHJlLmxhc3RJbmRleCA9IDA7XG4gICAgfSBlbHNlIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJ3Qgd29yayBmb3IgLyguPyk/L1xuICAgICAgY2FsbChuYXRpdmVSZXBsYWNlLCBtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoICYmIGdyb3Vwcykge1xuICAgICAgbWF0Y2guZ3JvdXBzID0gb2JqZWN0ID0gY3JlYXRlKG51bGwpO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBncm91cCA9IGdyb3Vwc1tpXTtcbiAgICAgICAgb2JqZWN0W2dyb3VwWzBdXSA9IG1hdGNoW2dyb3VwWzFdXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5leGVjYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS5leGVjXG4kKHsgdGFyZ2V0OiAnUmVnRXhwJywgcHJvdG86IHRydWUsIGZvcmNlZDogLy4vLmV4ZWMgIT09IGV4ZWMgfSwge1xuICBleGVjOiBleGVjXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIG1vdmVkIHRvIGVudHJ5IHBvaW50c1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5yZWdleHAuZXhlYycpO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG52YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gIHZhciByZSA9IC9bYWNdLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBleGVjQ2FsbGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gLy4vLmV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHJlLnRlc3QoJ2FiYycpID09PSB0cnVlICYmIGV4ZWNDYWxsZWQ7XG59KCk7XG5cbnZhciBuYXRpdmVUZXN0ID0gLy4vLnRlc3Q7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLnRlc3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLnRlc3RcbiQoeyB0YXJnZXQ6ICdSZWdFeHAnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhREVMRUdBVEVTX1RPX0VYRUMgfSwge1xuICB0ZXN0OiBmdW5jdGlvbiAoUykge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKFMpO1xuICAgIHZhciBleGVjID0gUi5leGVjO1xuICAgIGlmICghaXNDYWxsYWJsZShleGVjKSkgcmV0dXJuIGNhbGwobmF0aXZlVGVzdCwgUiwgc3RyaW5nKTtcbiAgICB2YXIgcmVzdWx0ID0gY2FsbChleGVjLCBSLCBzdHJpbmcpO1xuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICBhbk9iamVjdChyZXN1bHQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciByZWdFeHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcblxudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIpIHtcbiAgdmFyIGZsYWdzID0gUi5mbGFncztcbiAgcmV0dXJuIGZsYWdzID09PSB1bmRlZmluZWQgJiYgISgnZmxhZ3MnIGluIFJlZ0V4cFByb3RvdHlwZSkgJiYgIWhhc093bihSLCAnZmxhZ3MnKSAmJiBpc1Byb3RvdHlwZU9mKFJlZ0V4cFByb3RvdHlwZSwgUilcbiAgICA/IGNhbGwocmVnRXhwRmxhZ3MsIFIpIDogZmxhZ3M7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuUFJPUEVSO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0UmVnRXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWdldC1mbGFncycpO1xuXG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xudmFyIG5hdGl2ZVRvU3RyaW5nID0gUmVnRXhwUHJvdG90eXBlW1RPX1NUUklOR107XG5cbnZhciBOT1RfR0VORVJJQyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZVRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPT0gJy9hL2InOyB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG52YXIgSU5DT1JSRUNUX05BTUUgPSBQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiBuYXRpdmVUb1N0cmluZy5uYW1lICE9PSBUT19TVFJJTkc7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKE5PVF9HRU5FUklDIHx8IElOQ09SUkVDVF9OQU1FKSB7XG4gIGRlZmluZUJ1aWx0SW4oUmVnRXhwUHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIHBhdHRlcm4gPSAkdG9TdHJpbmcoUi5zb3VyY2UpO1xuICAgIHZhciBmbGFncyA9ICR0b1N0cmluZyhnZXRSZWdFeHBGbGFncyhSKSk7XG4gICAgcmV0dXJuICcvJyArIHBhdHRlcm4gKyAnLycgKyBmbGFncztcbiAgfSwgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICB2YXIgcG9zaXRpb24gPSB0b0ludGVnZXJPckluZmluaXR5KHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IGNoYXJBdChTLCBwb3NpdGlvbilcbiAgICAgICAgICA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IHN0cmluZ1NsaWNlKFMsIHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpXG4gICAgICAgICAgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmNvZGVwb2ludGF0XG4gIGNvZGVBdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuYXRgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG4gIGNoYXJBdDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG5cbnZhciBTVFJJTkdfSVRFUkFUT1IgPSAnU3RyaW5nIEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNUUklOR19JVEVSQVRPUik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG5kZWZpbmVJdGVyYXRvcihTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogU1RSSU5HX0lURVJBVE9SLFxuICAgIHN0cmluZzogdG9TdHJpbmcoaXRlcmF0ZWQpLFxuICAgIGluZGV4OiAwXG4gIH0pO1xuLy8gYCVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVzdHJpbmdpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHN0cmluZyA9IHN0YXRlLnN0cmluZztcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXg7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IHN0cmluZy5sZW5ndGgpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIHBvaW50ID0gY2hhckF0KHN0cmluZywgaW5kZXgpO1xuICBzdGF0ZS5pbmRleCArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHBvaW50LCBmYWxzZSk7XG59KTtcbiIsICJcbi8vIF9ET01Ub2tlbkxpc3Rcbi8qXG5Db3B5cmlnaHQgKGMpIDIwMTYsIEpvaG4gR2FyZG5lclxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qL1xudmFyIF9ET01Ub2tlbkxpc3QgPSAoZnVuY3Rpb24oKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblx0dmFyIGRwU3VwcG9ydCA9IHRydWU7XG5cdHZhciBkZWZpbmVHZXR0ZXIgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lLCBmbiwgY29uZmlndXJhYmxlKSB7XG5cdFx0aWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSlcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSA9PT0gZHBTdXBwb3J0ID8gdHJ1ZSA6ICEhY29uZmlndXJhYmxlLFxuXHRcdFx0XHRnZXQ6IGZuXG5cdFx0XHR9KTtcblxuXHRcdGVsc2Ugb2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18obmFtZSwgZm4pO1xuXHR9O1xuXG5cdC8qKiBFbnN1cmUgdGhlIGJyb3dzZXIgYWxsb3dzIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB0byBiZSB1c2VkIG9uIG5hdGl2ZSBKYXZhU2NyaXB0IG9iamVjdHMuICovXG5cdHRyeSB7XG5cdFx0ZGVmaW5lR2V0dGVyKHt9LCBcInN1cHBvcnRcIik7XG5cdH1cblx0Y2F0Y2ggKGUpIHtcblx0XHRkcFN1cHBvcnQgPSBmYWxzZTtcblx0fVxuXG5cblx0dmFyIF9ET01Ub2tlbkxpc3QgPSBmdW5jdGlvbiAoZWwsIHByb3ApIHtcblx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cdFx0dmFyIHRva2VucyA9IFtdO1xuXHRcdHZhciB0b2tlbk1hcCA9IHt9O1xuXHRcdHZhciBsZW5ndGggPSAwO1xuXHRcdHZhciBtYXhMZW5ndGggPSAwO1xuXHRcdHZhciBhZGRJbmRleEdldHRlciA9IGZ1bmN0aW9uIChpKSB7XG5cdFx0XHRkZWZpbmVHZXR0ZXIodGhhdCwgaSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRwcmVvcCgpO1xuXHRcdFx0XHRyZXR1cm4gdG9rZW5zW2ldO1xuXHRcdFx0fSwgZmFsc2UpO1xuXG5cdFx0fTtcblx0XHR2YXIgcmVpbmRleCA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0LyoqIERlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBhcnJheS1saWtlIGFjY2VzcyB0byB0aGUgdG9rZW5MaXN0J3MgY29udGVudHMuICovXG5cdFx0XHRpZiAobGVuZ3RoID49IG1heExlbmd0aClcblx0XHRcdFx0Zm9yICg7IG1heExlbmd0aCA8IGxlbmd0aDsgKyttYXhMZW5ndGgpIHtcblx0XHRcdFx0XHRhZGRJbmRleEdldHRlcihtYXhMZW5ndGgpO1xuXHRcdFx0XHR9XG5cdFx0fTtcblxuXHRcdC8qKiBIZWxwZXIgZnVuY3Rpb24gY2FsbGVkIGF0IHRoZSBzdGFydCBvZiBlYWNoIGNsYXNzIG1ldGhvZC4gSW50ZXJuYWwgdXNlIG9ubHkuICovXG5cdFx0dmFyIHByZW9wID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIGVycm9yO1xuXHRcdFx0dmFyIGk7XG5cdFx0XHR2YXIgYXJncyA9IGFyZ3VtZW50cztcblx0XHRcdHZhciByU3BhY2UgPSAvXFxzKy87XG5cblx0XHRcdC8qKiBWYWxpZGF0ZSB0aGUgdG9rZW4vcyBwYXNzZWQgdG8gYW4gaW5zdGFuY2UgbWV0aG9kLCBpZiBhbnkuICovXG5cdFx0XHRpZiAoYXJncy5sZW5ndGgpXG5cdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKVxuXHRcdFx0XHRcdGlmIChyU3BhY2UudGVzdChhcmdzW2ldKSkge1xuXHRcdFx0XHRcdFx0ZXJyb3IgPSBuZXcgU3ludGF4RXJyb3IoJ1N0cmluZyBcIicgKyBhcmdzW2ldICsgJ1wiICcgKyBcImNvbnRhaW5zXCIgKyAnIGFuIGludmFsaWQgY2hhcmFjdGVyJyk7XG5cdFx0XHRcdFx0XHRlcnJvci5jb2RlID0gNTtcblx0XHRcdFx0XHRcdGVycm9yLm5hbWUgPSBcIkludmFsaWRDaGFyYWN0ZXJFcnJvclwiO1xuXHRcdFx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHRcdFx0fVxuXG5cblx0XHRcdC8qKiBTcGxpdCB0aGUgbmV3IHZhbHVlIGFwYXJ0IGJ5IHdoaXRlc3BhY2UqL1xuXHRcdFx0aWYgKHR5cGVvZiBlbFtwcm9wXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHR0b2tlbnMgPSAoXCJcIiArIGVsW3Byb3BdLmJhc2VWYWwpLnJlcGxhY2UoL15cXHMrfFxccyskL2csIFwiXCIpLnNwbGl0KHJTcGFjZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0b2tlbnMgPSAoXCJcIiArIGVsW3Byb3BdKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBcIlwiKS5zcGxpdChyU3BhY2UpO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiogQXZvaWQgdHJlYXRpbmcgYmxhbmsgc3RyaW5ncyBhcyBzaW5nbGUtaXRlbSB0b2tlbiBsaXN0cyAqL1xuXHRcdFx0aWYgKFwiXCIgPT09IHRva2Vuc1swXSkgdG9rZW5zID0gW107XG5cblx0XHRcdC8qKiBSZXBvcHVsYXRlIHRoZSBpbnRlcm5hbCB0b2tlbiBsaXN0cyAqL1xuXHRcdFx0dG9rZW5NYXAgPSB7fTtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyArK2kpXG5cdFx0XHRcdHRva2VuTWFwW3Rva2Vuc1tpXV0gPSB0cnVlO1xuXHRcdFx0bGVuZ3RoID0gdG9rZW5zLmxlbmd0aDtcblx0XHRcdHJlaW5kZXgoKTtcblx0XHR9O1xuXG5cdFx0LyoqIFBvcHVsYXRlIG91ciBpbnRlcm5hbCB0b2tlbiBsaXN0IGlmIHRoZSB0YXJnZXRlZCBhdHRyaWJ1dGUgb2YgdGhlIHN1YmplY3QgZWxlbWVudCBpc24ndCBlbXB0eS4gKi9cblx0XHRwcmVvcCgpO1xuXG5cdFx0LyoqIFJldHVybiB0aGUgbnVtYmVyIG9mIHRva2VucyBpbiB0aGUgdW5kZXJseWluZyBzdHJpbmcuIFJlYWQtb25seS4gKi9cblx0XHRkZWZpbmVHZXR0ZXIodGhhdCwgXCJsZW5ndGhcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cHJlb3AoKTtcblx0XHRcdHJldHVybiBsZW5ndGg7XG5cdFx0fSk7XG5cblx0XHQvKiogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdG9TdHJpbmcvdG9Mb2NhbGVTdHJpbmcgbWV0aG9kcyB0byByZXR1cm4gYSBzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiB0b2tlbnMgd2hlbiB0eXBlY2FzdC4gKi9cblx0XHR0aGF0LnRvTG9jYWxlU3RyaW5nID1cblx0XHRcdHRoYXQudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHByZW9wKCk7XG5cdFx0XHRcdHJldHVybiB0b2tlbnMuam9pbihcIiBcIik7XG5cdFx0XHR9O1xuXG5cdFx0dGhhdC5pdGVtID0gZnVuY3Rpb24gKGlkeCkge1xuXHRcdFx0cHJlb3AoKTtcblx0XHRcdHJldHVybiB0b2tlbnNbaWR4XTtcblx0XHR9O1xuXG5cdFx0dGhhdC5jb250YWlucyA9IGZ1bmN0aW9uICh0b2tlbikge1xuXHRcdFx0cHJlb3AoKTtcblx0XHRcdHJldHVybiAhIXRva2VuTWFwW3Rva2VuXTtcblx0XHR9O1xuXG5cdFx0dGhhdC5hZGQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRwcmVvcC5hcHBseSh0aGF0LCBhcmdzID0gYXJndW1lbnRzKTtcblxuXHRcdFx0Zm9yICh2YXIgYXJncywgdG9rZW4sIGkgPSAwLCBsID0gYXJncy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcblx0XHRcdFx0dG9rZW4gPSBhcmdzW2ldO1xuXHRcdFx0XHRpZiAoIXRva2VuTWFwW3Rva2VuXSkge1xuXHRcdFx0XHRcdHRva2Vucy5wdXNoKHRva2VuKTtcblx0XHRcdFx0XHR0b2tlbk1hcFt0b2tlbl0gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8qKiBVcGRhdGUgdGhlIHRhcmdldGVkIGF0dHJpYnV0ZSBvZiB0aGUgYXR0YWNoZWQgZWxlbWVudCBpZiB0aGUgdG9rZW4gbGlzdCdzIGNoYW5nZWQuICovXG5cdFx0XHRpZiAobGVuZ3RoICE9PSB0b2tlbnMubGVuZ3RoKSB7XG5cdFx0XHRcdGxlbmd0aCA9IHRva2Vucy5sZW5ndGggPj4+IDA7XG5cdFx0XHRcdGlmICh0eXBlb2YgZWxbcHJvcF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRlbFtwcm9wXS5iYXNlVmFsID0gdG9rZW5zLmpvaW4oXCIgXCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVsW3Byb3BdID0gdG9rZW5zLmpvaW4oXCIgXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlaW5kZXgoKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0dGhhdC5yZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRwcmVvcC5hcHBseSh0aGF0LCBhcmdzID0gYXJndW1lbnRzKTtcblxuXHRcdFx0LyoqIEJ1aWxkIGEgaGFzaCBvZiB0b2tlbiBuYW1lcyB0byBjb21wYXJlIGFnYWluc3Qgd2hlbiByZWNvbGxlY3Rpbmcgb3VyIHRva2VuIGxpc3QuICovXG5cdFx0XHRmb3IgKHZhciBhcmdzLCBpZ25vcmUgPSB7fSwgaSA9IDAsIHQgPSBbXTsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0aWdub3JlW2FyZ3NbaV1dID0gdHJ1ZTtcblx0XHRcdFx0ZGVsZXRlIHRva2VuTWFwW2FyZ3NbaV1dO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiogUnVuIHRocm91Z2ggb3VyIHRva2VucyBsaXN0IGFuZCByZWFzc2lnbiBvbmx5IHRob3NlIHRoYXQgYXJlbid0IGRlZmluZWQgaW4gdGhlIGhhc2ggZGVjbGFyZWQgYWJvdmUuICovXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgKytpKVxuXHRcdFx0XHRpZiAoIWlnbm9yZVt0b2tlbnNbaV1dKSB0LnB1c2godG9rZW5zW2ldKTtcblxuXHRcdFx0dG9rZW5zID0gdDtcblx0XHRcdGxlbmd0aCA9IHQubGVuZ3RoID4+PiAwO1xuXG5cdFx0XHQvKiogVXBkYXRlIHRoZSB0YXJnZXRlZCBhdHRyaWJ1dGUgb2YgdGhlIGF0dGFjaGVkIGVsZW1lbnQuICovXG5cdFx0XHRpZiAodHlwZW9mIGVsW3Byb3BdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdGVsW3Byb3BdLmJhc2VWYWwgPSB0b2tlbnMuam9pbihcIiBcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbFtwcm9wXSA9IHRva2Vucy5qb2luKFwiIFwiKTtcblx0XHRcdH1cblx0XHRcdHJlaW5kZXgoKTtcblx0XHR9O1xuXG5cdFx0dGhhdC50b2dnbGUgPSBmdW5jdGlvbiAodG9rZW4sIGZvcmNlKSB7XG5cdFx0XHRwcmVvcC5hcHBseSh0aGF0LCBbdG9rZW5dKTtcblxuXHRcdFx0LyoqIFRva2VuIHN0YXRlJ3MgYmVpbmcgZm9yY2VkLiAqL1xuXHRcdFx0aWYgKHVuZGVmaW5lZCAhPT0gZm9yY2UpIHtcblx0XHRcdFx0aWYgKGZvcmNlKSB7XG5cdFx0XHRcdFx0dGhhdC5hZGQodG9rZW4pO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoYXQucmVtb3ZlKHRva2VuKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0LyoqIFRva2VuIGFscmVhZHkgZXhpc3RzIGluIHRva2VuTGlzdC4gUmVtb3ZlIGl0LCBhbmQgcmV0dXJuIEZBTFNFLiAqL1xuXHRcdFx0aWYgKHRva2VuTWFwW3Rva2VuXSkge1xuXHRcdFx0XHR0aGF0LnJlbW92ZSh0b2tlbik7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0LyoqIE90aGVyd2lzZSwgYWRkIHRoZSB0b2tlbiBhbmQgcmV0dXJuIFRSVUUuICovXG5cdFx0XHR0aGF0LmFkZCh0b2tlbik7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXG5cdFx0dGhhdC5mb3JFYWNoID0gQXJyYXkucHJvdG90eXBlLmZvckVhY2g7XG5cblx0XHRyZXR1cm4gdGhhdDtcblx0fTtcblxuXHRyZXR1cm4gX0RPTVRva2VuTGlzdDtcbn0oKSk7XG5leHBvcnQgZGVmYXVsdCBfRE9NVG9rZW5MaXN0O1xuIiwgImltcG9ydCBfRE9NVG9rZW5MaXN0IGZyb20gXCJAbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19ET01Ub2tlbkxpc3RcIjtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiRE9NVG9rZW5MaXN0XCJpbiBzZWxmJiZmdW5jdGlvbihlKXtyZXR1cm4hKFwiY2xhc3NMaXN0XCJpbiBlKXx8IWUuY2xhc3NMaXN0LnRvZ2dsZShcInhcIiwhMSkmJiFlLmNsYXNzTmFtZX0oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInhcIikpXG4pKSB7XG4vLyBET01Ub2tlbkxpc3Rcbi8qIGdsb2JhbCBfRE9NVG9rZW5MaXN0ICovXG4oZnVuY3Rpb24gKGdsb2JhbCkge1xuXHR2YXIgbmF0aXZlSW1wbCA9IFwiRE9NVG9rZW5MaXN0XCIgaW4gZ2xvYmFsICYmIGdsb2JhbC5ET01Ub2tlbkxpc3Q7XG5cblx0aWYgKFxuXHRcdFx0IW5hdGl2ZUltcGwgfHxcblx0XHRcdChcblx0XHRcdFx0ISFkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMgJiZcblx0XHRcdFx0ISFkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycpICYmXG5cdFx0XHRcdCEoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJzdmdcIikuY2xhc3NMaXN0IGluc3RhbmNlb2YgRE9NVG9rZW5MaXN0KVxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdGdsb2JhbC5ET01Ub2tlbkxpc3QgPSBfRE9NVG9rZW5MaXN0O1xuXHR9XG5cblx0Ly8gQWRkIHNlY29uZCBhcmd1bWVudCB0byBuYXRpdmUgRE9NVG9rZW5MaXN0LnRvZ2dsZSgpIGlmIG5lY2Vzc2FyeVxuXHQoZnVuY3Rpb24gKCkge1xuXHRcdHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRcdGlmICghKCdjbGFzc0xpc3QnIGluIGUpKSByZXR1cm47XG5cdFx0ZS5jbGFzc0xpc3QudG9nZ2xlKCd4JywgZmFsc2UpO1xuXHRcdGlmICghZS5jbGFzc0xpc3QuY29udGFpbnMoJ3gnKSkgcmV0dXJuO1xuXHRcdGUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUodG9rZW4gLyosIGZvcmNlKi8pIHtcblx0XHRcdHZhciBmb3JjZSA9IGFyZ3VtZW50c1sxXTtcblx0XHRcdGlmIChmb3JjZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZhciBhZGQgPSAhdGhpcy5jb250YWlucyh0b2tlbik7XG5cdFx0XHRcdHRoaXNbYWRkID8gJ2FkZCcgOiAncmVtb3ZlJ10odG9rZW4pO1xuXHRcdFx0XHRyZXR1cm4gYWRkO1xuXHRcdFx0fVxuXHRcdFx0Zm9yY2UgPSAhIWZvcmNlO1xuXHRcdFx0dGhpc1tmb3JjZSA/ICdhZGQnIDogJ3JlbW92ZSddKHRva2VuKTtcblx0XHRcdHJldHVybiBmb3JjZTtcblx0XHR9O1xuXHR9KCkpO1xuXG5cdC8vIEFkZCBtdWx0aXBsZSBhcmd1bWVudHMgdG8gbmF0aXZlIERPTVRva2VuTGlzdC5hZGQoKSBpZiBuZWNlc3Nhcnlcblx0KGZ1bmN0aW9uICgpIHtcblx0XHR2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRpZiAoISgnY2xhc3NMaXN0JyBpbiBlKSkgcmV0dXJuO1xuXHRcdGUuY2xhc3NMaXN0LmFkZCgnYScsICdiJyk7XG5cdFx0aWYgKGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdiJykpIHJldHVybjtcblx0XHR2YXIgbmF0aXZlID0gZS5jbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlLmFkZDtcblx0XHRlLmNsYXNzTGlzdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdFx0XHR2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRuYXRpdmUuY2FsbCh0aGlzLCBhcmdzW2ldKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9KCkpO1xuXG5cdC8vIEFkZCBtdWx0aXBsZSBhcmd1bWVudHMgdG8gbmF0aXZlIERPTVRva2VuTGlzdC5yZW1vdmUoKSBpZiBuZWNlc3Nhcnlcblx0KGZ1bmN0aW9uICgpIHtcblx0XHR2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRpZiAoISgnY2xhc3NMaXN0JyBpbiBlKSkgcmV0dXJuO1xuXHRcdGUuY2xhc3NMaXN0LmFkZCgnYScpO1xuXHRcdGUuY2xhc3NMaXN0LmFkZCgnYicpO1xuXHRcdGUuY2xhc3NMaXN0LnJlbW92ZSgnYScsICdiJyk7XG5cdFx0aWYgKCFlLmNsYXNzTGlzdC5jb250YWlucygnYicpKSByZXR1cm47XG5cdFx0dmFyIG5hdGl2ZSA9IGUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW1vdmU7XG5cdFx0ZS5jbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHZhciBhcmdzID0gYXJndW1lbnRzO1xuXHRcdFx0dmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0bmF0aXZlLmNhbGwodGhpcywgYXJnc1tpXSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fSgpKTtcblxufShzZWxmKSk7XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICJpbXBvcnQgX0RPTVRva2VuTGlzdCBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fRE9NVG9rZW5MaXN0XCI7XG4oZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcInJlcGxhY2VcImluKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuY2xhc3NMaXN0fHx7fSlcbikpIHtcbi8vIERPTVRva2VuTGlzdC5wcm90b3R5cGUucmVwbGFjZVxuKGZ1bmN0aW9uICgpIHtcblx0dmFyIGNsYXNzTGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNsYXNzTGlzdDtcblx0Y2xhc3NMaXN0ICYmIChjbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlLnJlcGxhY2UgPVxuXHRcdGZ1bmN0aW9uICh0b2tlbiwgbmV3VG9rZW4pIHtcblx0XHRcdHZhciB0b2tlblN0cmluZyA9ICcnICsgdG9rZW4sIG5ld1Rva2VuU3RyaW5nID0gJycgKyBuZXdUb2tlbjtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bmV3IERPTUV4Y2VwdGlvbigpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRzZWxmLkRPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uIChtZXNzYWdlLCBuYW1lKSB7XG5cdFx0XHRcdFx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbikpIHJldHVybiBuZXcgRE9NRXhjZXB0aW9uKG1lc3NhZ2UsIG5hbWUpO1xuXHRcdFx0XHRcdHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG5cdFx0XHRcdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZXJyb3I7XG5cdFx0XHRpZiAoISh0b2tlblN0cmluZyAmJiBuZXdUb2tlblN0cmluZykpIGVycm9yID0gJ1N5bnRheEVycm9yJztcblx0XHRcdGlmICghZXJyb3IgJiYgKC9cXHMvLnRlc3QodG9rZW5TdHJpbmcpIHx8IC9cXHMvLnRlc3QobmV3VG9rZW5TdHJpbmcpKSkgZXJyb3IgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcblx0XHRcdGlmIChlcnJvcikgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignRE9NVG9rZW5MaXN0LnJlcGxhY2Ugd2FzIHByb3ZpZGVkIHRva2VucyBcXCcnICsgdG9rZW5TdHJpbmcgKyAnXFwnIGFuZCBcXCcnICsgbmV3VG9rZW5TdHJpbmcgKyAnXFwnJywgZXJyb3IpO1xuXG5cdFx0XHRpZiAoIXRoaXMuY29udGFpbnModG9rZW5TdHJpbmcpKSByZXR1cm4gZmFsc2U7XG5cblx0XHRcdC8vIHRva2Vuc1RvYmVNb3ZlZCBhcmUgXCJ0b2tlblN0cmluZ1wiIGFuZCBhbGwgdG9rZW5zIGZvdW5kIGFmdGVyIGl0XG5cdFx0XHR2YXIgdG9rZW5zVG9iZU1vdmVkID0gW107XG5cdFx0XHR2YXIgbmV3VG9rZW5Gb3VuZCA9IGZhbHNlO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKVxuXHRcdFx0XHRpZiAobmV3VG9rZW5TdHJpbmcgPT09IHRoaXMuaXRlbShpKSkgbmV3VG9rZW5Gb3VuZCA9IHRydWU7XG5cdFx0XHRcdGVsc2UgaWYgKHRva2VuU3RyaW5nID09PSB0aGlzLml0ZW0oaSkpIGJyZWFrO1xuXHRcdFx0Zm9yICg7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB0b2tlbnNUb2JlTW92ZWQucHVzaCh0aGlzLml0ZW0oaSkpO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IHRva2Vuc1RvYmVNb3ZlZC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHR2YXIgY3VycmVudFRva2VuID0gdG9rZW5zVG9iZU1vdmVkW2ldO1xuXHRcdFx0XHRjdXJyZW50VG9rZW4gIT09IG5ld1Rva2VuU3RyaW5nICYmIHRoaXMucmVtb3ZlKGN1cnJlbnRUb2tlbik7XG5cdFx0XHRcdGN1cnJlbnRUb2tlbiAhPT0gdG9rZW5TdHJpbmcgJiYgdGhpcy5hZGQoY3VycmVudFRva2VuKTtcblx0XHRcdFx0Y3VycmVudFRva2VuID09PSB0b2tlblN0cmluZyAmJiAhbmV3VG9rZW5Gb3VuZCAmJiAodGhpcy5yZW1vdmUobmV3VG9rZW5TdHJpbmcpLCB0aGlzLmFkZChuZXdUb2tlblN0cmluZykpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHQpO1xufSkoKTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSwgYXJndW1lbnQpIHtcbiAgdmFyIG1ldGhvZCA9IFtdW01FVEhPRF9OQU1FXTtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgbWV0aG9kLmNhbGwobnVsbCwgYXJndW1lbnQgfHwgZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUtaW5kZXhvZiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIG5hdGl2ZUluZGV4T2YgPSB1bmN1cnJ5VGhpcyhbXS5pbmRleE9mKTtcblxudmFyIE5FR0FUSVZFX1pFUk8gPSAhIW5hdGl2ZUluZGV4T2YgJiYgMSAvIG5hdGl2ZUluZGV4T2YoWzFdLCAxLCAtMCkgPCAwO1xudmFyIEZPUkNFRCA9IE5FR0FUSVZFX1pFUk8gfHwgIWFycmF5TWV0aG9kSXNTdHJpY3QoJ2luZGV4T2YnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICB2YXIgZnJvbUluZGV4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gbmF0aXZlSW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBmcm9tSW5kZXgpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgZnJvbUluZGV4KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09IGRlZmluZVByb3BlcnR5LCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0eTogZGVmaW5lUHJvcGVydHlcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBGT1JDRUQgPSAhREVTQ1JJUFRPUlMgfHwgZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JbmRleGVkT2JqZWN0KGl0KSwga2V5KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJykuZjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuICFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcygxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogZ2V0T3duUHJvcGVydHlOYW1lc1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVHZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUdldFByb3RvdHlwZU9mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUywgc2hhbTogIUNPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiB9LCB7XG4gIGdldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiBuYXRpdmVHZXRQcm90b3R5cGVPZih0b09iamVjdChpdCkpO1xuICB9XG59KTtcblxuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgbW92ZWQgdG8gZW50cnkgcG9pbnRzXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBGT1JDRUQsIFNIQU0pIHtcbiAgdmFyIFNZTUJPTCA9IHdlbGxLbm93blN5bWJvbChLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG5cbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBXZSBjYW4ndCB1c2UgcmVhbCByZWdleCBoZXJlIHNpbmNlIGl0IGNhdXNlcyBkZW9wdGltaXphdGlvblxuICAgICAgLy8gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gaW4gVjhcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMDZcbiAgICAgIHJlID0ge307XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgICByZS5mbGFncyA9ICcnO1xuICAgICAgcmVbU1lNQk9MXSA9IC8uL1tTWU1CT0xdO1xuICAgIH1cblxuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBleGVjQ2FsbGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIEZPUkNFRFxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIG1ldGhvZHMgPSBleGVjKFNZTUJPTCwgJydbS0VZXSwgZnVuY3Rpb24gKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICB2YXIgJGV4ZWMgPSByZWdleHAuZXhlYztcbiAgICAgIGlmICgkZXhlYyA9PT0gcmVnZXhwRXhlYyB8fCAkZXhlYyA9PT0gUmVnRXhwUHJvdG90eXBlLmV4ZWMpIHtcbiAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IGNhbGwobmF0aXZlUmVnRXhwTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogY2FsbChuYXRpdmVNZXRob2QsIHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW4oU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBtZXRob2RzWzBdKTtcbiAgICBkZWZpbmVCdWlsdEluKFJlZ0V4cFByb3RvdHlwZSwgU1lNQk9MLCBtZXRob2RzWzFdKTtcbiAgfVxuXG4gIGlmIChTSEFNKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUmVnRXhwUHJvdG90eXBlW1NZTUJPTF0sICdzaGFtJywgdHJ1ZSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcblxuLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBjaGFyQXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFMgPSAvXFwkKFskJidgXXxcXGR7MSwyfXw8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCYnYF18XFxkezEsMn0pL2c7XG5cbi8vIGBHZXRTdWJzdGl0dXRpb25gIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gIHZhciBtID0gY2FwdHVyZXMubGVuZ3RoO1xuICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbmFtZWRDYXB0dXJlcyA9IHRvT2JqZWN0KG5hbWVkQ2FwdHVyZXMpO1xuICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgfVxuICByZXR1cm4gcmVwbGFjZShyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgIHZhciBjYXB0dXJlO1xuICAgIHN3aXRjaCAoY2hhckF0KGNoLCAwKSkge1xuICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICBjYXNlICdgJzogcmV0dXJuIHN0cmluZ1NsaWNlKHN0ciwgMCwgcG9zaXRpb24pO1xuICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0cmluZ1NsaWNlKHN0ciwgdGFpbFBvcyk7XG4gICAgICBjYXNlICc8JzpcbiAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbc3RyaW5nU2xpY2UoY2gsIDEsIC0xKV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2hhckF0KGNoLCAxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoYXJBdChjaCwgMSk7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICB9XG4gICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgfVxuICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmIChpc0NhbGxhYmxlKGV4ZWMpKSB7XG4gICAgdmFyIHJlc3VsdCA9IGNhbGwoZXhlYywgUiwgUyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkgYW5PYmplY3QocmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpID09PSAnUmVnRXhwJykgcmV0dXJuIGNhbGwocmVnZXhwRXhlYywgUiwgUyk7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBnZXRTdWJzdGl0dXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXN1YnN0aXR1dGlvbicpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFJFUExBQ0UgPSB3ZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcbnZhciBzdHJpbmdJbmRleE9mID0gdW5jdXJyeVRoaXMoJycuaW5kZXhPZik7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gSUUgPD0gMTEgcmVwbGFjZXMgJDAgd2l0aCB0aGUgd2hvbGUgbWF0Y2gsIGFzIGlmIGl0IHdhcyAkJlxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjAyNDY2Ni9nZXR0aW5nLWllLXRvLXJlcGxhY2UtYS1yZWdleC13aXRoLXRoZS1saXRlcmFsLXN0cmluZy0wXG52YXIgUkVQTEFDRV9LRUVQU18kMCA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvcHJlZmVyLWVzY2FwZS1yZXBsYWNlbWVudC1kb2xsYXItY2hhciAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gJ2EnLnJlcGxhY2UoLy4vLCAnJDAnKSA9PT0gJyQwJztcbn0pKCk7XG5cbi8vIFNhZmFyaSA8PSAxMy4wLjMoPykgc3Vic3RpdHV0ZXMgbnRoIGNhcHR1cmUgd2hlcmUgbj5tIHdpdGggYW4gZW1wdHkgc3RyaW5nXG52YXIgUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPSAoZnVuY3Rpb24gKCkge1xuICBpZiAoLy4vW1JFUExBQ0VdKSB7XG4gICAgcmV0dXJuIC8uL1tSRVBMQUNFXSgnYScsICckMCcpID09PSAnJztcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59KSgpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tdXNlbGVzcy1kb2xsYXItcmVwbGFjZW1lbnRzIC0tIGZhbHNlIHBvc2l0aXZlXG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygncmVwbGFjZScsIGZ1bmN0aW9uIChfLCBuYXRpdmVSZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIFVOU0FGRV9TVUJTVElUVVRFID0gUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPyAnJCcgOiAnJDAnO1xuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGxhY2VcbiAgICBmdW5jdGlvbiByZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciByZXBsYWNlciA9IGlzTnVsbE9yVW5kZWZpbmVkKHNlYXJjaFZhbHVlKSA/IHVuZGVmaW5lZCA6IGdldE1ldGhvZChzZWFyY2hWYWx1ZSwgUkVQTEFDRSk7XG4gICAgICByZXR1cm4gcmVwbGFjZXJcbiAgICAgICAgPyBjYWxsKHJlcGxhY2VyLCBzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6IGNhbGwobmF0aXZlUmVwbGFjZSwgdG9TdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChzdHJpbmcsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QodGhpcyk7XG4gICAgICB2YXIgUyA9IHRvU3RyaW5nKHN0cmluZyk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PSAnc3RyaW5nJyAmJlxuICAgICAgICBzdHJpbmdJbmRleE9mKHJlcGxhY2VWYWx1ZSwgVU5TQUZFX1NVQlNUSVRVVEUpID09PSAtMSAmJlxuICAgICAgICBzdHJpbmdJbmRleE9mKHJlcGxhY2VWYWx1ZSwgJyQ8JykgPT09IC0xXG4gICAgICApIHtcbiAgICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVSZXBsYWNlLCByeCwgUywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgZnVuY3Rpb25hbFJlcGxhY2UgPSBpc0NhbGxhYmxlKHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSB0b1N0cmluZyhyZXBsYWNlVmFsdWUpO1xuXG4gICAgICB2YXIgZ2xvYmFsID0gcnguZ2xvYmFsO1xuICAgICAgdmFyIGZ1bGxVbmljb2RlO1xuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuXG4gICAgICAgIHB1c2gocmVzdWx0cywgcmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuXG4gICAgICAgIHZhciBtYXRjaFN0ciA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcblxuICAgICAgICB2YXIgbWF0Y2hlZCA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyT3JJbmZpbml0eShyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgdmFyIHJlcGxhY2VtZW50O1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIHB1c2goY2FwdHVyZXMsIG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IGNvbmNhdChbbWF0Y2hlZF0sIGNhcHR1cmVzLCBwb3NpdGlvbiwgUyk7XG4gICAgICAgICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkgcHVzaChyZXBsYWNlckFyZ3MsIG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gdG9TdHJpbmcoYXBwbHkocmVwbGFjZVZhbHVlLCB1bmRlZmluZWQsIHJlcGxhY2VyQXJncykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIFMsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRSZXN1bHQgKz0gc3RyaW5nU2xpY2UoUywgbmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIHN0cmluZ1NsaWNlKFMsIG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xufSwgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTIHx8ICFSRVBMQUNFX0tFRVBTXyQwIHx8IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ29uc3RydWN0b3IoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgU3BlY2llc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3BlY2llc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBkZWZhdWx0Q29uc3RydWN0b3IpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgaXNOdWxsT3JVbmRlZmluZWQoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA/IGRlZmF1bHRDb25zdHJ1Y3RvciA6IGFDb25zdHJ1Y3RvcihTKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gc3RpY2t5SGVscGVycy5VTlNVUFBPUlRFRF9ZO1xudmFyIE1BWF9VSU5UMzIgPSAweEZGRkZGRkZGO1xudmFyIG1pbiA9IE1hdGgubWluO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxuLy8gQ2hyb21lIDUxIGhhcyBhIGJ1Z2d5IFwic3BsaXRcIiBpbXBsZW1lbnRhdGlvbiB3aGVuIFJlZ0V4cCNleGVjICE9PSBuYXRpdmVFeGVjXG4vLyBXZWV4IEpTIGhhcyBmcm96ZW4gYnVpbHQtaW4gcHJvdG90eXBlcywgc28gdXNlIHRyeSAvIGNhdGNoIHdyYXBwZXJcbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLWVtcHR5LWdyb3VwIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHZhciByZSA9IC8oPzopLztcbiAgdmFyIG9yaWdpbmFsRXhlYyA9IHJlLmV4ZWM7XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvcmlnaW5hbEV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgdmFyIHJlc3VsdCA9ICdhYicuc3BsaXQocmUpO1xuICByZXR1cm4gcmVzdWx0Lmxlbmd0aCAhPT0gMiB8fCByZXN1bHRbMF0gIT09ICdhJyB8fCByZXN1bHRbMV0gIT09ICdiJztcbn0pO1xuXG52YXIgQlVHR1kgPSAnYWJiYycuc3BsaXQoLyhiKSovKVsxXSA9PT0gJ2MnIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tZW1wdHktZ3JvdXAgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgJ3Rlc3QnLnNwbGl0KC8oPzopLywgLTEpLmxlbmd0aCAhPT0gNCB8fFxuICAnYWInLnNwbGl0KC8oPzphYikqLykubGVuZ3RoICE9PSAyIHx8XG4gICcuJy5zcGxpdCgvKC4/KSguPykvKS5sZW5ndGggIT09IDQgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1lbXB0eS1jYXB0dXJpbmctZ3JvdXAsIHJlZ2V4cC9uby1lbXB0eS1ncm91cCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAnLicuc3BsaXQoLygpKCkvKS5sZW5ndGggPiAxIHx8XG4gICcnLnNwbGl0KC8uPy8pLmxlbmd0aDtcblxuLy8gQEBzcGxpdCBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ3NwbGl0JywgZnVuY3Rpb24gKFNQTElULCBuYXRpdmVTcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0ID0gJzAnLnNwbGl0KHVuZGVmaW5lZCwgMCkubGVuZ3RoID8gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6IGNhbGwobmF0aXZlU3BsaXQsIHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICB9IDogbmF0aXZlU3BsaXQ7XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNwbGl0XG4gICAgZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIHNwbGl0dGVyID0gaXNOdWxsT3JVbmRlZmluZWQoc2VwYXJhdG9yKSA/IHVuZGVmaW5lZCA6IGdldE1ldGhvZChzZXBhcmF0b3IsIFNQTElUKTtcbiAgICAgIHJldHVybiBzcGxpdHRlclxuICAgICAgICA/IGNhbGwoc3BsaXR0ZXIsIHNlcGFyYXRvciwgTywgbGltaXQpXG4gICAgICAgIDogY2FsbChpbnRlcm5hbFNwbGl0LCB0b1N0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc3BsaXRcbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgY2Fubm90IGJlIHByb3Blcmx5IHBvbHlmaWxsZWQgaW4gZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnRcbiAgICAvLyB0aGUgJ3knIGZsYWcuXG4gICAgZnVuY3Rpb24gKHN0cmluZywgbGltaXQpIHtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgICAgdmFyIFMgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgICBpZiAoIUJVR0dZKSB7XG4gICAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoaW50ZXJuYWxTcGxpdCwgcngsIFMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSBuYXRpdmVTcGxpdCk7XG4gICAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG4gICAgICB2YXIgdW5pY29kZU1hdGNoaW5nID0gcngudW5pY29kZTtcbiAgICAgIHZhciBmbGFncyA9IChyeC5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4LnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKFVOU1VQUE9SVEVEX1kgPyAnZycgOiAneScpO1xuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFVOU1VQUE9SVEVEX1kgPyAnXig/OicgKyByeC5zb3VyY2UgKyAnKScgOiByeCwgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiByZWdFeHBFeGVjKHNwbGl0dGVyLCBTKSA9PT0gbnVsbCA/IFtTXSA6IFtdO1xuICAgICAgdmFyIHAgPSAwO1xuICAgICAgdmFyIHEgPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHdoaWxlIChxIDwgUy5sZW5ndGgpIHtcbiAgICAgICAgc3BsaXR0ZXIubGFzdEluZGV4ID0gVU5TVVBQT1JURURfWSA/IDAgOiBxO1xuICAgICAgICB2YXIgeiA9IHJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFVOU1VQUE9SVEVEX1kgPyBzdHJpbmdTbGljZShTLCBxKSA6IFMpO1xuICAgICAgICB2YXIgZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHogPT09IG51bGwgfHxcbiAgICAgICAgICAoZSA9IG1pbih0b0xlbmd0aChzcGxpdHRlci5sYXN0SW5kZXggKyAoVU5TVVBQT1JURURfWSA/IHEgOiAwKSksIFMubGVuZ3RoKSkgPT09IHBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcSA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHB1c2goQSwgc3RyaW5nU2xpY2UoUywgcCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgcHVzaChBLCB6W2ldKTtcbiAgICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcSA9IHAgPSBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwdXNoKEEsIHN0cmluZ1NsaWNlKFMsIHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0sIEJVR0dZIHx8ICFTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMsIFVOU1VQUE9SVEVEX1kpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGEgc3RyaW5nIG9mIGFsbCB2YWxpZCB1bmljb2RlIHdoaXRlc3BhY2VzXG5tb2R1bGUuZXhwb3J0cyA9ICdcXHUwMDA5XFx1MDAwQVxcdTAwMEJcXHUwMDBDXFx1MDAwRFxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTIwMDBcXHUyMDAxXFx1MjAwMicgK1xuICAnXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ15bJyArIHdoaXRlc3BhY2VzICsgJ10rJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoJyhefFteJyArIHdoaXRlc3BhY2VzICsgJ10pWycgKyB3aGl0ZXNwYWNlcyArICddKyQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltLCB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1MZWZ0LCB0cmltUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIGlmIChUWVBFICYgMSkgc3RyaW5nID0gcmVwbGFjZShzdHJpbmcsIGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgcnRyaW0sICckMScpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1zdGFydFxuICBzdGFydDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1SaWdodCwgdHJpbUVuZCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltZW5kXG4gIGVuZDogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuUFJPUEVSO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIG5vbiA9ICdcXHUyMDBCXFx1MDA4NVxcdTE4MEUnO1xuXG4vLyBjaGVjayB0aGF0IGEgbWV0aG9kIHdvcmtzIHdpdGggdGhlIGNvcnJlY3QgbGlzdFxuLy8gb2Ygd2hpdGVzcGFjZXMgYW5kIGhhcyBhIGNvcnJlY3QgbmFtZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgcmV0dXJuIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISF3aGl0ZXNwYWNlc1tNRVRIT0RfTkFNRV0oKVxuICAgICAgfHwgbm9uW01FVEhPRF9OQU1FXSgpICE9PSBub25cbiAgICAgIHx8IChQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiB3aGl0ZXNwYWNlc1tNRVRIT0RfTkFNRV0ubmFtZSAhPT0gTUVUSE9EX05BTUUpO1xuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIGZvcmNlZFN0cmluZ1RyaW1NZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0tZm9yY2VkJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBmb3JjZWRTdHJpbmdUcmltTWV0aG9kKCd0cmltJykgfSwge1xuICB0cmltOiBmdW5jdGlvbiB0cmltKCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzKTtcbiAgfVxufSk7XG4iLCAiLyohXG4gKiBUb2FzdGlmeSBqcyAxLjEyLjBcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHZhcnVuL3RvYXN0aWZ5LWpzXG4gKiBAbGljZW5zZSBNSVQgbGljZW5zZWRcbiAqXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTggVmFydW4gQSBQXG4gKi9cbihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gIGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5Ub2FzdGlmeSA9IGZhY3RvcnkoKTtcbiAgfVxufSkodGhpcywgZnVuY3Rpb24oZ2xvYmFsKSB7XG4gIC8vIE9iamVjdCBpbml0aWFsaXphdGlvblxuICB2YXIgVG9hc3RpZnkgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAvLyBSZXR1cm5pbmcgYSBuZXcgaW5pdCBvYmplY3RcbiAgICAgIHJldHVybiBuZXcgVG9hc3RpZnkubGliLmluaXQob3B0aW9ucyk7XG4gICAgfSxcbiAgICAvLyBMaWJyYXJ5IHZlcnNpb25cbiAgICB2ZXJzaW9uID0gXCIxLjEyLjBcIjtcblxuICAvLyBTZXQgdGhlIGRlZmF1bHQgZ2xvYmFsIG9wdGlvbnNcbiAgVG9hc3RpZnkuZGVmYXVsdHMgPSB7XG4gICAgb2xkZXN0Rmlyc3Q6IHRydWUsXG4gICAgdGV4dDogXCJUb2FzdGlmeSBpcyBhd2Vzb21lIVwiLFxuICAgIG5vZGU6IHVuZGVmaW5lZCxcbiAgICBkdXJhdGlvbjogMzAwMCxcbiAgICBzZWxlY3RvcjogdW5kZWZpbmVkLFxuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgfSxcbiAgICBkZXN0aW5hdGlvbjogdW5kZWZpbmVkLFxuICAgIG5ld1dpbmRvdzogZmFsc2UsXG4gICAgY2xvc2U6IGZhbHNlLFxuICAgIGdyYXZpdHk6IFwidG9hc3RpZnktdG9wXCIsXG4gICAgcG9zaXRpb25MZWZ0OiBmYWxzZSxcbiAgICBwb3NpdGlvbjogJycsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnJyxcbiAgICBhdmF0YXI6IFwiXCIsXG4gICAgY2xhc3NOYW1lOiBcIlwiLFxuICAgIHN0b3BPbkZvY3VzOiB0cnVlLFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uICgpIHtcbiAgICB9LFxuICAgIG9mZnNldDoge3g6IDAsIHk6IDB9LFxuICAgIGVzY2FwZU1hcmt1cDogdHJ1ZSxcbiAgICBhcmlhTGl2ZTogJ3BvbGl0ZScsXG4gICAgc3R5bGU6IHtiYWNrZ3JvdW5kOiAnJ31cbiAgfTtcblxuICAvLyBEZWZpbmluZyB0aGUgcHJvdG90eXBlIG9mIHRoZSBvYmplY3RcbiAgVG9hc3RpZnkubGliID0gVG9hc3RpZnkucHJvdG90eXBlID0ge1xuICAgIHRvYXN0aWZ5OiB2ZXJzaW9uLFxuXG4gICAgY29uc3RydWN0b3I6IFRvYXN0aWZ5LFxuXG4gICAgLy8gSW5pdGlhbGl6aW5nIHRoZSBvYmplY3Qgd2l0aCByZXF1aXJlZCBwYXJhbWV0ZXJzXG4gICAgaW5pdDogZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgLy8gVmVyaWZ5aW5nIGFuZCB2YWxpZGF0aW5nIHRoZSBpbnB1dCBvYmplY3RcbiAgICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0aW5nIHRoZSBvcHRpb25zIG9iamVjdFxuICAgICAgdGhpcy5vcHRpb25zID0ge307XG5cbiAgICAgIHRoaXMudG9hc3RFbGVtZW50ID0gbnVsbDtcblxuICAgICAgLy8gVmFsaWRhdGluZyB0aGUgb3B0aW9uc1xuICAgICAgdGhpcy5vcHRpb25zLnRleHQgPSBvcHRpb25zLnRleHQgfHwgVG9hc3RpZnkuZGVmYXVsdHMudGV4dDsgLy8gRGlzcGxheSBtZXNzYWdlXG4gICAgICB0aGlzLm9wdGlvbnMubm9kZSA9IG9wdGlvbnMubm9kZSB8fCBUb2FzdGlmeS5kZWZhdWx0cy5ub2RlOyAgLy8gRGlzcGxheSBjb250ZW50IGFzIG5vZGVcbiAgICAgIHRoaXMub3B0aW9ucy5kdXJhdGlvbiA9IG9wdGlvbnMuZHVyYXRpb24gPT09IDAgPyAwIDogb3B0aW9ucy5kdXJhdGlvbiB8fCBUb2FzdGlmeS5kZWZhdWx0cy5kdXJhdGlvbjsgLy8gRGlzcGxheSBkdXJhdGlvblxuICAgICAgdGhpcy5vcHRpb25zLnNlbGVjdG9yID0gb3B0aW9ucy5zZWxlY3RvciB8fCBUb2FzdGlmeS5kZWZhdWx0cy5zZWxlY3RvcjsgLy8gUGFyZW50IHNlbGVjdG9yXG4gICAgICB0aGlzLm9wdGlvbnMuY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrIHx8IFRvYXN0aWZ5LmRlZmF1bHRzLmNhbGxiYWNrOyAvLyBDYWxsYmFjayBhZnRlciBkaXNwbGF5XG4gICAgICB0aGlzLm9wdGlvbnMuZGVzdGluYXRpb24gPSBvcHRpb25zLmRlc3RpbmF0aW9uIHx8IFRvYXN0aWZ5LmRlZmF1bHRzLmRlc3RpbmF0aW9uOyAvLyBPbi1jbGljayBkZXN0aW5hdGlvblxuICAgICAgdGhpcy5vcHRpb25zLm5ld1dpbmRvdyA9IG9wdGlvbnMubmV3V2luZG93IHx8IFRvYXN0aWZ5LmRlZmF1bHRzLm5ld1dpbmRvdzsgLy8gT3BlbiBkZXN0aW5hdGlvbiBpbiBuZXcgd2luZG93XG4gICAgICB0aGlzLm9wdGlvbnMuY2xvc2UgPSBvcHRpb25zLmNsb3NlIHx8IFRvYXN0aWZ5LmRlZmF1bHRzLmNsb3NlOyAvLyBTaG93IHRvYXN0IGNsb3NlIGljb25cbiAgICAgIHRoaXMub3B0aW9ucy5ncmF2aXR5ID0gb3B0aW9ucy5ncmF2aXR5ID09PSBcImJvdHRvbVwiID8gXCJ0b2FzdGlmeS1ib3R0b21cIiA6IFRvYXN0aWZ5LmRlZmF1bHRzLmdyYXZpdHk7IC8vIHRvYXN0IHBvc2l0aW9uIC0gdG9wIG9yIGJvdHRvbVxuICAgICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uTGVmdCA9IG9wdGlvbnMucG9zaXRpb25MZWZ0IHx8IFRvYXN0aWZ5LmRlZmF1bHRzLnBvc2l0aW9uTGVmdDsgLy8gdG9hc3QgcG9zaXRpb24gLSBsZWZ0IG9yIHJpZ2h0XG4gICAgICB0aGlzLm9wdGlvbnMucG9zaXRpb24gPSBvcHRpb25zLnBvc2l0aW9uIHx8IFRvYXN0aWZ5LmRlZmF1bHRzLnBvc2l0aW9uOyAvLyB0b2FzdCBwb3NpdGlvbiAtIGxlZnQgb3IgcmlnaHRcbiAgICAgIHRoaXMub3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRpb25zLmJhY2tncm91bmRDb2xvciB8fCBUb2FzdGlmeS5kZWZhdWx0cy5iYWNrZ3JvdW5kQ29sb3I7IC8vIHRvYXN0IGJhY2tncm91bmQgY29sb3JcbiAgICAgIHRoaXMub3B0aW9ucy5hdmF0YXIgPSBvcHRpb25zLmF2YXRhciB8fCBUb2FzdGlmeS5kZWZhdWx0cy5hdmF0YXI7IC8vIGltZyBlbGVtZW50IHNyYyAtIHVybCBvciBhIHBhdGhcbiAgICAgIHRoaXMub3B0aW9ucy5jbGFzc05hbWUgPSBvcHRpb25zLmNsYXNzTmFtZSB8fCBUb2FzdGlmeS5kZWZhdWx0cy5jbGFzc05hbWU7IC8vIGFkZGl0aW9uYWwgY2xhc3MgbmFtZXMgZm9yIHRoZSB0b2FzdFxuICAgICAgdGhpcy5vcHRpb25zLnN0b3BPbkZvY3VzID0gb3B0aW9ucy5zdG9wT25Gb2N1cyA9PT0gdW5kZWZpbmVkID8gVG9hc3RpZnkuZGVmYXVsdHMuc3RvcE9uRm9jdXMgOiBvcHRpb25zLnN0b3BPbkZvY3VzOyAvLyBzdG9wIHRpbWVvdXQgb24gZm9jdXNcbiAgICAgIHRoaXMub3B0aW9ucy5vbkNsaWNrID0gb3B0aW9ucy5vbkNsaWNrIHx8IFRvYXN0aWZ5LmRlZmF1bHRzLm9uQ2xpY2s7IC8vIENhbGxiYWNrIGFmdGVyIGNsaWNrXG4gICAgICB0aGlzLm9wdGlvbnMub2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQgfHwgVG9hc3RpZnkuZGVmYXVsdHMub2Zmc2V0OyAvLyB0b2FzdCBvZmZzZXRcbiAgICAgIHRoaXMub3B0aW9ucy5lc2NhcGVNYXJrdXAgPSBvcHRpb25zLmVzY2FwZU1hcmt1cCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5lc2NhcGVNYXJrdXAgOiBUb2FzdGlmeS5kZWZhdWx0cy5lc2NhcGVNYXJrdXA7XG4gICAgICB0aGlzLm9wdGlvbnMuYXJpYUxpdmUgPSBvcHRpb25zLmFyaWFMaXZlIHx8IFRvYXN0aWZ5LmRlZmF1bHRzLmFyaWFMaXZlO1xuICAgICAgdGhpcy5vcHRpb25zLnN0eWxlID0gb3B0aW9ucy5zdHlsZSB8fCBUb2FzdGlmeS5kZWZhdWx0cy5zdHlsZTtcbiAgICAgIGlmKG9wdGlvbnMuYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5zdHlsZS5iYWNrZ3JvdW5kID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICB9XG5cbiAgICAgIC8vIFJldHVybmluZyB0aGUgY3VycmVudCBvYmplY3QgZm9yIGNoYWluaW5nIGZ1bmN0aW9uc1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8vIEJ1aWxkaW5nIHRoZSBET00gZWxlbWVudFxuICAgIGJ1aWxkVG9hc3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgLy8gVmFsaWRhdGluZyBpZiB0aGUgb3B0aW9ucyBhcmUgZGVmaW5lZFxuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMpIHtcbiAgICAgICAgdGhyb3cgXCJUb2FzdGlmeSBpcyBub3QgaW5pdGlhbGl6ZWRcIjtcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRpbmcgdGhlIERPTSBvYmplY3RcbiAgICAgIHZhciBkaXZFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGRpdkVsZW1lbnQuY2xhc3NOYW1lID0gXCJ0b2FzdGlmeSBvbiBcIiArIHRoaXMub3B0aW9ucy5jbGFzc05hbWU7XG5cbiAgICAgIC8vIFBvc2l0aW9uaW5nIHRvYXN0IHRvIGxlZnQgb3IgcmlnaHQgb3IgY2VudGVyXG4gICAgICBpZiAoISF0aGlzLm9wdGlvbnMucG9zaXRpb24pIHtcbiAgICAgICAgZGl2RWxlbWVudC5jbGFzc05hbWUgKz0gXCIgdG9hc3RpZnktXCIgKyB0aGlzLm9wdGlvbnMucG9zaXRpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUbyBiZSBkZXByZWNpYXRlZCBpbiBmdXJ0aGVyIHZlcnNpb25zXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucG9zaXRpb25MZWZ0ID09PSB0cnVlKSB7XG4gICAgICAgICAgZGl2RWxlbWVudC5jbGFzc05hbWUgKz0gXCIgdG9hc3RpZnktbGVmdFwiO1xuICAgICAgICAgIGNvbnNvbGUud2FybignUHJvcGVydHkgYHBvc2l0aW9uTGVmdGAgd2lsbCBiZSBkZXByZWNpYXRlZCBpbiBmdXJ0aGVyIHZlcnNpb25zLiBQbGVhc2UgdXNlIGBwb3NpdGlvbmAgaW5zdGVhZC4nKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERlZmF1bHQgcG9zaXRpb25cbiAgICAgICAgICBkaXZFbGVtZW50LmNsYXNzTmFtZSArPSBcIiB0b2FzdGlmeS1yaWdodFwiO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFzc2lnbmluZyBncmF2aXR5IG9mIGVsZW1lbnRcbiAgICAgIGRpdkVsZW1lbnQuY2xhc3NOYW1lICs9IFwiIFwiICsgdGhpcy5vcHRpb25zLmdyYXZpdHk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYmVpbmcgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB1c2luZyB0aGUgc3R5bGUgSFRNTCBET00gcHJvcGVydHlcbiAgICAgICAgY29uc29sZS53YXJuKCdERVBSRUNBVElPTiBOT1RJQ0U6IFwiYmFja2dyb3VuZENvbG9yXCIgaXMgYmVpbmcgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0aGUgXCJzdHlsZS5iYWNrZ3JvdW5kXCIgcHJvcGVydHkuJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIExvb3AgdGhyb3VnaCBvdXIgc3R5bGUgb2JqZWN0IGFuZCBhcHBseSBzdHlsZXMgdG8gZGl2RWxlbWVudFxuICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcy5vcHRpb25zLnN0eWxlKSB7XG4gICAgICAgIGRpdkVsZW1lbnQuc3R5bGVbcHJvcGVydHldID0gdGhpcy5vcHRpb25zLnN0eWxlW3Byb3BlcnR5XTtcbiAgICAgIH1cblxuICAgICAgLy8gQW5ub3VuY2UgdGhlIHRvYXN0IHRvIHNjcmVlbiByZWFkZXJzXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFyaWFMaXZlKSB7XG4gICAgICAgIGRpdkVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWxpdmUnLCB0aGlzLm9wdGlvbnMuYXJpYUxpdmUpXG4gICAgICB9XG5cbiAgICAgIC8vIEFkZGluZyB0aGUgdG9hc3QgbWVzc2FnZS9ub2RlXG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vZGUgJiYgdGhpcy5vcHRpb25zLm5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIC8vIElmIHdlIGhhdmUgYSB2YWxpZCBub2RlLCB3ZSBpbnNlcnQgaXRcbiAgICAgICAgZGl2RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLm9wdGlvbnMubm9kZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXNjYXBlTWFya3VwKSB7XG4gICAgICAgICAgZGl2RWxlbWVudC5pbm5lclRleHQgPSB0aGlzLm9wdGlvbnMudGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaXZFbGVtZW50LmlubmVySFRNTCA9IHRoaXMub3B0aW9ucy50ZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdmF0YXIgIT09IFwiXCIpIHtcbiAgICAgICAgICB2YXIgYXZhdGFyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG4gICAgICAgICAgYXZhdGFyRWxlbWVudC5zcmMgPSB0aGlzLm9wdGlvbnMuYXZhdGFyO1xuXG4gICAgICAgICAgYXZhdGFyRWxlbWVudC5jbGFzc05hbWUgPSBcInRvYXN0aWZ5LWF2YXRhclwiO1xuXG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wb3NpdGlvbiA9PSBcImxlZnRcIiB8fCB0aGlzLm9wdGlvbnMucG9zaXRpb25MZWZ0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgY2xvc2UgaWNvbiBvbiB0aGUgbGVmdCBvZiBjb250ZW50XG4gICAgICAgICAgICBkaXZFbGVtZW50LmFwcGVuZENoaWxkKGF2YXRhckVsZW1lbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgY2xvc2UgaWNvbiBvbiB0aGUgcmlnaHQgb2YgY29udGVudFxuICAgICAgICAgICAgZGl2RWxlbWVudC5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJhZnRlcmJlZ2luXCIsIGF2YXRhckVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBZGRpbmcgYSBjbG9zZSBpY29uIHRvIHRoZSB0b2FzdFxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jbG9zZSA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyBDcmVhdGUgYSBzcGFuIGZvciBjbG9zZSBlbGVtZW50XG4gICAgICAgIHZhciBjbG9zZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO1xuICAgICAgICBjbG9zZUVsZW1lbnQudHlwZSA9IFwiYnV0dG9uXCI7XG4gICAgICAgIGNsb3NlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIFwiQ2xvc2VcIik7XG4gICAgICAgIGNsb3NlRWxlbWVudC5jbGFzc05hbWUgPSBcInRvYXN0LWNsb3NlXCI7XG4gICAgICAgIGNsb3NlRWxlbWVudC5pbm5lckhUTUwgPSBcIiYjMTAwMDY7XCI7XG5cbiAgICAgICAgLy8gVHJpZ2dlcmluZyB0aGUgcmVtb3ZhbCBvZiB0b2FzdCBmcm9tIERPTSBvbiBjbG9zZSBjbGlja1xuICAgICAgICBjbG9zZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICBcImNsaWNrXCIsXG4gICAgICAgICAgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVFbGVtZW50KHRoaXMudG9hc3RFbGVtZW50KTtcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy50b2FzdEVsZW1lbnQudGltZU91dFZhbHVlKTtcbiAgICAgICAgICB9LmJpbmQodGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICAvL0NhbGN1bGF0aW5nIHNjcmVlbiB3aWR0aFxuICAgICAgICB2YXIgd2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCA+IDAgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IHNjcmVlbi53aWR0aDtcblxuICAgICAgICAvLyBBZGRpbmcgdGhlIGNsb3NlIGljb24gdG8gdGhlIHRvYXN0IGVsZW1lbnRcbiAgICAgICAgLy8gRGlzcGxheSBvbiB0aGUgcmlnaHQgaWYgc2NyZWVuIHdpZHRoIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzNjBweFxuICAgICAgICBpZiAoKHRoaXMub3B0aW9ucy5wb3NpdGlvbiA9PSBcImxlZnRcIiB8fCB0aGlzLm9wdGlvbnMucG9zaXRpb25MZWZ0ID09PSB0cnVlKSAmJiB3aWR0aCA+IDM2MCkge1xuICAgICAgICAgIC8vIEFkZGluZyBjbG9zZSBpY29uIG9uIHRoZSBsZWZ0IG9mIGNvbnRlbnRcbiAgICAgICAgICBkaXZFbGVtZW50Lmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgY2xvc2VFbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBZGRpbmcgY2xvc2UgaWNvbiBvbiB0aGUgcmlnaHQgb2YgY29udGVudFxuICAgICAgICAgIGRpdkVsZW1lbnQuYXBwZW5kQ2hpbGQoY2xvc2VFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDbGVhciB0aW1lb3V0IHdoaWxlIHRvYXN0IGlzIGZvY3VzZWRcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc3RvcE9uRm9jdXMgJiYgdGhpcy5vcHRpb25zLmR1cmF0aW9uID4gMCkge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIC8vIHN0b3AgY291bnRkb3duXG4gICAgICAgIGRpdkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICBcIm1vdXNlb3ZlclwiLFxuICAgICAgICAgIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KGRpdkVsZW1lbnQudGltZU91dFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgICAgLy8gYWRkIGJhY2sgdGhlIHRpbWVvdXRcbiAgICAgICAgZGl2RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgIFwibW91c2VsZWF2ZVwiLFxuICAgICAgICAgIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZGl2RWxlbWVudC50aW1lT3V0VmFsdWUgPSB3aW5kb3cuc2V0VGltZW91dChcbiAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0b2FzdCBmcm9tIERPTVxuICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlRWxlbWVudChkaXZFbGVtZW50KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc2VsZi5vcHRpb25zLmR1cmF0aW9uXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIEFkZGluZyBhbiBvbi1jbGljayBkZXN0aW5hdGlvbiBwYXRoXG4gICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5kZXN0aW5hdGlvbiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBkaXZFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgXCJjbGlja1wiLFxuICAgICAgICAgIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubmV3V2luZG93ID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMub3B0aW9ucy5kZXN0aW5hdGlvbiwgXCJfYmxhbmtcIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSB0aGlzLm9wdGlvbnMuZGVzdGluYXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfS5iaW5kKHRoaXMpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLm9uQ2xpY2sgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgdGhpcy5vcHRpb25zLmRlc3RpbmF0aW9uID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGRpdkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICBcImNsaWNrXCIsXG4gICAgICAgICAgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLm9uQ2xpY2soKTtcbiAgICAgICAgICB9LmJpbmQodGhpcylcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkaW5nIG9mZnNldFxuICAgICAgaWYodHlwZW9mIHRoaXMub3B0aW9ucy5vZmZzZXQgPT09IFwib2JqZWN0XCIpIHtcblxuICAgICAgICB2YXIgeCA9IGdldEF4aXNPZmZzZXRBVmFsdWUoXCJ4XCIsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIHZhciB5ID0gZ2V0QXhpc09mZnNldEFWYWx1ZShcInlcIiwgdGhpcy5vcHRpb25zKTtcblxuICAgICAgICB2YXIgeE9mZnNldCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbiA9PSBcImxlZnRcIiA/IHggOiBcIi1cIiArIHg7XG4gICAgICAgIHZhciB5T2Zmc2V0ID0gdGhpcy5vcHRpb25zLmdyYXZpdHkgPT0gXCJ0b2FzdGlmeS10b3BcIiA/IHkgOiBcIi1cIiArIHk7XG5cbiAgICAgICAgZGl2RWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBcInRyYW5zbGF0ZShcIiArIHhPZmZzZXQgKyBcIixcIiArIHlPZmZzZXQgKyBcIilcIjtcblxuICAgICAgfVxuXG4gICAgICAvLyBSZXR1cm5pbmcgdGhlIGdlbmVyYXRlZCBlbGVtZW50XG4gICAgICByZXR1cm4gZGl2RWxlbWVudDtcbiAgICB9LFxuXG4gICAgLy8gRGlzcGxheWluZyB0aGUgdG9hc3RcbiAgICBzaG93VG9hc3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgLy8gQ3JlYXRpbmcgdGhlIERPTSBvYmplY3QgZm9yIHRoZSB0b2FzdFxuICAgICAgdGhpcy50b2FzdEVsZW1lbnQgPSB0aGlzLmJ1aWxkVG9hc3QoKTtcblxuICAgICAgLy8gR2V0dGluZyB0aGUgcm9vdCBlbGVtZW50IHRvIHdpdGggdGhlIHRvYXN0IG5lZWRzIHRvIGJlIGFkZGVkXG4gICAgICB2YXIgcm9vdEVsZW1lbnQ7XG4gICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5zZWxlY3RvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByb290RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMub3B0aW9ucy5zZWxlY3Rvcik7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zZWxlY3RvciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8ICh0eXBlb2YgU2hhZG93Um9vdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5vcHRpb25zLnNlbGVjdG9yIGluc3RhbmNlb2YgU2hhZG93Um9vdCkpIHtcbiAgICAgICAgcm9vdEVsZW1lbnQgPSB0aGlzLm9wdGlvbnMuc2VsZWN0b3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb290RWxlbWVudCA9IGRvY3VtZW50LmJvZHk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRpbmcgaWYgcm9vdCBlbGVtZW50IGlzIHByZXNlbnQgaW4gRE9NXG4gICAgICBpZiAoIXJvb3RFbGVtZW50KSB7XG4gICAgICAgIHRocm93IFwiUm9vdCBlbGVtZW50IGlzIG5vdCBkZWZpbmVkXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZGluZyB0aGUgRE9NIGVsZW1lbnRcbiAgICAgIHZhciBlbGVtZW50VG9JbnNlcnQgPSBUb2FzdGlmeS5kZWZhdWx0cy5vbGRlc3RGaXJzdCA/IHJvb3RFbGVtZW50LmZpcnN0Q2hpbGQgOiByb290RWxlbWVudC5sYXN0Q2hpbGQ7XG4gICAgICByb290RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy50b2FzdEVsZW1lbnQsIGVsZW1lbnRUb0luc2VydCk7XG5cbiAgICAgIC8vIFJlcG9zaXRpb25pbmcgdGhlIHRvYXN0cyBpbiBjYXNlIG11bHRpcGxlIHRvYXN0cyBhcmUgcHJlc2VudFxuICAgICAgVG9hc3RpZnkucmVwb3NpdGlvbigpO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmR1cmF0aW9uID4gMCkge1xuICAgICAgICB0aGlzLnRvYXN0RWxlbWVudC50aW1lT3V0VmFsdWUgPSB3aW5kb3cuc2V0VGltZW91dChcbiAgICAgICAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgdG9hc3QgZnJvbSBET01cbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRWxlbWVudCh0aGlzLnRvYXN0RWxlbWVudCk7XG4gICAgICAgICAgfS5iaW5kKHRoaXMpLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5kdXJhdGlvblxuICAgICAgICApOyAvLyBCaW5kaW5nIGB0aGlzYCBmb3IgZnVuY3Rpb24gaW52b2NhdGlvblxuICAgICAgfVxuXG4gICAgICAvLyBTdXBwb3J0aW5nIGZ1bmN0aW9uIGNoYWluaW5nXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgaGlkZVRvYXN0OiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLnRvYXN0RWxlbWVudC50aW1lT3V0VmFsdWUpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudG9hc3RFbGVtZW50LnRpbWVPdXRWYWx1ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlbW92ZUVsZW1lbnQodGhpcy50b2FzdEVsZW1lbnQpO1xuICAgIH0sXG5cbiAgICAvLyBSZW1vdmluZyB0aGUgZWxlbWVudCBmcm9tIHRoZSBET01cbiAgICByZW1vdmVFbGVtZW50OiBmdW5jdGlvbih0b2FzdEVsZW1lbnQpIHtcbiAgICAgIC8vIEhpZGluZyB0aGUgZWxlbWVudFxuICAgICAgLy8gdG9hc3RFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJvblwiKTtcbiAgICAgIHRvYXN0RWxlbWVudC5jbGFzc05hbWUgPSB0b2FzdEVsZW1lbnQuY2xhc3NOYW1lLnJlcGxhY2UoXCIgb25cIiwgXCJcIik7XG5cbiAgICAgIC8vIFJlbW92aW5nIHRoZSBlbGVtZW50IGZyb20gRE9NIGFmdGVyIHRyYW5zaXRpb24gZW5kXG4gICAgICB3aW5kb3cuc2V0VGltZW91dChcbiAgICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIG9wdGlvbnMgbm9kZSBpZiBhbnlcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLm5vZGUgJiYgdGhpcy5vcHRpb25zLm5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLm5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLm9wdGlvbnMubm9kZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gUmVtb3ZlIHRoZSBlbGVtZW50IGZyb20gdGhlIERPTSwgb25seSB3aGVuIHRoZSBwYXJlbnQgbm9kZSB3YXMgbm90IHJlbW92ZWQgYmVmb3JlLlxuICAgICAgICAgIGlmICh0b2FzdEVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgdG9hc3RFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodG9hc3RFbGVtZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDYWxsaW5nIHRoZSBjYWxsYmFjayBmdW5jdGlvblxuICAgICAgICAgIHRoaXMub3B0aW9ucy5jYWxsYmFjay5jYWxsKHRvYXN0RWxlbWVudCk7XG5cbiAgICAgICAgICAvLyBSZXBvc2l0aW9uaW5nIHRoZSB0b2FzdHMgYWdhaW5cbiAgICAgICAgICBUb2FzdGlmeS5yZXBvc2l0aW9uKCk7XG4gICAgICAgIH0uYmluZCh0aGlzKSxcbiAgICAgICAgNDAwXG4gICAgICApOyAvLyBCaW5kaW5nIGB0aGlzYCBmb3IgZnVuY3Rpb24gaW52b2NhdGlvblxuICAgIH0sXG4gIH07XG5cbiAgLy8gUG9zaXRpb25pbmcgdGhlIHRvYXN0cyBvbiB0aGUgRE9NXG4gIFRvYXN0aWZ5LnJlcG9zaXRpb24gPSBmdW5jdGlvbigpIHtcblxuICAgIC8vIFRvcCBtYXJnaW5zIHdpdGggZ3Jhdml0eVxuICAgIHZhciB0b3BMZWZ0T2Zmc2V0U2l6ZSA9IHtcbiAgICAgIHRvcDogMTUsXG4gICAgICBib3R0b206IDE1LFxuICAgIH07XG4gICAgdmFyIHRvcFJpZ2h0T2Zmc2V0U2l6ZSA9IHtcbiAgICAgIHRvcDogMTUsXG4gICAgICBib3R0b206IDE1LFxuICAgIH07XG4gICAgdmFyIG9mZnNldFNpemUgPSB7XG4gICAgICB0b3A6IDE1LFxuICAgICAgYm90dG9tOiAxNSxcbiAgICB9O1xuXG4gICAgLy8gR2V0IGFsbCB0b2FzdCBtZXNzYWdlcyBvbiB0aGUgRE9NXG4gICAgdmFyIGFsbFRvYXN0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJ0b2FzdGlmeVwiKTtcblxuICAgIHZhciBjbGFzc1VzZWQ7XG5cbiAgICAvLyBNb2RpZnlpbmcgdGhlIHBvc2l0aW9uIG9mIGVhY2ggdG9hc3QgZWxlbWVudFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsVG9hc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBHZXR0aW5nIHRoZSBhcHBsaWVkIGdyYXZpdHlcbiAgICAgIGlmIChjb250YWluc0NsYXNzKGFsbFRvYXN0c1tpXSwgXCJ0b2FzdGlmeS10b3BcIikgPT09IHRydWUpIHtcbiAgICAgICAgY2xhc3NVc2VkID0gXCJ0b2FzdGlmeS10b3BcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsYXNzVXNlZCA9IFwidG9hc3RpZnktYm90dG9tXCI7XG4gICAgICB9XG5cbiAgICAgIHZhciBoZWlnaHQgPSBhbGxUb2FzdHNbaV0ub2Zmc2V0SGVpZ2h0O1xuICAgICAgY2xhc3NVc2VkID0gY2xhc3NVc2VkLnN1YnN0cig5LCBjbGFzc1VzZWQubGVuZ3RoLTEpXG4gICAgICAvLyBTcGFjaW5nIGJldHdlZW4gdG9hc3RzXG4gICAgICB2YXIgb2Zmc2V0ID0gMTU7XG5cbiAgICAgIHZhciB3aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoID4gMCA/IHdpbmRvdy5pbm5lcldpZHRoIDogc2NyZWVuLndpZHRoO1xuXG4gICAgICAvLyBTaG93IHRvYXN0IGluIGNlbnRlciBpZiBzY3JlZW4gd2l0aCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMzYwcHhcbiAgICAgIGlmICh3aWR0aCA8PSAzNjApIHtcbiAgICAgICAgLy8gU2V0dGluZyB0aGUgcG9zaXRpb25cbiAgICAgICAgYWxsVG9hc3RzW2ldLnN0eWxlW2NsYXNzVXNlZF0gPSBvZmZzZXRTaXplW2NsYXNzVXNlZF0gKyBcInB4XCI7XG5cbiAgICAgICAgb2Zmc2V0U2l6ZVtjbGFzc1VzZWRdICs9IGhlaWdodCArIG9mZnNldDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjb250YWluc0NsYXNzKGFsbFRvYXN0c1tpXSwgXCJ0b2FzdGlmeS1sZWZ0XCIpID09PSB0cnVlKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyB0aGUgcG9zaXRpb25cbiAgICAgICAgICBhbGxUb2FzdHNbaV0uc3R5bGVbY2xhc3NVc2VkXSA9IHRvcExlZnRPZmZzZXRTaXplW2NsYXNzVXNlZF0gKyBcInB4XCI7XG5cbiAgICAgICAgICB0b3BMZWZ0T2Zmc2V0U2l6ZVtjbGFzc1VzZWRdICs9IGhlaWdodCArIG9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIHRoZSBwb3NpdGlvblxuICAgICAgICAgIGFsbFRvYXN0c1tpXS5zdHlsZVtjbGFzc1VzZWRdID0gdG9wUmlnaHRPZmZzZXRTaXplW2NsYXNzVXNlZF0gKyBcInB4XCI7XG5cbiAgICAgICAgICB0b3BSaWdodE9mZnNldFNpemVbY2xhc3NVc2VkXSArPSBoZWlnaHQgKyBvZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTdXBwb3J0aW5nIGZ1bmN0aW9uIGNoYWluaW5nXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCBvZmZzZXQuXG4gIGZ1bmN0aW9uIGdldEF4aXNPZmZzZXRBVmFsdWUoYXhpcywgb3B0aW9ucykge1xuXG4gICAgaWYob3B0aW9ucy5vZmZzZXRbYXhpc10pIHtcbiAgICAgIGlmKGlzTmFOKG9wdGlvbnMub2Zmc2V0W2F4aXNdKSkge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5vZmZzZXRbYXhpc107XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMub2Zmc2V0W2F4aXNdICsgJ3B4JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJzBweCc7XG5cbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnRhaW5zQ2xhc3MoZWxlbSwgeW91ckNsYXNzKSB7XG4gICAgaWYgKCFlbGVtIHx8IHR5cGVvZiB5b3VyQ2xhc3MgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZWxlbS5jbGFzc05hbWUgJiZcbiAgICAgIGVsZW0uY2xhc3NOYW1lXG4gICAgICAgIC50cmltKClcbiAgICAgICAgLnNwbGl0KC9cXHMrL2dpKVxuICAgICAgICAuaW5kZXhPZih5b3VyQ2xhc3MpID4gLTFcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0dGluZyB1cCB0aGUgcHJvdG90eXBlIGZvciB0aGUgaW5pdCBvYmplY3RcbiAgVG9hc3RpZnkubGliLmluaXQucHJvdG90eXBlID0gVG9hc3RpZnkubGliO1xuXG4gIC8vIFJldHVybmluZyB0aGUgVG9hc3RpZnkgZnVuY3Rpb24gdG8gYmUgYXNzaWduZWQgdG8gdGhlIHdpbmRvdyBvYmplY3QvbW9kdWxlXG4gIHJldHVybiBUb2FzdGlmeTtcbn0pO1xuIiwgImltcG9ydCAndG9hc3RpZnktanMvc3JjL3RvYXN0aWZ5LmNzcyc7XG5pbXBvcnQgJy4vc3R5bGUtbW9kdWxlcy9zdHlsZS5sZXNzJztcbmltcG9ydCBUb2FzdGlmeSBmcm9tICd0b2FzdGlmeS1qcyc7XG5pbXBvcnQgdHlwZSB7VG9hc3RpZnlXaXRoSGlkZVRvYXN0fSBmcm9tICcuL21vZHVsZXMvdHlwZXMnO1xuXG5jb25zdCB0b2FzdGlmeTogVG9hc3RpZnlXaXRoSGlkZVRvYXN0ID0gKG9wdGlvbnMsIHR5cGUpID0+IHtcblx0b3B0aW9ucyA/Pz0ge307XG5cblx0bGV0IGNsYXNzTmFtZTogc3RyaW5nID0gJ2dhZGdldC10b2FzdGlmeSc7XG5cdGlmICh0eXBlKSB7XG5cdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRjYXNlICdlcnJvcic6XG5cdFx0XHRcdGNsYXNzTmFtZSArPSBgICR7Y2xhc3NOYW1lfS0tZXJyb3JgO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3N1Y2Nlc3MnOlxuXHRcdFx0XHRjbGFzc05hbWUgKz0gYCAke2NsYXNzTmFtZX0tLXN1Y2Nlc3NgO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3dhcm5pbmcnOlxuXHRcdFx0XHRjbGFzc05hbWUgKz0gYCAke2NsYXNzTmFtZX0tLXdhcm5pbmdgO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGNsYXNzTmFtZSArPSBgICR7Y2xhc3NOYW1lfS0taW5mb2A7XG5cdFx0fVxuXHR9XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtZWRpYXdpa2kvY2xhc3MtZG9jXG5cdG9wdGlvbnMuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuXG5cdGlmICghb3B0aW9ucy5ncmF2aXR5KSB7XG5cdFx0b3B0aW9ucy5ncmF2aXR5ID0gJ2JvdHRvbSc7XG5cdH1cblx0aWYgKCFvcHRpb25zLnBvc2l0aW9uKSB7XG5cdFx0b3B0aW9ucy5wb3NpdGlvbiA9ICdjZW50ZXInO1xuXHR9XG5cblx0Y29uc3QgaW5zdGFuY2UgPSBUb2FzdGlmeShvcHRpb25zKTtcblx0aW5zdGFuY2Uuc2hvd1RvYXN0KCk7XG5cblx0cmV0dXJuIHtcblx0XHRoaWRlVG9hc3Q6IGluc3RhbmNlLmhpZGVUb2FzdC5iaW5kKGluc3RhbmNlKSxcblx0fTtcbn07XG5cbmV4cG9ydCB7dG9hc3RpZnl9O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLHlGQUFBQSxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFFBQVEsU0FBVSxJQUFJO0FBQ3hCLGFBQU8sTUFBTSxHQUFHLFNBQVMsUUFBUTtBQUFBLElBQ25DO0FBR0EsSUFBQUEsUUFBTztBQUFBLElBRUwsTUFBTSxPQUFPLGNBQWMsWUFBWSxVQUFVLEtBQ2pELE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTTtBQUFBLElBRXpDLE1BQU0sT0FBTyxRQUFRLFlBQVksSUFBSSxLQUNyQyxNQUFNLE9BQU8sVUFBVSxZQUFZLE1BQU0sS0FDekMsTUFBTSxPQUFPRCxZQUFRLFlBQVlBLFFBQUk7QUFBQSxJQUVwQywyQkFBWTtBQUFFLGFBQU87QUFBQSxJQUFNLEVBQUcsS0FBSyxTQUFTLGFBQWEsRUFBRTtBQUFBO0FBQUE7OztBQ2Y5RDtBQUFBLHdGQUFBRSxVQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxNQUFNO0FBQy9CLFVBQUk7QUFDRixlQUFPLENBQUMsQ0FBQyxLQUFLO0FBQUEsTUFDaEIsU0FBUyxPQUFPO0FBQ2QsZUFBTztBQUFBLE1BQ1Q7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QVM3QyxVQUFVO0FBRW5CLFNBQU87SUFDTlcsV0FBV2tDLFNBQVNsQyxVQUFVdkIsS0FBS3lELFFBQVE7RUFDNUM7QUFDRDsiLAogICJuYW1lcyI6IFsiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiU3ltYm9sIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJkb2N1bWVudCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJUeXBlRXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImFjdGl2ZVhEb2N1bWVudCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTeW1ib2wiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU3ltYm9sIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInNlbGYiLCAiZ2xvYmFsIiwgIlR5cGVFcnJvciIsICJTeW1ib2wiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgIlN5bWJvbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiRXJyb3IiLCAiUmVmZXJlbmNlRXJyb3IiLCAiU3ludGF4RXJyb3IiLCAiVHlwZUVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIl9ET01Ub2tlbkxpc3QiLCAiaW5pdF9ET01Ub2tlbkxpc3QiLCAidW5kZWZpbmVkIiwgImdsb2JhbCIsICJ1bmRlZmluZWQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVfdG9hc3RpZnkiLCAiX19jb21tb25KUyIsICJub2RlX21vZHVsZXNQbnBtVG9hc3RpZnlKczExMjBOb2RlX21vZHVsZXNUb2FzdGlmeUpzU3JjVG9hc3RpZnlKcyIsICJleHBvcnRzIiwgIm1vZHVsZTIiLCAicm9vdCIsICJmYWN0b3J5IiwgIl90eXBlb2YiLCAiVG9hc3RpZnkiLCAiZ2xvYmFsIiwgIlRvYXN0aWZ5MiIsICJvcHRpb25zIiwgImxpYiIsICJpbml0IiwgInZlcnNpb24iLCAiZGVmYXVsdHMiLCAib2xkZXN0Rmlyc3QiLCAidGV4dCIsICJub2RlIiwgImR1cmF0aW9uIiwgInNlbGVjdG9yIiwgImNhbGxiYWNrIiwgImRlc3RpbmF0aW9uIiwgIm5ld1dpbmRvdyIsICJjbG9zZSIsICJncmF2aXR5IiwgInBvc2l0aW9uTGVmdCIsICJwb3NpdGlvbiIsICJiYWNrZ3JvdW5kQ29sb3IiLCAiYXZhdGFyIiwgImNsYXNzTmFtZSIsICJzdG9wT25Gb2N1cyIsICJvbkNsaWNrIiwgIm9mZnNldCIsICJ4IiwgInkiLCAiZXNjYXBlTWFya3VwIiwgImFyaWFMaXZlIiwgInN0eWxlIiwgImJhY2tncm91bmQiLCAicHJvdG90eXBlIiwgInRvYXN0aWZ5IiwgImNvbnN0cnVjdG9yIiwgInRvYXN0RWxlbWVudCIsICJidWlsZFRvYXN0IiwgImRpdkVsZW1lbnQiLCAiZG9jdW1lbnQiLCAiY3JlYXRlRWxlbWVudCIsICJjb25zb2xlIiwgIndhcm4iLCAicHJvcGVydHkiLCAic2V0QXR0cmlidXRlIiwgIm5vZGVUeXBlIiwgIk5vZGUiLCAiRUxFTUVOVF9OT0RFIiwgImFwcGVuZENoaWxkIiwgImlubmVyVGV4dCIsICJpbm5lckhUTUwiLCAiYXZhdGFyRWxlbWVudCIsICJzcmMiLCAiaW5zZXJ0QWRqYWNlbnRFbGVtZW50IiwgImNsb3NlRWxlbWVudCIsICJ0eXBlIiwgImFkZEV2ZW50TGlzdGVuZXIiLCAiZXZlbnQiLCAic3RvcFByb3BhZ2F0aW9uIiwgInJlbW92ZUVsZW1lbnQiLCAid2luZG93IiwgImNsZWFyVGltZW91dCIsICJ0aW1lT3V0VmFsdWUiLCAiYmluZCIsICJ3aWR0aCIsICJpbm5lcldpZHRoIiwgInNjcmVlbiIsICJzZWxmIiwgInNldFRpbWVvdXQiLCAib3BlbiIsICJsb2NhdGlvbiIsICJnZXRBeGlzT2Zmc2V0QVZhbHVlIiwgInhPZmZzZXQiLCAieU9mZnNldCIsICJ0cmFuc2Zvcm0iLCAic2hvd1RvYXN0IiwgInJvb3RFbGVtZW50IiwgImdldEVsZW1lbnRCeUlkIiwgIkhUTUxFbGVtZW50IiwgIlNoYWRvd1Jvb3QiLCAiYm9keSIsICJlbGVtZW50VG9JbnNlcnQiLCAiZmlyc3RDaGlsZCIsICJsYXN0Q2hpbGQiLCAiaW5zZXJ0QmVmb3JlIiwgInJlcG9zaXRpb24iLCAiaGlkZVRvYXN0IiwgInJlcGxhY2UiLCAicGFyZW50Tm9kZSIsICJyZW1vdmVDaGlsZCIsICJjYWxsIiwgInRvcExlZnRPZmZzZXRTaXplIiwgInRvcCIsICJib3R0b20iLCAidG9wUmlnaHRPZmZzZXRTaXplIiwgIm9mZnNldFNpemUiLCAiYWxsVG9hc3RzIiwgImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCAiY2xhc3NVc2VkIiwgImkiLCAibGVuZ3RoIiwgImNvbnRhaW5zQ2xhc3MiLCAiaGVpZ2h0IiwgIm9mZnNldEhlaWdodCIsICJzdWJzdHIiLCAiYXhpcyIsICJpc05hTiIsICJlbGVtIiwgInlvdXJDbGFzcyIsICJ0cmltIiwgInNwbGl0IiwgImluZGV4T2YiLCAiVG9hc3RpZnlfZXhwb3J0cyIsICJfX2V4cG9ydCIsICJtb2R1bGUiLCAiX190b0NvbW1vbkpTIiwgImltcG9ydF90b2FzdGlmeV9qcyIsICJfX3RvRVNNIiwgIl9vcHRpb25zIiwgImNvbmNhdCIsICJpbnN0YW5jZSJdCn0K diff --git a/dist/Util/Util.js b/dist/Util/Util.js new file mode 100644 index 00000000..0a1b2323 --- /dev/null +++ b/dist/Util/Util.js @@ -0,0 +1,8127 @@ +/** + * SPDX-License-Identifier: GPL-3.0-or-later + * _addText: '{{Gadget Header|license=GPL-3.0-or-later}}' + * + * @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/Util} + * @author 安忆 + * @license GPL-3.0-or-later {@link https://www.qiuwenbaike.cn/wiki/H:GPL-3.0} + */ +/** + * +------------------------------------------------------------+ + * | === WARNING: GLOBAL GADGET FILE === | + * +------------------------------------------------------------+ + * | All changes should be made in the repository, | + * | otherwise they will be lost. | + * +------------------------------------------------------------+ + * | Changes to this page may affect many users. | + * | Please discuss changes by opening an issue before editing. | + * +------------------------------------------------------------+ + */ +/* */ + +(function() { + +"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __esm = function(fn, res) { + return function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; + }; +}; +var __commonJS = function(cb, mod) { + return function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; + }; +}; +var __copyProps = function(to, from, except, desc) { + if (from && typeof from === "object" || typeof from === "function") + for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) { + key = keys[i]; + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: function(k) { + return from[k]; + }.bind(null, key), enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = function(mod) { + return __copyProps(__defProp({}, "__esModule", { value: true }), mod); +}; + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/global.js +var require_global = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/global.js": function(exports2, module2) { + "use strict"; + var check = function(it) { + return it && it.Math === Math && it; + }; + module2.exports = // eslint-disable-next-line es/no-global-this -- safe + check(typeof globalThis == "object" && globalThis) || check(typeof window == "object" && window) || // eslint-disable-next-line no-restricted-globals -- safe + check(typeof self == "object" && self) || check(typeof global == "object" && global) || check(typeof exports2 == "object" && exports2) || // eslint-disable-next-line no-new-func -- fallback + /* @__PURE__ */ function() { + return this; + }() || Function("return this")(); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/fails.js +var require_fails = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/fails.js": function(exports2, module2) { + "use strict"; + module2.exports = function(exec) { + try { + return !!exec(); + } catch (error) { + return true; + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/descriptors.js +var require_descriptors = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/descriptors.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = !fails(function() { + return Object.defineProperty({}, 1, { get: function() { + return 7; + } })[1] !== 7; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-native.js +var require_function_bind_native = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-native.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = !fails(function() { + var test = function() { + }.bind(); + return typeof test != "function" || test.hasOwnProperty("prototype"); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-call.js +var require_function_call = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-call.js": function(exports2, module2) { + "use strict"; + var NATIVE_BIND = require_function_bind_native(); + var call = Function.prototype.call; + module2.exports = NATIVE_BIND ? call.bind(call) : function() { + return call.apply(call, arguments); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-property-is-enumerable.js +var require_object_property_is_enumerable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-property-is-enumerable.js": function(exports2) { + "use strict"; + var $propertyIsEnumerable = {}.propertyIsEnumerable; + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1); + exports2.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; + } : $propertyIsEnumerable; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property-descriptor.js +var require_create_property_descriptor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property-descriptor.js": function(exports2, module2) { + "use strict"; + module2.exports = function(bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this.js +var require_function_uncurry_this = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this.js": function(exports2, module2) { + "use strict"; + var NATIVE_BIND = require_function_bind_native(); + var FunctionPrototype = Function.prototype; + var call = FunctionPrototype.call; + var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call); + module2.exports = NATIVE_BIND ? uncurryThisWithBind : function(fn) { + return function() { + return call.apply(fn, arguments); + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof-raw.js +var require_classof_raw = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof-raw.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toString = uncurryThis({}.toString); + var stringSlice = uncurryThis("".slice); + module2.exports = function(it) { + return stringSlice(toString(it), 8, -1); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/indexed-object.js +var require_indexed_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/indexed-object.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var classof = require_classof_raw(); + var $Object = Object; + var split = uncurryThis("".split); + module2.exports = fails(function() { + return !$Object("z").propertyIsEnumerable(0); + }) ? function(it) { + return classof(it) === "String" ? split(it, "") : $Object(it); + } : $Object; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-null-or-undefined.js +var require_is_null_or_undefined = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-null-or-undefined.js": function(exports2, module2) { + "use strict"; + module2.exports = function(it) { + return it === null || it === void 0; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/require-object-coercible.js +var require_require_object_coercible = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/require-object-coercible.js": function(exports2, module2) { + "use strict"; + var isNullOrUndefined = require_is_null_or_undefined(); + var $TypeError = TypeError; + module2.exports = function(it) { + if (isNullOrUndefined(it)) + throw new $TypeError("Can't call method on " + it); + return it; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-indexed-object.js +var require_to_indexed_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-indexed-object.js": function(exports2, module2) { + "use strict"; + var IndexedObject = require_indexed_object(); + var requireObjectCoercible = require_require_object_coercible(); + module2.exports = function(it) { + return IndexedObject(requireObjectCoercible(it)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-callable.js +var require_is_callable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-callable.js": function(exports2, module2) { + "use strict"; + var documentAll = typeof document == "object" && document.all; + module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { + return typeof argument == "function" || argument === documentAll; + } : function(argument) { + return typeof argument == "function"; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-object.js +var require_is_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-object.js": function(exports2, module2) { + "use strict"; + var isCallable = require_is_callable(); + module2.exports = function(it) { + return typeof it == "object" ? it !== null : isCallable(it); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-built-in.js +var require_get_built_in = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-built-in.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var isCallable = require_is_callable(); + var aFunction = function(argument) { + return isCallable(argument) ? argument : void 0; + }; + module2.exports = function(namespace, method) { + return arguments.length < 2 ? aFunction(global2[namespace]) : global2[namespace] && global2[namespace][method]; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-is-prototype-of.js +var require_object_is_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-is-prototype-of.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + module2.exports = uncurryThis({}.isPrototypeOf); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-user-agent.js +var require_engine_user_agent = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-user-agent.js": function(exports2, module2) { + "use strict"; + module2.exports = typeof navigator != "undefined" && String(navigator.userAgent) || ""; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-v8-version.js +var require_engine_v8_version = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-v8-version.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var userAgent = require_engine_user_agent(); + var process = global2.process; + var Deno2 = global2.Deno; + var versions = process && process.versions || Deno2 && Deno2.version; + var v8 = versions && versions.v8; + var match; + var version; + if (v8) { + match = v8.split("."); + version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); + } + if (!version && userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) + version = +match[1]; + } + } + module2.exports = version; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-constructor-detection.js +var require_symbol_constructor_detection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-constructor-detection.js": function(exports2, module2) { + "use strict"; + var V8_VERSION = require_engine_v8_version(); + var fails = require_fails(); + var global2 = require_global(); + var $String = global2.String; + module2.exports = !!Object.getOwnPropertySymbols && !fails(function() { + var symbol = Symbol("symbol detection"); + return !$String(symbol) || !(Object(symbol) instanceof Symbol) || // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances + !Symbol.sham && V8_VERSION && V8_VERSION < 41; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/use-symbol-as-uid.js +var require_use_symbol_as_uid = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/use-symbol-as-uid.js": function(exports2, module2) { + "use strict"; + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-symbol.js +var require_is_symbol = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-symbol.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var isCallable = require_is_callable(); + var isPrototypeOf = require_object_is_prototype_of(); + var USE_SYMBOL_AS_UID = require_use_symbol_as_uid(); + var $Object = Object; + module2.exports = USE_SYMBOL_AS_UID ? function(it) { + return typeof it == "symbol"; + } : function(it) { + var $Symbol = getBuiltIn("Symbol"); + return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/try-to-string.js +var require_try_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/try-to-string.js": function(exports2, module2) { + "use strict"; + var $String = String; + module2.exports = function(argument) { + try { + return $String(argument); + } catch (error) { + return "Object"; + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-callable.js +var require_a_callable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-callable.js": function(exports2, module2) { + "use strict"; + var isCallable = require_is_callable(); + var tryToString = require_try_to_string(); + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isCallable(argument)) + return argument; + throw new $TypeError(tryToString(argument) + " is not a function"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-method.js +var require_get_method = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-method.js": function(exports2, module2) { + "use strict"; + var aCallable = require_a_callable(); + var isNullOrUndefined = require_is_null_or_undefined(); + module2.exports = function(V, P) { + var func = V[P]; + return isNullOrUndefined(func) ? void 0 : aCallable(func); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ordinary-to-primitive.js +var require_ordinary_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ordinary-to-primitive.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var isCallable = require_is_callable(); + var isObject = require_is_object(); + var $TypeError = TypeError; + module2.exports = function(input, pref) { + var fn, val; + if (pref === "string" && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) + return val; + if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) + return val; + if (pref !== "string" && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) + return val; + throw new $TypeError("Can't convert object to primitive value"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-pure.js +var require_is_pure = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-pure.js": function(exports2, module2) { + "use strict"; + module2.exports = false; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-global-property.js +var require_define_global_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-global-property.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var defineProperty = Object.defineProperty; + module2.exports = function(key, value) { + try { + defineProperty(global2, key, { value: value, configurable: true, writable: true }); + } catch (error) { + global2[key] = value; + } + return value; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-store.js +var require_shared_store = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-store.js": function(exports2, module2) { + "use strict"; + var IS_PURE = require_is_pure(); + var globalThis2 = require_global(); + var defineGlobalProperty = require_define_global_property(); + var SHARED = "__core-js_shared__"; + var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); + (store.versions || (store.versions = [])).push({ + version: "3.36.0", + mode: IS_PURE ? "pure" : "global", + copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", + license: "https://github.com/zloirock/core-js/blob/v3.36.0/LICENSE", + source: "https://github.com/zloirock/core-js" + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared.js +var require_shared = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared.js": function(exports2, module2) { + "use strict"; + var store = require_shared_store(); + module2.exports = function(key, value) { + return store[key] || (store[key] = value || {}); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-object.js +var require_to_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-object.js": function(exports2, module2) { + "use strict"; + var requireObjectCoercible = require_require_object_coercible(); + var $Object = Object; + module2.exports = function(argument) { + return $Object(requireObjectCoercible(argument)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/has-own-property.js +var require_has_own_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/has-own-property.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toObject = require_to_object(); + var hasOwnProperty = uncurryThis({}.hasOwnProperty); + module2.exports = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty(toObject(it), key); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/uid.js +var require_uid = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/uid.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var id = 0; + var postfix = Math.random(); + var toString = uncurryThis(1 .toString); + module2.exports = function(key) { + return "Symbol(" + (key === void 0 ? "" : key) + ")_" + toString(++id + postfix, 36); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol.js +var require_well_known_symbol = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var shared = require_shared(); + var hasOwn = require_has_own_property(); + var uid = require_uid(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var USE_SYMBOL_AS_UID = require_use_symbol_as_uid(); + var Symbol2 = global2.Symbol; + var WellKnownSymbolsStore = shared("wks"); + var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol2["for"] || Symbol2 : Symbol2 && Symbol2.withoutSetter || uid; + module2.exports = function(name) { + if (!hasOwn(WellKnownSymbolsStore, name)) { + WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol2, name) ? Symbol2[name] : createWellKnownSymbol("Symbol." + name); + } + return WellKnownSymbolsStore[name]; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-primitive.js +var require_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-primitive.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var isObject = require_is_object(); + var isSymbol = require_is_symbol(); + var getMethod = require_get_method(); + var ordinaryToPrimitive = require_ordinary_to_primitive(); + var wellKnownSymbol = require_well_known_symbol(); + var $TypeError = TypeError; + var TO_PRIMITIVE = wellKnownSymbol("toPrimitive"); + module2.exports = function(input, pref) { + if (!isObject(input) || isSymbol(input)) + return input; + var exoticToPrim = getMethod(input, TO_PRIMITIVE); + var result; + if (exoticToPrim) { + if (pref === void 0) + pref = "default"; + result = call(exoticToPrim, input, pref); + if (!isObject(result) || isSymbol(result)) + return result; + throw new $TypeError("Can't convert object to primitive value"); + } + if (pref === void 0) + pref = "number"; + return ordinaryToPrimitive(input, pref); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-property-key.js +var require_to_property_key = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-property-key.js": function(exports2, module2) { + "use strict"; + var toPrimitive = require_to_primitive(); + var isSymbol = require_is_symbol(); + module2.exports = function(argument) { + var key = toPrimitive(argument, "string"); + return isSymbol(key) ? key : key + ""; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/document-create-element.js +var require_document_create_element = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/document-create-element.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var isObject = require_is_object(); + var document2 = global2.document; + var EXISTS = isObject(document2) && isObject(document2.createElement); + module2.exports = function(it) { + return EXISTS ? document2.createElement(it) : {}; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ie8-dom-define.js +var require_ie8_dom_define = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ie8-dom-define.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var fails = require_fails(); + var createElement = require_document_create_element(); + module2.exports = !DESCRIPTORS && !fails(function() { + return Object.defineProperty(createElement("div"), "a", { + get: function() { + return 7; + } + }).a !== 7; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +var require_object_get_own_property_descriptor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-descriptor.js": function(exports2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var call = require_function_call(); + var propertyIsEnumerableModule = require_object_property_is_enumerable(); + var createPropertyDescriptor = require_create_property_descriptor(); + var toIndexedObject = require_to_indexed_object(); + var toPropertyKey = require_to_property_key(); + var hasOwn = require_has_own_property(); + var IE8_DOM_DEFINE = require_ie8_dom_define(); + var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + exports2.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPropertyKey(P); + if (IE8_DOM_DEFINE) + try { + return $getOwnPropertyDescriptor(O, P); + } catch (error) { + } + if (hasOwn(O, P)) + return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/v8-prototype-define-bug.js +var require_v8_prototype_define_bug = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/v8-prototype-define-bug.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var fails = require_fails(); + module2.exports = DESCRIPTORS && fails(function() { + return Object.defineProperty(function() { + }, "prototype", { + value: 42, + writable: false + }).prototype !== 42; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/an-object.js +var require_an_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/an-object.js": function(exports2, module2) { + "use strict"; + var isObject = require_is_object(); + var $String = String; + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isObject(argument)) + return argument; + throw new $TypeError($String(argument) + " is not an object"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-property.js +var require_object_define_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-property.js": function(exports2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var IE8_DOM_DEFINE = require_ie8_dom_define(); + var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug(); + var anObject = require_an_object(); + var toPropertyKey = require_to_property_key(); + var $TypeError = TypeError; + var $defineProperty = Object.defineProperty; + var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var ENUMERABLE = "enumerable"; + var CONFIGURABLE = "configurable"; + var WRITABLE = "writable"; + exports2.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (typeof O === "function" && P === "prototype" && "value" in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { + var current = $getOwnPropertyDescriptor(O, P); + if (current && current[WRITABLE]) { + O[P] = Attributes.value; + Attributes = { + configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE], + enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], + writable: false + }; + } + } + return $defineProperty(O, P, Attributes); + } : $defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (IE8_DOM_DEFINE) + try { + return $defineProperty(O, P, Attributes); + } catch (error) { + } + if ("get" in Attributes || "set" in Attributes) + throw new $TypeError("Accessors not supported"); + if ("value" in Attributes) + O[P] = Attributes.value; + return O; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-non-enumerable-property.js +var require_create_non_enumerable_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-non-enumerable-property.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var definePropertyModule = require_object_define_property(); + var createPropertyDescriptor = require_create_property_descriptor(); + module2.exports = DESCRIPTORS ? function(object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); + } : function(object, key, value) { + object[key] = value; + return object; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-name.js +var require_function_name = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-name.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var hasOwn = require_has_own_property(); + var FunctionPrototype = Function.prototype; + var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor; + var EXISTS = hasOwn(FunctionPrototype, "name"); + var PROPER = EXISTS && function something() { + }.name === "something"; + var CONFIGURABLE = EXISTS && (!DESCRIPTORS || DESCRIPTORS && getDescriptor(FunctionPrototype, "name").configurable); + module2.exports = { + EXISTS: EXISTS, + PROPER: PROPER, + CONFIGURABLE: CONFIGURABLE + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inspect-source.js +var require_inspect_source = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inspect-source.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var isCallable = require_is_callable(); + var store = require_shared_store(); + var functionToString = uncurryThis(Function.toString); + if (!isCallable(store.inspectSource)) { + store.inspectSource = function(it) { + return functionToString(it); + }; + } + module2.exports = store.inspectSource; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/weak-map-basic-detection.js +var require_weak_map_basic_detection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/weak-map-basic-detection.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var isCallable = require_is_callable(); + var WeakMap = global2.WeakMap; + module2.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap)); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-key.js +var require_shared_key = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-key.js": function(exports2, module2) { + "use strict"; + var shared = require_shared(); + var uid = require_uid(); + var keys = shared("keys"); + module2.exports = function(key) { + return keys[key] || (keys[key] = uid(key)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/hidden-keys.js +var require_hidden_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/hidden-keys.js": function(exports2, module2) { + "use strict"; + module2.exports = {}; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/internal-state.js +var require_internal_state = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/internal-state.js": function(exports2, module2) { + "use strict"; + var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); + var global2 = require_global(); + var isObject = require_is_object(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var hasOwn = require_has_own_property(); + var shared = require_shared_store(); + var sharedKey = require_shared_key(); + var hiddenKeys = require_hidden_keys(); + var OBJECT_ALREADY_INITIALIZED = "Object already initialized"; + var TypeError2 = global2.TypeError; + var WeakMap = global2.WeakMap; + var set; + var get; + var has; + var enforce = function(it) { + return has(it) ? get(it) : set(it, {}); + }; + var getterFor = function(TYPE) { + return function(it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw new TypeError2("Incompatible receiver, " + TYPE + " required"); + } + return state; + }; + }; + if (NATIVE_WEAK_MAP || shared.state) { + store = shared.state || (shared.state = new WeakMap()); + store.get = store.get; + store.has = store.has; + store.set = store.set; + set = function(it, metadata) { + if (store.has(it)) + throw new TypeError2(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + store.set(it, metadata); + return metadata; + }; + get = function(it) { + return store.get(it) || {}; + }; + has = function(it) { + return store.has(it); + }; + } else { + STATE = sharedKey("state"); + hiddenKeys[STATE] = true; + set = function(it, metadata) { + if (hasOwn(it, STATE)) + throw new TypeError2(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function(it) { + return hasOwn(it, STATE) ? it[STATE] : {}; + }; + has = function(it) { + return hasOwn(it, STATE); + }; + } + var store; + var STATE; + module2.exports = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/make-built-in.js +var require_make_built_in = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/make-built-in.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var isCallable = require_is_callable(); + var hasOwn = require_has_own_property(); + var DESCRIPTORS = require_descriptors(); + var CONFIGURABLE_FUNCTION_NAME = require_function_name().CONFIGURABLE; + var inspectSource = require_inspect_source(); + var InternalStateModule = require_internal_state(); + var enforceInternalState = InternalStateModule.enforce; + var getInternalState = InternalStateModule.get; + var $String = String; + var defineProperty = Object.defineProperty; + var stringSlice = uncurryThis("".slice); + var replace = uncurryThis("".replace); + var join = uncurryThis([].join); + var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function() { + return defineProperty(function() { + }, "length", { value: 8 }).length !== 8; + }); + var TEMPLATE = String(String).split("String"); + var makeBuiltIn = module2.exports = function(value, name, options) { + if (stringSlice($String(name), 0, 7) === "Symbol(") { + name = "[" + replace($String(name), /^Symbol\(([^)]*)\).*$/, "$1") + "]"; + } + if (options && options.getter) + name = "get " + name; + if (options && options.setter) + name = "set " + name; + if (!hasOwn(value, "name") || CONFIGURABLE_FUNCTION_NAME && value.name !== name) { + if (DESCRIPTORS) + defineProperty(value, "name", { value: name, configurable: true }); + else + value.name = name; + } + if (CONFIGURABLE_LENGTH && options && hasOwn(options, "arity") && value.length !== options.arity) { + defineProperty(value, "length", { value: options.arity }); + } + try { + if (options && hasOwn(options, "constructor") && options.constructor) { + if (DESCRIPTORS) + defineProperty(value, "prototype", { writable: false }); + } else if (value.prototype) + value.prototype = void 0; + } catch (error) { + } + var state = enforceInternalState(value); + if (!hasOwn(state, "source")) { + state.source = join(TEMPLATE, typeof name == "string" ? name : ""); + } + return value; + }; + Function.prototype.toString = makeBuiltIn(function toString() { + return isCallable(this) && getInternalState(this).source || inspectSource(this); + }, "toString"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in.js +var require_define_built_in = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in.js": function(exports2, module2) { + "use strict"; + var isCallable = require_is_callable(); + var definePropertyModule = require_object_define_property(); + var makeBuiltIn = require_make_built_in(); + var defineGlobalProperty = require_define_global_property(); + module2.exports = function(O, key, value, options) { + if (!options) + options = {}; + var simple = options.enumerable; + var name = options.name !== void 0 ? options.name : key; + if (isCallable(value)) + makeBuiltIn(value, name, options); + if (options.global) { + if (simple) + O[key] = value; + else + defineGlobalProperty(key, value); + } else { + try { + if (!options.unsafe) + delete O[key]; + else if (O[key]) + simple = true; + } catch (error) { + } + if (simple) + O[key] = value; + else + definePropertyModule.f(O, key, { + value: value, + enumerable: false, + configurable: !options.nonConfigurable, + writable: !options.nonWritable + }); + } + return O; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/math-trunc.js +var require_math_trunc = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/math-trunc.js": function(exports2, module2) { + "use strict"; + var ceil = Math.ceil; + var floor = Math.floor; + module2.exports = Math.trunc || function trunc(x) { + var n = +x; + return (n > 0 ? floor : ceil)(n); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-integer-or-infinity.js +var require_to_integer_or_infinity = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-integer-or-infinity.js": function(exports2, module2) { + "use strict"; + var trunc = require_math_trunc(); + module2.exports = function(argument) { + var number = +argument; + return number !== number || number === 0 ? 0 : trunc(number); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-absolute-index.js +var require_to_absolute_index = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-absolute-index.js": function(exports2, module2) { + "use strict"; + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var max = Math.max; + var min = Math.min; + module2.exports = function(index, length) { + var integer = toIntegerOrInfinity(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-length.js +var require_to_length = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-length.js": function(exports2, module2) { + "use strict"; + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var min = Math.min; + module2.exports = function(argument) { + var len = toIntegerOrInfinity(argument); + return len > 0 ? min(len, 9007199254740991) : 0; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/length-of-array-like.js +var require_length_of_array_like = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/length-of-array-like.js": function(exports2, module2) { + "use strict"; + var toLength = require_to_length(); + module2.exports = function(obj) { + return toLength(obj.length); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-includes.js +var require_array_includes = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-includes.js": function(exports2, module2) { + "use strict"; + var toIndexedObject = require_to_indexed_object(); + var toAbsoluteIndex = require_to_absolute_index(); + var lengthOfArrayLike = require_length_of_array_like(); + var createMethod = function(IS_INCLUDES) { + return function($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = lengthOfArrayLike(O); + if (length === 0) + return !IS_INCLUDES && -1; + var index = toAbsoluteIndex(fromIndex, length); + var value; + if (IS_INCLUDES && el !== el) + while (length > index) { + value = O[index++]; + if (value !== value) + return true; + } + else + for (; length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) + return IS_INCLUDES || index || 0; + } + return !IS_INCLUDES && -1; + }; + }; + module2.exports = { + // `Array.prototype.includes` method + // https://tc39.es/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys-internal.js +var require_object_keys_internal = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys-internal.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var hasOwn = require_has_own_property(); + var toIndexedObject = require_to_indexed_object(); + var indexOf = require_array_includes().indexOf; + var hiddenKeys = require_hidden_keys(); + var push = uncurryThis([].push); + module2.exports = function(object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) + !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key); + while (names.length > i) + if (hasOwn(O, key = names[i++])) { + ~indexOf(result, key) || push(result, key); + } + return result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/enum-bug-keys.js +var require_enum_bug_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/enum-bug-keys.js": function(exports2, module2) { + "use strict"; + module2.exports = [ + "constructor", + "hasOwnProperty", + "isPrototypeOf", + "propertyIsEnumerable", + "toLocaleString", + "toString", + "valueOf" + ]; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names.js +var require_object_get_own_property_names = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names.js": function(exports2) { + "use strict"; + var internalObjectKeys = require_object_keys_internal(); + var enumBugKeys = require_enum_bug_keys(); + var hiddenKeys = enumBugKeys.concat("length", "prototype"); + exports2.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-symbols.js +var require_object_get_own_property_symbols = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-symbols.js": function(exports2) { + "use strict"; + exports2.f = Object.getOwnPropertySymbols; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/own-keys.js +var require_own_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/own-keys.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var uncurryThis = require_function_uncurry_this(); + var getOwnPropertyNamesModule = require_object_get_own_property_names(); + var getOwnPropertySymbolsModule = require_object_get_own_property_symbols(); + var anObject = require_an_object(); + var concat = uncurryThis([].concat); + module2.exports = getBuiltIn("Reflect", "ownKeys") || function ownKeys2(it) { + var keys = getOwnPropertyNamesModule.f(anObject(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/copy-constructor-properties.js +var require_copy_constructor_properties = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/copy-constructor-properties.js": function(exports2, module2) { + "use strict"; + var hasOwn = require_has_own_property(); + var ownKeys2 = require_own_keys(); + var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor(); + var definePropertyModule = require_object_define_property(); + module2.exports = function(target, source, exceptions) { + var keys = ownKeys2(source); + var defineProperty = definePropertyModule.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) { + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-forced.js +var require_is_forced = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-forced.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var isCallable = require_is_callable(); + var replacement = /#|\.prototype\./; + var isForced = function(feature, detection) { + var value = data[normalize(feature)]; + return value === POLYFILL ? true : value === NATIVE ? false : isCallable(detection) ? fails(detection) : !!detection; + }; + var normalize = isForced.normalize = function(string) { + return String(string).replace(replacement, ".").toLowerCase(); + }; + var data = isForced.data = {}; + var NATIVE = isForced.NATIVE = "N"; + var POLYFILL = isForced.POLYFILL = "P"; + module2.exports = isForced; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/export.js +var require_export = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/export.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var defineBuiltIn = require_define_built_in(); + var defineGlobalProperty = require_define_global_property(); + var copyConstructorProperties = require_copy_constructor_properties(); + var isForced = require_is_forced(); + module2.exports = function(options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global2; + } else if (STATIC) { + target = global2[TARGET] || defineGlobalProperty(TARGET, {}); + } else { + target = global2[TARGET] && global2[TARGET].prototype; + } + if (target) + for (key in source) { + sourceProperty = source[key]; + if (options.dontCallGetSet) { + descriptor = getOwnPropertyDescriptor(target, key); + targetProperty = descriptor && descriptor.value; + } else + targetProperty = target[key]; + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? "." : "#") + key, options.forced); + if (!FORCED && targetProperty !== void 0) { + if (typeof sourceProperty == typeof targetProperty) + continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + if (options.sham || targetProperty && targetProperty.sham) { + createNonEnumerableProperty(sourceProperty, "sham", true); + } + defineBuiltIn(target, key, sourceProperty, options); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string-tag-support.js +var require_to_string_tag_support = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string-tag-support.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + var test = {}; + test[TO_STRING_TAG] = "z"; + module2.exports = String(test) === "[object z]"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof.js +var require_classof = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof.js": function(exports2, module2) { + "use strict"; + var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); + var isCallable = require_is_callable(); + var classofRaw = require_classof_raw(); + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + var $Object = Object; + var CORRECT_ARGUMENTS = classofRaw(/* @__PURE__ */ function() { + return arguments; + }()) === "Arguments"; + var tryGet = function(it, key) { + try { + return it[key]; + } catch (error) { + } + }; + module2.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function(it) { + var O, tag, result; + return it === void 0 ? "Undefined" : it === null ? "Null" : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == "string" ? tag : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) === "Object" && isCallable(O.callee) ? "Arguments" : result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string.js +var require_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string.js": function(exports2, module2) { + "use strict"; + var classof = require_classof(); + var $String = String; + module2.exports = function(argument) { + if (classof(argument) === "Symbol") + throw new TypeError("Cannot convert a Symbol value to a string"); + return $String(argument); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys.js +var require_object_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys.js": function(exports2, module2) { + "use strict"; + var internalObjectKeys = require_object_keys_internal(); + var enumBugKeys = require_enum_bug_keys(); + module2.exports = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-properties.js +var require_object_define_properties = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-properties.js": function(exports2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug(); + var definePropertyModule = require_object_define_property(); + var anObject = require_an_object(); + var toIndexedObject = require_to_indexed_object(); + var objectKeys = require_object_keys(); + exports2.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var props = toIndexedObject(Properties); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) + definePropertyModule.f(O, key = keys[index++], props[key]); + return O; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/html.js +var require_html = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/html.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + module2.exports = getBuiltIn("document", "documentElement"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-create.js +var require_object_create = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-create.js": function(exports2, module2) { + "use strict"; + var anObject = require_an_object(); + var definePropertiesModule = require_object_define_properties(); + var enumBugKeys = require_enum_bug_keys(); + var hiddenKeys = require_hidden_keys(); + var html = require_html(); + var documentCreateElement = require_document_create_element(); + var sharedKey = require_shared_key(); + var GT = ">"; + var LT = "<"; + var PROTOTYPE = "prototype"; + var SCRIPT = "script"; + var IE_PROTO = sharedKey("IE_PROTO"); + var EmptyConstructor = function() { + }; + var scriptTag = function(content) { + return LT + SCRIPT + GT + content + LT + "/" + SCRIPT + GT; + }; + var NullProtoObjectViaActiveX = function(activeXDocument2) { + activeXDocument2.write(scriptTag("")); + activeXDocument2.close(); + var temp = activeXDocument2.parentWindow.Object; + activeXDocument2 = null; + return temp; + }; + var NullProtoObjectViaIFrame = function() { + var iframe = documentCreateElement("iframe"); + var JS = "java" + SCRIPT + ":"; + var iframeDocument; + iframe.style.display = "none"; + html.appendChild(iframe); + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag("document.F=Object")); + iframeDocument.close(); + return iframeDocument.F; + }; + var activeXDocument; + var NullProtoObject = function() { + try { + activeXDocument = new ActiveXObject("htmlfile"); + } catch (error) { + } + NullProtoObject = typeof document != "undefined" ? document.domain && activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame() : NullProtoObjectViaActiveX(activeXDocument); + var length = enumBugKeys.length; + while (length--) + delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); + }; + hiddenKeys[IE_PROTO] = true; + module2.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + result[IE_PROTO] = O; + } else + result = NullProtoObject(); + return Properties === void 0 ? result : definePropertiesModule.f(result, Properties); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-slice.js +var require_array_slice = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-slice.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + module2.exports = uncurryThis([].slice); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names-external.js +var require_object_get_own_property_names_external = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names-external.js": function(exports2, module2) { + "use strict"; + var classof = require_classof_raw(); + var toIndexedObject = require_to_indexed_object(); + var $getOwnPropertyNames = require_object_get_own_property_names().f; + var arraySlice = require_array_slice(); + var windowNames = typeof window == "object" && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : []; + var getWindowNames = function(it) { + try { + return $getOwnPropertyNames(it); + } catch (error) { + return arraySlice(windowNames); + } + }; + module2.exports.f = function getOwnPropertyNames(it) { + return windowNames && classof(it) === "Window" ? getWindowNames(it) : $getOwnPropertyNames(toIndexedObject(it)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in-accessor.js +var require_define_built_in_accessor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in-accessor.js": function(exports2, module2) { + "use strict"; + var makeBuiltIn = require_make_built_in(); + var defineProperty = require_object_define_property(); + module2.exports = function(target, name, descriptor) { + if (descriptor.get) + makeBuiltIn(descriptor.get, name, { getter: true }); + if (descriptor.set) + makeBuiltIn(descriptor.set, name, { setter: true }); + return defineProperty.f(target, name, descriptor); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-wrapped.js +var require_well_known_symbol_wrapped = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-wrapped.js": function(exports2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + exports2.f = wellKnownSymbol; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/path.js +var require_path = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/path.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + module2.exports = global2; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-define.js +var require_well_known_symbol_define = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-define.js": function(exports2, module2) { + "use strict"; + var path = require_path(); + var hasOwn = require_has_own_property(); + var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped(); + var defineProperty = require_object_define_property().f; + module2.exports = function(NAME) { + var Symbol2 = path.Symbol || (path.Symbol = {}); + if (!hasOwn(Symbol2, NAME)) + defineProperty(Symbol2, NAME, { + value: wrappedWellKnownSymbolModule.f(NAME) + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-define-to-primitive.js +var require_symbol_define_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-define-to-primitive.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var getBuiltIn = require_get_built_in(); + var wellKnownSymbol = require_well_known_symbol(); + var defineBuiltIn = require_define_built_in(); + module2.exports = function() { + var Symbol2 = getBuiltIn("Symbol"); + var SymbolPrototype = Symbol2 && Symbol2.prototype; + var valueOf = SymbolPrototype && SymbolPrototype.valueOf; + var TO_PRIMITIVE = wellKnownSymbol("toPrimitive"); + if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) { + defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function(hint) { + return call(valueOf, this); + }, { arity: 1 }); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/set-to-string-tag.js +var require_set_to_string_tag = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/set-to-string-tag.js": function(exports2, module2) { + "use strict"; + var defineProperty = require_object_define_property().f; + var hasOwn = require_has_own_property(); + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + module2.exports = function(target, TAG, STATIC) { + if (target && !STATIC) + target = target.prototype; + if (target && !hasOwn(target, TO_STRING_TAG)) { + defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG }); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-clause.js +var require_function_uncurry_this_clause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-clause.js": function(exports2, module2) { + "use strict"; + var classofRaw = require_classof_raw(); + var uncurryThis = require_function_uncurry_this(); + module2.exports = function(fn) { + if (classofRaw(fn) === "Function") + return uncurryThis(fn); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-context.js +var require_function_bind_context = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-context.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this_clause(); + var aCallable = require_a_callable(); + var NATIVE_BIND = require_function_bind_native(); + var bind = uncurryThis(uncurryThis.bind); + module2.exports = function(fn, that) { + aCallable(fn); + return that === void 0 ? fn : NATIVE_BIND ? bind(fn, that) : function() { + return fn.apply(that, arguments); + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array.js +var require_is_array = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array.js": function(exports2, module2) { + "use strict"; + var classof = require_classof_raw(); + module2.exports = Array.isArray || function isArray(argument) { + return classof(argument) === "Array"; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-constructor.js +var require_is_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-constructor.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var isCallable = require_is_callable(); + var classof = require_classof(); + var getBuiltIn = require_get_built_in(); + var inspectSource = require_inspect_source(); + var noop = function() { + }; + var construct = getBuiltIn("Reflect", "construct"); + var constructorRegExp = /^\s*(?:class|function)\b/; + var exec = uncurryThis(constructorRegExp.exec); + var INCORRECT_TO_STRING = !constructorRegExp.test(noop); + var isConstructorModern = function isConstructor(argument) { + if (!isCallable(argument)) + return false; + try { + construct(noop, [], argument); + return true; + } catch (error) { + return false; + } + }; + var isConstructorLegacy = function isConstructor(argument) { + if (!isCallable(argument)) + return false; + switch (classof(argument)) { + case "AsyncFunction": + case "GeneratorFunction": + case "AsyncGeneratorFunction": + return false; + } + try { + return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument)); + } catch (error) { + return true; + } + }; + isConstructorLegacy.sham = true; + module2.exports = !construct || fails(function() { + var called; + return isConstructorModern(isConstructorModern.call) || !isConstructorModern(Object) || !isConstructorModern(function() { + called = true; + }) || called; + }) ? isConstructorLegacy : isConstructorModern; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-constructor.js +var require_array_species_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-constructor.js": function(exports2, module2) { + "use strict"; + var isArray = require_is_array(); + var isConstructor = require_is_constructor(); + var isObject = require_is_object(); + var wellKnownSymbol = require_well_known_symbol(); + var SPECIES = wellKnownSymbol("species"); + var $Array = Array; + module2.exports = function(originalArray) { + var C; + if (isArray(originalArray)) { + C = originalArray.constructor; + if (isConstructor(C) && (C === $Array || isArray(C.prototype))) + C = void 0; + else if (isObject(C)) { + C = C[SPECIES]; + if (C === null) + C = void 0; + } + } + return C === void 0 ? $Array : C; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-create.js +var require_array_species_create = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-create.js": function(exports2, module2) { + "use strict"; + var arraySpeciesConstructor = require_array_species_constructor(); + module2.exports = function(originalArray, length) { + return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-iteration.js +var require_array_iteration = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-iteration.js": function(exports2, module2) { + "use strict"; + var bind = require_function_bind_context(); + var uncurryThis = require_function_uncurry_this(); + var IndexedObject = require_indexed_object(); + var toObject = require_to_object(); + var lengthOfArrayLike = require_length_of_array_like(); + var arraySpeciesCreate = require_array_species_create(); + var push = uncurryThis([].push); + var createMethod = function(TYPE) { + var IS_MAP = TYPE === 1; + var IS_FILTER = TYPE === 2; + var IS_SOME = TYPE === 3; + var IS_EVERY = TYPE === 4; + var IS_FIND_INDEX = TYPE === 6; + var IS_FILTER_REJECT = TYPE === 7; + var NO_HOLES = TYPE === 5 || IS_FIND_INDEX; + return function($this, callbackfn, that, specificCreate) { + var O = toObject($this); + var self2 = IndexedObject(O); + var length = lengthOfArrayLike(self2); + var boundFunction = bind(callbackfn, that); + var index = 0; + var create = specificCreate || arraySpeciesCreate; + var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : void 0; + var value, result; + for (; length > index; index++) + if (NO_HOLES || index in self2) { + value = self2[index]; + result = boundFunction(value, index, O); + if (TYPE) { + if (IS_MAP) + target[index] = result; + else if (result) + switch (TYPE) { + case 3: + return true; + case 5: + return value; + case 6: + return index; + case 2: + push(target, value); + } + else + switch (TYPE) { + case 4: + return false; + case 7: + push(target, value); + } + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; + }; + module2.exports = { + // `Array.prototype.forEach` method + // https://tc39.es/ecma262/#sec-array.prototype.foreach + forEach: createMethod(0), + // `Array.prototype.map` method + // https://tc39.es/ecma262/#sec-array.prototype.map + map: createMethod(1), + // `Array.prototype.filter` method + // https://tc39.es/ecma262/#sec-array.prototype.filter + filter: createMethod(2), + // `Array.prototype.some` method + // https://tc39.es/ecma262/#sec-array.prototype.some + some: createMethod(3), + // `Array.prototype.every` method + // https://tc39.es/ecma262/#sec-array.prototype.every + every: createMethod(4), + // `Array.prototype.find` method + // https://tc39.es/ecma262/#sec-array.prototype.find + find: createMethod(5), + // `Array.prototype.findIndex` method + // https://tc39.es/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod(6), + // `Array.prototype.filterReject` method + // https://github.com/tc39/proposal-array-filtering + filterReject: createMethod(7) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.constructor.js +var require_es_symbol_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.constructor.js": function() { + "use strict"; + var $2 = require_export(); + var global2 = require_global(); + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var IS_PURE = require_is_pure(); + var DESCRIPTORS = require_descriptors(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var fails = require_fails(); + var hasOwn = require_has_own_property(); + var isPrototypeOf = require_object_is_prototype_of(); + var anObject = require_an_object(); + var toIndexedObject = require_to_indexed_object(); + var toPropertyKey = require_to_property_key(); + var $toString = require_to_string(); + var createPropertyDescriptor = require_create_property_descriptor(); + var nativeObjectCreate = require_object_create(); + var objectKeys = require_object_keys(); + var getOwnPropertyNamesModule = require_object_get_own_property_names(); + var getOwnPropertyNamesExternal = require_object_get_own_property_names_external(); + var getOwnPropertySymbolsModule = require_object_get_own_property_symbols(); + var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor(); + var definePropertyModule = require_object_define_property(); + var definePropertiesModule = require_object_define_properties(); + var propertyIsEnumerableModule = require_object_property_is_enumerable(); + var defineBuiltIn = require_define_built_in(); + var defineBuiltInAccessor = require_define_built_in_accessor(); + var shared = require_shared(); + var sharedKey = require_shared_key(); + var hiddenKeys = require_hidden_keys(); + var uid = require_uid(); + var wellKnownSymbol = require_well_known_symbol(); + var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped(); + var defineWellKnownSymbol = require_well_known_symbol_define(); + var defineSymbolToPrimitive = require_symbol_define_to_primitive(); + var setToStringTag = require_set_to_string_tag(); + var InternalStateModule = require_internal_state(); + var $forEach = require_array_iteration().forEach; + var HIDDEN = sharedKey("hidden"); + var SYMBOL = "Symbol"; + var PROTOTYPE = "prototype"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(SYMBOL); + var ObjectPrototype = Object[PROTOTYPE]; + var $Symbol = global2.Symbol; + var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE]; + var RangeError = global2.RangeError; + var TypeError2 = global2.TypeError; + var QObject = global2.QObject; + var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + var nativeDefineProperty = definePropertyModule.f; + var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f; + var nativePropertyIsEnumerable = propertyIsEnumerableModule.f; + var push = uncurryThis([].push); + var AllSymbols = shared("symbols"); + var ObjectPrototypeSymbols = shared("op-symbols"); + var WellKnownSymbolsStore = shared("wks"); + var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; + var fallbackDefineProperty = function(O, P, Attributes) { + var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P); + if (ObjectPrototypeDescriptor) + delete ObjectPrototype[P]; + nativeDefineProperty(O, P, Attributes); + if (ObjectPrototypeDescriptor && O !== ObjectPrototype) { + nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor); + } + }; + var setSymbolDescriptor = DESCRIPTORS && fails(function() { + return nativeObjectCreate(nativeDefineProperty({}, "a", { + get: function() { + return nativeDefineProperty(this, "a", { value: 7 }).a; + } + })).a !== 7; + }) ? fallbackDefineProperty : nativeDefineProperty; + var wrap = function(tag, description) { + var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype); + setInternalState(symbol, { + type: SYMBOL, + tag: tag, + description: description + }); + if (!DESCRIPTORS) + symbol.description = description; + return symbol; + }; + var $defineProperty = function defineProperty(O, P, Attributes) { + if (O === ObjectPrototype) + $defineProperty(ObjectPrototypeSymbols, P, Attributes); + anObject(O); + var key = toPropertyKey(P); + anObject(Attributes); + if (hasOwn(AllSymbols, key)) { + if (!Attributes.enumerable) { + if (!hasOwn(O, HIDDEN)) + nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, nativeObjectCreate(null))); + O[HIDDEN][key] = true; + } else { + if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) + O[HIDDEN][key] = false; + Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) }); + } + return setSymbolDescriptor(O, key, Attributes); + } + return nativeDefineProperty(O, key, Attributes); + }; + var $defineProperties = function defineProperties(O, Properties) { + anObject(O); + var properties = toIndexedObject(Properties); + var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties)); + $forEach(keys, function(key) { + if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) + $defineProperty(O, key, properties[key]); + }); + return O; + }; + var $create = function create(O, Properties) { + return Properties === void 0 ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties); + }; + var $propertyIsEnumerable = function propertyIsEnumerable(V) { + var P = toPropertyKey(V); + var enumerable = call(nativePropertyIsEnumerable, this, P); + if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) + return false; + return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true; + }; + var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) { + var it = toIndexedObject(O); + var key = toPropertyKey(P); + if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) + return; + var descriptor = nativeGetOwnPropertyDescriptor(it, key); + if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) { + descriptor.enumerable = true; + } + return descriptor; + }; + var $getOwnPropertyNames = function getOwnPropertyNames(O) { + var names = nativeGetOwnPropertyNames(toIndexedObject(O)); + var result = []; + $forEach(names, function(key) { + if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) + push(result, key); + }); + return result; + }; + var $getOwnPropertySymbols = function(O) { + var IS_OBJECT_PROTOTYPE = O === ObjectPrototype; + var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O)); + var result = []; + $forEach(names, function(key) { + if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) { + push(result, AllSymbols[key]); + } + }); + return result; + }; + if (!NATIVE_SYMBOL) { + $Symbol = function Symbol2() { + if (isPrototypeOf(SymbolPrototype, this)) + throw new TypeError2("Symbol is not a constructor"); + var description = !arguments.length || arguments[0] === void 0 ? void 0 : $toString(arguments[0]); + var tag = uid(description); + var setter = function(value) { + var $this = this === void 0 ? global2 : this; + if ($this === ObjectPrototype) + call(setter, ObjectPrototypeSymbols, value); + if (hasOwn($this, HIDDEN) && hasOwn($this[HIDDEN], tag)) + $this[HIDDEN][tag] = false; + var descriptor = createPropertyDescriptor(1, value); + try { + setSymbolDescriptor($this, tag, descriptor); + } catch (error) { + if (!(error instanceof RangeError)) + throw error; + fallbackDefineProperty($this, tag, descriptor); + } + }; + if (DESCRIPTORS && USE_SETTER) + setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter }); + return wrap(tag, description); + }; + SymbolPrototype = $Symbol[PROTOTYPE]; + defineBuiltIn(SymbolPrototype, "toString", function toString() { + return getInternalState(this).tag; + }); + defineBuiltIn($Symbol, "withoutSetter", function(description) { + return wrap(uid(description), description); + }); + propertyIsEnumerableModule.f = $propertyIsEnumerable; + definePropertyModule.f = $defineProperty; + definePropertiesModule.f = $defineProperties; + getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor; + getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames; + getOwnPropertySymbolsModule.f = $getOwnPropertySymbols; + wrappedWellKnownSymbolModule.f = function(name) { + return wrap(wellKnownSymbol(name), name); + }; + if (DESCRIPTORS) { + defineBuiltInAccessor(SymbolPrototype, "description", { + configurable: true, + get: function description() { + return getInternalState(this).description; + } + }); + if (!IS_PURE) { + defineBuiltIn(ObjectPrototype, "propertyIsEnumerable", $propertyIsEnumerable, { unsafe: true }); + } + } + } + $2({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, { + Symbol: $Symbol + }); + $forEach(objectKeys(WellKnownSymbolsStore), function(name) { + defineWellKnownSymbol(name); + }); + $2({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, { + useSetter: function() { + USE_SETTER = true; + }, + useSimple: function() { + USE_SETTER = false; + } + }); + $2({ target: "Object", stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, { + // `Object.create` method + // https://tc39.es/ecma262/#sec-object.create + create: $create, + // `Object.defineProperty` method + // https://tc39.es/ecma262/#sec-object.defineproperty + defineProperty: $defineProperty, + // `Object.defineProperties` method + // https://tc39.es/ecma262/#sec-object.defineproperties + defineProperties: $defineProperties, + // `Object.getOwnPropertyDescriptor` method + // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors + getOwnPropertyDescriptor: $getOwnPropertyDescriptor + }); + $2({ target: "Object", stat: true, forced: !NATIVE_SYMBOL }, { + // `Object.getOwnPropertyNames` method + // https://tc39.es/ecma262/#sec-object.getownpropertynames + getOwnPropertyNames: $getOwnPropertyNames + }); + defineSymbolToPrimitive(); + setToStringTag($Symbol, SYMBOL); + hiddenKeys[HIDDEN] = true; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-registry-detection.js +var require_symbol_registry_detection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-registry-detection.js": function(exports2, module2) { + "use strict"; + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + module2.exports = NATIVE_SYMBOL && !!Symbol["for"] && !!Symbol.keyFor; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.for.js +var require_es_symbol_for = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.for.js": function() { + "use strict"; + var $2 = require_export(); + var getBuiltIn = require_get_built_in(); + var hasOwn = require_has_own_property(); + var toString = require_to_string(); + var shared = require_shared(); + var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection(); + var StringToSymbolRegistry = shared("string-to-symbol-registry"); + var SymbolToStringRegistry = shared("symbol-to-string-registry"); + $2({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, { + "for": function(key) { + var string = toString(key); + if (hasOwn(StringToSymbolRegistry, string)) + return StringToSymbolRegistry[string]; + var symbol = getBuiltIn("Symbol")(string); + StringToSymbolRegistry[string] = symbol; + SymbolToStringRegistry[symbol] = string; + return symbol; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.key-for.js +var require_es_symbol_key_for = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.key-for.js": function() { + "use strict"; + var $2 = require_export(); + var hasOwn = require_has_own_property(); + var isSymbol = require_is_symbol(); + var tryToString = require_try_to_string(); + var shared = require_shared(); + var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection(); + var SymbolToStringRegistry = shared("symbol-to-string-registry"); + $2({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, { + keyFor: function keyFor(sym) { + if (!isSymbol(sym)) + throw new TypeError(tryToString(sym) + " is not a symbol"); + if (hasOwn(SymbolToStringRegistry, sym)) + return SymbolToStringRegistry[sym]; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-apply.js +var require_function_apply = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-apply.js": function(exports2, module2) { + "use strict"; + var NATIVE_BIND = require_function_bind_native(); + var FunctionPrototype = Function.prototype; + var apply = FunctionPrototype.apply; + var call = FunctionPrototype.call; + module2.exports = typeof Reflect == "object" && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function() { + return call.apply(apply, arguments); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-json-replacer-function.js +var require_get_json_replacer_function = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-json-replacer-function.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var isArray = require_is_array(); + var isCallable = require_is_callable(); + var classof = require_classof_raw(); + var toString = require_to_string(); + var push = uncurryThis([].push); + module2.exports = function(replacer) { + if (isCallable(replacer)) + return replacer; + if (!isArray(replacer)) + return; + var rawLength = replacer.length; + var keys = []; + for (var i = 0; i < rawLength; i++) { + var element = replacer[i]; + if (typeof element == "string") + push(keys, element); + else if (typeof element == "number" || classof(element) === "Number" || classof(element) === "String") + push(keys, toString(element)); + } + var keysLength = keys.length; + var root = true; + return function(key, value) { + if (root) { + root = false; + return value; + } + if (isArray(this)) + return value; + for (var j = 0; j < keysLength; j++) + if (keys[j] === key) + return value; + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.json.stringify.js +var require_es_json_stringify = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.json.stringify.js": function() { + "use strict"; + var $2 = require_export(); + var getBuiltIn = require_get_built_in(); + var apply = require_function_apply(); + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var isCallable = require_is_callable(); + var isSymbol = require_is_symbol(); + var arraySlice = require_array_slice(); + var getReplacerFunction = require_get_json_replacer_function(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var $String = String; + var $stringify = getBuiltIn("JSON", "stringify"); + var exec = uncurryThis(/./.exec); + var charAt = uncurryThis("".charAt); + var charCodeAt = uncurryThis("".charCodeAt); + var replace = uncurryThis("".replace); + var numberToString = uncurryThis(1 .toString); + var tester = /[\uD800-\uDFFF]/g; + var low = /^[\uD800-\uDBFF]$/; + var hi = /^[\uDC00-\uDFFF]$/; + var WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function() { + var symbol = getBuiltIn("Symbol")("stringify detection"); + return $stringify([symbol]) !== "[null]" || $stringify({ a: symbol }) !== "{}" || $stringify(Object(symbol)) !== "{}"; + }); + var ILL_FORMED_UNICODE = fails(function() { + return $stringify("\uDF06\uD834") !== '"\\udf06\\ud834"' || $stringify("\uDEAD") !== '"\\udead"'; + }); + var stringifyWithSymbolsFix = function(it, replacer) { + var args = arraySlice(arguments); + var $replacer = getReplacerFunction(replacer); + if (!isCallable($replacer) && (it === void 0 || isSymbol(it))) + return; + args[1] = function(key, value) { + if (isCallable($replacer)) + value = call($replacer, this, $String(key), value); + if (!isSymbol(value)) + return value; + }; + return apply($stringify, null, args); + }; + var fixIllFormed = function(match, offset, string) { + var prev = charAt(string, offset - 1); + var next = charAt(string, offset + 1); + if (exec(low, match) && !exec(hi, next) || exec(hi, match) && !exec(low, prev)) { + return "\\u" + numberToString(charCodeAt(match, 0), 16); + } + return match; + }; + if ($stringify) { + $2({ target: "JSON", stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + stringify: function stringify(it, replacer, space) { + var args = arraySlice(arguments); + var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args); + return ILL_FORMED_UNICODE && typeof result == "string" ? replace(result, tester, fixIllFormed) : result; + } + }); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-symbols.js +var require_es_object_get_own_property_symbols = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-symbols.js": function() { + "use strict"; + var $2 = require_export(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var fails = require_fails(); + var getOwnPropertySymbolsModule = require_object_get_own_property_symbols(); + var toObject = require_to_object(); + var FORCED = !NATIVE_SYMBOL || fails(function() { + getOwnPropertySymbolsModule.f(1); + }); + $2({ target: "Object", stat: true, forced: FORCED }, { + getOwnPropertySymbols: function getOwnPropertySymbols(it) { + var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : []; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.js +var require_es_symbol = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.js": function() { + "use strict"; + require_es_symbol_constructor(); + require_es_symbol_for(); + require_es_symbol_key_for(); + require_es_json_stringify(); + require_es_object_get_own_property_symbols(); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.description.js +var require_es_symbol_description = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.description.js": function() { + "use strict"; + var $2 = require_export(); + var DESCRIPTORS = require_descriptors(); + var global2 = require_global(); + var uncurryThis = require_function_uncurry_this(); + var hasOwn = require_has_own_property(); + var isCallable = require_is_callable(); + var isPrototypeOf = require_object_is_prototype_of(); + var toString = require_to_string(); + var defineBuiltInAccessor = require_define_built_in_accessor(); + var copyConstructorProperties = require_copy_constructor_properties(); + var NativeSymbol = global2.Symbol; + var SymbolPrototype = NativeSymbol && NativeSymbol.prototype; + if (DESCRIPTORS && isCallable(NativeSymbol) && (!("description" in SymbolPrototype) || // Safari 12 bug + NativeSymbol().description !== void 0)) { + EmptyStringDescriptionStore = {}; + SymbolWrapper = function Symbol2() { + var description = arguments.length < 1 || arguments[0] === void 0 ? void 0 : toString(arguments[0]); + var result = isPrototypeOf(SymbolPrototype, this) ? new NativeSymbol(description) : description === void 0 ? NativeSymbol() : NativeSymbol(description); + if (description === "") + EmptyStringDescriptionStore[result] = true; + return result; + }; + copyConstructorProperties(SymbolWrapper, NativeSymbol); + SymbolWrapper.prototype = SymbolPrototype; + SymbolPrototype.constructor = SymbolWrapper; + NATIVE_SYMBOL = String(NativeSymbol("description detection")) === "Symbol(description detection)"; + thisSymbolValue = uncurryThis(SymbolPrototype.valueOf); + symbolDescriptiveString = uncurryThis(SymbolPrototype.toString); + regexp = /^Symbol\((.*)\)[^)]+$/; + replace = uncurryThis("".replace); + stringSlice = uncurryThis("".slice); + defineBuiltInAccessor(SymbolPrototype, "description", { + configurable: true, + get: function description() { + var symbol = thisSymbolValue(this); + if (hasOwn(EmptyStringDescriptionStore, symbol)) + return ""; + var string = symbolDescriptiveString(symbol); + var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, "$1"); + return desc === "" ? void 0 : desc; + } + }); + $2({ global: true, constructor: true, forced: true }, { + Symbol: SymbolWrapper + }); + } + var EmptyStringDescriptionStore; + var SymbolWrapper; + var NATIVE_SYMBOL; + var thisSymbolValue; + var symbolDescriptiveString; + var regexp; + var replace; + var stringSlice; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.iterator.js +var require_es_symbol_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.iterator.js": function() { + "use strict"; + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("iterator"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.to-primitive.js +var require_es_symbol_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.to-primitive.js": function() { + "use strict"; + var defineWellKnownSymbol = require_well_known_symbol_define(); + var defineSymbolToPrimitive = require_symbol_define_to_primitive(); + defineWellKnownSymbol("toPrimitive"); + defineSymbolToPrimitive(); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-accessor.js +var require_function_uncurry_this_accessor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-accessor.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var aCallable = require_a_callable(); + module2.exports = function(object, key, method) { + try { + return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method])); + } catch (error) { + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-possible-prototype.js +var require_is_possible_prototype = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-possible-prototype.js": function(exports2, module2) { + "use strict"; + var isObject = require_is_object(); + module2.exports = function(argument) { + return isObject(argument) || argument === null; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-possible-prototype.js +var require_a_possible_prototype = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-possible-prototype.js": function(exports2, module2) { + "use strict"; + var isPossiblePrototype = require_is_possible_prototype(); + var $String = String; + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isPossiblePrototype(argument)) + return argument; + throw new $TypeError("Can't set " + $String(argument) + " as a prototype"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-set-prototype-of.js +var require_object_set_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-set-prototype-of.js": function(exports2, module2) { + "use strict"; + var uncurryThisAccessor = require_function_uncurry_this_accessor(); + var anObject = require_an_object(); + var aPossiblePrototype = require_a_possible_prototype(); + module2.exports = Object.setPrototypeOf || ("__proto__" in {} ? function() { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = uncurryThisAccessor(Object.prototype, "__proto__", "set"); + setter(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { + } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) + setter(O, proto); + else + O.__proto__ = proto; + return O; + }; + }() : void 0); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/proxy-accessor.js +var require_proxy_accessor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/proxy-accessor.js": function(exports2, module2) { + "use strict"; + var defineProperty = require_object_define_property().f; + module2.exports = function(Target, Source, key) { + key in Target || defineProperty(Target, key, { + configurable: true, + get: function() { + return Source[key]; + }, + set: function(it) { + Source[key] = it; + } + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inherit-if-required.js +var require_inherit_if_required = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inherit-if-required.js": function(exports2, module2) { + "use strict"; + var isCallable = require_is_callable(); + var isObject = require_is_object(); + var setPrototypeOf = require_object_set_prototype_of(); + module2.exports = function($this, dummy, Wrapper) { + var NewTarget, NewTargetPrototype; + if ( + // it can work only with native `setPrototypeOf` + setPrototypeOf && // we haven't completely correct pre-ES6 way for getting `new.target`, so use this + isCallable(NewTarget = dummy.constructor) && NewTarget !== Wrapper && isObject(NewTargetPrototype = NewTarget.prototype) && NewTargetPrototype !== Wrapper.prototype + ) + setPrototypeOf($this, NewTargetPrototype); + return $this; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/normalize-string-argument.js +var require_normalize_string_argument = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/normalize-string-argument.js": function(exports2, module2) { + "use strict"; + var toString = require_to_string(); + module2.exports = function(argument, $default) { + return argument === void 0 ? arguments.length < 2 ? "" : $default : toString(argument); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/install-error-cause.js +var require_install_error_cause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/install-error-cause.js": function(exports2, module2) { + "use strict"; + var isObject = require_is_object(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + module2.exports = function(O, options) { + if (isObject(options) && "cause" in options) { + createNonEnumerableProperty(O, "cause", options.cause); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-clear.js +var require_error_stack_clear = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-clear.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var $Error = Error; + var replace = uncurryThis("".replace); + var TEST = function(arg) { + return String(new $Error(arg).stack); + }("zxcasd"); + var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/; + var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST); + module2.exports = function(stack, dropEntries) { + if (IS_V8_OR_CHAKRA_STACK && typeof stack == "string" && !$Error.prepareStackTrace) { + while (dropEntries--) + stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, ""); + } + return stack; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-installable.js +var require_error_stack_installable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-installable.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var createPropertyDescriptor = require_create_property_descriptor(); + module2.exports = !fails(function() { + var error = new Error("a"); + if (!("stack" in error)) + return true; + Object.defineProperty(error, "stack", createPropertyDescriptor(1, 7)); + return error.stack !== 7; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-install.js +var require_error_stack_install = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-install.js": function(exports2, module2) { + "use strict"; + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var clearErrorStack = require_error_stack_clear(); + var ERROR_STACK_INSTALLABLE = require_error_stack_installable(); + var captureStackTrace = Error.captureStackTrace; + module2.exports = function(error, C, stack, dropEntries) { + if (ERROR_STACK_INSTALLABLE) { + if (captureStackTrace) + captureStackTrace(error, C); + else + createNonEnumerableProperty(error, "stack", clearErrorStack(stack, dropEntries)); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/wrap-error-constructor-with-cause.js +var require_wrap_error_constructor_with_cause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/wrap-error-constructor-with-cause.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var hasOwn = require_has_own_property(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var isPrototypeOf = require_object_is_prototype_of(); + var setPrototypeOf = require_object_set_prototype_of(); + var copyConstructorProperties = require_copy_constructor_properties(); + var proxyAccessor = require_proxy_accessor(); + var inheritIfRequired = require_inherit_if_required(); + var normalizeStringArgument = require_normalize_string_argument(); + var installErrorCause = require_install_error_cause(); + var installErrorStack = require_error_stack_install(); + var DESCRIPTORS = require_descriptors(); + var IS_PURE = require_is_pure(); + module2.exports = function(FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) { + var STACK_TRACE_LIMIT = "stackTraceLimit"; + var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1; + var path = FULL_NAME.split("."); + var ERROR_NAME = path[path.length - 1]; + var OriginalError = getBuiltIn.apply(null, path); + if (!OriginalError) + return; + var OriginalErrorPrototype = OriginalError.prototype; + if (!IS_PURE && hasOwn(OriginalErrorPrototype, "cause")) + delete OriginalErrorPrototype.cause; + if (!FORCED) + return OriginalError; + var BaseError = getBuiltIn("Error"); + var WrappedError = wrapper(function(a, b) { + var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, void 0); + var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError(); + if (message !== void 0) + createNonEnumerableProperty(result, "message", message); + installErrorStack(result, WrappedError, result.stack, 2); + if (this && isPrototypeOf(OriginalErrorPrototype, this)) + inheritIfRequired(result, this, WrappedError); + if (arguments.length > OPTIONS_POSITION) + installErrorCause(result, arguments[OPTIONS_POSITION]); + return result; + }); + WrappedError.prototype = OriginalErrorPrototype; + if (ERROR_NAME !== "Error") { + if (setPrototypeOf) + setPrototypeOf(WrappedError, BaseError); + else + copyConstructorProperties(WrappedError, BaseError, { name: true }); + } else if (DESCRIPTORS && STACK_TRACE_LIMIT in OriginalError) { + proxyAccessor(WrappedError, OriginalError, STACK_TRACE_LIMIT); + proxyAccessor(WrappedError, OriginalError, "prepareStackTrace"); + } + copyConstructorProperties(WrappedError, OriginalError); + if (!IS_PURE) + try { + if (OriginalErrorPrototype.name !== ERROR_NAME) { + createNonEnumerableProperty(OriginalErrorPrototype, "name", ERROR_NAME); + } + OriginalErrorPrototype.constructor = WrappedError; + } catch (error) { + } + return WrappedError; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.cause.js +var require_es_error_cause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.cause.js": function() { + "use strict"; + var $2 = require_export(); + var global2 = require_global(); + var apply = require_function_apply(); + var wrapErrorConstructorWithCause = require_wrap_error_constructor_with_cause(); + var WEB_ASSEMBLY = "WebAssembly"; + var WebAssembly = global2[WEB_ASSEMBLY]; + var FORCED = new Error("e", { cause: 7 }).cause !== 7; + var exportGlobalErrorCauseWrapper = function(ERROR_NAME, wrapper) { + var O = {}; + O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED); + $2({ global: true, constructor: true, arity: 1, forced: FORCED }, O); + }; + var exportWebAssemblyErrorCauseWrapper = function(ERROR_NAME, wrapper) { + if (WebAssembly && WebAssembly[ERROR_NAME]) { + var O = {}; + O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + "." + ERROR_NAME, wrapper, FORCED); + $2({ target: WEB_ASSEMBLY, stat: true, constructor: true, arity: 1, forced: FORCED }, O); + } + }; + exportGlobalErrorCauseWrapper("Error", function(init) { + return function Error2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("EvalError", function(init) { + return function EvalError(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("RangeError", function(init) { + return function RangeError(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("ReferenceError", function(init) { + return function ReferenceError2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("SyntaxError", function(init) { + return function SyntaxError2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("TypeError", function(init) { + return function TypeError2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("URIError", function(init) { + return function URIError(message) { + return apply(init, this, arguments); + }; + }); + exportWebAssemblyErrorCauseWrapper("CompileError", function(init) { + return function CompileError(message) { + return apply(init, this, arguments); + }; + }); + exportWebAssemblyErrorCauseWrapper("LinkError", function(init) { + return function LinkError(message) { + return apply(init, this, arguments); + }; + }); + exportWebAssemblyErrorCauseWrapper("RuntimeError", function(init) { + return function RuntimeError(message) { + return apply(init, this, arguments); + }; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-method-has-species-support.js +var require_array_method_has_species_support = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-method-has-species-support.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var wellKnownSymbol = require_well_known_symbol(); + var V8_VERSION = require_engine_v8_version(); + var SPECIES = wellKnownSymbol("species"); + module2.exports = function(METHOD_NAME) { + return V8_VERSION >= 51 || !fails(function() { + var array = []; + var constructor = array.constructor = {}; + constructor[SPECIES] = function() { + return { foo: 1 }; + }; + return array[METHOD_NAME](Boolean).foo !== 1; + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.filter.js +var require_es_array_filter = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.filter.js": function() { + "use strict"; + var $2 = require_export(); + var $filter = require_array_iteration().filter; + var arrayMethodHasSpeciesSupport = require_array_method_has_species_support(); + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("filter"); + $2({ target: "Array", proto: true, forced: !HAS_SPECIES_SUPPORT }, { + filter: function filter(callbackfn) { + return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-method-is-strict.js +var require_array_method_is_strict = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-method-is-strict.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = function(METHOD_NAME, argument) { + var method = [][METHOD_NAME]; + return !!method && fails(function() { + method.call(null, argument || function() { + return 1; + }, 1); + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-for-each.js +var require_array_for_each = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-for-each.js": function(exports2, module2) { + "use strict"; + var $forEach = require_array_iteration().forEach; + var arrayMethodIsStrict = require_array_method_is_strict(); + var STRICT_METHOD = arrayMethodIsStrict("forEach"); + module2.exports = !STRICT_METHOD ? function forEach(callbackfn) { + return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0); + } : [].forEach; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.for-each.js +var require_es_array_for_each = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.for-each.js": function() { + "use strict"; + var $2 = require_export(); + var forEach = require_array_for_each(); + $2({ target: "Array", proto: true, forced: [].forEach !== forEach }, { + forEach: forEach + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-close.js +var require_iterator_close = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-close.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var anObject = require_an_object(); + var getMethod = require_get_method(); + module2.exports = function(iterator, kind, value) { + var innerResult, innerError; + anObject(iterator); + try { + innerResult = getMethod(iterator, "return"); + if (!innerResult) { + if (kind === "throw") + throw value; + return value; + } + innerResult = call(innerResult, iterator); + } catch (error) { + innerError = true; + innerResult = error; + } + if (kind === "throw") + throw value; + if (innerError) + throw innerResult; + anObject(innerResult); + return value; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/call-with-safe-iteration-closing.js +var require_call_with_safe_iteration_closing = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/call-with-safe-iteration-closing.js": function(exports2, module2) { + "use strict"; + var anObject = require_an_object(); + var iteratorClose = require_iterator_close(); + module2.exports = function(iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); + } catch (error) { + iteratorClose(iterator, "throw", error); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators.js +var require_iterators = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators.js": function(exports2, module2) { + "use strict"; + module2.exports = {}; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array-iterator-method.js +var require_is_array_iterator_method = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array-iterator-method.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var Iterators = require_iterators(); + var ITERATOR = wellKnownSymbol("iterator"); + var ArrayPrototype = Array.prototype; + module2.exports = function(it) { + return it !== void 0 && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property.js +var require_create_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var definePropertyModule = require_object_define_property(); + var createPropertyDescriptor = require_create_property_descriptor(); + module2.exports = function(object, key, value) { + if (DESCRIPTORS) + definePropertyModule.f(object, key, createPropertyDescriptor(0, value)); + else + object[key] = value; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator-method.js +var require_get_iterator_method = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator-method.js": function(exports2, module2) { + "use strict"; + var classof = require_classof(); + var getMethod = require_get_method(); + var isNullOrUndefined = require_is_null_or_undefined(); + var Iterators = require_iterators(); + var wellKnownSymbol = require_well_known_symbol(); + var ITERATOR = wellKnownSymbol("iterator"); + module2.exports = function(it) { + if (!isNullOrUndefined(it)) + return getMethod(it, ITERATOR) || getMethod(it, "@@iterator") || Iterators[classof(it)]; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator.js +var require_get_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var aCallable = require_a_callable(); + var anObject = require_an_object(); + var tryToString = require_try_to_string(); + var getIteratorMethod = require_get_iterator_method(); + var $TypeError = TypeError; + module2.exports = function(argument, usingIterator) { + var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator; + if (aCallable(iteratorMethod)) + return anObject(call(iteratorMethod, argument)); + throw new $TypeError(tryToString(argument) + " is not iterable"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-from.js +var require_array_from = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-from.js": function(exports2, module2) { + "use strict"; + var bind = require_function_bind_context(); + var call = require_function_call(); + var toObject = require_to_object(); + var callWithSafeIterationClosing = require_call_with_safe_iteration_closing(); + var isArrayIteratorMethod = require_is_array_iterator_method(); + var isConstructor = require_is_constructor(); + var lengthOfArrayLike = require_length_of_array_like(); + var createProperty = require_create_property(); + var getIterator = require_get_iterator(); + var getIteratorMethod = require_get_iterator_method(); + var $Array = Array; + module2.exports = function from(arrayLike) { + var O = toObject(arrayLike); + var IS_CONSTRUCTOR = isConstructor(this); + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : void 0; + var mapping = mapfn !== void 0; + if (mapping) + mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : void 0); + var iteratorMethod = getIteratorMethod(O); + var index = 0; + var length, result, step, iterator, next, value; + if (iteratorMethod && !(this === $Array && isArrayIteratorMethod(iteratorMethod))) { + iterator = getIterator(O, iteratorMethod); + next = iterator.next; + result = IS_CONSTRUCTOR ? new this() : []; + for (; !(step = call(next, iterator)).done; index++) { + value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value; + createProperty(result, index, value); + } + } else { + length = lengthOfArrayLike(O); + result = IS_CONSTRUCTOR ? new this(length) : $Array(length); + for (; length > index; index++) { + value = mapping ? mapfn(O[index], index) : O[index]; + createProperty(result, index, value); + } + } + result.length = index; + return result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/check-correctness-of-iteration.js +var require_check_correctness_of_iteration = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/check-correctness-of-iteration.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var ITERATOR = wellKnownSymbol("iterator"); + var SAFE_CLOSING = false; + try { + called = 0; + iteratorWithReturn = { + next: function() { + return { done: !!called++ }; + }, + "return": function() { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function() { + return this; + }; + Array.from(iteratorWithReturn, function() { + throw 2; + }); + } catch (error) { + } + var called; + var iteratorWithReturn; + module2.exports = function(exec, SKIP_CLOSING) { + try { + if (!SKIP_CLOSING && !SAFE_CLOSING) + return false; + } catch (error) { + return false; + } + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function() { + return { + next: function() { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { + } + return ITERATION_SUPPORT; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.from.js +var require_es_array_from = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.from.js": function() { + "use strict"; + var $2 = require_export(); + var from = require_array_from(); + var checkCorrectnessOfIteration = require_check_correctness_of_iteration(); + var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function(iterable) { + Array.from(iterable); + }); + $2({ target: "Array", stat: true, forced: INCORRECT_ITERATION }, { + from: from + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/add-to-unscopables.js +var require_add_to_unscopables = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/add-to-unscopables.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var create = require_object_create(); + var defineProperty = require_object_define_property().f; + var UNSCOPABLES = wellKnownSymbol("unscopables"); + var ArrayPrototype = Array.prototype; + if (ArrayPrototype[UNSCOPABLES] === void 0) { + defineProperty(ArrayPrototype, UNSCOPABLES, { + configurable: true, + value: create(null) + }); + } + module2.exports = function(key) { + ArrayPrototype[UNSCOPABLES][key] = true; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/correct-prototype-getter.js +var require_correct_prototype_getter = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/correct-prototype-getter.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = !fails(function() { + function F() { + } + F.prototype.constructor = null; + return Object.getPrototypeOf(new F()) !== F.prototype; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-prototype-of.js +var require_object_get_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-prototype-of.js": function(exports2, module2) { + "use strict"; + var hasOwn = require_has_own_property(); + var isCallable = require_is_callable(); + var toObject = require_to_object(); + var sharedKey = require_shared_key(); + var CORRECT_PROTOTYPE_GETTER = require_correct_prototype_getter(); + var IE_PROTO = sharedKey("IE_PROTO"); + var $Object = Object; + var ObjectPrototype = $Object.prototype; + module2.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function(O) { + var object = toObject(O); + if (hasOwn(object, IE_PROTO)) + return object[IE_PROTO]; + var constructor = object.constructor; + if (isCallable(constructor) && object instanceof constructor) { + return constructor.prototype; + } + return object instanceof $Object ? ObjectPrototype : null; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators-core.js +var require_iterators_core = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators-core.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var isCallable = require_is_callable(); + var isObject = require_is_object(); + var create = require_object_create(); + var getPrototypeOf = require_object_get_prototype_of(); + var defineBuiltIn = require_define_built_in(); + var wellKnownSymbol = require_well_known_symbol(); + var IS_PURE = require_is_pure(); + var ITERATOR = wellKnownSymbol("iterator"); + var BUGGY_SAFARI_ITERATORS = false; + var IteratorPrototype; + var PrototypeOfArrayIteratorPrototype; + var arrayIterator; + if ([].keys) { + arrayIterator = [].keys(); + if (!("next" in arrayIterator)) + BUGGY_SAFARI_ITERATORS = true; + else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) + IteratorPrototype = PrototypeOfArrayIteratorPrototype; + } + } + var NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function() { + var test = {}; + return IteratorPrototype[ITERATOR].call(test) !== test; + }); + if (NEW_ITERATOR_PROTOTYPE) + IteratorPrototype = {}; + else if (IS_PURE) + IteratorPrototype = create(IteratorPrototype); + if (!isCallable(IteratorPrototype[ITERATOR])) { + defineBuiltIn(IteratorPrototype, ITERATOR, function() { + return this; + }); + } + module2.exports = { + IteratorPrototype: IteratorPrototype, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-create-constructor.js +var require_iterator_create_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-create-constructor.js": function(exports2, module2) { + "use strict"; + var IteratorPrototype = require_iterators_core().IteratorPrototype; + var create = require_object_create(); + var createPropertyDescriptor = require_create_property_descriptor(); + var setToStringTag = require_set_to_string_tag(); + var Iterators = require_iterators(); + var returnThis = function() { + return this; + }; + module2.exports = function(IteratorConstructor, NAME, next, ENUMERABLE_NEXT) { + var TO_STRING_TAG = NAME + " Iterator"; + IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); + Iterators[TO_STRING_TAG] = returnThis; + return IteratorConstructor; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-define.js +var require_iterator_define = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-define.js": function(exports2, module2) { + "use strict"; + var $2 = require_export(); + var call = require_function_call(); + var IS_PURE = require_is_pure(); + var FunctionName = require_function_name(); + var isCallable = require_is_callable(); + var createIteratorConstructor = require_iterator_create_constructor(); + var getPrototypeOf = require_object_get_prototype_of(); + var setPrototypeOf = require_object_set_prototype_of(); + var setToStringTag = require_set_to_string_tag(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var defineBuiltIn = require_define_built_in(); + var wellKnownSymbol = require_well_known_symbol(); + var Iterators = require_iterators(); + var IteratorsCore = require_iterators_core(); + var PROPER_FUNCTION_NAME = FunctionName.PROPER; + var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE; + var IteratorPrototype = IteratorsCore.IteratorPrototype; + var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; + var ITERATOR = wellKnownSymbol("iterator"); + var KEYS = "keys"; + var VALUES = "values"; + var ENTRIES = "entries"; + var returnThis = function() { + return this; + }; + module2.exports = function(Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor(IteratorConstructor, NAME, next); + var getIterationMethod = function(KIND) { + if (KIND === DEFAULT && defaultIterator) + return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) + return IterablePrototype[KIND]; + switch (KIND) { + case KEYS: + return function keys() { + return new IteratorConstructor(this, KIND); + }; + case VALUES: + return function values() { + return new IteratorConstructor(this, KIND); + }; + case ENTRIES: + return function entries() { + return new IteratorConstructor(this, KIND); + }; + } + return function() { + return new IteratorConstructor(this); + }; + }; + var TO_STRING_TAG = NAME + " Iterator"; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR] || IterablePrototype["@@iterator"] || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME === "Array" ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); + if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) { + defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis); + } + } + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); + if (IS_PURE) + Iterators[TO_STRING_TAG] = returnThis; + } + } + if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) { + if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) { + createNonEnumerableProperty(IterablePrototype, "name", VALUES); + } else { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { + return call(nativeIterator, this); + }; + } + } + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) + for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + defineBuiltIn(IterablePrototype, KEY, methods[KEY]); + } + } + else + $2({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); + } + if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { + defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT }); + } + Iterators[NAME] = defaultIterator; + return methods; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-iter-result-object.js +var require_create_iter_result_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-iter-result-object.js": function(exports2, module2) { + "use strict"; + module2.exports = function(value, done) { + return { value: value, done: done }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.iterator.js +var require_es_array_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.iterator.js": function(exports2, module2) { + "use strict"; + var toIndexedObject = require_to_indexed_object(); + var addToUnscopables = require_add_to_unscopables(); + var Iterators = require_iterators(); + var InternalStateModule = require_internal_state(); + var defineProperty = require_object_define_property().f; + var defineIterator = require_iterator_define(); + var createIterResultObject = require_create_iter_result_object(); + var IS_PURE = require_is_pure(); + var DESCRIPTORS = require_descriptors(); + var ARRAY_ITERATOR = "Array Iterator"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); + module2.exports = defineIterator(Array, "Array", function(iterated, kind) { + setInternalState(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject(iterated), + // target + index: 0, + // next index + kind: kind + // kind + }); + }, function() { + var state = getInternalState(this); + var target = state.target; + var index = state.index++; + if (!target || index >= target.length) { + state.target = void 0; + return createIterResultObject(void 0, true); + } + switch (state.kind) { + case "keys": + return createIterResultObject(index, false); + case "values": + return createIterResultObject(target[index], false); + } + return createIterResultObject([index, target[index]], false); + }, "values"); + var values = Iterators.Arguments = Iterators.Array; + addToUnscopables("keys"); + addToUnscopables("values"); + addToUnscopables("entries"); + if (!IS_PURE && DESCRIPTORS && values.name !== "values") + try { + defineProperty(values, "name", { value: "values" }); + } catch (error) { + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-set-length.js +var require_array_set_length = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-set-length.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var isArray = require_is_array(); + var $TypeError = TypeError; + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function() { + if (this !== void 0) + return true; + try { + Object.defineProperty([], "length", { writable: false }).length = 1; + } catch (error) { + return error instanceof TypeError; + } + }(); + module2.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function(O, length) { + if (isArray(O) && !getOwnPropertyDescriptor(O, "length").writable) { + throw new $TypeError("Cannot set read only .length"); + } + return O.length = length; + } : function(O, length) { + return O.length = length; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js +var require_does_not_exceed_safe_integer = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js": function(exports2, module2) { + "use strict"; + var $TypeError = TypeError; + var MAX_SAFE_INTEGER = 9007199254740991; + module2.exports = function(it) { + if (it > MAX_SAFE_INTEGER) + throw $TypeError("Maximum allowed index exceeded"); + return it; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.push.js +var require_es_array_push = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.push.js": function() { + "use strict"; + var $2 = require_export(); + var toObject = require_to_object(); + var lengthOfArrayLike = require_length_of_array_like(); + var setArrayLength = require_array_set_length(); + var doesNotExceedSafeInteger = require_does_not_exceed_safe_integer(); + var fails = require_fails(); + var INCORRECT_TO_LENGTH = fails(function() { + return [].push.call({ length: 4294967296 }, 1) !== 4294967297; + }); + var properErrorOnNonWritableLength = function() { + try { + Object.defineProperty([], "length", { writable: false }).push(); + } catch (error) { + return error instanceof TypeError; + } + }; + var FORCED = INCORRECT_TO_LENGTH || !properErrorOnNonWritableLength(); + $2({ target: "Array", proto: true, arity: 1, forced: FORCED }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + push: function push(item) { + var O = toObject(this); + var len = lengthOfArrayLike(O); + var argCount = arguments.length; + doesNotExceedSafeInteger(len + argCount); + for (var i = 0; i < argCount; i++) { + O[len] = arguments[i]; + len++; + } + setArrayLength(O, len); + return len; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/date-to-primitive.js +var require_date_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/date-to-primitive.js": function(exports2, module2) { + "use strict"; + var anObject = require_an_object(); + var ordinaryToPrimitive = require_ordinary_to_primitive(); + var $TypeError = TypeError; + module2.exports = function(hint) { + anObject(this); + if (hint === "string" || hint === "default") + hint = "string"; + else if (hint !== "number") + throw new $TypeError("Incorrect hint"); + return ordinaryToPrimitive(this, hint); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.date.to-primitive.js +var require_es_date_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.date.to-primitive.js": function() { + "use strict"; + var hasOwn = require_has_own_property(); + var defineBuiltIn = require_define_built_in(); + var dateToPrimitive = require_date_to_primitive(); + var wellKnownSymbol = require_well_known_symbol(); + var TO_PRIMITIVE = wellKnownSymbol("toPrimitive"); + var DatePrototype = Date.prototype; + if (!hasOwn(DatePrototype, TO_PRIMITIVE)) { + defineBuiltIn(DatePrototype, TO_PRIMITIVE, dateToPrimitive); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/this-number-value.js +var require_this_number_value = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/this-number-value.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + module2.exports = uncurryThis(1 .valueOf); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/whitespaces.js +var require_whitespaces = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/whitespaces.js": function(exports2, module2) { + "use strict"; + module2.exports = " \n\v\f\r                 \u2028\u2029\uFEFF"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-trim.js +var require_string_trim = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-trim.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var requireObjectCoercible = require_require_object_coercible(); + var toString = require_to_string(); + var whitespaces = require_whitespaces(); + var replace = uncurryThis("".replace); + var ltrim = RegExp("^[" + whitespaces + "]+"); + var rtrim = RegExp("(^|[^" + whitespaces + "])[" + whitespaces + "]+$"); + var createMethod = function(TYPE) { + return function($this) { + var string = toString(requireObjectCoercible($this)); + if (TYPE & 1) + string = replace(string, ltrim, ""); + if (TYPE & 2) + string = replace(string, rtrim, "$1"); + return string; + }; + }; + module2.exports = { + // `String.prototype.{ trimLeft, trimStart }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimstart + start: createMethod(1), + // `String.prototype.{ trimRight, trimEnd }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimend + end: createMethod(2), + // `String.prototype.trim` method + // https://tc39.es/ecma262/#sec-string.prototype.trim + trim: createMethod(3) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.number.constructor.js +var require_es_number_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.number.constructor.js": function() { + "use strict"; + var $2 = require_export(); + var IS_PURE = require_is_pure(); + var DESCRIPTORS = require_descriptors(); + var global2 = require_global(); + var path = require_path(); + var uncurryThis = require_function_uncurry_this(); + var isForced = require_is_forced(); + var hasOwn = require_has_own_property(); + var inheritIfRequired = require_inherit_if_required(); + var isPrototypeOf = require_object_is_prototype_of(); + var isSymbol = require_is_symbol(); + var toPrimitive = require_to_primitive(); + var fails = require_fails(); + var getOwnPropertyNames = require_object_get_own_property_names().f; + var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; + var defineProperty = require_object_define_property().f; + var thisNumberValue = require_this_number_value(); + var trim = require_string_trim().trim; + var NUMBER = "Number"; + var NativeNumber = global2[NUMBER]; + var PureNumberNamespace = path[NUMBER]; + var NumberPrototype = NativeNumber.prototype; + var TypeError2 = global2.TypeError; + var stringSlice = uncurryThis("".slice); + var charCodeAt = uncurryThis("".charCodeAt); + var toNumeric = function(value) { + var primValue = toPrimitive(value, "number"); + return typeof primValue == "bigint" ? primValue : toNumber(primValue); + }; + var toNumber = function(argument) { + var it = toPrimitive(argument, "number"); + var first, third, radix, maxCode, digits, length, index, code; + if (isSymbol(it)) + throw new TypeError2("Cannot convert a Symbol value to a number"); + if (typeof it == "string" && it.length > 2) { + it = trim(it); + first = charCodeAt(it, 0); + if (first === 43 || first === 45) { + third = charCodeAt(it, 2); + if (third === 88 || third === 120) + return NaN; + } else if (first === 48) { + switch (charCodeAt(it, 1)) { + case 66: + case 98: + radix = 2; + maxCode = 49; + break; + case 79: + case 111: + radix = 8; + maxCode = 55; + break; + default: + return +it; + } + digits = stringSlice(it, 2); + length = digits.length; + for (index = 0; index < length; index++) { + code = charCodeAt(digits, index); + if (code < 48 || code > maxCode) + return NaN; + } + return parseInt(digits, radix); + } + } + return +it; + }; + var FORCED = isForced(NUMBER, !NativeNumber(" 0o1") || !NativeNumber("0b1") || NativeNumber("+0x1")); + var calledWithNew = function(dummy) { + return isPrototypeOf(NumberPrototype, dummy) && fails(function() { + thisNumberValue(dummy); + }); + }; + var NumberWrapper = function Number2(value) { + var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value)); + return calledWithNew(this) ? inheritIfRequired(Object(n), this, NumberWrapper) : n; + }; + NumberWrapper.prototype = NumberPrototype; + if (FORCED && !IS_PURE) + NumberPrototype.constructor = NumberWrapper; + $2({ global: true, constructor: true, wrap: true, forced: FORCED }, { + Number: NumberWrapper + }); + var copyConstructorProperties = function(target, source) { + for (var keys = DESCRIPTORS ? getOwnPropertyNames(source) : ( + // ES3: + "MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(",") + ), j = 0, key; keys.length > j; j++) { + if (hasOwn(source, key = keys[j]) && !hasOwn(target, key)) { + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + } + }; + if (IS_PURE && PureNumberNamespace) + copyConstructorProperties(path[NUMBER], PureNumberNamespace); + if (FORCED || IS_PURE) + copyConstructorProperties(path[NUMBER], NativeNumber); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.define-properties.js +var require_es_object_define_properties = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.define-properties.js": function() { + "use strict"; + var $2 = require_export(); + var DESCRIPTORS = require_descriptors(); + var defineProperties = require_object_define_properties().f; + $2({ target: "Object", stat: true, forced: Object.defineProperties !== defineProperties, sham: !DESCRIPTORS }, { + defineProperties: defineProperties + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-descriptors.js +var require_es_object_get_own_property_descriptors = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-descriptors.js": function() { + "use strict"; + var $2 = require_export(); + var DESCRIPTORS = require_descriptors(); + var ownKeys2 = require_own_keys(); + var toIndexedObject = require_to_indexed_object(); + var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor(); + var createProperty = require_create_property(); + $2({ target: "Object", stat: true, sham: !DESCRIPTORS }, { + getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) { + var O = toIndexedObject(object); + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + var keys = ownKeys2(O); + var result = {}; + var index = 0; + var key, descriptor; + while (keys.length > index) { + descriptor = getOwnPropertyDescriptor(O, key = keys[index++]); + if (descriptor !== void 0) + createProperty(result, key, descriptor); + } + return result; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.keys.js +var require_es_object_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.keys.js": function() { + "use strict"; + var $2 = require_export(); + var toObject = require_to_object(); + var nativeKeys = require_object_keys(); + var fails = require_fails(); + var FAILS_ON_PRIMITIVES = fails(function() { + nativeKeys(1); + }); + $2({ target: "Object", stat: true, forced: FAILS_ON_PRIMITIVES }, { + keys: function keys(it) { + return nativeKeys(toObject(it)); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-flags.js +var require_regexp_flags = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-flags.js": function(exports2, module2) { + "use strict"; + var anObject = require_an_object(); + module2.exports = function() { + var that = anObject(this); + var result = ""; + if (that.hasIndices) + result += "d"; + if (that.global) + result += "g"; + if (that.ignoreCase) + result += "i"; + if (that.multiline) + result += "m"; + if (that.dotAll) + result += "s"; + if (that.unicode) + result += "u"; + if (that.unicodeSets) + result += "v"; + if (that.sticky) + result += "y"; + return result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-sticky-helpers.js +var require_regexp_sticky_helpers = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-sticky-helpers.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var global2 = require_global(); + var $RegExp = global2.RegExp; + var UNSUPPORTED_Y = fails(function() { + var re = $RegExp("a", "y"); + re.lastIndex = 2; + return re.exec("abcd") !== null; + }); + var MISSED_STICKY = UNSUPPORTED_Y || fails(function() { + return !$RegExp("a", "y").sticky; + }); + var BROKEN_CARET = UNSUPPORTED_Y || fails(function() { + var re = $RegExp("^r", "gy"); + re.lastIndex = 2; + return re.exec("str") !== null; + }); + module2.exports = { + BROKEN_CARET: BROKEN_CARET, + MISSED_STICKY: MISSED_STICKY, + UNSUPPORTED_Y: UNSUPPORTED_Y + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-dot-all.js +var require_regexp_unsupported_dot_all = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-dot-all.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var global2 = require_global(); + var $RegExp = global2.RegExp; + module2.exports = fails(function() { + var re = $RegExp(".", "s"); + return !(re.dotAll && re.test("\n") && re.flags === "s"); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-ncg.js +var require_regexp_unsupported_ncg = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-ncg.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var global2 = require_global(); + var $RegExp = global2.RegExp; + module2.exports = fails(function() { + var re = $RegExp("(?b)", "g"); + return re.exec("b").groups.a !== "b" || "b".replace(re, "$c") !== "bc"; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-exec.js +var require_regexp_exec = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-exec.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var toString = require_to_string(); + var regexpFlags = require_regexp_flags(); + var stickyHelpers = require_regexp_sticky_helpers(); + var shared = require_shared(); + var create = require_object_create(); + var getInternalState = require_internal_state().get; + var UNSUPPORTED_DOT_ALL = require_regexp_unsupported_dot_all(); + var UNSUPPORTED_NCG = require_regexp_unsupported_ncg(); + var nativeReplace = shared("native-string-replace", String.prototype.replace); + var nativeExec = RegExp.prototype.exec; + var patchedExec = nativeExec; + var charAt = uncurryThis("".charAt); + var indexOf = uncurryThis("".indexOf); + var replace = uncurryThis("".replace); + var stringSlice = uncurryThis("".slice); + var UPDATES_LAST_INDEX_WRONG = function() { + var re1 = /a/; + var re2 = /b*/g; + call(nativeExec, re1, "a"); + call(nativeExec, re2, "a"); + return re1.lastIndex !== 0 || re2.lastIndex !== 0; + }(); + var UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET; + var NPCG_INCLUDED = /()??/.exec("")[1] !== void 0; + var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG; + if (PATCH) { + patchedExec = function exec(string) { + var re = this; + var state = getInternalState(re); + var str = toString(string); + var raw = state.raw; + var result, reCopy, lastIndex, match, i, object, group; + if (raw) { + raw.lastIndex = re.lastIndex; + result = call(patchedExec, raw, str); + re.lastIndex = raw.lastIndex; + return result; + } + var groups = state.groups; + var sticky = UNSUPPORTED_Y && re.sticky; + var flags = call(regexpFlags, re); + var source = re.source; + var charsAdded = 0; + var strCopy = str; + if (sticky) { + flags = replace(flags, "y", ""); + if (indexOf(flags, "g") === -1) { + flags += "g"; + } + strCopy = stringSlice(str, re.lastIndex); + if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== "\n")) { + source = "(?: " + source + ")"; + strCopy = " " + strCopy; + charsAdded++; + } + reCopy = new RegExp("^(?:" + source + ")", flags); + } + if (NPCG_INCLUDED) { + reCopy = new RegExp("^" + source + "$(?!\\s)", flags); + } + if (UPDATES_LAST_INDEX_WRONG) + lastIndex = re.lastIndex; + match = call(nativeExec, sticky ? reCopy : re, strCopy); + if (sticky) { + if (match) { + match.input = stringSlice(match.input, charsAdded); + match[0] = stringSlice(match[0], charsAdded); + match.index = re.lastIndex; + re.lastIndex += match[0].length; + } else + re.lastIndex = 0; + } else if (UPDATES_LAST_INDEX_WRONG && match) { + re.lastIndex = re.global ? match.index + match[0].length : lastIndex; + } + if (NPCG_INCLUDED && match && match.length > 1) { + call(nativeReplace, match[0], reCopy, function() { + for (i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === void 0) + match[i] = void 0; + } + }); + } + if (match && groups) { + match.groups = object = create(null); + for (i = 0; i < groups.length; i++) { + group = groups[i]; + object[group[0]] = match[group[1]]; + } + } + return match; + }; + } + module2.exports = patchedExec; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.exec.js +var require_es_regexp_exec = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.exec.js": function() { + "use strict"; + var $2 = require_export(); + var exec = require_regexp_exec(); + $2({ target: "RegExp", proto: true, forced: /./.exec !== exec }, { + exec: exec + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.test.js +var require_es_regexp_test = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.test.js": function() { + "use strict"; + require_es_regexp_exec(); + var $2 = require_export(); + var call = require_function_call(); + var isCallable = require_is_callable(); + var anObject = require_an_object(); + var toString = require_to_string(); + var DELEGATES_TO_EXEC = function() { + var execCalled = false; + var re = /[ac]/; + re.exec = function() { + execCalled = true; + return /./.exec.apply(this, arguments); + }; + return re.test("abc") === true && execCalled; + }(); + var nativeTest = /./.test; + $2({ target: "RegExp", proto: true, forced: !DELEGATES_TO_EXEC }, { + test: function(S) { + var R = anObject(this); + var string = toString(S); + var exec = R.exec; + if (!isCallable(exec)) + return call(nativeTest, R, string); + var result = call(exec, R, string); + if (result === null) + return false; + anObject(result); + return true; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-multibyte.js +var require_string_multibyte = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-multibyte.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var toString = require_to_string(); + var requireObjectCoercible = require_require_object_coercible(); + var charAt = uncurryThis("".charAt); + var charCodeAt = uncurryThis("".charCodeAt); + var stringSlice = uncurryThis("".slice); + var createMethod = function(CONVERT_TO_STRING) { + return function($this, pos) { + var S = toString(requireObjectCoercible($this)); + var position = toIntegerOrInfinity(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) + return CONVERT_TO_STRING ? "" : void 0; + first = charCodeAt(S, position); + return first < 55296 || first > 56319 || position + 1 === size || (second = charCodeAt(S, position + 1)) < 56320 || second > 57343 ? CONVERT_TO_STRING ? charAt(S, position) : first : CONVERT_TO_STRING ? stringSlice(S, position, position + 2) : (first - 55296 << 10) + (second - 56320) + 65536; + }; + }; + module2.exports = { + // `String.prototype.codePointAt` method + // https://tc39.es/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod(true) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.iterator.js +var require_es_string_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.iterator.js": function() { + "use strict"; + var charAt = require_string_multibyte().charAt; + var toString = require_to_string(); + var InternalStateModule = require_internal_state(); + var defineIterator = require_iterator_define(); + var createIterResultObject = require_create_iter_result_object(); + var STRING_ITERATOR = "String Iterator"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); + defineIterator(String, "String", function(iterated) { + setInternalState(this, { + type: STRING_ITERATOR, + string: toString(iterated), + index: 0 + }); + }, function next() { + var state = getInternalState(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) + return createIterResultObject(void 0, true); + point = charAt(string, index); + state.index += point.length; + return createIterResultObject(point, false); + }); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/Event.js +var require_Event = __commonJS({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/Event.js": function() { + (function(undefined2) { + if (!function(n) { + if (!("Event" in n)) + return false; + try { + return new Event("click"), true; + } catch (n2) { + return false; + } + }(self)) { + (function() { + if (typeof document === "undefined" || typeof window === "undefined") + return; + var existingProto = window.Event && window.Event.prototype || null; + function Event2(type, eventInitDict) { + if (!type) { + throw new Error("Not enough arguments"); + } + var event; + if ("createEvent" in document) { + event = document.createEvent("Event"); + var bubbles = eventInitDict && eventInitDict.bubbles !== undefined2 ? eventInitDict.bubbles : false; + var cancelable = eventInitDict && eventInitDict.cancelable !== undefined2 ? eventInitDict.cancelable : false; + event.initEvent(type, bubbles, cancelable); + return event; + } + event = document.createEventObject(); + event.type = type; + event.bubbles = eventInitDict && eventInitDict.bubbles !== undefined2 ? eventInitDict.bubbles : false; + event.cancelable = eventInitDict && eventInitDict.cancelable !== undefined2 ? eventInitDict.cancelable : false; + return event; + } + Event2.NONE = 0; + Event2.CAPTURING_PHASE = 1; + Event2.AT_TARGET = 2; + Event2.BUBBLING_PHASE = 3; + window.Event = Window.prototype.Event = Event2; + if (existingProto) { + Object.defineProperty(window.Event, "prototype", { + configurable: false, + enumerable: false, + writable: true, + value: existingProto + }); + } + if (!("createEvent" in document)) { + window.addEventListener = Window.prototype.addEventListener = Document.prototype.addEventListener = Element.prototype.addEventListener = function addEventListener() { + var element = this, type = arguments[0], listener = arguments[1]; + if (!element._events) { + element._events = {}; + } + if (!element._events[type]) { + element._events[type] = function(event) { + var list = element._events[event.type].list, events = list.slice(), index = -1, length = events.length, eventElement; + event.preventDefault = function preventDefault() { + if (event.cancelable !== false) { + event.returnValue = false; + } + }; + event.stopPropagation = function stopPropagation() { + event.cancelBubble = true; + }; + event.stopImmediatePropagation = function stopImmediatePropagation() { + event.cancelBubble = true; + event.cancelImmediate = true; + }; + event.currentTarget = element; + event.relatedTarget = event.fromElement || null; + event.target = event.target || event.srcElement || element; + event.timeStamp = (/* @__PURE__ */ new Date()).getTime(); + if (event.clientX) { + event.pageX = event.clientX + document.documentElement.scrollLeft; + event.pageY = event.clientY + document.documentElement.scrollTop; + } + while (++index < length && !event.cancelImmediate) { + if (index in events) { + eventElement = events[index]; + if (list.includes(eventElement) && typeof eventElement === "function") { + eventElement.call(element, event); + } + } + } + }; + element._events[type].list = []; + if (element.attachEvent) { + element.attachEvent("on" + type, element._events[type]); + } + } + element._events[type].list.push(listener); + }; + window.removeEventListener = Window.prototype.removeEventListener = Document.prototype.removeEventListener = Element.prototype.removeEventListener = function removeEventListener() { + var element = this, type = arguments[0], listener = arguments[1], index; + if (element._events && element._events[type] && element._events[type].list) { + index = element._events[type].list.indexOf(listener); + if (index !== -1) { + element._events[type].list.splice(index, 1); + if (!element._events[type].list.length) { + if (element.detachEvent) { + element.detachEvent("on" + type, element._events[type]); + } + delete element._events[type]; + } + } + } + }; + window.dispatchEvent = Window.prototype.dispatchEvent = Document.prototype.dispatchEvent = Element.prototype.dispatchEvent = function dispatchEvent(event) { + if (!arguments.length) { + throw new Error("Not enough arguments"); + } + if (!event || typeof event.type !== "string") { + throw new Error("DOM Events Exception 0"); + } + var element = this, type = event.type; + try { + if (!event.bubbles) { + event.cancelBubble = true; + var cancelBubbleEvent = function(event2) { + event2.cancelBubble = true; + (element || window).detachEvent("on" + type, cancelBubbleEvent); + }; + this.attachEvent("on" + type, cancelBubbleEvent); + } + this.fireEvent("on" + type, event); + } catch (error) { + event.target = element; + do { + event.currentTarget = element; + if ("_events" in element && typeof element._events[type] === "function") { + element._events[type].call(element, event); + } + if (typeof element["on" + type] === "function") { + element["on" + type].call(element, event); + } + element = element.nodeType === 9 ? element.parentWindow : element.parentNode; + } while (element && !event.cancelBubble); + } + return true; + }; + document.attachEvent("onreadystatechange", function() { + if (document.readyState === "complete") { + document.dispatchEvent(new Event2("DOMContentLoaded", { + bubbles: true + })); + } + }); + } + })(); + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/matchMedia.js +var require_matchMedia = __commonJS({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/matchMedia.js": function() { + (function(undefined2) { + if (!("matchMedia" in self && "MediaQueryList" in self)) { + (function() { + "use strict"; + var styleMedia = self.styleMedia || self.media; + if (!styleMedia) { + var style = document.createElement("style"), script = document.getElementsByTagName("script")[0], info = null; + style.type = "text/css"; + style.id = "matchmediajs-test"; + if (!script) { + document.head.appendChild(style); + } else { + script.parentNode.insertBefore(style, script); + } + info = "getComputedStyle" in self && self.getComputedStyle(style, null); + styleMedia = { + matchMedium: function(media) { + media = media.replace(/^only\s+/, ""); + var text = "@media " + media + "{ #matchmediajs-test { width: 1px; } }"; + style.textContent = text; + return info.width === "1px"; + } + }; + } + function MediaQueryList() { + this.matches = false; + this.media = "invalid"; + this.listeners = []; + } + MediaQueryList.prototype.addListener = function addListener(listener) { + var listenerIndex = this.listeners.indexOf(listener); + if (listenerIndex === -1) { + this.listeners.push(listener); + } + }; + MediaQueryList.prototype.removeListener = function removeListener(listener) { + var listenerIndex = this.listeners.indexOf(listener); + if (listenerIndex >= 0) { + this.listeners.splice(listenerIndex, 1); + } + }; + self.MediaQueryList = MediaQueryList; + self.matchMedia = function matchMedia(media) { + var list = new MediaQueryList(); + if (0 === arguments.length) { + throw new TypeError("Not enough arguments to matchMedia"); + } + list.media = String(media); + list.matches = styleMedia.matchMedium(media || "all"); + self.addEventListener("resize", function() { + var listeners = [].concat(list.addListener.listeners), matches = styleMedia.matchMedium(media || "all"); + if (matches != list.matches) { + list.matches = matches; + for (var index = 0, length = listeners.length; index < length; ++index) { + listeners[index].call(self, list); + } + } + }); + return list; + }; + })(); + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/MediaQueryList.prototype.addEventListener.js +var require_MediaQueryList_prototype_addEventListener = __commonJS({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/MediaQueryList.prototype.addEventListener.js": function() { + (function(undefined2) { + if (!("matchMedia" in self && "addEventListener" in self.matchMedia("all"))) { + (function(global2) { + "use strict"; + function addEventListener(type, listener) { + if (type === "change") { + this.removeListener(listener); + this.addListener(listener); + } + if (arguments[2] && arguments[2].once) { + var _this = this; + var remover = function() { + _this.removeListener(remover); + _this.removeListener(listener); + }; + this.addListener(remover); + } + } + function removeEventListener(type, listener) { + if (type === "change") { + this.removeListener(listener); + } + } + var onchangeDescriptor = { + enumerable: true, + configurable: true, + get: function() { + return this._onchangeHandler || null; + }, + set: function(listener) { + var _this = this; + if (!_this._onchangeListener) { + _this._onchangeListener = function() { + if (typeof _this._onchangeHandler !== "function") { + return; + } + _this._onchangeHandler.call(_this, arguments[0]); + }; + _this.addEventListener("change", _this._onchangeListener); + } + _this._onchangeHandler = listener; + } + }; + if ("MediaQueryList" in global2) { + var _addListener = global2.MediaQueryList.prototype.addListener; + var _removeListener = global2.MediaQueryList.prototype.removeListener; + global2.MediaQueryList.prototype.addListener = function addListener(listener) { + var handler = listener; + if (handler.handleEvent) { + handler = handler.handleEvent; + } + _addListener.call(this, handler); + }; + global2.MediaQueryList.prototype.removeListener = function removeListener(listener) { + var handler = listener; + if (handler.handleEvent) { + handler = handler.handleEvent; + } + _removeListener.call(this, handler); + }; + global2.MediaQueryList.prototype.addEventListener = addEventListener; + global2.MediaQueryList.prototype.removeEventListener = removeEventListener; + global2.Object.defineProperty(global2.MediaQueryList.prototype, "onchange", onchangeDescriptor); + } else { + var _matchMedia = self.matchMedia; + self.matchMedia = function matchMedia(media) { + var _mql = _matchMedia(media); + var _addListener2 = _mql.addListener; + var _removeListener2 = _mql.removeListener; + _mql.addListener = function addListener(listener) { + var handler = listener; + if (handler.handleEvent) { + handler = handler.handleEvent; + } + _addListener2.call(this, handler); + }; + _mql.removeListener = function removeListener(listener) { + var handler = listener; + if (handler.handleEvent) { + handler = handler.handleEvent; + } + _removeListener2.call(this, handler); + }; + _mql.addEventListener = addEventListener; + _mql.removeEventListener = removeEventListener; + global2.Object.defineProperty(_mql, "onchange", onchangeDescriptor); + return _mql; + }; + } + })(self); + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/helpers/_DOMTokenList.js +var _DOMTokenList, DOMTokenList_default; +var init_DOMTokenList = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/helpers/_DOMTokenList.js": function() { + _DOMTokenList = function() { + var dpSupport = true; + var defineGetter = function(object, name, fn, configurable) { + if (Object.defineProperty) + Object.defineProperty(object, name, { + configurable: false === dpSupport ? true : !!configurable, + get: fn + }); + else + object.__defineGetter__(name, fn); + }; + try { + defineGetter({}, "support"); + } catch (e) { + dpSupport = false; + } + var _DOMTokenList2 = function(el, prop) { + var that = this; + var tokens = []; + var tokenMap = {}; + var length = 0; + var maxLength = 0; + var addIndexGetter = function(i) { + defineGetter(that, i, function() { + preop(); + return tokens[i]; + }, false); + }; + var reindex = function() { + if (length >= maxLength) + for (; maxLength < length; ++maxLength) { + addIndexGetter(maxLength); + } + }; + var preop = function() { + var error; + var i; + var args = arguments; + var rSpace = /\s+/; + if (args.length) { + for (i = 0; i < args.length; ++i) + if (rSpace.test(args[i])) { + error = new SyntaxError('String "' + args[i] + '" contains an invalid character'); + error.code = 5; + error.name = "InvalidCharacterError"; + throw error; + } + } + if (typeof el[prop] === "object") { + tokens = ("" + el[prop].baseVal).replace(/^\s+|\s+$/g, "").split(rSpace); + } else { + tokens = ("" + el[prop]).replace(/^\s+|\s+$/g, "").split(rSpace); + } + if ("" === tokens[0]) + tokens = []; + tokenMap = {}; + for (i = 0; i < tokens.length; ++i) + tokenMap[tokens[i]] = true; + length = tokens.length; + reindex(); + }; + preop(); + defineGetter(that, "length", function() { + preop(); + return length; + }); + that.toLocaleString = that.toString = function() { + preop(); + return tokens.join(" "); + }; + that.item = function(idx) { + preop(); + return tokens[idx]; + }; + that.contains = function(token) { + preop(); + return !!tokenMap[token]; + }; + that.add = function() { + preop.apply(that, args = arguments); + for (var args, token, i = 0, l = args.length; i < l; ++i) { + token = args[i]; + if (!tokenMap[token]) { + tokens.push(token); + tokenMap[token] = true; + } + } + if (length !== tokens.length) { + length = tokens.length >>> 0; + if (typeof el[prop] === "object") { + el[prop].baseVal = tokens.join(" "); + } else { + el[prop] = tokens.join(" "); + } + reindex(); + } + }; + that.remove = function() { + preop.apply(that, args = arguments); + for (var args, ignore = {}, i = 0, t = []; i < args.length; ++i) { + ignore[args[i]] = true; + delete tokenMap[args[i]]; + } + for (i = 0; i < tokens.length; ++i) + if (!ignore[tokens[i]]) + t.push(tokens[i]); + tokens = t; + length = t.length >>> 0; + if (typeof el[prop] === "object") { + el[prop].baseVal = tokens.join(" "); + } else { + el[prop] = tokens.join(" "); + } + reindex(); + }; + that.toggle = function(token, force) { + preop.apply(that, [token]); + if (void 0 !== force) { + if (force) { + that.add(token); + return true; + } else { + that.remove(token); + return false; + } + } + if (tokenMap[token]) { + that.remove(token); + return false; + } + that.add(token); + return true; + }; + that.forEach = Array.prototype.forEach; + return that; + }; + return _DOMTokenList2; + }(); + DOMTokenList_default = _DOMTokenList; + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DOMTokenList.js +var DOMTokenList_exports = {}; +var init_DOMTokenList2 = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DOMTokenList.js": function() { + init_DOMTokenList(); + (function(undefined2) { + if (!("DOMTokenList" in self && function(e) { + return !("classList" in e) || !e.classList.toggle("x", false) && !e.className; + }(document.createElement("x")))) { + (function(global2) { + var nativeImpl = "DOMTokenList" in global2 && global2.DOMTokenList; + if (!nativeImpl || !!document.createElementNS && !!document.createElementNS("http://www.w3.org/2000/svg", "svg") && !(document.createElementNS("http://www.w3.org/2000/svg", "svg").classList instanceof DOMTokenList)) { + global2.DOMTokenList = DOMTokenList_default; + } + (function() { + var e = document.createElement("span"); + if (!("classList" in e)) + return; + e.classList.toggle("x", false); + if (!e.classList.contains("x")) + return; + e.classList.constructor.prototype.toggle = function toggle(token) { + var force = arguments[1]; + if (force === undefined2) { + var add = !this.contains(token); + this[add ? "add" : "remove"](token); + return add; + } + force = !!force; + this[force ? "add" : "remove"](token); + return force; + }; + })(); + (function() { + var e = document.createElement("span"); + if (!("classList" in e)) + return; + e.classList.add("a", "b"); + if (e.classList.contains("b")) + return; + var native = e.classList.constructor.prototype.add; + e.classList.constructor.prototype.add = function() { + var args = arguments; + var l = arguments.length; + for (var i = 0; i < l; i++) { + native.call(this, args[i]); + } + }; + })(); + (function() { + var e = document.createElement("span"); + if (!("classList" in e)) + return; + e.classList.add("a"); + e.classList.add("b"); + e.classList.remove("a", "b"); + if (!e.classList.contains("b")) + return; + var native = e.classList.constructor.prototype.remove; + e.classList.constructor.prototype.remove = function() { + var args = arguments; + var l = arguments.length; + for (var i = 0; i < l; i++) { + native.call(this, args[i]); + } + }; + })(); + })(self); + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.replace.js +var DOMTokenList_prototype_replace_exports = {}; +var init_DOMTokenList_prototype_replace = __esm({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.replace.js": function() { + init_DOMTokenList(); + (function(undefined2) { + if (!("replace" in (document.createElement("div").classList || {}))) { + (function() { + var classList = document.createElement("div").classList; + classList && (classList.constructor.prototype.replace = function(token, newToken) { + var tokenString = "" + token, newTokenString = "" + newToken; + try { + new DOMException(); + } catch (e) { + self.DOMException = function(message, name) { + if (!(this instanceof DOMException)) + return new DOMException(message, name); + this.message = message; + this.name = name; + }; + } + var error; + if (!(tokenString && newTokenString)) + error = "SyntaxError"; + if (!error && (/\s/.test(tokenString) || /\s/.test(newTokenString))) + error = "InvalidCharacterError"; + if (error) + throw new DOMException("DOMTokenList.replace was provided tokens '" + tokenString + "' and '" + newTokenString + "'", error); + if (!this.contains(tokenString)) + return false; + var tokensTobeMoved = []; + var newTokenFound = false; + for (var i = 0; i < this.length; ++i) + if (newTokenString === this.item(i)) + newTokenFound = true; + else if (tokenString === this.item(i)) + break; + for (; i < this.length; ++i) + tokensTobeMoved.push(this.item(i)); + for (i = 0; i < tokensTobeMoved.length; ++i) { + var currentToken = tokensTobeMoved[i]; + currentToken !== newTokenString && this.remove(currentToken); + currentToken !== tokenString && this.add(currentToken); + currentToken === tokenString && !newTokenFound && (this.remove(newTokenString), this.add(newTokenString)); + } + return true; + }); + })(); + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/requestAnimationFrame.js +var require_requestAnimationFrame = __commonJS({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/requestAnimationFrame.js": function() { + (function(undefined2) { + if (!("requestAnimationFrame" in self)) { + (function(global2) { + var rafPrefix; + var nowOffset = Date.now(); + var pnow = function() { + if (global2.performance && typeof global2.performance.now === "function") { + return global2.performance.now(); + } + return Date.now() - nowOffset; + }; + if ("mozRequestAnimationFrame" in global2) { + rafPrefix = "moz"; + } else if ("webkitRequestAnimationFrame" in global2) { + rafPrefix = "webkit"; + } + if (rafPrefix) { + global2.requestAnimationFrame = function(callback) { + return global2[rafPrefix + "RequestAnimationFrame"](function() { + callback(pnow()); + }); + }; + global2.cancelAnimationFrame = global2[rafPrefix + "CancelAnimationFrame"]; + } else { + var lastTime = Date.now(); + global2.requestAnimationFrame = function(callback) { + if (typeof callback !== "function") { + throw new TypeError(callback + " is not a function"); + } + var currentTime = Date.now(), delay2 = 16 + lastTime - currentTime; + if (delay2 < 0) { + delay2 = 0; + } + lastTime = currentTime; + return setTimeout(function() { + lastTime = Date.now(); + callback(pnow()); + }, delay2); + }; + global2.cancelAnimationFrame = function(id) { + clearTimeout(id); + }; + } + })(self); + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/WebAnimations.js +var require_WebAnimations = __commonJS({ + "node_modules/.pnpm/@mrhenry+core-web@1.2.1/node_modules/@mrhenry/core-web/modules/WebAnimations.js": function() { + (function(undefined2) { + if (!("function" == typeof document.head.animate && function() { + try { + return !!document.createElement("DIV").animate({ opacity: [0, 1] }, { direction: "alternate", duration: 1, iterations: 1 }); + } catch (t) { + return false; + } + }())) { + !function() { + var a = {}, b = {}; + !function(a2, b2) { + function c(a3) { + if ("number" == typeof a3) + return a3; + var b3 = {}; + for (var c2 in a3) + b3[c2] = a3[c2]; + return b3; + } + function d() { + this._delay = 0, this._endDelay = 0, this._fill = "none", this._iterationStart = 0, this._iterations = 1, this._duration = 0, this._playbackRate = 1, this._direction = "normal", this._easing = "linear", this._easingFunction = x; + } + function e() { + return a2.isDeprecated("Invalid timing inputs", "2016-03-02", "TypeError exceptions will be thrown instead.", true); + } + function f(b3, c2, e2) { + var f2 = new d(); + return c2 && (f2.fill = "both", f2.duration = "auto"), "number" != typeof b3 || isNaN(b3) ? void 0 !== b3 && Object.getOwnPropertyNames(b3).forEach(function(c3) { + if ("auto" != b3[c3]) { + if (("number" == typeof f2[c3] || "duration" == c3) && ("number" != typeof b3[c3] || isNaN(b3[c3]))) + return; + if ("fill" == c3 && -1 == v.indexOf(b3[c3])) + return; + if ("direction" == c3 && -1 == w.indexOf(b3[c3])) + return; + if ("playbackRate" == c3 && 1 !== b3[c3] && a2.isDeprecated("AnimationEffectTiming.playbackRate", "2014-11-28", "Use Animation.playbackRate instead.")) + return; + f2[c3] = b3[c3]; + } + }) : f2.duration = b3, f2; + } + function g(a3) { + return "number" == typeof a3 && (a3 = isNaN(a3) ? { duration: 0 } : { duration: a3 }), a3; + } + function h(b3, c2) { + return b3 = a2.numericTimingToObject(b3), f(b3, c2); + } + function i(a3, b3, c2, d2) { + return a3 < 0 || a3 > 1 || c2 < 0 || c2 > 1 ? x : function(e2) { + function f2(a4, b4, c3) { + return 3 * a4 * (1 - c3) * (1 - c3) * c3 + 3 * b4 * (1 - c3) * c3 * c3 + c3 * c3 * c3; + } + if (e2 <= 0) { + var g2 = 0; + return a3 > 0 ? g2 = b3 / a3 : !b3 && c2 > 0 && (g2 = d2 / c2), g2 * e2; + } + if (e2 >= 1) { + var h2 = 0; + return c2 < 1 ? h2 = (d2 - 1) / (c2 - 1) : 1 == c2 && a3 < 1 && (h2 = (b3 - 1) / (a3 - 1)), 1 + h2 * (e2 - 1); + } + for (var i2 = 0, j2 = 1; i2 < j2; ) { + var k2 = (i2 + j2) / 2, l2 = f2(a3, c2, k2); + if (Math.abs(e2 - l2) < 1e-5) + return f2(b3, d2, k2); + l2 < e2 ? i2 = k2 : j2 = k2; + } + return f2(b3, d2, k2); + }; + } + function j(a3, b3) { + return function(c2) { + if (c2 >= 1) + return 1; + var d2 = 1 / a3; + return (c2 += b3 * d2) - c2 % d2; + }; + } + function k(a3) { + C || (C = document.createElement("div").style), C.animationTimingFunction = "", C.animationTimingFunction = a3; + var b3 = C.animationTimingFunction; + if ("" == b3 && e()) + throw new TypeError(a3 + " is not a valid value for easing"); + return b3; + } + function l(a3) { + if ("linear" == a3) + return x; + var b3 = E.exec(a3); + if (b3) + return i.apply(this, b3.slice(1).map(Number)); + var c2 = F.exec(a3); + if (c2) + return j(Number(c2[1]), A); + var d2 = G.exec(a3); + return d2 ? j(Number(d2[1]), { start: y, middle: z, end: A }[d2[2]]) : B[a3] || x; + } + function m(a3) { + return Math.abs(n(a3) / a3.playbackRate); + } + function n(a3) { + return 0 === a3.duration || 0 === a3.iterations ? 0 : a3.duration * a3.iterations; + } + function o(a3, b3, c2) { + if (null == b3) + return H; + var d2 = c2.delay + a3 + c2.endDelay; + return b3 < Math.min(c2.delay, d2) ? I : b3 >= Math.min(c2.delay + a3, d2) ? J : K; + } + function p(a3, b3, c2, d2, e2) { + switch (d2) { + case I: + return "backwards" == b3 || "both" == b3 ? 0 : null; + case K: + return c2 - e2; + case J: + return "forwards" == b3 || "both" == b3 ? a3 : null; + case H: + return null; + } + } + function q(a3, b3, c2, d2, e2) { + var f2 = e2; + return 0 === a3 ? b3 !== I && (f2 += c2) : f2 += d2 / a3, f2; + } + function r(a3, b3, c2, d2, e2, f2) { + var g2 = a3 === 1 / 0 ? b3 % 1 : a3 % 1; + return 0 !== g2 || c2 !== J || 0 === d2 || 0 === e2 && 0 !== f2 || (g2 = 1), g2; + } + function s(a3, b3, c2, d2) { + return a3 === J && b3 === 1 / 0 ? 1 / 0 : 1 === c2 ? Math.floor(d2) - 1 : Math.floor(d2); + } + function t(a3, b3, c2) { + var d2 = a3; + if ("normal" !== a3 && "reverse" !== a3) { + var e2 = b3; + "alternate-reverse" === a3 && (e2 += 1), d2 = "normal", e2 !== 1 / 0 && e2 % 2 != 0 && (d2 = "reverse"); + } + return "normal" === d2 ? c2 : 1 - c2; + } + function u(a3, b3, c2) { + var d2 = o(a3, b3, c2), e2 = p(a3, c2.fill, b3, d2, c2.delay); + if (null === e2) + return null; + var f2 = q(c2.duration, d2, c2.iterations, e2, c2.iterationStart), g2 = r(f2, c2.iterationStart, d2, c2.iterations, e2, c2.duration), h2 = s(d2, c2.iterations, g2, f2), i2 = t(c2.direction, h2, g2); + return c2._easingFunction(i2); + } + var v = "backwards|forwards|both|none".split("|"), w = "reverse|alternate|alternate-reverse".split("|"), x = function(a3) { + return a3; + }; + d.prototype = { _setMember: function(b3, c2) { + this["_" + b3] = c2, this._effect && (this._effect._timingInput[b3] = c2, this._effect._timing = a2.normalizeTimingInput(this._effect._timingInput), this._effect.activeDuration = a2.calculateActiveDuration(this._effect._timing), this._effect._animation && this._effect._animation._rebuildUnderlyingAnimation()); + }, get playbackRate() { + return this._playbackRate; + }, set delay(a3) { + this._setMember("delay", a3); + }, get delay() { + return this._delay; + }, set endDelay(a3) { + this._setMember("endDelay", a3); + }, get endDelay() { + return this._endDelay; + }, set fill(a3) { + this._setMember("fill", a3); + }, get fill() { + return this._fill; + }, set iterationStart(a3) { + if ((isNaN(a3) || a3 < 0) && e()) + throw new TypeError("iterationStart must be a non-negative number, received: " + a3); + this._setMember("iterationStart", a3); + }, get iterationStart() { + return this._iterationStart; + }, set duration(a3) { + if ("auto" != a3 && (isNaN(a3) || a3 < 0) && e()) + throw new TypeError("duration must be non-negative or auto, received: " + a3); + this._setMember("duration", a3); + }, get duration() { + return this._duration; + }, set direction(a3) { + this._setMember("direction", a3); + }, get direction() { + return this._direction; + }, set easing(a3) { + this._easingFunction = l(k(a3)), this._setMember("easing", a3); + }, get easing() { + return this._easing; + }, set iterations(a3) { + if ((isNaN(a3) || a3 < 0) && e()) + throw new TypeError("iterations must be non-negative, received: " + a3); + this._setMember("iterations", a3); + }, get iterations() { + return this._iterations; + } }; + var y = 1, z = 0.5, A = 0, B = { ease: i(0.25, 0.1, 0.25, 1), "ease-in": i(0.42, 0, 1, 1), "ease-out": i(0, 0, 0.58, 1), "ease-in-out": i(0.42, 0, 0.58, 1), "step-start": j(1, y), "step-middle": j(1, z), "step-end": j(1, A) }, C = null, D = "\\s*(-?\\d+\\.?\\d*|-?\\.\\d+)\\s*", E = new RegExp("cubic-bezier\\(" + D + "," + D + "," + D + "," + D + "\\)"), F = /steps\(\s*(\d+)\s*\)/, G = /steps\(\s*(\d+)\s*,\s*(start|middle|end)\s*\)/, H = 0, I = 1, J = 2, K = 3; + a2.cloneTimingInput = c, a2.makeTiming = f, a2.numericTimingToObject = g, a2.normalizeTimingInput = h, a2.calculateActiveDuration = m, a2.calculateIterationProgress = u, a2.calculatePhase = o, a2.normalizeEasing = k, a2.parseEasingFunction = l; + }(a), function(a2, b2) { + function c(a3, b3) { + return a3 in k ? k[a3][b3] || b3 : b3; + } + function d(a3) { + return "display" === a3 || 0 === a3.lastIndexOf("animation", 0) || 0 === a3.lastIndexOf("transition", 0); + } + function e(a3, b3, e2) { + if (!d(a3)) { + var f2 = h[a3]; + if (f2) { + i.style[a3] = b3; + for (var g2 in f2) { + var j2 = f2[g2], k2 = i.style[j2]; + e2[j2] = c(j2, k2); + } + } else + e2[a3] = c(a3, b3); + } + } + function f(a3) { + var b3 = []; + for (var c2 in a3) + if (!(c2 in ["easing", "offset", "composite"])) { + var d2 = a3[c2]; + Array.isArray(d2) || (d2 = [d2]); + for (var e2, f2 = d2.length, g2 = 0; g2 < f2; g2++) + e2 = {}, e2.offset = "offset" in a3 ? a3.offset : 1 == f2 ? 1 : g2 / (f2 - 1), "easing" in a3 && (e2.easing = a3.easing), "composite" in a3 && (e2.composite = a3.composite), e2[c2] = d2[g2], b3.push(e2); + } + return b3.sort(function(a4, b4) { + return a4.offset - b4.offset; + }), b3; + } + function g(b3) { + function c2() { + var a3 = d2.length; + null == d2[a3 - 1].offset && (d2[a3 - 1].offset = 1), a3 > 1 && null == d2[0].offset && (d2[0].offset = 0); + for (var b4 = 0, c3 = d2[0].offset, e2 = 1; e2 < a3; e2++) { + var f2 = d2[e2].offset; + if (null != f2) { + for (var g3 = 1; g3 < e2 - b4; g3++) + d2[b4 + g3].offset = c3 + (f2 - c3) * g3 / (e2 - b4); + b4 = e2, c3 = f2; + } + } + } + if (null == b3) + return []; + window.Symbol && Symbol.iterator && Array.prototype.from && b3[Symbol.iterator] && (b3 = Array.from(b3)), Array.isArray(b3) || (b3 = f(b3)); + for (var d2 = b3.map(function(b4) { + var c3 = {}; + for (var d3 in b4) { + var f2 = b4[d3]; + if ("offset" == d3) { + if (null != f2) { + if (f2 = Number(f2), !isFinite(f2)) + throw new TypeError("Keyframe offsets must be numbers."); + if (f2 < 0 || f2 > 1) + throw new TypeError("Keyframe offsets must be between 0 and 1."); + } + } else if ("composite" == d3) { + if ("add" == f2 || "accumulate" == f2) + throw { type: DOMException.NOT_SUPPORTED_ERR, name: "NotSupportedError", message: "add compositing is not supported" }; + if ("replace" != f2) + throw new TypeError("Invalid composite mode " + f2 + "."); + } else + f2 = "easing" == d3 ? a2.normalizeEasing(f2) : "" + f2; + e(d3, f2, c3); + } + return void 0 == c3.offset && (c3.offset = null), void 0 == c3.easing && (c3.easing = "linear"), c3; + }), g2 = true, h2 = -1 / 0, i2 = 0; i2 < d2.length; i2++) { + var j2 = d2[i2].offset; + if (null != j2) { + if (j2 < h2) + throw new TypeError("Keyframes are not loosely sorted by offset. Sort or specify offsets."); + h2 = j2; + } else + g2 = false; + } + return d2 = d2.filter(function(a3) { + return a3.offset >= 0 && a3.offset <= 1; + }), g2 || c2(), d2; + } + var h = { background: ["backgroundImage", "backgroundPosition", "backgroundSize", "backgroundRepeat", "backgroundAttachment", "backgroundOrigin", "backgroundClip", "backgroundColor"], border: ["borderTopColor", "borderTopStyle", "borderTopWidth", "borderRightColor", "borderRightStyle", "borderRightWidth", "borderBottomColor", "borderBottomStyle", "borderBottomWidth", "borderLeftColor", "borderLeftStyle", "borderLeftWidth"], borderBottom: ["borderBottomWidth", "borderBottomStyle", "borderBottomColor"], borderColor: ["borderTopColor", "borderRightColor", "borderBottomColor", "borderLeftColor"], borderLeft: ["borderLeftWidth", "borderLeftStyle", "borderLeftColor"], borderRadius: ["borderTopLeftRadius", "borderTopRightRadius", "borderBottomRightRadius", "borderBottomLeftRadius"], borderRight: ["borderRightWidth", "borderRightStyle", "borderRightColor"], borderTop: ["borderTopWidth", "borderTopStyle", "borderTopColor"], borderWidth: ["borderTopWidth", "borderRightWidth", "borderBottomWidth", "borderLeftWidth"], flex: ["flexGrow", "flexShrink", "flexBasis"], font: ["fontFamily", "fontSize", "fontStyle", "fontVariant", "fontWeight", "lineHeight"], margin: ["marginTop", "marginRight", "marginBottom", "marginLeft"], outline: ["outlineColor", "outlineStyle", "outlineWidth"], padding: ["paddingTop", "paddingRight", "paddingBottom", "paddingLeft"] }, i = document.createElementNS("http://www.w3.org/1999/xhtml", "div"), j = { thin: "1px", medium: "3px", thick: "5px" }, k = { borderBottomWidth: j, borderLeftWidth: j, borderRightWidth: j, borderTopWidth: j, fontSize: { "xx-small": "60%", "x-small": "75%", small: "89%", medium: "100%", large: "120%", "x-large": "150%", "xx-large": "200%" }, fontWeight: { normal: "400", bold: "700" }, outlineWidth: j, textShadow: { none: "0px 0px 0px transparent" }, boxShadow: { none: "0px 0px 0px 0px transparent" } }; + a2.convertToArrayForm = f, a2.normalizeKeyframes = g; + }(a), function(a2) { + var b2 = {}; + a2.isDeprecated = function(a3, c, d, e) { + var f = e ? "are" : "is", g = /* @__PURE__ */ new Date(), h = new Date(c); + return h.setMonth(h.getMonth() + 3), !(g < h && (a3 in b2 || console.warn("Web Animations: " + a3 + " " + f + " deprecated and will stop working on " + h.toDateString() + ". " + d), b2[a3] = true, 1)); + }, a2.deprecated = function(b3, c, d, e) { + var f = e ? "are" : "is"; + if (a2.isDeprecated(b3, c, d, e)) + throw new Error(b3 + " " + f + " no longer supported. " + d); + }; + }(a), function() { + if (document.documentElement.animate) { + var c = document.documentElement.animate([], 0), d = true; + if (c && (d = false, "play|currentTime|pause|reverse|playbackRate|cancel|finish|startTime|playState".split("|").forEach(function(a2) { + void 0 === c[a2] && (d = true); + })), !d) + return; + } + !function(a2, b2, c2) { + function d2(a3) { + for (var b3 = {}, c3 = 0; c3 < a3.length; c3++) + for (var d3 in a3[c3]) + if ("offset" != d3 && "easing" != d3 && "composite" != d3) { + var e2 = { offset: a3[c3].offset, easing: a3[c3].easing, value: a3[c3][d3] }; + b3[d3] = b3[d3] || [], b3[d3].push(e2); + } + for (var f in b3) { + var g = b3[f]; + if (0 != g[0].offset || 1 != g[g.length - 1].offset) + throw { type: DOMException.NOT_SUPPORTED_ERR, name: "NotSupportedError", message: "Partial keyframes are not supported" }; + } + return b3; + } + function e(c3) { + var d3 = []; + for (var e2 in c3) + for (var f = c3[e2], g = 0; g < f.length - 1; g++) { + var h = g, i = g + 1, j = f[h].offset, k = f[i].offset, l = j, m = k; + 0 == g && (l = -1 / 0, 0 == k && (i = h)), g == f.length - 2 && (m = 1 / 0, 1 == j && (h = i)), d3.push({ applyFrom: l, applyTo: m, startOffset: f[h].offset, endOffset: f[i].offset, easingFunction: a2.parseEasingFunction(f[h].easing), property: e2, interpolation: b2.propertyInterpolation(e2, f[h].value, f[i].value) }); + } + return d3.sort(function(a3, b3) { + return a3.startOffset - b3.startOffset; + }), d3; + } + b2.convertEffectInput = function(c3) { + var f = a2.normalizeKeyframes(c3), g = d2(f), h = e(g); + return function(a3, c4) { + if (null != c4) + h.filter(function(a4) { + return c4 >= a4.applyFrom && c4 < a4.applyTo; + }).forEach(function(d4) { + var e2 = c4 - d4.startOffset, f2 = d4.endOffset - d4.startOffset, g2 = 0 == f2 ? 0 : d4.easingFunction(e2 / f2); + b2.apply(a3, d4.property, d4.interpolation(g2)); + }); + else + for (var d3 in g) + "offset" != d3 && "easing" != d3 && "composite" != d3 && b2.clear(a3, d3); + }; + }; + }(a, b), function(a2, b2, c2) { + function d2(a3) { + return a3.replace(/-(.)/g, function(a4, b3) { + return b3.toUpperCase(); + }); + } + function e(a3, b3, c3) { + h[c3] = h[c3] || [], h[c3].push([a3, b3]); + } + function f(a3, b3, c3) { + for (var f2 = 0; f2 < c3.length; f2++) { + e(a3, b3, d2(c3[f2])); + } + } + function g(c3, e2, f2) { + var g2 = c3; + /-/.test(c3) && !a2.isDeprecated("Hyphenated property names", "2016-03-22", "Use camelCase instead.", true) && (g2 = d2(c3)), "initial" != e2 && "initial" != f2 || ("initial" == e2 && (e2 = i[g2]), "initial" == f2 && (f2 = i[g2])); + for (var j = e2 == f2 ? [] : h[g2], k = 0; j && k < j.length; k++) { + var l = j[k][0](e2), m = j[k][0](f2); + if (void 0 !== l && void 0 !== m) { + var n = j[k][1](l, m); + if (n) { + var o = b2.Interpolation.apply(null, n); + return function(a3) { + return 0 == a3 ? e2 : 1 == a3 ? f2 : o(a3); + }; + } + } + } + return b2.Interpolation(false, true, function(a3) { + return a3 ? f2 : e2; + }); + } + var h = {}; + b2.addPropertiesHandler = f; + var i = { backgroundColor: "transparent", backgroundPosition: "0% 0%", borderBottomColor: "currentColor", borderBottomLeftRadius: "0px", borderBottomRightRadius: "0px", borderBottomWidth: "3px", borderLeftColor: "currentColor", borderLeftWidth: "3px", borderRightColor: "currentColor", borderRightWidth: "3px", borderSpacing: "2px", borderTopColor: "currentColor", borderTopLeftRadius: "0px", borderTopRightRadius: "0px", borderTopWidth: "3px", bottom: "auto", clip: "rect(0px, 0px, 0px, 0px)", color: "black", fontSize: "100%", fontWeight: "400", height: "auto", left: "auto", letterSpacing: "normal", lineHeight: "120%", marginBottom: "0px", marginLeft: "0px", marginRight: "0px", marginTop: "0px", maxHeight: "none", maxWidth: "none", minHeight: "0px", minWidth: "0px", opacity: "1.0", outlineColor: "invert", outlineOffset: "0px", outlineWidth: "3px", paddingBottom: "0px", paddingLeft: "0px", paddingRight: "0px", paddingTop: "0px", right: "auto", strokeDasharray: "none", strokeDashoffset: "0px", textIndent: "0px", textShadow: "0px 0px 0px transparent", top: "auto", transform: "", verticalAlign: "0px", visibility: "visible", width: "auto", wordSpacing: "normal", zIndex: "auto" }; + b2.propertyInterpolation = g; + }(a, b), function(a2, b2, c2) { + function d2(b3) { + var c3 = a2.calculateActiveDuration(b3), d3 = function(d4) { + return a2.calculateIterationProgress(c3, d4, b3); + }; + return d3._totalDuration = b3.delay + c3 + b3.endDelay, d3; + } + b2.KeyframeEffect = function(c3, e, f, g) { + var h, i = d2(a2.normalizeTimingInput(f)), j = b2.convertEffectInput(e), k = function() { + j(c3, h); + }; + return k._update = function(a3) { + return null !== (h = i(a3)); + }, k._clear = function() { + j(c3, null); + }, k._hasSameTarget = function(a3) { + return c3 === a3; + }, k._target = c3, k._totalDuration = i._totalDuration, k._id = g, k; + }; + }(a, b), function(a2, b2) { + function c2(a3, b3) { + return !(!b3.namespaceURI || -1 == b3.namespaceURI.indexOf("/svg")) && (g in a3 || (a3[g] = /Trident|MSIE|IEMobile|Edge|Android 4/i.test(a3.navigator.userAgent)), a3[g]); + } + function d2(a3, b3, c3) { + c3.enumerable = true, c3.configurable = true, Object.defineProperty(a3, b3, c3); + } + function e(a3) { + this._element = a3, this._surrogateStyle = document.createElementNS("http://www.w3.org/1999/xhtml", "div").style, this._style = a3.style, this._length = 0, this._isAnimatedProperty = {}, this._updateSvgTransformAttr = c2(window, a3), this._savedTransformAttr = null; + for (var b3 = 0; b3 < this._style.length; b3++) { + var d3 = this._style[b3]; + this._surrogateStyle[d3] = this._style[d3]; + } + this._updateIndices(); + } + function f(a3) { + if (!a3._webAnimationsPatchedStyle) { + var b3 = new e(a3); + try { + d2(a3, "style", { get: function() { + return b3; + } }); + } catch (b4) { + a3.style._set = function(b5, c3) { + a3.style[b5] = c3; + }, a3.style._clear = function(b5) { + a3.style[b5] = ""; + }; + } + a3._webAnimationsPatchedStyle = a3.style; + } + } + var g = "_webAnimationsUpdateSvgTransformAttr", h = { cssText: 1, length: 1, parentRule: 1 }, i = { getPropertyCSSValue: 1, getPropertyPriority: 1, getPropertyValue: 1, item: 1, removeProperty: 1, setProperty: 1 }, j = { removeProperty: 1, setProperty: 1 }; + e.prototype = { get cssText() { + return this._surrogateStyle.cssText; + }, set cssText(a3) { + for (var b3 = {}, c3 = 0; c3 < this._surrogateStyle.length; c3++) + b3[this._surrogateStyle[c3]] = true; + this._surrogateStyle.cssText = a3, this._updateIndices(); + for (var c3 = 0; c3 < this._surrogateStyle.length; c3++) + b3[this._surrogateStyle[c3]] = true; + for (var d3 in b3) + this._isAnimatedProperty[d3] || this._style.setProperty(d3, this._surrogateStyle.getPropertyValue(d3)); + }, get length() { + return this._surrogateStyle.length; + }, get parentRule() { + return this._style.parentRule; + }, _updateIndices: function() { + for (; this._length < this._surrogateStyle.length; ) + Object.defineProperty(this, this._length, { configurable: true, enumerable: false, get: /* @__PURE__ */ function(a3) { + return function() { + return this._surrogateStyle[a3]; + }; + }(this._length) }), this._length++; + for (; this._length > this._surrogateStyle.length; ) + this._length--, Object.defineProperty(this, this._length, { configurable: true, enumerable: false, value: void 0 }); + }, _set: function(b3, c3) { + this._style[b3] = c3, this._isAnimatedProperty[b3] = true, this._updateSvgTransformAttr && "transform" == a2.unprefixedPropertyName(b3) && (null == this._savedTransformAttr && (this._savedTransformAttr = this._element.getAttribute("transform")), this._element.setAttribute("transform", a2.transformToSvgMatrix(c3))); + }, _clear: function(b3) { + this._style[b3] = this._surrogateStyle[b3], this._updateSvgTransformAttr && "transform" == a2.unprefixedPropertyName(b3) && (this._savedTransformAttr ? this._element.setAttribute("transform", this._savedTransformAttr) : this._element.removeAttribute("transform"), this._savedTransformAttr = null), delete this._isAnimatedProperty[b3]; + } }; + for (var k in i) + e.prototype[k] = /* @__PURE__ */ function(a3, b3) { + return function() { + var c3 = this._surrogateStyle[a3].apply(this._surrogateStyle, arguments); + return b3 && (this._isAnimatedProperty[arguments[0]] || this._style[a3].apply(this._style, arguments), this._updateIndices()), c3; + }; + }(k, k in j); + for (var l in document.documentElement.style) + l in h || l in i || function(a3) { + d2(e.prototype, a3, { get: function() { + return this._surrogateStyle[a3]; + }, set: function(b3) { + this._surrogateStyle[a3] = b3, this._updateIndices(), this._isAnimatedProperty[a3] || (this._style[a3] = b3); + } }); + }(l); + a2.apply = function(b3, c3, d3) { + f(b3), b3.style._set(a2.propertyName(c3), d3); + }, a2.clear = function(b3, c3) { + b3._webAnimationsPatchedStyle && b3.style._clear(a2.propertyName(c3)); + }; + }(b), function(a2) { + window.Element.prototype.animate = function(b2, c2) { + var d2 = ""; + return c2 && c2.id && (d2 = c2.id), a2.timeline._play(a2.KeyframeEffect(this, b2, c2, d2)); + }; + }(b), function(a2, b2) { + function c2(a3, b3, d2) { + if ("number" == typeof a3 && "number" == typeof b3) + return a3 * (1 - d2) + b3 * d2; + if ("boolean" == typeof a3 && "boolean" == typeof b3) + return d2 < 0.5 ? a3 : b3; + if (a3.length == b3.length) { + for (var e = [], f = 0; f < a3.length; f++) + e.push(c2(a3[f], b3[f], d2)); + return e; + } + throw "Mismatched interpolation arguments " + a3 + ":" + b3; + } + a2.Interpolation = function(a3, b3, d2) { + return function(e) { + return d2(c2(a3, b3, e)); + }; + }; + }(b), function(a2, b2) { + function c2(a3, b3, c3) { + return Math.max(Math.min(a3, c3), b3); + } + function d2(b3, d3, e2) { + var f = a2.dot(b3, d3); + f = c2(f, -1, 1); + var g = []; + if (1 === f) + g = b3; + else + for (var h = Math.acos(f), i = 1 * Math.sin(e2 * h) / Math.sqrt(1 - f * f), j = 0; j < 4; j++) + g.push(b3[j] * (Math.cos(e2 * h) - f * i) + d3[j] * i); + return g; + } + var e = /* @__PURE__ */ function() { + function a3(a4, b4) { + for (var c4 = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], d3 = 0; d3 < 4; d3++) + for (var e2 = 0; e2 < 4; e2++) + for (var f = 0; f < 4; f++) + c4[d3][e2] += b4[d3][f] * a4[f][e2]; + return c4; + } + function b3(a4) { + return 0 == a4[0][2] && 0 == a4[0][3] && 0 == a4[1][2] && 0 == a4[1][3] && 0 == a4[2][0] && 0 == a4[2][1] && 1 == a4[2][2] && 0 == a4[2][3] && 0 == a4[3][2] && 1 == a4[3][3]; + } + function c3(c4, d3, e2, f, g) { + for (var h = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]], i = 0; i < 4; i++) + h[i][3] = g[i]; + for (var i = 0; i < 3; i++) + for (var j = 0; j < 3; j++) + h[3][i] += c4[j] * h[j][i]; + var k = f[0], l = f[1], m = f[2], n = f[3], o = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]; + o[0][0] = 1 - 2 * (l * l + m * m), o[0][1] = 2 * (k * l - m * n), o[0][2] = 2 * (k * m + l * n), o[1][0] = 2 * (k * l + m * n), o[1][1] = 1 - 2 * (k * k + m * m), o[1][2] = 2 * (l * m - k * n), o[2][0] = 2 * (k * m - l * n), o[2][1] = 2 * (l * m + k * n), o[2][2] = 1 - 2 * (k * k + l * l), h = a3(h, o); + var p = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]; + e2[2] && (p[2][1] = e2[2], h = a3(h, p)), e2[1] && (p[2][1] = 0, p[2][0] = e2[0], h = a3(h, p)), e2[0] && (p[2][0] = 0, p[1][0] = e2[0], h = a3(h, p)); + for (var i = 0; i < 3; i++) + for (var j = 0; j < 3; j++) + h[i][j] *= d3[i]; + return b3(h) ? [h[0][0], h[0][1], h[1][0], h[1][1], h[3][0], h[3][1]] : h[0].concat(h[1], h[2], h[3]); + } + return c3; + }(); + a2.composeMatrix = e, a2.quat = d2; + }(b), function(a2, b2, c2) { + a2.sequenceNumber = 0; + var d2 = function(a3, b3, c3) { + this.target = a3, this.currentTime = b3, this.timelineTime = c3, this.type = "finish", this.bubbles = false, this.cancelable = false, this.currentTarget = a3, this.defaultPrevented = false, this.eventPhase = Event.AT_TARGET, this.timeStamp = Date.now(); + }; + b2.Animation = function(b3) { + this.id = "", b3 && b3._id && (this.id = b3._id), this._sequenceNumber = a2.sequenceNumber++, this._currentTime = 0, this._startTime = null, this._paused = false, this._playbackRate = 1, this._inTimeline = true, this._finishedFlag = true, this.onfinish = null, this._finishHandlers = [], this._effect = b3, this._inEffect = this._effect._update(0), this._idle = true, this._currentTimePending = false; + }, b2.Animation.prototype = { _ensureAlive: function() { + this.playbackRate < 0 && 0 === this.currentTime ? this._inEffect = this._effect._update(-1) : this._inEffect = this._effect._update(this.currentTime), this._inTimeline || !this._inEffect && this._finishedFlag || (this._inTimeline = true, b2.timeline._animations.push(this)); + }, _tickCurrentTime: function(a3, b3) { + a3 != this._currentTime && (this._currentTime = a3, this._isFinished && !b3 && (this._currentTime = this._playbackRate > 0 ? this._totalDuration : 0), this._ensureAlive()); + }, get currentTime() { + return this._idle || this._currentTimePending ? null : this._currentTime; + }, set currentTime(a3) { + a3 = +a3, isNaN(a3) || (b2.restart(), this._paused || null == this._startTime || (this._startTime = this._timeline.currentTime - a3 / this._playbackRate), this._currentTimePending = false, this._currentTime != a3 && (this._idle && (this._idle = false, this._paused = true), this._tickCurrentTime(a3, true), b2.applyDirtiedAnimation(this))); + }, get startTime() { + return this._startTime; + }, set startTime(a3) { + a3 = +a3, isNaN(a3) || this._paused || this._idle || (this._startTime = a3, this._tickCurrentTime((this._timeline.currentTime - this._startTime) * this.playbackRate), b2.applyDirtiedAnimation(this)); + }, get playbackRate() { + return this._playbackRate; + }, set playbackRate(a3) { + if (a3 != this._playbackRate) { + var c3 = this.currentTime; + this._playbackRate = a3, this._startTime = null, "paused" != this.playState && "idle" != this.playState && (this._finishedFlag = false, this._idle = false, this._ensureAlive(), b2.applyDirtiedAnimation(this)), null != c3 && (this.currentTime = c3); + } + }, get _isFinished() { + return !this._idle && (this._playbackRate > 0 && this._currentTime >= this._totalDuration || this._playbackRate < 0 && this._currentTime <= 0); + }, get _totalDuration() { + return this._effect._totalDuration; + }, get playState() { + return this._idle ? "idle" : null == this._startTime && !this._paused && 0 != this.playbackRate || this._currentTimePending ? "pending" : this._paused ? "paused" : this._isFinished ? "finished" : "running"; + }, _rewind: function() { + if (this._playbackRate >= 0) + this._currentTime = 0; + else { + if (!(this._totalDuration < 1 / 0)) + throw new DOMException("Unable to rewind negative playback rate animation with infinite duration", "InvalidStateError"); + this._currentTime = this._totalDuration; + } + }, play: function() { + this._paused = false, (this._isFinished || this._idle) && (this._rewind(), this._startTime = null), this._finishedFlag = false, this._idle = false, this._ensureAlive(), b2.applyDirtiedAnimation(this); + }, pause: function() { + this._isFinished || this._paused || this._idle ? this._idle && (this._rewind(), this._idle = false) : this._currentTimePending = true, this._startTime = null, this._paused = true; + }, finish: function() { + this._idle || (this.currentTime = this._playbackRate > 0 ? this._totalDuration : 0, this._startTime = this._totalDuration - this.currentTime, this._currentTimePending = false, b2.applyDirtiedAnimation(this)); + }, cancel: function() { + this._inEffect && (this._inEffect = false, this._idle = true, this._paused = false, this._finishedFlag = true, this._currentTime = 0, this._startTime = null, this._effect._update(null), b2.applyDirtiedAnimation(this)); + }, reverse: function() { + this.playbackRate *= -1, this.play(); + }, addEventListener: function(a3, b3) { + "function" == typeof b3 && "finish" == a3 && this._finishHandlers.push(b3); + }, removeEventListener: function(a3, b3) { + if ("finish" == a3) { + var c3 = this._finishHandlers.indexOf(b3); + c3 >= 0 && this._finishHandlers.splice(c3, 1); + } + }, _fireEvents: function(a3) { + if (this._isFinished) { + if (!this._finishedFlag) { + var b3 = new d2(this, this._currentTime, a3), c3 = this._finishHandlers.concat(this.onfinish ? [this.onfinish] : []); + setTimeout(function() { + c3.forEach(function(a4) { + a4.call(b3.target, b3); + }); + }, 0), this._finishedFlag = true; + } + } else + this._finishedFlag = false; + }, _tick: function(a3, b3) { + this._idle || this._paused || (null == this._startTime ? b3 && (this.startTime = a3 - this._currentTime / this.playbackRate) : this._isFinished || this._tickCurrentTime((a3 - this._startTime) * this.playbackRate)), b3 && (this._currentTimePending = false, this._fireEvents(a3)); + }, get _needsTick() { + return this.playState in { pending: 1, running: 1 } || !this._finishedFlag; + }, _targetAnimations: function() { + var a3 = this._effect._target; + return a3._activeAnimations || (a3._activeAnimations = []), a3._activeAnimations; + }, _markTarget: function() { + var a3 = this._targetAnimations(); + -1 === a3.indexOf(this) && a3.push(this); + }, _unmarkTarget: function() { + var a3 = this._targetAnimations(), b3 = a3.indexOf(this); + -1 !== b3 && a3.splice(b3, 1); + } }; + }(a, b), function(a2, b2, c2) { + function d2(a3) { + var b3 = j; + j = [], a3 < q.currentTime && (a3 = q.currentTime), q._animations.sort(e), q._animations = h(a3, true, q._animations)[0], b3.forEach(function(b4) { + b4[1](a3); + }), g(), l = void 0; + } + function e(a3, b3) { + return a3._sequenceNumber - b3._sequenceNumber; + } + function f() { + this._animations = [], this.currentTime = window.performance && performance.now ? performance.now() : 0; + } + function g() { + o.forEach(function(a3) { + a3(); + }), o.length = 0; + } + function h(a3, c3, d3) { + p = true, n = false, b2.timeline.currentTime = a3, m = false; + var e2 = [], f2 = [], g2 = [], h2 = []; + return d3.forEach(function(b3) { + b3._tick(a3, c3), b3._inEffect ? (f2.push(b3._effect), b3._markTarget()) : (e2.push(b3._effect), b3._unmarkTarget()), b3._needsTick && (m = true); + var d4 = b3._inEffect || b3._needsTick; + b3._inTimeline = d4, d4 ? g2.push(b3) : h2.push(b3); + }), o.push.apply(o, e2), o.push.apply(o, f2), m && requestAnimationFrame(function() { + }), p = false, [g2, h2]; + } + var i = window.requestAnimationFrame, j = [], k = 0; + window.requestAnimationFrame = function(a3) { + var b3 = k++; + return 0 == j.length && i(d2), j.push([b3, a3]), b3; + }, window.cancelAnimationFrame = function(a3) { + j.forEach(function(b3) { + b3[0] == a3 && (b3[1] = function() { + }); + }); + }, f.prototype = { _play: function(c3) { + c3._timing = a2.normalizeTimingInput(c3.timing); + var d3 = new b2.Animation(c3); + return d3._idle = false, d3._timeline = this, this._animations.push(d3), b2.restart(), b2.applyDirtiedAnimation(d3), d3; + } }; + var l = void 0, m = false, n = false; + b2.restart = function() { + return m || (m = true, requestAnimationFrame(function() { + }), n = true), n; + }, b2.applyDirtiedAnimation = function(a3) { + if (!p) { + a3._markTarget(); + var c3 = a3._targetAnimations(); + c3.sort(e), h(b2.timeline.currentTime, false, c3.slice())[1].forEach(function(a4) { + var b3 = q._animations.indexOf(a4); + -1 !== b3 && q._animations.splice(b3, 1); + }), g(); + } + }; + var o = [], p = false, q = new f(); + b2.timeline = q; + }(a, b), function(a2, b2) { + function c2(a3, b3) { + for (var c3 = 0, d3 = 0; d3 < a3.length; d3++) + c3 += a3[d3] * b3[d3]; + return c3; + } + function d2(a3, b3) { + return [a3[0] * b3[0] + a3[4] * b3[1] + a3[8] * b3[2] + a3[12] * b3[3], a3[1] * b3[0] + a3[5] * b3[1] + a3[9] * b3[2] + a3[13] * b3[3], a3[2] * b3[0] + a3[6] * b3[1] + a3[10] * b3[2] + a3[14] * b3[3], a3[3] * b3[0] + a3[7] * b3[1] + a3[11] * b3[2] + a3[15] * b3[3], a3[0] * b3[4] + a3[4] * b3[5] + a3[8] * b3[6] + a3[12] * b3[7], a3[1] * b3[4] + a3[5] * b3[5] + a3[9] * b3[6] + a3[13] * b3[7], a3[2] * b3[4] + a3[6] * b3[5] + a3[10] * b3[6] + a3[14] * b3[7], a3[3] * b3[4] + a3[7] * b3[5] + a3[11] * b3[6] + a3[15] * b3[7], a3[0] * b3[8] + a3[4] * b3[9] + a3[8] * b3[10] + a3[12] * b3[11], a3[1] * b3[8] + a3[5] * b3[9] + a3[9] * b3[10] + a3[13] * b3[11], a3[2] * b3[8] + a3[6] * b3[9] + a3[10] * b3[10] + a3[14] * b3[11], a3[3] * b3[8] + a3[7] * b3[9] + a3[11] * b3[10] + a3[15] * b3[11], a3[0] * b3[12] + a3[4] * b3[13] + a3[8] * b3[14] + a3[12] * b3[15], a3[1] * b3[12] + a3[5] * b3[13] + a3[9] * b3[14] + a3[13] * b3[15], a3[2] * b3[12] + a3[6] * b3[13] + a3[10] * b3[14] + a3[14] * b3[15], a3[3] * b3[12] + a3[7] * b3[13] + a3[11] * b3[14] + a3[15] * b3[15]]; + } + function e(a3) { + var b3 = a3.rad || 0; + return ((a3.deg || 0) / 360 + (a3.grad || 0) / 400 + (a3.turn || 0)) * (2 * Math.PI) + b3; + } + function f(a3) { + switch (a3.t) { + case "rotatex": + var b3 = e(a3.d[0]); + return [1, 0, 0, 0, 0, Math.cos(b3), Math.sin(b3), 0, 0, -Math.sin(b3), Math.cos(b3), 0, 0, 0, 0, 1]; + case "rotatey": + var b3 = e(a3.d[0]); + return [Math.cos(b3), 0, -Math.sin(b3), 0, 0, 1, 0, 0, Math.sin(b3), 0, Math.cos(b3), 0, 0, 0, 0, 1]; + case "rotate": + case "rotatez": + var b3 = e(a3.d[0]); + return [Math.cos(b3), Math.sin(b3), 0, 0, -Math.sin(b3), Math.cos(b3), 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]; + case "rotate3d": + var c3 = a3.d[0], d3 = a3.d[1], f2 = a3.d[2], b3 = e(a3.d[3]), g2 = c3 * c3 + d3 * d3 + f2 * f2; + if (0 === g2) + c3 = 1, d3 = 0, f2 = 0; + else if (1 !== g2) { + var h2 = Math.sqrt(g2); + c3 /= h2, d3 /= h2, f2 /= h2; + } + var i2 = Math.sin(b3 / 2), j = i2 * Math.cos(b3 / 2), k = i2 * i2; + return [1 - 2 * (d3 * d3 + f2 * f2) * k, 2 * (c3 * d3 * k + f2 * j), 2 * (c3 * f2 * k - d3 * j), 0, 2 * (c3 * d3 * k - f2 * j), 1 - 2 * (c3 * c3 + f2 * f2) * k, 2 * (d3 * f2 * k + c3 * j), 0, 2 * (c3 * f2 * k + d3 * j), 2 * (d3 * f2 * k - c3 * j), 1 - 2 * (c3 * c3 + d3 * d3) * k, 0, 0, 0, 0, 1]; + case "scale": + return [a3.d[0], 0, 0, 0, 0, a3.d[1], 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]; + case "scalex": + return [a3.d[0], 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]; + case "scaley": + return [1, 0, 0, 0, 0, a3.d[0], 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]; + case "scalez": + return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, a3.d[0], 0, 0, 0, 0, 1]; + case "scale3d": + return [a3.d[0], 0, 0, 0, 0, a3.d[1], 0, 0, 0, 0, a3.d[2], 0, 0, 0, 0, 1]; + case "skew": + var l = e(a3.d[0]), m = e(a3.d[1]); + return [1, Math.tan(m), 0, 0, Math.tan(l), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]; + case "skewx": + var b3 = e(a3.d[0]); + return [1, 0, 0, 0, Math.tan(b3), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]; + case "skewy": + var b3 = e(a3.d[0]); + return [1, Math.tan(b3), 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]; + case "translate": + var c3 = a3.d[0].px || 0, d3 = a3.d[1].px || 0; + return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, c3, d3, 0, 1]; + case "translatex": + var c3 = a3.d[0].px || 0; + return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, c3, 0, 0, 1]; + case "translatey": + var d3 = a3.d[0].px || 0; + return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, d3, 0, 1]; + case "translatez": + var f2 = a3.d[0].px || 0; + return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, f2, 1]; + case "translate3d": + var c3 = a3.d[0].px || 0, d3 = a3.d[1].px || 0, f2 = a3.d[2].px || 0; + return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, c3, d3, f2, 1]; + case "perspective": + return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, a3.d[0].px ? -1 / a3.d[0].px : 0, 0, 0, 0, 1]; + case "matrix": + return [a3.d[0], a3.d[1], 0, 0, a3.d[2], a3.d[3], 0, 0, 0, 0, 1, 0, a3.d[4], a3.d[5], 0, 1]; + case "matrix3d": + return a3.d; + } + } + function g(a3) { + return 0 === a3.length ? [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] : a3.map(f).reduce(d2); + } + function h(a3) { + return [i(g(a3))]; + } + var i = /* @__PURE__ */ function() { + function a3(a4) { + return a4[0][0] * a4[1][1] * a4[2][2] + a4[1][0] * a4[2][1] * a4[0][2] + a4[2][0] * a4[0][1] * a4[1][2] - a4[0][2] * a4[1][1] * a4[2][0] - a4[1][2] * a4[2][1] * a4[0][0] - a4[2][2] * a4[0][1] * a4[1][0]; + } + function b3(b4) { + for (var c3 = 1 / a3(b4), d4 = b4[0][0], e3 = b4[0][1], f3 = b4[0][2], g3 = b4[1][0], h3 = b4[1][1], i3 = b4[1][2], j2 = b4[2][0], k = b4[2][1], l = b4[2][2], m = [[(h3 * l - i3 * k) * c3, (f3 * k - e3 * l) * c3, (e3 * i3 - f3 * h3) * c3, 0], [(i3 * j2 - g3 * l) * c3, (d4 * l - f3 * j2) * c3, (f3 * g3 - d4 * i3) * c3, 0], [(g3 * k - h3 * j2) * c3, (j2 * e3 - d4 * k) * c3, (d4 * h3 - e3 * g3) * c3, 0]], n = [], o = 0; o < 3; o++) { + for (var p = 0, q = 0; q < 3; q++) + p += b4[3][q] * m[q][o]; + n.push(p); + } + return n.push(1), m.push(n), m; + } + function d3(a4) { + return [[a4[0][0], a4[1][0], a4[2][0], a4[3][0]], [a4[0][1], a4[1][1], a4[2][1], a4[3][1]], [a4[0][2], a4[1][2], a4[2][2], a4[3][2]], [a4[0][3], a4[1][3], a4[2][3], a4[3][3]]]; + } + function e2(a4, b4) { + for (var c3 = [], d4 = 0; d4 < 4; d4++) { + for (var e3 = 0, f3 = 0; f3 < 4; f3++) + e3 += a4[f3] * b4[f3][d4]; + c3.push(e3); + } + return c3; + } + function f2(a4) { + var b4 = g2(a4); + return [a4[0] / b4, a4[1] / b4, a4[2] / b4]; + } + function g2(a4) { + return Math.sqrt(a4[0] * a4[0] + a4[1] * a4[1] + a4[2] * a4[2]); + } + function h2(a4, b4, c3, d4) { + return [c3 * a4[0] + d4 * b4[0], c3 * a4[1] + d4 * b4[1], c3 * a4[2] + d4 * b4[2]]; + } + function i2(a4, b4) { + return [a4[1] * b4[2] - a4[2] * b4[1], a4[2] * b4[0] - a4[0] * b4[2], a4[0] * b4[1] - a4[1] * b4[0]]; + } + function j(j2) { + var k = [j2.slice(0, 4), j2.slice(4, 8), j2.slice(8, 12), j2.slice(12, 16)]; + if (1 !== k[3][3]) + return null; + for (var l = [], m = 0; m < 4; m++) + l.push(k[m].slice()); + for (var m = 0; m < 3; m++) + l[m][3] = 0; + if (0 === a3(l)) + return null; + var n, o = []; + k[0][3] || k[1][3] || k[2][3] ? (o.push(k[0][3]), o.push(k[1][3]), o.push(k[2][3]), o.push(k[3][3]), n = e2(o, d3(b3(l)))) : n = [0, 0, 0, 1]; + var p = k[3].slice(0, 3), q = []; + q.push(k[0].slice(0, 3)); + var r = []; + r.push(g2(q[0])), q[0] = f2(q[0]); + var s = []; + q.push(k[1].slice(0, 3)), s.push(c2(q[0], q[1])), q[1] = h2(q[1], q[0], 1, -s[0]), r.push(g2(q[1])), q[1] = f2(q[1]), s[0] /= r[1], q.push(k[2].slice(0, 3)), s.push(c2(q[0], q[2])), q[2] = h2(q[2], q[0], 1, -s[1]), s.push(c2(q[1], q[2])), q[2] = h2(q[2], q[1], 1, -s[2]), r.push(g2(q[2])), q[2] = f2(q[2]), s[1] /= r[2], s[2] /= r[2]; + var t = i2(q[1], q[2]); + if (c2(q[0], t) < 0) + for (var m = 0; m < 3; m++) + r[m] *= -1, q[m][0] *= -1, q[m][1] *= -1, q[m][2] *= -1; + var u, v, w = q[0][0] + q[1][1] + q[2][2] + 1; + return w > 1e-4 ? (u = 0.5 / Math.sqrt(w), v = [(q[2][1] - q[1][2]) * u, (q[0][2] - q[2][0]) * u, (q[1][0] - q[0][1]) * u, 0.25 / u]) : q[0][0] > q[1][1] && q[0][0] > q[2][2] ? (u = 2 * Math.sqrt(1 + q[0][0] - q[1][1] - q[2][2]), v = [0.25 * u, (q[0][1] + q[1][0]) / u, (q[0][2] + q[2][0]) / u, (q[2][1] - q[1][2]) / u]) : q[1][1] > q[2][2] ? (u = 2 * Math.sqrt(1 + q[1][1] - q[0][0] - q[2][2]), v = [(q[0][1] + q[1][0]) / u, 0.25 * u, (q[1][2] + q[2][1]) / u, (q[0][2] - q[2][0]) / u]) : (u = 2 * Math.sqrt(1 + q[2][2] - q[0][0] - q[1][1]), v = [(q[0][2] + q[2][0]) / u, (q[1][2] + q[2][1]) / u, 0.25 * u, (q[1][0] - q[0][1]) / u]), [p, r, s, v, n]; + } + return j; + }(); + a2.dot = c2, a2.makeMatrixDecomposition = h, a2.transformListToMatrix = g; + }(b), function(a2) { + function b2(a3, b3) { + var c3 = a3.exec(b3); + if (c3) + return c3 = a3.ignoreCase ? c3[0].toLowerCase() : c3[0], [c3, b3.substr(c3.length)]; + } + function c2(a3, b3) { + b3 = b3.replace(/^\s*/, ""); + var c3 = a3(b3); + if (c3) + return [c3[0], c3[1].replace(/^\s*/, "")]; + } + function d2(a3, d3, e2) { + a3 = c2.bind(null, a3); + for (var f2 = []; ; ) { + var g2 = a3(e2); + if (!g2) + return [f2, e2]; + if (f2.push(g2[0]), e2 = g2[1], !(g2 = b2(d3, e2)) || "" == g2[1]) + return [f2, e2]; + e2 = g2[1]; + } + } + function e(a3, b3) { + for (var c3 = 0, d3 = 0; d3 < b3.length && (!/\s|,/.test(b3[d3]) || 0 != c3); d3++) + if ("(" == b3[d3]) + c3++; + else if (")" == b3[d3] && (c3--, 0 == c3 && d3++, c3 <= 0)) + break; + var e2 = a3(b3.substr(0, d3)); + return void 0 == e2 ? void 0 : [e2, b3.substr(d3)]; + } + function f(a3, b3) { + for (var c3 = a3, d3 = b3; c3 && d3; ) + c3 > d3 ? c3 %= d3 : d3 %= c3; + return c3 = a3 * b3 / (c3 + d3); + } + function g(a3) { + return function(b3) { + var c3 = a3(b3); + return c3 && (c3[0] = void 0), c3; + }; + } + function h(a3, b3) { + return function(c3) { + return a3(c3) || [b3, c3]; + }; + } + function i(b3, c3) { + for (var d3 = [], e2 = 0; e2 < b3.length; e2++) { + var f2 = a2.consumeTrimmed(b3[e2], c3); + if (!f2 || "" == f2[0]) + return; + void 0 !== f2[0] && d3.push(f2[0]), c3 = f2[1]; + } + if ("" == c3) + return d3; + } + function j(a3, b3, c3, d3, e2) { + for (var g2 = [], h2 = [], i2 = [], j2 = f(d3.length, e2.length), k2 = 0; k2 < j2; k2++) { + var l = b3(d3[k2 % d3.length], e2[k2 % e2.length]); + if (!l) + return; + g2.push(l[0]), h2.push(l[1]), i2.push(l[2]); + } + return [g2, h2, function(b4) { + var d4 = b4.map(function(a4, b5) { + return i2[b5](a4); + }).join(c3); + return a3 ? a3(d4) : d4; + }]; + } + function k(a3, b3, c3) { + for (var d3 = [], e2 = [], f2 = [], g2 = 0, h2 = 0; h2 < c3.length; h2++) + if ("function" == typeof c3[h2]) { + var i2 = c3[h2](a3[g2], b3[g2++]); + d3.push(i2[0]), e2.push(i2[1]), f2.push(i2[2]); + } else + !function(a4) { + d3.push(false), e2.push(false), f2.push(function() { + return c3[a4]; + }); + }(h2); + return [d3, e2, function(a4) { + for (var b4 = "", c4 = 0; c4 < a4.length; c4++) + b4 += f2[c4](a4[c4]); + return b4; + }]; + } + a2.consumeToken = b2, a2.consumeTrimmed = c2, a2.consumeRepeated = d2, a2.consumeParenthesised = e, a2.ignore = g, a2.optional = h, a2.consumeList = i, a2.mergeNestedRepeated = j.bind(null, null), a2.mergeWrappedNestedRepeated = j, a2.mergeList = k; + }(b), function(a2) { + function b2(b3) { + function c3(b4) { + var c4 = a2.consumeToken(/^inset/i, b4); + return c4 ? (d3.inset = true, c4) : (c4 = a2.consumeLengthOrPercent(b4)) ? (d3.lengths.push(c4[0]), c4) : (c4 = a2.consumeColor(b4), c4 ? (d3.color = c4[0], c4) : void 0); + } + var d3 = { inset: false, lengths: [], color: null }, e2 = a2.consumeRepeated(c3, /^/, b3); + if (e2 && e2[0].length) + return [d3, e2[1]]; + } + function c2(c3) { + var d3 = a2.consumeRepeated(b2, /^,/, c3); + if (d3 && "" == d3[1]) + return d3[0]; + } + function d2(b3, c3) { + for (; b3.lengths.length < Math.max(b3.lengths.length, c3.lengths.length); ) + b3.lengths.push({ px: 0 }); + for (; c3.lengths.length < Math.max(b3.lengths.length, c3.lengths.length); ) + c3.lengths.push({ px: 0 }); + if (b3.inset == c3.inset && !!b3.color == !!c3.color) { + for (var d3, e2 = [], f2 = [[], 0], g = [[], 0], h = 0; h < b3.lengths.length; h++) { + var i = a2.mergeDimensions(b3.lengths[h], c3.lengths[h], 2 == h); + f2[0].push(i[0]), g[0].push(i[1]), e2.push(i[2]); + } + if (b3.color && c3.color) { + var j = a2.mergeColors(b3.color, c3.color); + f2[1] = j[0], g[1] = j[1], d3 = j[2]; + } + return [f2, g, function(a3) { + for (var c4 = b3.inset ? "inset " : " ", f3 = 0; f3 < e2.length; f3++) + c4 += e2[f3](a3[0][f3]) + " "; + return d3 && (c4 += d3(a3[1])), c4; + }]; + } + } + function e(b3, c3, d3, e2) { + function f2(a3) { + return { inset: a3, color: [0, 0, 0, 0], lengths: [{ px: 0 }, { px: 0 }, { px: 0 }, { px: 0 }] }; + } + for (var g = [], h = [], i = 0; i < d3.length || i < e2.length; i++) { + var j = d3[i] || f2(e2[i].inset), k = e2[i] || f2(d3[i].inset); + g.push(j), h.push(k); + } + return a2.mergeNestedRepeated(b3, c3, g, h); + } + var f = e.bind(null, d2, ", "); + a2.addPropertiesHandler(c2, f, ["box-shadow", "text-shadow"]); + }(b), function(a2, b2) { + function c2(a3) { + return a3.toFixed(3).replace(/0+$/, "").replace(/\.$/, ""); + } + function d2(a3, b3, c3) { + return Math.min(b3, Math.max(a3, c3)); + } + function e(a3) { + if (/^\s*[-+]?(\d*\.)?\d+\s*$/.test(a3)) + return Number(a3); + } + function f(a3, b3) { + return [a3, b3, c2]; + } + function g(a3, b3) { + if (0 != a3) + return i(0, 1 / 0)(a3, b3); + } + function h(a3, b3) { + return [a3, b3, function(a4) { + return Math.round(d2(1, 1 / 0, a4)); + }]; + } + function i(a3, b3) { + return function(e2, f2) { + return [e2, f2, function(e3) { + return c2(d2(a3, b3, e3)); + }]; + }; + } + function j(a3) { + var b3 = a3.trim().split(/\s*[\s,]\s*/); + if (0 !== b3.length) { + for (var c3 = [], d3 = 0; d3 < b3.length; d3++) { + var f2 = e(b3[d3]); + if (void 0 === f2) + return; + c3.push(f2); + } + return c3; + } + } + function k(a3, b3) { + if (a3.length == b3.length) + return [a3, b3, function(a4) { + return a4.map(c2).join(" "); + }]; + } + function l(a3, b3) { + return [a3, b3, Math.round]; + } + a2.clamp = d2, a2.addPropertiesHandler(j, k, ["stroke-dasharray"]), a2.addPropertiesHandler(e, i(0, 1 / 0), ["border-image-width", "line-height"]), a2.addPropertiesHandler(e, i(0, 1), ["opacity", "shape-image-threshold"]), a2.addPropertiesHandler(e, g, ["flex-grow", "flex-shrink"]), a2.addPropertiesHandler(e, h, ["orphans", "widows"]), a2.addPropertiesHandler(e, l, ["z-index"]), a2.parseNumber = e, a2.parseNumberList = j, a2.mergeNumbers = f, a2.numberToString = c2; + }(b), function(a2, b2) { + function c2(a3, b3) { + if ("visible" == a3 || "visible" == b3) + return [0, 1, function(c3) { + return c3 <= 0 ? a3 : c3 >= 1 ? b3 : "visible"; + }]; + } + a2.addPropertiesHandler(String, c2, ["visibility"]); + }(b), function(a2, b2) { + function c2(a3) { + a3 = a3.trim(), f.fillStyle = "#000", f.fillStyle = a3; + var b3 = f.fillStyle; + if (f.fillStyle = "#fff", f.fillStyle = a3, b3 == f.fillStyle) { + f.fillRect(0, 0, 1, 1); + var c3 = f.getImageData(0, 0, 1, 1).data; + f.clearRect(0, 0, 1, 1); + var d3 = c3[3] / 255; + return [c3[0] * d3, c3[1] * d3, c3[2] * d3, d3]; + } + } + function d2(b3, c3) { + return [b3, c3, function(b4) { + function c4(a3) { + return Math.max(0, Math.min(255, a3)); + } + if (b4[3]) + for (var d3 = 0; d3 < 3; d3++) + b4[d3] = Math.round(c4(b4[d3] / b4[3])); + return b4[3] = a2.numberToString(a2.clamp(0, 1, b4[3])), "rgba(" + b4.join(",") + ")"; + }]; + } + var e = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"); + e.width = e.height = 1; + var f = e.getContext("2d"); + a2.addPropertiesHandler(c2, d2, ["background-color", "border-bottom-color", "border-left-color", "border-right-color", "border-top-color", "color", "fill", "flood-color", "lighting-color", "outline-color", "stop-color", "stroke", "text-decoration-color"]), a2.consumeColor = a2.consumeParenthesised.bind(null, c2), a2.mergeColors = d2; + }(b), function(a2, b2) { + function c2(a3) { + function b3() { + var b4 = h2.exec(a3); + g2 = b4 ? b4[0] : void 0; + } + function c3() { + var a4 = Number(g2); + return b3(), a4; + } + function d3() { + if ("(" !== g2) + return c3(); + b3(); + var a4 = f2(); + return ")" !== g2 ? NaN : (b3(), a4); + } + function e2() { + for (var a4 = d3(); "*" === g2 || "/" === g2; ) { + var c4 = g2; + b3(); + var e3 = d3(); + "*" === c4 ? a4 *= e3 : a4 /= e3; + } + return a4; + } + function f2() { + for (var a4 = e2(); "+" === g2 || "-" === g2; ) { + var c4 = g2; + b3(); + var d4 = e2(); + "+" === c4 ? a4 += d4 : a4 -= d4; + } + return a4; + } + var g2, h2 = /([\+\-\w\.]+|[\(\)\*\/])/g; + return b3(), f2(); + } + function d2(a3, b3) { + if ("0" == (b3 = b3.trim().toLowerCase()) && "px".search(a3) >= 0) + return { px: 0 }; + if (/^[^(]*$|^calc/.test(b3)) { + b3 = b3.replace(/calc\(/g, "("); + var d3 = {}; + b3 = b3.replace(a3, function(a4) { + return d3[a4] = null, "U" + a4; + }); + for (var e2 = "U(" + a3.source + ")", f2 = b3.replace(/[-+]?(\d*\.)?\d+([Ee][-+]?\d+)?/g, "N").replace(new RegExp("N" + e2, "g"), "D").replace(/\s[+-]\s/g, "O").replace(/\s/g, ""), g2 = [/N\*(D)/g, /(N|D)[*\/]N/g, /(N|D)O\1/g, /\((N|D)\)/g], h2 = 0; h2 < g2.length; ) + g2[h2].test(f2) ? (f2 = f2.replace(g2[h2], "$1"), h2 = 0) : h2++; + if ("D" == f2) { + for (var i2 in d3) { + var j2 = c2(b3.replace(new RegExp("U" + i2, "g"), "").replace(new RegExp(e2, "g"), "*0")); + if (!isFinite(j2)) + return; + d3[i2] = j2; + } + return d3; + } + } + } + function e(a3, b3) { + return f(a3, b3, true); + } + function f(b3, c3, d3) { + var e2, f2 = []; + for (e2 in b3) + f2.push(e2); + for (e2 in c3) + f2.indexOf(e2) < 0 && f2.push(e2); + return b3 = f2.map(function(a3) { + return b3[a3] || 0; + }), c3 = f2.map(function(a3) { + return c3[a3] || 0; + }), [b3, c3, function(b4) { + var c4 = b4.map(function(c5, e3) { + return 1 == b4.length && d3 && (c5 = Math.max(c5, 0)), a2.numberToString(c5) + f2[e3]; + }).join(" + "); + return b4.length > 1 ? "calc(" + c4 + ")" : c4; + }]; + } + var g = "px|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc", h = d2.bind(null, new RegExp(g, "g")), i = d2.bind(null, new RegExp(g + "|%", "g")), j = d2.bind(null, /deg|rad|grad|turn/g); + a2.parseLength = h, a2.parseLengthOrPercent = i, a2.consumeLengthOrPercent = a2.consumeParenthesised.bind(null, i), a2.parseAngle = j, a2.mergeDimensions = f; + var k = a2.consumeParenthesised.bind(null, h), l = a2.consumeRepeated.bind(void 0, k, /^/), m = a2.consumeRepeated.bind(void 0, l, /^,/); + a2.consumeSizePairList = m; + var n = function(a3) { + var b3 = m(a3); + if (b3 && "" == b3[1]) + return b3[0]; + }, o = a2.mergeNestedRepeated.bind(void 0, e, " "), p = a2.mergeNestedRepeated.bind(void 0, o, ","); + a2.mergeNonNegativeSizePair = o, a2.addPropertiesHandler(n, p, ["background-size"]), a2.addPropertiesHandler(i, e, ["border-bottom-width", "border-image-width", "border-left-width", "border-right-width", "border-top-width", "flex-basis", "font-size", "height", "line-height", "max-height", "max-width", "outline-width", "width"]), a2.addPropertiesHandler(i, f, ["border-bottom-left-radius", "border-bottom-right-radius", "border-top-left-radius", "border-top-right-radius", "bottom", "left", "letter-spacing", "margin-bottom", "margin-left", "margin-right", "margin-top", "min-height", "min-width", "outline-offset", "padding-bottom", "padding-left", "padding-right", "padding-top", "perspective", "right", "shape-margin", "stroke-dashoffset", "text-indent", "top", "vertical-align", "word-spacing"]); + }(b), function(a2, b2) { + function c2(b3) { + return a2.consumeLengthOrPercent(b3) || a2.consumeToken(/^auto/, b3); + } + function d2(b3) { + var d3 = a2.consumeList([a2.ignore(a2.consumeToken.bind(null, /^rect/)), a2.ignore(a2.consumeToken.bind(null, /^\(/)), a2.consumeRepeated.bind(null, c2, /^,/), a2.ignore(a2.consumeToken.bind(null, /^\)/))], b3); + if (d3 && 4 == d3[0].length) + return d3[0]; + } + function e(b3, c3) { + return "auto" == b3 || "auto" == c3 ? [true, false, function(d3) { + var e2 = d3 ? b3 : c3; + if ("auto" == e2) + return "auto"; + var f2 = a2.mergeDimensions(e2, e2); + return f2[2](f2[0]); + }] : a2.mergeDimensions(b3, c3); + } + function f(a3) { + return "rect(" + a3 + ")"; + } + var g = a2.mergeWrappedNestedRepeated.bind(null, f, e, ", "); + a2.parseBox = d2, a2.mergeBoxes = g, a2.addPropertiesHandler(d2, g, ["clip"]); + }(b), function(a2, b2) { + function c2(a3) { + return function(b3) { + var c3 = 0; + return a3.map(function(a4) { + return a4 === k ? b3[c3++] : a4; + }); + }; + } + function d2(a3) { + return a3; + } + function e(b3) { + if ("none" == (b3 = b3.toLowerCase().trim())) + return []; + for (var c3, d3 = /\s*(\w+)\(([^)]*)\)/g, e2 = [], f2 = 0; c3 = d3.exec(b3); ) { + if (c3.index != f2) + return; + f2 = c3.index + c3[0].length; + var g2 = c3[1], h2 = n[g2]; + if (!h2) + return; + var i2 = c3[2].split(","), j2 = h2[0]; + if (j2.length < i2.length) + return; + for (var k2 = [], o = 0; o < j2.length; o++) { + var p, q = i2[o], r = j2[o]; + if (void 0 === (p = q ? { A: function(b4) { + return "0" == b4.trim() ? m : a2.parseAngle(b4); + }, N: a2.parseNumber, T: a2.parseLengthOrPercent, L: a2.parseLength }[r.toUpperCase()](q) : { a: m, n: k2[0], t: l }[r])) + return; + k2.push(p); + } + if (e2.push({ t: g2, d: k2 }), d3.lastIndex == b3.length) + return e2; + } + } + function f(a3) { + return a3.toFixed(6).replace(".000000", ""); + } + function g(b3, c3) { + if (b3.decompositionPair !== c3) { + b3.decompositionPair = c3; + var d3 = a2.makeMatrixDecomposition(b3); + } + if (c3.decompositionPair !== b3) { + c3.decompositionPair = b3; + var e2 = a2.makeMatrixDecomposition(c3); + } + return null == d3[0] || null == e2[0] ? [[false], [true], function(a3) { + return a3 ? c3[0].d : b3[0].d; + }] : (d3[0].push(0), e2[0].push(1), [d3, e2, function(b4) { + var c4 = a2.quat(d3[0][3], e2[0][3], b4[5]); + return a2.composeMatrix(b4[0], b4[1], b4[2], c4, b4[4]).map(f).join(","); + }]); + } + function h(a3) { + return a3.replace(/[xy]/, ""); + } + function i(a3) { + return a3.replace(/(x|y|z|3d)?$/, "3d"); + } + function j(b3, c3) { + var d3 = a2.makeMatrixDecomposition && true, e2 = false; + if (!b3.length || !c3.length) { + b3.length || (e2 = true, b3 = c3, c3 = []); + for (var f2 = 0; f2 < b3.length; f2++) { + var j2 = b3[f2].t, k2 = b3[f2].d, l2 = "scale" == j2.substr(0, 5) ? 1 : 0; + c3.push({ t: j2, d: k2.map(function(a3) { + if ("number" == typeof a3) + return l2; + var b4 = {}; + for (var c4 in a3) + b4[c4] = l2; + return b4; + }) }); + } + } + var m2 = function(a3, b4) { + return "perspective" == a3 && "perspective" == b4 || ("matrix" == a3 || "matrix3d" == a3) && ("matrix" == b4 || "matrix3d" == b4); + }, o = [], p = [], q = []; + if (b3.length != c3.length) { + if (!d3) + return; + var r = g(b3, c3); + o = [r[0]], p = [r[1]], q = [["matrix", [r[2]]]]; + } else + for (var f2 = 0; f2 < b3.length; f2++) { + var j2, s = b3[f2].t, t = c3[f2].t, u = b3[f2].d, v = c3[f2].d, w = n[s], x = n[t]; + if (m2(s, t)) { + if (!d3) + return; + var r = g([b3[f2]], [c3[f2]]); + o.push(r[0]), p.push(r[1]), q.push(["matrix", [r[2]]]); + } else { + if (s == t) + j2 = s; + else if (w[2] && x[2] && h(s) == h(t)) + j2 = h(s), u = w[2](u), v = x[2](v); + else { + if (!w[1] || !x[1] || i(s) != i(t)) { + if (!d3) + return; + var r = g(b3, c3); + o = [r[0]], p = [r[1]], q = [["matrix", [r[2]]]]; + break; + } + j2 = i(s), u = w[1](u), v = x[1](v); + } + for (var y = [], z = [], A = [], B = 0; B < u.length; B++) { + var C = "number" == typeof u[B] ? a2.mergeNumbers : a2.mergeDimensions, r = C(u[B], v[B]); + y[B] = r[0], z[B] = r[1], A.push(r[2]); + } + o.push(y), p.push(z), q.push([j2, A]); + } + } + if (e2) { + var D = o; + o = p, p = D; + } + return [o, p, function(a3) { + return a3.map(function(a4, b4) { + var c4 = a4.map(function(a5, c5) { + return q[b4][1][c5](a5); + }).join(","); + return "matrix" == q[b4][0] && 16 == c4.split(",").length && (q[b4][0] = "matrix3d"), q[b4][0] + "(" + c4 + ")"; + }).join(" "); + }]; + } + var k = null, l = { px: 0 }, m = { deg: 0 }, n = { matrix: ["NNNNNN", [k, k, 0, 0, k, k, 0, 0, 0, 0, 1, 0, k, k, 0, 1], d2], matrix3d: ["NNNNNNNNNNNNNNNN", d2], rotate: ["A"], rotatex: ["A"], rotatey: ["A"], rotatez: ["A"], rotate3d: ["NNNA"], perspective: ["L"], scale: ["Nn", c2([k, k, 1]), d2], scalex: ["N", c2([k, 1, 1]), c2([k, 1])], scaley: ["N", c2([1, k, 1]), c2([1, k])], scalez: ["N", c2([1, 1, k])], scale3d: ["NNN", d2], skew: ["Aa", null, d2], skewx: ["A", null, c2([k, m])], skewy: ["A", null, c2([m, k])], translate: ["Tt", c2([k, k, l]), d2], translatex: ["T", c2([k, l, l]), c2([k, l])], translatey: ["T", c2([l, k, l]), c2([l, k])], translatez: ["L", c2([l, l, k])], translate3d: ["TTL", d2] }; + a2.addPropertiesHandler(e, j, ["transform"]), a2.transformToSvgMatrix = function(b3) { + var c3 = a2.transformListToMatrix(e(b3)); + return "matrix(" + f(c3[0]) + " " + f(c3[1]) + " " + f(c3[4]) + " " + f(c3[5]) + " " + f(c3[12]) + " " + f(c3[13]) + ")"; + }; + }(b), function(a2) { + function b2(a3) { + var b3 = Number(a3); + if (!(isNaN(b3) || b3 < 100 || b3 > 900 || b3 % 100 != 0)) + return b3; + } + function c2(b3) { + return b3 = 100 * Math.round(b3 / 100), b3 = a2.clamp(100, 900, b3), 400 === b3 ? "normal" : 700 === b3 ? "bold" : String(b3); + } + function d2(a3, b3) { + return [a3, b3, c2]; + } + a2.addPropertiesHandler(b2, d2, ["font-weight"]); + }(b), function(a2) { + function b2(a3) { + var b3 = {}; + for (var c3 in a3) + b3[c3] = -a3[c3]; + return b3; + } + function c2(b3) { + return a2.consumeToken(/^(left|center|right|top|bottom)\b/i, b3) || a2.consumeLengthOrPercent(b3); + } + function d2(b3, d3) { + var e2 = a2.consumeRepeated(c2, /^/, d3); + if (e2 && "" == e2[1]) { + var f2 = e2[0]; + if (f2[0] = f2[0] || "center", f2[1] = f2[1] || "center", 3 == b3 && (f2[2] = f2[2] || { px: 0 }), f2.length == b3) { + if (/top|bottom/.test(f2[0]) || /left|right/.test(f2[1])) { + var h2 = f2[0]; + f2[0] = f2[1], f2[1] = h2; + } + if (/left|right|center|Object/.test(f2[0]) && /top|bottom|center|Object/.test(f2[1])) + return f2.map(function(a3) { + return "object" == typeof a3 ? a3 : g[a3]; + }); + } + } + } + function e(d3) { + var e2 = a2.consumeRepeated(c2, /^/, d3); + if (e2) { + for (var f2 = e2[0], h2 = [{ "%": 50 }, { "%": 50 }], i2 = 0, j = false, k = 0; k < f2.length; k++) { + var l = f2[k]; + "string" == typeof l ? (j = /bottom|right/.test(l), i2 = { left: 0, right: 0, center: i2, top: 1, bottom: 1 }[l], h2[i2] = g[l], "center" == l && i2++) : (j && (l = b2(l), l["%"] = (l["%"] || 0) + 100), h2[i2] = l, i2++, j = false); + } + return [h2, e2[1]]; + } + } + function f(b3) { + var c3 = a2.consumeRepeated(e, /^,/, b3); + if (c3 && "" == c3[1]) + return c3[0]; + } + var g = { left: { "%": 0 }, center: { "%": 50 }, right: { "%": 100 }, top: { "%": 0 }, bottom: { "%": 100 } }, h = a2.mergeNestedRepeated.bind(null, a2.mergeDimensions, " "); + a2.addPropertiesHandler(d2.bind(null, 3), h, ["transform-origin"]), a2.addPropertiesHandler(d2.bind(null, 2), h, ["perspective-origin"]), a2.consumePosition = e, a2.mergeOffsetList = h; + var i = a2.mergeNestedRepeated.bind(null, h, ", "); + a2.addPropertiesHandler(f, i, ["background-position", "object-position"]); + }(b), function(a2) { + function b2(b3) { + var c3 = a2.consumeToken(/^circle/, b3); + if (c3 && c3[0]) + return ["circle"].concat(a2.consumeList([a2.ignore(a2.consumeToken.bind(void 0, /^\(/)), d2, a2.ignore(a2.consumeToken.bind(void 0, /^at/)), a2.consumePosition, a2.ignore(a2.consumeToken.bind(void 0, /^\)/))], c3[1])); + var f2 = a2.consumeToken(/^ellipse/, b3); + if (f2 && f2[0]) + return ["ellipse"].concat(a2.consumeList([a2.ignore(a2.consumeToken.bind(void 0, /^\(/)), e, a2.ignore(a2.consumeToken.bind(void 0, /^at/)), a2.consumePosition, a2.ignore(a2.consumeToken.bind(void 0, /^\)/))], f2[1])); + var g2 = a2.consumeToken(/^polygon/, b3); + return g2 && g2[0] ? ["polygon"].concat(a2.consumeList([a2.ignore(a2.consumeToken.bind(void 0, /^\(/)), a2.optional(a2.consumeToken.bind(void 0, /^nonzero\s*,|^evenodd\s*,/), "nonzero,"), a2.consumeSizePairList, a2.ignore(a2.consumeToken.bind(void 0, /^\)/))], g2[1])) : void 0; + } + function c2(b3, c3) { + if (b3[0] === c3[0]) + return "circle" == b3[0] ? a2.mergeList(b3.slice(1), c3.slice(1), ["circle(", a2.mergeDimensions, " at ", a2.mergeOffsetList, ")"]) : "ellipse" == b3[0] ? a2.mergeList(b3.slice(1), c3.slice(1), ["ellipse(", a2.mergeNonNegativeSizePair, " at ", a2.mergeOffsetList, ")"]) : "polygon" == b3[0] && b3[1] == c3[1] ? a2.mergeList(b3.slice(2), c3.slice(2), ["polygon(", b3[1], g, ")"]) : void 0; + } + var d2 = a2.consumeParenthesised.bind(null, a2.parseLengthOrPercent), e = a2.consumeRepeated.bind(void 0, d2, /^/), f = a2.mergeNestedRepeated.bind(void 0, a2.mergeDimensions, " "), g = a2.mergeNestedRepeated.bind(void 0, f, ","); + a2.addPropertiesHandler(b2, c2, ["shape-outside"]); + }(b), function(a2, b2) { + function c2(a3, b3) { + b3.concat([a3]).forEach(function(b4) { + b4 in document.documentElement.style && (d2[a3] = b4), e[b4] = a3; + }); + } + var d2 = {}, e = {}; + c2("transform", ["webkitTransform", "msTransform"]), c2("transformOrigin", ["webkitTransformOrigin"]), c2("perspective", ["webkitPerspective"]), c2("perspectiveOrigin", ["webkitPerspectiveOrigin"]), a2.propertyName = function(a3) { + return d2[a3] || a3; + }, a2.unprefixedPropertyName = function(a3) { + return e[a3] || a3; + }; + }(b); + }(), function() { + if (void 0 === document.createElement("div").animate([]).oncancel) { + var a2; + if (window.performance && performance.now) + var a2 = function() { + return performance.now(); + }; + else + var a2 = function() { + return Date.now(); + }; + var b2 = function(a3, b3, c2) { + this.target = a3, this.currentTime = b3, this.timelineTime = c2, this.type = "cancel", this.bubbles = false, this.cancelable = false, this.currentTarget = a3, this.defaultPrevented = false, this.eventPhase = Event.AT_TARGET, this.timeStamp = Date.now(); + }, c = window.Element.prototype.animate; + window.Element.prototype.animate = function(d, e) { + var f = c.call(this, d, e); + f._cancelHandlers = [], f.oncancel = null; + var g = f.cancel; + f.cancel = function() { + g.call(this); + var c2 = new b2(this, null, a2()), d2 = this._cancelHandlers.concat(this.oncancel ? [this.oncancel] : []); + setTimeout(function() { + d2.forEach(function(a3) { + a3.call(c2.target, c2); + }); + }, 0); + }; + var h = f.addEventListener; + f.addEventListener = function(a3, b3) { + "function" == typeof b3 && "cancel" == a3 ? this._cancelHandlers.push(b3) : h.call(this, a3, b3); + }; + var i = f.removeEventListener; + return f.removeEventListener = function(a3, b3) { + if ("cancel" == a3) { + var c2 = this._cancelHandlers.indexOf(b3); + c2 >= 0 && this._cancelHandlers.splice(c2, 1); + } else + i.call(this, a3, b3); + }, f; + }; + } + }(), function(a2) { + var b2 = document.documentElement, c = null, d = false; + try { + var e = getComputedStyle(b2).getPropertyValue("opacity"), f = "0" == e ? "1" : "0"; + c = b2.animate({ opacity: [f, f] }, { duration: 1 }), c.currentTime = 0, d = getComputedStyle(b2).getPropertyValue("opacity") == f; + } catch (a3) { + } finally { + c && c.cancel(); + } + if (!d) { + var g = window.Element.prototype.animate; + window.Element.prototype.animate = function(b3, c2) { + return window.Symbol && Symbol.iterator && Array.prototype.from && b3[Symbol.iterator] && (b3 = Array.from(b3)), Array.isArray(b3) || null === b3 || (b3 = a2.convertToArrayForm(b3)), g.call(this, b3, c2); + }; + } + }(a); + }(); + } + }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {}); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-to-string.js +var require_error_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-to-string.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var fails = require_fails(); + var anObject = require_an_object(); + var normalizeStringArgument = require_normalize_string_argument(); + var nativeErrorToString = Error.prototype.toString; + var INCORRECT_TO_STRING = fails(function() { + if (DESCRIPTORS) { + var object = Object.create(Object.defineProperty({}, "name", { get: function() { + return this === object; + } })); + if (nativeErrorToString.call(object) !== "true") + return true; + } + return nativeErrorToString.call({ message: 1, name: 2 }) !== "2: 1" || nativeErrorToString.call({}) !== "Error"; + }); + module2.exports = INCORRECT_TO_STRING ? function toString() { + var O = anObject(this); + var name = normalizeStringArgument(O.name, "Error"); + var message = normalizeStringArgument(O.message); + return !name ? message : !message ? name : name + ": " + message; + } : nativeErrorToString; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.to-string.js +var require_es_error_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.to-string.js": function() { + "use strict"; + var defineBuiltIn = require_define_built_in(); + var errorToString = require_error_to_string(); + var ErrorPrototype = Error.prototype; + if (ErrorPrototype.toString !== errorToString) { + defineBuiltIn(ErrorPrototype, "toString", errorToString); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.find.js +var require_es_array_find = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.find.js": function() { + "use strict"; + var $2 = require_export(); + var $find = require_array_iteration().find; + var addToUnscopables = require_add_to_unscopables(); + var FIND = "find"; + var SKIPS_HOLES = true; + if (FIND in []) + Array(1)[FIND](function() { + SKIPS_HOLES = false; + }); + $2({ target: "Array", proto: true, forced: SKIPS_HOLES }, { + find: function find(callbackfn) { + return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0); + } + }); + addToUnscopables(FIND); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.includes.js +var require_es_array_includes = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.includes.js": function() { + "use strict"; + var $2 = require_export(); + var $includes = require_array_includes().includes; + var fails = require_fails(); + var addToUnscopables = require_add_to_unscopables(); + var BROKEN_ON_SPARSE = fails(function() { + return !Array(1).includes(); + }); + $2({ target: "Array", proto: true, forced: BROKEN_ON_SPARSE }, { + includes: function includes(el) { + return $includes(this, el, arguments.length > 1 ? arguments[1] : void 0); + } + }); + addToUnscopables("includes"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.index-of.js +var require_es_array_index_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.index-of.js": function() { + "use strict"; + var $2 = require_export(); + var uncurryThis = require_function_uncurry_this_clause(); + var $indexOf = require_array_includes().indexOf; + var arrayMethodIsStrict = require_array_method_is_strict(); + var nativeIndexOf = uncurryThis([].indexOf); + var NEGATIVE_ZERO = !!nativeIndexOf && 1 / nativeIndexOf([1], 1, -0) < 0; + var FORCED = NEGATIVE_ZERO || !arrayMethodIsStrict("indexOf"); + $2({ target: "Array", proto: true, forced: FORCED }, { + indexOf: function indexOf(searchElement) { + var fromIndex = arguments.length > 1 ? arguments[1] : void 0; + return NEGATIVE_ZERO ? nativeIndexOf(this, searchElement, fromIndex) || 0 : $indexOf(this, searchElement, fromIndex); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.slice.js +var require_es_array_slice = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.slice.js": function() { + "use strict"; + var $2 = require_export(); + var isArray = require_is_array(); + var isConstructor = require_is_constructor(); + var isObject = require_is_object(); + var toAbsoluteIndex = require_to_absolute_index(); + var lengthOfArrayLike = require_length_of_array_like(); + var toIndexedObject = require_to_indexed_object(); + var createProperty = require_create_property(); + var wellKnownSymbol = require_well_known_symbol(); + var arrayMethodHasSpeciesSupport = require_array_method_has_species_support(); + var nativeSlice = require_array_slice(); + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("slice"); + var SPECIES = wellKnownSymbol("species"); + var $Array = Array; + var max = Math.max; + $2({ target: "Array", proto: true, forced: !HAS_SPECIES_SUPPORT }, { + slice: function slice(start, end) { + var O = toIndexedObject(this); + var length = lengthOfArrayLike(O); + var k = toAbsoluteIndex(start, length); + var fin = toAbsoluteIndex(end === void 0 ? length : end, length); + var Constructor, result, n; + if (isArray(O)) { + Constructor = O.constructor; + if (isConstructor(Constructor) && (Constructor === $Array || isArray(Constructor.prototype))) { + Constructor = void 0; + } else if (isObject(Constructor)) { + Constructor = Constructor[SPECIES]; + if (Constructor === null) + Constructor = void 0; + } + if (Constructor === $Array || Constructor === void 0) { + return nativeSlice(O, k, fin); + } + } + result = new (Constructor === void 0 ? $Array : Constructor)(max(fin - k, 0)); + for (n = 0; k < fin; k++, n++) + if (k in O) + createProperty(result, n, O[k]); + result.length = n; + return result; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.define-property.js +var require_es_object_define_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.define-property.js": function() { + "use strict"; + var $2 = require_export(); + var DESCRIPTORS = require_descriptors(); + var defineProperty = require_object_define_property().f; + $2({ target: "Object", stat: true, forced: Object.defineProperty !== defineProperty, sham: !DESCRIPTORS }, { + defineProperty: defineProperty + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-descriptor.js +var require_es_object_get_own_property_descriptor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-descriptor.js": function() { + "use strict"; + var $2 = require_export(); + var fails = require_fails(); + var toIndexedObject = require_to_indexed_object(); + var nativeGetOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; + var DESCRIPTORS = require_descriptors(); + var FORCED = !DESCRIPTORS || fails(function() { + nativeGetOwnPropertyDescriptor(1); + }); + $2({ target: "Object", stat: true, forced: FORCED, sham: !DESCRIPTORS }, { + getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) { + return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-names.js +var require_es_object_get_own_property_names = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-names.js": function() { + "use strict"; + var $2 = require_export(); + var fails = require_fails(); + var getOwnPropertyNames = require_object_get_own_property_names_external().f; + var FAILS_ON_PRIMITIVES = fails(function() { + return !Object.getOwnPropertyNames(1); + }); + $2({ target: "Object", stat: true, forced: FAILS_ON_PRIMITIVES }, { + getOwnPropertyNames: getOwnPropertyNames + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-prototype-of.js +var require_es_object_get_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-prototype-of.js": function() { + "use strict"; + var $2 = require_export(); + var fails = require_fails(); + var toObject = require_to_object(); + var nativeGetPrototypeOf = require_object_get_prototype_of(); + var CORRECT_PROTOTYPE_GETTER = require_correct_prototype_getter(); + var FAILS_ON_PRIMITIVES = fails(function() { + nativeGetPrototypeOf(1); + }); + $2({ target: "Object", stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, { + getPrototypeOf: function getPrototypeOf(it) { + return nativeGetPrototypeOf(toObject(it)); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-to-string.js +var require_object_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-to-string.js": function(exports2, module2) { + "use strict"; + var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); + var classof = require_classof(); + module2.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { + return "[object " + classof(this) + "]"; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.to-string.js +var require_es_object_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.to-string.js": function() { + "use strict"; + var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); + var defineBuiltIn = require_define_built_in(); + var toString = require_object_to_string(); + if (!TO_STRING_TAG_SUPPORT) { + defineBuiltIn(Object.prototype, "toString", toString, { unsafe: true }); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-node.js +var require_engine_is_node = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-node.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var classof = require_classof_raw(); + module2.exports = classof(global2.process) === "process"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/set-species.js +var require_set_species = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/set-species.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var defineBuiltInAccessor = require_define_built_in_accessor(); + var wellKnownSymbol = require_well_known_symbol(); + var DESCRIPTORS = require_descriptors(); + var SPECIES = wellKnownSymbol("species"); + module2.exports = function(CONSTRUCTOR_NAME) { + var Constructor = getBuiltIn(CONSTRUCTOR_NAME); + if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { + defineBuiltInAccessor(Constructor, SPECIES, { + configurable: true, + get: function() { + return this; + } + }); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/an-instance.js +var require_an_instance = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/an-instance.js": function(exports2, module2) { + "use strict"; + var isPrototypeOf = require_object_is_prototype_of(); + var $TypeError = TypeError; + module2.exports = function(it, Prototype) { + if (isPrototypeOf(Prototype, it)) + return it; + throw new $TypeError("Incorrect invocation"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-constructor.js +var require_a_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-constructor.js": function(exports2, module2) { + "use strict"; + var isConstructor = require_is_constructor(); + var tryToString = require_try_to_string(); + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isConstructor(argument)) + return argument; + throw new $TypeError(tryToString(argument) + " is not a constructor"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/species-constructor.js +var require_species_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/species-constructor.js": function(exports2, module2) { + "use strict"; + var anObject = require_an_object(); + var aConstructor = require_a_constructor(); + var isNullOrUndefined = require_is_null_or_undefined(); + var wellKnownSymbol = require_well_known_symbol(); + var SPECIES = wellKnownSymbol("species"); + module2.exports = function(O, defaultConstructor) { + var C = anObject(O).constructor; + var S; + return C === void 0 || isNullOrUndefined(S = anObject(C)[SPECIES]) ? defaultConstructor : aConstructor(S); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/validate-arguments-length.js +var require_validate_arguments_length = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/validate-arguments-length.js": function(exports2, module2) { + "use strict"; + var $TypeError = TypeError; + module2.exports = function(passed, required) { + if (passed < required) + throw new $TypeError("Not enough arguments"); + return passed; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-ios.js +var require_engine_is_ios = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-ios.js": function(exports2, module2) { + "use strict"; + var userAgent = require_engine_user_agent(); + module2.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/task.js +var require_task = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/task.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var apply = require_function_apply(); + var bind = require_function_bind_context(); + var isCallable = require_is_callable(); + var hasOwn = require_has_own_property(); + var fails = require_fails(); + var html = require_html(); + var arraySlice = require_array_slice(); + var createElement = require_document_create_element(); + var validateArgumentsLength = require_validate_arguments_length(); + var IS_IOS = require_engine_is_ios(); + var IS_NODE = require_engine_is_node(); + var set = global2.setImmediate; + var clear = global2.clearImmediate; + var process = global2.process; + var Dispatch = global2.Dispatch; + var Function2 = global2.Function; + var MessageChannel = global2.MessageChannel; + var String2 = global2.String; + var counter = 0; + var queue = {}; + var ONREADYSTATECHANGE = "onreadystatechange"; + var $location; + var defer; + var channel; + var port; + fails(function() { + $location = global2.location; + }); + var run = function(id) { + if (hasOwn(queue, id)) { + var fn = queue[id]; + delete queue[id]; + fn(); + } + }; + var runner = function(id) { + return function() { + run(id); + }; + }; + var eventListener = function(event) { + run(event.data); + }; + var globalPostMessageDefer = function(id) { + global2.postMessage(String2(id), $location.protocol + "//" + $location.host); + }; + if (!set || !clear) { + set = function setImmediate(handler) { + validateArgumentsLength(arguments.length, 1); + var fn = isCallable(handler) ? handler : Function2(handler); + var args = arraySlice(arguments, 1); + queue[++counter] = function() { + apply(fn, void 0, args); + }; + defer(counter); + return counter; + }; + clear = function clearImmediate(id) { + delete queue[id]; + }; + if (IS_NODE) { + defer = function(id) { + process.nextTick(runner(id)); + }; + } else if (Dispatch && Dispatch.now) { + defer = function(id) { + Dispatch.now(runner(id)); + }; + } else if (MessageChannel && !IS_IOS) { + channel = new MessageChannel(); + port = channel.port2; + channel.port1.onmessage = eventListener; + defer = bind(port.postMessage, port); + } else if (global2.addEventListener && isCallable(global2.postMessage) && !global2.importScripts && $location && $location.protocol !== "file:" && !fails(globalPostMessageDefer)) { + defer = globalPostMessageDefer; + global2.addEventListener("message", eventListener, false); + } else if (ONREADYSTATECHANGE in createElement("script")) { + defer = function(id) { + html.appendChild(createElement("script"))[ONREADYSTATECHANGE] = function() { + html.removeChild(this); + run(id); + }; + }; + } else { + defer = function(id) { + setTimeout(runner(id), 0); + }; + } + } + module2.exports = { + set: set, + clear: clear + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/safe-get-built-in.js +var require_safe_get_built_in = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/safe-get-built-in.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var DESCRIPTORS = require_descriptors(); + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + module2.exports = function(name) { + if (!DESCRIPTORS) + return global2[name]; + var descriptor = getOwnPropertyDescriptor(global2, name); + return descriptor && descriptor.value; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/queue.js +var require_queue = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/queue.js": function(exports2, module2) { + "use strict"; + var Queue = function() { + this.head = null; + this.tail = null; + }; + Queue.prototype = { + add: function(item) { + var entry = { item: item, next: null }; + var tail = this.tail; + if (tail) + tail.next = entry; + else + this.head = entry; + this.tail = entry; + }, + get: function() { + var entry = this.head; + if (entry) { + var next = this.head = entry.next; + if (next === null) + this.tail = null; + return entry.item; + } + } + }; + module2.exports = Queue; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-ios-pebble.js +var require_engine_is_ios_pebble = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-ios-pebble.js": function(exports2, module2) { + "use strict"; + var userAgent = require_engine_user_agent(); + module2.exports = /ipad|iphone|ipod/i.test(userAgent) && typeof Pebble != "undefined"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-webos-webkit.js +var require_engine_is_webos_webkit = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-webos-webkit.js": function(exports2, module2) { + "use strict"; + var userAgent = require_engine_user_agent(); + module2.exports = /web0s(?!.*chrome)/i.test(userAgent); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/microtask.js +var require_microtask = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/microtask.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var safeGetBuiltIn = require_safe_get_built_in(); + var bind = require_function_bind_context(); + var macrotask = require_task().set; + var Queue = require_queue(); + var IS_IOS = require_engine_is_ios(); + var IS_IOS_PEBBLE = require_engine_is_ios_pebble(); + var IS_WEBOS_WEBKIT = require_engine_is_webos_webkit(); + var IS_NODE = require_engine_is_node(); + var MutationObserver = global2.MutationObserver || global2.WebKitMutationObserver; + var document2 = global2.document; + var process = global2.process; + var Promise2 = global2.Promise; + var microtask = safeGetBuiltIn("queueMicrotask"); + var notify; + var toggle; + var node; + var promise; + var then; + if (!microtask) { + queue = new Queue(); + flush = function() { + var parent, fn; + if (IS_NODE && (parent = process.domain)) + parent.exit(); + while (fn = queue.get()) + try { + fn(); + } catch (error) { + if (queue.head) + notify(); + throw error; + } + if (parent) + parent.enter(); + }; + if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document2) { + toggle = true; + node = document2.createTextNode(""); + new MutationObserver(flush).observe(node, { characterData: true }); + notify = function() { + node.data = toggle = !toggle; + }; + } else if (!IS_IOS_PEBBLE && Promise2 && Promise2.resolve) { + promise = Promise2.resolve(void 0); + promise.constructor = Promise2; + then = bind(promise.then, promise); + notify = function() { + then(flush); + }; + } else if (IS_NODE) { + notify = function() { + process.nextTick(flush); + }; + } else { + macrotask = bind(macrotask, global2); + notify = function() { + macrotask(flush); + }; + } + microtask = function(fn) { + if (!queue.head) + notify(); + queue.add(fn); + }; + } + var queue; + var flush; + module2.exports = microtask; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/host-report-errors.js +var require_host_report_errors = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/host-report-errors.js": function(exports2, module2) { + "use strict"; + module2.exports = function(a, b) { + try { + arguments.length === 1 ? console.error(a) : console.error(a, b); + } catch (error) { + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/perform.js +var require_perform = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/perform.js": function(exports2, module2) { + "use strict"; + module2.exports = function(exec) { + try { + return { error: false, value: exec() }; + } catch (error) { + return { error: true, value: error }; + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/promise-native-constructor.js +var require_promise_native_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/promise-native-constructor.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + module2.exports = global2.Promise; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-deno.js +var require_engine_is_deno = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-deno.js": function(exports2, module2) { + "use strict"; + module2.exports = typeof Deno == "object" && Deno && typeof Deno.version == "object"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-browser.js +var require_engine_is_browser = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-is-browser.js": function(exports2, module2) { + "use strict"; + var IS_DENO = require_engine_is_deno(); + var IS_NODE = require_engine_is_node(); + module2.exports = !IS_DENO && !IS_NODE && typeof window == "object" && typeof document == "object"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/promise-constructor-detection.js +var require_promise_constructor_detection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/promise-constructor-detection.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var NativePromiseConstructor = require_promise_native_constructor(); + var isCallable = require_is_callable(); + var isForced = require_is_forced(); + var inspectSource = require_inspect_source(); + var wellKnownSymbol = require_well_known_symbol(); + var IS_BROWSER = require_engine_is_browser(); + var IS_DENO = require_engine_is_deno(); + var IS_PURE = require_is_pure(); + var V8_VERSION = require_engine_v8_version(); + var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype; + var SPECIES = wellKnownSymbol("species"); + var SUBCLASSING = false; + var NATIVE_PROMISE_REJECTION_EVENT = isCallable(global2.PromiseRejectionEvent); + var FORCED_PROMISE_CONSTRUCTOR = isForced("Promise", function() { + var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(NativePromiseConstructor); + var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(NativePromiseConstructor); + if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) + return true; + if (IS_PURE && !(NativePromisePrototype["catch"] && NativePromisePrototype["finally"])) + return true; + if (!V8_VERSION || V8_VERSION < 51 || !/native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) { + var promise = new NativePromiseConstructor(function(resolve) { + resolve(1); + }); + var FakePromise = function(exec) { + exec(function() { + }, function() { + }); + }; + var constructor = promise.constructor = {}; + constructor[SPECIES] = FakePromise; + SUBCLASSING = promise.then(function() { + }) instanceof FakePromise; + if (!SUBCLASSING) + return true; + } + return !GLOBAL_CORE_JS_PROMISE && (IS_BROWSER || IS_DENO) && !NATIVE_PROMISE_REJECTION_EVENT; + }); + module2.exports = { + CONSTRUCTOR: FORCED_PROMISE_CONSTRUCTOR, + REJECTION_EVENT: NATIVE_PROMISE_REJECTION_EVENT, + SUBCLASSING: SUBCLASSING + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/new-promise-capability.js +var require_new_promise_capability = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/new-promise-capability.js": function(exports2, module2) { + "use strict"; + var aCallable = require_a_callable(); + var $TypeError = TypeError; + var PromiseCapability = function(C) { + var resolve, reject; + this.promise = new C(function($$resolve, $$reject) { + if (resolve !== void 0 || reject !== void 0) + throw new $TypeError("Bad Promise constructor"); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aCallable(resolve); + this.reject = aCallable(reject); + }; + module2.exports.f = function(C) { + return new PromiseCapability(C); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.constructor.js +var require_es_promise_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.constructor.js": function() { + "use strict"; + var $2 = require_export(); + var IS_PURE = require_is_pure(); + var IS_NODE = require_engine_is_node(); + var global2 = require_global(); + var call = require_function_call(); + var defineBuiltIn = require_define_built_in(); + var setPrototypeOf = require_object_set_prototype_of(); + var setToStringTag = require_set_to_string_tag(); + var setSpecies = require_set_species(); + var aCallable = require_a_callable(); + var isCallable = require_is_callable(); + var isObject = require_is_object(); + var anInstance = require_an_instance(); + var speciesConstructor = require_species_constructor(); + var task = require_task().set; + var microtask = require_microtask(); + var hostReportErrors = require_host_report_errors(); + var perform = require_perform(); + var Queue = require_queue(); + var InternalStateModule = require_internal_state(); + var NativePromiseConstructor = require_promise_native_constructor(); + var PromiseConstructorDetection = require_promise_constructor_detection(); + var newPromiseCapabilityModule = require_new_promise_capability(); + var PROMISE = "Promise"; + var FORCED_PROMISE_CONSTRUCTOR = PromiseConstructorDetection.CONSTRUCTOR; + var NATIVE_PROMISE_REJECTION_EVENT = PromiseConstructorDetection.REJECTION_EVENT; + var NATIVE_PROMISE_SUBCLASSING = PromiseConstructorDetection.SUBCLASSING; + var getInternalPromiseState = InternalStateModule.getterFor(PROMISE); + var setInternalState = InternalStateModule.set; + var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype; + var PromiseConstructor = NativePromiseConstructor; + var PromisePrototype = NativePromisePrototype; + var TypeError2 = global2.TypeError; + var document2 = global2.document; + var process = global2.process; + var newPromiseCapability = newPromiseCapabilityModule.f; + var newGenericPromiseCapability = newPromiseCapability; + var DISPATCH_EVENT = !!(document2 && document2.createEvent && global2.dispatchEvent); + var UNHANDLED_REJECTION = "unhandledrejection"; + var REJECTION_HANDLED = "rejectionhandled"; + var PENDING = 0; + var FULFILLED = 1; + var REJECTED = 2; + var HANDLED = 1; + var UNHANDLED = 2; + var Internal; + var OwnPromiseCapability; + var PromiseWrapper; + var nativeThen; + var isThenable = function(it) { + var then; + return isObject(it) && isCallable(then = it.then) ? then : false; + }; + var callReaction = function(reaction, state) { + var value = state.value; + var ok = state.state === FULFILLED; + var handler = ok ? reaction.ok : reaction.fail; + var resolve = reaction.resolve; + var reject = reaction.reject; + var domain = reaction.domain; + var result, then, exited; + try { + if (handler) { + if (!ok) { + if (state.rejection === UNHANDLED) + onHandleUnhandled(state); + state.rejection = HANDLED; + } + if (handler === true) + result = value; + else { + if (domain) + domain.enter(); + result = handler(value); + if (domain) { + domain.exit(); + exited = true; + } + } + if (result === reaction.promise) { + reject(new TypeError2("Promise-chain cycle")); + } else if (then = isThenable(result)) { + call(then, result, resolve, reject); + } else + resolve(result); + } else + reject(value); + } catch (error) { + if (domain && !exited) + domain.exit(); + reject(error); + } + }; + var notify = function(state, isReject) { + if (state.notified) + return; + state.notified = true; + microtask(function() { + var reactions = state.reactions; + var reaction; + while (reaction = reactions.get()) { + callReaction(reaction, state); + } + state.notified = false; + if (isReject && !state.rejection) + onUnhandled(state); + }); + }; + var dispatchEvent = function(name, promise, reason) { + var event, handler; + if (DISPATCH_EVENT) { + event = document2.createEvent("Event"); + event.promise = promise; + event.reason = reason; + event.initEvent(name, false, true); + global2.dispatchEvent(event); + } else + event = { promise: promise, reason: reason }; + if (!NATIVE_PROMISE_REJECTION_EVENT && (handler = global2["on" + name])) + handler(event); + else if (name === UNHANDLED_REJECTION) + hostReportErrors("Unhandled promise rejection", reason); + }; + var onUnhandled = function(state) { + call(task, global2, function() { + var promise = state.facade; + var value = state.value; + var IS_UNHANDLED = isUnhandled(state); + var result; + if (IS_UNHANDLED) { + result = perform(function() { + if (IS_NODE) { + process.emit("unhandledRejection", value, promise); + } else + dispatchEvent(UNHANDLED_REJECTION, promise, value); + }); + state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED; + if (result.error) + throw result.value; + } + }); + }; + var isUnhandled = function(state) { + return state.rejection !== HANDLED && !state.parent; + }; + var onHandleUnhandled = function(state) { + call(task, global2, function() { + var promise = state.facade; + if (IS_NODE) { + process.emit("rejectionHandled", promise); + } else + dispatchEvent(REJECTION_HANDLED, promise, state.value); + }); + }; + var bind = function(fn, state, unwrap) { + return function(value) { + fn(state, value, unwrap); + }; + }; + var internalReject = function(state, value, unwrap) { + if (state.done) + return; + state.done = true; + if (unwrap) + state = unwrap; + state.value = value; + state.state = REJECTED; + notify(state, true); + }; + var internalResolve = function(state, value, unwrap) { + if (state.done) + return; + state.done = true; + if (unwrap) + state = unwrap; + try { + if (state.facade === value) + throw new TypeError2("Promise can't be resolved itself"); + var then = isThenable(value); + if (then) { + microtask(function() { + var wrapper = { done: false }; + try { + call( + then, + value, + bind(internalResolve, wrapper, state), + bind(internalReject, wrapper, state) + ); + } catch (error) { + internalReject(wrapper, error, state); + } + }); + } else { + state.value = value; + state.state = FULFILLED; + notify(state, false); + } + } catch (error) { + internalReject({ done: false }, error, state); + } + }; + if (FORCED_PROMISE_CONSTRUCTOR) { + PromiseConstructor = function Promise2(executor) { + anInstance(this, PromisePrototype); + aCallable(executor); + call(Internal, this); + var state = getInternalPromiseState(this); + try { + executor(bind(internalResolve, state), bind(internalReject, state)); + } catch (error) { + internalReject(state, error); + } + }; + PromisePrototype = PromiseConstructor.prototype; + Internal = function Promise2(executor) { + setInternalState(this, { + type: PROMISE, + done: false, + notified: false, + parent: false, + reactions: new Queue(), + rejection: false, + state: PENDING, + value: void 0 + }); + }; + Internal.prototype = defineBuiltIn(PromisePrototype, "then", function then(onFulfilled, onRejected) { + var state = getInternalPromiseState(this); + var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor)); + state.parent = true; + reaction.ok = isCallable(onFulfilled) ? onFulfilled : true; + reaction.fail = isCallable(onRejected) && onRejected; + reaction.domain = IS_NODE ? process.domain : void 0; + if (state.state === PENDING) + state.reactions.add(reaction); + else + microtask(function() { + callReaction(reaction, state); + }); + return reaction.promise; + }); + OwnPromiseCapability = function() { + var promise = new Internal(); + var state = getInternalPromiseState(promise); + this.promise = promise; + this.resolve = bind(internalResolve, state); + this.reject = bind(internalReject, state); + }; + newPromiseCapabilityModule.f = newPromiseCapability = function(C) { + return C === PromiseConstructor || C === PromiseWrapper ? new OwnPromiseCapability(C) : newGenericPromiseCapability(C); + }; + if (!IS_PURE && isCallable(NativePromiseConstructor) && NativePromisePrototype !== Object.prototype) { + nativeThen = NativePromisePrototype.then; + if (!NATIVE_PROMISE_SUBCLASSING) { + defineBuiltIn(NativePromisePrototype, "then", function then(onFulfilled, onRejected) { + var that = this; + return new PromiseConstructor(function(resolve, reject) { + call(nativeThen, that, resolve, reject); + }).then(onFulfilled, onRejected); + }, { unsafe: true }); + } + try { + delete NativePromisePrototype.constructor; + } catch (error) { + } + if (setPrototypeOf) { + setPrototypeOf(NativePromisePrototype, PromisePrototype); + } + } + } + $2({ global: true, constructor: true, wrap: true, forced: FORCED_PROMISE_CONSTRUCTOR }, { + Promise: PromiseConstructor + }); + setToStringTag(PromiseConstructor, PROMISE, false, true); + setSpecies(PROMISE); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterate.js +var require_iterate = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterate.js": function(exports2, module2) { + "use strict"; + var bind = require_function_bind_context(); + var call = require_function_call(); + var anObject = require_an_object(); + var tryToString = require_try_to_string(); + var isArrayIteratorMethod = require_is_array_iterator_method(); + var lengthOfArrayLike = require_length_of_array_like(); + var isPrototypeOf = require_object_is_prototype_of(); + var getIterator = require_get_iterator(); + var getIteratorMethod = require_get_iterator_method(); + var iteratorClose = require_iterator_close(); + var $TypeError = TypeError; + var Result = function(stopped, result) { + this.stopped = stopped; + this.result = result; + }; + var ResultPrototype = Result.prototype; + module2.exports = function(iterable, unboundFunction, options) { + var that = options && options.that; + var AS_ENTRIES = !!(options && options.AS_ENTRIES); + var IS_RECORD = !!(options && options.IS_RECORD); + var IS_ITERATOR = !!(options && options.IS_ITERATOR); + var INTERRUPTED = !!(options && options.INTERRUPTED); + var fn = bind(unboundFunction, that); + var iterator, iterFn, index, length, result, next, step; + var stop = function(condition) { + if (iterator) + iteratorClose(iterator, "normal", condition); + return new Result(true, condition); + }; + var callFn = function(value) { + if (AS_ENTRIES) { + anObject(value); + return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]); + } + return INTERRUPTED ? fn(value, stop) : fn(value); + }; + if (IS_RECORD) { + iterator = iterable.iterator; + } else if (IS_ITERATOR) { + iterator = iterable; + } else { + iterFn = getIteratorMethod(iterable); + if (!iterFn) + throw new $TypeError(tryToString(iterable) + " is not iterable"); + if (isArrayIteratorMethod(iterFn)) { + for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) { + result = callFn(iterable[index]); + if (result && isPrototypeOf(ResultPrototype, result)) + return result; + } + return new Result(false); + } + iterator = getIterator(iterable, iterFn); + } + next = IS_RECORD ? iterable.next : iterator.next; + while (!(step = call(next, iterator)).done) { + try { + result = callFn(step.value); + } catch (error) { + iteratorClose(iterator, "throw", error); + } + if (typeof result == "object" && result && isPrototypeOf(ResultPrototype, result)) + return result; + } + return new Result(false); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/promise-statics-incorrect-iteration.js +var require_promise_statics_incorrect_iteration = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/promise-statics-incorrect-iteration.js": function(exports2, module2) { + "use strict"; + var NativePromiseConstructor = require_promise_native_constructor(); + var checkCorrectnessOfIteration = require_check_correctness_of_iteration(); + var FORCED_PROMISE_CONSTRUCTOR = require_promise_constructor_detection().CONSTRUCTOR; + module2.exports = FORCED_PROMISE_CONSTRUCTOR || !checkCorrectnessOfIteration(function(iterable) { + NativePromiseConstructor.all(iterable).then(void 0, function() { + }); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.all.js +var require_es_promise_all = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.all.js": function() { + "use strict"; + var $2 = require_export(); + var call = require_function_call(); + var aCallable = require_a_callable(); + var newPromiseCapabilityModule = require_new_promise_capability(); + var perform = require_perform(); + var iterate = require_iterate(); + var PROMISE_STATICS_INCORRECT_ITERATION = require_promise_statics_incorrect_iteration(); + $2({ target: "Promise", stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, { + all: function all(iterable) { + var C = this; + var capability = newPromiseCapabilityModule.f(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function() { + var $promiseResolve = aCallable(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate(iterable, function(promise) { + var index = counter++; + var alreadyCalled = false; + remaining++; + call($promiseResolve, C, promise).then(function(value) { + if (alreadyCalled) + return; + alreadyCalled = true; + values[index] = value; + --remaining || resolve(values); + }, reject); + }); + --remaining || resolve(values); + }); + if (result.error) + reject(result.value); + return capability.promise; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.catch.js +var require_es_promise_catch = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.catch.js": function() { + "use strict"; + var $2 = require_export(); + var IS_PURE = require_is_pure(); + var FORCED_PROMISE_CONSTRUCTOR = require_promise_constructor_detection().CONSTRUCTOR; + var NativePromiseConstructor = require_promise_native_constructor(); + var getBuiltIn = require_get_built_in(); + var isCallable = require_is_callable(); + var defineBuiltIn = require_define_built_in(); + var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype; + $2({ target: "Promise", proto: true, forced: FORCED_PROMISE_CONSTRUCTOR, real: true }, { + "catch": function(onRejected) { + return this.then(void 0, onRejected); + } + }); + if (!IS_PURE && isCallable(NativePromiseConstructor)) { + method = getBuiltIn("Promise").prototype["catch"]; + if (NativePromisePrototype["catch"] !== method) { + defineBuiltIn(NativePromisePrototype, "catch", method, { unsafe: true }); + } + } + var method; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.race.js +var require_es_promise_race = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.race.js": function() { + "use strict"; + var $2 = require_export(); + var call = require_function_call(); + var aCallable = require_a_callable(); + var newPromiseCapabilityModule = require_new_promise_capability(); + var perform = require_perform(); + var iterate = require_iterate(); + var PROMISE_STATICS_INCORRECT_ITERATION = require_promise_statics_incorrect_iteration(); + $2({ target: "Promise", stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, { + race: function race(iterable) { + var C = this; + var capability = newPromiseCapabilityModule.f(C); + var reject = capability.reject; + var result = perform(function() { + var $promiseResolve = aCallable(C.resolve); + iterate(iterable, function(promise) { + call($promiseResolve, C, promise).then(capability.resolve, reject); + }); + }); + if (result.error) + reject(result.value); + return capability.promise; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.reject.js +var require_es_promise_reject = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.reject.js": function() { + "use strict"; + var $2 = require_export(); + var newPromiseCapabilityModule = require_new_promise_capability(); + var FORCED_PROMISE_CONSTRUCTOR = require_promise_constructor_detection().CONSTRUCTOR; + $2({ target: "Promise", stat: true, forced: FORCED_PROMISE_CONSTRUCTOR }, { + reject: function reject(r) { + var capability = newPromiseCapabilityModule.f(this); + var capabilityReject = capability.reject; + capabilityReject(r); + return capability.promise; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/promise-resolve.js +var require_promise_resolve = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/promise-resolve.js": function(exports2, module2) { + "use strict"; + var anObject = require_an_object(); + var isObject = require_is_object(); + var newPromiseCapability = require_new_promise_capability(); + module2.exports = function(C, x) { + anObject(C); + if (isObject(x) && x.constructor === C) + return x; + var promiseCapability = newPromiseCapability.f(C); + var resolve = promiseCapability.resolve; + resolve(x); + return promiseCapability.promise; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.resolve.js +var require_es_promise_resolve = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.resolve.js": function() { + "use strict"; + var $2 = require_export(); + var getBuiltIn = require_get_built_in(); + var IS_PURE = require_is_pure(); + var NativePromiseConstructor = require_promise_native_constructor(); + var FORCED_PROMISE_CONSTRUCTOR = require_promise_constructor_detection().CONSTRUCTOR; + var promiseResolve = require_promise_resolve(); + var PromiseConstructorWrapper = getBuiltIn("Promise"); + var CHECK_WRAPPER = IS_PURE && !FORCED_PROMISE_CONSTRUCTOR; + $2({ target: "Promise", stat: true, forced: IS_PURE || FORCED_PROMISE_CONSTRUCTOR }, { + resolve: function resolve(x) { + return promiseResolve(CHECK_WRAPPER && this === PromiseConstructorWrapper ? NativePromiseConstructor : this, x); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.js +var require_es_promise = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.promise.js": function() { + "use strict"; + require_es_promise_constructor(); + require_es_promise_all(); + require_es_promise_catch(); + require_es_promise_race(); + require_es_promise_reject(); + require_es_promise_resolve(); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-get-flags.js +var require_regexp_get_flags = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-get-flags.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var hasOwn = require_has_own_property(); + var isPrototypeOf = require_object_is_prototype_of(); + var regExpFlags = require_regexp_flags(); + var RegExpPrototype = RegExp.prototype; + module2.exports = function(R) { + var flags = R.flags; + return flags === void 0 && !("flags" in RegExpPrototype) && !hasOwn(R, "flags") && isPrototypeOf(RegExpPrototype, R) ? call(regExpFlags, R) : flags; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.to-string.js +var require_es_regexp_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.to-string.js": function() { + "use strict"; + var PROPER_FUNCTION_NAME = require_function_name().PROPER; + var defineBuiltIn = require_define_built_in(); + var anObject = require_an_object(); + var $toString = require_to_string(); + var fails = require_fails(); + var getRegExpFlags = require_regexp_get_flags(); + var TO_STRING = "toString"; + var RegExpPrototype = RegExp.prototype; + var nativeToString = RegExpPrototype[TO_STRING]; + var NOT_GENERIC = fails(function() { + return nativeToString.call({ source: "a", flags: "b" }) !== "/a/b"; + }); + var INCORRECT_NAME = PROPER_FUNCTION_NAME && nativeToString.name !== TO_STRING; + if (NOT_GENERIC || INCORRECT_NAME) { + defineBuiltIn(RegExpPrototype, TO_STRING, function toString() { + var R = anObject(this); + var pattern = $toString(R.source); + var flags = $toString(getRegExpFlags(R)); + return "/" + pattern + "/" + flags; + }, { unsafe: true }); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-regexp.js +var require_is_regexp = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-regexp.js": function(exports2, module2) { + "use strict"; + var isObject = require_is_object(); + var classof = require_classof_raw(); + var wellKnownSymbol = require_well_known_symbol(); + var MATCH = wellKnownSymbol("match"); + module2.exports = function(it) { + var isRegExp; + return isObject(it) && ((isRegExp = it[MATCH]) !== void 0 ? !!isRegExp : classof(it) === "RegExp"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/not-a-regexp.js +var require_not_a_regexp = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/not-a-regexp.js": function(exports2, module2) { + "use strict"; + var isRegExp = require_is_regexp(); + var $TypeError = TypeError; + module2.exports = function(it) { + if (isRegExp(it)) { + throw new $TypeError("The method doesn't accept regular expressions"); + } + return it; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/correct-is-regexp-logic.js +var require_correct_is_regexp_logic = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/correct-is-regexp-logic.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var MATCH = wellKnownSymbol("match"); + module2.exports = function(METHOD_NAME) { + var regexp = /./; + try { + "/./"[METHOD_NAME](regexp); + } catch (error1) { + try { + regexp[MATCH] = false; + return "/./"[METHOD_NAME](regexp); + } catch (error2) { + } + } + return false; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.ends-with.js +var require_es_string_ends_with = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.ends-with.js": function() { + "use strict"; + var $2 = require_export(); + var uncurryThis = require_function_uncurry_this_clause(); + var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; + var toLength = require_to_length(); + var toString = require_to_string(); + var notARegExp = require_not_a_regexp(); + var requireObjectCoercible = require_require_object_coercible(); + var correctIsRegExpLogic = require_correct_is_regexp_logic(); + var IS_PURE = require_is_pure(); + var slice = uncurryThis("".slice); + var min = Math.min; + var CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic("endsWith"); + var MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function() { + var descriptor = getOwnPropertyDescriptor(String.prototype, "endsWith"); + return descriptor && !descriptor.writable; + }(); + $2({ target: "String", proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, { + endsWith: function endsWith(searchString) { + var that = toString(requireObjectCoercible(this)); + notARegExp(searchString); + var endPosition = arguments.length > 1 ? arguments[1] : void 0; + var len = that.length; + var end = endPosition === void 0 ? len : min(toLength(endPosition), len); + var search = toString(searchString); + return slice(that, end - search.length, end) === search; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.includes.js +var require_es_string_includes = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.includes.js": function() { + "use strict"; + var $2 = require_export(); + var uncurryThis = require_function_uncurry_this(); + var notARegExp = require_not_a_regexp(); + var requireObjectCoercible = require_require_object_coercible(); + var toString = require_to_string(); + var correctIsRegExpLogic = require_correct_is_regexp_logic(); + var stringIndexOf = uncurryThis("".indexOf); + $2({ target: "String", proto: true, forced: !correctIsRegExpLogic("includes") }, { + includes: function includes(searchString) { + return !!~stringIndexOf( + toString(requireObjectCoercible(this)), + toString(notARegExp(searchString)), + arguments.length > 1 ? arguments[1] : void 0 + ); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js +var require_fix_regexp_well_known_symbol_logic = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js": function(exports2, module2) { + "use strict"; + require_es_regexp_exec(); + var call = require_function_call(); + var defineBuiltIn = require_define_built_in(); + var regexpExec = require_regexp_exec(); + var fails = require_fails(); + var wellKnownSymbol = require_well_known_symbol(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var SPECIES = wellKnownSymbol("species"); + var RegExpPrototype = RegExp.prototype; + module2.exports = function(KEY, exec, FORCED, SHAM) { + var SYMBOL = wellKnownSymbol(KEY); + var DELEGATES_TO_SYMBOL = !fails(function() { + var O = {}; + O[SYMBOL] = function() { + return 7; + }; + return ""[KEY](O) !== 7; + }); + var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function() { + var execCalled = false; + var re = /a/; + if (KEY === "split") { + re = {}; + re.constructor = {}; + re.constructor[SPECIES] = function() { + return re; + }; + re.flags = ""; + re[SYMBOL] = /./[SYMBOL]; + } + re.exec = function() { + execCalled = true; + return null; + }; + re[SYMBOL](""); + return !execCalled; + }); + if (!DELEGATES_TO_SYMBOL || !DELEGATES_TO_EXEC || FORCED) { + var nativeRegExpMethod = /./[SYMBOL]; + var methods = exec(SYMBOL, ""[KEY], function(nativeMethod, regexp, str, arg2, forceStringMethod) { + var $exec = regexp.exec; + if ($exec === regexpExec || $exec === RegExpPrototype.exec) { + if (DELEGATES_TO_SYMBOL && !forceStringMethod) { + return { done: true, value: call(nativeRegExpMethod, regexp, str, arg2) }; + } + return { done: true, value: call(nativeMethod, str, regexp, arg2) }; + } + return { done: false }; + }); + defineBuiltIn(String.prototype, KEY, methods[0]); + defineBuiltIn(RegExpPrototype, SYMBOL, methods[1]); + } + if (SHAM) + createNonEnumerableProperty(RegExpPrototype[SYMBOL], "sham", true); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/advance-string-index.js +var require_advance_string_index = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/advance-string-index.js": function(exports2, module2) { + "use strict"; + var charAt = require_string_multibyte().charAt; + module2.exports = function(S, index, unicode) { + return index + (unicode ? charAt(S, index).length : 1); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-substitution.js +var require_get_substitution = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-substitution.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toObject = require_to_object(); + var floor = Math.floor; + var charAt = uncurryThis("".charAt); + var replace = uncurryThis("".replace); + var stringSlice = uncurryThis("".slice); + var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g; + var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g; + module2.exports = function(matched, str, position, captures, namedCaptures, replacement) { + var tailPos = position + matched.length; + var m = captures.length; + var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED; + if (namedCaptures !== void 0) { + namedCaptures = toObject(namedCaptures); + symbols = SUBSTITUTION_SYMBOLS; + } + return replace(replacement, symbols, function(match, ch) { + var capture; + switch (charAt(ch, 0)) { + case "$": + return "$"; + case "&": + return matched; + case "`": + return stringSlice(str, 0, position); + case "'": + return stringSlice(str, tailPos); + case "<": + capture = namedCaptures[stringSlice(ch, 1, -1)]; + break; + default: + var n = +ch; + if (n === 0) + return match; + if (n > m) { + var f = floor(n / 10); + if (f === 0) + return match; + if (f <= m) + return captures[f - 1] === void 0 ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1); + return match; + } + capture = captures[n - 1]; + } + return capture === void 0 ? "" : capture; + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-exec-abstract.js +var require_regexp_exec_abstract = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-exec-abstract.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var anObject = require_an_object(); + var isCallable = require_is_callable(); + var classof = require_classof_raw(); + var regexpExec = require_regexp_exec(); + var $TypeError = TypeError; + module2.exports = function(R, S) { + var exec = R.exec; + if (isCallable(exec)) { + var result = call(exec, R, S); + if (result !== null) + anObject(result); + return result; + } + if (classof(R) === "RegExp") + return call(regexpExec, R, S); + throw new $TypeError("RegExp#exec called on incompatible receiver"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.replace.js +var require_es_string_replace = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.replace.js": function() { + "use strict"; + var apply = require_function_apply(); + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var fixRegExpWellKnownSymbolLogic = require_fix_regexp_well_known_symbol_logic(); + var fails = require_fails(); + var anObject = require_an_object(); + var isCallable = require_is_callable(); + var isNullOrUndefined = require_is_null_or_undefined(); + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var toLength = require_to_length(); + var toString = require_to_string(); + var requireObjectCoercible = require_require_object_coercible(); + var advanceStringIndex = require_advance_string_index(); + var getMethod = require_get_method(); + var getSubstitution = require_get_substitution(); + var regExpExec = require_regexp_exec_abstract(); + var wellKnownSymbol = require_well_known_symbol(); + var REPLACE = wellKnownSymbol("replace"); + var max = Math.max; + var min = Math.min; + var concat = uncurryThis([].concat); + var push = uncurryThis([].push); + var stringIndexOf = uncurryThis("".indexOf); + var stringSlice = uncurryThis("".slice); + var maybeToString = function(it) { + return it === void 0 ? it : String(it); + }; + var REPLACE_KEEPS_$0 = function() { + return "a".replace(/./, "$0") === "$0"; + }(); + var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = function() { + if (/./[REPLACE]) { + return /./[REPLACE]("a", "$0") === ""; + } + return false; + }(); + var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function() { + var re = /./; + re.exec = function() { + var result = []; + result.groups = { a: "7" }; + return result; + }; + return "".replace(re, "$") !== "7"; + }); + fixRegExpWellKnownSymbolLogic("replace", function(_, nativeReplace, maybeCallNative) { + var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? "$" : "$0"; + return [ + // `String.prototype.replace` method + // https://tc39.es/ecma262/#sec-string.prototype.replace + function replace(searchValue, replaceValue) { + var O = requireObjectCoercible(this); + var replacer = isNullOrUndefined(searchValue) ? void 0 : getMethod(searchValue, REPLACE); + return replacer ? call(replacer, searchValue, O, replaceValue) : call(nativeReplace, toString(O), searchValue, replaceValue); + }, + // `RegExp.prototype[@@replace]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace + function(string, replaceValue) { + var rx = anObject(this); + var S = toString(string); + if (typeof replaceValue == "string" && stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 && stringIndexOf(replaceValue, "$<") === -1) { + var res = maybeCallNative(nativeReplace, rx, S, replaceValue); + if (res.done) + return res.value; + } + var functionalReplace = isCallable(replaceValue); + if (!functionalReplace) + replaceValue = toString(replaceValue); + var global2 = rx.global; + var fullUnicode; + if (global2) { + fullUnicode = rx.unicode; + rx.lastIndex = 0; + } + var results = []; + var result; + while (true) { + result = regExpExec(rx, S); + if (result === null) + break; + push(results, result); + if (!global2) + break; + var matchStr = toString(result[0]); + if (matchStr === "") + rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); + } + var accumulatedResult = ""; + var nextSourcePosition = 0; + for (var i = 0; i < results.length; i++) { + result = results[i]; + var matched = toString(result[0]); + var position = max(min(toIntegerOrInfinity(result.index), S.length), 0); + var captures = []; + var replacement; + for (var j = 1; j < result.length; j++) + push(captures, maybeToString(result[j])); + var namedCaptures = result.groups; + if (functionalReplace) { + var replacerArgs = concat([matched], captures, position, S); + if (namedCaptures !== void 0) + push(replacerArgs, namedCaptures); + replacement = toString(apply(replaceValue, void 0, replacerArgs)); + } else { + replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue); + } + if (position >= nextSourcePosition) { + accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement; + nextSourcePosition = position + matched.length; + } + } + return accumulatedResult + stringSlice(S, nextSourcePosition); + } + ]; + }, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.starts-with.js +var require_es_string_starts_with = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.starts-with.js": function() { + "use strict"; + var $2 = require_export(); + var uncurryThis = require_function_uncurry_this_clause(); + var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; + var toLength = require_to_length(); + var toString = require_to_string(); + var notARegExp = require_not_a_regexp(); + var requireObjectCoercible = require_require_object_coercible(); + var correctIsRegExpLogic = require_correct_is_regexp_logic(); + var IS_PURE = require_is_pure(); + var stringSlice = uncurryThis("".slice); + var min = Math.min; + var CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic("startsWith"); + var MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function() { + var descriptor = getOwnPropertyDescriptor(String.prototype, "startsWith"); + return descriptor && !descriptor.writable; + }(); + $2({ target: "String", proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, { + startsWith: function startsWith(searchString) { + var that = toString(requireObjectCoercible(this)); + notARegExp(searchString); + var index = toLength(min(arguments.length > 1 ? arguments[1] : void 0, that.length)); + var search = toString(searchString); + return stringSlice(that, index, index + search.length) === search; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-trim-forced.js +var require_string_trim_forced = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-trim-forced.js": function(exports2, module2) { + "use strict"; + var PROPER_FUNCTION_NAME = require_function_name().PROPER; + var fails = require_fails(); + var whitespaces = require_whitespaces(); + var non = "​…᠎"; + module2.exports = function(METHOD_NAME) { + return fails(function() { + return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() !== non || PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME; + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.trim.js +var require_es_string_trim = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.trim.js": function() { + "use strict"; + var $2 = require_export(); + var $trim = require_string_trim().trim; + var forcedStringTrimMethod = require_string_trim_forced(); + $2({ target: "String", proto: true, forced: forcedStringTrimMethod("trim") }, { + trim: function trim() { + return $trim(this); + } + }); + } +}); + +// dist/Util/Util.js +require_es_symbol(); +require_es_symbol_description(); +require_es_symbol_iterator(); +require_es_symbol_to_primitive(); +require_es_error_cause(); +require_es_array_filter(); +require_es_array_for_each(); +require_es_array_from(); +require_es_array_iterator(); +require_es_array_push(); +require_es_date_to_primitive(); +require_es_number_constructor(); +require_es_object_define_properties(); +require_es_object_get_own_property_descriptors(); +require_es_object_keys(); +require_es_regexp_test(); +require_es_string_iterator(); +require_Event(); +require_matchMedia(); +require_MediaQueryList_prototype_addEventListener(); +init_DOMTokenList2(); +init_DOMTokenList_prototype_replace(); +require_requestAnimationFrame(); +require_WebAnimations(); +require_es_error_to_string(); +require_es_array_find(); +require_es_array_includes(); +require_es_array_index_of(); +require_es_array_slice(); +require_es_object_define_property(); +require_es_object_get_own_property_descriptor(); +require_es_object_get_own_property_names(); +require_es_object_get_prototype_of(); +require_es_object_to_string(); +require_es_promise(); +require_es_regexp_exec(); +require_es_regexp_to_string(); +require_es_string_ends_with(); +require_es_string_includes(); +require_es_string_replace(); +require_es_string_starts_with(); +require_es_string_trim(); +function ownKeys(e, r) { + var t = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t.push.apply(t, o); + } + return t; +} +function _objectSpread(e) { + for (var r = 1; r < arguments.length; r++) { + var t = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys(Object(t), true).forEach(function(r2) { + _defineProperty(e, r2, t[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t, r2)); + }); + } + return e; +} +function _defineProperty(obj, key, value) { + key = _toPropertyKey(key); + if (key in obj) { + Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); + } else { + obj[key] = value; + } + return obj; +} +function _toPropertyKey(t) { + var i = _toPrimitive(t, "string"); + return "symbol" == _typeof(i) ? i : String(i); +} +function _toPrimitive(t, r) { + if ("object" != _typeof(t) || !t) + return t; + var e = t[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t, r || "default"); + if ("object" != _typeof(i)) + return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t); +} +function _createForOfIteratorHelper(o, allowArrayLike) { + var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; + if (!it) { + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) + o = it; + var i = 0; + var F = function F2() { + }; + return { s: F, n: function n() { + if (i >= o.length) + return { done: true }; + return { done: false, value: o[i++] }; + }, e: function e(_e) { + throw _e; + }, f: F }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + var normalCompletion = true, didErr = false, err; + return { s: function s() { + it = it.call(o); + }, n: function n() { + var step = it.next(); + normalCompletion = step.done; + return step; + }, e: function e(_e2) { + didErr = true; + err = _e2; + }, f: function f() { + try { + if (!normalCompletion && it["return"] != null) + it["return"](); + } finally { + if (didErr) + throw err; + } + } }; +} +function _unsupportedIterableToArray(o, minLen) { + if (!o) + return; + if (typeof o === "string") + return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) + n = o.constructor.name; + if (n === "Map" || n === "Set") + return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) + return _arrayLikeToArray(o, minLen); +} +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) + len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) + arr2[i] = arr[i]; + return arr2; +} +function _typeof(o) { + "@babel/helpers - typeof"; + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof(o); +} +var __create = Object.create; +var __defProp2 = Object.defineProperty; +var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; +var __getOwnPropNames2 = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp2 = Object.prototype.hasOwnProperty; +var __export = function __export2(target, all) { + for (var name in all) + __defProp2(target, name, { + get: all[name], + enumerable: true + }); +}; +var __copyProps2 = function __copyProps3(to, from, except, desc) { + if (from && _typeof(from) === "object" || typeof from === "function") { + var _iterator = _createForOfIteratorHelper(__getOwnPropNames2(from)), _step; + try { + var _loop = function _loop2() { + var key = _step.value; + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { + get: function get() { + return from[key]; + }, + enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable + }); + }; + for (_iterator.s(); !(_step = _iterator.n()).done; ) { + _loop(); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } + return to; +}; +var __toESM = function __toESM2(mod, isNodeMode, target) { + return target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps2( + // 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 ? __defProp2(target, "default", { + value: mod, + enumerable: true + }) : target, + mod + ); +}; +var __toCommonJS2 = function __toCommonJS3(mod) { + return __copyProps2(__defProp2({}, "__esModule", { + value: true + }), mod); +}; +//! src/Util/Util.ts +var Util_exports = {}; +__export(Util_exports, { + addEventListenerWithRemover: function addEventListenerWithRemover() { + return _addEventListenerWithRemover; + }, + changeOpacityWhenMouseEnterOrLeave: function changeOpacityWhenMouseEnterOrLeave() { + return _changeOpacityWhenMouseEnterOrLeave; + }, + checkA11yConfirmKey: function checkA11yConfirmKey() { + return _checkA11yConfirmKey; + }, + delay: function delay() { + return _delay; + }, + generateSvgDataUrl: function generateSvgDataUrl() { + return _generateSvgDataUrl; + }, + getBody: function getBody() { + return _getBody; + }, + initMwApi: function initMwApi() { + return _initMwApi; + }, + isValidKey: function isValidKey() { + return _isValidKey; + }, + oouiConfirmWithStyle: function oouiConfirmWithStyle() { + return _oouiConfirmWithStyle; + }, + scrollTop: function scrollTop() { + return _scrollTop; + } +}); +module.exports = __toCommonJS2(Util_exports); +//! src/Util/modules/addEventListenerWithRemover.ts +var _addEventListenerWithRemover = function _addEventListenerWithRemover2(_ref) { + var target = _ref.target, type = _ref.type, listener = _ref.listener, _ref$options = _ref.options, options = _ref$options === void 0 ? {} : _ref$options; + target.addEventListener(type, listener, options); + return { + remove: function remove() { + target.removeEventListener(type, listener, options); + } + }; +}; +//! src/Util/modules/changeOpacityWhenMouseEnterOrLeave.ts +var _changeOpacityWhenMouseEnterOrLeave = function _changeOpacityWhenMouseEnterOrLeave2(event) { + var opacity = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0.7; + event.currentTarget.style.opacity = event.type === "mouseenter" ? "1" : opacity.toString(); +}; +//! src/Util/modules/checkA11yConfirmKey.ts +var _checkA11yConfirmKey = function _checkA11yConfirmKey2(event) { + if (["click", "keydown"].includes(event.type)) { + if (event.type === "keydown") { + return ["Enter", " "].includes(event.key); + } + return true; + } + return false; +}; +//! src/Util/modules/delay.ts +var _delay = function _delay2(ms) { + return new Promise(function(resolve) { + setTimeout(resolve, ms); + }); +}; +//! src/Util/modules/generateSvgDataUrl.ts +var _generateSvgDataUrl = function _generateSvgDataUrl2(svg) { + /*! + * SPDX-License-Identifier: MIT + * + * @file svg-to-data-uri.js {@link https://github.com/heyallan/svg-to-data-uri/} + * + * @author Allan Moreno + * @license MIT {@link https://github.com/heyallan/svg-to-data-uri/blob/master/LICENSE} + */ + svg = svg.trim(); + svg = svg.slice(svg.indexOf("")) { + return ""; + } + if (!svg.includes("http://www.w3.org/2000/svg")) { + svg = svg.replace(//g, ""); + svg = svg.replace(/version=["'](.{0,}?)["'](?=[\s>])/g, ""); + svg = svg.replace(/"'(.{1,})'"/g, "'$1'"); + svg = svg.replace(/"/g, "'"); + svg = svg.replace(/>\s{1,}<"); + svg = svg.replace(/\s{2,}/g, " "); + svg = svg.trim(); + if (!svg.startsWith("")) { + return ""; + } + svg = svg.replace(/&/g, "&"); + svg = svg.replace(/[%#<>?[\\\]^`{|}]/g, encodeURIComponent); + svg = "data:image/svg+xml,".concat(svg); + return svg; +}; +//! src/Util/modules/getBody.ts +var _getBody = function _getBody2() { + return $.ready.then(function() { + var $body = $("body"); + return $body; + }); +}; +//! src/Util/modules/initMwApi.ts +function _initMwApi(userAgent, apiUri) { + var apiOptions = { + ajax: { + headers: { + "Api-User-Agent": userAgent ? "Qiuwen/1.1 (".concat(userAgent, ")") : "Qiuwen/1.1" + } + } + }; + if (apiUri) { + return new mw.ForeignApi(apiUri, apiOptions); + } + return new mw.Api(apiOptions); +} +//! src/Util/modules/isValidKey.ts +var _isValidKey = function _isValidKey2(object, key) { + return key in object; +}; +//! src/Util/modules/oouiConfirmWithStyle.tsx +var import_ext_gadget = __toESM(require("ext.gadget.React"), 1); +var _oouiConfirmWithStyle = function _oouiConfirmWithStyle2(message) { + return OO.ui.confirm($(/* @__PURE__ */ import_ext_gadget["default"].createElement("div", { + className: "oo-ui-window-foot", + style: { + border: ".1rem solid #0645ad", + display: "flex", + justifyContent: "space-evenly" + } + }, /* @__PURE__ */ import_ext_gadget["default"].createElement("span", { + style: { + fontSize: "1.2rem", + fontWeight: "500", + lineHeight: "1.8", + padding: ".4em 0" + } + }, message)))).then(function(isConfirm) { + return isConfirm; + }); +}; +//! src/Util/modules/scrollTop.ts +var _scrollTop = function _scrollTop2(targetHeight) { + var effectsOptionsOrDuration = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + var options = typeof effectsOptionsOrDuration === "number" || typeof effectsOptionsOrDuration === "string" ? { + duration: effectsOptionsOrDuration, + easing: "linear" + } : _objectSpread({ + duration: "slow", + easing: "linear" + }, effectsOptionsOrDuration); + $(document).find("html, body").animate({ + scrollTop: targetHeight + }, options); +}; + +})(); + +/* */ + +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZm9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wb3NzaWJsZS1wcm90b3R5cGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJveHktYWNjZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci1zdGFjay1jbGVhci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dyYXAtZXJyb3ItY29uc3RydWN0b3Itd2l0aC1jYXVzZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1mb3ItZWFjaC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktZnJvbS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5mcm9tLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3Rvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGF0ZS10by1wcmltaXRpdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZGF0ZS50by1wcmltaXRpdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90aGlzLW51bWJlci12YWx1ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3doaXRlc3BhY2VzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLXRyaW0uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1mbGFncy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1kb3QtYWxsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLW5jZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50ZXN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi4xL25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0V2ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuMS9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9tYXRjaE1lZGlhLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuMS9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9NZWRpYVF1ZXJ5TGlzdC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjEvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX0RPTVRva2VuTGlzdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjEvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvRE9NVG9rZW5MaXN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuMS9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9ET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlcGxhY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi4xL25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjEvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvV2ViQW5pbWF0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXRvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5lcnJvci50by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pbmRleC1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4taW5zdGFuY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGguanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdGFzay5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NhZmUtZ2V0LWJ1aWx0LWluLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcXVldWUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLXBlYmJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy13ZWJvcy13ZWJraXQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9taWNyb3Rhc2suanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wZXJmb3JtLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtZGVuby5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1icm93c2VyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuY29uc3RydWN0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5hbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5jYXRjaC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLnJhY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5yZWplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5yZXNvbHZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZ2V0LWZsYWdzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1yZWdleHAuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9ub3QtYS1yZWdleHAuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuZW5kcy13aXRoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1zdWJzdGl0dXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc3RhcnRzLXdpdGguanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0uanMiLCAic3JjL1V0aWwvVXRpbC50cyIsICJzcmMvVXRpbC9tb2R1bGVzL2FkZEV2ZW50TGlzdGVuZXJXaXRoUmVtb3Zlci50cyIsICJzcmMvVXRpbC9tb2R1bGVzL2NoYW5nZU9wYWNpdHlXaGVuTW91c2VFbnRlck9yTGVhdmUudHMiLCAic3JjL1V0aWwvbW9kdWxlcy9jaGVja0ExMXlDb25maXJtS2V5LnRzIiwgInNyYy9VdGlsL21vZHVsZXMvZGVsYXkudHMiLCAic3JjL1V0aWwvbW9kdWxlcy9nZW5lcmF0ZVN2Z0RhdGFVcmwudHMiLCAic3JjL1V0aWwvbW9kdWxlcy9nZXRCb2R5LnRzIiwgInNyYy9VdGlsL21vZHVsZXMvaW5pdE13QXBpLnRzIiwgInNyYy9VdGlsL21vZHVsZXMvaXNWYWxpZEtleS50cyIsICJzcmMvVXRpbC9tb2R1bGVzL29vdWlDb25maXJtV2l0aFN0eWxlLnRzeCIsICJzcmMvVXRpbC9tb2R1bGVzL3Njcm9sbFRvcC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3RcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSkgOiBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgbmF2aWdhdG9yICE9ICd1bmRlZmluZWQnICYmIFN0cmluZyhuYXZpZ2F0b3IudXNlckFnZW50KSB8fCAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWwuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFRoaXNbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxuKHN0b3JlLnZlcnNpb25zIHx8IChzdG9yZS52ZXJzaW9ucyA9IFtdKSkucHVzaCh7XG4gIHZlcnNpb246ICczLjM2LjAnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjM2LjAvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGxlbiA9IHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuICByZXR1cm4gbGVuID4gMCA/IG1pbihsZW4sIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFtUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFtUQVJHRVRdICYmIGdsb2JhbFtUQVJHRVRdLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLmRvbnRDYWxsR2V0U2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gdHlwZW9mIHRhcmdldFByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KTtcbiAgICB9XG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoc291cmNlUHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuICAgIGRlZmluZUJ1aWx0SW4odGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gJE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoY2xhc3NvZihhcmd1bWVudCkgPT09ICdTeW1ib2wnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZycpO1xuICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyAmJiAhVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIHByb3BzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgLS0gb2xkIElFLCBXU0ggKi9cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIGFjdGl2ZVhEb2N1bWVudCA9IG51bGw7IC8vIGF2b2lkIG1lbW9yeSBsZWFrXG4gIHJldHVybiB0ZW1wO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUlGcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHZhciBKUyA9ICdqYXZhJyArIFNDUklQVCArICc6JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaHRtbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDc1XG4gIGlmcmFtZS5zcmMgPSBTdHJpbmcoSlMpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnZG9jdW1lbnQuRj1PYmplY3QnKSk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIHJldHVybiBpZnJhbWVEb2N1bWVudC5GO1xufTtcblxuLy8gQ2hlY2sgZm9yIGRvY3VtZW50LmRvbWFpbiBhbmQgYWN0aXZlIHggc3VwcG9ydFxuLy8gTm8gbmVlZCB0byB1c2UgYWN0aXZlIHggYXBwcm9hY2ggd2hlbiBkb2N1bWVudC5kb21haW4gaXMgbm90IHNldFxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9pc3N1ZXMvMTUwXG4vLyB2YXJpYXRpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL2tpdGNhbWJyaWRnZS9lczUtc2hpbS9jb21taXQvNGY3MzhhYzA2NjM0NlxuLy8gYXZvaWQgSUUgR0MgYnVnXG52YXIgYWN0aXZlWERvY3VtZW50O1xudmFyIE51bGxQcm90b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBhY3RpdmVYRG9jdW1lbnQgPSBuZXcgQWN0aXZlWE9iamVjdCgnaHRtbGZpbGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogaWdub3JlICovIH1cbiAgTnVsbFByb3RvT2JqZWN0ID0gdHlwZW9mIGRvY3VtZW50ICE9ICd1bmRlZmluZWQnXG4gICAgPyBkb2N1bWVudC5kb21haW4gJiYgYWN0aXZlWERvY3VtZW50XG4gICAgICA/IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KSAvLyBvbGQgSUVcbiAgICAgIDogTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lKClcbiAgICA6IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KTsgLy8gV1NIXG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkgZGVsZXRlIE51bGxQcm90b09iamVjdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gTnVsbFByb3RvT2JqZWN0KCk7XG59O1xuXG5oaWRkZW5LZXlzW0lFX1BST1RPXSA9IHRydWU7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1jcmVhdGUgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5Q29uc3RydWN0b3IoKTtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IE51bGxQcm90b09iamVjdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZGVmaW5lUHJvcGVydGllc01vZHVsZS5mKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyhbXS5zbGljZSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZSAqL1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gYXJyYXlTbGljZSh3aW5kb3dOYW1lcyk7XG4gIH1cbn07XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiBjbGFzc29mKGl0KSA9PT0gJ1dpbmRvdydcbiAgICA/IGdldFdpbmRvd05hbWVzKGl0KVxuICAgIDogJGdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgaWYgKGRlc2NyaXB0b3IuZ2V0KSBtYWtlQnVpbHRJbihkZXNjcmlwdG9yLmdldCwgbmFtZSwgeyBnZXR0ZXI6IHRydWUgfSk7XG4gIGlmIChkZXNjcmlwdG9yLnNldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5zZXQsIG5hbWUsIHsgc2V0dGVyOiB0cnVlIH0pO1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbmV4cG9ydHMuZiA9IHdlbGxLbm93blN5bWJvbDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICB2YXIgU3ltYm9sID0gcGF0aC5TeW1ib2wgfHwgKHBhdGguU3ltYm9sID0ge30pO1xuICBpZiAoIWhhc093bihTeW1ib2wsIE5BTUUpKSBkZWZpbmVQcm9wZXJ0eShTeW1ib2wsIE5BTUUsIHtcbiAgICB2YWx1ZTogd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKE5BTUUpXG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICB2YXIgU3ltYm9sUHJvdG90eXBlID0gU3ltYm9sICYmIFN5bWJvbC5wcm90b3R5cGU7XG4gIHZhciB2YWx1ZU9mID0gU3ltYm9sUHJvdG90eXBlICYmIFN5bWJvbFByb3RvdHlwZS52YWx1ZU9mO1xuICB2YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4gIGlmIChTeW1ib2xQcm90b3R5cGUgJiYgIVN5bWJvbFByb3RvdHlwZVtUT19QUklNSVRJVkVdKSB7XG4gICAgLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciAubGVuZ3RoXG4gICAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsIFRPX1BSSU1JVElWRSwgZnVuY3Rpb24gKGhpbnQpIHtcbiAgICAgIHJldHVybiBjYWxsKHZhbHVlT2YsIHRoaXMpO1xuICAgIH0sIHsgYXJpdHk6IDEgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIFRBRywgU1RBVElDKSB7XG4gIGlmICh0YXJnZXQgJiYgIVNUQVRJQykgdGFyZ2V0ID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgaWYgKHRhcmdldCAmJiAhaGFzT3duKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuKSB7XG4gIC8vIE5hc2hvcm4gYnVnOlxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTI4XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMzBcbiAgaWYgKGNsYXNzb2ZSYXcoZm4pID09PSAnRnVuY3Rpb24nKSByZXR1cm4gdW5jdXJyeVRoaXMoZm4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGJpbmQgPSB1bmN1cnJ5VGhpcyh1bmN1cnJ5VGhpcy5iaW5kKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICByZXR1cm4gdGhhdCA9PT0gdW5kZWZpbmVkID8gZm4gOiBOQVRJVkVfQklORCA/IGJpbmQoZm4sIHRoYXQpIDogZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgY29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBjb25zdHJ1Y3RvclJlZ0V4cCA9IC9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi87XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGNvbnN0cnVjdG9yUmVnRXhwLmV4ZWMpO1xudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSAhY29uc3RydWN0b3JSZWdFeHAudGVzdChub29wKTtcblxudmFyIGlzQ29uc3RydWN0b3JNb2Rlcm4gPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdHJ1Y3Qobm9vcCwgW10sIGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBpc0NvbnN0cnVjdG9yTGVnYWN5ID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHN3aXRjaCAoY2xhc3NvZihhcmd1bWVudCkpIHtcbiAgICBjYXNlICdBc3luY0Z1bmN0aW9uJzpcbiAgICBjYXNlICdHZW5lcmF0b3JGdW5jdGlvbic6XG4gICAgY2FzZSAnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbic6IHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIC8vIHdlIGNhbid0IGNoZWNrIC5wcm90b3R5cGUgc2luY2UgY29uc3RydWN0b3JzIHByb2R1Y2VkIGJ5IC5iaW5kIGhhdmVuJ3QgaXRcbiAgICAvLyBgRnVuY3Rpb24jdG9TdHJpbmdgIHRocm93cyBvbiBzb21lIGJ1aWx0LWl0IGZ1bmN0aW9uIGluIHNvbWUgbGVnYWN5IGVuZ2luZXNcbiAgICAvLyAoZm9yIGV4YW1wbGUsIGBET01RdWFkYCBhbmQgc2ltaWxhciBpbiBGRjQxLSlcbiAgICByZXR1cm4gSU5DT1JSRUNUX1RPX1NUUklORyB8fCAhIWV4ZWMoY29uc3RydWN0b3JSZWdFeHAsIGluc3BlY3RTb3VyY2UoYXJndW1lbnQpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuaXNDb25zdHJ1Y3RvckxlZ2FjeS5zaGFtID0gdHJ1ZTtcblxuLy8gYElzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9ICFjb25zdHJ1Y3QgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgY2FsbGVkO1xuICByZXR1cm4gaXNDb25zdHJ1Y3Rvck1vZGVybihpc0NvbnN0cnVjdG9yTW9kZXJuLmNhbGwpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oT2JqZWN0KVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKGZ1bmN0aW9uICgpIHsgY2FsbGVkID0gdHJ1ZTsgfSlcbiAgICB8fCBjYWxsZWQ7XG59KSA/IGlzQ29uc3RydWN0b3JMZWdhY3kgOiBpc0NvbnN0cnVjdG9yTW9kZXJuO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyICRBcnJheSA9IEFycmF5O1xuXG4vLyBhIHBhcnQgb2YgYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWxBcnJheSkpIHtcbiAgICBDID0gb3JpZ2luYWxBcnJheS5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmIChpc0NvbnN0cnVjdG9yKEMpICYmIChDID09PSAkQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gJEFycmF5IDogQztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFycmF5U3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxuLy8gYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKGFycmF5U3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsQXJyYXkpKShsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCwgZmlsdGVyUmVqZWN0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09PSA2O1xuICB2YXIgSVNfRklMVEVSX1JFSkVDVCA9IFRZUEUgPT09IDc7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKHNlbGYpO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiB8fCBJU19GSUxURVJfUkVKRUNUID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAvLyBldmVyeVxuICAgICAgICAgIGNhc2UgNzogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJSZWplY3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlclJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuICBmaWx0ZXJSZWplY3Q6IGNyZWF0ZU1ldGhvZCg3KVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgbmF0aXZlT2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcblxudmFyIEhJRERFTiA9IHNoYXJlZEtleSgnaGlkZGVuJyk7XG52YXIgU1lNQk9MID0gJ1N5bWJvbCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNZTUJPTCk7XG5cbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sICYmICRTeW1ib2xbUFJPVE9UWVBFXTtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZjtcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvdHlwZVN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBVU0VfU0VUVEVSID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIHZhciBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgUCk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKSBkZWxldGUgT2JqZWN0UHJvdG90eXBlW1BdO1xuICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgJiYgTyAhPT0gT2JqZWN0UHJvdG90eXBlKSB7XG4gICAgbmF0aXZlRGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlLCBQLCBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKTtcbiAgfVxufTtcblxudmFyIHNldFN5bWJvbERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RDcmVhdGUobmF0aXZlRGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT09IDc7XG59KSA/IGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgOiBuYXRpdmVEZWZpbmVQcm9wZXJ0eTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnLCBkZXNjcmlwdGlvbikge1xuICB2YXIgc3ltYm9sID0gQWxsU3ltYm9sc1t0YWddID0gbmF0aXZlT2JqZWN0Q3JlYXRlKFN5bWJvbFByb3RvdHlwZSk7XG4gIHNldEludGVybmFsU3RhdGUoc3ltYm9sLCB7XG4gICAgdHlwZTogU1lNQk9MLFxuICAgIHRhZzogdGFnLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICB9KTtcbiAgaWYgKCFERVNDUklQVE9SUykgc3ltYm9sLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gIHJldHVybiBzeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBpZiAoTyA9PT0gT2JqZWN0UHJvdG90eXBlKSAkZGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCwgQXR0cmlidXRlcyk7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghQXR0cmlidXRlcy5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhc093bihPLCBISURERU4pKSBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBISURERU4sIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCBuYXRpdmVPYmplY3RDcmVhdGUobnVsbCkpKTtcbiAgICAgIE9bSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc093bihPLCBISURERU4pICYmIE9bSElEREVOXVtrZXldKSBPW0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgQXR0cmlidXRlcyA9IG5hdGl2ZU9iamVjdENyZWF0ZShBdHRyaWJ1dGVzLCB7IGVudW1lcmFibGU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzY3JpcHRvcihPLCBrZXksIEF0dHJpYnV0ZXMpO1xuICB9IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBrZXksIEF0dHJpYnV0ZXMpO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcGVydGllcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKHByb3BlcnRpZXMpLmNvbmNhdCgkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHByb3BlcnRpZXMpKTtcbiAgJGZvckVhY2goa2V5cywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbCgkcHJvcGVydHlJc0VudW1lcmFibGUsIHByb3BlcnRpZXMsIGtleSkpICRkZWZpbmVQcm9wZXJ0eShPLCBrZXksIHByb3BlcnRpZXNba2V5XSk7XG4gIH0pO1xuICByZXR1cm4gTztcbn07XG5cbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IG5hdGl2ZU9iamVjdENyZWF0ZShPKSA6ICRkZWZpbmVQcm9wZXJ0aWVzKG5hdGl2ZU9iamVjdENyZWF0ZShPKSwgUHJvcGVydGllcyk7XG59O1xuXG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgUCA9IHRvUHJvcGVydHlLZXkoVik7XG4gIHZhciBlbnVtZXJhYmxlID0gY2FsbChuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSwgdGhpcywgUCk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIFApICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGVudW1lcmFibGUgfHwgIWhhc093bih0aGlzLCBQKSB8fCAhaGFzT3duKEFsbFN5bWJvbHMsIFApIHx8IGhhc093bih0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtQXVxuICAgID8gZW51bWVyYWJsZSA6IHRydWU7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIHZhciBpdCA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgZGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXNPd24oaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkge1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKGhpZGRlbktleXMsIGtleSkpIHB1c2gocmVzdWx0LCBrZXkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gKE8pIHtcbiAgdmFyIElTX09CSkVDVF9QUk9UT1RZUEUgPSBPID09PSBPYmplY3RQcm90b3R5cGU7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMoSVNfT0JKRUNUX1BST1RPVFlQRSA/IE9iamVjdFByb3RvdHlwZVN5bWJvbHMgOiB0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICghSVNfT0JKRUNUX1BST1RPVFlQRSB8fCBoYXNPd24oT2JqZWN0UHJvdG90eXBlLCBrZXkpKSkge1xuICAgICAgcHVzaChyZXN1bHQsIEFsbFN5bWJvbHNba2V5XSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIGBTeW1ib2xgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC1jb25zdHJ1Y3RvclxuaWYgKCFOQVRJVkVfU1lNQk9MKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKGlzUHJvdG90eXBlT2YoU3ltYm9sUHJvdG90eXBlLCB0aGlzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gIWFyZ3VtZW50cy5sZW5ndGggfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiAkdG9TdHJpbmcoYXJndW1lbnRzWzBdKTtcbiAgICB2YXIgdGFnID0gdWlkKGRlc2NyaXB0aW9uKTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB2YXIgJHRoaXMgPSB0aGlzID09PSB1bmRlZmluZWQgPyBnbG9iYWwgOiB0aGlzO1xuICAgICAgaWYgKCR0aGlzID09PSBPYmplY3RQcm90b3R5cGUpIGNhbGwoc2V0dGVyLCBPYmplY3RQcm90b3R5cGVTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzT3duKCR0aGlzLCBISURERU4pICYmIGhhc093bigkdGhpc1tISURERU5dLCB0YWcpKSAkdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFN5bWJvbERlc2NyaXB0b3IoJHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFJhbmdlRXJyb3IpKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSgkdGhpcywgdGFnLCBkZXNjcmlwdG9yKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBVU0VfU0VUVEVSKSBzZXRTeW1ib2xEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiBzZXR0ZXIgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnLCBkZXNjcmlwdGlvbik7XG4gIH07XG5cbiAgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbFtQUk9UT1RZUEVdO1xuXG4gIGRlZmluZUJ1aWx0SW4oU3ltYm9sUHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS50YWc7XG4gIH0pO1xuXG4gIGRlZmluZUJ1aWx0SW4oJFN5bWJvbCwgJ3dpdGhvdXRTZXR0ZXInLCBmdW5jdGlvbiAoZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4gd3JhcCh1aWQoZGVzY3JpcHRpb24pLCBkZXNjcmlwdGlvbik7XG4gIH0pO1xuXG4gIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIGRlZmluZVByb3BlcnR5TW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZiA9ICRkZWZpbmVQcm9wZXJ0aWVzO1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdlbGxLbm93blN5bWJvbChuYW1lKSwgbmFtZSk7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtU3ltYm9sLWRlc2NyaXB0aW9uXG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFN5bWJvbFByb3RvdHlwZSwgJ2Rlc2NyaXB0aW9uJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBkZXNjcmlwdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuZGVzY3JpcHRpb247XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFJU19QVVJFKSB7XG4gICAgICBkZWZpbmVCdWlsdEluKE9iamVjdFByb3RvdHlwZSwgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wsIHNoYW06ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgU3ltYm9sOiAkU3ltYm9sXG59KTtcblxuJGZvckVhY2gob2JqZWN0S2V5cyhXZWxsS25vd25TeW1ib2xzU3RvcmUpLCBmdW5jdGlvbiAobmFtZSkge1xuICBkZWZpbmVXZWxsS25vd25TeW1ib2wobmFtZSk7XG59KTtcblxuJCh7IHRhcmdldDogU1lNQk9MLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IGZhbHNlOyB9XG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIC8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Jcbn0pO1xuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXNcbn0pO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUoKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgU1lNQk9MKTtcblxuaGlkZGVuS2V5c1tISURERU5dID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSBzYWZlICovXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0wgJiYgISFTeW1ib2xbJ2ZvciddICYmICEhU3ltYm9sLmtleUZvcjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbicpO1xuXG52YXIgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3RyaW5nLXRvLXN5bWJvbC1yZWdpc3RyeScpO1xudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5mb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuZm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKGtleSk7XG4gICAgaWYgKGhhc093bihTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5LCBzdHJpbmcpKSByZXR1cm4gU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddO1xuICAgIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKShzdHJpbmcpO1xuICAgIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXSA9IHN5bWJvbDtcbiAgICBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bWJvbF0gPSBzdHJpbmc7XG4gICAgcmV0dXJuIHN5bWJvbDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbicpO1xuXG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xuXG4vLyBgU3ltYm9sLmtleUZvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5rZXlmb3JcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIH0sIHtcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBuZXcgVHlwZUVycm9yKHRyeVRvU3RyaW5nKHN5bSkgKyAnIGlzIG5vdCBhIHN5bWJvbCcpO1xuICAgIGlmIChoYXNPd24oU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSwgc3ltKSkgcmV0dXJuIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltXTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBhcHBseSA9IEZ1bmN0aW9uUHJvdG90eXBlLmFwcGx5O1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tcmVmbGVjdCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBSZWZsZWN0ID09ICdvYmplY3QnICYmIFJlZmxlY3QuYXBwbHkgfHwgKE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGFwcGx5KSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoYXBwbHksIGFyZ3VtZW50cyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlcGxhY2VyKSB7XG4gIGlmIChpc0NhbGxhYmxlKHJlcGxhY2VyKSkgcmV0dXJuIHJlcGxhY2VyO1xuICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXR1cm47XG4gIHZhciByYXdMZW5ndGggPSByZXBsYWNlci5sZW5ndGg7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3TGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlbWVudCA9IHJlcGxhY2VyW2ldO1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnc3RyaW5nJykgcHVzaChrZXlzLCBlbGVtZW50KTtcbiAgICBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnbnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnTnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnU3RyaW5nJykgcHVzaChrZXlzLCB0b1N0cmluZyhlbGVtZW50KSk7XG4gIH1cbiAgdmFyIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIHJvb3QgPSB0cnVlO1xuICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBpZiAocm9vdCkge1xuICAgICAgcm9vdCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgcmV0dXJuIHZhbHVlO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5c0xlbmd0aDsgaisrKSBpZiAoa2V5c1tqXSA9PT0ga2V5KSByZXR1cm4gdmFsdWU7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgZ2V0UmVwbGFjZXJGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbicpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkc3RyaW5naWZ5ID0gZ2V0QnVpbHRJbignSlNPTicsICdzdHJpbmdpZnknKTtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoLy4vLmV4ZWMpO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBudW1iZXJUb1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbnZhciB0ZXN0ZXIgPSAvW1xcdUQ4MDAtXFx1REZGRl0vZztcbnZhciBsb3cgPSAvXltcXHVEODAwLVxcdURCRkZdJC87XG52YXIgaGkgPSAvXltcXHVEQzAwLVxcdURGRkZdJC87XG5cbnZhciBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKSgnc3RyaW5naWZ5IGRldGVjdGlvbicpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICByZXR1cm4gJHN0cmluZ2lmeShbc3ltYm9sXSkgIT09ICdbbnVsbF0nXG4gICAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gICAgfHwgJHN0cmluZ2lmeSh7IGE6IHN5bWJvbCB9KSAhPT0gJ3t9J1xuICAgIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gICAgfHwgJHN0cmluZ2lmeShPYmplY3Qoc3ltYm9sKSkgIT09ICd7fSc7XG59KTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtd2VsbC1mb3JtZWQtc3RyaW5naWZ5XG52YXIgSUxMX0ZPUk1FRF9VTklDT0RFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHN0cmluZ2lmeSgnXFx1REYwNlxcdUQ4MzQnKSAhPT0gJ1wiXFxcXHVkZjA2XFxcXHVkODM0XCInXG4gICAgfHwgJHN0cmluZ2lmeSgnXFx1REVBRCcpICE9PSAnXCJcXFxcdWRlYWRcIic7XG59KTtcblxudmFyIHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4ID0gZnVuY3Rpb24gKGl0LCByZXBsYWNlcikge1xuICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgdmFyICRyZXBsYWNlciA9IGdldFJlcGxhY2VyRnVuY3Rpb24ocmVwbGFjZXIpO1xuICBpZiAoIWlzQ2FsbGFibGUoJHJlcGxhY2VyKSAmJiAoaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgYXJnc1sxXSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgLy8gc29tZSBvbGQgaW1wbGVtZW50YXRpb25zIChsaWtlIFdlYktpdCkgY291bGQgcGFzcyBudW1iZXJzIGFzIGtleXNcbiAgICBpZiAoaXNDYWxsYWJsZSgkcmVwbGFjZXIpKSB2YWx1ZSA9IGNhbGwoJHJlcGxhY2VyLCB0aGlzLCAkU3RyaW5nKGtleSksIHZhbHVlKTtcbiAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICB9O1xuICByZXR1cm4gYXBwbHkoJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG59O1xuXG52YXIgZml4SWxsRm9ybWVkID0gZnVuY3Rpb24gKG1hdGNoLCBvZmZzZXQsIHN0cmluZykge1xuICB2YXIgcHJldiA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCAtIDEpO1xuICB2YXIgbmV4dCA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCArIDEpO1xuICBpZiAoKGV4ZWMobG93LCBtYXRjaCkgJiYgIWV4ZWMoaGksIG5leHQpKSB8fCAoZXhlYyhoaSwgbWF0Y2gpICYmICFleGVjKGxvdywgcHJldikpKSB7XG4gICAgcmV0dXJuICdcXFxcdScgKyBudW1iZXJUb1N0cmluZyhjaGFyQ29kZUF0KG1hdGNoLCAwKSwgMTYpO1xuICB9IHJldHVybiBtYXRjaDtcbn07XG5cbmlmICgkc3RyaW5naWZ5KSB7XG4gIC8vIGBKU09OLnN0cmluZ2lmeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi5zdHJpbmdpZnlcbiAgJCh7IHRhcmdldDogJ0pTT04nLCBzdGF0OiB0cnVlLCBhcml0eTogMywgZm9yY2VkOiBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gfHwgSUxMX0ZPUk1FRF9VTklDT0RFIH0sIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICAgICAgdmFyIHJlc3VsdCA9IGFwcGx5KFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA/IHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4IDogJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG4gICAgICByZXR1cm4gSUxMX0ZPUk1FRF9VTklDT0RFICYmIHR5cGVvZiByZXN1bHQgPT0gJ3N0cmluZycgPyByZXBsYWNlKHJlc3VsdCwgdGVzdGVyLCBmaXhJbGxGb3JtZWQpIDogcmVzdWx0O1xuICAgIH1cbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG4vLyBWOCB+IENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbnZhciBGT1JDRUQgPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlzeW1ib2xzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyAkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRvT2JqZWN0KGl0KSkgOiBbXTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBzcGxpdCB0byBtb2R1bGVzIGxpc3RlZCBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zeW1ib2wuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3ltYm9sLmZvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zeW1ib2wua2V5LWZvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG4iLCAiLy8gYFN5bWJvbC5wcm90b3R5cGUuZGVzY3JpcHRpb25gIGdldHRlclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLmRlc2NyaXB0aW9uXG4ndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcblxudmFyIE5hdGl2ZVN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgU3ltYm9sUHJvdG90eXBlID0gTmF0aXZlU3ltYm9sICYmIE5hdGl2ZVN5bWJvbC5wcm90b3R5cGU7XG5cbmlmIChERVNDUklQVE9SUyAmJiBpc0NhbGxhYmxlKE5hdGl2ZVN5bWJvbCkgJiYgKCEoJ2Rlc2NyaXB0aW9uJyBpbiBTeW1ib2xQcm90b3R5cGUpIHx8XG4gIC8vIFNhZmFyaSAxMiBidWdcbiAgTmF0aXZlU3ltYm9sKCkuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZFxuKSkge1xuICB2YXIgRW1wdHlTdHJpbmdEZXNjcmlwdGlvblN0b3JlID0ge307XG4gIC8vIHdyYXAgU3ltYm9sIGNvbnN0cnVjdG9yIGZvciBjb3JyZWN0IHdvcmsgd2l0aCB1bmRlZmluZWQgZGVzY3JpcHRpb25cbiAgdmFyIFN5bWJvbFdyYXBwZXIgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0b1N0cmluZyhhcmd1bWVudHNbMF0pO1xuICAgIHZhciByZXN1bHQgPSBpc1Byb3RvdHlwZU9mKFN5bWJvbFByb3RvdHlwZSwgdGhpcylcbiAgICAgID8gbmV3IE5hdGl2ZVN5bWJvbChkZXNjcmlwdGlvbilcbiAgICAgIC8vIGluIEVkZ2UgMTMsIFN0cmluZyhTeW1ib2wodW5kZWZpbmVkKSkgPT09ICdTeW1ib2wodW5kZWZpbmVkKSdcbiAgICAgIDogZGVzY3JpcHRpb24gPT09IHVuZGVmaW5lZCA/IE5hdGl2ZVN5bWJvbCgpIDogTmF0aXZlU3ltYm9sKGRlc2NyaXB0aW9uKTtcbiAgICBpZiAoZGVzY3JpcHRpb24gPT09ICcnKSBFbXB0eVN0cmluZ0Rlc2NyaXB0aW9uU3RvcmVbcmVzdWx0XSA9IHRydWU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKFN5bWJvbFdyYXBwZXIsIE5hdGl2ZVN5bWJvbCk7XG4gIFN5bWJvbFdyYXBwZXIucHJvdG90eXBlID0gU3ltYm9sUHJvdG90eXBlO1xuICBTeW1ib2xQcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeW1ib2xXcmFwcGVyO1xuXG4gIHZhciBOQVRJVkVfU1lNQk9MID0gU3RyaW5nKE5hdGl2ZVN5bWJvbCgnZGVzY3JpcHRpb24gZGV0ZWN0aW9uJykpID09PSAnU3ltYm9sKGRlc2NyaXB0aW9uIGRldGVjdGlvbiknO1xuICB2YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sUHJvdG90eXBlLnZhbHVlT2YpO1xuICB2YXIgc3ltYm9sRGVzY3JpcHRpdmVTdHJpbmcgPSB1bmN1cnJ5VGhpcyhTeW1ib2xQcm90b3R5cGUudG9TdHJpbmcpO1xuICB2YXIgcmVnZXhwID0gL15TeW1ib2xcXCgoLiopXFwpW14pXSskLztcbiAgdmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbiAgdmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBkZXNjcmlwdGlvbigpIHtcbiAgICAgIHZhciBzeW1ib2wgPSB0aGlzU3ltYm9sVmFsdWUodGhpcyk7XG4gICAgICBpZiAoaGFzT3duKEVtcHR5U3RyaW5nRGVzY3JpcHRpb25TdG9yZSwgc3ltYm9sKSkgcmV0dXJuICcnO1xuICAgICAgdmFyIHN0cmluZyA9IHN5bWJvbERlc2NyaXB0aXZlU3RyaW5nKHN5bWJvbCk7XG4gICAgICB2YXIgZGVzYyA9IE5BVElWRV9TWU1CT0wgPyBzdHJpbmdTbGljZShzdHJpbmcsIDcsIC0xKSA6IHJlcGxhY2Uoc3RyaW5nLCByZWdleHAsICckMScpO1xuICAgICAgcmV0dXJuIGRlc2MgPT09ICcnID8gdW5kZWZpbmVkIDogZGVzYztcbiAgICB9XG4gIH0pO1xuXG4gICQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgIFN5bWJvbDogU3ltYm9sV3JhcHBlclxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLml0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG5cbi8vIGBTeW1ib2wudG9QcmltaXRpdmVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC50b3ByaW1pdGl2ZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUoKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIG1ldGhvZCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICByZXR1cm4gdW5jdXJyeVRoaXMoYUNhbGxhYmxlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpW21ldGhvZF0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc09iamVjdChhcmd1bWVudCkgfHwgYXJndW1lbnQgPT09IG51bGw7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Bvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNQb3NzaWJsZVByb3RvdHlwZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyAkU3RyaW5nKGFyZ3VtZW50KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gLS0gc2FmZSAqL1xudmFyIHVuY3VycnlUaGlzQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIHNldHRlciA9IHVuY3VycnlUaGlzQWNjZXNzb3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycsICdzZXQnKTtcbiAgICBzZXR0ZXIodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUYXJnZXQsIFNvdXJjZSwga2V5KSB7XG4gIGtleSBpbiBUYXJnZXQgfHwgZGVmaW5lUHJvcGVydHkoVGFyZ2V0LCBrZXksIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTb3VyY2Vba2V5XTsgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBTb3VyY2Vba2V5XSA9IGl0OyB9XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIG1ha2VzIHN1YmNsYXNzaW5nIHdvcmsgY29ycmVjdCBmb3Igd3JhcHBlZCBidWlsdC1pbnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCR0aGlzLCBkdW1teSwgV3JhcHBlcikge1xuICB2YXIgTmV3VGFyZ2V0LCBOZXdUYXJnZXRQcm90b3R5cGU7XG4gIGlmIChcbiAgICAvLyBpdCBjYW4gd29yayBvbmx5IHdpdGggbmF0aXZlIGBzZXRQcm90b3R5cGVPZmBcbiAgICBzZXRQcm90b3R5cGVPZiAmJlxuICAgIC8vIHdlIGhhdmVuJ3QgY29tcGxldGVseSBjb3JyZWN0IHByZS1FUzYgd2F5IGZvciBnZXR0aW5nIGBuZXcudGFyZ2V0YCwgc28gdXNlIHRoaXNcbiAgICBpc0NhbGxhYmxlKE5ld1RhcmdldCA9IGR1bW15LmNvbnN0cnVjdG9yKSAmJlxuICAgIE5ld1RhcmdldCAhPT0gV3JhcHBlciAmJlxuICAgIGlzT2JqZWN0KE5ld1RhcmdldFByb3RvdHlwZSA9IE5ld1RhcmdldC5wcm90b3R5cGUpICYmXG4gICAgTmV3VGFyZ2V0UHJvdG90eXBlICE9PSBXcmFwcGVyLnByb3RvdHlwZVxuICApIHNldFByb3RvdHlwZU9mKCR0aGlzLCBOZXdUYXJnZXRQcm90b3R5cGUpO1xuICByZXR1cm4gJHRoaXM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsICRkZWZhdWx0KSB7XG4gIHJldHVybiBhcmd1bWVudCA9PT0gdW5kZWZpbmVkID8gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyAnJyA6ICRkZWZhdWx0IDogdG9TdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRXJyb3IgPSBFcnJvcjtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG5cbnZhciBURVNUID0gKGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIFN0cmluZyhuZXcgJEVycm9yKGFyZykuc3RhY2spOyB9KSgnenhjYXNkJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZID0gL1xcblxccyphdCBbXjpdKjpbXlxcbl0qLztcbnZhciBJU19WOF9PUl9DSEFLUkFfU1RBQ0sgPSBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkudGVzdChURVNUKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChJU19WOF9PUl9DSEFLUkFfU1RBQ0sgJiYgdHlwZW9mIHN0YWNrID09ICdzdHJpbmcnICYmICEkRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpIHtcbiAgICB3aGlsZSAoZHJvcEVudHJpZXMtLSkgc3RhY2sgPSByZXBsYWNlKHN0YWNrLCBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlksICcnKTtcbiAgfSByZXR1cm4gc3RhY2s7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcignYScpO1xuICBpZiAoISgnc3RhY2snIGluIGVycm9yKSkgcmV0dXJuIHRydWU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCA3KSk7XG4gIHJldHVybiBlcnJvci5zdGFjayAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY2xlYXJFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyJyk7XG52YXIgRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUnKTtcblxuLy8gbm9uLXN0YW5kYXJkIFY4XG52YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXJyb3IsIEMsIHN0YWNrLCBkcm9wRW50cmllcykge1xuICBpZiAoRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUpIHtcbiAgICBpZiAoY2FwdHVyZVN0YWNrVHJhY2UpIGNhcHR1cmVTdGFja1RyYWNlKGVycm9yLCBDKTtcbiAgICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY2xlYXJFcnJvclN0YWNrKHN0YWNrLCBkcm9wRW50cmllcykpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBwcm94eUFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb3h5LWFjY2Vzc29yJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQnKTtcbnZhciBpbnN0YWxsRXJyb3JDYXVzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlJyk7XG52YXIgaW5zdGFsbEVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEZVTExfTkFNRSwgd3JhcHBlciwgRk9SQ0VELCBJU19BR0dSRUdBVEVfRVJST1IpIHtcbiAgdmFyIFNUQUNLX1RSQUNFX0xJTUlUID0gJ3N0YWNrVHJhY2VMaW1pdCc7XG4gIHZhciBPUFRJT05TX1BPU0lUSU9OID0gSVNfQUdHUkVHQVRFX0VSUk9SID8gMiA6IDE7XG4gIHZhciBwYXRoID0gRlVMTF9OQU1FLnNwbGl0KCcuJyk7XG4gIHZhciBFUlJPUl9OQU1FID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICB2YXIgT3JpZ2luYWxFcnJvciA9IGdldEJ1aWx0SW4uYXBwbHkobnVsbCwgcGF0aCk7XG5cbiAgaWYgKCFPcmlnaW5hbEVycm9yKSByZXR1cm47XG5cbiAgdmFyIE9yaWdpbmFsRXJyb3JQcm90b3R5cGUgPSBPcmlnaW5hbEVycm9yLnByb3RvdHlwZTtcblxuICAvLyBWOCA5LjMtIGJ1ZyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjAwNlxuICBpZiAoIUlTX1BVUkUgJiYgaGFzT3duKE9yaWdpbmFsRXJyb3JQcm90b3R5cGUsICdjYXVzZScpKSBkZWxldGUgT3JpZ2luYWxFcnJvclByb3RvdHlwZS5jYXVzZTtcblxuICBpZiAoIUZPUkNFRCkgcmV0dXJuIE9yaWdpbmFsRXJyb3I7XG5cbiAgdmFyIEJhc2VFcnJvciA9IGdldEJ1aWx0SW4oJ0Vycm9yJyk7XG5cbiAgdmFyIFdyYXBwZWRFcnJvciA9IHdyYXBwZXIoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgbWVzc2FnZSA9IG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KElTX0FHR1JFR0FURV9FUlJPUiA/IGIgOiBhLCB1bmRlZmluZWQpO1xuICAgIHZhciByZXN1bHQgPSBJU19BR0dSRUdBVEVfRVJST1IgPyBuZXcgT3JpZ2luYWxFcnJvcihhKSA6IG5ldyBPcmlnaW5hbEVycm9yKCk7XG4gICAgaWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHJlc3VsdCwgJ21lc3NhZ2UnLCBtZXNzYWdlKTtcbiAgICBpbnN0YWxsRXJyb3JTdGFjayhyZXN1bHQsIFdyYXBwZWRFcnJvciwgcmVzdWx0LnN0YWNrLCAyKTtcbiAgICBpZiAodGhpcyAmJiBpc1Byb3RvdHlwZU9mKE9yaWdpbmFsRXJyb3JQcm90b3R5cGUsIHRoaXMpKSBpbmhlcml0SWZSZXF1aXJlZChyZXN1bHQsIHRoaXMsIFdyYXBwZWRFcnJvcik7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiBPUFRJT05TX1BPU0lUSU9OKSBpbnN0YWxsRXJyb3JDYXVzZShyZXN1bHQsIGFyZ3VtZW50c1tPUFRJT05TX1BPU0lUSU9OXSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgV3JhcHBlZEVycm9yLnByb3RvdHlwZSA9IE9yaWdpbmFsRXJyb3JQcm90b3R5cGU7XG5cbiAgaWYgKEVSUk9SX05BTUUgIT09ICdFcnJvcicpIHtcbiAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHNldFByb3RvdHlwZU9mKFdyYXBwZWRFcnJvciwgQmFzZUVycm9yKTtcbiAgICBlbHNlIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoV3JhcHBlZEVycm9yLCBCYXNlRXJyb3IsIHsgbmFtZTogdHJ1ZSB9KTtcbiAgfSBlbHNlIGlmIChERVNDUklQVE9SUyAmJiBTVEFDS19UUkFDRV9MSU1JVCBpbiBPcmlnaW5hbEVycm9yKSB7XG4gICAgcHJveHlBY2Nlc3NvcihXcmFwcGVkRXJyb3IsIE9yaWdpbmFsRXJyb3IsIFNUQUNLX1RSQUNFX0xJTUlUKTtcbiAgICBwcm94eUFjY2Vzc29yKFdyYXBwZWRFcnJvciwgT3JpZ2luYWxFcnJvciwgJ3ByZXBhcmVTdGFja1RyYWNlJyk7XG4gIH1cblxuICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKFdyYXBwZWRFcnJvciwgT3JpZ2luYWxFcnJvcik7XG5cbiAgaWYgKCFJU19QVVJFKSB0cnkge1xuICAgIC8vIFNhZmFyaSAxMy0gYnVnOiBXZWJBc3NlbWJseSBlcnJvcnMgZG9lcyBub3QgaGF2ZSBhIHByb3BlciBgLm5hbWVgXG4gICAgaWYgKE9yaWdpbmFsRXJyb3JQcm90b3R5cGUubmFtZSAhPT0gRVJST1JfTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KE9yaWdpbmFsRXJyb3JQcm90b3R5cGUsICduYW1lJywgRVJST1JfTkFNRSk7XG4gICAgfVxuICAgIE9yaWdpbmFsRXJyb3JQcm90b3R5cGUuY29uc3RydWN0b3IgPSBXcmFwcGVkRXJyb3I7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxuICByZXR1cm4gV3JhcHBlZEVycm9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgZnVuY3Rpb25zIGAubGVuZ3RoYCAqL1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgd3JhcEVycm9yQ29uc3RydWN0b3JXaXRoQ2F1c2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd3JhcC1lcnJvci1jb25zdHJ1Y3Rvci13aXRoLWNhdXNlJyk7XG5cbnZhciBXRUJfQVNTRU1CTFkgPSAnV2ViQXNzZW1ibHknO1xudmFyIFdlYkFzc2VtYmx5ID0gZ2xvYmFsW1dFQl9BU1NFTUJMWV07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1lcnJvci1jYXVzZSAtLSBmZWF0dXJlIGRldGVjdGlvblxudmFyIEZPUkNFRCA9IG5ldyBFcnJvcignZScsIHsgY2F1c2U6IDcgfSkuY2F1c2UgIT09IDc7XG5cbnZhciBleHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlciA9IGZ1bmN0aW9uIChFUlJPUl9OQU1FLCB3cmFwcGVyKSB7XG4gIHZhciBPID0ge307XG4gIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIE8pO1xufTtcblxudmFyIGV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIgPSBmdW5jdGlvbiAoRVJST1JfTkFNRSwgd3JhcHBlcikge1xuICBpZiAoV2ViQXNzZW1ibHkgJiYgV2ViQXNzZW1ibHlbRVJST1JfTkFNRV0pIHtcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShXRUJfQVNTRU1CTFkgKyAnLicgKyBFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAgICQoeyB0YXJnZXQ6IFdFQl9BU1NFTUJMWSwgc3RhdDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCBPKTtcbiAgfVxufTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uYXRpdmVlcnJvclxuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ0Vycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdFdmFsRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRXZhbEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdSYW5nZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJhbmdlRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ1JlZmVyZW5jZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJlZmVyZW5jZUVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdTeW50YXhFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTeW50YXhFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVHlwZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFR5cGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVVJJRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVVJJRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0V2ViQXNzZW1ibHlFcnJvckNhdXNlV3JhcHBlcignQ29tcGlsZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIENvbXBpbGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRXZWJBc3NlbWJseUVycm9yQ2F1c2VXcmFwcGVyKCdMaW5rRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gTGlua0Vycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIoJ1J1bnRpbWVFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBSdW50aW1lRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmlsdGVyO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdmaWx0ZXInKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgICBtZXRob2QuY2FsbChudWxsLCBhcmd1bWVudCB8fCBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9LCAxKTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2ZvckVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbm1vZHVsZS5leHBvcnRzID0gIVNUUklDVF9NRVRIT0QgPyBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZvcmVhY2ggLS0gc2FmZVxufSA6IFtdLmZvckVhY2g7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mb3ItZWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFtdLmZvckVhY2ggIT09IGZvckVhY2ggfSwge1xuICBmb3JFYWNoOiBmb3JFYWNoXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGtpbmQsIHZhbHVlKSB7XG4gIHZhciBpbm5lclJlc3VsdCwgaW5uZXJFcnJvcjtcbiAgYW5PYmplY3QoaXRlcmF0b3IpO1xuICB0cnkge1xuICAgIGlubmVyUmVzdWx0ID0gZ2V0TWV0aG9kKGl0ZXJhdG9yLCAncmV0dXJuJyk7XG4gICAgaWYgKCFpbm5lclJlc3VsdCkge1xuICAgICAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpbm5lclJlc3VsdCA9IGNhbGwoaW5uZXJSZXN1bHQsIGl0ZXJhdG9yKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbm5lckVycm9yID0gdHJ1ZTtcbiAgICBpbm5lclJlc3VsdCA9IGVycm9yO1xuICB9XG4gIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgaWYgKGlubmVyRXJyb3IpIHRocm93IGlubmVyUmVzdWx0O1xuICBhbk9iamVjdChpbm5lclJlc3VsdCk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgRU5UUklFUykge1xuICB0cnkge1xuICAgIHJldHVybiBFTlRSSUVTID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3Rba2V5XSA9IHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgcmV0dXJuIGdldE1ldGhvZChpdCwgSVRFUkFUT1IpXG4gICAgfHwgZ2V0TWV0aG9kKGl0LCAnQEBpdGVyYXRvcicpXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCB1c2luZ0l0ZXJhdG9yKSB7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gZ2V0SXRlcmF0b3JNZXRob2QoYXJndW1lbnQpIDogdXNpbmdJdGVyYXRvcjtcbiAgaWYgKGFDYWxsYWJsZShpdGVyYXRvck1ldGhvZCkpIHJldHVybiBhbk9iamVjdChjYWxsKGl0ZXJhdG9yTWV0aG9kLCBhcmd1bWVudCkpO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nJyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxudmFyICRBcnJheSA9IEFycmF5O1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gIHZhciBJU19DT05TVFJVQ1RPUiA9IGlzQ29uc3RydWN0b3IodGhpcyk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgbWFwZm4gPSBhcmd1bWVudHNMZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gIGlmIChtYXBwaW5nKSBtYXBmbiA9IGJpbmQobWFwZm4sIGFyZ3VtZW50c0xlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBnZXRJdGVyYXRvck1ldGhvZChPKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvciwgbmV4dCwgdmFsdWU7XG4gIC8vIGlmIHRoZSB0YXJnZXQgaXMgbm90IGl0ZXJhYmxlIG9yIGl0J3MgYW4gYXJyYXkgd2l0aCB0aGUgZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBhIHNpbXBsZSBjYXNlXG4gIGlmIChpdGVyYXRvck1ldGhvZCAmJiAhKHRoaXMgPT09ICRBcnJheSAmJiBpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlcmF0b3JNZXRob2QpKSkge1xuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoTywgaXRlcmF0b3JNZXRob2QpO1xuICAgIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMoKSA6IFtdO1xuICAgIGZvciAoOyEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlO1xuICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKGxlbmd0aCkgOiAkQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdO1xuICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgY2FsbGVkID0gMDtcbiAgdmFyIGl0ZXJhdG9yV2l0aFJldHVybiA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBkb25lOiAhIWNhbGxlZCsrIH07XG4gICAgfSxcbiAgICAncmV0dXJuJzogZnVuY3Rpb24gKCkge1xuICAgICAgU0FGRV9DTE9TSU5HID0gdHJ1ZTtcbiAgICB9XG4gIH07XG4gIGl0ZXJhdG9yV2l0aFJldHVybltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tLCBuby10aHJvdy1saXRlcmFsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIEFycmF5LmZyb20oaXRlcmF0b3JXaXRoUmV0dXJuLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBTS0lQX0NMT1NJTkcpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIVNLSVBfQ0xPU0lORyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IHJldHVybiBmYWxzZTsgfSAvLyB3b3JrYXJvdW5kIG9mIG9sZCBXZWJLaXQgKyBgZXZhbGAgYnVnXG4gIHZhciBJVEVSQVRJT05fU1VQUE9SVCA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICBvYmplY3RbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IElURVJBVElPTl9TVVBQT1JUID0gdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgZXhlYyhvYmplY3QpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBJVEVSQVRJT05fU1VQUE9SVDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mcm9tJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xuXG52YXIgSU5DT1JSRUNUX0lURVJBVElPTiA9ICFjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24oZnVuY3Rpb24gKGl0ZXJhYmxlKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIEFycmF5LmZyb20oaXRlcmFibGUpO1xufSk7XG5cbi8vIGBBcnJheS5mcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuZnJvbVxuJCh7IHRhcmdldDogJ0FycmF5Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgZnJvbTogZnJvbVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbnZhciBVTlNDT1BBQkxFUyA9IHdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5pZiAoQXJyYXlQcm90b3R5cGVbVU5TQ09QQUJMRVNdID09PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHkoQXJyYXlQcm90b3R5cGUsIFVOU0NPUEFCTEVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiBjcmVhdGUobnVsbClcbiAgfSk7XG59XG5cbi8vIGFkZCBhIGtleSB0byBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvdHlwZVtVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBPYmplY3RQcm90b3R5cGUgPSAkT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/ICRPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXNPd24ob2JqZWN0LCBJRV9QUk9UTykpIHJldHVybiBvYmplY3RbSUVfUFJPVE9dO1xuICB2YXIgY29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIGlmIChpc0NhbGxhYmxlKGNvbnN0cnVjdG9yKSAmJiBvYmplY3QgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mICRPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUta2V5cyAtLSBzYWZlICovXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbnZhciBORVdfSVRFUkFUT1JfUFJPVE9UWVBFID0gIWlzT2JqZWN0KEl0ZXJhdG9yUHJvdG90eXBlKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXN0ID0ge307XG4gIC8vIEZGNDQtIGxlZ2FjeSBpdGVyYXRvcnMgY2FzZVxuICByZXR1cm4gSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdLmNhbGwodGVzdCkgIT09IHRlc3Q7XG59KTtcblxuaWYgKE5FV19JVEVSQVRPUl9QUk9UT1RZUEUpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5lbHNlIGlmIChJU19QVVJFKSBJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLUBAaXRlcmF0b3JcbmlmICghaXNDYWxsYWJsZShJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gIGRlZmluZUJ1aWx0SW4oSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCwgRU5VTUVSQUJMRV9ORVhUKSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoKyFFTlVNRVJBQkxFX05FWFQsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBGdW5jdGlvbk5hbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5QUk9QRVI7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuQ09ORklHVVJBQkxFO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgJiYgS0lORCBpbiBJdGVyYWJsZVByb3RvdHlwZSkgcmV0dXJuIEl0ZXJhYmxlUHJvdG90eXBlW0tJTkRdO1xuXG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzKTsgfTtcbiAgfTtcblxuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IGZhbHNlO1xuICB2YXIgSXRlcmFibGVQcm90b3R5cGUgPSBJdGVyYWJsZS5wcm90b3R5cGU7XG4gIHZhciBuYXRpdmVJdGVyYXRvciA9IEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXVxuICAgIHx8IEl0ZXJhYmxlUHJvdG90eXBlWydAQGl0ZXJhdG9yJ11cbiAgICB8fCBERUZBVUxUICYmIEl0ZXJhYmxlUHJvdG90eXBlW0RFRkFVTFRdO1xuICB2YXIgZGVmYXVsdEl0ZXJhdG9yID0gIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgbmF0aXZlSXRlcmF0b3IgfHwgZ2V0SXRlcmF0aW9uTWV0aG9kKERFRkFVTFQpO1xuICB2YXIgYW55TmF0aXZlSXRlcmF0b3IgPSBOQU1FID09PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0NhbGxhYmxlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gICAgICAgICAgZGVmaW5lQnVpbHRJbihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheS5wcm90b3R5cGUueyB2YWx1ZXMsIEBAaXRlcmF0b3IgfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIERFRkFVTFQgPT09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBpZiAoIUlTX1BVUkUgJiYgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYWJsZVByb3RvdHlwZSwgJ25hbWUnLCBWQUxVRVMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gY2FsbChuYXRpdmVJdGVyYXRvciwgdGhpcyk7IH07XG4gICAgfVxuICB9XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgSVRFUkFUT1IsIGRlZmF1bHRJdGVyYXRvciwgeyBuYW1lOiBERUZBVUxUIH0pO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYENyZWF0ZUl0ZXJSZXN1bHRPYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVpdGVycmVzdWx0b2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgZG9uZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6IGRvbmUgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmtleXNcbi8vIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWFycmF5aXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lSXRlcmF0b3IoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBBUlJBWV9JVEVSQVRPUixcbiAgICB0YXJnZXQ6IHRvSW5kZXhlZE9iamVjdChpdGVyYXRlZCksIC8vIHRhcmdldFxuICAgIGluZGV4OiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICAgIGtpbmQ6IGtpbmQgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICB9KTtcbi8vIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuICBzd2l0Y2ggKHN0YXRlLmtpbmQpIHtcbiAgICBjYXNlICdrZXlzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoaW5kZXgsIGZhbHNlKTtcbiAgICBjYXNlICd2YWx1ZXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh0YXJnZXRbaW5kZXhdLCBmYWxzZSk7XG4gIH0gcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZmFsc2UpO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyVcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRldW5tYXBwZWRhcmd1bWVudHNvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG52YXIgdmFsdWVzID0gSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDQ1LSBidWdcbmlmICghSVNfUFVSRSAmJiBERVNDUklQVE9SUyAmJiB2YWx1ZXMubmFtZSAhPT0gJ3ZhbHVlcycpIHRyeSB7XG4gIGRlZmluZVByb3BlcnR5KHZhbHVlcywgJ25hbWUnLCB7IHZhbHVlOiAndmFsdWVzJyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIFNhZmFyaSA8IDEzIGRvZXMgbm90IHRocm93IGFuIGVycm9yIGluIHRoaXMgY2FzZVxudmFyIFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA9IERFU0NSSVBUT1JTICYmICFmdW5jdGlvbiAoKSB7XG4gIC8vIG1ha2VzIG5vIHNlbnNlIHdpdGhvdXQgcHJvcGVyIHN0cmljdCBtb2RlIHN1cHBvcnRcbiAgaWYgKHRoaXMgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkubGVuZ3RoID0gMTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPyBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIGlmIChpc0FycmF5KE8pICYmICFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgJ2xlbmd0aCcpLndyaXRhYmxlKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgnKTtcbiAgfSByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59IDogZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIElOQ09SUkVDVF9UT19MRU5HVEggPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbXS5wdXNoLmNhbGwoeyBsZW5ndGg6IDB4MTAwMDAwMDAwIH0sIDEpICE9PSA0Mjk0OTY3Mjk3O1xufSk7XG5cbi8vIFY4IDw9IDEyMSBhbmQgU2FmYXJpIDw9IDE1LjQ7IEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3Jcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyNjgxXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnB1c2goKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfVE9fTEVOR1RIIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5wdXNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnB1c2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBwdXNoOiBmdW5jdGlvbiBwdXNoKGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7XG4gICAgICBPW2xlbl0gPSBhcmd1bWVudHNbaV07XG4gICAgICBsZW4rKztcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBEYXRlLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWRhdGUucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgYW5PYmplY3QodGhpcyk7XG4gIGlmIChoaW50ID09PSAnc3RyaW5nJyB8fCBoaW50ID09PSAnZGVmYXVsdCcpIGhpbnQgPSAnc3RyaW5nJztcbiAgZWxzZSBpZiAoaGludCAhPT0gJ251bWJlcicpIHRocm93IG5ldyAkVHlwZUVycm9yKCdJbmNvcnJlY3QgaGludCcpO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZSh0aGlzLCBoaW50KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkYXRlVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGF0ZS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcbnZhciBEYXRlUHJvdG90eXBlID0gRGF0ZS5wcm90b3R5cGU7XG5cbi8vIGBEYXRlLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWRhdGUucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmlmICghaGFzT3duKERhdGVQcm90b3R5cGUsIFRPX1BSSU1JVElWRSkpIHtcbiAgZGVmaW5lQnVpbHRJbihEYXRlUHJvdG90eXBlLCBUT19QUklNSVRJVkUsIGRhdGVUb1ByaW1pdGl2ZSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG4vLyBgdGhpc051bWJlclZhbHVlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdGhpc251bWJlcnZhbHVlXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKDEuMC52YWx1ZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBhIHN0cmluZyBvZiBhbGwgdmFsaWQgdW5pY29kZSB3aGl0ZXNwYWNlc1xubW9kdWxlLmV4cG9ydHMgPSAnXFx1MDAwOVxcdTAwMEFcXHUwMDBCXFx1MDAwQ1xcdTAwMERcXHUwMDIwXFx1MDBBMFxcdTE2ODBcXHUyMDAwXFx1MjAwMVxcdTIwMDInICtcbiAgJ1xcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGx0cmltID0gUmVnRXhwKCdeWycgKyB3aGl0ZXNwYWNlcyArICddKycpO1xudmFyIHJ0cmltID0gUmVnRXhwKCcoXnxbXicgKyB3aGl0ZXNwYWNlcyArICddKVsnICsgd2hpdGVzcGFjZXMgKyAnXSskJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbSwgdHJpbVN0YXJ0LCB0cmltRW5kLCB0cmltTGVmdCwgdHJpbVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzKSB7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHJlcGxhY2Uoc3RyaW5nLCBsdHJpbSwgJycpO1xuICAgIGlmIChUWVBFICYgMikgc3RyaW5nID0gcmVwbGFjZShzdHJpbmcsIHJ0cmltLCAnJDEnKTtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbUxlZnQsIHRyaW1TdGFydCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltc3RhcnRcbiAgc3RhcnQ6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltUmlnaHQsIHRyaW1FbmQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbWVuZFxuICBlbmQ6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUudHJpbWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4gIHRyaW06IGNyZWF0ZU1ldGhvZCgzKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciB0aGlzTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGhpcy1udW1iZXItdmFsdWUnKTtcbnZhciB0cmltID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltJykudHJpbTtcblxudmFyIE5VTUJFUiA9ICdOdW1iZXInO1xudmFyIE5hdGl2ZU51bWJlciA9IGdsb2JhbFtOVU1CRVJdO1xudmFyIFB1cmVOdW1iZXJOYW1lc3BhY2UgPSBwYXRoW05VTUJFUl07XG52YXIgTnVtYmVyUHJvdG90eXBlID0gTmF0aXZlTnVtYmVyLnByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcblxuLy8gYFRvTnVtZXJpY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbnVtZXJpY1xudmFyIHRvTnVtZXJpYyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJpbVZhbHVlID0gdG9QcmltaXRpdmUodmFsdWUsICdudW1iZXInKTtcbiAgcmV0dXJuIHR5cGVvZiBwcmltVmFsdWUgPT0gJ2JpZ2ludCcgPyBwcmltVmFsdWUgOiB0b051bWJlcihwcmltVmFsdWUpO1xufTtcblxuLy8gYFRvTnVtYmVyYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9udW1iZXJcbnZhciB0b051bWJlciA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgaXQgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ251bWJlcicpO1xuICB2YXIgZmlyc3QsIHRoaXJkLCByYWRpeCwgbWF4Q29kZSwgZGlnaXRzLCBsZW5ndGgsIGluZGV4LCBjb2RlO1xuICBpZiAoaXNTeW1ib2woaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIG51bWJlcicpO1xuICBpZiAodHlwZW9mIGl0ID09ICdzdHJpbmcnICYmIGl0Lmxlbmd0aCA+IDIpIHtcbiAgICBpdCA9IHRyaW0oaXQpO1xuICAgIGZpcnN0ID0gY2hhckNvZGVBdChpdCwgMCk7XG4gICAgaWYgKGZpcnN0ID09PSA0MyB8fCBmaXJzdCA9PT0gNDUpIHtcbiAgICAgIHRoaXJkID0gY2hhckNvZGVBdChpdCwgMik7XG4gICAgICBpZiAodGhpcmQgPT09IDg4IHx8IHRoaXJkID09PSAxMjApIHJldHVybiBOYU47IC8vIE51bWJlcignKzB4MScpIHNob3VsZCBiZSBOYU4sIG9sZCBWOCBmaXhcbiAgICB9IGVsc2UgaWYgKGZpcnN0ID09PSA0OCkge1xuICAgICAgc3dpdGNoIChjaGFyQ29kZUF0KGl0LCAxKSkge1xuICAgICAgICAvLyBmYXN0IGVxdWFsIG9mIC9eMGJbMDFdKyQvaVxuICAgICAgICBjYXNlIDY2OlxuICAgICAgICBjYXNlIDk4OlxuICAgICAgICAgIHJhZGl4ID0gMjtcbiAgICAgICAgICBtYXhDb2RlID0gNDk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vIGZhc3QgZXF1YWwgb2YgL14wb1swLTddKyQvaVxuICAgICAgICBjYXNlIDc5OlxuICAgICAgICBjYXNlIDExMTpcbiAgICAgICAgICByYWRpeCA9IDg7XG4gICAgICAgICAgbWF4Q29kZSA9IDU1O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAraXQ7XG4gICAgICB9XG4gICAgICBkaWdpdHMgPSBzdHJpbmdTbGljZShpdCwgMik7XG4gICAgICBsZW5ndGggPSBkaWdpdHMubGVuZ3RoO1xuICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvZGUgPSBjaGFyQ29kZUF0KGRpZ2l0cywgaW5kZXgpO1xuICAgICAgICAvLyBwYXJzZUludCBwYXJzZXMgYSBzdHJpbmcgdG8gYSBmaXJzdCB1bmF2YWlsYWJsZSBzeW1ib2xcbiAgICAgICAgLy8gYnV0IFRvTnVtYmVyIHNob3VsZCByZXR1cm4gTmFOIGlmIGEgc3RyaW5nIGNvbnRhaW5zIHVuYXZhaWxhYmxlIHN5bWJvbHNcbiAgICAgICAgaWYgKGNvZGUgPCA0OCB8fCBjb2RlID4gbWF4Q29kZSkgcmV0dXJuIE5hTjtcbiAgICAgIH0gcmV0dXJuIHBhcnNlSW50KGRpZ2l0cywgcmFkaXgpO1xuICAgIH1cbiAgfSByZXR1cm4gK2l0O1xufTtcblxudmFyIEZPUkNFRCA9IGlzRm9yY2VkKE5VTUJFUiwgIU5hdGl2ZU51bWJlcignIDBvMScpIHx8ICFOYXRpdmVOdW1iZXIoJzBiMScpIHx8IE5hdGl2ZU51bWJlcignKzB4MScpKTtcblxudmFyIGNhbGxlZFdpdGhOZXcgPSBmdW5jdGlvbiAoZHVtbXkpIHtcbiAgLy8gaW5jbHVkZXMgY2hlY2sgb24gMS4uY29uc3RydWN0b3IoZm9vKSBjYXNlXG4gIHJldHVybiBpc1Byb3RvdHlwZU9mKE51bWJlclByb3RvdHlwZSwgZHVtbXkpICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgdGhpc051bWJlclZhbHVlKGR1bW15KTsgfSk7XG59O1xuXG4vLyBgTnVtYmVyYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXItY29uc3RydWN0b3JcbnZhciBOdW1iZXJXcmFwcGVyID0gZnVuY3Rpb24gTnVtYmVyKHZhbHVlKSB7XG4gIHZhciBuID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgPyAwIDogTmF0aXZlTnVtYmVyKHRvTnVtZXJpYyh2YWx1ZSkpO1xuICByZXR1cm4gY2FsbGVkV2l0aE5ldyh0aGlzKSA/IGluaGVyaXRJZlJlcXVpcmVkKE9iamVjdChuKSwgdGhpcywgTnVtYmVyV3JhcHBlcikgOiBuO1xufTtcblxuTnVtYmVyV3JhcHBlci5wcm90b3R5cGUgPSBOdW1iZXJQcm90b3R5cGU7XG5pZiAoRk9SQ0VEICYmICFJU19QVVJFKSBOdW1iZXJQcm90b3R5cGUuY29uc3RydWN0b3IgPSBOdW1iZXJXcmFwcGVyO1xuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBOdW1iZXI6IE51bWJlcldyYXBwZXJcbn0pO1xuXG4vLyBVc2UgYGludGVybmFsL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllc2AgaGVscGVyIGluIGBjb3JlLWpzQDRgXG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuICBmb3IgKHZhciBrZXlzID0gREVTQ1JJUFRPUlMgPyBnZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZSkgOiAoXG4gICAgLy8gRVMzOlxuICAgICdNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElWRV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSwnICtcbiAgICAvLyBFUzIwMTUgKGluIGNhc2UsIGlmIG1vZHVsZXMgd2l0aCBFUzIwMTUgTnVtYmVyIHN0YXRpY3MgcmVxdWlyZWQgYmVmb3JlKTpcbiAgICAnRVBTSUxPTixNQVhfU0FGRV9JTlRFR0VSLE1JTl9TQUZFX0lOVEVHRVIsaXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIscGFyc2VGbG9hdCxwYXJzZUludCwnICtcbiAgICAvLyBFU05leHRcbiAgICAnZnJvbVN0cmluZyxyYW5nZSdcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXNPd24oc291cmNlLCBrZXkgPSBrZXlzW2pdKSAmJiAhaGFzT3duKHRhcmdldCwga2V5KSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcblxuaWYgKElTX1BVUkUgJiYgUHVyZU51bWJlck5hbWVzcGFjZSkgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhwYXRoW05VTUJFUl0sIFB1cmVOdW1iZXJOYW1lc3BhY2UpO1xuaWYgKEZPUkNFRCB8fCBJU19QVVJFKSBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHBhdGhbTlVNQkVSXSwgTmF0aXZlTnVtYmVyKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyAhPT0gZGVmaW5lUHJvcGVydGllcywgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydGllczogZGVmaW5lUHJvcGVydGllc1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICAgIHZhciBrZXlzID0gb3duS2V5cyhPKTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIga2V5LCBkZXNjcmlwdG9yO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSA9IGtleXNbaW5kZXgrK10pO1xuICAgICAgaWYgKGRlc2NyaXB0b3IgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUtleXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Ncbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmhhc0luZGljZXMpIHJlc3VsdCArPSAnZCc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC5kb3RBbGwpIHJlc3VsdCArPSAncyc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnVuaWNvZGVTZXRzKSByZXN1bHQgKz0gJ3YnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCdhJywgJ3knKSAtPiAvYS95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJ2EnLCAneScpO1xuICByZS5sYXN0SW5kZXggPSAyO1xuICByZXR1cm4gcmUuZXhlYygnYWJjZCcpICE9PSBudWxsO1xufSk7XG5cbi8vIFVDIEJyb3dzZXIgYnVnXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTAwOFxudmFyIE1JU1NFRF9TVElDS1kgPSBVTlNVUFBPUlRFRF9ZIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICEkUmVnRXhwKCdhJywgJ3knKS5zdGlja3k7XG59KTtcblxudmFyIEJST0tFTl9DQVJFVCA9IFVOU1VQUE9SVEVEX1kgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03NzM2ODdcbiAgdmFyIHJlID0gJFJlZ0V4cCgnXnInLCAnZ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ3N0cicpICE9PSBudWxsO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBCUk9LRU5fQ0FSRVQ6IEJST0tFTl9DQVJFVCxcbiAgTUlTU0VEX1NUSUNLWTogTUlTU0VEX1NUSUNLWSxcbiAgVU5TVVBQT1JURURfWTogVU5TVVBQT1JURURfWVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnLicsICdzJykgLT4gLy4vcyBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAkUmVnRXhwKCcuJywgJ3MnKTtcbiAgcmV0dXJuICEocmUuZG90QWxsICYmIHJlLnRlc3QoJ1xcbicpICYmIHJlLmZsYWdzID09PSAncycpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJyg/PGE+YiknLCAnZycpIC0+IC8oPzxhPmIpL2cgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnKD88YT5iKScsICdnJyk7XG4gIHJldHVybiByZS5leGVjKCdiJykuZ3JvdXBzLmEgIT09ICdiJyB8fFxuICAgICdiJy5yZXBsYWNlKHJlLCAnJDxhPmMnKSAhPT0gJ2JjJztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby1lbXB0eS1jYXB0dXJpbmctZ3JvdXAsIHJlZ2V4cC9uby1lbXB0eS1ncm91cCwgcmVnZXhwL25vLWxhenktZW5kcyAtLSB0ZXN0aW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tdXNlbGVzcy1xdWFudGlmaWVyIC0tIHRlc3RpbmcgKi9cbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldEludGVybmFsU3RhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKS5nZXQ7XG52YXIgVU5TVVBQT1JURURfRE9UX0FMTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbCcpO1xudmFyIFVOU1VQUE9SVEVEX05DRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnJyk7XG5cbnZhciBuYXRpdmVSZXBsYWNlID0gc2hhcmVkKCduYXRpdmUtc3RyaW5nLXJlcGxhY2UnLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgaW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS87XG4gIHZhciByZTIgPSAvYiovZztcbiAgY2FsbChuYXRpdmVFeGVjLCByZTEsICdhJyk7XG4gIGNhbGwobmF0aXZlRXhlYywgcmUyLCAnYScpO1xuICByZXR1cm4gcmUxLmxhc3RJbmRleCAhPT0gMCB8fCByZTIubGFzdEluZGV4ICE9PSAwO1xufSkoKTtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBzdGlja3lIZWxwZXJzLkJST0tFTl9DQVJFVDtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQgfHwgVU5TVVBQT1JURURfWSB8fCBVTlNVUFBPUlRFRF9ET1RfQUxMIHx8IFVOU1VQUE9SVEVEX05DRztcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHJpbmcpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUocmUpO1xuICAgIHZhciBzdHIgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgIHZhciByYXcgPSBzdGF0ZS5yYXc7XG4gICAgdmFyIHJlc3VsdCwgcmVDb3B5LCBsYXN0SW5kZXgsIG1hdGNoLCBpLCBvYmplY3QsIGdyb3VwO1xuXG4gICAgaWYgKHJhdykge1xuICAgICAgcmF3Lmxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDtcbiAgICAgIHJlc3VsdCA9IGNhbGwocGF0Y2hlZEV4ZWMsIHJhdywgc3RyKTtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJhdy5sYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHZhciBncm91cHMgPSBzdGF0ZS5ncm91cHM7XG4gICAgdmFyIHN0aWNreSA9IFVOU1VQUE9SVEVEX1kgJiYgcmUuc3RpY2t5O1xuICAgIHZhciBmbGFncyA9IGNhbGwocmVnZXhwRmxhZ3MsIHJlKTtcbiAgICB2YXIgc291cmNlID0gcmUuc291cmNlO1xuICAgIHZhciBjaGFyc0FkZGVkID0gMDtcbiAgICB2YXIgc3RyQ29weSA9IHN0cjtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGZsYWdzID0gcmVwbGFjZShmbGFncywgJ3knLCAnJyk7XG4gICAgICBpZiAoaW5kZXhPZihmbGFncywgJ2cnKSA9PT0gLTEpIHtcbiAgICAgICAgZmxhZ3MgKz0gJ2cnO1xuICAgICAgfVxuXG4gICAgICBzdHJDb3B5ID0gc3RyaW5nU2xpY2Uoc3RyLCByZS5sYXN0SW5kZXgpO1xuICAgICAgLy8gU3VwcG9ydCBhbmNob3JlZCBzdGlja3kgYmVoYXZpb3IuXG4gICAgICBpZiAocmUubGFzdEluZGV4ID4gMCAmJiAoIXJlLm11bHRpbGluZSB8fCByZS5tdWx0aWxpbmUgJiYgY2hhckF0KHN0ciwgcmUubGFzdEluZGV4IC0gMSkgIT09ICdcXG4nKSkge1xuICAgICAgICBzb3VyY2UgPSAnKD86ICcgKyBzb3VyY2UgKyAnKSc7XG4gICAgICAgIHN0ckNvcHkgPSAnICcgKyBzdHJDb3B5O1xuICAgICAgICBjaGFyc0FkZGVkKys7XG4gICAgICB9XG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgc3RyIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeKD86JyArIHNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgIH1cblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHNvdXJjZSArICckKD8hXFxcXHMpJywgZmxhZ3MpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG5cbiAgICBtYXRjaCA9IGNhbGwobmF0aXZlRXhlYywgc3RpY2t5ID8gcmVDb3B5IDogcmUsIHN0ckNvcHkpO1xuXG4gICAgaWYgKHN0aWNreSkge1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIG1hdGNoLmlucHV0ID0gc3RyaW5nU2xpY2UobWF0Y2guaW5wdXQsIGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaFswXSA9IHN0cmluZ1NsaWNlKG1hdGNoWzBdLCBjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2guaW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICAgIHJlLmxhc3RJbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICB9IGVsc2UgcmUubGFzdEluZGV4ID0gMDtcbiAgICB9IGVsc2UgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmUubGFzdEluZGV4ID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24ndCB3b3JrIGZvciAvKC4/KT8vXG4gICAgICBjYWxsKG5hdGl2ZVJlcGxhY2UsIG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2ggJiYgZ3JvdXBzKSB7XG4gICAgICBtYXRjaC5ncm91cHMgPSBvYmplY3QgPSBjcmVhdGUobnVsbCk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2ldO1xuICAgICAgICBvYmplY3RbZ3JvdXBbMF1dID0gbWF0Y2hbZ3JvdXBbMV1dO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBleGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmV4ZWNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLmV4ZWNcbiQoeyB0YXJnZXQ6ICdSZWdFeHAnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAvLi8uZXhlYyAhPT0gZXhlYyB9LCB7XG4gIGV4ZWM6IGV4ZWNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgbW92ZWQgdG8gZW50cnkgcG9pbnRzXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjJyk7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBERUxFR0FURVNfVE9fRVhFQyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgdmFyIHJlID0gL1thY10vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIGV4ZWNDYWxsZWQgPSB0cnVlO1xuICAgIHJldHVybiAvLi8uZXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xuICByZXR1cm4gcmUudGVzdCgnYWJjJykgPT09IHRydWUgJiYgZXhlY0NhbGxlZDtcbn0oKTtcblxudmFyIG5hdGl2ZVRlc3QgPSAvLi8udGVzdDtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUudGVzdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudGVzdFxuJCh7IHRhcmdldDogJ1JlZ0V4cCcsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFERUxFR0FURVNfVE9fRVhFQyB9LCB7XG4gIHRlc3Q6IGZ1bmN0aW9uIChTKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcoUyk7XG4gICAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gICAgaWYgKCFpc0NhbGxhYmxlKGV4ZWMpKSByZXR1cm4gY2FsbChuYXRpdmVUZXN0LCBSLCBzdHJpbmcpO1xuICAgIHZhciByZXN1bHQgPSBjYWxsKGV4ZWMsIFIsIHN0cmluZyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIGFuT2JqZWN0KHJlc3VsdCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoQ09OVkVSVF9UT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgcG9zKSB7XG4gICAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyT3JJbmZpbml0eShwb3MpO1xuICAgIHZhciBzaXplID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0LCBzZWNvbmQ7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBzaXplKSByZXR1cm4gQ09OVkVSVF9UT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBmaXJzdCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24pO1xuICAgIHJldHVybiBmaXJzdCA8IDB4RDgwMCB8fCBmaXJzdCA+IDB4REJGRiB8fCBwb3NpdGlvbiArIDEgPT09IHNpemVcbiAgICAgIHx8IChzZWNvbmQgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBjaGFyQXQoUywgcG9zaXRpb24pXG4gICAgICAgICAgOiBmaXJzdFxuICAgICAgICA6IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBzdHJpbmdTbGljZShTLCBwb3NpdGlvbiwgcG9zaXRpb24gKyAyKVxuICAgICAgICAgIDogKGZpcnN0IC0gMHhEODAwIDw8IDEwKSArIChzZWNvbmQgLSAweERDMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xuXG52YXIgU1RSSU5HX0lURVJBVE9SID0gJ1N0cmluZyBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTVFJJTkdfSVRFUkFUT1IpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUtQEBpdGVyYXRvclxuZGVmaW5lSXRlcmF0b3IoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFNUUklOR19JVEVSQVRPUixcbiAgICBzdHJpbmc6IHRvU3RyaW5nKGl0ZXJhdGVkKSxcbiAgICBpbmRleDogMFxuICB9KTtcbi8vIGAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciBzdHJpbmcgPSBzdGF0ZS5zdHJpbmc7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4O1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBzdHJpbmcubGVuZ3RoKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICBwb2ludCA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgc3RhdGUuaW5kZXggKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChwb2ludCwgZmFsc2UpO1xufSk7XG4iLCAiKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoKGZ1bmN0aW9uKG4pe2lmKCEoXCJFdmVudFwiaW4gbikpcmV0dXJuITFcbnRyeXtyZXR1cm4gbmV3IEV2ZW50KFwiY2xpY2tcIiksITB9Y2F0Y2gobil7cmV0dXJuITF9fSkoc2VsZilcbikpIHtcbi8vIEV2ZW50XG4oZnVuY3Rpb24gKCkge1xuXHQvLyBUaGlzIHBvbHlmaWxsIGRlcGVuZHMgb24gYXZhaWxhYmlsaXR5IG9mIGBkb2N1bWVudGAgc28gd2lsbCBub3QgcnVuIGluIGEgd29ya2VyXG5cdC8vIEhvd2V2ZXIsIHdlIGFzc3N1bWUgdGhlcmUgYXJlIG5vIGJyb3dzZXJzIHdpdGggd29ya2VyIHN1cHBvcnQgdGhhdCBsYWNrIHByb3BlclxuXHQvLyBzdXBwb3J0IGZvciBgRXZlbnRgIHdpdGhpbiB0aGUgd29ya2VyXG5cdGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG5cblx0dmFyIGV4aXN0aW5nUHJvdG8gPSAod2luZG93LkV2ZW50ICYmIHdpbmRvdy5FdmVudC5wcm90b3R5cGUpIHx8IG51bGw7XG5cdGZ1bmN0aW9uIEV2ZW50KHR5cGUsIGV2ZW50SW5pdERpY3QpIHtcblx0XHRpZiAoIXR5cGUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignTm90IGVub3VnaCBhcmd1bWVudHMnKTtcblx0XHR9XG5cblx0XHR2YXIgZXZlbnQ7XG5cdFx0Ly8gU2hvcnRjdXQgaWYgYnJvd3NlciBzdXBwb3J0cyBjcmVhdGVFdmVudFxuXHRcdGlmICgnY3JlYXRlRXZlbnQnIGluIGRvY3VtZW50KSB7XG5cdFx0XHRldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuXHRcdFx0dmFyIGJ1YmJsZXMgPSBldmVudEluaXREaWN0ICYmIGV2ZW50SW5pdERpY3QuYnViYmxlcyAhPT0gdW5kZWZpbmVkID8gZXZlbnRJbml0RGljdC5idWJibGVzIDogZmFsc2U7XG5cdFx0XHR2YXIgY2FuY2VsYWJsZSA9IGV2ZW50SW5pdERpY3QgJiYgZXZlbnRJbml0RGljdC5jYW5jZWxhYmxlICE9PSB1bmRlZmluZWQgPyBldmVudEluaXREaWN0LmNhbmNlbGFibGUgOiBmYWxzZTtcblxuXHRcdFx0ZXZlbnQuaW5pdEV2ZW50KHR5cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUpO1xuXG5cdFx0XHRyZXR1cm4gZXZlbnQ7XG5cdFx0fVxuXG5cdFx0ZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCgpO1xuXG5cdFx0ZXZlbnQudHlwZSA9IHR5cGU7XG5cdFx0ZXZlbnQuYnViYmxlcyA9IGV2ZW50SW5pdERpY3QgJiYgZXZlbnRJbml0RGljdC5idWJibGVzICE9PSB1bmRlZmluZWQgPyBldmVudEluaXREaWN0LmJ1YmJsZXMgOiBmYWxzZTtcblx0XHRldmVudC5jYW5jZWxhYmxlID0gZXZlbnRJbml0RGljdCAmJiBldmVudEluaXREaWN0LmNhbmNlbGFibGUgIT09IHVuZGVmaW5lZCA/IGV2ZW50SW5pdERpY3QuY2FuY2VsYWJsZSA6IGZhbHNlO1xuXG5cdFx0cmV0dXJuIGV2ZW50O1xuXHR9XG5cdEV2ZW50Lk5PTkUgPSAwO1xuXHRFdmVudC5DQVBUVVJJTkdfUEhBU0UgPSAxO1xuXHRFdmVudC5BVF9UQVJHRVQgPSAyO1xuXHRFdmVudC5CVUJCTElOR19QSEFTRSA9IDM7XG5cdHdpbmRvdy5FdmVudCA9IFdpbmRvdy5wcm90b3R5cGUuRXZlbnQgPSBFdmVudDtcblx0aWYgKGV4aXN0aW5nUHJvdG8pIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LkV2ZW50LCAncHJvdG90eXBlJywge1xuXHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHR2YWx1ZTogZXhpc3RpbmdQcm90b1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKCEoJ2NyZWF0ZUV2ZW50JyBpbiBkb2N1bWVudCkpIHtcblx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciA9IFdpbmRvdy5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciA9IERvY3VtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIoKSB7XG5cdFx0XHR2YXJcblx0XHRcdGVsZW1lbnQgPSB0aGlzLFxuXHRcdFx0dHlwZSA9IGFyZ3VtZW50c1swXSxcblx0XHRcdGxpc3RlbmVyID0gYXJndW1lbnRzWzFdO1xuXG5cdFx0XHRpZiAoIWVsZW1lbnQuX2V2ZW50cykge1xuXHRcdFx0XHRlbGVtZW50Ll9ldmVudHMgPSB7fTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFlbGVtZW50Ll9ldmVudHNbdHlwZV0pIHtcblx0XHRcdFx0ZWxlbWVudC5fZXZlbnRzW3R5cGVdID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0XHRcdFx0dmFyXG5cdFx0XHRcdFx0bGlzdCA9IGVsZW1lbnQuX2V2ZW50c1tldmVudC50eXBlXS5saXN0LFxuXHRcdFx0XHRcdGV2ZW50cyA9IGxpc3Quc2xpY2UoKSxcblx0XHRcdFx0XHRpbmRleCA9IC0xLFxuXHRcdFx0XHRcdGxlbmd0aCA9IGV2ZW50cy5sZW5ndGgsXG5cdFx0XHRcdFx0ZXZlbnRFbGVtZW50O1xuXG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcblx0XHRcdFx0XHRcdGlmIChldmVudC5jYW5jZWxhYmxlICE9PSBmYWxzZSkge1xuXHRcdFx0XHRcdFx0XHRldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbiBzdG9wUHJvcGFnYXRpb24oKSB7XG5cdFx0XHRcdFx0XHRldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gPSBmdW5jdGlvbiBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSB7XG5cdFx0XHRcdFx0XHRldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0ZXZlbnQuY2FuY2VsSW1tZWRpYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0ZXZlbnQuY3VycmVudFRhcmdldCA9IGVsZW1lbnQ7XG5cdFx0XHRcdFx0ZXZlbnQucmVsYXRlZFRhcmdldCA9IGV2ZW50LmZyb21FbGVtZW50IHx8IG51bGw7XG5cdFx0XHRcdFx0ZXZlbnQudGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQgfHwgZWxlbWVudDtcblx0XHRcdFx0XHRldmVudC50aW1lU3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblxuXHRcdFx0XHRcdGlmIChldmVudC5jbGllbnRYKSB7XG5cdFx0XHRcdFx0XHRldmVudC5wYWdlWCA9IGV2ZW50LmNsaWVudFggKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcblx0XHRcdFx0XHRcdGV2ZW50LnBhZ2VZID0gZXZlbnQuY2xpZW50WSArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0d2hpbGUgKCsraW5kZXggPCBsZW5ndGggJiYgIWV2ZW50LmNhbmNlbEltbWVkaWF0ZSkge1xuXHRcdFx0XHRcdFx0aWYgKGluZGV4IGluIGV2ZW50cykge1xuXHRcdFx0XHRcdFx0XHRldmVudEVsZW1lbnQgPSBldmVudHNbaW5kZXhdO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChsaXN0LmluY2x1ZGVzKGV2ZW50RWxlbWVudCkgJiYgdHlwZW9mIGV2ZW50RWxlbWVudCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdFx0XHRcdGV2ZW50RWxlbWVudC5jYWxsKGVsZW1lbnQsIGV2ZW50KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblxuXHRcdFx0XHRlbGVtZW50Ll9ldmVudHNbdHlwZV0ubGlzdCA9IFtdO1xuXG5cdFx0XHRcdGlmIChlbGVtZW50LmF0dGFjaEV2ZW50KSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5hdHRhY2hFdmVudCgnb24nICsgdHlwZSwgZWxlbWVudC5fZXZlbnRzW3R5cGVdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRlbGVtZW50Ll9ldmVudHNbdHlwZV0ubGlzdC5wdXNoKGxpc3RlbmVyKTtcblx0XHR9O1xuXG5cdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBXaW5kb3cucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBEb2N1bWVudC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKCkge1xuXHRcdFx0dmFyXG5cdFx0XHRlbGVtZW50ID0gdGhpcyxcblx0XHRcdHR5cGUgPSBhcmd1bWVudHNbMF0sXG5cdFx0XHRsaXN0ZW5lciA9IGFyZ3VtZW50c1sxXSxcblx0XHRcdGluZGV4O1xuXG5cdFx0XHRpZiAoZWxlbWVudC5fZXZlbnRzICYmIGVsZW1lbnQuX2V2ZW50c1t0eXBlXSAmJiBlbGVtZW50Ll9ldmVudHNbdHlwZV0ubGlzdCkge1xuXHRcdFx0XHRpbmRleCA9IGVsZW1lbnQuX2V2ZW50c1t0eXBlXS5saXN0LmluZGV4T2YobGlzdGVuZXIpO1xuXG5cdFx0XHRcdGlmIChpbmRleCAhPT0gLTEpIHtcblx0XHRcdFx0XHRlbGVtZW50Ll9ldmVudHNbdHlwZV0ubGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuXG5cdFx0XHRcdFx0aWYgKCFlbGVtZW50Ll9ldmVudHNbdHlwZV0ubGlzdC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGlmIChlbGVtZW50LmRldGFjaEV2ZW50KSB7XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuZGV0YWNoRXZlbnQoJ29uJyArIHR5cGUsIGVsZW1lbnQuX2V2ZW50c1t0eXBlXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRkZWxldGUgZWxlbWVudC5fZXZlbnRzW3R5cGVdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR3aW5kb3cuZGlzcGF0Y2hFdmVudCA9IFdpbmRvdy5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IERvY3VtZW50LnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50ID0gRWxlbWVudC5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoZXZlbnQpIHtcblx0XHRcdGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ05vdCBlbm91Z2ggYXJndW1lbnRzJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghZXZlbnQgfHwgdHlwZW9mIGV2ZW50LnR5cGUgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignRE9NIEV2ZW50cyBFeGNlcHRpb24gMCcpO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZWxlbWVudCA9IHRoaXMsIHR5cGUgPSBldmVudC50eXBlO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoIWV2ZW50LmJ1YmJsZXMpIHtcblx0XHRcdFx0XHRldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuXG5cdFx0XHRcdFx0dmFyIGNhbmNlbEJ1YmJsZUV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0XHRcdFx0XHRldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuXG5cdFx0XHRcdFx0XHQoZWxlbWVudCB8fCB3aW5kb3cpLmRldGFjaEV2ZW50KCdvbicgKyB0eXBlLCBjYW5jZWxCdWJibGVFdmVudCk7XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdHRoaXMuYXR0YWNoRXZlbnQoJ29uJyArIHR5cGUsIGNhbmNlbEJ1YmJsZUV2ZW50KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdvbicgKyB0eXBlLCBldmVudCk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRldmVudC50YXJnZXQgPSBlbGVtZW50O1xuXG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0ID0gZWxlbWVudDtcblxuXHRcdFx0XHRcdGlmICgnX2V2ZW50cycgaW4gZWxlbWVudCAmJiB0eXBlb2YgZWxlbWVudC5fZXZlbnRzW3R5cGVdID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50Ll9ldmVudHNbdHlwZV0uY2FsbChlbGVtZW50LCBldmVudCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBlbGVtZW50WydvbicgKyB0eXBlXSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdFx0ZWxlbWVudFsnb24nICsgdHlwZV0uY2FsbChlbGVtZW50LCBldmVudCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQubm9kZVR5cGUgPT09IDkgPyBlbGVtZW50LnBhcmVudFdpbmRvdyA6IGVsZW1lbnQucGFyZW50Tm9kZTtcblx0XHRcdFx0fSB3aGlsZSAoZWxlbWVudCAmJiAhZXZlbnQuY2FuY2VsQnViYmxlKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fTtcblxuXHRcdC8vIEFkZCB0aGUgRE9NQ29udGVudExvYWRlZCBFdmVudFxuXHRcdGRvY3VtZW50LmF0dGFjaEV2ZW50KCdvbnJlYWR5c3RhdGVjaGFuZ2UnLCBmdW5jdGlvbigpIHtcblx0XHRcdGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnKSB7XG5cdFx0XHRcdGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdET01Db250ZW50TG9hZGVkJywge1xuXHRcdFx0XHRcdGJ1YmJsZXM6IHRydWVcblx0XHRcdFx0fSkpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59KCkpO1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJtYXRjaE1lZGlhXCJpbiBzZWxmJiZcIk1lZGlhUXVlcnlMaXN0XCJpbiBzZWxmXG4pKSB7XG4vLyBtYXRjaE1lZGlhXG4oZnVuY3Rpb24oKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdC8vIEZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgbWF0Y2hNZWRpdW0gYXBpIHN1Y2ggYXMgSUUgOSBhbmQgd2Via2l0XG5cdHZhciBzdHlsZU1lZGlhID0gKHNlbGYuc3R5bGVNZWRpYSB8fCBzZWxmLm1lZGlhKTtcblxuXHQvLyBGb3IgdGhvc2UgdGhhdCBkb24ndCBzdXBwb3J0IG1hdGNoTWVkaXVtXG5cdGlmICghc3R5bGVNZWRpYSkge1xuXHRcdHZhciBzdHlsZSAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG5cdFx0XHRzY3JpcHQgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXSxcblx0XHRcdGluZm8gICAgICAgID0gbnVsbDtcblxuXHRcdHN0eWxlLnR5cGUgID0gJ3RleHQvY3NzJztcblx0XHRzdHlsZS5pZCAgICA9ICdtYXRjaG1lZGlhanMtdGVzdCc7XG5cblx0XHRpZiAoIXNjcmlwdCkge1xuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0c2NyaXB0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHN0eWxlLCBzY3JpcHQpO1xuXHRcdH1cblxuXHRcdGluZm8gPSAoJ2dldENvbXB1dGVkU3R5bGUnIGluIHNlbGYpICYmIHNlbGYuZ2V0Q29tcHV0ZWRTdHlsZShzdHlsZSwgbnVsbCk7XG5cblx0XHRzdHlsZU1lZGlhID0ge1xuXHRcdFx0bWF0Y2hNZWRpdW06IGZ1bmN0aW9uKG1lZGlhKSB7XG5cdFx0XHRcdG1lZGlhID0gbWVkaWEucmVwbGFjZSgvXm9ubHlcXHMrLywgJycpO1xuXHRcdFx0XHR2YXIgdGV4dCA9ICdAbWVkaWEgJyArIG1lZGlhICsgJ3sgI21hdGNobWVkaWFqcy10ZXN0IHsgd2lkdGg6IDFweDsgfSB9JztcblxuXHRcdFx0XHRzdHlsZS50ZXh0Q29udGVudCA9IHRleHQ7XG5cblx0XHRcdFx0Ly8gVGVzdCBpZiBtZWRpYSBxdWVyeSBpcyB0cnVlIG9yIGZhbHNlXG5cdFx0XHRcdHJldHVybiBpbmZvLndpZHRoID09PSAnMXB4Jztcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIE1lZGlhUXVlcnlMaXN0KCkge1xuXHRcdHRoaXMubWF0Y2hlcyA9IGZhbHNlO1xuXHRcdHRoaXMubWVkaWEgPSAnaW52YWxpZCc7XG5cdFx0dGhpcy5saXN0ZW5lcnMgPSBbXTtcblx0fVxuXG5cdE1lZGlhUXVlcnlMaXN0LnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKGxpc3RlbmVyKSB7XG5cdFx0dmFyIGxpc3RlbmVySW5kZXggPSB0aGlzLmxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblxuXHRcdGlmIChsaXN0ZW5lckluZGV4ID09PSAtMSkge1xuXHRcdFx0dGhpcy5saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cdFx0fVxuXHR9O1xuXG5cdE1lZGlhUXVlcnlMaXN0LnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKSB7XG5cdFx0dmFyIGxpc3RlbmVySW5kZXggPSB0aGlzLmxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblxuXHRcdGlmIChsaXN0ZW5lckluZGV4ID49IDApIHtcblx0XHRcdHRoaXMubGlzdGVuZXJzLnNwbGljZShsaXN0ZW5lckluZGV4LCAxKTtcblx0XHR9XG5cdH07XG5cblx0c2VsZi5NZWRpYVF1ZXJ5TGlzdCA9IE1lZGlhUXVlcnlMaXN0O1xuXG5cdHNlbGYubWF0Y2hNZWRpYSA9IGZ1bmN0aW9uIG1hdGNoTWVkaWEobWVkaWEpIHtcblx0XHR2YXIgbGlzdCA9IG5ldyBNZWRpYVF1ZXJ5TGlzdCgpO1xuXG5cdFx0aWYgKDAgPT09IGFyZ3VtZW50cy5sZW5ndGgpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vdCBlbm91Z2ggYXJndW1lbnRzIHRvIG1hdGNoTWVkaWEnKTtcblx0XHR9XG5cblx0XHRsaXN0Lm1lZGlhID0gU3RyaW5nKG1lZGlhKTtcblx0XHRsaXN0Lm1hdGNoZXMgPSBzdHlsZU1lZGlhLm1hdGNoTWVkaXVtKG1lZGlhIHx8ICdhbGwnKTtcblxuXHRcdHNlbGYuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIGxpc3RlbmVycyA9IFtdLmNvbmNhdChsaXN0LmFkZExpc3RlbmVyLmxpc3RlbmVycyksIG1hdGNoZXMgPSBzdHlsZU1lZGlhLm1hdGNoTWVkaXVtKG1lZGlhIHx8ICdhbGwnKTtcblxuXHRcdFx0aWYgKG1hdGNoZXMgIT0gbGlzdC5tYXRjaGVzKSB7XG5cdFx0XHRcdGxpc3QubWF0Y2hlcyA9IG1hdGNoZXM7XG5cdFx0XHRcdGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHtcblx0XHRcdFx0XHRsaXN0ZW5lcnNbaW5kZXhdLmNhbGwoc2VsZiwgbGlzdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiBsaXN0O1xuXHR9O1xufSgpKTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgIihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwibWF0Y2hNZWRpYVwiaW4gc2VsZiYmXCJhZGRFdmVudExpc3RlbmVyXCJpbiBzZWxmLm1hdGNoTWVkaWEoXCJhbGxcIilcbikpIHtcbi8vIE1lZGlhUXVlcnlMaXN0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyXG4oZnVuY3Rpb24oZ2xvYmFsKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcblx0XHRpZiAodHlwZSA9PT0gJ2NoYW5nZScpIHtcblx0XHRcdHRoaXMucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdFx0dGhpcy5hZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZ3VtZW50c1syXSAmJiBhcmd1bWVudHNbMl0ub25jZSkge1xuXHRcdFx0dmFyIF90aGlzID0gdGhpcztcblx0XHRcdHZhciByZW1vdmVyID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRfdGhpcy5yZW1vdmVMaXN0ZW5lcihyZW1vdmVyKTtcblx0XHRcdFx0X3RoaXMucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5hZGRMaXN0ZW5lcihyZW1vdmVyKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKHR5cGUgPT09ICdjaGFuZ2UnKSB7XG5cdFx0XHR0aGlzLnJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgb25jaGFuZ2VEZXNjcmlwdG9yID0ge1xuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX29uY2hhbmdlSGFuZGxlciB8fCBudWxsO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAobGlzdGVuZXIpIHtcblx0XHRcdHZhciBfdGhpcyA9IHRoaXM7XG5cdFx0XHRpZiAoIV90aGlzLl9vbmNoYW5nZUxpc3RlbmVyKSB7XG5cdFx0XHRcdF90aGlzLl9vbmNoYW5nZUxpc3RlbmVyID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGlmICh0eXBlb2YgX3RoaXMuX29uY2hhbmdlSGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdF90aGlzLl9vbmNoYW5nZUhhbmRsZXIuY2FsbChfdGhpcywgYXJndW1lbnRzWzBdKTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRfdGhpcy5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBfdGhpcy5fb25jaGFuZ2VMaXN0ZW5lcik7XG5cdFx0XHR9XG5cblx0XHRcdF90aGlzLl9vbmNoYW5nZUhhbmRsZXIgPSBsaXN0ZW5lcjtcblx0XHR9XG5cdH07XG5cblx0aWYgKCdNZWRpYVF1ZXJ5TGlzdCcgaW4gZ2xvYmFsKSB7IC8qIE1vc3QgYnJvd3NlcnMgZXhwb3NlIFwiTWVkaWFRdWVyeUxpc3RcIiBnbG9iYWxseSAqL1xuXHRcdHZhciBfYWRkTGlzdGVuZXIgPSBnbG9iYWwuTWVkaWFRdWVyeUxpc3QucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXHRcdHZhciBfcmVtb3ZlTGlzdGVuZXIgPSBnbG9iYWwuTWVkaWFRdWVyeUxpc3QucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuXG5cdFx0Z2xvYmFsLk1lZGlhUXVlcnlMaXN0LnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKGxpc3RlbmVyKSB7XG5cdFx0XHR2YXIgaGFuZGxlciA9IGxpc3RlbmVyO1xuXHRcdFx0aWYgKGhhbmRsZXIuaGFuZGxlRXZlbnQpIHtcblx0XHRcdFx0aGFuZGxlciA9IGhhbmRsZXIuaGFuZGxlRXZlbnQ7XG5cdFx0XHR9XG5cblx0XHRcdF9hZGRMaXN0ZW5lci5jYWxsKHRoaXMsIGhhbmRsZXIpO1xuXHRcdH07XG5cblx0XHRnbG9iYWwuTWVkaWFRdWVyeUxpc3QucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpIHtcblx0XHRcdHZhciBoYW5kbGVyID0gbGlzdGVuZXI7XG5cdFx0XHRpZiAoaGFuZGxlci5oYW5kbGVFdmVudCkge1xuXHRcdFx0XHRoYW5kbGVyID0gaGFuZGxlci5oYW5kbGVFdmVudDtcblx0XHRcdH1cblxuXHRcdFx0X3JlbW92ZUxpc3RlbmVyLmNhbGwodGhpcywgaGFuZGxlcik7XG5cdFx0fTtcblxuXHRcdGdsb2JhbC5NZWRpYVF1ZXJ5TGlzdC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciA9IGFkZEV2ZW50TGlzdGVuZXI7XG5cblx0XHRnbG9iYWwuTWVkaWFRdWVyeUxpc3QucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSByZW1vdmVFdmVudExpc3RlbmVyO1xuXG5cdFx0Z2xvYmFsLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWwuTWVkaWFRdWVyeUxpc3QucHJvdG90eXBlLCBcIm9uY2hhbmdlXCIsIG9uY2hhbmdlRGVzY3JpcHRvcik7XG5cdH0gZWxzZSB7IC8qIFNhZmFyaSBkb2VzIG5vdCBleHBvc2UgXCJNZWRpYVF1ZXJ5TGlzdFwiIGdsb2JhbGx5ICovXG5cdFx0dmFyIF9tYXRjaE1lZGlhID0gc2VsZi5tYXRjaE1lZGlhO1xuXG5cdFx0c2VsZi5tYXRjaE1lZGlhID0gZnVuY3Rpb24gbWF0Y2hNZWRpYShtZWRpYSkge1xuXHRcdFx0dmFyIF9tcWwgPSBfbWF0Y2hNZWRpYShtZWRpYSk7XG5cblx0XHRcdHZhciBfYWRkTGlzdGVuZXIgPSBfbXFsLmFkZExpc3RlbmVyO1xuXHRcdFx0dmFyIF9yZW1vdmVMaXN0ZW5lciA9IF9tcWwucmVtb3ZlTGlzdGVuZXI7XG5cblx0XHRcdF9tcWwuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiBhZGRMaXN0ZW5lcihsaXN0ZW5lcikge1xuXHRcdFx0XHR2YXIgaGFuZGxlciA9IGxpc3RlbmVyO1xuXHRcdFx0XHRpZiAoaGFuZGxlci5oYW5kbGVFdmVudCkge1xuXHRcdFx0XHRcdGhhbmRsZXIgPSBoYW5kbGVyLmhhbmRsZUV2ZW50O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0X2FkZExpc3RlbmVyLmNhbGwodGhpcywgaGFuZGxlcik7XG5cdFx0XHR9O1xuXG5cdFx0XHRfbXFsLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpIHtcblx0XHRcdFx0dmFyIGhhbmRsZXIgPSBsaXN0ZW5lcjtcblx0XHRcdFx0aWYgKGhhbmRsZXIuaGFuZGxlRXZlbnQpIHtcblx0XHRcdFx0XHRoYW5kbGVyID0gaGFuZGxlci5oYW5kbGVFdmVudDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdF9yZW1vdmVMaXN0ZW5lci5jYWxsKHRoaXMsIGhhbmRsZXIpO1xuXHRcdFx0fTtcblxuXHRcdFx0X21xbC5hZGRFdmVudExpc3RlbmVyID0gYWRkRXZlbnRMaXN0ZW5lcjtcblxuXHRcdFx0X21xbC5yZW1vdmVFdmVudExpc3RlbmVyID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcjtcblxuXHRcdFx0Z2xvYmFsLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShfbXFsLCBcIm9uY2hhbmdlXCIsIG9uY2hhbmdlRGVzY3JpcHRvcik7XG5cblx0XHRcdHJldHVybiBfbXFsO1xuXHRcdH1cblx0fVxufShzZWxmKSk7XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICJcbi8vIF9ET01Ub2tlbkxpc3Rcbi8qXG5Db3B5cmlnaHQgKGMpIDIwMTYsIEpvaG4gR2FyZG5lclxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qL1xudmFyIF9ET01Ub2tlbkxpc3QgPSAoZnVuY3Rpb24oKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblx0dmFyIGRwU3VwcG9ydCA9IHRydWU7XG5cdHZhciBkZWZpbmVHZXR0ZXIgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lLCBmbiwgY29uZmlndXJhYmxlKSB7XG5cdFx0aWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSlcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSA9PT0gZHBTdXBwb3J0ID8gdHJ1ZSA6ICEhY29uZmlndXJhYmxlLFxuXHRcdFx0XHRnZXQ6IGZuXG5cdFx0XHR9KTtcblxuXHRcdGVsc2Ugb2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18obmFtZSwgZm4pO1xuXHR9O1xuXG5cdC8qKiBFbnN1cmUgdGhlIGJyb3dzZXIgYWxsb3dzIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB0byBiZSB1c2VkIG9uIG5hdGl2ZSBKYXZhU2NyaXB0IG9iamVjdHMuICovXG5cdHRyeSB7XG5cdFx0ZGVmaW5lR2V0dGVyKHt9LCBcInN1cHBvcnRcIik7XG5cdH1cblx0Y2F0Y2ggKGUpIHtcblx0XHRkcFN1cHBvcnQgPSBmYWxzZTtcblx0fVxuXG5cblx0dmFyIF9ET01Ub2tlbkxpc3QgPSBmdW5jdGlvbiAoZWwsIHByb3ApIHtcblx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cdFx0dmFyIHRva2VucyA9IFtdO1xuXHRcdHZhciB0b2tlbk1hcCA9IHt9O1xuXHRcdHZhciBsZW5ndGggPSAwO1xuXHRcdHZhciBtYXhMZW5ndGggPSAwO1xuXHRcdHZhciBhZGRJbmRleEdldHRlciA9IGZ1bmN0aW9uIChpKSB7XG5cdFx0XHRkZWZpbmVHZXR0ZXIodGhhdCwgaSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRwcmVvcCgpO1xuXHRcdFx0XHRyZXR1cm4gdG9rZW5zW2ldO1xuXHRcdFx0fSwgZmFsc2UpO1xuXG5cdFx0fTtcblx0XHR2YXIgcmVpbmRleCA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0LyoqIERlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBhcnJheS1saWtlIGFjY2VzcyB0byB0aGUgdG9rZW5MaXN0J3MgY29udGVudHMuICovXG5cdFx0XHRpZiAobGVuZ3RoID49IG1heExlbmd0aClcblx0XHRcdFx0Zm9yICg7IG1heExlbmd0aCA8IGxlbmd0aDsgKyttYXhMZW5ndGgpIHtcblx0XHRcdFx0XHRhZGRJbmRleEdldHRlcihtYXhMZW5ndGgpO1xuXHRcdFx0XHR9XG5cdFx0fTtcblxuXHRcdC8qKiBIZWxwZXIgZnVuY3Rpb24gY2FsbGVkIGF0IHRoZSBzdGFydCBvZiBlYWNoIGNsYXNzIG1ldGhvZC4gSW50ZXJuYWwgdXNlIG9ubHkuICovXG5cdFx0dmFyIHByZW9wID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIGVycm9yO1xuXHRcdFx0dmFyIGk7XG5cdFx0XHR2YXIgYXJncyA9IGFyZ3VtZW50cztcblx0XHRcdHZhciByU3BhY2UgPSAvXFxzKy87XG5cblx0XHRcdC8qKiBWYWxpZGF0ZSB0aGUgdG9rZW4vcyBwYXNzZWQgdG8gYW4gaW5zdGFuY2UgbWV0aG9kLCBpZiBhbnkuICovXG5cdFx0XHRpZiAoYXJncy5sZW5ndGgpXG5cdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKVxuXHRcdFx0XHRcdGlmIChyU3BhY2UudGVzdChhcmdzW2ldKSkge1xuXHRcdFx0XHRcdFx0ZXJyb3IgPSBuZXcgU3ludGF4RXJyb3IoJ1N0cmluZyBcIicgKyBhcmdzW2ldICsgJ1wiICcgKyBcImNvbnRhaW5zXCIgKyAnIGFuIGludmFsaWQgY2hhcmFjdGVyJyk7XG5cdFx0XHRcdFx0XHRlcnJvci5jb2RlID0gNTtcblx0XHRcdFx0XHRcdGVycm9yLm5hbWUgPSBcIkludmFsaWRDaGFyYWN0ZXJFcnJvclwiO1xuXHRcdFx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHRcdFx0fVxuXG5cblx0XHRcdC8qKiBTcGxpdCB0aGUgbmV3IHZhbHVlIGFwYXJ0IGJ5IHdoaXRlc3BhY2UqL1xuXHRcdFx0aWYgKHR5cGVvZiBlbFtwcm9wXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHR0b2tlbnMgPSAoXCJcIiArIGVsW3Byb3BdLmJhc2VWYWwpLnJlcGxhY2UoL15cXHMrfFxccyskL2csIFwiXCIpLnNwbGl0KHJTcGFjZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0b2tlbnMgPSAoXCJcIiArIGVsW3Byb3BdKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBcIlwiKS5zcGxpdChyU3BhY2UpO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiogQXZvaWQgdHJlYXRpbmcgYmxhbmsgc3RyaW5ncyBhcyBzaW5nbGUtaXRlbSB0b2tlbiBsaXN0cyAqL1xuXHRcdFx0aWYgKFwiXCIgPT09IHRva2Vuc1swXSkgdG9rZW5zID0gW107XG5cblx0XHRcdC8qKiBSZXBvcHVsYXRlIHRoZSBpbnRlcm5hbCB0b2tlbiBsaXN0cyAqL1xuXHRcdFx0dG9rZW5NYXAgPSB7fTtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyArK2kpXG5cdFx0XHRcdHRva2VuTWFwW3Rva2Vuc1tpXV0gPSB0cnVlO1xuXHRcdFx0bGVuZ3RoID0gdG9rZW5zLmxlbmd0aDtcblx0XHRcdHJlaW5kZXgoKTtcblx0XHR9O1xuXG5cdFx0LyoqIFBvcHVsYXRlIG91ciBpbnRlcm5hbCB0b2tlbiBsaXN0IGlmIHRoZSB0YXJnZXRlZCBhdHRyaWJ1dGUgb2YgdGhlIHN1YmplY3QgZWxlbWVudCBpc24ndCBlbXB0eS4gKi9cblx0XHRwcmVvcCgpO1xuXG5cdFx0LyoqIFJldHVybiB0aGUgbnVtYmVyIG9mIHRva2VucyBpbiB0aGUgdW5kZXJseWluZyBzdHJpbmcuIFJlYWQtb25seS4gKi9cblx0XHRkZWZpbmVHZXR0ZXIodGhhdCwgXCJsZW5ndGhcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cHJlb3AoKTtcblx0XHRcdHJldHVybiBsZW5ndGg7XG5cdFx0fSk7XG5cblx0XHQvKiogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdG9TdHJpbmcvdG9Mb2NhbGVTdHJpbmcgbWV0aG9kcyB0byByZXR1cm4gYSBzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiB0b2tlbnMgd2hlbiB0eXBlY2FzdC4gKi9cblx0XHR0aGF0LnRvTG9jYWxlU3RyaW5nID1cblx0XHRcdHRoYXQudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHByZW9wKCk7XG5cdFx0XHRcdHJldHVybiB0b2tlbnMuam9pbihcIiBcIik7XG5cdFx0XHR9O1xuXG5cdFx0dGhhdC5pdGVtID0gZnVuY3Rpb24gKGlkeCkge1xuXHRcdFx0cHJlb3AoKTtcblx0XHRcdHJldHVybiB0b2tlbnNbaWR4XTtcblx0XHR9O1xuXG5cdFx0dGhhdC5jb250YWlucyA9IGZ1bmN0aW9uICh0b2tlbikge1xuXHRcdFx0cHJlb3AoKTtcblx0XHRcdHJldHVybiAhIXRva2VuTWFwW3Rva2VuXTtcblx0XHR9O1xuXG5cdFx0dGhhdC5hZGQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRwcmVvcC5hcHBseSh0aGF0LCBhcmdzID0gYXJndW1lbnRzKTtcblxuXHRcdFx0Zm9yICh2YXIgYXJncywgdG9rZW4sIGkgPSAwLCBsID0gYXJncy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcblx0XHRcdFx0dG9rZW4gPSBhcmdzW2ldO1xuXHRcdFx0XHRpZiAoIXRva2VuTWFwW3Rva2VuXSkge1xuXHRcdFx0XHRcdHRva2Vucy5wdXNoKHRva2VuKTtcblx0XHRcdFx0XHR0b2tlbk1hcFt0b2tlbl0gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8qKiBVcGRhdGUgdGhlIHRhcmdldGVkIGF0dHJpYnV0ZSBvZiB0aGUgYXR0YWNoZWQgZWxlbWVudCBpZiB0aGUgdG9rZW4gbGlzdCdzIGNoYW5nZWQuICovXG5cdFx0XHRpZiAobGVuZ3RoICE9PSB0b2tlbnMubGVuZ3RoKSB7XG5cdFx0XHRcdGxlbmd0aCA9IHRva2Vucy5sZW5ndGggPj4+IDA7XG5cdFx0XHRcdGlmICh0eXBlb2YgZWxbcHJvcF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRlbFtwcm9wXS5iYXNlVmFsID0gdG9rZW5zLmpvaW4oXCIgXCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVsW3Byb3BdID0gdG9rZW5zLmpvaW4oXCIgXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlaW5kZXgoKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0dGhhdC5yZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRwcmVvcC5hcHBseSh0aGF0LCBhcmdzID0gYXJndW1lbnRzKTtcblxuXHRcdFx0LyoqIEJ1aWxkIGEgaGFzaCBvZiB0b2tlbiBuYW1lcyB0byBjb21wYXJlIGFnYWluc3Qgd2hlbiByZWNvbGxlY3Rpbmcgb3VyIHRva2VuIGxpc3QuICovXG5cdFx0XHRmb3IgKHZhciBhcmdzLCBpZ25vcmUgPSB7fSwgaSA9IDAsIHQgPSBbXTsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0aWdub3JlW2FyZ3NbaV1dID0gdHJ1ZTtcblx0XHRcdFx0ZGVsZXRlIHRva2VuTWFwW2FyZ3NbaV1dO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiogUnVuIHRocm91Z2ggb3VyIHRva2VucyBsaXN0IGFuZCByZWFzc2lnbiBvbmx5IHRob3NlIHRoYXQgYXJlbid0IGRlZmluZWQgaW4gdGhlIGhhc2ggZGVjbGFyZWQgYWJvdmUuICovXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgKytpKVxuXHRcdFx0XHRpZiAoIWlnbm9yZVt0b2tlbnNbaV1dKSB0LnB1c2godG9rZW5zW2ldKTtcblxuXHRcdFx0dG9rZW5zID0gdDtcblx0XHRcdGxlbmd0aCA9IHQubGVuZ3RoID4+PiAwO1xuXG5cdFx0XHQvKiogVXBkYXRlIHRoZSB0YXJnZXRlZCBhdHRyaWJ1dGUgb2YgdGhlIGF0dGFjaGVkIGVsZW1lbnQuICovXG5cdFx0XHRpZiAodHlwZW9mIGVsW3Byb3BdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdGVsW3Byb3BdLmJhc2VWYWwgPSB0b2tlbnMuam9pbihcIiBcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbFtwcm9wXSA9IHRva2Vucy5qb2luKFwiIFwiKTtcblx0XHRcdH1cblx0XHRcdHJlaW5kZXgoKTtcblx0XHR9O1xuXG5cdFx0dGhhdC50b2dnbGUgPSBmdW5jdGlvbiAodG9rZW4sIGZvcmNlKSB7XG5cdFx0XHRwcmVvcC5hcHBseSh0aGF0LCBbdG9rZW5dKTtcblxuXHRcdFx0LyoqIFRva2VuIHN0YXRlJ3MgYmVpbmcgZm9yY2VkLiAqL1xuXHRcdFx0aWYgKHVuZGVmaW5lZCAhPT0gZm9yY2UpIHtcblx0XHRcdFx0aWYgKGZvcmNlKSB7XG5cdFx0XHRcdFx0dGhhdC5hZGQodG9rZW4pO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoYXQucmVtb3ZlKHRva2VuKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0LyoqIFRva2VuIGFscmVhZHkgZXhpc3RzIGluIHRva2VuTGlzdC4gUmVtb3ZlIGl0LCBhbmQgcmV0dXJuIEZBTFNFLiAqL1xuXHRcdFx0aWYgKHRva2VuTWFwW3Rva2VuXSkge1xuXHRcdFx0XHR0aGF0LnJlbW92ZSh0b2tlbik7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0LyoqIE90aGVyd2lzZSwgYWRkIHRoZSB0b2tlbiBhbmQgcmV0dXJuIFRSVUUuICovXG5cdFx0XHR0aGF0LmFkZCh0b2tlbik7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXG5cdFx0dGhhdC5mb3JFYWNoID0gQXJyYXkucHJvdG90eXBlLmZvckVhY2g7XG5cblx0XHRyZXR1cm4gdGhhdDtcblx0fTtcblxuXHRyZXR1cm4gX0RPTVRva2VuTGlzdDtcbn0oKSk7XG5leHBvcnQgZGVmYXVsdCBfRE9NVG9rZW5MaXN0O1xuIiwgImltcG9ydCBfRE9NVG9rZW5MaXN0IGZyb20gXCJAbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19ET01Ub2tlbkxpc3RcIjtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiRE9NVG9rZW5MaXN0XCJpbiBzZWxmJiZmdW5jdGlvbihlKXtyZXR1cm4hKFwiY2xhc3NMaXN0XCJpbiBlKXx8IWUuY2xhc3NMaXN0LnRvZ2dsZShcInhcIiwhMSkmJiFlLmNsYXNzTmFtZX0oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInhcIikpXG4pKSB7XG4vLyBET01Ub2tlbkxpc3Rcbi8qIGdsb2JhbCBfRE9NVG9rZW5MaXN0ICovXG4oZnVuY3Rpb24gKGdsb2JhbCkge1xuXHR2YXIgbmF0aXZlSW1wbCA9IFwiRE9NVG9rZW5MaXN0XCIgaW4gZ2xvYmFsICYmIGdsb2JhbC5ET01Ub2tlbkxpc3Q7XG5cblx0aWYgKFxuXHRcdFx0IW5hdGl2ZUltcGwgfHxcblx0XHRcdChcblx0XHRcdFx0ISFkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMgJiZcblx0XHRcdFx0ISFkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycpICYmXG5cdFx0XHRcdCEoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJzdmdcIikuY2xhc3NMaXN0IGluc3RhbmNlb2YgRE9NVG9rZW5MaXN0KVxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdGdsb2JhbC5ET01Ub2tlbkxpc3QgPSBfRE9NVG9rZW5MaXN0O1xuXHR9XG5cblx0Ly8gQWRkIHNlY29uZCBhcmd1bWVudCB0byBuYXRpdmUgRE9NVG9rZW5MaXN0LnRvZ2dsZSgpIGlmIG5lY2Vzc2FyeVxuXHQoZnVuY3Rpb24gKCkge1xuXHRcdHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRcdGlmICghKCdjbGFzc0xpc3QnIGluIGUpKSByZXR1cm47XG5cdFx0ZS5jbGFzc0xpc3QudG9nZ2xlKCd4JywgZmFsc2UpO1xuXHRcdGlmICghZS5jbGFzc0xpc3QuY29udGFpbnMoJ3gnKSkgcmV0dXJuO1xuXHRcdGUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUodG9rZW4gLyosIGZvcmNlKi8pIHtcblx0XHRcdHZhciBmb3JjZSA9IGFyZ3VtZW50c1sxXTtcblx0XHRcdGlmIChmb3JjZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZhciBhZGQgPSAhdGhpcy5jb250YWlucyh0b2tlbik7XG5cdFx0XHRcdHRoaXNbYWRkID8gJ2FkZCcgOiAncmVtb3ZlJ10odG9rZW4pO1xuXHRcdFx0XHRyZXR1cm4gYWRkO1xuXHRcdFx0fVxuXHRcdFx0Zm9yY2UgPSAhIWZvcmNlO1xuXHRcdFx0dGhpc1tmb3JjZSA/ICdhZGQnIDogJ3JlbW92ZSddKHRva2VuKTtcblx0XHRcdHJldHVybiBmb3JjZTtcblx0XHR9O1xuXHR9KCkpO1xuXG5cdC8vIEFkZCBtdWx0aXBsZSBhcmd1bWVudHMgdG8gbmF0aXZlIERPTVRva2VuTGlzdC5hZGQoKSBpZiBuZWNlc3Nhcnlcblx0KGZ1bmN0aW9uICgpIHtcblx0XHR2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRpZiAoISgnY2xhc3NMaXN0JyBpbiBlKSkgcmV0dXJuO1xuXHRcdGUuY2xhc3NMaXN0LmFkZCgnYScsICdiJyk7XG5cdFx0aWYgKGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdiJykpIHJldHVybjtcblx0XHR2YXIgbmF0aXZlID0gZS5jbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlLmFkZDtcblx0XHRlLmNsYXNzTGlzdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdFx0XHR2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRuYXRpdmUuY2FsbCh0aGlzLCBhcmdzW2ldKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9KCkpO1xuXG5cdC8vIEFkZCBtdWx0aXBsZSBhcmd1bWVudHMgdG8gbmF0aXZlIERPTVRva2VuTGlzdC5yZW1vdmUoKSBpZiBuZWNlc3Nhcnlcblx0KGZ1bmN0aW9uICgpIHtcblx0XHR2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRpZiAoISgnY2xhc3NMaXN0JyBpbiBlKSkgcmV0dXJuO1xuXHRcdGUuY2xhc3NMaXN0LmFkZCgnYScpO1xuXHRcdGUuY2xhc3NMaXN0LmFkZCgnYicpO1xuXHRcdGUuY2xhc3NMaXN0LnJlbW92ZSgnYScsICdiJyk7XG5cdFx0aWYgKCFlLmNsYXNzTGlzdC5jb250YWlucygnYicpKSByZXR1cm47XG5cdFx0dmFyIG5hdGl2ZSA9IGUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW1vdmU7XG5cdFx0ZS5jbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHZhciBhcmdzID0gYXJndW1lbnRzO1xuXHRcdFx0dmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0bmF0aXZlLmNhbGwodGhpcywgYXJnc1tpXSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fSgpKTtcblxufShzZWxmKSk7XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICJpbXBvcnQgX0RPTVRva2VuTGlzdCBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fRE9NVG9rZW5MaXN0XCI7XG4oZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcInJlcGxhY2VcImluKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuY2xhc3NMaXN0fHx7fSlcbikpIHtcbi8vIERPTVRva2VuTGlzdC5wcm90b3R5cGUucmVwbGFjZVxuKGZ1bmN0aW9uICgpIHtcblx0dmFyIGNsYXNzTGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNsYXNzTGlzdDtcblx0Y2xhc3NMaXN0ICYmIChjbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlLnJlcGxhY2UgPVxuXHRcdGZ1bmN0aW9uICh0b2tlbiwgbmV3VG9rZW4pIHtcblx0XHRcdHZhciB0b2tlblN0cmluZyA9ICcnICsgdG9rZW4sIG5ld1Rva2VuU3RyaW5nID0gJycgKyBuZXdUb2tlbjtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bmV3IERPTUV4Y2VwdGlvbigpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRzZWxmLkRPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uIChtZXNzYWdlLCBuYW1lKSB7XG5cdFx0XHRcdFx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbikpIHJldHVybiBuZXcgRE9NRXhjZXB0aW9uKG1lc3NhZ2UsIG5hbWUpO1xuXHRcdFx0XHRcdHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG5cdFx0XHRcdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZXJyb3I7XG5cdFx0XHRpZiAoISh0b2tlblN0cmluZyAmJiBuZXdUb2tlblN0cmluZykpIGVycm9yID0gJ1N5bnRheEVycm9yJztcblx0XHRcdGlmICghZXJyb3IgJiYgKC9cXHMvLnRlc3QodG9rZW5TdHJpbmcpIHx8IC9cXHMvLnRlc3QobmV3VG9rZW5TdHJpbmcpKSkgZXJyb3IgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcblx0XHRcdGlmIChlcnJvcikgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignRE9NVG9rZW5MaXN0LnJlcGxhY2Ugd2FzIHByb3ZpZGVkIHRva2VucyBcXCcnICsgdG9rZW5TdHJpbmcgKyAnXFwnIGFuZCBcXCcnICsgbmV3VG9rZW5TdHJpbmcgKyAnXFwnJywgZXJyb3IpO1xuXG5cdFx0XHRpZiAoIXRoaXMuY29udGFpbnModG9rZW5TdHJpbmcpKSByZXR1cm4gZmFsc2U7XG5cblx0XHRcdC8vIHRva2Vuc1RvYmVNb3ZlZCBhcmUgXCJ0b2tlblN0cmluZ1wiIGFuZCBhbGwgdG9rZW5zIGZvdW5kIGFmdGVyIGl0XG5cdFx0XHR2YXIgdG9rZW5zVG9iZU1vdmVkID0gW107XG5cdFx0XHR2YXIgbmV3VG9rZW5Gb3VuZCA9IGZhbHNlO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKVxuXHRcdFx0XHRpZiAobmV3VG9rZW5TdHJpbmcgPT09IHRoaXMuaXRlbShpKSkgbmV3VG9rZW5Gb3VuZCA9IHRydWU7XG5cdFx0XHRcdGVsc2UgaWYgKHRva2VuU3RyaW5nID09PSB0aGlzLml0ZW0oaSkpIGJyZWFrO1xuXHRcdFx0Zm9yICg7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB0b2tlbnNUb2JlTW92ZWQucHVzaCh0aGlzLml0ZW0oaSkpO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IHRva2Vuc1RvYmVNb3ZlZC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHR2YXIgY3VycmVudFRva2VuID0gdG9rZW5zVG9iZU1vdmVkW2ldO1xuXHRcdFx0XHRjdXJyZW50VG9rZW4gIT09IG5ld1Rva2VuU3RyaW5nICYmIHRoaXMucmVtb3ZlKGN1cnJlbnRUb2tlbik7XG5cdFx0XHRcdGN1cnJlbnRUb2tlbiAhPT0gdG9rZW5TdHJpbmcgJiYgdGhpcy5hZGQoY3VycmVudFRva2VuKTtcblx0XHRcdFx0Y3VycmVudFRva2VuID09PSB0b2tlblN0cmluZyAmJiAhbmV3VG9rZW5Gb3VuZCAmJiAodGhpcy5yZW1vdmUobmV3VG9rZW5TdHJpbmcpLCB0aGlzLmFkZChuZXdUb2tlblN0cmluZykpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHQpO1xufSkoKTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgIihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwicmVxdWVzdEFuaW1hdGlvbkZyYW1lXCJpbiBzZWxmXG4pKSB7XG4vLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbihmdW5jdGlvbiAoZ2xvYmFsKSB7XG5cdHZhciByYWZQcmVmaXg7XG5cblx0Ly8gZG8gbm90IGluamVjdCBSQUYgaW4gb3JkZXIgdG8gYXZvaWQgYnJva2VuIHBlcmZvcm1hbmNlXG5cdHZhciBub3dPZmZzZXQgPSBEYXRlLm5vdygpO1xuXG5cdC8vIHVzZSBwZXJmb3JtYW5jZSBhcGkgaWYgZXhpc3QsIG90aGVyd2lzZSB1c2UgRGF0ZS5ub3cuXG5cdC8vIERhdGUubm93IHBvbHlmaWxsIHJlcXVpcmVkLlxuXHR2YXIgcG5vdyA9IGZ1bmN0aW9uICgpIHtcblx0XHRpZiAoZ2xvYmFsLnBlcmZvcm1hbmNlICYmIHR5cGVvZiBnbG9iYWwucGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXR1cm4gZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdygpO1xuXHRcdH1cblx0XHQvLyBmYWxsYmFja1xuXHRcdHJldHVybiBEYXRlLm5vdygpIC0gbm93T2Zmc2V0O1xuXHR9O1xuXG5cdGlmICgnbW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lJyBpbiBnbG9iYWwpIHtcblx0XHRyYWZQcmVmaXggPSAnbW96JztcblxuXHR9IGVsc2UgaWYgKCd3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnIGluIGdsb2JhbCkge1xuXHRcdHJhZlByZWZpeCA9ICd3ZWJraXQnO1xuXG5cdH1cblxuXHRpZiAocmFmUHJlZml4KSB7XG5cdFx0Z2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHRcdFx0cmV0dXJuIGdsb2JhbFtyYWZQcmVmaXggKyAnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRjYWxsYmFjayhwbm93KCkpO1xuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHRnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbcmFmUHJlZml4ICsgJ0NhbmNlbEFuaW1hdGlvbkZyYW1lJ107XG5cdH0gZWxzZSB7XG5cblx0XHR2YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xuXG5cdFx0Z2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHRcdFx0aWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXJcblx0XHRcdGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKSxcblx0XHRcdGRlbGF5ID0gMTYgKyBsYXN0VGltZSAtIGN1cnJlbnRUaW1lO1xuXG5cdFx0XHRpZiAoZGVsYXkgPCAwKSB7XG5cdFx0XHRcdGRlbGF5ID0gMDtcblx0XHRcdH1cblxuXHRcdFx0bGFzdFRpbWUgPSBjdXJyZW50VGltZTtcblxuXHRcdFx0cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRsYXN0VGltZSA9IERhdGUubm93KCk7XG5cblx0XHRcdFx0Y2FsbGJhY2socG5vdygpKTtcblx0XHRcdH0sIGRlbGF5KTtcblx0XHR9O1xuXG5cdFx0Z2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGlkKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQoaWQpO1xuXHRcdH07XG5cdH1cbn0oc2VsZikpO1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJmdW5jdGlvblwiPT10eXBlb2YgZG9jdW1lbnQuaGVhZC5hbmltYXRlJiZmdW5jdGlvbigpe3RyeXtyZXR1cm4hIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIikuYW5pbWF0ZSh7b3BhY2l0eTpbMCwxXX0se2RpcmVjdGlvbjpcImFsdGVybmF0ZVwiLGR1cmF0aW9uOjEsaXRlcmF0aW9uczoxfSl9Y2F0Y2godCl7cmV0dXJuITF9fSgpXG4pKSB7XG4vLyBXZWJBbmltYXRpb25zXG4vLyBDb3B5cmlnaHQgMjAxNCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbiFmdW5jdGlvbigpe3ZhciBhPXt9LGI9e307IWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtpZihcIm51bWJlclwiPT10eXBlb2YgYSlyZXR1cm4gYTt2YXIgYj17fTtmb3IodmFyIGMgaW4gYSliW2NdPWFbY107cmV0dXJuIGJ9ZnVuY3Rpb24gZCgpe3RoaXMuX2RlbGF5PTAsdGhpcy5fZW5kRGVsYXk9MCx0aGlzLl9maWxsPVwibm9uZVwiLHRoaXMuX2l0ZXJhdGlvblN0YXJ0PTAsdGhpcy5faXRlcmF0aW9ucz0xLHRoaXMuX2R1cmF0aW9uPTAsdGhpcy5fcGxheWJhY2tSYXRlPTEsdGhpcy5fZGlyZWN0aW9uPVwibm9ybWFsXCIsdGhpcy5fZWFzaW5nPVwibGluZWFyXCIsdGhpcy5fZWFzaW5nRnVuY3Rpb249eH1mdW5jdGlvbiBlKCl7cmV0dXJuIGEuaXNEZXByZWNhdGVkKFwiSW52YWxpZCB0aW1pbmcgaW5wdXRzXCIsXCIyMDE2LTAzLTAyXCIsXCJUeXBlRXJyb3IgZXhjZXB0aW9ucyB3aWxsIGJlIHRocm93biBpbnN0ZWFkLlwiLCEwKX1mdW5jdGlvbiBmKGIsYyxlKXt2YXIgZj1uZXcgZDtyZXR1cm4gYyYmKGYuZmlsbD1cImJvdGhcIixmLmR1cmF0aW9uPVwiYXV0b1wiKSxcIm51bWJlclwiIT10eXBlb2YgYnx8aXNOYU4oYik/dm9pZCAwIT09YiYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYikuZm9yRWFjaChmdW5jdGlvbihjKXtpZihcImF1dG9cIiE9YltjXSl7aWYoKFwibnVtYmVyXCI9PXR5cGVvZiBmW2NdfHxcImR1cmF0aW9uXCI9PWMpJiYoXCJudW1iZXJcIiE9dHlwZW9mIGJbY118fGlzTmFOKGJbY10pKSlyZXR1cm47aWYoXCJmaWxsXCI9PWMmJi0xPT12LmluZGV4T2YoYltjXSkpcmV0dXJuO2lmKFwiZGlyZWN0aW9uXCI9PWMmJi0xPT13LmluZGV4T2YoYltjXSkpcmV0dXJuO2lmKFwicGxheWJhY2tSYXRlXCI9PWMmJjEhPT1iW2NdJiZhLmlzRGVwcmVjYXRlZChcIkFuaW1hdGlvbkVmZmVjdFRpbWluZy5wbGF5YmFja1JhdGVcIixcIjIwMTQtMTEtMjhcIixcIlVzZSBBbmltYXRpb24ucGxheWJhY2tSYXRlIGluc3RlYWQuXCIpKXJldHVybjtmW2NdPWJbY119fSk6Zi5kdXJhdGlvbj1iLGZ9ZnVuY3Rpb24gZyhhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYSYmKGE9aXNOYU4oYSk/e2R1cmF0aW9uOjB9OntkdXJhdGlvbjphfSksYX1mdW5jdGlvbiBoKGIsYyl7cmV0dXJuIGI9YS5udW1lcmljVGltaW5nVG9PYmplY3QoYiksZihiLGMpfWZ1bmN0aW9uIGkoYSxiLGMsZCl7cmV0dXJuIGE8MHx8YT4xfHxjPDB8fGM+MT94OmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGYoYSxiLGMpe3JldHVybiAzKmEqKDEtYykqKDEtYykqYyszKmIqKDEtYykqYypjK2MqYypjfWlmKGU8PTApe3ZhciBnPTA7cmV0dXJuIGE+MD9nPWIvYTohYiYmYz4wJiYoZz1kL2MpLGcqZX1pZihlPj0xKXt2YXIgaD0wO3JldHVybiBjPDE/aD0oZC0xKS8oYy0xKToxPT1jJiZhPDEmJihoPShiLTEpLyhhLTEpKSwxK2gqKGUtMSl9Zm9yKHZhciBpPTAsaj0xO2k8ajspe3ZhciBrPShpK2opLzIsbD1mKGEsYyxrKTtpZihNYXRoLmFicyhlLWwpPDFlLTUpcmV0dXJuIGYoYixkLGspO2w8ZT9pPWs6aj1rfXJldHVybiBmKGIsZCxrKX19ZnVuY3Rpb24gaihhLGIpe3JldHVybiBmdW5jdGlvbihjKXtpZihjPj0xKXJldHVybiAxO3ZhciBkPTEvYTtyZXR1cm4oYys9YipkKS1jJWR9fWZ1bmN0aW9uIGsoYSl7Q3x8KEM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKS5zdHlsZSksQy5hbmltYXRpb25UaW1pbmdGdW5jdGlvbj1cIlwiLEMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb249YTt2YXIgYj1DLmFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uO2lmKFwiXCI9PWImJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKGErXCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIGVhc2luZ1wiKTtyZXR1cm4gYn1mdW5jdGlvbiBsKGEpe2lmKFwibGluZWFyXCI9PWEpcmV0dXJuIHg7dmFyIGI9RS5leGVjKGEpO2lmKGIpcmV0dXJuIGkuYXBwbHkodGhpcyxiLnNsaWNlKDEpLm1hcChOdW1iZXIpKTt2YXIgYz1GLmV4ZWMoYSk7aWYoYylyZXR1cm4gaihOdW1iZXIoY1sxXSksQSk7dmFyIGQ9Ry5leGVjKGEpO3JldHVybiBkP2ooTnVtYmVyKGRbMV0pLHtzdGFydDp5LG1pZGRsZTp6LGVuZDpBfVtkWzJdXSk6QlthXXx8eH1mdW5jdGlvbiBtKGEpe3JldHVybiBNYXRoLmFicyhuKGEpL2EucGxheWJhY2tSYXRlKX1mdW5jdGlvbiBuKGEpe3JldHVybiAwPT09YS5kdXJhdGlvbnx8MD09PWEuaXRlcmF0aW9ucz8wOmEuZHVyYXRpb24qYS5pdGVyYXRpb25zfWZ1bmN0aW9uIG8oYSxiLGMpe2lmKG51bGw9PWIpcmV0dXJuIEg7dmFyIGQ9Yy5kZWxheSthK2MuZW5kRGVsYXk7cmV0dXJuIGI8TWF0aC5taW4oYy5kZWxheSxkKT9JOmI+PU1hdGgubWluKGMuZGVsYXkrYSxkKT9KOkt9ZnVuY3Rpb24gcChhLGIsYyxkLGUpe3N3aXRjaChkKXtjYXNlIEk6cmV0dXJuXCJiYWNrd2FyZHNcIj09Ynx8XCJib3RoXCI9PWI/MDpudWxsO2Nhc2UgSzpyZXR1cm4gYy1lO2Nhc2UgSjpyZXR1cm5cImZvcndhcmRzXCI9PWJ8fFwiYm90aFwiPT1iP2E6bnVsbDtjYXNlIEg6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHEoYSxiLGMsZCxlKXt2YXIgZj1lO3JldHVybiAwPT09YT9iIT09SSYmKGYrPWMpOmYrPWQvYSxmfWZ1bmN0aW9uIHIoYSxiLGMsZCxlLGYpe3ZhciBnPWE9PT0xLzA/YiUxOmElMTtyZXR1cm4gMCE9PWd8fGMhPT1KfHwwPT09ZHx8MD09PWUmJjAhPT1mfHwoZz0xKSxnfWZ1bmN0aW9uIHMoYSxiLGMsZCl7cmV0dXJuIGE9PT1KJiZiPT09MS8wPzEvMDoxPT09Yz9NYXRoLmZsb29yKGQpLTE6TWF0aC5mbG9vcihkKX1mdW5jdGlvbiB0KGEsYixjKXt2YXIgZD1hO2lmKFwibm9ybWFsXCIhPT1hJiZcInJldmVyc2VcIiE9PWEpe3ZhciBlPWI7XCJhbHRlcm5hdGUtcmV2ZXJzZVwiPT09YSYmKGUrPTEpLGQ9XCJub3JtYWxcIixlIT09MS8wJiZlJTIhPTAmJihkPVwicmV2ZXJzZVwiKX1yZXR1cm5cIm5vcm1hbFwiPT09ZD9jOjEtY31mdW5jdGlvbiB1KGEsYixjKXt2YXIgZD1vKGEsYixjKSxlPXAoYSxjLmZpbGwsYixkLGMuZGVsYXkpO2lmKG51bGw9PT1lKXJldHVybiBudWxsO3ZhciBmPXEoYy5kdXJhdGlvbixkLGMuaXRlcmF0aW9ucyxlLGMuaXRlcmF0aW9uU3RhcnQpLGc9cihmLGMuaXRlcmF0aW9uU3RhcnQsZCxjLml0ZXJhdGlvbnMsZSxjLmR1cmF0aW9uKSxoPXMoZCxjLml0ZXJhdGlvbnMsZyxmKSxpPXQoYy5kaXJlY3Rpb24saCxnKTtyZXR1cm4gYy5fZWFzaW5nRnVuY3Rpb24oaSl9dmFyIHY9XCJiYWNrd2FyZHN8Zm9yd2FyZHN8Ym90aHxub25lXCIuc3BsaXQoXCJ8XCIpLHc9XCJyZXZlcnNlfGFsdGVybmF0ZXxhbHRlcm5hdGUtcmV2ZXJzZVwiLnNwbGl0KFwifFwiKSx4PWZ1bmN0aW9uKGEpe3JldHVybiBhfTtkLnByb3RvdHlwZT17X3NldE1lbWJlcjpmdW5jdGlvbihiLGMpe3RoaXNbXCJfXCIrYl09Yyx0aGlzLl9lZmZlY3QmJih0aGlzLl9lZmZlY3QuX3RpbWluZ0lucHV0W2JdPWMsdGhpcy5fZWZmZWN0Ll90aW1pbmc9YS5ub3JtYWxpemVUaW1pbmdJbnB1dCh0aGlzLl9lZmZlY3QuX3RpbWluZ0lucHV0KSx0aGlzLl9lZmZlY3QuYWN0aXZlRHVyYXRpb249YS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbih0aGlzLl9lZmZlY3QuX3RpbWluZyksdGhpcy5fZWZmZWN0Ll9hbmltYXRpb24mJnRoaXMuX2VmZmVjdC5fYW5pbWF0aW9uLl9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbigpKX0sZ2V0IHBsYXliYWNrUmF0ZSgpe3JldHVybiB0aGlzLl9wbGF5YmFja1JhdGV9LHNldCBkZWxheShhKXt0aGlzLl9zZXRNZW1iZXIoXCJkZWxheVwiLGEpfSxnZXQgZGVsYXkoKXtyZXR1cm4gdGhpcy5fZGVsYXl9LHNldCBlbmREZWxheShhKXt0aGlzLl9zZXRNZW1iZXIoXCJlbmREZWxheVwiLGEpfSxnZXQgZW5kRGVsYXkoKXtyZXR1cm4gdGhpcy5fZW5kRGVsYXl9LHNldCBmaWxsKGEpe3RoaXMuX3NldE1lbWJlcihcImZpbGxcIixhKX0sZ2V0IGZpbGwoKXtyZXR1cm4gdGhpcy5fZmlsbH0sc2V0IGl0ZXJhdGlvblN0YXJ0KGEpe2lmKChpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRpb25TdGFydCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlciwgcmVjZWl2ZWQ6IFwiK2EpO3RoaXMuX3NldE1lbWJlcihcIml0ZXJhdGlvblN0YXJ0XCIsYSl9LGdldCBpdGVyYXRpb25TdGFydCgpe3JldHVybiB0aGlzLl9pdGVyYXRpb25TdGFydH0sc2V0IGR1cmF0aW9uKGEpe2lmKFwiYXV0b1wiIT1hJiYoaXNOYU4oYSl8fGE8MCkmJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiZHVyYXRpb24gbXVzdCBiZSBub24tbmVnYXRpdmUgb3IgYXV0bywgcmVjZWl2ZWQ6IFwiK2EpO3RoaXMuX3NldE1lbWJlcihcImR1cmF0aW9uXCIsYSl9LGdldCBkdXJhdGlvbigpe3JldHVybiB0aGlzLl9kdXJhdGlvbn0sc2V0IGRpcmVjdGlvbihhKXt0aGlzLl9zZXRNZW1iZXIoXCJkaXJlY3Rpb25cIixhKX0sZ2V0IGRpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXJlY3Rpb259LHNldCBlYXNpbmcoYSl7dGhpcy5fZWFzaW5nRnVuY3Rpb249bChrKGEpKSx0aGlzLl9zZXRNZW1iZXIoXCJlYXNpbmdcIixhKX0sZ2V0IGVhc2luZygpe3JldHVybiB0aGlzLl9lYXNpbmd9LHNldCBpdGVyYXRpb25zKGEpe2lmKChpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRpb25zIG11c3QgYmUgbm9uLW5lZ2F0aXZlLCByZWNlaXZlZDogXCIrYSk7dGhpcy5fc2V0TWVtYmVyKFwiaXRlcmF0aW9uc1wiLGEpfSxnZXQgaXRlcmF0aW9ucygpe3JldHVybiB0aGlzLl9pdGVyYXRpb25zfX07dmFyIHk9MSx6PS41LEE9MCxCPXtlYXNlOmkoLjI1LC4xLC4yNSwxKSxcImVhc2UtaW5cIjppKC40MiwwLDEsMSksXCJlYXNlLW91dFwiOmkoMCwwLC41OCwxKSxcImVhc2UtaW4tb3V0XCI6aSguNDIsMCwuNTgsMSksXCJzdGVwLXN0YXJ0XCI6aigxLHkpLFwic3RlcC1taWRkbGVcIjpqKDEseiksXCJzdGVwLWVuZFwiOmooMSxBKX0sQz1udWxsLEQ9XCJcXFxccyooLT9cXFxcZCtcXFxcLj9cXFxcZCp8LT9cXFxcLlxcXFxkKylcXFxccypcIixFPW5ldyBSZWdFeHAoXCJjdWJpYy1iZXppZXJcXFxcKFwiK0QrXCIsXCIrRCtcIixcIitEK1wiLFwiK0QrXCJcXFxcKVwiKSxGPS9zdGVwc1xcKFxccyooXFxkKylcXHMqXFwpLyxHPS9zdGVwc1xcKFxccyooXFxkKylcXHMqLFxccyooc3RhcnR8bWlkZGxlfGVuZClcXHMqXFwpLyxIPTAsST0xLEo9MixLPTM7YS5jbG9uZVRpbWluZ0lucHV0PWMsYS5tYWtlVGltaW5nPWYsYS5udW1lcmljVGltaW5nVG9PYmplY3Q9ZyxhLm5vcm1hbGl6ZVRpbWluZ0lucHV0PWgsYS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbj1tLGEuY2FsY3VsYXRlSXRlcmF0aW9uUHJvZ3Jlc3M9dSxhLmNhbGN1bGF0ZVBoYXNlPW8sYS5ub3JtYWxpemVFYXNpbmc9ayxhLnBhcnNlRWFzaW5nRnVuY3Rpb249bH0oYSksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7cmV0dXJuIGEgaW4gaz9rW2FdW2JdfHxiOmJ9ZnVuY3Rpb24gZChhKXtyZXR1cm5cImRpc3BsYXlcIj09PWF8fDA9PT1hLmxhc3RJbmRleE9mKFwiYW5pbWF0aW9uXCIsMCl8fDA9PT1hLmxhc3RJbmRleE9mKFwidHJhbnNpdGlvblwiLDApfWZ1bmN0aW9uIGUoYSxiLGUpe2lmKCFkKGEpKXt2YXIgZj1oW2FdO2lmKGYpe2kuc3R5bGVbYV09Yjtmb3IodmFyIGcgaW4gZil7dmFyIGo9ZltnXSxrPWkuc3R5bGVbal07ZVtqXT1jKGosayl9fWVsc2UgZVthXT1jKGEsYil9fWZ1bmN0aW9uIGYoYSl7dmFyIGI9W107Zm9yKHZhciBjIGluIGEpaWYoIShjIGluW1wiZWFzaW5nXCIsXCJvZmZzZXRcIixcImNvbXBvc2l0ZVwiXSkpe3ZhciBkPWFbY107QXJyYXkuaXNBcnJheShkKXx8KGQ9W2RdKTtmb3IodmFyIGUsZj1kLmxlbmd0aCxnPTA7ZzxmO2crKyllPXt9LGUub2Zmc2V0PVwib2Zmc2V0XCJpbiBhP2Eub2Zmc2V0OjE9PWY/MTpnLyhmLTEpLFwiZWFzaW5nXCJpbiBhJiYoZS5lYXNpbmc9YS5lYXNpbmcpLFwiY29tcG9zaXRlXCJpbiBhJiYoZS5jb21wb3NpdGU9YS5jb21wb3NpdGUpLGVbY109ZFtnXSxiLnB1c2goZSl9cmV0dXJuIGIuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLm9mZnNldC1iLm9mZnNldH0pLGJ9ZnVuY3Rpb24gZyhiKXtmdW5jdGlvbiBjKCl7dmFyIGE9ZC5sZW5ndGg7bnVsbD09ZFthLTFdLm9mZnNldCYmKGRbYS0xXS5vZmZzZXQ9MSksYT4xJiZudWxsPT1kWzBdLm9mZnNldCYmKGRbMF0ub2Zmc2V0PTApO2Zvcih2YXIgYj0wLGM9ZFswXS5vZmZzZXQsZT0xO2U8YTtlKyspe3ZhciBmPWRbZV0ub2Zmc2V0O2lmKG51bGwhPWYpe2Zvcih2YXIgZz0xO2c8ZS1iO2crKylkW2IrZ10ub2Zmc2V0PWMrKGYtYykqZy8oZS1iKTtiPWUsYz1mfX19aWYobnVsbD09YilyZXR1cm5bXTt3aW5kb3cuU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3ImJkFycmF5LnByb3RvdHlwZS5mcm9tJiZiW1N5bWJvbC5pdGVyYXRvcl0mJihiPUFycmF5LmZyb20oYikpLEFycmF5LmlzQXJyYXkoYil8fChiPWYoYikpO2Zvcih2YXIgZD1iLm1hcChmdW5jdGlvbihiKXt2YXIgYz17fTtmb3IodmFyIGQgaW4gYil7dmFyIGY9YltkXTtpZihcIm9mZnNldFwiPT1kKXtpZihudWxsIT1mKXtpZihmPU51bWJlcihmKSwhaXNGaW5pdGUoZikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIktleWZyYW1lIG9mZnNldHMgbXVzdCBiZSBudW1iZXJzLlwiKTtpZihmPDB8fGY+MSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS5cIil9fWVsc2UgaWYoXCJjb21wb3NpdGVcIj09ZCl7aWYoXCJhZGRcIj09Znx8XCJhY2N1bXVsYXRlXCI9PWYpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsbmFtZTpcIk5vdFN1cHBvcnRlZEVycm9yXCIsbWVzc2FnZTpcImFkZCBjb21wb3NpdGluZyBpcyBub3Qgc3VwcG9ydGVkXCJ9O2lmKFwicmVwbGFjZVwiIT1mKXRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGNvbXBvc2l0ZSBtb2RlIFwiK2YrXCIuXCIpfWVsc2UgZj1cImVhc2luZ1wiPT1kP2Eubm9ybWFsaXplRWFzaW5nKGYpOlwiXCIrZjtlKGQsZixjKX1yZXR1cm4gdm9pZCAwPT1jLm9mZnNldCYmKGMub2Zmc2V0PW51bGwpLHZvaWQgMD09Yy5lYXNpbmcmJihjLmVhc2luZz1cImxpbmVhclwiKSxjfSksZz0hMCxoPS0xLzAsaT0wO2k8ZC5sZW5ndGg7aSsrKXt2YXIgaj1kW2ldLm9mZnNldDtpZihudWxsIT1qKXtpZihqPGgpdGhyb3cgbmV3IFR5cGVFcnJvcihcIktleWZyYW1lcyBhcmUgbm90IGxvb3NlbHkgc29ydGVkIGJ5IG9mZnNldC4gU29ydCBvciBzcGVjaWZ5IG9mZnNldHMuXCIpO2g9an1lbHNlIGc9ITF9cmV0dXJuIGQ9ZC5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEub2Zmc2V0Pj0wJiZhLm9mZnNldDw9MX0pLGd8fGMoKSxkfXZhciBoPXtiYWNrZ3JvdW5kOltcImJhY2tncm91bmRJbWFnZVwiLFwiYmFja2dyb3VuZFBvc2l0aW9uXCIsXCJiYWNrZ3JvdW5kU2l6ZVwiLFwiYmFja2dyb3VuZFJlcGVhdFwiLFwiYmFja2dyb3VuZEF0dGFjaG1lbnRcIixcImJhY2tncm91bmRPcmlnaW5cIixcImJhY2tncm91bmRDbGlwXCIsXCJiYWNrZ3JvdW5kQ29sb3JcIl0sYm9yZGVyOltcImJvcmRlclRvcENvbG9yXCIsXCJib3JkZXJUb3BTdHlsZVwiLFwiYm9yZGVyVG9wV2lkdGhcIixcImJvcmRlclJpZ2h0Q29sb3JcIixcImJvcmRlclJpZ2h0U3R5bGVcIixcImJvcmRlclJpZ2h0V2lkdGhcIixcImJvcmRlckJvdHRvbUNvbG9yXCIsXCJib3JkZXJCb3R0b21TdHlsZVwiLFwiYm9yZGVyQm90dG9tV2lkdGhcIixcImJvcmRlckxlZnRDb2xvclwiLFwiYm9yZGVyTGVmdFN0eWxlXCIsXCJib3JkZXJMZWZ0V2lkdGhcIl0sYm9yZGVyQm90dG9tOltcImJvcmRlckJvdHRvbVdpZHRoXCIsXCJib3JkZXJCb3R0b21TdHlsZVwiLFwiYm9yZGVyQm90dG9tQ29sb3JcIl0sYm9yZGVyQ29sb3I6W1wiYm9yZGVyVG9wQ29sb3JcIixcImJvcmRlclJpZ2h0Q29sb3JcIixcImJvcmRlckJvdHRvbUNvbG9yXCIsXCJib3JkZXJMZWZ0Q29sb3JcIl0sYm9yZGVyTGVmdDpbXCJib3JkZXJMZWZ0V2lkdGhcIixcImJvcmRlckxlZnRTdHlsZVwiLFwiYm9yZGVyTGVmdENvbG9yXCJdLGJvcmRlclJhZGl1czpbXCJib3JkZXJUb3BMZWZ0UmFkaXVzXCIsXCJib3JkZXJUb3BSaWdodFJhZGl1c1wiLFwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXNcIixcImJvcmRlckJvdHRvbUxlZnRSYWRpdXNcIl0sYm9yZGVyUmlnaHQ6W1wiYm9yZGVyUmlnaHRXaWR0aFwiLFwiYm9yZGVyUmlnaHRTdHlsZVwiLFwiYm9yZGVyUmlnaHRDb2xvclwiXSxib3JkZXJUb3A6W1wiYm9yZGVyVG9wV2lkdGhcIixcImJvcmRlclRvcFN0eWxlXCIsXCJib3JkZXJUb3BDb2xvclwiXSxib3JkZXJXaWR0aDpbXCJib3JkZXJUb3BXaWR0aFwiLFwiYm9yZGVyUmlnaHRXaWR0aFwiLFwiYm9yZGVyQm90dG9tV2lkdGhcIixcImJvcmRlckxlZnRXaWR0aFwiXSxmbGV4OltcImZsZXhHcm93XCIsXCJmbGV4U2hyaW5rXCIsXCJmbGV4QmFzaXNcIl0sZm9udDpbXCJmb250RmFtaWx5XCIsXCJmb250U2l6ZVwiLFwiZm9udFN0eWxlXCIsXCJmb250VmFyaWFudFwiLFwiZm9udFdlaWdodFwiLFwibGluZUhlaWdodFwiXSxtYXJnaW46W1wibWFyZ2luVG9wXCIsXCJtYXJnaW5SaWdodFwiLFwibWFyZ2luQm90dG9tXCIsXCJtYXJnaW5MZWZ0XCJdLG91dGxpbmU6W1wib3V0bGluZUNvbG9yXCIsXCJvdXRsaW5lU3R5bGVcIixcIm91dGxpbmVXaWR0aFwiXSxwYWRkaW5nOltcInBhZGRpbmdUb3BcIixcInBhZGRpbmdSaWdodFwiLFwicGFkZGluZ0JvdHRvbVwiLFwicGFkZGluZ0xlZnRcIl19LGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFwiZGl2XCIpLGo9e3RoaW46XCIxcHhcIixtZWRpdW06XCIzcHhcIix0aGljazpcIjVweFwifSxrPXtib3JkZXJCb3R0b21XaWR0aDpqLGJvcmRlckxlZnRXaWR0aDpqLGJvcmRlclJpZ2h0V2lkdGg6aixib3JkZXJUb3BXaWR0aDpqLGZvbnRTaXplOntcInh4LXNtYWxsXCI6XCI2MCVcIixcIngtc21hbGxcIjpcIjc1JVwiLHNtYWxsOlwiODklXCIsbWVkaXVtOlwiMTAwJVwiLGxhcmdlOlwiMTIwJVwiLFwieC1sYXJnZVwiOlwiMTUwJVwiLFwieHgtbGFyZ2VcIjpcIjIwMCVcIn0sZm9udFdlaWdodDp7bm9ybWFsOlwiNDAwXCIsYm9sZDpcIjcwMFwifSxvdXRsaW5lV2lkdGg6aix0ZXh0U2hhZG93Ontub25lOlwiMHB4IDBweCAwcHggdHJhbnNwYXJlbnRcIn0sYm94U2hhZG93Ontub25lOlwiMHB4IDBweCAwcHggMHB4IHRyYW5zcGFyZW50XCJ9fTthLmNvbnZlcnRUb0FycmF5Rm9ybT1mLGEubm9ybWFsaXplS2V5ZnJhbWVzPWd9KGEpLGZ1bmN0aW9uKGEpe3ZhciBiPXt9O2EuaXNEZXByZWNhdGVkPWZ1bmN0aW9uKGEsYyxkLGUpe3ZhciBmPWU/XCJhcmVcIjpcImlzXCIsZz1uZXcgRGF0ZSxoPW5ldyBEYXRlKGMpO3JldHVybiBoLnNldE1vbnRoKGguZ2V0TW9udGgoKSszKSwhKGc8aCYmKGEgaW4gYnx8Y29uc29sZS53YXJuKFwiV2ViIEFuaW1hdGlvbnM6IFwiK2ErXCIgXCIrZitcIiBkZXByZWNhdGVkIGFuZCB3aWxsIHN0b3Agd29ya2luZyBvbiBcIitoLnRvRGF0ZVN0cmluZygpK1wiLiBcIitkKSxiW2FdPSEwLDEpKX0sYS5kZXByZWNhdGVkPWZ1bmN0aW9uKGIsYyxkLGUpe3ZhciBmPWU/XCJhcmVcIjpcImlzXCI7aWYoYS5pc0RlcHJlY2F0ZWQoYixjLGQsZSkpdGhyb3cgbmV3IEVycm9yKGIrXCIgXCIrZitcIiBubyBsb25nZXIgc3VwcG9ydGVkLiBcIitkKX19KGEpLGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFuaW1hdGUpe3ZhciBjPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hbmltYXRlKFtdLDApLGQ9ITA7aWYoYyYmKGQ9ITEsXCJwbGF5fGN1cnJlbnRUaW1lfHBhdXNlfHJldmVyc2V8cGxheWJhY2tSYXRlfGNhbmNlbHxmaW5pc2h8c3RhcnRUaW1lfHBsYXlTdGF0ZVwiLnNwbGl0KFwifFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZvaWQgMD09PWNbYV0mJihkPSEwKX0pKSwhZClyZXR1cm59IWZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe2Zvcih2YXIgYj17fSxjPTA7YzxhLmxlbmd0aDtjKyspZm9yKHZhciBkIGluIGFbY10paWYoXCJvZmZzZXRcIiE9ZCYmXCJlYXNpbmdcIiE9ZCYmXCJjb21wb3NpdGVcIiE9ZCl7dmFyIGU9e29mZnNldDphW2NdLm9mZnNldCxlYXNpbmc6YVtjXS5lYXNpbmcsdmFsdWU6YVtjXVtkXX07YltkXT1iW2RdfHxbXSxiW2RdLnB1c2goZSl9Zm9yKHZhciBmIGluIGIpe3ZhciBnPWJbZl07aWYoMCE9Z1swXS5vZmZzZXR8fDEhPWdbZy5sZW5ndGgtMV0ub2Zmc2V0KXRocm93e3R5cGU6RE9NRXhjZXB0aW9uLk5PVF9TVVBQT1JURURfRVJSLG5hbWU6XCJOb3RTdXBwb3J0ZWRFcnJvclwiLG1lc3NhZ2U6XCJQYXJ0aWFsIGtleWZyYW1lcyBhcmUgbm90IHN1cHBvcnRlZFwifX1yZXR1cm4gYn1mdW5jdGlvbiBlKGMpe3ZhciBkPVtdO2Zvcih2YXIgZSBpbiBjKWZvcih2YXIgZj1jW2VdLGc9MDtnPGYubGVuZ3RoLTE7ZysrKXt2YXIgaD1nLGk9ZysxLGo9ZltoXS5vZmZzZXQsaz1mW2ldLm9mZnNldCxsPWosbT1rOzA9PWcmJihsPS0xLzAsMD09ayYmKGk9aCkpLGc9PWYubGVuZ3RoLTImJihtPTEvMCwxPT1qJiYoaD1pKSksZC5wdXNoKHthcHBseUZyb206bCxhcHBseVRvOm0sc3RhcnRPZmZzZXQ6ZltoXS5vZmZzZXQsZW5kT2Zmc2V0OmZbaV0ub2Zmc2V0LGVhc2luZ0Z1bmN0aW9uOmEucGFyc2VFYXNpbmdGdW5jdGlvbihmW2hdLmVhc2luZykscHJvcGVydHk6ZSxpbnRlcnBvbGF0aW9uOmIucHJvcGVydHlJbnRlcnBvbGF0aW9uKGUsZltoXS52YWx1ZSxmW2ldLnZhbHVlKX0pfXJldHVybiBkLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5zdGFydE9mZnNldC1iLnN0YXJ0T2Zmc2V0fSksZH1iLmNvbnZlcnRFZmZlY3RJbnB1dD1mdW5jdGlvbihjKXt2YXIgZj1hLm5vcm1hbGl6ZUtleWZyYW1lcyhjKSxnPWQoZiksaD1lKGcpO3JldHVybiBmdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpaC5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGM+PWEuYXBwbHlGcm9tJiZjPGEuYXBwbHlUb30pLmZvckVhY2goZnVuY3Rpb24oZCl7dmFyIGU9Yy1kLnN0YXJ0T2Zmc2V0LGY9ZC5lbmRPZmZzZXQtZC5zdGFydE9mZnNldCxnPTA9PWY/MDpkLmVhc2luZ0Z1bmN0aW9uKGUvZik7Yi5hcHBseShhLGQucHJvcGVydHksZC5pbnRlcnBvbGF0aW9uKGcpKX0pO2Vsc2UgZm9yKHZhciBkIGluIGcpXCJvZmZzZXRcIiE9ZCYmXCJlYXNpbmdcIiE9ZCYmXCJjb21wb3NpdGVcIiE9ZCYmYi5jbGVhcihhLGQpfX19KGEsYiksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuIGEucmVwbGFjZSgvLSguKS9nLGZ1bmN0aW9uKGEsYil7cmV0dXJuIGIudG9VcHBlckNhc2UoKX0pfWZ1bmN0aW9uIGUoYSxiLGMpe2hbY109aFtjXXx8W10saFtjXS5wdXNoKFthLGJdKX1mdW5jdGlvbiBmKGEsYixjKXtmb3IodmFyIGY9MDtmPGMubGVuZ3RoO2YrKyl7ZShhLGIsZChjW2ZdKSl9fWZ1bmN0aW9uIGcoYyxlLGYpe3ZhciBnPWM7Ly0vLnRlc3QoYykmJiFhLmlzRGVwcmVjYXRlZChcIkh5cGhlbmF0ZWQgcHJvcGVydHkgbmFtZXNcIixcIjIwMTYtMDMtMjJcIixcIlVzZSBjYW1lbENhc2UgaW5zdGVhZC5cIiwhMCkmJihnPWQoYykpLFwiaW5pdGlhbFwiIT1lJiZcImluaXRpYWxcIiE9Znx8KFwiaW5pdGlhbFwiPT1lJiYoZT1pW2ddKSxcImluaXRpYWxcIj09ZiYmKGY9aVtnXSkpO2Zvcih2YXIgaj1lPT1mP1tdOmhbZ10saz0wO2omJms8ai5sZW5ndGg7aysrKXt2YXIgbD1qW2tdWzBdKGUpLG09altrXVswXShmKTtpZih2b2lkIDAhPT1sJiZ2b2lkIDAhPT1tKXt2YXIgbj1qW2tdWzFdKGwsbSk7aWYobil7dmFyIG89Yi5JbnRlcnBvbGF0aW9uLmFwcGx5KG51bGwsbik7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiAwPT1hP2U6MT09YT9mOm8oYSl9fX19cmV0dXJuIGIuSW50ZXJwb2xhdGlvbighMSwhMCxmdW5jdGlvbihhKXtyZXR1cm4gYT9mOmV9KX12YXIgaD17fTtiLmFkZFByb3BlcnRpZXNIYW5kbGVyPWY7dmFyIGk9e2JhY2tncm91bmRDb2xvcjpcInRyYW5zcGFyZW50XCIsYmFja2dyb3VuZFBvc2l0aW9uOlwiMCUgMCVcIixib3JkZXJCb3R0b21Db2xvcjpcImN1cnJlbnRDb2xvclwiLGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6XCIwcHhcIixib3JkZXJCb3R0b21SaWdodFJhZGl1czpcIjBweFwiLGJvcmRlckJvdHRvbVdpZHRoOlwiM3B4XCIsYm9yZGVyTGVmdENvbG9yOlwiY3VycmVudENvbG9yXCIsYm9yZGVyTGVmdFdpZHRoOlwiM3B4XCIsYm9yZGVyUmlnaHRDb2xvcjpcImN1cnJlbnRDb2xvclwiLGJvcmRlclJpZ2h0V2lkdGg6XCIzcHhcIixib3JkZXJTcGFjaW5nOlwiMnB4XCIsYm9yZGVyVG9wQ29sb3I6XCJjdXJyZW50Q29sb3JcIixib3JkZXJUb3BMZWZ0UmFkaXVzOlwiMHB4XCIsYm9yZGVyVG9wUmlnaHRSYWRpdXM6XCIwcHhcIixib3JkZXJUb3BXaWR0aDpcIjNweFwiLGJvdHRvbTpcImF1dG9cIixjbGlwOlwicmVjdCgwcHgsIDBweCwgMHB4LCAwcHgpXCIsY29sb3I6XCJibGFja1wiLGZvbnRTaXplOlwiMTAwJVwiLGZvbnRXZWlnaHQ6XCI0MDBcIixoZWlnaHQ6XCJhdXRvXCIsbGVmdDpcImF1dG9cIixsZXR0ZXJTcGFjaW5nOlwibm9ybWFsXCIsbGluZUhlaWdodDpcIjEyMCVcIixtYXJnaW5Cb3R0b206XCIwcHhcIixtYXJnaW5MZWZ0OlwiMHB4XCIsbWFyZ2luUmlnaHQ6XCIwcHhcIixtYXJnaW5Ub3A6XCIwcHhcIixtYXhIZWlnaHQ6XCJub25lXCIsbWF4V2lkdGg6XCJub25lXCIsbWluSGVpZ2h0OlwiMHB4XCIsbWluV2lkdGg6XCIwcHhcIixvcGFjaXR5OlwiMS4wXCIsb3V0bGluZUNvbG9yOlwiaW52ZXJ0XCIsb3V0bGluZU9mZnNldDpcIjBweFwiLG91dGxpbmVXaWR0aDpcIjNweFwiLHBhZGRpbmdCb3R0b206XCIwcHhcIixwYWRkaW5nTGVmdDpcIjBweFwiLHBhZGRpbmdSaWdodDpcIjBweFwiLHBhZGRpbmdUb3A6XCIwcHhcIixyaWdodDpcImF1dG9cIixzdHJva2VEYXNoYXJyYXk6XCJub25lXCIsc3Ryb2tlRGFzaG9mZnNldDpcIjBweFwiLHRleHRJbmRlbnQ6XCIwcHhcIix0ZXh0U2hhZG93OlwiMHB4IDBweCAwcHggdHJhbnNwYXJlbnRcIix0b3A6XCJhdXRvXCIsdHJhbnNmb3JtOlwiXCIsdmVydGljYWxBbGlnbjpcIjBweFwiLHZpc2liaWxpdHk6XCJ2aXNpYmxlXCIsd2lkdGg6XCJhdXRvXCIsd29yZFNwYWNpbmc6XCJub3JtYWxcIix6SW5kZXg6XCJhdXRvXCJ9O2IucHJvcGVydHlJbnRlcnBvbGF0aW9uPWd9KGEsYiksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYil7dmFyIGM9YS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbihiKSxkPWZ1bmN0aW9uKGQpe3JldHVybiBhLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGMsZCxiKX07cmV0dXJuIGQuX3RvdGFsRHVyYXRpb249Yi5kZWxheStjK2IuZW5kRGVsYXksZH1iLktleWZyYW1lRWZmZWN0PWZ1bmN0aW9uKGMsZSxmLGcpe3ZhciBoLGk9ZChhLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGYpKSxqPWIuY29udmVydEVmZmVjdElucHV0KGUpLGs9ZnVuY3Rpb24oKXtqKGMsaCl9O3JldHVybiBrLl91cGRhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT0oaD1pKGEpKX0say5fY2xlYXI9ZnVuY3Rpb24oKXtqKGMsbnVsbCl9LGsuX2hhc1NhbWVUYXJnZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGM9PT1hfSxrLl90YXJnZXQ9YyxrLl90b3RhbER1cmF0aW9uPWkuX3RvdGFsRHVyYXRpb24say5faWQ9ZyxrfX0oYSxiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtyZXR1cm4hKCFiLm5hbWVzcGFjZVVSSXx8LTE9PWIubmFtZXNwYWNlVVJJLmluZGV4T2YoXCIvc3ZnXCIpKSYmKGcgaW4gYXx8KGFbZ109L1RyaWRlbnR8TVNJRXxJRU1vYmlsZXxFZGdlfEFuZHJvaWQgNC9pLnRlc3QoYS5uYXZpZ2F0b3IudXNlckFnZW50KSksYVtnXSl9ZnVuY3Rpb24gZChhLGIsYyl7Yy5lbnVtZXJhYmxlPSEwLGMuY29uZmlndXJhYmxlPSEwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIsYyl9ZnVuY3Rpb24gZShhKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fc3Vycm9nYXRlU3R5bGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFwiZGl2XCIpLnN0eWxlLHRoaXMuX3N0eWxlPWEuc3R5bGUsdGhpcy5fbGVuZ3RoPTAsdGhpcy5faXNBbmltYXRlZFByb3BlcnR5PXt9LHRoaXMuX3VwZGF0ZVN2Z1RyYW5zZm9ybUF0dHI9Yyh3aW5kb3csYSksdGhpcy5fc2F2ZWRUcmFuc2Zvcm1BdHRyPW51bGw7Zm9yKHZhciBiPTA7Yjx0aGlzLl9zdHlsZS5sZW5ndGg7YisrKXt2YXIgZD10aGlzLl9zdHlsZVtiXTt0aGlzLl9zdXJyb2dhdGVTdHlsZVtkXT10aGlzLl9zdHlsZVtkXX10aGlzLl91cGRhdGVJbmRpY2VzKCl9ZnVuY3Rpb24gZihhKXtpZighYS5fd2ViQW5pbWF0aW9uc1BhdGNoZWRTdHlsZSl7dmFyIGI9bmV3IGUoYSk7dHJ5e2QoYSxcInN0eWxlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBifX0pfWNhdGNoKGIpe2Euc3R5bGUuX3NldD1mdW5jdGlvbihiLGMpe2Euc3R5bGVbYl09Y30sYS5zdHlsZS5fY2xlYXI9ZnVuY3Rpb24oYil7YS5zdHlsZVtiXT1cIlwifX1hLl93ZWJBbmltYXRpb25zUGF0Y2hlZFN0eWxlPWEuc3R5bGV9fXZhciBnPVwiX3dlYkFuaW1hdGlvbnNVcGRhdGVTdmdUcmFuc2Zvcm1BdHRyXCIsaD17Y3NzVGV4dDoxLGxlbmd0aDoxLHBhcmVudFJ1bGU6MX0saT17Z2V0UHJvcGVydHlDU1NWYWx1ZToxLGdldFByb3BlcnR5UHJpb3JpdHk6MSxnZXRQcm9wZXJ0eVZhbHVlOjEsaXRlbToxLHJlbW92ZVByb3BlcnR5OjEsc2V0UHJvcGVydHk6MX0saj17cmVtb3ZlUHJvcGVydHk6MSxzZXRQcm9wZXJ0eToxfTtlLnByb3RvdHlwZT17Z2V0IGNzc1RleHQoKXtyZXR1cm4gdGhpcy5fc3Vycm9nYXRlU3R5bGUuY3NzVGV4dH0sc2V0IGNzc1RleHQoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPHRoaXMuX3N1cnJvZ2F0ZVN0eWxlLmxlbmd0aDtjKyspYlt0aGlzLl9zdXJyb2dhdGVTdHlsZVtjXV09ITA7dGhpcy5fc3Vycm9nYXRlU3R5bGUuY3NzVGV4dD1hLHRoaXMuX3VwZGF0ZUluZGljZXMoKTtmb3IodmFyIGM9MDtjPHRoaXMuX3N1cnJvZ2F0ZVN0eWxlLmxlbmd0aDtjKyspYlt0aGlzLl9zdXJyb2dhdGVTdHlsZVtjXV09ITA7Zm9yKHZhciBkIGluIGIpdGhpcy5faXNBbmltYXRlZFByb3BlcnR5W2RdfHx0aGlzLl9zdHlsZS5zZXRQcm9wZXJ0eShkLHRoaXMuX3N1cnJvZ2F0ZVN0eWxlLmdldFByb3BlcnR5VmFsdWUoZCkpfSxnZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX3N1cnJvZ2F0ZVN0eWxlLmxlbmd0aH0sZ2V0IHBhcmVudFJ1bGUoKXtyZXR1cm4gdGhpcy5fc3R5bGUucGFyZW50UnVsZX0sX3VwZGF0ZUluZGljZXM6ZnVuY3Rpb24oKXtmb3IoO3RoaXMuX2xlbmd0aDx0aGlzLl9zdXJyb2dhdGVTdHlsZS5sZW5ndGg7KU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHRoaXMuX2xlbmd0aCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdXJyb2dhdGVTdHlsZVthXX19KHRoaXMuX2xlbmd0aCl9KSx0aGlzLl9sZW5ndGgrKztmb3IoO3RoaXMuX2xlbmd0aD50aGlzLl9zdXJyb2dhdGVTdHlsZS5sZW5ndGg7KXRoaXMuX2xlbmd0aC0tLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHRoaXMuX2xlbmd0aCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6dm9pZCAwfSl9LF9zZXQ6ZnVuY3Rpb24oYixjKXt0aGlzLl9zdHlsZVtiXT1jLHRoaXMuX2lzQW5pbWF0ZWRQcm9wZXJ0eVtiXT0hMCx0aGlzLl91cGRhdGVTdmdUcmFuc2Zvcm1BdHRyJiZcInRyYW5zZm9ybVwiPT1hLnVucHJlZml4ZWRQcm9wZXJ0eU5hbWUoYikmJihudWxsPT10aGlzLl9zYXZlZFRyYW5zZm9ybUF0dHImJih0aGlzLl9zYXZlZFRyYW5zZm9ybUF0dHI9dGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIikpLHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsYS50cmFuc2Zvcm1Ub1N2Z01hdHJpeChjKSkpfSxfY2xlYXI6ZnVuY3Rpb24oYil7dGhpcy5fc3R5bGVbYl09dGhpcy5fc3Vycm9nYXRlU3R5bGVbYl0sdGhpcy5fdXBkYXRlU3ZnVHJhbnNmb3JtQXR0ciYmXCJ0cmFuc2Zvcm1cIj09YS51bnByZWZpeGVkUHJvcGVydHlOYW1lKGIpJiYodGhpcy5fc2F2ZWRUcmFuc2Zvcm1BdHRyP3RoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsdGhpcy5fc2F2ZWRUcmFuc2Zvcm1BdHRyKTp0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcInRyYW5zZm9ybVwiKSx0aGlzLl9zYXZlZFRyYW5zZm9ybUF0dHI9bnVsbCksZGVsZXRlIHRoaXMuX2lzQW5pbWF0ZWRQcm9wZXJ0eVtiXX19O2Zvcih2YXIgayBpbiBpKWUucHJvdG90eXBlW2tdPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5fc3Vycm9nYXRlU3R5bGVbYV0uYXBwbHkodGhpcy5fc3Vycm9nYXRlU3R5bGUsYXJndW1lbnRzKTtyZXR1cm4gYiYmKHRoaXMuX2lzQW5pbWF0ZWRQcm9wZXJ0eVthcmd1bWVudHNbMF1dfHx0aGlzLl9zdHlsZVthXS5hcHBseSh0aGlzLl9zdHlsZSxhcmd1bWVudHMpLHRoaXMuX3VwZGF0ZUluZGljZXMoKSksY319KGssayBpbiBqKTtmb3IodmFyIGwgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlKWwgaW4gaHx8bCBpbiBpfHxmdW5jdGlvbihhKXtkKGUucHJvdG90eXBlLGEse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdXJyb2dhdGVTdHlsZVthXX0sc2V0OmZ1bmN0aW9uKGIpe3RoaXMuX3N1cnJvZ2F0ZVN0eWxlW2FdPWIsdGhpcy5fdXBkYXRlSW5kaWNlcygpLHRoaXMuX2lzQW5pbWF0ZWRQcm9wZXJ0eVthXXx8KHRoaXMuX3N0eWxlW2FdPWIpfX0pfShsKTthLmFwcGx5PWZ1bmN0aW9uKGIsYyxkKXtmKGIpLGIuc3R5bGUuX3NldChhLnByb3BlcnR5TmFtZShjKSxkKX0sYS5jbGVhcj1mdW5jdGlvbihiLGMpe2IuX3dlYkFuaW1hdGlvbnNQYXRjaGVkU3R5bGUmJmIuc3R5bGUuX2NsZWFyKGEucHJvcGVydHlOYW1lKGMpKX19KGIpLGZ1bmN0aW9uKGEpe3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGIsYyl7dmFyIGQ9XCJcIjtyZXR1cm4gYyYmYy5pZCYmKGQ9Yy5pZCksYS50aW1lbGluZS5fcGxheShhLktleWZyYW1lRWZmZWN0KHRoaXMsYixjLGQpKX19KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIsZCl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGEmJlwibnVtYmVyXCI9PXR5cGVvZiBiKXJldHVybiBhKigxLWQpK2IqZDtpZihcImJvb2xlYW5cIj09dHlwZW9mIGEmJlwiYm9vbGVhblwiPT10eXBlb2YgYilyZXR1cm4gZDwuNT9hOmI7aWYoYS5sZW5ndGg9PWIubGVuZ3RoKXtmb3IodmFyIGU9W10sZj0wO2Y8YS5sZW5ndGg7ZisrKWUucHVzaChjKGFbZl0sYltmXSxkKSk7cmV0dXJuIGV9dGhyb3dcIk1pc21hdGNoZWQgaW50ZXJwb2xhdGlvbiBhcmd1bWVudHMgXCIrYStcIjpcIitifWEuSW50ZXJwb2xhdGlvbj1mdW5jdGlvbihhLGIsZCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBkKGMoYSxiLGUpKX19fShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGMpe3JldHVybiBNYXRoLm1heChNYXRoLm1pbihhLGMpLGIpfWZ1bmN0aW9uIGQoYixkLGUpe3ZhciBmPWEuZG90KGIsZCk7Zj1jKGYsLTEsMSk7dmFyIGc9W107aWYoMT09PWYpZz1iO2Vsc2UgZm9yKHZhciBoPU1hdGguYWNvcyhmKSxpPTEqTWF0aC5zaW4oZSpoKS9NYXRoLnNxcnQoMS1mKmYpLGo9MDtqPDQ7aisrKWcucHVzaChiW2pdKihNYXRoLmNvcyhlKmgpLWYqaSkrZFtqXSppKTtyZXR1cm4gZ312YXIgZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXtmb3IodmFyIGM9W1swLDAsMCwwXSxbMCwwLDAsMF0sWzAsMCwwLDBdLFswLDAsMCwwXV0sZD0wO2Q8NDtkKyspZm9yKHZhciBlPTA7ZTw0O2UrKylmb3IodmFyIGY9MDtmPDQ7ZisrKWNbZF1bZV0rPWJbZF1bZl0qYVtmXVtlXTtyZXR1cm4gY31mdW5jdGlvbiBiKGEpe3JldHVybiAwPT1hWzBdWzJdJiYwPT1hWzBdWzNdJiYwPT1hWzFdWzJdJiYwPT1hWzFdWzNdJiYwPT1hWzJdWzBdJiYwPT1hWzJdWzFdJiYxPT1hWzJdWzJdJiYwPT1hWzJdWzNdJiYwPT1hWzNdWzJdJiYxPT1hWzNdWzNdfWZ1bmN0aW9uIGMoYyxkLGUsZixnKXtmb3IodmFyIGg9W1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsMCwxLDBdLFswLDAsMCwxXV0saT0wO2k8NDtpKyspaFtpXVszXT1nW2ldO2Zvcih2YXIgaT0wO2k8MztpKyspZm9yKHZhciBqPTA7ajwzO2orKyloWzNdW2ldKz1jW2pdKmhbal1baV07dmFyIGs9ZlswXSxsPWZbMV0sbT1mWzJdLG49ZlszXSxvPVtbMSwwLDAsMF0sWzAsMSwwLDBdLFswLDAsMSwwXSxbMCwwLDAsMV1dO29bMF1bMF09MS0yKihsKmwrbSptKSxvWzBdWzFdPTIqKGsqbC1tKm4pLG9bMF1bMl09MiooayptK2wqbiksb1sxXVswXT0yKihrKmwrbSpuKSxvWzFdWzFdPTEtMiooayprK20qbSksb1sxXVsyXT0yKihsKm0taypuKSxvWzJdWzBdPTIqKGsqbS1sKm4pLG9bMl1bMV09MioobCptK2sqbiksb1syXVsyXT0xLTIqKGsqaytsKmwpLGg9YShoLG8pO3ZhciBwPVtbMSwwLDAsMF0sWzAsMSwwLDBdLFswLDAsMSwwXSxbMCwwLDAsMV1dO2VbMl0mJihwWzJdWzFdPWVbMl0saD1hKGgscCkpLGVbMV0mJihwWzJdWzFdPTAscFsyXVswXT1lWzBdLGg9YShoLHApKSxlWzBdJiYocFsyXVswXT0wLHBbMV1bMF09ZVswXSxoPWEoaCxwKSk7Zm9yKHZhciBpPTA7aTwzO2krKylmb3IodmFyIGo9MDtqPDM7aisrKWhbaV1bal0qPWRbaV07cmV0dXJuIGIoaCk/W2hbMF1bMF0saFswXVsxXSxoWzFdWzBdLGhbMV1bMV0saFszXVswXSxoWzNdWzFdXTpoWzBdLmNvbmNhdChoWzFdLGhbMl0saFszXSl9cmV0dXJuIGN9KCk7YS5jb21wb3NlTWF0cml4PWUsYS5xdWF0PWR9KGIpLGZ1bmN0aW9uKGEsYixjKXthLnNlcXVlbmNlTnVtYmVyPTA7dmFyIGQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMudGFyZ2V0PWEsdGhpcy5jdXJyZW50VGltZT1iLHRoaXMudGltZWxpbmVUaW1lPWMsdGhpcy50eXBlPVwiZmluaXNoXCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfTtiLkFuaW1hdGlvbj1mdW5jdGlvbihiKXt0aGlzLmlkPVwiXCIsYiYmYi5faWQmJih0aGlzLmlkPWIuX2lkKSx0aGlzLl9zZXF1ZW5jZU51bWJlcj1hLnNlcXVlbmNlTnVtYmVyKyssdGhpcy5fY3VycmVudFRpbWU9MCx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLl9wYXVzZWQ9ITEsdGhpcy5fcGxheWJhY2tSYXRlPTEsdGhpcy5faW5UaW1lbGluZT0hMCx0aGlzLl9maW5pc2hlZEZsYWc9ITAsdGhpcy5vbmZpbmlzaD1udWxsLHRoaXMuX2ZpbmlzaEhhbmRsZXJzPVtdLHRoaXMuX2VmZmVjdD1iLHRoaXMuX2luRWZmZWN0PXRoaXMuX2VmZmVjdC5fdXBkYXRlKDApLHRoaXMuX2lkbGU9ITAsdGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSExfSxiLkFuaW1hdGlvbi5wcm90b3R5cGU9e19lbnN1cmVBbGl2ZTpmdW5jdGlvbigpe3RoaXMucGxheWJhY2tSYXRlPDAmJjA9PT10aGlzLmN1cnJlbnRUaW1lP3RoaXMuX2luRWZmZWN0PXRoaXMuX2VmZmVjdC5fdXBkYXRlKC0xKTp0aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSh0aGlzLmN1cnJlbnRUaW1lKSx0aGlzLl9pblRpbWVsaW5lfHwhdGhpcy5faW5FZmZlY3QmJnRoaXMuX2ZpbmlzaGVkRmxhZ3x8KHRoaXMuX2luVGltZWxpbmU9ITAsYi50aW1lbGluZS5fYW5pbWF0aW9ucy5wdXNoKHRoaXMpKX0sX3RpY2tDdXJyZW50VGltZTpmdW5jdGlvbihhLGIpe2EhPXRoaXMuX2N1cnJlbnRUaW1lJiYodGhpcy5fY3VycmVudFRpbWU9YSx0aGlzLl9pc0ZpbmlzaGVkJiYhYiYmKHRoaXMuX2N1cnJlbnRUaW1lPXRoaXMuX3BsYXliYWNrUmF0ZT4wP3RoaXMuX3RvdGFsRHVyYXRpb246MCksdGhpcy5fZW5zdXJlQWxpdmUoKSl9LGdldCBjdXJyZW50VGltZSgpe3JldHVybiB0aGlzLl9pZGxlfHx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc/bnVsbDp0aGlzLl9jdXJyZW50VGltZX0sc2V0IGN1cnJlbnRUaW1lKGEpe2E9K2EsaXNOYU4oYSl8fChiLnJlc3RhcnQoKSx0aGlzLl9wYXVzZWR8fG51bGw9PXRoaXMuX3N0YXJ0VGltZXx8KHRoaXMuX3N0YXJ0VGltZT10aGlzLl90aW1lbGluZS5jdXJyZW50VGltZS1hL3RoaXMuX3BsYXliYWNrUmF0ZSksdGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSExLHRoaXMuX2N1cnJlbnRUaW1lIT1hJiYodGhpcy5faWRsZSYmKHRoaXMuX2lkbGU9ITEsdGhpcy5fcGF1c2VkPSEwKSx0aGlzLl90aWNrQ3VycmVudFRpbWUoYSwhMCksYi5hcHBseURpcnRpZWRBbmltYXRpb24odGhpcykpKX0sZ2V0IHN0YXJ0VGltZSgpe3JldHVybiB0aGlzLl9zdGFydFRpbWV9LHNldCBzdGFydFRpbWUoYSl7YT0rYSxpc05hTihhKXx8dGhpcy5fcGF1c2VkfHx0aGlzLl9pZGxlfHwodGhpcy5fc3RhcnRUaW1lPWEsdGhpcy5fdGlja0N1cnJlbnRUaW1lKCh0aGlzLl90aW1lbGluZS5jdXJyZW50VGltZS10aGlzLl9zdGFydFRpbWUpKnRoaXMucGxheWJhY2tSYXRlKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSl9LGdldCBwbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlfSxzZXQgcGxheWJhY2tSYXRlKGEpe2lmKGEhPXRoaXMuX3BsYXliYWNrUmF0ZSl7dmFyIGM9dGhpcy5jdXJyZW50VGltZTt0aGlzLl9wbGF5YmFja1JhdGU9YSx0aGlzLl9zdGFydFRpbWU9bnVsbCxcInBhdXNlZFwiIT10aGlzLnBsYXlTdGF0ZSYmXCJpZGxlXCIhPXRoaXMucGxheVN0YXRlJiYodGhpcy5fZmluaXNoZWRGbGFnPSExLHRoaXMuX2lkbGU9ITEsdGhpcy5fZW5zdXJlQWxpdmUoKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSksbnVsbCE9YyYmKHRoaXMuY3VycmVudFRpbWU9Yyl9fSxnZXQgX2lzRmluaXNoZWQoKXtyZXR1cm4hdGhpcy5faWRsZSYmKHRoaXMuX3BsYXliYWNrUmF0ZT4wJiZ0aGlzLl9jdXJyZW50VGltZT49dGhpcy5fdG90YWxEdXJhdGlvbnx8dGhpcy5fcGxheWJhY2tSYXRlPDAmJnRoaXMuX2N1cnJlbnRUaW1lPD0wKX0sZ2V0IF90b3RhbER1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdC5fdG90YWxEdXJhdGlvbn0sZ2V0IHBsYXlTdGF0ZSgpe3JldHVybiB0aGlzLl9pZGxlP1wiaWRsZVwiOm51bGw9PXRoaXMuX3N0YXJ0VGltZSYmIXRoaXMuX3BhdXNlZCYmMCE9dGhpcy5wbGF5YmFja1JhdGV8fHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz9cInBlbmRpbmdcIjp0aGlzLl9wYXVzZWQ/XCJwYXVzZWRcIjp0aGlzLl9pc0ZpbmlzaGVkP1wiZmluaXNoZWRcIjpcInJ1bm5pbmdcIn0sX3Jld2luZDpmdW5jdGlvbigpe2lmKHRoaXMuX3BsYXliYWNrUmF0ZT49MCl0aGlzLl9jdXJyZW50VGltZT0wO2Vsc2V7aWYoISh0aGlzLl90b3RhbER1cmF0aW9uPDEvMCkpdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcIlVuYWJsZSB0byByZXdpbmQgbmVnYXRpdmUgcGxheWJhY2sgcmF0ZSBhbmltYXRpb24gd2l0aCBpbmZpbml0ZSBkdXJhdGlvblwiLFwiSW52YWxpZFN0YXRlRXJyb3JcIik7dGhpcy5fY3VycmVudFRpbWU9dGhpcy5fdG90YWxEdXJhdGlvbn19LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLl9wYXVzZWQ9ITEsKHRoaXMuX2lzRmluaXNoZWR8fHRoaXMuX2lkbGUpJiYodGhpcy5fcmV3aW5kKCksdGhpcy5fc3RhcnRUaW1lPW51bGwpLHRoaXMuX2ZpbmlzaGVkRmxhZz0hMSx0aGlzLl9pZGxlPSExLHRoaXMuX2Vuc3VyZUFsaXZlKCksYi5hcHBseURpcnRpZWRBbmltYXRpb24odGhpcyl9LHBhdXNlOmZ1bmN0aW9uKCl7dGhpcy5faXNGaW5pc2hlZHx8dGhpcy5fcGF1c2VkfHx0aGlzLl9pZGxlP3RoaXMuX2lkbGUmJih0aGlzLl9yZXdpbmQoKSx0aGlzLl9pZGxlPSExKTp0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc9ITAsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5fcGF1c2VkPSEwfSxmaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9pZGxlfHwodGhpcy5jdXJyZW50VGltZT10aGlzLl9wbGF5YmFja1JhdGU+MD90aGlzLl90b3RhbER1cmF0aW9uOjAsdGhpcy5fc3RhcnRUaW1lPXRoaXMuX3RvdGFsRHVyYXRpb24tdGhpcy5jdXJyZW50VGltZSx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc9ITEsYi5hcHBseURpcnRpZWRBbmltYXRpb24odGhpcykpfSxjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLl9pbkVmZmVjdCYmKHRoaXMuX2luRWZmZWN0PSExLHRoaXMuX2lkbGU9ITAsdGhpcy5fcGF1c2VkPSExLHRoaXMuX2ZpbmlzaGVkRmxhZz0hMCx0aGlzLl9jdXJyZW50VGltZT0wLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuX2VmZmVjdC5fdXBkYXRlKG51bGwpLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKX0scmV2ZXJzZTpmdW5jdGlvbigpe3RoaXMucGxheWJhY2tSYXRlKj0tMSx0aGlzLnBsYXkoKX0sYWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGImJlwiZmluaXNoXCI9PWEmJnRoaXMuX2ZpbmlzaEhhbmRsZXJzLnB1c2goYil9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXtpZihcImZpbmlzaFwiPT1hKXt2YXIgYz10aGlzLl9maW5pc2hIYW5kbGVycy5pbmRleE9mKGIpO2M+PTAmJnRoaXMuX2ZpbmlzaEhhbmRsZXJzLnNwbGljZShjLDEpfX0sX2ZpcmVFdmVudHM6ZnVuY3Rpb24oYSl7aWYodGhpcy5faXNGaW5pc2hlZCl7aWYoIXRoaXMuX2ZpbmlzaGVkRmxhZyl7dmFyIGI9bmV3IGQodGhpcyx0aGlzLl9jdXJyZW50VGltZSxhKSxjPXRoaXMuX2ZpbmlzaEhhbmRsZXJzLmNvbmNhdCh0aGlzLm9uZmluaXNoP1t0aGlzLm9uZmluaXNoXTpbXSk7c2V0VGltZW91dChmdW5jdGlvbigpe2MuZm9yRWFjaChmdW5jdGlvbihhKXthLmNhbGwoYi50YXJnZXQsYil9KX0sMCksdGhpcy5fZmluaXNoZWRGbGFnPSEwfX1lbHNlIHRoaXMuX2ZpbmlzaGVkRmxhZz0hMX0sX3RpY2s6ZnVuY3Rpb24oYSxiKXt0aGlzLl9pZGxlfHx0aGlzLl9wYXVzZWR8fChudWxsPT10aGlzLl9zdGFydFRpbWU/YiYmKHRoaXMuc3RhcnRUaW1lPWEtdGhpcy5fY3VycmVudFRpbWUvdGhpcy5wbGF5YmFja1JhdGUpOnRoaXMuX2lzRmluaXNoZWR8fHRoaXMuX3RpY2tDdXJyZW50VGltZSgoYS10aGlzLl9zdGFydFRpbWUpKnRoaXMucGxheWJhY2tSYXRlKSksYiYmKHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMSx0aGlzLl9maXJlRXZlbnRzKGEpKX0sZ2V0IF9uZWVkc1RpY2soKXtyZXR1cm4gdGhpcy5wbGF5U3RhdGUgaW57cGVuZGluZzoxLHJ1bm5pbmc6MX18fCF0aGlzLl9maW5pc2hlZEZsYWd9LF90YXJnZXRBbmltYXRpb25zOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fZWZmZWN0Ll90YXJnZXQ7cmV0dXJuIGEuX2FjdGl2ZUFuaW1hdGlvbnN8fChhLl9hY3RpdmVBbmltYXRpb25zPVtdKSxhLl9hY3RpdmVBbmltYXRpb25zfSxfbWFya1RhcmdldDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX3RhcmdldEFuaW1hdGlvbnMoKTstMT09PWEuaW5kZXhPZih0aGlzKSYmYS5wdXNoKHRoaXMpfSxfdW5tYXJrVGFyZ2V0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fdGFyZ2V0QW5pbWF0aW9ucygpLGI9YS5pbmRleE9mKHRoaXMpOy0xIT09YiYmYS5zcGxpY2UoYiwxKX19fShhLGIpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3ZhciBiPWo7aj1bXSxhPHEuY3VycmVudFRpbWUmJihhPXEuY3VycmVudFRpbWUpLHEuX2FuaW1hdGlvbnMuc29ydChlKSxxLl9hbmltYXRpb25zPWgoYSwhMCxxLl9hbmltYXRpb25zKVswXSxiLmZvckVhY2goZnVuY3Rpb24oYil7YlsxXShhKX0pLGcoKSxsPXZvaWQgMH1mdW5jdGlvbiBlKGEsYil7cmV0dXJuIGEuX3NlcXVlbmNlTnVtYmVyLWIuX3NlcXVlbmNlTnVtYmVyfWZ1bmN0aW9uIGYoKXt0aGlzLl9hbmltYXRpb25zPVtdLHRoaXMuY3VycmVudFRpbWU9d2luZG93LnBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2Uubm93KCk6MH1mdW5jdGlvbiBnKCl7by5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EoKX0pLG8ubGVuZ3RoPTB9ZnVuY3Rpb24gaChhLGMsZCl7cD0hMCxuPSExLGIudGltZWxpbmUuY3VycmVudFRpbWU9YSxtPSExO3ZhciBlPVtdLGY9W10sZz1bXSxoPVtdO3JldHVybiBkLmZvckVhY2goZnVuY3Rpb24oYil7Yi5fdGljayhhLGMpLGIuX2luRWZmZWN0PyhmLnB1c2goYi5fZWZmZWN0KSxiLl9tYXJrVGFyZ2V0KCkpOihlLnB1c2goYi5fZWZmZWN0KSxiLl91bm1hcmtUYXJnZXQoKSksYi5fbmVlZHNUaWNrJiYobT0hMCk7dmFyIGQ9Yi5faW5FZmZlY3R8fGIuX25lZWRzVGljaztiLl9pblRpbWVsaW5lPWQsZD9nLnB1c2goYik6aC5wdXNoKGIpfSksby5wdXNoLmFwcGx5KG8sZSksby5wdXNoLmFwcGx5KG8sZiksbSYmcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7fSkscD0hMSxbZyxoXX12YXIgaT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLGo9W10saz0wO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7dmFyIGI9aysrO3JldHVybiAwPT1qLmxlbmd0aCYmaShkKSxqLnB1c2goW2IsYV0pLGJ9LHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZT1mdW5jdGlvbihhKXtqLmZvckVhY2goZnVuY3Rpb24oYil7YlswXT09YSYmKGJbMV09ZnVuY3Rpb24oKXt9KX0pfSxmLnByb3RvdHlwZT17X3BsYXk6ZnVuY3Rpb24oYyl7Yy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYy50aW1pbmcpO3ZhciBkPW5ldyBiLkFuaW1hdGlvbihjKTtyZXR1cm4gZC5faWRsZT0hMSxkLl90aW1lbGluZT10aGlzLHRoaXMuX2FuaW1hdGlvbnMucHVzaChkKSxiLnJlc3RhcnQoKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbihkKSxkfX07dmFyIGw9dm9pZCAwLG09ITEsbj0hMTtiLnJlc3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbXx8KG09ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7fSksbj0hMCksbn0sYi5hcHBseURpcnRpZWRBbmltYXRpb249ZnVuY3Rpb24oYSl7aWYoIXApe2EuX21hcmtUYXJnZXQoKTt2YXIgYz1hLl90YXJnZXRBbmltYXRpb25zKCk7Yy5zb3J0KGUpLGgoYi50aW1lbGluZS5jdXJyZW50VGltZSwhMSxjLnNsaWNlKCkpWzFdLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9cS5fYW5pbWF0aW9ucy5pbmRleE9mKGEpOy0xIT09YiYmcS5fYW5pbWF0aW9ucy5zcGxpY2UoYiwxKX0pLGcoKX19O3ZhciBvPVtdLHA9ITEscT1uZXcgZjtiLnRpbWVsaW5lPXF9KGEsYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7Zm9yKHZhciBjPTAsZD0wO2Q8YS5sZW5ndGg7ZCsrKWMrPWFbZF0qYltkXTtyZXR1cm4gY31mdW5jdGlvbiBkKGEsYil7cmV0dXJuW2FbMF0qYlswXSthWzRdKmJbMV0rYVs4XSpiWzJdK2FbMTJdKmJbM10sYVsxXSpiWzBdK2FbNV0qYlsxXSthWzldKmJbMl0rYVsxM10qYlszXSxhWzJdKmJbMF0rYVs2XSpiWzFdK2FbMTBdKmJbMl0rYVsxNF0qYlszXSxhWzNdKmJbMF0rYVs3XSpiWzFdK2FbMTFdKmJbMl0rYVsxNV0qYlszXSxhWzBdKmJbNF0rYVs0XSpiWzVdK2FbOF0qYls2XSthWzEyXSpiWzddLGFbMV0qYls0XSthWzVdKmJbNV0rYVs5XSpiWzZdK2FbMTNdKmJbN10sYVsyXSpiWzRdK2FbNl0qYls1XSthWzEwXSpiWzZdK2FbMTRdKmJbN10sYVszXSpiWzRdK2FbN10qYls1XSthWzExXSpiWzZdK2FbMTVdKmJbN10sYVswXSpiWzhdK2FbNF0qYls5XSthWzhdKmJbMTBdK2FbMTJdKmJbMTFdLGFbMV0qYls4XSthWzVdKmJbOV0rYVs5XSpiWzEwXSthWzEzXSpiWzExXSxhWzJdKmJbOF0rYVs2XSpiWzldK2FbMTBdKmJbMTBdK2FbMTRdKmJbMTFdLGFbM10qYls4XSthWzddKmJbOV0rYVsxMV0qYlsxMF0rYVsxNV0qYlsxMV0sYVswXSpiWzEyXSthWzRdKmJbMTNdK2FbOF0qYlsxNF0rYVsxMl0qYlsxNV0sYVsxXSpiWzEyXSthWzVdKmJbMTNdK2FbOV0qYlsxNF0rYVsxM10qYlsxNV0sYVsyXSpiWzEyXSthWzZdKmJbMTNdK2FbMTBdKmJbMTRdK2FbMTRdKmJbMTVdLGFbM10qYlsxMl0rYVs3XSpiWzEzXSthWzExXSpiWzE0XSthWzE1XSpiWzE1XV19ZnVuY3Rpb24gZShhKXt2YXIgYj1hLnJhZHx8MDtyZXR1cm4oKGEuZGVnfHwwKS8zNjArKGEuZ3JhZHx8MCkvNDAwKyhhLnR1cm58fDApKSooMipNYXRoLlBJKStifWZ1bmN0aW9uIGYoYSl7c3dpdGNoKGEudCl7Y2FzZVwicm90YXRleFwiOnZhciBiPWUoYS5kWzBdKTtyZXR1cm5bMSwwLDAsMCwwLE1hdGguY29zKGIpLE1hdGguc2luKGIpLDAsMCwtTWF0aC5zaW4oYiksTWF0aC5jb3MoYiksMCwwLDAsMCwxXTtjYXNlXCJyb3RhdGV5XCI6dmFyIGI9ZShhLmRbMF0pO3JldHVybltNYXRoLmNvcyhiKSwwLC1NYXRoLnNpbihiKSwwLDAsMSwwLDAsTWF0aC5zaW4oYiksMCxNYXRoLmNvcyhiKSwwLDAsMCwwLDFdO2Nhc2VcInJvdGF0ZVwiOmNhc2VcInJvdGF0ZXpcIjp2YXIgYj1lKGEuZFswXSk7cmV0dXJuW01hdGguY29zKGIpLE1hdGguc2luKGIpLDAsMCwtTWF0aC5zaW4oYiksTWF0aC5jb3MoYiksMCwwLDAsMCwxLDAsMCwwLDAsMV07Y2FzZVwicm90YXRlM2RcIjp2YXIgYz1hLmRbMF0sZD1hLmRbMV0sZj1hLmRbMl0sYj1lKGEuZFszXSksZz1jKmMrZCpkK2YqZjtpZigwPT09ZyljPTEsZD0wLGY9MDtlbHNlIGlmKDEhPT1nKXt2YXIgaD1NYXRoLnNxcnQoZyk7Yy89aCxkLz1oLGYvPWh9dmFyIGk9TWF0aC5zaW4oYi8yKSxqPWkqTWF0aC5jb3MoYi8yKSxrPWkqaTtyZXR1cm5bMS0yKihkKmQrZipmKSprLDIqKGMqZCprK2YqaiksMiooYypmKmstZCpqKSwwLDIqKGMqZCprLWYqaiksMS0yKihjKmMrZipmKSprLDIqKGQqZiprK2MqaiksMCwyKihjKmYqaytkKmopLDIqKGQqZiprLWMqaiksMS0yKihjKmMrZCpkKSprLDAsMCwwLDAsMV07Y2FzZVwic2NhbGVcIjpyZXR1cm5bYS5kWzBdLDAsMCwwLDAsYS5kWzFdLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Nhc2VcInNjYWxleFwiOnJldHVyblthLmRbMF0sMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Nhc2VcInNjYWxleVwiOnJldHVyblsxLDAsMCwwLDAsYS5kWzBdLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Nhc2VcInNjYWxlelwiOnJldHVyblsxLDAsMCwwLDAsMSwwLDAsMCwwLGEuZFswXSwwLDAsMCwwLDFdO2Nhc2VcInNjYWxlM2RcIjpyZXR1cm5bYS5kWzBdLDAsMCwwLDAsYS5kWzFdLDAsMCwwLDAsYS5kWzJdLDAsMCwwLDAsMV07Y2FzZVwic2tld1wiOnZhciBsPWUoYS5kWzBdKSxtPWUoYS5kWzFdKTtyZXR1cm5bMSxNYXRoLnRhbihtKSwwLDAsTWF0aC50YW4obCksMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtjYXNlXCJza2V3eFwiOnZhciBiPWUoYS5kWzBdKTtyZXR1cm5bMSwwLDAsMCxNYXRoLnRhbihiKSwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Nhc2VcInNrZXd5XCI6dmFyIGI9ZShhLmRbMF0pO3JldHVyblsxLE1hdGgudGFuKGIpLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07Y2FzZVwidHJhbnNsYXRlXCI6dmFyIGM9YS5kWzBdLnB4fHwwLGQ9YS5kWzFdLnB4fHwwO3JldHVyblsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCxjLGQsMCwxXTtjYXNlXCJ0cmFuc2xhdGV4XCI6dmFyIGM9YS5kWzBdLnB4fHwwO3JldHVyblsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCxjLDAsMCwxXTtjYXNlXCJ0cmFuc2xhdGV5XCI6dmFyIGQ9YS5kWzBdLnB4fHwwO3JldHVyblsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLGQsMCwxXTtjYXNlXCJ0cmFuc2xhdGV6XCI6dmFyIGY9YS5kWzBdLnB4fHwwO3JldHVyblsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsZiwxXTtjYXNlXCJ0cmFuc2xhdGUzZFwiOnZhciBjPWEuZFswXS5weHx8MCxkPWEuZFsxXS5weHx8MCxmPWEuZFsyXS5weHx8MDtyZXR1cm5bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsYyxkLGYsMV07Y2FzZVwicGVyc3BlY3RpdmVcIjpyZXR1cm5bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLGEuZFswXS5weD8tMS9hLmRbMF0ucHg6MCwwLDAsMCwxXTtjYXNlXCJtYXRyaXhcIjpyZXR1cm5bYS5kWzBdLGEuZFsxXSwwLDAsYS5kWzJdLGEuZFszXSwwLDAsMCwwLDEsMCxhLmRbNF0sYS5kWzVdLDAsMV07Y2FzZVwibWF0cml4M2RcIjpyZXR1cm4gYS5kfX1mdW5jdGlvbiBnKGEpe3JldHVybiAwPT09YS5sZW5ndGg/WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdOmEubWFwKGYpLnJlZHVjZShkKX1mdW5jdGlvbiBoKGEpe3JldHVybltpKGcoYSkpXX12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7cmV0dXJuIGFbMF1bMF0qYVsxXVsxXSphWzJdWzJdK2FbMV1bMF0qYVsyXVsxXSphWzBdWzJdK2FbMl1bMF0qYVswXVsxXSphWzFdWzJdLWFbMF1bMl0qYVsxXVsxXSphWzJdWzBdLWFbMV1bMl0qYVsyXVsxXSphWzBdWzBdLWFbMl1bMl0qYVswXVsxXSphWzFdWzBdfWZ1bmN0aW9uIGIoYil7Zm9yKHZhciBjPTEvYShiKSxkPWJbMF1bMF0sZT1iWzBdWzFdLGY9YlswXVsyXSxnPWJbMV1bMF0saD1iWzFdWzFdLGk9YlsxXVsyXSxqPWJbMl1bMF0saz1iWzJdWzFdLGw9YlsyXVsyXSxtPVtbKGgqbC1pKmspKmMsKGYqay1lKmwpKmMsKGUqaS1mKmgpKmMsMF0sWyhpKmotZypsKSpjLChkKmwtZipqKSpjLChmKmctZCppKSpjLDBdLFsoZyprLWgqaikqYywoaiplLWQqaykqYywoZCpoLWUqZykqYywwXV0sbj1bXSxvPTA7bzwzO28rKyl7Zm9yKHZhciBwPTAscT0wO3E8MztxKyspcCs9YlszXVtxXSptW3FdW29dO24ucHVzaChwKX1yZXR1cm4gbi5wdXNoKDEpLG0ucHVzaChuKSxtfWZ1bmN0aW9uIGQoYSl7cmV0dXJuW1thWzBdWzBdLGFbMV1bMF0sYVsyXVswXSxhWzNdWzBdXSxbYVswXVsxXSxhWzFdWzFdLGFbMl1bMV0sYVszXVsxXV0sW2FbMF1bMl0sYVsxXVsyXSxhWzJdWzJdLGFbM11bMl1dLFthWzBdWzNdLGFbMV1bM10sYVsyXVszXSxhWzNdWzNdXV19ZnVuY3Rpb24gZShhLGIpe2Zvcih2YXIgYz1bXSxkPTA7ZDw0O2QrKyl7Zm9yKHZhciBlPTAsZj0wO2Y8NDtmKyspZSs9YVtmXSpiW2ZdW2RdO2MucHVzaChlKX1yZXR1cm4gY31mdW5jdGlvbiBmKGEpe3ZhciBiPWcoYSk7cmV0dXJuW2FbMF0vYixhWzFdL2IsYVsyXS9iXX1mdW5jdGlvbiBnKGEpe3JldHVybiBNYXRoLnNxcnQoYVswXSphWzBdK2FbMV0qYVsxXSthWzJdKmFbMl0pfWZ1bmN0aW9uIGgoYSxiLGMsZCl7cmV0dXJuW2MqYVswXStkKmJbMF0sYyphWzFdK2QqYlsxXSxjKmFbMl0rZCpiWzJdXX1mdW5jdGlvbiBpKGEsYil7cmV0dXJuW2FbMV0qYlsyXS1hWzJdKmJbMV0sYVsyXSpiWzBdLWFbMF0qYlsyXSxhWzBdKmJbMV0tYVsxXSpiWzBdXX1mdW5jdGlvbiBqKGope3ZhciBrPVtqLnNsaWNlKDAsNCksai5zbGljZSg0LDgpLGouc2xpY2UoOCwxMiksai5zbGljZSgxMiwxNildO2lmKDEhPT1rWzNdWzNdKXJldHVybiBudWxsO2Zvcih2YXIgbD1bXSxtPTA7bTw0O20rKylsLnB1c2goa1ttXS5zbGljZSgpKTtmb3IodmFyIG09MDttPDM7bSsrKWxbbV1bM109MDtpZigwPT09YShsKSlyZXR1cm4gbnVsbDt2YXIgbixvPVtdO2tbMF1bM118fGtbMV1bM118fGtbMl1bM10/KG8ucHVzaChrWzBdWzNdKSxvLnB1c2goa1sxXVszXSksby5wdXNoKGtbMl1bM10pLG8ucHVzaChrWzNdWzNdKSxuPWUobyxkKGIobCkpKSk6bj1bMCwwLDAsMV07dmFyIHA9a1szXS5zbGljZSgwLDMpLHE9W107cS5wdXNoKGtbMF0uc2xpY2UoMCwzKSk7dmFyIHI9W107ci5wdXNoKGcocVswXSkpLHFbMF09ZihxWzBdKTt2YXIgcz1bXTtxLnB1c2goa1sxXS5zbGljZSgwLDMpKSxzLnB1c2goYyhxWzBdLHFbMV0pKSxxWzFdPWgocVsxXSxxWzBdLDEsLXNbMF0pLHIucHVzaChnKHFbMV0pKSxxWzFdPWYocVsxXSksc1swXS89clsxXSxxLnB1c2goa1syXS5zbGljZSgwLDMpKSxzLnB1c2goYyhxWzBdLHFbMl0pKSxxWzJdPWgocVsyXSxxWzBdLDEsLXNbMV0pLHMucHVzaChjKHFbMV0scVsyXSkpLHFbMl09aChxWzJdLHFbMV0sMSwtc1syXSksci5wdXNoKGcocVsyXSkpLHFbMl09ZihxWzJdKSxzWzFdLz1yWzJdLHNbMl0vPXJbMl07dmFyIHQ9aShxWzFdLHFbMl0pO2lmKGMocVswXSx0KTwwKWZvcih2YXIgbT0wO208MzttKyspclttXSo9LTEscVttXVswXSo9LTEscVttXVsxXSo9LTEscVttXVsyXSo9LTE7dmFyIHUsdix3PXFbMF1bMF0rcVsxXVsxXStxWzJdWzJdKzE7cmV0dXJuIHc+MWUtND8odT0uNS9NYXRoLnNxcnQodyksdj1bKHFbMl1bMV0tcVsxXVsyXSkqdSwocVswXVsyXS1xWzJdWzBdKSp1LChxWzFdWzBdLXFbMF1bMV0pKnUsLjI1L3VdKTpxWzBdWzBdPnFbMV1bMV0mJnFbMF1bMF0+cVsyXVsyXT8odT0yKk1hdGguc3FydCgxK3FbMF1bMF0tcVsxXVsxXS1xWzJdWzJdKSx2PVsuMjUqdSwocVswXVsxXStxWzFdWzBdKS91LChxWzBdWzJdK3FbMl1bMF0pL3UsKHFbMl1bMV0tcVsxXVsyXSkvdV0pOnFbMV1bMV0+cVsyXVsyXT8odT0yKk1hdGguc3FydCgxK3FbMV1bMV0tcVswXVswXS1xWzJdWzJdKSx2PVsocVswXVsxXStxWzFdWzBdKS91LC4yNSp1LChxWzFdWzJdK3FbMl1bMV0pL3UsKHFbMF1bMl0tcVsyXVswXSkvdV0pOih1PTIqTWF0aC5zcXJ0KDErcVsyXVsyXS1xWzBdWzBdLXFbMV1bMV0pLHY9WyhxWzBdWzJdK3FbMl1bMF0pL3UsKHFbMV1bMl0rcVsyXVsxXSkvdSwuMjUqdSwocVsxXVswXS1xWzBdWzFdKS91XSksW3AscixzLHYsbl19cmV0dXJuIGp9KCk7YS5kb3Q9YyxhLm1ha2VNYXRyaXhEZWNvbXBvc2l0aW9uPWgsYS50cmFuc2Zvcm1MaXN0VG9NYXRyaXg9Z30oYiksZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhLGIpe3ZhciBjPWEuZXhlYyhiKTtpZihjKXJldHVybiBjPWEuaWdub3JlQ2FzZT9jWzBdLnRvTG93ZXJDYXNlKCk6Y1swXSxbYyxiLnN1YnN0cihjLmxlbmd0aCldfWZ1bmN0aW9uIGMoYSxiKXtiPWIucmVwbGFjZSgvXlxccyovLFwiXCIpO3ZhciBjPWEoYik7aWYoYylyZXR1cm5bY1swXSxjWzFdLnJlcGxhY2UoL15cXHMqLyxcIlwiKV19ZnVuY3Rpb24gZChhLGQsZSl7YT1jLmJpbmQobnVsbCxhKTtmb3IodmFyIGY9W107Oyl7dmFyIGc9YShlKTtpZighZylyZXR1cm5bZixlXTtpZihmLnB1c2goZ1swXSksZT1nWzFdLCEoZz1iKGQsZSkpfHxcIlwiPT1nWzFdKXJldHVybltmLGVdO2U9Z1sxXX19ZnVuY3Rpb24gZShhLGIpe2Zvcih2YXIgYz0wLGQ9MDtkPGIubGVuZ3RoJiYoIS9cXHN8LC8udGVzdChiW2RdKXx8MCE9Yyk7ZCsrKWlmKFwiKFwiPT1iW2RdKWMrKztlbHNlIGlmKFwiKVwiPT1iW2RdJiYoYy0tLDA9PWMmJmQrKyxjPD0wKSlicmVhazt2YXIgZT1hKGIuc3Vic3RyKDAsZCkpO3JldHVybiB2b2lkIDA9PWU/dm9pZCAwOltlLGIuc3Vic3RyKGQpXX1mdW5jdGlvbiBmKGEsYil7Zm9yKHZhciBjPWEsZD1iO2MmJmQ7KWM+ZD9jJT1kOmQlPWM7cmV0dXJuIGM9YSpiLyhjK2QpfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWEoYik7cmV0dXJuIGMmJihjWzBdPXZvaWQgMCksY319ZnVuY3Rpb24gaChhLGIpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYShjKXx8W2IsY119fWZ1bmN0aW9uIGkoYixjKXtmb3IodmFyIGQ9W10sZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgZj1hLmNvbnN1bWVUcmltbWVkKGJbZV0sYyk7aWYoIWZ8fFwiXCI9PWZbMF0pcmV0dXJuO3ZvaWQgMCE9PWZbMF0mJmQucHVzaChmWzBdKSxjPWZbMV19aWYoXCJcIj09YylyZXR1cm4gZH1mdW5jdGlvbiBqKGEsYixjLGQsZSl7Zm9yKHZhciBnPVtdLGg9W10saT1bXSxqPWYoZC5sZW5ndGgsZS5sZW5ndGgpLGs9MDtrPGo7aysrKXt2YXIgbD1iKGRbayVkLmxlbmd0aF0sZVtrJWUubGVuZ3RoXSk7aWYoIWwpcmV0dXJuO2cucHVzaChsWzBdKSxoLnB1c2gobFsxXSksaS5wdXNoKGxbMl0pfXJldHVybltnLGgsZnVuY3Rpb24oYil7dmFyIGQ9Yi5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gaVtiXShhKX0pLmpvaW4oYyk7cmV0dXJuIGE/YShkKTpkfV19ZnVuY3Rpb24gayhhLGIsYyl7Zm9yKHZhciBkPVtdLGU9W10sZj1bXSxnPTAsaD0wO2g8Yy5sZW5ndGg7aCsrKWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGNbaF0pe3ZhciBpPWNbaF0oYVtnXSxiW2crK10pO2QucHVzaChpWzBdKSxlLnB1c2goaVsxXSksZi5wdXNoKGlbMl0pfWVsc2UhZnVuY3Rpb24oYSl7ZC5wdXNoKCExKSxlLnB1c2goITEpLGYucHVzaChmdW5jdGlvbigpe3JldHVybiBjW2FdfSl9KGgpO3JldHVybltkLGUsZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVwiXCIsYz0wO2M8YS5sZW5ndGg7YysrKWIrPWZbY10oYVtjXSk7cmV0dXJuIGJ9XX1hLmNvbnN1bWVUb2tlbj1iLGEuY29uc3VtZVRyaW1tZWQ9YyxhLmNvbnN1bWVSZXBlYXRlZD1kLGEuY29uc3VtZVBhcmVudGhlc2lzZWQ9ZSxhLmlnbm9yZT1nLGEub3B0aW9uYWw9aCxhLmNvbnN1bWVMaXN0PWksYS5tZXJnZU5lc3RlZFJlcGVhdGVkPWouYmluZChudWxsLG51bGwpLGEubWVyZ2VXcmFwcGVkTmVzdGVkUmVwZWF0ZWQ9aixhLm1lcmdlTGlzdD1rfShiKSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGIpe2Z1bmN0aW9uIGMoYil7dmFyIGM9YS5jb25zdW1lVG9rZW4oL15pbnNldC9pLGIpO3JldHVybiBjPyhkLmluc2V0PSEwLGMpOihjPWEuY29uc3VtZUxlbmd0aE9yUGVyY2VudChiKSk/KGQubGVuZ3Rocy5wdXNoKGNbMF0pLGMpOihjPWEuY29uc3VtZUNvbG9yKGIpLGM/KGQuY29sb3I9Y1swXSxjKTp2b2lkIDApfXZhciBkPXtpbnNldDohMSxsZW5ndGhzOltdLGNvbG9yOm51bGx9LGU9YS5jb25zdW1lUmVwZWF0ZWQoYywvXi8sYik7aWYoZSYmZVswXS5sZW5ndGgpcmV0dXJuW2QsZVsxXV19ZnVuY3Rpb24gYyhjKXt2YXIgZD1hLmNvbnN1bWVSZXBlYXRlZChiLC9eLC8sYyk7aWYoZCYmXCJcIj09ZFsxXSlyZXR1cm4gZFswXX1mdW5jdGlvbiBkKGIsYyl7Zm9yKDtiLmxlbmd0aHMubGVuZ3RoPE1hdGgubWF4KGIubGVuZ3Rocy5sZW5ndGgsYy5sZW5ndGhzLmxlbmd0aCk7KWIubGVuZ3Rocy5wdXNoKHtweDowfSk7Zm9yKDtjLmxlbmd0aHMubGVuZ3RoPE1hdGgubWF4KGIubGVuZ3Rocy5sZW5ndGgsYy5sZW5ndGhzLmxlbmd0aCk7KWMubGVuZ3Rocy5wdXNoKHtweDowfSk7aWYoYi5pbnNldD09Yy5pbnNldCYmISFiLmNvbG9yPT0hIWMuY29sb3Ipe2Zvcih2YXIgZCxlPVtdLGY9W1tdLDBdLGc9W1tdLDBdLGg9MDtoPGIubGVuZ3Rocy5sZW5ndGg7aCsrKXt2YXIgaT1hLm1lcmdlRGltZW5zaW9ucyhiLmxlbmd0aHNbaF0sYy5sZW5ndGhzW2hdLDI9PWgpO2ZbMF0ucHVzaChpWzBdKSxnWzBdLnB1c2goaVsxXSksZS5wdXNoKGlbMl0pfWlmKGIuY29sb3ImJmMuY29sb3Ipe3ZhciBqPWEubWVyZ2VDb2xvcnMoYi5jb2xvcixjLmNvbG9yKTtmWzFdPWpbMF0sZ1sxXT1qWzFdLGQ9alsyXX1yZXR1cm5bZixnLGZ1bmN0aW9uKGEpe2Zvcih2YXIgYz1iLmluc2V0P1wiaW5zZXQgXCI6XCIgXCIsZj0wO2Y8ZS5sZW5ndGg7ZisrKWMrPWVbZl0oYVswXVtmXSkrXCIgXCI7cmV0dXJuIGQmJihjKz1kKGFbMV0pKSxjfV19fWZ1bmN0aW9uIGUoYixjLGQsZSl7ZnVuY3Rpb24gZihhKXtyZXR1cm57aW5zZXQ6YSxjb2xvcjpbMCwwLDAsMF0sbGVuZ3Roczpbe3B4OjB9LHtweDowfSx7cHg6MH0se3B4OjB9XX19Zm9yKHZhciBnPVtdLGg9W10saT0wO2k8ZC5sZW5ndGh8fGk8ZS5sZW5ndGg7aSsrKXt2YXIgaj1kW2ldfHxmKGVbaV0uaW5zZXQpLGs9ZVtpXXx8ZihkW2ldLmluc2V0KTtnLnB1c2goaiksaC5wdXNoKGspfXJldHVybiBhLm1lcmdlTmVzdGVkUmVwZWF0ZWQoYixjLGcsaCl9dmFyIGY9ZS5iaW5kKG51bGwsZCxcIiwgXCIpO2EuYWRkUHJvcGVydGllc0hhbmRsZXIoYyxmLFtcImJveC1zaGFkb3dcIixcInRleHQtc2hhZG93XCJdKX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBhLnRvRml4ZWQoMykucmVwbGFjZSgvMCskLyxcIlwiKS5yZXBsYWNlKC9cXC4kLyxcIlwiKX1mdW5jdGlvbiBkKGEsYixjKXtyZXR1cm4gTWF0aC5taW4oYixNYXRoLm1heChhLGMpKX1mdW5jdGlvbiBlKGEpe2lmKC9eXFxzKlstK10/KFxcZCpcXC4pP1xcZCtcXHMqJC8udGVzdChhKSlyZXR1cm4gTnVtYmVyKGEpfWZ1bmN0aW9uIGYoYSxiKXtyZXR1cm5bYSxiLGNdfWZ1bmN0aW9uIGcoYSxiKXtpZigwIT1hKXJldHVybiBpKDAsMS8wKShhLGIpfWZ1bmN0aW9uIGgoYSxiKXtyZXR1cm5bYSxiLGZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLnJvdW5kKGQoMSwxLzAsYSkpfV19ZnVuY3Rpb24gaShhLGIpe3JldHVybiBmdW5jdGlvbihlLGYpe3JldHVybltlLGYsZnVuY3Rpb24oZSl7cmV0dXJuIGMoZChhLGIsZSkpfV19fWZ1bmN0aW9uIGooYSl7dmFyIGI9YS50cmltKCkuc3BsaXQoL1xccypbXFxzLF1cXHMqLyk7aWYoMCE9PWIubGVuZ3RoKXtmb3IodmFyIGM9W10sZD0wO2Q8Yi5sZW5ndGg7ZCsrKXt2YXIgZj1lKGJbZF0pO2lmKHZvaWQgMD09PWYpcmV0dXJuO2MucHVzaChmKX1yZXR1cm4gY319ZnVuY3Rpb24gayhhLGIpe2lmKGEubGVuZ3RoPT1iLmxlbmd0aClyZXR1cm5bYSxiLGZ1bmN0aW9uKGEpe3JldHVybiBhLm1hcChjKS5qb2luKFwiIFwiKX1dfWZ1bmN0aW9uIGwoYSxiKXtyZXR1cm5bYSxiLE1hdGgucm91bmRdfWEuY2xhbXA9ZCxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGosayxbXCJzdHJva2UtZGFzaGFycmF5XCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEvMCksW1wiYm9yZGVyLWltYWdlLXdpZHRoXCIsXCJsaW5lLWhlaWdodFwiXSksYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihlLGkoMCwxKSxbXCJvcGFjaXR5XCIsXCJzaGFwZS1pbWFnZS10aHJlc2hvbGRcIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxnLFtcImZsZXgtZ3Jvd1wiLFwiZmxleC1zaHJpbmtcIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxoLFtcIm9ycGhhbnNcIixcIndpZG93c1wiXSksYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihlLGwsW1wiei1pbmRleFwiXSksYS5wYXJzZU51bWJlcj1lLGEucGFyc2VOdW1iZXJMaXN0PWosYS5tZXJnZU51bWJlcnM9ZixhLm51bWJlclRvU3RyaW5nPWN9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIpe2lmKFwidmlzaWJsZVwiPT1hfHxcInZpc2libGVcIj09YilyZXR1cm5bMCwxLGZ1bmN0aW9uKGMpe3JldHVybiBjPD0wP2E6Yz49MT9iOlwidmlzaWJsZVwifV19YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihTdHJpbmcsYyxbXCJ2aXNpYmlsaXR5XCJdKX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe2E9YS50cmltKCksZi5maWxsU3R5bGU9XCIjMDAwXCIsZi5maWxsU3R5bGU9YTt2YXIgYj1mLmZpbGxTdHlsZTtpZihmLmZpbGxTdHlsZT1cIiNmZmZcIixmLmZpbGxTdHlsZT1hLGI9PWYuZmlsbFN0eWxlKXtmLmZpbGxSZWN0KDAsMCwxLDEpO3ZhciBjPWYuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGE7Zi5jbGVhclJlY3QoMCwwLDEsMSk7dmFyIGQ9Y1szXS8yNTU7cmV0dXJuW2NbMF0qZCxjWzFdKmQsY1syXSpkLGRdfX1mdW5jdGlvbiBkKGIsYyl7cmV0dXJuW2IsYyxmdW5jdGlvbihiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxhKSl9aWYoYlszXSlmb3IodmFyIGQ9MDtkPDM7ZCsrKWJbZF09TWF0aC5yb3VuZChjKGJbZF0vYlszXSkpO3JldHVybiBiWzNdPWEubnVtYmVyVG9TdHJpbmcoYS5jbGFtcCgwLDEsYlszXSkpLFwicmdiYShcIitiLmpvaW4oXCIsXCIpK1wiKVwifV19dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFwiY2FudmFzXCIpO2Uud2lkdGg9ZS5oZWlnaHQ9MTt2YXIgZj1lLmdldENvbnRleHQoXCIyZFwiKTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGMsZCxbXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXCJib3JkZXItYm90dG9tLWNvbG9yXCIsXCJib3JkZXItbGVmdC1jb2xvclwiLFwiYm9yZGVyLXJpZ2h0LWNvbG9yXCIsXCJib3JkZXItdG9wLWNvbG9yXCIsXCJjb2xvclwiLFwiZmlsbFwiLFwiZmxvb2QtY29sb3JcIixcImxpZ2h0aW5nLWNvbG9yXCIsXCJvdXRsaW5lLWNvbG9yXCIsXCJzdG9wLWNvbG9yXCIsXCJzdHJva2VcIixcInRleHQtZGVjb3JhdGlvbi1jb2xvclwiXSksYS5jb25zdW1lQ29sb3I9YS5jb25zdW1lUGFyZW50aGVzaXNlZC5iaW5kKG51bGwsYyksYS5tZXJnZUNvbG9ycz1kfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7ZnVuY3Rpb24gYigpe3ZhciBiPWguZXhlYyhhKTtnPWI/YlswXTp2b2lkIDB9ZnVuY3Rpb24gYygpe3ZhciBhPU51bWJlcihnKTtyZXR1cm4gYigpLGF9ZnVuY3Rpb24gZCgpe2lmKFwiKFwiIT09ZylyZXR1cm4gYygpO2IoKTt2YXIgYT1mKCk7cmV0dXJuXCIpXCIhPT1nP05hTjooYigpLGEpfWZ1bmN0aW9uIGUoKXtmb3IodmFyIGE9ZCgpO1wiKlwiPT09Z3x8XCIvXCI9PT1nOyl7dmFyIGM9ZztiKCk7dmFyIGU9ZCgpO1wiKlwiPT09Yz9hKj1lOmEvPWV9cmV0dXJuIGF9ZnVuY3Rpb24gZigpe2Zvcih2YXIgYT1lKCk7XCIrXCI9PT1nfHxcIi1cIj09PWc7KXt2YXIgYz1nO2IoKTt2YXIgZD1lKCk7XCIrXCI9PT1jP2ErPWQ6YS09ZH1yZXR1cm4gYX12YXIgZyxoPS8oW1xcK1xcLVxcd1xcLl0rfFtcXChcXClcXCpcXC9dKS9nO3JldHVybiBiKCksZigpfWZ1bmN0aW9uIGQoYSxiKXtpZihcIjBcIj09KGI9Yi50cmltKCkudG9Mb3dlckNhc2UoKSkmJlwicHhcIi5zZWFyY2goYSk+PTApcmV0dXJue3B4OjB9O2lmKC9eW14oXSokfF5jYWxjLy50ZXN0KGIpKXtiPWIucmVwbGFjZSgvY2FsY1xcKC9nLFwiKFwiKTt2YXIgZD17fTtiPWIucmVwbGFjZShhLGZ1bmN0aW9uKGEpe3JldHVybiBkW2FdPW51bGwsXCJVXCIrYX0pO2Zvcih2YXIgZT1cIlUoXCIrYS5zb3VyY2UrXCIpXCIsZj1iLnJlcGxhY2UoL1stK10/KFxcZCpcXC4pP1xcZCsoW0VlXVstK10/XFxkKyk/L2csXCJOXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChcIk5cIitlLFwiZ1wiKSxcIkRcIikucmVwbGFjZSgvXFxzWystXVxccy9nLFwiT1wiKS5yZXBsYWNlKC9cXHMvZyxcIlwiKSxnPVsvTlxcKihEKS9nLC8oTnxEKVsqXFwvXU4vZywvKE58RClPXFwxL2csL1xcKChOfEQpXFwpL2ddLGg9MDtoPGcubGVuZ3RoOylnW2hdLnRlc3QoZik/KGY9Zi5yZXBsYWNlKGdbaF0sXCIkMVwiKSxoPTApOmgrKztpZihcIkRcIj09Zil7Zm9yKHZhciBpIGluIGQpe3ZhciBqPWMoYi5yZXBsYWNlKG5ldyBSZWdFeHAoXCJVXCIraSxcImdcIiksXCJcIikucmVwbGFjZShuZXcgUmVnRXhwKGUsXCJnXCIpLFwiKjBcIikpO2lmKCFpc0Zpbml0ZShqKSlyZXR1cm47ZFtpXT1qfXJldHVybiBkfX19ZnVuY3Rpb24gZShhLGIpe3JldHVybiBmKGEsYiwhMCl9ZnVuY3Rpb24gZihiLGMsZCl7dmFyIGUsZj1bXTtmb3IoZSBpbiBiKWYucHVzaChlKTtmb3IoZSBpbiBjKWYuaW5kZXhPZihlKTwwJiZmLnB1c2goZSk7cmV0dXJuIGI9Zi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGJbYV18fDB9KSxjPWYubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBjW2FdfHwwfSksW2IsYyxmdW5jdGlvbihiKXt2YXIgYz1iLm1hcChmdW5jdGlvbihjLGUpe3JldHVybiAxPT1iLmxlbmd0aCYmZCYmKGM9TWF0aC5tYXgoYywwKSksYS5udW1iZXJUb1N0cmluZyhjKStmW2VdfSkuam9pbihcIiArIFwiKTtyZXR1cm4gYi5sZW5ndGg+MT9cImNhbGMoXCIrYytcIilcIjpjfV19dmFyIGc9XCJweHxlbXxleHxjaHxyZW18dnd8dmh8dm1pbnx2bWF4fGNtfG1tfGlufHB0fHBjXCIsaD1kLmJpbmQobnVsbCxuZXcgUmVnRXhwKGcsXCJnXCIpKSxpPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZytcInwlXCIsXCJnXCIpKSxqPWQuYmluZChudWxsLC9kZWd8cmFkfGdyYWR8dHVybi9nKTthLnBhcnNlTGVuZ3RoPWgsYS5wYXJzZUxlbmd0aE9yUGVyY2VudD1pLGEuY29uc3VtZUxlbmd0aE9yUGVyY2VudD1hLmNvbnN1bWVQYXJlbnRoZXNpc2VkLmJpbmQobnVsbCxpKSxhLnBhcnNlQW5nbGU9aixhLm1lcmdlRGltZW5zaW9ucz1mO3ZhciBrPWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGgpLGw9YS5jb25zdW1lUmVwZWF0ZWQuYmluZCh2b2lkIDAsaywvXi8pLG09YS5jb25zdW1lUmVwZWF0ZWQuYmluZCh2b2lkIDAsbCwvXiwvKTthLmNvbnN1bWVTaXplUGFpckxpc3Q9bTt2YXIgbj1mdW5jdGlvbihhKXt2YXIgYj1tKGEpO2lmKGImJlwiXCI9PWJbMV0pcmV0dXJuIGJbMF19LG89YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLGUsXCIgXCIpLHA9YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLG8sXCIsXCIpO2EubWVyZ2VOb25OZWdhdGl2ZVNpemVQYWlyPW8sYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihuLHAsW1wiYmFja2dyb3VuZC1zaXplXCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGksZSxbXCJib3JkZXItYm90dG9tLXdpZHRoXCIsXCJib3JkZXItaW1hZ2Utd2lkdGhcIixcImJvcmRlci1sZWZ0LXdpZHRoXCIsXCJib3JkZXItcmlnaHQtd2lkdGhcIixcImJvcmRlci10b3Atd2lkdGhcIixcImZsZXgtYmFzaXNcIixcImZvbnQtc2l6ZVwiLFwiaGVpZ2h0XCIsXCJsaW5lLWhlaWdodFwiLFwibWF4LWhlaWdodFwiLFwibWF4LXdpZHRoXCIsXCJvdXRsaW5lLXdpZHRoXCIsXCJ3aWR0aFwiXSksYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihpLGYsW1wiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1c1wiLFwiYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXNcIixcImJvcmRlci10b3AtbGVmdC1yYWRpdXNcIixcImJvcmRlci10b3AtcmlnaHQtcmFkaXVzXCIsXCJib3R0b21cIixcImxlZnRcIixcImxldHRlci1zcGFjaW5nXCIsXCJtYXJnaW4tYm90dG9tXCIsXCJtYXJnaW4tbGVmdFwiLFwibWFyZ2luLXJpZ2h0XCIsXCJtYXJnaW4tdG9wXCIsXCJtaW4taGVpZ2h0XCIsXCJtaW4td2lkdGhcIixcIm91dGxpbmUtb2Zmc2V0XCIsXCJwYWRkaW5nLWJvdHRvbVwiLFwicGFkZGluZy1sZWZ0XCIsXCJwYWRkaW5nLXJpZ2h0XCIsXCJwYWRkaW5nLXRvcFwiLFwicGVyc3BlY3RpdmVcIixcInJpZ2h0XCIsXCJzaGFwZS1tYXJnaW5cIixcInN0cm9rZS1kYXNob2Zmc2V0XCIsXCJ0ZXh0LWluZGVudFwiLFwidG9wXCIsXCJ2ZXJ0aWNhbC1hbGlnblwiLFwid29yZC1zcGFjaW5nXCJdKX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3JldHVybiBhLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYil8fGEuY29uc3VtZVRva2VuKC9eYXV0by8sYil9ZnVuY3Rpb24gZChiKXt2YXIgZD1hLmNvbnN1bWVMaXN0KFthLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKG51bGwsL15yZWN0LykpLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlxcKC8pKSxhLmNvbnN1bWVSZXBlYXRlZC5iaW5kKG51bGwsYywvXiwvKSxhLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKG51bGwsL15cXCkvKSldLGIpO2lmKGQmJjQ9PWRbMF0ubGVuZ3RoKXJldHVybiBkWzBdfWZ1bmN0aW9uIGUoYixjKXtyZXR1cm5cImF1dG9cIj09Ynx8XCJhdXRvXCI9PWM/WyEwLCExLGZ1bmN0aW9uKGQpe3ZhciBlPWQ/YjpjO2lmKFwiYXV0b1wiPT1lKXJldHVyblwiYXV0b1wiO3ZhciBmPWEubWVyZ2VEaW1lbnNpb25zKGUsZSk7cmV0dXJuIGZbMl0oZlswXSl9XTphLm1lcmdlRGltZW5zaW9ucyhiLGMpfWZ1bmN0aW9uIGYoYSl7cmV0dXJuXCJyZWN0KFwiK2ErXCIpXCJ9dmFyIGc9YS5tZXJnZVdyYXBwZWROZXN0ZWRSZXBlYXRlZC5iaW5kKG51bGwsZixlLFwiLCBcIik7YS5wYXJzZUJveD1kLGEubWVyZ2VCb3hlcz1nLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZCxnLFtcImNsaXBcIl0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPTA7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09az9iW2MrK106YX0pfX1mdW5jdGlvbiBkKGEpe3JldHVybiBhfWZ1bmN0aW9uIGUoYil7aWYoXCJub25lXCI9PShiPWIudG9Mb3dlckNhc2UoKS50cmltKCkpKXJldHVybltdO2Zvcih2YXIgYyxkPS9cXHMqKFxcdyspXFwoKFteKV0qKVxcKS9nLGU9W10sZj0wO2M9ZC5leGVjKGIpOyl7aWYoYy5pbmRleCE9ZilyZXR1cm47Zj1jLmluZGV4K2NbMF0ubGVuZ3RoO3ZhciBnPWNbMV0saD1uW2ddO2lmKCFoKXJldHVybjt2YXIgaT1jWzJdLnNwbGl0KFwiLFwiKSxqPWhbMF07aWYoai5sZW5ndGg8aS5sZW5ndGgpcmV0dXJuO2Zvcih2YXIgaz1bXSxvPTA7bzxqLmxlbmd0aDtvKyspe3ZhciBwLHE9aVtvXSxyPWpbb107aWYodm9pZCAwPT09KHA9cT97QTpmdW5jdGlvbihiKXtyZXR1cm5cIjBcIj09Yi50cmltKCk/bTphLnBhcnNlQW5nbGUoYil9LE46YS5wYXJzZU51bWJlcixUOmEucGFyc2VMZW5ndGhPclBlcmNlbnQsTDphLnBhcnNlTGVuZ3RofVtyLnRvVXBwZXJDYXNlKCldKHEpOnthOm0sbjprWzBdLHQ6bH1bcl0pKXJldHVybjtrLnB1c2gocCl9aWYoZS5wdXNoKHt0OmcsZDprfSksZC5sYXN0SW5kZXg9PWIubGVuZ3RoKXJldHVybiBlfX1mdW5jdGlvbiBmKGEpe3JldHVybiBhLnRvRml4ZWQoNikucmVwbGFjZShcIi4wMDAwMDBcIixcIlwiKX1mdW5jdGlvbiBnKGIsYyl7aWYoYi5kZWNvbXBvc2l0aW9uUGFpciE9PWMpe2IuZGVjb21wb3NpdGlvblBhaXI9Yzt2YXIgZD1hLm1ha2VNYXRyaXhEZWNvbXBvc2l0aW9uKGIpfWlmKGMuZGVjb21wb3NpdGlvblBhaXIhPT1iKXtjLmRlY29tcG9zaXRpb25QYWlyPWI7dmFyIGU9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbihjKX1yZXR1cm4gbnVsbD09ZFswXXx8bnVsbD09ZVswXT9bWyExXSxbITBdLGZ1bmN0aW9uKGEpe3JldHVybiBhP2NbMF0uZDpiWzBdLmR9XTooZFswXS5wdXNoKDApLGVbMF0ucHVzaCgxKSxbZCxlLGZ1bmN0aW9uKGIpe3ZhciBjPWEucXVhdChkWzBdWzNdLGVbMF1bM10sYls1XSk7cmV0dXJuIGEuY29tcG9zZU1hdHJpeChiWzBdLGJbMV0sYlsyXSxjLGJbNF0pLm1hcChmKS5qb2luKFwiLFwiKX1dKX1mdW5jdGlvbiBoKGEpe3JldHVybiBhLnJlcGxhY2UoL1t4eV0vLFwiXCIpfWZ1bmN0aW9uIGkoYSl7cmV0dXJuIGEucmVwbGFjZSgvKHh8eXx6fDNkKT8kLyxcIjNkXCIpfWZ1bmN0aW9uIGooYixjKXt2YXIgZD1hLm1ha2VNYXRyaXhEZWNvbXBvc2l0aW9uJiYhMCxlPSExO2lmKCFiLmxlbmd0aHx8IWMubGVuZ3RoKXtiLmxlbmd0aHx8KGU9ITAsYj1jLGM9W10pO2Zvcih2YXIgZj0wO2Y8Yi5sZW5ndGg7ZisrKXt2YXIgaj1iW2ZdLnQsaz1iW2ZdLmQsbD1cInNjYWxlXCI9PWouc3Vic3RyKDAsNSk/MTowO2MucHVzaCh7dDpqLGQ6ay5tYXAoZnVuY3Rpb24oYSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGEpcmV0dXJuIGw7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1sO3JldHVybiBifSl9KX19dmFyIG09ZnVuY3Rpb24oYSxiKXtyZXR1cm5cInBlcnNwZWN0aXZlXCI9PWEmJlwicGVyc3BlY3RpdmVcIj09Ynx8KFwibWF0cml4XCI9PWF8fFwibWF0cml4M2RcIj09YSkmJihcIm1hdHJpeFwiPT1ifHxcIm1hdHJpeDNkXCI9PWIpfSxvPVtdLHA9W10scT1bXTtpZihiLmxlbmd0aCE9Yy5sZW5ndGgpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bW1wibWF0cml4XCIsW3JbMl1dXV19ZWxzZSBmb3IodmFyIGY9MDtmPGIubGVuZ3RoO2YrKyl7dmFyIGoscz1iW2ZdLnQsdD1jW2ZdLnQsdT1iW2ZdLmQsdj1jW2ZdLmQsdz1uW3NdLHg9blt0XTtpZihtKHMsdCkpe2lmKCFkKXJldHVybjt2YXIgcj1nKFtiW2ZdXSxbY1tmXV0pO28ucHVzaChyWzBdKSxwLnB1c2goclsxXSkscS5wdXNoKFtcIm1hdHJpeFwiLFtyWzJdXV0pfWVsc2V7aWYocz09dClqPXM7ZWxzZSBpZih3WzJdJiZ4WzJdJiZoKHMpPT1oKHQpKWo9aChzKSx1PXdbMl0odSksdj14WzJdKHYpO2Vsc2V7aWYoIXdbMV18fCF4WzFdfHxpKHMpIT1pKHQpKXtpZighZClyZXR1cm47dmFyIHI9ZyhiLGMpO289W3JbMF1dLHA9W3JbMV1dLHE9W1tcIm1hdHJpeFwiLFtyWzJdXV1dO2JyZWFrfWo9aShzKSx1PXdbMV0odSksdj14WzFdKHYpfWZvcih2YXIgeT1bXSx6PVtdLEE9W10sQj0wO0I8dS5sZW5ndGg7QisrKXt2YXIgQz1cIm51bWJlclwiPT10eXBlb2YgdVtCXT9hLm1lcmdlTnVtYmVyczphLm1lcmdlRGltZW5zaW9ucyxyPUModVtCXSx2W0JdKTt5W0JdPXJbMF0seltCXT1yWzFdLEEucHVzaChyWzJdKX1vLnB1c2goeSkscC5wdXNoKHopLHEucHVzaChbaixBXSl9fWlmKGUpe3ZhciBEPW87bz1wLHA9RH1yZXR1cm5bbyxwLGZ1bmN0aW9uKGEpe3JldHVybiBhLm1hcChmdW5jdGlvbihhLGIpe3ZhciBjPWEubWFwKGZ1bmN0aW9uKGEsYyl7cmV0dXJuIHFbYl1bMV1bY10oYSl9KS5qb2luKFwiLFwiKTtyZXR1cm5cIm1hdHJpeFwiPT1xW2JdWzBdJiYxNj09Yy5zcGxpdChcIixcIikubGVuZ3RoJiYocVtiXVswXT1cIm1hdHJpeDNkXCIpLHFbYl1bMF0rXCIoXCIrYytcIilcIn0pLmpvaW4oXCIgXCIpfV19dmFyIGs9bnVsbCxsPXtweDowfSxtPXtkZWc6MH0sbj17bWF0cml4OltcIk5OTk5OTlwiLFtrLGssMCwwLGssaywwLDAsMCwwLDEsMCxrLGssMCwxXSxkXSxtYXRyaXgzZDpbXCJOTk5OTk5OTk5OTk5OTk5OXCIsZF0scm90YXRlOltcIkFcIl0scm90YXRleDpbXCJBXCJdLHJvdGF0ZXk6W1wiQVwiXSxyb3RhdGV6OltcIkFcIl0scm90YXRlM2Q6W1wiTk5OQVwiXSxwZXJzcGVjdGl2ZTpbXCJMXCJdLHNjYWxlOltcIk5uXCIsYyhbayxrLDFdKSxkXSxzY2FsZXg6W1wiTlwiLGMoW2ssMSwxXSksYyhbaywxXSldLHNjYWxleTpbXCJOXCIsYyhbMSxrLDFdKSxjKFsxLGtdKV0sc2NhbGV6OltcIk5cIixjKFsxLDEsa10pXSxzY2FsZTNkOltcIk5OTlwiLGRdLHNrZXc6W1wiQWFcIixudWxsLGRdLHNrZXd4OltcIkFcIixudWxsLGMoW2ssbV0pXSxza2V3eTpbXCJBXCIsbnVsbCxjKFttLGtdKV0sdHJhbnNsYXRlOltcIlR0XCIsYyhbayxrLGxdKSxkXSx0cmFuc2xhdGV4OltcIlRcIixjKFtrLGwsbF0pLGMoW2ssbF0pXSx0cmFuc2xhdGV5OltcIlRcIixjKFtsLGssbF0pLGMoW2wsa10pXSx0cmFuc2xhdGV6OltcIkxcIixjKFtsLGwsa10pXSx0cmFuc2xhdGUzZDpbXCJUVExcIixkXX07YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihlLGosW1widHJhbnNmb3JtXCJdKSxhLnRyYW5zZm9ybVRvU3ZnTWF0cml4PWZ1bmN0aW9uKGIpe3ZhciBjPWEudHJhbnNmb3JtTGlzdFRvTWF0cml4KGUoYikpO3JldHVyblwibWF0cml4KFwiK2YoY1swXSkrXCIgXCIrZihjWzFdKStcIiBcIitmKGNbNF0pK1wiIFwiK2YoY1s1XSkrXCIgXCIrZihjWzEyXSkrXCIgXCIrZihjWzEzXSkrXCIpXCJ9fShiKSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEpe3ZhciBiPU51bWJlcihhKTtpZighKGlzTmFOKGIpfHxiPDEwMHx8Yj45MDB8fGIlMTAwIT0wKSlyZXR1cm4gYn1mdW5jdGlvbiBjKGIpe3JldHVybiBiPTEwMCpNYXRoLnJvdW5kKGIvMTAwKSxiPWEuY2xhbXAoMTAwLDkwMCxiKSw0MDA9PT1iP1wibm9ybWFsXCI6NzAwPT09Yj9cImJvbGRcIjpTdHJpbmcoYil9ZnVuY3Rpb24gZChhLGIpe3JldHVyblthLGIsY119YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihiLGQsW1wiZm9udC13ZWlnaHRcIl0pfShiKSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEpe3ZhciBiPXt9O2Zvcih2YXIgYyBpbiBhKWJbY109LWFbY107cmV0dXJuIGJ9ZnVuY3Rpb24gYyhiKXtyZXR1cm4gYS5jb25zdW1lVG9rZW4oL14obGVmdHxjZW50ZXJ8cmlnaHR8dG9wfGJvdHRvbSlcXGIvaSxiKXx8YS5jb25zdW1lTGVuZ3RoT3JQZXJjZW50KGIpfWZ1bmN0aW9uIGQoYixkKXt2YXIgZT1hLmNvbnN1bWVSZXBlYXRlZChjLC9eLyxkKTtpZihlJiZcIlwiPT1lWzFdKXt2YXIgZj1lWzBdO2lmKGZbMF09ZlswXXx8XCJjZW50ZXJcIixmWzFdPWZbMV18fFwiY2VudGVyXCIsMz09YiYmKGZbMl09ZlsyXXx8e3B4OjB9KSxmLmxlbmd0aD09Yil7aWYoL3RvcHxib3R0b20vLnRlc3QoZlswXSl8fC9sZWZ0fHJpZ2h0Ly50ZXN0KGZbMV0pKXt2YXIgaD1mWzBdO2ZbMF09ZlsxXSxmWzFdPWh9aWYoL2xlZnR8cmlnaHR8Y2VudGVyfE9iamVjdC8udGVzdChmWzBdKSYmL3RvcHxib3R0b218Y2VudGVyfE9iamVjdC8udGVzdChmWzFdKSlyZXR1cm4gZi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGE/YTpnW2FdfSl9fX1mdW5jdGlvbiBlKGQpe3ZhciBlPWEuY29uc3VtZVJlcGVhdGVkKGMsL14vLGQpO2lmKGUpe2Zvcih2YXIgZj1lWzBdLGg9W3tcIiVcIjo1MH0se1wiJVwiOjUwfV0saT0wLGo9ITEsaz0wO2s8Zi5sZW5ndGg7aysrKXt2YXIgbD1mW2tdO1wic3RyaW5nXCI9PXR5cGVvZiBsPyhqPS9ib3R0b218cmlnaHQvLnRlc3QobCksaT17bGVmdDowLHJpZ2h0OjAsY2VudGVyOmksdG9wOjEsYm90dG9tOjF9W2xdLGhbaV09Z1tsXSxcImNlbnRlclwiPT1sJiZpKyspOihqJiYobD1iKGwpLGxbXCIlXCJdPShsW1wiJVwiXXx8MCkrMTAwKSxoW2ldPWwsaSsrLGo9ITEpfXJldHVybltoLGVbMV1dfX1mdW5jdGlvbiBmKGIpe3ZhciBjPWEuY29uc3VtZVJlcGVhdGVkKGUsL14sLyxiKTtpZihjJiZcIlwiPT1jWzFdKXJldHVybiBjWzBdfXZhciBnPXtsZWZ0OntcIiVcIjowfSxjZW50ZXI6e1wiJVwiOjUwfSxyaWdodDp7XCIlXCI6MTAwfSx0b3A6e1wiJVwiOjB9LGJvdHRvbTp7XCIlXCI6MTAwfX0saD1hLm1lcmdlTmVzdGVkUmVwZWF0ZWQuYmluZChudWxsLGEubWVyZ2VEaW1lbnNpb25zLFwiIFwiKTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGQuYmluZChudWxsLDMpLGgsW1widHJhbnNmb3JtLW9yaWdpblwiXSksYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihkLmJpbmQobnVsbCwyKSxoLFtcInBlcnNwZWN0aXZlLW9yaWdpblwiXSksYS5jb25zdW1lUG9zaXRpb249ZSxhLm1lcmdlT2Zmc2V0TGlzdD1oO3ZhciBpPWEubWVyZ2VOZXN0ZWRSZXBlYXRlZC5iaW5kKG51bGwsaCxcIiwgXCIpO2EuYWRkUHJvcGVydGllc0hhbmRsZXIoZixpLFtcImJhY2tncm91bmQtcG9zaXRpb25cIixcIm9iamVjdC1wb3NpdGlvblwiXSl9KGIpLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYil7dmFyIGM9YS5jb25zdW1lVG9rZW4oL15jaXJjbGUvLGIpO2lmKGMmJmNbMF0pcmV0dXJuW1wiY2lyY2xlXCJdLmNvbmNhdChhLmNvbnN1bWVMaXN0KFthLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKHZvaWQgMCwvXlxcKC8pKSxkLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQodm9pZCAwLC9eYXQvKSksYS5jb25zdW1lUG9zaXRpb24sYS5pZ25vcmUoYS5jb25zdW1lVG9rZW4uYmluZCh2b2lkIDAsL15cXCkvKSldLGNbMV0pKTt2YXIgZj1hLmNvbnN1bWVUb2tlbigvXmVsbGlwc2UvLGIpO2lmKGYmJmZbMF0pcmV0dXJuW1wiZWxsaXBzZVwiXS5jb25jYXQoYS5jb25zdW1lTGlzdChbYS5pZ25vcmUoYS5jb25zdW1lVG9rZW4uYmluZCh2b2lkIDAsL15cXCgvKSksZSxhLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKHZvaWQgMCwvXmF0LykpLGEuY29uc3VtZVBvc2l0aW9uLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQodm9pZCAwLC9eXFwpLykpXSxmWzFdKSk7dmFyIGc9YS5jb25zdW1lVG9rZW4oL15wb2x5Z29uLyxiKTtyZXR1cm4gZyYmZ1swXT9bXCJwb2x5Z29uXCJdLmNvbmNhdChhLmNvbnN1bWVMaXN0KFthLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKHZvaWQgMCwvXlxcKC8pKSxhLm9wdGlvbmFsKGEuY29uc3VtZVRva2VuLmJpbmQodm9pZCAwLC9ebm9uemVyb1xccyosfF5ldmVub2RkXFxzKiwvKSxcIm5vbnplcm8sXCIpLGEuY29uc3VtZVNpemVQYWlyTGlzdCxhLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKHZvaWQgMCwvXlxcKS8pKV0sZ1sxXSkpOnZvaWQgMH1mdW5jdGlvbiBjKGIsYyl7aWYoYlswXT09PWNbMF0pcmV0dXJuXCJjaXJjbGVcIj09YlswXT9hLm1lcmdlTGlzdChiLnNsaWNlKDEpLGMuc2xpY2UoMSksW1wiY2lyY2xlKFwiLGEubWVyZ2VEaW1lbnNpb25zLFwiIGF0IFwiLGEubWVyZ2VPZmZzZXRMaXN0LFwiKVwiXSk6XCJlbGxpcHNlXCI9PWJbMF0/YS5tZXJnZUxpc3QoYi5zbGljZSgxKSxjLnNsaWNlKDEpLFtcImVsbGlwc2UoXCIsYS5tZXJnZU5vbk5lZ2F0aXZlU2l6ZVBhaXIsXCIgYXQgXCIsYS5tZXJnZU9mZnNldExpc3QsXCIpXCJdKTpcInBvbHlnb25cIj09YlswXSYmYlsxXT09Y1sxXT9hLm1lcmdlTGlzdChiLnNsaWNlKDIpLGMuc2xpY2UoMiksW1wicG9seWdvbihcIixiWzFdLGcsXCIpXCJdKTp2b2lkIDB9dmFyIGQ9YS5jb25zdW1lUGFyZW50aGVzaXNlZC5iaW5kKG51bGwsYS5wYXJzZUxlbmd0aE9yUGVyY2VudCksZT1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxkLC9eLyksZj1hLm1lcmdlTmVzdGVkUmVwZWF0ZWQuYmluZCh2b2lkIDAsYS5tZXJnZURpbWVuc2lvbnMsXCIgXCIpLGc9YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLGYsXCIsXCIpO2EuYWRkUHJvcGVydGllc0hhbmRsZXIoYixjLFtcInNoYXBlLW91dHNpZGVcIl0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtiLmNvbmNhdChbYV0pLmZvckVhY2goZnVuY3Rpb24oYil7YiBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUmJihkW2FdPWIpLGVbYl09YX0pfXZhciBkPXt9LGU9e307YyhcInRyYW5zZm9ybVwiLFtcIndlYmtpdFRyYW5zZm9ybVwiLFwibXNUcmFuc2Zvcm1cIl0pLGMoXCJ0cmFuc2Zvcm1PcmlnaW5cIixbXCJ3ZWJraXRUcmFuc2Zvcm1PcmlnaW5cIl0pLGMoXCJwZXJzcGVjdGl2ZVwiLFtcIndlYmtpdFBlcnNwZWN0aXZlXCJdKSxjKFwicGVyc3BlY3RpdmVPcmlnaW5cIixbXCJ3ZWJraXRQZXJzcGVjdGl2ZU9yaWdpblwiXSksYS5wcm9wZXJ0eU5hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGRbYV18fGF9LGEudW5wcmVmaXhlZFByb3BlcnR5TmFtZT1mdW5jdGlvbihhKXtyZXR1cm4gZVthXXx8YX19KGIpfSgpLGZ1bmN0aW9uKCl7aWYodm9pZCAwPT09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKS5hbmltYXRlKFtdKS5vbmNhbmNlbCl7dmFyIGE7aWYod2luZG93LnBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3cpdmFyIGE9ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9O2Vsc2UgdmFyIGE9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKX07dmFyIGI9ZnVuY3Rpb24oYSxiLGMpe3RoaXMudGFyZ2V0PWEsdGhpcy5jdXJyZW50VGltZT1iLHRoaXMudGltZWxpbmVUaW1lPWMsdGhpcy50eXBlPVwiY2FuY2VsXCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfSxjPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlO3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGQsZSl7dmFyIGY9Yy5jYWxsKHRoaXMsZCxlKTtmLl9jYW5jZWxIYW5kbGVycz1bXSxmLm9uY2FuY2VsPW51bGw7dmFyIGc9Zi5jYW5jZWw7Zi5jYW5jZWw9ZnVuY3Rpb24oKXtnLmNhbGwodGhpcyk7dmFyIGM9bmV3IGIodGhpcyxudWxsLGEoKSksZD10aGlzLl9jYW5jZWxIYW5kbGVycy5jb25jYXQodGhpcy5vbmNhbmNlbD9bdGhpcy5vbmNhbmNlbF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGMudGFyZ2V0LGMpfSl9LDApfTt2YXIgaD1mLmFkZEV2ZW50TGlzdGVuZXI7Zi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYil7XCJmdW5jdGlvblwiPT10eXBlb2YgYiYmXCJjYW5jZWxcIj09YT90aGlzLl9jYW5jZWxIYW5kbGVycy5wdXNoKGIpOmguY2FsbCh0aGlzLGEsYil9O3ZhciBpPWYucmVtb3ZlRXZlbnRMaXN0ZW5lcjtyZXR1cm4gZi5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYil7aWYoXCJjYW5jZWxcIj09YSl7dmFyIGM9dGhpcy5fY2FuY2VsSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9jYW5jZWxIYW5kbGVycy5zcGxpY2UoYywxKX1lbHNlIGkuY2FsbCh0aGlzLGEsYil9LGZ9fX0oKSxmdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYz1udWxsLGQ9ITE7dHJ5e3ZhciBlPWdldENvbXB1dGVkU3R5bGUoYikuZ2V0UHJvcGVydHlWYWx1ZShcIm9wYWNpdHlcIiksZj1cIjBcIj09ZT9cIjFcIjpcIjBcIjtjPWIuYW5pbWF0ZSh7b3BhY2l0eTpbZixmXX0se2R1cmF0aW9uOjF9KSxjLmN1cnJlbnRUaW1lPTAsZD1nZXRDb21wdXRlZFN0eWxlKGIpLmdldFByb3BlcnR5VmFsdWUoXCJvcGFjaXR5XCIpPT1mfWNhdGNoKGEpe31maW5hbGx5e2MmJmMuY2FuY2VsKCl9aWYoIWQpe3ZhciBnPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlO3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGIsYyl7cmV0dXJuIHdpbmRvdy5TeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmQXJyYXkucHJvdG90eXBlLmZyb20mJmJbU3ltYm9sLml0ZXJhdG9yXSYmKGI9QXJyYXkuZnJvbShiKSksQXJyYXkuaXNBcnJheShiKXx8bnVsbD09PWJ8fChiPWEuY29udmVydFRvQXJyYXlGb3JtKGIpKSxnLmNhbGwodGhpcyxiLGMpfX19KGEpfSgpO1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBub3JtYWxpemVTdHJpbmdBcmd1bWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50Jyk7XG5cbnZhciBuYXRpdmVFcnJvclRvU3RyaW5nID0gRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgSU5DT1JSRUNUX1RPX1NUUklORyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgLy8gQ2hyb21lIDMyLSBpbmNvcnJlY3RseSBjYWxsIGFjY2Vzc29yXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1jcmVhdGUsIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgdmFyIG9iamVjdCA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnbmFtZScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcyA9PT0gb2JqZWN0O1xuICAgIH0gfSkpO1xuICAgIGlmIChuYXRpdmVFcnJvclRvU3RyaW5nLmNhbGwob2JqZWN0KSAhPT0gJ3RydWUnKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBGRjEwLSBkb2VzIG5vdCBwcm9wZXJseSBoYW5kbGUgbm9uLXN0cmluZ3NcbiAgcmV0dXJuIG5hdGl2ZUVycm9yVG9TdHJpbmcuY2FsbCh7IG1lc3NhZ2U6IDEsIG5hbWU6IDIgfSkgIT09ICcyOiAxJ1xuICAgIC8vIElFOCBkb2VzIG5vdCBwcm9wZXJseSBoYW5kbGUgZGVmYXVsdHNcbiAgICB8fCBuYXRpdmVFcnJvclRvU3RyaW5nLmNhbGwoe30pICE9PSAnRXJyb3InO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gSU5DT1JSRUNUX1RPX1NUUklORyA/IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICB2YXIgTyA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgbmFtZSA9IG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KE8ubmFtZSwgJ0Vycm9yJyk7XG4gIHZhciBtZXNzYWdlID0gbm9ybWFsaXplU3RyaW5nQXJndW1lbnQoTy5tZXNzYWdlKTtcbiAgcmV0dXJuICFuYW1lID8gbWVzc2FnZSA6ICFtZXNzYWdlID8gbmFtZSA6IG5hbWUgKyAnOiAnICsgbWVzc2FnZTtcbn0gOiBuYXRpdmVFcnJvclRvU3RyaW5nO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGVycm9yVG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3ItdG8tc3RyaW5nJyk7XG5cbnZhciBFcnJvclByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcblxuLy8gYEVycm9yLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGZpeFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1lcnJvci5wcm90b3R5cGUudG9zdHJpbmdcbmlmIChFcnJvclByb3RvdHlwZS50b1N0cmluZyAhPT0gZXJyb3JUb1N0cmluZykge1xuICBkZWZpbmVCdWlsdEluKEVycm9yUHJvdG90eXBlLCAndG9TdHJpbmcnLCBlcnJvclRvU3RyaW5nKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maW5kO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbnZhciBGSU5EID0gJ2ZpbmQnO1xudmFyIFNLSVBTX0hPTEVTID0gdHJ1ZTtcblxuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZmluZCAtLSB0ZXN0aW5nXG5pZiAoRklORCBpbiBbXSkgQXJyYXkoMSlbRklORF0oZnVuY3Rpb24gKCkgeyBTS0lQU19IT0xFUyA9IGZhbHNlOyB9KTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFNLSVBTX0hPTEVTIH0sIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKEZJTkQpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRpbmNsdWRlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluY2x1ZGVzO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxuLy8gRkY5OSsgYnVnXG52YXIgQlJPS0VOX09OX1NQQVJTRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1pbmNsdWRlcyAtLSBkZXRlY3Rpb25cbiAgcmV0dXJuICFBcnJheSgxKS5pbmNsdWRlcygpO1xufSk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJST0tFTl9PTl9TUEFSU0UgfSwge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygnaW5jbHVkZXMnKTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUtaW5kZXhvZiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIG5hdGl2ZUluZGV4T2YgPSB1bmN1cnJ5VGhpcyhbXS5pbmRleE9mKTtcblxudmFyIE5FR0FUSVZFX1pFUk8gPSAhIW5hdGl2ZUluZGV4T2YgJiYgMSAvIG5hdGl2ZUluZGV4T2YoWzFdLCAxLCAtMCkgPCAwO1xudmFyIEZPUkNFRCA9IE5FR0FUSVZFX1pFUk8gfHwgIWFycmF5TWV0aG9kSXNTdHJpY3QoJ2luZGV4T2YnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICB2YXIgZnJvbUluZGV4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gbmF0aXZlSW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBmcm9tSW5kZXgpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgZnJvbUluZGV4KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBuYXRpdmVTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NsaWNlJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc2xpY2Vcbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgICAvLyBpbmxpbmUgYEFycmF5U3BlY2llc0NyZWF0ZWAgZm9yIHVzYWdlIG5hdGl2ZSBgQXJyYXkjc2xpY2VgIHdoZXJlIGl0J3MgcG9zc2libGVcbiAgICB2YXIgQ29uc3RydWN0b3IsIHJlc3VsdCwgbjtcbiAgICBpZiAoaXNBcnJheShPKSkge1xuICAgICAgQ29uc3RydWN0b3IgPSBPLmNvbnN0cnVjdG9yO1xuICAgICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICAgIGlmIChpc0NvbnN0cnVjdG9yKENvbnN0cnVjdG9yKSAmJiAoQ29uc3RydWN0b3IgPT09ICRBcnJheSB8fCBpc0FycmF5KENvbnN0cnVjdG9yLnByb3RvdHlwZSkpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcltTUEVDSUVTXTtcbiAgICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBudWxsKSBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlKE8sIGssIGZpbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IG5ldyAoQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IENvbnN0cnVjdG9yKShtYXgoZmluIC0gaywgMCkpO1xuICAgIGZvciAobiA9IDA7IGsgPCBmaW47IGsrKywgbisrKSBpZiAoayBpbiBPKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnR5ICE9PSBkZWZpbmVQcm9wZXJ0eSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydHk6IGRlZmluZVByb3BlcnR5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRk9SQ0VEID0gIURFU0NSSVBUT1JTIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSW5kZXhlZE9iamVjdChpdCksIGtleSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpLmY7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiAhT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGdldE93blByb3BlcnR5TmFtZXM6IGdldE93blByb3BlcnR5TmFtZXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbmF0aXZlR2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyJyk7XG5cbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVHZXRQcm90b3R5cGVPZigxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0cHJvdG90eXBlb2ZcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMsIHNoYW06ICFDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgfSwge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0UHJvdG90eXBlT2YodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZycpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbmlmICghVE9fU1RSSU5HX1RBR19TVVBQT1JUKSB7XG4gIGRlZmluZUJ1aWx0SW4oT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgdG9TdHJpbmcsIHsgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzb2YoZ2xvYmFsLnByb2Nlc3MpID09PSAncHJvY2Vzcyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUpIHtcbiAgdmFyIENvbnN0cnVjdG9yID0gZ2V0QnVpbHRJbihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgQ29uc3RydWN0b3IgJiYgIUNvbnN0cnVjdG9yW1NQRUNJRVNdKSB7XG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKENvbnN0cnVjdG9yLCBTUEVDSUVTLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgICB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUHJvdG90eXBlKSB7XG4gIGlmIChpc1Byb3RvdHlwZU9mKFByb3RvdHlwZSwgaXQpKSByZXR1cm4gaXQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCdJbmNvcnJlY3QgaW52b2NhdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ29uc3RydWN0b3IoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgU3BlY2llc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3BlY2llc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBkZWZhdWx0Q29uc3RydWN0b3IpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgaXNOdWxsT3JVbmRlZmluZWQoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA/IGRlZmF1bHRDb25zdHJ1Y3RvciA6IGFDb25zdHJ1Y3RvcihTKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHBhc3NlZCwgcmVxdWlyZWQpIHtcbiAgaWYgKHBhc3NlZCA8IHJlcXVpcmVkKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignTm90IGVub3VnaCBhcmd1bWVudHMnKTtcbiAgcmV0dXJuIHBhc3NlZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IC8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KHVzZXJBZ2VudCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcycpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxudmFyIHNldCA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXIgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIEZ1bmN0aW9uID0gZ2xvYmFsLkZ1bmN0aW9uO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciAkbG9jYXRpb24sIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xuXG5mYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIERlbm8gdGhyb3dzIGEgUmVmZXJlbmNlRXJyb3Igb24gYGxvY2F0aW9uYCBhY2Nlc3Mgd2l0aG91dCBgLS1sb2NhdGlvbmAgZmxhZ1xuICAkbG9jYXRpb24gPSBnbG9iYWwubG9jYXRpb247XG59KTtcblxudmFyIHJ1biA9IGZ1bmN0aW9uIChpZCkge1xuICBpZiAoaGFzT3duKHF1ZXVlLCBpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xuXG52YXIgcnVubmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcnVuKGlkKTtcbiAgfTtcbn07XG5cbnZhciBldmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bihldmVudC5kYXRhKTtcbn07XG5cbnZhciBnbG9iYWxQb3N0TWVzc2FnZURlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIC8vIG9sZCBlbmdpbmVzIGhhdmUgbm90IGxvY2F0aW9uLm9yaWdpblxuICBnbG9iYWwucG9zdE1lc3NhZ2UoU3RyaW5nKGlkKSwgJGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArICRsb2NhdGlvbi5ob3N0KTtcbn07XG5cbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0IHx8ICFjbGVhcikge1xuICBzZXQgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoaGFuZGxlcikge1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBmbiA9IGlzQ2FsbGFibGUoaGFuZGxlcikgPyBoYW5kbGVyIDogRnVuY3Rpb24oaGFuZGxlcik7XG4gICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cywgMSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwcGx5KGZuLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKElTX05PREUpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgLy8gZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82MjRcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCAmJiAhSVNfSU9TKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZXZlbnRMaXN0ZW5lcjtcbiAgICBkZWZlciA9IGJpbmQocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKFxuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmXG4gICAgaXNDYWxsYWJsZShnbG9iYWwucG9zdE1lc3NhZ2UpICYmXG4gICAgIWdsb2JhbC5pbXBvcnRTY3JpcHRzICYmXG4gICAgJGxvY2F0aW9uICYmICRsb2NhdGlvbi5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJlxuICAgICFmYWlscyhnbG9iYWxQb3N0TWVzc2FnZURlZmVyKVxuICApIHtcbiAgICBkZWZlciA9IGdsb2JhbFBvc3RNZXNzYWdlRGVmZXI7XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBldmVudExpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChydW5uZXIoaWQpLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgY2xlYXI6IGNsZWFyXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIEF2b2lkIE5vZGVKUyBleHBlcmltZW50YWwgd2FybmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIURFU0NSSVBUT1JTKSByZXR1cm4gZ2xvYmFsW25hbWVdO1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsIG5hbWUpO1xuICByZXR1cm4gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuaGVhZCA9IG51bGw7XG4gIHRoaXMudGFpbCA9IG51bGw7XG59O1xuXG5RdWV1ZS5wcm90b3R5cGUgPSB7XG4gIGFkZDogZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICB2YXIgZW50cnkgPSB7IGl0ZW06IGl0ZW0sIG5leHQ6IG51bGwgfTtcbiAgICB2YXIgdGFpbCA9IHRoaXMudGFpbDtcbiAgICBpZiAodGFpbCkgdGFpbC5uZXh0ID0gZW50cnk7XG4gICAgZWxzZSB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVudHJ5ID0gdGhpcy5oZWFkO1xuICAgIGlmIChlbnRyeSkge1xuICAgICAgdmFyIG5leHQgPSB0aGlzLmhlYWQgPSBlbnRyeS5uZXh0O1xuICAgICAgaWYgKG5leHQgPT09IG51bGwpIHRoaXMudGFpbCA9IG51bGw7XG4gICAgICByZXR1cm4gZW50cnkuaXRlbTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUXVldWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC9pcGFkfGlwaG9uZXxpcG9kL2kudGVzdCh1c2VyQWdlbnQpICYmIHR5cGVvZiBQZWJibGUgIT0gJ3VuZGVmaW5lZCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC93ZWIwcyg/IS4qY2hyb21lKS9pLnRlc3QodXNlckFnZW50KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNhZmVHZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NhZmUtZ2V0LWJ1aWx0LWluJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9xdWV1ZScpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG52YXIgSVNfSU9TX1BFQkJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLXBlYmJsZScpO1xudmFyIElTX1dFQk9TX1dFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0Jyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgTXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgbWljcm90YXNrID0gc2FmZUdldEJ1aWx0SW4oJ3F1ZXVlTWljcm90YXNrJyk7XG52YXIgbm90aWZ5LCB0b2dnbGUsIG5vZGUsIHByb21pc2UsIHRoZW47XG5cbi8vIG1vZGVybiBlbmdpbmVzIGhhdmUgcXVldWVNaWNyb3Rhc2sgbWV0aG9kXG5pZiAoIW1pY3JvdGFzaykge1xuICB2YXIgcXVldWUgPSBuZXcgUXVldWUoKTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKElTX05PREUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoZm4gPSBxdWV1ZS5nZXQoKSkgdHJ5IHtcbiAgICAgIGZuKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChxdWV1ZS5oZWFkKSBub3RpZnkoKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIC8vIGFsc28gZXhjZXB0IFdlYk9TIFdlYmtpdCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODk4XG4gIGlmICghSVNfSU9TICYmICFJU19OT0RFICYmICFJU19XRUJPU19XRUJLSVQgJiYgTXV0YXRpb25PYnNlcnZlciAmJiBkb2N1bWVudCkge1xuICAgIHRvZ2dsZSA9IHRydWU7XG4gICAgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKCFJU19JT1NfUEVCQkxFICYmIFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgLy8gd29ya2Fyb3VuZCBvZiBXZWJLaXQgfiBpT1MgU2FmYXJpIDEwLjEgYnVnXG4gICAgcHJvbWlzZS5jb25zdHJ1Y3RvciA9IFByb21pc2U7XG4gICAgdGhlbiA9IGJpbmQocHJvbWlzZS50aGVuLCBwcm9taXNlKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBOb2RlLmpzIHdpdGhvdXQgcHJvbWlzZXNcbiAgfSBlbHNlIGlmIChJU19OT0RFKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnZVxuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICAvLyBgd2VicGFja2AgZGV2IHNlcnZlciBidWcgb24gSUUgZ2xvYmFsIG1ldGhvZHMgLSB1c2UgYmluZChmbiwgZ2xvYmFsKVxuICAgIG1hY3JvdGFzayA9IGJpbmQobWFjcm90YXNrLCBnbG9iYWwpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1hY3JvdGFzayhmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIG1pY3JvdGFzayA9IGZ1bmN0aW9uIChmbikge1xuICAgIGlmICghcXVldWUuaGVhZCkgbm90aWZ5KCk7XG4gICAgcXVldWUuYWRkKGZuKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtaWNyb3Rhc2s7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYSwgYikge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlIC0tIHNhZmVcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gY29uc29sZS5lcnJvcihhKSA6IGNvbnNvbGUuZXJyb3IoYSwgYik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiB7IGVycm9yOiBmYWxzZSwgdmFsdWU6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB7IGVycm9yOiB0cnVlLCB2YWx1ZTogZXJyb3IgfTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5Qcm9taXNlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBEZW5vIC0tIERlbm8gY2FzZSAqL1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgRGVubyA9PSAnb2JqZWN0JyAmJiBEZW5vICYmIHR5cGVvZiBEZW5vLnZlcnNpb24gPT0gJ29iamVjdCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX0RFTk8gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8nKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIUlTX0RFTk8gJiYgIUlTX05PREVcbiAgJiYgdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0J1xuICAmJiB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX0JST1dTRVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWJyb3dzZXInKTtcbnZhciBJU19ERU5PID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1kZW5vJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBTVUJDTEFTU0lORyA9IGZhbHNlO1xudmFyIE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCA9IGlzQ2FsbGFibGUoZ2xvYmFsLlByb21pc2VSZWplY3Rpb25FdmVudCk7XG5cbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IGlzRm9yY2VkKCdQcm9taXNlJywgZnVuY3Rpb24gKCkge1xuICB2YXIgUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UgPSBpbnNwZWN0U291cmNlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIHZhciBHTE9CQUxfQ09SRV9KU19QUk9NSVNFID0gUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UgIT09IFN0cmluZyhOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpO1xuICAvLyBWOCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAvLyBXZSBjYW4ndCBkZXRlY3QgaXQgc3luY2hyb25vdXNseSwgc28ganVzdCBjaGVjayB2ZXJzaW9uc1xuICBpZiAoIUdMT0JBTF9DT1JFX0pTX1BST01JU0UgJiYgVjhfVkVSU0lPTiA9PT0gNjYpIHJldHVybiB0cnVlO1xuICAvLyBXZSBuZWVkIFByb21pc2UjeyBjYXRjaCwgZmluYWxseSB9IGluIHRoZSBwdXJlIHZlcnNpb24gZm9yIHByZXZlbnRpbmcgcHJvdG90eXBlIHBvbGx1dGlvblxuICBpZiAoSVNfUFVSRSAmJiAhKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2NhdGNoJ10gJiYgTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnZmluYWxseSddKSkgcmV0dXJuIHRydWU7XG4gIC8vIFdlIGNhbid0IHVzZSBAQHNwZWNpZXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG4gIGlmICghVjhfVkVSU0lPTiB8fCBWOF9WRVJTSU9OIDwgNTEgfHwgIS9uYXRpdmUgY29kZS8udGVzdChQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSkpIHtcbiAgICAvLyBEZXRlY3QgY29ycmVjdG5lc3Mgb2Ygc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gbmV3IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKDEpOyB9KTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSBmdW5jdGlvbiAoZXhlYykge1xuICAgICAgZXhlYyhmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gICAgfTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBwcm9taXNlLmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBGYWtlUHJvbWlzZTtcbiAgICBTVUJDTEFTU0lORyA9IHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pIGluc3RhbmNlb2YgRmFrZVByb21pc2U7XG4gICAgaWYgKCFTVUJDTEFTU0lORykgcmV0dXJuIHRydWU7XG4gIC8vIFVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgfSByZXR1cm4gIUdMT0JBTF9DT1JFX0pTX1BST01JU0UgJiYgKElTX0JST1dTRVIgfHwgSVNfREVOTykgJiYgIU5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ09OU1RSVUNUT1I6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SLFxuICBSRUpFQ1RJT05fRVZFTlQ6IE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCxcbiAgU1VCQ0xBU1NJTkc6IFNVQkNMQVNTSU5HXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUNhbGxhYmxlKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFDYWxsYWJsZShyZWplY3QpO1xufTtcblxuLy8gYE5ld1Byb21pc2VDYXBhYmlsaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbmV3cHJvbWlzZWNhcGFiaWxpdHlcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciB0YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21pY3JvdGFzaycpO1xudmFyIGhvc3RSZXBvcnRFcnJvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzJyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgUXVldWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcXVldWUnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5DT05TVFJVQ1RPUjtcbnZhciBOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uUkVKRUNUSU9OX0VWRU5UO1xudmFyIE5BVElWRV9QUk9NSVNFX1NVQkNMQVNTSU5HID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLlNVQkNMQVNTSU5HO1xudmFyIGdldEludGVybmFsUHJvbWlzZVN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoUFJPTUlTRSk7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3IgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3I7XG52YXIgUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VQcm90b3R5cGU7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xudmFyIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5O1xuXG52YXIgRElTUEFUQ0hfRVZFTlQgPSAhIShkb2N1bWVudCAmJiBkb2N1bWVudC5jcmVhdGVFdmVudCAmJiBnbG9iYWwuZGlzcGF0Y2hFdmVudCk7XG52YXIgVU5IQU5ETEVEX1JFSkVDVElPTiA9ICd1bmhhbmRsZWRyZWplY3Rpb24nO1xudmFyIFJFSkVDVElPTl9IQU5ETEVEID0gJ3JlamVjdGlvbmhhbmRsZWQnO1xudmFyIFBFTkRJTkcgPSAwO1xudmFyIEZVTEZJTExFRCA9IDE7XG52YXIgUkVKRUNURUQgPSAyO1xudmFyIEhBTkRMRUQgPSAxO1xudmFyIFVOSEFORExFRCA9IDI7XG5cbnZhciBJbnRlcm5hbCwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFByb21pc2VXcmFwcGVyLCBuYXRpdmVUaGVuO1xuXG4vLyBoZWxwZXJzXG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiBpc0NhbGxhYmxlKHRoZW4gPSBpdC50aGVuKSA/IHRoZW4gOiBmYWxzZTtcbn07XG5cbnZhciBjYWxsUmVhY3Rpb24gPSBmdW5jdGlvbiAocmVhY3Rpb24sIHN0YXRlKSB7XG4gIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICB2YXIgb2sgPSBzdGF0ZS5zdGF0ZSA9PT0gRlVMRklMTEVEO1xuICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgdHJ5IHtcbiAgICBpZiAoaGFuZGxlcikge1xuICAgICAgaWYgKCFvaykge1xuICAgICAgICBpZiAoc3RhdGUucmVqZWN0aW9uID09PSBVTkhBTkRMRUQpIG9uSGFuZGxlVW5oYW5kbGVkKHN0YXRlKTtcbiAgICAgICAgc3RhdGUucmVqZWN0aW9uID0gSEFORExFRDtcbiAgICAgIH1cbiAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIGNhbiB0aHJvd1xuICAgICAgICBpZiAoZG9tYWluKSB7XG4gICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgfSBlbHNlIGlmICh0aGVuID0gaXNUaGVuYWJsZShyZXN1bHQpKSB7XG4gICAgICAgIGNhbGwodGhlbiwgcmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgfVxufTtcblxudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChzdGF0ZSwgaXNSZWplY3QpIHtcbiAgaWYgKHN0YXRlLm5vdGlmaWVkKSByZXR1cm47XG4gIHN0YXRlLm5vdGlmaWVkID0gdHJ1ZTtcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVhY3Rpb25zID0gc3RhdGUucmVhY3Rpb25zO1xuICAgIHZhciByZWFjdGlvbjtcbiAgICB3aGlsZSAocmVhY3Rpb24gPSByZWFjdGlvbnMuZ2V0KCkpIHtcbiAgICAgIGNhbGxSZWFjdGlvbihyZWFjdGlvbiwgc3RhdGUpO1xuICAgIH1cbiAgICBzdGF0ZS5ub3RpZmllZCA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhc3RhdGUucmVqZWN0aW9uKSBvblVuaGFuZGxlZChzdGF0ZSk7XG4gIH0pO1xufTtcblxudmFyIGRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAobmFtZSwgcHJvbWlzZSwgcmVhc29uKSB7XG4gIHZhciBldmVudCwgaGFuZGxlcjtcbiAgaWYgKERJU1BBVENIX0VWRU5UKSB7XG4gICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICBldmVudC5wcm9taXNlID0gcHJvbWlzZTtcbiAgICBldmVudC5yZWFzb24gPSByZWFzb247XG4gICAgZXZlbnQuaW5pdEV2ZW50KG5hbWUsIGZhbHNlLCB0cnVlKTtcbiAgICBnbG9iYWwuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH0gZWxzZSBldmVudCA9IHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiByZWFzb24gfTtcbiAgaWYgKCFOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQgJiYgKGhhbmRsZXIgPSBnbG9iYWxbJ29uJyArIG5hbWVdKSkgaGFuZGxlcihldmVudCk7XG4gIGVsc2UgaWYgKG5hbWUgPT09IFVOSEFORExFRF9SRUpFQ1RJT04pIGhvc3RSZXBvcnRFcnJvcnMoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHJlYXNvbik7XG59O1xuXG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY2FsbCh0YXNrLCBnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHN0YXRlLmZhY2FkZTtcbiAgICB2YXIgdmFsdWUgPSBzdGF0ZS52YWx1ZTtcbiAgICB2YXIgSVNfVU5IQU5ETEVEID0gaXNVbmhhbmRsZWQoc3RhdGUpO1xuICAgIHZhciByZXN1bHQ7XG4gICAgaWYgKElTX1VOSEFORExFRCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChJU19OT0RFKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFVOSEFORExFRF9SRUpFQ1RJT04sIHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHN0YXRlLnJlamVjdGlvbiA9IElTX05PREUgfHwgaXNVbmhhbmRsZWQoc3RhdGUpID8gVU5IQU5ETEVEIDogSEFORExFRDtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IHJlc3VsdC52YWx1ZTtcbiAgICB9XG4gIH0pO1xufTtcblxudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5yZWplY3Rpb24gIT09IEhBTkRMRUQgJiYgIXN0YXRlLnBhcmVudDtcbn07XG5cbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICBjYWxsKHRhc2ssIGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gc3RhdGUuZmFjYWRlO1xuICAgIGlmIChJU19OT0RFKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgZGlzcGF0Y2hFdmVudChSRUpFQ1RJT05fSEFORExFRCwgcHJvbWlzZSwgc3RhdGUudmFsdWUpO1xuICB9KTtcbn07XG5cbnZhciBiaW5kID0gZnVuY3Rpb24gKGZuLCBzdGF0ZSwgdW53cmFwKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBmbihzdGF0ZSwgdmFsdWUsIHVud3JhcCk7XG4gIH07XG59O1xuXG52YXIgaW50ZXJuYWxSZWplY3QgPSBmdW5jdGlvbiAoc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICBzdGF0ZS5zdGF0ZSA9IFJFSkVDVEVEO1xuICBub3RpZnkoc3RhdGUsIHRydWUpO1xufTtcblxudmFyIGludGVybmFsUmVzb2x2ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHRyeSB7XG4gICAgaWYgKHN0YXRlLmZhY2FkZSA9PT0gdmFsdWUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICB2YXIgdGhlbiA9IGlzVGhlbmFibGUodmFsdWUpO1xuICAgIGlmICh0aGVuKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjYWxsKHRoZW4sIHZhbHVlLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlc29sdmUsIHdyYXBwZXIsIHN0YXRlKSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZWplY3QsIHdyYXBwZXIsIHN0YXRlKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaW50ZXJuYWxSZWplY3Qod3JhcHBlciwgZXJyb3IsIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gICAgICBzdGF0ZS5zdGF0ZSA9IEZVTEZJTExFRDtcbiAgICAgIG5vdGlmeShzdGF0ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbnRlcm5hbFJlamVjdCh7IGRvbmU6IGZhbHNlIH0sIGVycm9yLCBzdGF0ZSk7XG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgUHJvbWlzZUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIGFuSW5zdGFuY2UodGhpcywgUHJvbWlzZVByb3RvdHlwZSk7XG4gICAgYUNhbGxhYmxlKGV4ZWN1dG9yKTtcbiAgICBjYWxsKEludGVybmFsLCB0aGlzKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoYmluZChpbnRlcm5hbFJlc29sdmUsIHN0YXRlKSwgYmluZChpbnRlcm5hbFJlamVjdCwgc3RhdGUpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaW50ZXJuYWxSZWplY3Qoc3RhdGUsIGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgUHJvbWlzZVByb3RvdHlwZSA9IFByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICB0eXBlOiBQUk9NSVNFLFxuICAgICAgZG9uZTogZmFsc2UsXG4gICAgICBub3RpZmllZDogZmFsc2UsXG4gICAgICBwYXJlbnQ6IGZhbHNlLFxuICAgICAgcmVhY3Rpb25zOiBuZXcgUXVldWUoKSxcbiAgICAgIHJlamVjdGlvbjogZmFsc2UsXG4gICAgICBzdGF0ZTogUEVORElORyxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgfTtcblxuICAvLyBgUHJvbWlzZS5wcm90b3R5cGUudGhlbmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUudGhlblxuICBJbnRlcm5hbC5wcm90b3R5cGUgPSBkZWZpbmVCdWlsdEluKFByb21pc2VQcm90b3R5cGUsICd0aGVuJywgZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBQcm9taXNlQ29uc3RydWN0b3IpKTtcbiAgICBzdGF0ZS5wYXJlbnQgPSB0cnVlO1xuICAgIHJlYWN0aW9uLm9rID0gaXNDYWxsYWJsZShvbkZ1bGZpbGxlZCkgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgcmVhY3Rpb24uZmFpbCA9IGlzQ2FsbGFibGUob25SZWplY3RlZCkgJiYgb25SZWplY3RlZDtcbiAgICByZWFjdGlvbi5kb21haW4gPSBJU19OT0RFID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgaWYgKHN0YXRlLnN0YXRlID09PSBQRU5ESU5HKSBzdGF0ZS5yZWFjdGlvbnMuYWRkKHJlYWN0aW9uKTtcbiAgICBlbHNlIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsUmVhY3Rpb24ocmVhY3Rpb24sIHN0YXRlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgfSk7XG5cbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZShwcm9taXNlKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBzdGF0ZSk7XG4gICAgdGhpcy5yZWplY3QgPSBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSk7XG4gIH07XG5cbiAgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgICByZXR1cm4gQyA9PT0gUHJvbWlzZUNvbnN0cnVjdG9yIHx8IEMgPT09IFByb21pc2VXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG5cbiAgaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKSAmJiBOYXRpdmVQcm9taXNlUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgbmF0aXZlVGhlbiA9IE5hdGl2ZVByb21pc2VQcm90b3R5cGUudGhlbjtcblxuICAgIGlmICghTkFUSVZFX1BST01JU0VfU1VCQ0xBU1NJTkcpIHtcbiAgICAgIC8vIG1ha2UgYFByb21pc2UjdGhlbmAgcmV0dXJuIGEgcG9seWZpbGxlZCBgUHJvbWlzZWAgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGNhbGwobmF0aXZlVGhlbiwgdGhhdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSkudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjQwXG4gICAgICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIGAuY29uc3RydWN0b3IgPT09IFByb21pc2VgIHdvcmsgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICB0cnkge1xuICAgICAgZGVsZXRlIE5hdGl2ZVByb21pc2VQcm90b3R5cGUuY29uc3RydWN0b3I7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG4gICAgLy8gbWFrZSBgaW5zdGFuY2VvZiBQcm9taXNlYCB3b3JrIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICBzZXRQcm90b3R5cGVPZihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCBQcm9taXNlUHJvdG90eXBlKTtcbiAgICB9XG4gIH1cbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICBQcm9taXNlOiBQcm9taXNlQ29uc3RydWN0b3Jcbn0pO1xuXG5zZXRUb1N0cmluZ1RhZyhQcm9taXNlQ29uc3RydWN0b3IsIFBST01JU0UsIGZhbHNlLCB0cnVlKTtcbnNldFNwZWNpZXMoUFJPTUlTRSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG52YXIgUmVzdWx0ID0gZnVuY3Rpb24gKHN0b3BwZWQsIHJlc3VsdCkge1xuICB0aGlzLnN0b3BwZWQgPSBzdG9wcGVkO1xuICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbn07XG5cbnZhciBSZXN1bHRQcm90b3R5cGUgPSBSZXN1bHQucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgdW5ib3VuZEZ1bmN0aW9uLCBvcHRpb25zKSB7XG4gIHZhciB0aGF0ID0gb3B0aW9ucyAmJiBvcHRpb25zLnRoYXQ7XG4gIHZhciBBU19FTlRSSUVTID0gISEob3B0aW9ucyAmJiBvcHRpb25zLkFTX0VOVFJJRVMpO1xuICB2YXIgSVNfUkVDT1JEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX1JFQ09SRCk7XG4gIHZhciBJU19JVEVSQVRPUiA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19JVEVSQVRPUik7XG4gIHZhciBJTlRFUlJVUFRFRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JTlRFUlJVUFRFRCk7XG4gIHZhciBmbiA9IGJpbmQodW5ib3VuZEZ1bmN0aW9uLCB0aGF0KTtcbiAgdmFyIGl0ZXJhdG9yLCBpdGVyRm4sIGluZGV4LCBsZW5ndGgsIHJlc3VsdCwgbmV4dCwgc3RlcDtcblxuICB2YXIgc3RvcCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHtcbiAgICBpZiAoaXRlcmF0b3IpIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBjb25kaXRpb24pO1xuICAgIHJldHVybiBuZXcgUmVzdWx0KHRydWUsIGNvbmRpdGlvbik7XG4gIH07XG5cbiAgdmFyIGNhbGxGbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmIChBU19FTlRSSUVTKSB7XG4gICAgICBhbk9iamVjdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZVswXSwgdmFsdWVbMV0sIHN0b3ApIDogZm4odmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICB9IHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlLCBzdG9wKSA6IGZuKHZhbHVlKTtcbiAgfTtcblxuICBpZiAoSVNfUkVDT1JEKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZS5pdGVyYXRvcjtcbiAgfSBlbHNlIGlmIChJU19JVEVSQVRPUikge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGU7XG4gIH0gZWxzZSB7XG4gICAgaXRlckZuID0gZ2V0SXRlcmF0b3JNZXRob2QoaXRlcmFibGUpO1xuICAgIGlmICghaXRlckZuKSB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhpdGVyYWJsZSkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xuICAgIC8vIG9wdGltaXNhdGlvbiBmb3IgYXJyYXkgaXRlcmF0b3JzXG4gICAgaWYgKGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyRm4pKSB7XG4gICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoaXRlcmFibGUpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHQgPSBjYWxsRm4oaXRlcmFibGVbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xuICAgIH1cbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKGl0ZXJhYmxlLCBpdGVyRm4pO1xuICB9XG5cbiAgbmV4dCA9IElTX1JFQ09SRCA/IGl0ZXJhYmxlLm5leHQgOiBpdGVyYXRvci5uZXh0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbEZuKHN0ZXAudmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnICYmIHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcblxubW9kdWxlLmV4cG9ydHMgPSBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IuYWxsKGl0ZXJhYmxlKS50aGVuKHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLmFsbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UuYWxsXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4vLyBgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS5jYXRjaFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiwgcmVhbDogdHJ1ZSB9LCB7XG4gICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICB9XG59KTtcblxuLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjY2F0Y2hgIHByb3Blcmx5IHdvcmtzIHdpdGggcGF0Y2hlZCBgUHJvbWlzZSN0aGVuYFxuaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKSkge1xuICB2YXIgbWV0aG9kID0gZ2V0QnVpbHRJbignUHJvbWlzZScpLnByb3RvdHlwZVsnY2F0Y2gnXTtcbiAgaWYgKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2NhdGNoJ10gIT09IG1ldGhvZCkge1xuICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ2NhdGNoJywgbWV0aG9kLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLnJhY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJhY2VcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBjYWxsKCRwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcblxuLy8gYFByb21pc2UucmVqZWN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZWplY3RcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYodGhpcyk7XG4gICAgdmFyIGNhcGFiaWxpdHlSZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICBjYXBhYmlsaXR5UmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpLkNPTlNUUlVDVE9SO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xuXG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yV3JhcHBlciA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKTtcbnZhciBDSEVDS19XUkFQUEVSID0gSVNfUFVSRSAmJiAhRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1I7XG5cbi8vIGBQcm9taXNlLnJlc29sdmVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlc29sdmVcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIHx8IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIH0sIHtcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKENIRUNLX1dSQVBQRVIgJiYgdGhpcyA9PT0gUHJvbWlzZUNvbnN0cnVjdG9yV3JhcHBlciA/IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHNwbGl0IHRvIG1vZHVsZXMgbGlzdGVkIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnByb21pc2UuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbGwnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5jYXRjaCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wcm9taXNlLnJhY2UnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5yZWplY3QnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5yZXNvbHZlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgcmVnRXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzJyk7XG5cbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSKSB7XG4gIHZhciBmbGFncyA9IFIuZmxhZ3M7XG4gIHJldHVybiBmbGFncyA9PT0gdW5kZWZpbmVkICYmICEoJ2ZsYWdzJyBpbiBSZWdFeHBQcm90b3R5cGUpICYmICFoYXNPd24oUiwgJ2ZsYWdzJykgJiYgaXNQcm90b3R5cGVPZihSZWdFeHBQcm90b3R5cGUsIFIpXG4gICAgPyBjYWxsKHJlZ0V4cEZsYWdzLCBSKSA6IGZsYWdzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLlBST1BFUjtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldFJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MnKTtcblxudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcbnZhciBuYXRpdmVUb1N0cmluZyA9IFJlZ0V4cFByb3RvdHlwZVtUT19TVFJJTkddO1xuXG52YXIgTk9UX0dFTkVSSUMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVUb1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT09ICcvYS9iJzsgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxudmFyIElOQ09SUkVDVF9OQU1FID0gUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgbmF0aXZlVG9TdHJpbmcubmFtZSAhPT0gVE9fU1RSSU5HO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbmlmIChOT1RfR0VORVJJQyB8fCBJTkNPUlJFQ1RfTkFNRSkge1xuICBkZWZpbmVCdWlsdEluKFJlZ0V4cFByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwYXR0ZXJuID0gJHRvU3RyaW5nKFIuc291cmNlKTtcbiAgICB2YXIgZmxhZ3MgPSAkdG9TdHJpbmcoZ2V0UmVnRXhwRmxhZ3MoUikpO1xuICAgIHJldHVybiAnLycgKyBwYXR0ZXJuICsgJy8nICsgZmxhZ3M7XG4gIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxuLy8gYElzUmVnRXhwYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNyZWdleHBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNsYXNzb2YoaXQpID09PSAnUmVnRXhwJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc1JlZ0V4cChpdCkpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9uc1wiKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICB2YXIgcmVnZXhwID0gLy4vO1xuICB0cnkge1xuICAgICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICB9IGNhdGNoIChlcnJvcjEpIHtcbiAgICB0cnkge1xuICAgICAgcmVnZXhwW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICAgIH0gY2F0Y2ggKGVycm9yMikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIG5vdEFSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm90LWEtcmVnZXhwJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBjb3JyZWN0SXNSZWdFeHBMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgc2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgbWluID0gTWF0aC5taW47XG5cbnZhciBDT1JSRUNUX0lTX1JFR0VYUF9MT0dJQyA9IGNvcnJlY3RJc1JlZ0V4cExvZ2ljKCdlbmRzV2l0aCcpO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvcHVsbC83MDJcbnZhciBNRE5fUE9MWUZJTExfQlVHID0gIUlTX1BVUkUgJiYgIUNPUlJFQ1RfSVNfUkVHRVhQX0xPR0lDICYmICEhZnVuY3Rpb24gKCkge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihTdHJpbmcucHJvdG90eXBlLCAnZW5kc1dpdGgnKTtcbiAgcmV0dXJuIGRlc2NyaXB0b3IgJiYgIWRlc2NyaXB0b3Iud3JpdGFibGU7XG59KCk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5lbmRzd2l0aFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFNRE5fUE9MWUZJTExfQlVHICYmICFDT1JSRUNUX0lTX1JFR0VYUF9MT0dJQyB9LCB7XG4gIGVuZHNXaXRoOiBmdW5jdGlvbiBlbmRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBlbmRQb3NpdGlvbiA9IEBsZW5ndGggKi8pIHtcbiAgICB2YXIgdGhhdCA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO1xuICAgIG5vdEFSZWdFeHAoc2VhcmNoU3RyaW5nKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdGhhdC5sZW5ndGg7XG4gICAgdmFyIGVuZCA9IGVuZFBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBsZW4gOiBtaW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSB0b1N0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiBzbGljZSh0aGF0LCBlbmQgLSBzZWFyY2gubGVuZ3RoLCBlbmQpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIG5vdEFSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm90LWEtcmVnZXhwJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBjb3JyZWN0SXNSZWdFeHBMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYycpO1xuXG52YXIgc3RyaW5nSW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXNcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhY29ycmVjdElzUmVnRXhwTG9naWMoJ2luY2x1ZGVzJykgfSwge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgcmV0dXJuICEhfnN0cmluZ0luZGV4T2YoXG4gICAgICB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKSxcbiAgICAgIHRvU3RyaW5nKG5vdEFSZWdFeHAoc2VhcmNoU3RyaW5nKSksXG4gICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZFxuICAgICk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgbW92ZWQgdG8gZW50cnkgcG9pbnRzXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBGT1JDRUQsIFNIQU0pIHtcbiAgdmFyIFNZTUJPTCA9IHdlbGxLbm93blN5bWJvbChLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG5cbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBXZSBjYW4ndCB1c2UgcmVhbCByZWdleCBoZXJlIHNpbmNlIGl0IGNhdXNlcyBkZW9wdGltaXphdGlvblxuICAgICAgLy8gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gaW4gVjhcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMDZcbiAgICAgIHJlID0ge307XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgICByZS5mbGFncyA9ICcnO1xuICAgICAgcmVbU1lNQk9MXSA9IC8uL1tTWU1CT0xdO1xuICAgIH1cblxuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBleGVjQ2FsbGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIEZPUkNFRFxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIG1ldGhvZHMgPSBleGVjKFNZTUJPTCwgJydbS0VZXSwgZnVuY3Rpb24gKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICB2YXIgJGV4ZWMgPSByZWdleHAuZXhlYztcbiAgICAgIGlmICgkZXhlYyA9PT0gcmVnZXhwRXhlYyB8fCAkZXhlYyA9PT0gUmVnRXhwUHJvdG90eXBlLmV4ZWMpIHtcbiAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IGNhbGwobmF0aXZlUmVnRXhwTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogY2FsbChuYXRpdmVNZXRob2QsIHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW4oU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBtZXRob2RzWzBdKTtcbiAgICBkZWZpbmVCdWlsdEluKFJlZ0V4cFByb3RvdHlwZSwgU1lNQk9MLCBtZXRob2RzWzFdKTtcbiAgfVxuXG4gIGlmIChTSEFNKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUmVnRXhwUHJvdG90eXBlW1NZTUJPTF0sICdzaGFtJywgdHJ1ZSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcblxuLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBjaGFyQXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFMgPSAvXFwkKFskJidgXXxcXGR7MSwyfXw8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCYnYF18XFxkezEsMn0pL2c7XG5cbi8vIGBHZXRTdWJzdGl0dXRpb25gIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gIHZhciBtID0gY2FwdHVyZXMubGVuZ3RoO1xuICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbmFtZWRDYXB0dXJlcyA9IHRvT2JqZWN0KG5hbWVkQ2FwdHVyZXMpO1xuICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgfVxuICByZXR1cm4gcmVwbGFjZShyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgIHZhciBjYXB0dXJlO1xuICAgIHN3aXRjaCAoY2hhckF0KGNoLCAwKSkge1xuICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICBjYXNlICdgJzogcmV0dXJuIHN0cmluZ1NsaWNlKHN0ciwgMCwgcG9zaXRpb24pO1xuICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0cmluZ1NsaWNlKHN0ciwgdGFpbFBvcyk7XG4gICAgICBjYXNlICc8JzpcbiAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbc3RyaW5nU2xpY2UoY2gsIDEsIC0xKV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2hhckF0KGNoLCAxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoYXJBdChjaCwgMSk7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICB9XG4gICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgfVxuICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmIChpc0NhbGxhYmxlKGV4ZWMpKSB7XG4gICAgdmFyIHJlc3VsdCA9IGNhbGwoZXhlYywgUiwgUyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkgYW5PYmplY3QocmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpID09PSAnUmVnRXhwJykgcmV0dXJuIGNhbGwocmVnZXhwRXhlYywgUiwgUyk7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBnZXRTdWJzdGl0dXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXN1YnN0aXR1dGlvbicpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFJFUExBQ0UgPSB3ZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcbnZhciBzdHJpbmdJbmRleE9mID0gdW5jdXJyeVRoaXMoJycuaW5kZXhPZik7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gSUUgPD0gMTEgcmVwbGFjZXMgJDAgd2l0aCB0aGUgd2hvbGUgbWF0Y2gsIGFzIGlmIGl0IHdhcyAkJlxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjAyNDY2Ni9nZXR0aW5nLWllLXRvLXJlcGxhY2UtYS1yZWdleC13aXRoLXRoZS1saXRlcmFsLXN0cmluZy0wXG52YXIgUkVQTEFDRV9LRUVQU18kMCA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvcHJlZmVyLWVzY2FwZS1yZXBsYWNlbWVudC1kb2xsYXItY2hhciAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gJ2EnLnJlcGxhY2UoLy4vLCAnJDAnKSA9PT0gJyQwJztcbn0pKCk7XG5cbi8vIFNhZmFyaSA8PSAxMy4wLjMoPykgc3Vic3RpdHV0ZXMgbnRoIGNhcHR1cmUgd2hlcmUgbj5tIHdpdGggYW4gZW1wdHkgc3RyaW5nXG52YXIgUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPSAoZnVuY3Rpb24gKCkge1xuICBpZiAoLy4vW1JFUExBQ0VdKSB7XG4gICAgcmV0dXJuIC8uL1tSRVBMQUNFXSgnYScsICckMCcpID09PSAnJztcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59KSgpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tdXNlbGVzcy1kb2xsYXItcmVwbGFjZW1lbnRzIC0tIGZhbHNlIHBvc2l0aXZlXG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygncmVwbGFjZScsIGZ1bmN0aW9uIChfLCBuYXRpdmVSZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIFVOU0FGRV9TVUJTVElUVVRFID0gUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPyAnJCcgOiAnJDAnO1xuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGxhY2VcbiAgICBmdW5jdGlvbiByZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciByZXBsYWNlciA9IGlzTnVsbE9yVW5kZWZpbmVkKHNlYXJjaFZhbHVlKSA/IHVuZGVmaW5lZCA6IGdldE1ldGhvZChzZWFyY2hWYWx1ZSwgUkVQTEFDRSk7XG4gICAgICByZXR1cm4gcmVwbGFjZXJcbiAgICAgICAgPyBjYWxsKHJlcGxhY2VyLCBzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6IGNhbGwobmF0aXZlUmVwbGFjZSwgdG9TdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChzdHJpbmcsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QodGhpcyk7XG4gICAgICB2YXIgUyA9IHRvU3RyaW5nKHN0cmluZyk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PSAnc3RyaW5nJyAmJlxuICAgICAgICBzdHJpbmdJbmRleE9mKHJlcGxhY2VWYWx1ZSwgVU5TQUZFX1NVQlNUSVRVVEUpID09PSAtMSAmJlxuICAgICAgICBzdHJpbmdJbmRleE9mKHJlcGxhY2VWYWx1ZSwgJyQ8JykgPT09IC0xXG4gICAgICApIHtcbiAgICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVSZXBsYWNlLCByeCwgUywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgZnVuY3Rpb25hbFJlcGxhY2UgPSBpc0NhbGxhYmxlKHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSB0b1N0cmluZyhyZXBsYWNlVmFsdWUpO1xuXG4gICAgICB2YXIgZ2xvYmFsID0gcnguZ2xvYmFsO1xuICAgICAgdmFyIGZ1bGxVbmljb2RlO1xuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuXG4gICAgICAgIHB1c2gocmVzdWx0cywgcmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuXG4gICAgICAgIHZhciBtYXRjaFN0ciA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcblxuICAgICAgICB2YXIgbWF0Y2hlZCA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyT3JJbmZpbml0eShyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgdmFyIHJlcGxhY2VtZW50O1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIHB1c2goY2FwdHVyZXMsIG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IGNvbmNhdChbbWF0Y2hlZF0sIGNhcHR1cmVzLCBwb3NpdGlvbiwgUyk7XG4gICAgICAgICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkgcHVzaChyZXBsYWNlckFyZ3MsIG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gdG9TdHJpbmcoYXBwbHkocmVwbGFjZVZhbHVlLCB1bmRlZmluZWQsIHJlcGxhY2VyQXJncykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIFMsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRSZXN1bHQgKz0gc3RyaW5nU2xpY2UoUywgbmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIHN0cmluZ1NsaWNlKFMsIG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xufSwgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTIHx8ICFSRVBMQUNFX0tFRVBTXyQwIHx8IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIG5vdEFSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm90LWEtcmVnZXhwJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBjb3JyZWN0SXNSZWdFeHBMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgbWluID0gTWF0aC5taW47XG5cbnZhciBDT1JSRUNUX0lTX1JFR0VYUF9MT0dJQyA9IGNvcnJlY3RJc1JlZ0V4cExvZ2ljKCdzdGFydHNXaXRoJyk7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9wdWxsLzcwMlxudmFyIE1ETl9QT0xZRklMTF9CVUcgPSAhSVNfUFVSRSAmJiAhQ09SUkVDVF9JU19SRUdFWFBfTE9HSUMgJiYgISFmdW5jdGlvbiAoKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFN0cmluZy5wcm90b3R5cGUsICdzdGFydHNXaXRoJyk7XG4gIHJldHVybiBkZXNjcmlwdG9yICYmICFkZXNjcmlwdG9yLndyaXRhYmxlO1xufSgpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zdGFydHN3aXRoXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogIU1ETl9QT0xZRklMTF9CVUcgJiYgIUNPUlJFQ1RfSVNfUkVHRVhQX0xPR0lDIH0sIHtcbiAgc3RhcnRzV2l0aDogZnVuY3Rpb24gc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICB2YXIgdGhhdCA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO1xuICAgIG5vdEFSZWdFeHAoc2VhcmNoU3RyaW5nKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChtaW4oYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRoYXQubGVuZ3RoKSk7XG4gICAgdmFyIHNlYXJjaCA9IHRvU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuIHN0cmluZ1NsaWNlKHRoYXQsIGluZGV4LCBpbmRleCArIHNlYXJjaC5sZW5ndGgpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuUFJPUEVSO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIG5vbiA9ICdcXHUyMDBCXFx1MDA4NVxcdTE4MEUnO1xuXG4vLyBjaGVjayB0aGF0IGEgbWV0aG9kIHdvcmtzIHdpdGggdGhlIGNvcnJlY3QgbGlzdFxuLy8gb2Ygd2hpdGVzcGFjZXMgYW5kIGhhcyBhIGNvcnJlY3QgbmFtZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgcmV0dXJuIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISF3aGl0ZXNwYWNlc1tNRVRIT0RfTkFNRV0oKVxuICAgICAgfHwgbm9uW01FVEhPRF9OQU1FXSgpICE9PSBub25cbiAgICAgIHx8IChQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiB3aGl0ZXNwYWNlc1tNRVRIT0RfTkFNRV0ubmFtZSAhPT0gTUVUSE9EX05BTUUpO1xuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIGZvcmNlZFN0cmluZ1RyaW1NZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0tZm9yY2VkJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBmb3JjZWRTdHJpbmdUcmltTWV0aG9kKCd0cmltJykgfSwge1xuICB0cmltOiBmdW5jdGlvbiB0cmltKCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzKTtcbiAgfVxufSk7XG4iLCAiZXhwb3J0IHthZGRFdmVudExpc3RlbmVyV2l0aFJlbW92ZXJ9IGZyb20gJy4vbW9kdWxlcy9hZGRFdmVudExpc3RlbmVyV2l0aFJlbW92ZXInO1xuZXhwb3J0IHtjaGFuZ2VPcGFjaXR5V2hlbk1vdXNlRW50ZXJPckxlYXZlfSBmcm9tICcuL21vZHVsZXMvY2hhbmdlT3BhY2l0eVdoZW5Nb3VzZUVudGVyT3JMZWF2ZSc7XG5leHBvcnQge2NoZWNrQTExeUNvbmZpcm1LZXl9IGZyb20gJy4vbW9kdWxlcy9jaGVja0ExMXlDb25maXJtS2V5JztcbmV4cG9ydCB7ZGVsYXl9IGZyb20gJy4vbW9kdWxlcy9kZWxheSc7XG5leHBvcnQge2dlbmVyYXRlU3ZnRGF0YVVybH0gZnJvbSAnLi9tb2R1bGVzL2dlbmVyYXRlU3ZnRGF0YVVybCc7XG5leHBvcnQge2dldEJvZHl9IGZyb20gJy4vbW9kdWxlcy9nZXRCb2R5JztcbmV4cG9ydCB7aW5pdE13QXBpfSBmcm9tICcuL21vZHVsZXMvaW5pdE13QXBpJztcbmV4cG9ydCB7aXNWYWxpZEtleX0gZnJvbSAnLi9tb2R1bGVzL2lzVmFsaWRLZXknO1xuZXhwb3J0IHtvb3VpQ29uZmlybVdpdGhTdHlsZX0gZnJvbSAnLi9tb2R1bGVzL29vdWlDb25maXJtV2l0aFN0eWxlJztcbmV4cG9ydCB7c2Nyb2xsVG9wfSBmcm9tICcuL21vZHVsZXMvc2Nyb2xsVG9wJztcbiIsICJ0eXBlIEFkZEV2ZW50TGlzdGVuZXJXaXRoUmVtb3ZlciA9IDxcblx0VGFyZ2V0IGV4dGVuZHMgRG9jdW1lbnQgfCBIVE1MRWxlbWVudCB8IEVsZW1lbnQgfCBNZWRpYVF1ZXJ5TGlzdCB8IFdpbmRvdyxcblx0VHlwZSBleHRlbmRzIFRhcmdldCBleHRlbmRzIERvY3VtZW50XG5cdFx0PyBrZXlvZiBEb2N1bWVudEV2ZW50TWFwXG5cdFx0OiBUYXJnZXQgZXh0ZW5kcyBIVE1MRWxlbWVudFxuXHRcdFx0PyBrZXlvZiBIVE1MRWxlbWVudEV2ZW50TWFwXG5cdFx0XHQ6IFRhcmdldCBleHRlbmRzIE1lZGlhUXVlcnlMaXN0XG5cdFx0XHRcdD8ga2V5b2YgTWVkaWFRdWVyeUxpc3RFdmVudE1hcFxuXHRcdFx0XHQ6IFRhcmdldCBleHRlbmRzIFdpbmRvd1xuXHRcdFx0XHRcdD8ga2V5b2YgV2luZG93RXZlbnRNYXBcblx0XHRcdFx0XHQ6IGtleW9mIEdsb2JhbEV2ZW50SGFuZGxlcnNFdmVudE1hcCxcblx0TGlzdGVuZXIgZXh0ZW5kcyBUYXJnZXQgZXh0ZW5kcyBEb2N1bWVudFxuXHRcdD8gVHlwZSBleHRlbmRzIGtleW9mIERvY3VtZW50RXZlbnRNYXBcblx0XHRcdD8gKHRoaXM6IFRhcmdldCwgZXZlbnQ6IERvY3VtZW50RXZlbnRNYXBbVHlwZV0pID0+IHVua25vd25cblx0XHRcdDogKHRoaXM6IFRhcmdldCwgZXZlbnQ6IEV2ZW50KSA9PiB1bmtub3duXG5cdFx0OiBUYXJnZXQgZXh0ZW5kcyBIVE1MRWxlbWVudFxuXHRcdFx0PyBUeXBlIGV4dGVuZHMga2V5b2YgSFRNTEVsZW1lbnRFdmVudE1hcFxuXHRcdFx0XHQ/ICh0aGlzOiBUYXJnZXQsIGV2ZW50OiBIVE1MRWxlbWVudEV2ZW50TWFwW1R5cGVdKSA9PiB1bmtub3duXG5cdFx0XHRcdDogKHRoaXM6IFRhcmdldCwgZXZlbnQ6IEV2ZW50KSA9PiB1bmtub3duXG5cdFx0XHQ6IFRhcmdldCBleHRlbmRzIEVsZW1lbnRcblx0XHRcdFx0PyBUeXBlIGV4dGVuZHMga2V5b2YgRWxlbWVudEV2ZW50TWFwXG5cdFx0XHRcdFx0PyAodGhpczogVGFyZ2V0LCBldmVudDogRWxlbWVudEV2ZW50TWFwW1R5cGVdKSA9PiB1bmtub3duXG5cdFx0XHRcdFx0OiAodGhpczogVGFyZ2V0LCBldmVudDogRXZlbnQpID0+IHVua25vd25cblx0XHRcdFx0OiBUYXJnZXQgZXh0ZW5kcyBNZWRpYVF1ZXJ5TGlzdFxuXHRcdFx0XHRcdD8gVHlwZSBleHRlbmRzIGtleW9mIE1lZGlhUXVlcnlMaXN0RXZlbnRNYXBcblx0XHRcdFx0XHRcdD8gKHRoaXM6IFRhcmdldCwgZXZlbnQ6IE1lZGlhUXVlcnlMaXN0RXZlbnRNYXBbVHlwZV0pID0+IHVua25vd25cblx0XHRcdFx0XHRcdDogKHRoaXM6IFRhcmdldCwgZXZlbnQ6IEV2ZW50KSA9PiB1bmtub3duXG5cdFx0XHRcdFx0OiBUYXJnZXQgZXh0ZW5kcyBXaW5kb3dcblx0XHRcdFx0XHRcdD8gVHlwZSBleHRlbmRzIGtleW9mIFdpbmRvd0V2ZW50TWFwXG5cdFx0XHRcdFx0XHRcdD8gKHRoaXM6IFRhcmdldCwgZXZlbnQ6IFdpbmRvd0V2ZW50TWFwW1R5cGVdKSA9PiB1bmtub3duXG5cdFx0XHRcdFx0XHRcdDogKHRoaXM6IFRhcmdldCwgZXZlbnQ6IEV2ZW50KSA9PiB1bmtub3duXG5cdFx0XHRcdFx0XHQ6ICh0aGlzOiBUYXJnZXQsIGV2ZW50OiBFdmVudCkgPT4gdW5rbm93bixcbj4oe1xuXHR0YXJnZXQsXG5cdHR5cGUsXG5cdGxpc3RlbmVyLFxuXHRvcHRpb25zLFxufToge1xuXHR0YXJnZXQ6IFRhcmdldDtcblx0dHlwZTogVHlwZTtcblx0bGlzdGVuZXI6IExpc3RlbmVyO1xuXHRvcHRpb25zPzogQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnM7XG59KSA9PiB7XG5cdHJlbW92ZTogKCkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IGFkZEV2ZW50TGlzdGVuZXJXaXRoUmVtb3ZlcjogQWRkRXZlbnRMaXN0ZW5lcldpdGhSZW1vdmVyID0gKHt0YXJnZXQsIHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zID0ge319KSA9PiB7XG5cdHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyIGFzIEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnMpO1xuXHRyZXR1cm4ge1xuXHRcdHJlbW92ZTogKCk6IHZvaWQgPT4ge1xuXHRcdFx0dGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIgYXMgRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucyk7XG5cdFx0fSxcblx0fTtcbn07XG5cbmV4cG9ydCB7dHlwZSBBZGRFdmVudExpc3RlbmVyV2l0aFJlbW92ZXIsIGFkZEV2ZW50TGlzdGVuZXJXaXRoUmVtb3Zlcn07XG4iLCAidHlwZSBDaGFuZ2VPcGFjaXR5V2hlbk1vdXNlRW50ZXJPckxlYXZlID0gKGV2ZW50OiBNb3VzZUV2ZW50IHwgSlF1ZXJ5LlRyaWdnZXJlZEV2ZW50LCBvcGFjaXR5PzogbnVtYmVyKSA9PiB2b2lkO1xuXG5jb25zdCBjaGFuZ2VPcGFjaXR5V2hlbk1vdXNlRW50ZXJPckxlYXZlOiBDaGFuZ2VPcGFjaXR5V2hlbk1vdXNlRW50ZXJPckxlYXZlID0gKGV2ZW50LCBvcGFjaXR5ID0gMC43KSA9PiB7XG5cdChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zdHlsZS5vcGFjaXR5ID0gZXZlbnQudHlwZSA9PT0gJ21vdXNlZW50ZXInID8gJzEnIDogb3BhY2l0eS50b1N0cmluZygpO1xufTtcblxuZXhwb3J0IHt0eXBlIENoYW5nZU9wYWNpdHlXaGVuTW91c2VFbnRlck9yTGVhdmUsIGNoYW5nZU9wYWNpdHlXaGVuTW91c2VFbnRlck9yTGVhdmV9O1xuIiwgInR5cGUgQ2hlY2tBMTF5Q29uZmlybUtleSA9IChldmVudDogS2V5Ym9hcmRFdmVudCB8IE1vdXNlRXZlbnQgfCBKUXVlcnkuQ2xpY2tFdmVudCB8IEpRdWVyeS5LZXlEb3duRXZlbnQpID0+IGJvb2xlYW47XG5cbmNvbnN0IGNoZWNrQTExeUNvbmZpcm1LZXk6IENoZWNrQTExeUNvbmZpcm1LZXkgPSAoZXZlbnQpOiBib29sZWFuID0+IHtcblx0aWYgKFsnY2xpY2snLCAna2V5ZG93biddLmluY2x1ZGVzKGV2ZW50LnR5cGUpKSB7XG5cdFx0aWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJykge1xuXHRcdFx0cmV0dXJuIFsnRW50ZXInLCAnICddLmluY2x1ZGVzKChldmVudCBhcyBLZXlib2FyZEV2ZW50KS5rZXkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQge3R5cGUgQ2hlY2tBMTF5Q29uZmlybUtleSwgY2hlY2tBMTF5Q29uZmlybUtleX07XG4iLCAidHlwZSBEZWxheSA9IChtczogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG5jb25zdCBkZWxheTogRGVsYXkgPSAobXMpID0+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiAoKSA9PiB2b2lkKTogdm9pZCA9PiB7XG5cdFx0c2V0VGltZW91dChyZXNvbHZlLCBtcyk7XG5cdH0pO1xufTtcblxuZXhwb3J0IHt0eXBlIERlbGF5LCBkZWxheX07XG4iLCAidHlwZSBHZW5lcmF0ZVN2Z0RhdGFVcmwgPSAoc3ZnOiBzdHJpbmcpID0+IHN0cmluZztcblxuY29uc3QgZ2VuZXJhdGVTdmdEYXRhVXJsOiBHZW5lcmF0ZVN2Z0RhdGFVcmwgPSAoc3ZnKSA9PiB7XG5cdC8qIVxuXHQgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG5cdCAqXG5cdCAqIEBmaWxlIHN2Zy10by1kYXRhLXVyaS5qcyB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2hleWFsbGFuL3N2Zy10by1kYXRhLXVyaS99XG5cdCAqXG5cdCAqIEBhdXRob3IgQWxsYW4gTW9yZW5vXG5cdCAqIEBsaWNlbnNlIE1JVCB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2hleWFsbGFuL3N2Zy10by1kYXRhLXVyaS9ibG9iL21hc3Rlci9MSUNFTlNFfVxuXHQgKi9cblx0c3ZnID0gc3ZnLnRyaW0oKTtcblx0Ly8gcmVtb3ZlIHhtbCwgZG9jdHlwZSwgZ2VuZXJhdG9yLi4uXG5cdHN2ZyA9IHN2Zy5zbGljZShzdmcuaW5kZXhPZignPHN2ZycpKTtcblx0Ly8gc29mdCB2YWxpZGF0ZVxuXHRpZiAoIXN2Zy5zdGFydHNXaXRoKCc8c3ZnJykgfHwgIXN2Zy5lbmRzV2l0aCgnc3ZnPicpKSB7XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cdC8vIGFkZCBuYW1lc3BhY2UgaWYgbmVjZXNzYXJ5XG5cdGlmICghc3ZnLmluY2x1ZGVzKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycpKSB7XG5cdFx0c3ZnID0gc3ZnLnJlcGxhY2UoLzxzdmcvZywgXCI8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZydcIik7XG5cdH1cblx0Ly8gcmVtb3ZlIGNvbW1lbnRzXG5cdHN2ZyA9IHN2Zy5yZXBsYWNlKC88IS0tLnsxLH0tLT4vZywgJycpO1xuXHQvLyByZW1vdmUgdW5uZWNlc3NhcnkgYXR0cmlidXRlc1xuXHRzdmcgPSBzdmcucmVwbGFjZSgvdmVyc2lvbj1bXCInXSguezAsfT8pW1wiJ10oPz1bXFxzPl0pL2csICcnKTtcblx0Ly8gcmVwbGFjZSBuZXN0ZWQgcXVvdGVzXG5cdHN2ZyA9IHN2Zy5yZXBsYWNlKC9cIicoLnsxLH0pJ1wiL2csIFwiJyQxJ1wiKTtcblx0Ly8gcmVwbGFjZSBkb3VibGUgcXVvdGVzXG5cdHN2ZyA9IHN2Zy5yZXBsYWNlKC9cIi9nLCBcIidcIik7XG5cdC8vIHJlbW92ZSBlbXB0eSBzcGFjZXMgYmV0d2VlbiB0YWdzXG5cdHN2ZyA9IHN2Zy5yZXBsYWNlKC8+XFxzezEsfTwvZywgJz48Jyk7XG5cdC8vIHJlbW92ZSBkdXBsaWNhdGUgc3BhY2VzXG5cdHN2ZyA9IHN2Zy5yZXBsYWNlKC9cXHN7Mix9L2csICcgJyk7XG5cdC8vIHRyaW0gYWdhaW5cblx0c3ZnID0gc3ZnLnRyaW0oKTtcblx0Ly8gc29mdCB2YWxpZGF0ZSBhZ2FpblxuXHRpZiAoIXN2Zy5zdGFydHNXaXRoKCc8c3ZnJykgfHwgIXN2Zy5lbmRzV2l0aCgnc3ZnPicpKSB7XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cdC8vIHJlcGxhY2UgYW1wZXJzYW5kXG5cdHN2ZyA9IHN2Zy5yZXBsYWNlKC8mL2csICcmYW1wOycpO1xuXHQvLyBlbmNvZGUgb25seSB1bnNhZmUgc3ltYm9sc1xuXHRzdmcgPSBzdmcucmVwbGFjZSgvWyUjPD4/W1xcXFxcXF1eYHt8fV0vZywgZW5jb2RlVVJJQ29tcG9uZW50KTtcblx0Ly8gYnVpbGQgZGF0YSB1cmlcblx0c3ZnID0gYGRhdGE6aW1hZ2Uvc3ZnK3htbCwke3N2Z31gO1xuXHQvLyBvaywgc2hpcCBpdCFcblx0cmV0dXJuIHN2Zztcbn07XG5cbmV4cG9ydCB7dHlwZSBHZW5lcmF0ZVN2Z0RhdGFVcmwsIGdlbmVyYXRlU3ZnRGF0YVVybH07XG4iLCAidHlwZSBHZXRCb2R5ID0gKCkgPT4gSlF1ZXJ5LlRoZW5hYmxlPEpRdWVyeTxIVE1MQm9keUVsZW1lbnQ+PjtcblxuY29uc3QgZ2V0Qm9keSA9ICgpID0+IHtcblx0cmV0dXJuICQucmVhZHkudGhlbigoKTogSlF1ZXJ5PEhUTUxCb2R5RWxlbWVudD4gPT4ge1xuXHRcdGNvbnN0ICRib2R5OiBKUXVlcnk8SFRNTEJvZHlFbGVtZW50PiA9ICQoJ2JvZHknKTtcblxuXHRcdHJldHVybiAkYm9keTtcblx0fSk7XG59O1xuXG5leHBvcnQge3R5cGUgR2V0Qm9keSwgZ2V0Qm9keX07XG4iLCAidHlwZSBJbml0TXdBcGkgPSB0eXBlb2YgaW5pdE13QXBpO1xuXG4vKipcbiAqIEByZXF1aXJlcyBtZWRpYXdpa2kuYXBpXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VzZXJBZ2VudF1cbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXBpVXJpXVxuICogQHJldHVybiB7bXcuQXBpfG13LkZvcmVpZ25BcGl9XG4gKi9cbmZ1bmN0aW9uIGluaXRNd0FwaSh1c2VyQWdlbnQ/OiBzdHJpbmcpOiBtdy5BcGk7XG5mdW5jdGlvbiBpbml0TXdBcGkodXNlckFnZW50OiBzdHJpbmcsIGFwaVVyaTogc3RyaW5nKTogbXcuRm9yZWlnbkFwaTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLXN0eWxlXG5mdW5jdGlvbiBpbml0TXdBcGkodXNlckFnZW50Pzogc3RyaW5nLCBhcGlVcmk/OiBzdHJpbmcpOiBtdy5BcGkgfCBtdy5Gb3JlaWduQXBpIHtcblx0Y29uc3QgYXBpT3B0aW9ucyA9IHtcblx0XHRhamF4OiB7XG5cdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdCdBcGktVXNlci1BZ2VudCc6IHVzZXJBZ2VudCA/IGBRaXV3ZW4vMS4xICgke3VzZXJBZ2VudH0pYCA6ICdRaXV3ZW4vMS4xJyxcblx0XHRcdH0sXG5cdFx0fSxcblx0fTtcblxuXHRpZiAoYXBpVXJpKSB7XG5cdFx0cmV0dXJuIG5ldyBtdy5Gb3JlaWduQXBpKGFwaVVyaSwgYXBpT3B0aW9ucyk7XG5cdH1cblxuXHRyZXR1cm4gbmV3IG13LkFwaShhcGlPcHRpb25zKTtcbn1cblxuZXhwb3J0IHt0eXBlIEluaXRNd0FwaSwgaW5pdE13QXBpfTtcbiIsICJ0eXBlIElzVmFsaWRLZXkgPSB0eXBlb2YgaXNWYWxpZEtleTtcblxuY29uc3QgaXNWYWxpZEtleSA9IChvYmplY3Q6IG9iamVjdCwga2V5OiBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wpOiBrZXkgaXMga2V5b2YgdHlwZW9mIG9iamVjdCA9PiB7XG5cdHJldHVybiBrZXkgaW4gb2JqZWN0O1xufTtcblxuZXhwb3J0IHt0eXBlIElzVmFsaWRLZXksIGlzVmFsaWRLZXl9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tICdleHQuZ2FkZ2V0LlJlYWN0JztcblxudHlwZSBPb3VpQ29uZmlybVdpdGhTdHlsZSA9IChtZXNzYWdlOiBzdHJpbmcpID0+IEpRdWVyeS5Qcm9taXNlPGJvb2xlYW4+O1xuXG4vKipcbiAqIEByZXF1aXJlcyBvb2pzLXVpLXdpbmRvd3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV1cbiAqIEByZXR1cm4ge0pRdWVyeS5Qcm9taXNlPGJvb2xlYW4+fVxuICovXG5jb25zdCBvb3VpQ29uZmlybVdpdGhTdHlsZTogT291aUNvbmZpcm1XaXRoU3R5bGUgPSAobWVzc2FnZSkgPT5cblx0T08udWlcblx0XHQuY29uZmlybShcblx0XHRcdCQoXG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9XCJvby11aS13aW5kb3ctZm9vdFwiXG5cdFx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRcdGJvcmRlcjogJy4xcmVtIHNvbGlkICMwNjQ1YWQnLFxuXHRcdFx0XHRcdFx0ZGlzcGxheTogJ2ZsZXgnLFxuXHRcdFx0XHRcdFx0anVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1ldmVubHknLFxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRcdFx0Zm9udFNpemU6ICcxLjJyZW0nLFxuXHRcdFx0XHRcdFx0XHRmb250V2VpZ2h0OiAnNTAwJyxcblx0XHRcdFx0XHRcdFx0bGluZUhlaWdodDogJzEuOCcsXG5cdFx0XHRcdFx0XHRcdHBhZGRpbmc6ICcuNGVtIDAnLFxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7bWVzc2FnZX1cblx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KSBhcyBKUXVlcnlcblx0XHQpXG5cdFx0LnRoZW4oKGlzQ29uZmlybTogYm9vbGVhbik6IGJvb2xlYW4gPT4gaXNDb25maXJtKTtcblxuZXhwb3J0IHt0eXBlIE9vdWlDb25maXJtV2l0aFN0eWxlLCBvb3VpQ29uZmlybVdpdGhTdHlsZX07XG4iLCAidHlwZSBTY3JvbGxUb3AgPSAoXG5cdHRhcmdldEhlaWdodDogbnVtYmVyIHwgc3RyaW5nLFxuXHRlZmZlY3RzT3B0aW9uc09yRHVyYXRpb24/OiBKUXVlcnkuRWZmZWN0c09wdGlvbnM8SFRNTEVsZW1lbnQ+IHwgbnVtYmVyIHwgJ2Zhc3QnIHwgJ3Nsb3cnXG4pID0+IHZvaWQ7XG5cbmNvbnN0IHNjcm9sbFRvcDogU2Nyb2xsVG9wID0gKHRhcmdldEhlaWdodCwgZWZmZWN0c09wdGlvbnNPckR1cmF0aW9uID0ge30pID0+IHtcblx0Y29uc3Qgb3B0aW9uczogSlF1ZXJ5LkVmZmVjdHNPcHRpb25zPEhUTUxFbGVtZW50PiA9XG5cdFx0dHlwZW9mIGVmZmVjdHNPcHRpb25zT3JEdXJhdGlvbiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIGVmZmVjdHNPcHRpb25zT3JEdXJhdGlvbiA9PT0gJ3N0cmluZydcblx0XHRcdD8ge1xuXHRcdFx0XHRcdGR1cmF0aW9uOiBlZmZlY3RzT3B0aW9uc09yRHVyYXRpb24sXG5cdFx0XHRcdFx0ZWFzaW5nOiAnbGluZWFyJyxcblx0XHRcdFx0fVxuXHRcdFx0OiB7XG5cdFx0XHRcdFx0ZHVyYXRpb246ICdzbG93Jyxcblx0XHRcdFx0XHRlYXNpbmc6ICdsaW5lYXInLFxuXHRcdFx0XHRcdC4uLmVmZmVjdHNPcHRpb25zT3JEdXJhdGlvbixcblx0XHRcdFx0fTtcblx0JChkb2N1bWVudCkuZmluZCgnaHRtbCwgYm9keScpLmFuaW1hdGUoXG5cdFx0e1xuXHRcdFx0c2Nyb2xsVG9wOiB0YXJnZXRIZWlnaHQsXG5cdFx0fSxcblx0XHRvcHRpb25zXG5cdCk7XG59O1xuXG5leHBvcnQge3R5cGUgU2Nyb2xsVG9wLCBzY3JvbGxUb3B9O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSx5RkFBQUEsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRLFNBQVUsSUFBSTtBQUN4QixhQUFPLE1BQU0sR0FBRyxTQUFTLFFBQVE7QUFBQSxJQUNuQztBQUdBLElBQUFBLFFBQU87QUFBQSxJQUVMLE1BQU0sT0FBTyxjQUFjLFlBQVksVUFBVSxLQUNqRCxNQUFNLE9BQU8sVUFBVSxZQUFZLE1BQU07QUFBQSxJQUV6QyxNQUFNLE9BQU8sUUFBUSxZQUFZLElBQUksS0FDckMsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNLEtBQ3pDLE1BQU0sT0FBT0QsWUFBUSxZQUFZQSxRQUFJO0FBQUEsSUFFcEMsMkJB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QUFFO0FBQUMseUJBQU8sS0FBR0EsR0FBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLEtBQUdBLEdBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxLQUFHQSxHQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsS0FBR0EsR0FBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLEtBQUdBLEdBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxLQUFHQSxHQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsS0FBR0EsR0FBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLEtBQUdBLEdBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxLQUFHQSxHQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsS0FBR0EsR0FBRSxDQUFDLEVBQUUsQ0FBQztBQUFBLGdCQUFDO0FBQUMseUJBQVNFLEdBQUVBLElBQUVHLElBQUVGLElBQUUsR0FBRSxHQUFFO0FBQUMsMkJBQVEsSUFBRSxDQUFDLENBQUMsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsQ0FBQyxDQUFDLEdBQUUsSUFBRSxHQUFFLElBQUUsR0FBRTtBQUFJLHNCQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDO0FBQUUsMkJBQVEsSUFBRSxHQUFFLElBQUUsR0FBRTtBQUFJLDZCQUFRLElBQUUsR0FBRSxJQUFFLEdBQUU7QUFBSSx3QkFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHRCxHQUFFLENBQUMsSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQUUsc0JBQUksSUFBRSxFQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxDQUFDLEdBQUUsSUFBRSxFQUFFLENBQUMsR0FBRSxJQUFFLENBQUMsQ0FBQyxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxDQUFDLENBQUM7QUFBRSxvQkFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLElBQUUsS0FBRyxJQUFFLElBQUUsSUFBRSxJQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxLQUFHLElBQUUsSUFBRSxJQUFFLElBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEtBQUcsSUFBRSxJQUFFLElBQUUsSUFBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsS0FBRyxJQUFFLElBQUUsSUFBRSxJQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxJQUFFLEtBQUcsSUFBRSxJQUFFLElBQUUsSUFBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsS0FBRyxJQUFFLElBQUUsSUFBRSxJQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxLQUFHLElBQUUsSUFBRSxJQUFFLElBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEtBQUcsSUFBRSxJQUFFLElBQUUsSUFBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsSUFBRSxLQUFHLElBQUUsSUFBRSxJQUFFLElBQUcsSUFBRUYsR0FBRSxHQUFFLENBQUM7QUFBRSxzQkFBSSxJQUFFLENBQUMsQ0FBQyxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxDQUFDLENBQUM7QUFBRSxrQkFBQUcsR0FBRSxDQUFDLE1BQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFQSxHQUFFLENBQUMsR0FBRSxJQUFFSCxHQUFFLEdBQUUsQ0FBQyxJQUFHRyxHQUFFLENBQUMsTUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsR0FBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUVBLEdBQUUsQ0FBQyxHQUFFLElBQUVILEdBQUUsR0FBRSxDQUFDLElBQUdHLEdBQUUsQ0FBQyxNQUFJLEVBQUUsQ0FBQyxF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RUYsSUFBRUMsSUFBRTtBQUFDLHlCQUFRQyxLQUFFLEdBQUVHLEtBQUUsR0FBRUEsS0FBRUwsR0FBRSxRQUFPSztBQUFJLGtCQUFBSCxNQUFHRixHQUFFSyxFQUFDLElBQUVKLEdBQUVJLEVBQUM7QUFBRSx1QkFBT0g7QUFBQSxjQUFDO0FBQUMsdUJBQVNHLEdBQUVMLElBQUVDLElBQUU7QUFBQyx1QkFBTSxDQUFDRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxDQUFDLEdBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLENBQUMsR0FBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsQ0FBQyxHQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxDQUFDLEdBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLENBQUMsR0FBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsQ0FBQyxHQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxDQUFDLEdBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLENBQUMsR0FBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLEVBQUUsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsRUFBRSxHQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsRUFBRSxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxFQUFFLEdBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxFQUFFLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLEVBQUUsR0FBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLEVBQUUsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsRUFBRSxHQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxFQUFFLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLEVBQUUsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsRUFBRSxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxFQUFFLEdBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLEVBQUUsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsRUFBRSxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxFQUFFLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLEVBQUUsR0FBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsRUFBRSxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxFQUFFLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLEVBQUUsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsRUFBRSxHQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxFQUFFLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLEVBQUUsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsRUFBRSxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxFQUFFLENBQUM7QUFBQSxjQUFDO0FBQUMsdUJBQVMsRUFBRUQsSUFBRTtBQUFDLG9CQUFJQyxLQUFFRCxHQUFFLE9BQUs7QUFBRSx5QkFBUUEsR0FBRSxPQUFLLEtBQUcsT0FBS0EsR0FBRSxRQUFNLEtBQUcsT0FBS0EsR0FBRSxRQUFNLE9BQUssSUFBRSxLQUFLLE1BQUlDO0FBQUEsY0FBQztBQUFDLHVCQUFTLEVBQUVELElBQUU7QUFBQyx3QkFBT0EsR0FBRSxHQUFFO0FBQUEsa0JBQUMsS0FBSTtBQUFVLHdCQUFJQyxLQUFFLEVBQUVELEdBQUUsRUFBRSxDQUFDLENBQUM7QUFBRSwyQkFBTSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxLQUFLLElBQUlDLEVBQUMsR0FBRSxLQUFLLElBQUlBLEVBQUMsR0FBRSxHQUFFLEdBQUUsQ0FBQyxLQUFLLElBQUlBLEVBQUMsR0FBRSxLQUFLLElBQUlBLEVBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxrQkFBRSxLQUFJO0FBQVUsd0JBQUlBLEtBQUUsRUFBRUQsR0FBRSxFQUFFLENBQUMsQ0FBQztBQUFFLDJCQUFNLENBQUMsS0FBSyxJQUFJQyxFQUFDLEdBQUUsR0FBRSxDQUFDLEtBQUssSUFBSUEsRUFBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxLQUFLLElBQUlBLEVBQUMsR0FBRSxHQUFFLEtBQUssSUFBSUEsRUFBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLGtCQUFFLEtBQUk7QUFBQSxrQkFBUyxLQUFJO0FBQVUsd0JBQUlBLEtBQUUsRUFBRUQsR0FBRSxFQUFFLENBQUMsQ0FBQztBQUFFLDJCQUFNLENBQUMsS0FBSyxJQUFJQyxFQUFDLEdBQUUsS0FBSyxJQUFJQSxFQUFDLEdBQUUsR0FBRSxHQUFFLENBQUMsS0FBSyxJQUFJQSxFQUFDLEdBQUUsS0FBSyxJQUFJQSxFQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLGtCQUFFLEtBQUk7QUFBVyx3QkFBSUMsS0FBRUYsR0FBRSxFQUFFLENBQUMsR0FBRUssS0FBRUwsR0FBRSxFQUFFLENBQUMsR0FBRUksS0FBRUosR0FBRSxFQUFFLENBQUMsR0FBRUMsS0FBRSxFQUFFRCxHQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUVNLEtBQUVKLEtBQUVBLEtBQUVHLEtBQUVBLEtBQUVELEtBQUVBO0FBQUUsd0JBQUcsTUFBSUU7QUFBRSxzQkFBQUosS0FBRSxHQUFFRyxLQUFFLEdBQUVELEtBQUU7QUFBQSw2QkFBVSxNQUFJRSxJQUFFO0FBQUMsMEJBQUlDLEtBQUUsS0FBSyxLQUFLRCxFQUFDO0FBQUUsc0JBQUFKLE1BQUdLLElBQUVGLE1BQUdFLElBQUVILE1BQUdHO0FBQUEsb0JBQUM7QUFBQyx3QkFBSUMsS0FBRSxLQUFLLElBQUlQLEtBQUUsQ0FBQyxHQUFFLElBQUVPLEtBQUUsS0FBSyxJQUFJUCxLQUFFLENBQUMsR0FBRSxJQUFFTyxLQUFFQTtBQUFFLDJCQUFNLENBQUMsSUFBRSxLQUFHSCxLQUFFQSxLQUFFRCxLQUFFQSxNQUFHLEdBQUUsS0FBR0YsS0FBRUcsS0FBRSxJQUFFRCxLQUFFLElBQUcsS0FBR0YsS0FBRUUsS0FBRSxJQUFFQyxLQUFFLElBQUcsR0FBRSxLQUFHSCxLQUFFRyxLQUFFLElBQUVELEtBQUUsSUFBRyxJQUFFLEtBQUdGLEtBQUVBLEtBQUVFLEtBQUVBLE1BQUcsR0FBRSxLQUFHQyxLQUFFRCxLQUFFLElBQUVGLEtBQUUsSUFBRyxHQUFFLEtBQUdBLEtBQUVFLEtBQUUsSUFBRUMsS0FBRSxJQUFHLEtBQUdBLEtBQUVELEtBQUUsSUFBRUYsS0FBRSxJQUFHLElBQUUsS0FBR0EsS0FBRUEsS0FBRUcsS0FBRUEsTUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLGtCQUFFLEtBQUk7QUFBUSwyQkFBTSxDQUFDTCxHQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUVBLEdBQUUsRUFBRSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLGtCQUFFLEtBQUk7QUFBUywyQkFBTSxDQUFDQSxHQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsa0JBQUUsS0FBSTtBQUFTLDJCQUFNLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFQSxHQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxrQkFBRSxLQUFJO0FBQVMsMkJBQU0sQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFQSxHQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLGtCQUFFLEtBQUk7QUFBVSwyQkFBTSxDQUFDQSxHQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUVBLEdBQUUsRUFBRSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRUEsR0FBRSxFQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxrQkFBRSxLQUFJO0FBQU8sd0JBQUksSUFBRSxFQUFFQSxHQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUUsSUFBRSxFQUFFQSxHQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQUUsMkJBQU0sQ0FBQyxHQUFFLEtBQUssSUFBSSxDQUFDLEdBQUUsR0FBRSxHQUFFLEtBQUssSUFBSSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsa0JBQUUsS0FBSTtBQUFRLHdCQUFJQyxLQUFFLEVBQUVELEdBQUUsRUFBRSxDQUFDLENBQUM7QUFBRSwyQkFBTSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsS0FBSyxJQUFJQyxFQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsa0JBQUUsS0FBSTtBQUFRLHdCQUFJQSxLQUFFLEVBQUVELEdBQUUsRUFBRSxDQUFDLENBQUM7QUFBRSwyQkFBTSxDQUFDLEdBQUUsS0FBSyxJQUFJQyxFQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsa0JBQUUsS0FBSTtBQUFZLHdCQUFJQyxLQUFFRixHQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQUksR0FBRUssS0FBRUwsR0FBRSxFQUFFLENBQUMsRUFBRSxNQUFJO0FBQUUsMkJBQU0sQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRUUsSUFBRUcsSUFBRSxHQUFFLENBQUM7QUFBQSxrQkFBRSxLQUFJO0FBQWEsd0JBQUlILEtBQUVGLEdBQUUsRUFBRSxDQUFDLEVBQUUsTUFBSTtBQUFFLDJCQUFNLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUVFLElBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxrQkFBRSxLQUFJO0FBQWEsd0JBQUlHLEtBQUVMLEdBQUUsRUFBRSxDQUFDLEVBQUUsTUFBSTtBQUFFLDJCQUFNLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRUssSUFBRSxHQUFFLENBQUM7QUFBQSxrQkFBRSxLQUFJO0FBQWEsd0JBQUlELEtBQUVKLEdBQUUsRUFBRSxDQUFDLEVBQUUsTUFBSTtBQUFFLDJCQUFNLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFSSxJQUFFLENBQUM7QUFBQSxrQkFBRSxLQUFJO0FBQWMsd0JBQUlGLEtBQUVGLEdBQUUsRUFBRSxDQUFDLEVBQUUsTUFBSSxHQUFFSyxLQUFFTCxHQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQUksR0FBRUksS0FBRUosR0FBRSxFQUFFLENBQUMsRUFBRSxNQUFJO0FBQUUsMkJBQU0sQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRUUsSUFBRUcsSUFBRUQsSUFBRSxDQUFDO0FBQUEsa0JBQUUsS0FBSTtBQUFjLDJCQUFNLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFSixHQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUcsS0FBR0EsR0FBRSxFQUFFLENBQUMsRUFBRSxLQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLGtCQUFFLEtBQUk7QUFBUywyQkFBTSxDQUFDQSxHQUFFLEVBQUUsQ0FBQyxHQUFFQSxHQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRUEsR0FBRSxFQUFFLENBQUMsR0FBRUEsR0FBRSxFQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRUEsR0FBRSxFQUFFLENBQUMsR0FBRUEsR0FBRSxFQUFFLENBQUMsR0FBRSxHQUFFLENBQUM7QUFBQSxrQkFBRSxLQUFJO0FBQVcsMkJBQU9BLEdBQUU7QUFBQSxnQkFBQztBQUFBLGNBQUM7QUFBQyx1QkFBUyxFQUFFQSxJQUFFO0FBQUMsdUJBQU8sTUFBSUEsR0FBRSxTQUFPLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxJQUFFQSxHQUFFLElBQUksQ0FBQyxFQUFFLE9BQU9LLEVBQUM7QUFBQSxjQUFDO0FBQUMsdUJBQVMsRUFBRUwsSUFBRTtBQUFDLHVCQUFNLENBQUMsRUFBRSxFQUFFQSxFQUFDLENBQUMsQ0FBQztBQUFBLGNBQUM7QUFBQyxrQkFBSSxJQUFFLDJCQUFVO0FBQUMseUJBQVNBLEdBQUVBLElBQUU7QUFBQyx5QkFBT0EsR0FBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFQSxHQUFFLENBQUMsRUFBRSxDQUFDLElBQUVBLEdBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRUEsR0FBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFQSxHQUFFLENBQUMsRUFBRSxDQUFDLElBQUVBLEdBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRUEsR0FBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFQSxHQUFFLENBQUMsRUFBRSxDQUFDLElBQUVBLEdBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRUEsR0FBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFQSxHQUFFLENBQUMsRUFBRSxDQUFDLElBQUVBLEdBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRUEsR0FBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFQSxHQUFFLENBQUMsRUFBRSxDQUFDLElBQUVBLEdBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRUEsR0FBRSxD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RSxHQUFFLElBQUUsR0FBRTtBQUFJLHNCQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDO0FBQUUsMkJBQVEsSUFBRSxHQUFFLElBQUUsR0FBRTtBQUFJLHNCQUFFLENBQUMsRUFBRSxDQUFDLElBQUU7QUFBRSxzQkFBRyxNQUFJVCxHQUFFLENBQUM7QUFBRSwyQkFBTztBQUFLLHNCQUFJLEdBQUUsSUFBRSxDQUFDO0FBQUUsb0JBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRSxJQUFFRyxHQUFFLEdBQUVFLEdBQUVKLEdBQUUsQ0FBQyxDQUFDLENBQUMsS0FBRyxJQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFFLHNCQUFJLElBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxHQUFFLENBQUMsR0FBRSxJQUFFLENBQUM7QUFBRSxvQkFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sR0FBRSxDQUFDLENBQUM7QUFBRSxzQkFBSSxJQUFFLENBQUM7QUFBRSxvQkFBRSxLQUFLSyxHQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRSxFQUFFLENBQUMsSUFBRUYsR0FBRSxFQUFFLENBQUMsQ0FBQztBQUFFLHNCQUFJLElBQUUsQ0FBQztBQUFFLG9CQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxHQUFFLENBQUMsQ0FBQyxHQUFFLEVBQUUsS0FBS0YsR0FBRSxFQUFFLENBQUMsR0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUUsRUFBRSxDQUFDLElBQUVLLEdBQUUsRUFBRSxDQUFDLEdBQUUsRUFBRSxDQUFDLEdBQUUsR0FBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUUsRUFBRSxLQUFLRCxHQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRSxFQUFFLENBQUMsSUFBRUYsR0FBRSxFQUFFLENBQUMsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxLQUFHLEVBQUUsQ0FBQyxHQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEdBQUUsQ0FBQyxDQUFDLEdBQUUsRUFBRSxLQUFLRixHQUFFLEVBQUUsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRSxFQUFFLENBQUMsSUFBRUssR0FBRSxFQUFFLENBQUMsR0FBRSxFQUFFLENBQUMsR0FBRSxHQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRSxFQUFFLEtBQUtMLEdBQUUsRUFBRSxDQUFDLEdBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxJQUFFSyxHQUFFLEVBQUUsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFFLEVBQUUsS0FBS0QsR0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUUsRUFBRSxDQUFDLElBQUVGLEdBQUUsRUFBRSxDQUFDLENBQUMsR0FBRSxFQUFFLENBQUMsS0FBRyxFQUFFLENBQUMsR0FBRSxFQUFFLENBQUMsS0FBRyxFQUFFLENBQUM7QUFBRSxzQkFBSSxJQUFFSSxHQUFFLEVBQUUsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQUUsc0JBQUdOLEdBQUUsRUFBRSxDQUFDLEdBQUUsQ0FBQyxJQUFFO0FBQUUsNkJBQVEsSUFBRSxHQUFFLElBQUUsR0FBRTtBQUFJLHdCQUFFLENBQUMsS0FBRyxJQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxJQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxJQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRztBQUFHLHNCQUFJLEdBQUUsR0FBRSxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFO0FBQUUseUJBQU8sSUFBRSxRQUFNLElBQUUsTUFBRyxLQUFLLEtBQUssQ0FBQyxHQUFFLElBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLElBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxJQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsR0FBRSxPQUFJLENBQUMsS0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsSUFBRSxJQUFFLEtBQUssS0FBSyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUUsSUFBRSxDQUFDLE9BQUksSUFBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLElBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxJQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsQ0FBQyxLQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsSUFBRSxJQUFFLEtBQUssS0FBSyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUUsSUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsR0FBRSxP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USxHQUFFLEdBQUUsQ0FBQyxHQUFFO0FBQUMsMEJBQUcsQ0FBQ1A7QUFBRTtBQUFPLDBCQUFJLElBQUUsRUFBRSxDQUFDSixHQUFFRyxFQUFDLENBQUMsR0FBRSxDQUFDRixHQUFFRSxFQUFDLENBQUMsQ0FBQztBQUFFLHdCQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRSxFQUFFLEtBQUssQ0FBQyxVQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQUEsb0JBQUMsT0FBSztBQUFDLDBCQUFHLEtBQUc7QUFBRSx3QkFBQUssS0FBRTtBQUFBLCtCQUFVLEVBQUUsQ0FBQyxLQUFHLEVBQUUsQ0FBQyxLQUFHLEVBQUUsQ0FBQyxLQUFHLEVBQUUsQ0FBQztBQUFFLHdCQUFBQSxLQUFFLEVBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUFBLDJCQUFNO0FBQUMsNEJBQUcsQ0FBQyxFQUFFLENBQUMsS0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFHLEVBQUUsQ0FBQyxLQUFHLEVBQUUsQ0FBQyxHQUFFO0FBQUMsOEJBQUcsQ0FBQ0o7QUFBRTtBQUFPLDhCQUFJLElBQUUsRUFBRUosSUFBRUMsRUFBQztBQUFFLDhCQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRSxJQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRSxJQUFFLENBQUMsQ0FBQyxVQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQUU7QUFBQSx3QkFBSztBQUFDLHdCQUFBTyxLQUFFLEVBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUFBLHNCQUFDO0FBQUMsK0JBQVEsSUFBRSxDQUFDLEdBQUUsSUFBRSxDQUFDLEdBQUUsSUFBRSxDQUFDLEdBQUUsSUFBRSxHQUFFLElBQUUsRUFBRSxRQUFPLEtBQUk7QUFBQyw0QkFBSSxJQUFFLFlBQVUsT0FBTyxFQUFFLENBQUMsSUFBRVQsR0FBRSxlQUFhQSxHQUFFLGlCQUFnQixJQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUUsRUFBRSxDQUFDLENBQUM7QUFBRSwwQkFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEdBQUUsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEdBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQUEsc0JBQUM7QUFBQyx3QkFBRSxLQUFLLENBQUMsR0FBRSxFQUFFLEtBQUssQ0FBQyxHQUFFLEVBQUUsS0FBSyxDQUFDUyxJQUFFLENBQUMsQ0FBQztBQUFBLG9CQUFDO0FBQUEsa0JBQUM7QUFBQyxvQkFBR04sSUFBRTtBQUFDLHNCQUFJLElBQUU7QUFBRSxzQkFBRSxHQUFFLElBQUU7QUFBQSxnQkFBQztBQUFDLHVCQUFNLENBQUMsR0FBRSxHQUFFLFNBQVNILElBQUU7QUFBQyx5QkFBT0EsR0FBRSxJQUFJLFNBQVNBLElBQUVDLElBQUU7QUFBQyx3QkFBSUMsS0FBRUYsR0FBRSxJQUFJLFNBQVNBLElBQUVFLElBQUU7QUFBQyw2QkFBTyxFQUFFRCxFQUFDLEVBQUUsQ0FBQyxFQUFFQyxFQUFDLEVBQUVGLEVBQUM7QUFBQSxvQkFBQyxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQUUsMkJBQU0sWUFBVSxFQUFFQyxFQUFDLEVBQUUsQ0FBQyxLQUFHLE1BQUlDLEdBQUUsTUFBTSxHQUFHLEVBQUUsV0FBUyxFQUFFRCxFQUFDLEVBQUUsQ0FBQyxJQUFFLGFBQVksRUFBRUEsRUFBQyxFQUFFLENBQUMsSUFBRSxNQUFJQyxLQUFFO0FBQUEsa0JBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUFBLGdCQUFDLENBQUM7QUFBQSxjQUFDO0FBQUMsa0JBQUksSUFBRSxNQUFLLElBQUUsRUFBQyxJQUFHLEVBQUMsR0FBRSxJQUFFLEVBQUMsS0FBSSxFQUFDLEdBQUUsSUFBRSxFQUFDLFFBQU8sQ0FBQyxVQUFTLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFRyxFQUFDLEdBQUUsVUFBUyxDQUFDLG9CQUFtQkEsRUFBQyxHQUFFLFFBQU8sQ0FBQyxHQUFHLEdBQUUsU0FBUSxDQUFDLEdBQUcsR0FBRSxTQUFRLENBQUMsR0FBRyxHQUFFLFNBQVEsQ0FBQyxHQUFHLEdBQUUsVUFBUyxDQUFDLE1BQU0sR0FBRSxhQUFZLENBQUMsR0FBRyxHQUFFLE9BQU0sQ0FBQyxNQUFLSCxHQUFFLENBQUMsR0FBRSxHQUFFLENBQUMsQ0FBQyxHQUFFRyxFQUFDLEdBQUUsUUFBTyxDQUFDLEtBQUlILEdBQUUsQ0FBQyxHQUFFLEdBQUUsQ0FBQyxDQUFDLEdBQUVBLEdBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUUsUUFBTyxDQUFDLEtBQUlBLEdBQUUsQ0FBQyxHQUFFLEdBQUUsQ0FBQyxDQUFDLEdBQUVBLEdBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUUsUUFBTyxDQUFDLEtBQUlBLEdBQUUsQ0FBQyxHQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRSxTQUFRLENBQUMsT0FBTUcsRUFBQyxHQUFFLE1BQUssQ0FBQyxNQUFLLE1BQUtBLEVBQUMsR0FBRSxPQUFNLENBQUMsS0FBSSxNQUFLSCxHQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxHQUFFLE9BQU0sQ0FBQyxLQUFJLE1BQUtBLEdBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUUsV0FBVSxDQUFDLE1BQUtBLEdBQUUsQ0FBQyxHQUFFLEdBQUUsQ0FBQyxDQUFDLEdBQUVHLEVBQUMsR0FBRSxZQUFXLENBQUMsS0FBSUgsR0FBRSxDQUFDLEdBQUUsR0FBRSxDQUFDLENBQUMsR0FBRUEsR0FBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRSxZQUFXLENBQUMsS0FBSUEsR0FBRSxDQUFDLEdBQUUsR0FBRSxDQUFDLENBQUMsR0FBRUEsR0FBRSxDQUFDLEdBQUUsQ0FB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Q0YsVUFBVTtJQUNWQyxRQUFRO0VBQUEsR0FDTEYsd0JBQUE7QUFFUC9CLElBQUVtQyxRQUFRLEVBQUVDLEtBQUssWUFBWSxFQUFFQyxRQUM5QjtJQUNDekUsV0FBV2tFO0VBQ1osR0FDQXpELE9BQ0Q7QUFDRDsiLAogICJuYW1lcyI6IFsiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgIkRlbm8iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJTeW1ib2wiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImRvY3VtZW50IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgIlR5cGVFcnJvciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAib3duS2V5cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJvd25LZXlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImFjdGl2ZVhEb2N1bWVudCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTeW1ib2wiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU3ltYm9sIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInNlbGYiLCAiJCIsICJnbG9iYWwiLCAiVHlwZUVycm9yIiwgIlN5bWJvbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICIkIiwgIiQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiJCIsICIkIiwgIiQiLCAiZ2xvYmFsIiwgIlN5bWJvbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICIkIiwgImdsb2JhbCIsICJFcnJvciIsICJSZWZlcmVuY2VFcnJvciIsICJTeW50YXhFcnJvciIsICJUeXBlRXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiJCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICIkIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIiQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiJCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICIkIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIiQiLCAiZ2xvYmFsIiwgIlR5cGVFcnJvciIsICJOdW1iZXIiLCAiJCIsICIkIiwgIm93bktleXMiLCAiJCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICIkIiwgIiQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAidW5kZWZpbmVkIiwgIm4iLCAiRXZlbnQiLCAiZXZlbnQiLCAidW5kZWZpbmVkIiwgInVuZGVmaW5lZCIsICJnbG9iYWwiLCAiX2FkZExpc3RlbmVyIiwgIl9yZW1vdmVMaXN0ZW5lciIsICJfRE9NVG9rZW5MaXN0IiwgImluaXRfRE9NVG9rZW5MaXN0IiwgInVuZGVmaW5lZCIsICJnbG9iYWwiLCAidW5kZWZpbmVkIiwgInVuZGVmaW5lZCIsICJnbG9iYWwiLCAiZGVsYXkiLCAidW5kZWZpbmVkIiwgImEiLCAiYiIsICJjIiwgImUiLCAiZiIsICJkIiwgImciLCAiaCIsICJpIiwgImoiLCAiayIsICJsIiwgIm0iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiJCIsICIkIiwgIiQiLCAiJCIsICIkIiwgIiQiLCAiJCIsICIkIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiRnVuY3Rpb24iLCAiU3RyaW5nIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiZG9jdW1lbnQiLCAiUHJvbWlzZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIiQiLCAiZ2xvYmFsIiwgIlR5cGVFcnJvciIsICJkb2N1bWVudCIsICJQcm9taXNlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIiQiLCAiJCIsICIkIiwgIiQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiJCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICIkIiwgIiQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgIiQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiJCIsICJVdGlsX2V4cG9ydHMiLCAiX19leHBvcnQiLCAiYWRkRXZlbnRMaXN0ZW5lcldpdGhSZW1vdmVyIiwgImNoYW5nZU9wYWNpdHlXaGVuTW91c2VFbnRlck9yTGVhdmUiLCAiY2hlY2tBMTF5Q29uZmlybUtleSIsICJkZWxheSIsICJnZW5lcmF0ZVN2Z0RhdGFVcmwiLCAiZ2V0Qm9keSIsICJpbml0TXdBcGkiLCAiaXNWYWxpZEtleSIsICJvb3VpQ29uZmlybVdpdGhTdHlsZSIsICJzY3JvbGxUb3AiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAiX190b0NvbW1vbkpTIiwgIl9yZWYiLCAidGFyZ2V0IiwgInR5cGUiLCAibGlzdGVuZXIiLCAiX3JlZiRvcHRpb25zIiwgIm9wdGlvbnMiLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJyZW1vdmUiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIsICJldmVudCIsICJvcGFjaXR5IiwgImFyZ3VtZW50cyIsICJsZW5ndGgiLCAidW5kZWZpbmVkIiwgImN1cnJlbnRUYXJnZXQiLCAic3R5bGUiLCAidG9TdHJpbmciLCAiaW5jbHVkZXMiLCAia2V5IiwgIm1zIiwgIlByb21pc2UiLCAicmVzb2x2ZSIsICJzZXRUaW1lb3V0IiwgInN2ZyIsICJ0cmltIiwgInNsaWNlIiwgImluZGV4T2YiLCAic3RhcnRzV2l0aCIsICJlbmRzV2l0aCIsICJyZXBsYWNlIiwgImVuY29kZVVSSUNvbXBvbmVudCIsICJjb25jYXQiLCAiJCIsICJyZWFkeSIsICJ0aGVuIiwgIiRib2R5IiwgInVzZXJBZ2VudCIsICJhcGlVcmkiLCAiYXBpT3B0aW9ucyIsICJhamF4IiwgImhlYWRlcnMiLCAibXciLCAiRm9yZWlnbkFwaSIsICJBcGkiLCAib2JqZWN0IiwgImltcG9ydF9leHRfZ2FkZ2V0IiwgIl9fdG9FU00iLCAicmVxdWlyZSIsICJtZXNzYWdlIiwgIk9PIiwgInVpIiwgImNvbmZpcm0iLCAiY3JlYXRlRWxlbWVudCIsICJjbGFzc05hbWUiLCAiYm9yZGVyIiwgImRpc3BsYXkiLCAianVzdGlmeUNvbnRlbnQiLCAiZm9udFNpemUiLCAiZm9udFdlaWdodCIsICJsaW5lSGVpZ2h0IiwgInBhZGRpbmciLCAiaXNDb25maXJtIiwgInRhcmdldEhlaWdodCIsICJlZmZlY3RzT3B0aW9uc09yRHVyYXRpb24iLCAiZHVyYXRpb24iLCAiZWFzaW5nIiwgIl9vYmplY3RTcHJlYWQiLCAiZG9jdW1lbnQiLCAiZmluZCIsICJhbmltYXRlIl0KfQo= diff --git a/dist/definition.txt b/dist/definition.txt index 75ceab14..c44c7397 100644 --- a/dist/definition.txt +++ b/dist/definition.txt @@ -4,5 +4,15 @@ * 若需要设置您所需启用或关闭的小工具,请前往[[Special:参数设置#mw-prefsection-gadgets|参数设置]]。 -== appear == -* React[ResourceLoader]|React.js +== browser == +* AjaxLogin[ResourceLoader|default|dependencies=ext.gadget.FilterAlteredClicks,ext.gadget.i18n,ext.gadget.React,ext.gadget.Toastify,ext.gadget.Util,mediawiki.api,mediawiki.util,oojs-ui-core,oojs-ui-windows,oojs-ui.styles.icons-interactions,oojs-ui.styles.icons-user|hidden]|AjaxLogin.js + +== compatibility == +* FilterAlteredClicks[ResourceLoader|hidden]|FilterAlteredClicks.js +* i18n[ResourceLoader|dependencies=ext.gadget.Util|hidden]|i18n.js +* React[ResourceLoader|hidden]|React.js +* Toastify[ResourceLoader|hidden]|Toastify.js|Toastify.css +* Util[ResourceLoader|dependencies=ext.gadget.React|hidden]|Util.js + +== edit == +* InPageEdit[ResourceLoader|rights=skipcaptcha]|InPageEdit.js diff --git a/dist/i18n/i18n.js b/dist/i18n/i18n.js new file mode 100644 index 00000000..14f620da --- /dev/null +++ b/dist/i18n/i18n.js @@ -0,0 +1,4712 @@ +/** + * SPDX-License-Identifier: GPL-3.0-or-later + * _addText: '{{Gadget Header|license=GPL-3.0-or-later}}' + * + * @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/i18n} + * @author 安忆 + * @license GPL-3.0-or-later {@link https://www.qiuwenbaike.cn/wiki/H:GPL-3.0} + */ +/** + * +------------------------------------------------------------+ + * | === WARNING: GLOBAL GADGET FILE === | + * +------------------------------------------------------------+ + * | All changes should be made in the repository, | + * | otherwise they will be lost. | + * +------------------------------------------------------------+ + * | Changes to this page may affect many users. | + * | Please discuss changes by opening an issue before editing. | + * +------------------------------------------------------------+ + */ +/* */ + +(function() { + +"use strict"; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __commonJS = function(cb, mod) { + return function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; + }; +}; + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/global.js +var require_global = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/global.js": function(exports2, module2) { + "use strict"; + var check = function(it) { + return it && it.Math === Math && it; + }; + module2.exports = // eslint-disable-next-line es/no-global-this -- safe + check(typeof globalThis == "object" && globalThis) || check(typeof window == "object" && window) || // eslint-disable-next-line no-restricted-globals -- safe + check(typeof self == "object" && self) || check(typeof global == "object" && global) || check(typeof exports2 == "object" && exports2) || // eslint-disable-next-line no-new-func -- fallback + /* @__PURE__ */ function() { + return this; + }() || Function("return this")(); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/fails.js +var require_fails = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/fails.js": function(exports2, module2) { + "use strict"; + module2.exports = function(exec) { + try { + return !!exec(); + } catch (error) { + return true; + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/descriptors.js +var require_descriptors = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/descriptors.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = !fails(function() { + return Object.defineProperty({}, 1, { get: function() { + return 7; + } })[1] !== 7; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-native.js +var require_function_bind_native = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-native.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = !fails(function() { + var test = function() { + }.bind(); + return typeof test != "function" || test.hasOwnProperty("prototype"); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-call.js +var require_function_call = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-call.js": function(exports2, module2) { + "use strict"; + var NATIVE_BIND = require_function_bind_native(); + var call = Function.prototype.call; + module2.exports = NATIVE_BIND ? call.bind(call) : function() { + return call.apply(call, arguments); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-property-is-enumerable.js +var require_object_property_is_enumerable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-property-is-enumerable.js": function(exports2) { + "use strict"; + var $propertyIsEnumerable = {}.propertyIsEnumerable; + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1); + exports2.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; + } : $propertyIsEnumerable; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property-descriptor.js +var require_create_property_descriptor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property-descriptor.js": function(exports2, module2) { + "use strict"; + module2.exports = function(bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this.js +var require_function_uncurry_this = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this.js": function(exports2, module2) { + "use strict"; + var NATIVE_BIND = require_function_bind_native(); + var FunctionPrototype = Function.prototype; + var call = FunctionPrototype.call; + var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call); + module2.exports = NATIVE_BIND ? uncurryThisWithBind : function(fn) { + return function() { + return call.apply(fn, arguments); + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof-raw.js +var require_classof_raw = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof-raw.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toString = uncurryThis({}.toString); + var stringSlice = uncurryThis("".slice); + module2.exports = function(it) { + return stringSlice(toString(it), 8, -1); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/indexed-object.js +var require_indexed_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/indexed-object.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var classof = require_classof_raw(); + var $Object = Object; + var split = uncurryThis("".split); + module2.exports = fails(function() { + return !$Object("z").propertyIsEnumerable(0); + }) ? function(it) { + return classof(it) === "String" ? split(it, "") : $Object(it); + } : $Object; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-null-or-undefined.js +var require_is_null_or_undefined = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-null-or-undefined.js": function(exports2, module2) { + "use strict"; + module2.exports = function(it) { + return it === null || it === void 0; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/require-object-coercible.js +var require_require_object_coercible = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/require-object-coercible.js": function(exports2, module2) { + "use strict"; + var isNullOrUndefined = require_is_null_or_undefined(); + var $TypeError = TypeError; + module2.exports = function(it) { + if (isNullOrUndefined(it)) + throw new $TypeError("Can't call method on " + it); + return it; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-indexed-object.js +var require_to_indexed_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-indexed-object.js": function(exports2, module2) { + "use strict"; + var IndexedObject = require_indexed_object(); + var requireObjectCoercible = require_require_object_coercible(); + module2.exports = function(it) { + return IndexedObject(requireObjectCoercible(it)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-callable.js +var require_is_callable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-callable.js": function(exports2, module2) { + "use strict"; + var documentAll = typeof document == "object" && document.all; + module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { + return typeof argument == "function" || argument === documentAll; + } : function(argument) { + return typeof argument == "function"; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-object.js +var require_is_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-object.js": function(exports2, module2) { + "use strict"; + var isCallable = require_is_callable(); + module2.exports = function(it) { + return typeof it == "object" ? it !== null : isCallable(it); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-built-in.js +var require_get_built_in = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-built-in.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var isCallable = require_is_callable(); + var aFunction = function(argument) { + return isCallable(argument) ? argument : void 0; + }; + module2.exports = function(namespace, method) { + return arguments.length < 2 ? aFunction(global2[namespace]) : global2[namespace] && global2[namespace][method]; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-is-prototype-of.js +var require_object_is_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-is-prototype-of.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + module2.exports = uncurryThis({}.isPrototypeOf); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-user-agent.js +var require_engine_user_agent = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-user-agent.js": function(exports2, module2) { + "use strict"; + module2.exports = typeof navigator != "undefined" && String(navigator.userAgent) || ""; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-v8-version.js +var require_engine_v8_version = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/engine-v8-version.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var userAgent = require_engine_user_agent(); + var process = global2.process; + var Deno = global2.Deno; + var versions = process && process.versions || Deno && Deno.version; + var v8 = versions && versions.v8; + var match; + var version; + if (v8) { + match = v8.split("."); + version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); + } + if (!version && userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) + version = +match[1]; + } + } + module2.exports = version; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-constructor-detection.js +var require_symbol_constructor_detection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-constructor-detection.js": function(exports2, module2) { + "use strict"; + var V8_VERSION = require_engine_v8_version(); + var fails = require_fails(); + var global2 = require_global(); + var $String = global2.String; + module2.exports = !!Object.getOwnPropertySymbols && !fails(function() { + var symbol = Symbol("symbol detection"); + return !$String(symbol) || !(Object(symbol) instanceof Symbol) || // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances + !Symbol.sham && V8_VERSION && V8_VERSION < 41; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/use-symbol-as-uid.js +var require_use_symbol_as_uid = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/use-symbol-as-uid.js": function(exports2, module2) { + "use strict"; + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-symbol.js +var require_is_symbol = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-symbol.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var isCallable = require_is_callable(); + var isPrototypeOf = require_object_is_prototype_of(); + var USE_SYMBOL_AS_UID = require_use_symbol_as_uid(); + var $Object = Object; + module2.exports = USE_SYMBOL_AS_UID ? function(it) { + return typeof it == "symbol"; + } : function(it) { + var $Symbol = getBuiltIn("Symbol"); + return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/try-to-string.js +var require_try_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/try-to-string.js": function(exports2, module2) { + "use strict"; + var $String = String; + module2.exports = function(argument) { + try { + return $String(argument); + } catch (error) { + return "Object"; + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-callable.js +var require_a_callable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-callable.js": function(exports2, module2) { + "use strict"; + var isCallable = require_is_callable(); + var tryToString = require_try_to_string(); + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isCallable(argument)) + return argument; + throw new $TypeError(tryToString(argument) + " is not a function"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-method.js +var require_get_method = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-method.js": function(exports2, module2) { + "use strict"; + var aCallable = require_a_callable(); + var isNullOrUndefined = require_is_null_or_undefined(); + module2.exports = function(V, P) { + var func = V[P]; + return isNullOrUndefined(func) ? void 0 : aCallable(func); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ordinary-to-primitive.js +var require_ordinary_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ordinary-to-primitive.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var isCallable = require_is_callable(); + var isObject = require_is_object(); + var $TypeError = TypeError; + module2.exports = function(input, pref) { + var fn, val; + if (pref === "string" && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) + return val; + if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) + return val; + if (pref !== "string" && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) + return val; + throw new $TypeError("Can't convert object to primitive value"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-pure.js +var require_is_pure = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-pure.js": function(exports2, module2) { + "use strict"; + module2.exports = false; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-global-property.js +var require_define_global_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-global-property.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var defineProperty = Object.defineProperty; + module2.exports = function(key, value) { + try { + defineProperty(global2, key, { value: value, configurable: true, writable: true }); + } catch (error) { + global2[key] = value; + } + return value; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-store.js +var require_shared_store = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-store.js": function(exports2, module2) { + "use strict"; + var IS_PURE = require_is_pure(); + var globalThis2 = require_global(); + var defineGlobalProperty = require_define_global_property(); + var SHARED = "__core-js_shared__"; + var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); + (store.versions || (store.versions = [])).push({ + version: "3.36.0", + mode: IS_PURE ? "pure" : "global", + copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", + license: "https://github.com/zloirock/core-js/blob/v3.36.0/LICENSE", + source: "https://github.com/zloirock/core-js" + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared.js +var require_shared = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared.js": function(exports2, module2) { + "use strict"; + var store = require_shared_store(); + module2.exports = function(key, value) { + return store[key] || (store[key] = value || {}); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-object.js +var require_to_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-object.js": function(exports2, module2) { + "use strict"; + var requireObjectCoercible = require_require_object_coercible(); + var $Object = Object; + module2.exports = function(argument) { + return $Object(requireObjectCoercible(argument)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/has-own-property.js +var require_has_own_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/has-own-property.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toObject = require_to_object(); + var hasOwnProperty = uncurryThis({}.hasOwnProperty); + module2.exports = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty(toObject(it), key); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/uid.js +var require_uid = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/uid.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var id = 0; + var postfix = Math.random(); + var toString = uncurryThis(1 .toString); + module2.exports = function(key) { + return "Symbol(" + (key === void 0 ? "" : key) + ")_" + toString(++id + postfix, 36); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol.js +var require_well_known_symbol = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var shared = require_shared(); + var hasOwn = require_has_own_property(); + var uid = require_uid(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var USE_SYMBOL_AS_UID = require_use_symbol_as_uid(); + var Symbol2 = global2.Symbol; + var WellKnownSymbolsStore = shared("wks"); + var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol2["for"] || Symbol2 : Symbol2 && Symbol2.withoutSetter || uid; + module2.exports = function(name) { + if (!hasOwn(WellKnownSymbolsStore, name)) { + WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol2, name) ? Symbol2[name] : createWellKnownSymbol("Symbol." + name); + } + return WellKnownSymbolsStore[name]; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-primitive.js +var require_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-primitive.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var isObject = require_is_object(); + var isSymbol = require_is_symbol(); + var getMethod = require_get_method(); + var ordinaryToPrimitive = require_ordinary_to_primitive(); + var wellKnownSymbol = require_well_known_symbol(); + var $TypeError = TypeError; + var TO_PRIMITIVE = wellKnownSymbol("toPrimitive"); + module2.exports = function(input, pref) { + if (!isObject(input) || isSymbol(input)) + return input; + var exoticToPrim = getMethod(input, TO_PRIMITIVE); + var result; + if (exoticToPrim) { + if (pref === void 0) + pref = "default"; + result = call(exoticToPrim, input, pref); + if (!isObject(result) || isSymbol(result)) + return result; + throw new $TypeError("Can't convert object to primitive value"); + } + if (pref === void 0) + pref = "number"; + return ordinaryToPrimitive(input, pref); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-property-key.js +var require_to_property_key = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-property-key.js": function(exports2, module2) { + "use strict"; + var toPrimitive = require_to_primitive(); + var isSymbol = require_is_symbol(); + module2.exports = function(argument) { + var key = toPrimitive(argument, "string"); + return isSymbol(key) ? key : key + ""; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/document-create-element.js +var require_document_create_element = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/document-create-element.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var isObject = require_is_object(); + var document2 = global2.document; + var EXISTS = isObject(document2) && isObject(document2.createElement); + module2.exports = function(it) { + return EXISTS ? document2.createElement(it) : {}; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ie8-dom-define.js +var require_ie8_dom_define = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/ie8-dom-define.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var fails = require_fails(); + var createElement = require_document_create_element(); + module2.exports = !DESCRIPTORS && !fails(function() { + return Object.defineProperty(createElement("div"), "a", { + get: function() { + return 7; + } + }).a !== 7; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +var require_object_get_own_property_descriptor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-descriptor.js": function(exports2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var call = require_function_call(); + var propertyIsEnumerableModule = require_object_property_is_enumerable(); + var createPropertyDescriptor = require_create_property_descriptor(); + var toIndexedObject = require_to_indexed_object(); + var toPropertyKey = require_to_property_key(); + var hasOwn = require_has_own_property(); + var IE8_DOM_DEFINE = require_ie8_dom_define(); + var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + exports2.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPropertyKey(P); + if (IE8_DOM_DEFINE) + try { + return $getOwnPropertyDescriptor(O, P); + } catch (error) { + } + if (hasOwn(O, P)) + return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/v8-prototype-define-bug.js +var require_v8_prototype_define_bug = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/v8-prototype-define-bug.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var fails = require_fails(); + module2.exports = DESCRIPTORS && fails(function() { + return Object.defineProperty(function() { + }, "prototype", { + value: 42, + writable: false + }).prototype !== 42; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/an-object.js +var require_an_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/an-object.js": function(exports2, module2) { + "use strict"; + var isObject = require_is_object(); + var $String = String; + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isObject(argument)) + return argument; + throw new $TypeError($String(argument) + " is not an object"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-property.js +var require_object_define_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-property.js": function(exports2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var IE8_DOM_DEFINE = require_ie8_dom_define(); + var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug(); + var anObject = require_an_object(); + var toPropertyKey = require_to_property_key(); + var $TypeError = TypeError; + var $defineProperty = Object.defineProperty; + var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var ENUMERABLE = "enumerable"; + var CONFIGURABLE = "configurable"; + var WRITABLE = "writable"; + exports2.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (typeof O === "function" && P === "prototype" && "value" in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { + var current = $getOwnPropertyDescriptor(O, P); + if (current && current[WRITABLE]) { + O[P] = Attributes.value; + Attributes = { + configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE], + enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], + writable: false + }; + } + } + return $defineProperty(O, P, Attributes); + } : $defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (IE8_DOM_DEFINE) + try { + return $defineProperty(O, P, Attributes); + } catch (error) { + } + if ("get" in Attributes || "set" in Attributes) + throw new $TypeError("Accessors not supported"); + if ("value" in Attributes) + O[P] = Attributes.value; + return O; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-non-enumerable-property.js +var require_create_non_enumerable_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-non-enumerable-property.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var definePropertyModule = require_object_define_property(); + var createPropertyDescriptor = require_create_property_descriptor(); + module2.exports = DESCRIPTORS ? function(object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); + } : function(object, key, value) { + object[key] = value; + return object; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-name.js +var require_function_name = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-name.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var hasOwn = require_has_own_property(); + var FunctionPrototype = Function.prototype; + var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor; + var EXISTS = hasOwn(FunctionPrototype, "name"); + var PROPER = EXISTS && function something() { + }.name === "something"; + var CONFIGURABLE = EXISTS && (!DESCRIPTORS || DESCRIPTORS && getDescriptor(FunctionPrototype, "name").configurable); + module2.exports = { + EXISTS: EXISTS, + PROPER: PROPER, + CONFIGURABLE: CONFIGURABLE + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inspect-source.js +var require_inspect_source = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inspect-source.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var isCallable = require_is_callable(); + var store = require_shared_store(); + var functionToString = uncurryThis(Function.toString); + if (!isCallable(store.inspectSource)) { + store.inspectSource = function(it) { + return functionToString(it); + }; + } + module2.exports = store.inspectSource; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/weak-map-basic-detection.js +var require_weak_map_basic_detection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/weak-map-basic-detection.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var isCallable = require_is_callable(); + var WeakMap = global2.WeakMap; + module2.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap)); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-key.js +var require_shared_key = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/shared-key.js": function(exports2, module2) { + "use strict"; + var shared = require_shared(); + var uid = require_uid(); + var keys = shared("keys"); + module2.exports = function(key) { + return keys[key] || (keys[key] = uid(key)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/hidden-keys.js +var require_hidden_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/hidden-keys.js": function(exports2, module2) { + "use strict"; + module2.exports = {}; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/internal-state.js +var require_internal_state = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/internal-state.js": function(exports2, module2) { + "use strict"; + var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); + var global2 = require_global(); + var isObject = require_is_object(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var hasOwn = require_has_own_property(); + var shared = require_shared_store(); + var sharedKey = require_shared_key(); + var hiddenKeys = require_hidden_keys(); + var OBJECT_ALREADY_INITIALIZED = "Object already initialized"; + var TypeError2 = global2.TypeError; + var WeakMap = global2.WeakMap; + var set; + var get; + var has; + var enforce = function(it) { + return has(it) ? get(it) : set(it, {}); + }; + var getterFor = function(TYPE) { + return function(it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw new TypeError2("Incompatible receiver, " + TYPE + " required"); + } + return state; + }; + }; + if (NATIVE_WEAK_MAP || shared.state) { + store = shared.state || (shared.state = new WeakMap()); + store.get = store.get; + store.has = store.has; + store.set = store.set; + set = function(it, metadata) { + if (store.has(it)) + throw new TypeError2(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + store.set(it, metadata); + return metadata; + }; + get = function(it) { + return store.get(it) || {}; + }; + has = function(it) { + return store.has(it); + }; + } else { + STATE = sharedKey("state"); + hiddenKeys[STATE] = true; + set = function(it, metadata) { + if (hasOwn(it, STATE)) + throw new TypeError2(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function(it) { + return hasOwn(it, STATE) ? it[STATE] : {}; + }; + has = function(it) { + return hasOwn(it, STATE); + }; + } + var store; + var STATE; + module2.exports = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/make-built-in.js +var require_make_built_in = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/make-built-in.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var isCallable = require_is_callable(); + var hasOwn = require_has_own_property(); + var DESCRIPTORS = require_descriptors(); + var CONFIGURABLE_FUNCTION_NAME = require_function_name().CONFIGURABLE; + var inspectSource = require_inspect_source(); + var InternalStateModule = require_internal_state(); + var enforceInternalState = InternalStateModule.enforce; + var getInternalState = InternalStateModule.get; + var $String = String; + var defineProperty = Object.defineProperty; + var stringSlice = uncurryThis("".slice); + var replace = uncurryThis("".replace); + var join = uncurryThis([].join); + var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function() { + return defineProperty(function() { + }, "length", { value: 8 }).length !== 8; + }); + var TEMPLATE = String(String).split("String"); + var makeBuiltIn = module2.exports = function(value, name, options) { + if (stringSlice($String(name), 0, 7) === "Symbol(") { + name = "[" + replace($String(name), /^Symbol\(([^)]*)\).*$/, "$1") + "]"; + } + if (options && options.getter) + name = "get " + name; + if (options && options.setter) + name = "set " + name; + if (!hasOwn(value, "name") || CONFIGURABLE_FUNCTION_NAME && value.name !== name) { + if (DESCRIPTORS) + defineProperty(value, "name", { value: name, configurable: true }); + else + value.name = name; + } + if (CONFIGURABLE_LENGTH && options && hasOwn(options, "arity") && value.length !== options.arity) { + defineProperty(value, "length", { value: options.arity }); + } + try { + if (options && hasOwn(options, "constructor") && options.constructor) { + if (DESCRIPTORS) + defineProperty(value, "prototype", { writable: false }); + } else if (value.prototype) + value.prototype = void 0; + } catch (error) { + } + var state = enforceInternalState(value); + if (!hasOwn(state, "source")) { + state.source = join(TEMPLATE, typeof name == "string" ? name : ""); + } + return value; + }; + Function.prototype.toString = makeBuiltIn(function toString() { + return isCallable(this) && getInternalState(this).source || inspectSource(this); + }, "toString"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in.js +var require_define_built_in = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in.js": function(exports2, module2) { + "use strict"; + var isCallable = require_is_callable(); + var definePropertyModule = require_object_define_property(); + var makeBuiltIn = require_make_built_in(); + var defineGlobalProperty = require_define_global_property(); + module2.exports = function(O, key, value, options) { + if (!options) + options = {}; + var simple = options.enumerable; + var name = options.name !== void 0 ? options.name : key; + if (isCallable(value)) + makeBuiltIn(value, name, options); + if (options.global) { + if (simple) + O[key] = value; + else + defineGlobalProperty(key, value); + } else { + try { + if (!options.unsafe) + delete O[key]; + else if (O[key]) + simple = true; + } catch (error) { + } + if (simple) + O[key] = value; + else + definePropertyModule.f(O, key, { + value: value, + enumerable: false, + configurable: !options.nonConfigurable, + writable: !options.nonWritable + }); + } + return O; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/math-trunc.js +var require_math_trunc = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/math-trunc.js": function(exports2, module2) { + "use strict"; + var ceil = Math.ceil; + var floor = Math.floor; + module2.exports = Math.trunc || function trunc(x) { + var n = +x; + return (n > 0 ? floor : ceil)(n); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-integer-or-infinity.js +var require_to_integer_or_infinity = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-integer-or-infinity.js": function(exports2, module2) { + "use strict"; + var trunc = require_math_trunc(); + module2.exports = function(argument) { + var number = +argument; + return number !== number || number === 0 ? 0 : trunc(number); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-absolute-index.js +var require_to_absolute_index = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-absolute-index.js": function(exports2, module2) { + "use strict"; + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var max = Math.max; + var min = Math.min; + module2.exports = function(index, length) { + var integer = toIntegerOrInfinity(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-length.js +var require_to_length = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-length.js": function(exports2, module2) { + "use strict"; + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var min = Math.min; + module2.exports = function(argument) { + var len = toIntegerOrInfinity(argument); + return len > 0 ? min(len, 9007199254740991) : 0; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/length-of-array-like.js +var require_length_of_array_like = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/length-of-array-like.js": function(exports2, module2) { + "use strict"; + var toLength = require_to_length(); + module2.exports = function(obj) { + return toLength(obj.length); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-includes.js +var require_array_includes = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-includes.js": function(exports2, module2) { + "use strict"; + var toIndexedObject = require_to_indexed_object(); + var toAbsoluteIndex = require_to_absolute_index(); + var lengthOfArrayLike = require_length_of_array_like(); + var createMethod = function(IS_INCLUDES) { + return function($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = lengthOfArrayLike(O); + if (length === 0) + return !IS_INCLUDES && -1; + var index = toAbsoluteIndex(fromIndex, length); + var value; + if (IS_INCLUDES && el !== el) + while (length > index) { + value = O[index++]; + if (value !== value) + return true; + } + else + for (; length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) + return IS_INCLUDES || index || 0; + } + return !IS_INCLUDES && -1; + }; + }; + module2.exports = { + // `Array.prototype.includes` method + // https://tc39.es/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys-internal.js +var require_object_keys_internal = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys-internal.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var hasOwn = require_has_own_property(); + var toIndexedObject = require_to_indexed_object(); + var indexOf = require_array_includes().indexOf; + var hiddenKeys = require_hidden_keys(); + var push = uncurryThis([].push); + module2.exports = function(object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) + !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key); + while (names.length > i) + if (hasOwn(O, key = names[i++])) { + ~indexOf(result, key) || push(result, key); + } + return result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/enum-bug-keys.js +var require_enum_bug_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/enum-bug-keys.js": function(exports2, module2) { + "use strict"; + module2.exports = [ + "constructor", + "hasOwnProperty", + "isPrototypeOf", + "propertyIsEnumerable", + "toLocaleString", + "toString", + "valueOf" + ]; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names.js +var require_object_get_own_property_names = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names.js": function(exports2) { + "use strict"; + var internalObjectKeys = require_object_keys_internal(); + var enumBugKeys = require_enum_bug_keys(); + var hiddenKeys = enumBugKeys.concat("length", "prototype"); + exports2.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-symbols.js +var require_object_get_own_property_symbols = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-symbols.js": function(exports2) { + "use strict"; + exports2.f = Object.getOwnPropertySymbols; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/own-keys.js +var require_own_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/own-keys.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var uncurryThis = require_function_uncurry_this(); + var getOwnPropertyNamesModule = require_object_get_own_property_names(); + var getOwnPropertySymbolsModule = require_object_get_own_property_symbols(); + var anObject = require_an_object(); + var concat = uncurryThis([].concat); + module2.exports = getBuiltIn("Reflect", "ownKeys") || function ownKeys(it) { + var keys = getOwnPropertyNamesModule.f(anObject(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/copy-constructor-properties.js +var require_copy_constructor_properties = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/copy-constructor-properties.js": function(exports2, module2) { + "use strict"; + var hasOwn = require_has_own_property(); + var ownKeys = require_own_keys(); + var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor(); + var definePropertyModule = require_object_define_property(); + module2.exports = function(target, source, exceptions) { + var keys = ownKeys(source); + var defineProperty = definePropertyModule.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) { + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-forced.js +var require_is_forced = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-forced.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var isCallable = require_is_callable(); + var replacement = /#|\.prototype\./; + var isForced = function(feature, detection) { + var value = data[normalize(feature)]; + return value === POLYFILL ? true : value === NATIVE ? false : isCallable(detection) ? fails(detection) : !!detection; + }; + var normalize = isForced.normalize = function(string) { + return String(string).replace(replacement, ".").toLowerCase(); + }; + var data = isForced.data = {}; + var NATIVE = isForced.NATIVE = "N"; + var POLYFILL = isForced.POLYFILL = "P"; + module2.exports = isForced; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/export.js +var require_export = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/export.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var defineBuiltIn = require_define_built_in(); + var defineGlobalProperty = require_define_global_property(); + var copyConstructorProperties = require_copy_constructor_properties(); + var isForced = require_is_forced(); + module2.exports = function(options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global2; + } else if (STATIC) { + target = global2[TARGET] || defineGlobalProperty(TARGET, {}); + } else { + target = global2[TARGET] && global2[TARGET].prototype; + } + if (target) + for (key in source) { + sourceProperty = source[key]; + if (options.dontCallGetSet) { + descriptor = getOwnPropertyDescriptor(target, key); + targetProperty = descriptor && descriptor.value; + } else + targetProperty = target[key]; + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? "." : "#") + key, options.forced); + if (!FORCED && targetProperty !== void 0) { + if (typeof sourceProperty == typeof targetProperty) + continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + if (options.sham || targetProperty && targetProperty.sham) { + createNonEnumerableProperty(sourceProperty, "sham", true); + } + defineBuiltIn(target, key, sourceProperty, options); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string-tag-support.js +var require_to_string_tag_support = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string-tag-support.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + var test = {}; + test[TO_STRING_TAG] = "z"; + module2.exports = String(test) === "[object z]"; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof.js +var require_classof = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/classof.js": function(exports2, module2) { + "use strict"; + var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); + var isCallable = require_is_callable(); + var classofRaw = require_classof_raw(); + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + var $Object = Object; + var CORRECT_ARGUMENTS = classofRaw(/* @__PURE__ */ function() { + return arguments; + }()) === "Arguments"; + var tryGet = function(it, key) { + try { + return it[key]; + } catch (error) { + } + }; + module2.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function(it) { + var O, tag, result; + return it === void 0 ? "Undefined" : it === null ? "Null" : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == "string" ? tag : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) === "Object" && isCallable(O.callee) ? "Arguments" : result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string.js +var require_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/to-string.js": function(exports2, module2) { + "use strict"; + var classof = require_classof(); + var $String = String; + module2.exports = function(argument) { + if (classof(argument) === "Symbol") + throw new TypeError("Cannot convert a Symbol value to a string"); + return $String(argument); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys.js +var require_object_keys = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-keys.js": function(exports2, module2) { + "use strict"; + var internalObjectKeys = require_object_keys_internal(); + var enumBugKeys = require_enum_bug_keys(); + module2.exports = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-properties.js +var require_object_define_properties = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-define-properties.js": function(exports2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug(); + var definePropertyModule = require_object_define_property(); + var anObject = require_an_object(); + var toIndexedObject = require_to_indexed_object(); + var objectKeys = require_object_keys(); + exports2.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var props = toIndexedObject(Properties); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) + definePropertyModule.f(O, key = keys[index++], props[key]); + return O; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/html.js +var require_html = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/html.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + module2.exports = getBuiltIn("document", "documentElement"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-create.js +var require_object_create = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-create.js": function(exports2, module2) { + "use strict"; + var anObject = require_an_object(); + var definePropertiesModule = require_object_define_properties(); + var enumBugKeys = require_enum_bug_keys(); + var hiddenKeys = require_hidden_keys(); + var html = require_html(); + var documentCreateElement = require_document_create_element(); + var sharedKey = require_shared_key(); + var GT = ">"; + var LT = "<"; + var PROTOTYPE = "prototype"; + var SCRIPT = "script"; + var IE_PROTO = sharedKey("IE_PROTO"); + var EmptyConstructor = function() { + }; + var scriptTag = function(content2) { + return LT + SCRIPT + GT + content2 + LT + "/" + SCRIPT + GT; + }; + var NullProtoObjectViaActiveX = function(activeXDocument2) { + activeXDocument2.write(scriptTag("")); + activeXDocument2.close(); + var temp = activeXDocument2.parentWindow.Object; + activeXDocument2 = null; + return temp; + }; + var NullProtoObjectViaIFrame = function() { + var iframe = documentCreateElement("iframe"); + var JS = "java" + SCRIPT + ":"; + var iframeDocument; + iframe.style.display = "none"; + html.appendChild(iframe); + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag("document.F=Object")); + iframeDocument.close(); + return iframeDocument.F; + }; + var activeXDocument; + var NullProtoObject = function() { + try { + activeXDocument = new ActiveXObject("htmlfile"); + } catch (error) { + } + NullProtoObject = typeof document != "undefined" ? document.domain && activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame() : NullProtoObjectViaActiveX(activeXDocument); + var length = enumBugKeys.length; + while (length--) + delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); + }; + hiddenKeys[IE_PROTO] = true; + module2.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + result[IE_PROTO] = O; + } else + result = NullProtoObject(); + return Properties === void 0 ? result : definePropertiesModule.f(result, Properties); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-slice.js +var require_array_slice = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-slice.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + module2.exports = uncurryThis([].slice); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names-external.js +var require_object_get_own_property_names_external = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-own-property-names-external.js": function(exports2, module2) { + "use strict"; + var classof = require_classof_raw(); + var toIndexedObject = require_to_indexed_object(); + var $getOwnPropertyNames = require_object_get_own_property_names().f; + var arraySlice = require_array_slice(); + var windowNames = typeof window == "object" && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : []; + var getWindowNames = function(it) { + try { + return $getOwnPropertyNames(it); + } catch (error) { + return arraySlice(windowNames); + } + }; + module2.exports.f = function getOwnPropertyNames(it) { + return windowNames && classof(it) === "Window" ? getWindowNames(it) : $getOwnPropertyNames(toIndexedObject(it)); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in-accessor.js +var require_define_built_in_accessor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-in-accessor.js": function(exports2, module2) { + "use strict"; + var makeBuiltIn = require_make_built_in(); + var defineProperty = require_object_define_property(); + module2.exports = function(target, name, descriptor) { + if (descriptor.get) + makeBuiltIn(descriptor.get, name, { getter: true }); + if (descriptor.set) + makeBuiltIn(descriptor.set, name, { setter: true }); + return defineProperty.f(target, name, descriptor); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-wrapped.js +var require_well_known_symbol_wrapped = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-wrapped.js": function(exports2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + exports2.f = wellKnownSymbol; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/path.js +var require_path = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/path.js": function(exports2, module2) { + "use strict"; + var global2 = require_global(); + module2.exports = global2; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-define.js +var require_well_known_symbol_define = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/well-known-symbol-define.js": function(exports2, module2) { + "use strict"; + var path = require_path(); + var hasOwn = require_has_own_property(); + var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped(); + var defineProperty = require_object_define_property().f; + module2.exports = function(NAME) { + var Symbol2 = path.Symbol || (path.Symbol = {}); + if (!hasOwn(Symbol2, NAME)) + defineProperty(Symbol2, NAME, { + value: wrappedWellKnownSymbolModule.f(NAME) + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-define-to-primitive.js +var require_symbol_define_to_primitive = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-define-to-primitive.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var getBuiltIn = require_get_built_in(); + var wellKnownSymbol = require_well_known_symbol(); + var defineBuiltIn = require_define_built_in(); + module2.exports = function() { + var Symbol2 = getBuiltIn("Symbol"); + var SymbolPrototype = Symbol2 && Symbol2.prototype; + var valueOf = SymbolPrototype && SymbolPrototype.valueOf; + var TO_PRIMITIVE = wellKnownSymbol("toPrimitive"); + if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) { + defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function(hint) { + return call(valueOf, this); + }, { arity: 1 }); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/set-to-string-tag.js +var require_set_to_string_tag = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/set-to-string-tag.js": function(exports2, module2) { + "use strict"; + var defineProperty = require_object_define_property().f; + var hasOwn = require_has_own_property(); + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + module2.exports = function(target, TAG, STATIC) { + if (target && !STATIC) + target = target.prototype; + if (target && !hasOwn(target, TO_STRING_TAG)) { + defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG }); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-clause.js +var require_function_uncurry_this_clause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-clause.js": function(exports2, module2) { + "use strict"; + var classofRaw = require_classof_raw(); + var uncurryThis = require_function_uncurry_this(); + module2.exports = function(fn) { + if (classofRaw(fn) === "Function") + return uncurryThis(fn); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-context.js +var require_function_bind_context = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-bind-context.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this_clause(); + var aCallable = require_a_callable(); + var NATIVE_BIND = require_function_bind_native(); + var bind = uncurryThis(uncurryThis.bind); + module2.exports = function(fn, that) { + aCallable(fn); + return that === void 0 ? fn : NATIVE_BIND ? bind(fn, that) : function() { + return fn.apply(that, arguments); + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array.js +var require_is_array = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array.js": function(exports2, module2) { + "use strict"; + var classof = require_classof_raw(); + module2.exports = Array.isArray || function isArray(argument) { + return classof(argument) === "Array"; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-constructor.js +var require_is_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-constructor.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var isCallable = require_is_callable(); + var classof = require_classof(); + var getBuiltIn = require_get_built_in(); + var inspectSource = require_inspect_source(); + var noop = function() { + }; + var construct = getBuiltIn("Reflect", "construct"); + var constructorRegExp = /^\s*(?:class|function)\b/; + var exec = uncurryThis(constructorRegExp.exec); + var INCORRECT_TO_STRING = !constructorRegExp.test(noop); + var isConstructorModern = function isConstructor(argument) { + if (!isCallable(argument)) + return false; + try { + construct(noop, [], argument); + return true; + } catch (error) { + return false; + } + }; + var isConstructorLegacy = function isConstructor(argument) { + if (!isCallable(argument)) + return false; + switch (classof(argument)) { + case "AsyncFunction": + case "GeneratorFunction": + case "AsyncGeneratorFunction": + return false; + } + try { + return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument)); + } catch (error) { + return true; + } + }; + isConstructorLegacy.sham = true; + module2.exports = !construct || fails(function() { + var called; + return isConstructorModern(isConstructorModern.call) || !isConstructorModern(Object) || !isConstructorModern(function() { + called = true; + }) || called; + }) ? isConstructorLegacy : isConstructorModern; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-constructor.js +var require_array_species_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-constructor.js": function(exports2, module2) { + "use strict"; + var isArray = require_is_array(); + var isConstructor = require_is_constructor(); + var isObject = require_is_object(); + var wellKnownSymbol = require_well_known_symbol(); + var SPECIES = wellKnownSymbol("species"); + var $Array = Array; + module2.exports = function(originalArray) { + var C; + if (isArray(originalArray)) { + C = originalArray.constructor; + if (isConstructor(C) && (C === $Array || isArray(C.prototype))) + C = void 0; + else if (isObject(C)) { + C = C[SPECIES]; + if (C === null) + C = void 0; + } + } + return C === void 0 ? $Array : C; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-create.js +var require_array_species_create = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-species-create.js": function(exports2, module2) { + "use strict"; + var arraySpeciesConstructor = require_array_species_constructor(); + module2.exports = function(originalArray, length) { + return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-iteration.js +var require_array_iteration = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-iteration.js": function(exports2, module2) { + "use strict"; + var bind = require_function_bind_context(); + var uncurryThis = require_function_uncurry_this(); + var IndexedObject = require_indexed_object(); + var toObject = require_to_object(); + var lengthOfArrayLike = require_length_of_array_like(); + var arraySpeciesCreate = require_array_species_create(); + var push = uncurryThis([].push); + var createMethod = function(TYPE) { + var IS_MAP = TYPE === 1; + var IS_FILTER = TYPE === 2; + var IS_SOME = TYPE === 3; + var IS_EVERY = TYPE === 4; + var IS_FIND_INDEX = TYPE === 6; + var IS_FILTER_REJECT = TYPE === 7; + var NO_HOLES = TYPE === 5 || IS_FIND_INDEX; + return function($this, callbackfn, that, specificCreate) { + var O = toObject($this); + var self2 = IndexedObject(O); + var length = lengthOfArrayLike(self2); + var boundFunction = bind(callbackfn, that); + var index = 0; + var create = specificCreate || arraySpeciesCreate; + var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : void 0; + var value, result; + for (; length > index; index++) + if (NO_HOLES || index in self2) { + value = self2[index]; + result = boundFunction(value, index, O); + if (TYPE) { + if (IS_MAP) + target[index] = result; + else if (result) + switch (TYPE) { + case 3: + return true; + case 5: + return value; + case 6: + return index; + case 2: + push(target, value); + } + else + switch (TYPE) { + case 4: + return false; + case 7: + push(target, value); + } + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; + }; + module2.exports = { + // `Array.prototype.forEach` method + // https://tc39.es/ecma262/#sec-array.prototype.foreach + forEach: createMethod(0), + // `Array.prototype.map` method + // https://tc39.es/ecma262/#sec-array.prototype.map + map: createMethod(1), + // `Array.prototype.filter` method + // https://tc39.es/ecma262/#sec-array.prototype.filter + filter: createMethod(2), + // `Array.prototype.some` method + // https://tc39.es/ecma262/#sec-array.prototype.some + some: createMethod(3), + // `Array.prototype.every` method + // https://tc39.es/ecma262/#sec-array.prototype.every + every: createMethod(4), + // `Array.prototype.find` method + // https://tc39.es/ecma262/#sec-array.prototype.find + find: createMethod(5), + // `Array.prototype.findIndex` method + // https://tc39.es/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod(6), + // `Array.prototype.filterReject` method + // https://github.com/tc39/proposal-array-filtering + filterReject: createMethod(7) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.constructor.js +var require_es_symbol_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.constructor.js": function() { + "use strict"; + var $ = require_export(); + var global2 = require_global(); + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var IS_PURE = require_is_pure(); + var DESCRIPTORS = require_descriptors(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var fails = require_fails(); + var hasOwn = require_has_own_property(); + var isPrototypeOf = require_object_is_prototype_of(); + var anObject = require_an_object(); + var toIndexedObject = require_to_indexed_object(); + var toPropertyKey = require_to_property_key(); + var $toString = require_to_string(); + var createPropertyDescriptor = require_create_property_descriptor(); + var nativeObjectCreate = require_object_create(); + var objectKeys = require_object_keys(); + var getOwnPropertyNamesModule = require_object_get_own_property_names(); + var getOwnPropertyNamesExternal = require_object_get_own_property_names_external(); + var getOwnPropertySymbolsModule = require_object_get_own_property_symbols(); + var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor(); + var definePropertyModule = require_object_define_property(); + var definePropertiesModule = require_object_define_properties(); + var propertyIsEnumerableModule = require_object_property_is_enumerable(); + var defineBuiltIn = require_define_built_in(); + var defineBuiltInAccessor = require_define_built_in_accessor(); + var shared = require_shared(); + var sharedKey = require_shared_key(); + var hiddenKeys = require_hidden_keys(); + var uid = require_uid(); + var wellKnownSymbol = require_well_known_symbol(); + var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped(); + var defineWellKnownSymbol = require_well_known_symbol_define(); + var defineSymbolToPrimitive = require_symbol_define_to_primitive(); + var setToStringTag = require_set_to_string_tag(); + var InternalStateModule = require_internal_state(); + var $forEach = require_array_iteration().forEach; + var HIDDEN = sharedKey("hidden"); + var SYMBOL = "Symbol"; + var PROTOTYPE = "prototype"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(SYMBOL); + var ObjectPrototype = Object[PROTOTYPE]; + var $Symbol = global2.Symbol; + var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE]; + var RangeError = global2.RangeError; + var TypeError2 = global2.TypeError; + var QObject = global2.QObject; + var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + var nativeDefineProperty = definePropertyModule.f; + var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f; + var nativePropertyIsEnumerable = propertyIsEnumerableModule.f; + var push = uncurryThis([].push); + var AllSymbols = shared("symbols"); + var ObjectPrototypeSymbols = shared("op-symbols"); + var WellKnownSymbolsStore = shared("wks"); + var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; + var fallbackDefineProperty = function(O, P, Attributes) { + var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P); + if (ObjectPrototypeDescriptor) + delete ObjectPrototype[P]; + nativeDefineProperty(O, P, Attributes); + if (ObjectPrototypeDescriptor && O !== ObjectPrototype) { + nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor); + } + }; + var setSymbolDescriptor = DESCRIPTORS && fails(function() { + return nativeObjectCreate(nativeDefineProperty({}, "a", { + get: function() { + return nativeDefineProperty(this, "a", { value: 7 }).a; + } + })).a !== 7; + }) ? fallbackDefineProperty : nativeDefineProperty; + var wrap = function(tag, description) { + var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype); + setInternalState(symbol, { + type: SYMBOL, + tag: tag, + description: description + }); + if (!DESCRIPTORS) + symbol.description = description; + return symbol; + }; + var $defineProperty = function defineProperty(O, P, Attributes) { + if (O === ObjectPrototype) + $defineProperty(ObjectPrototypeSymbols, P, Attributes); + anObject(O); + var key = toPropertyKey(P); + anObject(Attributes); + if (hasOwn(AllSymbols, key)) { + if (!Attributes.enumerable) { + if (!hasOwn(O, HIDDEN)) + nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, nativeObjectCreate(null))); + O[HIDDEN][key] = true; + } else { + if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) + O[HIDDEN][key] = false; + Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) }); + } + return setSymbolDescriptor(O, key, Attributes); + } + return nativeDefineProperty(O, key, Attributes); + }; + var $defineProperties = function defineProperties(O, Properties) { + anObject(O); + var properties = toIndexedObject(Properties); + var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties)); + $forEach(keys, function(key) { + if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) + $defineProperty(O, key, properties[key]); + }); + return O; + }; + var $create = function create(O, Properties) { + return Properties === void 0 ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties); + }; + var $propertyIsEnumerable = function propertyIsEnumerable(V) { + var P = toPropertyKey(V); + var enumerable = call(nativePropertyIsEnumerable, this, P); + if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) + return false; + return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true; + }; + var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) { + var it = toIndexedObject(O); + var key = toPropertyKey(P); + if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) + return; + var descriptor = nativeGetOwnPropertyDescriptor(it, key); + if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) { + descriptor.enumerable = true; + } + return descriptor; + }; + var $getOwnPropertyNames = function getOwnPropertyNames(O) { + var names = nativeGetOwnPropertyNames(toIndexedObject(O)); + var result = []; + $forEach(names, function(key) { + if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) + push(result, key); + }); + return result; + }; + var $getOwnPropertySymbols = function(O) { + var IS_OBJECT_PROTOTYPE = O === ObjectPrototype; + var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O)); + var result = []; + $forEach(names, function(key) { + if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) { + push(result, AllSymbols[key]); + } + }); + return result; + }; + if (!NATIVE_SYMBOL) { + $Symbol = function Symbol2() { + if (isPrototypeOf(SymbolPrototype, this)) + throw new TypeError2("Symbol is not a constructor"); + var description = !arguments.length || arguments[0] === void 0 ? void 0 : $toString(arguments[0]); + var tag = uid(description); + var setter = function(value) { + var $this = this === void 0 ? global2 : this; + if ($this === ObjectPrototype) + call(setter, ObjectPrototypeSymbols, value); + if (hasOwn($this, HIDDEN) && hasOwn($this[HIDDEN], tag)) + $this[HIDDEN][tag] = false; + var descriptor = createPropertyDescriptor(1, value); + try { + setSymbolDescriptor($this, tag, descriptor); + } catch (error) { + if (!(error instanceof RangeError)) + throw error; + fallbackDefineProperty($this, tag, descriptor); + } + }; + if (DESCRIPTORS && USE_SETTER) + setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter }); + return wrap(tag, description); + }; + SymbolPrototype = $Symbol[PROTOTYPE]; + defineBuiltIn(SymbolPrototype, "toString", function toString() { + return getInternalState(this).tag; + }); + defineBuiltIn($Symbol, "withoutSetter", function(description) { + return wrap(uid(description), description); + }); + propertyIsEnumerableModule.f = $propertyIsEnumerable; + definePropertyModule.f = $defineProperty; + definePropertiesModule.f = $defineProperties; + getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor; + getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames; + getOwnPropertySymbolsModule.f = $getOwnPropertySymbols; + wrappedWellKnownSymbolModule.f = function(name) { + return wrap(wellKnownSymbol(name), name); + }; + if (DESCRIPTORS) { + defineBuiltInAccessor(SymbolPrototype, "description", { + configurable: true, + get: function description() { + return getInternalState(this).description; + } + }); + if (!IS_PURE) { + defineBuiltIn(ObjectPrototype, "propertyIsEnumerable", $propertyIsEnumerable, { unsafe: true }); + } + } + } + $({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, { + Symbol: $Symbol + }); + $forEach(objectKeys(WellKnownSymbolsStore), function(name) { + defineWellKnownSymbol(name); + }); + $({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, { + useSetter: function() { + USE_SETTER = true; + }, + useSimple: function() { + USE_SETTER = false; + } + }); + $({ target: "Object", stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, { + // `Object.create` method + // https://tc39.es/ecma262/#sec-object.create + create: $create, + // `Object.defineProperty` method + // https://tc39.es/ecma262/#sec-object.defineproperty + defineProperty: $defineProperty, + // `Object.defineProperties` method + // https://tc39.es/ecma262/#sec-object.defineproperties + defineProperties: $defineProperties, + // `Object.getOwnPropertyDescriptor` method + // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors + getOwnPropertyDescriptor: $getOwnPropertyDescriptor + }); + $({ target: "Object", stat: true, forced: !NATIVE_SYMBOL }, { + // `Object.getOwnPropertyNames` method + // https://tc39.es/ecma262/#sec-object.getownpropertynames + getOwnPropertyNames: $getOwnPropertyNames + }); + defineSymbolToPrimitive(); + setToStringTag($Symbol, SYMBOL); + hiddenKeys[HIDDEN] = true; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-registry-detection.js +var require_symbol_registry_detection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/symbol-registry-detection.js": function(exports2, module2) { + "use strict"; + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + module2.exports = NATIVE_SYMBOL && !!Symbol["for"] && !!Symbol.keyFor; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.for.js +var require_es_symbol_for = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.for.js": function() { + "use strict"; + var $ = require_export(); + var getBuiltIn = require_get_built_in(); + var hasOwn = require_has_own_property(); + var toString = require_to_string(); + var shared = require_shared(); + var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection(); + var StringToSymbolRegistry = shared("string-to-symbol-registry"); + var SymbolToStringRegistry = shared("symbol-to-string-registry"); + $({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, { + "for": function(key) { + var string = toString(key); + if (hasOwn(StringToSymbolRegistry, string)) + return StringToSymbolRegistry[string]; + var symbol = getBuiltIn("Symbol")(string); + StringToSymbolRegistry[string] = symbol; + SymbolToStringRegistry[symbol] = string; + return symbol; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.key-for.js +var require_es_symbol_key_for = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.key-for.js": function() { + "use strict"; + var $ = require_export(); + var hasOwn = require_has_own_property(); + var isSymbol = require_is_symbol(); + var tryToString = require_try_to_string(); + var shared = require_shared(); + var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection(); + var SymbolToStringRegistry = shared("symbol-to-string-registry"); + $({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, { + keyFor: function keyFor(sym) { + if (!isSymbol(sym)) + throw new TypeError(tryToString(sym) + " is not a symbol"); + if (hasOwn(SymbolToStringRegistry, sym)) + return SymbolToStringRegistry[sym]; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-apply.js +var require_function_apply = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-apply.js": function(exports2, module2) { + "use strict"; + var NATIVE_BIND = require_function_bind_native(); + var FunctionPrototype = Function.prototype; + var apply = FunctionPrototype.apply; + var call = FunctionPrototype.call; + module2.exports = typeof Reflect == "object" && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function() { + return call.apply(apply, arguments); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-json-replacer-function.js +var require_get_json_replacer_function = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-json-replacer-function.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var isArray = require_is_array(); + var isCallable = require_is_callable(); + var classof = require_classof_raw(); + var toString = require_to_string(); + var push = uncurryThis([].push); + module2.exports = function(replacer) { + if (isCallable(replacer)) + return replacer; + if (!isArray(replacer)) + return; + var rawLength = replacer.length; + var keys = []; + for (var i = 0; i < rawLength; i++) { + var element = replacer[i]; + if (typeof element == "string") + push(keys, element); + else if (typeof element == "number" || classof(element) === "Number" || classof(element) === "String") + push(keys, toString(element)); + } + var keysLength = keys.length; + var root = true; + return function(key, value) { + if (root) { + root = false; + return value; + } + if (isArray(this)) + return value; + for (var j = 0; j < keysLength; j++) + if (keys[j] === key) + return value; + }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.json.stringify.js +var require_es_json_stringify = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.json.stringify.js": function() { + "use strict"; + var $ = require_export(); + var getBuiltIn = require_get_built_in(); + var apply = require_function_apply(); + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var isCallable = require_is_callable(); + var isSymbol = require_is_symbol(); + var arraySlice = require_array_slice(); + var getReplacerFunction = require_get_json_replacer_function(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var $String = String; + var $stringify = getBuiltIn("JSON", "stringify"); + var exec = uncurryThis(/./.exec); + var charAt = uncurryThis("".charAt); + var charCodeAt = uncurryThis("".charCodeAt); + var replace = uncurryThis("".replace); + var numberToString = uncurryThis(1 .toString); + var tester = /[\uD800-\uDFFF]/g; + var low = /^[\uD800-\uDBFF]$/; + var hi = /^[\uDC00-\uDFFF]$/; + var WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function() { + var symbol = getBuiltIn("Symbol")("stringify detection"); + return $stringify([symbol]) !== "[null]" || $stringify({ a: symbol }) !== "{}" || $stringify(Object(symbol)) !== "{}"; + }); + var ILL_FORMED_UNICODE = fails(function() { + return $stringify("\uDF06\uD834") !== '"\\udf06\\ud834"' || $stringify("\uDEAD") !== '"\\udead"'; + }); + var stringifyWithSymbolsFix = function(it, replacer) { + var args = arraySlice(arguments); + var $replacer = getReplacerFunction(replacer); + if (!isCallable($replacer) && (it === void 0 || isSymbol(it))) + return; + args[1] = function(key, value) { + if (isCallable($replacer)) + value = call($replacer, this, $String(key), value); + if (!isSymbol(value)) + return value; + }; + return apply($stringify, null, args); + }; + var fixIllFormed = function(match, offset, string) { + var prev = charAt(string, offset - 1); + var next = charAt(string, offset + 1); + if (exec(low, match) && !exec(hi, next) || exec(hi, match) && !exec(low, prev)) { + return "\\u" + numberToString(charCodeAt(match, 0), 16); + } + return match; + }; + if ($stringify) { + $({ target: "JSON", stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + stringify: function stringify(it, replacer, space) { + var args = arraySlice(arguments); + var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args); + return ILL_FORMED_UNICODE && typeof result == "string" ? replace(result, tester, fixIllFormed) : result; + } + }); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-symbols.js +var require_es_object_get_own_property_symbols = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-symbols.js": function() { + "use strict"; + var $ = require_export(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var fails = require_fails(); + var getOwnPropertySymbolsModule = require_object_get_own_property_symbols(); + var toObject = require_to_object(); + var FORCED = !NATIVE_SYMBOL || fails(function() { + getOwnPropertySymbolsModule.f(1); + }); + $({ target: "Object", stat: true, forced: FORCED }, { + getOwnPropertySymbols: function getOwnPropertySymbols(it) { + var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : []; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.js +var require_es_symbol = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.js": function() { + "use strict"; + require_es_symbol_constructor(); + require_es_symbol_for(); + require_es_symbol_key_for(); + require_es_json_stringify(); + require_es_object_get_own_property_symbols(); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.description.js +var require_es_symbol_description = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.description.js": function() { + "use strict"; + var $ = require_export(); + var DESCRIPTORS = require_descriptors(); + var global2 = require_global(); + var uncurryThis = require_function_uncurry_this(); + var hasOwn = require_has_own_property(); + var isCallable = require_is_callable(); + var isPrototypeOf = require_object_is_prototype_of(); + var toString = require_to_string(); + var defineBuiltInAccessor = require_define_built_in_accessor(); + var copyConstructorProperties = require_copy_constructor_properties(); + var NativeSymbol = global2.Symbol; + var SymbolPrototype = NativeSymbol && NativeSymbol.prototype; + if (DESCRIPTORS && isCallable(NativeSymbol) && (!("description" in SymbolPrototype) || // Safari 12 bug + NativeSymbol().description !== void 0)) { + EmptyStringDescriptionStore = {}; + SymbolWrapper = function Symbol2() { + var description = arguments.length < 1 || arguments[0] === void 0 ? void 0 : toString(arguments[0]); + var result = isPrototypeOf(SymbolPrototype, this) ? new NativeSymbol(description) : description === void 0 ? NativeSymbol() : NativeSymbol(description); + if (description === "") + EmptyStringDescriptionStore[result] = true; + return result; + }; + copyConstructorProperties(SymbolWrapper, NativeSymbol); + SymbolWrapper.prototype = SymbolPrototype; + SymbolPrototype.constructor = SymbolWrapper; + NATIVE_SYMBOL = String(NativeSymbol("description detection")) === "Symbol(description detection)"; + thisSymbolValue = uncurryThis(SymbolPrototype.valueOf); + symbolDescriptiveString = uncurryThis(SymbolPrototype.toString); + regexp = /^Symbol\((.*)\)[^)]+$/; + replace = uncurryThis("".replace); + stringSlice = uncurryThis("".slice); + defineBuiltInAccessor(SymbolPrototype, "description", { + configurable: true, + get: function description() { + var symbol = thisSymbolValue(this); + if (hasOwn(EmptyStringDescriptionStore, symbol)) + return ""; + var string = symbolDescriptiveString(symbol); + var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, "$1"); + return desc === "" ? void 0 : desc; + } + }); + $({ global: true, constructor: true, forced: true }, { + Symbol: SymbolWrapper + }); + } + var EmptyStringDescriptionStore; + var SymbolWrapper; + var NATIVE_SYMBOL; + var thisSymbolValue; + var symbolDescriptiveString; + var regexp; + var replace; + var stringSlice; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.iterator.js +var require_es_symbol_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.symbol.iterator.js": function() { + "use strict"; + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("iterator"); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-accessor.js +var require_function_uncurry_this_accessor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/function-uncurry-this-accessor.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var aCallable = require_a_callable(); + module2.exports = function(object, key, method) { + try { + return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method])); + } catch (error) { + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-possible-prototype.js +var require_is_possible_prototype = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-possible-prototype.js": function(exports2, module2) { + "use strict"; + var isObject = require_is_object(); + module2.exports = function(argument) { + return isObject(argument) || argument === null; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-possible-prototype.js +var require_a_possible_prototype = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/a-possible-prototype.js": function(exports2, module2) { + "use strict"; + var isPossiblePrototype = require_is_possible_prototype(); + var $String = String; + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isPossiblePrototype(argument)) + return argument; + throw new $TypeError("Can't set " + $String(argument) + " as a prototype"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-set-prototype-of.js +var require_object_set_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-set-prototype-of.js": function(exports2, module2) { + "use strict"; + var uncurryThisAccessor = require_function_uncurry_this_accessor(); + var anObject = require_an_object(); + var aPossiblePrototype = require_a_possible_prototype(); + module2.exports = Object.setPrototypeOf || ("__proto__" in {} ? function() { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = uncurryThisAccessor(Object.prototype, "__proto__", "set"); + setter(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { + } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) + setter(O, proto); + else + O.__proto__ = proto; + return O; + }; + }() : void 0); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/proxy-accessor.js +var require_proxy_accessor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/proxy-accessor.js": function(exports2, module2) { + "use strict"; + var defineProperty = require_object_define_property().f; + module2.exports = function(Target, Source, key) { + key in Target || defineProperty(Target, key, { + configurable: true, + get: function() { + return Source[key]; + }, + set: function(it) { + Source[key] = it; + } + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inherit-if-required.js +var require_inherit_if_required = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/inherit-if-required.js": function(exports2, module2) { + "use strict"; + var isCallable = require_is_callable(); + var isObject = require_is_object(); + var setPrototypeOf = require_object_set_prototype_of(); + module2.exports = function($this, dummy, Wrapper) { + var NewTarget, NewTargetPrototype; + if ( + // it can work only with native `setPrototypeOf` + setPrototypeOf && // we haven't completely correct pre-ES6 way for getting `new.target`, so use this + isCallable(NewTarget = dummy.constructor) && NewTarget !== Wrapper && isObject(NewTargetPrototype = NewTarget.prototype) && NewTargetPrototype !== Wrapper.prototype + ) + setPrototypeOf($this, NewTargetPrototype); + return $this; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/normalize-string-argument.js +var require_normalize_string_argument = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/normalize-string-argument.js": function(exports2, module2) { + "use strict"; + var toString = require_to_string(); + module2.exports = function(argument, $default) { + return argument === void 0 ? arguments.length < 2 ? "" : $default : toString(argument); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/install-error-cause.js +var require_install_error_cause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/install-error-cause.js": function(exports2, module2) { + "use strict"; + var isObject = require_is_object(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + module2.exports = function(O, options) { + if (isObject(options) && "cause" in options) { + createNonEnumerableProperty(O, "cause", options.cause); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-clear.js +var require_error_stack_clear = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-clear.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var $Error = Error; + var replace = uncurryThis("".replace); + var TEST = function(arg) { + return String(new $Error(arg).stack); + }("zxcasd"); + var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/; + var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST); + module2.exports = function(stack, dropEntries) { + if (IS_V8_OR_CHAKRA_STACK && typeof stack == "string" && !$Error.prepareStackTrace) { + while (dropEntries--) + stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, ""); + } + return stack; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-installable.js +var require_error_stack_installable = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-installable.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var createPropertyDescriptor = require_create_property_descriptor(); + module2.exports = !fails(function() { + var error = new Error("a"); + if (!("stack" in error)) + return true; + Object.defineProperty(error, "stack", createPropertyDescriptor(1, 7)); + return error.stack !== 7; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-install.js +var require_error_stack_install = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-stack-install.js": function(exports2, module2) { + "use strict"; + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var clearErrorStack = require_error_stack_clear(); + var ERROR_STACK_INSTALLABLE = require_error_stack_installable(); + var captureStackTrace = Error.captureStackTrace; + module2.exports = function(error, C, stack, dropEntries) { + if (ERROR_STACK_INSTALLABLE) { + if (captureStackTrace) + captureStackTrace(error, C); + else + createNonEnumerableProperty(error, "stack", clearErrorStack(stack, dropEntries)); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/wrap-error-constructor-with-cause.js +var require_wrap_error_constructor_with_cause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/wrap-error-constructor-with-cause.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var hasOwn = require_has_own_property(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var isPrototypeOf = require_object_is_prototype_of(); + var setPrototypeOf = require_object_set_prototype_of(); + var copyConstructorProperties = require_copy_constructor_properties(); + var proxyAccessor = require_proxy_accessor(); + var inheritIfRequired = require_inherit_if_required(); + var normalizeStringArgument = require_normalize_string_argument(); + var installErrorCause = require_install_error_cause(); + var installErrorStack = require_error_stack_install(); + var DESCRIPTORS = require_descriptors(); + var IS_PURE = require_is_pure(); + module2.exports = function(FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) { + var STACK_TRACE_LIMIT = "stackTraceLimit"; + var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1; + var path = FULL_NAME.split("."); + var ERROR_NAME = path[path.length - 1]; + var OriginalError = getBuiltIn.apply(null, path); + if (!OriginalError) + return; + var OriginalErrorPrototype = OriginalError.prototype; + if (!IS_PURE && hasOwn(OriginalErrorPrototype, "cause")) + delete OriginalErrorPrototype.cause; + if (!FORCED) + return OriginalError; + var BaseError = getBuiltIn("Error"); + var WrappedError = wrapper(function(a, b) { + var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, void 0); + var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError(); + if (message !== void 0) + createNonEnumerableProperty(result, "message", message); + installErrorStack(result, WrappedError, result.stack, 2); + if (this && isPrototypeOf(OriginalErrorPrototype, this)) + inheritIfRequired(result, this, WrappedError); + if (arguments.length > OPTIONS_POSITION) + installErrorCause(result, arguments[OPTIONS_POSITION]); + return result; + }); + WrappedError.prototype = OriginalErrorPrototype; + if (ERROR_NAME !== "Error") { + if (setPrototypeOf) + setPrototypeOf(WrappedError, BaseError); + else + copyConstructorProperties(WrappedError, BaseError, { name: true }); + } else if (DESCRIPTORS && STACK_TRACE_LIMIT in OriginalError) { + proxyAccessor(WrappedError, OriginalError, STACK_TRACE_LIMIT); + proxyAccessor(WrappedError, OriginalError, "prepareStackTrace"); + } + copyConstructorProperties(WrappedError, OriginalError); + if (!IS_PURE) + try { + if (OriginalErrorPrototype.name !== ERROR_NAME) { + createNonEnumerableProperty(OriginalErrorPrototype, "name", ERROR_NAME); + } + OriginalErrorPrototype.constructor = WrappedError; + } catch (error) { + } + return WrappedError; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.cause.js +var require_es_error_cause = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.cause.js": function() { + "use strict"; + var $ = require_export(); + var global2 = require_global(); + var apply = require_function_apply(); + var wrapErrorConstructorWithCause = require_wrap_error_constructor_with_cause(); + var WEB_ASSEMBLY = "WebAssembly"; + var WebAssembly = global2[WEB_ASSEMBLY]; + var FORCED = new Error("e", { cause: 7 }).cause !== 7; + var exportGlobalErrorCauseWrapper = function(ERROR_NAME, wrapper) { + var O = {}; + O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED); + $({ global: true, constructor: true, arity: 1, forced: FORCED }, O); + }; + var exportWebAssemblyErrorCauseWrapper = function(ERROR_NAME, wrapper) { + if (WebAssembly && WebAssembly[ERROR_NAME]) { + var O = {}; + O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + "." + ERROR_NAME, wrapper, FORCED); + $({ target: WEB_ASSEMBLY, stat: true, constructor: true, arity: 1, forced: FORCED }, O); + } + }; + exportGlobalErrorCauseWrapper("Error", function(init) { + return function Error2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("EvalError", function(init) { + return function EvalError(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("RangeError", function(init) { + return function RangeError(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("ReferenceError", function(init) { + return function ReferenceError2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("SyntaxError", function(init) { + return function SyntaxError(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("TypeError", function(init) { + return function TypeError2(message) { + return apply(init, this, arguments); + }; + }); + exportGlobalErrorCauseWrapper("URIError", function(init) { + return function URIError(message) { + return apply(init, this, arguments); + }; + }); + exportWebAssemblyErrorCauseWrapper("CompileError", function(init) { + return function CompileError(message) { + return apply(init, this, arguments); + }; + }); + exportWebAssemblyErrorCauseWrapper("LinkError", function(init) { + return function LinkError(message) { + return apply(init, this, arguments); + }; + }); + exportWebAssemblyErrorCauseWrapper("RuntimeError", function(init) { + return function RuntimeError(message) { + return apply(init, this, arguments); + }; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-to-string.js +var require_error_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/error-to-string.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var fails = require_fails(); + var anObject = require_an_object(); + var normalizeStringArgument = require_normalize_string_argument(); + var nativeErrorToString = Error.prototype.toString; + var INCORRECT_TO_STRING = fails(function() { + if (DESCRIPTORS) { + var object = Object.create(Object.defineProperty({}, "name", { get: function() { + return this === object; + } })); + if (nativeErrorToString.call(object) !== "true") + return true; + } + return nativeErrorToString.call({ message: 1, name: 2 }) !== "2: 1" || nativeErrorToString.call({}) !== "Error"; + }); + module2.exports = INCORRECT_TO_STRING ? function toString() { + var O = anObject(this); + var name = normalizeStringArgument(O.name, "Error"); + var message = normalizeStringArgument(O.message); + return !name ? message : !message ? name : name + ": " + message; + } : nativeErrorToString; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.to-string.js +var require_es_error_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.error.to-string.js": function() { + "use strict"; + var defineBuiltIn = require_define_built_in(); + var errorToString = require_error_to_string(); + var ErrorPrototype = Error.prototype; + if (ErrorPrototype.toString !== errorToString) { + defineBuiltIn(ErrorPrototype, "toString", errorToString); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-close.js +var require_iterator_close = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-close.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var anObject = require_an_object(); + var getMethod = require_get_method(); + module2.exports = function(iterator, kind, value) { + var innerResult, innerError; + anObject(iterator); + try { + innerResult = getMethod(iterator, "return"); + if (!innerResult) { + if (kind === "throw") + throw value; + return value; + } + innerResult = call(innerResult, iterator); + } catch (error) { + innerError = true; + innerResult = error; + } + if (kind === "throw") + throw value; + if (innerError) + throw innerResult; + anObject(innerResult); + return value; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/call-with-safe-iteration-closing.js +var require_call_with_safe_iteration_closing = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/call-with-safe-iteration-closing.js": function(exports2, module2) { + "use strict"; + var anObject = require_an_object(); + var iteratorClose = require_iterator_close(); + module2.exports = function(iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); + } catch (error) { + iteratorClose(iterator, "throw", error); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators.js +var require_iterators = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators.js": function(exports2, module2) { + "use strict"; + module2.exports = {}; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array-iterator-method.js +var require_is_array_iterator_method = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/is-array-iterator-method.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var Iterators = require_iterators(); + var ITERATOR = wellKnownSymbol("iterator"); + var ArrayPrototype = Array.prototype; + module2.exports = function(it) { + return it !== void 0 && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property.js +var require_create_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-property.js": function(exports2, module2) { + "use strict"; + var DESCRIPTORS = require_descriptors(); + var definePropertyModule = require_object_define_property(); + var createPropertyDescriptor = require_create_property_descriptor(); + module2.exports = function(object, key, value) { + if (DESCRIPTORS) + definePropertyModule.f(object, key, createPropertyDescriptor(0, value)); + else + object[key] = value; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator-method.js +var require_get_iterator_method = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator-method.js": function(exports2, module2) { + "use strict"; + var classof = require_classof(); + var getMethod = require_get_method(); + var isNullOrUndefined = require_is_null_or_undefined(); + var Iterators = require_iterators(); + var wellKnownSymbol = require_well_known_symbol(); + var ITERATOR = wellKnownSymbol("iterator"); + module2.exports = function(it) { + if (!isNullOrUndefined(it)) + return getMethod(it, ITERATOR) || getMethod(it, "@@iterator") || Iterators[classof(it)]; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator.js +var require_get_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/get-iterator.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var aCallable = require_a_callable(); + var anObject = require_an_object(); + var tryToString = require_try_to_string(); + var getIteratorMethod = require_get_iterator_method(); + var $TypeError = TypeError; + module2.exports = function(argument, usingIterator) { + var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator; + if (aCallable(iteratorMethod)) + return anObject(call(iteratorMethod, argument)); + throw new $TypeError(tryToString(argument) + " is not iterable"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-from.js +var require_array_from = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-from.js": function(exports2, module2) { + "use strict"; + var bind = require_function_bind_context(); + var call = require_function_call(); + var toObject = require_to_object(); + var callWithSafeIterationClosing = require_call_with_safe_iteration_closing(); + var isArrayIteratorMethod = require_is_array_iterator_method(); + var isConstructor = require_is_constructor(); + var lengthOfArrayLike = require_length_of_array_like(); + var createProperty = require_create_property(); + var getIterator = require_get_iterator(); + var getIteratorMethod = require_get_iterator_method(); + var $Array = Array; + module2.exports = function from(arrayLike) { + var O = toObject(arrayLike); + var IS_CONSTRUCTOR = isConstructor(this); + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : void 0; + var mapping = mapfn !== void 0; + if (mapping) + mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : void 0); + var iteratorMethod = getIteratorMethod(O); + var index = 0; + var length, result, step, iterator, next, value; + if (iteratorMethod && !(this === $Array && isArrayIteratorMethod(iteratorMethod))) { + iterator = getIterator(O, iteratorMethod); + next = iterator.next; + result = IS_CONSTRUCTOR ? new this() : []; + for (; !(step = call(next, iterator)).done; index++) { + value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value; + createProperty(result, index, value); + } + } else { + length = lengthOfArrayLike(O); + result = IS_CONSTRUCTOR ? new this(length) : $Array(length); + for (; length > index; index++) { + value = mapping ? mapfn(O[index], index) : O[index]; + createProperty(result, index, value); + } + } + result.length = index; + return result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/check-correctness-of-iteration.js +var require_check_correctness_of_iteration = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/check-correctness-of-iteration.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var ITERATOR = wellKnownSymbol("iterator"); + var SAFE_CLOSING = false; + try { + called = 0; + iteratorWithReturn = { + next: function() { + return { done: !!called++ }; + }, + "return": function() { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function() { + return this; + }; + Array.from(iteratorWithReturn, function() { + throw 2; + }); + } catch (error) { + } + var called; + var iteratorWithReturn; + module2.exports = function(exec, SKIP_CLOSING) { + try { + if (!SKIP_CLOSING && !SAFE_CLOSING) + return false; + } catch (error) { + return false; + } + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function() { + return { + next: function() { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { + } + return ITERATION_SUPPORT; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.from.js +var require_es_array_from = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.from.js": function() { + "use strict"; + var $ = require_export(); + var from = require_array_from(); + var checkCorrectnessOfIteration = require_check_correctness_of_iteration(); + var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function(iterable) { + Array.from(iterable); + }); + $({ target: "Array", stat: true, forced: INCORRECT_ITERATION }, { + from: from + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-method-has-species-support.js +var require_array_method_has_species_support = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-method-has-species-support.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var wellKnownSymbol = require_well_known_symbol(); + var V8_VERSION = require_engine_v8_version(); + var SPECIES = wellKnownSymbol("species"); + module2.exports = function(METHOD_NAME) { + return V8_VERSION >= 51 || !fails(function() { + var array = []; + var constructor = array.constructor = {}; + constructor[SPECIES] = function() { + return { foo: 1 }; + }; + return array[METHOD_NAME](Boolean).foo !== 1; + }); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.slice.js +var require_es_array_slice = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.slice.js": function() { + "use strict"; + var $ = require_export(); + var isArray = require_is_array(); + var isConstructor = require_is_constructor(); + var isObject = require_is_object(); + var toAbsoluteIndex = require_to_absolute_index(); + var lengthOfArrayLike = require_length_of_array_like(); + var toIndexedObject = require_to_indexed_object(); + var createProperty = require_create_property(); + var wellKnownSymbol = require_well_known_symbol(); + var arrayMethodHasSpeciesSupport = require_array_method_has_species_support(); + var nativeSlice = require_array_slice(); + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("slice"); + var SPECIES = wellKnownSymbol("species"); + var $Array = Array; + var max = Math.max; + $({ target: "Array", proto: true, forced: !HAS_SPECIES_SUPPORT }, { + slice: function slice(start, end) { + var O = toIndexedObject(this); + var length = lengthOfArrayLike(O); + var k = toAbsoluteIndex(start, length); + var fin = toAbsoluteIndex(end === void 0 ? length : end, length); + var Constructor, result, n; + if (isArray(O)) { + Constructor = O.constructor; + if (isConstructor(Constructor) && (Constructor === $Array || isArray(Constructor.prototype))) { + Constructor = void 0; + } else if (isObject(Constructor)) { + Constructor = Constructor[SPECIES]; + if (Constructor === null) + Constructor = void 0; + } + if (Constructor === $Array || Constructor === void 0) { + return nativeSlice(O, k, fin); + } + } + result = new (Constructor === void 0 ? $Array : Constructor)(max(fin - k, 0)); + for (n = 0; k < fin; k++, n++) + if (k in O) + createProperty(result, n, O[k]); + result.length = n; + return result; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-flags.js +var require_regexp_flags = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-flags.js": function(exports2, module2) { + "use strict"; + var anObject = require_an_object(); + module2.exports = function() { + var that = anObject(this); + var result = ""; + if (that.hasIndices) + result += "d"; + if (that.global) + result += "g"; + if (that.ignoreCase) + result += "i"; + if (that.multiline) + result += "m"; + if (that.dotAll) + result += "s"; + if (that.unicode) + result += "u"; + if (that.unicodeSets) + result += "v"; + if (that.sticky) + result += "y"; + return result; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-sticky-helpers.js +var require_regexp_sticky_helpers = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-sticky-helpers.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var global2 = require_global(); + var $RegExp = global2.RegExp; + var UNSUPPORTED_Y = fails(function() { + var re = $RegExp("a", "y"); + re.lastIndex = 2; + return re.exec("abcd") !== null; + }); + var MISSED_STICKY = UNSUPPORTED_Y || fails(function() { + return !$RegExp("a", "y").sticky; + }); + var BROKEN_CARET = UNSUPPORTED_Y || fails(function() { + var re = $RegExp("^r", "gy"); + re.lastIndex = 2; + return re.exec("str") !== null; + }); + module2.exports = { + BROKEN_CARET: BROKEN_CARET, + MISSED_STICKY: MISSED_STICKY, + UNSUPPORTED_Y: UNSUPPORTED_Y + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-dot-all.js +var require_regexp_unsupported_dot_all = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-dot-all.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var global2 = require_global(); + var $RegExp = global2.RegExp; + module2.exports = fails(function() { + var re = $RegExp(".", "s"); + return !(re.dotAll && re.test("\n") && re.flags === "s"); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-ncg.js +var require_regexp_unsupported_ncg = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-unsupported-ncg.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var global2 = require_global(); + var $RegExp = global2.RegExp; + module2.exports = fails(function() { + var re = $RegExp("(?b)", "g"); + return re.exec("b").groups.a !== "b" || "b".replace(re, "$c") !== "bc"; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-exec.js +var require_regexp_exec = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-exec.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var toString = require_to_string(); + var regexpFlags = require_regexp_flags(); + var stickyHelpers = require_regexp_sticky_helpers(); + var shared = require_shared(); + var create = require_object_create(); + var getInternalState = require_internal_state().get; + var UNSUPPORTED_DOT_ALL = require_regexp_unsupported_dot_all(); + var UNSUPPORTED_NCG = require_regexp_unsupported_ncg(); + var nativeReplace = shared("native-string-replace", String.prototype.replace); + var nativeExec = RegExp.prototype.exec; + var patchedExec = nativeExec; + var charAt = uncurryThis("".charAt); + var indexOf = uncurryThis("".indexOf); + var replace = uncurryThis("".replace); + var stringSlice = uncurryThis("".slice); + var UPDATES_LAST_INDEX_WRONG = function() { + var re1 = /a/; + var re2 = /b*/g; + call(nativeExec, re1, "a"); + call(nativeExec, re2, "a"); + return re1.lastIndex !== 0 || re2.lastIndex !== 0; + }(); + var UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET; + var NPCG_INCLUDED = /()??/.exec("")[1] !== void 0; + var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG; + if (PATCH) { + patchedExec = function exec(string) { + var re = this; + var state = getInternalState(re); + var str = toString(string); + var raw = state.raw; + var result, reCopy, lastIndex, match, i, object, group; + if (raw) { + raw.lastIndex = re.lastIndex; + result = call(patchedExec, raw, str); + re.lastIndex = raw.lastIndex; + return result; + } + var groups = state.groups; + var sticky = UNSUPPORTED_Y && re.sticky; + var flags = call(regexpFlags, re); + var source = re.source; + var charsAdded = 0; + var strCopy = str; + if (sticky) { + flags = replace(flags, "y", ""); + if (indexOf(flags, "g") === -1) { + flags += "g"; + } + strCopy = stringSlice(str, re.lastIndex); + if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== "\n")) { + source = "(?: " + source + ")"; + strCopy = " " + strCopy; + charsAdded++; + } + reCopy = new RegExp("^(?:" + source + ")", flags); + } + if (NPCG_INCLUDED) { + reCopy = new RegExp("^" + source + "$(?!\\s)", flags); + } + if (UPDATES_LAST_INDEX_WRONG) + lastIndex = re.lastIndex; + match = call(nativeExec, sticky ? reCopy : re, strCopy); + if (sticky) { + if (match) { + match.input = stringSlice(match.input, charsAdded); + match[0] = stringSlice(match[0], charsAdded); + match.index = re.lastIndex; + re.lastIndex += match[0].length; + } else + re.lastIndex = 0; + } else if (UPDATES_LAST_INDEX_WRONG && match) { + re.lastIndex = re.global ? match.index + match[0].length : lastIndex; + } + if (NPCG_INCLUDED && match && match.length > 1) { + call(nativeReplace, match[0], reCopy, function() { + for (i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === void 0) + match[i] = void 0; + } + }); + } + if (match && groups) { + match.groups = object = create(null); + for (i = 0; i < groups.length; i++) { + group = groups[i]; + object[group[0]] = match[group[1]]; + } + } + return match; + }; + } + module2.exports = patchedExec; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.exec.js +var require_es_regexp_exec = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.exec.js": function() { + "use strict"; + var $ = require_export(); + var exec = require_regexp_exec(); + $({ target: "RegExp", proto: true, forced: /./.exec !== exec }, { + exec: exec + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.test.js +var require_es_regexp_test = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.test.js": function() { + "use strict"; + require_es_regexp_exec(); + var $ = require_export(); + var call = require_function_call(); + var isCallable = require_is_callable(); + var anObject = require_an_object(); + var toString = require_to_string(); + var DELEGATES_TO_EXEC = function() { + var execCalled = false; + var re = /[ac]/; + re.exec = function() { + execCalled = true; + return /./.exec.apply(this, arguments); + }; + return re.test("abc") === true && execCalled; + }(); + var nativeTest = /./.test; + $({ target: "RegExp", proto: true, forced: !DELEGATES_TO_EXEC }, { + test: function(S) { + var R = anObject(this); + var string = toString(S); + var exec = R.exec; + if (!isCallable(exec)) + return call(nativeTest, R, string); + var result = call(exec, R, string); + if (result === null) + return false; + anObject(result); + return true; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-get-flags.js +var require_regexp_get_flags = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/regexp-get-flags.js": function(exports2, module2) { + "use strict"; + var call = require_function_call(); + var hasOwn = require_has_own_property(); + var isPrototypeOf = require_object_is_prototype_of(); + var regExpFlags = require_regexp_flags(); + var RegExpPrototype = RegExp.prototype; + module2.exports = function(R) { + var flags = R.flags; + return flags === void 0 && !("flags" in RegExpPrototype) && !hasOwn(R, "flags") && isPrototypeOf(RegExpPrototype, R) ? call(regExpFlags, R) : flags; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.to-string.js +var require_es_regexp_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.regexp.to-string.js": function() { + "use strict"; + var PROPER_FUNCTION_NAME = require_function_name().PROPER; + var defineBuiltIn = require_define_built_in(); + var anObject = require_an_object(); + var $toString = require_to_string(); + var fails = require_fails(); + var getRegExpFlags = require_regexp_get_flags(); + var TO_STRING = "toString"; + var RegExpPrototype = RegExp.prototype; + var nativeToString = RegExpPrototype[TO_STRING]; + var NOT_GENERIC = fails(function() { + return nativeToString.call({ source: "a", flags: "b" }) !== "/a/b"; + }); + var INCORRECT_NAME = PROPER_FUNCTION_NAME && nativeToString.name !== TO_STRING; + if (NOT_GENERIC || INCORRECT_NAME) { + defineBuiltIn(RegExpPrototype, TO_STRING, function toString() { + var R = anObject(this); + var pattern = $toString(R.source); + var flags = $toString(getRegExpFlags(R)); + return "/" + pattern + "/" + flags; + }, { unsafe: true }); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js +var require_does_not_exceed_safe_integer = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js": function(exports2, module2) { + "use strict"; + var $TypeError = TypeError; + var MAX_SAFE_INTEGER = 9007199254740991; + module2.exports = function(it) { + if (it > MAX_SAFE_INTEGER) + throw $TypeError("Maximum allowed index exceeded"); + return it; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.concat.js +var require_es_array_concat = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.concat.js": function() { + "use strict"; + var $ = require_export(); + var fails = require_fails(); + var isArray = require_is_array(); + var isObject = require_is_object(); + var toObject = require_to_object(); + var lengthOfArrayLike = require_length_of_array_like(); + var doesNotExceedSafeInteger = require_does_not_exceed_safe_integer(); + var createProperty = require_create_property(); + var arraySpeciesCreate = require_array_species_create(); + var arrayMethodHasSpeciesSupport = require_array_method_has_species_support(); + var wellKnownSymbol = require_well_known_symbol(); + var V8_VERSION = require_engine_v8_version(); + var IS_CONCAT_SPREADABLE = wellKnownSymbol("isConcatSpreadable"); + var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function() { + var array = []; + array[IS_CONCAT_SPREADABLE] = false; + return array.concat()[0] !== array; + }); + var isConcatSpreadable = function(O) { + if (!isObject(O)) + return false; + var spreadable = O[IS_CONCAT_SPREADABLE]; + return spreadable !== void 0 ? !!spreadable : isArray(O); + }; + var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !arrayMethodHasSpeciesSupport("concat"); + $({ target: "Array", proto: true, arity: 1, forced: FORCED }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + concat: function concat(arg) { + var O = toObject(this); + var A = arraySpeciesCreate(O, 0); + var n = 0; + var i, k, length, len, E; + for (i = -1, length = arguments.length; i < length; i++) { + E = i === -1 ? O : arguments[i]; + if (isConcatSpreadable(E)) { + len = lengthOfArrayLike(E); + doesNotExceedSafeInteger(n + len); + for (k = 0; k < len; k++, n++) + if (k in E) + createProperty(A, n, E[k]); + } else { + doesNotExceedSafeInteger(n + 1); + createProperty(A, n++, E); + } + } + A.length = n; + return A; + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/add-to-unscopables.js +var require_add_to_unscopables = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/add-to-unscopables.js": function(exports2, module2) { + "use strict"; + var wellKnownSymbol = require_well_known_symbol(); + var create = require_object_create(); + var defineProperty = require_object_define_property().f; + var UNSCOPABLES = wellKnownSymbol("unscopables"); + var ArrayPrototype = Array.prototype; + if (ArrayPrototype[UNSCOPABLES] === void 0) { + defineProperty(ArrayPrototype, UNSCOPABLES, { + configurable: true, + value: create(null) + }); + } + module2.exports = function(key) { + ArrayPrototype[UNSCOPABLES][key] = true; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/correct-prototype-getter.js +var require_correct_prototype_getter = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/correct-prototype-getter.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = !fails(function() { + function F() { + } + F.prototype.constructor = null; + return Object.getPrototypeOf(new F()) !== F.prototype; + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-prototype-of.js +var require_object_get_prototype_of = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-get-prototype-of.js": function(exports2, module2) { + "use strict"; + var hasOwn = require_has_own_property(); + var isCallable = require_is_callable(); + var toObject = require_to_object(); + var sharedKey = require_shared_key(); + var CORRECT_PROTOTYPE_GETTER = require_correct_prototype_getter(); + var IE_PROTO = sharedKey("IE_PROTO"); + var $Object = Object; + var ObjectPrototype = $Object.prototype; + module2.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function(O) { + var object = toObject(O); + if (hasOwn(object, IE_PROTO)) + return object[IE_PROTO]; + var constructor = object.constructor; + if (isCallable(constructor) && object instanceof constructor) { + return constructor.prototype; + } + return object instanceof $Object ? ObjectPrototype : null; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators-core.js +var require_iterators_core = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterators-core.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var isCallable = require_is_callable(); + var isObject = require_is_object(); + var create = require_object_create(); + var getPrototypeOf = require_object_get_prototype_of(); + var defineBuiltIn = require_define_built_in(); + var wellKnownSymbol = require_well_known_symbol(); + var IS_PURE = require_is_pure(); + var ITERATOR = wellKnownSymbol("iterator"); + var BUGGY_SAFARI_ITERATORS = false; + var IteratorPrototype; + var PrototypeOfArrayIteratorPrototype; + var arrayIterator; + if ([].keys) { + arrayIterator = [].keys(); + if (!("next" in arrayIterator)) + BUGGY_SAFARI_ITERATORS = true; + else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) + IteratorPrototype = PrototypeOfArrayIteratorPrototype; + } + } + var NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function() { + var test = {}; + return IteratorPrototype[ITERATOR].call(test) !== test; + }); + if (NEW_ITERATOR_PROTOTYPE) + IteratorPrototype = {}; + else if (IS_PURE) + IteratorPrototype = create(IteratorPrototype); + if (!isCallable(IteratorPrototype[ITERATOR])) { + defineBuiltIn(IteratorPrototype, ITERATOR, function() { + return this; + }); + } + module2.exports = { + IteratorPrototype: IteratorPrototype, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-create-constructor.js +var require_iterator_create_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-create-constructor.js": function(exports2, module2) { + "use strict"; + var IteratorPrototype = require_iterators_core().IteratorPrototype; + var create = require_object_create(); + var createPropertyDescriptor = require_create_property_descriptor(); + var setToStringTag = require_set_to_string_tag(); + var Iterators = require_iterators(); + var returnThis = function() { + return this; + }; + module2.exports = function(IteratorConstructor, NAME, next, ENUMERABLE_NEXT) { + var TO_STRING_TAG = NAME + " Iterator"; + IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); + Iterators[TO_STRING_TAG] = returnThis; + return IteratorConstructor; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-define.js +var require_iterator_define = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterator-define.js": function(exports2, module2) { + "use strict"; + var $ = require_export(); + var call = require_function_call(); + var IS_PURE = require_is_pure(); + var FunctionName = require_function_name(); + var isCallable = require_is_callable(); + var createIteratorConstructor = require_iterator_create_constructor(); + var getPrototypeOf = require_object_get_prototype_of(); + var setPrototypeOf = require_object_set_prototype_of(); + var setToStringTag = require_set_to_string_tag(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var defineBuiltIn = require_define_built_in(); + var wellKnownSymbol = require_well_known_symbol(); + var Iterators = require_iterators(); + var IteratorsCore = require_iterators_core(); + var PROPER_FUNCTION_NAME = FunctionName.PROPER; + var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE; + var IteratorPrototype = IteratorsCore.IteratorPrototype; + var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; + var ITERATOR = wellKnownSymbol("iterator"); + var KEYS = "keys"; + var VALUES = "values"; + var ENTRIES = "entries"; + var returnThis = function() { + return this; + }; + module2.exports = function(Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor(IteratorConstructor, NAME, next); + var getIterationMethod = function(KIND) { + if (KIND === DEFAULT && defaultIterator) + return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) + return IterablePrototype[KIND]; + switch (KIND) { + case KEYS: + return function keys() { + return new IteratorConstructor(this, KIND); + }; + case VALUES: + return function values() { + return new IteratorConstructor(this, KIND); + }; + case ENTRIES: + return function entries() { + return new IteratorConstructor(this, KIND); + }; + } + return function() { + return new IteratorConstructor(this); + }; + }; + var TO_STRING_TAG = NAME + " Iterator"; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR] || IterablePrototype["@@iterator"] || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME === "Array" ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); + if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) { + defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis); + } + } + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); + if (IS_PURE) + Iterators[TO_STRING_TAG] = returnThis; + } + } + if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) { + if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) { + createNonEnumerableProperty(IterablePrototype, "name", VALUES); + } else { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { + return call(nativeIterator, this); + }; + } + } + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) + for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + defineBuiltIn(IterablePrototype, KEY, methods[KEY]); + } + } + else + $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); + } + if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { + defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT }); + } + Iterators[NAME] = defaultIterator; + return methods; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-iter-result-object.js +var require_create_iter_result_object = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/create-iter-result-object.js": function(exports2, module2) { + "use strict"; + module2.exports = function(value, done) { + return { value: value, done: done }; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.iterator.js +var require_es_array_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.iterator.js": function(exports2, module2) { + "use strict"; + var toIndexedObject = require_to_indexed_object(); + var addToUnscopables = require_add_to_unscopables(); + var Iterators = require_iterators(); + var InternalStateModule = require_internal_state(); + var defineProperty = require_object_define_property().f; + var defineIterator = require_iterator_define(); + var createIterResultObject = require_create_iter_result_object(); + var IS_PURE = require_is_pure(); + var DESCRIPTORS = require_descriptors(); + var ARRAY_ITERATOR = "Array Iterator"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); + module2.exports = defineIterator(Array, "Array", function(iterated, kind) { + setInternalState(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject(iterated), + // target + index: 0, + // next index + kind: kind + // kind + }); + }, function() { + var state = getInternalState(this); + var target = state.target; + var index = state.index++; + if (!target || index >= target.length) { + state.target = void 0; + return createIterResultObject(void 0, true); + } + switch (state.kind) { + case "keys": + return createIterResultObject(index, false); + case "values": + return createIterResultObject(target[index], false); + } + return createIterResultObject([index, target[index]], false); + }, "values"); + var values = Iterators.Arguments = Iterators.Array; + addToUnscopables("keys"); + addToUnscopables("values"); + addToUnscopables("entries"); + if (!IS_PURE && DESCRIPTORS && values.name !== "values") + try { + defineProperty(values, "name", { value: "values" }); + } catch (error) { + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.map.js +var require_es_array_map = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.array.map.js": function() { + "use strict"; + var $ = require_export(); + var $map = require_array_iteration().map; + var arrayMethodHasSpeciesSupport = require_array_method_has_species_support(); + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("map"); + $({ target: "Array", proto: true, forced: !HAS_SPECIES_SUPPORT }, { + map: function map(callbackfn) { + return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.define-property.js +var require_es_object_define_property = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.define-property.js": function() { + "use strict"; + var $ = require_export(); + var DESCRIPTORS = require_descriptors(); + var defineProperty = require_object_define_property().f; + $({ target: "Object", stat: true, forced: Object.defineProperty !== defineProperty, sham: !DESCRIPTORS }, { + defineProperty: defineProperty + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-descriptor.js +var require_es_object_get_own_property_descriptor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-descriptor.js": function() { + "use strict"; + var $ = require_export(); + var fails = require_fails(); + var toIndexedObject = require_to_indexed_object(); + var nativeGetOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; + var DESCRIPTORS = require_descriptors(); + var FORCED = !DESCRIPTORS || fails(function() { + nativeGetOwnPropertyDescriptor(1); + }); + $({ target: "Object", stat: true, forced: FORCED, sham: !DESCRIPTORS }, { + getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) { + return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-names.js +var require_es_object_get_own_property_names = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.get-own-property-names.js": function() { + "use strict"; + var $ = require_export(); + var fails = require_fails(); + var getOwnPropertyNames = require_object_get_own_property_names_external().f; + var FAILS_ON_PRIMITIVES = fails(function() { + return !Object.getOwnPropertyNames(1); + }); + $({ target: "Object", stat: true, forced: FAILS_ON_PRIMITIVES }, { + getOwnPropertyNames: getOwnPropertyNames + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-to-string.js +var require_object_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-to-string.js": function(exports2, module2) { + "use strict"; + var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); + var classof = require_classof(); + module2.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { + return "[object " + classof(this) + "]"; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.to-string.js +var require_es_object_to_string = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.object.to-string.js": function() { + "use strict"; + var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); + var defineBuiltIn = require_define_built_in(); + var toString = require_object_to_string(); + if (!TO_STRING_TAG_SUPPORT) { + defineBuiltIn(Object.prototype, "toString", toString, { unsafe: true }); + } + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-buffer-non-extensible.js +var require_array_buffer_non_extensible = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/array-buffer-non-extensible.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = fails(function() { + if (typeof ArrayBuffer == "function") { + var buffer = new ArrayBuffer(8); + if (Object.isExtensible(buffer)) + Object.defineProperty(buffer, "a", { value: 8 }); + } + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-is-extensible.js +var require_object_is_extensible = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/object-is-extensible.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + var isObject = require_is_object(); + var classof = require_classof_raw(); + var ARRAY_BUFFER_NON_EXTENSIBLE = require_array_buffer_non_extensible(); + var $isExtensible = Object.isExtensible; + var FAILS_ON_PRIMITIVES = fails(function() { + $isExtensible(1); + }); + module2.exports = FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE ? function isExtensible(it) { + if (!isObject(it)) + return false; + if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) === "ArrayBuffer") + return false; + return $isExtensible ? $isExtensible(it) : true; + } : $isExtensible; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/freezing.js +var require_freezing = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/freezing.js": function(exports2, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = !fails(function() { + return Object.isExtensible(Object.preventExtensions({})); + }); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/internal-metadata.js +var require_internal_metadata = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/internal-metadata.js": function(exports2, module2) { + "use strict"; + var $ = require_export(); + var uncurryThis = require_function_uncurry_this(); + var hiddenKeys = require_hidden_keys(); + var isObject = require_is_object(); + var hasOwn = require_has_own_property(); + var defineProperty = require_object_define_property().f; + var getOwnPropertyNamesModule = require_object_get_own_property_names(); + var getOwnPropertyNamesExternalModule = require_object_get_own_property_names_external(); + var isExtensible = require_object_is_extensible(); + var uid = require_uid(); + var FREEZING = require_freezing(); + var REQUIRED = false; + var METADATA = uid("meta"); + var id = 0; + var setMetadata = function(it) { + defineProperty(it, METADATA, { value: { + objectID: "O" + id++, + // object ID + weakData: {} + // weak collections IDs + } }); + }; + var fastKey = function(it, create) { + if (!isObject(it)) + return typeof it == "symbol" ? it : (typeof it == "string" ? "S" : "P") + it; + if (!hasOwn(it, METADATA)) { + if (!isExtensible(it)) + return "F"; + if (!create) + return "E"; + setMetadata(it); + } + return it[METADATA].objectID; + }; + var getWeakData = function(it, create) { + if (!hasOwn(it, METADATA)) { + if (!isExtensible(it)) + return true; + if (!create) + return false; + setMetadata(it); + } + return it[METADATA].weakData; + }; + var onFreeze = function(it) { + if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) + setMetadata(it); + return it; + }; + var enable = function() { + meta.enable = function() { + }; + REQUIRED = true; + var getOwnPropertyNames = getOwnPropertyNamesModule.f; + var splice = uncurryThis([].splice); + var test = {}; + test[METADATA] = 1; + if (getOwnPropertyNames(test).length) { + getOwnPropertyNamesModule.f = function(it) { + var result = getOwnPropertyNames(it); + for (var i = 0, length = result.length; i < length; i++) { + if (result[i] === METADATA) { + splice(result, i, 1); + break; + } + } + return result; + }; + $({ target: "Object", stat: true, forced: true }, { + getOwnPropertyNames: getOwnPropertyNamesExternalModule.f + }); + } + }; + var meta = module2.exports = { + enable: enable, + fastKey: fastKey, + getWeakData: getWeakData, + onFreeze: onFreeze + }; + hiddenKeys[METADATA] = true; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterate.js +var require_iterate = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/iterate.js": function(exports2, module2) { + "use strict"; + var bind = require_function_bind_context(); + var call = require_function_call(); + var anObject = require_an_object(); + var tryToString = require_try_to_string(); + var isArrayIteratorMethod = require_is_array_iterator_method(); + var lengthOfArrayLike = require_length_of_array_like(); + var isPrototypeOf = require_object_is_prototype_of(); + var getIterator = require_get_iterator(); + var getIteratorMethod = require_get_iterator_method(); + var iteratorClose = require_iterator_close(); + var $TypeError = TypeError; + var Result = function(stopped, result) { + this.stopped = stopped; + this.result = result; + }; + var ResultPrototype = Result.prototype; + module2.exports = function(iterable, unboundFunction, options) { + var that = options && options.that; + var AS_ENTRIES = !!(options && options.AS_ENTRIES); + var IS_RECORD = !!(options && options.IS_RECORD); + var IS_ITERATOR = !!(options && options.IS_ITERATOR); + var INTERRUPTED = !!(options && options.INTERRUPTED); + var fn = bind(unboundFunction, that); + var iterator, iterFn, index, length, result, next, step; + var stop = function(condition) { + if (iterator) + iteratorClose(iterator, "normal", condition); + return new Result(true, condition); + }; + var callFn = function(value) { + if (AS_ENTRIES) { + anObject(value); + return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]); + } + return INTERRUPTED ? fn(value, stop) : fn(value); + }; + if (IS_RECORD) { + iterator = iterable.iterator; + } else if (IS_ITERATOR) { + iterator = iterable; + } else { + iterFn = getIteratorMethod(iterable); + if (!iterFn) + throw new $TypeError(tryToString(iterable) + " is not iterable"); + if (isArrayIteratorMethod(iterFn)) { + for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) { + result = callFn(iterable[index]); + if (result && isPrototypeOf(ResultPrototype, result)) + return result; + } + return new Result(false); + } + iterator = getIterator(iterable, iterFn); + } + next = IS_RECORD ? iterable.next : iterator.next; + while (!(step = call(next, iterator)).done) { + try { + result = callFn(step.value); + } catch (error) { + iteratorClose(iterator, "throw", error); + } + if (typeof result == "object" && result && isPrototypeOf(ResultPrototype, result)) + return result; + } + return new Result(false); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/an-instance.js +var require_an_instance = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/an-instance.js": function(exports2, module2) { + "use strict"; + var isPrototypeOf = require_object_is_prototype_of(); + var $TypeError = TypeError; + module2.exports = function(it, Prototype) { + if (isPrototypeOf(Prototype, it)) + return it; + throw new $TypeError("Incorrect invocation"); + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/collection.js +var require_collection = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/collection.js": function(exports2, module2) { + "use strict"; + var $ = require_export(); + var global2 = require_global(); + var uncurryThis = require_function_uncurry_this(); + var isForced = require_is_forced(); + var defineBuiltIn = require_define_built_in(); + var InternalMetadataModule = require_internal_metadata(); + var iterate = require_iterate(); + var anInstance = require_an_instance(); + var isCallable = require_is_callable(); + var isNullOrUndefined = require_is_null_or_undefined(); + var isObject = require_is_object(); + var fails = require_fails(); + var checkCorrectnessOfIteration = require_check_correctness_of_iteration(); + var setToStringTag = require_set_to_string_tag(); + var inheritIfRequired = require_inherit_if_required(); + module2.exports = function(CONSTRUCTOR_NAME, wrapper, common) { + var IS_MAP = CONSTRUCTOR_NAME.indexOf("Map") !== -1; + var IS_WEAK = CONSTRUCTOR_NAME.indexOf("Weak") !== -1; + var ADDER = IS_MAP ? "set" : "add"; + var NativeConstructor = global2[CONSTRUCTOR_NAME]; + var NativePrototype = NativeConstructor && NativeConstructor.prototype; + var Constructor = NativeConstructor; + var exported = {}; + var fixMethod = function(KEY) { + var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]); + defineBuiltIn( + NativePrototype, + KEY, + KEY === "add" ? function add(value) { + uncurriedNativeMethod(this, value === 0 ? 0 : value); + return this; + } : KEY === "delete" ? function(key) { + return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key); + } : KEY === "get" ? function get(key) { + return IS_WEAK && !isObject(key) ? void 0 : uncurriedNativeMethod(this, key === 0 ? 0 : key); + } : KEY === "has" ? function has(key) { + return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key); + } : function set(key, value) { + uncurriedNativeMethod(this, key === 0 ? 0 : key, value); + return this; + } + ); + }; + var REPLACE = isForced( + CONSTRUCTOR_NAME, + !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function() { + new NativeConstructor().entries().next(); + })) + ); + if (REPLACE) { + Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER); + InternalMetadataModule.enable(); + } else if (isForced(CONSTRUCTOR_NAME, true)) { + var instance = new Constructor(); + var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) !== instance; + var THROWS_ON_PRIMITIVES = fails(function() { + instance.has(1); + }); + var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function(iterable) { + new NativeConstructor(iterable); + }); + var BUGGY_ZERO = !IS_WEAK && fails(function() { + var $instance = new NativeConstructor(); + var index = 5; + while (index--) + $instance[ADDER](index, index); + return !$instance.has(-0); + }); + if (!ACCEPT_ITERABLES) { + Constructor = wrapper(function(dummy, iterable) { + anInstance(dummy, NativePrototype); + var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor); + if (!isNullOrUndefined(iterable)) + iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP }); + return that; + }); + Constructor.prototype = NativePrototype; + NativePrototype.constructor = Constructor; + } + if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { + fixMethod("delete"); + fixMethod("has"); + IS_MAP && fixMethod("get"); + } + if (BUGGY_ZERO || HASNT_CHAINING) + fixMethod(ADDER); + if (IS_WEAK && NativePrototype.clear) + delete NativePrototype.clear; + } + exported[CONSTRUCTOR_NAME] = Constructor; + $({ global: true, constructor: true, forced: Constructor !== NativeConstructor }, exported); + setToStringTag(Constructor, CONSTRUCTOR_NAME); + if (!IS_WEAK) + common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP); + return Constructor; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-ins.js +var require_define_built_ins = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/define-built-ins.js": function(exports2, module2) { + "use strict"; + var defineBuiltIn = require_define_built_in(); + module2.exports = function(target, src, options) { + for (var key in src) + defineBuiltIn(target, key, src[key], options); + return target; + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/set-species.js +var require_set_species = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/set-species.js": function(exports2, module2) { + "use strict"; + var getBuiltIn = require_get_built_in(); + var defineBuiltInAccessor = require_define_built_in_accessor(); + var wellKnownSymbol = require_well_known_symbol(); + var DESCRIPTORS = require_descriptors(); + var SPECIES = wellKnownSymbol("species"); + module2.exports = function(CONSTRUCTOR_NAME) { + var Constructor = getBuiltIn(CONSTRUCTOR_NAME); + if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { + defineBuiltInAccessor(Constructor, SPECIES, { + configurable: true, + get: function() { + return this; + } + }); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/collection-strong.js +var require_collection_strong = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/collection-strong.js": function(exports2, module2) { + "use strict"; + var create = require_object_create(); + var defineBuiltInAccessor = require_define_built_in_accessor(); + var defineBuiltIns = require_define_built_ins(); + var bind = require_function_bind_context(); + var anInstance = require_an_instance(); + var isNullOrUndefined = require_is_null_or_undefined(); + var iterate = require_iterate(); + var defineIterator = require_iterator_define(); + var createIterResultObject = require_create_iter_result_object(); + var setSpecies = require_set_species(); + var DESCRIPTORS = require_descriptors(); + var fastKey = require_internal_metadata().fastKey; + var InternalStateModule = require_internal_state(); + var setInternalState = InternalStateModule.set; + var internalStateGetterFor = InternalStateModule.getterFor; + module2.exports = { + getConstructor: function(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { + var Constructor = wrapper(function(that, iterable) { + anInstance(that, Prototype); + setInternalState(that, { + type: CONSTRUCTOR_NAME, + index: create(null), + first: void 0, + last: void 0, + size: 0 + }); + if (!DESCRIPTORS) + that.size = 0; + if (!isNullOrUndefined(iterable)) + iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP }); + }); + var Prototype = Constructor.prototype; + var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); + var define = function(that, key, value) { + var state = getInternalState(that); + var entry = getEntry(that, key); + var previous, index; + if (entry) { + entry.value = value; + } else { + state.last = entry = { + index: index = fastKey(key, true), + key: key, + value: value, + previous: previous = state.last, + next: void 0, + removed: false + }; + if (!state.first) + state.first = entry; + if (previous) + previous.next = entry; + if (DESCRIPTORS) + state.size++; + else + that.size++; + if (index !== "F") + state.index[index] = entry; + } + return that; + }; + var getEntry = function(that, key) { + var state = getInternalState(that); + var index = fastKey(key); + var entry; + if (index !== "F") + return state.index[index]; + for (entry = state.first; entry; entry = entry.next) { + if (entry.key === key) + return entry; + } + }; + defineBuiltIns(Prototype, { + // `{ Map, Set }.prototype.clear()` methods + // https://tc39.es/ecma262/#sec-map.prototype.clear + // https://tc39.es/ecma262/#sec-set.prototype.clear + clear: function clear() { + var that = this; + var state = getInternalState(that); + var entry = state.first; + while (entry) { + entry.removed = true; + if (entry.previous) + entry.previous = entry.previous.next = void 0; + entry = entry.next; + } + state.first = state.last = void 0; + state.index = create(null); + if (DESCRIPTORS) + state.size = 0; + else + that.size = 0; + }, + // `{ Map, Set }.prototype.delete(key)` methods + // https://tc39.es/ecma262/#sec-map.prototype.delete + // https://tc39.es/ecma262/#sec-set.prototype.delete + "delete": function(key) { + var that = this; + var state = getInternalState(that); + var entry = getEntry(that, key); + if (entry) { + var next = entry.next; + var prev = entry.previous; + delete state.index[entry.index]; + entry.removed = true; + if (prev) + prev.next = next; + if (next) + next.previous = prev; + if (state.first === entry) + state.first = next; + if (state.last === entry) + state.last = prev; + if (DESCRIPTORS) + state.size--; + else + that.size--; + } + return !!entry; + }, + // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods + // https://tc39.es/ecma262/#sec-map.prototype.foreach + // https://tc39.es/ecma262/#sec-set.prototype.foreach + forEach: function forEach(callbackfn) { + var state = getInternalState(this); + var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : void 0); + var entry; + while (entry = entry ? entry.next : state.first) { + boundFunction(entry.value, entry.key, this); + while (entry && entry.removed) + entry = entry.previous; + } + }, + // `{ Map, Set}.prototype.has(key)` methods + // https://tc39.es/ecma262/#sec-map.prototype.has + // https://tc39.es/ecma262/#sec-set.prototype.has + has: function has(key) { + return !!getEntry(this, key); + } + }); + defineBuiltIns(Prototype, IS_MAP ? { + // `Map.prototype.get(key)` method + // https://tc39.es/ecma262/#sec-map.prototype.get + get: function get(key) { + var entry = getEntry(this, key); + return entry && entry.value; + }, + // `Map.prototype.set(key, value)` method + // https://tc39.es/ecma262/#sec-map.prototype.set + set: function set(key, value) { + return define(this, key === 0 ? 0 : key, value); + } + } : { + // `Set.prototype.add(value)` method + // https://tc39.es/ecma262/#sec-set.prototype.add + add: function add(value) { + return define(this, value = value === 0 ? 0 : value, value); + } + }); + if (DESCRIPTORS) + defineBuiltInAccessor(Prototype, "size", { + configurable: true, + get: function() { + return getInternalState(this).size; + } + }); + return Constructor; + }, + setStrong: function(Constructor, CONSTRUCTOR_NAME, IS_MAP) { + var ITERATOR_NAME = CONSTRUCTOR_NAME + " Iterator"; + var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME); + var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME); + defineIterator(Constructor, CONSTRUCTOR_NAME, function(iterated, kind) { + setInternalState(this, { + type: ITERATOR_NAME, + target: iterated, + state: getInternalCollectionState(iterated), + kind: kind, + last: void 0 + }); + }, function() { + var state = getInternalIteratorState(this); + var kind = state.kind; + var entry = state.last; + while (entry && entry.removed) + entry = entry.previous; + if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) { + state.target = void 0; + return createIterResultObject(void 0, true); + } + if (kind === "keys") + return createIterResultObject(entry.key, false); + if (kind === "values") + return createIterResultObject(entry.value, false); + return createIterResultObject([entry.key, entry.value], false); + }, IS_MAP ? "entries" : "values", !IS_MAP, true); + setSpecies(CONSTRUCTOR_NAME); + } + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.set.constructor.js +var require_es_set_constructor = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.set.constructor.js": function() { + "use strict"; + var collection = require_collection(); + var collectionStrong = require_collection_strong(); + collection("Set", function(init) { + return function Set2() { + return init(this, arguments.length ? arguments[0] : void 0); + }; + }, collectionStrong); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.set.js +var require_es_set = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.set.js": function() { + "use strict"; + require_es_set_constructor(); + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-multibyte.js +var require_string_multibyte = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/internals/string-multibyte.js": function(exports2, module2) { + "use strict"; + var uncurryThis = require_function_uncurry_this(); + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var toString = require_to_string(); + var requireObjectCoercible = require_require_object_coercible(); + var charAt = uncurryThis("".charAt); + var charCodeAt = uncurryThis("".charCodeAt); + var stringSlice = uncurryThis("".slice); + var createMethod = function(CONVERT_TO_STRING) { + return function($this, pos) { + var S = toString(requireObjectCoercible($this)); + var position = toIntegerOrInfinity(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) + return CONVERT_TO_STRING ? "" : void 0; + first = charCodeAt(S, position); + return first < 55296 || first > 56319 || position + 1 === size || (second = charCodeAt(S, position + 1)) < 56320 || second > 57343 ? CONVERT_TO_STRING ? charAt(S, position) : first : CONVERT_TO_STRING ? stringSlice(S, position, position + 2) : (first - 55296 << 10) + (second - 56320) + 65536; + }; + }; + module2.exports = { + // `String.prototype.codePointAt` method + // https://tc39.es/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod(true) + }; + } +}); + +// node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.iterator.js +var require_es_string_iterator = __commonJS({ + "node_modules/.pnpm/core-js@3.36.0/node_modules/core-js/modules/es.string.iterator.js": function() { + "use strict"; + var charAt = require_string_multibyte().charAt; + var toString = require_to_string(); + var InternalStateModule = require_internal_state(); + var defineIterator = require_iterator_define(); + var createIterResultObject = require_create_iter_result_object(); + var STRING_ITERATOR = "String Iterator"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); + defineIterator(String, "String", function(iterated) { + setInternalState(this, { + type: STRING_ITERATOR, + string: toString(iterated), + index: 0 + }); + }, function next() { + var state = getInternalState(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) + return createIterResultObject(void 0, true); + point = charAt(string, index); + state.index += point.length; + return createIterResultObject(point, false); + }); + } +}); + +// dist/i18n/i18n.js +require_es_symbol(); +require_es_symbol_description(); +require_es_symbol_iterator(); +require_es_error_cause(); +require_es_error_to_string(); +require_es_array_from(); +require_es_array_slice(); +require_es_regexp_exec(); +require_es_regexp_test(); +require_es_regexp_to_string(); +require_es_array_concat(); +require_es_array_iterator(); +require_es_array_map(); +require_es_object_define_property(); +require_es_object_get_own_property_descriptor(); +require_es_object_get_own_property_names(); +require_es_object_to_string(); +require_es_set(); +require_es_string_iterator(); +function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); +} +function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) + return Array.from(iter); +} +function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) + return _arrayLikeToArray(arr); +} +function _createForOfIteratorHelper(o, allowArrayLike) { + var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; + if (!it) { + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) + o = it; + var i = 0; + var F = function F2() { + }; + return { s: F, n: function n() { + if (i >= o.length) + return { done: true }; + return { done: false, value: o[i++] }; + }, e: function e(_e) { + throw _e; + }, f: F }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + var normalCompletion = true, didErr = false, err; + return { s: function s() { + it = it.call(o); + }, n: function n() { + var step = it.next(); + normalCompletion = step.done; + return step; + }, e: function e(_e2) { + didErr = true; + err = _e2; + }, f: function f() { + try { + if (!normalCompletion && it["return"] != null) + it["return"](); + } finally { + if (didErr) + throw err; + } + } }; +} +function _unsupportedIterableToArray(o, minLen) { + if (!o) + return; + if (typeof o === "string") + return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) + n = o.constructor.name; + if (n === "Map" || n === "Set") + return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) + return _arrayLikeToArray(o, minLen); +} +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) + len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) + arr2[i] = arr[i]; + return arr2; +} +function _typeof(o) { + "@babel/helpers - typeof"; + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof(o); +} +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames2 = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = function __export2(target, all) { + for (var name in all) + __defProp(target, name, { + get: all[name], + enumerable: true + }); +}; +var __copyProps = function __copyProps2(to, from, except, desc) { + if (from && _typeof(from) === "object" || typeof from === "function") { + var _iterator = _createForOfIteratorHelper(__getOwnPropNames2(from)), _step; + try { + var _loop = function _loop2() { + var key = _step.value; + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { + get: function get() { + return from[key]; + }, + enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable + }); + }; + for (_iterator.s(); !(_step = _iterator.n()).done; ) { + _loop(); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } + return to; +}; +var __toCommonJS = function __toCommonJS2(mod) { + return __copyProps(__defProp({}, "__esModule", { + value: true + }), mod); +}; +//! src/i18n/i18n.ts +var i18n_exports = {}; +__export(i18n_exports, { + content: function content() { + return _content; + }, + localize: function localize() { + return _localize; + }, + vary: function vary() { + return _vary; + } +}); +module.exports = __toCommonJS(i18n_exports); +//! src/i18n/options.json +var defaultLanguageCode = "en"; +var fallbackTable = { + zh: ["zh", "zh-hans", "zh-hant", "zh-cn", "zh-tw", "zh-hk", "zh-sg", "zh-mo", "zh-my"], + "zh-hans": ["zh-hans", "zh-cn", "zh-sg", "zh-my", "zh", "zh-hant", "zh-tw", "zh-hk", "zh-mo"], + "zh-hant": ["zh-hant", "zh-tw", "zh-hk", "zh-mo", "zh", "zh-hans", "zh-cn", "zh-sg", "zh-my"], + "zh-cn": ["zh-cn", "zh-hans", "zh-sg", "zh-my", "zh", "zh-hant", "zh-tw", "zh-hk", "zh-mo"], + "zh-sg": ["zh-sg", "zh-hans", "zh-cn", "zh-my", "zh", "zh-hant", "zh-tw", "zh-hk", "zh-mo"], + "zh-my": ["zh-my", "zh-hans", "zh-cn", "zh-sg", "zh", "zh-hant", "zh-tw", "zh-hk", "zh-mo"], + "zh-tw": ["zh-tw", "zh-hant", "zh-hk", "zh-mo", "zh", "zh-hans", "zh-cn", "zh-sg", "zh-my"], + "zh-hk": ["zh-hk", "zh-hant", "zh-mo", "zh-tw", "zh", "zh-hans", "zh-cn", "zh-sg", "zh-my"], + "zh-mo": ["zh-mo", "zh-hant", "zh-hk", "zh-tw", "zh", "zh-hans", "zh-cn", "zh-sg", "zh-my"] +}; +//! src/i18n/modules/constant.ts +var WG_CONTENT_LANGUAGE = mw.config.get("wgContentLanguage"); +var WG_USER_LANGUAGE = mw.config.get("wgUserLanguage"); +var WG_USER_VARIANT = mw.config.get("wgUserVariant"); +//! src/i18n/modules/util/generateLanguageCodeSplitArray.ts +var generateLanguageCodeSplitArray = function generateLanguageCodeSplitArray2(originLanguageCode) { + var languageCodeSplitArray = originLanguageCode.split("-").map(function(value) { + return value.toLowerCase(); + }); + return languageCodeSplitArray; +}; +//! src/i18n/modules/util/generateDefaultFallbackList.ts +var import_ext_gadget = require("ext.gadget.Util"); +var generateDefaultFallbackList = function generateDefaultFallbackList2() { + var documentLanguageSplitArray = generateLanguageCodeSplitArray(document.documentElement.lang); + var navigatorLanguageSplitArray = generateLanguageCodeSplitArray(navigator.language); + var languageCode = defaultLanguageCode; + for (var _i = 0, _arr = [documentLanguageSplitArray, navigatorLanguageSplitArray]; _i < _arr.length; _i++) { + var languageCodeSplitArray = _arr[_i]; + switch (languageCodeSplitArray.length) { + case 2: + languageCode = "".concat(languageCodeSplitArray[0], "-").concat(languageCodeSplitArray[1]); + break; + case 3: + languageCode = "".concat(languageCodeSplitArray[0], "-").concat(languageCodeSplitArray[2]); + break; + default: + languageCode = languageCodeSplitArray[0]; + break; + } + if ((0, import_ext_gadget.isValidKey)(fallbackTable, languageCode)) { + break; + } + } + return _toConsumableArray(/* @__PURE__ */ new Set([languageCode, defaultLanguageCode])); +}; +//! src/i18n/modules/initI18nMethods.ts +var import_ext_gadget2 = require("ext.gadget.Util"); +var initI18nMethods = function initI18nMethods2() { + var defaultFallbackList = generateDefaultFallbackList(); + var elect = function elect2(candidates, locale) { + var fallbackList = defaultFallbackList; + for (var _i2 = 0, _arr2 = [locale].concat(_toConsumableArray(fallbackList)); _i2 < _arr2.length; _i2++) { + var key = _arr2[_i2]; + if ((0, import_ext_gadget2.isValidKey)(fallbackTable, key)) { + fallbackList = fallbackTable[key]; + break; + } + } + var _iterator2 = _createForOfIteratorHelper(/* @__PURE__ */ new Set([locale].concat(_toConsumableArray(fallbackList), _toConsumableArray(defaultFallbackList)))), _step2; + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) { + var _key = _step2.value; + if ((0, import_ext_gadget2.isValidKey)(candidates, _key)) { + return candidates[_key]; + } + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + return ""; + }; + var i18nMethods2 = { + content: function content2(candidates) { + return elect(candidates, WG_CONTENT_LANGUAGE); + }, + localize: function localize2(candidates) { + return elect(candidates, WG_USER_LANGUAGE); + }, + vary: function vary2(candidates) { + return elect(candidates, WG_USER_VARIANT !== null && WG_USER_VARIANT !== void 0 ? WG_USER_VARIANT : WG_CONTENT_LANGUAGE); + } + }; + return i18nMethods2; +}; +//! src/i18n/modules/initShims.ts +var initShims = function initShims2(i18nMethods2) { + var wgUXS = function wgUXS2(hans, hant, cn, tw, hk, sg, zh, mo, my, en, method) { + var _ref, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _zh, _ref9, _ref10, _ref11, _hans, _ref12, _ref13, _ref14, _hant, _cn, _sg, _tw, _hk, _mo, _my, _en; + zh = String((_ref = (_ref2 = (_ref3 = (_ref4 = (_ref5 = (_ref6 = (_ref7 = (_ref8 = (_zh = zh) !== null && _zh !== void 0 ? _zh : hans) !== null && _ref8 !== void 0 ? _ref8 : hant) !== null && _ref7 !== void 0 ? _ref7 : cn) !== null && _ref6 !== void 0 ? _ref6 : tw) !== null && _ref5 !== void 0 ? _ref5 : hk) !== null && _ref4 !== void 0 ? _ref4 : sg) !== null && _ref3 !== void 0 ? _ref3 : mo) !== null && _ref2 !== void 0 ? _ref2 : my) !== null && _ref !== void 0 ? _ref : en); + hans = String((_ref9 = (_ref10 = (_ref11 = (_hans = hans) !== null && _hans !== void 0 ? _hans : cn) !== null && _ref11 !== void 0 ? _ref11 : sg) !== null && _ref10 !== void 0 ? _ref10 : my) !== null && _ref9 !== void 0 ? _ref9 : zh); + hant = String((_ref12 = (_ref13 = (_ref14 = (_hant = hant) !== null && _hant !== void 0 ? _hant : tw) !== null && _ref14 !== void 0 ? _ref14 : hk) !== null && _ref13 !== void 0 ? _ref13 : mo) !== null && _ref12 !== void 0 ? _ref12 : zh); + cn = String((_cn = cn) !== null && _cn !== void 0 ? _cn : hans); + sg = String((_sg = sg) !== null && _sg !== void 0 ? _sg : hans); + tw = String((_tw = tw) !== null && _tw !== void 0 ? _tw : hant); + hk = String((_hk = hk) !== null && _hk !== void 0 ? _hk : hant); + mo = String((_mo = mo) !== null && _mo !== void 0 ? _mo : hant); + my = String((_my = my) !== null && _my !== void 0 ? _my : hant); + en = String((_en = en) !== null && _en !== void 0 ? _en : zh); + return i18nMethods2[method]({ + en: en, + zh: zh, + "zh-hans": hans, + "zh-hant": hant, + "zh-cn": cn, + "zh-tw": tw, + "zh-hk": hk, + "zh-sg": sg, + "zh-mo": mo, + "zh-my": my + }); + }; + window.wgUCS = function(hans, hant, cn, tw, hk, sg, zh, mo, my, en) { + return wgUXS(hans, hant, cn, tw, hk, sg, zh, mo, my, en, "content"); + }; + window.wgULS = function(hans, hant, cn, tw, hk, sg, zh, mo, my, en) { + return wgUXS(hans, hant, cn, tw, hk, sg, zh, mo, my, en, "localize"); + }; + window.wgUVS = function(hans, hant, cn, tw, hk, sg, zh, mo, my, en) { + return wgUXS(hans, hant, cn, tw, hk, sg, zh, mo, my, en, "vary"); + }; +}; +//! src/i18n/i18n.ts +var i18nMethods = initI18nMethods(); +initShims(i18nMethods); +var _content = i18nMethods.content; +var _localize = i18nMethods.localize; +var _vary = i18nMethods.vary; +/*! +// 仓库内用法 + // 定义多条消息 + // 支持多语言,可选值定义在modules/types.d.ts#L-1,可直接添加其他值(RFC 5646) + import {content, localize, vary} from 'ext.gadget.i18n'; + const getI18nMessages = () => { + // i18n的三个方法会匹配当前语言和它所接收对象中的键,对于localize来说,假设已定义zh、en和ja,则 + // 当页面语言(wgUserLanguage ?? wgContentLanguage)为中文/英语/日语时,返回页面语言所对应的值 + // 当页面语言为法语,浏览器语言为中文/英语/日语时,返回浏览器语言所对应的值 + // 当页面语言为法语,且不存在浏览器语言所对应的键,返回L-25定义的键所对应的值。若此键同样没被定义,则返回空字符串 + return { + Cancel: content({ + en: 'Cancel', + ja: 'キャンセル', + zh: '取消', + }), + QiuWen: localize({ + en: 'QiuWen', + ja: 'ちゅううん', + 'zh-cn': '求闻', + 'zh-hk': '求聞', + }), + LongText: vary({ + en: 'This is a very long text', + ja: 'これは非常に長いテキストです', + 'zh-hans': '这是一段非常长的文本', + 'zh-hant': '這是一段非常長的文字', + }), + }; + }; + const i18nMessages = getI18nMessages(); + const getMessage: GetMessages = (key) => { + return i18nMessages[key] || key; + }; + // 调用 + getMessage('Cancel'); // en: Cancel, ja: キャンセル, zh: 取消, zh-hans: 取消, zh-hant: 取消, zh-cn: 取消, zh-hk: 取消, zh-tw: 取消 + getMessage('QiuWen'); // en: QiuWen, ja: ちゅううん, zh: 求闻, zh-hans: 求闻, zh-hant: 求聞, zh-cn: 求闻, zh-hk: 求聞, zh-tw: 求聞 + getMessage('LongText'); + // en: This is a very long text + // ja: これは非常に長いテキストです + // zh: 这是一段非常长的文本 + // zh-hans: 这是一段非常长的文本 + // zh-hant: 這是一段非常長的文字 + // zh-cn: 这是一段非常长的文本 + // zh-hk: 這是一段非常長的文字 + // zh-tw: 這是一段非常長的文字 + + // 直接转换单条消息(不推荐,仅为兼容性保留) + // 仅支持传递中文和英语。在非中文环境且未传递英语文本时,最终返回zh的值 + wgUCS('求闻', '求聞'); // en: 求闻, ja: 求闻, zh: 求闻, zh-hans: 求闻, zh-hant: 求聞, zh-cn: 求闻, zh-hk: 求聞, zh-tw: 求聞 + wgULS('求闻', '求聞'); // en: 求闻, ja: 求闻, zh: 求闻, zh-hans: 求闻, zh-hant: 求聞, zh-cn: 求闻, zh-hk: 求聞, zh-tw: 求聞 + wgUVS('求闻', '求聞'); // en: 求闻, ja: 求闻, zh: 求闻, zh-hans: 求闻, zh-hant: 求聞, zh-cn: 求闻, zh-hk: 求聞, zh-tw: 求聞 + + // 非MediaWiki命名空间的脚本可以通过mw.loader.using加载ext.gadget.i18n模块 + mw.loader.using('ext.gadget.i18n').then((require) => { + const {content, localize, vary} = require('ext.gadget.i18n'); + }); + */ + +})(); + +/* */ + +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZm9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcG9zc2libGUtcHJvdG90eXBlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb3h5LWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93cmFwLWVycm9yLWNvbnN0cnVjdG9yLXdpdGgtY2F1c2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IudG8tc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1mcm9tLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZyb20uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1mbGFncy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1kb3QtYWxsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLW5jZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50ZXN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWdldC1mbGFncy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAudG8tc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5tYXAuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mcmVlemluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc3BlY2llcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5jb25zdHJ1Y3Rvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM2LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zNi4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzYuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyIsICJzcmMvaTE4bi9pMThuLnRzIiwgInNyYy9pMThuL29wdGlvbnMuanNvbiIsICJzcmMvaTE4bi9tb2R1bGVzL2NvbnN0YW50LnRzIiwgInNyYy9pMThuL21vZHVsZXMvdXRpbC9nZW5lcmF0ZUxhbmd1YWdlQ29kZVNwbGl0QXJyYXkudHMiLCAic3JjL2kxOG4vbW9kdWxlcy91dGlsL2dlbmVyYXRlRGVmYXVsdEZhbGxiYWNrTGlzdC50cyIsICJzcmMvaTE4bi9tb2R1bGVzL2luaXRJMThuTWV0aG9kcy50cyIsICJzcmMvaTE4bi9tb2R1bGVzL2luaXRTaGltcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3RcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSkgOiBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgbmF2aWdhdG9yICE9ICd1bmRlZmluZWQnICYmIFN0cmluZyhuYXZpZ2F0b3IudXNlckFnZW50KSB8fCAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWwuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFRoaXNbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxuKHN0b3JlLnZlcnNpb25zIHx8IChzdG9yZS52ZXJzaW9ucyA9IFtdKSkucHVzaCh7XG4gIHZlcnNpb246ICczLjM2LjAnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjM2LjAvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGxlbiA9IHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuICByZXR1cm4gbGVuID4gMCA/IG1pbihsZW4sIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFtUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFtUQVJHRVRdICYmIGdsb2JhbFtUQVJHRVRdLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLmRvbnRDYWxsR2V0U2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gdHlwZW9mIHRhcmdldFByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KTtcbiAgICB9XG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoc291cmNlUHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuICAgIGRlZmluZUJ1aWx0SW4odGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gJE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoY2xhc3NvZihhcmd1bWVudCkgPT09ICdTeW1ib2wnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZycpO1xuICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyAmJiAhVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIHByb3BzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgLS0gb2xkIElFLCBXU0ggKi9cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIGFjdGl2ZVhEb2N1bWVudCA9IG51bGw7IC8vIGF2b2lkIG1lbW9yeSBsZWFrXG4gIHJldHVybiB0ZW1wO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUlGcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHZhciBKUyA9ICdqYXZhJyArIFNDUklQVCArICc6JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaHRtbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDc1XG4gIGlmcmFtZS5zcmMgPSBTdHJpbmcoSlMpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnZG9jdW1lbnQuRj1PYmplY3QnKSk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIHJldHVybiBpZnJhbWVEb2N1bWVudC5GO1xufTtcblxuLy8gQ2hlY2sgZm9yIGRvY3VtZW50LmRvbWFpbiBhbmQgYWN0aXZlIHggc3VwcG9ydFxuLy8gTm8gbmVlZCB0byB1c2UgYWN0aXZlIHggYXBwcm9hY2ggd2hlbiBkb2N1bWVudC5kb21haW4gaXMgbm90IHNldFxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9pc3N1ZXMvMTUwXG4vLyB2YXJpYXRpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL2tpdGNhbWJyaWRnZS9lczUtc2hpbS9jb21taXQvNGY3MzhhYzA2NjM0NlxuLy8gYXZvaWQgSUUgR0MgYnVnXG52YXIgYWN0aXZlWERvY3VtZW50O1xudmFyIE51bGxQcm90b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBhY3RpdmVYRG9jdW1lbnQgPSBuZXcgQWN0aXZlWE9iamVjdCgnaHRtbGZpbGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogaWdub3JlICovIH1cbiAgTnVsbFByb3RvT2JqZWN0ID0gdHlwZW9mIGRvY3VtZW50ICE9ICd1bmRlZmluZWQnXG4gICAgPyBkb2N1bWVudC5kb21haW4gJiYgYWN0aXZlWERvY3VtZW50XG4gICAgICA/IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KSAvLyBvbGQgSUVcbiAgICAgIDogTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lKClcbiAgICA6IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KTsgLy8gV1NIXG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkgZGVsZXRlIE51bGxQcm90b09iamVjdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gTnVsbFByb3RvT2JqZWN0KCk7XG59O1xuXG5oaWRkZW5LZXlzW0lFX1BST1RPXSA9IHRydWU7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1jcmVhdGUgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5Q29uc3RydWN0b3IoKTtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IE51bGxQcm90b09iamVjdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZGVmaW5lUHJvcGVydGllc01vZHVsZS5mKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyhbXS5zbGljZSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZSAqL1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gYXJyYXlTbGljZSh3aW5kb3dOYW1lcyk7XG4gIH1cbn07XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiBjbGFzc29mKGl0KSA9PT0gJ1dpbmRvdydcbiAgICA/IGdldFdpbmRvd05hbWVzKGl0KVxuICAgIDogJGdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgaWYgKGRlc2NyaXB0b3IuZ2V0KSBtYWtlQnVpbHRJbihkZXNjcmlwdG9yLmdldCwgbmFtZSwgeyBnZXR0ZXI6IHRydWUgfSk7XG4gIGlmIChkZXNjcmlwdG9yLnNldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5zZXQsIG5hbWUsIHsgc2V0dGVyOiB0cnVlIH0pO1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbmV4cG9ydHMuZiA9IHdlbGxLbm93blN5bWJvbDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICB2YXIgU3ltYm9sID0gcGF0aC5TeW1ib2wgfHwgKHBhdGguU3ltYm9sID0ge30pO1xuICBpZiAoIWhhc093bihTeW1ib2wsIE5BTUUpKSBkZWZpbmVQcm9wZXJ0eShTeW1ib2wsIE5BTUUsIHtcbiAgICB2YWx1ZTogd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKE5BTUUpXG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICB2YXIgU3ltYm9sUHJvdG90eXBlID0gU3ltYm9sICYmIFN5bWJvbC5wcm90b3R5cGU7XG4gIHZhciB2YWx1ZU9mID0gU3ltYm9sUHJvdG90eXBlICYmIFN5bWJvbFByb3RvdHlwZS52YWx1ZU9mO1xuICB2YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4gIGlmIChTeW1ib2xQcm90b3R5cGUgJiYgIVN5bWJvbFByb3RvdHlwZVtUT19QUklNSVRJVkVdKSB7XG4gICAgLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciAubGVuZ3RoXG4gICAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsIFRPX1BSSU1JVElWRSwgZnVuY3Rpb24gKGhpbnQpIHtcbiAgICAgIHJldHVybiBjYWxsKHZhbHVlT2YsIHRoaXMpO1xuICAgIH0sIHsgYXJpdHk6IDEgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIFRBRywgU1RBVElDKSB7XG4gIGlmICh0YXJnZXQgJiYgIVNUQVRJQykgdGFyZ2V0ID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgaWYgKHRhcmdldCAmJiAhaGFzT3duKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuKSB7XG4gIC8vIE5hc2hvcm4gYnVnOlxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTI4XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMzBcbiAgaWYgKGNsYXNzb2ZSYXcoZm4pID09PSAnRnVuY3Rpb24nKSByZXR1cm4gdW5jdXJyeVRoaXMoZm4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGJpbmQgPSB1bmN1cnJ5VGhpcyh1bmN1cnJ5VGhpcy5iaW5kKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICByZXR1cm4gdGhhdCA9PT0gdW5kZWZpbmVkID8gZm4gOiBOQVRJVkVfQklORCA/IGJpbmQoZm4sIHRoYXQpIDogZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgY29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBjb25zdHJ1Y3RvclJlZ0V4cCA9IC9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi87XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGNvbnN0cnVjdG9yUmVnRXhwLmV4ZWMpO1xudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSAhY29uc3RydWN0b3JSZWdFeHAudGVzdChub29wKTtcblxudmFyIGlzQ29uc3RydWN0b3JNb2Rlcm4gPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdHJ1Y3Qobm9vcCwgW10sIGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBpc0NvbnN0cnVjdG9yTGVnYWN5ID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHN3aXRjaCAoY2xhc3NvZihhcmd1bWVudCkpIHtcbiAgICBjYXNlICdBc3luY0Z1bmN0aW9uJzpcbiAgICBjYXNlICdHZW5lcmF0b3JGdW5jdGlvbic6XG4gICAgY2FzZSAnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbic6IHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIC8vIHdlIGNhbid0IGNoZWNrIC5wcm90b3R5cGUgc2luY2UgY29uc3RydWN0b3JzIHByb2R1Y2VkIGJ5IC5iaW5kIGhhdmVuJ3QgaXRcbiAgICAvLyBgRnVuY3Rpb24jdG9TdHJpbmdgIHRocm93cyBvbiBzb21lIGJ1aWx0LWl0IGZ1bmN0aW9uIGluIHNvbWUgbGVnYWN5IGVuZ2luZXNcbiAgICAvLyAoZm9yIGV4YW1wbGUsIGBET01RdWFkYCBhbmQgc2ltaWxhciBpbiBGRjQxLSlcbiAgICByZXR1cm4gSU5DT1JSRUNUX1RPX1NUUklORyB8fCAhIWV4ZWMoY29uc3RydWN0b3JSZWdFeHAsIGluc3BlY3RTb3VyY2UoYXJndW1lbnQpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuaXNDb25zdHJ1Y3RvckxlZ2FjeS5zaGFtID0gdHJ1ZTtcblxuLy8gYElzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9ICFjb25zdHJ1Y3QgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgY2FsbGVkO1xuICByZXR1cm4gaXNDb25zdHJ1Y3Rvck1vZGVybihpc0NvbnN0cnVjdG9yTW9kZXJuLmNhbGwpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oT2JqZWN0KVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKGZ1bmN0aW9uICgpIHsgY2FsbGVkID0gdHJ1ZTsgfSlcbiAgICB8fCBjYWxsZWQ7XG59KSA/IGlzQ29uc3RydWN0b3JMZWdhY3kgOiBpc0NvbnN0cnVjdG9yTW9kZXJuO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyICRBcnJheSA9IEFycmF5O1xuXG4vLyBhIHBhcnQgb2YgYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWxBcnJheSkpIHtcbiAgICBDID0gb3JpZ2luYWxBcnJheS5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmIChpc0NvbnN0cnVjdG9yKEMpICYmIChDID09PSAkQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gJEFycmF5IDogQztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFycmF5U3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxuLy8gYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKGFycmF5U3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsQXJyYXkpKShsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCwgZmlsdGVyUmVqZWN0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09PSA2O1xuICB2YXIgSVNfRklMVEVSX1JFSkVDVCA9IFRZUEUgPT09IDc7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKHNlbGYpO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiB8fCBJU19GSUxURVJfUkVKRUNUID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAvLyBldmVyeVxuICAgICAgICAgIGNhc2UgNzogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJSZWplY3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlclJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuICBmaWx0ZXJSZWplY3Q6IGNyZWF0ZU1ldGhvZCg3KVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgbmF0aXZlT2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcblxudmFyIEhJRERFTiA9IHNoYXJlZEtleSgnaGlkZGVuJyk7XG52YXIgU1lNQk9MID0gJ1N5bWJvbCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNZTUJPTCk7XG5cbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sICYmICRTeW1ib2xbUFJPVE9UWVBFXTtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZjtcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvdHlwZVN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBVU0VfU0VUVEVSID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIHZhciBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgUCk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKSBkZWxldGUgT2JqZWN0UHJvdG90eXBlW1BdO1xuICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgJiYgTyAhPT0gT2JqZWN0UHJvdG90eXBlKSB7XG4gICAgbmF0aXZlRGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlLCBQLCBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKTtcbiAgfVxufTtcblxudmFyIHNldFN5bWJvbERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RDcmVhdGUobmF0aXZlRGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT09IDc7XG59KSA/IGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgOiBuYXRpdmVEZWZpbmVQcm9wZXJ0eTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnLCBkZXNjcmlwdGlvbikge1xuICB2YXIgc3ltYm9sID0gQWxsU3ltYm9sc1t0YWddID0gbmF0aXZlT2JqZWN0Q3JlYXRlKFN5bWJvbFByb3RvdHlwZSk7XG4gIHNldEludGVybmFsU3RhdGUoc3ltYm9sLCB7XG4gICAgdHlwZTogU1lNQk9MLFxuICAgIHRhZzogdGFnLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICB9KTtcbiAgaWYgKCFERVNDUklQVE9SUykgc3ltYm9sLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gIHJldHVybiBzeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBpZiAoTyA9PT0gT2JqZWN0UHJvdG90eXBlKSAkZGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCwgQXR0cmlidXRlcyk7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghQXR0cmlidXRlcy5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhc093bihPLCBISURERU4pKSBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBISURERU4sIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCBuYXRpdmVPYmplY3RDcmVhdGUobnVsbCkpKTtcbiAgICAgIE9bSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc093bihPLCBISURERU4pICYmIE9bSElEREVOXVtrZXldKSBPW0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgQXR0cmlidXRlcyA9IG5hdGl2ZU9iamVjdENyZWF0ZShBdHRyaWJ1dGVzLCB7IGVudW1lcmFibGU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzY3JpcHRvcihPLCBrZXksIEF0dHJpYnV0ZXMpO1xuICB9IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBrZXksIEF0dHJpYnV0ZXMpO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcGVydGllcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKHByb3BlcnRpZXMpLmNvbmNhdCgkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHByb3BlcnRpZXMpKTtcbiAgJGZvckVhY2goa2V5cywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbCgkcHJvcGVydHlJc0VudW1lcmFibGUsIHByb3BlcnRpZXMsIGtleSkpICRkZWZpbmVQcm9wZXJ0eShPLCBrZXksIHByb3BlcnRpZXNba2V5XSk7XG4gIH0pO1xuICByZXR1cm4gTztcbn07XG5cbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IG5hdGl2ZU9iamVjdENyZWF0ZShPKSA6ICRkZWZpbmVQcm9wZXJ0aWVzKG5hdGl2ZU9iamVjdENyZWF0ZShPKSwgUHJvcGVydGllcyk7XG59O1xuXG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgUCA9IHRvUHJvcGVydHlLZXkoVik7XG4gIHZhciBlbnVtZXJhYmxlID0gY2FsbChuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSwgdGhpcywgUCk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIFApICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGVudW1lcmFibGUgfHwgIWhhc093bih0aGlzLCBQKSB8fCAhaGFzT3duKEFsbFN5bWJvbHMsIFApIHx8IGhhc093bih0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtQXVxuICAgID8gZW51bWVyYWJsZSA6IHRydWU7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIHZhciBpdCA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgZGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXNPd24oaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkge1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKGhpZGRlbktleXMsIGtleSkpIHB1c2gocmVzdWx0LCBrZXkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gKE8pIHtcbiAgdmFyIElTX09CSkVDVF9QUk9UT1RZUEUgPSBPID09PSBPYmplY3RQcm90b3R5cGU7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMoSVNfT0JKRUNUX1BST1RPVFlQRSA/IE9iamVjdFByb3RvdHlwZVN5bWJvbHMgOiB0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICghSVNfT0JKRUNUX1BST1RPVFlQRSB8fCBoYXNPd24oT2JqZWN0UHJvdG90eXBlLCBrZXkpKSkge1xuICAgICAgcHVzaChyZXN1bHQsIEFsbFN5bWJvbHNba2V5XSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIGBTeW1ib2xgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC1jb25zdHJ1Y3RvclxuaWYgKCFOQVRJVkVfU1lNQk9MKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKGlzUHJvdG90eXBlT2YoU3ltYm9sUHJvdG90eXBlLCB0aGlzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gIWFyZ3VtZW50cy5sZW5ndGggfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiAkdG9TdHJpbmcoYXJndW1lbnRzWzBdKTtcbiAgICB2YXIgdGFnID0gdWlkKGRlc2NyaXB0aW9uKTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB2YXIgJHRoaXMgPSB0aGlzID09PSB1bmRlZmluZWQgPyBnbG9iYWwgOiB0aGlzO1xuICAgICAgaWYgKCR0aGlzID09PSBPYmplY3RQcm90b3R5cGUpIGNhbGwoc2V0dGVyLCBPYmplY3RQcm90b3R5cGVTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzT3duKCR0aGlzLCBISURERU4pICYmIGhhc093bigkdGhpc1tISURERU5dLCB0YWcpKSAkdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFN5bWJvbERlc2NyaXB0b3IoJHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFJhbmdlRXJyb3IpKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSgkdGhpcywgdGFnLCBkZXNjcmlwdG9yKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBVU0VfU0VUVEVSKSBzZXRTeW1ib2xEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiBzZXR0ZXIgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnLCBkZXNjcmlwdGlvbik7XG4gIH07XG5cbiAgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbFtQUk9UT1RZUEVdO1xuXG4gIGRlZmluZUJ1aWx0SW4oU3ltYm9sUHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS50YWc7XG4gIH0pO1xuXG4gIGRlZmluZUJ1aWx0SW4oJFN5bWJvbCwgJ3dpdGhvdXRTZXR0ZXInLCBmdW5jdGlvbiAoZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4gd3JhcCh1aWQoZGVzY3JpcHRpb24pLCBkZXNjcmlwdGlvbik7XG4gIH0pO1xuXG4gIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIGRlZmluZVByb3BlcnR5TW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZiA9ICRkZWZpbmVQcm9wZXJ0aWVzO1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdlbGxLbm93blN5bWJvbChuYW1lKSwgbmFtZSk7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtU3ltYm9sLWRlc2NyaXB0aW9uXG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFN5bWJvbFByb3RvdHlwZSwgJ2Rlc2NyaXB0aW9uJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBkZXNjcmlwdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuZGVzY3JpcHRpb247XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFJU19QVVJFKSB7XG4gICAgICBkZWZpbmVCdWlsdEluKE9iamVjdFByb3RvdHlwZSwgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wsIHNoYW06ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgU3ltYm9sOiAkU3ltYm9sXG59KTtcblxuJGZvckVhY2gob2JqZWN0S2V5cyhXZWxsS25vd25TeW1ib2xzU3RvcmUpLCBmdW5jdGlvbiAobmFtZSkge1xuICBkZWZpbmVXZWxsS25vd25TeW1ib2wobmFtZSk7XG59KTtcblxuJCh7IHRhcmdldDogU1lNQk9MLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IGZhbHNlOyB9XG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIC8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Jcbn0pO1xuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXNcbn0pO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUoKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgU1lNQk9MKTtcblxuaGlkZGVuS2V5c1tISURERU5dID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSBzYWZlICovXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0wgJiYgISFTeW1ib2xbJ2ZvciddICYmICEhU3ltYm9sLmtleUZvcjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbicpO1xuXG52YXIgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3RyaW5nLXRvLXN5bWJvbC1yZWdpc3RyeScpO1xudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5mb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuZm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKGtleSk7XG4gICAgaWYgKGhhc093bihTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5LCBzdHJpbmcpKSByZXR1cm4gU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddO1xuICAgIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKShzdHJpbmcpO1xuICAgIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXSA9IHN5bWJvbDtcbiAgICBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bWJvbF0gPSBzdHJpbmc7XG4gICAgcmV0dXJuIHN5bWJvbDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbicpO1xuXG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xuXG4vLyBgU3ltYm9sLmtleUZvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5rZXlmb3JcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIH0sIHtcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBuZXcgVHlwZUVycm9yKHRyeVRvU3RyaW5nKHN5bSkgKyAnIGlzIG5vdCBhIHN5bWJvbCcpO1xuICAgIGlmIChoYXNPd24oU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSwgc3ltKSkgcmV0dXJuIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltXTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBhcHBseSA9IEZ1bmN0aW9uUHJvdG90eXBlLmFwcGx5O1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tcmVmbGVjdCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBSZWZsZWN0ID09ICdvYmplY3QnICYmIFJlZmxlY3QuYXBwbHkgfHwgKE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGFwcGx5KSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoYXBwbHksIGFyZ3VtZW50cyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlcGxhY2VyKSB7XG4gIGlmIChpc0NhbGxhYmxlKHJlcGxhY2VyKSkgcmV0dXJuIHJlcGxhY2VyO1xuICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXR1cm47XG4gIHZhciByYXdMZW5ndGggPSByZXBsYWNlci5sZW5ndGg7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3TGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlbWVudCA9IHJlcGxhY2VyW2ldO1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnc3RyaW5nJykgcHVzaChrZXlzLCBlbGVtZW50KTtcbiAgICBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnbnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnTnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnU3RyaW5nJykgcHVzaChrZXlzLCB0b1N0cmluZyhlbGVtZW50KSk7XG4gIH1cbiAgdmFyIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIHJvb3QgPSB0cnVlO1xuICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBpZiAocm9vdCkge1xuICAgICAgcm9vdCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgcmV0dXJuIHZhbHVlO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5c0xlbmd0aDsgaisrKSBpZiAoa2V5c1tqXSA9PT0ga2V5KSByZXR1cm4gdmFsdWU7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgZ2V0UmVwbGFjZXJGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbicpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkc3RyaW5naWZ5ID0gZ2V0QnVpbHRJbignSlNPTicsICdzdHJpbmdpZnknKTtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoLy4vLmV4ZWMpO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBudW1iZXJUb1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbnZhciB0ZXN0ZXIgPSAvW1xcdUQ4MDAtXFx1REZGRl0vZztcbnZhciBsb3cgPSAvXltcXHVEODAwLVxcdURCRkZdJC87XG52YXIgaGkgPSAvXltcXHVEQzAwLVxcdURGRkZdJC87XG5cbnZhciBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKSgnc3RyaW5naWZ5IGRldGVjdGlvbicpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICByZXR1cm4gJHN0cmluZ2lmeShbc3ltYm9sXSkgIT09ICdbbnVsbF0nXG4gICAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gICAgfHwgJHN0cmluZ2lmeSh7IGE6IHN5bWJvbCB9KSAhPT0gJ3t9J1xuICAgIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gICAgfHwgJHN0cmluZ2lmeShPYmplY3Qoc3ltYm9sKSkgIT09ICd7fSc7XG59KTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtd2VsbC1mb3JtZWQtc3RyaW5naWZ5XG52YXIgSUxMX0ZPUk1FRF9VTklDT0RFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHN0cmluZ2lmeSgnXFx1REYwNlxcdUQ4MzQnKSAhPT0gJ1wiXFxcXHVkZjA2XFxcXHVkODM0XCInXG4gICAgfHwgJHN0cmluZ2lmeSgnXFx1REVBRCcpICE9PSAnXCJcXFxcdWRlYWRcIic7XG59KTtcblxudmFyIHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4ID0gZnVuY3Rpb24gKGl0LCByZXBsYWNlcikge1xuICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgdmFyICRyZXBsYWNlciA9IGdldFJlcGxhY2VyRnVuY3Rpb24ocmVwbGFjZXIpO1xuICBpZiAoIWlzQ2FsbGFibGUoJHJlcGxhY2VyKSAmJiAoaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgYXJnc1sxXSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgLy8gc29tZSBvbGQgaW1wbGVtZW50YXRpb25zIChsaWtlIFdlYktpdCkgY291bGQgcGFzcyBudW1iZXJzIGFzIGtleXNcbiAgICBpZiAoaXNDYWxsYWJsZSgkcmVwbGFjZXIpKSB2YWx1ZSA9IGNhbGwoJHJlcGxhY2VyLCB0aGlzLCAkU3RyaW5nKGtleSksIHZhbHVlKTtcbiAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICB9O1xuICByZXR1cm4gYXBwbHkoJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG59O1xuXG52YXIgZml4SWxsRm9ybWVkID0gZnVuY3Rpb24gKG1hdGNoLCBvZmZzZXQsIHN0cmluZykge1xuICB2YXIgcHJldiA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCAtIDEpO1xuICB2YXIgbmV4dCA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCArIDEpO1xuICBpZiAoKGV4ZWMobG93LCBtYXRjaCkgJiYgIWV4ZWMoaGksIG5leHQpKSB8fCAoZXhlYyhoaSwgbWF0Y2gpICYmICFleGVjKGxvdywgcHJldikpKSB7XG4gICAgcmV0dXJuICdcXFxcdScgKyBudW1iZXJUb1N0cmluZyhjaGFyQ29kZUF0KG1hdGNoLCAwKSwgMTYpO1xuICB9IHJldHVybiBtYXRjaDtcbn07XG5cbmlmICgkc3RyaW5naWZ5KSB7XG4gIC8vIGBKU09OLnN0cmluZ2lmeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi5zdHJpbmdpZnlcbiAgJCh7IHRhcmdldDogJ0pTT04nLCBzdGF0OiB0cnVlLCBhcml0eTogMywgZm9yY2VkOiBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gfHwgSUxMX0ZPUk1FRF9VTklDT0RFIH0sIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICAgICAgdmFyIHJlc3VsdCA9IGFwcGx5KFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA/IHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4IDogJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG4gICAgICByZXR1cm4gSUxMX0ZPUk1FRF9VTklDT0RFICYmIHR5cGVvZiByZXN1bHQgPT0gJ3N0cmluZycgPyByZXBsYWNlKHJlc3VsdCwgdGVzdGVyLCBmaXhJbGxGb3JtZWQpIDogcmVzdWx0O1xuICAgIH1cbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG4vLyBWOCB+IENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbnZhciBGT1JDRUQgPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlzeW1ib2xzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyAkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRvT2JqZWN0KGl0KSkgOiBbXTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBzcGxpdCB0byBtb2R1bGVzIGxpc3RlZCBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zeW1ib2wuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3ltYm9sLmZvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zeW1ib2wua2V5LWZvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG4iLCAiLy8gYFN5bWJvbC5wcm90b3R5cGUuZGVzY3JpcHRpb25gIGdldHRlclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLmRlc2NyaXB0aW9uXG4ndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcblxudmFyIE5hdGl2ZVN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgU3ltYm9sUHJvdG90eXBlID0gTmF0aXZlU3ltYm9sICYmIE5hdGl2ZVN5bWJvbC5wcm90b3R5cGU7XG5cbmlmIChERVNDUklQVE9SUyAmJiBpc0NhbGxhYmxlKE5hdGl2ZVN5bWJvbCkgJiYgKCEoJ2Rlc2NyaXB0aW9uJyBpbiBTeW1ib2xQcm90b3R5cGUpIHx8XG4gIC8vIFNhZmFyaSAxMiBidWdcbiAgTmF0aXZlU3ltYm9sKCkuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZFxuKSkge1xuICB2YXIgRW1wdHlTdHJpbmdEZXNjcmlwdGlvblN0b3JlID0ge307XG4gIC8vIHdyYXAgU3ltYm9sIGNvbnN0cnVjdG9yIGZvciBjb3JyZWN0IHdvcmsgd2l0aCB1bmRlZmluZWQgZGVzY3JpcHRpb25cbiAgdmFyIFN5bWJvbFdyYXBwZXIgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0b1N0cmluZyhhcmd1bWVudHNbMF0pO1xuICAgIHZhciByZXN1bHQgPSBpc1Byb3RvdHlwZU9mKFN5bWJvbFByb3RvdHlwZSwgdGhpcylcbiAgICAgID8gbmV3IE5hdGl2ZVN5bWJvbChkZXNjcmlwdGlvbilcbiAgICAgIC8vIGluIEVkZ2UgMTMsIFN0cmluZyhTeW1ib2wodW5kZWZpbmVkKSkgPT09ICdTeW1ib2wodW5kZWZpbmVkKSdcbiAgICAgIDogZGVzY3JpcHRpb24gPT09IHVuZGVmaW5lZCA/IE5hdGl2ZVN5bWJvbCgpIDogTmF0aXZlU3ltYm9sKGRlc2NyaXB0aW9uKTtcbiAgICBpZiAoZGVzY3JpcHRpb24gPT09ICcnKSBFbXB0eVN0cmluZ0Rlc2NyaXB0aW9uU3RvcmVbcmVzdWx0XSA9IHRydWU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKFN5bWJvbFdyYXBwZXIsIE5hdGl2ZVN5bWJvbCk7XG4gIFN5bWJvbFdyYXBwZXIucHJvdG90eXBlID0gU3ltYm9sUHJvdG90eXBlO1xuICBTeW1ib2xQcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeW1ib2xXcmFwcGVyO1xuXG4gIHZhciBOQVRJVkVfU1lNQk9MID0gU3RyaW5nKE5hdGl2ZVN5bWJvbCgnZGVzY3JpcHRpb24gZGV0ZWN0aW9uJykpID09PSAnU3ltYm9sKGRlc2NyaXB0aW9uIGRldGVjdGlvbiknO1xuICB2YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sUHJvdG90eXBlLnZhbHVlT2YpO1xuICB2YXIgc3ltYm9sRGVzY3JpcHRpdmVTdHJpbmcgPSB1bmN1cnJ5VGhpcyhTeW1ib2xQcm90b3R5cGUudG9TdHJpbmcpO1xuICB2YXIgcmVnZXhwID0gL15TeW1ib2xcXCgoLiopXFwpW14pXSskLztcbiAgdmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbiAgdmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBkZXNjcmlwdGlvbigpIHtcbiAgICAgIHZhciBzeW1ib2wgPSB0aGlzU3ltYm9sVmFsdWUodGhpcyk7XG4gICAgICBpZiAoaGFzT3duKEVtcHR5U3RyaW5nRGVzY3JpcHRpb25TdG9yZSwgc3ltYm9sKSkgcmV0dXJuICcnO1xuICAgICAgdmFyIHN0cmluZyA9IHN5bWJvbERlc2NyaXB0aXZlU3RyaW5nKHN5bWJvbCk7XG4gICAgICB2YXIgZGVzYyA9IE5BVElWRV9TWU1CT0wgPyBzdHJpbmdTbGljZShzdHJpbmcsIDcsIC0xKSA6IHJlcGxhY2Uoc3RyaW5nLCByZWdleHAsICckMScpO1xuICAgICAgcmV0dXJuIGRlc2MgPT09ICcnID8gdW5kZWZpbmVkIDogZGVzYztcbiAgICB9XG4gIH0pO1xuXG4gICQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgIFN5bWJvbDogU3ltYm9sV3JhcHBlclxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLml0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIG1ldGhvZCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICByZXR1cm4gdW5jdXJyeVRoaXMoYUNhbGxhYmxlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpW21ldGhvZF0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc09iamVjdChhcmd1bWVudCkgfHwgYXJndW1lbnQgPT09IG51bGw7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Bvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNQb3NzaWJsZVByb3RvdHlwZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyAkU3RyaW5nKGFyZ3VtZW50KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gLS0gc2FmZSAqL1xudmFyIHVuY3VycnlUaGlzQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIHNldHRlciA9IHVuY3VycnlUaGlzQWNjZXNzb3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycsICdzZXQnKTtcbiAgICBzZXR0ZXIodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUYXJnZXQsIFNvdXJjZSwga2V5KSB7XG4gIGtleSBpbiBUYXJnZXQgfHwgZGVmaW5lUHJvcGVydHkoVGFyZ2V0LCBrZXksIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTb3VyY2Vba2V5XTsgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBTb3VyY2Vba2V5XSA9IGl0OyB9XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIG1ha2VzIHN1YmNsYXNzaW5nIHdvcmsgY29ycmVjdCBmb3Igd3JhcHBlZCBidWlsdC1pbnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCR0aGlzLCBkdW1teSwgV3JhcHBlcikge1xuICB2YXIgTmV3VGFyZ2V0LCBOZXdUYXJnZXRQcm90b3R5cGU7XG4gIGlmIChcbiAgICAvLyBpdCBjYW4gd29yayBvbmx5IHdpdGggbmF0aXZlIGBzZXRQcm90b3R5cGVPZmBcbiAgICBzZXRQcm90b3R5cGVPZiAmJlxuICAgIC8vIHdlIGhhdmVuJ3QgY29tcGxldGVseSBjb3JyZWN0IHByZS1FUzYgd2F5IGZvciBnZXR0aW5nIGBuZXcudGFyZ2V0YCwgc28gdXNlIHRoaXNcbiAgICBpc0NhbGxhYmxlKE5ld1RhcmdldCA9IGR1bW15LmNvbnN0cnVjdG9yKSAmJlxuICAgIE5ld1RhcmdldCAhPT0gV3JhcHBlciAmJlxuICAgIGlzT2JqZWN0KE5ld1RhcmdldFByb3RvdHlwZSA9IE5ld1RhcmdldC5wcm90b3R5cGUpICYmXG4gICAgTmV3VGFyZ2V0UHJvdG90eXBlICE9PSBXcmFwcGVyLnByb3RvdHlwZVxuICApIHNldFByb3RvdHlwZU9mKCR0aGlzLCBOZXdUYXJnZXRQcm90b3R5cGUpO1xuICByZXR1cm4gJHRoaXM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsICRkZWZhdWx0KSB7XG4gIHJldHVybiBhcmd1bWVudCA9PT0gdW5kZWZpbmVkID8gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyAnJyA6ICRkZWZhdWx0IDogdG9TdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRXJyb3IgPSBFcnJvcjtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG5cbnZhciBURVNUID0gKGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIFN0cmluZyhuZXcgJEVycm9yKGFyZykuc3RhY2spOyB9KSgnenhjYXNkJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZID0gL1xcblxccyphdCBbXjpdKjpbXlxcbl0qLztcbnZhciBJU19WOF9PUl9DSEFLUkFfU1RBQ0sgPSBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkudGVzdChURVNUKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChJU19WOF9PUl9DSEFLUkFfU1RBQ0sgJiYgdHlwZW9mIHN0YWNrID09ICdzdHJpbmcnICYmICEkRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpIHtcbiAgICB3aGlsZSAoZHJvcEVudHJpZXMtLSkgc3RhY2sgPSByZXBsYWNlKHN0YWNrLCBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlksICcnKTtcbiAgfSByZXR1cm4gc3RhY2s7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcignYScpO1xuICBpZiAoISgnc3RhY2snIGluIGVycm9yKSkgcmV0dXJuIHRydWU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCA3KSk7XG4gIHJldHVybiBlcnJvci5zdGFjayAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY2xlYXJFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyJyk7XG52YXIgRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUnKTtcblxuLy8gbm9uLXN0YW5kYXJkIFY4XG52YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXJyb3IsIEMsIHN0YWNrLCBkcm9wRW50cmllcykge1xuICBpZiAoRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUpIHtcbiAgICBpZiAoY2FwdHVyZVN0YWNrVHJhY2UpIGNhcHR1cmVTdGFja1RyYWNlKGVycm9yLCBDKTtcbiAgICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY2xlYXJFcnJvclN0YWNrKHN0YWNrLCBkcm9wRW50cmllcykpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBwcm94eUFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb3h5LWFjY2Vzc29yJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQnKTtcbnZhciBpbnN0YWxsRXJyb3JDYXVzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlJyk7XG52YXIgaW5zdGFsbEVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEZVTExfTkFNRSwgd3JhcHBlciwgRk9SQ0VELCBJU19BR0dSRUdBVEVfRVJST1IpIHtcbiAgdmFyIFNUQUNLX1RSQUNFX0xJTUlUID0gJ3N0YWNrVHJhY2VMaW1pdCc7XG4gIHZhciBPUFRJT05TX1BPU0lUSU9OID0gSVNfQUdHUkVHQVRFX0VSUk9SID8gMiA6IDE7XG4gIHZhciBwYXRoID0gRlVMTF9OQU1FLnNwbGl0KCcuJyk7XG4gIHZhciBFUlJPUl9OQU1FID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICB2YXIgT3JpZ2luYWxFcnJvciA9IGdldEJ1aWx0SW4uYXBwbHkobnVsbCwgcGF0aCk7XG5cbiAgaWYgKCFPcmlnaW5hbEVycm9yKSByZXR1cm47XG5cbiAgdmFyIE9yaWdpbmFsRXJyb3JQcm90b3R5cGUgPSBPcmlnaW5hbEVycm9yLnByb3RvdHlwZTtcblxuICAvLyBWOCA5LjMtIGJ1ZyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjAwNlxuICBpZiAoIUlTX1BVUkUgJiYgaGFzT3duKE9yaWdpbmFsRXJyb3JQcm90b3R5cGUsICdjYXVzZScpKSBkZWxldGUgT3JpZ2luYWxFcnJvclByb3RvdHlwZS5jYXVzZTtcblxuICBpZiAoIUZPUkNFRCkgcmV0dXJuIE9yaWdpbmFsRXJyb3I7XG5cbiAgdmFyIEJhc2VFcnJvciA9IGdldEJ1aWx0SW4oJ0Vycm9yJyk7XG5cbiAgdmFyIFdyYXBwZWRFcnJvciA9IHdyYXBwZXIoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgbWVzc2FnZSA9IG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KElTX0FHR1JFR0FURV9FUlJPUiA/IGIgOiBhLCB1bmRlZmluZWQpO1xuICAgIHZhciByZXN1bHQgPSBJU19BR0dSRUdBVEVfRVJST1IgPyBuZXcgT3JpZ2luYWxFcnJvcihhKSA6IG5ldyBPcmlnaW5hbEVycm9yKCk7XG4gICAgaWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHJlc3VsdCwgJ21lc3NhZ2UnLCBtZXNzYWdlKTtcbiAgICBpbnN0YWxsRXJyb3JTdGFjayhyZXN1bHQsIFdyYXBwZWRFcnJvciwgcmVzdWx0LnN0YWNrLCAyKTtcbiAgICBpZiAodGhpcyAmJiBpc1Byb3RvdHlwZU9mKE9yaWdpbmFsRXJyb3JQcm90b3R5cGUsIHRoaXMpKSBpbmhlcml0SWZSZXF1aXJlZChyZXN1bHQsIHRoaXMsIFdyYXBwZWRFcnJvcik7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiBPUFRJT05TX1BPU0lUSU9OKSBpbnN0YWxsRXJyb3JDYXVzZShyZXN1bHQsIGFyZ3VtZW50c1tPUFRJT05TX1BPU0lUSU9OXSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgV3JhcHBlZEVycm9yLnByb3RvdHlwZSA9IE9yaWdpbmFsRXJyb3JQcm90b3R5cGU7XG5cbiAgaWYgKEVSUk9SX05BTUUgIT09ICdFcnJvcicpIHtcbiAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHNldFByb3RvdHlwZU9mKFdyYXBwZWRFcnJvciwgQmFzZUVycm9yKTtcbiAgICBlbHNlIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoV3JhcHBlZEVycm9yLCBCYXNlRXJyb3IsIHsgbmFtZTogdHJ1ZSB9KTtcbiAgfSBlbHNlIGlmIChERVNDUklQVE9SUyAmJiBTVEFDS19UUkFDRV9MSU1JVCBpbiBPcmlnaW5hbEVycm9yKSB7XG4gICAgcHJveHlBY2Nlc3NvcihXcmFwcGVkRXJyb3IsIE9yaWdpbmFsRXJyb3IsIFNUQUNLX1RSQUNFX0xJTUlUKTtcbiAgICBwcm94eUFjY2Vzc29yKFdyYXBwZWRFcnJvciwgT3JpZ2luYWxFcnJvciwgJ3ByZXBhcmVTdGFja1RyYWNlJyk7XG4gIH1cblxuICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKFdyYXBwZWRFcnJvciwgT3JpZ2luYWxFcnJvcik7XG5cbiAgaWYgKCFJU19QVVJFKSB0cnkge1xuICAgIC8vIFNhZmFyaSAxMy0gYnVnOiBXZWJBc3NlbWJseSBlcnJvcnMgZG9lcyBub3QgaGF2ZSBhIHByb3BlciBgLm5hbWVgXG4gICAgaWYgKE9yaWdpbmFsRXJyb3JQcm90b3R5cGUubmFtZSAhPT0gRVJST1JfTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KE9yaWdpbmFsRXJyb3JQcm90b3R5cGUsICduYW1lJywgRVJST1JfTkFNRSk7XG4gICAgfVxuICAgIE9yaWdpbmFsRXJyb3JQcm90b3R5cGUuY29uc3RydWN0b3IgPSBXcmFwcGVkRXJyb3I7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxuICByZXR1cm4gV3JhcHBlZEVycm9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgZnVuY3Rpb25zIGAubGVuZ3RoYCAqL1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgd3JhcEVycm9yQ29uc3RydWN0b3JXaXRoQ2F1c2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd3JhcC1lcnJvci1jb25zdHJ1Y3Rvci13aXRoLWNhdXNlJyk7XG5cbnZhciBXRUJfQVNTRU1CTFkgPSAnV2ViQXNzZW1ibHknO1xudmFyIFdlYkFzc2VtYmx5ID0gZ2xvYmFsW1dFQl9BU1NFTUJMWV07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1lcnJvci1jYXVzZSAtLSBmZWF0dXJlIGRldGVjdGlvblxudmFyIEZPUkNFRCA9IG5ldyBFcnJvcignZScsIHsgY2F1c2U6IDcgfSkuY2F1c2UgIT09IDc7XG5cbnZhciBleHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlciA9IGZ1bmN0aW9uIChFUlJPUl9OQU1FLCB3cmFwcGVyKSB7XG4gIHZhciBPID0ge307XG4gIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIE8pO1xufTtcblxudmFyIGV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIgPSBmdW5jdGlvbiAoRVJST1JfTkFNRSwgd3JhcHBlcikge1xuICBpZiAoV2ViQXNzZW1ibHkgJiYgV2ViQXNzZW1ibHlbRVJST1JfTkFNRV0pIHtcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShXRUJfQVNTRU1CTFkgKyAnLicgKyBFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAgICQoeyB0YXJnZXQ6IFdFQl9BU1NFTUJMWSwgc3RhdDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCBPKTtcbiAgfVxufTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uYXRpdmVlcnJvclxuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ0Vycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdFdmFsRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRXZhbEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdSYW5nZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJhbmdlRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ1JlZmVyZW5jZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJlZmVyZW5jZUVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdTeW50YXhFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTeW50YXhFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVHlwZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFR5cGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVVJJRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVVJJRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0V2ViQXNzZW1ibHlFcnJvckNhdXNlV3JhcHBlcignQ29tcGlsZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIENvbXBpbGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRXZWJBc3NlbWJseUVycm9yQ2F1c2VXcmFwcGVyKCdMaW5rRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gTGlua0Vycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIoJ1J1bnRpbWVFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBSdW50aW1lRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudCcpO1xuXG52YXIgbmF0aXZlRXJyb3JUb1N0cmluZyA9IEVycm9yLnByb3RvdHlwZS50b1N0cmluZztcblxudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIENocm9tZSAzMi0gaW5jb3JyZWN0bHkgY2FsbCBhY2Nlc3NvclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlLCBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIHZhciBvYmplY3QgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ25hbWUnLCB7IGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMgPT09IG9iamVjdDtcbiAgICB9IH0pKTtcbiAgICBpZiAobmF0aXZlRXJyb3JUb1N0cmluZy5jYWxsKG9iamVjdCkgIT09ICd0cnVlJykgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gRkYxMC0gZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIG5vbi1zdHJpbmdzXG4gIHJldHVybiBuYXRpdmVFcnJvclRvU3RyaW5nLmNhbGwoeyBtZXNzYWdlOiAxLCBuYW1lOiAyIH0pICE9PSAnMjogMSdcbiAgICAvLyBJRTggZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIGRlZmF1bHRzXG4gICAgfHwgbmF0aXZlRXJyb3JUb1N0cmluZy5jYWxsKHt9KSAhPT0gJ0Vycm9yJztcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IElOQ09SUkVDVF9UT19TVFJJTkcgPyBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgdmFyIE8gPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIG5hbWUgPSBub3JtYWxpemVTdHJpbmdBcmd1bWVudChPLm5hbWUsICdFcnJvcicpO1xuICB2YXIgbWVzc2FnZSA9IG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KE8ubWVzc2FnZSk7XG4gIHJldHVybiAhbmFtZSA/IG1lc3NhZ2UgOiAhbWVzc2FnZSA/IG5hbWUgOiBuYW1lICsgJzogJyArIG1lc3NhZ2U7XG59IDogbmF0aXZlRXJyb3JUb1N0cmluZztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBlcnJvclRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXRvLXN0cmluZycpO1xuXG52YXIgRXJyb3JQcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG5cbi8vIGBFcnJvci5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBmaXhcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZXJyb3IucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoRXJyb3JQcm90b3R5cGUudG9TdHJpbmcgIT09IGVycm9yVG9TdHJpbmcpIHtcbiAgZGVmaW5lQnVpbHRJbihFcnJvclByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZXJyb3JUb1N0cmluZyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2tleV0gPSB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdCkpIHJldHVybiBnZXRNZXRob2QoaXQsIElURVJBVE9SKVxuICAgIHx8IGdldE1ldGhvZChpdCwgJ0BAaXRlcmF0b3InKVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgdXNpbmdJdGVyYXRvcikge1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGdldEl0ZXJhdG9yTWV0aG9kKGFyZ3VtZW50KSA6IHVzaW5nSXRlcmF0b3I7XG4gIGlmIChhQ2FsbGFibGUoaXRlcmF0b3JNZXRob2QpKSByZXR1cm4gYW5PYmplY3QoY2FsbChpdGVyYXRvck1ldGhvZCwgYXJndW1lbnQpKTtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICB2YXIgSVNfQ09OU1RSVUNUT1IgPSBpc0NvbnN0cnVjdG9yKHRoaXMpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcGZuID0gYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICBpZiAobWFwcGluZykgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoTyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3IsIG5leHQsIHZhbHVlO1xuICAvLyBpZiB0aGUgdGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSBvciBpdCdzIGFuIGFycmF5IHdpdGggdGhlIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2UgYSBzaW1wbGUgY2FzZVxuICBpZiAoaXRlcmF0b3JNZXRob2QgJiYgISh0aGlzID09PSAkQXJyYXkgJiYgaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkpIHtcbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKE8sIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKCkgOiBbXTtcbiAgICBmb3IgKDshKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcyhsZW5ndGgpIDogJEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIGNhbGxlZCA9IDA7XG4gIHZhciBpdGVyYXRvcldpdGhSZXR1cm4gPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogISFjYWxsZWQrKyB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIFNBRkVfQ0xPU0lORyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBpdGVyYXRvcldpdGhSZXR1cm5bSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlcnJvcikgeyByZXR1cm4gZmFsc2U7IH0gLy8gd29ya2Fyb3VuZCBvZiBvbGQgV2ViS2l0ICsgYGV2YWxgIGJ1Z1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhYmxlKTtcbn0pO1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgbmF0aXZlU2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdzbGljZScpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyICRBcnJheSA9IEFycmF5O1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNsaWNlXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBrID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW5ndGgpO1xuICAgIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gICAgLy8gaW5saW5lIGBBcnJheVNwZWNpZXNDcmVhdGVgIGZvciB1c2FnZSBuYXRpdmUgYEFycmF5I3NsaWNlYCB3aGVyZSBpdCdzIHBvc3NpYmxlXG4gICAgdmFyIENvbnN0cnVjdG9yLCByZXN1bHQsIG47XG4gICAgaWYgKGlzQXJyYXkoTykpIHtcbiAgICAgIENvbnN0cnVjdG9yID0gTy5jb25zdHJ1Y3RvcjtcbiAgICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgICBpZiAoaXNDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvcikgJiYgKENvbnN0cnVjdG9yID09PSAkQXJyYXkgfHwgaXNBcnJheShDb25zdHJ1Y3Rvci5wcm90b3R5cGUpKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JbU1BFQ0lFU107XG4gICAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gbnVsbCkgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoQ29uc3RydWN0b3IgPT09ICRBcnJheSB8fCBDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVTbGljZShPLCBrLCBmaW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQgPSBuZXcgKENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDb25zdHJ1Y3RvcikobWF4KGZpbiAtIGssIDApKTtcbiAgICBmb3IgKG4gPSAwOyBrIDwgZmluOyBrKyssIG4rKykgaWYgKGsgaW4gTykgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBuLCBPW2tdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Ncbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmhhc0luZGljZXMpIHJlc3VsdCArPSAnZCc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC5kb3RBbGwpIHJlc3VsdCArPSAncyc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnVuaWNvZGVTZXRzKSByZXN1bHQgKz0gJ3YnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCdhJywgJ3knKSAtPiAvYS95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJ2EnLCAneScpO1xuICByZS5sYXN0SW5kZXggPSAyO1xuICByZXR1cm4gcmUuZXhlYygnYWJjZCcpICE9PSBudWxsO1xufSk7XG5cbi8vIFVDIEJyb3dzZXIgYnVnXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTAwOFxudmFyIE1JU1NFRF9TVElDS1kgPSBVTlNVUFBPUlRFRF9ZIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICEkUmVnRXhwKCdhJywgJ3knKS5zdGlja3k7XG59KTtcblxudmFyIEJST0tFTl9DQVJFVCA9IFVOU1VQUE9SVEVEX1kgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03NzM2ODdcbiAgdmFyIHJlID0gJFJlZ0V4cCgnXnInLCAnZ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ3N0cicpICE9PSBudWxsO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBCUk9LRU5fQ0FSRVQ6IEJST0tFTl9DQVJFVCxcbiAgTUlTU0VEX1NUSUNLWTogTUlTU0VEX1NUSUNLWSxcbiAgVU5TVVBQT1JURURfWTogVU5TVVBQT1JURURfWVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnLicsICdzJykgLT4gLy4vcyBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAkUmVnRXhwKCcuJywgJ3MnKTtcbiAgcmV0dXJuICEocmUuZG90QWxsICYmIHJlLnRlc3QoJ1xcbicpICYmIHJlLmZsYWdzID09PSAncycpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJyg/PGE+YiknLCAnZycpIC0+IC8oPzxhPmIpL2cgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnKD88YT5iKScsICdnJyk7XG4gIHJldHVybiByZS5leGVjKCdiJykuZ3JvdXBzLmEgIT09ICdiJyB8fFxuICAgICdiJy5yZXBsYWNlKHJlLCAnJDxhPmMnKSAhPT0gJ2JjJztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby1lbXB0eS1jYXB0dXJpbmctZ3JvdXAsIHJlZ2V4cC9uby1lbXB0eS1ncm91cCwgcmVnZXhwL25vLWxhenktZW5kcyAtLSB0ZXN0aW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tdXNlbGVzcy1xdWFudGlmaWVyIC0tIHRlc3RpbmcgKi9cbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldEludGVybmFsU3RhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKS5nZXQ7XG52YXIgVU5TVVBQT1JURURfRE9UX0FMTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbCcpO1xudmFyIFVOU1VQUE9SVEVEX05DRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnJyk7XG5cbnZhciBuYXRpdmVSZXBsYWNlID0gc2hhcmVkKCduYXRpdmUtc3RyaW5nLXJlcGxhY2UnLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgaW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS87XG4gIHZhciByZTIgPSAvYiovZztcbiAgY2FsbChuYXRpdmVFeGVjLCByZTEsICdhJyk7XG4gIGNhbGwobmF0aXZlRXhlYywgcmUyLCAnYScpO1xuICByZXR1cm4gcmUxLmxhc3RJbmRleCAhPT0gMCB8fCByZTIubGFzdEluZGV4ICE9PSAwO1xufSkoKTtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBzdGlja3lIZWxwZXJzLkJST0tFTl9DQVJFVDtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQgfHwgVU5TVVBQT1JURURfWSB8fCBVTlNVUFBPUlRFRF9ET1RfQUxMIHx8IFVOU1VQUE9SVEVEX05DRztcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHJpbmcpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUocmUpO1xuICAgIHZhciBzdHIgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgIHZhciByYXcgPSBzdGF0ZS5yYXc7XG4gICAgdmFyIHJlc3VsdCwgcmVDb3B5LCBsYXN0SW5kZXgsIG1hdGNoLCBpLCBvYmplY3QsIGdyb3VwO1xuXG4gICAgaWYgKHJhdykge1xuICAgICAgcmF3Lmxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDtcbiAgICAgIHJlc3VsdCA9IGNhbGwocGF0Y2hlZEV4ZWMsIHJhdywgc3RyKTtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJhdy5sYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHZhciBncm91cHMgPSBzdGF0ZS5ncm91cHM7XG4gICAgdmFyIHN0aWNreSA9IFVOU1VQUE9SVEVEX1kgJiYgcmUuc3RpY2t5O1xuICAgIHZhciBmbGFncyA9IGNhbGwocmVnZXhwRmxhZ3MsIHJlKTtcbiAgICB2YXIgc291cmNlID0gcmUuc291cmNlO1xuICAgIHZhciBjaGFyc0FkZGVkID0gMDtcbiAgICB2YXIgc3RyQ29weSA9IHN0cjtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGZsYWdzID0gcmVwbGFjZShmbGFncywgJ3knLCAnJyk7XG4gICAgICBpZiAoaW5kZXhPZihmbGFncywgJ2cnKSA9PT0gLTEpIHtcbiAgICAgICAgZmxhZ3MgKz0gJ2cnO1xuICAgICAgfVxuXG4gICAgICBzdHJDb3B5ID0gc3RyaW5nU2xpY2Uoc3RyLCByZS5sYXN0SW5kZXgpO1xuICAgICAgLy8gU3VwcG9ydCBhbmNob3JlZCBzdGlja3kgYmVoYXZpb3IuXG4gICAgICBpZiAocmUubGFzdEluZGV4ID4gMCAmJiAoIXJlLm11bHRpbGluZSB8fCByZS5tdWx0aWxpbmUgJiYgY2hhckF0KHN0ciwgcmUubGFzdEluZGV4IC0gMSkgIT09ICdcXG4nKSkge1xuICAgICAgICBzb3VyY2UgPSAnKD86ICcgKyBzb3VyY2UgKyAnKSc7XG4gICAgICAgIHN0ckNvcHkgPSAnICcgKyBzdHJDb3B5O1xuICAgICAgICBjaGFyc0FkZGVkKys7XG4gICAgICB9XG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgc3RyIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeKD86JyArIHNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgIH1cblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHNvdXJjZSArICckKD8hXFxcXHMpJywgZmxhZ3MpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG5cbiAgICBtYXRjaCA9IGNhbGwobmF0aXZlRXhlYywgc3RpY2t5ID8gcmVDb3B5IDogcmUsIHN0ckNvcHkpO1xuXG4gICAgaWYgKHN0aWNreSkge1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIG1hdGNoLmlucHV0ID0gc3RyaW5nU2xpY2UobWF0Y2guaW5wdXQsIGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaFswXSA9IHN0cmluZ1NsaWNlKG1hdGNoWzBdLCBjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2guaW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICAgIHJlLmxhc3RJbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICB9IGVsc2UgcmUubGFzdEluZGV4ID0gMDtcbiAgICB9IGVsc2UgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmUubGFzdEluZGV4ID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24ndCB3b3JrIGZvciAvKC4/KT8vXG4gICAgICBjYWxsKG5hdGl2ZVJlcGxhY2UsIG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2ggJiYgZ3JvdXBzKSB7XG4gICAgICBtYXRjaC5ncm91cHMgPSBvYmplY3QgPSBjcmVhdGUobnVsbCk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2ldO1xuICAgICAgICBvYmplY3RbZ3JvdXBbMF1dID0gbWF0Y2hbZ3JvdXBbMV1dO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBleGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmV4ZWNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLmV4ZWNcbiQoeyB0YXJnZXQ6ICdSZWdFeHAnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAvLi8uZXhlYyAhPT0gZXhlYyB9LCB7XG4gIGV4ZWM6IGV4ZWNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgbW92ZWQgdG8gZW50cnkgcG9pbnRzXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjJyk7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBERUxFR0FURVNfVE9fRVhFQyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgdmFyIHJlID0gL1thY10vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIGV4ZWNDYWxsZWQgPSB0cnVlO1xuICAgIHJldHVybiAvLi8uZXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xuICByZXR1cm4gcmUudGVzdCgnYWJjJykgPT09IHRydWUgJiYgZXhlY0NhbGxlZDtcbn0oKTtcblxudmFyIG5hdGl2ZVRlc3QgPSAvLi8udGVzdDtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUudGVzdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudGVzdFxuJCh7IHRhcmdldDogJ1JlZ0V4cCcsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFERUxFR0FURVNfVE9fRVhFQyB9LCB7XG4gIHRlc3Q6IGZ1bmN0aW9uIChTKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcoUyk7XG4gICAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gICAgaWYgKCFpc0NhbGxhYmxlKGV4ZWMpKSByZXR1cm4gY2FsbChuYXRpdmVUZXN0LCBSLCBzdHJpbmcpO1xuICAgIHZhciByZXN1bHQgPSBjYWxsKGV4ZWMsIFIsIHN0cmluZyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIGFuT2JqZWN0KHJlc3VsdCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIHJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xuXG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUikge1xuICB2YXIgZmxhZ3MgPSBSLmZsYWdzO1xuICByZXR1cm4gZmxhZ3MgPT09IHVuZGVmaW5lZCAmJiAhKCdmbGFncycgaW4gUmVnRXhwUHJvdG90eXBlKSAmJiAhaGFzT3duKFIsICdmbGFncycpICYmIGlzUHJvdG90eXBlT2YoUmVnRXhwUHJvdG90eXBlLCBSKVxuICAgID8gY2FsbChyZWdFeHBGbGFncywgUikgOiBmbGFncztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5QUk9QRVI7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRSZWdFeHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZ2V0LWZsYWdzJyk7XG5cbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG52YXIgbmF0aXZlVG9TdHJpbmcgPSBSZWdFeHBQcm90b3R5cGVbVE9fU1RSSU5HXTtcblxudmFyIE5PVF9HRU5FUklDID0gZmFpbHMoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlVG9TdHJpbmcuY2FsbCh7IHNvdXJjZTogJ2EnLCBmbGFnczogJ2InIH0pICE9PSAnL2EvYic7IH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbnZhciBJTkNPUlJFQ1RfTkFNRSA9IFBST1BFUl9GVU5DVElPTl9OQU1FICYmIG5hdGl2ZVRvU3RyaW5nLm5hbWUgIT09IFRPX1NUUklORztcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoTk9UX0dFTkVSSUMgfHwgSU5DT1JSRUNUX05BTUUpIHtcbiAgZGVmaW5lQnVpbHRJbihSZWdFeHBQcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgcGF0dGVybiA9ICR0b1N0cmluZyhSLnNvdXJjZSk7XG4gICAgdmFyIGZsYWdzID0gJHRvU3RyaW5nKGdldFJlZ0V4cEZsYWdzKFIpKTtcbiAgICByZXR1cm4gJy8nICsgcGF0dGVybiArICcvJyArIGZsYWdzO1xuICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyAkVHlwZUVycm9yKCdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gd2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4vLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgPSBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnJheSA9IFtdO1xuICBhcnJheVtJU19DT05DQVRfU1BSRUFEQUJMRV0gPSBmYWxzZTtcbiAgcmV0dXJuIGFycmF5LmNvbmNhdCgpWzBdICE9PSBhcnJheTtcbn0pO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnY29uY2F0Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuY29uY2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmNvbmNhdFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQGlzQ29uY2F0U3ByZWFkYWJsZSBhbmQgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQoYXJnKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKEUpO1xuICAgICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobiArIGxlbik7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBsZW47IGsrKywgbisrKSBpZiAoayBpbiBFKSBjcmVhdGVQcm9wZXJ0eShBLCBuLCBFW2tdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgMSk7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KEEsIG4rKywgRSk7XG4gICAgICB9XG4gICAgfVxuICAgIEEubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbnZhciBVTlNDT1BBQkxFUyA9IHdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5pZiAoQXJyYXlQcm90b3R5cGVbVU5TQ09QQUJMRVNdID09PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHkoQXJyYXlQcm90b3R5cGUsIFVOU0NPUEFCTEVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiBjcmVhdGUobnVsbClcbiAgfSk7XG59XG5cbi8vIGFkZCBhIGtleSB0byBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvdHlwZVtVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBPYmplY3RQcm90b3R5cGUgPSAkT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/ICRPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXNPd24ob2JqZWN0LCBJRV9QUk9UTykpIHJldHVybiBvYmplY3RbSUVfUFJPVE9dO1xuICB2YXIgY29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIGlmIChpc0NhbGxhYmxlKGNvbnN0cnVjdG9yKSAmJiBvYmplY3QgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mICRPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUta2V5cyAtLSBzYWZlICovXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbnZhciBORVdfSVRFUkFUT1JfUFJPVE9UWVBFID0gIWlzT2JqZWN0KEl0ZXJhdG9yUHJvdG90eXBlKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXN0ID0ge307XG4gIC8vIEZGNDQtIGxlZ2FjeSBpdGVyYXRvcnMgY2FzZVxuICByZXR1cm4gSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdLmNhbGwodGVzdCkgIT09IHRlc3Q7XG59KTtcblxuaWYgKE5FV19JVEVSQVRPUl9QUk9UT1RZUEUpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5lbHNlIGlmIChJU19QVVJFKSBJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLUBAaXRlcmF0b3JcbmlmICghaXNDYWxsYWJsZShJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gIGRlZmluZUJ1aWx0SW4oSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCwgRU5VTUVSQUJMRV9ORVhUKSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoKyFFTlVNRVJBQkxFX05FWFQsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBGdW5jdGlvbk5hbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5QUk9QRVI7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuQ09ORklHVVJBQkxFO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgJiYgS0lORCBpbiBJdGVyYWJsZVByb3RvdHlwZSkgcmV0dXJuIEl0ZXJhYmxlUHJvdG90eXBlW0tJTkRdO1xuXG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzKTsgfTtcbiAgfTtcblxuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IGZhbHNlO1xuICB2YXIgSXRlcmFibGVQcm90b3R5cGUgPSBJdGVyYWJsZS5wcm90b3R5cGU7XG4gIHZhciBuYXRpdmVJdGVyYXRvciA9IEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXVxuICAgIHx8IEl0ZXJhYmxlUHJvdG90eXBlWydAQGl0ZXJhdG9yJ11cbiAgICB8fCBERUZBVUxUICYmIEl0ZXJhYmxlUHJvdG90eXBlW0RFRkFVTFRdO1xuICB2YXIgZGVmYXVsdEl0ZXJhdG9yID0gIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgbmF0aXZlSXRlcmF0b3IgfHwgZ2V0SXRlcmF0aW9uTWV0aG9kKERFRkFVTFQpO1xuICB2YXIgYW55TmF0aXZlSXRlcmF0b3IgPSBOQU1FID09PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0NhbGxhYmxlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gICAgICAgICAgZGVmaW5lQnVpbHRJbihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheS5wcm90b3R5cGUueyB2YWx1ZXMsIEBAaXRlcmF0b3IgfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIERFRkFVTFQgPT09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBpZiAoIUlTX1BVUkUgJiYgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYWJsZVByb3RvdHlwZSwgJ25hbWUnLCBWQUxVRVMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gY2FsbChuYXRpdmVJdGVyYXRvciwgdGhpcyk7IH07XG4gICAgfVxuICB9XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgSVRFUkFUT1IsIGRlZmF1bHRJdGVyYXRvciwgeyBuYW1lOiBERUZBVUxUIH0pO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYENyZWF0ZUl0ZXJSZXN1bHRPYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVpdGVycmVzdWx0b2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgZG9uZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6IGRvbmUgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmtleXNcbi8vIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWFycmF5aXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lSXRlcmF0b3IoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBBUlJBWV9JVEVSQVRPUixcbiAgICB0YXJnZXQ6IHRvSW5kZXhlZE9iamVjdChpdGVyYXRlZCksIC8vIHRhcmdldFxuICAgIGluZGV4OiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICAgIGtpbmQ6IGtpbmQgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICB9KTtcbi8vIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuICBzd2l0Y2ggKHN0YXRlLmtpbmQpIHtcbiAgICBjYXNlICdrZXlzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoaW5kZXgsIGZhbHNlKTtcbiAgICBjYXNlICd2YWx1ZXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh0YXJnZXRbaW5kZXhdLCBmYWxzZSk7XG4gIH0gcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZmFsc2UpO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyVcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRldW5tYXBwZWRhcmd1bWVudHNvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG52YXIgdmFsdWVzID0gSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDQ1LSBidWdcbmlmICghSVNfUFVSRSAmJiBERVNDUklQVE9SUyAmJiB2YWx1ZXMubmFtZSAhPT0gJ3ZhbHVlcycpIHRyeSB7XG4gIGRlZmluZVByb3BlcnR5KHZhbHVlcywgJ25hbWUnLCB7IHZhbHVlOiAndmFsdWVzJyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLm1hcDtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnbWFwJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnR5ICE9PSBkZWZpbmVQcm9wZXJ0eSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydHk6IGRlZmluZVByb3BlcnR5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRk9SQ0VEID0gIURFU0NSSVBUT1JTIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSW5kZXhlZE9iamVjdChpdCksIGtleSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpLmY7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiAhT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGdldE93blByb3BlcnR5TmFtZXM6IGdldE93blByb3BlcnR5TmFtZXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyB7fS50b1N0cmluZyA6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKCFUT19TVFJJTkdfVEFHX1NVUFBPUlQpIHtcbiAgZGVmaW5lQnVpbHRJbihPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCB0b1N0cmluZywgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gRkYyNi0gYnVnOiBBcnJheUJ1ZmZlcnMgYXJlIG5vbi1leHRlbnNpYmxlLCBidXQgT2JqZWN0LmlzRXh0ZW5zaWJsZSBkb2VzIG5vdCByZXBvcnQgaXRcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciA9PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig4KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBpZiAoT2JqZWN0LmlzRXh0ZW5zaWJsZShidWZmZXIpKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoYnVmZmVyLCAnYScsIHsgdmFsdWU6IDggfSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlIC0tIHNhZmVcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyAkaXNFeHRlbnNpYmxlKDEpOyB9KTtcblxuLy8gYE9iamVjdC5pc0V4dGVuc2libGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuaXNleHRlbnNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IChGQUlMU19PTl9QUklNSVRJVkVTIHx8IEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSkgPyBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBmYWxzZTtcbiAgaWYgKEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSAmJiBjbGFzc29mKGl0KSA9PT0gJ0FycmF5QnVmZmVyJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZTtcbn0gOiAkaXNFeHRlbnNpYmxlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlLCBlcy9uby1vYmplY3QtcHJldmVudGV4dGVuc2lvbnMgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgaXNFeHRlbnNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIEZSRUVaSU5HID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZyZWV6aW5nJyk7XG5cbnZhciBSRVFVSVJFRCA9IGZhbHNlO1xudmFyIE1FVEFEQVRBID0gdWlkKCdtZXRhJyk7XG52YXIgaWQgPSAwO1xuXG52YXIgc2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgZGVmaW5lUHJvcGVydHkoaXQsIE1FVEFEQVRBLCB7IHZhbHVlOiB7XG4gICAgb2JqZWN0SUQ6ICdPJyArIGlkKyssIC8vIG9iamVjdCBJRFxuICAgIHdlYWtEYXRhOiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcblxudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gYSBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS5vYmplY3RJRDtcbn07XG5cbnZhciBnZXRXZWFrRGF0YSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gdGhlIHN0b3JlIG9mIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS53ZWFrRGF0YTtcbn07XG5cbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWklORyAmJiBSRVFVSVJFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXNPd24oaXQsIE1FVEFEQVRBKSkgc2V0TWV0YWRhdGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuXG52YXIgZW5hYmxlID0gZnVuY3Rpb24gKCkge1xuICBtZXRhLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiAgUkVRVUlSRUQgPSB0cnVlO1xuICB2YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZjtcbiAgdmFyIHNwbGljZSA9IHVuY3VycnlUaGlzKFtdLnNwbGljZSk7XG4gIHZhciB0ZXN0ID0ge307XG4gIHRlc3RbTUVUQURBVEFdID0gMTtcblxuICAvLyBwcmV2ZW50IGV4cG9zaW5nIG9mIG1ldGFkYXRhIGtleVxuICBpZiAoZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0KS5sZW5ndGgpIHtcbiAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByZXN1bHQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJlc3VsdFtpXSA9PT0gTUVUQURBVEEpIHtcbiAgICAgICAgICBzcGxpY2UocmVzdWx0LCBpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAkKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIGdldE93blByb3BlcnR5TmFtZXM6IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZS5mXG4gICAgfSk7XG4gIH1cbn07XG5cbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVuYWJsZTogZW5hYmxlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrRGF0YTogZ2V0V2Vha0RhdGEsXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcblxuaGlkZGVuS2V5c1tNRVRBREFUQV0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFJlc3VsdCA9IGZ1bmN0aW9uIChzdG9wcGVkLCByZXN1bHQpIHtcbiAgdGhpcy5zdG9wcGVkID0gc3RvcHBlZDtcbiAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG59O1xuXG52YXIgUmVzdWx0UHJvdG90eXBlID0gUmVzdWx0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIHVuYm91bmRGdW5jdGlvbiwgb3B0aW9ucykge1xuICB2YXIgdGhhdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50aGF0O1xuICB2YXIgQVNfRU5UUklFUyA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5BU19FTlRSSUVTKTtcbiAgdmFyIElTX1JFQ09SRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19SRUNPUkQpO1xuICB2YXIgSVNfSVRFUkFUT1IgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfSVRFUkFUT1IpO1xuICB2YXIgSU5URVJSVVBURUQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSU5URVJSVVBURUQpO1xuICB2YXIgZm4gPSBiaW5kKHVuYm91bmRGdW5jdGlvbiwgdGhhdCk7XG4gIHZhciBpdGVyYXRvciwgaXRlckZuLCBpbmRleCwgbGVuZ3RoLCByZXN1bHQsIG5leHQsIHN0ZXA7XG5cbiAgdmFyIHN0b3AgPSBmdW5jdGlvbiAoY29uZGl0aW9uKSB7XG4gICAgaWYgKGl0ZXJhdG9yKSBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgY29uZGl0aW9uKTtcbiAgICByZXR1cm4gbmV3IFJlc3VsdCh0cnVlLCBjb25kaXRpb24pO1xuICB9O1xuXG4gIHZhciBjYWxsRm4gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAoQVNfRU5UUklFUykge1xuICAgICAgYW5PYmplY3QodmFsdWUpO1xuICAgICAgcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWVbMF0sIHZhbHVlWzFdLCBzdG9wKSA6IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgfSByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZSwgc3RvcCkgOiBmbih2YWx1ZSk7XG4gIH07XG5cbiAgaWYgKElTX1JFQ09SRCkge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGUuaXRlcmF0b3I7XG4gIH0gZWxzZSBpZiAoSVNfSVRFUkFUT1IpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJGbiA9IGdldEl0ZXJhdG9yTWV0aG9kKGl0ZXJhYmxlKTtcbiAgICBpZiAoIWl0ZXJGbikgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoaXRlcmFibGUpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAvLyBvcHRpbWlzYXRpb24gZm9yIGFycmF5IGl0ZXJhdG9yc1xuICAgIGlmIChpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlckZuKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZXJhYmxlKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbEZuKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbiAgICB9XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihpdGVyYWJsZSwgaXRlckZuKTtcbiAgfVxuXG4gIG5leHQgPSBJU19SRUNPUkQgPyBpdGVyYWJsZS5uZXh0IDogaXRlcmF0b3IubmV4dDtcbiAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGNhbGxGbihzdGVwLnZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUHJvdG90eXBlKSB7XG4gIGlmIChpc1Byb3RvdHlwZU9mKFByb3RvdHlwZSwgaXQpKSByZXR1cm4gaXQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCdJbmNvcnJlY3QgaW52b2NhdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FLCB3cmFwcGVyLCBjb21tb24pIHtcbiAgdmFyIElTX01BUCA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignTWFwJykgIT09IC0xO1xuICB2YXIgSVNfV0VBSyA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignV2VhaycpICE9PSAtMTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsW0NPTlNUUlVDVE9SX05BTUVdO1xuICB2YXIgTmF0aXZlUHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IgJiYgTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICB2YXIgQ29uc3RydWN0b3IgPSBOYXRpdmVDb25zdHJ1Y3RvcjtcbiAgdmFyIGV4cG9ydGVkID0ge307XG5cbiAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICB2YXIgdW5jdXJyaWVkTmF0aXZlTWV0aG9kID0gdW5jdXJyeVRoaXMoTmF0aXZlUHJvdG90eXBlW0tFWV0pO1xuICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvdG90eXBlLCBLRVksXG4gICAgICBLRVkgPT09ICdhZGQnID8gZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgIHVuY3VycmllZE5hdGl2ZU1ldGhvZCh0aGlzLCB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSA6IEtFWSA9PT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChrZXkpID8gZmFsc2UgOiB1bmN1cnJpZWROYXRpdmVNZXRob2QodGhpcywga2V5ID09PSAwID8gMCA6IGtleSk7XG4gICAgICB9IDogS0VZID09PSAnZ2V0JyA/IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGtleSkgPyB1bmRlZmluZWQgOiB1bmN1cnJpZWROYXRpdmVNZXRob2QodGhpcywga2V5ID09PSAwID8gMCA6IGtleSk7XG4gICAgICB9IDogS0VZID09PSAnaGFzJyA/IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGtleSkgPyBmYWxzZSA6IHVuY3VycmllZE5hdGl2ZU1ldGhvZCh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5KTtcbiAgICAgIH0gOiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICB1bmN1cnJpZWROYXRpdmVNZXRob2QodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICApO1xuICB9O1xuXG4gIHZhciBSRVBMQUNFID0gaXNGb3JjZWQoXG4gICAgQ09OU1RSVUNUT1JfTkFNRSxcbiAgICAhaXNDYWxsYWJsZShOYXRpdmVDb25zdHJ1Y3RvcikgfHwgIShJU19XRUFLIHx8IE5hdGl2ZVByb3RvdHlwZS5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKS5lbnRyaWVzKCkubmV4dCgpO1xuICAgIH0pKVxuICApO1xuXG4gIGlmIChSRVBMQUNFKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDb25zdHJ1Y3RvciA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlLmVuYWJsZSgpO1xuICB9IGVsc2UgaWYgKGlzRm9yY2VkKENPTlNUUlVDVE9SX05BTUUsIHRydWUpKSB7XG4gICAgdmFyIGluc3RhbmNlID0gbmV3IENvbnN0cnVjdG9yKCk7XG4gICAgLy8gZWFybHkgaW1wbGVtZW50YXRpb25zIG5vdCBzdXBwb3J0cyBjaGFpbmluZ1xuICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT09IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gQ2hyb21pdW0gNDAtIHdlYWstY29sbGVjdGlvbnMgdGhyb3dzIG9uIHByaW1pdGl2ZXMsIGJ1dCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgdmFyIFRIUk9XU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBpbnN0YW5jZS5oYXMoMSk7IH0pO1xuICAgIC8vIG1vc3QgZWFybHkgaW1wbGVtZW50YXRpb25zIGRvZXNuJ3Qgc3VwcG9ydHMgaXRlcmFibGVzLCBtb3N0IG1vZGVybiAtIG5vdCBjbG9zZSBpdCBjb3JyZWN0bHlcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24oZnVuY3Rpb24gKGl0ZXJhYmxlKSB7IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihpdGVyYWJsZSk7IH0pO1xuICAgIC8vIGZvciBlYXJseSBpbXBsZW1lbnRhdGlvbnMgLTAgYW5kICswIG5vdCB0aGUgc2FtZVxuICAgIHZhciBCVUdHWV9aRVJPID0gIUlTX1dFQUsgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVjggfiBDaHJvbWl1bSA0Mi0gZmFpbHMgb25seSB3aXRoIDUrIGVsZW1lbnRzXG4gICAgICB2YXIgJGluc3RhbmNlID0gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCk7XG4gICAgICB2YXIgaW5kZXggPSA1O1xuICAgICAgd2hpbGUgKGluZGV4LS0pICRpbnN0YW5jZVtBRERFUl0oaW5kZXgsIGluZGV4KTtcbiAgICAgIHJldHVybiAhJGluc3RhbmNlLmhhcygtMCk7XG4gICAgfSk7XG5cbiAgICBpZiAoIUFDQ0VQVF9JVEVSQUJMRVMpIHtcbiAgICAgIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAoZHVtbXksIGl0ZXJhYmxlKSB7XG4gICAgICAgIGFuSW5zdGFuY2UoZHVtbXksIE5hdGl2ZVByb3RvdHlwZSk7XG4gICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCksIGR1bW15LCBDb25zdHJ1Y3Rvcik7XG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlcmFibGUpKSBpdGVyYXRlKGl0ZXJhYmxlLCB0aGF0W0FEREVSXSwgeyB0aGF0OiB0aGF0LCBBU19FTlRSSUVTOiBJU19NQVAgfSk7XG4gICAgICAgIHJldHVybiB0aGF0O1xuICAgICAgfSk7XG4gICAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBOYXRpdmVQcm90b3R5cGU7XG4gICAgICBOYXRpdmVQcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjtcbiAgICB9XG5cbiAgICBpZiAoVEhST1dTX09OX1BSSU1JVElWRVMgfHwgQlVHR1lfWkVSTykge1xuICAgICAgZml4TWV0aG9kKCdkZWxldGUnKTtcbiAgICAgIGZpeE1ldGhvZCgnaGFzJyk7XG4gICAgICBJU19NQVAgJiYgZml4TWV0aG9kKCdnZXQnKTtcbiAgICB9XG5cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcblxuICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgc2hvdWxkIG5vdCBjb250YWlucyAuY2xlYXIgbWV0aG9kXG4gICAgaWYgKElTX1dFQUsgJiYgTmF0aXZlUHJvdG90eXBlLmNsZWFyKSBkZWxldGUgTmF0aXZlUHJvdG90eXBlLmNsZWFyO1xuICB9XG5cbiAgZXhwb3J0ZWRbQ09OU1RSVUNUT1JfTkFNRV0gPSBDb25zdHJ1Y3RvcjtcbiAgJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGZvcmNlZDogQ29uc3RydWN0b3IgIT09IE5hdGl2ZUNvbnN0cnVjdG9yIH0sIGV4cG9ydGVkKTtcblxuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApO1xuXG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBvcHRpb25zKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIGRlZmluZUJ1aWx0SW4odGFyZ2V0LCBrZXksIHNyY1trZXldLCBvcHRpb25zKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUpIHtcbiAgdmFyIENvbnN0cnVjdG9yID0gZ2V0QnVpbHRJbihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgQ29uc3RydWN0b3IgJiYgIUNvbnN0cnVjdG9yW1NQRUNJRVNdKSB7XG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKENvbnN0cnVjdG9yLCBTUEVDSUVTLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgICB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFzdEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpLmZhc3RLZXk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDb25zdHJ1Y3RvciA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIFByb3RvdHlwZSk7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoYXQsIHtcbiAgICAgICAgdHlwZTogQ09OU1RSVUNUT1JfTkFNRSxcbiAgICAgICAgaW5kZXg6IGNyZWF0ZShudWxsKSxcbiAgICAgICAgZmlyc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgbGFzdDogdW5kZWZpbmVkLFxuICAgICAgICBzaXplOiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMpIHRoYXQuc2l6ZSA9IDA7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICB2YXIgcHJldmlvdXMsIGluZGV4O1xuICAgICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcbiAgICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmxhc3QgPSBlbnRyeSA9IHtcbiAgICAgICAgICBpbmRleDogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksXG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzOiBwcmV2aW91cyA9IHN0YXRlLmxhc3QsXG4gICAgICAgICAgbmV4dDogdW5kZWZpbmVkLFxuICAgICAgICAgIHJlbW92ZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIGlmICghc3RhdGUuZmlyc3QpIHN0YXRlLmZpcnN0ID0gZW50cnk7XG4gICAgICAgIGlmIChwcmV2aW91cykgcHJldmlvdXMubmV4dCA9IGVudHJ5O1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUrKztcbiAgICAgICAgZWxzZSB0aGF0LnNpemUrKztcbiAgICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSBzdGF0ZS5pbmRleFtpbmRleF0gPSBlbnRyeTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfTtcblxuICAgIHZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uICh0aGF0LCBrZXkpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAvLyBmYXN0IGNhc2VcbiAgICAgIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KTtcbiAgICAgIHZhciBlbnRyeTtcbiAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gc3RhdGUuaW5kZXhbaW5kZXhdO1xuICAgICAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gICAgICBmb3IgKGVudHJ5ID0gc3RhdGUuZmlyc3Q7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm5leHQpIHtcbiAgICAgICAgaWYgKGVudHJ5LmtleSA9PT0ga2V5KSByZXR1cm4gZW50cnk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwge1xuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuY2xlYXIoKWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmNsZWFyXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuY2xlYXJcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZW50cnkgPSBzdGF0ZS5maXJzdDtcbiAgICAgICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICAgICAgZW50cnkucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnByZXZpb3VzKSBlbnRyeS5wcmV2aW91cyA9IGVudHJ5LnByZXZpb3VzLm5leHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmZpcnN0ID0gc3RhdGUubGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgc3RhdGUuaW5kZXggPSBjcmVhdGUobnVsbCk7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSA9IDA7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5kZWxldGUoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm5leHQ7XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgICBkZWxldGUgc3RhdGUuaW5kZXhbZW50cnkuaW5kZXhdO1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm5leHQgPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnByZXZpb3VzID0gcHJldjtcbiAgICAgICAgICBpZiAoc3RhdGUuZmlyc3QgPT09IGVudHJ5KSBzdGF0ZS5maXJzdCA9IG5leHQ7XG4gICAgICAgICAgaWYgKHN0YXRlLmxhc3QgPT09IGVudHJ5KSBzdGF0ZS5sYXN0ID0gcHJldjtcbiAgICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUtLTtcbiAgICAgICAgICBlbHNlIHRoYXQuc2l6ZS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLmZpcnN0KSB7XG4gICAgICAgICAgYm91bmRGdW5jdGlvbihlbnRyeS52YWx1ZSwgZW50cnkua2V5LCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0fS5wcm90b3R5cGUuaGFzKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5oYXNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5oYXNcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCBJU19NQVAgPyB7XG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5nZXQoa2V5KWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZ2V0XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnZhbHVlO1xuICAgICAgfSxcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuc2V0XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gOiB7XG4gICAgICAvLyBgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5hZGRcbiAgICAgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH0sXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApIHtcbiAgICB2YXIgSVRFUkFUT1JfTkFNRSA9IENPTlNUUlVDVE9SX05BTUUgKyAnIEl0ZXJhdG9yJztcbiAgICB2YXIgZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuICAgIHZhciBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKElURVJBVE9SX05BTUUpO1xuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLnsga2V5cywgdmFsdWVzLCBlbnRyaWVzLCBAQGl0ZXJhdG9yIH0oKWAgbWV0aG9kc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgZGVmaW5lSXRlcmF0b3IoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICAgIHR5cGU6IElURVJBVE9SX05BTUUsXG4gICAgICAgIHRhcmdldDogaXRlcmF0ZWQsXG4gICAgICAgIHN0YXRlOiBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZShpdGVyYXRlZCksXG4gICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgIGxhc3Q6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlKHRoaXMpO1xuICAgICAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICAgICAgdmFyIGVudHJ5ID0gc3RhdGUubGFzdDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnJlbW92ZWQpIGVudHJ5ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAvLyBnZXQgbmV4dCBlbnRyeVxuICAgICAgaWYgKCFzdGF0ZS50YXJnZXQgfHwgIShzdGF0ZS5sYXN0ID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm5leHQgOiBzdGF0ZS5zdGF0ZS5maXJzdCkpIHtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT09ICdrZXlzJykgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkua2V5LCBmYWxzZSk7XG4gICAgICBpZiAoa2luZCA9PT0gJ3ZhbHVlcycpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LnZhbHVlLCBmYWxzZSk7XG4gICAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbZW50cnkua2V5LCBlbnRyeS52YWx1ZV0sIGZhbHNlKTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJywgIUlTX01BUCwgdHJ1ZSk7XG5cbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZVtAQHNwZWNpZXNdYCBhY2Nlc3NvcnNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1tYXAtQEBzcGVjaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtc2V0LUBAc3BlY2llc1xuICAgIHNldFNwZWNpZXMoQ09OU1RSVUNUT1JfTkFNRSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25TdHJvbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gYFNldGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LW9iamVjdHNcbmNvbGxlY3Rpb24oJ1NldCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTZXQoKSB7IHJldHVybiBpbml0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwgY29sbGVjdGlvblN0cm9uZyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyByZXBsYWNlZCB0byBtb2R1bGUgYmVsb3dcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LmNvbnN0cnVjdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICB2YXIgcG9zaXRpb24gPSB0b0ludGVnZXJPckluZmluaXR5KHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IGNoYXJBdChTLCBwb3NpdGlvbilcbiAgICAgICAgICA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IHN0cmluZ1NsaWNlKFMsIHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpXG4gICAgICAgICAgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmNvZGVwb2ludGF0XG4gIGNvZGVBdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuYXRgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG4gIGNoYXJBdDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG5cbnZhciBTVFJJTkdfSVRFUkFUT1IgPSAnU3RyaW5nIEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNUUklOR19JVEVSQVRPUik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG5kZWZpbmVJdGVyYXRvcihTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogU1RSSU5HX0lURVJBVE9SLFxuICAgIHN0cmluZzogdG9TdHJpbmcoaXRlcmF0ZWQpLFxuICAgIGluZGV4OiAwXG4gIH0pO1xuLy8gYCVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVzdHJpbmdpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHN0cmluZyA9IHN0YXRlLnN0cmluZztcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXg7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IHN0cmluZy5sZW5ndGgpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIHBvaW50ID0gY2hhckF0KHN0cmluZywgaW5kZXgpO1xuICBzdGF0ZS5pbmRleCArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHBvaW50LCBmYWxzZSk7XG59KTtcbiIsICJpbXBvcnQge2luaXRJMThuTWV0aG9kc30gZnJvbSAnLi9tb2R1bGVzL2luaXRJMThuTWV0aG9kcyc7XG5pbXBvcnQge2luaXRTaGltc30gZnJvbSAnLi9tb2R1bGVzL2luaXRTaGltcyc7XG5cbmNvbnN0IGkxOG5NZXRob2RzOiBSZXR1cm5UeXBlPHR5cGVvZiBpbml0STE4bk1ldGhvZHM+ID0gaW5pdEkxOG5NZXRob2RzKCk7XG5pbml0U2hpbXMoaTE4bk1ldGhvZHMpO1xuXG5leHBvcnQgY29uc3Qge2NvbnRlbnQsIGxvY2FsaXplLCB2YXJ5fSA9IGkxOG5NZXRob2RzO1xuXG4vKiFcbi8vIOS7k+W6k+WGheeUqOazlVxuXHQvLyDlrprkuYnlpJrmnaHmtojmga9cblx0Ly8g5pSv5oyB5aSa6K+t6KiA77yM5Y+v6YCJ5YC85a6a5LmJ5ZyobW9kdWxlcy90eXBlcy5kLnRzI0wtMe+8jOWPr+ebtOaOpea3u+WKoOWFtuS7luWAvO+8iFJGQyA1NjQ277yJXG5cdGltcG9ydCB7Y29udGVudCwgbG9jYWxpemUsIHZhcnl9IGZyb20gJ2V4dC5nYWRnZXQuaTE4bic7XG5cdGNvbnN0IGdldEkxOG5NZXNzYWdlcyA9ICgpID0+IHtcblx0XHQvLyBpMThu55qE5LiJ5Liq5pa55rOV5Lya5Yy56YWN5b2T5YmN6K+t6KiA5ZKM5a6D5omA5o6l5pS25a+56LGh5Lit55qE6ZSu77yM5a+55LqObG9jYWxpemXmnaXor7TvvIzlgYforr7lt7LlrprkuYl6aOOAgWVu5ZKMamHvvIzliJlcblx0XHQvLyAgIOW9k+mhtemdouivreiogO+8iHdnVXNlckxhbmd1YWdlID8/IHdnQ29udGVudExhbmd1YWdl77yJ5Li65Lit5paHL+iLseivrS/ml6Xor63ml7bvvIzov5Tlm57pobXpnaLor63oqIDmiYDlr7nlupTnmoTlgLxcblx0XHQvLyAgIOW9k+mhtemdouivreiogOS4uuazleivre+8jOa1j+iniOWZqOivreiogOS4uuS4reaWhy/oi7Hor60v5pel6K+t5pe277yM6L+U5Zue5rWP6KeI5Zmo6K+t6KiA5omA5a+55bqU55qE5YC8XG5cdFx0Ly8gICDlvZPpobXpnaLor63oqIDkuLrms5Xor63vvIzkuJTkuI3lrZjlnKjmtY/op4jlmajor63oqIDmiYDlr7nlupTnmoTplK7vvIzov5Tlm55MLTI15a6a5LmJ55qE6ZSu5omA5a+55bqU55qE5YC844CC6Iul5q2k6ZSu5ZCM5qC35rKh6KKr5a6a5LmJ77yM5YiZ6L+U5Zue56m65a2X56ym5LiyXG5cdFx0cmV0dXJuIHtcblx0XHRcdENhbmNlbDogY29udGVudCh7XG5cdFx0XHRcdGVuOiAnQ2FuY2VsJyxcblx0XHRcdFx0amE6ICfjgq3jg6Pjg7Pjgrvjg6snLFxuXHRcdFx0XHR6aDogJ+WPlua2iCcsXG5cdFx0XHR9KSxcblx0XHRcdFFpdVdlbjogbG9jYWxpemUoe1xuXHRcdFx0XHRlbjogJ1FpdVdlbicsXG5cdFx0XHRcdGphOiAn44Gh44KF44GG44GG44KTJyxcblx0XHRcdFx0J3poLWNuJzogJ+axgumXuycsXG5cdFx0XHRcdCd6aC1oayc6ICfmsYLogZ4nLFxuXHRcdFx0fSksXG5cdFx0XHRMb25nVGV4dDogdmFyeSh7XG5cdFx0XHRcdGVuOiAnVGhpcyBpcyBhIHZlcnkgbG9uZyB0ZXh0Jyxcblx0XHRcdFx0amE6ICfjgZPjgozjga/pnZ7luLjjgavplbfjgYTjg4bjgq3jgrnjg4jjgafjgZknLFxuXHRcdFx0XHQnemgtaGFucyc6ICfov5nmmK/kuIDmrrXpnZ7luLjplb/nmoTmlofmnKwnLFxuXHRcdFx0XHQnemgtaGFudCc6ICfpgJnmmK/kuIDmrrXpnZ7luLjplbfnmoTmloflrZcnLFxuXHRcdFx0fSksXG5cdFx0fTtcblx0fTtcblx0Y29uc3QgaTE4bk1lc3NhZ2VzID0gZ2V0STE4bk1lc3NhZ2VzKCk7XG5cdGNvbnN0IGdldE1lc3NhZ2U6IEdldE1lc3NhZ2VzPHR5cGVvZiBpMThuTWVzc2FnZXM+ID0gKGtleSkgPT4ge1xuXHRcdHJldHVybiBpMThuTWVzc2FnZXNba2V5XSB8fCBrZXk7XG5cdH07XG5cdC8vIOiwg+eUqFxuXHRnZXRNZXNzYWdlKCdDYW5jZWwnKTsgLy8gZW46IENhbmNlbCwgamE6IOOCreODo+ODs+OCu+ODqywgemg6IOWPlua2iCwgemgtaGFuczog5Y+W5raILCB6aC1oYW50OiDlj5bmtogsIHpoLWNuOiDlj5bmtogsIHpoLWhrOiDlj5bmtogsIHpoLXR3OiDlj5bmtohcblx0Z2V0TWVzc2FnZSgnUWl1V2VuJyk7IC8vIGVuOiBRaXVXZW4sIGphOiDjgaHjgoXjgYbjgYbjgpMsIHpoOiDmsYLpl7ssIHpoLWhhbnM6IOaxgumXuywgemgtaGFudDog5rGC6IGeLCB6aC1jbjog5rGC6Ze7LCB6aC1oazog5rGC6IGeLCB6aC10dzog5rGC6IGeXG5cdGdldE1lc3NhZ2UoJ0xvbmdUZXh0Jyk7XG5cdFx0Ly8gZW46IFRoaXMgaXMgYSB2ZXJ5IGxvbmcgdGV4dFxuXHRcdC8vIGphOiDjgZPjgozjga/pnZ7luLjjgavplbfjgYTjg4bjgq3jgrnjg4jjgafjgZlcblx0XHQvLyB6aDog6L+Z5piv5LiA5q616Z2e5bi46ZW/55qE5paH5pysXG5cdFx0Ly8gemgtaGFuczog6L+Z5piv5LiA5q616Z2e5bi46ZW/55qE5paH5pysXG5cdFx0Ly8gemgtaGFudDog6YCZ5piv5LiA5q616Z2e5bi46ZW355qE5paH5a2XXG5cdFx0Ly8gemgtY246IOi/meaYr+S4gOautemdnuW4uOmVv+eahOaWh+acrFxuXHRcdC8vIHpoLWhrOiDpgJnmmK/kuIDmrrXpnZ7luLjplbfnmoTmloflrZdcblx0XHQvLyB6aC10dzog6YCZ5piv5LiA5q616Z2e5bi46ZW355qE5paH5a2XXG5cblx0Ly8g55u05o6l6L2s5o2i5Y2V5p2h5raI5oGv77yI5LiN5o6o6I2Q77yM5LuF5Li65YW85a655oCn5L+d55WZ77yJXG5cdC8vIOS7heaUr+aMgeS8oOmAkuS4reaWh+WSjOiLseivreOAguWcqOmdnuS4reaWh+eOr+Wig+S4lOacquS8oOmAkuiLseivreaWh+acrOaXtu+8jOacgOe7iOi/lOWbnnpo55qE5YC8XG5cdHdnVUNTKCfmsYLpl7snLCAn5rGC6IGeJyk7IC8vIGVuOiDmsYLpl7ssIGphOiDmsYLpl7ssIHpoOiDmsYLpl7ssIHpoLWhhbnM6IOaxgumXuywgemgtaGFudDog5rGC6IGeLCB6aC1jbjog5rGC6Ze7LCB6aC1oazog5rGC6IGeLCB6aC10dzog5rGC6IGeXG5cdHdnVUxTKCfmsYLpl7snLCAn5rGC6IGeJyk7IC8vIGVuOiDmsYLpl7ssIGphOiDmsYLpl7ssIHpoOiDmsYLpl7ssIHpoLWhhbnM6IOaxgumXuywgemgtaGFudDog5rGC6IGeLCB6aC1jbjog5rGC6Ze7LCB6aC1oazog5rGC6IGeLCB6aC10dzog5rGC6IGeXG5cdHdnVVZTKCfmsYLpl7snLCAn5rGC6IGeJyk7IC8vIGVuOiDmsYLpl7ssIGphOiDmsYLpl7ssIHpoOiDmsYLpl7ssIHpoLWhhbnM6IOaxgumXuywgemgtaGFudDog5rGC6IGeLCB6aC1jbjog5rGC6Ze7LCB6aC1oazog5rGC6IGeLCB6aC10dzog5rGC6IGeXG5cblx0Ly8g6Z2eTWVkaWFXaWtp5ZG95ZCN56m66Ze055qE6ISa5pys5Y+v5Lul6YCa6L+HbXcubG9hZGVyLnVzaW5n5Yqg6L29ZXh0LmdhZGdldC5pMThu5qih5Z2XXG5cdG13LmxvYWRlci51c2luZygnZXh0LmdhZGdldC5pMThuJykudGhlbigocmVxdWlyZSkgPT4ge1xuXHRcdGNvbnN0IHtjb250ZW50LCBsb2NhbGl6ZSwgdmFyeX0gPSByZXF1aXJlKCdleHQuZ2FkZ2V0LmkxOG4nKTtcblx0fSk7XG4gKi9cbiIsICJ7XG5cdFwiZGVmYXVsdExhbmd1YWdlQ29kZVwiOiBcImVuXCIsXG5cdFwiZmFsbGJhY2tUYWJsZVwiOiB7XG5cdFx0XCJ6aFwiOiBbXCJ6aFwiLCBcInpoLWhhbnNcIiwgXCJ6aC1oYW50XCIsIFwiemgtY25cIiwgXCJ6aC10d1wiLCBcInpoLWhrXCIsIFwiemgtc2dcIiwgXCJ6aC1tb1wiLCBcInpoLW15XCJdLFxuXHRcdFwiemgtaGFuc1wiOiBbXCJ6aC1oYW5zXCIsIFwiemgtY25cIiwgXCJ6aC1zZ1wiLCBcInpoLW15XCIsIFwiemhcIiwgXCJ6aC1oYW50XCIsIFwiemgtdHdcIiwgXCJ6aC1oa1wiLCBcInpoLW1vXCJdLFxuXHRcdFwiemgtaGFudFwiOiBbXCJ6aC1oYW50XCIsIFwiemgtdHdcIiwgXCJ6aC1oa1wiLCBcInpoLW1vXCIsIFwiemhcIiwgXCJ6aC1oYW5zXCIsIFwiemgtY25cIiwgXCJ6aC1zZ1wiLCBcInpoLW15XCJdLFxuXHRcdFwiemgtY25cIjogW1wiemgtY25cIiwgXCJ6aC1oYW5zXCIsIFwiemgtc2dcIiwgXCJ6aC1teVwiLCBcInpoXCIsIFwiemgtaGFudFwiLCBcInpoLXR3XCIsIFwiemgtaGtcIiwgXCJ6aC1tb1wiXSxcblx0XHRcInpoLXNnXCI6IFtcInpoLXNnXCIsIFwiemgtaGFuc1wiLCBcInpoLWNuXCIsIFwiemgtbXlcIiwgXCJ6aFwiLCBcInpoLWhhbnRcIiwgXCJ6aC10d1wiLCBcInpoLWhrXCIsIFwiemgtbW9cIl0sXG5cdFx0XCJ6aC1teVwiOiBbXCJ6aC1teVwiLCBcInpoLWhhbnNcIiwgXCJ6aC1jblwiLCBcInpoLXNnXCIsIFwiemhcIiwgXCJ6aC1oYW50XCIsIFwiemgtdHdcIiwgXCJ6aC1oa1wiLCBcInpoLW1vXCJdLFxuXHRcdFwiemgtdHdcIjogW1wiemgtdHdcIiwgXCJ6aC1oYW50XCIsIFwiemgtaGtcIiwgXCJ6aC1tb1wiLCBcInpoXCIsIFwiemgtaGFuc1wiLCBcInpoLWNuXCIsIFwiemgtc2dcIiwgXCJ6aC1teVwiXSxcblx0XHRcInpoLWhrXCI6IFtcInpoLWhrXCIsIFwiemgtaGFudFwiLCBcInpoLW1vXCIsIFwiemgtdHdcIiwgXCJ6aFwiLCBcInpoLWhhbnNcIiwgXCJ6aC1jblwiLCBcInpoLXNnXCIsIFwiemgtbXlcIl0sXG5cdFx0XCJ6aC1tb1wiOiBbXCJ6aC1tb1wiLCBcInpoLWhhbnRcIiwgXCJ6aC1oa1wiLCBcInpoLXR3XCIsIFwiemhcIiwgXCJ6aC1oYW5zXCIsIFwiemgtY25cIiwgXCJ6aC1zZ1wiLCBcInpoLW15XCJdXG5cdH1cbn1cbiIsICJjb25zdCBXR19DT05URU5UX0xBTkdVQUdFOiBzdHJpbmcgPSBtdy5jb25maWcuZ2V0KCd3Z0NvbnRlbnRMYW5ndWFnZScpO1xuY29uc3QgV0dfVVNFUl9MQU5HVUFHRTogc3RyaW5nID0gbXcuY29uZmlnLmdldCgnd2dVc2VyTGFuZ3VhZ2UnKTtcbmNvbnN0IFdHX1VTRVJfVkFSSUFOVDogc3RyaW5nIHwgbnVsbCA9IG13LmNvbmZpZy5nZXQoJ3dnVXNlclZhcmlhbnQnKTtcblxuZXhwb3J0IHtXR19DT05URU5UX0xBTkdVQUdFLCBXR19VU0VSX0xBTkdVQUdFLCBXR19VU0VSX1ZBUklBTlR9O1xuIiwgImNvbnN0IGdlbmVyYXRlTGFuZ3VhZ2VDb2RlU3BsaXRBcnJheSA9IChvcmlnaW5MYW5ndWFnZUNvZGU6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcblx0Y29uc3QgbGFuZ3VhZ2VDb2RlU3BsaXRBcnJheTogc3RyaW5nW10gPSBvcmlnaW5MYW5ndWFnZUNvZGUuc3BsaXQoJy0nKS5tYXAoKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRcdHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXHR9KTtcblxuXHRyZXR1cm4gbGFuZ3VhZ2VDb2RlU3BsaXRBcnJheTtcbn07XG5cbmV4cG9ydCB7Z2VuZXJhdGVMYW5ndWFnZUNvZGVTcGxpdEFycmF5fTtcbiIsICJpbXBvcnQgKiBhcyBPUFRJT05TIGZyb20gJy4uLy4uL29wdGlvbnMuanNvbic7XG5pbXBvcnQge2dlbmVyYXRlTGFuZ3VhZ2VDb2RlU3BsaXRBcnJheX0gZnJvbSAnLi9nZW5lcmF0ZUxhbmd1YWdlQ29kZVNwbGl0QXJyYXknO1xuaW1wb3J0IHtpc1ZhbGlkS2V5fSBmcm9tICdleHQuZ2FkZ2V0LlV0aWwnO1xuXG5jb25zdCBnZW5lcmF0ZURlZmF1bHRGYWxsYmFja0xpc3QgPSAoKTogc3RyaW5nW10gPT4ge1xuXHRjb25zdCBkb2N1bWVudExhbmd1YWdlU3BsaXRBcnJheTogc3RyaW5nW10gPSBnZW5lcmF0ZUxhbmd1YWdlQ29kZVNwbGl0QXJyYXkoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmxhbmcpO1xuXHRjb25zdCBuYXZpZ2F0b3JMYW5ndWFnZVNwbGl0QXJyYXk6IHN0cmluZ1tdID0gZ2VuZXJhdGVMYW5ndWFnZUNvZGVTcGxpdEFycmF5KG5hdmlnYXRvci5sYW5ndWFnZSk7XG5cblx0bGV0IGxhbmd1YWdlQ29kZTogc3RyaW5nID0gT1BUSU9OUy5kZWZhdWx0TGFuZ3VhZ2VDb2RlO1xuXHRmb3IgKGNvbnN0IGxhbmd1YWdlQ29kZVNwbGl0QXJyYXkgb2YgW2RvY3VtZW50TGFuZ3VhZ2VTcGxpdEFycmF5LCBuYXZpZ2F0b3JMYW5ndWFnZVNwbGl0QXJyYXldKSB7XG5cdFx0c3dpdGNoIChsYW5ndWFnZUNvZGVTcGxpdEFycmF5Lmxlbmd0aCkge1xuXHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHRsYW5ndWFnZUNvZGUgPSBgJHtsYW5ndWFnZUNvZGVTcGxpdEFycmF5WzBdfS0ke2xhbmd1YWdlQ29kZVNwbGl0QXJyYXlbMV19YDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIDM6XG5cdFx0XHRcdGxhbmd1YWdlQ29kZSA9IGAke2xhbmd1YWdlQ29kZVNwbGl0QXJyYXlbMF19LSR7bGFuZ3VhZ2VDb2RlU3BsaXRBcnJheVsyXX1gO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGxhbmd1YWdlQ29kZSA9IGxhbmd1YWdlQ29kZVNwbGl0QXJyYXlbMF0gYXMgc3RyaW5nO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0aWYgKGlzVmFsaWRLZXkoT1BUSU9OUy5mYWxsYmFja1RhYmxlLCBsYW5ndWFnZUNvZGUpKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gWy4uLm5ldyBTZXQoW2xhbmd1YWdlQ29kZSwgT1BUSU9OUy5kZWZhdWx0TGFuZ3VhZ2VDb2RlXSldO1xufTtcblxuZXhwb3J0IHtnZW5lcmF0ZURlZmF1bHRGYWxsYmFja0xpc3R9O1xuIiwgImltcG9ydCAqIGFzIE9QVElPTlMgZnJvbSAnLi4vb3B0aW9ucy5qc29uJztcbmltcG9ydCB7V0dfQ09OVEVOVF9MQU5HVUFHRSwgV0dfVVNFUl9MQU5HVUFHRSwgV0dfVVNFUl9WQVJJQU5UfSBmcm9tICcuL2NvbnN0YW50JztcbmltcG9ydCB0eXBlIHtJMThuQ2FuZGlkYXRlc30gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge2dlbmVyYXRlRGVmYXVsdEZhbGxiYWNrTGlzdH0gZnJvbSAnLi91dGlsL2dlbmVyYXRlRGVmYXVsdEZhbGxiYWNrTGlzdCc7XG5pbXBvcnQge2lzVmFsaWRLZXl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5cbmNvbnN0IGluaXRJMThuTWV0aG9kcyA9ICgpOiB0eXBlb2YgaTE4bk1ldGhvZHMgPT4ge1xuXHRjb25zdCBkZWZhdWx0RmFsbGJhY2tMaXN0OiBzdHJpbmdbXSA9IGdlbmVyYXRlRGVmYXVsdEZhbGxiYWNrTGlzdCgpO1xuXG5cdGNvbnN0IGVsZWN0ID0gKGNhbmRpZGF0ZXM6IEkxOG5DYW5kaWRhdGVzLCBsb2NhbGU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdFx0bGV0IGZhbGxiYWNrTGlzdDogc3RyaW5nW10gPSBkZWZhdWx0RmFsbGJhY2tMaXN0O1xuXHRcdGZvciAoY29uc3Qga2V5IG9mIFtsb2NhbGUsIC4uLmZhbGxiYWNrTGlzdF0pIHtcblx0XHRcdGlmIChpc1ZhbGlkS2V5KE9QVElPTlMuZmFsbGJhY2tUYWJsZSwga2V5KSkge1xuXHRcdFx0XHRmYWxsYmFja0xpc3QgPSBPUFRJT05TLmZhbGxiYWNrVGFibGVba2V5XTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgbmV3IFNldChbbG9jYWxlLCAuLi5mYWxsYmFja0xpc3QsIC4uLmRlZmF1bHRGYWxsYmFja0xpc3RdKSkge1xuXHRcdFx0aWYgKGlzVmFsaWRLZXkoY2FuZGlkYXRlcywga2V5KSkge1xuXHRcdFx0XHRyZXR1cm4gY2FuZGlkYXRlc1trZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAnJztcblx0fTtcblxuXHRjb25zdCBpMThuTWV0aG9kczogdHlwZW9mIGltcG9ydCgnZXh0LmdhZGdldC5pMThuJykgPSB7XG5cdFx0Y29udGVudDogKGNhbmRpZGF0ZXMpID0+IHtcblx0XHRcdHJldHVybiBlbGVjdChjYW5kaWRhdGVzLCBXR19DT05URU5UX0xBTkdVQUdFKTtcblx0XHR9LFxuXHRcdGxvY2FsaXplOiAoY2FuZGlkYXRlcykgPT4ge1xuXHRcdFx0cmV0dXJuIGVsZWN0KGNhbmRpZGF0ZXMsIFdHX1VTRVJfTEFOR1VBR0UpO1xuXHRcdH0sXG5cdFx0dmFyeTogKGNhbmRpZGF0ZXMpID0+IHtcblx0XHRcdHJldHVybiBlbGVjdChjYW5kaWRhdGVzLCBXR19VU0VSX1ZBUklBTlQgPz8gV0dfQ09OVEVOVF9MQU5HVUFHRSk7XG5cdFx0fSxcblx0fTtcblxuXHRyZXR1cm4gaTE4bk1ldGhvZHM7XG59O1xuXG5leHBvcnQge2luaXRJMThuTWV0aG9kc307XG4iLCAiY29uc3QgaW5pdFNoaW1zID0gKGkxOG5NZXRob2RzOiB0eXBlb2YgaW1wb3J0KCdleHQuZ2FkZ2V0LmkxOG4nKSk6IHZvaWQgPT4ge1xuXHRjb25zdCB3Z1VYUyA9IChcblx0XHRoYW5zOiB1bmtub3duLFxuXHRcdGhhbnQ6IHVua25vd24sXG5cdFx0Y246IHVua25vd24sXG5cdFx0dHc6IHVua25vd24sXG5cdFx0aGs6IHVua25vd24sXG5cdFx0c2c6IHVua25vd24sXG5cdFx0emg6IHVua25vd24sXG5cdFx0bW86IHVua25vd24sXG5cdFx0bXk6IHVua25vd24sXG5cdFx0ZW46IHVua25vd24sXG5cdFx0bWV0aG9kOiAnY29udGVudCcgfCAnbG9jYWxpemUnIHwgJ3ZhcnknXG5cdCk6IHN0cmluZyA9PiB7XG5cdFx0emggPSBTdHJpbmcoemggPz8gaGFucyA/PyBoYW50ID8/IGNuID8/IHR3ID8/IGhrID8/IHNnID8/IG1vID8/IG15ID8/IGVuKTtcblx0XHRoYW5zID0gU3RyaW5nKGhhbnMgPz8gY24gPz8gc2cgPz8gbXkgPz8gemgpO1xuXHRcdGhhbnQgPSBTdHJpbmcoaGFudCA/PyB0dyA/PyBoayA/PyBtbyA/PyB6aCk7XG5cdFx0Y24gPSBTdHJpbmcoY24gPz8gaGFucyk7XG5cdFx0c2cgPSBTdHJpbmcoc2cgPz8gaGFucyk7XG5cdFx0dHcgPSBTdHJpbmcodHcgPz8gaGFudCk7XG5cdFx0aGsgPSBTdHJpbmcoaGsgPz8gaGFudCk7XG5cdFx0bW8gPSBTdHJpbmcobW8gPz8gaGFudCk7XG5cdFx0bXkgPSBTdHJpbmcobXkgPz8gaGFudCk7XG5cdFx0ZW4gPSBTdHJpbmcoZW4gPz8gemgpO1xuXG5cdFx0cmV0dXJuIGkxOG5NZXRob2RzW21ldGhvZF0oe1xuXHRcdFx0ZW46IGVuIGFzIHN0cmluZyxcblx0XHRcdHpoOiB6aCBhcyBzdHJpbmcsXG5cdFx0XHQnemgtaGFucyc6IGhhbnMgYXMgc3RyaW5nLFxuXHRcdFx0J3poLWhhbnQnOiBoYW50IGFzIHN0cmluZyxcblx0XHRcdCd6aC1jbic6IGNuIGFzIHN0cmluZyxcblx0XHRcdCd6aC10dyc6IHR3IGFzIHN0cmluZyxcblx0XHRcdCd6aC1oayc6IGhrIGFzIHN0cmluZyxcblx0XHRcdCd6aC1zZyc6IHNnIGFzIHN0cmluZyxcblx0XHRcdCd6aC1tbyc6IG1vIGFzIHN0cmluZyxcblx0XHRcdCd6aC1teSc6IG15IGFzIHN0cmluZyxcblx0XHR9KTtcblx0fTtcblxuXHR3aW5kb3cud2dVQ1MgPSAoaGFucywgaGFudCwgY24sIHR3LCBoaywgc2csIHpoLCBtbywgbXksIGVuKSA9PiB7XG5cdFx0cmV0dXJuIHdnVVhTKGhhbnMsIGhhbnQsIGNuLCB0dywgaGssIHNnLCB6aCwgbW8sIG15LCBlbiwgJ2NvbnRlbnQnKTtcblx0fTtcblx0d2luZG93LndnVUxTID0gKGhhbnMsIGhhbnQsIGNuLCB0dywgaGssIHNnLCB6aCwgbW8sIG15LCBlbikgPT4ge1xuXHRcdHJldHVybiB3Z1VYUyhoYW5zLCBoYW50LCBjbiwgdHcsIGhrLCBzZywgemgsIG1vLCBteSwgZW4sICdsb2NhbGl6ZScpO1xuXHR9O1xuXHR3aW5kb3cud2dVVlMgPSAoaGFucywgaGFudCwgY24sIHR3LCBoaywgc2csIHpoLCBtbywgbXksIGVuKSA9PiB7XG5cdFx0cmV0dXJuIHdnVVhTKGhhbnMsIGhhbnQsIGNuLCB0dywgaGssIHNnLCB6aCwgbW8sIG15LCBlbiwgJ3ZhcnknKTtcblx0fTtcbn07XG5cbmV4cG9ydCB7aW5pdFNoaW1zfTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSx5RkFBQUEsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRLFNBQVUsSUFBSTtBQUN4QixhQUFPLE1BQU0sR0FBRyxTQUFTLFFBQVE7QUFBQSxJQUNuQztBQUdBLElBQUFBLFFBQU87QUFBQSxJQUVMLE1BQU0sT0FBTyxjQUFjLFlBQVksVUFBVSxLQUNqRCxNQUFNLE9BQU8sVUFBVSxZQUFZLE1BQU07QUFBQSxJQUV6QyxNQUFNLE9BQU8sUUFBUSxZQUFZLElBQUksS0FDckMsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNLEtBQ3pDLE1BQU0sT0FBT0QsWUFBUSxZQUFZQSxRQUFJO0FBQUEsSUFFcEMsMkJBQVk7QUFBRSxhQUFPO0FBQUEsSUFBTSxFQUFHLEtBQUssU0FBUyxhQUFhLEVBQUU7QUFBQTtBQUFBOzs7QUNmOUQ7QUFBQSx3RkFBQUUsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsSUFBQUEsUUFBTyxVQUFVLFNBQVUsTUFBTTtBQUMvQixVQUFJO0FBQ0YsZUFBTyxDQUFDLENBQUMsS0FBSztBQUFBLE1BQ2hCLFNBQVMsT0FBTztBQUNkLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ1BBO0FBQUEsOEZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUTtBQUda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SUFBSUMsSUFBSTNELElBQUk0RCxJQUFJQyxJQUFJQyxJQUFPO0FBQzlELFdBQU9ULE1BQU1DLE1BQU1DLE1BQU1DLElBQUlDLElBQUlDLElBQUlDLElBQUkzRCxJQUFJNEQsSUFBSUMsSUFBSUMsSUFBSSxNQUFNO0VBQ2hFO0FBQ0Q7O0FON0NBLElBQU0rQixjQUFrRDVELGdCQUFnQjtBQUN4RW1CLFVBQVV5QyxXQUFXO0FBRWQsSUFBT3JHLFdBQTJCcUcsWUFBM0JyRztBQUFQLElBQWdCQyxZQUFrQm9HLFlBQWxCcEc7QUFBaEIsSUFBMEJDLFFBQVFtRyxZQUFSbkc7QUFFakM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7IiwKICAibmFtZXMiOiBbImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgIlN5bWJvbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiZG9jdW1lbnQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiVHlwZUVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb250ZW50IiwgImFjdGl2ZVhEb2N1bWVudCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTeW1ib2wiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU3ltYm9sIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInNlbGYiLCAiZ2xvYmFsIiwgIlR5cGVFcnJvciIsICJTeW1ib2wiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgIlN5bWJvbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiRXJyb3IiLCAiUmVmZXJlbmNlRXJyb3IiLCAiVHlwZUVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTZXQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaTE4bl9leHBvcnRzIiwgIl9fZXhwb3J0IiwgImNvbnRlbnQiLCAibG9jYWxpemUiLCAidmFyeSIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJfX3RvQ29tbW9uSlMiLCAiZGVmYXVsdExhbmd1YWdlQ29kZSIsICJmYWxsYmFja1RhYmxlIiwgInpoIiwgIldHX0NPTlRFTlRfTEFOR1VBR0UiLCAibXciLCAiY29uZmlnIiwgImdldCIsICJXR19VU0VSX0xBTkdVQUdFIiwgIldHX1VTRVJfVkFSSUFOVCIsICJnZW5lcmF0ZUxhbmd1YWdlQ29kZVNwbGl0QXJyYXkiLCAib3JpZ2luTGFuZ3VhZ2VDb2RlIiwgImxhbmd1YWdlQ29kZVNwbGl0QXJyYXkiLCAic3BsaXQiLCAibWFwIiwgInZhbHVlIiwgInRvTG93ZXJDYXNlIiwgImltcG9ydF9leHRfZ2FkZ2V0IiwgInJlcXVpcmUiLCAiZ2VuZXJhdGVEZWZhdWx0RmFsbGJhY2tMaXN0IiwgImRvY3VtZW50TGFuZ3VhZ2VTcGxpdEFycmF5IiwgImRvY3VtZW50IiwgImRvY3VtZW50RWxlbWVudCIsICJsYW5nIiwgIm5hdmlnYXRvckxhbmd1YWdlU3BsaXRBcnJheSIsICJuYXZpZ2F0b3IiLCAibGFuZ3VhZ2UiLCAibGFuZ3VhZ2VDb2RlIiwgIl9pIiwgIl9hcnIiLCAibGVuZ3RoIiwgImNvbmNhdCIsICJpc1ZhbGlkS2V5IiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJTZXQiLCAiaW1wb3J0X2V4dF9nYWRnZXQyIiwgImluaXRJMThuTWV0aG9kcyIsICJkZWZhdWx0RmFsbGJhY2tMaXN0IiwgImVsZWN0IiwgImNhbmRpZGF0ZXMiLCAibG9jYWxlIiwgImZhbGxiYWNrTGlzdCIsICJfaTIiLCAiX2FycjIiLCAia2V5IiwgIl9pdGVyYXRvcjIiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiX3N0ZXAyIiwgInMiLCAibiIsICJkb25lIiwgImVyciIsICJlIiwgImYiLCAiaTE4bk1ldGhvZHMyIiwgImluaXRTaGltcyIsICJ3Z1VYUyIsICJoYW5zIiwgImhhbnQiLCAiY24iLCAidHciLCAiaGsiLCAic2ciLCAibW8iLCAibXkiLCAiZW4iLCAibWV0aG9kIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3JlZjUiLCAiX3JlZjYiLCAiX3JlZjciLCAiX3JlZjgiLCAiX3poIiwgIl9yZWY5IiwgIl9yZWYxMCIsICJfcmVmMTEiLCAiX2hhbnMiLCAiX3JlZjEyIiwgIl9yZWYxMyIsICJfcmVmMTQiLCAiX2hhbnQiLCAiX2NuIiwgIl9zZyIsICJfdHciLCAiX2hrIiwgIl9tbyIsICJfbXkiLCAiX2VuIiwgIlN0cmluZyIsICJ3aW5kb3ciLCAid2dVQ1MiLCAid2dVTFMiLCAid2dVVlMiLCAiaTE4bk1ldGhvZHMiXQp9Cg== diff --git a/package.json b/package.json index 7ac9d187..57d6a56b 100644 --- a/package.json +++ b/package.json @@ -144,5 +144,13 @@ "@mrhenry/babel-plugin-core-web@1.2.1": "patches/@mrhenry__babel-plugin-core-web@1.2.1.patch", "alpha-sort@5.0.0": "patches/alpha-sort@5.0.0.patch" } + }, + "dependencies": { + "@types/react": "^18.2.56", + "@types/toastify-js": "1.12.3", + "filter-altered-clicks": "^2.0.1", + "jsx-dom": "^8.1.2", + "react": "^18.2.0", + "toastify-js": "1.12.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 69f32b1e..3e88f05c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -49,6 +49,26 @@ patchedDependencies: hash: v4iv7q4nqe6fm4j4rtzs7s6leq path: patches/eslint-plugin-no-jquery@2.7.0.patch +dependencies: + '@types/react': + specifier: ^18.2.56 + version: 18.2.56 + '@types/toastify-js': + specifier: 1.12.3 + version: 1.12.3 + filter-altered-clicks: + specifier: ^2.0.1 + version: 2.0.1 + jsx-dom: + specifier: ^8.1.2 + version: 8.1.2 + react: + specifier: ^18.2.0 + version: 18.2.0 + toastify-js: + specifier: 1.12.0 + version: 1.12.0 + devDependencies: '@babel/core': specifier: ^7.23.9 @@ -2447,6 +2467,22 @@ packages: kleur: 3.0.3 dev: true + /@types/prop-types@15.7.11: + resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + dev: false + + /@types/react@18.2.56: + resolution: {integrity: sha512-NpwHDMkS/EFZF2dONFQHgkPRwhvgq/OAvIaGQzxGSBmaeR++kTg6njr15Vatz0/2VcCEwJQFi6Jf4Q0qBu0rLA==} + dependencies: + '@types/prop-types': 15.7.11 + '@types/scheduler': 0.16.8 + csstype: 3.1.3 + dev: false + + /@types/scheduler@0.16.8: + resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} + dev: false + /@types/semver@7.5.7: resolution: {integrity: sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==} dev: true @@ -2455,6 +2491,10 @@ packages: resolution: {integrity: sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==} dev: true + /@types/toastify-js@1.12.3: + resolution: {integrity: sha512-9RjLlbAHMSaae/KZNHGv19VG4gcLIm3YjvacCXBtfMfYn26h76YP5oxXI8k26q4iKXCB9LNfv18lsoS0JnFPTg==} + dev: false + /@types/tough-cookie@4.0.5: resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} dev: true @@ -3261,6 +3301,10 @@ packages: hasBin: true dev: true + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + dev: false + /dargs@7.0.0: resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} engines: {node: '>=8'} @@ -4091,6 +4135,10 @@ packages: to-regex-range: 5.0.1 dev: true + /filter-altered-clicks@2.0.1: + resolution: {integrity: sha512-/eguM/WumjpUls1kgLNk8T5JAdqTvI9hc8q7mOXsxIZAvxRLwttigaiJrfIuNXhREL8VrQZQKBiwFApJSbE7qA==} + dev: false + /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -4773,7 +4821,6 @@ packages: /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true /js-tokens@8.0.3: resolution: {integrity: sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==} @@ -4849,6 +4896,12 @@ packages: object.values: 1.1.7 dev: true + /jsx-dom@8.1.2: + resolution: {integrity: sha512-0hBsob3UwWlm5wD0S7sNFxAUrWAPzrt/r/K+AGzlRaCrPNu40+px77U7kgG+NS022nWjhOso+dZhqu1XFR7eXg==} + dependencies: + csstype: 3.1.3 + dev: false + /keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: @@ -4961,6 +5014,7 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] requiresBuild: true dev: true optional: true @@ -4970,6 +5024,7 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] requiresBuild: true dev: true optional: true @@ -4979,6 +5034,7 @@ packages: engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] requiresBuild: true dev: true optional: true @@ -4988,6 +5044,7 @@ packages: engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] requiresBuild: true dev: true optional: true @@ -5099,7 +5156,6 @@ packages: hasBin: true dependencies: js-tokens: 4.0.0 - dev: true /lru-cache@10.2.0: resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} @@ -6085,6 +6141,13 @@ packages: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} dev: true + /react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + /read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} dependencies: @@ -6888,6 +6951,10 @@ packages: is-number: 7.0.0 dev: true + /toastify-js@1.12.0: + resolution: {integrity: sha512-HeMHCO9yLPvP9k0apGSdPUWrUbLnxUKNFzgUoZp1PHCLploIX/4DSQ7V8H25ef+h4iO9n0he7ImfcndnN6nDrQ==} + dev: false + /tough-cookie@4.1.3: resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} engines: {node: '>=6'} diff --git a/src/AjaxLogin/AjaxLogin.ts b/src/AjaxLogin/AjaxLogin.ts new file mode 100644 index 00000000..7937843c --- /dev/null +++ b/src/AjaxLogin/AjaxLogin.ts @@ -0,0 +1,33 @@ +import * as OPTIONS from './options.json'; +import {checkA11yConfirmKey, getBody} from 'ext.gadget.Util'; +import {WG_USER_NAME} from './modules/constant'; +import {addListener} from './modules/addListener'; +import {ajaxLogin} from './modules/core'; +import {windowManager} from './modules/initWindowManager'; + +void getBody().then(function initAutoLogin($body: JQuery): void { + if (WG_USER_NAME) { + return; + } + + const $loginElement: JQuery = $body.find(OPTIONS.loginElementSelector); + if (!$loginElement.length) { + return; + } + + windowManager.$element.appendTo($body); + + const fakeToastifyInstance: ToastifyInstance = { + hideToast: () => {}, + }; + + const eventListener = (event: JQuery.ClickEvent | JQuery.KeyDownEvent): void => { + if (!checkA11yConfirmKey(event)) { + return; + } + + event.preventDefault(); + ajaxLogin(fakeToastifyInstance); + }; + addListener($loginElement, eventListener); +}); diff --git a/src/AjaxLogin/LICENSE b/src/AjaxLogin/LICENSE new file mode 100644 index 00000000..6e6c0769 --- /dev/null +++ b/src/AjaxLogin/LICENSE @@ -0,0 +1,8 @@ +/** + * SPDX-License-Identifier: GPL-3.0-or-later + * _addText: '{{Gadget Header|license=GPL-3.0-or-later}}' + * + * @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/AjaxLogin} + * @author 安忆 + * @license GPL-3.0-or-later {@link https://www.qiuwenbaike.cn/wiki/H:GPL-3.0} + */ diff --git a/src/AjaxLogin/definition.json b/src/AjaxLogin/definition.json new file mode 100644 index 00000000..8c17f645 --- /dev/null +++ b/src/AjaxLogin/definition.json @@ -0,0 +1,20 @@ +{ + "enable": true, + "description": "D AjaxLogin 通过Ajax技术,直接在首页弹出登录界面,不再跳转至登录页", + "section": "browser", + "default": true, + "dependencies": [ + "ext.gadget.FilterAlteredClicks", + "ext.gadget.i18n", + "ext.gadget.React", + "ext.gadget.Toastify", + "ext.gadget.Util", + "mediawiki.api", + "mediawiki.util", + "oojs-ui-core", + "oojs-ui-windows", + "oojs-ui.styles.icons-interactions", + "oojs-ui.styles.icons-user" + ], + "hidden": true +} diff --git a/src/AjaxLogin/modules/addListener.ts b/src/AjaxLogin/modules/addListener.ts new file mode 100644 index 00000000..5997ce87 --- /dev/null +++ b/src/AjaxLogin/modules/addListener.ts @@ -0,0 +1,16 @@ +import {filterAlteredClicks} from 'ext.gadget.FilterAlteredClicks'; + +const addListener = ( + $element: JQuery, + eventListener: (event: JQuery.ClickEvent | JQuery.KeyDownEvent) => void +): void => { + $element.on( + 'click', + filterAlteredClicks((event: JQuery.ClickEvent): void => { + eventListener(event); + }) + ); + $element.on('keydown', eventListener); +}; + +export {addListener}; diff --git a/src/AjaxLogin/modules/api.ts b/src/AjaxLogin/modules/api.ts new file mode 100644 index 00000000..c076eec8 --- /dev/null +++ b/src/AjaxLogin/modules/api.ts @@ -0,0 +1,17 @@ +import * as OPTIONS from '../options.json'; +import {initMwApi} from 'ext.gadget.Util'; + +type ClientLoginParams = ApiClientLoginParams & { + logincontinue?: boolean; + logintoken: string; + loginreturnurl?: string; + username?: string; + password?: string; + rememberMe?: boolean; + retype?: string; + OATHToken?: string; +}; + +const api: mw.Api = initMwApi(`AjaxLogin/${OPTIONS.version}`); + +export {type ClientLoginParams, api}; diff --git a/src/AjaxLogin/modules/constant.ts b/src/AjaxLogin/modules/constant.ts new file mode 100644 index 00000000..6d8545c3 --- /dev/null +++ b/src/AjaxLogin/modules/constant.ts @@ -0,0 +1,3 @@ +const WG_USER_NAME: string | null = mw.config.get('wgUserName'); + +export {WG_USER_NAME}; diff --git a/src/AjaxLogin/modules/core.tsx b/src/AjaxLogin/modules/core.tsx new file mode 100644 index 00000000..4a826514 --- /dev/null +++ b/src/AjaxLogin/modules/core.tsx @@ -0,0 +1,251 @@ +import {type ClientLoginParams, api} from './api'; +import React from 'ext.gadget.React'; +import {checkValid} from './util/checkValid'; +import {generateElements} from './util/generateElements'; +import {getMessage} from './i18n'; +import {oouiPrompt} from './util/oouiPrompt'; +import {queryLoginToken} from './util/queryLoginToken'; +import {redirectOriginLoginPage} from './util/redirectOriginLoginPage'; +import {removeWindowResizeHandler} from './util/removeWindowResizeHandler'; +import {showError} from './util/showError'; +import {toastify} from 'ext.gadget.Toastify'; +import {windowManager} from './initWindowManager'; + +const ajaxLogin = (toastifyInstance: ToastifyInstance, isAgreeTos: boolean = false): void => { + const { + $agreeTos, + $forgotPassword, + $inputBox, + $rememberMe, + $tosLabel, + agreeTosCheckbox, + keepLoginCheckbox, + messageDialog, + nameInput, + pwdInput, + } = generateElements(isAgreeTos); + + let loginToken: string = ''; + const login = async ({loginContinue = false, retypePassword = false} = {}): Promise => { + try { + if (!loginContinue) { + ({loginToken, toastifyInstance} = await queryLoginToken(toastifyInstance)); + } + + const params: ClientLoginParams = { + action: 'clientlogin', + format: 'json', + formatversion: '2', + logintoken: loginToken, + loginreturnurl: location.href, + username: nameInput.getValue(), + password: pwdInput.getValue(), + }; + if (keepLoginCheckbox.isSelected()) { + params.rememberMe = true; + } + if (loginContinue || retypePassword) { + await windowManager.clearWindows(); + delete params.loginreturnurl; + delete params.username; + delete params.password; + params.logincontinue = true; + + const value: string | null = await oouiPrompt(retypePassword); + + toastifyInstance.hideToast(); + + if (value === null) { + toastify( + { + text: getMessage('Login cancelled'), + }, + 'info' + ); + void windowManager.clearWindows(); + + return; + } else if (value === '') { + if (retypePassword) { + toastifyInstance = toastify( + { + text: getMessage('EmptyPassword'), + duration: -1, + }, + 'warning' + ); + void login({ + retypePassword: true, + }); + } else { + toastifyInstance = toastify( + { + text: getMessage('Empty2FA'), + duration: -1, + }, + 'warning' + ); + void login({ + loginContinue: true, + }); + } + + return; + } + + if (retypePassword) { + params.password = value; + params.retype = value; + } else { + params.OATHToken = value; + } + } + + toastifyInstance.hideToast(); + toastifyInstance = toastify( + { + text: getMessage('Logging in'), + }, + 'info' + ); + + const response = (await api.post(params)) as { + clientlogin: { + status?: string; + messagecode?: string; + }; + }; + + toastifyInstance.hideToast(); + + if (response['clientlogin']?.status === 'PASS') { + toastify( + { + text: getMessage('Login succeed'), + }, + 'success' + ); + location.reload(); + } else if (response['clientlogin']?.messagecode) { + const {messagecode} = response['clientlogin']; + switch (messagecode) { + case 'login-throttled': + toastifyInstance = toastify( + { + text: getMessage('TooFrequent'), + duration: -1, + }, + 'error' + ); + break; + case 'oathauth-auth-ui': + void login({ + loginContinue: true, + }); + break; + case 'oathauth-login-failed': + toastifyInstance = toastify( + { + text: getMessage('Invalid 2FA verification code'), + duration: -1, + }, + 'warning' + ); + void login({ + loginContinue: true, + }); + break; + case 'resetpass-temp-emailed': + toastifyInstance = toastify( + { + text: getMessage('New password is required'), + duration: -1, + }, + 'warning' + ); + void login({ + retypePassword: true, + }); + break; + case 'wrongpassword': + toastifyInstance = toastify( + { + text: getMessage('Invalid useruame or password'), + duration: -1, + }, + 'warning' + ); + await windowManager.clearWindows(); + ajaxLogin(toastifyInstance); + break; + default: + toastify( + { + text: getMessage('Unexpected API response').replace('$1', messagecode), + close: true, + duration: -1, + }, + 'error' + ); + void redirectOriginLoginPage(); + } + } + } catch (error: unknown) { + showError(error, toastifyInstance); + void redirectOriginLoginPage(); + } + }; + + const check = async (): Promise => { + const { + isValid, + isAgreeTos: lastIsAgreeTos, + toastifyInstance: lastToastifyInstance, + } = await checkValid([agreeTosCheckbox, nameInput, pwdInput], toastifyInstance); + + toastifyInstance = lastToastifyInstance; + + if (isValid) { + void login(); + } else { + ajaxLogin(toastifyInstance, lastIsAgreeTos); + } + }; + + pwdInput.on('enter', (): void => { + void check(); + }); + messageDialog.getActionProcess = (action): OO.ui.Process => + new OO.ui.Process((): void => { + if (action === 'login') { + void check(); + } else { + toastifyInstance.hideToast(); + void windowManager.clearWindows(); + } + }); + + windowManager.addWindows([messageDialog]); + void windowManager.openWindow(messageDialog, { + actions: [ + { + action: 'login', + flags: ['primary', 'progressive'], + label: $({getMessage('Login')}), + }, + { + action: 'cancel', + flags: ['safe', 'close'], + label: $({getMessage('Cancel')}), + }, + ], + message: $( +
{[$inputBox, $forgotPassword, $rememberMe, $agreeTos, $tosLabel]}
+ ), + title: $({getMessage('Login')}), + size: 'small', + }); + removeWindowResizeHandler(); +}; + +export {ajaxLogin}; diff --git a/src/AjaxLogin/modules/i18n.ts b/src/AjaxLogin/modules/i18n.ts new file mode 100644 index 00000000..d4fe1d59 --- /dev/null +++ b/src/AjaxLogin/modules/i18n.ts @@ -0,0 +1,205 @@ +import {localize} from 'ext.gadget.i18n'; + +const getI18nMessages = () => { + return { + '6-digit number': localize({ + en: '6-digit number', + ja: '6桁の数字', + 'zh-hans': '6位数字', + 'zh-hant': '6位數字', + }), + Cancel: localize({ + en: 'Cancel', + ja: 'キャンセル', + zh: '取消', + }), + 'Enter password': localize({ + en: 'Enter password', + ja: 'パスワード', + 'zh-hans': '请输入密码', + 'zh-hant': '請輸入密碼', + }), + 'Enter 2FA verification code': localize({ + en: '2FA verification code', + ja: '2FA認証コード', + 'zh-hans': '请输入2FA验证码', + 'zh-hant': '請輸入2FA驗證碼', + }), + 'Forgot password?': localize({ + en: 'Forgot password?', + ja: 'パスワードをお忘れですか?', + 'zh-hans': '忘记密码?', + 'zh-hant': '忘記密碼?', + }), + 'Getting login token': localize({ + en: 'Getting login token', + ja: 'ログイントークンを取得しています', + 'zh-hans': '正在获取登录令牌', + 'zh-hant': '正在獲取登入權杖', + }), + 'help for I agree with the relevant terms': localize({ + en: 'When you login, it means that you have carefully read, fully understood and agreed to comply with our
Terms of Service, Personal Information Protection Policy and the Common Program.', + ja: 'ログインをすると、あなたは本サイトの『利用規約』『個人情報保護方針』『共同綱領』を十分に理解し、同意したことになります。', + 'zh-hans': + '登录时,即代表您已仔细阅读、充分了解并同意遵守本网站的《用户协议》、《个人信息保护方针》及《共同纲领》。', + 'zh-hant': + '登錄時,即代表您已仔細閱讀、充分了解並同意遵守本網站的《用戶協議》、《個人信息保護方針》及《共同綱領》。', + }), + 'I agree': localize({ + en: 'I agree', + ja: '同意する', + zh: '我同意', + }), + 'I agree with the relevant terms': localize({ + en: 'I agree with the relevant terms', + ja: '関連する規約を読み、同意', + 'zh-hans': '我已阅读并同意相关条款', + 'zh-hant': '我已閲讀並同意相關條款', + }), + 'Invalid 2FA verification code': localize({ + en: 'Invalid 2FA verification code', + ja: '2FA認証コードが間違っています', + 'zh-hans': '2FA验证码错误', + 'zh-hant': '2FA驗證碼錯誤', + }), + 'Invalid useruame or password': localize({ + en: 'Invalid useruame or password', + ja: '利用者名またはパスワードが間違っています', + 'zh-cn': '用户名或密码错误', + 'zh-hk': '用戶名稱或密碼錯誤', + 'zh-tw': '使用者名稱或密碼錯誤', + }), + 'Keep me logged in': localize({ + en: 'Keep me logged in', + ja: 'ログイン状態を保持', + 'zh-hans': '记住我的登录状态', + 'zh-hant': '記住我的登入狀態', + }), + 'Logging in': localize({ + en: 'Logging in', + ja: 'ログインしています', + 'zh-hans': '正在登录', + 'zh-hant': '正在登入', + }), + Login: localize({ + en: 'Login', + ja: 'ログイン', + 'zh-hans': '登录', + 'zh-hant': '登入', + }), + 'Login cancelled': localize({ + en: 'Login cancelled', + ja: 'ログインキャンセル', + 'zh-hans': '登录取消', + 'zh-hant': '登入取消', + }), + 'Login succeed': localize({ + en: 'Login succeed', + ja: 'ログインに成功しました', + 'zh-hans': '登录成功', + 'zh-hant': '登入成功', + }), + 'Login token getted': localize({ + en: 'Login token getted', + ja: 'ログイントークンの取得に成功しました', + 'zh-hans': '获取登录令牌成功', + 'zh-hant': '獲取登入權杖成功', + }), + 'New password': localize({ + en: 'New password', + ja: '新しいパスワード', + 'zh-hans': '新密码', + 'zh-hant': '新密碼', + }), + 'New password is required': localize({ + en: 'New password is required', + ja: '新しいパスワードを設定してください', + 'zh-hans': '需要设置新密码', + 'zh-hant': '需要設置新密碼', + }), + Password: localize({ + en: 'Password', + ja: 'パスワード', + 'zh-hans': '密码', + 'zh-hant': '密碼', + }), + 'Reset password': localize({ + en: 'Reset password', + ja: 'パスワードをリセット', + 'zh-hans': '重置密码', + 'zh-hant': '重新設定密碼', + }), + Username: localize({ + en: 'Username', + ja: '利用者名', + 'zh-cn': '用户名', + 'zh-hk': '用戶名稱', + 'zh-tw': '使用者名稱', + }), + AgreedOrNot: localize({ + en: 'Please read the relevant terms. If you agree, check the checkbox to confirm', + ja: '関連する規約をお読みいただき、同意される場合は、チェックボックスにチェックを入れて確認してください', + 'zh-hans': '请阅读相关条款。若同意,勾选复选框以确认', + 'zh-hant': '請閲讀相關條款。若同意,勾選複選框以確認', + }), + DoubleCheckAgreedOrNot: localize({ + en: 'You have carefully read, fully understood and agreed to comply with our Terms of Service, Personal Information Protection Policy and Common Program.', + ja: 'あなたは本サイトの『利用規約』『個人情報保護方針』『共同綱領』を十分に理解し、同意したことになります。', + 'zh-hans': + '您已仔细阅读、充分了解并同意遵守本网站的《用户协议》《个人信息保护方针》《共同纲领》。', + 'zh-hant': + '您已仔細閱讀、充分了解並同意遵守本網站的《用戶協議》《個人信息保護方針》《共同綱領》。', + }), + Empty2FA: localize({ + en: 'The 2FA verification code cannot be empty', + ja: '2FA認証コードが入力されていません', + 'zh-hans': '2FA验证码不能为空', + 'zh-hant': '2FA驗證碼不能爲空', + }), + EmptyPassword: localize({ + en: 'The password cannot be empty', + ja: 'パスワードが入力されていません', + 'zh-hans': '密码不能为空', + 'zh-hant': '密碼不能爲空', + }), + EmptyUsernameOrPassword: localize({ + en: 'The username or password cannot be empty', + ja: '利用者名またはパスワードが入力されていません', + 'zh-cn': '用户名或密码不能为空', + 'zh-hk': '用戶名稱或密碼不能爲空', + 'zh-tw': '使用者名稱或密碼不能爲空', + }), + 'Network error': localize({ + en: 'Network error. Redirecting...', + ja: 'ネットワークエラー、リダイレクト中...', + 'zh-hans': '网络异常。重定向中……', + 'zh-hant': '網路異常。重新導向中……', + }), + SelectedOrNot: localize({ + en: 'If selected, the login status will be kept for 6 months. If not selected, it will be kept for 1 month.', + ja: 'チェックを入れるとログイン状態が6ヶ月間保持され、入れない場合は1ヶ月間保持されます。', + 'zh-hans': '勾选则保持登录状态6个月,不勾选则保持1个月。', + 'zh-hant': '勾選则保持登入狀態6個月,不勾選則保持1個月。', + }), + TooFrequent: localize({ + en: 'The user login is too frequent, please try again in five minutes', + ja: '利用者が頻繁すぎるため、5分後に再試行してください', + 'zh-cn': '用户登录过于频繁,请五分钟后再试', + 'zh-hk': '用戶登入過於頻繁,請五分鐘後再試', + 'zh-tw': '使用者登入过于频繁,请五分钟后再试', + }), + 'Unexpected API response': localize({ + en: 'Unexpected API response: $1. Redirecting...', + ja: '予期せぬAPIの応答:$1、リダイレクト中...', + 'zh-hans': '意外的API响应:$1。重定向中……', + 'zh-hant': '意外的API響應:$1。重新導向中……', + }), + }; +}; +const i18nMessages = getI18nMessages(); + +const getMessage: GetMessages = (key) => { + return i18nMessages[key] || key; +}; + +export {getMessage}; diff --git a/src/AjaxLogin/modules/initWindowManager.ts b/src/AjaxLogin/modules/initWindowManager.ts new file mode 100644 index 00000000..c8acaed2 --- /dev/null +++ b/src/AjaxLogin/modules/initWindowManager.ts @@ -0,0 +1,7 @@ +const initWindowManager = (): OO.ui.WindowManager => { + return new OO.ui.WindowManager(); +}; + +const windowManager: OO.ui.WindowManager = initWindowManager(); + +export {windowManager}; diff --git a/src/AjaxLogin/modules/util/checkValid.tsx b/src/AjaxLogin/modules/util/checkValid.tsx new file mode 100644 index 00000000..1e39b249 --- /dev/null +++ b/src/AjaxLogin/modules/util/checkValid.tsx @@ -0,0 +1,66 @@ +import React from 'ext.gadget.React'; +import {getMessage} from '../i18n'; +import {oouiConfirm} from './oouiConfirm'; +import {toastify} from 'ext.gadget.Toastify'; +import {windowManager} from '../initWindowManager'; + +const checkValid = async ( + [agreeTosCheckbox, nameInput, pwdInput]: [OO.ui.CheckboxInputWidget, OO.ui.TextInputWidget, OO.ui.TextInputWidget], + toastifyInstance: ToastifyInstance +): Promise<{ + isAgreeTos: boolean; + isValid: boolean; + toastifyInstance: ToastifyInstance; +}> => { + let isAgreeTos: boolean = agreeTosCheckbox.isSelected(); + const isFill: boolean = ![nameInput.getValue(), pwdInput.getValue()].includes(''); + + toastifyInstance.hideToast(); + await windowManager.clearWindows(); + + if (!isAgreeTos) { + isAgreeTos = await oouiConfirm({ + message: $() as JQuery, + actions: [ + { + label: $({getMessage('Cancel')}), + action: 'cancel', + flags: ['safe', 'close'], + }, + { + label: $({getMessage('I agree')}), + action: 'accept', + flags: ['primary', 'progressive'], + }, + ], + }); + + if (!isAgreeTos) { + toastifyInstance = toastify( + { + text: getMessage('AgreedOrNot'), + duration: -1, + }, + 'info' + ); + } + } else if (!isFill) { + toastifyInstance = toastify( + { + text: getMessage('EmptyUsernameOrPassword'), + duration: -1, + }, + 'info' + ); + } + + const isValid: boolean = isAgreeTos && isFill; + + return { + isAgreeTos, + isValid, + toastifyInstance, + }; +}; + +export {checkValid}; diff --git a/src/AjaxLogin/modules/util/generateElements.tsx b/src/AjaxLogin/modules/util/generateElements.tsx new file mode 100644 index 00000000..853530e3 --- /dev/null +++ b/src/AjaxLogin/modules/util/generateElements.tsx @@ -0,0 +1,80 @@ +import React from 'ext.gadget.React'; +import {getMessage} from '../i18n'; + +const generateElements = (isAgreeTos: boolean) => { + const messageDialog: OO.ui.MessageDialog = new OO.ui.MessageDialog(); + + const nameInput: OO.ui.TextInputWidget = new OO.ui.TextInputWidget({ + icon: 'userAvatar', + placeholder: getMessage('Username'), + validate: 'non-empty', + }); + + const pwdInput: OO.ui.TextInputWidget = new OO.ui.TextInputWidget({ + icon: 'key', + placeholder: getMessage('Password'), + type: 'password', + validate: 'non-empty', + }); + + const agreeTosCheckbox: OO.ui.CheckboxInputWidget = new OO.ui.CheckboxInputWidget({ + selected: isAgreeTos, + }); + const agreeTosLayout: OO.ui.FieldLayout = new OO.ui.FieldLayout(agreeTosCheckbox, { + align: 'inline', + label: getMessage('I agree with the relevant terms'), + }); + + const keepLoginCheckbox: OO.ui.CheckboxInputWidget = new OO.ui.CheckboxInputWidget(); + const keepLoginLayout: OO.ui.FieldLayout = new OO.ui.FieldLayout(keepLoginCheckbox, { + align: 'inline', + help: getMessage('SelectedOrNot'), + label: getMessage('Keep me logged in'), + }); + + const label = ( +