Files
intotheeast-com-content/plugins/flex-objects/js/flex-objects.js
T

682 lines
2.6 MiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ 6906
() {
eval("{var toggle = document.querySelector('.filters-bar .adv-options');\nvar panel = document.querySelector('.filters-advanced');\nif (toggle && panel) {\n document.addEventListener('click', function (event) {\n if (event.target.classList.contains('adv-options') || event.target.closest('.adv-options')) {\n event.preventDefault();\n var isOpen = toggle.classList.contains('open');\n panel.classList.toggle('hide');\n toggle.classList.remove(isOpen ? 'open' : 'close');\n toggle.classList.add(isOpen ? 'close' : 'open');\n }\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjkwNi5qcyIsIm5hbWVzIjpbInRvZ2dsZSIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsInBhbmVsIiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwidGFyZ2V0IiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJjbG9zZXN0IiwicHJldmVudERlZmF1bHQiLCJpc09wZW4iLCJyZW1vdmUiLCJhZGQiXSwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL2FwcC9maWx0ZXJzL3BhbmVsLmpzPzVmODgiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgdG9nZ2xlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmZpbHRlcnMtYmFyIC5hZHYtb3B0aW9ucycpO1xuY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZmlsdGVycy1hZHZhbmNlZCcpO1xuXG5pZiAodG9nZ2xlICYmIHBhbmVsKSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2Fkdi1vcHRpb25zJykgfHwgZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5hZHYtb3B0aW9ucycpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgaXNPcGVuID0gdG9nZ2xlLmNsYXNzTGlzdC5jb250YWlucygnb3BlbicpO1xuXG4gICAgICAgICAgICBwYW5lbC5jbGFzc0xpc3QudG9nZ2xlKCdoaWRlJyk7XG4gICAgICAgICAgICB0b2dnbGUuY2xhc3NMaXN0LnJlbW92ZShpc09wZW4gPyAnb3BlbicgOiAnY2xvc2UnKTtcbiAgICAgICAgICAgIHRvZ2dsZS5jbGFzc0xpc3QuYWRkKGlzT3BlbiA/ICdjbG9zZScgOiAnb3BlbicpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLElBQU1BLE1BQU0sR0FBR0MsUUFBUSxDQUFDQyxhQUFhLENBQUMsMkJBQTJCLENBQUM7QUFDbEUsSUFBTUMsS0FBSyxHQUFHRixRQUFRLENBQUNDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQztBQUV6RCxJQUFJRixNQUFNLElBQUlHLEtBQUssRUFBRTtFQUNqQkYsUUFBUSxDQUFDRyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsVUFBQ0MsS0FBSyxFQUFLO0lBQzFDLElBQUlBLEtBQUssQ0FBQ0MsTUFBTSxDQUFDQyxTQUFTLENBQUNDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSUgsS0FBSyxDQUFDQyxNQUFNLENBQUNHLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRTtNQUN4RkosS0FBSyxDQUFDSyxjQUFjLENBQUMsQ0FBQztNQUN0QixJQUFNQyxNQUFNLEdBQUdYLE1BQU0sQ0FBQ08sU0FBUyxDQUFDQyxRQUFRLENBQUMsTUFBTSxDQUFDO01BRWhETCxLQUFLLENBQUNJLFNBQVMsQ0FBQ1AsTUFBTSxDQUFDLE1BQU0sQ0FBQztNQUM5QkEsTUFBTSxDQUFDTyxTQUFTLENBQUNLLE1BQU0sQ0FBQ0QsTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUM7TUFDbERYLE1BQU0sQ0FBQ08sU0FBUyxDQUFDTSxHQUFHLENBQUNGLE1BQU0sR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQ25EO0VBQ0osQ0FBQyxDQUFDO0FBQ04iLCJpZ25vcmVMaXN0IjpbXX0=\n//# sourceURL=webpack-internal:///6906\n\n}");
/***/ },
/***/ 8100
(__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) {
"use strict";
eval("{\n// NAMESPACE OBJECT: ./node_modules/axios/lib/platform/common/utils.js\nvar common_utils_namespaceObject = {};\n__webpack_require__.r(common_utils_namespaceObject);\n__webpack_require__.d(common_utils_namespaceObject, {\n hasBrowserEnv: () => (hasBrowserEnv),\n hasStandardBrowserEnv: () => (hasStandardBrowserEnv),\n hasStandardBrowserWebWorkerEnv: () => (hasStandardBrowserWebWorkerEnv),\n navigator: () => (_navigator),\n origin: () => (origin)\n});\n\n;// ./node_modules/vue/dist/vue.runtime.esm.js\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n/*!\n * Vue.js v2.7.16\n * (c) 2014-2023 Evan You\n * Released under the MIT License.\n */\nvar emptyObject = Object.freeze({});\nvar isArray = Array.isArray;\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef(v) {\n return v === undefined || v === null;\n}\nfunction isDef(v) {\n return v !== undefined && v !== null;\n}\nfunction isTrue(v) {\n return v === true;\n}\nfunction isFalse(v) {\n return v === false;\n}\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive(value) {\n return typeof value === 'string' || typeof value === 'number' ||\n // $flow-disable-line\n _typeof(value) === 'symbol' || typeof value === 'boolean';\n}\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n/**\n * Quick object check - this is primarily used to tell\n * objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject(obj) {\n return obj !== null && _typeof(obj) === 'object';\n}\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\nfunction toRawType(value) {\n return _toString.call(value).slice(8, -1);\n}\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject(obj) {\n return _toString.call(obj) === '[object Object]';\n}\nfunction isRegExp(v) {\n return _toString.call(v) === '[object RegExp]';\n}\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex(val) {\n var n = parseFloat(String(val));\n return n >= 0 && Math.floor(n) === n && isFinite(val);\n}\nfunction isPromise(val) {\n return isDef(val) && typeof val.then === 'function' && typeof val.catch === 'function';\n}\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction vue_runtime_esm_toString(val) {\n return val == null ? '' : Array.isArray(val) || isPlainObject(val) && val.toString === _toString ? JSON.stringify(val, replacer, 2) : String(val);\n}\nfunction replacer(_key, val) {\n // avoid circular deps from v3\n if (val && val.__v_isRef) {\n return val.value;\n }\n return val;\n}\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber(val) {\n var n = parseFloat(val);\n return isNaN(n) ? val : n;\n}\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap(str, expectsLowerCase) {\n var map = Object.create(null);\n var list = str.split(',');\n for (var i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase ? function (val) {\n return map[val.toLowerCase()];\n } : function (val) {\n return map[val];\n };\n}\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n/**\n * Remove an item from an array.\n */\nfunction remove$2(arr, item) {\n var len = arr.length;\n if (len) {\n // fast path for the only / last item\n if (item === arr[len - 1]) {\n arr.length = len - 1;\n return;\n }\n var index = arr.indexOf(item);\n if (index > -1) {\n return arr.splice(index, 1);\n }\n }\n}\n/**\n * Check whether an object has the property.\n */\nvar vue_runtime_esm_hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn(obj, key) {\n return vue_runtime_esm_hasOwnProperty.call(obj, key);\n}\n/**\n * Create a cached version of a pure function.\n */\nfunction cached(fn) {\n var cache = Object.create(null);\n return function cachedFn(str) {\n var hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n return str.replace(camelizeRE, function (_, c) {\n return c ? c.toUpperCase() : '';\n });\n});\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n});\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n return str.replace(hyphenateRE, '-$1').toLowerCase();\n});\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n/* istanbul ignore next */\nfunction polyfillBind(fn, ctx) {\n function boundFn(a) {\n var l = arguments.length;\n return l ? l > 1 ? fn.apply(ctx, arguments) : fn.call(ctx, a) : fn.call(ctx);\n }\n boundFn._length = fn.length;\n return boundFn;\n}\nfunction nativeBind(fn, ctx) {\n return fn.bind(ctx);\n}\n// @ts-expect-error bind cannot be `undefined`\nvar bind = Function.prototype.bind ? nativeBind : polyfillBind;\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray(list, start) {\n start = start || 0;\n var i = list.length - start;\n var ret = new Array(i);\n while (i--) {\n ret[i] = list[i + start];\n }\n return ret;\n}\n/**\n * Mix properties into target object.\n */\nfunction extend(to, _from) {\n for (var key in _from) {\n to[key] = _from[key];\n }\n return to;\n}\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject(arr) {\n var res = {};\n for (var i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n return res;\n}\n/* eslint-disable no-unused-vars */\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop(a, b, c) {}\n/**\n * Always return false.\n */\nvar no = function no(a, b, c) {\n return false;\n};\n/* eslint-enable no-unused-vars */\n/**\n * Return the same value.\n */\nvar identity = function identity(_) {\n return _;\n};\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual(a, b) {\n if (a === b) return true;\n var isObjectA = isObject(a);\n var isObjectB = isObject(b);\n if (isObjectA && isObjectB) {\n try {\n var isArrayA = Array.isArray(a);\n var isArrayB = Array.isArray(b);\n if (isArrayA && isArrayB) {\n return a.length === b.length && a.every(function (e, i) {\n return looseEqual(e, b[i]);\n });\n } else if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n } else if (!isArrayA && !isArrayB) {\n var keysA = Object.keys(a);\n var keysB = Object.keys(b);\n return keysA.length === keysB.length && keysA.every(function (key) {\n return looseEqual(a[key], b[key]);\n });\n } else {\n /* istanbul ignore next */\n return false;\n }\n } catch (e) {\n /* istanbul ignore next */\n return false;\n }\n } else if (!isObjectA && !isObjectB) {\n return String(a) === String(b);\n } else {\n return false;\n }\n}\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf(arr, val) {\n for (var i = 0; i < arr.length; i++) {\n if (looseEqual(arr[i], val)) return i;\n }\n return -1;\n}\n/**\n * Ensure a function is called only once.\n */\nfunction once(fn) {\n var called = false;\n return function () {\n if (!called) {\n called = true;\n fn.apply(this, arguments);\n }\n };\n}\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill\nfunction hasChanged(x, y) {\n if (x === y) {\n return x === 0 && 1 / x !== 1 / y;\n } else {\n return x === x || y === y;\n }\n}\nvar SSR_ATTR = 'data-server-rendered';\nvar ASSET_TYPES = ['component', 'directive', 'filter'];\nvar LIFECYCLE_HOOKS = ['beforeCreate', 'created', 'beforeMount', 'mounted', 'beforeUpdate', 'updated', 'beforeDestroy', 'destroyed', 'activated', 'deactivated', 'errorCaptured', 'serverPrefetch', 'renderTracked', 'renderTriggered'];\nvar config = {\n /**\n * Option merge strategies (used in core/util/options)\n */\n // $flow-disable-line\n optionMergeStrategies: Object.create(null),\n /**\n * Whether to suppress warnings.\n */\n silent: false,\n /**\n * Show production mode tip message on boot?\n */\n productionTip: \"production\" !== 'production',\n /**\n * Whether to enable devtools\n */\n devtools: \"production\" !== 'production',\n /**\n * Whether to record perf\n */\n performance: false,\n /**\n * Error handler for watcher errors\n */\n errorHandler: null,\n /**\n * Warn handler for watcher warns\n */\n warnHandler: null,\n /**\n * Ignore certain custom elements\n */\n ignoredElements: [],\n /**\n * Custom user key aliases for v-on\n */\n // $flow-disable-line\n keyCodes: Object.create(null),\n /**\n * Check if a tag is reserved so that it cannot be registered as a\n * component. This is platform-dependent and may be overwritten.\n */\n isReservedTag: no,\n /**\n * Check if an attribute is reserved so that it cannot be used as a component\n * prop. This is platform-dependent and may be overwritten.\n */\n isReservedAttr: no,\n /**\n * Check if a tag is an unknown element.\n * Platform-dependent.\n */\n isUnknownElement: no,\n /**\n * Get the namespace of an element\n */\n getTagNamespace: noop,\n /**\n * Parse the real tag name for the specific platform.\n */\n parsePlatformTagName: identity,\n /**\n * Check if an attribute must be bound using property, e.g. value\n * Platform-dependent.\n */\n mustUseProp: no,\n /**\n * Perform updates asynchronously. Intended to be used by Vue Test Utils\n * This will significantly reduce performance if set to false.\n */\n async: true,\n /**\n * Exposed for legacy reasons\n */\n _lifecycleHooks: LIFECYCLE_HOOKS\n};\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved(str) {\n var c = (str + '').charCodeAt(0);\n return c === 0x24 || c === 0x5f;\n}\n/**\n * Define a property.\n */\nfunction def(obj, key, val, enumerable) {\n Object.defineProperty(obj, key, {\n value: val,\n enumerable: !!enumerable,\n writable: true,\n configurable: true\n });\n}\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp(\"[^\".concat(unicodeRegExp.source, \".$_\\\\d]\"));\nfunction parsePath(path) {\n if (bailRE.test(path)) {\n return;\n }\n var segments = path.split('.');\n return function (obj) {\n for (var i = 0; i < segments.length; i++) {\n if (!obj) return;\n obj = obj[segments[i]];\n }\n return obj;\n };\n}\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nUA && UA.indexOf('android') > 0;\nvar isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);\nUA && /chrome\\/\\d+/.test(UA) && !isEdge;\nUA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n// Firefox has a \"watch\" function on Object.prototype...\n// @ts-expect-error firebox support\nvar nativeWatch = {}.watch;\nvar supportsPassive = false;\nif (inBrowser) {\n try {\n var opts = {};\n Object.defineProperty(opts, 'passive', {\n get: function get() {\n /* istanbul ignore next */\n supportsPassive = true;\n }\n }); // https://github.com/facebook/flow/issues/285\n window.addEventListener('test-passive', null, opts);\n } catch (e) {}\n}\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function isServerRendering() {\n if (_isServer === undefined) {\n /* istanbul ignore if */\n if (!inBrowser && typeof __webpack_require__.g !== 'undefined') {\n // detect presence of vue-server-renderer and avoid\n // Webpack shimming the process\n _isServer = __webpack_require__.g['process'] && __webpack_require__.g['process'].env.VUE_ENV === 'server';\n } else {\n _isServer = false;\n }\n }\n return _isServer;\n};\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n/* istanbul ignore next */\nfunction isNative(Ctor) {\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString());\n}\nvar hasSymbol = typeof Symbol !== 'undefined' && isNative(Symbol) && typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\nvar _Set; // $flow-disable-line\n/* istanbul ignore if */\nif (typeof Set !== 'undefined' && isNative(Set)) {\n // use native Set when available.\n _Set = Set;\n} else {\n // a non-standard Set polyfill that only works with primitive keys.\n _Set = /** @class */function () {\n function Set() {\n this.set = Object.create(null);\n }\n Set.prototype.has = function (key) {\n return this.set[key] === true;\n };\n Set.prototype.add = function (key) {\n this.set[key] = true;\n };\n Set.prototype.clear = function () {\n this.set = Object.create(null);\n };\n return Set;\n }();\n}\nvar currentInstance = null;\n/**\n * This is exposed for compatibility with v3 (e.g. some functions in VueUse\n * relies on it). Do not use this internally, just use `currentInstance`.\n *\n * @internal this function needs manual type declaration because it relies\n * on previously manually authored types from Vue 2\n */\nfunction getCurrentInstance() {\n return currentInstance && {\n proxy: currentInstance\n };\n}\n/**\n * @internal\n */\nfunction setCurrentInstance(vm) {\n if (vm === void 0) {\n vm = null;\n }\n if (!vm) currentInstance && currentInstance._scope.off();\n currentInstance = vm;\n vm && vm._scope.on();\n}\n\n/**\n * @internal\n */\nvar VNode = /** @class */function () {\n function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) {\n this.tag = tag;\n this.data = data;\n this.children = children;\n this.text = text;\n this.elm = elm;\n this.ns = undefined;\n this.context = context;\n this.fnContext = undefined;\n this.fnOptions = undefined;\n this.fnScopeId = undefined;\n this.key = data && data.key;\n this.componentOptions = componentOptions;\n this.componentInstance = undefined;\n this.parent = undefined;\n this.raw = false;\n this.isStatic = false;\n this.isRootInsert = true;\n this.isComment = false;\n this.isCloned = false;\n this.isOnce = false;\n this.asyncFactory = asyncFactory;\n this.asyncMeta = undefined;\n this.isAsyncPlaceholder = false;\n }\n Object.defineProperty(VNode.prototype, \"child\", {\n // DEPRECATED: alias for componentInstance for backwards compat.\n /* istanbul ignore next */\n get: function get() {\n return this.componentInstance;\n },\n enumerable: false,\n configurable: true\n });\n return VNode;\n}();\nvar createEmptyVNode = function createEmptyVNode(text) {\n if (text === void 0) {\n text = '';\n }\n var node = new VNode();\n node.text = text;\n node.isComment = true;\n return node;\n};\nfunction createTextVNode(val) {\n return new VNode(undefined, undefined, undefined, String(val));\n}\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode(vnode) {\n var cloned = new VNode(vnode.tag, vnode.data,\n // #7975\n // clone children array to avoid mutating original in case of cloning\n // a child.\n vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);\n cloned.ns = vnode.ns;\n cloned.isStatic = vnode.isStatic;\n cloned.key = vnode.key;\n cloned.isComment = vnode.isComment;\n cloned.fnContext = vnode.fnContext;\n cloned.fnOptions = vnode.fnOptions;\n cloned.fnScopeId = vnode.fnScopeId;\n cloned.asyncMeta = vnode.asyncMeta;\n cloned.isCloned = true;\n return cloned;\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n\nvar _assign = function __assign() {\n _assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n };\n return _assign.apply(this, arguments);\n};\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\nvar uid$2 = 0;\nvar pendingCleanupDeps = [];\nvar cleanupDeps = function cleanupDeps() {\n for (var i = 0; i < pendingCleanupDeps.length; i++) {\n var dep = pendingCleanupDeps[i];\n dep.subs = dep.subs.filter(function (s) {\n return s;\n });\n dep._pending = false;\n }\n pendingCleanupDeps.length = 0;\n};\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n * @internal\n */\nvar Dep = /** @class */function () {\n function Dep() {\n // pending subs cleanup\n this._pending = false;\n this.id = uid$2++;\n this.subs = [];\n }\n Dep.prototype.addSub = function (sub) {\n this.subs.push(sub);\n };\n Dep.prototype.removeSub = function (sub) {\n // #12696 deps with massive amount of subscribers are extremely slow to\n // clean up in Chromium\n // to workaround this, we unset the sub for now, and clear them on\n // next scheduler flush.\n this.subs[this.subs.indexOf(sub)] = null;\n if (!this._pending) {\n this._pending = true;\n pendingCleanupDeps.push(this);\n }\n };\n Dep.prototype.depend = function (info) {\n if (Dep.target) {\n Dep.target.addDep(this);\n if (false) // removed by dead control flow\n{}\n }\n };\n Dep.prototype.notify = function (info) {\n // stabilize the subscriber list first\n var subs = this.subs.filter(function (s) {\n return s;\n });\n if (false) // removed by dead control flow\n{}\n for (var i = 0, l = subs.length; i < l; i++) {\n var sub = subs[i];\n if (false) // removed by dead control flow\n{}\n sub.update();\n }\n };\n return Dep;\n}();\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\nDep.target = null;\nvar targetStack = [];\nfunction pushTarget(target) {\n targetStack.push(target);\n Dep.target = target;\n}\nfunction popTarget() {\n targetStack.pop();\n Dep.target = targetStack[targetStack.length - 1];\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\nvar methodsToPatch = ['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse'];\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n // cache original method\n var original = arrayProto[method];\n def(arrayMethods, method, function mutator() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result = original.apply(this, args);\n var ob = this.__ob__;\n var inserted;\n switch (method) {\n case 'push':\n case 'unshift':\n inserted = args;\n break;\n case 'splice':\n inserted = args.slice(2);\n break;\n }\n if (inserted) ob.observeArray(inserted);\n // notify change\n if (false) // removed by dead control flow\n{} else {\n ob.dep.notify();\n }\n return result;\n });\n});\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\nvar NO_INITIAL_VALUE = {};\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\nfunction toggleObserving(value) {\n shouldObserve = value;\n}\n// ssr mock dep\nvar mockDep = {\n notify: noop,\n depend: noop,\n addSub: noop,\n removeSub: noop\n};\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = /** @class */function () {\n function Observer(value, shallow, mock) {\n if (shallow === void 0) {\n shallow = false;\n }\n if (mock === void 0) {\n mock = false;\n }\n this.value = value;\n this.shallow = shallow;\n this.mock = mock;\n // this.value = value\n this.dep = mock ? mockDep : new Dep();\n this.vmCount = 0;\n def(value, '__ob__', this);\n if (isArray(value)) {\n if (!mock) {\n if (hasProto) {\n value.__proto__ = arrayMethods;\n /* eslint-enable no-proto */\n } else {\n for (var i = 0, l = arrayKeys.length; i < l; i++) {\n var key = arrayKeys[i];\n def(value, key, arrayMethods[key]);\n }\n }\n }\n if (!shallow) {\n this.observeArray(value);\n }\n } else {\n /**\n * Walk through all properties and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\n var keys = Object.keys(value);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n defineReactive(value, key, NO_INITIAL_VALUE, undefined, shallow, mock);\n }\n }\n }\n /**\n * Observe a list of Array items.\n */\n Observer.prototype.observeArray = function (value) {\n for (var i = 0, l = value.length; i < l; i++) {\n observe(value[i], false, this.mock);\n }\n };\n return Observer;\n}();\n// helpers\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe(value, shallow, ssrMockReactivity) {\n if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n return value.__ob__;\n }\n if (shouldObserve && (ssrMockReactivity || !isServerRendering()) && (isArray(value) || isPlainObject(value)) && Object.isExtensible(value) && !value.__v_skip /* ReactiveFlags.SKIP */ && !isRef(value) && !(value instanceof VNode)) {\n return new Observer(value, shallow, ssrMockReactivity);\n }\n}\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive(obj, key, val, customSetter, shallow, mock, observeEvenIfShallow) {\n if (observeEvenIfShallow === void 0) {\n observeEvenIfShallow = false;\n }\n var dep = new Dep();\n var property = Object.getOwnPropertyDescriptor(obj, key);\n if (property && property.configurable === false) {\n return;\n }\n // cater for pre-defined getter/setters\n var getter = property && property.get;\n var setter = property && property.set;\n if ((!getter || setter) && (val === NO_INITIAL_VALUE || arguments.length === 2)) {\n val = obj[key];\n }\n var childOb = shallow ? val && val.__ob__ : observe(val, false, mock);\n Object.defineProperty(obj, key, {\n enumerable: true,\n configurable: true,\n get: function reactiveGetter() {\n var value = getter ? getter.call(obj) : val;\n if (Dep.target) {\n if (false) // removed by dead control flow\n{} else {\n dep.depend();\n }\n if (childOb) {\n childOb.dep.depend();\n if (isArray(value)) {\n dependArray(value);\n }\n }\n }\n return isRef(value) && !shallow ? value.value : value;\n },\n set: function reactiveSetter(newVal) {\n var value = getter ? getter.call(obj) : val;\n if (!hasChanged(value, newVal)) {\n return;\n }\n if (false) // removed by dead control flow\n{}\n if (setter) {\n setter.call(obj, newVal);\n } else if (getter) {\n // #7981: for accessor properties without setter\n return;\n } else if (!shallow && isRef(value) && !isRef(newVal)) {\n value.value = newVal;\n return;\n } else {\n val = newVal;\n }\n childOb = shallow ? newVal && newVal.__ob__ : observe(newVal, false, mock);\n if (false) // removed by dead control flow\n{} else {\n dep.notify();\n }\n }\n });\n return dep;\n}\nfunction set(target, key, val) {\n if (false) // removed by dead control flow\n{}\n if (isReadonly(target)) {\n false && 0;\n return;\n }\n var ob = target.__ob__;\n if (isArray(target) && isValidArrayIndex(key)) {\n target.length = Math.max(target.length, key);\n target.splice(key, 1, val);\n // when mocking for SSR, array methods are not hijacked\n if (ob && !ob.shallow && ob.mock) {\n observe(val, false, true);\n }\n return val;\n }\n if (key in target && !(key in Object.prototype)) {\n target[key] = val;\n return val;\n }\n if (target._isVue || ob && ob.vmCount) {\n false && 0;\n return val;\n }\n if (!ob) {\n target[key] = val;\n return val;\n }\n defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);\n if (false) // removed by dead control flow\n{} else {\n ob.dep.notify();\n }\n return val;\n}\nfunction del(target, key) {\n if (false) // removed by dead control flow\n{}\n if (isArray(target) && isValidArrayIndex(key)) {\n target.splice(key, 1);\n return;\n }\n var ob = target.__ob__;\n if (target._isVue || ob && ob.vmCount) {\n false && 0;\n return;\n }\n if (isReadonly(target)) {\n false && 0;\n return;\n }\n if (!hasOwn(target, key)) {\n return;\n }\n delete target[key];\n if (!ob) {\n return;\n }\n if (false) // removed by dead control flow\n{} else {\n ob.dep.notify();\n }\n}\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray(value) {\n for (var e = void 0, i = 0, l = value.length; i < l; i++) {\n e = value[i];\n if (e && e.__ob__) {\n e.__ob__.dep.depend();\n }\n if (isArray(e)) {\n dependArray(e);\n }\n }\n}\nfunction reactive(target) {\n makeReactive(target, false);\n return target;\n}\n/**\n * Return a shallowly-reactive copy of the original object, where only the root\n * level properties are reactive. It also does not auto-unwrap refs (even at the\n * root level).\n */\nfunction shallowReactive(target) {\n makeReactive(target, true);\n def(target, \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */, true);\n return target;\n}\nfunction makeReactive(target, shallow) {\n // if trying to observe a readonly proxy, return the readonly version.\n if (!isReadonly(target)) {\n if (false) // removed by dead control flow\n{ var existingOb; }\n var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */);\n if (false) // removed by dead control flow\n{}\n }\n}\nfunction isReactive(value) {\n if (isReadonly(value)) {\n return isReactive(value[\"__v_raw\" /* ReactiveFlags.RAW */]);\n }\n return !!(value && value.__ob__);\n}\nfunction isShallow(value) {\n return !!(value && value.__v_isShallow);\n}\nfunction isReadonly(value) {\n return !!(value && value.__v_isReadonly);\n}\nfunction isProxy(value) {\n return isReactive(value) || isReadonly(value);\n}\nfunction toRaw(observed) {\n var raw = observed && observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n // non-extensible objects won't be observed anyway\n if (Object.isExtensible(value)) {\n def(value, \"__v_skip\" /* ReactiveFlags.SKIP */, true);\n }\n return value;\n}\n/**\n * @internal\n */\nfunction isCollectionType(value) {\n var type = toRawType(value);\n return type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet';\n}\n\n/**\n * @internal\n */\nvar RefFlag = \"__v_isRef\";\nfunction isRef(r) {\n return !!(r && r.__v_isRef === true);\n}\nfunction ref$1(value) {\n return createRef(value, false);\n}\nfunction shallowRef(value) {\n return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n if (isRef(rawValue)) {\n return rawValue;\n }\n var ref = {};\n def(ref, RefFlag, true);\n def(ref, \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */, shallow);\n def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering()));\n return ref;\n}\nfunction triggerRef(ref) {\n if (false) // removed by dead control flow\n{}\n if (false) // removed by dead control flow\n{} else {\n ref.dep && ref.dep.notify();\n }\n}\nfunction unref(ref) {\n return isRef(ref) ? ref.value : ref;\n}\nfunction proxyRefs(objectWithRefs) {\n if (isReactive(objectWithRefs)) {\n return objectWithRefs;\n }\n var proxy = {};\n var keys = Object.keys(objectWithRefs);\n for (var i = 0; i < keys.length; i++) {\n proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]);\n }\n return proxy;\n}\nfunction proxyWithRefUnwrap(target, source, key) {\n Object.defineProperty(target, key, {\n enumerable: true,\n configurable: true,\n get: function get() {\n var val = source[key];\n if (isRef(val)) {\n return val.value;\n } else {\n var ob = val && val.__ob__;\n if (ob) ob.dep.depend();\n return val;\n }\n },\n set: function set(value) {\n var oldValue = source[key];\n if (isRef(oldValue) && !isRef(value)) {\n oldValue.value = value;\n } else {\n source[key] = value;\n }\n }\n });\n}\nfunction customRef(factory) {\n var dep = new Dep();\n var _a = factory(function () {\n if (false) // removed by dead control flow\n{} else {\n dep.depend();\n }\n }, function () {\n if (false) // removed by dead control flow\n{} else {\n dep.notify();\n }\n }),\n get = _a.get,\n set = _a.set;\n var ref = {\n get value() {\n return get();\n },\n set value(newVal) {\n set(newVal);\n }\n };\n def(ref, RefFlag, true);\n return ref;\n}\nfunction toRefs(object) {\n if (false) // removed by dead control flow\n{}\n var ret = isArray(object) ? new Array(object.length) : {};\n for (var key in object) {\n ret[key] = toRef(object, key);\n }\n return ret;\n}\nfunction toRef(object, key, defaultValue) {\n var val = object[key];\n if (isRef(val)) {\n return val;\n }\n var ref = {\n get value() {\n var val = object[key];\n return val === undefined ? defaultValue : val;\n },\n set value(newVal) {\n object[key] = newVal;\n }\n };\n def(ref, RefFlag, true);\n return ref;\n}\nvar rawToReadonlyFlag = \"__v_rawToReadonly\";\nvar rawToShallowReadonlyFlag = \"__v_rawToShallowReadonly\";\nfunction readonly(target) {\n return createReadonly(target, false);\n}\nfunction createReadonly(target, shallow) {\n if (!isPlainObject(target)) {\n if (false) // removed by dead control flow\n{}\n return target;\n }\n if (false) // removed by dead control flow\n{}\n // already a readonly object\n if (isReadonly(target)) {\n return target;\n }\n // already has a readonly proxy\n var existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag;\n var existingProxy = target[existingFlag];\n if (existingProxy) {\n return existingProxy;\n }\n var proxy = Object.create(Object.getPrototypeOf(target));\n def(target, existingFlag, proxy);\n def(proxy, \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */, true);\n def(proxy, \"__v_raw\" /* ReactiveFlags.RAW */, target);\n if (isRef(target)) {\n def(proxy, RefFlag, true);\n }\n if (shallow || isShallow(target)) {\n def(proxy, \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */, true);\n }\n var keys = Object.keys(target);\n for (var i = 0; i < keys.length; i++) {\n defineReadonlyProperty(proxy, target, keys[i], shallow);\n }\n return proxy;\n}\nfunction defineReadonlyProperty(proxy, target, key, shallow) {\n Object.defineProperty(proxy, key, {\n enumerable: true,\n configurable: true,\n get: function get() {\n var val = target[key];\n return shallow || !isPlainObject(val) ? val : readonly(val);\n },\n set: function set() {\n false && 0;\n }\n });\n}\n/**\n * Returns a reactive-copy of the original object, where only the root level\n * properties are readonly, and does NOT unwrap refs nor recursively convert\n * returned properties.\n * This is used for creating the props proxy object for stateful components.\n */\nfunction shallowReadonly(target) {\n return createReadonly(target, true);\n}\nfunction computed(getterOrOptions, debugOptions) {\n var getter;\n var setter;\n var onlyGetter = isFunction(getterOrOptions);\n if (onlyGetter) {\n getter = getterOrOptions;\n setter = false ? 0 : noop;\n } else {\n getter = getterOrOptions.get;\n setter = getterOrOptions.set;\n }\n var watcher = isServerRendering() ? null : new Watcher(currentInstance, getter, noop, {\n lazy: true\n });\n if (false) // removed by dead control flow\n{}\n var ref = {\n // some libs rely on the presence effect for checking computed refs\n // from normal refs, but the implementation doesn't matter\n effect: watcher,\n get value() {\n if (watcher) {\n if (watcher.dirty) {\n watcher.evaluate();\n }\n if (Dep.target) {\n if (false) // removed by dead control flow\n{}\n watcher.depend();\n }\n return watcher.value;\n } else {\n return getter();\n }\n },\n set value(newVal) {\n setter(newVal);\n }\n };\n def(ref, RefFlag, true);\n def(ref, \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */, onlyGetter);\n return ref;\n}\nvar WATCHER = \"watcher\";\nvar WATCHER_CB = \"\".concat(WATCHER, \" callback\");\nvar WATCHER_GETTER = \"\".concat(WATCHER, \" getter\");\nvar WATCHER_CLEANUP = \"\".concat(WATCHER, \" cleanup\");\n// Simple effect.\nfunction watchEffect(effect, options) {\n return doWatch(effect, null, options);\n}\nfunction watchPostEffect(effect, options) {\n return doWatch(effect, null, false ? 0 : {\n flush: 'post'\n });\n}\nfunction watchSyncEffect(effect, options) {\n return doWatch(effect, null, false ? 0 : {\n flush: 'sync'\n });\n}\n// initial value for watchers to trigger on undefined initial values\nvar INITIAL_WATCHER_VALUE = (/* unused pure expression or super */ null && ({}));\n// implementation\nfunction watch(source, cb, options) {\n if (false) // removed by dead control flow\n{}\n return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, _a) {\n var _b = _a === void 0 ? emptyObject : _a,\n immediate = _b.immediate,\n deep = _b.deep,\n _c = _b.flush,\n flush = _c === void 0 ? 'pre' : _c,\n onTrack = _b.onTrack,\n onTrigger = _b.onTrigger;\n if (false) // removed by dead control flow\n{}\n var warnInvalidSource = function warnInvalidSource(s) {\n warn(\"Invalid watch source: \".concat(s, \". A watch source can only be a getter/effect \") + \"function, a ref, a reactive object, or an array of these types.\");\n };\n var instance = currentInstance;\n var call = function call(fn, type, args) {\n if (args === void 0) {\n args = null;\n }\n var res = invokeWithErrorHandling(fn, null, args, instance, type);\n if (deep && res && res.__ob__) res.__ob__.dep.depend();\n return res;\n };\n var getter;\n var forceTrigger = false;\n var isMultiSource = false;\n if (isRef(source)) {\n getter = function getter() {\n return source.value;\n };\n forceTrigger = isShallow(source);\n } else if (isReactive(source)) {\n getter = function getter() {\n source.__ob__.dep.depend();\n return source;\n };\n deep = true;\n } else if (isArray(source)) {\n isMultiSource = true;\n forceTrigger = source.some(function (s) {\n return isReactive(s) || isShallow(s);\n });\n getter = function getter() {\n return source.map(function (s) {\n if (isRef(s)) {\n return s.value;\n } else if (isReactive(s)) {\n s.__ob__.dep.depend();\n return traverse(s);\n } else if (isFunction(s)) {\n return call(s, WATCHER_GETTER);\n } else {\n false && 0;\n }\n });\n };\n } else if (isFunction(source)) {\n if (cb) {\n // getter with cb\n getter = function getter() {\n return call(source, WATCHER_GETTER);\n };\n } else {\n // no cb -> simple effect\n getter = function getter() {\n if (instance && instance._isDestroyed) {\n return;\n }\n if (cleanup) {\n cleanup();\n }\n return call(source, WATCHER, [onCleanup]);\n };\n }\n } else {\n getter = noop;\n false && 0;\n }\n if (cb && deep) {\n var baseGetter_1 = getter;\n getter = function getter() {\n return traverse(baseGetter_1());\n };\n }\n var cleanup;\n var onCleanup = function onCleanup(fn) {\n cleanup = watcher.onStop = function () {\n call(fn, WATCHER_CLEANUP);\n };\n };\n // in SSR there is no need to setup an actual effect, and it should be noop\n // unless it's eager\n if (isServerRendering()) {\n // we will also not call the invalidate callback (+ runner is not set up)\n onCleanup = noop;\n if (!cb) {\n getter();\n } else if (immediate) {\n call(cb, WATCHER_CB, [getter(), isMultiSource ? [] : undefined, onCleanup]);\n }\n return noop;\n }\n var watcher = new Watcher(currentInstance, getter, noop, {\n lazy: true\n });\n watcher.noRecurse = !cb;\n var oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;\n // overwrite default run\n watcher.run = function () {\n if (!watcher.active) {\n return;\n }\n if (cb) {\n // watch(source, cb)\n var newValue = watcher.get();\n if (deep || forceTrigger || (isMultiSource ? newValue.some(function (v, i) {\n return hasChanged(v, oldValue[i]);\n }) : hasChanged(newValue, oldValue))) {\n // cleanup before running cb again\n if (cleanup) {\n cleanup();\n }\n call(cb, WATCHER_CB, [newValue,\n // pass undefined as the old value when it's changed for the first time\n oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue, onCleanup]);\n oldValue = newValue;\n }\n } else {\n // watchEffect\n watcher.get();\n }\n };\n if (flush === 'sync') {\n watcher.update = watcher.run;\n } else if (flush === 'post') {\n watcher.post = true;\n watcher.update = function () {\n return queueWatcher(watcher);\n };\n } else {\n // pre\n watcher.update = function () {\n if (instance && instance === currentInstance && !instance._isMounted) {\n // pre-watcher triggered before\n var buffer = instance._preWatchers || (instance._preWatchers = []);\n if (buffer.indexOf(watcher) < 0) buffer.push(watcher);\n } else {\n queueWatcher(watcher);\n }\n };\n }\n if (false) // removed by dead control flow\n{}\n // initial run\n if (cb) {\n if (immediate) {\n watcher.run();\n } else {\n oldValue = watcher.get();\n }\n } else if (flush === 'post' && instance) {\n instance.$once('hook:mounted', function () {\n return watcher.get();\n });\n } else {\n watcher.get();\n }\n return function () {\n watcher.teardown();\n };\n}\nvar activeEffectScope;\nvar EffectScope = /** @class */function () {\n function EffectScope(detached) {\n if (detached === void 0) {\n detached = false;\n }\n this.detached = detached;\n /**\n * @internal\n */\n this.active = true;\n /**\n * @internal\n */\n this.effects = [];\n /**\n * @internal\n */\n this.cleanups = [];\n this.parent = activeEffectScope;\n if (!detached && activeEffectScope) {\n this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;\n }\n }\n EffectScope.prototype.run = function (fn) {\n if (this.active) {\n var currentEffectScope = activeEffectScope;\n try {\n activeEffectScope = this;\n return fn();\n } finally {\n activeEffectScope = currentEffectScope;\n }\n } else if (false) // removed by dead control flow\n{}\n };\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n EffectScope.prototype.on = function () {\n activeEffectScope = this;\n };\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n EffectScope.prototype.off = function () {\n activeEffectScope = this.parent;\n };\n EffectScope.prototype.stop = function (fromParent) {\n if (this.active) {\n var i = void 0,\n l = void 0;\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].teardown();\n }\n for (i = 0, l = this.cleanups.length; i < l; i++) {\n this.cleanups[i]();\n }\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].stop(true);\n }\n }\n // nested scope, dereference from parent to avoid memory leaks\n if (!this.detached && this.parent && !fromParent) {\n // optimized O(1) removal\n var last = this.parent.scopes.pop();\n if (last && last !== this) {\n this.parent.scopes[this.index] = last;\n last.index = this.index;\n }\n }\n this.parent = undefined;\n this.active = false;\n }\n };\n return EffectScope;\n}();\nfunction effectScope(detached) {\n return new EffectScope(detached);\n}\n/**\n * @internal\n */\nfunction recordEffectScope(effect, scope) {\n if (scope === void 0) {\n scope = activeEffectScope;\n }\n if (scope && scope.active) {\n scope.effects.push(effect);\n }\n}\nfunction getCurrentScope() {\n return activeEffectScope;\n}\nfunction onScopeDispose(fn) {\n if (activeEffectScope) {\n activeEffectScope.cleanups.push(fn);\n } else if (false) // removed by dead control flow\n{}\n}\nfunction provide(key, value) {\n if (!currentInstance) {\n if (false) // removed by dead control flow\n{}\n } else {\n // TS doesn't allow symbol as index type\n resolveProvided(currentInstance)[key] = value;\n }\n}\nfunction resolveProvided(vm) {\n // by default an instance inherits its parent's provides object\n // but when it needs to provide values of its own, it creates its\n // own provides object using parent provides object as prototype.\n // this way in `inject` we can simply look up injections from direct\n // parent and let the prototype chain do the work.\n var existing = vm._provided;\n var parentProvides = vm.$parent && vm.$parent._provided;\n if (parentProvides === existing) {\n return vm._provided = Object.create(parentProvides);\n } else {\n return existing;\n }\n}\nfunction inject(key, defaultValue, treatDefaultAsFactory) {\n if (treatDefaultAsFactory === void 0) {\n treatDefaultAsFactory = false;\n }\n // fallback to `currentRenderingInstance` so that this can be called in\n // a functional component\n var instance = currentInstance;\n if (instance) {\n // #2400\n // to support `app.use` plugins,\n // fallback to appContext's `provides` if the instance is at root\n var provides = instance.$parent && instance.$parent._provided;\n if (provides && key in provides) {\n // TS doesn't allow symbol as index type\n return provides[key];\n } else if (arguments.length > 1) {\n return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance) : defaultValue;\n } else if (false) // removed by dead control flow\n{}\n } else if (false) // removed by dead control flow\n{}\n}\nvar normalizeEvent = cached(function (name) {\n var passive = name.charAt(0) === '&';\n name = passive ? name.slice(1) : name;\n var once = name.charAt(0) === '~'; // Prefixed last, checked first\n name = once ? name.slice(1) : name;\n var capture = name.charAt(0) === '!';\n name = capture ? name.slice(1) : name;\n return {\n name: name,\n once: once,\n capture: capture,\n passive: passive\n };\n});\nfunction createFnInvoker(fns, vm) {\n function invoker() {\n var fns = invoker.fns;\n if (isArray(fns)) {\n var cloned = fns.slice();\n for (var i = 0; i < cloned.length; i++) {\n invokeWithErrorHandling(cloned[i], null, arguments, vm, \"v-on handler\");\n }\n } else {\n // return handler return value for single handlers\n return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\");\n }\n }\n invoker.fns = fns;\n return invoker;\n}\nfunction updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {\n var name, cur, old, event;\n for (name in on) {\n cur = on[name];\n old = oldOn[name];\n event = normalizeEvent(name);\n if (isUndef(cur)) {\n false && 0;\n } else if (isUndef(old)) {\n if (isUndef(cur.fns)) {\n cur = on[name] = createFnInvoker(cur, vm);\n }\n if (isTrue(event.once)) {\n cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n }\n add(event.name, cur, event.capture, event.passive, event.params);\n } else if (cur !== old) {\n old.fns = cur;\n on[name] = old;\n }\n }\n for (name in oldOn) {\n if (isUndef(on[name])) {\n event = normalizeEvent(name);\n remove(event.name, oldOn[name], event.capture);\n }\n }\n}\nfunction mergeVNodeHook(def, hookKey, hook) {\n if (def instanceof VNode) {\n def = def.data.hook || (def.data.hook = {});\n }\n var invoker;\n var oldHook = def[hookKey];\n function wrappedHook() {\n hook.apply(this, arguments);\n // important: remove merged hook to ensure it's called only once\n // and prevent memory leak\n remove$2(invoker.fns, wrappedHook);\n }\n if (isUndef(oldHook)) {\n // no existing hook\n invoker = createFnInvoker([wrappedHook]);\n } else {\n /* istanbul ignore if */\n if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n // already a merged invoker\n invoker = oldHook;\n invoker.fns.push(wrappedHook);\n } else {\n // existing plain hook\n invoker = createFnInvoker([oldHook, wrappedHook]);\n }\n }\n invoker.merged = true;\n def[hookKey] = invoker;\n}\nfunction extractPropsFromVNodeData(data, Ctor, tag) {\n // we are only extracting raw values here.\n // validation and default values are handled in the child\n // component itself.\n var propOptions = Ctor.options.props;\n if (isUndef(propOptions)) {\n return;\n }\n var res = {};\n var attrs = data.attrs,\n props = data.props;\n if (isDef(attrs) || isDef(props)) {\n for (var key in propOptions) {\n var altKey = hyphenate(key);\n if (false) // removed by dead control flow\n{ var keyInLowerCase; }\n checkProp(res, props, key, altKey, true) || checkProp(res, attrs, key, altKey, false);\n }\n }\n return res;\n}\nfunction checkProp(res, hash, key, altKey, preserve) {\n if (isDef(hash)) {\n if (hasOwn(hash, key)) {\n res[key] = hash[key];\n if (!preserve) {\n delete hash[key];\n }\n return true;\n } else if (hasOwn(hash, altKey)) {\n res[key] = hash[altKey];\n if (!preserve) {\n delete hash[altKey];\n }\n return true;\n }\n }\n return false;\n}\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array<VNode>. There are\n// two cases where extra normalization is needed:\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren(children) {\n for (var i = 0; i < children.length; i++) {\n if (isArray(children[i])) {\n return Array.prototype.concat.apply([], children);\n }\n }\n return children;\n}\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g. <template>, <slot>, v-for, or when the children is provided by user\n// with hand-written render functions / JSX. In such cases a full normalization\n// is needed to cater to all possible types of children values.\nfunction normalizeChildren(children) {\n return isPrimitive(children) ? [createTextVNode(children)] : isArray(children) ? normalizeArrayChildren(children) : undefined;\n}\nfunction isTextNode(node) {\n return isDef(node) && isDef(node.text) && isFalse(node.isComment);\n}\nfunction normalizeArrayChildren(children, nestedIndex) {\n var res = [];\n var i, c, lastIndex, last;\n for (i = 0; i < children.length; i++) {\n c = children[i];\n if (isUndef(c) || typeof c === 'boolean') continue;\n lastIndex = res.length - 1;\n last = res[lastIndex];\n // nested\n if (isArray(c)) {\n if (c.length > 0) {\n c = normalizeArrayChildren(c, \"\".concat(nestedIndex || '', \"_\").concat(i));\n // merge adjacent text nodes\n if (isTextNode(c[0]) && isTextNode(last)) {\n res[lastIndex] = createTextVNode(last.text + c[0].text);\n c.shift();\n }\n res.push.apply(res, c);\n }\n } else if (isPrimitive(c)) {\n if (isTextNode(last)) {\n // merge adjacent text nodes\n // this is necessary for SSR hydration because text nodes are\n // essentially merged when rendered to HTML strings\n res[lastIndex] = createTextVNode(last.text + c);\n } else if (c !== '') {\n // convert primitive to vnode\n res.push(createTextVNode(c));\n }\n } else {\n if (isTextNode(c) && isTextNode(last)) {\n // merge adjacent text nodes\n res[lastIndex] = createTextVNode(last.text + c.text);\n } else {\n // default key for nested array children (likely generated by v-for)\n if (isTrue(children._isVList) && isDef(c.tag) && isUndef(c.key) && isDef(nestedIndex)) {\n c.key = \"__vlist\".concat(nestedIndex, \"_\").concat(i, \"__\");\n }\n res.push(c);\n }\n }\n }\n return res;\n}\n\n/**\n * Runtime helper for rendering v-for lists.\n */\nfunction renderList(val, render) {\n var ret = null,\n i,\n l,\n keys,\n key;\n if (isArray(val) || typeof val === 'string') {\n ret = new Array(val.length);\n for (i = 0, l = val.length; i < l; i++) {\n ret[i] = render(val[i], i);\n }\n } else if (typeof val === 'number') {\n ret = new Array(val);\n for (i = 0; i < val; i++) {\n ret[i] = render(i + 1, i);\n }\n } else if (isObject(val)) {\n if (hasSymbol && val[Symbol.iterator]) {\n ret = [];\n var iterator = val[Symbol.iterator]();\n var result = iterator.next();\n while (!result.done) {\n ret.push(render(result.value, ret.length));\n result = iterator.next();\n }\n } else {\n keys = Object.keys(val);\n ret = new Array(keys.length);\n for (i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n ret[i] = render(val[key], key, i);\n }\n }\n }\n if (!isDef(ret)) {\n ret = [];\n }\n ret._isVList = true;\n return ret;\n}\n\n/**\n * Runtime helper for rendering <slot>\n */\nfunction renderSlot(name, fallbackRender, props, bindObject) {\n var scopedSlotFn = this.$scopedSlots[name];\n var nodes;\n if (scopedSlotFn) {\n // scoped slot\n props = props || {};\n if (bindObject) {\n if (false) // removed by dead control flow\n{}\n props = extend(extend({}, bindObject), props);\n }\n nodes = scopedSlotFn(props) || (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);\n } else {\n nodes = this.$slots[name] || (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);\n }\n var target = props && props.slot;\n if (target) {\n return this.$createElement('template', {\n slot: target\n }, nodes);\n } else {\n return nodes;\n }\n}\n\n/**\n * Runtime helper for resolving filters\n */\nfunction resolveFilter(id) {\n return resolveAsset(this.$options, 'filters', id, true) || identity;\n}\nfunction isKeyNotMatch(expect, actual) {\n if (isArray(expect)) {\n return expect.indexOf(actual) === -1;\n } else {\n return expect !== actual;\n }\n}\n/**\n * Runtime helper for checking keyCodes from config.\n * exposed as Vue.prototype._k\n * passing in eventKeyName as last argument separately for backwards compat\n */\nfunction checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) {\n var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\n if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\n return isKeyNotMatch(builtInKeyName, eventKeyName);\n } else if (mappedKeyCode) {\n return isKeyNotMatch(mappedKeyCode, eventKeyCode);\n } else if (eventKeyName) {\n return hyphenate(eventKeyName) !== key;\n }\n return eventKeyCode === undefined;\n}\n\n/**\n * Runtime helper for merging v-bind=\"object\" into a VNode's data.\n */\nfunction bindObjectProps(data, tag, value, asProp, isSync) {\n if (value) {\n if (!isObject(value)) {\n false && 0;\n } else {\n if (isArray(value)) {\n value = toObject(value);\n }\n var hash = void 0;\n var _loop_1 = function _loop_1(key) {\n if (key === 'class' || key === 'style' || isReservedAttribute(key)) {\n hash = data;\n } else {\n var type = data.attrs && data.attrs.type;\n hash = asProp || config.mustUseProp(tag, type, key) ? data.domProps || (data.domProps = {}) : data.attrs || (data.attrs = {});\n }\n var camelizedKey = camelize(key);\n var hyphenatedKey = hyphenate(key);\n if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\n hash[key] = value[key];\n if (isSync) {\n var on = data.on || (data.on = {});\n on[\"update:\".concat(key)] = function ($event) {\n value[key] = $event;\n };\n }\n }\n };\n for (var key in value) {\n _loop_1(key);\n }\n }\n }\n return data;\n}\n\n/**\n * Runtime helper for rendering static trees.\n */\nfunction renderStatic(index, isInFor) {\n var cached = this._staticTrees || (this._staticTrees = []);\n var tree = cached[index];\n // if has already-rendered static tree and not inside v-for,\n // we can reuse the same tree.\n if (tree && !isInFor) {\n return tree;\n }\n // otherwise, render a fresh tree.\n tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates\n );\n markStatic(tree, \"__static__\".concat(index), false);\n return tree;\n}\n/**\n * Runtime helper for v-once.\n * Effectively it means marking the node as static with a unique key.\n */\nfunction markOnce(tree, index, key) {\n markStatic(tree, \"__once__\".concat(index).concat(key ? \"_\".concat(key) : \"\"), true);\n return tree;\n}\nfunction markStatic(tree, key, isOnce) {\n if (isArray(tree)) {\n for (var i = 0; i < tree.length; i++) {\n if (tree[i] && typeof tree[i] !== 'string') {\n markStaticNode(tree[i], \"\".concat(key, \"_\").concat(i), isOnce);\n }\n }\n } else {\n markStaticNode(tree, key, isOnce);\n }\n}\nfunction markStaticNode(node, key, isOnce) {\n node.isStatic = true;\n node.key = key;\n node.isOnce = isOnce;\n}\nfunction bindObjectListeners(data, value) {\n if (value) {\n if (!isPlainObject(value)) {\n false && 0;\n } else {\n var on = data.on = data.on ? extend({}, data.on) : {};\n for (var key in value) {\n var existing = on[key];\n var ours = value[key];\n on[key] = existing ? [].concat(existing, ours) : ours;\n }\n }\n }\n return data;\n}\nfunction resolveScopedSlots(fns, res,\n// the following are added in 2.6\nhasDynamicKeys, contentHashKey) {\n res = res || {\n $stable: !hasDynamicKeys\n };\n for (var i = 0; i < fns.length; i++) {\n var slot = fns[i];\n if (isArray(slot)) {\n resolveScopedSlots(slot, res, hasDynamicKeys);\n } else if (slot) {\n // marker for reverse proxying v-slot without scope on this.$slots\n // @ts-expect-error\n if (slot.proxy) {\n // @ts-expect-error\n slot.fn.proxy = true;\n }\n res[slot.key] = slot.fn;\n }\n }\n if (contentHashKey) {\n res.$key = contentHashKey;\n }\n return res;\n}\n\n// helper to process dynamic keys for dynamic arguments in v-bind and v-on.\nfunction bindDynamicKeys(baseObj, values) {\n for (var i = 0; i < values.length; i += 2) {\n var key = values[i];\n if (typeof key === 'string' && key) {\n baseObj[values[i]] = values[i + 1];\n } else if (false) // removed by dead control flow\n{}\n }\n return baseObj;\n}\n// helper to dynamically append modifier runtime markers to event names.\n// ensure only append when value is already string, otherwise it will be cast\n// to string and cause the type check to miss.\nfunction prependModifier(value, symbol) {\n return typeof value === 'string' ? symbol + value : value;\n}\nfunction installRenderHelpers(target) {\n target._o = markOnce;\n target._n = toNumber;\n target._s = vue_runtime_esm_toString;\n target._l = renderList;\n target._t = renderSlot;\n target._q = looseEqual;\n target._i = looseIndexOf;\n target._m = renderStatic;\n target._f = resolveFilter;\n target._k = checkKeyCodes;\n target._b = bindObjectProps;\n target._v = createTextVNode;\n target._e = createEmptyVNode;\n target._u = resolveScopedSlots;\n target._g = bindObjectListeners;\n target._d = bindDynamicKeys;\n target._p = prependModifier;\n}\n\n/**\n * Runtime helper for resolving raw children VNodes into a slot object.\n */\nfunction resolveSlots(children, context) {\n if (!children || !children.length) {\n return {};\n }\n var slots = {};\n for (var i = 0, l = children.length; i < l; i++) {\n var child = children[i];\n var data = child.data;\n // remove slot attribute if the node is resolved as a Vue slot node\n if (data && data.attrs && data.attrs.slot) {\n delete data.attrs.slot;\n }\n // named slots should only be respected if the vnode was rendered in the\n // same context.\n if ((child.context === context || child.fnContext === context) && data && data.slot != null) {\n var name_1 = data.slot;\n var slot = slots[name_1] || (slots[name_1] = []);\n if (child.tag === 'template') {\n slot.push.apply(slot, child.children || []);\n } else {\n slot.push(child);\n }\n } else {\n (slots.default || (slots.default = [])).push(child);\n }\n }\n // ignore slots that contains only whitespace\n for (var name_2 in slots) {\n if (slots[name_2].every(isWhitespace)) {\n delete slots[name_2];\n }\n }\n return slots;\n}\nfunction isWhitespace(node) {\n return node.isComment && !node.asyncFactory || node.text === ' ';\n}\nfunction isAsyncPlaceholder(node) {\n // @ts-expect-error not really boolean type\n return node.isComment && node.asyncFactory;\n}\nfunction normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) {\n var res;\n var hasNormalSlots = Object.keys(normalSlots).length > 0;\n var isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots;\n var key = scopedSlots && scopedSlots.$key;\n if (!scopedSlots) {\n res = {};\n } else if (scopedSlots._normalized) {\n // fast path 1: child component re-render only, parent did not change\n return scopedSlots._normalized;\n } else if (isStable && prevScopedSlots && prevScopedSlots !== emptyObject && key === prevScopedSlots.$key && !hasNormalSlots && !prevScopedSlots.$hasNormal) {\n // fast path 2: stable scoped slots w/ no normal slots to proxy,\n // only need to normalize once\n return prevScopedSlots;\n } else {\n res = {};\n for (var key_1 in scopedSlots) {\n if (scopedSlots[key_1] && key_1[0] !== '$') {\n res[key_1] = normalizeScopedSlot(ownerVm, normalSlots, key_1, scopedSlots[key_1]);\n }\n }\n }\n // expose normal slots on scopedSlots\n for (var key_2 in normalSlots) {\n if (!(key_2 in res)) {\n res[key_2] = proxyNormalSlot(normalSlots, key_2);\n }\n }\n // avoriaz seems to mock a non-extensible $scopedSlots object\n // and when that is passed down this would cause an error\n if (scopedSlots && Object.isExtensible(scopedSlots)) {\n scopedSlots._normalized = res;\n }\n def(res, '$stable', isStable);\n def(res, '$key', key);\n def(res, '$hasNormal', hasNormalSlots);\n return res;\n}\nfunction normalizeScopedSlot(vm, normalSlots, key, fn) {\n var normalized = function normalized() {\n var cur = currentInstance;\n setCurrentInstance(vm);\n var res = arguments.length ? fn.apply(null, arguments) : fn({});\n res = res && _typeof(res) === 'object' && !isArray(res) ? [res] // single vnode\n : normalizeChildren(res);\n var vnode = res && res[0];\n setCurrentInstance(cur);\n return res && (!vnode || res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode)) // #9658, #10391\n ? undefined : res;\n };\n // this is a slot using the new v-slot syntax without scope. although it is\n // compiled as a scoped slot, render fn users would expect it to be present\n // on this.$slots because the usage is semantically a normal slot.\n if (fn.proxy) {\n Object.defineProperty(normalSlots, key, {\n get: normalized,\n enumerable: true,\n configurable: true\n });\n }\n return normalized;\n}\nfunction proxyNormalSlot(slots, key) {\n return function () {\n return slots[key];\n };\n}\nfunction initSetup(vm) {\n var options = vm.$options;\n var setup = options.setup;\n if (setup) {\n var ctx = vm._setupContext = createSetupContext(vm);\n setCurrentInstance(vm);\n pushTarget();\n var setupResult = invokeWithErrorHandling(setup, null, [vm._props || shallowReactive({}), ctx], vm, \"setup\");\n popTarget();\n setCurrentInstance();\n if (isFunction(setupResult)) {\n // render function\n // @ts-ignore\n options.render = setupResult;\n } else if (isObject(setupResult)) {\n // bindings\n if (false) // removed by dead control flow\n{}\n vm._setupState = setupResult;\n // __sfc indicates compiled bindings from <script setup>\n if (!setupResult.__sfc) {\n for (var key in setupResult) {\n if (!isReserved(key)) {\n proxyWithRefUnwrap(vm, setupResult, key);\n } else if (false) // removed by dead control flow\n{}\n }\n } else {\n // exposed for compiled render fn\n var proxy = vm._setupProxy = {};\n for (var key in setupResult) {\n if (key !== '__sfc') {\n proxyWithRefUnwrap(proxy, setupResult, key);\n }\n }\n }\n } else if (false) // removed by dead control flow\n{}\n }\n}\nfunction createSetupContext(vm) {\n var exposeCalled = false;\n return {\n get attrs() {\n if (!vm._attrsProxy) {\n var proxy = vm._attrsProxy = {};\n def(proxy, '_v_attr_proxy', true);\n syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs');\n }\n return vm._attrsProxy;\n },\n get listeners() {\n if (!vm._listenersProxy) {\n var proxy = vm._listenersProxy = {};\n syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners');\n }\n return vm._listenersProxy;\n },\n get slots() {\n return initSlotsProxy(vm);\n },\n emit: bind(vm.$emit, vm),\n expose: function expose(exposed) {\n if (false) // removed by dead control flow\n{}\n if (exposed) {\n Object.keys(exposed).forEach(function (key) {\n return proxyWithRefUnwrap(vm, exposed, key);\n });\n }\n }\n };\n}\nfunction syncSetupProxy(to, from, prev, instance, type) {\n var changed = false;\n for (var key in from) {\n if (!(key in to)) {\n changed = true;\n defineProxyAttr(to, key, instance, type);\n } else if (from[key] !== prev[key]) {\n changed = true;\n }\n }\n for (var key in to) {\n if (!(key in from)) {\n changed = true;\n delete to[key];\n }\n }\n return changed;\n}\nfunction defineProxyAttr(proxy, key, instance, type) {\n Object.defineProperty(proxy, key, {\n enumerable: true,\n configurable: true,\n get: function get() {\n return instance[type][key];\n }\n });\n}\nfunction initSlotsProxy(vm) {\n if (!vm._slotsProxy) {\n syncSetupSlots(vm._slotsProxy = {}, vm.$scopedSlots);\n }\n return vm._slotsProxy;\n}\nfunction syncSetupSlots(to, from) {\n for (var key in from) {\n to[key] = from[key];\n }\n for (var key in to) {\n if (!(key in from)) {\n delete to[key];\n }\n }\n}\n/**\n * @internal use manual type def because public setup context type relies on\n * legacy VNode types\n */\nfunction useSlots() {\n return getContext().slots;\n}\n/**\n * @internal use manual type def because public setup context type relies on\n * legacy VNode types\n */\nfunction useAttrs() {\n return getContext().attrs;\n}\n/**\n * Vue 2 only\n * @internal use manual type def because public setup context type relies on\n * legacy VNode types\n */\nfunction useListeners() {\n return getContext().listeners;\n}\nfunction getContext() {\n if (false) // removed by dead control flow\n{}\n var vm = currentInstance;\n return vm._setupContext || (vm._setupContext = createSetupContext(vm));\n}\n/**\n * Runtime helper for merging default declarations. Imported by compiled code\n * only.\n * @internal\n */\nfunction mergeDefaults(raw, defaults) {\n var props = isArray(raw) ? raw.reduce(function (normalized, p) {\n return normalized[p] = {}, normalized;\n }, {}) : raw;\n for (var key in defaults) {\n var opt = props[key];\n if (opt) {\n if (isArray(opt) || isFunction(opt)) {\n props[key] = {\n type: opt,\n default: defaults[key]\n };\n } else {\n opt.default = defaults[key];\n }\n } else if (opt === null) {\n props[key] = {\n default: defaults[key]\n };\n } else if (false) // removed by dead control flow\n{}\n }\n return props;\n}\nfunction initRender(vm) {\n vm._vnode = null; // the root of the child tree\n vm._staticTrees = null; // v-once cached trees\n var options = vm.$options;\n var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree\n var renderContext = parentVnode && parentVnode.context;\n vm.$slots = resolveSlots(options._renderChildren, renderContext);\n vm.$scopedSlots = parentVnode ? normalizeScopedSlots(vm.$parent, parentVnode.data.scopedSlots, vm.$slots) : emptyObject;\n // bind the createElement fn to this instance\n // so that we get proper render context inside it.\n // args order: tag, data, children, normalizationType, alwaysNormalize\n // internal version is used by render functions compiled from templates\n // @ts-expect-error\n vm._c = function (a, b, c, d) {\n return createElement$1(vm, a, b, c, d, false);\n };\n // normalization is always applied for the public version, used in\n // user-written render functions.\n // @ts-expect-error\n vm.$createElement = function (a, b, c, d) {\n return createElement$1(vm, a, b, c, d, true);\n };\n // $attrs & $listeners are exposed for easier HOC creation.\n // they need to be reactive so that HOCs using them are always updated\n var parentData = parentVnode && parentVnode.data;\n /* istanbul ignore else */\n if (false) // removed by dead control flow\n{} else {\n defineReactive(vm, '$attrs', parentData && parentData.attrs || emptyObject, null, true);\n defineReactive(vm, '$listeners', options._parentListeners || emptyObject, null, true);\n }\n}\nvar currentRenderingInstance = null;\nfunction renderMixin(Vue) {\n // install runtime convenience helpers\n installRenderHelpers(Vue.prototype);\n Vue.prototype.$nextTick = function (fn) {\n return nextTick(fn, this);\n };\n Vue.prototype._render = function () {\n var vm = this;\n var _a = vm.$options,\n render = _a.render,\n _parentVnode = _a._parentVnode;\n if (_parentVnode && vm._isMounted) {\n vm.$scopedSlots = normalizeScopedSlots(vm.$parent, _parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots);\n if (vm._slotsProxy) {\n syncSetupSlots(vm._slotsProxy, vm.$scopedSlots);\n }\n }\n // set parent vnode. this allows render functions to have access\n // to the data on the placeholder node.\n vm.$vnode = _parentVnode;\n // render self\n var prevInst = currentInstance;\n var prevRenderInst = currentRenderingInstance;\n var vnode;\n try {\n setCurrentInstance(vm);\n currentRenderingInstance = vm;\n vnode = render.call(vm._renderProxy, vm.$createElement);\n } catch (e) {\n handleError(e, vm, \"render\");\n // return error render result,\n // or previous vnode to prevent render error causing blank component\n /* istanbul ignore else */\n if (false) // removed by dead control flow\n{} else {\n vnode = vm._vnode;\n }\n } finally {\n currentRenderingInstance = prevRenderInst;\n setCurrentInstance(prevInst);\n }\n // if the returned array contains only a single node, allow it\n if (isArray(vnode) && vnode.length === 1) {\n vnode = vnode[0];\n }\n // return empty vnode in case the render function errored out\n if (!(vnode instanceof VNode)) {\n if (false) // removed by dead control flow\n{}\n vnode = createEmptyVNode();\n }\n // set parent\n vnode.parent = _parentVnode;\n return vnode;\n };\n}\nfunction ensureCtor(comp, base) {\n if (comp.__esModule || hasSymbol && comp[Symbol.toStringTag] === 'Module') {\n comp = comp.default;\n }\n return isObject(comp) ? base.extend(comp) : comp;\n}\nfunction createAsyncPlaceholder(factory, data, context, children, tag) {\n var node = createEmptyVNode();\n node.asyncFactory = factory;\n node.asyncMeta = {\n data: data,\n context: context,\n children: children,\n tag: tag\n };\n return node;\n}\nfunction resolveAsyncComponent(factory, baseCtor) {\n if (isTrue(factory.error) && isDef(factory.errorComp)) {\n return factory.errorComp;\n }\n if (isDef(factory.resolved)) {\n return factory.resolved;\n }\n var owner = currentRenderingInstance;\n if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\n // already pending\n factory.owners.push(owner);\n }\n if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\n return factory.loadingComp;\n }\n if (owner && !isDef(factory.owners)) {\n var owners_1 = factory.owners = [owner];\n var sync_1 = true;\n var timerLoading_1 = null;\n var timerTimeout_1 = null;\n owner.$on('hook:destroyed', function () {\n return remove$2(owners_1, owner);\n });\n var forceRender_1 = function forceRender_1(renderCompleted) {\n for (var i = 0, l = owners_1.length; i < l; i++) {\n owners_1[i].$forceUpdate();\n }\n if (renderCompleted) {\n owners_1.length = 0;\n if (timerLoading_1 !== null) {\n clearTimeout(timerLoading_1);\n timerLoading_1 = null;\n }\n if (timerTimeout_1 !== null) {\n clearTimeout(timerTimeout_1);\n timerTimeout_1 = null;\n }\n }\n };\n var resolve = once(function (res) {\n // cache resolved\n factory.resolved = ensureCtor(res, baseCtor);\n // invoke callbacks only if this is not a synchronous resolve\n // (async resolves are shimmed as synchronous during SSR)\n if (!sync_1) {\n forceRender_1(true);\n } else {\n owners_1.length = 0;\n }\n });\n var reject_1 = once(function (reason) {\n false && 0;\n if (isDef(factory.errorComp)) {\n factory.error = true;\n forceRender_1(true);\n }\n });\n var res_1 = factory(resolve, reject_1);\n if (isObject(res_1)) {\n if (isPromise(res_1)) {\n // () => Promise\n if (isUndef(factory.resolved)) {\n res_1.then(resolve, reject_1);\n }\n } else if (isPromise(res_1.component)) {\n res_1.component.then(resolve, reject_1);\n if (isDef(res_1.error)) {\n factory.errorComp = ensureCtor(res_1.error, baseCtor);\n }\n if (isDef(res_1.loading)) {\n factory.loadingComp = ensureCtor(res_1.loading, baseCtor);\n if (res_1.delay === 0) {\n factory.loading = true;\n } else {\n // @ts-expect-error NodeJS timeout type\n timerLoading_1 = setTimeout(function () {\n timerLoading_1 = null;\n if (isUndef(factory.resolved) && isUndef(factory.error)) {\n factory.loading = true;\n forceRender_1(false);\n }\n }, res_1.delay || 200);\n }\n }\n if (isDef(res_1.timeout)) {\n // @ts-expect-error NodeJS timeout type\n timerTimeout_1 = setTimeout(function () {\n timerTimeout_1 = null;\n if (isUndef(factory.resolved)) {\n reject_1( false ? 0 : null);\n }\n }, res_1.timeout);\n }\n }\n }\n sync_1 = false;\n // return in case resolved synchronously\n return factory.loading ? factory.loadingComp : factory.resolved;\n }\n}\nfunction getFirstComponentChild(children) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n var c = children[i];\n if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\n return c;\n }\n }\n }\n}\nvar SIMPLE_NORMALIZE = 1;\nvar ALWAYS_NORMALIZE = 2;\n// wrapper function for providing a more flexible interface\n// without getting yelled at by flow\nfunction createElement$1(context, tag, data, children, normalizationType, alwaysNormalize) {\n if (isArray(data) || isPrimitive(data)) {\n normalizationType = children;\n children = data;\n data = undefined;\n }\n if (isTrue(alwaysNormalize)) {\n normalizationType = ALWAYS_NORMALIZE;\n }\n return _createElement(context, tag, data, children, normalizationType);\n}\nfunction _createElement(context, tag, data, children, normalizationType) {\n if (isDef(data) && isDef(data.__ob__)) {\n false && 0;\n return createEmptyVNode();\n }\n // object syntax in v-bind\n if (isDef(data) && isDef(data.is)) {\n tag = data.is;\n }\n if (!tag) {\n // in case of component :is set to falsy value\n return createEmptyVNode();\n }\n // warn against non-primitive key\n if (false) // removed by dead control flow\n{}\n // support single function children as default scoped slot\n if (isArray(children) && isFunction(children[0])) {\n data = data || {};\n data.scopedSlots = {\n default: children[0]\n };\n children.length = 0;\n }\n if (normalizationType === ALWAYS_NORMALIZE) {\n children = normalizeChildren(children);\n } else if (normalizationType === SIMPLE_NORMALIZE) {\n children = simpleNormalizeChildren(children);\n }\n var vnode, ns;\n if (typeof tag === 'string') {\n var Ctor = void 0;\n ns = context.$vnode && context.$vnode.ns || config.getTagNamespace(tag);\n if (config.isReservedTag(tag)) {\n // platform built-in elements\n if (false) // removed by dead control flow\n{}\n vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context);\n } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\n // component\n vnode = createComponent(Ctor, data, context, children, tag);\n } else {\n // unknown or unlisted namespaced elements\n // check at runtime because it may get assigned a namespace when its\n // parent normalizes children\n vnode = new VNode(tag, data, children, undefined, undefined, context);\n }\n } else {\n // direct component options / constructor\n vnode = createComponent(tag, data, context, children);\n }\n if (isArray(vnode)) {\n return vnode;\n } else if (isDef(vnode)) {\n if (isDef(ns)) applyNS(vnode, ns);\n if (isDef(data)) registerDeepBindings(data);\n return vnode;\n } else {\n return createEmptyVNode();\n }\n}\nfunction applyNS(vnode, ns, force) {\n vnode.ns = ns;\n if (vnode.tag === 'foreignObject') {\n // use default namespace inside foreignObject\n ns = undefined;\n force = true;\n }\n if (isDef(vnode.children)) {\n for (var i = 0, l = vnode.children.length; i < l; i++) {\n var child = vnode.children[i];\n if (isDef(child.tag) && (isUndef(child.ns) || isTrue(force) && child.tag !== 'svg')) {\n applyNS(child, ns, force);\n }\n }\n }\n}\n// ref #5318\n// necessary to ensure parent re-render when deep bindings like :style and\n// :class are used on slot nodes\nfunction registerDeepBindings(data) {\n if (isObject(data.style)) {\n traverse(data.style);\n }\n if (isObject(data.class)) {\n traverse(data.class);\n }\n}\n\n/**\n * @internal this function needs manual public type declaration because it relies\n * on previously manually authored types from Vue 2\n */\nfunction h(type, props, children) {\n if (!currentInstance) {\n false && 0;\n }\n return createElement$1(currentInstance, type, props, children, 2, true);\n}\nfunction handleError(err, vm, info) {\n // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n // See: https://github.com/vuejs/vuex/issues/1505\n pushTarget();\n try {\n if (vm) {\n var cur = vm;\n while (cur = cur.$parent) {\n var hooks = cur.$options.errorCaptured;\n if (hooks) {\n for (var i = 0; i < hooks.length; i++) {\n try {\n var capture = hooks[i].call(cur, err, vm, info) === false;\n if (capture) return;\n } catch (e) {\n globalHandleError(e, cur, 'errorCaptured hook');\n }\n }\n }\n }\n }\n globalHandleError(err, vm, info);\n } finally {\n popTarget();\n }\n}\nfunction invokeWithErrorHandling(handler, context, args, vm, info) {\n var res;\n try {\n res = args ? handler.apply(context, args) : handler.call(context);\n if (res && !res._isVue && isPromise(res) && !res._handled) {\n res.catch(function (e) {\n return handleError(e, vm, info + \" (Promise/async)\");\n });\n res._handled = true;\n }\n } catch (e) {\n handleError(e, vm, info);\n }\n return res;\n}\nfunction globalHandleError(err, vm, info) {\n if (config.errorHandler) {\n try {\n return config.errorHandler.call(null, err, vm, info);\n } catch (e) {\n // if the user intentionally throws the original error in the handler,\n // do not log it twice\n if (e !== err) {\n logError(e, null, 'config.errorHandler');\n }\n }\n }\n logError(err, vm, info);\n}\nfunction logError(err, vm, info) {\n if (false) // removed by dead control flow\n{}\n /* istanbul ignore else */\n if (inBrowser && typeof console !== 'undefined') {\n console.error(err);\n } else {\n throw err;\n }\n}\n\n/* globals MutationObserver */\nvar isUsingMicroTask = false;\nvar callbacks = [];\nvar pending = false;\nfunction flushCallbacks() {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks.length = 0;\n for (var i = 0; i < copies.length; i++) {\n copies[i]();\n }\n}\n// Here we have async deferring wrappers using microtasks.\n// In 2.5 we used (macro) tasks (in combination with microtasks).\n// However, it has subtle problems when state is changed right before repaint\n// (e.g. #6813, out-in transitions).\n// Also, using (macro) tasks in event handler would cause some weird behaviors\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n// So we now use microtasks everywhere, again.\n// A major drawback of this tradeoff is that there are some scenarios\n// where microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690, which have workarounds)\n// or even between bubbling of the same event (#6566).\nvar timerFunc;\n// The nextTick behavior leverages the microtask queue, which can be accessed\n// via either native Promise.then or MutationObserver.\n// MutationObserver has wider support, however it is seriously bugged in\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n// completely stops working after triggering a few times... so, if native\n// Promise is available, we will use it:\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n var p_1 = Promise.resolve();\n timerFunc = function timerFunc() {\n p_1.then(flushCallbacks);\n // In problematic UIWebViews, Promise.then doesn't completely break, but\n // it can get stuck in a weird state where callbacks are pushed into the\n // microtask queue but the queue isn't being flushed, until the browser\n // needs to do some other work, e.g. handle a timer. Therefore we can\n // \"force\" the microtask queue to be flushed by adding an empty timer.\n if (isIOS) setTimeout(noop);\n };\n isUsingMicroTask = true;\n} else if (!isIE && typeof MutationObserver !== 'undefined' && (isNative(MutationObserver) ||\n// PhantomJS and iOS 7.x\nMutationObserver.toString() === '[object MutationObserverConstructor]')) {\n // Use MutationObserver where native Promise is not available,\n // e.g. PhantomJS, iOS7, Android 4.4\n // (#6466 MutationObserver is unreliable in IE11)\n var counter_1 = 1;\n var observer = new MutationObserver(flushCallbacks);\n var textNode_1 = document.createTextNode(String(counter_1));\n observer.observe(textNode_1, {\n characterData: true\n });\n timerFunc = function timerFunc() {\n counter_1 = (counter_1 + 1) % 2;\n textNode_1.data = String(counter_1);\n };\n isUsingMicroTask = true;\n} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n // Fallback to setImmediate.\n // Technically it leverages the (macro) task queue,\n // but it is still a better choice than setTimeout.\n timerFunc = function timerFunc() {\n setImmediate(flushCallbacks);\n };\n} else {\n // Fallback to setTimeout.\n timerFunc = function timerFunc() {\n setTimeout(flushCallbacks, 0);\n };\n}\n/**\n * @internal\n */\nfunction nextTick(cb, ctx) {\n var _resolve;\n callbacks.push(function () {\n if (cb) {\n try {\n cb.call(ctx);\n } catch (e) {\n handleError(e, ctx, 'nextTick');\n }\n } else if (_resolve) {\n _resolve(ctx);\n }\n });\n if (!pending) {\n pending = true;\n timerFunc();\n }\n // $flow-disable-line\n if (!cb && typeof Promise !== 'undefined') {\n return new Promise(function (resolve) {\n _resolve = resolve;\n });\n }\n}\nfunction useCssModule(name) {\n if (name === void 0) {\n name = '$style';\n }\n /* istanbul ignore else */\n {\n if (!currentInstance) {\n false && 0;\n return emptyObject;\n }\n var mod = currentInstance[name];\n if (!mod) {\n false && 0;\n return emptyObject;\n }\n return mod;\n }\n}\n\n/**\n * Runtime helper for SFC's CSS variable injection feature.\n * @private\n */\nfunction useCssVars(getter) {\n if (!inBrowser && !false) return;\n var instance = currentInstance;\n if (!instance) {\n false && 0;\n return;\n }\n watchPostEffect(function () {\n var el = instance.$el;\n var vars = getter(instance, instance._setupProxy);\n if (el && el.nodeType === 1) {\n var style = el.style;\n for (var key in vars) {\n style.setProperty(\"--\".concat(key), vars[key]);\n }\n }\n });\n}\n\n/**\n * v3-compatible async component API.\n * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts\n * because it relies on existing manual types\n */\nfunction defineAsyncComponent(source) {\n if (isFunction(source)) {\n source = {\n loader: source\n };\n }\n var loader = source.loader,\n loadingComponent = source.loadingComponent,\n errorComponent = source.errorComponent,\n _a = source.delay,\n delay = _a === void 0 ? 200 : _a,\n timeout = source.timeout,\n // undefined = never times out\n _b = source.suspensible,\n // undefined = never times out\n suspensible = _b === void 0 ? false : _b,\n // in Vue 3 default is true\n userOnError = source.onError;\n if (false) // removed by dead control flow\n{}\n var pendingRequest = null;\n var retries = 0;\n var retry = function retry() {\n retries++;\n pendingRequest = null;\n return load();\n };\n var load = function load() {\n var thisRequest;\n return pendingRequest || (thisRequest = pendingRequest = loader().catch(function (err) {\n err = err instanceof Error ? err : new Error(String(err));\n if (userOnError) {\n return new Promise(function (resolve, reject) {\n var userRetry = function userRetry() {\n return resolve(retry());\n };\n var userFail = function userFail() {\n return reject(err);\n };\n userOnError(err, userRetry, userFail, retries + 1);\n });\n } else {\n throw err;\n }\n }).then(function (comp) {\n if (thisRequest !== pendingRequest && pendingRequest) {\n return pendingRequest;\n }\n if (false) // removed by dead control flow\n{}\n // interop module default\n if (comp && (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {\n comp = comp.default;\n }\n if (false) // removed by dead control flow\n{}\n return comp;\n }));\n };\n return function () {\n var component = load();\n return {\n component: component,\n delay: delay,\n timeout: timeout,\n error: errorComponent,\n loading: loadingComponent\n };\n };\n}\nfunction createLifeCycle(hookName) {\n return function (fn, target) {\n if (target === void 0) {\n target = currentInstance;\n }\n if (!target) {\n false && 0;\n return;\n }\n return injectHook(target, hookName, fn);\n };\n}\nfunction formatName(name) {\n if (name === 'beforeDestroy') {\n name = 'beforeUnmount';\n } else if (name === 'destroyed') {\n name = 'unmounted';\n }\n return \"on\".concat(name[0].toUpperCase() + name.slice(1));\n}\nfunction injectHook(instance, hookName, fn) {\n var options = instance.$options;\n options[hookName] = mergeLifecycleHook(options[hookName], fn);\n}\nvar onBeforeMount = createLifeCycle('beforeMount');\nvar onMounted = createLifeCycle('mounted');\nvar onBeforeUpdate = createLifeCycle('beforeUpdate');\nvar onUpdated = createLifeCycle('updated');\nvar onBeforeUnmount = createLifeCycle('beforeDestroy');\nvar onUnmounted = createLifeCycle('destroyed');\nvar onActivated = createLifeCycle('activated');\nvar onDeactivated = createLifeCycle('deactivated');\nvar onServerPrefetch = createLifeCycle('serverPrefetch');\nvar onRenderTracked = createLifeCycle('renderTracked');\nvar onRenderTriggered = createLifeCycle('renderTriggered');\nvar injectErrorCapturedHook = createLifeCycle('errorCaptured');\nfunction onErrorCaptured(hook, target) {\n if (target === void 0) {\n target = currentInstance;\n }\n injectErrorCapturedHook(hook, target);\n}\n\n/**\n * Note: also update dist/vue.runtime.mjs when adding new exports to this file.\n */\nvar version = '2.7.16';\n/**\n * @internal type is manually declared in <root>/types/v3-define-component.d.ts\n */\nfunction defineComponent(options) {\n return options;\n}\nvar seenObjects = new _Set();\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nfunction traverse(val) {\n _traverse(val, seenObjects);\n seenObjects.clear();\n return val;\n}\nfunction _traverse(val, seen) {\n var i, keys;\n var isA = isArray(val);\n if (!isA && !isObject(val) || val.__v_skip /* ReactiveFlags.SKIP */ || Object.isFrozen(val) || val instanceof VNode) {\n return;\n }\n if (val.__ob__) {\n var depId = val.__ob__.dep.id;\n if (seen.has(depId)) {\n return;\n }\n seen.add(depId);\n }\n if (isA) {\n i = val.length;\n while (i--) _traverse(val[i], seen);\n } else if (isRef(val)) {\n _traverse(val.value, seen);\n } else {\n keys = Object.keys(val);\n i = keys.length;\n while (i--) _traverse(val[keys[i]], seen);\n }\n}\nvar uid$1 = 0;\n/**\n * A watcher parses an expression, collects dependencies,\n * and fires callback when the expression value changes.\n * This is used for both the $watch() api and directives.\n * @internal\n */\nvar Watcher = /** @class */function () {\n function Watcher(vm, expOrFn, cb, options, isRenderWatcher) {\n recordEffectScope(this,\n // if the active effect scope is manually created (not a component scope),\n // prioritize it\n activeEffectScope && !activeEffectScope._vm ? activeEffectScope : vm ? vm._scope : undefined);\n if ((this.vm = vm) && isRenderWatcher) {\n vm._watcher = this;\n }\n // options\n if (options) {\n this.deep = !!options.deep;\n this.user = !!options.user;\n this.lazy = !!options.lazy;\n this.sync = !!options.sync;\n this.before = options.before;\n if (false) // removed by dead control flow\n{}\n } else {\n this.deep = this.user = this.lazy = this.sync = false;\n }\n this.cb = cb;\n this.id = ++uid$1; // uid for batching\n this.active = true;\n this.post = false;\n this.dirty = this.lazy; // for lazy watchers\n this.deps = [];\n this.newDeps = [];\n this.depIds = new _Set();\n this.newDepIds = new _Set();\n this.expression = false ? 0 : '';\n // parse expression for getter\n if (isFunction(expOrFn)) {\n this.getter = expOrFn;\n } else {\n this.getter = parsePath(expOrFn);\n if (!this.getter) {\n this.getter = noop;\n false && 0;\n }\n }\n this.value = this.lazy ? undefined : this.get();\n }\n /**\n * Evaluate the getter, and re-collect dependencies.\n */\n Watcher.prototype.get = function () {\n pushTarget(this);\n var value;\n var vm = this.vm;\n try {\n value = this.getter.call(vm, vm);\n } catch (e) {\n if (this.user) {\n handleError(e, vm, \"getter for watcher \\\"\".concat(this.expression, \"\\\"\"));\n } else {\n throw e;\n }\n } finally {\n // \"touch\" every property so they are all tracked as\n // dependencies for deep watching\n if (this.deep) {\n traverse(value);\n }\n popTarget();\n this.cleanupDeps();\n }\n return value;\n };\n /**\n * Add a dependency to this directive.\n */\n Watcher.prototype.addDep = function (dep) {\n var id = dep.id;\n if (!this.newDepIds.has(id)) {\n this.newDepIds.add(id);\n this.newDeps.push(dep);\n if (!this.depIds.has(id)) {\n dep.addSub(this);\n }\n }\n };\n /**\n * Clean up for dependency collection.\n */\n Watcher.prototype.cleanupDeps = function () {\n var i = this.deps.length;\n while (i--) {\n var dep = this.deps[i];\n if (!this.newDepIds.has(dep.id)) {\n dep.removeSub(this);\n }\n }\n var tmp = this.depIds;\n this.depIds = this.newDepIds;\n this.newDepIds = tmp;\n this.newDepIds.clear();\n tmp = this.deps;\n this.deps = this.newDeps;\n this.newDeps = tmp;\n this.newDeps.length = 0;\n };\n /**\n * Subscriber interface.\n * Will be called when a dependency changes.\n */\n Watcher.prototype.update = function () {\n /* istanbul ignore else */\n if (this.lazy) {\n this.dirty = true;\n } else if (this.sync) {\n this.run();\n } else {\n queueWatcher(this);\n }\n };\n /**\n * Scheduler job interface.\n * Will be called by the scheduler.\n */\n Watcher.prototype.run = function () {\n if (this.active) {\n var value = this.get();\n if (value !== this.value ||\n // Deep watchers and watchers on Object/Arrays should fire even\n // when the value is the same, because the value may\n // have mutated.\n isObject(value) || this.deep) {\n // set new value\n var oldValue = this.value;\n this.value = value;\n if (this.user) {\n var info = \"callback for watcher \\\"\".concat(this.expression, \"\\\"\");\n invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info);\n } else {\n this.cb.call(this.vm, value, oldValue);\n }\n }\n }\n };\n /**\n * Evaluate the value of the watcher.\n * This only gets called for lazy watchers.\n */\n Watcher.prototype.evaluate = function () {\n this.value = this.get();\n this.dirty = false;\n };\n /**\n * Depend on all deps collected by this watcher.\n */\n Watcher.prototype.depend = function () {\n var i = this.deps.length;\n while (i--) {\n this.deps[i].depend();\n }\n };\n /**\n * Remove self from all dependencies' subscriber list.\n */\n Watcher.prototype.teardown = function () {\n if (this.vm && !this.vm._isBeingDestroyed) {\n remove$2(this.vm._scope.effects, this);\n }\n if (this.active) {\n var i = this.deps.length;\n while (i--) {\n this.deps[i].removeSub(this);\n }\n this.active = false;\n if (this.onStop) {\n this.onStop();\n }\n }\n };\n return Watcher;\n}();\nvar mark;\nvar measure;\nif (false) // removed by dead control flow\n{ var perf_1; }\nfunction initEvents(vm) {\n vm._events = Object.create(null);\n vm._hasHookEvent = false;\n // init parent attached events\n var listeners = vm.$options._parentListeners;\n if (listeners) {\n updateComponentListeners(vm, listeners);\n }\n}\nvar target$1;\nfunction add$1(event, fn) {\n target$1.$on(event, fn);\n}\nfunction remove$1(event, fn) {\n target$1.$off(event, fn);\n}\nfunction createOnceHandler$1(event, fn) {\n var _target = target$1;\n return function onceHandler() {\n var res = fn.apply(null, arguments);\n if (res !== null) {\n _target.$off(event, onceHandler);\n }\n };\n}\nfunction updateComponentListeners(vm, listeners, oldListeners) {\n target$1 = vm;\n updateListeners(listeners, oldListeners || {}, add$1, remove$1, createOnceHandler$1, vm);\n target$1 = undefined;\n}\nfunction eventsMixin(Vue) {\n var hookRE = /^hook:/;\n Vue.prototype.$on = function (event, fn) {\n var vm = this;\n if (isArray(event)) {\n for (var i = 0, l = event.length; i < l; i++) {\n vm.$on(event[i], fn);\n }\n } else {\n (vm._events[event] || (vm._events[event] = [])).push(fn);\n // optimize hook:event cost by using a boolean flag marked at registration\n // instead of a hash lookup\n if (hookRE.test(event)) {\n vm._hasHookEvent = true;\n }\n }\n return vm;\n };\n Vue.prototype.$once = function (event, fn) {\n var vm = this;\n function on() {\n vm.$off(event, on);\n fn.apply(vm, arguments);\n }\n on.fn = fn;\n vm.$on(event, on);\n return vm;\n };\n Vue.prototype.$off = function (event, fn) {\n var vm = this;\n // all\n if (!arguments.length) {\n vm._events = Object.create(null);\n return vm;\n }\n // array of events\n if (isArray(event)) {\n for (var i_1 = 0, l = event.length; i_1 < l; i_1++) {\n vm.$off(event[i_1], fn);\n }\n return vm;\n }\n // specific event\n var cbs = vm._events[event];\n if (!cbs) {\n return vm;\n }\n if (!fn) {\n vm._events[event] = null;\n return vm;\n }\n // specific handler\n var cb;\n var i = cbs.length;\n while (i--) {\n cb = cbs[i];\n if (cb === fn || cb.fn === fn) {\n cbs.splice(i, 1);\n break;\n }\n }\n return vm;\n };\n Vue.prototype.$emit = function (event) {\n var vm = this;\n if (false) // removed by dead control flow\n{ var lowerCaseEvent; }\n var cbs = vm._events[event];\n if (cbs) {\n cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n var args = toArray(arguments, 1);\n var info = \"event handler for \\\"\".concat(event, \"\\\"\");\n for (var i = 0, l = cbs.length; i < l; i++) {\n invokeWithErrorHandling(cbs[i], vm, args, vm, info);\n }\n }\n return vm;\n };\n}\nvar activeInstance = null;\nvar isUpdatingChildComponent = false;\nfunction setActiveInstance(vm) {\n var prevActiveInstance = activeInstance;\n activeInstance = vm;\n return function () {\n activeInstance = prevActiveInstance;\n };\n}\nfunction initLifecycle(vm) {\n var options = vm.$options;\n // locate first non-abstract parent\n var parent = options.parent;\n if (parent && !options.abstract) {\n while (parent.$options.abstract && parent.$parent) {\n parent = parent.$parent;\n }\n parent.$children.push(vm);\n }\n vm.$parent = parent;\n vm.$root = parent ? parent.$root : vm;\n vm.$children = [];\n vm.$refs = {};\n vm._provided = parent ? parent._provided : Object.create(null);\n vm._watcher = null;\n vm._inactive = null;\n vm._directInactive = false;\n vm._isMounted = false;\n vm._isDestroyed = false;\n vm._isBeingDestroyed = false;\n}\nfunction lifecycleMixin(Vue) {\n Vue.prototype._update = function (vnode, hydrating) {\n var vm = this;\n var prevEl = vm.$el;\n var prevVnode = vm._vnode;\n var restoreActiveInstance = setActiveInstance(vm);\n vm._vnode = vnode;\n // Vue.prototype.__patch__ is injected in entry points\n // based on the rendering backend used.\n if (!prevVnode) {\n // initial render\n vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);\n } else {\n // updates\n vm.$el = vm.__patch__(prevVnode, vnode);\n }\n restoreActiveInstance();\n // update __vue__ reference\n if (prevEl) {\n prevEl.__vue__ = null;\n }\n if (vm.$el) {\n vm.$el.__vue__ = vm;\n }\n // if parent is an HOC, update its $el as well\n var wrapper = vm;\n while (wrapper && wrapper.$vnode && wrapper.$parent && wrapper.$vnode === wrapper.$parent._vnode) {\n wrapper.$parent.$el = wrapper.$el;\n wrapper = wrapper.$parent;\n }\n // updated hook is called by the scheduler to ensure that children are\n // updated in a parent's updated hook.\n };\n Vue.prototype.$forceUpdate = function () {\n var vm = this;\n if (vm._watcher) {\n vm._watcher.update();\n }\n };\n Vue.prototype.$destroy = function () {\n var vm = this;\n if (vm._isBeingDestroyed) {\n return;\n }\n callHook$1(vm, 'beforeDestroy');\n vm._isBeingDestroyed = true;\n // remove self from parent\n var parent = vm.$parent;\n if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n remove$2(parent.$children, vm);\n }\n // teardown scope. this includes both the render watcher and other\n // watchers created\n vm._scope.stop();\n // remove reference from data ob\n // frozen object may not have observer.\n if (vm._data.__ob__) {\n vm._data.__ob__.vmCount--;\n }\n // call the last hook...\n vm._isDestroyed = true;\n // invoke destroy hooks on current rendered tree\n vm.__patch__(vm._vnode, null);\n // fire destroyed hook\n callHook$1(vm, 'destroyed');\n // turn off all instance listeners.\n vm.$off();\n // remove __vue__ reference\n if (vm.$el) {\n vm.$el.__vue__ = null;\n }\n // release circular reference (#6759)\n if (vm.$vnode) {\n vm.$vnode.parent = null;\n }\n };\n}\nfunction mountComponent(vm, el, hydrating) {\n vm.$el = el;\n if (!vm.$options.render) {\n // @ts-expect-error invalid type\n vm.$options.render = createEmptyVNode;\n if (false) // removed by dead control flow\n{}\n }\n callHook$1(vm, 'beforeMount');\n var updateComponent;\n /* istanbul ignore if */\n if (false) // removed by dead control flow\n{} else {\n updateComponent = function updateComponent() {\n vm._update(vm._render(), hydrating);\n };\n }\n var watcherOptions = {\n before: function before() {\n if (vm._isMounted && !vm._isDestroyed) {\n callHook$1(vm, 'beforeUpdate');\n }\n }\n };\n if (false) // removed by dead control flow\n{}\n // we set this to vm._watcher inside the watcher's constructor\n // since the watcher's initial patch may call $forceUpdate (e.g. inside child\n // component's mounted hook), which relies on vm._watcher being already defined\n new Watcher(vm, updateComponent, noop, watcherOptions, true /* isRenderWatcher */);\n hydrating = false;\n // flush buffer for flush: \"pre\" watchers queued in setup()\n var preWatchers = vm._preWatchers;\n if (preWatchers) {\n for (var i = 0; i < preWatchers.length; i++) {\n preWatchers[i].run();\n }\n }\n // manually mounted instance, call mounted on self\n // mounted is called for render-created child components in its inserted hook\n if (vm.$vnode == null) {\n vm._isMounted = true;\n callHook$1(vm, 'mounted');\n }\n return vm;\n}\nfunction updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) {\n if (false) // removed by dead control flow\n{}\n // determine whether component has slot children\n // we need to do this before overwriting $options._renderChildren.\n // check if there are dynamic scopedSlots (hand-written or compiled but with\n // dynamic slot names). Static scoped slots compiled from template has the\n // \"$stable\" marker.\n var newScopedSlots = parentVnode.data.scopedSlots;\n var oldScopedSlots = vm.$scopedSlots;\n var hasDynamicScopedSlot = !!(newScopedSlots && !newScopedSlots.$stable || oldScopedSlots !== emptyObject && !oldScopedSlots.$stable || newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key || !newScopedSlots && vm.$scopedSlots.$key);\n // Any static slot children from the parent may have changed during parent's\n // update. Dynamic scoped slots may also have changed. In such cases, a forced\n // update is necessary to ensure correctness.\n var needsForceUpdate = !!(renderChildren ||\n // has new static slots\n vm.$options._renderChildren ||\n // has old static slots\n hasDynamicScopedSlot);\n var prevVNode = vm.$vnode;\n vm.$options._parentVnode = parentVnode;\n vm.$vnode = parentVnode; // update vm's placeholder node without re-render\n if (vm._vnode) {\n // update child tree's parent\n vm._vnode.parent = parentVnode;\n }\n vm.$options._renderChildren = renderChildren;\n // update $attrs and $listeners hash\n // these are also reactive so they may trigger child update if the child\n // used them during render\n var attrs = parentVnode.data.attrs || emptyObject;\n if (vm._attrsProxy) {\n // force update if attrs are accessed and has changed since it may be\n // passed to a child component.\n if (syncSetupProxy(vm._attrsProxy, attrs, prevVNode.data && prevVNode.data.attrs || emptyObject, vm, '$attrs')) {\n needsForceUpdate = true;\n }\n }\n vm.$attrs = attrs;\n // update listeners\n listeners = listeners || emptyObject;\n var prevListeners = vm.$options._parentListeners;\n if (vm._listenersProxy) {\n syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners');\n }\n vm.$listeners = vm.$options._parentListeners = listeners;\n updateComponentListeners(vm, listeners, prevListeners);\n // update props\n if (propsData && vm.$options.props) {\n toggleObserving(false);\n var props = vm._props;\n var propKeys = vm.$options._propKeys || [];\n for (var i = 0; i < propKeys.length; i++) {\n var key = propKeys[i];\n var propOptions = vm.$options.props; // wtf flow?\n props[key] = validateProp(key, propOptions, propsData, vm);\n }\n toggleObserving(true);\n // keep a copy of raw propsData\n vm.$options.propsData = propsData;\n }\n // resolve slots + force update if has children\n if (needsForceUpdate) {\n vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n vm.$forceUpdate();\n }\n if (false) // removed by dead control flow\n{}\n}\nfunction isInInactiveTree(vm) {\n while (vm && (vm = vm.$parent)) {\n if (vm._inactive) return true;\n }\n return false;\n}\nfunction activateChildComponent(vm, direct) {\n if (direct) {\n vm._directInactive = false;\n if (isInInactiveTree(vm)) {\n return;\n }\n } else if (vm._directInactive) {\n return;\n }\n if (vm._inactive || vm._inactive === null) {\n vm._inactive = false;\n for (var i = 0; i < vm.$children.length; i++) {\n activateChildComponent(vm.$children[i]);\n }\n callHook$1(vm, 'activated');\n }\n}\nfunction deactivateChildComponent(vm, direct) {\n if (direct) {\n vm._directInactive = true;\n if (isInInactiveTree(vm)) {\n return;\n }\n }\n if (!vm._inactive) {\n vm._inactive = true;\n for (var i = 0; i < vm.$children.length; i++) {\n deactivateChildComponent(vm.$children[i]);\n }\n callHook$1(vm, 'deactivated');\n }\n}\nfunction callHook$1(vm, hook, args, setContext) {\n if (setContext === void 0) {\n setContext = true;\n }\n // #7573 disable dep collection when invoking lifecycle hooks\n pushTarget();\n var prevInst = currentInstance;\n var prevScope = getCurrentScope();\n setContext && setCurrentInstance(vm);\n var handlers = vm.$options[hook];\n var info = \"\".concat(hook, \" hook\");\n if (handlers) {\n for (var i = 0, j = handlers.length; i < j; i++) {\n invokeWithErrorHandling(handlers[i], vm, args || null, vm, info);\n }\n }\n if (vm._hasHookEvent) {\n vm.$emit('hook:' + hook);\n }\n if (setContext) {\n setCurrentInstance(prevInst);\n prevScope && prevScope.on();\n }\n popTarget();\n}\nvar MAX_UPDATE_COUNT = 100;\nvar queue = [];\nvar activatedChildren = [];\nvar has = {};\nvar circular = (/* unused pure expression or super */ null && ({}));\nvar waiting = false;\nvar flushing = false;\nvar index = 0;\n/**\n * Reset the scheduler's state.\n */\nfunction resetSchedulerState() {\n index = queue.length = activatedChildren.length = 0;\n has = {};\n if (false) // removed by dead control flow\n{}\n waiting = flushing = false;\n}\n// Async edge case #6566 requires saving the timestamp when event listeners are\n// attached. However, calling performance.now() has a perf overhead especially\n// if the page has thousands of event listeners. Instead, we take a timestamp\n// every time the scheduler flushes and use that for all event listeners\n// attached during that flush.\nvar currentFlushTimestamp = 0;\n// Async edge case fix requires storing an event listener's attach timestamp.\nvar getNow = Date.now;\n// Determine what event timestamp the browser is using. Annoyingly, the\n// timestamp can either be hi-res (relative to page load) or low-res\n// (relative to UNIX epoch), so in order to compare time we have to use the\n// same timestamp type when saving the flush timestamp.\n// All IE versions use low-res event timestamps, and have problematic clock\n// implementations (#9632)\nif (inBrowser && !isIE) {\n var performance_1 = window.performance;\n if (performance_1 && typeof performance_1.now === 'function' && getNow() > document.createEvent('Event').timeStamp) {\n // if the event timestamp, although evaluated AFTER the Date.now(), is\n // smaller than it, it means the event is using a hi-res timestamp,\n // and we need to use the hi-res version for event listener timestamps as\n // well.\n getNow = function getNow() {\n return performance_1.now();\n };\n }\n}\nvar sortCompareFn = function sortCompareFn(a, b) {\n if (a.post) {\n if (!b.post) return 1;\n } else if (b.post) {\n return -1;\n }\n return a.id - b.id;\n};\n/**\n * Flush both queues and run the watchers.\n */\nfunction flushSchedulerQueue() {\n currentFlushTimestamp = getNow();\n flushing = true;\n var watcher, id;\n // Sort queue before flush.\n // This ensures that:\n // 1. Components are updated from parent to child. (because parent is always\n // created before the child)\n // 2. A component's user watchers are run before its render watcher (because\n // user watchers are created before the render watcher)\n // 3. If a component is destroyed during a parent component's watcher run,\n // its watchers can be skipped.\n queue.sort(sortCompareFn);\n // do not cache length because more watchers might be pushed\n // as we run existing watchers\n for (index = 0; index < queue.length; index++) {\n watcher = queue[index];\n if (watcher.before) {\n watcher.before();\n }\n id = watcher.id;\n has[id] = null;\n watcher.run();\n // in dev build, check and stop circular updates.\n if (false) // removed by dead control flow\n{}\n }\n // keep copies of post queues before resetting state\n var activatedQueue = activatedChildren.slice();\n var updatedQueue = queue.slice();\n resetSchedulerState();\n // call component updated and activated hooks\n callActivatedHooks(activatedQueue);\n callUpdatedHooks(updatedQueue);\n cleanupDeps();\n // devtool hook\n /* istanbul ignore if */\n if (devtools && config.devtools) {\n devtools.emit('flush');\n }\n}\nfunction callUpdatedHooks(queue) {\n var i = queue.length;\n while (i--) {\n var watcher = queue[i];\n var vm = watcher.vm;\n if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\n callHook$1(vm, 'updated');\n }\n }\n}\n/**\n * Queue a kept-alive component that was activated during patch.\n * The queue will be processed after the entire tree has been patched.\n */\nfunction queueActivatedComponent(vm) {\n // setting _inactive to false here so that a render function can\n // rely on checking whether it's in an inactive tree (e.g. router-view)\n vm._inactive = false;\n activatedChildren.push(vm);\n}\nfunction callActivatedHooks(queue) {\n for (var i = 0; i < queue.length; i++) {\n queue[i]._inactive = true;\n activateChildComponent(queue[i], true /* true */);\n }\n}\n/**\n * Push a watcher into the watcher queue.\n * Jobs with duplicate IDs will be skipped unless it's\n * pushed when the queue is being flushed.\n */\nfunction queueWatcher(watcher) {\n var id = watcher.id;\n if (has[id] != null) {\n return;\n }\n if (watcher === Dep.target && watcher.noRecurse) {\n return;\n }\n has[id] = true;\n if (!flushing) {\n queue.push(watcher);\n } else {\n // if already flushing, splice the watcher based on its id\n // if already past its id, it will be run next immediately.\n var i = queue.length - 1;\n while (i > index && queue[i].id > watcher.id) {\n i--;\n }\n queue.splice(i + 1, 0, watcher);\n }\n // queue the flush\n if (!waiting) {\n waiting = true;\n if (false) // removed by dead control flow\n{}\n nextTick(flushSchedulerQueue);\n }\n}\nfunction initProvide(vm) {\n var provideOption = vm.$options.provide;\n if (provideOption) {\n var provided = isFunction(provideOption) ? provideOption.call(vm) : provideOption;\n if (!isObject(provided)) {\n return;\n }\n var source = resolveProvided(vm);\n // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to\n // iterate the keys ourselves.\n var keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key));\n }\n }\n}\nfunction initInjections(vm) {\n var result = resolveInject(vm.$options.inject, vm);\n if (result) {\n toggleObserving(false);\n Object.keys(result).forEach(function (key) {\n /* istanbul ignore else */\n if (false) // removed by dead control flow\n{} else {\n defineReactive(vm, key, result[key]);\n }\n });\n toggleObserving(true);\n }\n}\nfunction resolveInject(inject, vm) {\n if (inject) {\n // inject is :any because flow is not smart enough to figure out cached\n var result = Object.create(null);\n var keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n // #6574 in case the inject object is observed...\n if (key === '__ob__') continue;\n var provideKey = inject[key].from;\n if (provideKey in vm._provided) {\n result[key] = vm._provided[provideKey];\n } else if ('default' in inject[key]) {\n var provideDefault = inject[key].default;\n result[key] = isFunction(provideDefault) ? provideDefault.call(vm) : provideDefault;\n } else if (false) // removed by dead control flow\n{}\n }\n return result;\n }\n}\nfunction FunctionalRenderContext(data, props, children, parent, Ctor) {\n var _this = this;\n var options = Ctor.options;\n // ensure the createElement function in functional components\n // gets a unique context - this is necessary for correct named slot check\n var contextVm;\n if (hasOwn(parent, '_uid')) {\n contextVm = Object.create(parent);\n contextVm._original = parent;\n } else {\n // the context vm passed in is a functional context as well.\n // in this case we want to make sure we are able to get a hold to the\n // real context instance.\n contextVm = parent;\n // @ts-ignore\n parent = parent._original;\n }\n var isCompiled = isTrue(options._compiled);\n var needNormalization = !isCompiled;\n this.data = data;\n this.props = props;\n this.children = children;\n this.parent = parent;\n this.listeners = data.on || emptyObject;\n this.injections = resolveInject(options.inject, parent);\n this.slots = function () {\n if (!_this.$slots) {\n normalizeScopedSlots(parent, data.scopedSlots, _this.$slots = resolveSlots(children, parent));\n }\n return _this.$slots;\n };\n Object.defineProperty(this, 'scopedSlots', {\n enumerable: true,\n get: function get() {\n return normalizeScopedSlots(parent, data.scopedSlots, this.slots());\n }\n });\n // support for compiled functional template\n if (isCompiled) {\n // exposing $options for renderStatic()\n this.$options = options;\n // pre-resolve slots for renderSlot()\n this.$slots = this.slots();\n this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots);\n }\n if (options._scopeId) {\n this._c = function (a, b, c, d) {\n var vnode = createElement$1(contextVm, a, b, c, d, needNormalization);\n if (vnode && !isArray(vnode)) {\n vnode.fnScopeId = options._scopeId;\n vnode.fnContext = parent;\n }\n return vnode;\n };\n } else {\n this._c = function (a, b, c, d) {\n return createElement$1(contextVm, a, b, c, d, needNormalization);\n };\n }\n}\ninstallRenderHelpers(FunctionalRenderContext.prototype);\nfunction createFunctionalComponent(Ctor, propsData, data, contextVm, children) {\n var options = Ctor.options;\n var props = {};\n var propOptions = options.props;\n if (isDef(propOptions)) {\n for (var key in propOptions) {\n props[key] = validateProp(key, propOptions, propsData || emptyObject);\n }\n } else {\n if (isDef(data.attrs)) mergeProps(props, data.attrs);\n if (isDef(data.props)) mergeProps(props, data.props);\n }\n var renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor);\n var vnode = options.render.call(null, renderContext._c, renderContext);\n if (vnode instanceof VNode) {\n return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext);\n } else if (isArray(vnode)) {\n var vnodes = normalizeChildren(vnode) || [];\n var res = new Array(vnodes.length);\n for (var i = 0; i < vnodes.length; i++) {\n res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\n }\n return res;\n }\n}\nfunction cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) {\n // #7817 clone node before setting fnContext, otherwise if the node is reused\n // (e.g. it was from a cached normal slot) the fnContext causes named slots\n // that should not be matched to match.\n var clone = cloneVNode(vnode);\n clone.fnContext = contextVm;\n clone.fnOptions = options;\n if (false) // removed by dead control flow\n{}\n if (data.slot) {\n (clone.data || (clone.data = {})).slot = data.slot;\n }\n return clone;\n}\nfunction mergeProps(to, from) {\n for (var key in from) {\n to[camelize(key)] = from[key];\n }\n}\nfunction getComponentName(options) {\n return options.name || options.__name || options._componentTag;\n}\n// inline hooks to be invoked on component VNodes during patch\nvar componentVNodeHooks = {\n init: function init(vnode, hydrating) {\n if (vnode.componentInstance && !vnode.componentInstance._isDestroyed && vnode.data.keepAlive) {\n // kept-alive components, treat as a patch\n var mountedNode = vnode; // work around flow\n componentVNodeHooks.prepatch(mountedNode, mountedNode);\n } else {\n var child = vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance);\n child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n }\n },\n prepatch: function prepatch(oldVnode, vnode) {\n var options = vnode.componentOptions;\n var child = vnode.componentInstance = oldVnode.componentInstance;\n updateChildComponent(child, options.propsData,\n // updated props\n options.listeners,\n // updated listeners\n vnode,\n // new parent vnode\n options.children // new children\n );\n },\n insert: function insert(vnode) {\n var context = vnode.context,\n componentInstance = vnode.componentInstance;\n if (!componentInstance._isMounted) {\n componentInstance._isMounted = true;\n callHook$1(componentInstance, 'mounted');\n }\n if (vnode.data.keepAlive) {\n if (context._isMounted) {\n // vue-router#1212\n // During updates, a kept-alive component's child components may\n // change, so directly walking the tree here may call activated hooks\n // on incorrect children. Instead we push them into a queue which will\n // be processed after the whole patch process ended.\n queueActivatedComponent(componentInstance);\n } else {\n activateChildComponent(componentInstance, true /* direct */);\n }\n }\n },\n destroy: function destroy(vnode) {\n var componentInstance = vnode.componentInstance;\n if (!componentInstance._isDestroyed) {\n if (!vnode.data.keepAlive) {\n componentInstance.$destroy();\n } else {\n deactivateChildComponent(componentInstance, true /* direct */);\n }\n }\n }\n};\nvar hooksToMerge = Object.keys(componentVNodeHooks);\nfunction createComponent(Ctor, data, context, children, tag) {\n if (isUndef(Ctor)) {\n return;\n }\n var baseCtor = context.$options._base;\n // plain options object: turn it into a constructor\n if (isObject(Ctor)) {\n Ctor = baseCtor.extend(Ctor);\n }\n // if at this stage it's not a constructor or an async component factory,\n // reject.\n if (typeof Ctor !== 'function') {\n if (false) // removed by dead control flow\n{}\n return;\n }\n // async component\n var asyncFactory;\n // @ts-expect-error\n if (isUndef(Ctor.cid)) {\n asyncFactory = Ctor;\n Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\n if (Ctor === undefined) {\n // return a placeholder node for async component, which is rendered\n // as a comment node but preserves all the raw information for the node.\n // the information will be used for async server-rendering and hydration.\n return createAsyncPlaceholder(asyncFactory, data, context, children, tag);\n }\n }\n data = data || {};\n // resolve constructor options in case global mixins are applied after\n // component constructor creation\n resolveConstructorOptions(Ctor);\n // transform component v-model data into props & events\n if (isDef(data.model)) {\n // @ts-expect-error\n transformModel(Ctor.options, data);\n }\n // extract props\n // @ts-expect-error\n var propsData = extractPropsFromVNodeData(data, Ctor, tag);\n // functional component\n // @ts-expect-error\n if (isTrue(Ctor.options.functional)) {\n return createFunctionalComponent(Ctor, propsData, data, context, children);\n }\n // extract listeners, since these needs to be treated as\n // child component listeners instead of DOM listeners\n var listeners = data.on;\n // replace with listeners with .native modifier\n // so it gets processed during parent component patch.\n data.on = data.nativeOn;\n // @ts-expect-error\n if (isTrue(Ctor.options.abstract)) {\n // abstract components do not keep anything\n // other than props & listeners & slot\n // work around flow\n var slot = data.slot;\n data = {};\n if (slot) {\n data.slot = slot;\n }\n }\n // install component management hooks onto the placeholder node\n installComponentHooks(data);\n // return a placeholder vnode\n // @ts-expect-error\n var name = getComponentName(Ctor.options) || tag;\n var vnode = new VNode(\n // @ts-expect-error\n \"vue-component-\".concat(Ctor.cid).concat(name ? \"-\".concat(name) : ''), data, undefined, undefined, undefined, context,\n // @ts-expect-error\n {\n Ctor: Ctor,\n propsData: propsData,\n listeners: listeners,\n tag: tag,\n children: children\n }, asyncFactory);\n return vnode;\n}\nfunction createComponentInstanceForVnode(\n// we know it's MountedComponentVNode but flow doesn't\nvnode,\n// activeInstance in lifecycle state\nparent) {\n var options = {\n _isComponent: true,\n _parentVnode: vnode,\n parent: parent\n };\n // check inline-template render functions\n var inlineTemplate = vnode.data.inlineTemplate;\n if (isDef(inlineTemplate)) {\n options.render = inlineTemplate.render;\n options.staticRenderFns = inlineTemplate.staticRenderFns;\n }\n return new vnode.componentOptions.Ctor(options);\n}\nfunction installComponentHooks(data) {\n var hooks = data.hook || (data.hook = {});\n for (var i = 0; i < hooksToMerge.length; i++) {\n var key = hooksToMerge[i];\n var existing = hooks[key];\n var toMerge = componentVNodeHooks[key];\n // @ts-expect-error\n if (existing !== toMerge && !(existing && existing._merged)) {\n hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge;\n }\n }\n}\nfunction mergeHook(f1, f2) {\n var merged = function merged(a, b) {\n // flow complains about extra args which is why we use any\n f1(a, b);\n f2(a, b);\n };\n merged._merged = true;\n return merged;\n}\n// transform component v-model info (value and callback) into\n// prop and event handler respectively.\nfunction transformModel(options, data) {\n var prop = options.model && options.model.prop || 'value';\n var event = options.model && options.model.event || 'input';\n (data.attrs || (data.attrs = {}))[prop] = data.model.value;\n var on = data.on || (data.on = {});\n var existing = on[event];\n var callback = data.model.callback;\n if (isDef(existing)) {\n if (isArray(existing) ? existing.indexOf(callback) === -1 : existing !== callback) {\n on[event] = [callback].concat(existing);\n }\n } else {\n on[event] = callback;\n }\n}\nvar warn = noop;\nvar tip = (/* unused pure expression or super */ null && (noop));\nvar generateComponentTrace; // work around flow check\nvar formatComponentName;\nif (false) // removed by dead control flow\n{ var repeat_1, classify_1, classifyRE_1, hasConsole_1; }\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n/**\n * Options with restrictions\n */\nif (false) // removed by dead control flow\n{}\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData(to, from, recursive) {\n if (recursive === void 0) {\n recursive = true;\n }\n if (!from) return to;\n var key, toVal, fromVal;\n var keys = hasSymbol ? Reflect.ownKeys(from) : Object.keys(from);\n for (var i = 0; i < keys.length; i++) {\n key = keys[i];\n // in case the object is already observed...\n if (key === '__ob__') continue;\n toVal = to[key];\n fromVal = from[key];\n if (!recursive || !hasOwn(to, key)) {\n set(to, key, fromVal);\n } else if (toVal !== fromVal && isPlainObject(toVal) && isPlainObject(fromVal)) {\n mergeData(toVal, fromVal);\n }\n }\n return to;\n}\n/**\n * Data\n */\nfunction mergeDataOrFn(parentVal, childVal, vm) {\n if (!vm) {\n // in a Vue.extend merge, both should be functions\n if (!childVal) {\n return parentVal;\n }\n if (!parentVal) {\n return childVal;\n }\n // when parentVal & childVal are both present,\n // we need to return a function that returns the\n // merged result of both functions... no need to\n // check if parentVal is a function here because\n // it has to be a function to pass previous merges.\n return function mergedDataFn() {\n return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal);\n };\n } else {\n return function mergedInstanceDataFn() {\n // instance merge\n var instanceData = isFunction(childVal) ? childVal.call(vm, vm) : childVal;\n var defaultData = isFunction(parentVal) ? parentVal.call(vm, vm) : parentVal;\n if (instanceData) {\n return mergeData(instanceData, defaultData);\n } else {\n return defaultData;\n }\n };\n }\n}\nstrats.data = function (parentVal, childVal, vm) {\n if (!vm) {\n if (childVal && typeof childVal !== 'function') {\n false && 0;\n return parentVal;\n }\n return mergeDataOrFn(parentVal, childVal);\n }\n return mergeDataOrFn(parentVal, childVal, vm);\n};\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeLifecycleHook(parentVal, childVal) {\n var res = childVal ? parentVal ? parentVal.concat(childVal) : isArray(childVal) ? childVal : [childVal] : parentVal;\n return res ? dedupeHooks(res) : res;\n}\nfunction dedupeHooks(hooks) {\n var res = [];\n for (var i = 0; i < hooks.length; i++) {\n if (res.indexOf(hooks[i]) === -1) {\n res.push(hooks[i]);\n }\n }\n return res;\n}\nLIFECYCLE_HOOKS.forEach(function (hook) {\n strats[hook] = mergeLifecycleHook;\n});\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets(parentVal, childVal, vm, key) {\n var res = Object.create(parentVal || null);\n if (childVal) {\n false && 0;\n return extend(res, childVal);\n } else {\n return res;\n }\n}\nASSET_TYPES.forEach(function (type) {\n strats[type + 's'] = mergeAssets;\n});\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (parentVal, childVal, vm, key) {\n // work around Firefox's Object.prototype.watch...\n //@ts-expect-error work around\n if (parentVal === nativeWatch) parentVal = undefined;\n //@ts-expect-error work around\n if (childVal === nativeWatch) childVal = undefined;\n /* istanbul ignore if */\n if (!childVal) return Object.create(parentVal || null);\n if (false) // removed by dead control flow\n{}\n if (!parentVal) return childVal;\n var ret = {};\n extend(ret, parentVal);\n for (var key_1 in childVal) {\n var parent_1 = ret[key_1];\n var child = childVal[key_1];\n if (parent_1 && !isArray(parent_1)) {\n parent_1 = [parent_1];\n }\n ret[key_1] = parent_1 ? parent_1.concat(child) : isArray(child) ? child : [child];\n }\n return ret;\n};\n/**\n * Other object hashes.\n */\nstrats.props = strats.methods = strats.inject = strats.computed = function (parentVal, childVal, vm, key) {\n if (childVal && \"production\" !== 'production') // removed by dead control flow\n{}\n if (!parentVal) return childVal;\n var ret = Object.create(null);\n extend(ret, parentVal);\n if (childVal) extend(ret, childVal);\n return ret;\n};\nstrats.provide = function (parentVal, childVal) {\n if (!parentVal) return childVal;\n return function () {\n var ret = Object.create(null);\n mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal);\n if (childVal) {\n mergeData(ret, isFunction(childVal) ? childVal.call(this) : childVal, false // non-recursive\n );\n }\n return ret;\n };\n};\n/**\n * Default strategy.\n */\nvar defaultStrat = function defaultStrat(parentVal, childVal) {\n return childVal === undefined ? parentVal : childVal;\n};\n/**\n * Validate component names\n */\nfunction checkComponents(options) {\n for (var key in options.components) {\n validateComponentName(key);\n }\n}\nfunction validateComponentName(name) {\n if (!new RegExp(\"^[a-zA-Z][\\\\-\\\\.0-9_\".concat(unicodeRegExp.source, \"]*$\")).test(name)) {\n warn('Invalid component name: \"' + name + '\". Component names ' + 'should conform to valid custom element name in html5 specification.');\n }\n if (isBuiltInTag(name) || config.isReservedTag(name)) {\n warn('Do not use built-in or reserved HTML elements as component ' + 'id: ' + name);\n }\n}\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps(options, vm) {\n var props = options.props;\n if (!props) return;\n var res = {};\n var i, val, name;\n if (isArray(props)) {\n i = props.length;\n while (i--) {\n val = props[i];\n if (typeof val === 'string') {\n name = camelize(val);\n res[name] = {\n type: null\n };\n } else if (false) // removed by dead control flow\n{}\n }\n } else if (isPlainObject(props)) {\n for (var key in props) {\n val = props[key];\n name = camelize(key);\n res[name] = isPlainObject(val) ? val : {\n type: val\n };\n }\n } else if (false) // removed by dead control flow\n{}\n options.props = res;\n}\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject(options, vm) {\n var inject = options.inject;\n if (!inject) return;\n var normalized = options.inject = {};\n if (isArray(inject)) {\n for (var i = 0; i < inject.length; i++) {\n normalized[inject[i]] = {\n from: inject[i]\n };\n }\n } else if (isPlainObject(inject)) {\n for (var key in inject) {\n var val = inject[key];\n normalized[key] = isPlainObject(val) ? extend({\n from: key\n }, val) : {\n from: val\n };\n }\n } else if (false) // removed by dead control flow\n{}\n}\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives$1(options) {\n var dirs = options.directives;\n if (dirs) {\n for (var key in dirs) {\n var def = dirs[key];\n if (isFunction(def)) {\n dirs[key] = {\n bind: def,\n update: def\n };\n }\n }\n }\n}\nfunction assertObjectType(name, value, vm) {\n if (!isPlainObject(value)) {\n warn(\"Invalid value for option \\\"\".concat(name, \"\\\": expected an Object, \") + \"but got \".concat(toRawType(value), \".\"), vm);\n }\n}\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions(parent, child, vm) {\n if (false) // removed by dead control flow\n{}\n if (isFunction(child)) {\n // @ts-expect-error\n child = child.options;\n }\n normalizeProps(child, vm);\n normalizeInject(child, vm);\n normalizeDirectives$1(child);\n // Apply extends and mixins on the child options,\n // but only if it is a raw options object that isn't\n // the result of another mergeOptions call.\n // Only merged options has the _base property.\n if (!child._base) {\n if (child.extends) {\n parent = mergeOptions(parent, child.extends, vm);\n }\n if (child.mixins) {\n for (var i = 0, l = child.mixins.length; i < l; i++) {\n parent = mergeOptions(parent, child.mixins[i], vm);\n }\n }\n }\n var options = {};\n var key;\n for (key in parent) {\n mergeField(key);\n }\n for (key in child) {\n if (!hasOwn(parent, key)) {\n mergeField(key);\n }\n }\n function mergeField(key) {\n var strat = strats[key] || defaultStrat;\n options[key] = strat(parent[key], child[key], vm, key);\n }\n return options;\n}\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset(options, type, id, warnMissing) {\n /* istanbul ignore if */\n if (typeof id !== 'string') {\n return;\n }\n var assets = options[type];\n // check local registration variations first\n if (hasOwn(assets, id)) return assets[id];\n var camelizedId = camelize(id);\n if (hasOwn(assets, camelizedId)) return assets[camelizedId];\n var PascalCaseId = capitalize(camelizedId);\n if (hasOwn(assets, PascalCaseId)) return assets[PascalCaseId];\n // fallback to prototype chain\n var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n if (false) // removed by dead control flow\n{}\n return res;\n}\nfunction validateProp(key, propOptions, propsData, vm) {\n var prop = propOptions[key];\n var absent = !hasOwn(propsData, key);\n var value = propsData[key];\n // boolean casting\n var booleanIndex = getTypeIndex(Boolean, prop.type);\n if (booleanIndex > -1) {\n if (absent && !hasOwn(prop, 'default')) {\n value = false;\n } else if (value === '' || value === hyphenate(key)) {\n // only cast empty string / same name to boolean if\n // boolean has higher priority\n var stringIndex = getTypeIndex(String, prop.type);\n if (stringIndex < 0 || booleanIndex < stringIndex) {\n value = true;\n }\n }\n }\n // check default value\n if (value === undefined) {\n value = getPropDefaultValue(vm, prop, key);\n // since the default value is a fresh copy,\n // make sure to observe it.\n var prevShouldObserve = shouldObserve;\n toggleObserving(true);\n observe(value);\n toggleObserving(prevShouldObserve);\n }\n if (false) // removed by dead control flow\n{}\n return value;\n}\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue(vm, prop, key) {\n // no default, return undefined\n if (!hasOwn(prop, 'default')) {\n return undefined;\n }\n var def = prop.default;\n // warn against non-factory defaults for Object & Array\n if (false) // removed by dead control flow\n{}\n // the raw prop value was also undefined from previous render,\n // return previous default value to avoid unnecessary watcher trigger\n if (vm && vm.$options.propsData && vm.$options.propsData[key] === undefined && vm._props[key] !== undefined) {\n return vm._props[key];\n }\n // call factory function for non-Function types\n // a value is Function if its prototype is function even across different execution context\n return isFunction(def) && getType(prop.type) !== 'Function' ? def.call(vm) : def;\n}\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp(prop, name, value, vm, absent) {\n if (prop.required && absent) {\n warn('Missing required prop: \"' + name + '\"', vm);\n return;\n }\n if (value == null && !prop.required) {\n return;\n }\n var type = prop.type;\n var valid = !type || type === true;\n var expectedTypes = [];\n if (type) {\n if (!isArray(type)) {\n type = [type];\n }\n for (var i = 0; i < type.length && !valid; i++) {\n var assertedType = assertType(value, type[i], vm);\n expectedTypes.push(assertedType.expectedType || '');\n valid = assertedType.valid;\n }\n }\n var haveExpectedTypes = expectedTypes.some(function (t) {\n return t;\n });\n if (!valid && haveExpectedTypes) {\n warn(getInvalidTypeMessage(name, value, expectedTypes), vm);\n return;\n }\n var validator = prop.validator;\n if (validator) {\n if (!validator(value)) {\n warn('Invalid prop: custom validator check failed for prop \"' + name + '\".', vm);\n }\n }\n}\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;\nfunction assertType(value, type, vm) {\n var valid;\n var expectedType = getType(type);\n if (simpleCheckRE.test(expectedType)) {\n var t = _typeof(value);\n valid = t === expectedType.toLowerCase();\n // for primitive wrapper objects\n if (!valid && t === 'object') {\n valid = value instanceof type;\n }\n } else if (expectedType === 'Object') {\n valid = isPlainObject(value);\n } else if (expectedType === 'Array') {\n valid = isArray(value);\n } else {\n try {\n valid = value instanceof type;\n } catch (e) {\n warn('Invalid prop type: \"' + String(type) + '\" is not a constructor', vm);\n valid = false;\n }\n }\n return {\n valid: valid,\n expectedType: expectedType\n };\n}\nvar functionTypeCheckRE = /^\\s*function (\\w+)/;\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType(fn) {\n var match = fn && fn.toString().match(functionTypeCheckRE);\n return match ? match[1] : '';\n}\nfunction isSameType(a, b) {\n return getType(a) === getType(b);\n}\nfunction getTypeIndex(type, expectedTypes) {\n if (!isArray(expectedTypes)) {\n return isSameType(expectedTypes, type) ? 0 : -1;\n }\n for (var i = 0, len = expectedTypes.length; i < len; i++) {\n if (isSameType(expectedTypes[i], type)) {\n return i;\n }\n }\n return -1;\n}\nfunction getInvalidTypeMessage(name, value, expectedTypes) {\n var message = \"Invalid prop: type check failed for prop \\\"\".concat(name, \"\\\".\") + \" Expected \".concat(expectedTypes.map(capitalize).join(', '));\n var expectedType = expectedTypes[0];\n var receivedType = toRawType(value);\n // check if we need to specify expected value\n if (expectedTypes.length === 1 && isExplicable(expectedType) && isExplicable(_typeof(value)) && !isBoolean(expectedType, receivedType)) {\n message += \" with value \".concat(styleValue(value, expectedType));\n }\n message += \", got \".concat(receivedType, \" \");\n // check if we need to specify received value\n if (isExplicable(receivedType)) {\n message += \"with value \".concat(styleValue(value, receivedType), \".\");\n }\n return message;\n}\nfunction styleValue(value, type) {\n if (type === 'String') {\n return \"\\\"\".concat(value, \"\\\"\");\n } else if (type === 'Number') {\n return \"\".concat(Number(value));\n } else {\n return \"\".concat(value);\n }\n}\nvar EXPLICABLE_TYPES = (/* unused pure expression or super */ null && (['string', 'number', 'boolean']));\nfunction isExplicable(value) {\n return EXPLICABLE_TYPES.some(function (elem) {\n return value.toLowerCase() === elem;\n });\n}\nfunction isBoolean() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return args.some(function (elem) {\n return elem.toLowerCase() === 'boolean';\n });\n}\n\n/* not type checking this file because flow doesn't play well with Proxy */\nvar initProxy;\nif (false) // removed by dead control flow\n{ var getHandler_1, hasHandler_1, isBuiltInModifier_1, hasProxy_1, warnReservedPrefix_1, warnNonPresent_1, allowedGlobals_1; }\nvar sharedPropertyDefinition = {\n enumerable: true,\n configurable: true,\n get: noop,\n set: noop\n};\nfunction proxy(target, sourceKey, key) {\n sharedPropertyDefinition.get = function proxyGetter() {\n return this[sourceKey][key];\n };\n sharedPropertyDefinition.set = function proxySetter(val) {\n this[sourceKey][key] = val;\n };\n Object.defineProperty(target, key, sharedPropertyDefinition);\n}\nfunction initState(vm) {\n var opts = vm.$options;\n if (opts.props) initProps$1(vm, opts.props);\n // Composition API\n initSetup(vm);\n if (opts.methods) initMethods(vm, opts.methods);\n if (opts.data) {\n initData(vm);\n } else {\n var ob = observe(vm._data = {});\n ob && ob.vmCount++;\n }\n if (opts.computed) initComputed$1(vm, opts.computed);\n if (opts.watch && opts.watch !== nativeWatch) {\n initWatch(vm, opts.watch);\n }\n}\nfunction initProps$1(vm, propsOptions) {\n var propsData = vm.$options.propsData || {};\n var props = vm._props = shallowReactive({});\n // cache prop keys so that future props updates can iterate using Array\n // instead of dynamic object key enumeration.\n var keys = vm.$options._propKeys = [];\n var isRoot = !vm.$parent;\n // root instance props should be converted\n if (!isRoot) {\n toggleObserving(false);\n }\n var _loop_1 = function _loop_1(key) {\n keys.push(key);\n var value = validateProp(key, propsOptions, propsData, vm);\n /* istanbul ignore else */\n if (false) // removed by dead control flow\n{ var hyphenatedKey; } else {\n defineReactive(props, key, value, undefined, true /* shallow */);\n }\n // static props are already proxied on the component's prototype\n // during Vue.extend(). We only need to proxy props defined at\n // instantiation here.\n if (!(key in vm)) {\n proxy(vm, \"_props\", key);\n }\n };\n for (var key in propsOptions) {\n _loop_1(key);\n }\n toggleObserving(true);\n}\nfunction initData(vm) {\n var data = vm.$options.data;\n data = vm._data = isFunction(data) ? getData(data, vm) : data || {};\n if (!isPlainObject(data)) {\n data = {};\n false && 0;\n }\n // proxy data on instance\n var keys = Object.keys(data);\n var props = vm.$options.props;\n var methods = vm.$options.methods;\n var i = keys.length;\n while (i--) {\n var key = keys[i];\n if (false) // removed by dead control flow\n{}\n if (props && hasOwn(props, key)) {\n false && 0;\n } else if (!isReserved(key)) {\n proxy(vm, \"_data\", key);\n }\n }\n // observe data\n var ob = observe(data);\n ob && ob.vmCount++;\n}\nfunction getData(data, vm) {\n // #7573 disable dep collection when invoking data getters\n pushTarget();\n try {\n return data.call(vm, vm);\n } catch (e) {\n handleError(e, vm, \"data()\");\n return {};\n } finally {\n popTarget();\n }\n}\nvar computedWatcherOptions = {\n lazy: true\n};\nfunction initComputed$1(vm, computed) {\n // $flow-disable-line\n var watchers = vm._computedWatchers = Object.create(null);\n // computed properties are just getters during SSR\n var isSSR = isServerRendering();\n for (var key in computed) {\n var userDef = computed[key];\n var getter = isFunction(userDef) ? userDef : userDef.get;\n if (false) // removed by dead control flow\n{}\n if (!isSSR) {\n // create internal watcher for the computed property.\n watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions);\n }\n // component-defined computed properties are already defined on the\n // component prototype. We only need to define computed properties defined\n // at instantiation here.\n if (!(key in vm)) {\n defineComputed(vm, key, userDef);\n } else if (false) // removed by dead control flow\n{}\n }\n}\nfunction defineComputed(target, key, userDef) {\n var shouldCache = !isServerRendering();\n if (isFunction(userDef)) {\n sharedPropertyDefinition.get = shouldCache ? createComputedGetter(key) : createGetterInvoker(userDef);\n sharedPropertyDefinition.set = noop;\n } else {\n sharedPropertyDefinition.get = userDef.get ? shouldCache && userDef.cache !== false ? createComputedGetter(key) : createGetterInvoker(userDef.get) : noop;\n sharedPropertyDefinition.set = userDef.set || noop;\n }\n if (false) // removed by dead control flow\n{}\n Object.defineProperty(target, key, sharedPropertyDefinition);\n}\nfunction createComputedGetter(key) {\n return function computedGetter() {\n var watcher = this._computedWatchers && this._computedWatchers[key];\n if (watcher) {\n if (watcher.dirty) {\n watcher.evaluate();\n }\n if (Dep.target) {\n if (false) // removed by dead control flow\n{}\n watcher.depend();\n }\n return watcher.value;\n }\n };\n}\nfunction createGetterInvoker(fn) {\n return function computedGetter() {\n return fn.call(this, this);\n };\n}\nfunction initMethods(vm, methods) {\n var props = vm.$options.props;\n for (var key in methods) {\n if (false) // removed by dead control flow\n{}\n vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);\n }\n}\nfunction initWatch(vm, watch) {\n for (var key in watch) {\n var handler = watch[key];\n if (isArray(handler)) {\n for (var i = 0; i < handler.length; i++) {\n createWatcher(vm, key, handler[i]);\n }\n } else {\n createWatcher(vm, key, handler);\n }\n }\n}\nfunction createWatcher(vm, expOrFn, handler, options) {\n if (isPlainObject(handler)) {\n options = handler;\n handler = handler.handler;\n }\n if (typeof handler === 'string') {\n handler = vm[handler];\n }\n return vm.$watch(expOrFn, handler, options);\n}\nfunction stateMixin(Vue) {\n // flow somehow has problems with directly declared definition object\n // when using Object.defineProperty, so we have to procedurally build up\n // the object here.\n var dataDef = {};\n dataDef.get = function () {\n return this._data;\n };\n var propsDef = {};\n propsDef.get = function () {\n return this._props;\n };\n if (false) // removed by dead control flow\n{}\n Object.defineProperty(Vue.prototype, '$data', dataDef);\n Object.defineProperty(Vue.prototype, '$props', propsDef);\n Vue.prototype.$set = set;\n Vue.prototype.$delete = del;\n Vue.prototype.$watch = function (expOrFn, cb, options) {\n var vm = this;\n if (isPlainObject(cb)) {\n return createWatcher(vm, expOrFn, cb, options);\n }\n options = options || {};\n options.user = true;\n var watcher = new Watcher(vm, expOrFn, cb, options);\n if (options.immediate) {\n var info = \"callback for immediate watcher \\\"\".concat(watcher.expression, \"\\\"\");\n pushTarget();\n invokeWithErrorHandling(cb, vm, [watcher.value], vm, info);\n popTarget();\n }\n return function unwatchFn() {\n watcher.teardown();\n };\n };\n}\nvar uid = 0;\nfunction initMixin$1(Vue) {\n Vue.prototype._init = function (options) {\n var vm = this;\n // a uid\n vm._uid = uid++;\n var startTag, endTag;\n /* istanbul ignore if */\n if (false) // removed by dead control flow\n{}\n // a flag to mark this as a Vue instance without having to do instanceof\n // check\n vm._isVue = true;\n // avoid instances from being observed\n vm.__v_skip = true;\n // effect scope\n vm._scope = new EffectScope(true /* detached */);\n // #13134 edge case where a child component is manually created during the\n // render of a parent component\n vm._scope.parent = undefined;\n vm._scope._vm = true;\n // merge options\n if (options && options._isComponent) {\n // optimize internal component instantiation\n // since dynamic options merging is pretty slow, and none of the\n // internal component options needs special treatment.\n initInternalComponent(vm, options);\n } else {\n vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm);\n }\n /* istanbul ignore else */\n if (false) // removed by dead control flow\n{} else {\n vm._renderProxy = vm;\n }\n // expose real self\n vm._self = vm;\n initLifecycle(vm);\n initEvents(vm);\n initRender(vm);\n callHook$1(vm, 'beforeCreate', undefined, false /* setContext */);\n initInjections(vm); // resolve injections before data/props\n initState(vm);\n initProvide(vm); // resolve provide after data/props\n callHook$1(vm, 'created');\n /* istanbul ignore if */\n if (false) // removed by dead control flow\n{}\n if (vm.$options.el) {\n vm.$mount(vm.$options.el);\n }\n };\n}\nfunction initInternalComponent(vm, options) {\n var opts = vm.$options = Object.create(vm.constructor.options);\n // doing this because it's faster than dynamic enumeration.\n var parentVnode = options._parentVnode;\n opts.parent = options.parent;\n opts._parentVnode = parentVnode;\n var vnodeComponentOptions = parentVnode.componentOptions;\n opts.propsData = vnodeComponentOptions.propsData;\n opts._parentListeners = vnodeComponentOptions.listeners;\n opts._renderChildren = vnodeComponentOptions.children;\n opts._componentTag = vnodeComponentOptions.tag;\n if (options.render) {\n opts.render = options.render;\n opts.staticRenderFns = options.staticRenderFns;\n }\n}\nfunction resolveConstructorOptions(Ctor) {\n var options = Ctor.options;\n if (Ctor.super) {\n var superOptions = resolveConstructorOptions(Ctor.super);\n var cachedSuperOptions = Ctor.superOptions;\n if (superOptions !== cachedSuperOptions) {\n // super option changed,\n // need to resolve new options.\n Ctor.superOptions = superOptions;\n // check if there are any late-modified/attached options (#4976)\n var modifiedOptions = resolveModifiedOptions(Ctor);\n // update base extend options\n if (modifiedOptions) {\n extend(Ctor.extendOptions, modifiedOptions);\n }\n options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n if (options.name) {\n options.components[options.name] = Ctor;\n }\n }\n }\n return options;\n}\nfunction resolveModifiedOptions(Ctor) {\n var modified;\n var latest = Ctor.options;\n var sealed = Ctor.sealedOptions;\n for (var key in latest) {\n if (latest[key] !== sealed[key]) {\n if (!modified) modified = {};\n modified[key] = latest[key];\n }\n }\n return modified;\n}\nfunction Vue(options) {\n if (false) // removed by dead control flow\n{}\n this._init(options);\n}\n//@ts-expect-error Vue has function type\ninitMixin$1(Vue);\n//@ts-expect-error Vue has function type\nstateMixin(Vue);\n//@ts-expect-error Vue has function type\neventsMixin(Vue);\n//@ts-expect-error Vue has function type\nlifecycleMixin(Vue);\n//@ts-expect-error Vue has function type\nrenderMixin(Vue);\nfunction initUse(Vue) {\n Vue.use = function (plugin) {\n var installedPlugins = this._installedPlugins || (this._installedPlugins = []);\n if (installedPlugins.indexOf(plugin) > -1) {\n return this;\n }\n // additional parameters\n var args = toArray(arguments, 1);\n args.unshift(this);\n if (isFunction(plugin.install)) {\n plugin.install.apply(plugin, args);\n } else if (isFunction(plugin)) {\n plugin.apply(null, args);\n }\n installedPlugins.push(plugin);\n return this;\n };\n}\nfunction initMixin(Vue) {\n Vue.mixin = function (mixin) {\n this.options = mergeOptions(this.options, mixin);\n return this;\n };\n}\nfunction initExtend(Vue) {\n /**\n * Each instance constructor, including Vue, has a unique\n * cid. This enables us to create wrapped \"child\n * constructors\" for prototypal inheritance and cache them.\n */\n Vue.cid = 0;\n var cid = 1;\n /**\n * Class inheritance\n */\n Vue.extend = function (extendOptions) {\n extendOptions = extendOptions || {};\n var Super = this;\n var SuperId = Super.cid;\n var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n if (cachedCtors[SuperId]) {\n return cachedCtors[SuperId];\n }\n var name = getComponentName(extendOptions) || getComponentName(Super.options);\n if (false) // removed by dead control flow\n{}\n var Sub = function VueComponent(options) {\n this._init(options);\n };\n Sub.prototype = Object.create(Super.prototype);\n Sub.prototype.constructor = Sub;\n Sub.cid = cid++;\n Sub.options = mergeOptions(Super.options, extendOptions);\n Sub['super'] = Super;\n // For props and computed properties, we define the proxy getters on\n // the Vue instances at extension time, on the extended prototype. This\n // avoids Object.defineProperty calls for each instance created.\n if (Sub.options.props) {\n initProps(Sub);\n }\n if (Sub.options.computed) {\n initComputed(Sub);\n }\n // allow further extension/mixin/plugin usage\n Sub.extend = Super.extend;\n Sub.mixin = Super.mixin;\n Sub.use = Super.use;\n // create asset registers, so extended classes\n // can have their private assets too.\n ASSET_TYPES.forEach(function (type) {\n Sub[type] = Super[type];\n });\n // enable recursive self-lookup\n if (name) {\n Sub.options.components[name] = Sub;\n }\n // keep a reference to the super options at extension time.\n // later at instantiation we can check if Super's options have\n // been updated.\n Sub.superOptions = Super.options;\n Sub.extendOptions = extendOptions;\n Sub.sealedOptions = extend({}, Sub.options);\n // cache constructor\n cachedCtors[SuperId] = Sub;\n return Sub;\n };\n}\nfunction initProps(Comp) {\n var props = Comp.options.props;\n for (var key in props) {\n proxy(Comp.prototype, \"_props\", key);\n }\n}\nfunction initComputed(Comp) {\n var computed = Comp.options.computed;\n for (var key in computed) {\n defineComputed(Comp.prototype, key, computed[key]);\n }\n}\nfunction initAssetRegisters(Vue) {\n /**\n * Create asset registration methods.\n */\n ASSET_TYPES.forEach(function (type) {\n // @ts-expect-error function is not exact same type\n Vue[type] = function (id, definition) {\n if (!definition) {\n return this.options[type + 's'][id];\n } else {\n /* istanbul ignore if */\n if (false) // removed by dead control flow\n{}\n if (type === 'component' && isPlainObject(definition)) {\n // @ts-expect-error\n definition.name = definition.name || id;\n definition = this.options._base.extend(definition);\n }\n if (type === 'directive' && isFunction(definition)) {\n definition = {\n bind: definition,\n update: definition\n };\n }\n this.options[type + 's'][id] = definition;\n return definition;\n }\n };\n });\n}\nfunction _getComponentName(opts) {\n return opts && (getComponentName(opts.Ctor.options) || opts.tag);\n}\nfunction matches(pattern, name) {\n if (isArray(pattern)) {\n return pattern.indexOf(name) > -1;\n } else if (typeof pattern === 'string') {\n return pattern.split(',').indexOf(name) > -1;\n } else if (isRegExp(pattern)) {\n return pattern.test(name);\n }\n /* istanbul ignore next */\n return false;\n}\nfunction pruneCache(keepAliveInstance, filter) {\n var cache = keepAliveInstance.cache,\n keys = keepAliveInstance.keys,\n _vnode = keepAliveInstance._vnode,\n $vnode = keepAliveInstance.$vnode;\n for (var key in cache) {\n var entry = cache[key];\n if (entry) {\n var name_1 = entry.name;\n if (name_1 && !filter(name_1)) {\n pruneCacheEntry(cache, key, keys, _vnode);\n }\n }\n }\n $vnode.componentOptions.children = undefined;\n}\nfunction pruneCacheEntry(cache, key, keys, current) {\n var entry = cache[key];\n if (entry && (!current || entry.tag !== current.tag)) {\n // @ts-expect-error can be undefined\n entry.componentInstance.$destroy();\n }\n cache[key] = null;\n remove$2(keys, key);\n}\nvar patternTypes = [String, RegExp, Array];\n// TODO defineComponent\nvar KeepAlive = {\n name: 'keep-alive',\n abstract: true,\n props: {\n include: patternTypes,\n exclude: patternTypes,\n max: [String, Number]\n },\n methods: {\n cacheVNode: function cacheVNode() {\n var _a = this,\n cache = _a.cache,\n keys = _a.keys,\n vnodeToCache = _a.vnodeToCache,\n keyToCache = _a.keyToCache;\n if (vnodeToCache) {\n var tag = vnodeToCache.tag,\n componentInstance = vnodeToCache.componentInstance,\n componentOptions = vnodeToCache.componentOptions;\n cache[keyToCache] = {\n name: _getComponentName(componentOptions),\n tag: tag,\n componentInstance: componentInstance\n };\n keys.push(keyToCache);\n // prune oldest entry\n if (this.max && keys.length > parseInt(this.max)) {\n pruneCacheEntry(cache, keys[0], keys, this._vnode);\n }\n this.vnodeToCache = null;\n }\n }\n },\n created: function created() {\n this.cache = Object.create(null);\n this.keys = [];\n },\n destroyed: function destroyed() {\n for (var key in this.cache) {\n pruneCacheEntry(this.cache, key, this.keys);\n }\n },\n mounted: function mounted() {\n var _this = this;\n this.cacheVNode();\n this.$watch('include', function (val) {\n pruneCache(_this, function (name) {\n return matches(val, name);\n });\n });\n this.$watch('exclude', function (val) {\n pruneCache(_this, function (name) {\n return !matches(val, name);\n });\n });\n },\n updated: function updated() {\n this.cacheVNode();\n },\n render: function render() {\n var slot = this.$slots.default;\n var vnode = getFirstComponentChild(slot);\n var componentOptions = vnode && vnode.componentOptions;\n if (componentOptions) {\n // check pattern\n var name_2 = _getComponentName(componentOptions);\n var _a = this,\n include = _a.include,\n exclude = _a.exclude;\n if (\n // not included\n include && (!name_2 || !matches(include, name_2)) ||\n // excluded\n exclude && name_2 && matches(exclude, name_2)) {\n return vnode;\n }\n var _b = this,\n cache = _b.cache,\n keys = _b.keys;\n var key = vnode.key == null ?\n // same constructor may get registered as different local components\n // so cid alone is not enough (#3269)\n componentOptions.Ctor.cid + (componentOptions.tag ? \"::\".concat(componentOptions.tag) : '') : vnode.key;\n if (cache[key]) {\n vnode.componentInstance = cache[key].componentInstance;\n // make current key freshest\n remove$2(keys, key);\n keys.push(key);\n } else {\n // delay setting the cache until update\n this.vnodeToCache = vnode;\n this.keyToCache = key;\n }\n // @ts-expect-error can vnode.data can be undefined\n vnode.data.keepAlive = true;\n }\n return vnode || slot && slot[0];\n }\n};\nvar builtInComponents = {\n KeepAlive: KeepAlive\n};\nfunction initGlobalAPI(Vue) {\n // config\n var configDef = {};\n configDef.get = function () {\n return config;\n };\n if (false) // removed by dead control flow\n{}\n Object.defineProperty(Vue, 'config', configDef);\n // exposed util methods.\n // NOTE: these are not considered part of the public API - avoid relying on\n // them unless you are aware of the risk.\n Vue.util = {\n warn: warn,\n extend: extend,\n mergeOptions: mergeOptions,\n defineReactive: defineReactive\n };\n Vue.set = set;\n Vue.delete = del;\n Vue.nextTick = nextTick;\n // 2.6 explicit observable API\n Vue.observable = function (obj) {\n observe(obj);\n return obj;\n };\n Vue.options = Object.create(null);\n ASSET_TYPES.forEach(function (type) {\n Vue.options[type + 's'] = Object.create(null);\n });\n // this is used to identify the \"base\" constructor to extend all plain-object\n // components with in Weex's multi-instance scenarios.\n Vue.options._base = Vue;\n extend(Vue.options.components, builtInComponents);\n initUse(Vue);\n initMixin(Vue);\n initExtend(Vue);\n initAssetRegisters(Vue);\n}\ninitGlobalAPI(Vue);\nObject.defineProperty(Vue.prototype, '$isServer', {\n get: isServerRendering\n});\nObject.defineProperty(Vue.prototype, '$ssrContext', {\n get: function get() {\n /* istanbul ignore next */\n return this.$vnode && this.$vnode.ssrContext;\n }\n});\n// expose FunctionalRenderContext for ssr runtime helper installation\nObject.defineProperty(Vue, 'FunctionalRenderContext', {\n value: FunctionalRenderContext\n});\nVue.version = version;\n\n// these are reserved for web because they are directly compiled away\n// during template compilation\nvar isReservedAttr = makeMap('style,class');\n// attributes that should be using props for binding\nvar acceptValue = makeMap('input,textarea,option,select,progress');\nvar mustUseProp = function mustUseProp(tag, type, attr) {\n return attr === 'value' && acceptValue(tag) && type !== 'button' || attr === 'selected' && tag === 'option' || attr === 'checked' && tag === 'input' || attr === 'muted' && tag === 'video';\n};\nvar isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\nvar isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');\nvar convertEnumeratedValue = function convertEnumeratedValue(key, value) {\n return isFalsyAttrValue(value) || value === 'false' ? 'false' :\n // allow arbitrary string value for contenteditable\n key === 'contenteditable' && isValidContentEditableValue(value) ? value : 'true';\n};\nvar isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' + 'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' + 'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' + 'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' + 'required,reversed,scoped,seamless,selected,sortable,' + 'truespeed,typemustmatch,visible');\nvar xlinkNS = 'http://www.w3.org/1999/xlink';\nvar isXlink = function isXlink(name) {\n return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink';\n};\nvar getXlinkProp = function getXlinkProp(name) {\n return isXlink(name) ? name.slice(6, name.length) : '';\n};\nvar isFalsyAttrValue = function isFalsyAttrValue(val) {\n return val == null || val === false;\n};\nfunction genClassForVnode(vnode) {\n var data = vnode.data;\n var parentNode = vnode;\n var childNode = vnode;\n while (isDef(childNode.componentInstance)) {\n childNode = childNode.componentInstance._vnode;\n if (childNode && childNode.data) {\n data = mergeClassData(childNode.data, data);\n }\n }\n // @ts-expect-error parentNode.parent not VNodeWithData\n while (isDef(parentNode = parentNode.parent)) {\n if (parentNode && parentNode.data) {\n data = mergeClassData(data, parentNode.data);\n }\n }\n return renderClass(data.staticClass, data.class);\n}\nfunction mergeClassData(child, parent) {\n return {\n staticClass: concat(child.staticClass, parent.staticClass),\n class: isDef(child.class) ? [child.class, parent.class] : parent.class\n };\n}\nfunction renderClass(staticClass, dynamicClass) {\n if (isDef(staticClass) || isDef(dynamicClass)) {\n return concat(staticClass, stringifyClass(dynamicClass));\n }\n /* istanbul ignore next */\n return '';\n}\nfunction concat(a, b) {\n return a ? b ? a + ' ' + b : a : b || '';\n}\nfunction stringifyClass(value) {\n if (Array.isArray(value)) {\n return stringifyArray(value);\n }\n if (isObject(value)) {\n return stringifyObject(value);\n }\n if (typeof value === 'string') {\n return value;\n }\n /* istanbul ignore next */\n return '';\n}\nfunction stringifyArray(value) {\n var res = '';\n var stringified;\n for (var i = 0, l = value.length; i < l; i++) {\n if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\n if (res) res += ' ';\n res += stringified;\n }\n }\n return res;\n}\nfunction stringifyObject(value) {\n var res = '';\n for (var key in value) {\n if (value[key]) {\n if (res) res += ' ';\n res += key;\n }\n }\n return res;\n}\nvar namespaceMap = {\n svg: 'http://www.w3.org/2000/svg',\n math: 'http://www.w3.org/1998/Math/MathML'\n};\nvar isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' + 'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' + 'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' + 'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' + 's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' + 'embed,object,param,source,canvas,script,noscript,del,ins,' + 'caption,col,colgroup,table,thead,tbody,td,th,tr,' + 'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' + 'output,progress,select,textarea,' + 'details,dialog,menu,menuitem,summary,' + 'content,element,shadow,template,blockquote,iframe,tfoot');\n// this map is intentionally selective, only covering SVG elements that may\n// contain child elements.\nvar isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' + 'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' + 'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true);\nvar isReservedTag = function isReservedTag(tag) {\n return isHTMLTag(tag) || isSVG(tag);\n};\nfunction getTagNamespace(tag) {\n if (isSVG(tag)) {\n return 'svg';\n }\n // basic support for MathML\n // note it doesn't support other MathML elements being component roots\n if (tag === 'math') {\n return 'math';\n }\n}\nvar unknownElementCache = Object.create(null);\nfunction isUnknownElement(tag) {\n /* istanbul ignore if */\n if (!inBrowser) {\n return true;\n }\n if (isReservedTag(tag)) {\n return false;\n }\n tag = tag.toLowerCase();\n /* istanbul ignore if */\n if (unknownElementCache[tag] != null) {\n return unknownElementCache[tag];\n }\n var el = document.createElement(tag);\n if (tag.indexOf('-') > -1) {\n // https://stackoverflow.com/a/28210364/1070244\n return unknownElementCache[tag] = el.constructor === window.HTMLUnknownElement || el.constructor === window.HTMLElement;\n } else {\n return unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString());\n }\n}\nvar isTextInputType = makeMap('text,number,password,search,email,tel,url');\n\n/**\n * Query an element selector if it's not an element already.\n */\nfunction query(el) {\n if (typeof el === 'string') {\n var selected = document.querySelector(el);\n if (!selected) {\n false && 0;\n return document.createElement('div');\n }\n return selected;\n } else {\n return el;\n }\n}\nfunction createElement(tagName, vnode) {\n var elm = document.createElement(tagName);\n if (tagName !== 'select') {\n return elm;\n }\n // false or null will remove the attribute but undefined will not\n if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\n elm.setAttribute('multiple', 'multiple');\n }\n return elm;\n}\nfunction createElementNS(namespace, tagName) {\n return document.createElementNS(namespaceMap[namespace], tagName);\n}\nfunction createTextNode(text) {\n return document.createTextNode(text);\n}\nfunction createComment(text) {\n return document.createComment(text);\n}\nfunction insertBefore(parentNode, newNode, referenceNode) {\n parentNode.insertBefore(newNode, referenceNode);\n}\nfunction removeChild(node, child) {\n node.removeChild(child);\n}\nfunction appendChild(node, child) {\n node.appendChild(child);\n}\nfunction parentNode(node) {\n return node.parentNode;\n}\nfunction nextSibling(node) {\n return node.nextSibling;\n}\nfunction tagName(node) {\n return node.tagName;\n}\nfunction setTextContent(node, text) {\n node.textContent = text;\n}\nfunction setStyleScope(node, scopeId) {\n node.setAttribute(scopeId, '');\n}\nvar nodeOps = /*#__PURE__*/Object.freeze({\n __proto__: null,\n createElement: createElement,\n createElementNS: createElementNS,\n createTextNode: createTextNode,\n createComment: createComment,\n insertBefore: insertBefore,\n removeChild: removeChild,\n appendChild: appendChild,\n parentNode: parentNode,\n nextSibling: nextSibling,\n tagName: tagName,\n setTextContent: setTextContent,\n setStyleScope: setStyleScope\n});\nvar ref = {\n create: function create(_, vnode) {\n registerRef(vnode);\n },\n update: function update(oldVnode, vnode) {\n if (oldVnode.data.ref !== vnode.data.ref) {\n registerRef(oldVnode, true);\n registerRef(vnode);\n }\n },\n destroy: function destroy(vnode) {\n registerRef(vnode, true);\n }\n};\nfunction registerRef(vnode, isRemoval) {\n var ref = vnode.data.ref;\n if (!isDef(ref)) return;\n var vm = vnode.context;\n var refValue = vnode.componentInstance || vnode.elm;\n var value = isRemoval ? null : refValue;\n var $refsValue = isRemoval ? undefined : refValue;\n if (isFunction(ref)) {\n invokeWithErrorHandling(ref, vm, [value], vm, \"template ref function\");\n return;\n }\n var isFor = vnode.data.refInFor;\n var _isString = typeof ref === 'string' || typeof ref === 'number';\n var _isRef = isRef(ref);\n var refs = vm.$refs;\n if (_isString || _isRef) {\n if (isFor) {\n var existing = _isString ? refs[ref] : ref.value;\n if (isRemoval) {\n isArray(existing) && remove$2(existing, refValue);\n } else {\n if (!isArray(existing)) {\n if (_isString) {\n refs[ref] = [refValue];\n setSetupRef(vm, ref, refs[ref]);\n } else {\n ref.value = [refValue];\n }\n } else if (!existing.includes(refValue)) {\n existing.push(refValue);\n }\n }\n } else if (_isString) {\n if (isRemoval && refs[ref] !== refValue) {\n return;\n }\n refs[ref] = $refsValue;\n setSetupRef(vm, ref, value);\n } else if (_isRef) {\n if (isRemoval && ref.value !== refValue) {\n return;\n }\n ref.value = value;\n } else if (false) // removed by dead control flow\n{}\n }\n}\nfunction setSetupRef(_a, key, val) {\n var _setupState = _a._setupState;\n if (_setupState && hasOwn(_setupState, key)) {\n if (isRef(_setupState[key])) {\n _setupState[key].value = val;\n } else {\n _setupState[key] = val;\n }\n }\n}\n\n/**\n * Virtual DOM patching algorithm based on Snabbdom by\n * Simon Friis Vindum (@paldepind)\n * Licensed under the MIT License\n * https://github.com/paldepind/snabbdom/blob/master/LICENSE\n *\n * modified by Evan You (@yyx990803)\n *\n * Not type-checking this because this file is perf-critical and the cost\n * of making flow understand it is not worth it.\n */\nvar emptyNode = new VNode('', {}, []);\nvar hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\nfunction sameVnode(a, b) {\n return a.key === b.key && a.asyncFactory === b.asyncFactory && (a.tag === b.tag && a.isComment === b.isComment && isDef(a.data) === isDef(b.data) && sameInputType(a, b) || isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error));\n}\nfunction sameInputType(a, b) {\n if (a.tag !== 'input') return true;\n var i;\n var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;\n var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;\n return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB);\n}\nfunction createKeyToOldIdx(children, beginIdx, endIdx) {\n var i, key;\n var map = {};\n for (i = beginIdx; i <= endIdx; ++i) {\n key = children[i].key;\n if (isDef(key)) map[key] = i;\n }\n return map;\n}\nfunction createPatchFunction(backend) {\n var i, j;\n var cbs = {};\n var modules = backend.modules,\n nodeOps = backend.nodeOps;\n for (i = 0; i < hooks.length; ++i) {\n cbs[hooks[i]] = [];\n for (j = 0; j < modules.length; ++j) {\n if (isDef(modules[j][hooks[i]])) {\n cbs[hooks[i]].push(modules[j][hooks[i]]);\n }\n }\n }\n function emptyNodeAt(elm) {\n return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm);\n }\n function createRmCb(childElm, listeners) {\n function remove() {\n if (--remove.listeners === 0) {\n removeNode(childElm);\n }\n }\n remove.listeners = listeners;\n return remove;\n }\n function removeNode(el) {\n var parent = nodeOps.parentNode(el);\n // element may have already been removed due to v-html / v-text\n if (isDef(parent)) {\n nodeOps.removeChild(parent, el);\n }\n }\n function isUnknownElement(vnode, inVPre) {\n return !inVPre && !vnode.ns && !(config.ignoredElements.length && config.ignoredElements.some(function (ignore) {\n return isRegExp(ignore) ? ignore.test(vnode.tag) : ignore === vnode.tag;\n })) && config.isUnknownElement(vnode.tag);\n }\n var creatingElmInVPre = 0;\n function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) {\n if (isDef(vnode.elm) && isDef(ownerArray)) {\n // This vnode was used in a previous render!\n // now it's used as a new node, overwriting its elm would cause\n // potential patch errors down the road when it's used as an insertion\n // reference node. Instead, we clone the node on-demand before creating\n // associated DOM element for it.\n vnode = ownerArray[index] = cloneVNode(vnode);\n }\n vnode.isRootInsert = !nested; // for transition enter check\n if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\n return;\n }\n var data = vnode.data;\n var children = vnode.children;\n var tag = vnode.tag;\n if (isDef(tag)) {\n if (false) // removed by dead control flow\n{}\n vnode.elm = vnode.ns ? nodeOps.createElementNS(vnode.ns, tag) : nodeOps.createElement(tag, vnode);\n setScope(vnode);\n createChildren(vnode, children, insertedVnodeQueue);\n if (isDef(data)) {\n invokeCreateHooks(vnode, insertedVnodeQueue);\n }\n insert(parentElm, vnode.elm, refElm);\n if (false) // removed by dead control flow\n{}\n } else if (isTrue(vnode.isComment)) {\n vnode.elm = nodeOps.createComment(vnode.text);\n insert(parentElm, vnode.elm, refElm);\n } else {\n vnode.elm = nodeOps.createTextNode(vnode.text);\n insert(parentElm, vnode.elm, refElm);\n }\n }\n function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) {\n var i = vnode.data;\n if (isDef(i)) {\n var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\n if (isDef(i = i.hook) && isDef(i = i.init)) {\n i(vnode, false /* hydrating */);\n }\n // after calling the init hook, if the vnode is a child component\n // it should've created a child instance and mounted it. the child\n // component also has set the placeholder vnode's elm.\n // in that case we can just return the element and be done.\n if (isDef(vnode.componentInstance)) {\n initComponent(vnode, insertedVnodeQueue);\n insert(parentElm, vnode.elm, refElm);\n if (isTrue(isReactivated)) {\n reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\n }\n return true;\n }\n }\n }\n function initComponent(vnode, insertedVnodeQueue) {\n if (isDef(vnode.data.pendingInsert)) {\n insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\n vnode.data.pendingInsert = null;\n }\n vnode.elm = vnode.componentInstance.$el;\n if (isPatchable(vnode)) {\n invokeCreateHooks(vnode, insertedVnodeQueue);\n setScope(vnode);\n } else {\n // empty component root.\n // skip all element-related modules except for ref (#3455)\n registerRef(vnode);\n // make sure to invoke the insert hook\n insertedVnodeQueue.push(vnode);\n }\n }\n function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) {\n var i;\n // hack for #4339: a reactivated component with inner transition\n // does not trigger because the inner node's created hooks are not called\n // again. It's not ideal to involve module-specific logic in here but\n // there doesn't seem to be a better way to do it.\n var innerNode = vnode;\n while (innerNode.componentInstance) {\n innerNode = innerNode.componentInstance._vnode;\n if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\n for (i = 0; i < cbs.activate.length; ++i) {\n cbs.activate[i](emptyNode, innerNode);\n }\n insertedVnodeQueue.push(innerNode);\n break;\n }\n }\n // unlike a newly created component,\n // a reactivated keep-alive component doesn't insert itself\n insert(parentElm, vnode.elm, refElm);\n }\n function insert(parent, elm, ref) {\n if (isDef(parent)) {\n if (isDef(ref)) {\n if (nodeOps.parentNode(ref) === parent) {\n nodeOps.insertBefore(parent, elm, ref);\n }\n } else {\n nodeOps.appendChild(parent, elm);\n }\n }\n }\n function createChildren(vnode, children, insertedVnodeQueue) {\n if (isArray(children)) {\n if (false) // removed by dead control flow\n{}\n for (var i_1 = 0; i_1 < children.length; ++i_1) {\n createElm(children[i_1], insertedVnodeQueue, vnode.elm, null, true, children, i_1);\n }\n } else if (isPrimitive(vnode.text)) {\n nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\n }\n }\n function isPatchable(vnode) {\n while (vnode.componentInstance) {\n vnode = vnode.componentInstance._vnode;\n }\n return isDef(vnode.tag);\n }\n function invokeCreateHooks(vnode, insertedVnodeQueue) {\n for (var i_2 = 0; i_2 < cbs.create.length; ++i_2) {\n cbs.create[i_2](emptyNode, vnode);\n }\n i = vnode.data.hook; // Reuse variable\n if (isDef(i)) {\n if (isDef(i.create)) i.create(emptyNode, vnode);\n if (isDef(i.insert)) insertedVnodeQueue.push(vnode);\n }\n }\n // set scope id attribute for scoped CSS.\n // this is implemented as a special case to avoid the overhead\n // of going through the normal attribute patching process.\n function setScope(vnode) {\n var i;\n if (isDef(i = vnode.fnScopeId)) {\n nodeOps.setStyleScope(vnode.elm, i);\n } else {\n var ancestor = vnode;\n while (ancestor) {\n if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\n nodeOps.setStyleScope(vnode.elm, i);\n }\n ancestor = ancestor.parent;\n }\n }\n // for slot content they should also get the scopeId from the host instance.\n if (isDef(i = activeInstance) && i !== vnode.context && i !== vnode.fnContext && isDef(i = i.$options._scopeId)) {\n nodeOps.setStyleScope(vnode.elm, i);\n }\n }\n function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n for (; startIdx <= endIdx; ++startIdx) {\n createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\n }\n }\n function invokeDestroyHook(vnode) {\n var i, j;\n var data = vnode.data;\n if (isDef(data)) {\n if (isDef(i = data.hook) && isDef(i = i.destroy)) i(vnode);\n for (i = 0; i < cbs.destroy.length; ++i) cbs.destroy[i](vnode);\n }\n if (isDef(i = vnode.children)) {\n for (j = 0; j < vnode.children.length; ++j) {\n invokeDestroyHook(vnode.children[j]);\n }\n }\n }\n function removeVnodes(vnodes, startIdx, endIdx) {\n for (; startIdx <= endIdx; ++startIdx) {\n var ch = vnodes[startIdx];\n if (isDef(ch)) {\n if (isDef(ch.tag)) {\n removeAndInvokeRemoveHook(ch);\n invokeDestroyHook(ch);\n } else {\n // Text node\n removeNode(ch.elm);\n }\n }\n }\n }\n function removeAndInvokeRemoveHook(vnode, rm) {\n if (isDef(rm) || isDef(vnode.data)) {\n var i_3;\n var listeners = cbs.remove.length + 1;\n if (isDef(rm)) {\n // we have a recursively passed down rm callback\n // increase the listeners count\n rm.listeners += listeners;\n } else {\n // directly removing\n rm = createRmCb(vnode.elm, listeners);\n }\n // recursively invoke hooks on child component root node\n if (isDef(i_3 = vnode.componentInstance) && isDef(i_3 = i_3._vnode) && isDef(i_3.data)) {\n removeAndInvokeRemoveHook(i_3, rm);\n }\n for (i_3 = 0; i_3 < cbs.remove.length; ++i_3) {\n cbs.remove[i_3](vnode, rm);\n }\n if (isDef(i_3 = vnode.data.hook) && isDef(i_3 = i_3.remove)) {\n i_3(vnode, rm);\n } else {\n rm();\n }\n } else {\n removeNode(vnode.elm);\n }\n }\n function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\n var oldStartIdx = 0;\n var newStartIdx = 0;\n var oldEndIdx = oldCh.length - 1;\n var oldStartVnode = oldCh[0];\n var oldEndVnode = oldCh[oldEndIdx];\n var newEndIdx = newCh.length - 1;\n var newStartVnode = newCh[0];\n var newEndVnode = newCh[newEndIdx];\n var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\n // removeOnly is a special flag used only by <transition-group>\n // to ensure removed elements stay in correct relative positions\n // during leaving transitions\n var canMove = !removeOnly;\n if (false) // removed by dead control flow\n{}\n while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n if (isUndef(oldStartVnode)) {\n oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left\n } else if (isUndef(oldEndVnode)) {\n oldEndVnode = oldCh[--oldEndIdx];\n } else if (sameVnode(oldStartVnode, newStartVnode)) {\n patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n oldStartVnode = oldCh[++oldStartIdx];\n newStartVnode = newCh[++newStartIdx];\n } else if (sameVnode(oldEndVnode, newEndVnode)) {\n patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n oldEndVnode = oldCh[--oldEndIdx];\n newEndVnode = newCh[--newEndIdx];\n } else if (sameVnode(oldStartVnode, newEndVnode)) {\n // Vnode moved right\n patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\n oldStartVnode = oldCh[++oldStartIdx];\n newEndVnode = newCh[--newEndIdx];\n } else if (sameVnode(oldEndVnode, newStartVnode)) {\n // Vnode moved left\n patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n oldEndVnode = oldCh[--oldEndIdx];\n newStartVnode = newCh[++newStartIdx];\n } else {\n if (isUndef(oldKeyToIdx)) oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);\n idxInOld = isDef(newStartVnode.key) ? oldKeyToIdx[newStartVnode.key] : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\n if (isUndef(idxInOld)) {\n // New element\n createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n } else {\n vnodeToMove = oldCh[idxInOld];\n if (sameVnode(vnodeToMove, newStartVnode)) {\n patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n oldCh[idxInOld] = undefined;\n canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\n } else {\n // same key but different element. treat as new element\n createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n }\n }\n newStartVnode = newCh[++newStartIdx];\n }\n }\n if (oldStartIdx > oldEndIdx) {\n refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\n addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n } else if (newStartIdx > newEndIdx) {\n removeVnodes(oldCh, oldStartIdx, oldEndIdx);\n }\n }\n function checkDuplicateKeys(children) {\n var seenKeys = {};\n for (var i_4 = 0; i_4 < children.length; i_4++) {\n var vnode = children[i_4];\n var key = vnode.key;\n if (isDef(key)) {\n if (seenKeys[key]) {\n warn(\"Duplicate keys detected: '\".concat(key, \"'. This may cause an update error.\"), vnode.context);\n } else {\n seenKeys[key] = true;\n }\n }\n }\n }\n function findIdxInOld(node, oldCh, start, end) {\n for (var i_5 = start; i_5 < end; i_5++) {\n var c = oldCh[i_5];\n if (isDef(c) && sameVnode(node, c)) return i_5;\n }\n }\n function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) {\n if (oldVnode === vnode) {\n return;\n }\n if (isDef(vnode.elm) && isDef(ownerArray)) {\n // clone reused vnode\n vnode = ownerArray[index] = cloneVNode(vnode);\n }\n var elm = vnode.elm = oldVnode.elm;\n if (isTrue(oldVnode.isAsyncPlaceholder)) {\n if (isDef(vnode.asyncFactory.resolved)) {\n hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\n } else {\n vnode.isAsyncPlaceholder = true;\n }\n return;\n }\n // reuse element for static trees.\n // note we only do this if the vnode is cloned -\n // if the new node is not cloned it means the render functions have been\n // reset by the hot-reload-api and we need to do a proper re-render.\n if (isTrue(vnode.isStatic) && isTrue(oldVnode.isStatic) && vnode.key === oldVnode.key && (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) {\n vnode.componentInstance = oldVnode.componentInstance;\n return;\n }\n var i;\n var data = vnode.data;\n if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {\n i(oldVnode, vnode);\n }\n var oldCh = oldVnode.children;\n var ch = vnode.children;\n if (isDef(data) && isPatchable(vnode)) {\n for (i = 0; i < cbs.update.length; ++i) cbs.update[i](oldVnode, vnode);\n if (isDef(i = data.hook) && isDef(i = i.update)) i(oldVnode, vnode);\n }\n if (isUndef(vnode.text)) {\n if (isDef(oldCh) && isDef(ch)) {\n if (oldCh !== ch) updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly);\n } else if (isDef(ch)) {\n if (false) // removed by dead control flow\n{}\n if (isDef(oldVnode.text)) nodeOps.setTextContent(elm, '');\n addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n } else if (isDef(oldCh)) {\n removeVnodes(oldCh, 0, oldCh.length - 1);\n } else if (isDef(oldVnode.text)) {\n nodeOps.setTextContent(elm, '');\n }\n } else if (oldVnode.text !== vnode.text) {\n nodeOps.setTextContent(elm, vnode.text);\n }\n if (isDef(data)) {\n if (isDef(i = data.hook) && isDef(i = i.postpatch)) i(oldVnode, vnode);\n }\n }\n function invokeInsertHook(vnode, queue, initial) {\n // delay insert hooks for component root nodes, invoke them after the\n // element is really inserted\n if (isTrue(initial) && isDef(vnode.parent)) {\n vnode.parent.data.pendingInsert = queue;\n } else {\n for (var i_6 = 0; i_6 < queue.length; ++i_6) {\n queue[i_6].data.hook.insert(queue[i_6]);\n }\n }\n }\n var hydrationBailed = false;\n // list of modules that can skip create hook during hydration because they\n // are already rendered on the client or has no need for initialization\n // Note: style is excluded because it relies on initial clone for future\n // deep updates (#7063).\n var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\n // Note: this is a browser-only function so we can assume elms are DOM nodes.\n function hydrate(elm, vnode, insertedVnodeQueue, inVPre) {\n var i;\n var tag = vnode.tag,\n data = vnode.data,\n children = vnode.children;\n inVPre = inVPre || data && data.pre;\n vnode.elm = elm;\n if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\n vnode.isAsyncPlaceholder = true;\n return true;\n }\n // assert node match\n if (false) // removed by dead control flow\n{}\n if (isDef(data)) {\n if (isDef(i = data.hook) && isDef(i = i.init)) i(vnode, true /* hydrating */);\n if (isDef(i = vnode.componentInstance)) {\n // child component. it should have hydrated its own tree.\n initComponent(vnode, insertedVnodeQueue);\n return true;\n }\n }\n if (isDef(tag)) {\n if (isDef(children)) {\n // empty element, allow client to pick up and populate children\n if (!elm.hasChildNodes()) {\n createChildren(vnode, children, insertedVnodeQueue);\n } else {\n // v-html and domProps: innerHTML\n if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {\n if (i !== elm.innerHTML) {\n /* istanbul ignore if */\n if (false) // removed by dead control flow\n{}\n return false;\n }\n } else {\n // iterate and compare children lists\n var childrenMatch = true;\n var childNode = elm.firstChild;\n for (var i_7 = 0; i_7 < children.length; i_7++) {\n if (!childNode || !hydrate(childNode, children[i_7], insertedVnodeQueue, inVPre)) {\n childrenMatch = false;\n break;\n }\n childNode = childNode.nextSibling;\n }\n // if childNode is not null, it means the actual childNodes list is\n // longer than the virtual children list.\n if (!childrenMatch || childNode) {\n /* istanbul ignore if */\n if (false) // removed by dead control flow\n{}\n return false;\n }\n }\n }\n }\n if (isDef(data)) {\n var fullInvoke = false;\n for (var key in data) {\n if (!isRenderedModule(key)) {\n fullInvoke = true;\n invokeCreateHooks(vnode, insertedVnodeQueue);\n break;\n }\n }\n if (!fullInvoke && data['class']) {\n // ensure collecting deps for deep class bindings for future updates\n traverse(data['class']);\n }\n }\n } else if (elm.data !== vnode.text) {\n elm.data = vnode.text;\n }\n return true;\n }\n function assertNodeMatch(node, vnode, inVPre) {\n if (isDef(vnode.tag)) {\n return vnode.tag.indexOf('vue-component') === 0 || !isUnknownElement(vnode, inVPre) && vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase());\n } else {\n return node.nodeType === (vnode.isComment ? 8 : 3);\n }\n }\n return function patch(oldVnode, vnode, hydrating, removeOnly) {\n if (isUndef(vnode)) {\n if (isDef(oldVnode)) invokeDestroyHook(oldVnode);\n return;\n }\n var isInitialPatch = false;\n var insertedVnodeQueue = [];\n if (isUndef(oldVnode)) {\n // empty mount (likely as component), create new root element\n isInitialPatch = true;\n createElm(vnode, insertedVnodeQueue);\n } else {\n var isRealElement = isDef(oldVnode.nodeType);\n if (!isRealElement && sameVnode(oldVnode, vnode)) {\n // patch existing root node\n patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);\n } else {\n if (isRealElement) {\n // mounting to a real element\n // check if this is server-rendered content and if we can perform\n // a successful hydration.\n if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\n oldVnode.removeAttribute(SSR_ATTR);\n hydrating = true;\n }\n if (isTrue(hydrating)) {\n if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\n invokeInsertHook(vnode, insertedVnodeQueue, true);\n return oldVnode;\n } else if (false) // removed by dead control flow\n{}\n }\n // either not server-rendered, or hydration failed.\n // create an empty node and replace it\n oldVnode = emptyNodeAt(oldVnode);\n }\n // replacing existing element\n var oldElm = oldVnode.elm;\n var parentElm = nodeOps.parentNode(oldElm);\n // create new node\n createElm(vnode, insertedVnodeQueue,\n // extremely rare edge case: do not insert if old element is in a\n // leaving transition. Only happens when combining transition +\n // keep-alive + HOCs. (#4590)\n oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm));\n // update parent placeholder node element, recursively\n if (isDef(vnode.parent)) {\n var ancestor = vnode.parent;\n var patchable = isPatchable(vnode);\n while (ancestor) {\n for (var i_8 = 0; i_8 < cbs.destroy.length; ++i_8) {\n cbs.destroy[i_8](ancestor);\n }\n ancestor.elm = vnode.elm;\n if (patchable) {\n for (var i_9 = 0; i_9 < cbs.create.length; ++i_9) {\n cbs.create[i_9](emptyNode, ancestor);\n }\n // #6513\n // invoke insert hooks that may have been merged by create hooks.\n // e.g. for directives that uses the \"inserted\" hook.\n var insert_1 = ancestor.data.hook.insert;\n if (insert_1.merged) {\n // start at index 1 to avoid re-invoking component mounted hook\n // clone insert hooks to avoid being mutated during iteration.\n // e.g. for customed directives under transition group.\n var cloned = insert_1.fns.slice(1);\n for (var i_10 = 0; i_10 < cloned.length; i_10++) {\n cloned[i_10]();\n }\n }\n } else {\n registerRef(ancestor);\n }\n ancestor = ancestor.parent;\n }\n }\n // destroy old node\n if (isDef(parentElm)) {\n removeVnodes([oldVnode], 0, 0);\n } else if (isDef(oldVnode.tag)) {\n invokeDestroyHook(oldVnode);\n }\n }\n }\n invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n return vnode.elm;\n };\n}\nvar directives = {\n create: updateDirectives,\n update: updateDirectives,\n destroy: function unbindDirectives(vnode) {\n // @ts-expect-error emptyNode is not VNodeWithData\n updateDirectives(vnode, emptyNode);\n }\n};\nfunction updateDirectives(oldVnode, vnode) {\n if (oldVnode.data.directives || vnode.data.directives) {\n _update(oldVnode, vnode);\n }\n}\nfunction _update(oldVnode, vnode) {\n var isCreate = oldVnode === emptyNode;\n var isDestroy = vnode === emptyNode;\n var oldDirs = normalizeDirectives(oldVnode.data.directives, oldVnode.context);\n var newDirs = normalizeDirectives(vnode.data.directives, vnode.context);\n var dirsWithInsert = [];\n var dirsWithPostpatch = [];\n var key, oldDir, dir;\n for (key in newDirs) {\n oldDir = oldDirs[key];\n dir = newDirs[key];\n if (!oldDir) {\n // new directive, bind\n callHook(dir, 'bind', vnode, oldVnode);\n if (dir.def && dir.def.inserted) {\n dirsWithInsert.push(dir);\n }\n } else {\n // existing directive, update\n dir.oldValue = oldDir.value;\n dir.oldArg = oldDir.arg;\n callHook(dir, 'update', vnode, oldVnode);\n if (dir.def && dir.def.componentUpdated) {\n dirsWithPostpatch.push(dir);\n }\n }\n }\n if (dirsWithInsert.length) {\n var callInsert = function callInsert() {\n for (var i = 0; i < dirsWithInsert.length; i++) {\n callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n }\n };\n if (isCreate) {\n mergeVNodeHook(vnode, 'insert', callInsert);\n } else {\n callInsert();\n }\n }\n if (dirsWithPostpatch.length) {\n mergeVNodeHook(vnode, 'postpatch', function () {\n for (var i = 0; i < dirsWithPostpatch.length; i++) {\n callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n }\n });\n }\n if (!isCreate) {\n for (key in oldDirs) {\n if (!newDirs[key]) {\n // no longer present, unbind\n callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n }\n }\n }\n}\nvar emptyModifiers = Object.create(null);\nfunction normalizeDirectives(dirs, vm) {\n var res = Object.create(null);\n if (!dirs) {\n // $flow-disable-line\n return res;\n }\n var i, dir;\n for (i = 0; i < dirs.length; i++) {\n dir = dirs[i];\n if (!dir.modifiers) {\n // $flow-disable-line\n dir.modifiers = emptyModifiers;\n }\n res[getRawDirName(dir)] = dir;\n if (vm._setupState && vm._setupState.__sfc) {\n var setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name);\n if (typeof setupDef === 'function') {\n dir.def = {\n bind: setupDef,\n update: setupDef\n };\n } else {\n dir.def = setupDef;\n }\n }\n dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true);\n }\n // $flow-disable-line\n return res;\n}\nfunction getRawDirName(dir) {\n return dir.rawName || \"\".concat(dir.name, \".\").concat(Object.keys(dir.modifiers || {}).join('.'));\n}\nfunction callHook(dir, hook, vnode, oldVnode, isDestroy) {\n var fn = dir.def && dir.def[hook];\n if (fn) {\n try {\n fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n } catch (e) {\n handleError(e, vnode.context, \"directive \".concat(dir.name, \" \").concat(hook, \" hook\"));\n }\n }\n}\nvar baseModules = [ref, directives];\nfunction updateAttrs(oldVnode, vnode) {\n var opts = vnode.componentOptions;\n if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\n return;\n }\n if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n return;\n }\n var key, cur, old;\n var elm = vnode.elm;\n var oldAttrs = oldVnode.data.attrs || {};\n var attrs = vnode.data.attrs || {};\n // clone observed objects, as the user probably wants to mutate it\n if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) {\n attrs = vnode.data.attrs = extend({}, attrs);\n }\n for (key in attrs) {\n cur = attrs[key];\n old = oldAttrs[key];\n if (old !== cur) {\n setAttr(elm, key, cur, vnode.data.pre);\n }\n }\n // #4391: in IE9, setting type can reset value for input[type=radio]\n // #6666: IE/Edge forces progress value down to 1 before setting a max\n /* istanbul ignore if */\n if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\n setAttr(elm, 'value', attrs.value);\n }\n for (key in oldAttrs) {\n if (isUndef(attrs[key])) {\n if (isXlink(key)) {\n elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n } else if (!isEnumeratedAttr(key)) {\n elm.removeAttribute(key);\n }\n }\n }\n}\nfunction setAttr(el, key, value, isInPre) {\n if (isInPre || el.tagName.indexOf('-') > -1) {\n baseSetAttr(el, key, value);\n } else if (isBooleanAttr(key)) {\n // set attribute for blank value\n // e.g. <option disabled>Select one</option>\n if (isFalsyAttrValue(value)) {\n el.removeAttribute(key);\n } else {\n // technically allowfullscreen is a boolean attribute for <iframe>,\n // but Flash expects a value of \"true\" when used on <embed> tag\n value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key;\n el.setAttribute(key, value);\n }\n } else if (isEnumeratedAttr(key)) {\n el.setAttribute(key, convertEnumeratedValue(key, value));\n } else if (isXlink(key)) {\n if (isFalsyAttrValue(value)) {\n el.removeAttributeNS(xlinkNS, getXlinkProp(key));\n } else {\n el.setAttributeNS(xlinkNS, key, value);\n }\n } else {\n baseSetAttr(el, key, value);\n }\n}\nfunction baseSetAttr(el, key, value) {\n if (isFalsyAttrValue(value)) {\n el.removeAttribute(key);\n } else {\n // #7138: IE10 & 11 fires input event when setting placeholder on\n // <textarea>... block the first input event and remove the blocker\n // immediately.\n /* istanbul ignore if */\n if (isIE && !isIE9 && el.tagName === 'TEXTAREA' && key === 'placeholder' && value !== '' && !el.__ieph) {\n var _blocker_ = function blocker_1(e) {\n e.stopImmediatePropagation();\n el.removeEventListener('input', _blocker_);\n };\n el.addEventListener('input', _blocker_);\n // $flow-disable-line\n el.__ieph = true; /* IE placeholder patched */\n }\n el.setAttribute(key, value);\n }\n}\nvar attrs = {\n create: updateAttrs,\n update: updateAttrs\n};\nfunction updateClass(oldVnode, vnode) {\n var el = vnode.elm;\n var data = vnode.data;\n var oldData = oldVnode.data;\n if (isUndef(data.staticClass) && isUndef(data.class) && (isUndef(oldData) || isUndef(oldData.staticClass) && isUndef(oldData.class))) {\n return;\n }\n var cls = genClassForVnode(vnode);\n // handle transition classes\n var transitionClass = el._transitionClasses;\n if (isDef(transitionClass)) {\n cls = concat(cls, stringifyClass(transitionClass));\n }\n // set the class\n if (cls !== el._prevClass) {\n el.setAttribute('class', cls);\n el._prevClass = cls;\n }\n}\nvar klass = {\n create: updateClass,\n update: updateClass\n};\n\n// in some cases, the event used has to be determined at runtime\n// so we used some reserved tokens during compile.\nvar RANGE_TOKEN = '__r';\nvar CHECKBOX_RADIO_TOKEN = '__c';\n\n// normalize v-model event tokens that can only be determined at runtime.\n// it's important to place the event as the first in the array because\n// the whole point is ensuring the v-model callback gets called before\n// user-attached handlers.\nfunction normalizeEvents(on) {\n /* istanbul ignore if */\n if (isDef(on[RANGE_TOKEN])) {\n // IE input[type=range] only supports `change` event\n var event_1 = isIE ? 'change' : 'input';\n on[event_1] = [].concat(on[RANGE_TOKEN], on[event_1] || []);\n delete on[RANGE_TOKEN];\n }\n // This was originally intended to fix #4521 but no longer necessary\n // after 2.5. Keeping it for backwards compat with generated code from < 2.4\n /* istanbul ignore if */\n if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\n on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\n delete on[CHECKBOX_RADIO_TOKEN];\n }\n}\nvar target;\nfunction createOnceHandler(event, handler, capture) {\n var _target = target; // save current target element in closure\n return function onceHandler() {\n var res = handler.apply(null, arguments);\n if (res !== null) {\n remove(event, onceHandler, capture, _target);\n }\n };\n}\n// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp\n// implementation and does not fire microtasks in between event propagation, so\n// safe to exclude.\nvar useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);\nfunction add(name, handler, capture, passive) {\n // async edge case #6566: inner click event triggers patch, event handler\n // attached to outer element during patch, and triggered again. This\n // happens because browsers fire microtask ticks between event propagation.\n // the solution is simple: we save the timestamp when a handler is attached,\n // and the handler would only fire if the event passed to it was fired\n // AFTER it was attached.\n if (useMicrotaskFix) {\n var attachedTimestamp_1 = currentFlushTimestamp;\n var original_1 = handler;\n //@ts-expect-error\n handler = original_1._wrapper = function (e) {\n if (\n // no bubbling, should always fire.\n // this is just a safety net in case event.timeStamp is unreliable in\n // certain weird environments...\n e.target === e.currentTarget ||\n // event is fired after handler attachment\n e.timeStamp >= attachedTimestamp_1 ||\n // bail for environments that have buggy event.timeStamp implementations\n // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState\n // #9681 QtWebEngine event.timeStamp is negative value\n e.timeStamp <= 0 ||\n // #9448 bail if event is fired in another document in a multi-page\n // electron/nw.js app, since event.timeStamp will be using a different\n // starting reference\n e.target.ownerDocument !== document) {\n return original_1.apply(this, arguments);\n }\n };\n }\n target.addEventListener(name, handler, supportsPassive ? {\n capture: capture,\n passive: passive\n } : capture);\n}\nfunction remove(name, handler, capture, _target) {\n (_target || target).removeEventListener(name,\n //@ts-expect-error\n handler._wrapper || handler, capture);\n}\nfunction updateDOMListeners(oldVnode, vnode) {\n if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\n return;\n }\n var on = vnode.data.on || {};\n var oldOn = oldVnode.data.on || {};\n // vnode is empty when removing all listeners,\n // and use old vnode dom element\n target = vnode.elm || oldVnode.elm;\n normalizeEvents(on);\n updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context);\n target = undefined;\n}\nvar events = {\n create: updateDOMListeners,\n update: updateDOMListeners,\n // @ts-expect-error emptyNode has actually data\n destroy: function destroy(vnode) {\n return updateDOMListeners(vnode, emptyNode);\n }\n};\nvar svgContainer;\nfunction updateDOMProps(oldVnode, vnode) {\n if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\n return;\n }\n var key, cur;\n var elm = vnode.elm;\n var oldProps = oldVnode.data.domProps || {};\n var props = vnode.data.domProps || {};\n // clone observed objects, as the user probably wants to mutate it\n if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) {\n props = vnode.data.domProps = extend({}, props);\n }\n for (key in oldProps) {\n if (!(key in props)) {\n elm[key] = '';\n }\n }\n for (key in props) {\n cur = props[key];\n // ignore children if the node has textContent or innerHTML,\n // as these will throw away existing DOM nodes and cause removal errors\n // on subsequent patches (#3360)\n if (key === 'textContent' || key === 'innerHTML') {\n if (vnode.children) vnode.children.length = 0;\n if (cur === oldProps[key]) continue;\n // #6601 work around Chrome version <= 55 bug where single textNode\n // replaced by innerHTML/textContent retains its parentNode property\n if (elm.childNodes.length === 1) {\n elm.removeChild(elm.childNodes[0]);\n }\n }\n if (key === 'value' && elm.tagName !== 'PROGRESS') {\n // store value as _value as well since\n // non-string values will be stringified\n elm._value = cur;\n // avoid resetting cursor position when value is the same\n var strCur = isUndef(cur) ? '' : String(cur);\n if (shouldUpdateValue(elm, strCur)) {\n elm.value = strCur;\n }\n } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) {\n // IE doesn't support innerHTML for SVG elements\n svgContainer = svgContainer || document.createElement('div');\n svgContainer.innerHTML = \"<svg>\".concat(cur, \"</svg>\");\n var svg = svgContainer.firstChild;\n while (elm.firstChild) {\n elm.removeChild(elm.firstChild);\n }\n while (svg.firstChild) {\n elm.appendChild(svg.firstChild);\n }\n } else if (\n // skip the update if old and new VDOM state is the same.\n // `value` is handled separately because the DOM value may be temporarily\n // out of sync with VDOM state due to focus, composition and modifiers.\n // This #4521 by skipping the unnecessary `checked` update.\n cur !== oldProps[key]) {\n // some property updates can throw\n // e.g. `value` on <progress> w/ non-finite value\n try {\n elm[key] = cur;\n } catch (e) {}\n }\n }\n}\nfunction shouldUpdateValue(elm, checkVal) {\n return (\n //@ts-expect-error\n !elm.composing && (elm.tagName === 'OPTION' || isNotInFocusAndDirty(elm, checkVal) || isDirtyWithModifiers(elm, checkVal))\n );\n}\nfunction isNotInFocusAndDirty(elm, checkVal) {\n // return true when textbox (.number and .trim) loses focus and its value is\n // not equal to the updated value\n var notInFocus = true;\n // #6157\n // work around IE bug when accessing document.activeElement in an iframe\n try {\n notInFocus = document.activeElement !== elm;\n } catch (e) {}\n return notInFocus && elm.value !== checkVal;\n}\nfunction isDirtyWithModifiers(elm, newVal) {\n var value = elm.value;\n var modifiers = elm._vModifiers; // injected by v-model runtime\n if (isDef(modifiers)) {\n if (modifiers.number) {\n return toNumber(value) !== toNumber(newVal);\n }\n if (modifiers.trim) {\n return value.trim() !== newVal.trim();\n }\n }\n return value !== newVal;\n}\nvar domProps = {\n create: updateDOMProps,\n update: updateDOMProps\n};\nvar parseStyleText = cached(function (cssText) {\n var res = {};\n var listDelimiter = /;(?![^(]*\\))/g;\n var propertyDelimiter = /:(.+)/;\n cssText.split(listDelimiter).forEach(function (item) {\n if (item) {\n var tmp = item.split(propertyDelimiter);\n tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return res;\n});\n// merge static and dynamic style data on the same vnode\nfunction normalizeStyleData(data) {\n var style = normalizeStyleBinding(data.style);\n // static style is pre-processed into an object during compilation\n // and is always a fresh object, so it's safe to merge into it\n return data.staticStyle ? extend(data.staticStyle, style) : style;\n}\n// normalize possible array / string values into Object\nfunction normalizeStyleBinding(bindingStyle) {\n if (Array.isArray(bindingStyle)) {\n return toObject(bindingStyle);\n }\n if (typeof bindingStyle === 'string') {\n return parseStyleText(bindingStyle);\n }\n return bindingStyle;\n}\n/**\n * parent component style should be after child's\n * so that parent component's style could override it\n */\nfunction getStyle(vnode, checkChild) {\n var res = {};\n var styleData;\n if (checkChild) {\n var childNode = vnode;\n while (childNode.componentInstance) {\n childNode = childNode.componentInstance._vnode;\n if (childNode && childNode.data && (styleData = normalizeStyleData(childNode.data))) {\n extend(res, styleData);\n }\n }\n }\n if (styleData = normalizeStyleData(vnode.data)) {\n extend(res, styleData);\n }\n var parentNode = vnode;\n // @ts-expect-error parentNode.parent not VNodeWithData\n while (parentNode = parentNode.parent) {\n if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\n extend(res, styleData);\n }\n }\n return res;\n}\nvar cssVarRE = /^--/;\nvar importantRE = /\\s*!important$/;\nvar setProp = function setProp(el, name, val) {\n /* istanbul ignore if */\n if (cssVarRE.test(name)) {\n el.style.setProperty(name, val);\n } else if (importantRE.test(val)) {\n el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');\n } else {\n var normalizedName = normalize(name);\n if (Array.isArray(val)) {\n // Support values array created by autoprefixer, e.g.\n // {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\n // Set them one by one, and the browser will only set those it can recognize\n for (var i = 0, len = val.length; i < len; i++) {\n el.style[normalizedName] = val[i];\n }\n } else {\n el.style[normalizedName] = val;\n }\n }\n};\nvar vendorNames = ['Webkit', 'Moz', 'ms'];\nvar emptyStyle;\nvar normalize = cached(function (prop) {\n emptyStyle = emptyStyle || document.createElement('div').style;\n prop = camelize(prop);\n if (prop !== 'filter' && prop in emptyStyle) {\n return prop;\n }\n var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\n for (var i = 0; i < vendorNames.length; i++) {\n var name_1 = vendorNames[i] + capName;\n if (name_1 in emptyStyle) {\n return name_1;\n }\n }\n});\nfunction updateStyle(oldVnode, vnode) {\n var data = vnode.data;\n var oldData = oldVnode.data;\n if (isUndef(data.staticStyle) && isUndef(data.style) && isUndef(oldData.staticStyle) && isUndef(oldData.style)) {\n return;\n }\n var cur, name;\n var el = vnode.elm;\n var oldStaticStyle = oldData.staticStyle;\n var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\n // if static style exists, stylebinding already merged into it when doing normalizeStyleData\n var oldStyle = oldStaticStyle || oldStyleBinding;\n var style = normalizeStyleBinding(vnode.data.style) || {};\n // store normalized style under a different key for next diff\n // make sure to clone it if it's reactive, since the user likely wants\n // to mutate it.\n vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style;\n var newStyle = getStyle(vnode, true);\n for (name in oldStyle) {\n if (isUndef(newStyle[name])) {\n setProp(el, name, '');\n }\n }\n for (name in newStyle) {\n cur = newStyle[name];\n // ie9 setting to null has no effect, must use empty string\n setProp(el, name, cur == null ? '' : cur);\n }\n}\nvar style = {\n create: updateStyle,\n update: updateStyle\n};\nvar whitespaceRE = /\\s+/;\n/**\n * Add class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction addClass(el, cls) {\n /* istanbul ignore if */\n if (!cls || !(cls = cls.trim())) {\n return;\n }\n /* istanbul ignore else */\n if (el.classList) {\n if (cls.indexOf(' ') > -1) {\n cls.split(whitespaceRE).forEach(function (c) {\n return el.classList.add(c);\n });\n } else {\n el.classList.add(cls);\n }\n } else {\n var cur = \" \".concat(el.getAttribute('class') || '', \" \");\n if (cur.indexOf(' ' + cls + ' ') < 0) {\n el.setAttribute('class', (cur + cls).trim());\n }\n }\n}\n/**\n * Remove class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction removeClass(el, cls) {\n /* istanbul ignore if */\n if (!cls || !(cls = cls.trim())) {\n return;\n }\n /* istanbul ignore else */\n if (el.classList) {\n if (cls.indexOf(' ') > -1) {\n cls.split(whitespaceRE).forEach(function (c) {\n return el.classList.remove(c);\n });\n } else {\n el.classList.remove(cls);\n }\n if (!el.classList.length) {\n el.removeAttribute('class');\n }\n } else {\n var cur = \" \".concat(el.getAttribute('class') || '', \" \");\n var tar = ' ' + cls + ' ';\n while (cur.indexOf(tar) >= 0) {\n cur = cur.replace(tar, ' ');\n }\n cur = cur.trim();\n if (cur) {\n el.setAttribute('class', cur);\n } else {\n el.removeAttribute('class');\n }\n }\n}\nfunction resolveTransition(def) {\n if (!def) {\n return;\n }\n /* istanbul ignore else */\n if (_typeof(def) === 'object') {\n var res = {};\n if (def.css !== false) {\n extend(res, autoCssTransition(def.name || 'v'));\n }\n extend(res, def);\n return res;\n } else if (typeof def === 'string') {\n return autoCssTransition(def);\n }\n}\nvar autoCssTransition = cached(function (name) {\n return {\n enterClass: \"\".concat(name, \"-enter\"),\n enterToClass: \"\".concat(name, \"-enter-to\"),\n enterActiveClass: \"\".concat(name, \"-enter-active\"),\n leaveClass: \"\".concat(name, \"-leave\"),\n leaveToClass: \"\".concat(name, \"-leave-to\"),\n leaveActiveClass: \"\".concat(name, \"-leave-active\")\n };\n});\nvar hasTransition = inBrowser && !isIE9;\nvar TRANSITION = 'transition';\nvar ANIMATION = 'animation';\n// Transition property/event sniffing\nvar transitionProp = 'transition';\nvar transitionEndEvent = 'transitionend';\nvar animationProp = 'animation';\nvar animationEndEvent = 'animationend';\nif (hasTransition) {\n /* istanbul ignore if */\n if (window.ontransitionend === undefined && window.onwebkittransitionend !== undefined) {\n transitionProp = 'WebkitTransition';\n transitionEndEvent = 'webkitTransitionEnd';\n }\n if (window.onanimationend === undefined && window.onwebkitanimationend !== undefined) {\n animationProp = 'WebkitAnimation';\n animationEndEvent = 'webkitAnimationEnd';\n }\n}\n// binding to window is necessary to make hot reload work in IE in strict mode\nvar raf = inBrowser ? window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : setTimeout : /* istanbul ignore next */function (/* istanbul ignore next */fn) {\n return fn();\n};\nfunction nextFrame(fn) {\n raf(function () {\n // @ts-expect-error\n raf(fn);\n });\n}\nfunction addTransitionClass(el, cls) {\n var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\n if (transitionClasses.indexOf(cls) < 0) {\n transitionClasses.push(cls);\n addClass(el, cls);\n }\n}\nfunction removeTransitionClass(el, cls) {\n if (el._transitionClasses) {\n remove$2(el._transitionClasses, cls);\n }\n removeClass(el, cls);\n}\nfunction whenTransitionEnds(el, expectedType, cb) {\n var _a = getTransitionInfo(el, expectedType),\n type = _a.type,\n timeout = _a.timeout,\n propCount = _a.propCount;\n if (!type) return cb();\n var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\n var ended = 0;\n var end = function end() {\n el.removeEventListener(event, onEnd);\n cb();\n };\n var onEnd = function onEnd(e) {\n if (e.target === el) {\n if (++ended >= propCount) {\n end();\n }\n }\n };\n setTimeout(function () {\n if (ended < propCount) {\n end();\n }\n }, timeout + 1);\n el.addEventListener(event, onEnd);\n}\nvar transformRE = /\\b(transform|all)(,|$)/;\nfunction getTransitionInfo(el, expectedType) {\n var styles = window.getComputedStyle(el);\n // JSDOM may return undefined for transition properties\n var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');\n var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');\n var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');\n var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');\n var animationTimeout = getTimeout(animationDelays, animationDurations);\n var type;\n var timeout = 0;\n var propCount = 0;\n /* istanbul ignore if */\n if (expectedType === TRANSITION) {\n if (transitionTimeout > 0) {\n type = TRANSITION;\n timeout = transitionTimeout;\n propCount = transitionDurations.length;\n }\n } else if (expectedType === ANIMATION) {\n if (animationTimeout > 0) {\n type = ANIMATION;\n timeout = animationTimeout;\n propCount = animationDurations.length;\n }\n } else {\n timeout = Math.max(transitionTimeout, animationTimeout);\n type = timeout > 0 ? transitionTimeout > animationTimeout ? TRANSITION : ANIMATION : null;\n propCount = type ? type === TRANSITION ? transitionDurations.length : animationDurations.length : 0;\n }\n var hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']);\n return {\n type: type,\n timeout: timeout,\n propCount: propCount,\n hasTransform: hasTransform\n };\n}\nfunction getTimeout(delays, durations) {\n /* istanbul ignore next */\n while (delays.length < durations.length) {\n delays = delays.concat(delays);\n }\n return Math.max.apply(null, durations.map(function (d, i) {\n return toMs(d) + toMs(delays[i]);\n }));\n}\n// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\n// in a locale-dependent way, using a comma instead of a dot.\n// If comma is not replaced with a dot, the input will be rounded down (i.e. acting\n// as a floor function) causing unexpected behaviors\nfunction toMs(s) {\n return Number(s.slice(0, -1).replace(',', '.')) * 1000;\n}\nfunction enter(vnode, toggleDisplay) {\n var el = vnode.elm;\n // call leave callback now\n if (isDef(el._leaveCb)) {\n el._leaveCb.cancelled = true;\n el._leaveCb();\n }\n var data = resolveTransition(vnode.data.transition);\n if (isUndef(data)) {\n return;\n }\n /* istanbul ignore if */\n if (isDef(el._enterCb) || el.nodeType !== 1) {\n return;\n }\n var css = data.css,\n type = data.type,\n enterClass = data.enterClass,\n enterToClass = data.enterToClass,\n enterActiveClass = data.enterActiveClass,\n appearClass = data.appearClass,\n appearToClass = data.appearToClass,\n appearActiveClass = data.appearActiveClass,\n beforeEnter = data.beforeEnter,\n enter = data.enter,\n afterEnter = data.afterEnter,\n enterCancelled = data.enterCancelled,\n beforeAppear = data.beforeAppear,\n appear = data.appear,\n afterAppear = data.afterAppear,\n appearCancelled = data.appearCancelled,\n duration = data.duration;\n // activeInstance will always be the <transition> component managing this\n // transition. One edge case to check is when the <transition> is placed\n // as the root node of a child component. In that case we need to check\n // <transition>'s parent for appear check.\n var context = activeInstance;\n var transitionNode = activeInstance.$vnode;\n while (transitionNode && transitionNode.parent) {\n context = transitionNode.context;\n transitionNode = transitionNode.parent;\n }\n var isAppear = !context._isMounted || !vnode.isRootInsert;\n if (isAppear && !appear && appear !== '') {\n return;\n }\n var startClass = isAppear && appearClass ? appearClass : enterClass;\n var activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass;\n var toClass = isAppear && appearToClass ? appearToClass : enterToClass;\n var beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter;\n var enterHook = isAppear ? isFunction(appear) ? appear : enter : enter;\n var afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter;\n var enterCancelledHook = isAppear ? appearCancelled || enterCancelled : enterCancelled;\n var explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration);\n if (false) // removed by dead control flow\n{}\n var expectsCSS = css !== false && !isIE9;\n var userWantsControl = getHookArgumentsLength(enterHook);\n var cb = el._enterCb = once(function () {\n if (expectsCSS) {\n removeTransitionClass(el, toClass);\n removeTransitionClass(el, activeClass);\n }\n // @ts-expect-error\n if (cb.cancelled) {\n if (expectsCSS) {\n removeTransitionClass(el, startClass);\n }\n enterCancelledHook && enterCancelledHook(el);\n } else {\n afterEnterHook && afterEnterHook(el);\n }\n el._enterCb = null;\n });\n if (!vnode.data.show) {\n // remove pending leave element on enter by injecting an insert hook\n mergeVNodeHook(vnode, 'insert', function () {\n var parent = el.parentNode;\n var pendingNode = parent && parent._pending && parent._pending[vnode.key];\n if (pendingNode && pendingNode.tag === vnode.tag && pendingNode.elm._leaveCb) {\n pendingNode.elm._leaveCb();\n }\n enterHook && enterHook(el, cb);\n });\n }\n // start enter transition\n beforeEnterHook && beforeEnterHook(el);\n if (expectsCSS) {\n addTransitionClass(el, startClass);\n addTransitionClass(el, activeClass);\n nextFrame(function () {\n removeTransitionClass(el, startClass);\n // @ts-expect-error\n if (!cb.cancelled) {\n addTransitionClass(el, toClass);\n if (!userWantsControl) {\n if (isValidDuration(explicitEnterDuration)) {\n setTimeout(cb, explicitEnterDuration);\n } else {\n whenTransitionEnds(el, type, cb);\n }\n }\n }\n });\n }\n if (vnode.data.show) {\n toggleDisplay && toggleDisplay();\n enterHook && enterHook(el, cb);\n }\n if (!expectsCSS && !userWantsControl) {\n cb();\n }\n}\nfunction leave(vnode, rm) {\n var el = vnode.elm;\n // call enter callback now\n if (isDef(el._enterCb)) {\n el._enterCb.cancelled = true;\n el._enterCb();\n }\n var data = resolveTransition(vnode.data.transition);\n if (isUndef(data) || el.nodeType !== 1) {\n return rm();\n }\n /* istanbul ignore if */\n if (isDef(el._leaveCb)) {\n return;\n }\n var css = data.css,\n type = data.type,\n leaveClass = data.leaveClass,\n leaveToClass = data.leaveToClass,\n leaveActiveClass = data.leaveActiveClass,\n beforeLeave = data.beforeLeave,\n leave = data.leave,\n afterLeave = data.afterLeave,\n leaveCancelled = data.leaveCancelled,\n delayLeave = data.delayLeave,\n duration = data.duration;\n var expectsCSS = css !== false && !isIE9;\n var userWantsControl = getHookArgumentsLength(leave);\n var explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration);\n if (false) // removed by dead control flow\n{}\n var cb = el._leaveCb = once(function () {\n if (el.parentNode && el.parentNode._pending) {\n el.parentNode._pending[vnode.key] = null;\n }\n if (expectsCSS) {\n removeTransitionClass(el, leaveToClass);\n removeTransitionClass(el, leaveActiveClass);\n }\n // @ts-expect-error\n if (cb.cancelled) {\n if (expectsCSS) {\n removeTransitionClass(el, leaveClass);\n }\n leaveCancelled && leaveCancelled(el);\n } else {\n rm();\n afterLeave && afterLeave(el);\n }\n el._leaveCb = null;\n });\n if (delayLeave) {\n delayLeave(performLeave);\n } else {\n performLeave();\n }\n function performLeave() {\n // the delayed leave may have already been cancelled\n // @ts-expect-error\n if (cb.cancelled) {\n return;\n }\n // record leaving element\n if (!vnode.data.show && el.parentNode) {\n (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] = vnode;\n }\n beforeLeave && beforeLeave(el);\n if (expectsCSS) {\n addTransitionClass(el, leaveClass);\n addTransitionClass(el, leaveActiveClass);\n nextFrame(function () {\n removeTransitionClass(el, leaveClass);\n // @ts-expect-error\n if (!cb.cancelled) {\n addTransitionClass(el, leaveToClass);\n if (!userWantsControl) {\n if (isValidDuration(explicitLeaveDuration)) {\n setTimeout(cb, explicitLeaveDuration);\n } else {\n whenTransitionEnds(el, type, cb);\n }\n }\n }\n });\n }\n leave && leave(el, cb);\n if (!expectsCSS && !userWantsControl) {\n cb();\n }\n }\n}\n// only used in dev mode\nfunction checkDuration(val, name, vnode) {\n if (typeof val !== 'number') {\n warn(\"<transition> explicit \".concat(name, \" duration is not a valid number - \") + \"got \".concat(JSON.stringify(val), \".\"), vnode.context);\n } else if (isNaN(val)) {\n warn(\"<transition> explicit \".concat(name, \" duration is NaN - \") + 'the duration expression might be incorrect.', vnode.context);\n }\n}\nfunction isValidDuration(val) {\n return typeof val === 'number' && !isNaN(val);\n}\n/**\n * Normalize a transition hook's argument length. The hook may be:\n * - a merged hook (invoker) with the original in .fns\n * - a wrapped component method (check ._length)\n * - a plain function (.length)\n */\nfunction getHookArgumentsLength(fn) {\n if (isUndef(fn)) {\n return false;\n }\n // @ts-expect-error\n var invokerFns = fn.fns;\n if (isDef(invokerFns)) {\n // invoker\n return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns);\n } else {\n // @ts-expect-error\n return (fn._length || fn.length) > 1;\n }\n}\nfunction _enter(_, vnode) {\n if (vnode.data.show !== true) {\n enter(vnode);\n }\n}\nvar transition = inBrowser ? {\n create: _enter,\n activate: _enter,\n remove: function remove(vnode, rm) {\n /* istanbul ignore else */\n if (vnode.data.show !== true) {\n // @ts-expect-error\n leave(vnode, rm);\n } else {\n rm();\n }\n }\n} : {};\nvar platformModules = [attrs, klass, events, domProps, style, transition];\n\n// the directive module should be applied last, after all\n// built-in modules have been applied.\nvar modules = platformModules.concat(baseModules);\nvar patch = createPatchFunction({\n nodeOps: nodeOps,\n modules: modules\n});\n\n/**\n * Not type checking this file because flow doesn't like attaching\n * properties to Elements.\n */\n/* istanbul ignore if */\nif (isIE9) {\n // http://www.matts411.com/post/internet-explorer-9-oninput/\n document.addEventListener('selectionchange', function () {\n var el = document.activeElement;\n // @ts-expect-error\n if (el && el.vmodel) {\n trigger(el, 'input');\n }\n });\n}\nvar directive = {\n inserted: function inserted(el, binding, vnode, oldVnode) {\n if (vnode.tag === 'select') {\n // #6903\n if (oldVnode.elm && !oldVnode.elm._vOptions) {\n mergeVNodeHook(vnode, 'postpatch', function () {\n directive.componentUpdated(el, binding, vnode);\n });\n } else {\n setSelected(el, binding, vnode.context);\n }\n el._vOptions = [].map.call(el.options, getValue);\n } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\n el._vModifiers = binding.modifiers;\n if (!binding.modifiers.lazy) {\n el.addEventListener('compositionstart', onCompositionStart);\n el.addEventListener('compositionend', onCompositionEnd);\n // Safari < 10.2 & UIWebView doesn't fire compositionend when\n // switching focus before confirming composition choice\n // this also fixes the issue where some browsers e.g. iOS Chrome\n // fires \"change\" instead of \"input\" on autocomplete.\n el.addEventListener('change', onCompositionEnd);\n /* istanbul ignore if */\n if (isIE9) {\n el.vmodel = true;\n }\n }\n }\n },\n componentUpdated: function componentUpdated(el, binding, vnode) {\n if (vnode.tag === 'select') {\n setSelected(el, binding, vnode.context);\n // in case the options rendered by v-for have changed,\n // it's possible that the value is out-of-sync with the rendered options.\n // detect such cases and filter out values that no longer has a matching\n // option in the DOM.\n var prevOptions_1 = el._vOptions;\n var curOptions_1 = el._vOptions = [].map.call(el.options, getValue);\n if (curOptions_1.some(function (o, i) {\n return !looseEqual(o, prevOptions_1[i]);\n })) {\n // trigger change event if\n // no matching option found for at least one value\n var needReset = el.multiple ? binding.value.some(function (v) {\n return hasNoMatchingOption(v, curOptions_1);\n }) : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions_1);\n if (needReset) {\n trigger(el, 'change');\n }\n }\n }\n }\n};\nfunction setSelected(el, binding, vm) {\n actuallySetSelected(el, binding, vm);\n /* istanbul ignore if */\n if (isIE || isEdge) {\n setTimeout(function () {\n actuallySetSelected(el, binding, vm);\n }, 0);\n }\n}\nfunction actuallySetSelected(el, binding, vm) {\n var value = binding.value;\n var isMultiple = el.multiple;\n if (isMultiple && !Array.isArray(value)) {\n false && 0;\n return;\n }\n var selected, option;\n for (var i = 0, l = el.options.length; i < l; i++) {\n option = el.options[i];\n if (isMultiple) {\n selected = looseIndexOf(value, getValue(option)) > -1;\n if (option.selected !== selected) {\n option.selected = selected;\n }\n } else {\n if (looseEqual(getValue(option), value)) {\n if (el.selectedIndex !== i) {\n el.selectedIndex = i;\n }\n return;\n }\n }\n }\n if (!isMultiple) {\n el.selectedIndex = -1;\n }\n}\nfunction hasNoMatchingOption(value, options) {\n return options.every(function (o) {\n return !looseEqual(o, value);\n });\n}\nfunction getValue(option) {\n return '_value' in option ? option._value : option.value;\n}\nfunction onCompositionStart(e) {\n e.target.composing = true;\n}\nfunction onCompositionEnd(e) {\n // prevent triggering an input event for no reason\n if (!e.target.composing) return;\n e.target.composing = false;\n trigger(e.target, 'input');\n}\nfunction trigger(el, type) {\n var e = document.createEvent('HTMLEvents');\n e.initEvent(type, true, true);\n el.dispatchEvent(e);\n}\n\n// recursively search for possible transition defined inside the component root\nfunction locateNode(vnode) {\n // @ts-expect-error\n return vnode.componentInstance && (!vnode.data || !vnode.data.transition) ? locateNode(vnode.componentInstance._vnode) : vnode;\n}\nvar show = {\n bind: function bind(el, _a, vnode) {\n var value = _a.value;\n vnode = locateNode(vnode);\n var transition = vnode.data && vnode.data.transition;\n var originalDisplay = el.__vOriginalDisplay = el.style.display === 'none' ? '' : el.style.display;\n if (value && transition) {\n vnode.data.show = true;\n enter(vnode, function () {\n el.style.display = originalDisplay;\n });\n } else {\n el.style.display = value ? originalDisplay : 'none';\n }\n },\n update: function update(el, _a, vnode) {\n var value = _a.value,\n oldValue = _a.oldValue;\n /* istanbul ignore if */\n if (!value === !oldValue) return;\n vnode = locateNode(vnode);\n var transition = vnode.data && vnode.data.transition;\n if (transition) {\n vnode.data.show = true;\n if (value) {\n enter(vnode, function () {\n el.style.display = el.__vOriginalDisplay;\n });\n } else {\n leave(vnode, function () {\n el.style.display = 'none';\n });\n }\n } else {\n el.style.display = value ? el.__vOriginalDisplay : 'none';\n }\n },\n unbind: function unbind(el, binding, vnode, oldVnode, isDestroy) {\n if (!isDestroy) {\n el.style.display = el.__vOriginalDisplay;\n }\n }\n};\nvar platformDirectives = {\n model: directive,\n show: show\n};\n\n// Provides transition support for a single element/component.\nvar transitionProps = {\n name: String,\n appear: Boolean,\n css: Boolean,\n mode: String,\n type: String,\n enterClass: String,\n leaveClass: String,\n enterToClass: String,\n leaveToClass: String,\n enterActiveClass: String,\n leaveActiveClass: String,\n appearClass: String,\n appearActiveClass: String,\n appearToClass: String,\n duration: [Number, String, Object]\n};\n// in case the child is also an abstract component, e.g. <keep-alive>\n// we want to recursively retrieve the real component to be rendered\nfunction getRealChild(vnode) {\n var compOptions = vnode && vnode.componentOptions;\n if (compOptions && compOptions.Ctor.options.abstract) {\n return getRealChild(getFirstComponentChild(compOptions.children));\n } else {\n return vnode;\n }\n}\nfunction extractTransitionData(comp) {\n var data = {};\n var options = comp.$options;\n // props\n for (var key in options.propsData) {\n data[key] = comp[key];\n }\n // events.\n // extract listeners and pass them directly to the transition methods\n var listeners = options._parentListeners;\n for (var key in listeners) {\n data[camelize(key)] = listeners[key];\n }\n return data;\n}\nfunction placeholder(h, rawChild) {\n // @ts-expect-error\n if (/\\d-keep-alive$/.test(rawChild.tag)) {\n return h('keep-alive', {\n props: rawChild.componentOptions.propsData\n });\n }\n}\nfunction hasParentTransition(vnode) {\n while (vnode = vnode.parent) {\n if (vnode.data.transition) {\n return true;\n }\n }\n}\nfunction isSameChild(child, oldChild) {\n return oldChild.key === child.key && oldChild.tag === child.tag;\n}\nvar isNotTextNode = function isNotTextNode(c) {\n return c.tag || isAsyncPlaceholder(c);\n};\nvar isVShowDirective = function isVShowDirective(d) {\n return d.name === 'show';\n};\nvar Transition = {\n name: 'transition',\n props: transitionProps,\n abstract: true,\n render: function render(h) {\n var _this = this;\n var children = this.$slots.default;\n if (!children) {\n return;\n }\n // filter out text nodes (possible whitespaces)\n children = children.filter(isNotTextNode);\n /* istanbul ignore if */\n if (!children.length) {\n return;\n }\n // warn multiple elements\n if (false) // removed by dead control flow\n{}\n var mode = this.mode;\n // warn invalid mode\n if (false) // removed by dead control flow\n{}\n var rawChild = children[0];\n // if this is a component root node and the component's\n // parent container node also has transition, skip.\n if (hasParentTransition(this.$vnode)) {\n return rawChild;\n }\n // apply transition data to child\n // use getRealChild() to ignore abstract components e.g. keep-alive\n var child = getRealChild(rawChild);\n /* istanbul ignore if */\n if (!child) {\n return rawChild;\n }\n if (this._leaving) {\n return placeholder(h, rawChild);\n }\n // ensure a key that is unique to the vnode type and to this transition\n // component instance. This key will be used to remove pending leaving nodes\n // during entering.\n var id = \"__transition-\".concat(this._uid, \"-\");\n child.key = child.key == null ? child.isComment ? id + 'comment' : id + child.tag : isPrimitive(child.key) ? String(child.key).indexOf(id) === 0 ? child.key : id + child.key : child.key;\n var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\n var oldRawChild = this._vnode;\n var oldChild = getRealChild(oldRawChild);\n // mark v-show\n // so that the transition module can hand over the control to the directive\n if (child.data.directives && child.data.directives.some(isVShowDirective)) {\n child.data.show = true;\n }\n if (oldChild && oldChild.data && !isSameChild(child, oldChild) && !isAsyncPlaceholder(oldChild) &&\n // #6687 component root is a comment node\n !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)) {\n // replace old child transition data with fresh one\n // important for dynamic transitions!\n var oldData = oldChild.data.transition = extend({}, data);\n // handle transition mode\n if (mode === 'out-in') {\n // return placeholder node and queue update when leave finishes\n this._leaving = true;\n mergeVNodeHook(oldData, 'afterLeave', function () {\n _this._leaving = false;\n _this.$forceUpdate();\n });\n return placeholder(h, rawChild);\n } else if (mode === 'in-out') {\n if (isAsyncPlaceholder(child)) {\n return oldRawChild;\n }\n var delayedLeave_1;\n var performLeave = function performLeave() {\n delayedLeave_1();\n };\n mergeVNodeHook(data, 'afterEnter', performLeave);\n mergeVNodeHook(data, 'enterCancelled', performLeave);\n mergeVNodeHook(oldData, 'delayLeave', function (leave) {\n delayedLeave_1 = leave;\n });\n }\n }\n return rawChild;\n }\n};\n\n// Provides transition support for list items.\nvar props = extend({\n tag: String,\n moveClass: String\n}, transitionProps);\ndelete props.mode;\nvar TransitionGroup = {\n props: props,\n beforeMount: function beforeMount() {\n var _this = this;\n var update = this._update;\n this._update = function (vnode, hydrating) {\n var restoreActiveInstance = setActiveInstance(_this);\n // force removing pass\n _this.__patch__(_this._vnode, _this.kept, false,\n // hydrating\n true // removeOnly (!important, avoids unnecessary moves)\n );\n _this._vnode = _this.kept;\n restoreActiveInstance();\n update.call(_this, vnode, hydrating);\n };\n },\n render: function render(h) {\n var tag = this.tag || this.$vnode.data.tag || 'span';\n var map = Object.create(null);\n var prevChildren = this.prevChildren = this.children;\n var rawChildren = this.$slots.default || [];\n var children = this.children = [];\n var transitionData = extractTransitionData(this);\n for (var i = 0; i < rawChildren.length; i++) {\n var c = rawChildren[i];\n if (c.tag) {\n if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\n children.push(c);\n map[c.key] = c;\n (c.data || (c.data = {})).transition = transitionData;\n } else if (false) // removed by dead control flow\n{ var name_1, opts; }\n }\n }\n if (prevChildren) {\n var kept = [];\n var removed = [];\n for (var i = 0; i < prevChildren.length; i++) {\n var c = prevChildren[i];\n c.data.transition = transitionData;\n // @ts-expect-error .getBoundingClientRect is not typed in Node\n c.data.pos = c.elm.getBoundingClientRect();\n if (map[c.key]) {\n kept.push(c);\n } else {\n removed.push(c);\n }\n }\n this.kept = h(tag, null, kept);\n this.removed = removed;\n }\n return h(tag, null, children);\n },\n updated: function updated() {\n var children = this.prevChildren;\n var moveClass = this.moveClass || (this.name || 'v') + '-move';\n if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\n return;\n }\n // we divide the work into three loops to avoid mixing DOM reads and writes\n // in each iteration - which helps prevent layout thrashing.\n children.forEach(callPendingCbs);\n children.forEach(recordPosition);\n children.forEach(applyTranslation);\n // force reflow to put everything in position\n // assign to this to avoid being removed in tree-shaking\n // $flow-disable-line\n this._reflow = document.body.offsetHeight;\n children.forEach(function (c) {\n if (c.data.moved) {\n var el_1 = c.elm;\n var s = el_1.style;\n addTransitionClass(el_1, moveClass);\n s.transform = s.WebkitTransform = s.transitionDuration = '';\n el_1.addEventListener(transitionEndEvent, el_1._moveCb = function cb(e) {\n if (e && e.target !== el_1) {\n return;\n }\n if (!e || /transform$/.test(e.propertyName)) {\n el_1.removeEventListener(transitionEndEvent, cb);\n el_1._moveCb = null;\n removeTransitionClass(el_1, moveClass);\n }\n });\n }\n });\n },\n methods: {\n hasMove: function hasMove(el, moveClass) {\n /* istanbul ignore if */\n if (!hasTransition) {\n return false;\n }\n /* istanbul ignore if */\n if (this._hasMove) {\n return this._hasMove;\n }\n // Detect whether an element with the move class applied has\n // CSS transitions. Since the element may be inside an entering\n // transition at this very moment, we make a clone of it and remove\n // all other transition classes applied to ensure only the move class\n // is applied.\n var clone = el.cloneNode();\n if (el._transitionClasses) {\n el._transitionClasses.forEach(function (cls) {\n removeClass(clone, cls);\n });\n }\n addClass(clone, moveClass);\n clone.style.display = 'none';\n this.$el.appendChild(clone);\n var info = getTransitionInfo(clone);\n this.$el.removeChild(clone);\n return this._hasMove = info.hasTransform;\n }\n }\n};\nfunction callPendingCbs(c) {\n /* istanbul ignore if */\n if (c.elm._moveCb) {\n c.elm._moveCb();\n }\n /* istanbul ignore if */\n if (c.elm._enterCb) {\n c.elm._enterCb();\n }\n}\nfunction recordPosition(c) {\n c.data.newPos = c.elm.getBoundingClientRect();\n}\nfunction applyTranslation(c) {\n var oldPos = c.data.pos;\n var newPos = c.data.newPos;\n var dx = oldPos.left - newPos.left;\n var dy = oldPos.top - newPos.top;\n if (dx || dy) {\n c.data.moved = true;\n var s = c.elm.style;\n s.transform = s.WebkitTransform = \"translate(\".concat(dx, \"px,\").concat(dy, \"px)\");\n s.transitionDuration = '0s';\n }\n}\nvar platformComponents = {\n Transition: Transition,\n TransitionGroup: TransitionGroup\n};\n\n// install platform specific utils\nVue.config.mustUseProp = mustUseProp;\nVue.config.isReservedTag = isReservedTag;\nVue.config.isReservedAttr = isReservedAttr;\nVue.config.getTagNamespace = getTagNamespace;\nVue.config.isUnknownElement = isUnknownElement;\n// install platform runtime directives & components\nextend(Vue.options.directives, platformDirectives);\nextend(Vue.options.components, platformComponents);\n// install platform patch function\nVue.prototype.__patch__ = inBrowser ? patch : noop;\n// public mount method\nVue.prototype.$mount = function (el, hydrating) {\n el = el && inBrowser ? query(el) : undefined;\n return mountComponent(this, el, hydrating);\n};\n// devtools global hook\n/* istanbul ignore next */\nif (inBrowser) {\n setTimeout(function () {\n if (config.devtools) {\n if (devtools) {\n devtools.emit('init', Vue);\n } else if (false) // removed by dead control flow\n{}\n }\n if (false) // removed by dead control flow\n{}\n }, 0);\n}\n\n// EXTERNAL MODULE: ./node_modules/vue-events/dist/index.js\nvar dist = __webpack_require__(2627);\n;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-2!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/list/App.vue?vue&type=template&id=2d3278de\nvar render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", [_c(\"flex-filter-bar\", {\n attrs: {\n store: _vm.store\n }\n }), _vm._v(\" \"), _c(\"flex-content-loader\", {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.loading,\n expression: \"loading\"\n }],\n attrs: {\n store: _vm.store\n }\n }), _vm._v(\" \"), _c(\"flex-table\", {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.loading,\n expression: \"!loading\"\n }],\n attrs: {\n store: _vm.store\n },\n model: {\n value: _vm.loading,\n callback: function callback($$v) {\n _vm.loading = $$v;\n },\n expression: \"loading\"\n }\n })], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n\n;// ./app/list/App.vue?vue&type=template&id=2d3278de\n\n;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-2!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/list/components/Table.vue?vue&type=template&id=3769c7a1\nvar Tablevue_type_template_id_3769c7a1_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", [_c(\"vuetable\", {\n ref: \"vuetable\",\n attrs: {\n css: _vm.css.table,\n fields: _vm.store.fields || [],\n searchFields: _vm.store.searchFields || [],\n sortOrder: _vm.store.sortOrder,\n \"multi-sort\": true,\n \"api-mode\": true,\n \"api-url\": _vm.store.api,\n \"per-page\": _vm.perPage,\n \"append-params\": _vm.extraParams,\n \"pagination-path\": \"links.pagination\",\n \"show-sort-icons\": true\n },\n on: {\n \"vuetable:pagination-data\": _vm.onPaginationData,\n \"vuetable:loading\": _vm.onVuetableLoading,\n \"vuetable:load-success\": _vm.onVueTableLoadSuccess\n }\n }), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"flex-list-pagination\"\n }, [_c(\"vuetable-pagination-info\", {\n ref: \"paginationInfo\",\n attrs: {\n \"info-template\": _vm.store.paginationInfo,\n \"info-no-data-template\": _vm.store.emptyResult,\n css: _vm.css.paginationInfo\n }\n }), _vm._v(\" \"), _c(\"vuetable-pagination\", {\n ref: \"pagination\",\n attrs: {\n css: _vm.css.pagination\n },\n on: {\n \"vuetable-pagination:change-page\": _vm.onChangePage\n }\n })], 1)], 1);\n};\nvar Tablevue_type_template_id_3769c7a1_staticRenderFns = [];\nTablevue_type_template_id_3769c7a1_render._withStripped = true;\n\n;// ./app/list/components/Table.vue?vue&type=template&id=3769c7a1\n\n;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-2!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vuetable-2/src/components/Vuetable.vue?vue&type=template&id=5bfa05b0&scoped=true\nvar Vuetablevue_type_template_id_5bfa05b0_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _vm.isFixedHeader ? _c(\"div\", [_c(\"div\", {\n staticClass: \"vuetable-head-wrapper\"\n }, [_c(\"table\", {\n class: [\"vuetable\", _vm.css.tableClass, _vm.css.tableHeaderClass]\n }, [_c(\"thead\", [_c(\"tr\", [_vm._l(_vm.tableFields, function (field, fieldIndex) {\n return [field.visible ? [_vm.isSpecialField(field.name) ? [_vm.extractName(field.name) == \"__checkbox\" ? _c(\"th\", {\n key: fieldIndex,\n class: [\"vuetable-th-checkbox-\" + _vm.trackBy, field.titleClass],\n style: {\n width: field.width\n }\n }, [_c(\"input\", {\n attrs: {\n type: \"checkbox\"\n },\n domProps: {\n checked: _vm.checkCheckboxesState(field.name)\n },\n on: {\n change: function change($event) {\n return _vm.toggleAllCheckboxes(field.name, $event);\n }\n }\n })]) : _vm._e(), _vm._v(\" \"), _vm.extractName(field.name) == \"__component\" ? _c(\"th\", {\n key: fieldIndex,\n class: [\"vuetable-th-component-\" + _vm.trackBy, field.titleClass, _vm.sortClass(field), {\n sortable: _vm.isSortable(field)\n }],\n style: {\n width: field.width\n },\n domProps: {\n innerHTML: _vm._s(_vm.renderTitle(field))\n },\n on: {\n click: function click($event) {\n return _vm.orderBy(field, $event);\n }\n }\n }) : _vm._e(), _vm._v(\" \"), _vm.extractName(field.name) == \"__slot\" ? _c(\"th\", {\n key: fieldIndex,\n class: [\"vuetable-th-slot-\" + _vm.extractArgs(field.name), field.titleClass, _vm.sortClass(field), {\n sortable: _vm.isSortable(field)\n }],\n style: {\n width: field.width\n },\n domProps: {\n innerHTML: _vm._s(_vm.renderTitle(field))\n },\n on: {\n click: function click($event) {\n return _vm.orderBy(field, $event);\n }\n }\n }) : _vm._e(), _vm._v(\" \"), _vm.extractName(field.name) == \"__sequence\" ? _c(\"th\", {\n key: fieldIndex,\n class: [\"vuetable-th-sequence\", field.titleClass || \"\"],\n style: {\n width: field.width\n },\n domProps: {\n innerHTML: _vm._s(_vm.renderTitle(field))\n }\n }) : _vm._e(), _vm._v(\" \"), _vm.notIn(_vm.extractName(field.name), [\"__sequence\", \"__checkbox\", \"__component\", \"__slot\"]) ? _c(\"th\", {\n key: fieldIndex,\n class: [\"vuetable-th-\" + field.name, field.titleClass || \"\"],\n style: {\n width: field.width\n },\n domProps: {\n innerHTML: _vm._s(_vm.renderTitle(field))\n }\n }) : _vm._e()] : [_c(\"th\", {\n key: fieldIndex,\n class: [\"vuetable-th-\" + field.name, field.titleClass, _vm.sortClass(field), {\n sortable: _vm.isSortable(field)\n }],\n style: {\n width: field.width\n },\n attrs: {\n id: \"_\" + field.name\n },\n domProps: {\n innerHTML: _vm._s(_vm.renderTitle(field))\n },\n on: {\n click: function click($event) {\n return _vm.orderBy(field, $event);\n }\n }\n })]] : _vm._e()];\n }), _vm._v(\" \"), _vm.scrollVisible ? _c(\"th\", {\n staticClass: \"vuetable-gutter-col\",\n style: {\n width: _vm.scrollBarWidth\n }\n }) : _vm._e()], 2)])])]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"vuetable-body-wrapper\",\n style: {\n height: _vm.tableHeight\n }\n }, [_c(\"table\", {\n class: [\"vuetable\", _vm.css.tableClass, _vm.css.tableBodyClass]\n }, [_c(\"colgroup\", [_vm._l(_vm.tableFields, function (field, fieldIndex) {\n return [field.visible ? [_c(\"col\", {\n key: fieldIndex,\n class: [\"vuetable-th-\" + field.name, field.titleClass],\n style: {\n width: field.width\n },\n attrs: {\n id: \"_col_\" + field.name\n }\n })] : _vm._e()];\n })], 2), _vm._v(\" \"), _c(\"tbody\", {\n staticClass: \"vuetable-body\"\n }, [_vm._l(_vm.tableData, function (item, itemIndex) {\n return [_c(\"tr\", {\n key: itemIndex,\n class: _vm.onRowClass(item, itemIndex),\n attrs: {\n \"item-index\": itemIndex,\n render: _vm.onRowChanged(item)\n },\n on: {\n click: function click($event) {\n return _vm.onRowClicked(item, $event);\n },\n dblclick: function dblclick($event) {\n return _vm.onRowDoubleClicked(item, $event);\n }\n }\n }, [_vm._l(_vm.tableFields, function (field, fieldIndex) {\n return [field.visible ? [_vm.isSpecialField(field.name) ? [_vm.extractName(field.name) == \"__sequence\" ? _c(\"td\", {\n key: fieldIndex,\n class: [\"vuetable-sequence\", field.dataClass],\n domProps: {\n innerHTML: _vm._s(_vm.renderSequence(itemIndex))\n }\n }) : _vm._e(), _vm._v(\" \"), _vm.extractName(field.name) == \"__handle\" ? _c(\"td\", {\n key: fieldIndex,\n class: [\"vuetable-handle\", field.dataClass],\n domProps: {\n innerHTML: _vm._s(_vm.renderIconTag([\"handle-icon\", _vm.css.handleIcon]))\n }\n }) : _vm._e(), _vm._v(\" \"), _vm.extractName(field.name) == \"__checkbox\" ? _c(\"td\", {\n key: fieldIndex,\n class: [\"vuetable-checkboxes\", field.dataClass]\n }, [_c(\"input\", {\n attrs: {\n type: \"checkbox\"\n },\n domProps: {\n checked: _vm.rowSelected(item, field.name)\n },\n on: {\n change: function change($event) {\n return _vm.toggleCheckbox(item, field.name, $event);\n }\n }\n })]) : _vm._e(), _vm._v(\" \"), _vm.extractName(field.name) === \"__component\" ? _c(\"td\", {\n key: fieldIndex,\n class: [\"vuetable-component\", field.dataClass]\n }, [_c(_vm.extractArgs(field.name), {\n tag: \"component\",\n attrs: {\n \"row-data\": item,\n \"row-index\": itemIndex,\n \"row-field\": field.sortField\n }\n })], 1) : _vm._e(), _vm._v(\" \"), _vm.extractName(field.name) === \"__slot\" ? _c(\"td\", {\n key: fieldIndex,\n class: [\"vuetable-slot\", field.dataClass]\n }, [_vm._t(_vm.extractArgs(field.name), null, {\n rowData: item,\n rowIndex: itemIndex,\n rowField: field.sortField\n })], 2) : _vm._e()] : [_c(\"td\", {\n key: fieldIndex,\n class: field.dataClass,\n domProps: {\n innerHTML: _vm._s(_vm.renderNormalField(field, item))\n },\n on: {\n click: function click($event) {\n return _vm.onCellClicked(item, field, $event);\n },\n dblclick: function dblclick($event) {\n return _vm.onCellDoubleClicked(item, field, $event);\n },\n contextmenu: function contextmenu($event) {\n return _vm.onCellRightClicked(item, field, $event);\n }\n }\n })]] : _vm._e()];\n })], 2), _vm._v(\" \"), _vm.useDetailRow ? [_c(\"transition\", {\n key: itemIndex,\n attrs: {\n name: _vm.detailRowTransition\n }\n }, [_vm.isVisibleDetailRow(item[_vm.trackBy]) ? _c(\"tr\", {\n class: [_vm.css.detailRowClass],\n on: {\n click: function click($event) {\n return _vm.onDetailRowClick(item, $event);\n }\n }\n }, [_c(\"td\", {\n attrs: {\n colspan: _vm.countVisibleFields\n }\n }, [_c(_vm.detailRowComponent, {\n tag: \"component\",\n attrs: {\n \"row-data\": item,\n \"row-index\": itemIndex\n }\n })], 1)]) : _vm._e()])] : _vm._e()];\n }), _vm._v(\" \"), _vm.displayEmptyDataRow ? [_c(\"tr\", [_c(\"td\", {\n staticClass: \"vuetable-empty-result\",\n attrs: {\n colspan: _vm.countVisibleFields\n },\n domProps: {\n innerHTML: _vm._s(_vm.noDataTemplate)\n }\n })])] : _vm._e(), _vm._v(\" \"), _vm.lessThanMinRows ? _vm._l(_vm.blankRows, function (i) {\n return _c(\"tr\", {\n key: i,\n staticClass: \"blank-row\"\n }, [_vm._l(_vm.tableFields, function (field, fieldIndex) {\n return [field.visible ? _c(\"td\", {\n key: fieldIndex\n }, [_vm._v(\" \")]) : _vm._e()];\n })], 2);\n }) : _vm._e()], 2)])])]) : _c(\"table\", {\n class: [\"vuetable\", _vm.css.tableClass]\n }, [_c(\"thead\", [_c(\"tr\", [_vm._l(_vm.tableFields, function (field, fieldIndex) {\n return [field.visible ? [_vm.isSpecialField(field.name) ? [_vm.extractName(field.name) == \"__checkbox\" ? _c(\"th\", {\n key: fieldIndex,\n class: [\"vuetable-th-checkbox-\" + _vm.trackBy, field.titleClass],\n style: {\n width: field.width\n }\n }, [_c(\"input\", {\n attrs: {\n type: \"checkbox\"\n },\n domProps: {\n checked: _vm.checkCheckboxesState(field.name)\n },\n on: {\n change: function change($event) {\n return _vm.toggleAllCheckboxes(field.name, $event);\n }\n }\n })]) : _vm._e(), _vm._v(\" \"), _vm.extractName(field.name) == \"__component\" ? _c(\"th\", {\n key: fieldIndex,\n class: [\"vuetable-th-component-\" + _vm.trackBy, field.titleClass, _vm.sortClass(field), {\n sortable: _vm.isSortable(field)\n }],\n style: {\n width: field.width\n },\n domProps: {\n innerHTML: _vm._s(_vm.renderTitle(field))\n },\n on: {\n click: function click($event) {\n return _vm.orderBy(field, $event);\n }\n }\n }) : _vm._e(), _vm._v(\" \"), _vm.extractName(field.name) == \"__slot\" ? _c(\"th\", {\n key: fieldIndex,\n class: [\"vuetable-th-slot-\" + _vm.extractArgs(field.name), field.titleClass, _vm.sortClass(field), {\n sortable: _vm.isSortable(field)\n }],\n style: {\n width: field.width\n },\n domProps: {\n innerHTML: _vm._s(_vm.renderTitle(field))\n },\n on: {\n click: function click($event) {\n return _vm.orderBy(field, $event);\n }\n }\n }) : _vm._e(), _vm._v(\" \"), _vm.extractName(field.name) == \"__sequence\" ? _c(\"th\", {\n key: fieldIndex,\n class: [\"vuetable-th-sequence\", field.titleClass || \"\", _vm.sortClass(field)],\n style: {\n width: field.width\n },\n domProps: {\n innerHTML: _vm._s(_vm.renderTitle(field))\n }\n }) : _vm._e(), _vm._v(\" \"), _vm.notIn(_vm.extractName(field.name), [\"__sequence\", \"__checkbox\", \"__component\", \"__slot\"]) ? _c(\"th\", {\n key: fieldIndex,\n class: [\"vuetable-th-\" + field.name, field.titleClass || \"\", _vm.sortClass(field)],\n style: {\n width: field.width\n },\n domProps: {\n innerHTML: _vm._s(_vm.renderTitle(field))\n }\n }) : _vm._e()] : [_c(\"th\", {\n key: fieldIndex,\n class: [\"vuetable-th-\" + field.name, field.titleClass, _vm.sortClass(field), {\n sortable: _vm.isSortable(field)\n }],\n style: {\n width: field.width\n },\n attrs: {\n id: \"_\" + field.name\n },\n domProps: {\n innerHTML: _vm._s(_vm.renderTitle(field))\n },\n on: {\n click: function click($event) {\n return _vm.orderBy(field, $event);\n }\n }\n })]] : _vm._e()];\n })], 2)]), _vm._v(\" \"), _c(\"tbody\", {\n staticClass: \"vuetable-body\"\n }, [_vm._l(_vm.tableData, function (item, itemIndex) {\n return [_c(\"tr\", {\n key: itemIndex,\n class: _vm.onRowClass(item, itemIndex),\n attrs: {\n \"item-index\": itemIndex,\n render: _vm.onRowChanged(item)\n },\n on: {\n dblclick: function dblclick($event) {\n return _vm.onRowDoubleClicked(item, $event);\n },\n click: function click($event) {\n return _vm.onRowClicked(item, $event);\n }\n }\n }, [_vm._l(_vm.tableFields, function (field, fieldIndex) {\n return [field.visible ? [_vm.isSpecialField(field.name) ? [_vm.extractName(field.name) == \"__sequence\" ? _c(\"td\", {\n key: fieldIndex,\n class: [\"vuetable-sequence\", field.dataClass],\n domProps: {\n innerHTML: _vm._s(_vm.renderSequence(itemIndex))\n }\n }) : _vm._e(), _vm._v(\" \"), _vm.extractName(field.name) == \"__handle\" ? _c(\"td\", {\n key: fieldIndex,\n class: [\"vuetable-handle\", field.dataClass],\n domProps: {\n innerHTML: _vm._s(_vm.renderIconTag([\"handle-icon\", _vm.css.handleIcon]))\n }\n }) : _vm._e(), _vm._v(\" \"), _vm.extractName(field.name) == \"__checkbox\" ? _c(\"td\", {\n key: fieldIndex,\n class: [\"vuetable-checkboxes\", field.dataClass]\n }, [_c(\"input\", {\n attrs: {\n type: \"checkbox\"\n },\n domProps: {\n checked: _vm.rowSelected(item, field.name)\n },\n on: {\n change: function change($event) {\n return _vm.toggleCheckbox(item, field.name, $event);\n }\n }\n })]) : _vm._e(), _vm._v(\" \"), _vm.extractName(field.name) === \"__component\" ? _c(\"td\", {\n key: fieldIndex,\n class: [\"vuetable-component\", field.dataClass]\n }, [_c(_vm.extractArgs(field.name), {\n tag: \"component\",\n attrs: {\n \"row-data\": item,\n \"row-index\": itemIndex,\n \"row-field\": field.sortField\n }\n })], 1) : _vm._e(), _vm._v(\" \"), _vm.extractName(field.name) === \"__slot\" ? _c(\"td\", {\n key: fieldIndex,\n class: [\"vuetable-slot\", field.dataClass]\n }, [_vm._t(_vm.extractArgs(field.name), null, {\n rowData: item,\n rowIndex: itemIndex,\n rowField: field.sortField\n })], 2) : _vm._e()] : [_vm.hasCallback(field) ? _c(\"td\", {\n key: fieldIndex,\n class: field.dataClass,\n domProps: {\n innerHTML: _vm._s(_vm.callCallback(field, item))\n },\n on: {\n click: function click($event) {\n return _vm.onCellClicked(item, field, $event);\n },\n dblclick: function dblclick($event) {\n return _vm.onCellDoubleClicked(item, field, $event);\n },\n contextmenu: function contextmenu($event) {\n return _vm.onCellRightClicked(item, field, $event);\n }\n }\n }) : _c(\"td\", {\n key: fieldIndex,\n class: field.dataClass,\n domProps: {\n innerHTML: _vm._s(_vm.getObjectValue(item, field.name, \"\"))\n },\n on: {\n click: function click($event) {\n return _vm.onCellClicked(item, field, $event);\n },\n dblclick: function dblclick($event) {\n return _vm.onCellDoubleClicked(item, field, $event);\n },\n contextmenu: function contextmenu($event) {\n return _vm.onCellRightClicked(item, field, $event);\n }\n }\n })]] : _vm._e()];\n })], 2), _vm._v(\" \"), _vm.useDetailRow ? [_c(\"transition\", {\n key: itemIndex,\n attrs: {\n name: _vm.detailRowTransition\n }\n }, [_vm.isVisibleDetailRow(item[_vm.trackBy]) ? _c(\"tr\", {\n class: [_vm.css.detailRowClass],\n on: {\n click: function click($event) {\n return _vm.onDetailRowClick(item, $event);\n }\n }\n }, [_c(\"td\", {\n attrs: {\n colspan: _vm.countVisibleFields\n }\n }, [_c(_vm.detailRowComponent, {\n tag: \"component\",\n attrs: {\n \"row-data\": item,\n \"row-index\": itemIndex\n }\n })], 1)]) : _vm._e()])] : _vm._e()];\n }), _vm._v(\" \"), _vm.displayEmptyDataRow ? [_c(\"tr\", [_c(\"td\", {\n staticClass: \"vuetable-empty-result\",\n attrs: {\n colspan: _vm.countVisibleFields\n },\n domProps: {\n innerHTML: _vm._s(_vm.noDataTemplate)\n }\n })])] : _vm._e(), _vm._v(\" \"), _vm.lessThanMinRows ? _vm._l(_vm.blankRows, function (i) {\n return _c(\"tr\", {\n key: i,\n staticClass: \"blank-row\"\n }, [_vm._l(_vm.tableFields, function (field, fieldIndex) {\n return [field.visible ? _c(\"td\", {\n key: fieldIndex\n }, [_vm._v(\" \")]) : _vm._e()];\n })], 2);\n }) : _vm._e()], 2)]);\n};\nvar Vuetablevue_type_template_id_5bfa05b0_scoped_true_staticRenderFns = [];\nVuetablevue_type_template_id_5bfa05b0_scoped_true_render._withStripped = true;\n\n;// ./node_modules/vuetable-2/src/components/Vuetable.vue?vue&type=template&id=5bfa05b0&scoped=true\n\n;// ./node_modules/axios/lib/helpers/bind.js\n\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nfunction bind_bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n;// ./node_modules/axios/lib/utils.js\n\n\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _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.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _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 = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction utils_typeof(o) { \"@babel/helpers - typeof\"; return utils_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, utils_typeof(o); }\n\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar utils_toString = Object.prototype.toString;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar iterator = Symbol.iterator,\n toStringTag = Symbol.toStringTag;\nvar kindOf = function (cache) {\n return function (thing) {\n var str = utils_toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n };\n}(Object.create(null));\nvar kindOfTest = function kindOfTest(type) {\n type = type.toLowerCase();\n return function (thing) {\n return kindOf(thing) === type;\n };\n};\nvar typeOfTest = function typeOfTest(type) {\n return function (thing) {\n return utils_typeof(thing) === type;\n };\n};\n\n/**\n * Determine if a value is a non-null object\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nvar utils_isArray = Array.isArray;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nvar isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && utils_isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nvar isArrayBuffer = kindOfTest('ArrayBuffer');\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && isArrayBuffer(val.buffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nvar isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nvar utils_isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nvar isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nvar utils_isObject = function isObject(thing) {\n return thing !== null && utils_typeof(thing) === 'object';\n};\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nvar utils_isBoolean = function isBoolean(thing) {\n return thing === true || thing === false;\n};\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nvar utils_isPlainObject = function isPlainObject(val) {\n if (kindOf(val) !== 'object') {\n return false;\n }\n var prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n};\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nvar isEmptyObject = function isEmptyObject(val) {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!utils_isObject(val) || isBuffer(val)) {\n return false;\n }\n try {\n return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nvar isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a React Native Blob\n * React Native \"blob\": an object with a `uri` attribute. Optionally, it can\n * also have a `name` and `type` attribute to specify filename and content type\n *\n * @see https://github.com/facebook/react-native/blob/26684cf3adf4094eb6c405d345a75bf8c7c0bf88/Libraries/Network/FormData.js#L68-L71\n *\n * @param {*} value The value to test\n *\n * @returns {boolean} True if value is a React Native Blob, otherwise false\n */\nvar isReactNativeBlob = function isReactNativeBlob(value) {\n return !!(value && typeof value.uri !== 'undefined');\n};\n\n/**\n * Determine if environment is React Native\n * ReactNative `FormData` has a non-standard `getParts()` method\n *\n * @param {*} formData The formData to test\n *\n * @returns {boolean} True if environment is React Native, otherwise false\n */\nvar isReactNative = function isReactNative(formData) {\n return formData && typeof formData.getParts !== 'undefined';\n};\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nvar isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a FileList, otherwise false\n */\nvar isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nvar isStream = function isStream(val) {\n return utils_isObject(val) && utils_isFunction(val.pipe);\n};\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction getGlobal() {\n if (typeof globalThis !== 'undefined') return globalThis;\n if (typeof self !== 'undefined') return self;\n if (typeof window !== 'undefined') return window;\n if (typeof __webpack_require__.g !== 'undefined') return __webpack_require__.g;\n return {};\n}\nvar G = getGlobal();\nvar FormDataCtor = typeof G.FormData !== 'undefined' ? G.FormData : undefined;\nvar isFormData = function isFormData(thing) {\n if (!thing) return false;\n if (FormDataCtor && thing instanceof FormDataCtor) return true;\n // Reject plain objects inheriting directly from Object.prototype so prototype-pollution gadgets can't spoof FormData.\n var proto = getPrototypeOf(thing);\n if (!proto || proto === Object.prototype) return false;\n if (!utils_isFunction(thing.append)) return false;\n var kind = kindOf(thing);\n return kind === 'formdata' ||\n // detect form-data instance\n kind === 'object' && utils_isFunction(thing.toString) && thing.toString() === '[object FormData]';\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nvar isURLSearchParams = kindOfTest('URLSearchParams');\nvar _map = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest),\n _map2 = _slicedToArray(_map, 4),\n isReadableStream = _map2[0],\n isRequest = _map2[1],\n isResponse = _map2[2],\n isHeaders = _map2[3];\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nvar trim = function trim(str) {\n return str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n};\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array<unknown>} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref$allOwnKeys = _ref.allOwnKeys,\n allOwnKeys = _ref$allOwnKeys === void 0 ? false : _ref$allOwnKeys;\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n var i;\n var l;\n\n // Force an array if not already something iterable\n if (utils_typeof(obj) !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n if (utils_isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n var keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n var len = keys.length;\n var key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\n/**\n * Finds a key in an object, case-insensitive, returning the actual key name.\n * Returns null if the object is a Buffer or if no match is found.\n *\n * @param {Object} obj - The object to search.\n * @param {string} key - The key to find (case-insensitive).\n * @returns {?string} The actual key name if found, otherwise null.\n */\nfunction findKey(obj, key) {\n if (isBuffer(obj)) {\n return null;\n }\n key = key.toLowerCase();\n var keys = Object.keys(obj);\n var i = keys.length;\n var _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\nvar _global = function () {\n /*eslint no-undef:0*/\n if (typeof globalThis !== 'undefined') return globalThis;\n return typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : __webpack_require__.g;\n}();\nvar isContextDefined = function isContextDefined(context) {\n return !isUndefined(context) && context !== _global;\n};\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * const result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge() {\n var _ref2 = isContextDefined(this) && this || {},\n caseless = _ref2.caseless,\n skipUndefined = _ref2.skipUndefined;\n var result = {};\n var assignValue = function assignValue(val, key) {\n // Skip dangerous property names to prevent prototype pollution\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return;\n }\n var targetKey = caseless && findKey(result, key) || key;\n // Read via own-prop only — a bare `result[targetKey]` walks the prototype\n // chain, so a polluted Object.prototype value could surface here and get\n // copied into the merged result.\n var existing = utils_hasOwnProperty(result, targetKey) ? result[targetKey] : undefined;\n if (utils_isPlainObject(existing) && utils_isPlainObject(val)) {\n result[targetKey] = merge(existing, val);\n } else if (utils_isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (utils_isArray(val)) {\n result[targetKey] = val.slice();\n } else if (!skipUndefined || !isUndefined(val)) {\n result[targetKey] = val;\n }\n };\n for (var _len = arguments.length, objs = new Array(_len), _key2 = 0; _key2 < _len; _key2++) {\n objs[_key2] = arguments[_key2];\n }\n for (var i = 0, l = objs.length; i < l; i++) {\n objs[i] && forEach(objs[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nvar utils_extend = function extend(a, b, thisArg) {\n var _ref3 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n allOwnKeys = _ref3.allOwnKeys;\n forEach(b, function (val, key) {\n if (thisArg && utils_isFunction(val)) {\n Object.defineProperty(a, key, {\n // Null-proto descriptor so a polluted Object.prototype.get cannot\n // hijack defineProperty's accessor-vs-data resolution.\n __proto__: null,\n value: bind_bind(val, thisArg),\n writable: true,\n enumerable: true,\n configurable: true\n });\n } else {\n Object.defineProperty(a, key, {\n __proto__: null,\n value: val,\n writable: true,\n enumerable: true,\n configurable: true\n });\n }\n }, {\n allOwnKeys: allOwnKeys\n });\n return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nvar stripBOM = function stripBOM(content) {\n if (content.charCodeAt(0) === 0xfeff) {\n content = content.slice(1);\n }\n return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nvar inherits = function inherits(constructor, superConstructor, props, descriptors) {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n Object.defineProperty(constructor.prototype, 'constructor', {\n __proto__: null,\n value: constructor,\n writable: true,\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(constructor, 'super', {\n __proto__: null,\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nvar toFlatObject = function toFlatObject(sourceObj, destObj, filter, propFilter) {\n var props;\n var i;\n var prop;\n var merged = {};\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nvar endsWith = function endsWith(str, searchString, position) {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n var lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n};\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nvar utils_toArray = function toArray(thing) {\n if (!thing) return null;\n if (utils_isArray(thing)) return thing;\n var i = thing.length;\n if (!isNumber(i)) return null;\n var arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nvar isTypedArray = function (TypedArray) {\n // eslint-disable-next-line func-names\n return function (thing) {\n return TypedArray && thing instanceof TypedArray;\n };\n}(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nvar forEachEntry = function forEachEntry(obj, fn) {\n var generator = obj && obj[iterator];\n var _iterator = generator.call(obj);\n var result;\n while ((result = _iterator.next()) && !result.done) {\n var pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nvar matchAll = function matchAll(regExp, str) {\n var matches;\n var arr = [];\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nvar isHTMLForm = kindOfTest('HTMLFormElement');\nvar toCamelCase = function toCamelCase(str) {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n });\n};\n\n/* Creating a function that will check if an object has a property. */\nvar utils_hasOwnProperty = function (_ref4) {\n var hasOwnProperty = _ref4.hasOwnProperty;\n return function (obj, prop) {\n return hasOwnProperty.call(obj, prop);\n };\n}(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nvar utils_isRegExp = kindOfTest('RegExp');\nvar reduceDescriptors = function reduceDescriptors(obj, reducer) {\n var descriptors = Object.getOwnPropertyDescriptors(obj);\n var reducedDescriptors = {};\n forEach(descriptors, function (descriptor, name) {\n var ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nvar freezeMethods = function freezeMethods(obj) {\n reduceDescriptors(obj, function (descriptor, name) {\n // skip restricted props in strict mode\n if (utils_isFunction(obj) && ['arguments', 'caller', 'callee'].includes(name)) {\n return false;\n }\n var value = obj[name];\n if (!utils_isFunction(value)) return;\n descriptor.enumerable = false;\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n if (!descriptor.set) {\n descriptor.set = function () {\n throw Error(\"Can not rewrite read-only method '\" + name + \"'\");\n };\n }\n });\n};\n\n/**\n * Converts an array or a delimited string into an object set with values as keys and true as values.\n * Useful for fast membership checks.\n *\n * @param {Array|string} arrayOrString - The array or string to convert.\n * @param {string} delimiter - The delimiter to use if input is a string.\n * @returns {Object} An object with keys from the array or string, values set to true.\n */\nvar toObjectSet = function toObjectSet(arrayOrString, delimiter) {\n var obj = {};\n var define = function define(arr) {\n arr.forEach(function (value) {\n obj[value] = true;\n });\n };\n utils_isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n return obj;\n};\nvar utils_noop = function noop() {};\nvar toFiniteNumber = function toFiniteNumber(value, defaultValue) {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && utils_isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\n/**\n * Recursively converts an object to a JSON-compatible object, handling circular references and Buffers.\n *\n * @param {Object} obj - The object to convert.\n * @returns {Object} The JSON-compatible object.\n */\nvar toJSONObject = function toJSONObject(obj) {\n var visited = new WeakSet();\n var _visit = function visit(source) {\n if (utils_isObject(source)) {\n if (visited.has(source)) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n if (!('toJSON' in source)) {\n // add-on descent / delete-on-ascent: preserves path semantics, so DAG nodes serialise at every occurrence (see #7230).\n visited.add(source);\n var target = utils_isArray(source) ? [] : {};\n forEach(source, function (value, key) {\n var reducedValue = _visit(value);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n visited.delete(source);\n return target;\n }\n }\n return source;\n };\n return _visit(obj);\n};\n\n/**\n * Determines if a value is an async function.\n *\n * @param {*} thing - The value to test.\n * @returns {boolean} True if value is an async function, otherwise false.\n */\nvar isAsyncFn = kindOfTest('AsyncFunction');\n\n/**\n * Determines if a value is thenable (has then and catch methods).\n *\n * @param {*} thing - The value to test.\n * @returns {boolean} True if value is thenable, otherwise false.\n */\nvar isThenable = function isThenable(thing) {\n return thing && (utils_isObject(thing) || utils_isFunction(thing)) && utils_isFunction(thing.then) && utils_isFunction(thing.catch);\n};\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\n/**\n * Provides a cross-platform setImmediate implementation.\n * Uses native setImmediate if available, otherwise falls back to postMessage or setTimeout.\n *\n * @param {boolean} setImmediateSupported - Whether setImmediate is supported.\n * @param {boolean} postMessageSupported - Whether postMessage is supported.\n * @returns {Function} A function to schedule a callback asynchronously.\n */\nvar _setImmediate = function (setImmediateSupported, postMessageSupported) {\n if (setImmediateSupported) {\n return setImmediate;\n }\n return postMessageSupported ? function (token, callbacks) {\n _global.addEventListener('message', function (_ref5) {\n var source = _ref5.source,\n data = _ref5.data;\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n return function (cb) {\n callbacks.push(cb);\n _global.postMessage(token, '*');\n };\n }(\"axios@\".concat(Math.random()), []) : function (cb) {\n return setTimeout(cb);\n };\n}(typeof setImmediate === 'function', utils_isFunction(_global.postMessage));\n\n/**\n * Schedules a microtask or asynchronous callback as soon as possible.\n * Uses queueMicrotask if available, otherwise falls back to process.nextTick or _setImmediate.\n *\n * @type {Function}\n */\nvar asap = typeof queueMicrotask !== 'undefined' ? queueMicrotask.bind(_global) : typeof process !== 'undefined' && process.nextTick || _setImmediate;\n\n// *********************\n\nvar isIterable = function isIterable(thing) {\n return thing != null && utils_isFunction(thing[iterator]);\n};\n/* harmony default export */ const utils = ({\n isArray: utils_isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isBoolean: utils_isBoolean,\n isObject: utils_isObject,\n isPlainObject: utils_isPlainObject,\n isEmptyObject: isEmptyObject,\n isReadableStream: isReadableStream,\n isRequest: isRequest,\n isResponse: isResponse,\n isHeaders: isHeaders,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isReactNativeBlob: isReactNativeBlob,\n isReactNative: isReactNative,\n isBlob: isBlob,\n isRegExp: utils_isRegExp,\n isFunction: utils_isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isTypedArray: isTypedArray,\n isFileList: isFileList,\n forEach: forEach,\n merge: merge,\n extend: utils_extend,\n trim: trim,\n stripBOM: stripBOM,\n inherits: inherits,\n toFlatObject: toFlatObject,\n kindOf: kindOf,\n kindOfTest: kindOfTest,\n endsWith: endsWith,\n toArray: utils_toArray,\n forEachEntry: forEachEntry,\n matchAll: matchAll,\n isHTMLForm: isHTMLForm,\n hasOwnProperty: utils_hasOwnProperty,\n hasOwnProp: utils_hasOwnProperty,\n // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors: reduceDescriptors,\n freezeMethods: freezeMethods,\n toObjectSet: toObjectSet,\n toCamelCase: toCamelCase,\n noop: utils_noop,\n toFiniteNumber: toFiniteNumber,\n findKey: findKey,\n global: _global,\n isContextDefined: isContextDefined,\n isSpecCompliantForm: isSpecCompliantForm,\n toJSONObject: toJSONObject,\n isAsyncFn: isAsyncFn,\n isThenable: isThenable,\n setImmediate: _setImmediate,\n asap: asap,\n isIterable: isIterable\n});\n;// ./node_modules/axios/lib/helpers/parseHeaders.js\n\n\n\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = utils.toObjectSet(['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent']);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\n/* harmony default export */ const parseHeaders = (function (rawHeaders) {\n var parsed = {};\n var key;\n var val;\n var i;\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n if (!key || parsed[key] && ignoreDuplicateOf[key]) {\n return;\n }\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n return parsed;\n});\n__webpack_require__.dn(parseHeaders);\n;// ./node_modules/axios/lib/helpers/sanitizeHeaderValue.js\n\n\n\nfunction trimSPorHTAB(str) {\n var start = 0;\n var end = str.length;\n while (start < end) {\n var code = str.charCodeAt(start);\n if (code !== 0x09 && code !== 0x20) {\n break;\n }\n start += 1;\n }\n while (end > start) {\n var _code = str.charCodeAt(end - 1);\n if (_code !== 0x09 && _code !== 0x20) {\n break;\n }\n end -= 1;\n }\n return start === 0 && end === str.length ? str : str.slice(start, end);\n}\n\n// The control-code ranges are intentional: header sanitization strips C0/DEL bytes.\n// eslint-disable-next-line no-control-regex\nvar INVALID_UNICODE_HEADER_VALUE_CHARS = new RegExp(\"[\\\\u0000-\\\\u0008\\\\u000a-\\\\u001f\\\\u007f]+\", 'g');\n// eslint-disable-next-line no-control-regex\nvar INVALID_BYTE_STRING_HEADER_VALUE_CHARS = new RegExp(\"[^\\\\u0009\\\\u0020-\\\\u007e\\\\u0080-\\\\u00ff]+\", 'g');\nfunction sanitizeValue(value, invalidChars) {\n if (utils.isArray(value)) {\n return value.map(function (item) {\n return sanitizeValue(item, invalidChars);\n });\n }\n return trimSPorHTAB(String(value).replace(invalidChars, ''));\n}\nvar sanitizeHeaderValue = function sanitizeHeaderValue(value) {\n return sanitizeValue(value, INVALID_UNICODE_HEADER_VALUE_CHARS);\n};\nvar sanitizeByteStringHeaderValue = function sanitizeByteStringHeaderValue(value) {\n return sanitizeValue(value, INVALID_BYTE_STRING_HEADER_VALUE_CHARS);\n};\nfunction toByteStringHeaderObject(headers) {\n var byteStringHeaders = Object.create(null);\n utils.forEach(headers.toJSON(), function (value, header) {\n byteStringHeaders[header] = sanitizeByteStringHeaderValue(value);\n });\n return byteStringHeaders;\n}\n;// ./node_modules/axios/lib/core/AxiosHeaders.js\n\n\nfunction AxiosHeaders_typeof(o) { \"@babel/helpers - typeof\"; return AxiosHeaders_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, AxiosHeaders_typeof(o); }\nfunction AxiosHeaders_slicedToArray(r, e) { return AxiosHeaders_arrayWithHoles(r) || AxiosHeaders_iterableToArrayLimit(r, e) || AxiosHeaders_unsupportedIterableToArray(r, e) || AxiosHeaders_nonIterableRest(); }\nfunction AxiosHeaders_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.\"); }\nfunction AxiosHeaders_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 = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction AxiosHeaders_arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || AxiosHeaders_unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _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.\"); }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return AxiosHeaders_arrayLikeToArray(r); }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = AxiosHeaders_unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, 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 o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction AxiosHeaders_unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return AxiosHeaders_arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? AxiosHeaders_arrayLikeToArray(r, a) : void 0; } }\nfunction AxiosHeaders_arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == AxiosHeaders_typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != AxiosHeaders_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != AxiosHeaders_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar $internals = Symbol('internals');\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n return utils.isArray(value) ? value.map(normalizeValue) : sanitizeHeaderValue(String(value));\n}\nfunction parseTokens(str) {\n var tokens = Object.create(null);\n var tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n var match;\n while (match = tokensRE.exec(str)) {\n tokens[match[1]] = match[2];\n }\n return tokens;\n}\nvar isValidHeaderName = function isValidHeaderName(str) {\n return /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n};\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n if (isHeaderNameFilter) {\n value = header;\n }\n if (!utils.isString(value)) return;\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\nfunction formatHeader(header) {\n return header.trim().toLowerCase().replace(/([a-z\\d])(\\w*)/g, function (w, char, str) {\n return char.toUpperCase() + str;\n });\n}\nfunction buildAccessors(obj, header) {\n var accessorName = utils.toCamelCase(' ' + header);\n ['get', 'set', 'has'].forEach(function (methodName) {\n Object.defineProperty(obj, methodName + accessorName, {\n // Null-proto descriptor so a polluted Object.prototype.get cannot turn\n // this data descriptor into an accessor descriptor on the way in.\n __proto__: null,\n value: function value(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\nvar AxiosHeaders = /*#__PURE__*/function () {\n function AxiosHeaders(headers) {\n _classCallCheck(this, AxiosHeaders);\n headers && this.set(headers);\n }\n return _createClass(AxiosHeaders, [{\n key: \"set\",\n value: function set(header, valueOrRewrite, rewrite) {\n var self = this;\n function setHeader(_value, _header, _rewrite) {\n var lHeader = normalizeHeader(_header);\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n var key = utils.findKey(self, lHeader);\n if (!key || self[key] === undefined || _rewrite === true || _rewrite === undefined && self[key] !== false) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n var setHeaders = function setHeaders(headers, _rewrite) {\n return utils.forEach(headers, function (_value, _header) {\n return setHeader(_value, _header, _rewrite);\n });\n };\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite);\n } else if (utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n var obj = {},\n dest,\n key;\n var _iterator = _createForOfIteratorHelper(header),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var entry = _step.value;\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n obj[key = entry[0]] = (dest = obj[key]) ? utils.isArray(dest) ? [].concat(_toConsumableArray(dest), [entry[1]]) : [dest, entry[1]] : entry[1];\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n setHeaders(obj, valueOrRewrite);\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n return this;\n }\n }, {\n key: \"get\",\n value: function get(header, parser) {\n header = normalizeHeader(header);\n if (header) {\n var key = utils.findKey(this, header);\n if (key) {\n var value = this[key];\n if (!parser) {\n return value;\n }\n if (parser === true) {\n return parseTokens(value);\n }\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n }, {\n key: \"has\",\n value: function has(header, matcher) {\n header = normalizeHeader(header);\n if (header) {\n var key = utils.findKey(this, header);\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n return false;\n }\n }, {\n key: \"delete\",\n value: function _delete(header, matcher) {\n var self = this;\n var deleted = false;\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n if (_header) {\n var key = utils.findKey(self, _header);\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n deleted = true;\n }\n }\n }\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n return deleted;\n }\n }, {\n key: \"clear\",\n value: function clear(matcher) {\n var keys = Object.keys(this);\n var i = keys.length;\n var deleted = false;\n while (i--) {\n var key = keys[i];\n if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n return deleted;\n }\n }, {\n key: \"normalize\",\n value: function normalize(format) {\n var self = this;\n var headers = {};\n utils.forEach(this, function (value, header) {\n var key = utils.findKey(headers, header);\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n var normalized = format ? formatHeader(header) : String(header).trim();\n if (normalized !== header) {\n delete self[header];\n }\n self[normalized] = normalizeValue(value);\n headers[normalized] = true;\n });\n return this;\n }\n }, {\n key: \"concat\",\n value: function concat() {\n var _this$constructor;\n for (var _len = arguments.length, targets = new Array(_len), _key = 0; _key < _len; _key++) {\n targets[_key] = arguments[_key];\n }\n return (_this$constructor = this.constructor).concat.apply(_this$constructor, [this].concat(targets));\n }\n }, {\n key: \"toJSON\",\n value: function toJSON(asStrings) {\n var obj = Object.create(null);\n utils.forEach(this, function (value, header) {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n return obj;\n }\n }, {\n key: Symbol.iterator,\n value: function value() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n }, {\n key: \"toString\",\n value: function toString() {\n return Object.entries(this.toJSON()).map(function (_ref) {\n var _ref2 = AxiosHeaders_slicedToArray(_ref, 2),\n header = _ref2[0],\n value = _ref2[1];\n return header + ': ' + value;\n }).join('\\n');\n }\n }, {\n key: \"getSetCookie\",\n value: function getSetCookie() {\n return this.get('set-cookie') || [];\n }\n }, {\n key: Symbol.toStringTag,\n get: function get() {\n return 'AxiosHeaders';\n }\n }], [{\n key: \"from\",\n value: function from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n }, {\n key: \"concat\",\n value: function concat(first) {\n var computed = new this(first);\n for (var _len2 = arguments.length, targets = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n targets[_key2 - 1] = arguments[_key2];\n }\n targets.forEach(function (target) {\n return computed.set(target);\n });\n return computed;\n }\n }, {\n key: \"accessor\",\n value: function accessor(header) {\n var internals = this[$internals] = this[$internals] = {\n accessors: {}\n };\n var accessors = internals.accessors;\n var prototype = this.prototype;\n function defineAccessor(_header) {\n var lHeader = normalizeHeader(_header);\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n return this;\n }\n }]);\n}();\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, function (_ref3, key) {\n var value = _ref3.value;\n var mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: function get() {\n return value;\n },\n set: function set(headerValue) {\n this[mapped] = headerValue;\n }\n };\n});\nutils.freezeMethods(AxiosHeaders);\n/* harmony default export */ const core_AxiosHeaders = (AxiosHeaders);\n;// ./node_modules/axios/lib/core/AxiosError.js\n\n\nfunction AxiosError_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction AxiosError_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, AxiosError_toPropertyKey(o.key), o); } }\nfunction AxiosError_createClass(e, r, t) { return r && AxiosError_defineProperties(e.prototype, r), t && AxiosError_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction AxiosError_toPropertyKey(t) { var i = AxiosError_toPrimitive(t, \"string\"); return \"symbol\" == AxiosError_typeof(i) ? i : i + \"\"; }\nfunction AxiosError_toPrimitive(t, r) { if (\"object\" != AxiosError_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != AxiosError_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == AxiosError_typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _wrapNativeSuper(t) { var r = \"function\" == typeof Map ? new Map() : void 0; return _wrapNativeSuper = function _wrapNativeSuper(t) { if (null === t || !_isNativeFunction(t)) return t; if (\"function\" != typeof t) throw new TypeError(\"Super expression must either be null or a function\"); if (void 0 !== r) { if (r.has(t)) return r.get(t); r.set(t, Wrapper); } function Wrapper() { return _construct(t, arguments, _getPrototypeOf(this).constructor); } return Wrapper.prototype = Object.create(t.prototype, { constructor: { value: Wrapper, enumerable: !1, writable: !0, configurable: !0 } }), _setPrototypeOf(Wrapper, t); }, _wrapNativeSuper(t); }\nfunction _construct(t, e, r) { if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && _setPrototypeOf(p, r.prototype), p; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _isNativeFunction(t) { try { return -1 !== Function.toString.call(t).indexOf(\"[native code]\"); } catch (n) { return \"function\" == typeof t; } }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction AxiosError_slicedToArray(r, e) { return AxiosError_arrayWithHoles(r) || AxiosError_iterableToArrayLimit(r, e) || AxiosError_unsupportedIterableToArray(r, e) || AxiosError_nonIterableRest(); }\nfunction AxiosError_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.\"); }\nfunction AxiosError_unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return AxiosError_arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? AxiosError_arrayLikeToArray(r, a) : void 0; } }\nfunction AxiosError_arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction AxiosError_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 = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction AxiosError_arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction AxiosError_typeof(o) { \"@babel/helpers - typeof\"; return AxiosError_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, AxiosError_typeof(o); }\n\n\nvar REDACTED = '[REDACTED ****]';\nfunction hasOwnOrPrototypeToJSON(source) {\n if (utils.hasOwnProp(source, 'toJSON')) {\n return true;\n }\n var prototype = Object.getPrototypeOf(source);\n while (prototype && prototype !== Object.prototype) {\n if (utils.hasOwnProp(prototype, 'toJSON')) {\n return true;\n }\n prototype = Object.getPrototypeOf(prototype);\n }\n return false;\n}\n\n// Build a plain-object snapshot of `config` and replace the value of any key\n// (case-insensitive) listed in `redactKeys` with REDACTED. Walks through arrays\n// and AxiosHeaders, and short-circuits on circular references.\nfunction redactConfig(config, redactKeys) {\n var lowerKeys = new Set(redactKeys.map(function (k) {\n return String(k).toLowerCase();\n }));\n var seen = [];\n var _visit = function visit(source) {\n if (source === null || AxiosError_typeof(source) !== 'object') return source;\n if (utils.isBuffer(source)) return source;\n if (seen.indexOf(source) !== -1) return undefined;\n if (source instanceof core_AxiosHeaders) {\n source = source.toJSON();\n }\n seen.push(source);\n var result;\n if (utils.isArray(source)) {\n result = [];\n source.forEach(function (v, i) {\n var reducedValue = _visit(v);\n if (!utils.isUndefined(reducedValue)) {\n result[i] = reducedValue;\n }\n });\n } else {\n if (!utils.isPlainObject(source) && hasOwnOrPrototypeToJSON(source)) {\n seen.pop();\n return source;\n }\n result = Object.create(null);\n for (var _i = 0, _Object$entries = Object.entries(source); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = AxiosError_slicedToArray(_Object$entries[_i], 2),\n key = _Object$entries$_i[0],\n value = _Object$entries$_i[1];\n var reducedValue = lowerKeys.has(key.toLowerCase()) ? REDACTED : _visit(value);\n if (!utils.isUndefined(reducedValue)) {\n result[key] = reducedValue;\n }\n }\n }\n seen.pop();\n return result;\n };\n return _visit(config);\n}\nvar AxiosError = /*#__PURE__*/function (_Error) {\n /**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\n function AxiosError(message, code, config, request, response) {\n var _this;\n AxiosError_classCallCheck(this, AxiosError);\n _this = _callSuper(this, AxiosError, [message]);\n\n // Make message enumerable to maintain backward compatibility\n // The native Error constructor sets message as non-enumerable,\n // but axios < v1.13.3 had it as enumerable\n Object.defineProperty(_this, 'message', {\n // Null-proto descriptor so a polluted Object.prototype.get cannot turn\n // this data descriptor into an accessor descriptor on the way in.\n __proto__: null,\n value: message,\n enumerable: true,\n writable: true,\n configurable: true\n });\n _this.name = 'AxiosError';\n _this.isAxiosError = true;\n code && (_this.code = code);\n config && (_this.config = config);\n request && (_this.request = request);\n if (response) {\n _this.response = response;\n _this.status = response.status;\n }\n return _this;\n }\n _inherits(AxiosError, _Error);\n return AxiosError_createClass(AxiosError, [{\n key: \"toJSON\",\n value: function toJSON() {\n // Opt-in redaction: when the request config carries a `redact` array, the\n // value of any matching key (case-insensitive, at any depth) is replaced\n // with REDACTED in the serialized snapshot. Undefined or empty leaves the\n // existing serialization behavior unchanged.\n var config = this.config;\n var redactKeys = config && utils.hasOwnProp(config, 'redact') ? config.redact : undefined;\n var serializedConfig = utils.isArray(redactKeys) && redactKeys.length > 0 ? redactConfig(config, redactKeys) : utils.toJSONObject(config);\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: serializedConfig,\n code: this.code,\n status: this.status\n };\n }\n }], [{\n key: \"from\",\n value: function from(error, code, config, request, response, customProps) {\n var axiosError = new AxiosError(error.message, code || error.code, config, request, response);\n axiosError.cause = error;\n axiosError.name = error.name;\n\n // Preserve status from the original error if not already set from response\n if (error.status != null && axiosError.status == null) {\n axiosError.status = error.status;\n }\n customProps && Object.assign(axiosError, customProps);\n return axiosError;\n }\n }]);\n}(/*#__PURE__*/_wrapNativeSuper(Error)); // This can be changed to static properties as soon as the parser options in .eslint.cjs are updated.\nAxiosError.ERR_BAD_OPTION_VALUE = 'ERR_BAD_OPTION_VALUE';\nAxiosError.ERR_BAD_OPTION = 'ERR_BAD_OPTION';\nAxiosError.ECONNABORTED = 'ECONNABORTED';\nAxiosError.ETIMEDOUT = 'ETIMEDOUT';\nAxiosError.ECONNREFUSED = 'ECONNREFUSED';\nAxiosError.ERR_NETWORK = 'ERR_NETWORK';\nAxiosError.ERR_FR_TOO_MANY_REDIRECTS = 'ERR_FR_TOO_MANY_REDIRECTS';\nAxiosError.ERR_DEPRECATED = 'ERR_DEPRECATED';\nAxiosError.ERR_BAD_RESPONSE = 'ERR_BAD_RESPONSE';\nAxiosError.ERR_BAD_REQUEST = 'ERR_BAD_REQUEST';\nAxiosError.ERR_CANCELED = 'ERR_CANCELED';\nAxiosError.ERR_NOT_SUPPORT = 'ERR_NOT_SUPPORT';\nAxiosError.ERR_INVALID_URL = 'ERR_INVALID_URL';\nAxiosError.ERR_FORM_DATA_DEPTH_EXCEEDED = 'ERR_FORM_DATA_DEPTH_EXCEEDED';\n/* harmony default export */ const core_AxiosError = (AxiosError);\n;// ./node_modules/axios/lib/helpers/null.js\n// eslint-disable-next-line strict\n/* harmony default export */ const helpers_null = (null);\n;// ./node_modules/axios/lib/helpers/toFormData.js\n\n\nfunction toFormData_typeof(o) { \"@babel/helpers - typeof\"; return toFormData_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, toFormData_typeof(o); }\n\n\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\n\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\nvar predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (helpers_null || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n var metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n var visitor = options.visitor || defaultVisitor;\n var dots = options.dots;\n var indexes = options.indexes;\n var _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n var maxDepth = options.maxDepth === undefined ? 100 : options.maxDepth;\n var useBlob = _Blob && utils.isSpecCompliantForm(formData);\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n function convertValue(value) {\n if (value === null) return '';\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n if (!useBlob && utils.isBlob(value)) {\n throw new core_AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n var arr = value;\n if (utils.isReactNative(formData) && utils.isReactNativeBlob(value)) {\n formData.append(renderKey(path, key, dots), convertValue(value));\n return false;\n }\n if (value && !path && toFormData_typeof(value) === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (utils.isArray(value) && isFlatArray(value) || (utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : indexes === null ? key : key + '[]', convertValue(el));\n });\n return false;\n }\n }\n if (isVisitable(value)) {\n return true;\n }\n formData.append(renderKey(path, key, dots), convertValue(value));\n return false;\n }\n var stack = [];\n var exposedHelpers = Object.assign(predicates, {\n defaultVisitor: defaultVisitor,\n convertValue: convertValue,\n isVisitable: isVisitable\n });\n function build(value, path) {\n var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n if (utils.isUndefined(value)) return;\n if (depth > maxDepth) {\n throw new core_AxiosError('Object is too deeply nested (' + depth + ' levels). Max depth: ' + maxDepth, core_AxiosError.ERR_FORM_DATA_DEPTH_EXCEEDED);\n }\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n stack.push(value);\n utils.forEach(value, function each(el, key) {\n var result = !(utils.isUndefined(el) || el === null) && visitor.call(formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers);\n if (result === true) {\n build(el, path ? path.concat(key) : [key], depth + 1);\n }\n });\n stack.pop();\n }\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n build(obj);\n return formData;\n}\n/* harmony default export */ const helpers_toFormData = (toFormData);\n;// ./node_modules/axios/lib/helpers/AxiosURLSearchParams.js\n\n\n\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n var charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n params && helpers_toFormData(params, this, options);\n}\nvar AxiosURLSearchParams_prototype = AxiosURLSearchParams.prototype;\nAxiosURLSearchParams_prototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\nAxiosURLSearchParams_prototype.toString = function toString(encoder) {\n var _encode = encoder ? function (value) {\n return encoder.call(this, value, encode);\n } : encode;\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n/* harmony default export */ const helpers_AxiosURLSearchParams = (AxiosURLSearchParams);\n;// ./node_modules/axios/lib/helpers/buildURL.js\n\n\n\n\n\n/**\n * It replaces URL-encoded forms of `:`, `$`, `,`, and spaces with\n * their plain counterparts (`:`, `$`, `,`, `+`).\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction buildURL_encode(val) {\n return encodeURIComponent(val).replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nfunction buildURL(url, params, options) {\n if (!params) {\n return url;\n }\n var _encode = options && options.encode || buildURL_encode;\n var _options = utils.isFunction(options) ? {\n serialize: options\n } : options;\n var serializeFn = _options && _options.serialize;\n var serializedParams;\n if (serializeFn) {\n serializedParams = serializeFn(params, _options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ? params.toString() : new helpers_AxiosURLSearchParams(params, _options).toString(_encode);\n }\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n return url;\n}\n;// ./node_modules/axios/lib/core/InterceptorManager.js\n\n\nfunction InterceptorManager_typeof(o) { \"@babel/helpers - typeof\"; return InterceptorManager_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, InterceptorManager_typeof(o); }\nfunction InterceptorManager_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction InterceptorManager_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, InterceptorManager_toPropertyKey(o.key), o); } }\nfunction InterceptorManager_createClass(e, r, t) { return r && InterceptorManager_defineProperties(e.prototype, r), t && InterceptorManager_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction InterceptorManager_toPropertyKey(t) { var i = InterceptorManager_toPrimitive(t, \"string\"); return \"symbol\" == InterceptorManager_typeof(i) ? i : i + \"\"; }\nfunction InterceptorManager_toPrimitive(t, r) { if (\"object\" != InterceptorManager_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != InterceptorManager_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar InterceptorManager = /*#__PURE__*/function () {\n function InterceptorManager() {\n InterceptorManager_classCallCheck(this, InterceptorManager);\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n * @param {Object} options The options for the interceptor, synchronous and runWhen\n *\n * @return {Number} An ID used to remove interceptor later\n */\n return InterceptorManager_createClass(InterceptorManager, [{\n key: \"use\",\n value: function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {void}\n */\n }, {\n key: \"eject\",\n value: function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n }, {\n key: \"clear\",\n value: function clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n }, {\n key: \"forEach\",\n value: function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n }]);\n}();\n/* harmony default export */ const core_InterceptorManager = (InterceptorManager);\n;// ./node_modules/axios/lib/defaults/transitional.js\n\n\n/* harmony default export */ const defaults_transitional = ({\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false,\n legacyInterceptorReqResOrdering: true\n});\n;// ./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js\n\n\n\n/* harmony default export */ const classes_URLSearchParams = (typeof URLSearchParams !== 'undefined' ? URLSearchParams : helpers_AxiosURLSearchParams);\n;// ./node_modules/axios/lib/platform/browser/classes/FormData.js\n\n\n/* harmony default export */ const classes_FormData = (typeof FormData !== 'undefined' ? FormData : null);\n;// ./node_modules/axios/lib/platform/browser/classes/Blob.js\n\n\n/* harmony default export */ const classes_Blob = (typeof Blob !== 'undefined' ? Blob : null);\n;// ./node_modules/axios/lib/platform/browser/index.js\n\n\n\n/* harmony default export */ const browser = ({\n isBrowser: true,\n classes: {\n URLSearchParams: classes_URLSearchParams,\n FormData: classes_FormData,\n Blob: classes_Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n});\n;// ./node_modules/axios/lib/platform/common/utils.js\nfunction common_utils_typeof(o) { \"@babel/helpers - typeof\"; return common_utils_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, common_utils_typeof(o); }\nvar hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\nvar _navigator = (typeof navigator === \"undefined\" ? \"undefined\" : common_utils_typeof(navigator)) === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nvar hasStandardBrowserEnv = hasBrowserEnv && (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nvar hasStandardBrowserWebWorkerEnv = function () {\n return typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope && typeof self.importScripts === 'function';\n}();\nvar origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\n;// ./node_modules/axios/lib/platform/index.js\nfunction platform_typeof(o) { \"@babel/helpers - typeof\"; return platform_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, platform_typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = platform_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction platform_toPropertyKey(t) { var i = platform_toPrimitive(t, \"string\"); return \"symbol\" == platform_typeof(i) ? i : i + \"\"; }\nfunction platform_toPrimitive(t, r) { if (\"object\" != platform_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != platform_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n/* harmony default export */ const platform = (_objectSpread(_objectSpread({}, common_utils_namespaceObject), browser));\n;// ./node_modules/axios/lib/helpers/toURLEncodedForm.js\n\n\nfunction toURLEncodedForm_typeof(o) { \"@babel/helpers - typeof\"; return toURLEncodedForm_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, toURLEncodedForm_typeof(o); }\nfunction toURLEncodedForm_ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction toURLEncodedForm_objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? toURLEncodedForm_ownKeys(Object(t), !0).forEach(function (r) { toURLEncodedForm_defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : toURLEncodedForm_ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction toURLEncodedForm_defineProperty(e, r, t) { return (r = toURLEncodedForm_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction toURLEncodedForm_toPropertyKey(t) { var i = toURLEncodedForm_toPrimitive(t, \"string\"); return \"symbol\" == toURLEncodedForm_typeof(i) ? i : i + \"\"; }\nfunction toURLEncodedForm_toPrimitive(t, r) { if (\"object\" != toURLEncodedForm_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != toURLEncodedForm_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nfunction toURLEncodedForm(data, options) {\n return helpers_toFormData(data, new platform.classes.URLSearchParams(), toURLEncodedForm_objectSpread({\n visitor: function visitor(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n;// ./node_modules/axios/lib/helpers/formDataToJSON.js\n\n\n\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(function (match) {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n var obj = {};\n var keys = Object.keys(arr);\n var i;\n var len = keys.length;\n var key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n var name = path[index++];\n if (name === '__proto__') return true;\n var isNumericKey = Number.isFinite(+name);\n var isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = utils.isArray(target[name]) ? target[name].concat(value) : [target[name], value];\n } else {\n target[name] = value;\n }\n return !isNumericKey;\n }\n if (!utils.hasOwnProp(target, name) || !utils.isObject(target[name])) {\n target[name] = [];\n }\n var result = buildPath(path, value, target[name], index);\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n return !isNumericKey;\n }\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n var obj = {};\n utils.forEachEntry(formData, function (name, value) {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n return obj;\n }\n return null;\n}\n/* harmony default export */ const helpers_formDataToJSON = (formDataToJSON);\n;// ./node_modules/axios/lib/defaults/index.js\n\n\n\n\n\n\n\n\n\nvar own = function own(obj, key) {\n return obj != null && utils.hasOwnProp(obj, key) ? obj[key] : undefined;\n};\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n return (encoder || JSON.stringify)(rawValue);\n}\nvar defaults = {\n transitional: defaults_transitional,\n adapter: ['xhr', 'http', 'fetch'],\n transformRequest: [function transformRequest(data, headers) {\n var contentType = headers.getContentType() || '';\n var hasJSONContentType = contentType.indexOf('application/json') > -1;\n var isObjectPayload = utils.isObject(data);\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n var isFormData = utils.isFormData(data);\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(helpers_formDataToJSON(data)) : data;\n }\n if (utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data) || utils.isReadableStream(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n var isFileList;\n if (isObjectPayload) {\n var formSerializer = own(this, 'formSerializer');\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, formSerializer).toString();\n }\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n var env = own(this, 'env');\n var _FormData = env && env.FormData;\n return helpers_toFormData(isFileList ? {\n 'files[]': data\n } : data, _FormData && new _FormData(), formSerializer);\n }\n }\n if (isObjectPayload || hasJSONContentType) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n return data;\n }],\n transformResponse: [function transformResponse(data) {\n var transitional = own(this, 'transitional') || defaults.transitional;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var responseType = own(this, 'responseType');\n var JSONRequested = responseType === 'json';\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n if (data && utils.isString(data) && (forcedJSONParsing && !responseType || JSONRequested)) {\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var strictJSONParsing = !silentJSONParsing && JSONRequested;\n try {\n return JSON.parse(data, own(this, 'parseReviver'));\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw core_AxiosError.from(e, core_AxiosError.ERR_BAD_RESPONSE, this, null, own(this, 'response'));\n }\n throw e;\n }\n }\n }\n return data;\n }],\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n maxContentLength: -1,\n maxBodyLength: -1,\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n headers: {\n common: {\n Accept: 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'query'], function (method) {\n defaults.headers[method] = {};\n});\n/* harmony default export */ const lib_defaults = (defaults);\n;// ./node_modules/axios/lib/core/transformData.js\n\n\n\n\n\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nfunction transformData(fns, response) {\n var config = this || lib_defaults;\n var context = response || config;\n var headers = core_AxiosHeaders.from(context.headers);\n var data = context.data;\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n headers.normalize();\n return data;\n}\n;// ./node_modules/axios/lib/cancel/isCancel.js\n\n\nfunction isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n;// ./node_modules/axios/lib/cancel/CanceledError.js\n\n\nfunction CanceledError_typeof(o) { \"@babel/helpers - typeof\"; return CanceledError_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, CanceledError_typeof(o); }\nfunction CanceledError_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, CanceledError_toPropertyKey(o.key), o); } }\nfunction CanceledError_createClass(e, r, t) { return r && CanceledError_defineProperties(e.prototype, r), t && CanceledError_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction CanceledError_toPropertyKey(t) { var i = CanceledError_toPrimitive(t, \"string\"); return \"symbol\" == CanceledError_typeof(i) ? i : i + \"\"; }\nfunction CanceledError_toPrimitive(t, r) { if (\"object\" != CanceledError_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != CanceledError_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction CanceledError_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction CanceledError_callSuper(t, o, e) { return o = CanceledError_getPrototypeOf(o), CanceledError_possibleConstructorReturn(t, CanceledError_isNativeReflectConstruct() ? Reflect.construct(o, e || [], CanceledError_getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction CanceledError_possibleConstructorReturn(t, e) { if (e && (\"object\" == CanceledError_typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return CanceledError_assertThisInitialized(t); }\nfunction CanceledError_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction CanceledError_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (CanceledError_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction CanceledError_getPrototypeOf(t) { return CanceledError_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, CanceledError_getPrototypeOf(t); }\nfunction CanceledError_inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && CanceledError_setPrototypeOf(t, e); }\nfunction CanceledError_setPrototypeOf(t, e) { return CanceledError_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, CanceledError_setPrototypeOf(t, e); }\n\nvar CanceledError = /*#__PURE__*/function (_AxiosError) {\n /**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\n function CanceledError(message, config, request) {\n var _this;\n CanceledError_classCallCheck(this, CanceledError);\n _this = CanceledError_callSuper(this, CanceledError, [message == null ? 'canceled' : message, core_AxiosError.ERR_CANCELED, config, request]);\n _this.name = 'CanceledError';\n _this.__CANCEL__ = true;\n return _this;\n }\n CanceledError_inherits(CanceledError, _AxiosError);\n return CanceledError_createClass(CanceledError);\n}(core_AxiosError);\n/* harmony default export */ const cancel_CanceledError = (CanceledError);\n;// ./node_modules/axios/lib/core/settle.js\n\n\n\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nfunction settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new core_AxiosError('Request failed with status code ' + response.status, response.status >= 400 && response.status < 500 ? core_AxiosError.ERR_BAD_REQUEST : core_AxiosError.ERR_BAD_RESPONSE, response.config, response.request, response));\n }\n}\n;// ./node_modules/axios/lib/helpers/parseProtocol.js\n\n\nfunction parseProtocol(url) {\n var match = /^([-+\\w]{1,25}):(?:\\/\\/)?/.exec(url);\n return match && match[1] || '';\n}\n;// ./node_modules/axios/lib/helpers/speedometer.js\n\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n var bytes = new Array(samplesCount);\n var timestamps = new Array(samplesCount);\n var head = 0;\n var tail = 0;\n var firstSampleTS;\n min = min !== undefined ? min : 1000;\n return function push(chunkLength) {\n var now = Date.now();\n var startedAt = timestamps[tail];\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n bytes[head] = chunkLength;\n timestamps[head] = now;\n var i = tail;\n var bytesCount = 0;\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n head = (head + 1) % samplesCount;\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n if (now - firstSampleTS < min) {\n return;\n }\n var passed = startedAt && now - startedAt;\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n/* harmony default export */ const helpers_speedometer = (speedometer);\n;// ./node_modules/axios/lib/helpers/throttle.js\nfunction throttle_toConsumableArray(r) { return throttle_arrayWithoutHoles(r) || throttle_iterableToArray(r) || throttle_unsupportedIterableToArray(r) || throttle_nonIterableSpread(); }\nfunction throttle_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.\"); }\nfunction throttle_unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return throttle_arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? throttle_arrayLikeToArray(r, a) : void 0; } }\nfunction throttle_iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction throttle_arrayWithoutHoles(r) { if (Array.isArray(r)) return throttle_arrayLikeToArray(r); }\nfunction throttle_arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n var timestamp = 0;\n var threshold = 1000 / freq;\n var lastArgs;\n var timer;\n var invoke = function invoke(args) {\n var now = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Date.now();\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(void 0, throttle_toConsumableArray(args));\n };\n var throttled = function throttled() {\n var now = Date.now();\n var passed = now - timestamp;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(function () {\n timer = null;\n invoke(lastArgs);\n }, threshold - passed);\n }\n }\n };\n var flush = function flush() {\n return lastArgs && invoke(lastArgs);\n };\n return [throttled, flush];\n}\n/* harmony default export */ const helpers_throttle = (throttle);\n;// ./node_modules/axios/lib/helpers/progressEventReducer.js\nfunction progressEventReducer_typeof(o) { \"@babel/helpers - typeof\"; return progressEventReducer_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, progressEventReducer_typeof(o); }\nfunction progressEventReducer_defineProperty(e, r, t) { return (r = progressEventReducer_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction progressEventReducer_toPropertyKey(t) { var i = progressEventReducer_toPrimitive(t, \"string\"); return \"symbol\" == progressEventReducer_typeof(i) ? i : i + \"\"; }\nfunction progressEventReducer_toPrimitive(t, r) { if (\"object\" != progressEventReducer_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != progressEventReducer_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar progressEventReducer = function progressEventReducer(listener, isDownloadStream) {\n var freq = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 3;\n var bytesNotified = 0;\n var _speedometer = helpers_speedometer(50, 250);\n return helpers_throttle(function (e) {\n if (!e || typeof e.loaded !== 'number') {\n return;\n }\n var rawLoaded = e.loaded;\n var total = e.lengthComputable ? e.total : undefined;\n var loaded = total != null ? Math.min(rawLoaded, total) : rawLoaded;\n var progressBytes = Math.max(0, loaded - bytesNotified);\n var rate = _speedometer(progressBytes);\n bytesNotified = Math.max(bytesNotified, loaded);\n var data = progressEventReducer_defineProperty({\n loaded: loaded,\n total: total,\n progress: total ? loaded / total : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null\n }, isDownloadStream ? 'download' : 'upload', true);\n listener(data);\n }, freq);\n};\nvar progressEventDecorator = function progressEventDecorator(total, throttled) {\n var lengthComputable = total != null;\n return [function (loaded) {\n return throttled[0]({\n lengthComputable: lengthComputable,\n total: total,\n loaded: loaded\n });\n }, throttled[1]];\n};\nvar asyncDecorator = function asyncDecorator(fn) {\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return utils.asap(function () {\n return fn.apply(void 0, args);\n });\n };\n};\n;// ./node_modules/axios/lib/helpers/isURLSameOrigin.js\n\n/* harmony default export */ const isURLSameOrigin = (platform.hasStandardBrowserEnv ? function (origin, isMSIE) {\n return function (url) {\n url = new URL(url, platform.origin);\n return origin.protocol === url.protocol && origin.host === url.host && (isMSIE || origin.port === url.port);\n };\n}(new URL(platform.origin), platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)) : function () {\n return true;\n});\n;// ./node_modules/axios/lib/helpers/cookies.js\n\n\n/* harmony default export */ const cookies = (platform.hasStandardBrowserEnv ?\n// Standard browser envs support document.cookie\n{\n write: function write(name, value, expires, path, domain, secure, sameSite) {\n if (typeof document === 'undefined') return;\n var cookie = [\"\".concat(name, \"=\").concat(encodeURIComponent(value))];\n if (utils.isNumber(expires)) {\n cookie.push(\"expires=\".concat(new Date(expires).toUTCString()));\n }\n if (utils.isString(path)) {\n cookie.push(\"path=\".concat(path));\n }\n if (utils.isString(domain)) {\n cookie.push(\"domain=\".concat(domain));\n }\n if (secure === true) {\n cookie.push('secure');\n }\n if (utils.isString(sameSite)) {\n cookie.push(\"SameSite=\".concat(sameSite));\n }\n document.cookie = cookie.join('; ');\n },\n read: function read(name) {\n if (typeof document === 'undefined') return null;\n // Match name=value by splitting on the semicolon separator instead of building a\n // RegExp from `name` — interpolating an unescaped string into a RegExp would let\n // metacharacters (e.g. `.+?` in an attacker-influenced cookie name) cause ReDoS or\n // match the wrong cookie. Browsers may serialize cookie pairs as either \";\" or\n // \"; \", so ignore optional whitespace before each cookie name.\n var cookies = document.cookie.split(';');\n for (var i = 0; i < cookies.length; i++) {\n var cookie = cookies[i].replace(/^\\s+/, '');\n var eq = cookie.indexOf('=');\n if (eq !== -1 && cookie.slice(0, eq) === name) {\n return decodeURIComponent(cookie.slice(eq + 1));\n }\n }\n return null;\n },\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000, '/');\n }\n} :\n// Non-standard browser env (web workers, react-native) lack needed support.\n{\n write: function write() {},\n read: function read() {\n return null;\n },\n remove: function remove() {}\n});\n;// ./node_modules/axios/lib/helpers/isAbsoluteURL.js\n\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nfunction isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n if (typeof url !== 'string') {\n return false;\n }\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n;// ./node_modules/axios/lib/helpers/combineURLs.js\n\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nfunction combineURLs(baseURL, relativeURL) {\n return relativeURL ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '') : baseURL;\n}\n;// ./node_modules/axios/lib/core/buildFullPath.js\n\n\n\n\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nfunction buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n var isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls === false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n;// ./node_modules/axios/lib/core/mergeConfig.js\n\n\nfunction mergeConfig_typeof(o) { \"@babel/helpers - typeof\"; return mergeConfig_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, mergeConfig_typeof(o); }\nfunction mergeConfig_ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction mergeConfig_objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? mergeConfig_ownKeys(Object(t), !0).forEach(function (r) { mergeConfig_defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : mergeConfig_ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction mergeConfig_defineProperty(e, r, t) { return (r = mergeConfig_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction mergeConfig_toPropertyKey(t) { var i = mergeConfig_toPrimitive(t, \"string\"); return \"symbol\" == mergeConfig_typeof(i) ? i : i + \"\"; }\nfunction mergeConfig_toPrimitive(t, r) { if (\"object\" != mergeConfig_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != mergeConfig_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\nvar headersToObject = function headersToObject(thing) {\n return thing instanceof core_AxiosHeaders ? mergeConfig_objectSpread({}, thing) : thing;\n};\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nfunction mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n\n // Use a null-prototype object so that downstream reads such as `config.auth`\n // or `config.baseURL` cannot inherit polluted values from Object.prototype.\n // `hasOwnProperty` is restored as a non-enumerable own slot to preserve\n // ergonomics for user code that relies on it.\n var config = Object.create(null);\n Object.defineProperty(config, 'hasOwnProperty', {\n // Null-proto descriptor so a polluted Object.prototype.get cannot turn\n // this data descriptor into an accessor descriptor on the way in.\n __proto__: null,\n value: Object.prototype.hasOwnProperty,\n enumerable: false,\n writable: true,\n configurable: true\n });\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({\n caseless: caseless\n }, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n function mergeDeepProperties(a, b, prop, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (utils.hasOwnProp(config2, prop)) {\n return getMergedValue(a, b);\n } else if (utils.hasOwnProp(config1, prop)) {\n return getMergedValue(undefined, a);\n }\n }\n var mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n allowedSocketPaths: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: function headers(a, b, prop) {\n return mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true);\n }\n };\n utils.forEach(Object.keys(mergeConfig_objectSpread(mergeConfig_objectSpread({}, config1), config2)), function computeConfigValue(prop) {\n if (prop === '__proto__' || prop === 'constructor' || prop === 'prototype') return;\n var merge = utils.hasOwnProp(mergeMap, prop) ? mergeMap[prop] : mergeDeepProperties;\n var a = utils.hasOwnProp(config1, prop) ? config1[prop] : undefined;\n var b = utils.hasOwnProp(config2, prop) ? config2[prop] : undefined;\n var configValue = merge(a, b, prop);\n utils.isUndefined(configValue) && merge !== mergeDirectKeys || (config[prop] = configValue);\n });\n return config;\n}\n;// ./node_modules/axios/lib/helpers/resolveConfig.js\nfunction resolveConfig_slicedToArray(r, e) { return resolveConfig_arrayWithHoles(r) || resolveConfig_iterableToArrayLimit(r, e) || resolveConfig_unsupportedIterableToArray(r, e) || resolveConfig_nonIterableRest(); }\nfunction resolveConfig_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.\"); }\nfunction resolveConfig_unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return resolveConfig_arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? resolveConfig_arrayLikeToArray(r, a) : void 0; } }\nfunction resolveConfig_arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction resolveConfig_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 = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction resolveConfig_arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\n\n\nvar FORM_DATA_CONTENT_HEADERS = ['content-type', 'content-length'];\nfunction setFormDataHeaders(headers, formHeaders, policy) {\n if (policy !== 'content-only') {\n headers.set(formHeaders);\n return;\n }\n Object.entries(formHeaders).forEach(function (_ref) {\n var _ref2 = resolveConfig_slicedToArray(_ref, 2),\n key = _ref2[0],\n val = _ref2[1];\n if (FORM_DATA_CONTENT_HEADERS.includes(key.toLowerCase())) {\n headers.set(key, val);\n }\n });\n}\n\n/**\n * Encode a UTF-8 string to a Latin-1 byte string for use with btoa().\n * This is a modern replacement for the deprecated unescape(encodeURIComponent(str)) pattern.\n *\n * @param {string} str The string to encode\n *\n * @returns {string} UTF-8 bytes as a Latin-1 string\n */\nvar encodeUTF8 = function encodeUTF8(str) {\n return encodeURIComponent(str).replace(/%([0-9A-F]{2})/gi, function (_, hex) {\n return String.fromCharCode(parseInt(hex, 16));\n });\n};\n/* harmony default export */ const resolveConfig = (function (config) {\n var newConfig = mergeConfig({}, config);\n\n // Read only own properties to prevent prototype pollution gadgets\n // (e.g. Object.prototype.baseURL = 'https://evil.com').\n var own = function own(key) {\n return utils.hasOwnProp(newConfig, key) ? newConfig[key] : undefined;\n };\n var data = own('data');\n var withXSRFToken = own('withXSRFToken');\n var xsrfHeaderName = own('xsrfHeaderName');\n var xsrfCookieName = own('xsrfCookieName');\n var headers = own('headers');\n var auth = own('auth');\n var baseURL = own('baseURL');\n var allowAbsoluteUrls = own('allowAbsoluteUrls');\n var url = own('url');\n newConfig.headers = headers = core_AxiosHeaders.from(headers);\n newConfig.url = buildURL(buildFullPath(baseURL, url, allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' + btoa((auth.username || '') + ':' + (auth.password ? encodeUTF8(auth.password) : '')));\n }\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // browser handles it\n } else if (utils.isFunction(data.getHeaders)) {\n // Node.js FormData (like form-data package)\n setFormDataHeaders(headers, data.getHeaders(), own('formDataHeaderPolicy'));\n }\n }\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n if (utils.isFunction(withXSRFToken)) {\n withXSRFToken = withXSRFToken(newConfig);\n }\n\n // Strict boolean check — prevents proto-pollution gadgets (e.g. Object.prototype.withXSRFToken = 1)\n // and misconfigurations (e.g. \"false\") from short-circuiting the same-origin check and leaking\n // the XSRF token cross-origin.\n var shouldSendXSRF = withXSRFToken === true || withXSRFToken == null && isURLSameOrigin(newConfig.url);\n if (shouldSendXSRF) {\n var xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n return newConfig;\n});\n__webpack_require__.dn(resolveConfig);\n;// ./node_modules/axios/lib/adapters/xhr.js\nfunction xhr_slicedToArray(r, e) { return xhr_arrayWithHoles(r) || xhr_iterableToArrayLimit(r, e) || xhr_unsupportedIterableToArray(r, e) || xhr_nonIterableRest(); }\nfunction xhr_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.\"); }\nfunction xhr_unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return xhr_arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? xhr_arrayLikeToArray(r, a) : void 0; } }\nfunction xhr_arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction xhr_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 = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction xhr_arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\n\n\n\n\n\nvar isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n/* harmony default export */ const xhr = (isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var _config = resolveConfig(config);\n var requestData = _config.data;\n var requestHeaders = core_AxiosHeaders.from(_config.headers).normalize();\n var responseType = _config.responseType,\n onUploadProgress = _config.onUploadProgress,\n onDownloadProgress = _config.onDownloadProgress;\n var onCanceled;\n var uploadThrottled, downloadThrottled;\n var flushUpload, flushDownload;\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n var request = new XMLHttpRequest();\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = core_AxiosHeaders.from('getAllResponseHeaders' in request && request.getAllResponseHeaders());\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.startsWith('file:'))) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n reject(new core_AxiosError('Request aborted', core_AxiosError.ECONNABORTED, config, request));\n done();\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError(event) {\n // Browsers deliver a ProgressEvent in XHR onerror\n // (message may be empty; when present, surface it)\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n var msg = event && event.message ? event.message : 'Network Error';\n var err = new core_AxiosError(msg, core_AxiosError.ERR_NETWORK, config, request);\n // attach the underlying event for consumers who want details\n err.event = event || null;\n reject(err);\n done();\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n var transitional = _config.transitional || defaults_transitional;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new core_AxiosError(timeoutErrorMessage, transitional.clarifyTimeoutError ? core_AxiosError.ETIMEDOUT : core_AxiosError.ECONNABORTED, config, request));\n done();\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(toByteStringHeaderObject(requestHeaders), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n var _progressEventReducer = progressEventReducer(onDownloadProgress, true);\n var _progressEventReducer2 = xhr_slicedToArray(_progressEventReducer, 2);\n downloadThrottled = _progressEventReducer2[0];\n flushDownload = _progressEventReducer2[1];\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n var _progressEventReducer3 = progressEventReducer(onUploadProgress);\n var _progressEventReducer4 = xhr_slicedToArray(_progressEventReducer3, 2);\n uploadThrottled = _progressEventReducer4[0];\n flushUpload = _progressEventReducer4[1];\n request.upload.addEventListener('progress', uploadThrottled);\n request.upload.addEventListener('loadend', flushUpload);\n }\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = function onCanceled(cancel) {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new cancel_CanceledError(null, config, request) : cancel);\n request.abort();\n done();\n request = null;\n };\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n var protocol = parseProtocol(_config.url);\n if (protocol && !platform.protocols.includes(protocol)) {\n reject(new core_AxiosError('Unsupported protocol ' + protocol + ':', core_AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n // Send the request\n request.send(requestData || null);\n });\n});\n;// ./node_modules/axios/lib/helpers/composeSignals.js\n\n\n\nvar composeSignals = function composeSignals(signals, timeout) {\n signals = signals ? signals.filter(Boolean) : [];\n if (!timeout && !signals.length) {\n return;\n }\n var controller = new AbortController();\n var aborted = false;\n var onabort = function onabort(reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n var err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof core_AxiosError ? err : new cancel_CanceledError(err instanceof Error ? err.message : err));\n }\n };\n var timer = timeout && setTimeout(function () {\n timer = null;\n onabort(new core_AxiosError(\"timeout of \".concat(timeout, \"ms exceeded\"), core_AxiosError.ETIMEDOUT));\n }, timeout);\n var unsubscribe = function unsubscribe() {\n if (!signals) {\n return;\n }\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(function (signal) {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n };\n signals.forEach(function (signal) {\n return signal.addEventListener('abort', onabort);\n });\n var signal = controller.signal;\n signal.unsubscribe = function () {\n return utils.asap(unsubscribe);\n };\n return signal;\n};\n/* harmony default export */ const helpers_composeSignals = (composeSignals);\n;// ./node_modules/axios/lib/helpers/trackStream.js\nfunction trackStream_typeof(o) { \"@babel/helpers - typeof\"; return trackStream_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, trackStream_typeof(o); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _regeneratorValues(e) { if (null != e) { var t = e[\"function\" == typeof Symbol && Symbol.iterator || \"@@iterator\"], r = 0; if (t) return t.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) return { next: function next() { return e && r >= e.length && (e = void 0), { value: e && e[r++], done: !e }; } }; } throw new TypeError(trackStream_typeof(e) + \" is not iterable\"); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i.return) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction _wrapAsyncGenerator(e) { return function () { return new AsyncGenerator(e.apply(this, arguments)); }; }\nfunction AsyncGenerator(e) { var t, n; function resume(t, n) { try { var r = e[t](n), o = r.value, u = o instanceof _OverloadYield; Promise.resolve(u ? o.v : o).then(function (n) { if (u) { var i = \"return\" === t && o.k ? t : \"next\"; if (!o.k || n.done) return resume(i, n); n = e[i](n).value; } settle(!!r.done, n); }, function (e) { resume(\"throw\", e); }); } catch (e) { settle(2, e); } } function settle(e, r) { 2 === e ? t.reject(r) : t.resolve({ value: r, done: e }), (t = t.next) ? resume(t.key, t.arg) : n = null; } this._invoke = function (e, r) { return new Promise(function (o, u) { var i = { key: e, arg: r, resolve: o, reject: u, next: null }; n ? n = n.next = i : (t = n = i, resume(e, r)); }); }, \"function\" != typeof e.return && (this.return = void 0); }\nAsyncGenerator.prototype[\"function\" == typeof Symbol && Symbol.asyncIterator || \"@@asyncIterator\"] = function () { return this; }, AsyncGenerator.prototype.next = function (e) { return this._invoke(\"next\", e); }, AsyncGenerator.prototype.throw = function (e) { return this._invoke(\"throw\", e); }, AsyncGenerator.prototype.return = function (e) { return this._invoke(\"return\", e); };\nfunction _awaitAsyncGenerator(e) { return new _OverloadYield(e, 0); }\nfunction _asyncGeneratorDelegate(t) { var e = {}, n = !1; function pump(e, r) { return n = !0, r = new Promise(function (n) { n(t[e](r)); }), { done: !1, value: new _OverloadYield(r, 1) }; } return e[\"undefined\" != typeof Symbol && Symbol.iterator || \"@@iterator\"] = function () { return this; }, e.next = function (t) { return n ? (n = !1, t) : pump(\"next\", t); }, \"function\" == typeof t.throw && (e.throw = function (t) { if (n) throw n = !1, t; return pump(\"throw\", t); }), \"function\" == typeof t.return && (e.return = function (t) { return n ? (n = !1, t) : pump(\"return\", t); }), e; }\nfunction _OverloadYield(e, d) { this.v = e, this.k = d; }\nfunction _asyncIterator(r) { var n, t, o, e = 2; for (\"undefined\" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) { if (t && null != (n = r[t])) return n.call(r); if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r)); t = \"@@asyncIterator\", o = \"@@iterator\"; } throw new TypeError(\"Object is not async iterable\"); }\nfunction AsyncFromSyncIterator(r) { function AsyncFromSyncIteratorContinuation(r) { if (Object(r) !== r) return Promise.reject(new TypeError(r + \" is not an object.\")); var n = r.done; return Promise.resolve(r.value).then(function (r) { return { value: r, done: n }; }); } return AsyncFromSyncIterator = function AsyncFromSyncIterator(r) { this.s = r, this.n = r.next; }, AsyncFromSyncIterator.prototype = { s: null, n: null, next: function next() { return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); }, return: function _return(r) { var n = this.s.return; return void 0 === n ? Promise.resolve({ value: r, done: !0 }) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); }, throw: function _throw(r) { var n = this.s.return; return void 0 === n ? Promise.reject(r) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); } }, new AsyncFromSyncIterator(r); }\nvar streamChunk = /*#__PURE__*/_regenerator().m(function streamChunk(chunk, chunkSize) {\n var len, pos, end;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n len = chunk.byteLength;\n if (!(!chunkSize || len < chunkSize)) {\n _context.n = 2;\n break;\n }\n _context.n = 1;\n return chunk;\n case 1:\n return _context.a(2);\n case 2:\n pos = 0;\n case 3:\n if (!(pos < len)) {\n _context.n = 5;\n break;\n }\n end = pos + chunkSize;\n _context.n = 4;\n return chunk.slice(pos, end);\n case 4:\n pos = end;\n _context.n = 3;\n break;\n case 5:\n return _context.a(2);\n }\n }, streamChunk);\n});\nvar readBytes = /*#__PURE__*/function () {\n var _ref = _wrapAsyncGenerator(/*#__PURE__*/_regenerator().m(function _callee(iterable, chunkSize) {\n var _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, chunk, _t;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n _iteratorAbruptCompletion = false;\n _didIteratorError = false;\n _context2.p = 1;\n _iterator = _asyncIterator(readStream(iterable));\n case 2:\n _context2.n = 3;\n return _awaitAsyncGenerator(_iterator.next());\n case 3:\n if (!(_iteratorAbruptCompletion = !(_step = _context2.v).done)) {\n _context2.n = 5;\n break;\n }\n chunk = _step.value;\n return _context2.d(_regeneratorValues(_asyncGeneratorDelegate(_asyncIterator(streamChunk(chunk, chunkSize)), _awaitAsyncGenerator)), 4);\n case 4:\n _iteratorAbruptCompletion = false;\n _context2.n = 2;\n break;\n case 5:\n _context2.n = 7;\n break;\n case 6:\n _context2.p = 6;\n _t = _context2.v;\n _didIteratorError = true;\n _iteratorError = _t;\n case 7:\n _context2.p = 7;\n _context2.p = 8;\n if (!(_iteratorAbruptCompletion && _iterator.return != null)) {\n _context2.n = 9;\n break;\n }\n _context2.n = 9;\n return _awaitAsyncGenerator(_iterator.return());\n case 9:\n _context2.p = 9;\n if (!_didIteratorError) {\n _context2.n = 10;\n break;\n }\n throw _iteratorError;\n case 10:\n return _context2.f(9);\n case 11:\n return _context2.f(7);\n case 12:\n return _context2.a(2);\n }\n }, _callee, null, [[8,, 9, 11], [1, 6, 7, 12]]);\n }));\n return function readBytes(_x, _x2) {\n return _ref.apply(this, arguments);\n };\n}();\nvar readStream = /*#__PURE__*/function () {\n var _ref2 = _wrapAsyncGenerator(/*#__PURE__*/_regenerator().m(function _callee2(stream) {\n var reader, _yield$_awaitAsyncGen, done, value;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n if (!stream[Symbol.asyncIterator]) {\n _context3.n = 2;\n break;\n }\n return _context3.d(_regeneratorValues(_asyncGeneratorDelegate(_asyncIterator(stream), _awaitAsyncGenerator)), 1);\n case 1:\n return _context3.a(2);\n case 2:\n reader = stream.getReader();\n _context3.p = 3;\n case 4:\n _context3.n = 5;\n return _awaitAsyncGenerator(reader.read());\n case 5:\n _yield$_awaitAsyncGen = _context3.v;\n done = _yield$_awaitAsyncGen.done;\n value = _yield$_awaitAsyncGen.value;\n if (!done) {\n _context3.n = 6;\n break;\n }\n return _context3.a(3, 8);\n case 6:\n _context3.n = 7;\n return value;\n case 7:\n _context3.n = 4;\n break;\n case 8:\n _context3.p = 8;\n _context3.n = 9;\n return _awaitAsyncGenerator(reader.cancel());\n case 9:\n return _context3.f(8);\n case 10:\n return _context3.a(2);\n }\n }, _callee2, null, [[3,, 8, 10]]);\n }));\n return function readStream(_x3) {\n return _ref2.apply(this, arguments);\n };\n}();\nvar trackStream = function trackStream(stream, chunkSize, onProgress, onFinish) {\n var iterator = readBytes(stream, chunkSize);\n var bytes = 0;\n var done;\n var _onFinish = function _onFinish(e) {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n };\n return new ReadableStream({\n pull: function pull(controller) {\n return _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var _yield$iterator$next, _done, value, len, loadedBytes, _t2;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.p = _context4.n) {\n case 0:\n _context4.p = 0;\n _context4.n = 1;\n return iterator.next();\n case 1:\n _yield$iterator$next = _context4.v;\n _done = _yield$iterator$next.done;\n value = _yield$iterator$next.value;\n if (!_done) {\n _context4.n = 2;\n break;\n }\n _onFinish();\n controller.close();\n return _context4.a(2);\n case 2:\n len = value.byteLength;\n if (onProgress) {\n loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n _context4.n = 4;\n break;\n case 3:\n _context4.p = 3;\n _t2 = _context4.v;\n _onFinish(_t2);\n throw _t2;\n case 4:\n return _context4.a(2);\n }\n }, _callee3, null, [[0, 3]]);\n }))();\n },\n cancel: function cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n });\n};\n;// ./node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js\n/**\n * Estimate decoded byte length of a data:// URL *without* allocating large buffers.\n * - For base64: compute exact decoded size using length and padding;\n * handle %XX at the character-count level (no string allocation).\n * - For non-base64: use UTF-8 byteLength of the encoded body as a safe upper bound.\n *\n * @param {string} url\n * @returns {number}\n */\nfunction estimateDataURLDecodedBytes(url) {\n if (!url || typeof url !== 'string') return 0;\n if (!url.startsWith('data:')) return 0;\n var comma = url.indexOf(',');\n if (comma < 0) return 0;\n var meta = url.slice(5, comma);\n var body = url.slice(comma + 1);\n var isBase64 = /;base64/i.test(meta);\n if (isBase64) {\n var effectiveLen = body.length;\n var len = body.length; // cache length\n\n for (var i = 0; i < len; i++) {\n if (body.charCodeAt(i) === 37 /* '%' */ && i + 2 < len) {\n var a = body.charCodeAt(i + 1);\n var b = body.charCodeAt(i + 2);\n var isHex = (a >= 48 && a <= 57 || a >= 65 && a <= 70 || a >= 97 && a <= 102) && (b >= 48 && b <= 57 || b >= 65 && b <= 70 || b >= 97 && b <= 102);\n if (isHex) {\n effectiveLen -= 2;\n i += 2;\n }\n }\n }\n var pad = 0;\n var idx = len - 1;\n var tailIsPct3D = function tailIsPct3D(j) {\n return j >= 2 && body.charCodeAt(j - 2) === 37 &&\n // '%'\n body.charCodeAt(j - 1) === 51 && (\n // '3'\n body.charCodeAt(j) === 68 || body.charCodeAt(j) === 100);\n }; // 'D' or 'd'\n\n if (idx >= 0) {\n if (body.charCodeAt(idx) === 61 /* '=' */) {\n pad++;\n idx--;\n } else if (tailIsPct3D(idx)) {\n pad++;\n idx -= 3;\n }\n }\n if (pad === 1 && idx >= 0) {\n if (body.charCodeAt(idx) === 61 /* '=' */) {\n pad++;\n } else if (tailIsPct3D(idx)) {\n pad++;\n }\n }\n var groups = Math.floor(effectiveLen / 4);\n var _bytes = groups * 3 - (pad || 0);\n return _bytes > 0 ? _bytes : 0;\n }\n if (typeof Buffer !== 'undefined' && typeof Buffer.byteLength === 'function') {\n return Buffer.byteLength(body, 'utf8');\n }\n\n // Compute UTF-8 byte length directly from UTF-16 code units without allocating\n // a byte buffer (TextEncoder.encode would defeat the DoS guard on large bodies).\n // Using body.length here would undercount non-ASCII (e.g. '€' is 1 code unit\n // but 3 UTF-8 bytes).\n var bytes = 0;\n for (var _i = 0, _len = body.length; _i < _len; _i++) {\n var c = body.charCodeAt(_i);\n if (c < 0x80) {\n bytes += 1;\n } else if (c < 0x800) {\n bytes += 2;\n } else if (c >= 0xd800 && c <= 0xdbff && _i + 1 < _len) {\n var next = body.charCodeAt(_i + 1);\n if (next >= 0xdc00 && next <= 0xdfff) {\n bytes += 4;\n _i++;\n } else {\n bytes += 3;\n }\n } else {\n bytes += 3;\n }\n }\n return bytes;\n}\n;// ./node_modules/axios/lib/env/data.js\nvar data_VERSION = \"1.16.1\";\n;// ./node_modules/axios/lib/adapters/fetch.js\nfunction fetch_typeof(o) { \"@babel/helpers - typeof\"; return fetch_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, fetch_typeof(o); }\nfunction fetch_ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction fetch_objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? fetch_ownKeys(Object(t), !0).forEach(function (r) { fetch_defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : fetch_ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction fetch_defineProperty(e, r, t) { return (r = fetch_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction fetch_toPropertyKey(t) { var i = fetch_toPrimitive(t, \"string\"); return \"symbol\" == fetch_typeof(i) ? i : i + \"\"; }\nfunction fetch_toPrimitive(t, r) { if (\"object\" != fetch_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != fetch_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction fetch_slicedToArray(r, e) { return fetch_arrayWithHoles(r) || fetch_iterableToArrayLimit(r, e) || fetch_unsupportedIterableToArray(r, e) || fetch_nonIterableRest(); }\nfunction fetch_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.\"); }\nfunction fetch_unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return fetch_arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? fetch_arrayLikeToArray(r, a) : void 0; } }\nfunction fetch_arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction fetch_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 = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction fetch_arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction fetch_regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return fetch_regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i.return) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (fetch_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, fetch_regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, fetch_regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), fetch_regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", fetch_regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), fetch_regeneratorDefine2(u), fetch_regeneratorDefine2(u, o, \"Generator\"), fetch_regeneratorDefine2(u, n, function () { return this; }), fetch_regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (fetch_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction fetch_regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } fetch_regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { fetch_regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2)); }, fetch_regeneratorDefine2(e, r, n, t); }\nfunction fetch_asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction fetch_asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { fetch_asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { fetch_asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\n\n\n\n\n\n\n\n\n\n\n\n\nvar DEFAULT_CHUNK_SIZE = 64 * 1024;\nvar fetch_isFunction = utils.isFunction;\nvar test = function test(fn) {\n try {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return !!fn.apply(void 0, args);\n } catch (e) {\n return false;\n }\n};\nvar factory = function factory(env) {\n var globalObject = utils.global !== undefined && utils.global !== null ? utils.global : globalThis;\n var ReadableStream = globalObject.ReadableStream,\n TextEncoder = globalObject.TextEncoder;\n env = utils.merge.call({\n skipUndefined: true\n }, {\n Request: globalObject.Request,\n Response: globalObject.Response\n }, env);\n var _env = env,\n envFetch = _env.fetch,\n Request = _env.Request,\n Response = _env.Response;\n var isFetchSupported = envFetch ? fetch_isFunction(envFetch) : typeof fetch === 'function';\n var isRequestSupported = fetch_isFunction(Request);\n var isResponseSupported = fetch_isFunction(Response);\n if (!isFetchSupported) {\n return false;\n }\n var isReadableStreamSupported = isFetchSupported && fetch_isFunction(ReadableStream);\n var encodeText = isFetchSupported && (typeof TextEncoder === 'function' ? function (encoder) {\n return function (str) {\n return encoder.encode(str);\n };\n }(new TextEncoder()) : (/*#__PURE__*/function () {\n var _ref = fetch_asyncToGenerator(/*#__PURE__*/fetch_regenerator().m(function _callee(str) {\n var _t, _t2;\n return fetch_regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n _t = Uint8Array;\n _context.n = 1;\n return new Request(str).arrayBuffer();\n case 1:\n _t2 = _context.v;\n return _context.a(2, new _t(_t2));\n }\n }, _callee);\n }));\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }()));\n var supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(function () {\n var duplexAccessed = false;\n var request = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n }\n });\n var hasContentType = request.headers.has('Content-Type');\n if (request.body != null) {\n request.body.cancel();\n }\n return duplexAccessed && !hasContentType;\n });\n var supportsResponseStream = isResponseSupported && isReadableStreamSupported && test(function () {\n return utils.isReadableStream(new Response('').body);\n });\n var resolvers = {\n stream: supportsResponseStream && function (res) {\n return res.body;\n }\n };\n isFetchSupported && function () {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(function (type) {\n !resolvers[type] && (resolvers[type] = function (res, config) {\n var method = res && res[type];\n if (method) {\n return method.call(res);\n }\n throw new core_AxiosError(\"Response type '\".concat(type, \"' is not supported\"), core_AxiosError.ERR_NOT_SUPPORT, config);\n });\n });\n }();\n var getBodyLength = /*#__PURE__*/function () {\n var _ref2 = fetch_asyncToGenerator(/*#__PURE__*/fetch_regenerator().m(function _callee2(body) {\n var _request;\n return fetch_regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n if (!(body == null)) {\n _context2.n = 1;\n break;\n }\n return _context2.a(2, 0);\n case 1:\n if (!utils.isBlob(body)) {\n _context2.n = 2;\n break;\n }\n return _context2.a(2, body.size);\n case 2:\n if (!utils.isSpecCompliantForm(body)) {\n _context2.n = 4;\n break;\n }\n _request = new Request(platform.origin, {\n method: 'POST',\n body: body\n });\n _context2.n = 3;\n return _request.arrayBuffer();\n case 3:\n return _context2.a(2, _context2.v.byteLength);\n case 4:\n if (!(utils.isArrayBufferView(body) || utils.isArrayBuffer(body))) {\n _context2.n = 5;\n break;\n }\n return _context2.a(2, body.byteLength);\n case 5:\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n if (!utils.isString(body)) {\n _context2.n = 7;\n break;\n }\n _context2.n = 6;\n return encodeText(body);\n case 6:\n return _context2.a(2, _context2.v.byteLength);\n case 7:\n return _context2.a(2);\n }\n }, _callee2);\n }));\n return function getBodyLength(_x2) {\n return _ref2.apply(this, arguments);\n };\n }();\n var resolveBodyLength = /*#__PURE__*/function () {\n var _ref3 = fetch_asyncToGenerator(/*#__PURE__*/fetch_regenerator().m(function _callee3(headers, body) {\n var length;\n return fetch_regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n length = utils.toFiniteNumber(headers.getContentLength());\n return _context3.a(2, length == null ? getBodyLength(body) : length);\n }\n }, _callee3);\n }));\n return function resolveBodyLength(_x3, _x4) {\n return _ref3.apply(this, arguments);\n };\n }();\n return /*#__PURE__*/function () {\n var _ref4 = fetch_asyncToGenerator(/*#__PURE__*/fetch_regenerator().m(function _callee4(config) {\n var _resolveConfig, url, method, data, signal, cancelToken, timeout, onDownloadProgress, onUploadProgress, responseType, headers, _resolveConfig$withCr, withCredentials, fetchOptions, maxContentLength, maxBodyLength, hasMaxContentLength, hasMaxBodyLength, _fetch, composedSignal, request, unsubscribe, requestContentLength, estimated, outboundLength, _request, contentTypeHeader, _progressEventDecorat, _progressEventDecorat2, onProgress, flush, isCredentialsSupported, contentType, resolvedOptions, response, declaredLength, isStreamResponse, options, responseContentLength, _ref5, _ref6, _onProgress, _flush, bytesRead, onChunkProgress, responseData, materializedSize, canceledError, _t3, _t4, _t5;\n return fetch_regenerator().w(function (_context4) {\n while (1) switch (_context4.p = _context4.n) {\n case 0:\n _resolveConfig = resolveConfig(config), url = _resolveConfig.url, method = _resolveConfig.method, data = _resolveConfig.data, signal = _resolveConfig.signal, cancelToken = _resolveConfig.cancelToken, timeout = _resolveConfig.timeout, onDownloadProgress = _resolveConfig.onDownloadProgress, onUploadProgress = _resolveConfig.onUploadProgress, responseType = _resolveConfig.responseType, headers = _resolveConfig.headers, _resolveConfig$withCr = _resolveConfig.withCredentials, withCredentials = _resolveConfig$withCr === void 0 ? 'same-origin' : _resolveConfig$withCr, fetchOptions = _resolveConfig.fetchOptions, maxContentLength = _resolveConfig.maxContentLength, maxBodyLength = _resolveConfig.maxBodyLength;\n hasMaxContentLength = utils.isNumber(maxContentLength) && maxContentLength > -1;\n hasMaxBodyLength = utils.isNumber(maxBodyLength) && maxBodyLength > -1;\n _fetch = envFetch || fetch;\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n composedSignal = helpers_composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n request = null;\n unsubscribe = composedSignal && composedSignal.unsubscribe && function () {\n composedSignal.unsubscribe();\n };\n _context4.p = 1;\n if (!(hasMaxContentLength && typeof url === 'string' && url.startsWith('data:'))) {\n _context4.n = 2;\n break;\n }\n estimated = estimateDataURLDecodedBytes(url);\n if (!(estimated > maxContentLength)) {\n _context4.n = 2;\n break;\n }\n throw new core_AxiosError('maxContentLength size of ' + maxContentLength + ' exceeded', core_AxiosError.ERR_BAD_RESPONSE, config, request);\n case 2:\n if (!(hasMaxBodyLength && method !== 'get' && method !== 'head')) {\n _context4.n = 4;\n break;\n }\n _context4.n = 3;\n return resolveBodyLength(headers, data);\n case 3:\n outboundLength = _context4.v;\n if (!(typeof outboundLength === 'number' && isFinite(outboundLength) && outboundLength > maxBodyLength)) {\n _context4.n = 4;\n break;\n }\n throw new core_AxiosError('Request body larger than maxBodyLength limit', core_AxiosError.ERR_BAD_REQUEST, config, request);\n case 4:\n _t3 = onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head';\n if (!_t3) {\n _context4.n = 6;\n break;\n }\n _context4.n = 5;\n return resolveBodyLength(headers, data);\n case 5:\n _t4 = requestContentLength = _context4.v;\n _t3 = _t4 !== 0;\n case 6:\n if (!_t3) {\n _context4.n = 7;\n break;\n }\n _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: 'half'\n });\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader);\n }\n if (_request.body) {\n _progressEventDecorat = progressEventDecorator(requestContentLength, progressEventReducer(asyncDecorator(onUploadProgress))), _progressEventDecorat2 = fetch_slicedToArray(_progressEventDecorat, 2), onProgress = _progressEventDecorat2[0], flush = _progressEventDecorat2[1];\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n case 7:\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n isCredentialsSupported = isRequestSupported && 'credentials' in Request.prototype; // If data is FormData and Content-Type is multipart/form-data without boundary,\n // delete it so fetch can set it correctly with the boundary\n if (utils.isFormData(data)) {\n contentType = headers.getContentType();\n if (contentType && /^multipart\\/form-data/i.test(contentType) && !/boundary=/i.test(contentType)) {\n headers.delete('content-type');\n }\n }\n\n // Set User-Agent header if not already set (fetch defaults to 'node' in Node.js)\n headers.set('User-Agent', 'axios/' + data_VERSION, false);\n resolvedOptions = fetch_objectSpread(fetch_objectSpread({}, fetchOptions), {}, {\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: toByteStringHeaderObject(headers.normalize()),\n body: data,\n duplex: 'half',\n credentials: isCredentialsSupported ? withCredentials : undefined\n });\n request = isRequestSupported && new Request(url, resolvedOptions);\n _context4.n = 8;\n return isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions);\n case 8:\n response = _context4.v;\n if (!hasMaxContentLength) {\n _context4.n = 9;\n break;\n }\n declaredLength = utils.toFiniteNumber(response.headers.get('content-length'));\n if (!(declaredLength != null && declaredLength > maxContentLength)) {\n _context4.n = 9;\n break;\n }\n throw new core_AxiosError('maxContentLength size of ' + maxContentLength + ' exceeded', core_AxiosError.ERR_BAD_RESPONSE, config, request);\n case 9:\n isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n if (supportsResponseStream && response.body && (onDownloadProgress || hasMaxContentLength || isStreamResponse && unsubscribe)) {\n options = {};\n ['status', 'statusText', 'headers'].forEach(function (prop) {\n options[prop] = response[prop];\n });\n responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n _ref5 = onDownloadProgress && progressEventDecorator(responseContentLength, progressEventReducer(asyncDecorator(onDownloadProgress), true)) || [], _ref6 = fetch_slicedToArray(_ref5, 2), _onProgress = _ref6[0], _flush = _ref6[1];\n bytesRead = 0;\n onChunkProgress = function onChunkProgress(loadedBytes) {\n if (hasMaxContentLength) {\n bytesRead = loadedBytes;\n if (bytesRead > maxContentLength) {\n throw new core_AxiosError('maxContentLength size of ' + maxContentLength + ' exceeded', core_AxiosError.ERR_BAD_RESPONSE, config, request);\n }\n }\n _onProgress && _onProgress(loadedBytes);\n };\n response = new Response(trackStream(response.body, DEFAULT_CHUNK_SIZE, onChunkProgress, function () {\n _flush && _flush();\n unsubscribe && unsubscribe();\n }), options);\n }\n responseType = responseType || 'text';\n _context4.n = 10;\n return resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n case 10:\n responseData = _context4.v;\n if (!(hasMaxContentLength && !supportsResponseStream && !isStreamResponse)) {\n _context4.n = 11;\n break;\n }\n if (responseData != null) {\n if (typeof responseData.byteLength === 'number') {\n materializedSize = responseData.byteLength;\n } else if (typeof responseData.size === 'number') {\n materializedSize = responseData.size;\n } else if (typeof responseData === 'string') {\n materializedSize = typeof TextEncoder === 'function' ? new TextEncoder().encode(responseData).byteLength : responseData.length;\n }\n }\n if (!(typeof materializedSize === 'number' && materializedSize > maxContentLength)) {\n _context4.n = 11;\n break;\n }\n throw new core_AxiosError('maxContentLength size of ' + maxContentLength + ' exceeded', core_AxiosError.ERR_BAD_RESPONSE, config, request);\n case 11:\n !isStreamResponse && unsubscribe && unsubscribe();\n _context4.n = 12;\n return new Promise(function (resolve, reject) {\n settle(resolve, reject, {\n data: responseData,\n headers: core_AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config: config,\n request: request\n });\n });\n case 12:\n return _context4.a(2, _context4.v);\n case 13:\n _context4.p = 13;\n _t5 = _context4.v;\n unsubscribe && unsubscribe();\n\n // Safari can surface fetch aborts as a DOMException-like object whose\n // branded getters throw. Prefer our composed signal reason before reading\n // the caught error, preserving timeout vs cancellation semantics.\n if (!(composedSignal && composedSignal.aborted && composedSignal.reason instanceof core_AxiosError)) {\n _context4.n = 14;\n break;\n }\n canceledError = composedSignal.reason;\n canceledError.config = config;\n request && (canceledError.request = request);\n _t5 !== canceledError && (canceledError.cause = _t5);\n throw canceledError;\n case 14:\n if (!(_t5 && _t5.name === 'TypeError' && /Load failed|fetch/i.test(_t5.message))) {\n _context4.n = 15;\n break;\n }\n throw Object.assign(new core_AxiosError('Network Error', core_AxiosError.ERR_NETWORK, config, request, _t5 && _t5.response), {\n cause: _t5.cause || _t5\n });\n case 15:\n throw core_AxiosError.from(_t5, _t5 && _t5.code, config, request, _t5 && _t5.response);\n case 16:\n return _context4.a(2);\n }\n }, _callee4, null, [[1, 13]]);\n }));\n return function (_x5) {\n return _ref4.apply(this, arguments);\n };\n }();\n};\nvar seedCache = new Map();\nvar getFetch = function getFetch(config) {\n var env = config && config.env || {};\n var fetch = env.fetch,\n Request = env.Request,\n Response = env.Response;\n var seeds = [Request, Response, fetch];\n var len = seeds.length,\n i = len,\n seed,\n target,\n map = seedCache;\n while (i--) {\n seed = seeds[i];\n target = map.get(seed);\n target === undefined && map.set(seed, target = i ? new Map() : factory(env));\n map = target;\n }\n return target;\n};\nvar adapter = getFetch();\n/* harmony default export */ const adapters_fetch = ((/* unused pure expression or super */ null && (adapter)));\n;// ./node_modules/axios/lib/adapters/adapters.js\nfunction adapters_slicedToArray(r, e) { return adapters_arrayWithHoles(r) || adapters_iterableToArrayLimit(r, e) || adapters_unsupportedIterableToArray(r, e) || adapters_nonIterableRest(); }\nfunction adapters_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.\"); }\nfunction adapters_unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return adapters_arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? adapters_arrayLikeToArray(r, a) : void 0; } }\nfunction adapters_arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction adapters_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 = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction adapters_arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n *\n * @type {Object<string, Function|Object>}\n */\nvar knownAdapters = {\n http: helpers_null,\n xhr: xhr,\n fetch: {\n get: getFetch\n }\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, function (fn, value) {\n if (fn) {\n try {\n // Null-proto descriptors so a polluted Object.prototype.get cannot turn\n // these data descriptors into accessor descriptors on the way in.\n Object.defineProperty(fn, 'name', {\n __proto__: null,\n value: value\n });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {\n __proto__: null,\n value: value\n });\n }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n *\n * @param {string} reason\n * @returns {string}\n */\nvar renderReason = function renderReason(reason) {\n return \"- \".concat(reason);\n};\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n *\n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nvar isResolvedHandle = function isResolvedHandle(adapter) {\n return utils.isFunction(adapter) || adapter === null || adapter === false;\n};\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n *\n * @param {Array<string|Function>|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n var _adapters = adapters,\n length = _adapters.length;\n var nameOrAdapter;\n var adapter;\n var rejectedReasons = {};\n for (var i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n var id = void 0;\n adapter = nameOrAdapter;\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n if (adapter === undefined) {\n throw new core_AxiosError(\"Unknown adapter '\".concat(id, \"'\"));\n }\n }\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n break;\n }\n rejectedReasons[id || '#' + i] = adapter;\n }\n if (!adapter) {\n var reasons = Object.entries(rejectedReasons).map(function (_ref) {\n var _ref2 = adapters_slicedToArray(_ref, 2),\n id = _ref2[0],\n state = _ref2[1];\n return \"adapter \".concat(id, \" \") + (state === false ? 'is not supported by the environment' : 'is not available in the build');\n });\n var s = length ? reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0]) : 'as no adapter specified';\n throw new core_AxiosError(\"There is no suitable adapter to dispatch the request \" + s, 'ERR_NOT_SUPPORT');\n }\n return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\n/* harmony default export */ const adapters = ({\n /**\n * Resolve an adapter from a list of adapter names or functions.\n * @type {Function}\n */\n getAdapter: getAdapter,\n /**\n * Exposes all known adapters\n * @type {Object<string, Function|Object>}\n */\n adapters: knownAdapters\n});\n;// ./node_modules/axios/lib/core/dispatchRequest.js\n\n\n\n\n\n\n\n\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n if (config.signal && config.signal.aborted) {\n throw new cancel_CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nfunction dispatchRequest(config) {\n throwIfCancellationRequested(config);\n config.headers = core_AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(config, config.transformRequest);\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n var adapter = adapters.getAdapter(config.adapter || lib_defaults.adapter, config);\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Expose the current response on config so that transformResponse can\n // attach it to any AxiosError it throws (e.g. on JSON parse failure).\n // We clean it up afterwards to avoid polluting the config object.\n config.response = response;\n try {\n response.data = transformData.call(config, config.transformResponse, response);\n } finally {\n delete config.response;\n }\n response.headers = core_AxiosHeaders.from(response.headers);\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n config.response = reason.response;\n try {\n reason.response.data = transformData.call(config, config.transformResponse, reason.response);\n } finally {\n delete config.response;\n }\n reason.response.headers = core_AxiosHeaders.from(reason.response.headers);\n }\n }\n return Promise.reject(reason);\n });\n}\n;// ./node_modules/axios/lib/helpers/validator.js\n\n\nfunction validator_typeof(o) { \"@babel/helpers - typeof\"; return validator_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, validator_typeof(o); }\n\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function (type, i) {\n validators[type] = function validator(thing) {\n return validator_typeof(thing) === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + data_VERSION + \"] Transitional option '\" + opt + \"'\" + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function (value, opt, opts) {\n if (validator === false) {\n throw new core_AxiosError(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), core_AxiosError.ERR_DEPRECATED);\n }\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(formatMessage(opt, ' has been deprecated since v' + version + ' and will be removed in the near future'));\n }\n return validator ? validator(value, opt, opts) : true;\n };\n};\nvalidators.spelling = function spelling(correctSpelling) {\n return function (value, opt) {\n // eslint-disable-next-line no-console\n console.warn(\"\".concat(opt, \" is likely a misspelling of \").concat(correctSpelling));\n return true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (validator_typeof(options) !== 'object') {\n throw new core_AxiosError('options must be an object', core_AxiosError.ERR_BAD_OPTION_VALUE);\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n // Use hasOwnProperty so a polluted Object.prototype.<opt> cannot supply\n // a non-function validator and cause a TypeError.\n var validator = Object.prototype.hasOwnProperty.call(schema, opt) ? schema[opt] : undefined;\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new core_AxiosError('option ' + opt + ' must be ' + result, core_AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new core_AxiosError('Unknown option ' + opt, core_AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n/* harmony default export */ const validator = ({\n assertOptions: assertOptions,\n validators: validators\n});\n;// ./node_modules/axios/lib/core/Axios.js\n\n\nfunction Axios_typeof(o) { \"@babel/helpers - typeof\"; return Axios_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Axios_typeof(o); }\nfunction Axios_regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return Axios_regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i.return) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (Axios_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, Axios_regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, Axios_regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), Axios_regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", Axios_regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), Axios_regeneratorDefine2(u), Axios_regeneratorDefine2(u, o, \"Generator\"), Axios_regeneratorDefine2(u, n, function () { return this; }), Axios_regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (Axios_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction Axios_regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } Axios_regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { Axios_regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2)); }, Axios_regeneratorDefine2(e, r, n, t); }\nfunction Axios_asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction Axios_asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { Axios_asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { Axios_asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction Axios_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Axios_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Axios_toPropertyKey(o.key), o); } }\nfunction Axios_createClass(e, r, t) { return r && Axios_defineProperties(e.prototype, r), t && Axios_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Axios_toPropertyKey(t) { var i = Axios_toPrimitive(t, \"string\"); return \"symbol\" == Axios_typeof(i) ? i : i + \"\"; }\nfunction Axios_toPrimitive(t, r) { if (\"object\" != Axios_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Axios_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\n\n\n\nvar Axios_validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nvar Axios = /*#__PURE__*/function () {\n function Axios(instanceConfig) {\n Axios_classCallCheck(this, Axios);\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new core_InterceptorManager(),\n response: new core_InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n return Axios_createClass(Axios, [{\n key: \"request\",\n value: (function () {\n var _request2 = Axios_asyncToGenerator(/*#__PURE__*/Axios_regenerator().m(function _callee(configOrUrl, config) {\n var dummy, stack, firstNewlineIndex, secondNewlineIndex, stackWithoutTwoTopLines, _t;\n return Axios_regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n _context.p = 0;\n _context.n = 1;\n return this._request(configOrUrl, config);\n case 1:\n return _context.a(2, _context.v);\n case 2:\n _context.p = 2;\n _t = _context.v;\n if (_t instanceof Error) {\n dummy = {};\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : dummy = new Error();\n\n // slice off the Error: ... line\n stack = function () {\n if (!dummy.stack) {\n return '';\n }\n var firstNewlineIndex = dummy.stack.indexOf('\\n');\n return firstNewlineIndex === -1 ? '' : dummy.stack.slice(firstNewlineIndex + 1);\n }();\n try {\n if (!_t.stack) {\n _t.stack = stack;\n // match without the 2 top stack lines\n } else if (stack) {\n firstNewlineIndex = stack.indexOf('\\n');\n secondNewlineIndex = firstNewlineIndex === -1 ? -1 : stack.indexOf('\\n', firstNewlineIndex + 1);\n stackWithoutTwoTopLines = secondNewlineIndex === -1 ? '' : stack.slice(secondNewlineIndex + 1);\n if (!String(_t.stack).endsWith(stackWithoutTwoTopLines)) {\n _t.stack += '\\n' + stack;\n }\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n throw _t;\n case 3:\n return _context.a(2);\n }\n }, _callee, this, [[0, 2]]);\n }));\n function request(_x, _x2) {\n return _request2.apply(this, arguments);\n }\n return request;\n }())\n }, {\n key: \"_request\",\n value: function _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n config = mergeConfig(this.defaults, config);\n var _config = config,\n transitional = _config.transitional,\n paramsSerializer = _config.paramsSerializer,\n headers = _config.headers;\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: Axios_validators.transitional(Axios_validators.boolean),\n forcedJSONParsing: Axios_validators.transitional(Axios_validators.boolean),\n clarifyTimeoutError: Axios_validators.transitional(Axios_validators.boolean),\n legacyInterceptorReqResOrdering: Axios_validators.transitional(Axios_validators.boolean)\n }, false);\n }\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n };\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: Axios_validators.function,\n serialize: Axios_validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n validator.assertOptions(config, {\n baseUrl: Axios_validators.spelling('baseURL'),\n withXsrfToken: Axios_validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n var contextHeaders = headers && utils.merge(headers.common, headers[config.method]);\n headers && utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'query', 'common'], function (method) {\n delete headers[method];\n });\n config.headers = core_AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n var transitional = config.transitional || defaults_transitional;\n var legacyInterceptorReqResOrdering = transitional && transitional.legacyInterceptorReqResOrdering;\n if (legacyInterceptorReqResOrdering) {\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n } else {\n requestInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n }\n });\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n var promise;\n var i = 0;\n var len;\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n promise = Promise.resolve(config);\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n return promise;\n }\n len = requestInterceptorChain.length;\n var newConfig = config;\n while (i < len) {\n var onFulfilled = requestInterceptorChain[i++];\n var onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n i = 0;\n len = responseInterceptorChain.length;\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n return promise;\n }\n }, {\n key: \"getUri\",\n value: function getUri(config) {\n config = mergeConfig(this.defaults, config);\n var fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n }]);\n}(); // Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function (url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\nutils.forEach(['post', 'put', 'patch', 'query'], function forEachMethodWithData(method) {\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url: url,\n data: data\n }));\n };\n }\n Axios.prototype[method] = generateHTTPMethod();\n\n // QUERY is a safe/idempotent read method; multipart form bodies don't fit\n // its semantics, so no queryForm shorthand is generated.\n if (method !== 'query') {\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n }\n});\n/* harmony default export */ const core_Axios = (Axios);\n;// ./node_modules/axios/lib/cancel/CancelToken.js\n\n\nfunction CancelToken_typeof(o) { \"@babel/helpers - typeof\"; return CancelToken_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, CancelToken_typeof(o); }\nfunction CancelToken_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction CancelToken_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, CancelToken_toPropertyKey(o.key), o); } }\nfunction CancelToken_createClass(e, r, t) { return r && CancelToken_defineProperties(e.prototype, r), t && CancelToken_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction CancelToken_toPropertyKey(t) { var i = CancelToken_toPrimitive(t, \"string\"); return \"symbol\" == CancelToken_typeof(i) ? i : i + \"\"; }\nfunction CancelToken_toPrimitive(t, r) { if (\"object\" != CancelToken_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != CancelToken_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nvar CancelToken = /*#__PURE__*/function () {\n function CancelToken(executor) {\n CancelToken_classCallCheck(this, CancelToken);\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n var token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(function (cancel) {\n if (!token._listeners) return;\n var i = token._listeners.length;\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = function (onfulfilled) {\n var _resolve;\n // eslint-disable-next-line func-names\n var promise = new Promise(function (resolve) {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n return promise;\n };\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n token.reason = new cancel_CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n return CancelToken_createClass(CancelToken, [{\n key: \"throwIfRequested\",\n value: function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n }, {\n key: \"subscribe\",\n value: function subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n }, {\n key: \"unsubscribe\",\n value: function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n var index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n }, {\n key: \"toAbortSignal\",\n value: function toAbortSignal() {\n var _this = this;\n var controller = new AbortController();\n var abort = function abort(err) {\n controller.abort(err);\n };\n this.subscribe(abort);\n controller.signal.unsubscribe = function () {\n return _this.unsubscribe(abort);\n };\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n }], [{\n key: \"source\",\n value: function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n }\n }]);\n}();\n/* harmony default export */ const cancel_CancelToken = (CancelToken);\n;// ./node_modules/axios/lib/helpers/spread.js\n\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * const args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nfunction spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n;// ./node_modules/axios/lib/helpers/isAxiosError.js\n\n\n\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nfunction isAxiosError(payload) {\n return utils.isObject(payload) && payload.isAxiosError === true;\n}\n;// ./node_modules/axios/lib/helpers/HttpStatusCode.js\nfunction HttpStatusCode_slicedToArray(r, e) { return HttpStatusCode_arrayWithHoles(r) || HttpStatusCode_iterableToArrayLimit(r, e) || HttpStatusCode_unsupportedIterableToArray(r, e) || HttpStatusCode_nonIterableRest(); }\nfunction HttpStatusCode_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.\"); }\nfunction HttpStatusCode_unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return HttpStatusCode_arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? HttpStatusCode_arrayLikeToArray(r, a) : void 0; } }\nfunction HttpStatusCode_arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction HttpStatusCode_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 = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction HttpStatusCode_arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n WebServerIsDown: 521,\n ConnectionTimedOut: 522,\n OriginIsUnreachable: 523,\n TimeoutOccurred: 524,\n SslHandshakeFailed: 525,\n InvalidSslCertificate: 526\n};\nObject.entries(HttpStatusCode).forEach(function (_ref) {\n var _ref2 = HttpStatusCode_slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n HttpStatusCode[value] = key;\n});\n/* harmony default export */ const helpers_HttpStatusCode = (HttpStatusCode);\n;// ./node_modules/axios/lib/axios.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new core_Axios(defaultConfig);\n var instance = bind_bind(core_Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, core_Axios.prototype, context, {\n allOwnKeys: true\n });\n\n // Copy context to instance\n utils.extend(instance, context, null, {\n allOwnKeys: true\n });\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(lib_defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = core_Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = cancel_CanceledError;\naxios.CancelToken = cancel_CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = data_VERSION;\naxios.toFormData = helpers_toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = core_AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\naxios.AxiosHeaders = core_AxiosHeaders;\naxios.formToJSON = function (thing) {\n return helpers_formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n};\naxios.getAdapter = adapters.getAdapter;\naxios.HttpStatusCode = helpers_HttpStatusCode;\naxios.default = axios;\n\n// this module should only have a default export\n/* harmony default export */ const lib_axios = (axios);\n;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-2!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vuetable-2/src/components/Vuetable.vue?vue&type=script&lang=js\nfunction Vuetablevue_type_script_lang_js_typeof(o) { \"@babel/helpers - typeof\"; return Vuetablevue_type_script_lang_js_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Vuetablevue_type_script_lang_js_typeof(o); }\n\n/* harmony default export */ const Vuetablevue_type_script_lang_js = ({\n props: {\n fields: {\n type: Array,\n required: true\n },\n loadOnStart: {\n type: Boolean,\n default: true\n },\n apiUrl: {\n type: String,\n default: ''\n },\n httpMethod: {\n type: String,\n default: 'get',\n validator: function validator(value) {\n return ['get', 'post'].indexOf(value) > -1;\n }\n },\n reactiveApiUrl: {\n type: Boolean,\n default: true\n },\n apiMode: {\n type: Boolean,\n default: true\n },\n data: {\n type: [Array, Object],\n default: null\n },\n dataTotal: {\n type: Number,\n default: 0\n },\n dataManager: {\n type: Function,\n default: null\n },\n dataPath: {\n type: String,\n default: 'data'\n },\n paginationPath: {\n type: [String],\n default: 'links.pagination'\n },\n queryParams: {\n type: [Object, Function],\n default: function _default() {\n return {\n sort: 'sort',\n page: 'page',\n perPage: 'per_page'\n };\n }\n },\n appendParams: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n httpOptions: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n httpFetch: {\n type: Function,\n default: null\n },\n perPage: {\n type: Number,\n default: 10\n },\n initialPage: {\n type: Number,\n default: 1\n },\n sortOrder: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n multiSort: {\n type: Boolean,\n default: function _default() {\n return false;\n }\n },\n tableHeight: {\n type: String,\n default: null\n },\n /*\r\n * physical key that will trigger multi-sort option\r\n * possible values: 'alt', 'ctrl', 'meta', 'shift'\r\n * 'ctrl' might not work as expected on Mac\r\n */\n multiSortKey: {\n type: String,\n default: 'alt'\n },\n /* deprecated */\n rowClassCallback: {\n type: [String, Function],\n default: ''\n },\n rowClass: {\n type: [String, Function],\n default: ''\n },\n detailRowComponent: {\n type: String,\n default: ''\n },\n detailRowTransition: {\n type: String,\n default: ''\n },\n trackBy: {\n type: String,\n default: 'id'\n },\n css: {\n type: Object,\n default: function _default() {\n return {\n tableClass: 'ui blue selectable celled stackable attached table',\n loadingClass: 'loading',\n ascendingIcon: 'blue chevron up icon',\n descendingIcon: 'blue chevron down icon',\n ascendingClass: 'sorted-asc',\n descendingClass: 'sorted-desc',\n sortableIcon: '',\n detailRowClass: 'vuetable-detail-row',\n handleIcon: 'grey sidebar icon',\n tableBodyClass: 'vuetable-semantic-no-top vuetable-fixed-layout',\n tableHeaderClass: 'vuetable-fixed-layout'\n };\n }\n },\n minRows: {\n type: Number,\n default: 0\n },\n silent: {\n type: Boolean,\n default: false\n },\n noDataTemplate: {\n type: String,\n default: function _default() {\n return 'No Data Available';\n }\n },\n showSortIcons: {\n type: Boolean,\n default: true\n }\n },\n data: function data() {\n return {\n eventPrefix: 'vuetable:',\n tableFields: [],\n tableData: null,\n tablePagination: null,\n currentPage: this.initialPage,\n selectedTo: [],\n visibleDetailRows: [],\n lastScrollPosition: 0,\n scrollBarWidth: '17px',\n //chrome default\n scrollVisible: false\n };\n },\n mounted: function mounted() {\n this.normalizeFields();\n this.normalizeSortOrder();\n if (this.isFixedHeader) {\n this.scrollBarWidth = this.getScrollBarWidth() + 'px';\n }\n this.$nextTick(function () {\n this.fireEvent('initialized', this.tableFields);\n });\n if (this.loadOnStart) {\n this.loadData();\n }\n if (this.isFixedHeader) {\n var elem = this.$el.getElementsByClassName('vuetable-body-wrapper')[0];\n if (elem != null) {\n elem.addEventListener('scroll', this.handleScroll);\n }\n }\n },\n destroyed: function destroyed() {\n var elem = this.$el.getElementsByClassName('vuetable-body-wrapper')[0];\n if (elem != null) {\n elem.removeEventListener('scroll', this.handleScroll);\n }\n },\n computed: {\n version: function version() {\n return VERSION;\n },\n useDetailRow: function useDetailRow() {\n if (this.tableData && this.tableData[0] && this.detailRowComponent !== '' && typeof this.tableData[0][this.trackBy] === 'undefined') {\n this.warn('You need to define unique row identifier in order for detail-row feature to work. Use `track-by` prop to define one!');\n return false;\n }\n return this.detailRowComponent !== '';\n },\n countVisibleFields: function countVisibleFields() {\n return this.tableFields.filter(function (field) {\n return field.visible;\n }).length;\n },\n countTableData: function countTableData() {\n if (this.tableData === null) {\n return 0;\n }\n return this.tableData.length;\n },\n displayEmptyDataRow: function displayEmptyDataRow() {\n return this.countTableData === 0 && this.noDataTemplate.length > 0;\n },\n lessThanMinRows: function lessThanMinRows() {\n if (this.tableData === null || this.tableData.length === 0) {\n return true;\n }\n return this.tableData.length < this.minRows;\n },\n blankRows: function blankRows() {\n if (this.tableData === null || this.tableData.length === 0) {\n return this.minRows;\n }\n if (this.tableData.length >= this.minRows) {\n return 0;\n }\n return this.minRows - this.tableData.length;\n },\n isApiMode: function isApiMode() {\n return this.apiMode;\n },\n isDataMode: function isDataMode() {\n return !this.apiMode;\n },\n isFixedHeader: function isFixedHeader() {\n return this.tableHeight != null;\n }\n },\n methods: {\n getScrollBarWidth: function getScrollBarWidth() {\n var outer = document.createElement('div');\n var inner = document.createElement('div');\n outer.style.visibility = 'hidden';\n outer.style.width = '100px';\n inner.style.width = '100%';\n outer.appendChild(inner);\n document.body.appendChild(outer);\n var widthWithoutScrollbar = outer.offsetWidth;\n outer.style.overflow = 'scroll';\n var widthWithScrollbar = inner.offsetWidth;\n document.body.removeChild(outer);\n return widthWithoutScrollbar - widthWithScrollbar;\n },\n handleScroll: function handleScroll(e) {\n //make sure that the header and the body are aligned when scrolling horizontally on a table that is wider than the viewport\n var horizontal = e.currentTarget.scrollLeft;\n if (horizontal != this.lastScrollPosition) {\n //don't modify header scroll if we are scrolling vertically\n var header = this.$el.getElementsByClassName('vuetable-head-wrapper')[0];\n if (header != null) {\n header.scrollLeft = horizontal;\n }\n this.lastScrollPosition = horizontal;\n }\n },\n normalizeFields: function normalizeFields() {\n if (typeof this.fields === 'undefined') {\n this.warn('You need to provide \"fields\" prop.');\n return;\n }\n this.tableFields = [];\n var self = this;\n var obj;\n this.fields.forEach(function (field, i) {\n if (typeof field === 'string') {\n obj = {\n name: field,\n title: self.setTitle(field),\n titleClass: '',\n dataClass: '',\n callback: null,\n visible: true\n };\n } else {\n obj = {\n name: field.name,\n width: field.width,\n title: field.title === undefined ? self.setTitle(field.name) : field.title,\n sortField: field.sortField,\n titleClass: field.titleClass === undefined ? '' : field.titleClass,\n dataClass: field.dataClass === undefined ? '' : field.dataClass,\n callback: field.callback === undefined ? '' : field.callback,\n visible: field.visible === undefined ? true : field.visible\n };\n }\n self.tableFields.push(obj);\n });\n },\n setData: function setData(data) {\n if (data === null || typeof data === 'undefined') return;\n this.fireEvent('loading');\n if (Array.isArray(data)) {\n this.tableData = data;\n this.fireEvent('loaded');\n return;\n }\n this.tableData = this.getObjectValue(data, this.dataPath, null);\n this.tablePagination = this.getObjectValue(data, this.paginationPath, null);\n this.$nextTick(function () {\n this.fixHeader();\n this.fireEvent('pagination-data', this.tablePagination);\n this.fireEvent('loaded');\n });\n },\n setTitle: function setTitle(str) {\n if (this.isSpecialField(str)) {\n return '';\n }\n return this.titleCase(str);\n },\n getTitle: function getTitle(field) {\n if (typeof field.title === 'function') return field.title();\n return typeof field.title === 'undefined' ? field.name.replace('.', ' ') : field.title;\n },\n renderTitle: function renderTitle(field) {\n var title = this.getTitle(field);\n if (title.length > 0 && this.isInCurrentSortGroup(field) || this.hasSortableIcon(field)) {\n var style = \"opacity:\".concat(this.sortIconOpacity(field), \";position:relative;float:right\");\n var iconTag = this.showSortIcons ? this.renderIconTag(['sort-icon', this.sortIcon(field)], \"style=\\\"\".concat(style, \"\\\"\")) : '';\n return title + ' ' + iconTag;\n }\n return title;\n },\n renderSequence: function renderSequence(index) {\n return this.tablePagination ? this.tablePagination.from + index : index;\n },\n renderNormalField: function renderNormalField(field, item) {\n return this.hasCallback(field) ? this.callCallback(field, item) : this.getObjectValue(item, field.name, '');\n },\n isSpecialField: function isSpecialField(fieldName) {\n return fieldName.slice(0, 2) === '__';\n },\n titleCase: function titleCase(str) {\n return str.replace(/\\w+/g, function (txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n });\n },\n camelCase: function camelCase(str) {\n var delimiter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '_';\n var self = this;\n return str.split(delimiter).map(function (item) {\n return self.titleCase(item);\n }).join('');\n },\n notIn: function notIn(str, arr) {\n return arr.indexOf(str) === -1;\n },\n loadData: function loadData() {\n var success = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.loadSuccess;\n var failed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.loadFailed;\n if (this.isDataMode) {\n this.callDataManager();\n return;\n }\n this.fireEvent('loading');\n this.httpOptions['params'] = this.getAppendParams(this.getAllQueryParams());\n return this.fetch(this.apiUrl, this.httpOptions).then(success, failed).catch(function () {\n return failed();\n });\n },\n fetch: function fetch(apiUrl, httpOptions) {\n return this.httpFetch ? this.httpFetch(apiUrl, httpOptions) : lib_axios[this.httpMethod](apiUrl, httpOptions);\n },\n loadSuccess: function loadSuccess(response) {\n this.fireEvent('load-success', response);\n var body = this.transform(response.data);\n this.tableData = this.getObjectValue(body, this.dataPath, null);\n this.tablePagination = this.getObjectValue(body, this.paginationPath, null);\n if (this.tablePagination === null) {\n this.warn('vuetable: pagination-path \"' + this.paginationPath + '\" not found. ' + 'It looks like the data returned from the sever does not have pagination information ' + \"or you may have set it incorrectly.\\n\" + 'You can explicitly suppress this warning by setting pagination-path=\"\".');\n }\n this.$nextTick(function () {\n this.fixHeader();\n this.fireEvent('pagination-data', this.tablePagination);\n this.fireEvent('loaded');\n });\n },\n fixHeader: function fixHeader() {\n if (!this.isFixedHeader) {\n return;\n }\n var elem = this.$el.getElementsByClassName('vuetable-body-wrapper')[0];\n if (elem != null) {\n if (elem.scrollHeight > elem.clientHeight) {\n this.scrollVisible = true;\n } else {\n this.scrollVisible = false;\n }\n }\n },\n loadFailed: function loadFailed(response) {\n console.error('load-error', response);\n this.fireEvent('load-error', response);\n this.fireEvent('loaded');\n },\n transform: function transform(data) {\n var func = 'transform';\n if (this.parentFunctionExists(func)) {\n return this.$parent[func].call(this.$parent, data);\n }\n return data;\n },\n parentFunctionExists: function parentFunctionExists(func) {\n return func !== '' && typeof this.$parent[func] === 'function';\n },\n callParentFunction: function callParentFunction(func, args) {\n var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n if (this.parentFunctionExists(func)) {\n return this.$parent[func].call(this.$parent, args);\n }\n return defaultValue;\n },\n fireEvent: function fireEvent(eventName, args) {\n this.$emit(this.eventPrefix + eventName, args);\n },\n warn: function warn(msg) {\n if (!this.silent) {\n console.warn(msg);\n }\n },\n getAllQueryParams: function getAllQueryParams() {\n var params = {};\n if (typeof this.queryParams === 'function') {\n params = this.queryParams(this.sortOrder, this.currentPage, this.perPage);\n return Vuetablevue_type_script_lang_js_typeof(params) !== 'object' ? {} : params;\n }\n params[this.queryParams.sort] = this.getSortParam();\n params[this.queryParams.page] = this.currentPage;\n params[this.queryParams.perPage] = this.perPage;\n return params;\n },\n getSortParam: function getSortParam() {\n if (!this.sortOrder || this.sortOrder.field == '') {\n return '';\n }\n if (typeof this.$parent['getSortParam'] === 'function') {\n return this.$parent['getSortParam'].call(this.$parent, this.sortOrder);\n }\n return this.getDefaultSortParam();\n },\n getDefaultSortParam: function getDefaultSortParam() {\n var result = '';\n for (var i = 0; i < this.sortOrder.length; i++) {\n var fieldName = typeof this.sortOrder[i].sortField === 'undefined' ? this.sortOrder[i].field : this.sortOrder[i].sortField;\n result += fieldName + '|' + this.sortOrder[i].direction + (i + 1 < this.sortOrder.length ? ',' : '');\n }\n return result;\n },\n getAppendParams: function getAppendParams(params) {\n for (var x in this.appendParams) {\n params[x] = this.appendParams[x];\n }\n return params;\n },\n extractName: function extractName(string) {\n return string.split(':')[0].trim();\n },\n extractArgs: function extractArgs(string) {\n return string.split(':')[1];\n },\n isSortable: function isSortable(field) {\n return !(typeof field.sortField === 'undefined');\n },\n isInCurrentSortGroup: function isInCurrentSortGroup(field) {\n return this.currentSortOrderPosition(field) !== false;\n },\n hasSortableIcon: function hasSortableIcon(field) {\n return this.isSortable(field) && this.css.sortableIcon != '';\n },\n currentSortOrderPosition: function currentSortOrderPosition(field) {\n if (!this.isSortable(field)) {\n return false;\n }\n for (var i = 0; i < this.sortOrder.length; i++) {\n if (this.fieldIsInSortOrderPosition(field, i)) {\n return i;\n }\n }\n return false;\n },\n fieldIsInSortOrderPosition: function fieldIsInSortOrderPosition(field, i) {\n return this.sortOrder[i].field === field.name && this.sortOrder[i].sortField === field.sortField;\n },\n orderBy: function orderBy(field, event) {\n if (!this.isSortable(field)) return;\n var key = this.multiSortKey.toLowerCase() + 'Key';\n if (this.multiSort && event[key]) {\n //adding column to multisort\n this.multiColumnSort(field);\n } else {\n //no multisort, or resetting sort\n this.singleColumnSort(field);\n }\n this.currentPage = 1; // reset page index\n if (this.apiMode || this.dataManager) {\n this.loadData();\n }\n },\n multiColumnSort: function multiColumnSort(field) {\n var i = this.currentSortOrderPosition(field);\n if (i === false) {\n //this field is not in the sort array yet\n this.sortOrder.push({\n field: field.name,\n sortField: field.sortField,\n direction: 'asc'\n });\n } else {\n //this field is in the sort array, now we change its state\n if (this.sortOrder[i].direction === 'asc') {\n // switch direction\n this.sortOrder[i].direction = 'desc';\n } else {\n //remove sort condition\n this.sortOrder.splice(i, 1);\n }\n }\n },\n singleColumnSort: function singleColumnSort(field) {\n if (this.sortOrder.length === 0) {\n this.clearSortOrder();\n }\n this.sortOrder.splice(1); //removes additional columns\n\n if (this.fieldIsInSortOrderPosition(field, 0)) {\n // change sort direction\n this.sortOrder[0].direction = this.sortOrder[0].direction === 'asc' ? 'desc' : 'asc';\n } else {\n // reset sort direction\n this.sortOrder[0].direction = 'asc';\n }\n this.sortOrder[0].field = field.name;\n this.sortOrder[0].sortField = field.sortField;\n },\n clearSortOrder: function clearSortOrder() {\n this.sortOrder.push({\n field: '',\n sortField: '',\n direction: 'asc'\n });\n },\n sortClass: function sortClass(field) {\n var cls = '';\n var i = this.currentSortOrderPosition(field);\n if (i !== false) {\n cls = this.sortOrder[i].direction == 'asc' ? this.css.ascendingClass : this.css.descendingClass;\n }\n return cls;\n },\n sortIcon: function sortIcon(field) {\n var cls = this.css.sortableIcon;\n var i = this.currentSortOrderPosition(field);\n if (i !== false) {\n cls = this.sortOrder[i].direction == 'asc' ? this.css.ascendingIcon : this.css.descendingIcon;\n }\n return cls;\n },\n sortIconOpacity: function sortIconOpacity(field) {\n /*\r\n * fields with stronger precedence have darker color\r\n *\r\n * if there are few fields, we go down by 0.3\r\n * ex. 2 fields are selected: 1.0, 0.7\r\n *\r\n * if there are more we go down evenly on the given spectrum\r\n * ex. 6 fields are selected: 1.0, 0.86, 0.72, 0.58, 0.44, 0.3\r\n */\n var max = 1.0,\n min = 0.3,\n step = 0.3;\n var count = this.sortOrder.length;\n var current = this.currentSortOrderPosition(field);\n if (max - count * step < min) {\n step = (max - min) / (count - 1);\n }\n var opacity = max - current * step;\n return opacity;\n },\n hasCallback: function hasCallback(item) {\n return item.callback ? true : false;\n },\n callCallback: function callCallback(field, item) {\n if (!this.hasCallback(field)) return;\n if (typeof field.callback == 'function') {\n return field.callback(this.getObjectValue(item, field.name));\n }\n var args = field.callback.split('|');\n var func = args.shift();\n if (typeof this.$parent[func] === 'function') {\n var value = this.getObjectValue(item, field.name);\n return args.length > 0 ? this.$parent[func].apply(this.$parent, [value].concat(args)) : this.$parent[func].call(this.$parent, value);\n }\n return null;\n },\n getObjectValue: function getObjectValue(object, path, defaultValue) {\n defaultValue = typeof defaultValue === 'undefined' ? null : defaultValue;\n var obj = object;\n if (path.trim() != '') {\n var keys = path.split('.');\n keys.forEach(function (key) {\n if (obj !== null && typeof obj[key] !== 'undefined' && obj[key] !== null) {\n obj = obj[key];\n } else {\n obj = defaultValue;\n return;\n }\n });\n }\n return obj;\n },\n toggleCheckbox: function toggleCheckbox(dataItem, fieldName, event) {\n var isChecked = event.target.checked;\n var idColumn = this.trackBy;\n if (dataItem[idColumn] === undefined) {\n this.warn('__checkbox field: The \"' + this.trackBy + '\" field does not exist! Make sure the field you specify in \"track-by\" prop does exist.');\n return;\n }\n var key = dataItem[idColumn];\n if (isChecked) {\n this.selectId(key);\n } else {\n this.unselectId(key);\n }\n this.$emit('vuetable:checkbox-toggled', isChecked, dataItem);\n },\n selectId: function selectId(key) {\n if (!this.isSelectedRow(key)) {\n this.selectedTo.push(key);\n }\n },\n unselectId: function unselectId(key) {\n this.selectedTo = this.selectedTo.filter(function (item) {\n return item !== key;\n });\n },\n isSelectedRow: function isSelectedRow(key) {\n return this.selectedTo.indexOf(key) >= 0;\n },\n rowSelected: function rowSelected(dataItem, fieldName) {\n var idColumn = this.trackBy;\n var key = dataItem[idColumn];\n return this.isSelectedRow(key);\n },\n checkCheckboxesState: function checkCheckboxesState(fieldName) {\n if (!this.tableData) return;\n var self = this;\n var idColumn = this.trackBy;\n var selector = 'th.vuetable-th-checkbox-' + idColumn + ' input[type=checkbox]';\n var els = document.querySelectorAll(selector);\n\n //fixed:document.querySelectorAll return the typeof nodeList not array\n if (els.forEach === undefined) els.forEach = function (cb) {\n [].forEach.call(els, cb);\n };\n\n // count how many checkbox row in the current page has been checked\n var selected = this.tableData.filter(function (item) {\n return self.selectedTo.indexOf(item[idColumn]) >= 0;\n });\n\n // count == 0, clear the checkbox\n if (selected.length <= 0) {\n els.forEach(function (el) {\n el.indeterminate = false;\n });\n return false;\n }\n // count > 0 and count < perPage, set checkbox state to 'indeterminate'\n else if (selected.length < this.perPage) {\n els.forEach(function (el) {\n el.indeterminate = true;\n });\n return true;\n }\n // count == perPage, set checkbox state to 'checked'\n else {\n els.forEach(function (el) {\n el.indeterminate = false;\n });\n return true;\n }\n },\n toggleAllCheckboxes: function toggleAllCheckboxes(fieldName, event) {\n var self = this;\n var isChecked = event.target.checked;\n var idColumn = this.trackBy;\n if (isChecked) {\n this.tableData.forEach(function (dataItem) {\n self.selectId(dataItem[idColumn]);\n });\n } else {\n this.tableData.forEach(function (dataItem) {\n self.unselectId(dataItem[idColumn]);\n });\n }\n this.$emit('vuetable:checkbox-toggled-all', isChecked);\n },\n gotoPreviousPage: function gotoPreviousPage() {\n if (this.currentPage > 1) {\n this.currentPage--;\n this.loadData();\n }\n },\n gotoNextPage: function gotoNextPage() {\n if (this.currentPage < this.tablePagination.last_page) {\n this.currentPage++;\n this.loadData();\n }\n },\n gotoPage: function gotoPage(page) {\n if (page != this.currentPage && page > 0 && page <= this.tablePagination.last_page) {\n this.currentPage = page;\n this.loadData();\n }\n },\n isVisibleDetailRow: function isVisibleDetailRow(rowId) {\n return this.visibleDetailRows.indexOf(rowId) >= 0;\n },\n showDetailRow: function showDetailRow(rowId) {\n if (!this.isVisibleDetailRow(rowId)) {\n this.visibleDetailRows.push(rowId);\n }\n },\n hideDetailRow: function hideDetailRow(rowId) {\n if (this.isVisibleDetailRow(rowId)) {\n this.visibleDetailRows.splice(this.visibleDetailRows.indexOf(rowId), 1);\n }\n },\n toggleDetailRow: function toggleDetailRow(rowId) {\n if (this.isVisibleDetailRow(rowId)) {\n this.hideDetailRow(rowId);\n } else {\n this.showDetailRow(rowId);\n }\n },\n showField: function showField(index) {\n if (index < 0 || index > this.tableFields.length) return;\n this.tableFields[index].visible = true;\n },\n hideField: function hideField(index) {\n if (index < 0 || index > this.tableFields.length) return;\n this.tableFields[index].visible = false;\n },\n toggleField: function toggleField(index) {\n if (index < 0 || index > this.tableFields.length) return;\n this.tableFields[index].visible = !this.tableFields[index].visible;\n },\n renderIconTag: function renderIconTag(classes) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n return typeof this.css.renderIcon === 'undefined' ? \"<i class=\\\"\".concat(classes.join(' '), \"\\\" \").concat(options, \"></i>\") : this.css.renderIcon(classes, options);\n },\n makePagination: function makePagination() {\n var total = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var perPage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var currentPage = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var pagination = {};\n total = total === null ? this.dataTotal : total;\n perPage = perPage === null ? this.perPage : perPage;\n currentPage = currentPage === null ? this.currentPage : currentPage;\n return {\n 'total': total,\n 'per_page': perPage,\n 'current_page': currentPage,\n 'last_page': Math.ceil(total / perPage) || 0,\n 'next_page_url': '',\n 'prev_page_url': '',\n 'from': (currentPage - 1) * perPage + 1,\n 'to': Math.min(currentPage * perPage, total)\n };\n },\n normalizeSortOrder: function normalizeSortOrder() {\n this.sortOrder.forEach(function (item) {\n item.sortField = item.sortField || item.field;\n });\n },\n callDataManager: function callDataManager() {\n if (this.dataManager === null && this.data === null) return;\n if (Array.isArray(this.data)) {\n return this.setData(this.data);\n }\n this.normalizeSortOrder();\n return this.setData(this.dataManager ? this.dataManager(this.sortOrder, this.makePagination()) : this.data);\n },\n onRowClass: function onRowClass(dataItem, index) {\n if (this.rowClassCallback !== '') {\n this.warn('\"row-class-callback\" prop is deprecated, please use \"row-class\" prop instead.');\n return;\n }\n if (typeof this.rowClass === 'function') {\n return this.rowClass(dataItem, index);\n }\n return this.rowClass;\n },\n onRowChanged: function onRowChanged(dataItem) {\n this.fireEvent('row-changed', dataItem);\n return true;\n },\n onRowClicked: function onRowClicked(dataItem, event) {\n this.$emit(this.eventPrefix + 'row-clicked', dataItem, event);\n return true;\n },\n onRowDoubleClicked: function onRowDoubleClicked(dataItem, event) {\n this.$emit(this.eventPrefix + 'row-dblclicked', dataItem, event);\n },\n onDetailRowClick: function onDetailRowClick(dataItem, event) {\n this.$emit(this.eventPrefix + 'detail-row-clicked', dataItem, event);\n },\n onCellClicked: function onCellClicked(dataItem, field, event) {\n this.$emit(this.eventPrefix + 'cell-clicked', dataItem, field, event);\n },\n onCellDoubleClicked: function onCellDoubleClicked(dataItem, field, event) {\n this.$emit(this.eventPrefix + 'cell-dblclicked', dataItem, field, event);\n },\n onCellRightClicked: function onCellRightClicked(dataItem, field, event) {\n this.$emit(this.eventPrefix + 'cell-rightclicked', dataItem, field, event);\n },\n /*\r\n * API for externals\r\n */\n changePage: function changePage(page) {\n if (page === 'prev') {\n this.gotoPreviousPage();\n } else if (page === 'next') {\n this.gotoNextPage();\n } else {\n this.gotoPage(page);\n }\n },\n reload: function reload() {\n return this.loadData();\n },\n refresh: function refresh() {\n this.currentPage = 1;\n return this.loadData();\n },\n resetData: function resetData() {\n this.tableData = null;\n this.tablePagination = null;\n this.fireEvent('data-reset');\n }\n },\n // end: methods\n watch: {\n 'multiSort': function multiSort(newVal, oldVal) {\n if (newVal === false && this.sortOrder.length > 1) {\n this.sortOrder.splice(1);\n this.loadData();\n }\n },\n 'apiUrl': function apiUrl(newVal, oldVal) {\n if (this.reactiveApiUrl && newVal !== oldVal) this.refresh();\n },\n 'data': function data(newVal, oldVal) {\n this.setData(newVal);\n },\n 'tableHeight': function tableHeight(newVal, oldVal) {\n this.fixHeader();\n }\n }\n});\n;// ./node_modules/vuetable-2/src/components/Vuetable.vue?vue&type=script&lang=js\n /* harmony default export */ const components_Vuetablevue_type_script_lang_js = (Vuetablevue_type_script_lang_js); \n// EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vuetable-2/src/components/Vuetable.vue?vue&type=style&index=0&id=5bfa05b0&prod&scoped=true&lang=css\nvar Vuetablevue_type_style_index_0_id_5bfa05b0_prod_scoped_true_lang_css = __webpack_require__(1152);\n;// ./node_modules/vuetable-2/src/components/Vuetable.vue?vue&type=style&index=0&id=5bfa05b0&prod&scoped=true&lang=css\n\n;// ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent(\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier /* server only */,\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options =\n typeof scriptExports === 'function' ? scriptExports.options : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) {\n // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n;// ./node_modules/vuetable-2/src/components/Vuetable.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = normalizeComponent(\n components_Vuetablevue_type_script_lang_js,\n Vuetablevue_type_template_id_5bfa05b0_scoped_true_render,\n Vuetablevue_type_template_id_5bfa05b0_scoped_true_staticRenderFns,\n false,\n null,\n \"5bfa05b0\",\n null\n \n)\n\n/* harmony default export */ const Vuetable = (component.exports);\n;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-2!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vuetable-2/src/components/VuetablePagination.vue?vue&type=template&id=226017b6\nvar VuetablePaginationvue_type_template_id_226017b6_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.tablePagination && _vm.tablePagination.last_page > 1,\n expression: \"tablePagination && tablePagination.last_page > 1\"\n }],\n class: _vm.css.wrapperClass\n }, [_c(\"a\", {\n class: [\"btn-nav\", _vm.css.linkClass, _vm.isOnFirstPage ? _vm.css.disabledClass : \"\"],\n on: {\n click: function click($event) {\n return _vm.loadPage(1);\n }\n }\n }, [_vm.css.icons.first != \"\" ? _c(\"i\", {\n class: [_vm.css.icons.first]\n }) : _c(\"span\", [_vm._v(\"«\")])]), _vm._v(\" \"), _c(\"a\", {\n class: [\"btn-nav\", _vm.css.linkClass, _vm.isOnFirstPage ? _vm.css.disabledClass : \"\"],\n on: {\n click: function click($event) {\n return _vm.loadPage(\"prev\");\n }\n }\n }, [_vm.css.icons.next != \"\" ? _c(\"i\", {\n class: [_vm.css.icons.prev]\n }) : _c(\"span\", [_vm._v(\" \")])]), _vm._v(\" \"), _vm.notEnoughPages ? [_vm._l(_vm.totalPage, function (n) {\n return [_c(\"a\", {\n class: [_vm.css.pageClass, _vm.isCurrentPage(n) ? _vm.css.activeClass : \"\"],\n domProps: {\n innerHTML: _vm._s(n)\n },\n on: {\n click: function click($event) {\n return _vm.loadPage(n);\n }\n }\n })];\n })] : [_vm._l(_vm.windowSize, function (n) {\n return [_c(\"a\", {\n class: [_vm.css.pageClass, _vm.isCurrentPage(_vm.windowStart + n - 1) ? _vm.css.activeClass : \"\"],\n domProps: {\n innerHTML: _vm._s(_vm.windowStart + n - 1)\n },\n on: {\n click: function click($event) {\n return _vm.loadPage(_vm.windowStart + n - 1);\n }\n }\n })];\n })], _vm._v(\" \"), _c(\"a\", {\n class: [\"btn-nav\", _vm.css.linkClass, _vm.isOnLastPage ? _vm.css.disabledClass : \"\"],\n on: {\n click: function click($event) {\n return _vm.loadPage(\"next\");\n }\n }\n }, [_vm.css.icons.next != \"\" ? _c(\"i\", {\n class: [_vm.css.icons.next]\n }) : _c(\"span\", [_vm._v(\" \")])]), _vm._v(\" \"), _c(\"a\", {\n class: [\"btn-nav\", _vm.css.linkClass, _vm.isOnLastPage ? _vm.css.disabledClass : \"\"],\n on: {\n click: function click($event) {\n return _vm.loadPage(_vm.totalPage);\n }\n }\n }, [_vm.css.icons.last != \"\" ? _c(\"i\", {\n class: [_vm.css.icons.last]\n }) : _c(\"span\", [_vm._v(\"»\")])])], 2);\n};\nvar VuetablePaginationvue_type_template_id_226017b6_staticRenderFns = [];\nVuetablePaginationvue_type_template_id_226017b6_render._withStripped = true;\n\n;// ./node_modules/vuetable-2/src/components/VuetablePagination.vue?vue&type=template&id=226017b6\n\n;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-2!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vuetable-2/src/components/VuetablePaginationMixin.vue?vue&type=script&lang=js\n/* harmony default export */ const VuetablePaginationMixinvue_type_script_lang_js = ({\n props: {\n css: {\n type: Object,\n default: function _default() {\n return {\n wrapperClass: 'ui right floated pagination menu',\n activeClass: 'active large',\n disabledClass: 'disabled',\n pageClass: 'item',\n linkClass: 'icon item',\n paginationClass: 'ui bottom attached segment grid',\n paginationInfoClass: 'left floated left aligned six wide column',\n dropdownClass: 'ui search dropdown',\n icons: {\n first: 'angle double left icon',\n prev: 'left chevron icon',\n next: 'right chevron icon',\n last: 'angle double right icon'\n }\n };\n }\n },\n onEachSide: {\n type: Number,\n default: function _default() {\n return 2;\n }\n }\n },\n data: function data() {\n return {\n eventPrefix: 'vuetable-pagination:',\n tablePagination: null\n };\n },\n computed: {\n totalPage: function totalPage() {\n return this.tablePagination === null ? 0 : this.tablePagination.last_page;\n },\n isOnFirstPage: function isOnFirstPage() {\n return this.tablePagination === null ? false : this.tablePagination.current_page === 1;\n },\n isOnLastPage: function isOnLastPage() {\n return this.tablePagination === null ? false : this.tablePagination.current_page === this.tablePagination.last_page;\n },\n notEnoughPages: function notEnoughPages() {\n return this.totalPage < this.onEachSide * 2 + 4;\n },\n windowSize: function windowSize() {\n return this.onEachSide * 2 + 1;\n },\n windowStart: function windowStart() {\n if (!this.tablePagination || this.tablePagination.current_page <= this.onEachSide) {\n return 1;\n } else if (this.tablePagination.current_page >= this.totalPage - this.onEachSide) {\n return this.totalPage - this.onEachSide * 2;\n }\n return this.tablePagination.current_page - this.onEachSide;\n }\n },\n methods: {\n loadPage: function loadPage(page) {\n this.$emit(this.eventPrefix + 'change-page', page);\n },\n isCurrentPage: function isCurrentPage(page) {\n return page === this.tablePagination.current_page;\n },\n setPaginationData: function setPaginationData(tablePagination) {\n this.tablePagination = tablePagination;\n },\n resetData: function resetData() {\n this.tablePagination = null;\n }\n }\n});\n;// ./node_modules/vuetable-2/src/components/VuetablePaginationMixin.vue?vue&type=script&lang=js\n /* harmony default export */ const components_VuetablePaginationMixinvue_type_script_lang_js = (VuetablePaginationMixinvue_type_script_lang_js); \n;// ./node_modules/vuetable-2/src/components/VuetablePaginationMixin.vue\nvar VuetablePaginationMixin_render, VuetablePaginationMixin_staticRenderFns\n;\n\n\n\n/* normalize component */\n;\nvar VuetablePaginationMixin_component = normalizeComponent(\n components_VuetablePaginationMixinvue_type_script_lang_js,\n VuetablePaginationMixin_render,\n VuetablePaginationMixin_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* harmony default export */ const VuetablePaginationMixin = (VuetablePaginationMixin_component.exports);\n;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-2!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vuetable-2/src/components/VuetablePagination.vue?vue&type=script&lang=js\n\n/* harmony default export */ const VuetablePaginationvue_type_script_lang_js = ({\n mixins: [VuetablePaginationMixin]\n});\n;// ./node_modules/vuetable-2/src/components/VuetablePagination.vue?vue&type=script&lang=js\n /* harmony default export */ const components_VuetablePaginationvue_type_script_lang_js = (VuetablePaginationvue_type_script_lang_js); \n;// ./node_modules/vuetable-2/src/components/VuetablePagination.vue\n\n\n\n\n\n/* normalize component */\n;\nvar VuetablePagination_component = normalizeComponent(\n components_VuetablePaginationvue_type_script_lang_js,\n VuetablePaginationvue_type_template_id_226017b6_render,\n VuetablePaginationvue_type_template_id_226017b6_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* harmony default export */ const VuetablePagination = (VuetablePagination_component.exports);\n;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-2!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vuetable-2/src/components/VuetablePaginationInfo.vue?vue&type=template&id=52c2ce41\nvar VuetablePaginationInfovue_type_template_id_52c2ce41_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n class: [\"vuetable-pagination-info\", _vm.css.infoClass],\n domProps: {\n innerHTML: _vm._s(_vm.paginationInfo)\n }\n });\n};\nvar VuetablePaginationInfovue_type_template_id_52c2ce41_staticRenderFns = [];\nVuetablePaginationInfovue_type_template_id_52c2ce41_render._withStripped = true;\n\n;// ./node_modules/vuetable-2/src/components/VuetablePaginationInfo.vue?vue&type=template&id=52c2ce41\n\n;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-2!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vuetable-2/src/components/VuetablePaginationInfoMixin.vue?vue&type=script&lang=js\n/* harmony default export */ const VuetablePaginationInfoMixinvue_type_script_lang_js = ({\n props: {\n css: {\n type: Object,\n default: function _default() {\n return {\n infoClass: 'left floated left aligned six wide column'\n };\n }\n },\n infoTemplate: {\n type: String,\n default: function _default() {\n return \"Displaying {from} to {to} of {total} items\";\n }\n },\n noDataTemplate: {\n type: String,\n default: function _default() {\n return 'No relevant data';\n }\n }\n },\n data: function data() {\n return {\n tablePagination: null\n };\n },\n computed: {\n paginationInfo: function paginationInfo() {\n if (this.tablePagination == null || this.tablePagination.total == 0) {\n return this.noDataTemplate;\n }\n return this.infoTemplate.replace('{from}', this.tablePagination.from || 0).replace('{to}', this.tablePagination.to || 0).replace('{total}', this.tablePagination.total || 0);\n }\n },\n methods: {\n setPaginationData: function setPaginationData(tablePagination) {\n this.tablePagination = tablePagination;\n },\n resetData: function resetData() {\n this.tablePagination = null;\n }\n }\n});\n;// ./node_modules/vuetable-2/src/components/VuetablePaginationInfoMixin.vue?vue&type=script&lang=js\n /* harmony default export */ const components_VuetablePaginationInfoMixinvue_type_script_lang_js = (VuetablePaginationInfoMixinvue_type_script_lang_js); \n;// ./node_modules/vuetable-2/src/components/VuetablePaginationInfoMixin.vue\nvar VuetablePaginationInfoMixin_render, VuetablePaginationInfoMixin_staticRenderFns\n;\n\n\n\n/* normalize component */\n;\nvar VuetablePaginationInfoMixin_component = normalizeComponent(\n components_VuetablePaginationInfoMixinvue_type_script_lang_js,\n VuetablePaginationInfoMixin_render,\n VuetablePaginationInfoMixin_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* harmony default export */ const VuetablePaginationInfoMixin = (VuetablePaginationInfoMixin_component.exports);\n;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-2!./node_modules/vue-loader/lib/index.js??vue-loader-options!./node_modules/vuetable-2/src/components/VuetablePaginationInfo.vue?vue&type=script&lang=js\n\n/* harmony default export */ const VuetablePaginationInfovue_type_script_lang_js = ({\n mixins: [VuetablePaginationInfoMixin]\n});\n;// ./node_modules/vuetable-2/src/components/VuetablePaginationInfo.vue?vue&type=script&lang=js\n /* harmony default export */ const components_VuetablePaginationInfovue_type_script_lang_js = (VuetablePaginationInfovue_type_script_lang_js); \n;// ./node_modules/vuetable-2/src/components/VuetablePaginationInfo.vue\n\n\n\n\n\n/* normalize component */\n;\nvar VuetablePaginationInfo_component = normalizeComponent(\n components_VuetablePaginationInfovue_type_script_lang_js,\n VuetablePaginationInfovue_type_template_id_52c2ce41_render,\n VuetablePaginationInfovue_type_template_id_52c2ce41_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* harmony default export */ const VuetablePaginationInfo = (VuetablePaginationInfo_component.exports);\n;// ./app/list/VuetableCssConfig.js\n/* harmony default export */ const VuetableCssConfig = ({\n table: {\n tableClass: 'table',\n loadingClass: 'loading',\n sortableIcon: '',\n ascendingIcon: 'fa fa-fw fa-chevron-up',\n descendingIcon: 'fa fa-fw fa-chevron-down',\n ascendingClass: '',\n descendingClass: '',\n handleIcon: 'fa fa-fw fa-bars',\n renderIcon: function renderIcon(classes, options) {\n return \"<i class=\\\"\".concat(classes.join(' '), \"\\\"></i>\");\n }\n },\n pagination: {\n wrapperClass: 'flex-objects-pagination',\n activeClass: 'button active',\n disabledClass: 'button disabled',\n pageClass: 'button page',\n linkClass: 'button link',\n icons: {\n first: 'fa fa-fw fa-angle-double-left',\n prev: 'fa fa-fw fa-chevron-left',\n next: 'fa fa-fw fa-chevron-right',\n last: 'fa fa-fw fa-angle-double-right'\n }\n },\n paginationInfo: {\n infoClass: ''\n }\n});\n// EXTERNAL MODULE: ./node_modules/lodash/set.js\nvar lodash_set = __webpack_require__(7093);\nvar set_default = /*#__PURE__*/__webpack_require__.n(lodash_set);\n// EXTERNAL MODULE: ./node_modules/lodash/unset.js\nvar unset = __webpack_require__(6484);\nvar unset_default = /*#__PURE__*/__webpack_require__.n(unset);\n;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-2!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/list/components/Table.vue?vue&type=script&lang=js\n\n\n\n\n\n\n\n/* harmony default export */ const Tablevue_type_script_lang_js = ({\n props: ['store', 'value'],\n components: {\n Vuetable: Vuetable,\n VuetablePagination: VuetablePagination,\n VuetablePaginationInfo: VuetablePaginationInfo\n },\n data: function data() {\n return {\n css: VuetableCssConfig,\n perPage: 10,\n data: [],\n extraParams: {}\n };\n },\n created: function created() {\n this.perPage = this.store.perPage;\n this.data = Object.values(this.store.data);\n },\n mounted: function mounted() {\n var _this = this;\n this.$refs.vuetable.setData(this.store.data);\n this.$events.$on('filter-set', function (event) {\n return _this.onFilterSet(event);\n });\n this.$events.$on('filter-reset', function (event) {\n return _this.onFilterReset();\n });\n this.$events.$on('filter-perPage', function (event) {\n return _this.onFilterPerPage(event);\n });\n },\n methods: {\n onPaginationData: function onPaginationData(paginationData) {\n this.$refs.pagination.setPaginationData(paginationData);\n this.$refs.paginationInfo.setPaginationData(paginationData);\n },\n onFilterSet: function onFilterSet(filterText) {\n var _this2 = this;\n set_default()(this.extraParams, 'filter', filterText);\n Vue.nextTick(function () {\n return _this2.$refs.vuetable.refresh();\n });\n },\n onFilterReset: function onFilterReset() {\n var _this3 = this;\n unset_default()(this.extraParams, 'filter');\n Vue.nextTick(function () {\n return _this3.$refs.vuetable.refresh();\n });\n },\n onFilterPerPage: function onFilterPerPage(limit) {\n var _this4 = this;\n // console.log('onFilterPerPage', limit, this.store.data);\n this.perPage = limit || this.$refs.paginationInfo.tablePagination.total;\n // this.$refs.vuetable.perPage = limit;\n Vue.nextTick(function () {\n return _this4.$refs.vuetable.refresh();\n });\n },\n onChangePage: function onChangePage(page) {\n this.$refs.vuetable.changePage(page);\n },\n onVuetableLoading: function onVuetableLoading() {\n this.$emit('input', true);\n },\n onVueTableLoadSuccess: function onVueTableLoadSuccess() {\n this.$emit('input', false);\n }\n }\n});\n;// ./app/list/components/Table.vue?vue&type=script&lang=js\n /* harmony default export */ const components_Tablevue_type_script_lang_js = (Tablevue_type_script_lang_js); \n;// ./app/list/components/Table.vue\n\n\n\n\n\n/* normalize component */\n;\nvar Table_component = normalizeComponent(\n components_Tablevue_type_script_lang_js,\n Tablevue_type_template_id_3769c7a1_render,\n Tablevue_type_template_id_3769c7a1_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* harmony default export */ const Table = (Table_component.exports);\n;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-2!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/list/components/FilterBar.vue?vue&type=template&id=5477c5be&scoped=true\nvar FilterBarvue_type_template_id_5477c5be_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"search-wrapper\"\n }, [_c(\"input\", {\n directives: [{\n name: \"model\",\n rawName: \"v-model.trim\",\n value: _vm.filterText,\n expression: \"filterText\",\n modifiers: {\n trim: true\n }\n }],\n staticClass: \"search\",\n attrs: {\n type: \"text\",\n placeholder: _vm.store.searchPlaceholder\n },\n domProps: {\n value: _vm.filterText\n },\n on: {\n input: [function ($event) {\n if ($event.target.composing) return;\n _vm.filterText = $event.target.value.trim();\n }, _vm.doFilter],\n blur: function blur($event) {\n return _vm.$forceUpdate();\n }\n }\n }), _vm._v(\" \"), _c(\"select\", {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.store.perPage,\n expression: \"store.perPage\"\n }],\n staticClass: \"filter-perPage\",\n on: {\n change: [function ($event) {\n var $$selectedVal = Array.prototype.filter.call($event.target.options, function (o) {\n return o.selected;\n }).map(function (o) {\n var val = \"_value\" in o ? o._value : o.value;\n return val;\n });\n _vm.$set(_vm.store, \"perPage\", $event.target.multiple ? $$selectedVal : $$selectedVal[0]);\n }, _vm.changePerPage]\n }\n }, _vm._l(this.perPageOptions, function (value, title) {\n return _c(\"option\", {\n domProps: {\n value: value,\n selected: _vm.store.perPage === value\n }\n }, [_vm._v(_vm._s(title))]);\n }), 0)]);\n};\nvar FilterBarvue_type_template_id_5477c5be_scoped_true_staticRenderFns = [];\nFilterBarvue_type_template_id_5477c5be_scoped_true_render._withStripped = true;\n\n;// ./app/list/components/FilterBar.vue?vue&type=template&id=5477c5be&scoped=true\n\n// EXTERNAL MODULE: ./node_modules/lodash/debounce.js\nvar debounce = __webpack_require__(4902);\nvar debounce_default = /*#__PURE__*/__webpack_require__.n(debounce);\n;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-2!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/list/components/FilterBar.vue?vue&type=script&lang=js\n\n/* harmony default export */ const FilterBarvue_type_script_lang_js = ({\n props: ['store'],\n data: function data() {\n return {\n filterText: '',\n searchPlaceholder: 'Filter...',\n selected: ''\n };\n },\n computed: {\n perPageOptions: function perPageOptions() {\n var options = {\n '25': 25,\n '50': 50,\n '100': 100,\n '200': 200,\n 'All': ''\n };\n if (!options[this.store.perPage]) {\n options[this.store.perPage] = this.store.perPage;\n }\n return options;\n }\n },\n created: function created() {\n var _this = this;\n this.doFilter = debounce_default()(function () {\n _this.$events.fire('filter-set', _this.filterText);\n }, 250, {\n leading: false\n });\n this.changePerPage = function () {\n _this.$events.fire('filter-perPage', _this.store.perPage);\n };\n },\n methods: {\n resetFilter: function resetFilter() {\n this.filterText = '';\n this.$events.fire('filter-reset');\n }\n }\n});\n;// ./app/list/components/FilterBar.vue?vue&type=script&lang=js\n /* harmony default export */ const components_FilterBarvue_type_script_lang_js = (FilterBarvue_type_script_lang_js); \n// EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/list/components/FilterBar.vue?vue&type=style&index=0&id=5477c5be&prod&scoped=true&lang=css\nvar FilterBarvue_type_style_index_0_id_5477c5be_prod_scoped_true_lang_css = __webpack_require__(537);\n;// ./app/list/components/FilterBar.vue?vue&type=style&index=0&id=5477c5be&prod&scoped=true&lang=css\n\n;// ./app/list/components/FilterBar.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar FilterBar_component = normalizeComponent(\n components_FilterBarvue_type_script_lang_js,\n FilterBarvue_type_template_id_5477c5be_scoped_true_render,\n FilterBarvue_type_template_id_5477c5be_scoped_true_staticRenderFns,\n false,\n null,\n \"5477c5be\",\n null\n \n)\n\n/* harmony default export */ const FilterBar = (FilterBar_component.exports);\n;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-2!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/list/components/ContentLoader.vue?vue&type=template&id=1f2da594\nvar ContentLoadervue_type_template_id_1f2da594_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", [_c(\"div\", {\n style: {\n height: 300,\n width: \"100%\"\n }\n }), _vm._v(\" \"), _c(\"content-loader\", {\n attrs: {\n height: _vm.fixedAmount * _vm.count,\n width: 1060,\n speed: 2,\n primaryColor: \"#d9d9d9\",\n secondaryColor: \"#ecebeb\"\n }\n }, [_vm._l(_vm.count, function (index) {\n return [_c(\"rect\", {\n attrs: {\n x: \"13\",\n y: _vm.fixedAmount * index + _vm.offset,\n rx: \"6\",\n ry: \"6\",\n width: 200 * _vm.random(),\n height: \"12\"\n }\n }), _vm._v(\" \"), _c(\"rect\", {\n attrs: {\n x: \"533\",\n y: _vm.fixedAmount * index + _vm.offset,\n rx: \"6\",\n ry: \"6\",\n width: 63 * _vm.random(),\n height: \"12\"\n }\n }), _vm._v(\" \"), _c(\"rect\", {\n attrs: {\n x: \"653\",\n y: _vm.fixedAmount * index + _vm.offset,\n rx: \"6\",\n ry: \"6\",\n width: 78 * _vm.random(),\n height: \"12\"\n }\n }), _vm._v(\" \"), _c(\"rect\", {\n attrs: {\n x: \"755\",\n y: _vm.fixedAmount * index + _vm.offset,\n rx: \"6\",\n ry: \"6\",\n width: 117 * _vm.random(),\n height: \"12\"\n }\n }), _vm._v(\" \"), _c(\"rect\", {\n attrs: {\n x: \"938\",\n y: _vm.fixedAmount * index + _vm.offset,\n rx: \"6\",\n ry: \"6\",\n width: 83 * _vm.random(),\n height: \"12\"\n }\n }), _vm._v(\" \"), _c(\"rect\", {\n attrs: {\n x: \"0\",\n y: _vm.fixedAmount * index,\n rx: \"6\",\n ry: \"6\",\n width: \"1060\",\n height: \".3\"\n }\n })];\n })], 2)], 1);\n};\nvar ContentLoadervue_type_template_id_1f2da594_staticRenderFns = [];\nContentLoadervue_type_template_id_1f2da594_render._withStripped = true;\n\n;// ./app/list/components/ContentLoader.vue?vue&type=template&id=1f2da594\n\n// EXTERNAL MODULE: ./node_modules/babel-helper-vue-jsx-merge-props/index.js\nvar babel_helper_vue_jsx_merge_props = __webpack_require__(3244);\nvar babel_helper_vue_jsx_merge_props_default = /*#__PURE__*/__webpack_require__.n(babel_helper_vue_jsx_merge_props);\n;// ./node_modules/vue-content-loader/dist/vue-content-loader.es.js\n/* unused harmony import specifier */ var _mergeJSXProps;\n\nvar vue_content_loader_es_uid = function uid() {\n return Math.random().toString(36).substring(2);\n};\nvar ContentLoader = {\n name: 'ContentLoader',\n functional: true,\n props: {\n width: {\n type: [Number, String],\n \"default\": 400\n },\n height: {\n type: [Number, String],\n \"default\": 130\n },\n speed: {\n type: Number,\n \"default\": 2\n },\n preserveAspectRatio: {\n type: String,\n \"default\": 'xMidYMid meet'\n },\n baseUrl: {\n type: String,\n \"default\": ''\n },\n primaryColor: {\n type: String,\n \"default\": '#f9f9f9'\n },\n secondaryColor: {\n type: String,\n \"default\": '#ecebeb'\n },\n primaryOpacity: {\n type: Number,\n \"default\": 1\n },\n secondaryOpacity: {\n type: Number,\n \"default\": 1\n },\n uniqueKey: {\n type: String\n },\n animate: {\n type: Boolean,\n \"default\": true\n }\n },\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var idClip = props.uniqueKey ? props.uniqueKey + \"-idClip\" : vue_content_loader_es_uid();\n var idGradient = props.uniqueKey ? props.uniqueKey + \"-idGradient\" : vue_content_loader_es_uid();\n return h(\"svg\", babel_helper_vue_jsx_merge_props_default()([data, {\n attrs: {\n viewBox: \"0 0 \" + props.width + \" \" + props.height,\n version: \"1.1\",\n preserveAspectRatio: props.preserveAspectRatio\n }\n }]), [h(\"rect\", {\n style: {\n fill: \"url(\" + props.baseUrl + \"#\" + idGradient + \")\"\n },\n attrs: {\n \"clip-path\": \"url(\" + props.baseUrl + \"#\" + idClip + \")\",\n x: \"0\",\n y: \"0\",\n width: props.width,\n height: props.height\n }\n }), h(\"defs\", [h(\"clipPath\", {\n attrs: {\n id: idClip\n }\n }, [children || h(\"rect\", {\n attrs: {\n x: \"0\",\n y: \"0\",\n rx: \"5\",\n ry: \"5\",\n width: props.width,\n height: props.height\n }\n })]), h(\"linearGradient\", {\n attrs: {\n id: idGradient\n }\n }, [h(\"stop\", {\n attrs: {\n offset: \"0%\",\n \"stop-color\": props.primaryColor,\n \"stop-opacity\": props.primaryOpacity\n }\n }, [props.animate ? h(\"animate\", {\n attrs: {\n attributeName: \"offset\",\n values: \"-2; 1\",\n dur: props.speed + \"s\",\n repeatCount: \"indefinite\"\n }\n }) : null]), h(\"stop\", {\n attrs: {\n offset: \"50%\",\n \"stop-color\": props.secondaryColor,\n \"stop-opacity\": props.secondaryOpacity\n }\n }, [props.animate ? h(\"animate\", {\n attrs: {\n attributeName: \"offset\",\n values: \"-1.5; 1.5\",\n dur: props.speed + \"s\",\n repeatCount: \"indefinite\"\n }\n }) : null]), h(\"stop\", {\n attrs: {\n offset: \"100%\",\n \"stop-color\": props.primaryColor,\n \"stop-opacity\": props.primaryOpacity\n }\n }, [props.animate ? h(\"animate\", {\n attrs: {\n attributeName: \"offset\",\n values: \"-1; 2\",\n dur: props.speed + \"s\",\n repeatCount: \"indefinite\"\n }\n }) : null])])])]);\n }\n};\nvar BulletListLoader = (/* unused pure expression or super */ null && ({\n name: 'BulletListLoader',\n functional: true,\n render: function render(h, _ref) {\n var data = _ref.data;\n return h(ContentLoader, data, [h(\"circle\", {\n attrs: {\n cx: \"10\",\n cy: \"20\",\n r: \"8\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"25\",\n y: \"15\",\n rx: \"5\",\n ry: \"5\",\n width: \"220\",\n height: \"10\"\n }\n }), h(\"circle\", {\n attrs: {\n cx: \"10\",\n cy: \"50\",\n r: \"8\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"25\",\n y: \"45\",\n rx: \"5\",\n ry: \"5\",\n width: \"220\",\n height: \"10\"\n }\n }), h(\"circle\", {\n attrs: {\n cx: \"10\",\n cy: \"80\",\n r: \"8\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"25\",\n y: \"75\",\n rx: \"5\",\n ry: \"5\",\n width: \"220\",\n height: \"10\"\n }\n }), h(\"circle\", {\n attrs: {\n cx: \"10\",\n cy: \"110\",\n r: \"8\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"25\",\n y: \"105\",\n rx: \"5\",\n ry: \"5\",\n width: \"220\",\n height: \"10\"\n }\n })]);\n }\n}));\nvar CodeLoader = (/* unused pure expression or super */ null && ({\n name: 'CodeLoader',\n functional: true,\n render: function render(h, _ref) {\n var data = _ref.data;\n return h(ContentLoader, data, [h(\"rect\", {\n attrs: {\n x: \"0\",\n y: \"0\",\n rx: \"3\",\n ry: \"3\",\n width: \"70\",\n height: \"10\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"80\",\n y: \"0\",\n rx: \"3\",\n ry: \"3\",\n width: \"100\",\n height: \"10\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"190\",\n y: \"0\",\n rx: \"3\",\n ry: \"3\",\n width: \"10\",\n height: \"10\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"15\",\n y: \"20\",\n rx: \"3\",\n ry: \"3\",\n width: \"130\",\n height: \"10\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"155\",\n y: \"20\",\n rx: \"3\",\n ry: \"3\",\n width: \"130\",\n height: \"10\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"15\",\n y: \"40\",\n rx: \"3\",\n ry: \"3\",\n width: \"90\",\n height: \"10\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"115\",\n y: \"40\",\n rx: \"3\",\n ry: \"3\",\n width: \"60\",\n height: \"10\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"185\",\n y: \"40\",\n rx: \"3\",\n ry: \"3\",\n width: \"60\",\n height: \"10\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"0\",\n y: \"60\",\n rx: \"3\",\n ry: \"3\",\n width: \"30\",\n height: \"10\"\n }\n })]);\n }\n}));\nvar FacebookLoader = (/* unused pure expression or super */ null && ({\n name: 'FacebookLoader',\n functional: true,\n render: function render(h, _ref) {\n var data = _ref.data;\n return h(ContentLoader, data, [h(\"rect\", {\n attrs: {\n x: \"70\",\n y: \"15\",\n rx: \"4\",\n ry: \"4\",\n width: \"117\",\n height: \"6.4\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"70\",\n y: \"35\",\n rx: \"3\",\n ry: \"3\",\n width: \"85\",\n height: \"6.4\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"0\",\n y: \"80\",\n rx: \"3\",\n ry: \"3\",\n width: \"350\",\n height: \"6.4\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"0\",\n y: \"100\",\n rx: \"3\",\n ry: \"3\",\n width: \"380\",\n height: \"6.4\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"0\",\n y: \"120\",\n rx: \"3\",\n ry: \"3\",\n width: \"201\",\n height: \"6.4\"\n }\n }), h(\"circle\", {\n attrs: {\n cx: \"30\",\n cy: \"30\",\n r: \"30\"\n }\n })]);\n }\n}));\nvar ListLoader = (/* unused pure expression or super */ null && ({\n name: 'ListLoader',\n functional: true,\n render: function render(h, _ref) {\n var data = _ref.data;\n return h(ContentLoader, data, [h(\"rect\", {\n attrs: {\n x: \"0\",\n y: \"0\",\n rx: \"3\",\n ry: \"3\",\n width: \"250\",\n height: \"10\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"20\",\n y: \"20\",\n rx: \"3\",\n ry: \"3\",\n width: \"220\",\n height: \"10\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"20\",\n y: \"40\",\n rx: \"3\",\n ry: \"3\",\n width: \"170\",\n height: \"10\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"0\",\n y: \"60\",\n rx: \"3\",\n ry: \"3\",\n width: \"250\",\n height: \"10\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"20\",\n y: \"80\",\n rx: \"3\",\n ry: \"3\",\n width: \"200\",\n height: \"10\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"20\",\n y: \"100\",\n rx: \"3\",\n ry: \"3\",\n width: \"80\",\n height: \"10\"\n }\n })]);\n }\n}));\nvar InstagramLoader = (/* unused pure expression or super */ null && ({\n name: 'InstagramLoader',\n functional: true,\n render: function render(h, _ref) {\n var data = _ref.data;\n return h(ContentLoader, _mergeJSXProps([data, {\n attrs: {\n height: 480\n }\n }]), [h(\"circle\", {\n attrs: {\n cx: \"30\",\n cy: \"30\",\n r: \"30\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"75\",\n y: \"13\",\n rx: \"4\",\n ry: \"4\",\n width: \"100\",\n height: \"13\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"75\",\n y: \"37\",\n rx: \"4\",\n ry: \"4\",\n width: \"50\",\n height: \"8\"\n }\n }), h(\"rect\", {\n attrs: {\n x: \"0\",\n y: \"70\",\n rx: \"5\",\n ry: \"5\",\n width: \"400\",\n height: \"400\"\n }\n })]);\n }\n}));\n\n;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-2!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/list/components/ContentLoader.vue?vue&type=script&lang=js\n\n/* harmony default export */ const ContentLoadervue_type_script_lang_js = ({\n props: ['store'],\n data: function data() {\n return {\n fixedAmount: 31,\n offset: 10,\n steps: [0.7, 0.8, 0.9, 1]\n };\n },\n computed: {\n count: function count() {\n return this.store.perPage;\n }\n },\n methods: {\n random: function random() {\n return this.steps[Math.floor(Math.random() * this.steps.length)];\n }\n },\n components: {\n ContentLoader: ContentLoader\n }\n});\n;// ./app/list/components/ContentLoader.vue?vue&type=script&lang=js\n /* harmony default export */ const components_ContentLoadervue_type_script_lang_js = (ContentLoadervue_type_script_lang_js); \n;// ./app/list/components/ContentLoader.vue\n\n\n\n\n\n/* normalize component */\n;\nvar ContentLoader_component = normalizeComponent(\n components_ContentLoadervue_type_script_lang_js,\n ContentLoadervue_type_template_id_1f2da594_render,\n ContentLoadervue_type_template_id_1f2da594_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* harmony default export */ const components_ContentLoader = (ContentLoader_component.exports);\n;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-2!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/list/App.vue?vue&type=script&lang=js\n\n\n\n/* harmony default export */ const Appvue_type_script_lang_js = ({\n props: ['initialStore'],\n components: {\n FlexTable: Table,\n FlexFilterBar: FilterBar,\n FlexContentLoader: components_ContentLoader\n },\n data: function data() {\n return {\n perPage: 10,\n loading: true\n };\n },\n computed: {\n store: function store() {\n return JSON.parse(this.initialStore || '{}');\n }\n }\n});\n;// ./app/list/App.vue?vue&type=script&lang=js\n /* harmony default export */ const list_Appvue_type_script_lang_js = (Appvue_type_script_lang_js); \n;// ./app/list/App.vue\n\n\n\n\n\n/* normalize component */\n;\nvar App_component = normalizeComponent(\n list_Appvue_type_script_lang_js,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* harmony default export */ const App = (App_component.exports);\n;// ./app/list/index.js\n\n\n\nVue.use(dist/* default */.A);\nvar ID = '#flex-objects-list';\nvar list_element = document.querySelector(ID);\nif (list_element) {\n var initialStore = list_element.dataset.initialStore;\n new Vue({\n // eslint-disable-line no-new\n el: ID,\n render: function render(h) {\n return h(App, {\n props: {\n initialStore: initialStore\n }\n });\n }\n });\n}\n;// external \"jQuery\"\nconst external_jQuery_namespaceObject = jQuery;\nvar external_jQuery_default = /*#__PURE__*/__webpack_require__.n(external_jQuery_namespaceObject);\n// EXTERNAL MODULE: ./node_modules/eventemitter3/index.js\nvar eventemitter3 = __webpack_require__(6651);\nvar eventemitter3_default = /*#__PURE__*/__webpack_require__.n(eventemitter3);\n;// ./app/utils/finder.js\nfunction finder_typeof(o) { \"@babel/helpers - typeof\"; return finder_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, finder_typeof(o); }\nfunction finder_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction finder_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, finder_toPropertyKey(o.key), o); } }\nfunction finder_createClass(e, r, t) { return r && finder_defineProperties(e.prototype, r), t && finder_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction finder_toPropertyKey(t) { var i = finder_toPrimitive(t, \"string\"); return \"symbol\" == finder_typeof(i) ? i : i + \"\"; }\nfunction finder_toPrimitive(t, r) { if (\"object\" != finder_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != finder_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/**\n * (c) Trilby Media, LLC\n * Author Djamil Legato\n *\n * Based on Mark Matyas's Finderjs\n * MIT License\n */\n\n\n\nvar DEFAULTS = {\n labelKey: 'name',\n valueKey: 'value',\n // new\n childKey: 'children',\n iconKey: 'icon',\n // new\n itemKey: 'item-key',\n // new\n itemTrigger: null,\n pathBar: true,\n className: {\n container: 'fjs-container',\n pathBar: 'fjs-path-bar',\n col: 'fjs-col',\n list: 'fjs-list',\n item: 'fjs-item',\n active: 'fjs-active',\n children: 'fjs-has-children',\n url: 'fjs-url',\n itemPrepend: 'fjs-item-prepend',\n itemContent: 'fjs-item-content',\n itemAppend: 'fjs-item-append'\n }\n};\nvar Finder = /*#__PURE__*/function () {\n function Finder(container, data, options) {\n var _this = this;\n finder_classCallCheck(this, Finder);\n this.$emitter = new (eventemitter3_default())();\n this.container = external_jQuery_default()(container);\n this.data = data;\n this.config = external_jQuery_default().extend(true, {}, DEFAULTS, options);\n this.container.off('click.finder keydown.finder');\n\n // dom events\n this.container.on('click.finder', this.clickEvent.bind(this));\n this.container.on('keydown.finder', this.keydownEvent.bind(this));\n\n // internal events\n this.$emitter.on('item-selected', this.itemSelected.bind(this));\n this.$emitter.on('create-column', this.addColumn.bind(this));\n this.$emitter.on('navigate', this.navigate.bind(this));\n this.$emitter.on('go-to', this.goTo.bind(this, this.data));\n this.container.addClass(this.config.className.container).attr('tabindex', 0);\n this.createColumn(this.data);\n if (this.config.pathBar) {\n this.pathBar = this.createPathBar();\n this.pathBar.on('click.finder', '[data-breadcrumb-node]', function (event) {\n event.preventDefault();\n var location = external_jQuery_default()(event.currentTarget).data('breadcrumbNode');\n _this.goTo(_this.data, location);\n });\n }\n\n // '' is <Root>\n if (this.config.defaultPath || this.config.defaultPath === '') {\n this.goTo(this.data, this.config.defaultPath);\n }\n }\n return finder_createClass(Finder, [{\n key: \"reload\",\n value: function reload() {\n var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.data;\n this.createColumn(data);\n\n // '' is <Root>\n if (this.config.defaultPath || this.config.defaultPath === '') {\n this.goTo(data, this.config.defaultPath);\n }\n }\n }, {\n key: \"createColumn\",\n value: function createColumn(data, parent) {\n var _this2 = this;\n var callback = function callback(data) {\n return _this2.createColumn(data, parent);\n };\n if (typeof data === 'function') {\n data.call(this, parent, callback);\n } else if (Array.isArray(data) || finder_typeof(data) === 'object') {\n if (finder_typeof(data) === 'object') {\n data = Array.from(data);\n }\n var list = this.config.createList || this.createList;\n var div = external_jQuery_default()('<div />');\n div.append(list.call(this, data)).addClass(this.config.className.col);\n this.$emitter.emit('create-column', div);\n return div;\n } else {\n throw new Error('Unknown data type');\n }\n }\n }, {\n key: \"createPathBar\",\n value: function createPathBar() {\n this.container.siblings(\".\".concat(this.config.className.pathBar)).remove();\n var pathBar = external_jQuery_default()(\"<div class=\\\"\".concat(this.config.className.pathBar, \"\\\" />\"));\n pathBar.insertAfter(this.container);\n return pathBar;\n }\n }, {\n key: \"clickEvent\",\n value: function clickEvent(event) {\n var target = external_jQuery_default()(event.target);\n var column = target.closest(\".\".concat(this.config.className.col));\n var item = target.closest(\".\".concat(this.config.className.item));\n var prevent = target.is('[data-flexpages-prevent]') ? target : target.closest('[data-flexpages-prevent]');\n if (prevent.data('flexpagesPrevent') === undefined) {\n return true;\n }\n if (this.config.itemTrigger) {\n if (target.is(this.config.itemTrigger) || target.closest(this.config.itemTrigger).length) {\n event.stopPropagation();\n event.preventDefault();\n this.$emitter.emit('item-selected', {\n column: column,\n item: item\n });\n }\n return true;\n }\n event.stopPropagation();\n event.preventDefault();\n if (item.length) {\n this.$emitter.emit('item-selected', {\n column: column,\n item: item\n });\n }\n }\n }, {\n key: \"keydownEvent\",\n value: function keydownEvent(event) {\n var codes = {\n 37: 'left',\n 38: 'up',\n 39: 'right',\n 40: 'down',\n 13: 'enter'\n };\n if (event.keyCode in codes) {\n event.stopPropagation();\n event.preventDefault();\n this.$emitter.emit('navigate', {\n direction: codes[event.keyCode]\n });\n }\n }\n }, {\n key: \"itemSelected\",\n value: function itemSelected(value) {\n var element = value.item;\n if (!element.length) {\n return false;\n }\n var item = element[0]._item;\n var column = value.column;\n var data = item[this.config.childKey] || this.data; // TODO: this.data for constant refresh\n var active = external_jQuery_default()(column).find(\".\".concat(this.config.className.active));\n if (active.length) {\n active.removeClass(this.config.className.active);\n }\n element.addClass(this.config.className.active);\n column.nextAll().remove(); // ?!?!?\n\n this.container[0].focus();\n window.scrollTo(window.pageXOffset, window.pageYOffset);\n this.updatePathBar();\n var newColumn;\n if (data) {\n newColumn = this.createColumn(data, item);\n this.$emitter.emit('interior-selected', item);\n } else {\n this.$emitter.emit('leaf-selected', item);\n }\n return newColumn;\n }\n }, {\n key: \"addColumn\",\n value: function addColumn(column) {\n this.container.append(column);\n this.$emitter.emit('column-created', column);\n }\n }, {\n key: \"navigate\",\n value: function navigate(value) {\n var active = this.findLastActive();\n var direction = value.direction;\n var column;\n var item;\n var target;\n if (active) {\n item = active.item;\n column = active.column;\n if (direction === 'up' && item.prev().length) {\n target = item.prev();\n } else if (direction === 'down' && item.next().length) {\n target = item.next();\n } else if (direction === 'right' && column.next().length) {\n column = column.next();\n target = column.find(\".\".concat(this.config.className.item)).first();\n } else if (direction === 'left' && column.prev().length) {\n column = column.prev();\n target = column.find(\".\".concat(this.config.className.active)).first() || column.find(\".\".concat(this.config.className.item));\n }\n } else {\n column = this.container.find(\".\".concat(this.config.className.col)).first();\n target = column.find(\".\".concat(this.config.className.item)).first();\n }\n if (active && direction === 'enter') {\n var href = active.item.find('a').prop('href');\n if (href) {\n window.location = href;\n }\n }\n if (target) {\n this.$emitter.emit('item-selected', {\n column: column,\n item: target\n });\n if (!this.isInView(target, column, true)) {\n this.scrollToView(target[0], column[0]);\n }\n }\n }\n }, {\n key: \"goTo\",\n value: function goTo(data, path) {\n var _this3 = this;\n path = Array.isArray(path) ? path : path.split('/').map(function (bit) {\n return bit.trim();\n }).filter(Boolean);\n if (path.length) {\n this.container.children().remove();\n }\n if (typeof data === 'function') {\n data.call(this, null, function (data) {\n return _this3.selectPath(path, data);\n });\n } else {\n this.selectPath(path, data);\n }\n }\n }, {\n key: \"selectPath\",\n value: function selectPath(path, data, column) {\n var _this4 = this;\n column = column || (path.length ? this.createColumn(data) : this.container.find(\"> .\".concat(this.config.className.col)));\n var current = path[0] || '';\n var children = data.find(function (item) {\n return item[_this4.config.itemKey] === current;\n });\n var item = column.find(\"[data-fjs-item=\\\"\".concat(current, \"\\\"]\")).first();\n var newColumn = this.itemSelected({\n column: column,\n item: item\n });\n if (!this.isInView(item, column, true)) {\n this.scrollToView(item[0], column[0]);\n }\n path.shift();\n if (path.length && children) {\n this.selectPath(path, children[this.config.childKey], newColumn);\n }\n }\n }, {\n key: \"findLastActive\",\n value: function findLastActive() {\n var active = this.container.find(\".\".concat(this.config.className.active));\n if (!active.length) {\n return null;\n }\n var item = active.last();\n var column = item.closest(\".\".concat(this.config.className.col));\n return {\n item: item,\n column: column\n };\n }\n }, {\n key: \"createList\",\n value: function createList(data) {\n var _this5 = this;\n var list = external_jQuery_default()('<ul />');\n var createItem = this.config.createItem || this.createItem;\n var items = data.map(function (item) {\n return createItem.call(_this5, item);\n });\n var fragments = items.reduce(function (fragment, current) {\n fragment.appendChild(current[0] || current);\n return fragment;\n }, document.createDocumentFragment());\n list.append(fragments).addClass(this.config.className.list);\n return list;\n }\n }, {\n key: \"createItem\",\n value: function createItem(item) {\n var listItem = external_jQuery_default()('<li />');\n var listItemClasses = [this.config.className.item];\n var link = external_jQuery_default()(\"<a href=\\\"\".concat(item.href || '', \"\\\" />\"));\n var createItemContent = this.config.createItemContent || this.createItemContent;\n var fragment = createItemContent.call(this, item);\n link.append(fragment).attr('href', '').attr('tabindex', -1);\n if (item.url) {\n link.attr('href', item.url);\n listItemClasses.push(item.className);\n }\n if (item[this.config.childKey]) {\n listItemClasses.push(this.config.className[this.config.childKey]);\n }\n listItem.addClass(listItemClasses.join(' '));\n listItem.append(link).attr('data-fjs-item', item[this.config.itemKey]);\n listItem[0]._item = item;\n return listItem;\n }\n }, {\n key: \"updatePathBar\",\n value: function updatePathBar() {\n var _this6 = this;\n if (!this.config.pathBar) {\n return false;\n }\n var activeItems = this.container.find(\".\".concat(this.config.className.active));\n var itemKeys = '';\n this.pathBar.empty();\n activeItems.each(function (index, activeItem) {\n var item = activeItem._item;\n var isLast = index + 1 === activeItems.length;\n itemKeys += \"/\".concat(item[_this6.config.itemKey]);\n _this6.pathBar.append(\"\\n <span class=\\\"breadcrumb-node \".concat(item.icon, \"\\\" \").concat(item.type === 'dir' || item.child_count > 0 ? \"data-breadcrumb-node=\\\"\".concat(itemKeys, \"\\\"\") : '', \">\\n <i class=\\\"\").concat(item.icon, \"\\\"></i>\\n <span class=\\\"breadcrumb-node-name\\\">\").concat(external_jQuery_default()('<div />').html(item[_this6.config.labelKey]).html(), \"</span>\\n \").concat(!isLast ? '<i class=\"fa fa-fw fa-chevron-right\"></i>' : '', \"\\n </span>\\n \"));\n });\n }\n }, {\n key: \"getIcon\",\n value: function getIcon(type) {\n switch (type) {\n case 'root':\n return 'fa-sitemap';\n case 'file':\n return 'fa-file-o';\n case 'dir':\n default:\n return 'fa-folder';\n }\n }\n }, {\n key: \"isInView\",\n value: function isInView(element, container, partial) {\n if (!element.length || !container.length) {\n return true;\n }\n var containerHeight = container.height();\n var elementTop = external_jQuery_default()(element).offset().top - container.offset().top;\n var elementBottom = elementTop + external_jQuery_default()(element).height();\n var isTotal = elementTop >= 0 && elementBottom <= containerHeight;\n var isPartial = (elementTop < 0 && elementBottom > 0 || elementTop > 0 && elementTop <= container.height()) && partial;\n return isTotal || isPartial;\n }\n }, {\n key: \"scrollToView\",\n value: function scrollToView(element, container) {\n var top = parseInt(container.getBoundingClientRect().top, 10);\n var bot = parseInt(container.getBoundingClientRect().bottom, 10);\n var now_top = parseInt(element.getBoundingClientRect().top, 10);\n var now_bot = parseInt(element.getBoundingClientRect().bottom, 10);\n var scroll_by = 0;\n if (now_top < top) {\n scroll_by = -(top - now_top);\n } else if (now_bot > bot) {\n scroll_by = now_bot - bot;\n }\n if (scroll_by !== 0) {\n container.scrollTop += scroll_by;\n }\n }\n }]);\n}();\n/* harmony default export */ const finder = (Finder);\n;// ./app/columns/finder.js\nfunction columns_finder_typeof(o) { \"@babel/helpers - typeof\"; return columns_finder_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, columns_finder_typeof(o); }\nfunction finder_ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction finder_objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? finder_ownKeys(Object(t), !0).forEach(function (r) { finder_defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : finder_ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction finder_defineProperty(e, r, t) { return (r = columns_finder_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction columns_finder_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction columns_finder_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, columns_finder_toPropertyKey(o.key), o); } }\nfunction columns_finder_createClass(e, r, t) { return r && columns_finder_defineProperties(e.prototype, r), t && columns_finder_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction columns_finder_toPropertyKey(t) { var i = columns_finder_toPrimitive(t, \"string\"); return \"symbol\" == columns_finder_typeof(i) ? i : i + \"\"; }\nfunction columns_finder_toPrimitive(t, r) { if (\"object\" != columns_finder_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != columns_finder_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n// import getFilters from '../utils/get-filters';\n\nvar XHRUUID = 0;\nvar GRAV_CONFIG = typeof __webpack_require__.g.GravConfig !== 'undefined' ? __webpack_require__.g.GravConfig : __webpack_require__.g.GravAdmin.config;\nvar Instances = (/* unused pure expression or super */ null && ({}));\nvar isInViewport = function isInViewport(elem) {\n var bounding = elem.getBoundingClientRect();\n var titlebar = document.querySelector('#titlebar');\n var offset = titlebar ? titlebar.getBoundingClientRect().height : 0;\n return bounding.top >= offset && bounding.left >= 0 && bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) && bounding.right <= (window.innerWidth || document.documentElement.clientWidth);\n};\nvar FlexPages = /*#__PURE__*/function () {\n function FlexPages(container, data) {\n var _this = this;\n columns_finder_classCallCheck(this, FlexPages);\n this.container = external_jQuery_default()(container);\n this.data = data;\n var dataLoad = this.dataLoad;\n this.finder = new finder(this.container, function (parent, callback) {\n return dataLoad.call(_this, parent, callback);\n }, {\n labelKey: 'title',\n defaultPath: getInitialRoute(),\n itemTrigger: '[data-flexpages-expand]',\n createItem: function createItem(item) {\n return FlexPages.createItem(this.config, item, this);\n },\n createItemContent: function createItemContent(item) {\n return FlexPages.createItemContent(this.config, item, this);\n }\n });\n this.finder.$emitter.on('leaf-selected', function (item) {\n setInitialRoute({\n route: item.route.raw\n });\n });\n this.finder.$emitter.on('interior-selected', function (item) {\n setInitialRoute({\n route: item.route.raw\n });\n });\n\n /*\n this.finder.$emitter.on('leaf-selected', (item) => {\n console.log('selected', item);\n this.finder.emit('create-column', () => this.createSimpleColumn(item));\n });\n this.finder.$emitter.on('item-selected', (selected) => {\n console.log('selected', selected);\n // for future use only - create column-card creation for file with details like in macOS finder\n // this.finder.$emitter('create-column', () => this.createSimpleColumn(selected));\n }); */\n\n this.finder.$emitter.on('column-created', function () {\n _this.container[0].scrollLeft = _this.container[0].scrollWidth - _this.container[0].clientWidth;\n });\n }\n return columns_finder_createClass(FlexPages, [{\n key: \"createSimpleColumn\",\n value: function createSimpleColumn(item) {}\n }, {\n key: \"dataLoad\",\n value: function dataLoad(parent, callback) {\n var _this2 = this;\n var filters = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : getStore().filters || {};\n /* if (!parent && Object.keys(filters).length) {\n parent = { child_count: 1, route: { raw: '' } };\n }*/\n\n if (!parent) {\n return callback(this.data);\n }\n if (!parent.child_count) {\n return false;\n }\n var UUID = ++XHRUUID;\n this.startLoader();\n var withFilters = Object.keys(filters).length ? finder_objectSpread({}, filters) : {};\n external_jQuery_default().ajax({\n url: \"\".concat(GRAV_CONFIG.current_url),\n method: 'post',\n data: Object.assign({}, {\n route: b64_encode_unicode(parent.route.raw),\n action: 'listLevel'\n }, withFilters),\n success: function success(response) {\n _this2.stopLoader();\n if (response.status === 'error') {\n _this2.finder.$emitter.emit('create-column', FlexPages.createErrorColumn(response.message)[0]);\n return false;\n }\n // stale request\n if (UUID !== XHRUUID) {\n return false;\n }\n if (response.data.length) {\n parent.children = response.data;\n }\n return callback(response.data);\n }\n });\n }\n }, {\n key: \"startLoader\",\n value: function startLoader() {\n if (!this.finder) {\n return null;\n }\n this.loadingIndicator = FlexPages.createLoadingColumn();\n this.finder.$emitter.emit('create-column', this.loadingIndicator[0]);\n return this.loadingIndicator;\n }\n }, {\n key: \"stopLoader\",\n value: function stopLoader() {\n return this.loadingIndicator && this.loadingIndicator.remove();\n }\n }], [{\n key: \"createItem\",\n value: function createItem(config, item, finder) {\n var listItem = external_jQuery_default()('<li />');\n var listItemClasses = [config.className.item];\n // const href = `${GRAV_CONFIG.current_url}/${item.route.raw}`.replace('//', '/');\n var link = external_jQuery_default()('<div class=\"fjs-item-wrapper\" />');\n var createItemContent = config.createItemContent || finder.createItemContent;\n var fragment = createItemContent.call(this, item);\n link.append(fragment)\n // .attr('href', href)\n .attr('tabindex', -1);\n if (item.url) {\n link.attr('href', item.url);\n listItemClasses.push(item.className);\n }\n if (item[config.childKey]) {\n listItemClasses.push(config.className[config.childKey]);\n }\n if (item.filters_hit) {\n listItemClasses.push('filters-hit');\n }\n listItem.addClass(listItemClasses.join(' '));\n listItem.append(link).attr('data-fjs-item', item[config.itemKey]);\n listItem[0]._item = item;\n return listItem;\n }\n }, {\n key: \"createItemContent\",\n value: function createItemContent(config, item) {\n var frag = document.createDocumentFragment();\n var route = \"\".concat(GRAV_CONFIG.current_url, \"/\").concat(item.route.raw).replace('//', '/');\n var title = external_jQuery_default()('<div class=\"fjs-title\" />');\n var link = external_jQuery_default()(\"<a href=\\\"\".concat(route, \"\\\" />\"));\n var icon = external_jQuery_default()(\"<span class=\\\"fjs-icon \".concat(item.icon, \" badge-\").concat(item.extras && item.extras.published ? 'published' : 'unpublished', \"\\\" />\"));\n if (item.extras && item.extras.lang) {\n var status = '';\n if (item.extras.translated) {\n status = 'translated';\n }\n if (item.extras.lang === 'n/a') {\n status = 'not-available';\n }\n var lang = external_jQuery_default()(\"<span class=\\\"badge-lang \".concat(status, \"\\\">\").concat(item.extras.lang, \"</span>\"));\n lang.appendTo(icon);\n }\n if (item.extras && item.extras && (item.extras.published_date || item.extras.unpublished_date)) {\n var clock = external_jQuery_default()('<span class=\"badge-clock\" />');\n clock.appendTo(icon);\n }\n var info = external_jQuery_default()(\"<span class=\\\"fjs-info\\\"><b title=\\\"\".concat(item.title, \"\\\">\").concat(item.title, \"</b> <em title=\\\"\").concat(item.route.display, \"\\\">\").concat(item.route.display, \"</em></span>\"));\n var actions = external_jQuery_default()('<span class=\"fjs-actions\" />');\n var dotdotdot = null;\n if (item.extras) {\n var LANG_URL = external_jQuery_default()('[data-lang-url]').data('langUrl');\n dotdotdot = external_jQuery_default()('<div class=\"button-group\" data-flexpages-dotx3 data-flexpages-prevent><button class=\"button dropdown-toggle\" data-toggle=\"dropdown\"><i class=\"fa fa-ellipsis-v fjs-action-toggle\"></i></button></div>');\n dotdotdot.on('click', function (event) {\n if (!dotdotdot.find('.dropdown-menu').length) {\n var tags = '';\n var langs = '';\n item.extras.tags.forEach(function (tag) {\n tags += \"<span class=\\\"badge tag tag-\".concat(tag, \"\\\">\").concat(tag, \"</span>\");\n });\n var translations = item.extras.langs || {};\n Object.keys(translations).forEach(function (lang) {\n var translated = translations[lang];\n langs += \"<a class=\\\"lang\\\" href=\\\"\".concat(LANG_URL.replace(/%LANG%/g, lang).replace('//', '/')).concat(item.route.raw, \"\\\"><span class=\\\"badge lang-\").concat(lang ? lang : 'default', \" lang-\").concat(translated ? 'translated' : 'non-translated', \"\\\"><i class=\\\"fa fa-fw fa-circle\\\"></i> \").concat(lang ? lang : 'default', \"</span></a>\");\n });\n var canPreview = item.extras.actions.includes('preview') && !(item.extras.tags.includes('non-routable') || item.extras.tags.includes('unpublished'));\n var canEdit = item.extras.actions.includes('edit');\n var canCopy = item.extras.actions.includes('copy');\n var canMove = false; // item.extras.actions.includes('move');\n var canDelete = item.extras.actions.includes('delete');\n var ul = external_jQuery_default()(\"<div class=\\\"dropdown-menu\\\">\\n <div class=\\\"action-bar\\\">\\n \".concat(canPreview ? \"<a href=\\\"\".concat(route, \"/:preview\\\" class=\\\"dropdown-item\\\" title=\\\"Preview\\\"><i class=\\\"fa fa-fw fa-eye\\\"></i></a>\") : '', \"\\n \").concat(canEdit ? \"<a href=\\\"\".concat(route, \"\\\" class=\\\"dropdown-item\\\" title=\\\"Edit\\\"><i class=\\\"fa fa-fw fa-pencil\\\"></i></a>\") : '', \"\\n \").concat(canCopy ? \"<a href=\\\"\".concat(route, \"/task:copy/admin-nonce:\").concat(GRAV_CONFIG.admin_nonce, \"\\\" class=\\\"dropdown-item\\\" title=\\\"Duplicate\\\" href=\\\"#modal-page-copy\\\" data-remodal-target=\\\"modal-page-copy\\\" data-copy-flex-page data-title=\\\"\").concat(item.title, \"\\\" data-folder=\\\"\").concat(item['item-key'], \"\\\"><i class=\\\"fa fa-fw fa-copy\\\"></i></a>\") : '', \"\\n \").concat(canMove ? '<a href=\"#\" class=\"dropdown-item\" title=\"Move (coming soon)\"><i class=\"fa fa-fw fa-arrows\"></i></a>' : '', \"\\n \").concat(canDelete ? \"<a href=\\\"#delete\\\" data-remodal-target=\\\"delete\\\" data-delete-url=\\\"\".concat(route, \"/task:delete/admin-nonce:\").concat(GRAV_CONFIG.admin_nonce, \"\\\" class=\\\"dropdown-item danger\\\" title=\\\"Delete\\\"><i class=\\\"fa fa-fw fa-trash-o\\\"></i></a>\") : '', \"\\n </div>\\n <div class=\\\"divider\\\"></div>\\n <div class=\\\"tags\\\">\").concat(tags, \"</div>\\n <div class=\\\"divider\\\"></div>\\n \").concat(item.extras.lang || typeof item.extras.langs !== 'undefined' ? \"<div class=\\\"langs\\\">\".concat(langs, \"</div><div class=\\\"divider\\\"></div>\") : '', \"\\n <div class=\\\"details\\\">\\n <div class=\\\"infos\\\">\\n <table>\\n <tr>\\n <td><b>route</b></td>\\n <td>\").concat(item.route.display, \"</td>\\n </tr>\\n <tr>\\n <td><b>template</b></td>\\n <td>\").concat(item.extras.template, \"</td>\\n </tr>\\n \").concat(item.extras && item.extras.published_date ? \"\\n <tr>\\n <td><b>publish</b></td>\\n <td>\".concat(item.extras.published_date, \"</td>\\n </tr>\\n \") : '', \"\\n \").concat(item.extras && item.extras.unpublished_date ? \"\\n <tr>\\n <td><b>unpublish</b></td>\\n <td>\".concat(item.extras.unpublished_date, \"</td>\\n </tr>\\n \") : '', \"\\n <tr>\\n <td><b>modified</b></td>\\n <td>\").concat(item.modified, \"</td>\\n </tr>\\n </table>\\n </div>\\n </div>\\n</div>\"));\n ul.appendTo(dotdotdot);\n }\n return true;\n });\n }\n if (item.child_count) {\n var button = external_jQuery_default()('<button class=\"fjs-children\" data-flexpages-expand data-flexpages-prevent />');\n var count = external_jQuery_default()(\"<span class=\\\"badge child-count\\\">\".concat(typeof item.count !== 'undefined' ? \"\".concat(item.count, \" / \") : '').concat(item.child_count, \"</span>\"));\n var arrow = external_jQuery_default()('<i class=\"fa fa-chevron-right\"></i>');\n count.appendTo(button);\n arrow.appendTo(button);\n button.appendTo(actions);\n }\n icon.appendTo(title);\n dotdotdot.appendTo(title);\n link.appendTo(title);\n info.appendTo(link);\n title.appendTo(frag);\n actions.appendTo(frag);\n return frag;\n }\n }, {\n key: \"createLoadingColumn\",\n value: function createLoadingColumn() {\n return external_jQuery_default()(\"\\n <div class=\\\"fjs-col leaf-col\\\" style=\\\"overflow: hidden;\\\">\\n <div class=\\\"leaf-row\\\">\\n <div class=\\\"grav-loading\\\"><div class=\\\"grav-loader\\\">Loading...</div></div>\\n </div>\\n </div>\\n \");\n }\n }, {\n key: \"createErrorColumn\",\n value: function createErrorColumn(error) {\n return external_jQuery_default()(\"\\n <div class=\\\"fjs-col leaf-col\\\" style=\\\"overflow: hidden;\\\">\\n <div class=\\\"leaf-row error\\\">\\n <i class=\\\"fa fa-fw fa-warning\\\"></i>\\n <span>\".concat(error, \"</span>\\n </div>\\n </div>\\n \"));\n }\n }]);\n}();\nvar b64_encode_unicode = function b64_encode_unicode(str) {\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function toSolidBytes(match, p1) {\n return String.fromCharCode('0x' + p1);\n }));\n};\nvar b64_decode_unicode = function b64_decode_unicode(str) {\n return decodeURIComponent(atob(str).split('').map(function (c) {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(''));\n};\nvar updatePosition = function updatePosition(scrollingColumn, pageColumns) {\n var group = document.querySelector('#pages-columns .button-group.open');\n if (group) {\n var button = group.querySelector('[data-toggle=\"dropdown\"]');\n var dropdown = group.querySelector('.dropdown-menu');\n var buttonInView = isInViewport(button);\n if (button && dropdown) {\n if (!buttonInView) {\n external_jQuery_default()(dropdown).css({\n display: 'none'\n });\n } else {\n external_jQuery_default()(dropdown).css({\n display: 'inherit'\n });\n var buttonClientRect = button.getBoundingClientRect();\n var dropdownClientRect = dropdown.getBoundingClientRect();\n var scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n var scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;\n var top = buttonClientRect.height + buttonClientRect.top + scrollTop;\n var left = buttonClientRect.left + scrollLeft; // - dropdownClientRect.width\n\n if (left + dropdownClientRect.width > window.innerWidth) {\n left = window.innerWidth - dropdownClientRect.width - 5;\n }\n external_jQuery_default()(dropdown).css({\n top: top,\n left: left\n });\n if (scrollingColumn) {\n var targetClientRect = event.target.getBoundingClientRect();\n if (top < targetClientRect.top + scrollTop || top > targetClientRect.top + scrollTop + targetClientRect.height) {\n external_jQuery_default()(dropdown).css({\n display: 'none'\n });\n }\n }\n if (pageColumns) {\n var _targetClientRect = event.target.getBoundingClientRect();\n if (left < _targetClientRect.left + scrollLeft || left > _targetClientRect.left + scrollLeft + _targetClientRect.width) {\n external_jQuery_default()(dropdown).css({\n display: 'none'\n });\n }\n }\n }\n }\n }\n};\nvar closeGhostDropdowns = function closeGhostDropdowns() {\n var opened = document.querySelectorAll('#pages-columns .button-group:not(.open) .dropdown-menu') || [];\n opened.forEach(function (item) {\n item.style.display = 'none';\n });\n};\ndocument.addEventListener('scroll', function (event) {\n if (event.target && !event.target.classList) {\n return true;\n }\n var scrollingDocument = event.target.classList.contains('gm-scroll-view') || event.target.classList.contains('content-wrapper');\n var scrollingColumn = event.target.classList.contains('fjs-col');\n var pageColumns = event.target.id === 'pages-columns';\n if (scrollingDocument || scrollingColumn || pageColumns) {\n closeGhostDropdowns();\n updatePosition(scrollingColumn, pageColumns);\n }\n}, true);\ndocument.addEventListener('click', function (event) {\n closeGhostDropdowns();\n if (event.target.dataset.toggle || event.target.closest('[data-toggle=\"dropdown\"]')) {\n var containerScroller = document.querySelectorAll('.gm-scroll-view');\n ((containerScroller.length ? containerScroller : document.querySelectorAll('.content-wrapper')) || []).forEach(function (scroll) {\n var scrollEvent = new Event('scroll');\n scroll.dispatchEvent(scrollEvent);\n });\n }\n if (event.target.classList && event.target.classList.contains('dropdown-menu') || event.target.closest('.dropdown-menu')) {\n if (!external_jQuery_default()(event.target).closest('.dropdown-menu').find(event.target).length) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n if (event.target.dataset.copyFlexPage || event.target.closest('[data-copy-flex-page]')) {\n var target = event.target.dataset.copyFlexPage ? event.target : event.target.closest('[data-copy-flex-page]');\n var modal = document.querySelector('[data-remodal-id=\"modal-page-copy\"]');\n var form = modal.querySelector('form');\n var titleField = modal.querySelector('[name=\"data[title]\"]');\n var folderField = modal.querySelector('[name=\"data[folder]\"]');\n titleField.value = \"\".concat(target.dataset.title, \" (Copy)\");\n folderField.value = \"\".concat(target.dataset.folder, \"-copy\");\n form.action = target.href;\n }\n});\n\n// Prevent dropdowns from closing when clicking within\nexternal_jQuery_default()(document).on('click.bs.dropdown.data-api', '.fjs-item-wrapper .dropdown-menu', function (event) {\n event.stopPropagation();\n});\n;// ./node_modules/tiny-cookie/dist/tiny-cookie.mjs\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nfunction tiny_cookie_hasOwn(obj, key) {\r\n return Object.prototype.hasOwnProperty.call(obj, key);\r\n}\r\n// Escape special characters.\r\nfunction escapeRe(str) {\r\n return str.replace(/[.*+?^$|[\\](){}\\\\-]/g, \"\\\\$&\");\r\n}\r\n// Return a future date by the given string.\r\nfunction computeExpires(str) {\r\n var lastCh = str.charAt(str.length - 1);\r\n var value = parseInt(str, 10);\r\n var expires = new Date();\r\n switch (lastCh) {\r\n case \"Y\":\r\n expires.setFullYear(expires.getFullYear() + value);\r\n break;\r\n case \"M\":\r\n expires.setMonth(expires.getMonth() + value);\r\n break;\r\n case \"D\":\r\n expires.setDate(expires.getDate() + value);\r\n break;\r\n case \"h\":\r\n expires.setHours(expires.getHours() + value);\r\n break;\r\n case \"m\":\r\n expires.setMinutes(expires.getMinutes() + value);\r\n break;\r\n case \"s\":\r\n expires.setSeconds(expires.getSeconds() + value);\r\n break;\r\n default:\r\n expires = new Date(str);\r\n }\r\n return expires;\r\n}\r\n// Convert an object to a cookie option string.\r\nfunction convert(opts) {\r\n var res = \"\";\r\n for (var _i = 0, _a = Object.keys(opts); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n if (/^expires$/i.test(key)) {\r\n var expires = opts[key];\r\n var expiresDate = void 0;\r\n if (typeof expires === \"object\") {\r\n expiresDate = expires;\r\n }\r\n else {\r\n expires += typeof expires === \"number\" ? \"D\" : \"\";\r\n expiresDate = computeExpires(String(expires));\r\n }\r\n res += \";\".concat(key, \"=\").concat(expiresDate.toUTCString());\r\n }\r\n else if (/^secure|partitioned$/.test(key)) {\r\n if (opts[key]) {\r\n res += \";\".concat(key);\r\n }\r\n }\r\n else {\r\n res += \";\".concat(key, \"=\").concat(opts[key]);\r\n }\r\n }\r\n if (!tiny_cookie_hasOwn(opts, \"path\")) {\r\n res += \";path=/\";\r\n }\r\n return res;\r\n}\n\n// Check if the browser cookie is enabled.\r\nfunction isEnabled() {\r\n var key = \"@key@\";\r\n var value = \"1\";\r\n var re = new RegExp(\"(?:^|; )\".concat(key, \"=\").concat(value, \"(?:;|$)\"));\r\n document.cookie = \"\".concat(key, \"=\").concat(value, \";path=/\");\r\n var enabled = re.test(document.cookie);\r\n if (enabled) {\r\n // eslint-disable-next-line\r\n tiny_cookie_remove(key);\r\n }\r\n return enabled;\r\n}\r\n// Get the cookie value by key.\r\nfunction get(key, decoder) {\r\n if (decoder === void 0) { decoder = decodeURIComponent; }\r\n if (typeof key !== \"string\" || !key) {\r\n return null;\r\n }\r\n var reKey = new RegExp(\"(?:^|; )\".concat(escapeRe(key), \"(?:=([^;]*))?(?:;|$)\"));\r\n var match = reKey.exec(document.cookie);\r\n if (match === null) {\r\n return null;\r\n }\r\n if (typeof decoder === \"function\") {\r\n return decoder(match[1]);\r\n }\r\n return match[1];\r\n}\r\n// The all cookies\r\nfunction getAll(decoder) {\r\n if (decoder === void 0) { decoder = decodeURIComponent; }\r\n var reKey = /(?:^|; )([^=]+?)(?:=([^;]*))?(?:;|$)/g;\r\n var cookies = {};\r\n var match;\r\n /* eslint-disable no-cond-assign */\r\n while ((match = reKey.exec(document.cookie))) {\r\n reKey.lastIndex = match.index + match.length - 1;\r\n cookies[match[1]] =\r\n typeof decoder === \"function\" ? decoder(match[2]) : match[2];\r\n }\r\n return cookies;\r\n}\r\nfunction tiny_cookie_set(key, value, encoder, options) {\r\n if (encoder === void 0) { encoder = encodeURIComponent; }\r\n if (typeof encoder === \"object\" && encoder !== null) {\r\n /* eslint-disable no-param-reassign */\r\n options = encoder;\r\n encoder = encodeURIComponent;\r\n /* eslint-enable no-param-reassign */\r\n }\r\n var attrsStr = convert(options || {});\r\n var valueStr = typeof encoder === \"function\" ? encoder(value) : value;\r\n var newCookie = \"\".concat(key, \"=\").concat(valueStr).concat(attrsStr);\r\n document.cookie = newCookie;\r\n}\r\n// Remove a cookie by the specified key.\r\nfunction tiny_cookie_remove(key, options) {\r\n var opts = { expires: -1 };\r\n if (options) {\r\n opts = __assign(__assign({}, options), opts);\r\n }\r\n return tiny_cookie_set(key, \"a\", opts);\r\n}\r\n// Get the cookie's value without decoding.\r\nfunction getRaw(key) {\r\n return get(key, null);\r\n}\r\n// Set a cookie without encoding the value.\r\nfunction setRaw(key, value, options) {\r\n return tiny_cookie_set(key, value, null, options);\r\n}\n\n\n\n;// ./app/utils/get-filters.js\n/* harmony default export */ const get_filters = (function () {\n var inputs = document.querySelectorAll('#pages-filters input[name]');\n var filters = {};\n var trackMulti = [];\n inputs.forEach(function (filter) {\n if (filter.type === 'checkbox') {\n if (filter.indeterminate || filter.checked) {\n if (filter.name.match(/\\[]$/)) {\n var name = filter.name.replace(/\\[]$/, '');\n if (!filters[name]) {\n filters[name] = [];\n }\n if (!trackMulti.includes(name)) {\n trackMulti.push(name);\n }\n filters[name].push(filter.value);\n } else {\n filters[filter.name] = filter.value;\n }\n }\n } else if (filter.value) {\n filters[filter.name] = filter.value;\n }\n });\n trackMulti.forEach(function (multi) {\n filters[multi] = filters[multi].join(',');\n });\n return filters;\n});\n__webpack_require__.dn(get_filters);\n;// ./app/columns/index.js\nfunction columns_typeof(o) { \"@babel/helpers - typeof\"; return columns_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, columns_typeof(o); }\nfunction columns_ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction columns_objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? columns_ownKeys(Object(t), !0).forEach(function (r) { columns_defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : columns_ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction columns_defineProperty(e, r, t) { return (r = columns_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction columns_toPropertyKey(t) { var i = columns_toPrimitive(t, \"string\"); return \"symbol\" == columns_typeof(i) ? i : i + \"\"; }\nfunction columns_toPrimitive(t, r) { if (\"object\" != columns_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != columns_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nvar container = document.querySelector('#pages-content-wrapper');\nvar getStore = function getStore() {\n if (!isEnabled) {\n return '';\n }\n return JSON.parse(b64_decode_unicode(get('grav-admin-flexpages') || 'e30='));\n};\nvar setStore = function setStore() {\n var store = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n expires: '1Y',\n samesite: 'Lax'\n };\n if (!isEnabled) {\n return '';\n }\n return tiny_cookie_set('grav-admin-flexpages', b64_encode_unicode(JSON.stringify(store)), options);\n};\nvar getInitialRoute = function getInitialRoute() {\n var parsed = getStore();\n return parsed.route || '';\n};\nvar setInitialRoute = function setInitialRoute() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$route = _ref.route,\n route = _ref$route === void 0 ? '' : _ref$route,\n _ref$filters = _ref.filters,\n filters = _ref$filters === void 0 ? getStore().filters || {} : _ref$filters,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {\n expires: '1Y'\n } : _ref$options;\n return setStore({\n route: route,\n filters: filters\n }, options);\n};\nvar FlexPagesInstance = null;\nvar ReLoad = function ReLoad() {\n var fresh = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var search = document.querySelector('#pages-filters [name=\"filters[search]\"]');\n var loader = container.querySelector('.grav-loading');\n var content = container.querySelector('#pages-columns');\n var gravConfig = typeof __webpack_require__.g.GravConfig !== 'undefined' ? __webpack_require__.g.GravConfig : __webpack_require__.g.GravAdmin.config;\n if (fresh && search) {\n search.focus();\n }\n if (loader && content) {\n loader.style.display = 'block';\n content.innerHTML = '';\n var filters = fresh ? getStore().filters || {} : get_filters();\n var withFilters = Object.keys(filters).length ? columns_objectSpread(columns_objectSpread({}, filters), {}, {\n initial: true\n }) : {};\n var store = getStore();\n store.filters = filters;\n setStore(store);\n var isSearchFocused = false;\n if (search) {\n isSearchFocused = search === document.activeElement;\n }\n var contentWrapper = document.querySelector('.content-wrapper .gm-scroll-view');\n var scrollPosition = {\n top: contentWrapper ? contentWrapper.scrollTop : 0,\n left: contentWrapper ? contentWrapper.scrollLeft : 0\n };\n external_jQuery_default().ajax({\n url: \"\".concat(gravConfig.current_url),\n method: 'post',\n data: Object.assign({}, {\n route: b64_encode_unicode(getInitialRoute()),\n initial: true,\n action: 'listLevel'\n }, withFilters),\n success: function success(response) {\n loader.style.display = 'none';\n if (response.status === 'error') {\n content.innerHTML = response.message;\n return true;\n }\n FlexPagesInstance = null;\n FlexPagesInstance = new FlexPages(content, response.data);\n if (search && isSearchFocused) {\n search.focus();\n }\n if (contentWrapper) {\n contentWrapper.scrollTo(scrollPosition);\n }\n return FlexPagesInstance;\n }\n });\n }\n};\nif (container) {\n ReLoad(true);\n}\n// EXTERNAL MODULE: ./app/utils/indeterminate.js\nvar indeterminate = __webpack_require__(857);\n// EXTERNAL MODULE: ./app/filters/panel.js\nvar panel = __webpack_require__(6906);\n// EXTERNAL MODULE: ./node_modules/lodash/throttle.js\nvar lodash_throttle = __webpack_require__(8585);\nvar throttle_default = /*#__PURE__*/__webpack_require__.n(lodash_throttle);\n;// ./app/filters/index.js\n\n\n\n\ndocument.addEventListener('click', function (event) {\n var filterType = event.target && event.target.dataset.filters;\n if (filterType === 'reset') {\n var filters = event.target.closest('#pages-filters');\n (filters.querySelectorAll('input[type=\"text\"]') || []).forEach(function (input) {\n input.value = '';\n });\n (filters.querySelectorAll('input[type=\"checkbox\"]') || []).forEach(function (input) {\n var wrapper = input.closest('.checkboxes');\n if (wrapper) {\n wrapper.classList.remove('status-checked', 'status-unchecked', 'status-indeterminate');\n wrapper.dataset._checkStatus = '0';\n wrapper.classList.add('status-unchecked');\n }\n input.indeterminate = false;\n input.checked = false;\n input.value = '';\n });\n return false;\n }\n if (filterType === 'apply') {\n ReLoad();\n return false;\n }\n});\nvar throttledReload = throttle_default()(function () {\n ReLoad();\n}, 350, {\n leading: false\n});\ndocument.addEventListener('input', function (event) {\n if (event.target.getAttribute && event.target.getAttribute('name') === 'filters[search]') {\n throttledReload.cancel();\n throttledReload();\n }\n});\n;// ./app/main.js\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RixJQUFNUyxlQUFlLEdBQUdqekIsa0JBQVEsQ0FBQyxZQUFNO0VBQ25Dd3lCLE1BQU0sQ0FBQyxDQUFDO0FBQ1osQ0FBQyxFQUFFLEdBQUcsRUFBRTtFQUFFN04sT0FBTyxFQUFFO0FBQU0sQ0FBQyxDQUFDO0FBRTNCMTBELFFBQVEsQ0FBQzlmLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxVQUFDMlEsS0FBSyxFQUFLO0VBQzFDLElBQUlBLEtBQUssQ0FBQzFMLE1BQU0sQ0FBQ3lqQyxZQUFZLElBQUkvM0IsS0FBSyxDQUFDMUwsTUFBTSxDQUFDeWpDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxpQkFBaUIsRUFBRTtJQUN0Rm82QyxlQUFlLENBQUNockIsTUFBTSxDQUFDLENBQUM7SUFDeEJnckIsZUFBZSxDQUFDLENBQUM7RUFDckI7QUFDSixDQUFDLENBQUMsQzs7QUM3Q2M7QUFDRyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy92dWUvZGlzdC92dWUucnVudGltZS5lc20uanM/MmIwZSIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9hcHAvbGlzdC9BcHAudnVlP2NlNjEiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vYXBwL2xpc3QvQXBwLnZ1ZT9mODRkIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL2FwcC9saXN0L2NvbXBvbmVudHMvVGFibGUudnVlP2YxMjciLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vYXBwL2xpc3QvY29tcG9uZW50cy9UYWJsZS52dWU/MzYxYiIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvdnVldGFibGUtMi9zcmMvY29tcG9uZW50cy9WdWV0YWJsZS52dWU/YzNkMCIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvdnVldGFibGUtMi9zcmMvY29tcG9uZW50cy9WdWV0YWJsZS52dWU/NTk3ZCIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcz8xZDJiIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanM/YzUzMiIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzP2MzNDUiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Nhbml0aXplSGVhZGVyVmFsdWUuanM/MDliNiIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NIZWFkZXJzLmpzP2VkZDUiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zRXJyb3IuanM/NzkxNyIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbnVsbC5qcz80NTgxIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b0Zvcm1EYXRhLmpzP2U0NjciLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzP2I5MjIiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzPzMwYjUiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcz9mNmI0Iiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzP2NhZmEiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzPzJhZjYiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvRm9ybURhdGEuanM/ODMyNCIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9CbG9iLmpzP2QyMTUiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2luZGV4LmpzP2YzYmQiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9jb21tb24vdXRpbHMuanM/Y2U2NyIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2luZGV4LmpzPzRlZDQiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0uanM/ZTQwYyIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanM/MDdmNCIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL2luZGV4LmpzPzRjM2QiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3RyYW5zZm9ybURhdGEuanM/YzQwMSIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcz8yZTY3Iiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbGVkRXJyb3IuanM/ZmI2MCIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzPzQ2N2YiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wuanM/YjY4YSIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3BlZWRvbWV0ZXIuanM/NjdiZiIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdGhyb3R0bGUuanM/N2Y1YSIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanM/NDU0NyIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzPzM5MzQiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanM/N2FhYyIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcz9kOTI1Iiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcz9lNjgzIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzPzgzYjkiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzPzRhN2IiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanM/Y2RhYyIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcz9iNTBkIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21wb3NlU2lnbmFscy5qcz83Nzk0Iiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90cmFja1N0cmVhbS5qcz8yNGY4Iiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9lc3RpbWF0ZURhdGFVUkxEZWNvZGVkQnl0ZXMuanM/YTEwNSIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzPzVjY2UiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9mZXRjaC5qcz9jMzZhIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvYWRhcHRlcnMuanM/M2ExMSIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzPzUyNzAiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcz84NDhiIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcz8wYTA2Iiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzPzhkZjQiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcz8wZGY2Iiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanM/NWYwMiIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanM/YmVmYSIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzP2NlZTQiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzL25vZGVfbW9kdWxlcy92dWV0YWJsZS0yL3NyYy9jb21wb25lbnRzL1Z1ZXRhYmxlLnZ1ZT8zNTlkIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy92dWV0YWJsZS0yL3NyYy9jb21wb25lbnRzL1Z1ZXRhYmxlLnZ1ZT82ZWY4Iiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy92dWV0YWJsZS0yL3NyYy9jb21wb25lbnRzL1Z1ZXRhYmxlLnZ1ZT9hN2I5Iiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanM/Mjg3NyIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvdnVldGFibGUtMi9zcmMvY29tcG9uZW50cy9WdWV0YWJsZS52dWU/ZWIwYyIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvdnVldGFibGUtMi9zcmMvY29tcG9uZW50cy9WdWV0YWJsZVBhZ2luYXRpb24udnVlPzM1NjgiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL3Z1ZXRhYmxlLTIvc3JjL2NvbXBvbmVudHMvVnVldGFibGVQYWdpbmF0aW9uLnZ1ZT9hODcwIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy9ub2RlX21vZHVsZXMvdnVldGFibGUtMi9zcmMvY29tcG9uZW50cy9WdWV0YWJsZVBhZ2luYXRpb25NaXhpbi52dWU/M2FhZiIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvdnVldGFibGUtMi9zcmMvY29tcG9uZW50cy9WdWV0YWJsZVBhZ2luYXRpb25NaXhpbi52dWU/YTM3ZSIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvdnVldGFibGUtMi9zcmMvY29tcG9uZW50cy9WdWV0YWJsZVBhZ2luYXRpb25NaXhpbi52dWU/NGI2OSIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvbm9kZV9tb2R1bGVzL3Z1ZXRhYmxlLTIvc3JjL2NvbXBvbmVudHMvVnVldGFibGVQYWdpbmF0aW9uLnZ1ZT9iMTE4Iiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy92dWV0YWJsZS0yL3NyYy9jb21wb25lbnRzL1Z1ZXRhYmxlUGFnaW5hdGlvbi52dWU/ZTkzZSIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvdnVldGFibGUtMi9zcmMvY29tcG9uZW50cy9WdWV0YWJsZVBhZ2luYXRpb24udnVlP2Q5M2YiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL3Z1ZXRhYmxlLTIvc3JjL2NvbXBvbmVudHMvVnVldGFibGVQYWdpbmF0aW9uSW5mby52dWU/MTI3ZSIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvdnVldGFibGUtMi9zcmMvY29tcG9uZW50cy9WdWV0YWJsZVBhZ2luYXRpb25JbmZvLnZ1ZT9iMzdmIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy9ub2RlX21vZHVsZXMvdnVldGFibGUtMi9zcmMvY29tcG9uZW50cy9WdWV0YWJsZVBhZ2luYXRpb25JbmZvTWl4aW4udnVlP2NmZjMiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL3Z1ZXRhYmxlLTIvc3JjL2NvbXBvbmVudHMvVnVldGFibGVQYWdpbmF0aW9uSW5mb01peGluLnZ1ZT9mN2IzIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy92dWV0YWJsZS0yL3NyYy9jb21wb25lbnRzL1Z1ZXRhYmxlUGFnaW5hdGlvbkluZm9NaXhpbi52dWU/MDAyZiIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvbm9kZV9tb2R1bGVzL3Z1ZXRhYmxlLTIvc3JjL2NvbXBvbmVudHMvVnVldGFibGVQYWdpbmF0aW9uSW5mby52dWU/NTRjMCIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvdnVldGFibGUtMi9zcmMvY29tcG9uZW50cy9WdWV0YWJsZVBhZ2luYXRpb25JbmZvLnZ1ZT8xYzNiIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy92dWV0YWJsZS0yL3NyYy9jb21wb25lbnRzL1Z1ZXRhYmxlUGFnaW5hdGlvbkluZm8udnVlPzE4ODgiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vYXBwL2xpc3QvVnVldGFibGVDc3NDb25maWcuanM/YzU2MiIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvYXBwL2xpc3QvY29tcG9uZW50cy9UYWJsZS52dWU/NTcxMSIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9hcHAvbGlzdC9jb21wb25lbnRzL1RhYmxlLnZ1ZT80ZWJkIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL2FwcC9saXN0L2NvbXBvbmVudHMvVGFibGUudnVlPzNhZmIiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vYXBwL2xpc3QvY29tcG9uZW50cy9GaWx0ZXJCYXIudnVlPzk5OWIiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vYXBwL2xpc3QvY29tcG9uZW50cy9GaWx0ZXJCYXIudnVlP2MzN2UiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzL2FwcC9saXN0L2NvbXBvbmVudHMvRmlsdGVyQmFyLnZ1ZT8xMmQ3Iiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL2FwcC9saXN0L2NvbXBvbmVudHMvRmlsdGVyQmFyLnZ1ZT8wMjkyIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL2FwcC9saXN0L2NvbXBvbmVudHMvRmlsdGVyQmFyLnZ1ZT83Njk5Iiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL2FwcC9saXN0L2NvbXBvbmVudHMvRmlsdGVyQmFyLnZ1ZT83MTllIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL2FwcC9saXN0L2NvbXBvbmVudHMvQ29udGVudExvYWRlci52dWU/NTRlYiIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9hcHAvbGlzdC9jb21wb25lbnRzL0NvbnRlbnRMb2FkZXIudnVlP2YwYmMiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL3Z1ZS1jb250ZW50LWxvYWRlci9kaXN0L3Z1ZS1jb250ZW50LWxvYWRlci5lcy5qcz9lMzMwIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy9hcHAvbGlzdC9jb21wb25lbnRzL0NvbnRlbnRMb2FkZXIudnVlPzliNmIiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vYXBwL2xpc3QvY29tcG9uZW50cy9Db250ZW50TG9hZGVyLnZ1ZT85NzdkIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL2FwcC9saXN0L2NvbXBvbmVudHMvQ29udGVudExvYWRlci52dWU/MjJjNSIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvYXBwL2xpc3QvQXBwLnZ1ZT8yMDFkIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL2FwcC9saXN0L0FwcC52dWU/N2U1NCIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9hcHAvbGlzdC9BcHAudnVlPzU0NTMiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vYXBwL2xpc3QvaW5kZXguanM/MGVjZSIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvZXh0ZXJuYWwgdmFyIFwialF1ZXJ5XCI/YTIwYiIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9hcHAvdXRpbHMvZmluZGVyLmpzPzEyMjAiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vYXBwL2NvbHVtbnMvZmluZGVyLmpzPzQ5ZTYiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL3RpbnktY29va2llL2Rpc3QvdGlueS1jb29raWUubWpzPzk4ZWYiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vYXBwL3V0aWxzL2dldC1maWx0ZXJzLmpzP2I4NDUiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vYXBwL2NvbHVtbnMvaW5kZXguanM/OWMzMiIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9hcHAvZmlsdGVycy9pbmRleC5qcz80ZGY0Iiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL2FwcC9tYWluLmpzP2YxNjEiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBWdWUuanMgdjIuNy4xNlxuICogKGMpIDIwMTQtMjAyMyBFdmFuIFlvdVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG52YXIgZW1wdHlPYmplY3QgPSBPYmplY3QuZnJlZXplKHt9KTtcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbi8vIFRoZXNlIGhlbHBlcnMgcHJvZHVjZSBiZXR0ZXIgVk0gY29kZSBpbiBKUyBlbmdpbmVzIGR1ZSB0byB0aGVpclxuLy8gZXhwbGljaXRuZXNzIGFuZCBmdW5jdGlvbiBpbmxpbmluZy5cbmZ1bmN0aW9uIGlzVW5kZWYodikge1xuICAgIHJldHVybiB2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzRGVmKHYpIHtcbiAgICByZXR1cm4gdiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGw7XG59XG5mdW5jdGlvbiBpc1RydWUodikge1xuICAgIHJldHVybiB2ID09PSB0cnVlO1xufVxuZnVuY3Rpb24gaXNGYWxzZSh2KSB7XG4gICAgcmV0dXJuIHYgPT09IGZhbHNlO1xufVxuLyoqXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBwcmltaXRpdmUuXG4gKi9cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcgfHxcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpO1xufVxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG4vKipcbiAqIFF1aWNrIG9iamVjdCBjaGVjayAtIHRoaXMgaXMgcHJpbWFyaWx5IHVzZWQgdG8gdGVsbFxuICogb2JqZWN0cyBmcm9tIHByaW1pdGl2ZSB2YWx1ZXMgd2hlbiB3ZSBrbm93IHRoZSB2YWx1ZVxuICogaXMgYSBKU09OLWNvbXBsaWFudCB0eXBlLlxuICovXG5mdW5jdGlvbiBpc09iamVjdChvYmopIHtcbiAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnO1xufVxuLyoqXG4gKiBHZXQgdGhlIHJhdyB0eXBlIHN0cmluZyBvZiBhIHZhbHVlLCBlLmcuLCBbb2JqZWN0IE9iamVjdF0uXG4gKi9cbnZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuZnVuY3Rpb24gdG9SYXdUeXBlKHZhbHVlKSB7XG4gICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKHZhbHVlKS5zbGljZSg4LCAtMSk7XG59XG4vKipcbiAqIFN0cmljdCBvYmplY3QgdHlwZSBjaGVjay4gT25seSByZXR1cm5zIHRydWVcbiAqIGZvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xufVxuZnVuY3Rpb24gaXNSZWdFeHAodikge1xuICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbCh2KSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG4vKipcbiAqIENoZWNrIGlmIHZhbCBpcyBhIHZhbGlkIGFycmF5IGluZGV4LlxuICovXG5mdW5jdGlvbiBpc1ZhbGlkQXJyYXlJbmRleCh2YWwpIHtcbiAgICB2YXIgbiA9IHBhcnNlRmxvYXQoU3RyaW5nKHZhbCkpO1xuICAgIHJldHVybiBuID49IDAgJiYgTWF0aC5mbG9vcihuKSA9PT0gbiAmJiBpc0Zpbml0ZSh2YWwpO1xufVxuZnVuY3Rpb24gaXNQcm9taXNlKHZhbCkge1xuICAgIHJldHVybiAoaXNEZWYodmFsKSAmJlxuICAgICAgICB0eXBlb2YgdmFsLnRoZW4gPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgdHlwZW9mIHZhbC5jYXRjaCA9PT0gJ2Z1bmN0aW9uJyk7XG59XG4vKipcbiAqIENvbnZlcnQgYSB2YWx1ZSB0byBhIHN0cmluZyB0aGF0IGlzIGFjdHVhbGx5IHJlbmRlcmVkLlxuICovXG5mdW5jdGlvbiB0b1N0cmluZyh2YWwpIHtcbiAgICByZXR1cm4gdmFsID09IG51bGxcbiAgICAgICAgPyAnJ1xuICAgICAgICA6IEFycmF5LmlzQXJyYXkodmFsKSB8fCAoaXNQbGFpbk9iamVjdCh2YWwpICYmIHZhbC50b1N0cmluZyA9PT0gX3RvU3RyaW5nKVxuICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeSh2YWwsIHJlcGxhY2VyLCAyKVxuICAgICAgICAgICAgOiBTdHJpbmcodmFsKTtcbn1cbmZ1bmN0aW9uIHJlcGxhY2VyKF9rZXksIHZhbCkge1xuICAgIC8vIGF2b2lkIGNpcmN1bGFyIGRlcHMgZnJvbSB2M1xuICAgIGlmICh2YWwgJiYgdmFsLl9fdl9pc1JlZikge1xuICAgICAgICByZXR1cm4gdmFsLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufVxuLyoqXG4gKiBDb252ZXJ0IGFuIGlucHV0IHZhbHVlIHRvIGEgbnVtYmVyIGZvciBwZXJzaXN0ZW5jZS5cbiAqIElmIHRoZSBjb252ZXJzaW9uIGZhaWxzLCByZXR1cm4gb3JpZ2luYWwgc3RyaW5nLlxuICovXG5mdW5jdGlvbiB0b051bWJlcih2YWwpIHtcbiAgICB2YXIgbiA9IHBhcnNlRmxvYXQodmFsKTtcbiAgICByZXR1cm4gaXNOYU4obikgPyB2YWwgOiBuO1xufVxuLyoqXG4gKiBNYWtlIGEgbWFwIGFuZCByZXR1cm4gYSBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgYSBrZXlcbiAqIGlzIGluIHRoYXQgbWFwLlxuICovXG5mdW5jdGlvbiBtYWtlTWFwKHN0ciwgZXhwZWN0c0xvd2VyQ2FzZSkge1xuICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBsaXN0ID0gc3RyLnNwbGl0KCcsJyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1hcFtsaXN0W2ldXSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBleHBlY3RzTG93ZXJDYXNlID8gZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gbWFwW3ZhbC50b0xvd2VyQ2FzZSgpXTsgfSA6IGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIG1hcFt2YWxdOyB9O1xufVxuLyoqXG4gKiBDaGVjayBpZiBhIHRhZyBpcyBhIGJ1aWx0LWluIHRhZy5cbiAqL1xudmFyIGlzQnVpbHRJblRhZyA9IG1ha2VNYXAoJ3Nsb3QsY29tcG9uZW50JywgdHJ1ZSk7XG4vKipcbiAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBpcyBhIHJlc2VydmVkIGF0dHJpYnV0ZS5cbiAqL1xudmFyIGlzUmVzZXJ2ZWRBdHRyaWJ1dGUgPSBtYWtlTWFwKCdrZXkscmVmLHNsb3Qsc2xvdC1zY29wZSxpcycpO1xuLyoqXG4gKiBSZW1vdmUgYW4gaXRlbSBmcm9tIGFuIGFycmF5LlxuICovXG5mdW5jdGlvbiByZW1vdmUkMihhcnIsIGl0ZW0pIHtcbiAgICB2YXIgbGVuID0gYXJyLmxlbmd0aDtcbiAgICBpZiAobGVuKSB7XG4gICAgICAgIC8vIGZhc3QgcGF0aCBmb3IgdGhlIG9ubHkgLyBsYXN0IGl0ZW1cbiAgICAgICAgaWYgKGl0ZW0gPT09IGFycltsZW4gLSAxXSkge1xuICAgICAgICAgICAgYXJyLmxlbmd0aCA9IGxlbiAtIDE7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyB0aGUgcHJvcGVydHkuXG4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5mdW5jdGlvbiBoYXNPd24ob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG59XG4vKipcbiAqIENyZWF0ZSBhIGNhY2hlZCB2ZXJzaW9uIG9mIGEgcHVyZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY2FjaGVkKGZuKSB7XG4gICAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gY2FjaGVkRm4oc3RyKSB7XG4gICAgICAgIHZhciBoaXQgPSBjYWNoZVtzdHJdO1xuICAgICAgICByZXR1cm4gaGl0IHx8IChjYWNoZVtzdHJdID0gZm4oc3RyKSk7XG4gICAgfTtcbn1cbi8qKlxuICogQ2FtZWxpemUgYSBoeXBoZW4tZGVsaW1pdGVkIHN0cmluZy5cbiAqL1xudmFyIGNhbWVsaXplUkUgPSAvLShcXHcpL2c7XG52YXIgY2FtZWxpemUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZShjYW1lbGl6ZVJFLCBmdW5jdGlvbiAoXywgYykgeyByZXR1cm4gKGMgPyBjLnRvVXBwZXJDYXNlKCkgOiAnJyk7IH0pO1xufSk7XG4vKipcbiAqIENhcGl0YWxpemUgYSBzdHJpbmcuXG4gKi9cbnZhciBjYXBpdGFsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcbiAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xufSk7XG4vKipcbiAqIEh5cGhlbmF0ZSBhIGNhbWVsQ2FzZSBzdHJpbmcuXG4gKi9cbnZhciBoeXBoZW5hdGVSRSA9IC9cXEIoW0EtWl0pL2c7XG52YXIgaHlwaGVuYXRlID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoaHlwaGVuYXRlUkUsICctJDEnKS50b0xvd2VyQ2FzZSgpO1xufSk7XG4vKipcbiAqIFNpbXBsZSBiaW5kIHBvbHlmaWxsIGZvciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3Qgc3VwcG9ydCBpdCxcbiAqIGUuZy4sIFBoYW50b21KUyAxLnguIFRlY2huaWNhbGx5LCB3ZSBkb24ndCBuZWVkIHRoaXMgYW55bW9yZVxuICogc2luY2UgbmF0aXZlIGJpbmQgaXMgbm93IHBlcmZvcm1hbnQgZW5vdWdoIGluIG1vc3QgYnJvd3NlcnMuXG4gKiBCdXQgcmVtb3ZpbmcgaXQgd291bGQgbWVhbiBicmVha2luZyBjb2RlIHRoYXQgd2FzIGFibGUgdG8gcnVuIGluXG4gKiBQaGFudG9tSlMgMS54LCBzbyB0aGlzIG11c3QgYmUga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIHBvbHlmaWxsQmluZChmbiwgY3R4KSB7XG4gICAgZnVuY3Rpb24gYm91bmRGbihhKSB7XG4gICAgICAgIHZhciBsID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGxcbiAgICAgICAgICAgID8gbCA+IDFcbiAgICAgICAgICAgICAgICA/IGZuLmFwcGx5KGN0eCwgYXJndW1lbnRzKVxuICAgICAgICAgICAgICAgIDogZm4uY2FsbChjdHgsIGEpXG4gICAgICAgICAgICA6IGZuLmNhbGwoY3R4KTtcbiAgICB9XG4gICAgYm91bmRGbi5fbGVuZ3RoID0gZm4ubGVuZ3RoO1xuICAgIHJldHVybiBib3VuZEZuO1xufVxuZnVuY3Rpb24gbmF0aXZlQmluZChmbiwgY3R4KSB7XG4gICAgcmV0dXJuIGZuLmJpbmQoY3R4KTtcbn1cbi8vIEB0cy1leHBlY3QtZXJyb3IgYmluZCBjYW5ub3QgYmUgYHVuZGVmaW5lZGBcbnZhciBiaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPyBuYXRpdmVCaW5kIDogcG9seWZpbGxCaW5kO1xuLyoqXG4gKiBDb252ZXJ0IGFuIEFycmF5LWxpa2Ugb2JqZWN0IHRvIGEgcmVhbCBBcnJheS5cbiAqL1xuZnVuY3Rpb24gdG9BcnJheShsaXN0LCBzdGFydCkge1xuICAgIHN0YXJ0ID0gc3RhcnQgfHwgMDtcbiAgICB2YXIgaSA9IGxpc3QubGVuZ3RoIC0gc3RhcnQ7XG4gICAgdmFyIHJldCA9IG5ldyBBcnJheShpKTtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIHJldFtpXSA9IGxpc3RbaSArIHN0YXJ0XTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cbi8qKlxuICogTWl4IHByb3BlcnRpZXMgaW50byB0YXJnZXQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBleHRlbmQodG8sIF9mcm9tKSB7XG4gICAgZm9yICh2YXIga2V5IGluIF9mcm9tKSB7XG4gICAgICAgIHRvW2tleV0gPSBfZnJvbVtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gdG87XG59XG4vKipcbiAqIE1lcmdlIGFuIEFycmF5IG9mIE9iamVjdHMgaW50byBhIHNpbmdsZSBPYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHRvT2JqZWN0KGFycikge1xuICAgIHZhciByZXMgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYXJyW2ldKSB7XG4gICAgICAgICAgICBleHRlbmQocmVzLCBhcnJbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyoqXG4gKiBQZXJmb3JtIG5vIG9wZXJhdGlvbi5cbiAqIFN0dWJiaW5nIGFyZ3MgdG8gbWFrZSBGbG93IGhhcHB5IHdpdGhvdXQgbGVhdmluZyB1c2VsZXNzIHRyYW5zcGlsZWQgY29kZVxuICogd2l0aCAuLi5yZXN0IChodHRwczovL2Zsb3cub3JnL2Jsb2cvMjAxNy8wNS8wNy9TdHJpY3QtRnVuY3Rpb24tQ2FsbC1Bcml0eS8pLlxuICovXG5mdW5jdGlvbiBub29wKGEsIGIsIGMpIHsgfVxuLyoqXG4gKiBBbHdheXMgcmV0dXJuIGZhbHNlLlxuICovXG52YXIgbm8gPSBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gZmFsc2U7IH07XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXG4vKipcbiAqIFJldHVybiB0aGUgc2FtZSB2YWx1ZS5cbiAqL1xudmFyIGlkZW50aXR5ID0gZnVuY3Rpb24gKF8pIHsgcmV0dXJuIF87IH07XG4vKipcbiAqIENoZWNrIGlmIHR3byB2YWx1ZXMgYXJlIGxvb3NlbHkgZXF1YWwgLSB0aGF0IGlzLFxuICogaWYgdGhleSBhcmUgcGxhaW4gb2JqZWN0cywgZG8gdGhleSBoYXZlIHRoZSBzYW1lIHNoYXBlP1xuICovXG5mdW5jdGlvbiBsb29zZUVxdWFsKGEsIGIpIHtcbiAgICBpZiAoYSA9PT0gYilcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgdmFyIGlzT2JqZWN0QSA9IGlzT2JqZWN0KGEpO1xuICAgIHZhciBpc09iamVjdEIgPSBpc09iamVjdChiKTtcbiAgICBpZiAoaXNPYmplY3RBICYmIGlzT2JqZWN0Qikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGlzQXJyYXlBID0gQXJyYXkuaXNBcnJheShhKTtcbiAgICAgICAgICAgIHZhciBpc0FycmF5QiA9IEFycmF5LmlzQXJyYXkoYik7XG4gICAgICAgICAgICBpZiAoaXNBcnJheUEgJiYgaXNBcnJheUIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICBhLmV2ZXJ5KGZ1bmN0aW9uIChlLCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9vc2VFcXVhbChlLCBiW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5nZXRUaW1lKCkgPT09IGIuZ2V0VGltZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWlzQXJyYXlBICYmICFpc0FycmF5Qikge1xuICAgICAgICAgICAgICAgIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKGEpO1xuICAgICAgICAgICAgICAgIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuICAgICAgICAgICAgICAgIHJldHVybiAoa2V5c0EubGVuZ3RoID09PSBrZXlzQi5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAga2V5c0EuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvb3NlRXF1YWwoYVtrZXldLCBiW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICghaXNPYmplY3RBICYmICFpc09iamVjdEIpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhhKSA9PT0gU3RyaW5nKGIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbi8qKlxuICogUmV0dXJuIHRoZSBmaXJzdCBpbmRleCBhdCB3aGljaCBhIGxvb3NlbHkgZXF1YWwgdmFsdWUgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgYXJyYXkgKGlmIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGUgYXJyYXkgbXVzdFxuICogY29udGFpbiBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgc2hhcGUpLCBvciAtMSBpZiBpdCBpcyBub3QgcHJlc2VudC5cbiAqL1xuZnVuY3Rpb24gbG9vc2VJbmRleE9mKGFyciwgdmFsKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGxvb3NlRXF1YWwoYXJyW2ldLCB2YWwpKVxuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbn1cbi8qKlxuICogRW5zdXJlIGEgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgb25jZS5cbiAqL1xuZnVuY3Rpb24gb25jZShmbikge1xuICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzI3BvbHlmaWxsXG5mdW5jdGlvbiBoYXNDaGFuZ2VkKHgsIHkpIHtcbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgICByZXR1cm4geCA9PT0gMCAmJiAxIC8geCAhPT0gMSAvIHk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4geCA9PT0geCB8fCB5ID09PSB5O1xuICAgIH1cbn1cblxudmFyIFNTUl9BVFRSID0gJ2RhdGEtc2VydmVyLXJlbmRlcmVkJztcbnZhciBBU1NFVF9UWVBFUyA9IFsnY29tcG9uZW50JywgJ2RpcmVjdGl2ZScsICdmaWx0ZXInXTtcbnZhciBMSUZFQ1lDTEVfSE9PS1MgPSBbXG4gICAgJ2JlZm9yZUNyZWF0ZScsXG4gICAgJ2NyZWF0ZWQnLFxuICAgICdiZWZvcmVNb3VudCcsXG4gICAgJ21vdW50ZWQnLFxuICAgICdiZWZvcmVVcGRhdGUnLFxuICAgICd1cGRhdGVkJyxcbiAgICAnYmVmb3JlRGVzdHJveScsXG4gICAgJ2Rlc3Ryb3llZCcsXG4gICAgJ2FjdGl2YXRlZCcsXG4gICAgJ2RlYWN0aXZhdGVkJyxcbiAgICAnZXJyb3JDYXB0dXJlZCcsXG4gICAgJ3NlcnZlclByZWZldGNoJyxcbiAgICAncmVuZGVyVHJhY2tlZCcsXG4gICAgJ3JlbmRlclRyaWdnZXJlZCdcbl07XG5cbnZhciBjb25maWcgPSB7XG4gICAgLyoqXG4gICAgICogT3B0aW9uIG1lcmdlIHN0cmF0ZWdpZXMgKHVzZWQgaW4gY29yZS91dGlsL29wdGlvbnMpXG4gICAgICovXG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgb3B0aW9uTWVyZ2VTdHJhdGVnaWVzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gc3VwcHJlc3Mgd2FybmluZ3MuXG4gICAgICovXG4gICAgc2lsZW50OiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBTaG93IHByb2R1Y3Rpb24gbW9kZSB0aXAgbWVzc2FnZSBvbiBib290P1xuICAgICAqL1xuICAgIHByb2R1Y3Rpb25UaXA6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBlbmFibGUgZGV2dG9vbHNcbiAgICAgKi9cbiAgICBkZXZ0b29sczogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyxcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHJlY29yZCBwZXJmXG4gICAgICovXG4gICAgcGVyZm9ybWFuY2U6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEVycm9yIGhhbmRsZXIgZm9yIHdhdGNoZXIgZXJyb3JzXG4gICAgICovXG4gICAgZXJyb3JIYW5kbGVyOiBudWxsLFxuICAgIC8qKlxuICAgICAqIFdhcm4gaGFuZGxlciBmb3Igd2F0Y2hlciB3YXJuc1xuICAgICAqL1xuICAgIHdhcm5IYW5kbGVyOiBudWxsLFxuICAgIC8qKlxuICAgICAqIElnbm9yZSBjZXJ0YWluIGN1c3RvbSBlbGVtZW50c1xuICAgICAqL1xuICAgIGlnbm9yZWRFbGVtZW50czogW10sXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIHVzZXIga2V5IGFsaWFzZXMgZm9yIHYtb25cbiAgICAgKi9cbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICBrZXlDb2RlczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBhIHRhZyBpcyByZXNlcnZlZCBzbyB0aGF0IGl0IGNhbm5vdCBiZSByZWdpc3RlcmVkIGFzIGFcbiAgICAgKiBjb21wb25lbnQuIFRoaXMgaXMgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBtYXkgYmUgb3ZlcndyaXR0ZW4uXG4gICAgICovXG4gICAgaXNSZXNlcnZlZFRhZzogbm8sXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIGlzIHJlc2VydmVkIHNvIHRoYXQgaXQgY2Fubm90IGJlIHVzZWQgYXMgYSBjb21wb25lbnRcbiAgICAgKiBwcm9wLiBUaGlzIGlzIHBsYXRmb3JtLWRlcGVuZGVudCBhbmQgbWF5IGJlIG92ZXJ3cml0dGVuLlxuICAgICAqL1xuICAgIGlzUmVzZXJ2ZWRBdHRyOiBubyxcbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBhIHRhZyBpcyBhbiB1bmtub3duIGVsZW1lbnQuXG4gICAgICogUGxhdGZvcm0tZGVwZW5kZW50LlxuICAgICAqL1xuICAgIGlzVW5rbm93bkVsZW1lbnQ6IG5vLFxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgbmFtZXNwYWNlIG9mIGFuIGVsZW1lbnRcbiAgICAgKi9cbiAgICBnZXRUYWdOYW1lc3BhY2U6IG5vb3AsXG4gICAgLyoqXG4gICAgICogUGFyc2UgdGhlIHJlYWwgdGFnIG5hbWUgZm9yIHRoZSBzcGVjaWZpYyBwbGF0Zm9ybS5cbiAgICAgKi9cbiAgICBwYXJzZVBsYXRmb3JtVGFnTmFtZTogaWRlbnRpdHksXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIG11c3QgYmUgYm91bmQgdXNpbmcgcHJvcGVydHksIGUuZy4gdmFsdWVcbiAgICAgKiBQbGF0Zm9ybS1kZXBlbmRlbnQuXG4gICAgICovXG4gICAgbXVzdFVzZVByb3A6IG5vLFxuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gdXBkYXRlcyBhc3luY2hyb25vdXNseS4gSW50ZW5kZWQgdG8gYmUgdXNlZCBieSBWdWUgVGVzdCBVdGlsc1xuICAgICAqIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHJlZHVjZSBwZXJmb3JtYW5jZSBpZiBzZXQgdG8gZmFsc2UuXG4gICAgICovXG4gICAgYXN5bmM6IHRydWUsXG4gICAgLyoqXG4gICAgICogRXhwb3NlZCBmb3IgbGVnYWN5IHJlYXNvbnNcbiAgICAgKi9cbiAgICBfbGlmZWN5Y2xlSG9va3M6IExJRkVDWUNMRV9IT09LU1xufTtcblxuLyoqXG4gKiB1bmljb2RlIGxldHRlcnMgdXNlZCBmb3IgcGFyc2luZyBodG1sIHRhZ3MsIGNvbXBvbmVudCBuYW1lcyBhbmQgcHJvcGVydHkgcGF0aHMuXG4gKiB1c2luZyBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUzL3NlbWFudGljcy1zY3JpcHRpbmcuaHRtbCNwb3RlbnRpYWxjdXN0b21lbGVtZW50bmFtZVxuICogc2tpcHBpbmcgXFx1MTAwMDAtXFx1RUZGRkYgZHVlIHRvIGl0IGZyZWV6aW5nIHVwIFBoYW50b21KU1xuICovXG52YXIgdW5pY29kZVJlZ0V4cCA9IC9hLXpBLVpcXHUwMEI3XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjAzRi1cXHUyMDQwXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZELztcbi8qKlxuICogQ2hlY2sgaWYgYSBzdHJpbmcgc3RhcnRzIHdpdGggJCBvciBfXG4gKi9cbmZ1bmN0aW9uIGlzUmVzZXJ2ZWQoc3RyKSB7XG4gICAgdmFyIGMgPSAoc3RyICsgJycpLmNoYXJDb2RlQXQoMCk7XG4gICAgcmV0dXJuIGMgPT09IDB4MjQgfHwgYyA9PT0gMHg1Zjtcbn1cbi8qKlxuICogRGVmaW5lIGEgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGRlZihvYmosIGtleSwgdmFsLCBlbnVtZXJhYmxlKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICAgIHZhbHVlOiB2YWwsXG4gICAgICAgIGVudW1lcmFibGU6ICEhZW51bWVyYWJsZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xufVxuLyoqXG4gKiBQYXJzZSBzaW1wbGUgcGF0aC5cbiAqL1xudmFyIGJhaWxSRSA9IG5ldyBSZWdFeHAoXCJbXlwiLmNvbmNhdCh1bmljb2RlUmVnRXhwLnNvdXJjZSwgXCIuJF9cXFxcZF1cIikpO1xuZnVuY3Rpb24gcGFyc2VQYXRoKHBhdGgpIHtcbiAgICBpZiAoYmFpbFJFLnRlc3QocGF0aCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFvYmopXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgb2JqID0gb2JqW3NlZ21lbnRzW2ldXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH07XG59XG5cbi8vIGNhbiB3ZSB1c2UgX19wcm90b19fP1xudmFyIGhhc1Byb3RvID0gJ19fcHJvdG9fXycgaW4ge307XG4vLyBCcm93c2VyIGVudmlyb25tZW50IHNuaWZmaW5nXG52YXIgaW5Ccm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgVUEgPSBpbkJyb3dzZXIgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbnZhciBpc0lFID0gVUEgJiYgL21zaWV8dHJpZGVudC8udGVzdChVQSk7XG52YXIgaXNJRTkgPSBVQSAmJiBVQS5pbmRleE9mKCdtc2llIDkuMCcpID4gMDtcbnZhciBpc0VkZ2UgPSBVQSAmJiBVQS5pbmRleE9mKCdlZGdlLycpID4gMDtcblVBICYmIFVBLmluZGV4T2YoJ2FuZHJvaWQnKSA+IDA7XG52YXIgaXNJT1MgPSBVQSAmJiAvaXBob25lfGlwYWR8aXBvZHxpb3MvLnRlc3QoVUEpO1xuVUEgJiYgL2Nocm9tZVxcL1xcZCsvLnRlc3QoVUEpICYmICFpc0VkZ2U7XG5VQSAmJiAvcGhhbnRvbWpzLy50ZXN0KFVBKTtcbnZhciBpc0ZGID0gVUEgJiYgVUEubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKTtcbi8vIEZpcmVmb3ggaGFzIGEgXCJ3YXRjaFwiIGZ1bmN0aW9uIG9uIE9iamVjdC5wcm90b3R5cGUuLi5cbi8vIEB0cy1leHBlY3QtZXJyb3IgZmlyZWJveCBzdXBwb3J0XG52YXIgbmF0aXZlV2F0Y2ggPSB7fS53YXRjaDtcbnZhciBzdXBwb3J0c1Bhc3NpdmUgPSBmYWxzZTtcbmlmIChpbkJyb3dzZXIpIHtcbiAgICB0cnkge1xuICAgICAgICB2YXIgb3B0cyA9IHt9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0cywgJ3Bhc3NpdmUnLCB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgICAgIHN1cHBvcnRzUGFzc2l2ZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMjg1XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0LXBhc3NpdmUnLCBudWxsLCBvcHRzKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHsgfVxufVxuLy8gdGhpcyBuZWVkcyB0byBiZSBsYXp5LWV2YWxlZCBiZWNhdXNlIHZ1ZSBtYXkgYmUgcmVxdWlyZWQgYmVmb3JlXG4vLyB2dWUtc2VydmVyLXJlbmRlcmVyIGNhbiBzZXQgVlVFX0VOVlxudmFyIF9pc1NlcnZlcjtcbnZhciBpc1NlcnZlclJlbmRlcmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoX2lzU2VydmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghaW5Ccm93c2VyICYmIHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAvLyBkZXRlY3QgcHJlc2VuY2Ugb2YgdnVlLXNlcnZlci1yZW5kZXJlciBhbmQgYXZvaWRcbiAgICAgICAgICAgIC8vIFdlYnBhY2sgc2hpbW1pbmcgdGhlIHByb2Nlc3NcbiAgICAgICAgICAgIF9pc1NlcnZlciA9XG4gICAgICAgICAgICAgICAgZ2xvYmFsWydwcm9jZXNzJ10gJiYgZ2xvYmFsWydwcm9jZXNzJ10uZW52LlZVRV9FTlYgPT09ICdzZXJ2ZXInO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX2lzU2VydmVyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9pc1NlcnZlcjtcbn07XG4vLyBkZXRlY3QgZGV2dG9vbHNcbnZhciBkZXZ0b29scyA9IGluQnJvd3NlciAmJiB3aW5kb3cuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBpc05hdGl2ZShDdG9yKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSAnZnVuY3Rpb24nICYmIC9uYXRpdmUgY29kZS8udGVzdChDdG9yLnRvU3RyaW5nKCkpO1xufVxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmXG4gICAgaXNOYXRpdmUoU3ltYm9sKSAmJlxuICAgIHR5cGVvZiBSZWZsZWN0ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIGlzTmF0aXZlKFJlZmxlY3Qub3duS2V5cyk7XG52YXIgX1NldDsgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8gaWYgKHR5cGVvZiBTZXQgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFNldCkpIHtcbiAgICAvLyB1c2UgbmF0aXZlIFNldCB3aGVuIGF2YWlsYWJsZS5cbiAgICBfU2V0ID0gU2V0O1xufVxuZWxzZSB7XG4gICAgLy8gYSBub24tc3RhbmRhcmQgU2V0IHBvbHlmaWxsIHRoYXQgb25seSB3b3JrcyB3aXRoIHByaW1pdGl2ZSBrZXlzLlxuICAgIF9TZXQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZ1bmN0aW9uIFNldCgpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldFtrZXldID09PSB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICBTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0W2tleV0gPSB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICBTZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5zZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gU2V0O1xuICAgIH0oKSk7XG59XG5cbnZhciBjdXJyZW50SW5zdGFuY2UgPSBudWxsO1xuLyoqXG4gKiBUaGlzIGlzIGV4cG9zZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB2MyAoZS5nLiBzb21lIGZ1bmN0aW9ucyBpbiBWdWVVc2VcbiAqIHJlbGllcyBvbiBpdCkuIERvIG5vdCB1c2UgdGhpcyBpbnRlcm5hbGx5LCBqdXN0IHVzZSBgY3VycmVudEluc3RhbmNlYC5cbiAqXG4gKiBAaW50ZXJuYWwgdGhpcyBmdW5jdGlvbiBuZWVkcyBtYW51YWwgdHlwZSBkZWNsYXJhdGlvbiBiZWNhdXNlIGl0IHJlbGllc1xuICogb24gcHJldmlvdXNseSBtYW51YWxseSBhdXRob3JlZCB0eXBlcyBmcm9tIFZ1ZSAyXG4gKi9cbmZ1bmN0aW9uIGdldEN1cnJlbnRJbnN0YW5jZSgpIHtcbiAgICByZXR1cm4gY3VycmVudEluc3RhbmNlICYmIHsgcHJveHk6IGN1cnJlbnRJbnN0YW5jZSB9O1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gc2V0Q3VycmVudEluc3RhbmNlKHZtKSB7XG4gICAgaWYgKHZtID09PSB2b2lkIDApIHsgdm0gPSBudWxsOyB9XG4gICAgaWYgKCF2bSlcbiAgICAgICAgY3VycmVudEluc3RhbmNlICYmIGN1cnJlbnRJbnN0YW5jZS5fc2NvcGUub2ZmKCk7XG4gICAgY3VycmVudEluc3RhbmNlID0gdm07XG4gICAgdm0gJiYgdm0uX3Njb3BlLm9uKCk7XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbnZhciBWTm9kZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBWTm9kZSh0YWcsIGRhdGEsIGNoaWxkcmVuLCB0ZXh0LCBlbG0sIGNvbnRleHQsIGNvbXBvbmVudE9wdGlvbnMsIGFzeW5jRmFjdG9yeSkge1xuICAgICAgICB0aGlzLnRhZyA9IHRhZztcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgICAgICB0aGlzLmVsbSA9IGVsbTtcbiAgICAgICAgdGhpcy5ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy5mbkNvbnRleHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZm5PcHRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmZuU2NvcGVJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5rZXkgPSBkYXRhICYmIGRhdGEua2V5O1xuICAgICAgICB0aGlzLmNvbXBvbmVudE9wdGlvbnMgPSBjb21wb25lbnRPcHRpb25zO1xuICAgICAgICB0aGlzLmNvbXBvbmVudEluc3RhbmNlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5yYXcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc1N0YXRpYyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUm9vdEluc2VydCA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNDb21tZW50ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNDbG9uZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc09uY2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hc3luY0ZhY3RvcnkgPSBhc3luY0ZhY3Rvcnk7XG4gICAgICAgIHRoaXMuYXN5bmNNZXRhID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmlzQXN5bmNQbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVk5vZGUucHJvdG90eXBlLCBcImNoaWxkXCIsIHtcbiAgICAgICAgLy8gREVQUkVDQVRFRDogYWxpYXMgZm9yIGNvbXBvbmVudEluc3RhbmNlIGZvciBiYWNrd2FyZHMgY29tcGF0LlxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIFZOb2RlO1xufSgpKTtcbnZhciBjcmVhdGVFbXB0eVZOb2RlID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgICBpZiAodGV4dCA9PT0gdm9pZCAwKSB7IHRleHQgPSAnJzsgfVxuICAgIHZhciBub2RlID0gbmV3IFZOb2RlKCk7XG4gICAgbm9kZS50ZXh0ID0gdGV4dDtcbiAgICBub2RlLmlzQ29tbWVudCA9IHRydWU7XG4gICAgcmV0dXJuIG5vZGU7XG59O1xuZnVuY3Rpb24gY3JlYXRlVGV4dFZOb2RlKHZhbCkge1xuICAgIHJldHVybiBuZXcgVk5vZGUodW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgU3RyaW5nKHZhbCkpO1xufVxuLy8gb3B0aW1pemVkIHNoYWxsb3cgY2xvbmVcbi8vIHVzZWQgZm9yIHN0YXRpYyBub2RlcyBhbmQgc2xvdCBub2RlcyBiZWNhdXNlIHRoZXkgbWF5IGJlIHJldXNlZCBhY3Jvc3Ncbi8vIG11bHRpcGxlIHJlbmRlcnMsIGNsb25pbmcgdGhlbSBhdm9pZHMgZXJyb3JzIHdoZW4gRE9NIG1hbmlwdWxhdGlvbnMgcmVseVxuLy8gb24gdGhlaXIgZWxtIHJlZmVyZW5jZS5cbmZ1bmN0aW9uIGNsb25lVk5vZGUodm5vZGUpIHtcbiAgICB2YXIgY2xvbmVkID0gbmV3IFZOb2RlKHZub2RlLnRhZywgdm5vZGUuZGF0YSwgXG4gICAgLy8gIzc5NzVcbiAgICAvLyBjbG9uZSBjaGlsZHJlbiBhcnJheSB0byBhdm9pZCBtdXRhdGluZyBvcmlnaW5hbCBpbiBjYXNlIG9mIGNsb25pbmdcbiAgICAvLyBhIGNoaWxkLlxuICAgIHZub2RlLmNoaWxkcmVuICYmIHZub2RlLmNoaWxkcmVuLnNsaWNlKCksIHZub2RlLnRleHQsIHZub2RlLmVsbSwgdm5vZGUuY29udGV4dCwgdm5vZGUuY29tcG9uZW50T3B0aW9ucywgdm5vZGUuYXN5bmNGYWN0b3J5KTtcbiAgICBjbG9uZWQubnMgPSB2bm9kZS5ucztcbiAgICBjbG9uZWQuaXNTdGF0aWMgPSB2bm9kZS5pc1N0YXRpYztcbiAgICBjbG9uZWQua2V5ID0gdm5vZGUua2V5O1xuICAgIGNsb25lZC5pc0NvbW1lbnQgPSB2bm9kZS5pc0NvbW1lbnQ7XG4gICAgY2xvbmVkLmZuQ29udGV4dCA9IHZub2RlLmZuQ29udGV4dDtcbiAgICBjbG9uZWQuZm5PcHRpb25zID0gdm5vZGUuZm5PcHRpb25zO1xuICAgIGNsb25lZC5mblNjb3BlSWQgPSB2bm9kZS5mblNjb3BlSWQ7XG4gICAgY2xvbmVkLmFzeW5jTWV0YSA9IHZub2RlLmFzeW5jTWV0YTtcbiAgICBjbG9uZWQuaXNDbG9uZWQgPSB0cnVlO1xuICAgIHJldHVybiBjbG9uZWQ7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG5cclxudmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xyXG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xyXG59O1xuXG52YXIgdWlkJDIgPSAwO1xudmFyIHBlbmRpbmdDbGVhbnVwRGVwcyA9IFtdO1xudmFyIGNsZWFudXBEZXBzID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGVuZGluZ0NsZWFudXBEZXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBkZXAgPSBwZW5kaW5nQ2xlYW51cERlcHNbaV07XG4gICAgICAgIGRlcC5zdWJzID0gZGVwLnN1YnMuZmlsdGVyKGZ1bmN0aW9uIChzKSB7IHJldHVybiBzOyB9KTtcbiAgICAgICAgZGVwLl9wZW5kaW5nID0gZmFsc2U7XG4gICAgfVxuICAgIHBlbmRpbmdDbGVhbnVwRGVwcy5sZW5ndGggPSAwO1xufTtcbi8qKlxuICogQSBkZXAgaXMgYW4gb2JzZXJ2YWJsZSB0aGF0IGNhbiBoYXZlIG11bHRpcGxlXG4gKiBkaXJlY3RpdmVzIHN1YnNjcmliaW5nIHRvIGl0LlxuICogQGludGVybmFsXG4gKi9cbnZhciBEZXAgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGVwKCkge1xuICAgICAgICAvLyBwZW5kaW5nIHN1YnMgY2xlYW51cFxuICAgICAgICB0aGlzLl9wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaWQgPSB1aWQkMisrO1xuICAgICAgICB0aGlzLnN1YnMgPSBbXTtcbiAgICB9XG4gICAgRGVwLnByb3RvdHlwZS5hZGRTdWIgPSBmdW5jdGlvbiAoc3ViKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKHN1Yik7XG4gICAgfTtcbiAgICBEZXAucHJvdG90eXBlLnJlbW92ZVN1YiA9IGZ1bmN0aW9uIChzdWIpIHtcbiAgICAgICAgLy8gIzEyNjk2IGRlcHMgd2l0aCBtYXNzaXZlIGFtb3VudCBvZiBzdWJzY3JpYmVycyBhcmUgZXh0cmVtZWx5IHNsb3cgdG9cbiAgICAgICAgLy8gY2xlYW4gdXAgaW4gQ2hyb21pdW1cbiAgICAgICAgLy8gdG8gd29ya2Fyb3VuZCB0aGlzLCB3ZSB1bnNldCB0aGUgc3ViIGZvciBub3csIGFuZCBjbGVhciB0aGVtIG9uXG4gICAgICAgIC8vIG5leHQgc2NoZWR1bGVyIGZsdXNoLlxuICAgICAgICB0aGlzLnN1YnNbdGhpcy5zdWJzLmluZGV4T2Yoc3ViKV0gPSBudWxsO1xuICAgICAgICBpZiAoIXRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcGVuZGluZ0NsZWFudXBEZXBzLnB1c2godGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERlcC5wcm90b3R5cGUuZGVwZW5kID0gZnVuY3Rpb24gKGluZm8pIHtcbiAgICAgICAgaWYgKERlcC50YXJnZXQpIHtcbiAgICAgICAgICAgIERlcC50YXJnZXQuYWRkRGVwKHRoaXMpO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaW5mbyAmJiBEZXAudGFyZ2V0Lm9uVHJhY2spIHtcbiAgICAgICAgICAgICAgICBEZXAudGFyZ2V0Lm9uVHJhY2soX19hc3NpZ24oeyBlZmZlY3Q6IERlcC50YXJnZXQgfSwgaW5mbykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBEZXAucHJvdG90eXBlLm5vdGlmeSA9IGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgICAgIC8vIHN0YWJpbGl6ZSB0aGUgc3Vic2NyaWJlciBsaXN0IGZpcnN0XG4gICAgICAgIHZhciBzdWJzID0gdGhpcy5zdWJzLmZpbHRlcihmdW5jdGlvbiAocykgeyByZXR1cm4gczsgfSk7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFjb25maWcuYXN5bmMpIHtcbiAgICAgICAgICAgIC8vIHN1YnMgYXJlbid0IHNvcnRlZCBpbiBzY2hlZHVsZXIgaWYgbm90IHJ1bm5pbmcgYXN5bmNcbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gc29ydCB0aGVtIG5vdyB0byBtYWtlIHN1cmUgdGhleSBmaXJlIGluIGNvcnJlY3RcbiAgICAgICAgICAgIC8vIG9yZGVyXG4gICAgICAgICAgICBzdWJzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuaWQgLSBiLmlkOyB9KTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHN1YnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgc3ViID0gc3Vic1tpXTtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGluZm8pIHtcbiAgICAgICAgICAgICAgICBzdWIub25UcmlnZ2VyICYmXG4gICAgICAgICAgICAgICAgICAgIHN1Yi5vblRyaWdnZXIoX19hc3NpZ24oeyBlZmZlY3Q6IHN1YnNbaV0gfSwgaW5mbykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3ViLnVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gRGVwO1xufSgpKTtcbi8vIFRoZSBjdXJyZW50IHRhcmdldCB3YXRjaGVyIGJlaW5nIGV2YWx1YXRlZC5cbi8vIFRoaXMgaXMgZ2xvYmFsbHkgdW5pcXVlIGJlY2F1c2Ugb25seSBvbmUgd2F0Y2hlclxuLy8gY2FuIGJlIGV2YWx1YXRlZCBhdCBhIHRpbWUuXG5EZXAudGFyZ2V0ID0gbnVsbDtcbnZhciB0YXJnZXRTdGFjayA9IFtdO1xuZnVuY3Rpb24gcHVzaFRhcmdldCh0YXJnZXQpIHtcbiAgICB0YXJnZXRTdGFjay5wdXNoKHRhcmdldCk7XG4gICAgRGVwLnRhcmdldCA9IHRhcmdldDtcbn1cbmZ1bmN0aW9uIHBvcFRhcmdldCgpIHtcbiAgICB0YXJnZXRTdGFjay5wb3AoKTtcbiAgICBEZXAudGFyZ2V0ID0gdGFyZ2V0U3RhY2tbdGFyZ2V0U3RhY2subGVuZ3RoIC0gMV07XG59XG5cbi8qXG4gKiBub3QgdHlwZSBjaGVja2luZyB0aGlzIGZpbGUgYmVjYXVzZSBmbG93IGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGhcbiAqIGR5bmFtaWNhbGx5IGFjY2Vzc2luZyBtZXRob2RzIG9uIEFycmF5IHByb3RvdHlwZVxuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbnZhciBhcnJheU1ldGhvZHMgPSBPYmplY3QuY3JlYXRlKGFycmF5UHJvdG8pO1xudmFyIG1ldGhvZHNUb1BhdGNoID0gW1xuICAgICdwdXNoJyxcbiAgICAncG9wJyxcbiAgICAnc2hpZnQnLFxuICAgICd1bnNoaWZ0JyxcbiAgICAnc3BsaWNlJyxcbiAgICAnc29ydCcsXG4gICAgJ3JldmVyc2UnXG5dO1xuLyoqXG4gKiBJbnRlcmNlcHQgbXV0YXRpbmcgbWV0aG9kcyBhbmQgZW1pdCBldmVudHNcbiAqL1xubWV0aG9kc1RvUGF0Y2guZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgLy8gY2FjaGUgb3JpZ2luYWwgbWV0aG9kXG4gICAgdmFyIG9yaWdpbmFsID0gYXJyYXlQcm90b1ttZXRob2RdO1xuICAgIGRlZihhcnJheU1ldGhvZHMsIG1ldGhvZCwgZnVuY3Rpb24gbXV0YXRvcigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0ID0gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHZhciBvYiA9IHRoaXMuX19vYl9fO1xuICAgICAgICB2YXIgaW5zZXJ0ZWQ7XG4gICAgICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgICAgICBjYXNlICdwdXNoJzpcbiAgICAgICAgICAgIGNhc2UgJ3Vuc2hpZnQnOlxuICAgICAgICAgICAgICAgIGluc2VydGVkID0gYXJncztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NwbGljZSc6XG4gICAgICAgICAgICAgICAgaW5zZXJ0ZWQgPSBhcmdzLnNsaWNlKDIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnNlcnRlZClcbiAgICAgICAgICAgIG9iLm9ic2VydmVBcnJheShpbnNlcnRlZCk7XG4gICAgICAgIC8vIG5vdGlmeSBjaGFuZ2VcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIG9iLmRlcC5ub3RpZnkoe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXkgbXV0YXRpb25cIiAvKiBUcmlnZ2VyT3BUeXBlcy5BUlJBWV9NVVRBVElPTiAqLyxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHRoaXMsXG4gICAgICAgICAgICAgICAga2V5OiBtZXRob2RcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb2IuZGVwLm5vdGlmeSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG59KTtcblxudmFyIGFycmF5S2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFycmF5TWV0aG9kcyk7XG52YXIgTk9fSU5JVElBTF9WQUxVRSA9IHt9O1xuLyoqXG4gKiBJbiBzb21lIGNhc2VzIHdlIG1heSB3YW50IHRvIGRpc2FibGUgb2JzZXJ2YXRpb24gaW5zaWRlIGEgY29tcG9uZW50J3NcbiAqIHVwZGF0ZSBjb21wdXRhdGlvbi5cbiAqL1xudmFyIHNob3VsZE9ic2VydmUgPSB0cnVlO1xuZnVuY3Rpb24gdG9nZ2xlT2JzZXJ2aW5nKHZhbHVlKSB7XG4gICAgc2hvdWxkT2JzZXJ2ZSA9IHZhbHVlO1xufVxuLy8gc3NyIG1vY2sgZGVwXG52YXIgbW9ja0RlcCA9IHtcbiAgICBub3RpZnk6IG5vb3AsXG4gICAgZGVwZW5kOiBub29wLFxuICAgIGFkZFN1Yjogbm9vcCxcbiAgICByZW1vdmVTdWI6IG5vb3Bcbn07XG4vKipcbiAqIE9ic2VydmVyIGNsYXNzIHRoYXQgaXMgYXR0YWNoZWQgdG8gZWFjaCBvYnNlcnZlZFxuICogb2JqZWN0LiBPbmNlIGF0dGFjaGVkLCB0aGUgb2JzZXJ2ZXIgY29udmVydHMgdGhlIHRhcmdldFxuICogb2JqZWN0J3MgcHJvcGVydHkga2V5cyBpbnRvIGdldHRlci9zZXR0ZXJzIHRoYXRcbiAqIGNvbGxlY3QgZGVwZW5kZW5jaWVzIGFuZCBkaXNwYXRjaCB1cGRhdGVzLlxuICovXG52YXIgT2JzZXJ2ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2ZXIodmFsdWUsIHNoYWxsb3csIG1vY2spIHtcbiAgICAgICAgaWYgKHNoYWxsb3cgPT09IHZvaWQgMCkgeyBzaGFsbG93ID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKG1vY2sgPT09IHZvaWQgMCkgeyBtb2NrID0gZmFsc2U7IH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNoYWxsb3cgPSBzaGFsbG93O1xuICAgICAgICB0aGlzLm1vY2sgPSBtb2NrO1xuICAgICAgICAvLyB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgdGhpcy5kZXAgPSBtb2NrID8gbW9ja0RlcCA6IG5ldyBEZXAoKTtcbiAgICAgICAgdGhpcy52bUNvdW50ID0gMDtcbiAgICAgICAgZGVmKHZhbHVlLCAnX19vYl9fJywgdGhpcyk7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKCFtb2NrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc1Byb3RvKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLl9fcHJvdG9fXyA9IGFycmF5TWV0aG9kcztcbiAgICAgICAgICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1wcm90byAqL1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcnJheUtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gYXJyYXlLZXlzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmKHZhbHVlLCBrZXksIGFycmF5TWV0aG9kc1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2hhbGxvdykge1xuICAgICAgICAgICAgICAgIHRoaXMub2JzZXJ2ZUFycmF5KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2FsayB0aHJvdWdoIGFsbCBwcm9wZXJ0aWVzIGFuZCBjb252ZXJ0IHRoZW0gaW50b1xuICAgICAgICAgICAgICogZ2V0dGVyL3NldHRlcnMuIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuXG4gICAgICAgICAgICAgKiB2YWx1ZSB0eXBlIGlzIE9iamVjdC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgICAgICBkZWZpbmVSZWFjdGl2ZSh2YWx1ZSwga2V5LCBOT19JTklUSUFMX1ZBTFVFLCB1bmRlZmluZWQsIHNoYWxsb3csIG1vY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9ic2VydmUgYSBsaXN0IG9mIEFycmF5IGl0ZW1zLlxuICAgICAqL1xuICAgIE9ic2VydmVyLnByb3RvdHlwZS5vYnNlcnZlQXJyYXkgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIG9ic2VydmUodmFsdWVbaV0sIGZhbHNlLCB0aGlzLm1vY2spO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2ZXI7XG59KCkpO1xuLy8gaGVscGVyc1xuLyoqXG4gKiBBdHRlbXB0IHRvIGNyZWF0ZSBhbiBvYnNlcnZlciBpbnN0YW5jZSBmb3IgYSB2YWx1ZSxcbiAqIHJldHVybnMgdGhlIG5ldyBvYnNlcnZlciBpZiBzdWNjZXNzZnVsbHkgb2JzZXJ2ZWQsXG4gKiBvciB0aGUgZXhpc3Rpbmcgb2JzZXJ2ZXIgaWYgdGhlIHZhbHVlIGFscmVhZHkgaGFzIG9uZS5cbiAqL1xuZnVuY3Rpb24gb2JzZXJ2ZSh2YWx1ZSwgc2hhbGxvdywgc3NyTW9ja1JlYWN0aXZpdHkpIHtcbiAgICBpZiAodmFsdWUgJiYgaGFzT3duKHZhbHVlLCAnX19vYl9fJykgJiYgdmFsdWUuX19vYl9fIGluc3RhbmNlb2YgT2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLl9fb2JfXztcbiAgICB9XG4gICAgaWYgKHNob3VsZE9ic2VydmUgJiZcbiAgICAgICAgKHNzck1vY2tSZWFjdGl2aXR5IHx8ICFpc1NlcnZlclJlbmRlcmluZygpKSAmJlxuICAgICAgICAoaXNBcnJheSh2YWx1ZSkgfHwgaXNQbGFpbk9iamVjdCh2YWx1ZSkpICYmXG4gICAgICAgIE9iamVjdC5pc0V4dGVuc2libGUodmFsdWUpICYmXG4gICAgICAgICF2YWx1ZS5fX3Zfc2tpcCAvKiBSZWFjdGl2ZUZsYWdzLlNLSVAgKi8gJiZcbiAgICAgICAgIWlzUmVmKHZhbHVlKSAmJlxuICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgVk5vZGUpKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2ZXIodmFsdWUsIHNoYWxsb3csIHNzck1vY2tSZWFjdGl2aXR5KTtcbiAgICB9XG59XG4vKipcbiAqIERlZmluZSBhIHJlYWN0aXZlIHByb3BlcnR5IG9uIGFuIE9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZGVmaW5lUmVhY3RpdmUob2JqLCBrZXksIHZhbCwgY3VzdG9tU2V0dGVyLCBzaGFsbG93LCBtb2NrLCBvYnNlcnZlRXZlbklmU2hhbGxvdykge1xuICAgIGlmIChvYnNlcnZlRXZlbklmU2hhbGxvdyA9PT0gdm9pZCAwKSB7IG9ic2VydmVFdmVuSWZTaGFsbG93ID0gZmFsc2U7IH1cbiAgICB2YXIgZGVwID0gbmV3IERlcCgpO1xuICAgIHZhciBwcm9wZXJ0eSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpO1xuICAgIGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5jb25maWd1cmFibGUgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gY2F0ZXIgZm9yIHByZS1kZWZpbmVkIGdldHRlci9zZXR0ZXJzXG4gICAgdmFyIGdldHRlciA9IHByb3BlcnR5ICYmIHByb3BlcnR5LmdldDtcbiAgICB2YXIgc2V0dGVyID0gcHJvcGVydHkgJiYgcHJvcGVydHkuc2V0O1xuICAgIGlmICgoIWdldHRlciB8fCBzZXR0ZXIpICYmXG4gICAgICAgICh2YWwgPT09IE5PX0lOSVRJQUxfVkFMVUUgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikpIHtcbiAgICAgICAgdmFsID0gb2JqW2tleV07XG4gICAgfVxuICAgIHZhciBjaGlsZE9iID0gc2hhbGxvdyA/IHZhbCAmJiB2YWwuX19vYl9fIDogb2JzZXJ2ZSh2YWwsIGZhbHNlLCBtb2NrKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIHJlYWN0aXZlR2V0dGVyKCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IHZhbDtcbiAgICAgICAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwLmRlcGVuZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IG9iaixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZ2V0XCIgLyogVHJhY2tPcFR5cGVzLkdFVCAqLyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwLmRlcGVuZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRPYikge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZE9iLmRlcC5kZXBlbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRBcnJheSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXNSZWYodmFsdWUpICYmICFzaGFsbG93ID8gdmFsdWUudmFsdWUgOiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiByZWFjdGl2ZVNldHRlcihuZXdWYWwpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGdldHRlciA/IGdldHRlci5jYWxsKG9iaikgOiB2YWw7XG4gICAgICAgICAgICBpZiAoIWhhc0NoYW5nZWQodmFsdWUsIG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjdXN0b21TZXR0ZXIpIHtcbiAgICAgICAgICAgICAgICBjdXN0b21TZXR0ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZXR0ZXIpIHtcbiAgICAgICAgICAgICAgICBzZXR0ZXIuY2FsbChvYmosIG5ld1ZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChnZXR0ZXIpIHtcbiAgICAgICAgICAgICAgICAvLyAjNzk4MTogZm9yIGFjY2Vzc29yIHByb3BlcnRpZXMgd2l0aG91dCBzZXR0ZXJcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghc2hhbGxvdyAmJiBpc1JlZih2YWx1ZSkgJiYgIWlzUmVmKG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS52YWx1ZSA9IG5ld1ZhbDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWwgPSBuZXdWYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGlsZE9iID0gc2hhbGxvdyA/IG5ld1ZhbCAmJiBuZXdWYWwuX19vYl9fIDogb2JzZXJ2ZShuZXdWYWwsIGZhbHNlLCBtb2NrKTtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgZGVwLm5vdGlmeSh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic2V0XCIgLyogVHJpZ2dlck9wVHlwZXMuU0VUICovLFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IG9iaixcbiAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiBuZXdWYWwsXG4gICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlOiB2YWx1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVwLm5vdGlmeSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRlcDtcbn1cbmZ1bmN0aW9uIHNldCh0YXJnZXQsIGtleSwgdmFsKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpKSkge1xuICAgICAgICB3YXJuKFwiQ2Fubm90IHNldCByZWFjdGl2ZSBwcm9wZXJ0eSBvbiB1bmRlZmluZWQsIG51bGwsIG9yIHByaW1pdGl2ZSB2YWx1ZTogXCIuY29uY2F0KHRhcmdldCkpO1xuICAgIH1cbiAgICBpZiAoaXNSZWFkb25seSh0YXJnZXQpKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcIlNldCBvcGVyYXRpb24gb24ga2V5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgZmFpbGVkOiB0YXJnZXQgaXMgcmVhZG9ubHkuXCIpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgb2IgPSB0YXJnZXQuX19vYl9fO1xuICAgIGlmIChpc0FycmF5KHRhcmdldCkgJiYgaXNWYWxpZEFycmF5SW5kZXgoa2V5KSkge1xuICAgICAgICB0YXJnZXQubGVuZ3RoID0gTWF0aC5tYXgodGFyZ2V0Lmxlbmd0aCwga2V5KTtcbiAgICAgICAgdGFyZ2V0LnNwbGljZShrZXksIDEsIHZhbCk7XG4gICAgICAgIC8vIHdoZW4gbW9ja2luZyBmb3IgU1NSLCBhcnJheSBtZXRob2RzIGFyZSBub3QgaGlqYWNrZWRcbiAgICAgICAgaWYgKG9iICYmICFvYi5zaGFsbG93ICYmIG9iLm1vY2spIHtcbiAgICAgICAgICAgIG9ic2VydmUodmFsLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgaWYgKGtleSBpbiB0YXJnZXQgJiYgIShrZXkgaW4gT2JqZWN0LnByb3RvdHlwZSkpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICB3YXJuKCdBdm9pZCBhZGRpbmcgcmVhY3RpdmUgcHJvcGVydGllcyB0byBhIFZ1ZSBpbnN0YW5jZSBvciBpdHMgcm9vdCAkZGF0YSAnICtcbiAgICAgICAgICAgICAgICAnYXQgcnVudGltZSAtIGRlY2xhcmUgaXQgdXBmcm9udCBpbiB0aGUgZGF0YSBvcHRpb24uJyk7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGlmICghb2IpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGRlZmluZVJlYWN0aXZlKG9iLnZhbHVlLCBrZXksIHZhbCwgdW5kZWZpbmVkLCBvYi5zaGFsbG93LCBvYi5tb2NrKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBvYi5kZXAubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6IFwiYWRkXCIgLyogVHJpZ2dlck9wVHlwZXMuQUREICovLFxuICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIG5ld1ZhbHVlOiB2YWwsXG4gICAgICAgICAgICBvbGRWYWx1ZTogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgb2IuZGVwLm5vdGlmeSgpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufVxuZnVuY3Rpb24gZGVsKHRhcmdldCwga2V5KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpKSkge1xuICAgICAgICB3YXJuKFwiQ2Fubm90IGRlbGV0ZSByZWFjdGl2ZSBwcm9wZXJ0eSBvbiB1bmRlZmluZWQsIG51bGwsIG9yIHByaW1pdGl2ZSB2YWx1ZTogXCIuY29uY2F0KHRhcmdldCkpO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheSh0YXJnZXQpICYmIGlzVmFsaWRBcnJheUluZGV4KGtleSkpIHtcbiAgICAgICAgdGFyZ2V0LnNwbGljZShrZXksIDEpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBvYiA9IHRhcmdldC5fX29iX187XG4gICAgaWYgKHRhcmdldC5faXNWdWUgfHwgKG9iICYmIG9iLnZtQ291bnQpKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgIHdhcm4oJ0F2b2lkIGRlbGV0aW5nIHByb3BlcnRpZXMgb24gYSBWdWUgaW5zdGFuY2Ugb3IgaXRzIHJvb3QgJGRhdGEgJyArXG4gICAgICAgICAgICAgICAgJy0ganVzdCBzZXQgaXQgdG8gbnVsbC4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNSZWFkb25seSh0YXJnZXQpKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgIHdhcm4oXCJEZWxldGUgb3BlcmF0aW9uIG9uIGtleSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGZhaWxlZDogdGFyZ2V0IGlzIHJlYWRvbmx5LlwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZGVsZXRlIHRhcmdldFtrZXldO1xuICAgIGlmICghb2IpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBvYi5kZXAubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6IFwiZGVsZXRlXCIgLyogVHJpZ2dlck9wVHlwZXMuREVMRVRFICovLFxuICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICBrZXk6IGtleVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG9iLmRlcC5ub3RpZnkoKTtcbiAgICB9XG59XG4vKipcbiAqIENvbGxlY3QgZGVwZW5kZW5jaWVzIG9uIGFycmF5IGVsZW1lbnRzIHdoZW4gdGhlIGFycmF5IGlzIHRvdWNoZWQsIHNpbmNlXG4gKiB3ZSBjYW5ub3QgaW50ZXJjZXB0IGFycmF5IGVsZW1lbnQgYWNjZXNzIGxpa2UgcHJvcGVydHkgZ2V0dGVycy5cbiAqL1xuZnVuY3Rpb24gZGVwZW5kQXJyYXkodmFsdWUpIHtcbiAgICBmb3IgKHZhciBlID0gdm9pZCAwLCBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBlID0gdmFsdWVbaV07XG4gICAgICAgIGlmIChlICYmIGUuX19vYl9fKSB7XG4gICAgICAgICAgICBlLl9fb2JfXy5kZXAuZGVwZW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXkoZSkpIHtcbiAgICAgICAgICAgIGRlcGVuZEFycmF5KGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZWFjdGl2ZSh0YXJnZXQpIHtcbiAgICBtYWtlUmVhY3RpdmUodGFyZ2V0LCBmYWxzZSk7XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cbi8qKlxuICogUmV0dXJuIGEgc2hhbGxvd2x5LXJlYWN0aXZlIGNvcHkgb2YgdGhlIG9yaWdpbmFsIG9iamVjdCwgd2hlcmUgb25seSB0aGUgcm9vdFxuICogbGV2ZWwgcHJvcGVydGllcyBhcmUgcmVhY3RpdmUuIEl0IGFsc28gZG9lcyBub3QgYXV0by11bndyYXAgcmVmcyAoZXZlbiBhdCB0aGVcbiAqIHJvb3QgbGV2ZWwpLlxuICovXG5mdW5jdGlvbiBzaGFsbG93UmVhY3RpdmUodGFyZ2V0KSB7XG4gICAgbWFrZVJlYWN0aXZlKHRhcmdldCwgdHJ1ZSk7XG4gICAgZGVmKHRhcmdldCwgXCJfX3ZfaXNTaGFsbG93XCIgLyogUmVhY3RpdmVGbGFncy5JU19TSEFMTE9XICovLCB0cnVlKTtcbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuZnVuY3Rpb24gbWFrZVJlYWN0aXZlKHRhcmdldCwgc2hhbGxvdykge1xuICAgIC8vIGlmIHRyeWluZyB0byBvYnNlcnZlIGEgcmVhZG9ubHkgcHJveHksIHJldHVybiB0aGUgcmVhZG9ubHkgdmVyc2lvbi5cbiAgICBpZiAoIWlzUmVhZG9ubHkodGFyZ2V0KSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgaWYgKGlzQXJyYXkodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHdhcm4oXCJBdm9pZCB1c2luZyBBcnJheSBhcyByb290IHZhbHVlIGZvciBcIi5jb25jYXQoc2hhbGxvdyA/IFwic2hhbGxvd1JlYWN0aXZlKClcIiA6IFwicmVhY3RpdmUoKVwiLCBcIiBhcyBpdCBjYW5ub3QgYmUgdHJhY2tlZCBpbiB3YXRjaCgpIG9yIHdhdGNoRWZmZWN0KCkuIFVzZSBcIikuY29uY2F0KHNoYWxsb3cgPyBcInNoYWxsb3dSZWYoKVwiIDogXCJyZWYoKVwiLCBcIiBpbnN0ZWFkLiBUaGlzIGlzIGEgVnVlLTItb25seSBsaW1pdGF0aW9uLlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZXhpc3RpbmdPYiA9IHRhcmdldCAmJiB0YXJnZXQuX19vYl9fO1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nT2IgJiYgZXhpc3RpbmdPYi5zaGFsbG93ICE9PSBzaGFsbG93KSB7XG4gICAgICAgICAgICAgICAgd2FybihcIlRhcmdldCBpcyBhbHJlYWR5IGEgXCIuY29uY2F0KGV4aXN0aW5nT2Iuc2hhbGxvdyA/IFwiXCIgOiBcIm5vbi1cIiwgXCJzaGFsbG93IHJlYWN0aXZlIG9iamVjdCwgYW5kIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gXCIpLmNvbmNhdChzaGFsbG93ID8gXCJcIiA6IFwibm9uLVwiLCBcInNoYWxsb3cuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgb2IgPSBvYnNlcnZlKHRhcmdldCwgc2hhbGxvdywgaXNTZXJ2ZXJSZW5kZXJpbmcoKSAvKiBzc3IgbW9jayByZWFjdGl2aXR5ICovKTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIW9iKSB7XG4gICAgICAgICAgICBpZiAodGFyZ2V0ID09IG51bGwgfHwgaXNQcmltaXRpdmUodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHdhcm4oXCJ2YWx1ZSBjYW5ub3QgYmUgbWFkZSByZWFjdGl2ZTogXCIuY29uY2F0KFN0cmluZyh0YXJnZXQpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNDb2xsZWN0aW9uVHlwZSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgd2FybihcIlZ1ZSAyIGRvZXMgbm90IHN1cHBvcnQgcmVhY3RpdmUgY29sbGVjdGlvbiB0eXBlcyBzdWNoIGFzIE1hcCBvciBTZXQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gaXNSZWFjdGl2ZSh2YWx1ZSkge1xuICAgIGlmIChpc1JlYWRvbmx5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gaXNSZWFjdGl2ZSh2YWx1ZVtcIl9fdl9yYXdcIiAvKiBSZWFjdGl2ZUZsYWdzLlJBVyAqL10pO1xuICAgIH1cbiAgICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19vYl9fKTtcbn1cbmZ1bmN0aW9uIGlzU2hhbGxvdyh2YWx1ZSkge1xuICAgIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX3ZfaXNTaGFsbG93KTtcbn1cbmZ1bmN0aW9uIGlzUmVhZG9ubHkodmFsdWUpIHtcbiAgICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX192X2lzUmVhZG9ubHkpO1xufVxuZnVuY3Rpb24gaXNQcm94eSh2YWx1ZSkge1xuICAgIHJldHVybiBpc1JlYWN0aXZlKHZhbHVlKSB8fCBpc1JlYWRvbmx5KHZhbHVlKTtcbn1cbmZ1bmN0aW9uIHRvUmF3KG9ic2VydmVkKSB7XG4gICAgdmFyIHJhdyA9IG9ic2VydmVkICYmIG9ic2VydmVkW1wiX192X3Jhd1wiIC8qIFJlYWN0aXZlRmxhZ3MuUkFXICovXTtcbiAgICByZXR1cm4gcmF3ID8gdG9SYXcocmF3KSA6IG9ic2VydmVkO1xufVxuZnVuY3Rpb24gbWFya1Jhdyh2YWx1ZSkge1xuICAgIC8vIG5vbi1leHRlbnNpYmxlIG9iamVjdHMgd29uJ3QgYmUgb2JzZXJ2ZWQgYW55d2F5XG4gICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUodmFsdWUpKSB7XG4gICAgICAgIGRlZih2YWx1ZSwgXCJfX3Zfc2tpcFwiIC8qIFJlYWN0aXZlRmxhZ3MuU0tJUCAqLywgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGlzQ29sbGVjdGlvblR5cGUodmFsdWUpIHtcbiAgICB2YXIgdHlwZSA9IHRvUmF3VHlwZSh2YWx1ZSk7XG4gICAgcmV0dXJuICh0eXBlID09PSAnTWFwJyB8fCB0eXBlID09PSAnV2Vha01hcCcgfHwgdHlwZSA9PT0gJ1NldCcgfHwgdHlwZSA9PT0gJ1dlYWtTZXQnKTtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIFJlZkZsYWcgPSBcIl9fdl9pc1JlZlwiO1xuZnVuY3Rpb24gaXNSZWYocikge1xuICAgIHJldHVybiAhIShyICYmIHIuX192X2lzUmVmID09PSB0cnVlKTtcbn1cbmZ1bmN0aW9uIHJlZiQxKHZhbHVlKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVJlZih2YWx1ZSwgZmFsc2UpO1xufVxuZnVuY3Rpb24gc2hhbGxvd1JlZih2YWx1ZSkge1xuICAgIHJldHVybiBjcmVhdGVSZWYodmFsdWUsIHRydWUpO1xufVxuZnVuY3Rpb24gY3JlYXRlUmVmKHJhd1ZhbHVlLCBzaGFsbG93KSB7XG4gICAgaWYgKGlzUmVmKHJhd1ZhbHVlKSkge1xuICAgICAgICByZXR1cm4gcmF3VmFsdWU7XG4gICAgfVxuICAgIHZhciByZWYgPSB7fTtcbiAgICBkZWYocmVmLCBSZWZGbGFnLCB0cnVlKTtcbiAgICBkZWYocmVmLCBcIl9fdl9pc1NoYWxsb3dcIiAvKiBSZWFjdGl2ZUZsYWdzLklTX1NIQUxMT1cgKi8sIHNoYWxsb3cpO1xuICAgIGRlZihyZWYsICdkZXAnLCBkZWZpbmVSZWFjdGl2ZShyZWYsICd2YWx1ZScsIHJhd1ZhbHVlLCBudWxsLCBzaGFsbG93LCBpc1NlcnZlclJlbmRlcmluZygpKSk7XG4gICAgcmV0dXJuIHJlZjtcbn1cbmZ1bmN0aW9uIHRyaWdnZXJSZWYocmVmKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXJlZi5kZXApIHtcbiAgICAgICAgd2FybihcInJlY2VpdmVkIG9iamVjdCBpcyBub3QgYSB0cmlnZ2VyYWJsZSByZWYuXCIpO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICByZWYuZGVwICYmXG4gICAgICAgICAgICByZWYuZGVwLm5vdGlmeSh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzZXRcIiAvKiBUcmlnZ2VyT3BUeXBlcy5TRVQgKi8sXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiByZWYsXG4gICAgICAgICAgICAgICAga2V5OiAndmFsdWUnXG4gICAgICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlZi5kZXAgJiYgcmVmLmRlcC5ub3RpZnkoKTtcbiAgICB9XG59XG5mdW5jdGlvbiB1bnJlZihyZWYpIHtcbiAgICByZXR1cm4gaXNSZWYocmVmKSA/IHJlZi52YWx1ZSA6IHJlZjtcbn1cbmZ1bmN0aW9uIHByb3h5UmVmcyhvYmplY3RXaXRoUmVmcykge1xuICAgIGlmIChpc1JlYWN0aXZlKG9iamVjdFdpdGhSZWZzKSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0V2l0aFJlZnM7XG4gICAgfVxuICAgIHZhciBwcm94eSA9IHt9O1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0V2l0aFJlZnMpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBwcm94eVdpdGhSZWZVbndyYXAocHJveHksIG9iamVjdFdpdGhSZWZzLCBrZXlzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHByb3h5O1xufVxuZnVuY3Rpb24gcHJveHlXaXRoUmVmVW53cmFwKHRhcmdldCwgc291cmNlLCBrZXkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICAgIGlmIChpc1JlZih2YWwpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBvYiA9IHZhbCAmJiB2YWwuX19vYl9fO1xuICAgICAgICAgICAgICAgIGlmIChvYilcbiAgICAgICAgICAgICAgICAgICAgb2IuZGVwLmRlcGVuZCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICAgIGlmIChpc1JlZihvbGRWYWx1ZSkgJiYgIWlzUmVmKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIG9sZFZhbHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzb3VyY2Vba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBjdXN0b21SZWYoZmFjdG9yeSkge1xuICAgIHZhciBkZXAgPSBuZXcgRGVwKCk7XG4gICAgdmFyIF9hID0gZmFjdG9yeShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBkZXAuZGVwZW5kKHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHJlZixcbiAgICAgICAgICAgICAgICB0eXBlOiBcImdldFwiIC8qIFRyYWNrT3BUeXBlcy5HRVQgKi8sXG4gICAgICAgICAgICAgICAga2V5OiAndmFsdWUnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlcC5kZXBlbmQoKTtcbiAgICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGRlcC5ub3RpZnkoe1xuICAgICAgICAgICAgICAgIHRhcmdldDogcmVmLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic2V0XCIgLyogVHJpZ2dlck9wVHlwZXMuU0VUICovLFxuICAgICAgICAgICAgICAgIGtleTogJ3ZhbHVlJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZXAubm90aWZ5KCk7XG4gICAgICAgIH1cbiAgICB9KSwgZ2V0ID0gX2EuZ2V0LCBzZXQgPSBfYS5zZXQ7XG4gICAgdmFyIHJlZiA9IHtcbiAgICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQgdmFsdWUobmV3VmFsKSB7XG4gICAgICAgICAgICBzZXQobmV3VmFsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZGVmKHJlZiwgUmVmRmxhZywgdHJ1ZSk7XG4gICAgcmV0dXJuIHJlZjtcbn1cbmZ1bmN0aW9uIHRvUmVmcyhvYmplY3QpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhaXNSZWFjdGl2ZShvYmplY3QpKSB7XG4gICAgICAgIHdhcm4oXCJ0b1JlZnMoKSBleHBlY3RzIGEgcmVhY3RpdmUgb2JqZWN0IGJ1dCByZWNlaXZlZCBhIHBsYWluIG9uZS5cIik7XG4gICAgfVxuICAgIHZhciByZXQgPSBpc0FycmF5KG9iamVjdCkgPyBuZXcgQXJyYXkob2JqZWN0Lmxlbmd0aCkgOiB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgIHJldFtrZXldID0gdG9SZWYob2JqZWN0LCBrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuZnVuY3Rpb24gdG9SZWYob2JqZWN0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICAgIHZhciB2YWwgPSBvYmplY3Rba2V5XTtcbiAgICBpZiAoaXNSZWYodmFsKSkge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICB2YXIgcmVmID0ge1xuICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gb2JqZWN0W2tleV07XG4gICAgICAgICAgICByZXR1cm4gdmFsID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIHNldCB2YWx1ZShuZXdWYWwpIHtcbiAgICAgICAgICAgIG9iamVjdFtrZXldID0gbmV3VmFsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBkZWYocmVmLCBSZWZGbGFnLCB0cnVlKTtcbiAgICByZXR1cm4gcmVmO1xufVxuXG52YXIgcmF3VG9SZWFkb25seUZsYWcgPSBcIl9fdl9yYXdUb1JlYWRvbmx5XCI7XG52YXIgcmF3VG9TaGFsbG93UmVhZG9ubHlGbGFnID0gXCJfX3ZfcmF3VG9TaGFsbG93UmVhZG9ubHlcIjtcbmZ1bmN0aW9uIHJlYWRvbmx5KHRhcmdldCkge1xuICAgIHJldHVybiBjcmVhdGVSZWFkb25seSh0YXJnZXQsIGZhbHNlKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVJlYWRvbmx5KHRhcmdldCwgc2hhbGxvdykge1xuICAgIGlmICghaXNQbGFpbk9iamVjdCh0YXJnZXQpKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgd2FybihcIlZ1ZSAyIGRvZXMgbm90IHN1cHBvcnQgcmVhZG9ubHkgYXJyYXlzLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzQ29sbGVjdGlvblR5cGUodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHdhcm4oXCJWdWUgMiBkb2VzIG5vdCBzdXBwb3J0IHJlYWRvbmx5IGNvbGxlY3Rpb24gdHlwZXMgc3VjaCBhcyBNYXAgb3IgU2V0LlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHdhcm4oXCJ2YWx1ZSBjYW5ub3QgYmUgbWFkZSByZWFkb25seTogXCIuY29uY2F0KHR5cGVvZiB0YXJnZXQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhT2JqZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpKSB7XG4gICAgICAgIHdhcm4oXCJWdWUgMiBkb2VzIG5vdCBzdXBwb3J0IGNyZWF0aW5nIHJlYWRvbmx5IHByb3h5IGZvciBub24tZXh0ZW5zaWJsZSBvYmplY3QuXCIpO1xuICAgIH1cbiAgICAvLyBhbHJlYWR5IGEgcmVhZG9ubHkgb2JqZWN0XG4gICAgaWYgKGlzUmVhZG9ubHkodGFyZ2V0KSkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICAvLyBhbHJlYWR5IGhhcyBhIHJlYWRvbmx5IHByb3h5XG4gICAgdmFyIGV4aXN0aW5nRmxhZyA9IHNoYWxsb3cgPyByYXdUb1NoYWxsb3dSZWFkb25seUZsYWcgOiByYXdUb1JlYWRvbmx5RmxhZztcbiAgICB2YXIgZXhpc3RpbmdQcm94eSA9IHRhcmdldFtleGlzdGluZ0ZsYWddO1xuICAgIGlmIChleGlzdGluZ1Byb3h5KSB7XG4gICAgICAgIHJldHVybiBleGlzdGluZ1Byb3h5O1xuICAgIH1cbiAgICB2YXIgcHJveHkgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpKTtcbiAgICBkZWYodGFyZ2V0LCBleGlzdGluZ0ZsYWcsIHByb3h5KTtcbiAgICBkZWYocHJveHksIFwiX192X2lzUmVhZG9ubHlcIiAvKiBSZWFjdGl2ZUZsYWdzLklTX1JFQURPTkxZICovLCB0cnVlKTtcbiAgICBkZWYocHJveHksIFwiX192X3Jhd1wiIC8qIFJlYWN0aXZlRmxhZ3MuUkFXICovLCB0YXJnZXQpO1xuICAgIGlmIChpc1JlZih0YXJnZXQpKSB7XG4gICAgICAgIGRlZihwcm94eSwgUmVmRmxhZywgdHJ1ZSk7XG4gICAgfVxuICAgIGlmIChzaGFsbG93IHx8IGlzU2hhbGxvdyh0YXJnZXQpKSB7XG4gICAgICAgIGRlZihwcm94eSwgXCJfX3ZfaXNTaGFsbG93XCIgLyogUmVhY3RpdmVGbGFncy5JU19TSEFMTE9XICovLCB0cnVlKTtcbiAgICB9XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0YXJnZXQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBkZWZpbmVSZWFkb25seVByb3BlcnR5KHByb3h5LCB0YXJnZXQsIGtleXNbaV0sIHNoYWxsb3cpO1xuICAgIH1cbiAgICByZXR1cm4gcHJveHk7XG59XG5mdW5jdGlvbiBkZWZpbmVSZWFkb25seVByb3BlcnR5KHByb3h5LCB0YXJnZXQsIGtleSwgc2hhbGxvdykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwga2V5LCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gdGFyZ2V0W2tleV07XG4gICAgICAgICAgICByZXR1cm4gc2hhbGxvdyB8fCAhaXNQbGFpbk9iamVjdCh2YWwpID8gdmFsIDogcmVhZG9ubHkodmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgd2FybihcIlNldCBvcGVyYXRpb24gb24ga2V5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgZmFpbGVkOiB0YXJnZXQgaXMgcmVhZG9ubHkuXCIpKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgcmVhY3RpdmUtY29weSBvZiB0aGUgb3JpZ2luYWwgb2JqZWN0LCB3aGVyZSBvbmx5IHRoZSByb290IGxldmVsXG4gKiBwcm9wZXJ0aWVzIGFyZSByZWFkb25seSwgYW5kIGRvZXMgTk9UIHVud3JhcCByZWZzIG5vciByZWN1cnNpdmVseSBjb252ZXJ0XG4gKiByZXR1cm5lZCBwcm9wZXJ0aWVzLlxuICogVGhpcyBpcyB1c2VkIGZvciBjcmVhdGluZyB0aGUgcHJvcHMgcHJveHkgb2JqZWN0IGZvciBzdGF0ZWZ1bCBjb21wb25lbnRzLlxuICovXG5mdW5jdGlvbiBzaGFsbG93UmVhZG9ubHkodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGNyZWF0ZVJlYWRvbmx5KHRhcmdldCwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVkKGdldHRlck9yT3B0aW9ucywgZGVidWdPcHRpb25zKSB7XG4gICAgdmFyIGdldHRlcjtcbiAgICB2YXIgc2V0dGVyO1xuICAgIHZhciBvbmx5R2V0dGVyID0gaXNGdW5jdGlvbihnZXR0ZXJPck9wdGlvbnMpO1xuICAgIGlmIChvbmx5R2V0dGVyKSB7XG4gICAgICAgIGdldHRlciA9IGdldHRlck9yT3B0aW9ucztcbiAgICAgICAgc2V0dGVyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJ1xuICAgICAgICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgd2FybignV3JpdGUgb3BlcmF0aW9uIGZhaWxlZDogY29tcHV0ZWQgdmFsdWUgaXMgcmVhZG9ubHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbm9vcDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdldHRlciA9IGdldHRlck9yT3B0aW9ucy5nZXQ7XG4gICAgICAgIHNldHRlciA9IGdldHRlck9yT3B0aW9ucy5zZXQ7XG4gICAgfVxuICAgIHZhciB3YXRjaGVyID0gaXNTZXJ2ZXJSZW5kZXJpbmcoKVxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiBuZXcgV2F0Y2hlcihjdXJyZW50SW5zdGFuY2UsIGdldHRlciwgbm9vcCwgeyBsYXp5OiB0cnVlIH0pO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhdGNoZXIgJiYgZGVidWdPcHRpb25zKSB7XG4gICAgICAgIHdhdGNoZXIub25UcmFjayA9IGRlYnVnT3B0aW9ucy5vblRyYWNrO1xuICAgICAgICB3YXRjaGVyLm9uVHJpZ2dlciA9IGRlYnVnT3B0aW9ucy5vblRyaWdnZXI7XG4gICAgfVxuICAgIHZhciByZWYgPSB7XG4gICAgICAgIC8vIHNvbWUgbGlicyByZWx5IG9uIHRoZSBwcmVzZW5jZSBlZmZlY3QgZm9yIGNoZWNraW5nIGNvbXB1dGVkIHJlZnNcbiAgICAgICAgLy8gZnJvbSBub3JtYWwgcmVmcywgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IG1hdHRlclxuICAgICAgICBlZmZlY3Q6IHdhdGNoZXIsXG4gICAgICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgICAgIGlmICh3YXRjaGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdhdGNoZXIuZGlydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgd2F0Y2hlci5ldmFsdWF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoRGVwLnRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBEZXAudGFyZ2V0Lm9uVHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIERlcC50YXJnZXQub25UcmFjayh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0OiBEZXAudGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogcmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZ2V0XCIgLyogVHJhY2tPcFR5cGVzLkdFVCAqLyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICd2YWx1ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdhdGNoZXIuZGVwZW5kKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB3YXRjaGVyLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldHRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzZXQgdmFsdWUobmV3VmFsKSB7XG4gICAgICAgICAgICBzZXR0ZXIobmV3VmFsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZGVmKHJlZiwgUmVmRmxhZywgdHJ1ZSk7XG4gICAgZGVmKHJlZiwgXCJfX3ZfaXNSZWFkb25seVwiIC8qIFJlYWN0aXZlRmxhZ3MuSVNfUkVBRE9OTFkgKi8sIG9ubHlHZXR0ZXIpO1xuICAgIHJldHVybiByZWY7XG59XG5cbnZhciBXQVRDSEVSID0gXCJ3YXRjaGVyXCI7XG52YXIgV0FUQ0hFUl9DQiA9IFwiXCIuY29uY2F0KFdBVENIRVIsIFwiIGNhbGxiYWNrXCIpO1xudmFyIFdBVENIRVJfR0VUVEVSID0gXCJcIi5jb25jYXQoV0FUQ0hFUiwgXCIgZ2V0dGVyXCIpO1xudmFyIFdBVENIRVJfQ0xFQU5VUCA9IFwiXCIuY29uY2F0KFdBVENIRVIsIFwiIGNsZWFudXBcIik7XG4vLyBTaW1wbGUgZWZmZWN0LlxuZnVuY3Rpb24gd2F0Y2hFZmZlY3QoZWZmZWN0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGRvV2F0Y2goZWZmZWN0LCBudWxsLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHdhdGNoUG9zdEVmZmVjdChlZmZlY3QsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gZG9XYXRjaChlZmZlY3QsIG51bGwsIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgICAgID8gX19hc3NpZ24oX19hc3NpZ24oe30sIG9wdGlvbnMpLCB7IGZsdXNoOiAncG9zdCcgfSkgOiB7IGZsdXNoOiAncG9zdCcgfSkpO1xufVxuZnVuY3Rpb24gd2F0Y2hTeW5jRWZmZWN0KGVmZmVjdCwgb3B0aW9ucykge1xuICAgIHJldHVybiBkb1dhdGNoKGVmZmVjdCwgbnVsbCwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICAgICAgPyBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb3B0aW9ucyksIHsgZmx1c2g6ICdzeW5jJyB9KSA6IHsgZmx1c2g6ICdzeW5jJyB9KSk7XG59XG4vLyBpbml0aWFsIHZhbHVlIGZvciB3YXRjaGVycyB0byB0cmlnZ2VyIG9uIHVuZGVmaW5lZCBpbml0aWFsIHZhbHVlc1xudmFyIElOSVRJQUxfV0FUQ0hFUl9WQUxVRSA9IHt9O1xuLy8gaW1wbGVtZW50YXRpb25cbmZ1bmN0aW9uIHdhdGNoKHNvdXJjZSwgY2IsIG9wdGlvbnMpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2FybihcImB3YXRjaChmbiwgb3B0aW9ucz8pYCBzaWduYXR1cmUgaGFzIGJlZW4gbW92ZWQgdG8gYSBzZXBhcmF0ZSBBUEkuIFwiICtcbiAgICAgICAgICAgIFwiVXNlIGB3YXRjaEVmZmVjdChmbiwgb3B0aW9ucz8pYCBpbnN0ZWFkLiBgd2F0Y2hgIG5vdyBvbmx5IFwiICtcbiAgICAgICAgICAgIFwic3VwcG9ydHMgYHdhdGNoKHNvdXJjZSwgY2IsIG9wdGlvbnM/KSBzaWduYXR1cmUuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZG9XYXRjaChzb3VyY2UsIGNiLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIGRvV2F0Y2goc291cmNlLCBjYiwgX2EpIHtcbiAgICB2YXIgX2IgPSBfYSA9PT0gdm9pZCAwID8gZW1wdHlPYmplY3QgOiBfYSwgaW1tZWRpYXRlID0gX2IuaW1tZWRpYXRlLCBkZWVwID0gX2IuZGVlcCwgX2MgPSBfYi5mbHVzaCwgZmx1c2ggPSBfYyA9PT0gdm9pZCAwID8gJ3ByZScgOiBfYywgb25UcmFjayA9IF9iLm9uVHJhY2ssIG9uVHJpZ2dlciA9IF9iLm9uVHJpZ2dlcjtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhY2IpIHtcbiAgICAgICAgaWYgKGltbWVkaWF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB3YXJuKFwid2F0Y2goKSBcXFwiaW1tZWRpYXRlXFxcIiBvcHRpb24gaXMgb25seSByZXNwZWN0ZWQgd2hlbiB1c2luZyB0aGUgXCIgK1xuICAgICAgICAgICAgICAgIFwid2F0Y2goc291cmNlLCBjYWxsYmFjaywgb3B0aW9ucz8pIHNpZ25hdHVyZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgd2FybihcIndhdGNoKCkgXFxcImRlZXBcXFwiIG9wdGlvbiBpcyBvbmx5IHJlc3BlY3RlZCB3aGVuIHVzaW5nIHRoZSBcIiArXG4gICAgICAgICAgICAgICAgXCJ3YXRjaChzb3VyY2UsIGNhbGxiYWNrLCBvcHRpb25zPykgc2lnbmF0dXJlLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgd2FybkludmFsaWRTb3VyY2UgPSBmdW5jdGlvbiAocykge1xuICAgICAgICB3YXJuKFwiSW52YWxpZCB3YXRjaCBzb3VyY2U6IFwiLmNvbmNhdChzLCBcIi4gQSB3YXRjaCBzb3VyY2UgY2FuIG9ubHkgYmUgYSBnZXR0ZXIvZWZmZWN0IFwiKSArXG4gICAgICAgICAgICBcImZ1bmN0aW9uLCBhIHJlZiwgYSByZWFjdGl2ZSBvYmplY3QsIG9yIGFuIGFycmF5IG9mIHRoZXNlIHR5cGVzLlwiKTtcbiAgICB9O1xuICAgIHZhciBpbnN0YW5jZSA9IGN1cnJlbnRJbnN0YW5jZTtcbiAgICB2YXIgY2FsbCA9IGZ1bmN0aW9uIChmbiwgdHlwZSwgYXJncykge1xuICAgICAgICBpZiAoYXJncyA9PT0gdm9pZCAwKSB7IGFyZ3MgPSBudWxsOyB9XG4gICAgICAgIHZhciByZXMgPSBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhmbiwgbnVsbCwgYXJncywgaW5zdGFuY2UsIHR5cGUpO1xuICAgICAgICBpZiAoZGVlcCAmJiByZXMgJiYgcmVzLl9fb2JfXylcbiAgICAgICAgICAgIHJlcy5fX29iX18uZGVwLmRlcGVuZCgpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgdmFyIGdldHRlcjtcbiAgICB2YXIgZm9yY2VUcmlnZ2VyID0gZmFsc2U7XG4gICAgdmFyIGlzTXVsdGlTb3VyY2UgPSBmYWxzZTtcbiAgICBpZiAoaXNSZWYoc291cmNlKSkge1xuICAgICAgICBnZXR0ZXIgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBzb3VyY2UudmFsdWU7IH07XG4gICAgICAgIGZvcmNlVHJpZ2dlciA9IGlzU2hhbGxvdyhzb3VyY2UpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1JlYWN0aXZlKHNvdXJjZSkpIHtcbiAgICAgICAgZ2V0dGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc291cmNlLl9fb2JfXy5kZXAuZGVwZW5kKCk7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlO1xuICAgICAgICB9O1xuICAgICAgICBkZWVwID0gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgIGlzTXVsdGlTb3VyY2UgPSB0cnVlO1xuICAgICAgICBmb3JjZVRyaWdnZXIgPSBzb3VyY2Uuc29tZShmdW5jdGlvbiAocykgeyByZXR1cm4gaXNSZWFjdGl2ZShzKSB8fCBpc1NoYWxsb3cocyk7IH0pO1xuICAgICAgICBnZXR0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgICAgIGlmIChpc1JlZihzKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcy52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNSZWFjdGl2ZShzKSkge1xuICAgICAgICAgICAgICAgICAgICBzLl9fb2JfXy5kZXAuZGVwZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZShzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNGdW5jdGlvbihzKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbChzLCBXQVRDSEVSX0dFVFRFUik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm5JbnZhbGlkU291cmNlKHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHNvdXJjZSkpIHtcbiAgICAgICAgaWYgKGNiKSB7XG4gICAgICAgICAgICAvLyBnZXR0ZXIgd2l0aCBjYlxuICAgICAgICAgICAgZ2V0dGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FsbChzb3VyY2UsIFdBVENIRVJfR0VUVEVSKTsgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIG5vIGNiIC0+IHNpbXBsZSBlZmZlY3RcbiAgICAgICAgICAgIGdldHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UuX2lzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNsZWFudXApIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbChzb3VyY2UsIFdBVENIRVIsIFtvbkNsZWFudXBdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdldHRlciA9IG5vb3A7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybkludmFsaWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG4gICAgaWYgKGNiICYmIGRlZXApIHtcbiAgICAgICAgdmFyIGJhc2VHZXR0ZXJfMSA9IGdldHRlcjtcbiAgICAgICAgZ2V0dGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJhdmVyc2UoYmFzZUdldHRlcl8xKCkpOyB9O1xuICAgIH1cbiAgICB2YXIgY2xlYW51cDtcbiAgICB2YXIgb25DbGVhbnVwID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIGNsZWFudXAgPSB3YXRjaGVyLm9uU3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNhbGwoZm4sIFdBVENIRVJfQ0xFQU5VUCk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICAvLyBpbiBTU1IgdGhlcmUgaXMgbm8gbmVlZCB0byBzZXR1cCBhbiBhY3R1YWwgZWZmZWN0LCBhbmQgaXQgc2hvdWxkIGJlIG5vb3BcbiAgICAvLyB1bmxlc3MgaXQncyBlYWdlclxuICAgIGlmIChpc1NlcnZlclJlbmRlcmluZygpKSB7XG4gICAgICAgIC8vIHdlIHdpbGwgYWxzbyBub3QgY2FsbCB0aGUgaW52YWxpZGF0ZSBjYWxsYmFjayAoKyBydW5uZXIgaXMgbm90IHNldCB1cClcbiAgICAgICAgb25DbGVhbnVwID0gbm9vcDtcbiAgICAgICAgaWYgKCFjYikge1xuICAgICAgICAgICAgZ2V0dGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW1tZWRpYXRlKSB7XG4gICAgICAgICAgICBjYWxsKGNiLCBXQVRDSEVSX0NCLCBbXG4gICAgICAgICAgICAgICAgZ2V0dGVyKCksXG4gICAgICAgICAgICAgICAgaXNNdWx0aVNvdXJjZSA/IFtdIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG9uQ2xlYW51cFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vb3A7XG4gICAgfVxuICAgIHZhciB3YXRjaGVyID0gbmV3IFdhdGNoZXIoY3VycmVudEluc3RhbmNlLCBnZXR0ZXIsIG5vb3AsIHtcbiAgICAgICAgbGF6eTogdHJ1ZVxuICAgIH0pO1xuICAgIHdhdGNoZXIubm9SZWN1cnNlID0gIWNiO1xuICAgIHZhciBvbGRWYWx1ZSA9IGlzTXVsdGlTb3VyY2UgPyBbXSA6IElOSVRJQUxfV0FUQ0hFUl9WQUxVRTtcbiAgICAvLyBvdmVyd3JpdGUgZGVmYXVsdCBydW5cbiAgICB3YXRjaGVyLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF3YXRjaGVyLmFjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgLy8gd2F0Y2goc291cmNlLCBjYilcbiAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHdhdGNoZXIuZ2V0KCk7XG4gICAgICAgICAgICBpZiAoZGVlcCB8fFxuICAgICAgICAgICAgICAgIGZvcmNlVHJpZ2dlciB8fFxuICAgICAgICAgICAgICAgIChpc011bHRpU291cmNlXG4gICAgICAgICAgICAgICAgICAgID8gbmV3VmFsdWUuc29tZShmdW5jdGlvbiAodiwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc0NoYW5nZWQodiwgb2xkVmFsdWVbaV0pO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IGhhc0NoYW5nZWQobmV3VmFsdWUsIG9sZFZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIGJlZm9yZSBydW5uaW5nIGNiIGFnYWluXG4gICAgICAgICAgICAgICAgaWYgKGNsZWFudXApIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsKGNiLCBXQVRDSEVSX0NCLCBbXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAvLyBwYXNzIHVuZGVmaW5lZCBhcyB0aGUgb2xkIHZhbHVlIHdoZW4gaXQncyBjaGFuZ2VkIGZvciB0aGUgZmlyc3QgdGltZVxuICAgICAgICAgICAgICAgICAgICBvbGRWYWx1ZSA9PT0gSU5JVElBTF9XQVRDSEVSX1ZBTFVFID8gdW5kZWZpbmVkIDogb2xkVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xlYW51cFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIG9sZFZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyB3YXRjaEVmZmVjdFxuICAgICAgICAgICAgd2F0Y2hlci5nZXQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgaWYgKGZsdXNoID09PSAnc3luYycpIHtcbiAgICAgICAgd2F0Y2hlci51cGRhdGUgPSB3YXRjaGVyLnJ1bjtcbiAgICB9XG4gICAgZWxzZSBpZiAoZmx1c2ggPT09ICdwb3N0Jykge1xuICAgICAgICB3YXRjaGVyLnBvc3QgPSB0cnVlO1xuICAgICAgICB3YXRjaGVyLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHF1ZXVlV2F0Y2hlcih3YXRjaGVyKTsgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIHByZVxuICAgICAgICB3YXRjaGVyLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZSA9PT0gY3VycmVudEluc3RhbmNlICYmICFpbnN0YW5jZS5faXNNb3VudGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gcHJlLXdhdGNoZXIgdHJpZ2dlcmVkIGJlZm9yZVxuICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBpbnN0YW5jZS5fcHJlV2F0Y2hlcnMgfHwgKGluc3RhbmNlLl9wcmVXYXRjaGVycyA9IFtdKTtcbiAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLmluZGV4T2Yod2F0Y2hlcikgPCAwKVxuICAgICAgICAgICAgICAgICAgICBidWZmZXIucHVzaCh3YXRjaGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlV2F0Y2hlcih3YXRjaGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2F0Y2hlci5vblRyYWNrID0gb25UcmFjaztcbiAgICAgICAgd2F0Y2hlci5vblRyaWdnZXIgPSBvblRyaWdnZXI7XG4gICAgfVxuICAgIC8vIGluaXRpYWwgcnVuXG4gICAgaWYgKGNiKSB7XG4gICAgICAgIGlmIChpbW1lZGlhdGUpIHtcbiAgICAgICAgICAgIHdhdGNoZXIucnVuKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvbGRWYWx1ZSA9IHdhdGNoZXIuZ2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoZmx1c2ggPT09ICdwb3N0JyAmJiBpbnN0YW5jZSkge1xuICAgICAgICBpbnN0YW5jZS4kb25jZSgnaG9vazptb3VudGVkJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gd2F0Y2hlci5nZXQoKTsgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB3YXRjaGVyLmdldCgpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB3YXRjaGVyLnRlYXJkb3duKCk7XG4gICAgfTtcbn1cblxudmFyIGFjdGl2ZUVmZmVjdFNjb3BlO1xudmFyIEVmZmVjdFNjb3BlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEVmZmVjdFNjb3BlKGRldGFjaGVkKSB7XG4gICAgICAgIGlmIChkZXRhY2hlZCA9PT0gdm9pZCAwKSB7IGRldGFjaGVkID0gZmFsc2U7IH1cbiAgICAgICAgdGhpcy5kZXRhY2hlZCA9IGRldGFjaGVkO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZWZmZWN0cyA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNsZWFudXBzID0gW107XG4gICAgICAgIHRoaXMucGFyZW50ID0gYWN0aXZlRWZmZWN0U2NvcGU7XG4gICAgICAgIGlmICghZGV0YWNoZWQgJiYgYWN0aXZlRWZmZWN0U2NvcGUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXggPVxuICAgICAgICAgICAgICAgIChhY3RpdmVFZmZlY3RTY29wZS5zY29wZXMgfHwgKGFjdGl2ZUVmZmVjdFNjb3BlLnNjb3BlcyA9IFtdKSkucHVzaCh0aGlzKSAtIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgRWZmZWN0U2NvcGUucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50RWZmZWN0U2NvcGUgPSBhY3RpdmVFZmZlY3RTY29wZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHJldHVybiBmbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUgPSBjdXJyZW50RWZmZWN0U2NvcGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgd2FybihcImNhbm5vdCBydW4gYW4gaW5hY3RpdmUgZWZmZWN0IHNjb3BlLlwiKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gbm9uLWRldGFjaGVkIHNjb3Blc1xuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEVmZmVjdFNjb3BlLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUgPSB0aGlzO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gbm9uLWRldGFjaGVkIHNjb3Blc1xuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEVmZmVjdFNjb3BlLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGFjdGl2ZUVmZmVjdFNjb3BlID0gdGhpcy5wYXJlbnQ7XG4gICAgfTtcbiAgICBFZmZlY3RTY29wZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uIChmcm9tUGFyZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgdmFyIGkgPSB2b2lkIDAsIGwgPSB2b2lkIDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gdGhpcy5lZmZlY3RzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuZWZmZWN0c1tpXS50ZWFyZG93bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IHRoaXMuY2xlYW51cHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhbnVwc1tpXSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc2NvcGVzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IHRoaXMuc2NvcGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjb3Blc1tpXS5zdG9wKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG5lc3RlZCBzY29wZSwgZGVyZWZlcmVuY2UgZnJvbSBwYXJlbnQgdG8gYXZvaWQgbWVtb3J5IGxlYWtzXG4gICAgICAgICAgICBpZiAoIXRoaXMuZGV0YWNoZWQgJiYgdGhpcy5wYXJlbnQgJiYgIWZyb21QYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAvLyBvcHRpbWl6ZWQgTygxKSByZW1vdmFsXG4gICAgICAgICAgICAgICAgdmFyIGxhc3QgPSB0aGlzLnBhcmVudC5zY29wZXMucG9wKCk7XG4gICAgICAgICAgICAgICAgaWYgKGxhc3QgJiYgbGFzdCAhPT0gdGhpcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5zY29wZXNbdGhpcy5pbmRleF0gPSBsYXN0O1xuICAgICAgICAgICAgICAgICAgICBsYXN0LmluZGV4ID0gdGhpcy5pbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhcmVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBFZmZlY3RTY29wZTtcbn0oKSk7XG5mdW5jdGlvbiBlZmZlY3RTY29wZShkZXRhY2hlZCkge1xuICAgIHJldHVybiBuZXcgRWZmZWN0U2NvcGUoZGV0YWNoZWQpO1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gcmVjb3JkRWZmZWN0U2NvcGUoZWZmZWN0LCBzY29wZSkge1xuICAgIGlmIChzY29wZSA9PT0gdm9pZCAwKSB7IHNjb3BlID0gYWN0aXZlRWZmZWN0U2NvcGU7IH1cbiAgICBpZiAoc2NvcGUgJiYgc2NvcGUuYWN0aXZlKSB7XG4gICAgICAgIHNjb3BlLmVmZmVjdHMucHVzaChlZmZlY3QpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldEN1cnJlbnRTY29wZSgpIHtcbiAgICByZXR1cm4gYWN0aXZlRWZmZWN0U2NvcGU7XG59XG5mdW5jdGlvbiBvblNjb3BlRGlzcG9zZShmbikge1xuICAgIGlmIChhY3RpdmVFZmZlY3RTY29wZSkge1xuICAgICAgICBhY3RpdmVFZmZlY3RTY29wZS5jbGVhbnVwcy5wdXNoKGZuKTtcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKFwib25TY29wZURpc3Bvc2UoKSBpcyBjYWxsZWQgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgZWZmZWN0IHNjb3BlXCIgK1xuICAgICAgICAgICAgXCIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoLlwiKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHByb3ZpZGUoa2V5LCB2YWx1ZSkge1xuICAgIGlmICghY3VycmVudEluc3RhbmNlKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICB3YXJuKFwicHJvdmlkZSgpIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIHNldHVwKCkuXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBUUyBkb2Vzbid0IGFsbG93IHN5bWJvbCBhcyBpbmRleCB0eXBlXG4gICAgICAgIHJlc29sdmVQcm92aWRlZChjdXJyZW50SW5zdGFuY2UpW2tleV0gPSB2YWx1ZTtcbiAgICB9XG59XG5mdW5jdGlvbiByZXNvbHZlUHJvdmlkZWQodm0pIHtcbiAgICAvLyBieSBkZWZhdWx0IGFuIGluc3RhbmNlIGluaGVyaXRzIGl0cyBwYXJlbnQncyBwcm92aWRlcyBvYmplY3RcbiAgICAvLyBidXQgd2hlbiBpdCBuZWVkcyB0byBwcm92aWRlIHZhbHVlcyBvZiBpdHMgb3duLCBpdCBjcmVhdGVzIGl0c1xuICAgIC8vIG93biBwcm92aWRlcyBvYmplY3QgdXNpbmcgcGFyZW50IHByb3ZpZGVzIG9iamVjdCBhcyBwcm90b3R5cGUuXG4gICAgLy8gdGhpcyB3YXkgaW4gYGluamVjdGAgd2UgY2FuIHNpbXBseSBsb29rIHVwIGluamVjdGlvbnMgZnJvbSBkaXJlY3RcbiAgICAvLyBwYXJlbnQgYW5kIGxldCB0aGUgcHJvdG90eXBlIGNoYWluIGRvIHRoZSB3b3JrLlxuICAgIHZhciBleGlzdGluZyA9IHZtLl9wcm92aWRlZDtcbiAgICB2YXIgcGFyZW50UHJvdmlkZXMgPSB2bS4kcGFyZW50ICYmIHZtLiRwYXJlbnQuX3Byb3ZpZGVkO1xuICAgIGlmIChwYXJlbnRQcm92aWRlcyA9PT0gZXhpc3RpbmcpIHtcbiAgICAgICAgcmV0dXJuICh2bS5fcHJvdmlkZWQgPSBPYmplY3QuY3JlYXRlKHBhcmVudFByb3ZpZGVzKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxufVxuZnVuY3Rpb24gaW5qZWN0KGtleSwgZGVmYXVsdFZhbHVlLCB0cmVhdERlZmF1bHRBc0ZhY3RvcnkpIHtcbiAgICBpZiAodHJlYXREZWZhdWx0QXNGYWN0b3J5ID09PSB2b2lkIDApIHsgdHJlYXREZWZhdWx0QXNGYWN0b3J5ID0gZmFsc2U7IH1cbiAgICAvLyBmYWxsYmFjayB0byBgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlYCBzbyB0aGF0IHRoaXMgY2FuIGJlIGNhbGxlZCBpblxuICAgIC8vIGEgZnVuY3Rpb25hbCBjb21wb25lbnRcbiAgICB2YXIgaW5zdGFuY2UgPSBjdXJyZW50SW5zdGFuY2U7XG4gICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgIC8vICMyNDAwXG4gICAgICAgIC8vIHRvIHN1cHBvcnQgYGFwcC51c2VgIHBsdWdpbnMsXG4gICAgICAgIC8vIGZhbGxiYWNrIHRvIGFwcENvbnRleHQncyBgcHJvdmlkZXNgIGlmIHRoZSBpbnN0YW5jZSBpcyBhdCByb290XG4gICAgICAgIHZhciBwcm92aWRlcyA9IGluc3RhbmNlLiRwYXJlbnQgJiYgaW5zdGFuY2UuJHBhcmVudC5fcHJvdmlkZWQ7XG4gICAgICAgIGlmIChwcm92aWRlcyAmJiBrZXkgaW4gcHJvdmlkZXMpIHtcbiAgICAgICAgICAgIC8vIFRTIGRvZXNuJ3QgYWxsb3cgc3ltYm9sIGFzIGluZGV4IHR5cGVcbiAgICAgICAgICAgIHJldHVybiBwcm92aWRlc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJlYXREZWZhdWx0QXNGYWN0b3J5ICYmIGlzRnVuY3Rpb24oZGVmYXVsdFZhbHVlKVxuICAgICAgICAgICAgICAgID8gZGVmYXVsdFZhbHVlLmNhbGwoaW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgOiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgd2FybihcImluamVjdGlvbiBcXFwiXCIuY29uY2F0KFN0cmluZyhrZXkpLCBcIlxcXCIgbm90IGZvdW5kLlwiKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKFwiaW5qZWN0KCkgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgc2V0dXAoKSBvciBmdW5jdGlvbmFsIGNvbXBvbmVudHMuXCIpO1xuICAgIH1cbn1cblxudmFyIG5vcm1hbGl6ZUV2ZW50ID0gY2FjaGVkKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIHBhc3NpdmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyYnO1xuICAgIG5hbWUgPSBwYXNzaXZlID8gbmFtZS5zbGljZSgxKSA6IG5hbWU7XG4gICAgdmFyIG9uY2UgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJ34nOyAvLyBQcmVmaXhlZCBsYXN0LCBjaGVja2VkIGZpcnN0XG4gICAgbmFtZSA9IG9uY2UgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgICB2YXIgY2FwdHVyZSA9IG5hbWUuY2hhckF0KDApID09PSAnISc7XG4gICAgbmFtZSA9IGNhcHR1cmUgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICBvbmNlOiBvbmNlLFxuICAgICAgICBjYXB0dXJlOiBjYXB0dXJlLFxuICAgICAgICBwYXNzaXZlOiBwYXNzaXZlXG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gY3JlYXRlRm5JbnZva2VyKGZucywgdm0pIHtcbiAgICBmdW5jdGlvbiBpbnZva2VyKCkge1xuICAgICAgICB2YXIgZm5zID0gaW52b2tlci5mbnM7XG4gICAgICAgIGlmIChpc0FycmF5KGZucykpIHtcbiAgICAgICAgICAgIHZhciBjbG9uZWQgPSBmbnMuc2xpY2UoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xvbmVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2xvbmVkW2ldLCBudWxsLCBhcmd1bWVudHMsIHZtLCBcInYtb24gaGFuZGxlclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBoYW5kbGVyIHJldHVybiB2YWx1ZSBmb3Igc2luZ2xlIGhhbmRsZXJzXG4gICAgICAgICAgICByZXR1cm4gaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoZm5zLCBudWxsLCBhcmd1bWVudHMsIHZtLCBcInYtb24gaGFuZGxlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbnZva2VyLmZucyA9IGZucztcbiAgICByZXR1cm4gaW52b2tlcjtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUxpc3RlbmVycyhvbiwgb2xkT24sIGFkZCwgcmVtb3ZlLCBjcmVhdGVPbmNlSGFuZGxlciwgdm0pIHtcbiAgICB2YXIgbmFtZSwgY3VyLCBvbGQsIGV2ZW50O1xuICAgIGZvciAobmFtZSBpbiBvbikge1xuICAgICAgICBjdXIgPSBvbltuYW1lXTtcbiAgICAgICAgb2xkID0gb2xkT25bbmFtZV07XG4gICAgICAgIGV2ZW50ID0gbm9ybWFsaXplRXZlbnQobmFtZSk7XG4gICAgICAgIGlmIChpc1VuZGVmKGN1cikpIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB3YXJuKFwiSW52YWxpZCBoYW5kbGVyIGZvciBldmVudCBcXFwiXCIuY29uY2F0KGV2ZW50Lm5hbWUsIFwiXFxcIjogZ290IFwiKSArIFN0cmluZyhjdXIpLCB2bSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNVbmRlZihvbGQpKSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZihjdXIuZm5zKSkge1xuICAgICAgICAgICAgICAgIGN1ciA9IG9uW25hbWVdID0gY3JlYXRlRm5JbnZva2VyKGN1ciwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzVHJ1ZShldmVudC5vbmNlKSkge1xuICAgICAgICAgICAgICAgIGN1ciA9IG9uW25hbWVdID0gY3JlYXRlT25jZUhhbmRsZXIoZXZlbnQubmFtZSwgY3VyLCBldmVudC5jYXB0dXJlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkZChldmVudC5uYW1lLCBjdXIsIGV2ZW50LmNhcHR1cmUsIGV2ZW50LnBhc3NpdmUsIGV2ZW50LnBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3VyICE9PSBvbGQpIHtcbiAgICAgICAgICAgIG9sZC5mbnMgPSBjdXI7XG4gICAgICAgICAgICBvbltuYW1lXSA9IG9sZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKG5hbWUgaW4gb2xkT24pIHtcbiAgICAgICAgaWYgKGlzVW5kZWYob25bbmFtZV0pKSB7XG4gICAgICAgICAgICBldmVudCA9IG5vcm1hbGl6ZUV2ZW50KG5hbWUpO1xuICAgICAgICAgICAgcmVtb3ZlKGV2ZW50Lm5hbWUsIG9sZE9uW25hbWVdLCBldmVudC5jYXB0dXJlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2VWTm9kZUhvb2soZGVmLCBob29rS2V5LCBob29rKSB7XG4gICAgaWYgKGRlZiBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgICAgIGRlZiA9IGRlZi5kYXRhLmhvb2sgfHwgKGRlZi5kYXRhLmhvb2sgPSB7fSk7XG4gICAgfVxuICAgIHZhciBpbnZva2VyO1xuICAgIHZhciBvbGRIb29rID0gZGVmW2hvb2tLZXldO1xuICAgIGZ1bmN0aW9uIHdyYXBwZWRIb29rKCkge1xuICAgICAgICBob29rLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIC8vIGltcG9ydGFudDogcmVtb3ZlIG1lcmdlZCBob29rIHRvIGVuc3VyZSBpdCdzIGNhbGxlZCBvbmx5IG9uY2VcbiAgICAgICAgLy8gYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtcbiAgICAgICAgcmVtb3ZlJDIoaW52b2tlci5mbnMsIHdyYXBwZWRIb29rKTtcbiAgICB9XG4gICAgaWYgKGlzVW5kZWYob2xkSG9vaykpIHtcbiAgICAgICAgLy8gbm8gZXhpc3RpbmcgaG9va1xuICAgICAgICBpbnZva2VyID0gY3JlYXRlRm5JbnZva2VyKFt3cmFwcGVkSG9va10pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChpc0RlZihvbGRIb29rLmZucykgJiYgaXNUcnVlKG9sZEhvb2subWVyZ2VkKSkge1xuICAgICAgICAgICAgLy8gYWxyZWFkeSBhIG1lcmdlZCBpbnZva2VyXG4gICAgICAgICAgICBpbnZva2VyID0gb2xkSG9vaztcbiAgICAgICAgICAgIGludm9rZXIuZm5zLnB1c2god3JhcHBlZEhvb2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZXhpc3RpbmcgcGxhaW4gaG9va1xuICAgICAgICAgICAgaW52b2tlciA9IGNyZWF0ZUZuSW52b2tlcihbb2xkSG9vaywgd3JhcHBlZEhvb2tdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbnZva2VyLm1lcmdlZCA9IHRydWU7XG4gICAgZGVmW2hvb2tLZXldID0gaW52b2tlcjtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFByb3BzRnJvbVZOb2RlRGF0YShkYXRhLCBDdG9yLCB0YWcpIHtcbiAgICAvLyB3ZSBhcmUgb25seSBleHRyYWN0aW5nIHJhdyB2YWx1ZXMgaGVyZS5cbiAgICAvLyB2YWxpZGF0aW9uIGFuZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFuZGxlZCBpbiB0aGUgY2hpbGRcbiAgICAvLyBjb21wb25lbnQgaXRzZWxmLlxuICAgIHZhciBwcm9wT3B0aW9ucyA9IEN0b3Iub3B0aW9ucy5wcm9wcztcbiAgICBpZiAoaXNVbmRlZihwcm9wT3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcmVzID0ge307XG4gICAgdmFyIGF0dHJzID0gZGF0YS5hdHRycywgcHJvcHMgPSBkYXRhLnByb3BzO1xuICAgIGlmIChpc0RlZihhdHRycykgfHwgaXNEZWYocHJvcHMpKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wT3B0aW9ucykge1xuICAgICAgICAgICAgdmFyIGFsdEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5SW5Mb3dlckNhc2UgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSBrZXlJbkxvd2VyQ2FzZSAmJiBhdHRycyAmJiBoYXNPd24oYXR0cnMsIGtleUluTG93ZXJDYXNlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aXAoXCJQcm9wIFxcXCJcIi5jb25jYXQoa2V5SW5Mb3dlckNhc2UsIFwiXFxcIiBpcyBwYXNzZWQgdG8gY29tcG9uZW50IFwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlwiLmNvbmNhdChmb3JtYXRDb21wb25lbnROYW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0YWcgaXMgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWcgfHwgQ3RvciksIFwiLCBidXQgdGhlIGRlY2xhcmVkIHByb3AgbmFtZSBpc1wiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiLiBcIikgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJOb3RlIHRoYXQgSFRNTCBhdHRyaWJ1dGVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIGFuZCBjYW1lbENhc2VkIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvcHMgbmVlZCB0byB1c2UgdGhlaXIga2ViYWItY2FzZSBlcXVpdmFsZW50cyB3aGVuIHVzaW5nIGluLURPTSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRlbXBsYXRlcy4gWW91IHNob3VsZCBwcm9iYWJseSB1c2UgXFxcIlwiLmNvbmNhdChhbHRLZXksIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIikuY29uY2F0KGtleSwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hlY2tQcm9wKHJlcywgcHJvcHMsIGtleSwgYWx0S2V5LCB0cnVlKSB8fFxuICAgICAgICAgICAgICAgIGNoZWNrUHJvcChyZXMsIGF0dHJzLCBrZXksIGFsdEtleSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBjaGVja1Byb3AocmVzLCBoYXNoLCBrZXksIGFsdEtleSwgcHJlc2VydmUpIHtcbiAgICBpZiAoaXNEZWYoaGFzaCkpIHtcbiAgICAgICAgaWYgKGhhc093bihoYXNoLCBrZXkpKSB7XG4gICAgICAgICAgICByZXNba2V5XSA9IGhhc2hba2V5XTtcbiAgICAgICAgICAgIGlmICghcHJlc2VydmUpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgaGFzaFtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaGFzT3duKGhhc2gsIGFsdEtleSkpIHtcbiAgICAgICAgICAgIHJlc1trZXldID0gaGFzaFthbHRLZXldO1xuICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBoYXNoW2FsdEtleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIFRoZSB0ZW1wbGF0ZSBjb21waWxlciBhdHRlbXB0cyB0byBtaW5pbWl6ZSB0aGUgbmVlZCBmb3Igbm9ybWFsaXphdGlvbiBieVxuLy8gc3RhdGljYWxseSBhbmFseXppbmcgdGhlIHRlbXBsYXRlIGF0IGNvbXBpbGUgdGltZS5cbi8vXG4vLyBGb3IgcGxhaW4gSFRNTCBtYXJrdXAsIG5vcm1hbGl6YXRpb24gY2FuIGJlIGNvbXBsZXRlbHkgc2tpcHBlZCBiZWNhdXNlIHRoZVxuLy8gZ2VuZXJhdGVkIHJlbmRlciBmdW5jdGlvbiBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBBcnJheTxWTm9kZT4uIFRoZXJlIGFyZVxuLy8gdHdvIGNhc2VzIHdoZXJlIGV4dHJhIG5vcm1hbGl6YXRpb24gaXMgbmVlZGVkOlxuLy8gMS4gV2hlbiB0aGUgY2hpbGRyZW4gY29udGFpbnMgY29tcG9uZW50cyAtIGJlY2F1c2UgYSBmdW5jdGlvbmFsIGNvbXBvbmVudFxuLy8gbWF5IHJldHVybiBhbiBBcnJheSBpbnN0ZWFkIG9mIGEgc2luZ2xlIHJvb3QuIEluIHRoaXMgY2FzZSwganVzdCBhIHNpbXBsZVxuLy8gbm9ybWFsaXphdGlvbiBpcyBuZWVkZWQgLSBpZiBhbnkgY2hpbGQgaXMgYW4gQXJyYXksIHdlIGZsYXR0ZW4gdGhlIHdob2xlXG4vLyB0aGluZyB3aXRoIEFycmF5LnByb3RvdHlwZS5jb25jYXQuIEl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgb25seSAxLWxldmVsIGRlZXBcbi8vIGJlY2F1c2UgZnVuY3Rpb25hbCBjb21wb25lbnRzIGFscmVhZHkgbm9ybWFsaXplIHRoZWlyIG93biBjaGlsZHJlbi5cbmZ1bmN0aW9uIHNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbltpXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBjaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xufVxuLy8gMi4gV2hlbiB0aGUgY2hpbGRyZW4gY29udGFpbnMgY29uc3RydWN0cyB0aGF0IGFsd2F5cyBnZW5lcmF0ZWQgbmVzdGVkIEFycmF5cyxcbi8vIGUuZy4gPHRlbXBsYXRlPiwgPHNsb3Q+LCB2LWZvciwgb3Igd2hlbiB0aGUgY2hpbGRyZW4gaXMgcHJvdmlkZWQgYnkgdXNlclxuLy8gd2l0aCBoYW5kLXdyaXR0ZW4gcmVuZGVyIGZ1bmN0aW9ucyAvIEpTWC4gSW4gc3VjaCBjYXNlcyBhIGZ1bGwgbm9ybWFsaXphdGlvblxuLy8gaXMgbmVlZGVkIHRvIGNhdGVyIHRvIGFsbCBwb3NzaWJsZSB0eXBlcyBvZiBjaGlsZHJlbiB2YWx1ZXMuXG5mdW5jdGlvbiBub3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbikge1xuICAgIHJldHVybiBpc1ByaW1pdGl2ZShjaGlsZHJlbilcbiAgICAgICAgPyBbY3JlYXRlVGV4dFZOb2RlKGNoaWxkcmVuKV1cbiAgICAgICAgOiBpc0FycmF5KGNoaWxkcmVuKVxuICAgICAgICAgICAgPyBub3JtYWxpemVBcnJheUNoaWxkcmVuKGNoaWxkcmVuKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBpc1RleHROb2RlKG5vZGUpIHtcbiAgICByZXR1cm4gaXNEZWYobm9kZSkgJiYgaXNEZWYobm9kZS50ZXh0KSAmJiBpc0ZhbHNlKG5vZGUuaXNDb21tZW50KTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4oY2hpbGRyZW4sIG5lc3RlZEluZGV4KSB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBpLCBjLCBsYXN0SW5kZXgsIGxhc3Q7XG4gICAgZm9yIChpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGMgPSBjaGlsZHJlbltpXTtcbiAgICAgICAgaWYgKGlzVW5kZWYoYykgfHwgdHlwZW9mIGMgPT09ICdib29sZWFuJylcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBsYXN0SW5kZXggPSByZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgbGFzdCA9IHJlc1tsYXN0SW5kZXhdO1xuICAgICAgICAvLyAgbmVzdGVkXG4gICAgICAgIGlmIChpc0FycmF5KGMpKSB7XG4gICAgICAgICAgICBpZiAoYy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYyA9IG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4oYywgXCJcIi5jb25jYXQobmVzdGVkSW5kZXggfHwgJycsIFwiX1wiKS5jb25jYXQoaSkpO1xuICAgICAgICAgICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgICAgICAgICBpZiAoaXNUZXh0Tm9kZShjWzBdKSAmJiBpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1tsYXN0SW5kZXhdID0gY3JlYXRlVGV4dFZOb2RlKGxhc3QudGV4dCArIGNbMF0udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzLnB1c2guYXBwbHkocmVzLCBjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1ByaW1pdGl2ZShjKSkge1xuICAgICAgICAgICAgaWYgKGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgICAgICAgICAvLyBtZXJnZSBhZGphY2VudCB0ZXh0IG5vZGVzXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIFNTUiBoeWRyYXRpb24gYmVjYXVzZSB0ZXh0IG5vZGVzIGFyZVxuICAgICAgICAgICAgICAgIC8vIGVzc2VudGlhbGx5IG1lcmdlZCB3aGVuIHJlbmRlcmVkIHRvIEhUTUwgc3RyaW5nc1xuICAgICAgICAgICAgICAgIHJlc1tsYXN0SW5kZXhdID0gY3JlYXRlVGV4dFZOb2RlKGxhc3QudGV4dCArIGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYyAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IHByaW1pdGl2ZSB0byB2bm9kZVxuICAgICAgICAgICAgICAgIHJlcy5wdXNoKGNyZWF0ZVRleHRWTm9kZShjKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNUZXh0Tm9kZShjKSAmJiBpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgICAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICAgICAgICAgIHJlc1tsYXN0SW5kZXhdID0gY3JlYXRlVGV4dFZOb2RlKGxhc3QudGV4dCArIGMudGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IGtleSBmb3IgbmVzdGVkIGFycmF5IGNoaWxkcmVuIChsaWtlbHkgZ2VuZXJhdGVkIGJ5IHYtZm9yKVxuICAgICAgICAgICAgICAgIGlmIChpc1RydWUoY2hpbGRyZW4uX2lzVkxpc3QpICYmXG4gICAgICAgICAgICAgICAgICAgIGlzRGVmKGMudGFnKSAmJlxuICAgICAgICAgICAgICAgICAgICBpc1VuZGVmKGMua2V5KSAmJlxuICAgICAgICAgICAgICAgICAgICBpc0RlZihuZXN0ZWRJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYy5rZXkgPSBcIl9fdmxpc3RcIi5jb25jYXQobmVzdGVkSW5kZXgsIFwiX1wiKS5jb25jYXQoaSwgXCJfX1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5nIHYtZm9yIGxpc3RzLlxuICovXG5mdW5jdGlvbiByZW5kZXJMaXN0KHZhbCwgcmVuZGVyKSB7XG4gICAgdmFyIHJldCA9IG51bGwsIGksIGwsIGtleXMsIGtleTtcbiAgICBpZiAoaXNBcnJheSh2YWwpIHx8IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldCA9IG5ldyBBcnJheSh2YWwubGVuZ3RoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IHZhbC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIHJldFtpXSA9IHJlbmRlcih2YWxbaV0sIGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldCA9IG5ldyBBcnJheSh2YWwpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmFsOyBpKyspIHtcbiAgICAgICAgICAgIHJldFtpXSA9IHJlbmRlcihpICsgMSwgaSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYmplY3QodmFsKSkge1xuICAgICAgICBpZiAoaGFzU3ltYm9sICYmIHZhbFtTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICAgICAgICByZXQgPSBbXTtcbiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IHZhbFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgd2hpbGUgKCFyZXN1bHQuZG9uZSkge1xuICAgICAgICAgICAgICAgIHJldC5wdXNoKHJlbmRlcihyZXN1bHQudmFsdWUsIHJldC5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gT2JqZWN0LmtleXModmFsKTtcbiAgICAgICAgICAgIHJldCA9IG5ldyBBcnJheShrZXlzLmxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgICAgICAgIHJldFtpXSA9IHJlbmRlcih2YWxba2V5XSwga2V5LCBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWlzRGVmKHJldCkpIHtcbiAgICAgICAgcmV0ID0gW107XG4gICAgfVxuICAgIHJldC5faXNWTGlzdCA9IHRydWU7XG4gICAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5nIDxzbG90PlxuICovXG5mdW5jdGlvbiByZW5kZXJTbG90KG5hbWUsIGZhbGxiYWNrUmVuZGVyLCBwcm9wcywgYmluZE9iamVjdCkge1xuICAgIHZhciBzY29wZWRTbG90Rm4gPSB0aGlzLiRzY29wZWRTbG90c1tuYW1lXTtcbiAgICB2YXIgbm9kZXM7XG4gICAgaWYgKHNjb3BlZFNsb3RGbikge1xuICAgICAgICAvLyBzY29wZWQgc2xvdFxuICAgICAgICBwcm9wcyA9IHByb3BzIHx8IHt9O1xuICAgICAgICBpZiAoYmluZE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWlzT2JqZWN0KGJpbmRPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgd2Fybignc2xvdCB2LWJpbmQgd2l0aG91dCBhcmd1bWVudCBleHBlY3RzIGFuIE9iamVjdCcsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvcHMgPSBleHRlbmQoZXh0ZW5kKHt9LCBiaW5kT2JqZWN0KSwgcHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIG5vZGVzID1cbiAgICAgICAgICAgIHNjb3BlZFNsb3RGbihwcm9wcykgfHxcbiAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihmYWxsYmFja1JlbmRlcikgPyBmYWxsYmFja1JlbmRlcigpIDogZmFsbGJhY2tSZW5kZXIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbm9kZXMgPVxuICAgICAgICAgICAgdGhpcy4kc2xvdHNbbmFtZV0gfHxcbiAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihmYWxsYmFja1JlbmRlcikgPyBmYWxsYmFja1JlbmRlcigpIDogZmFsbGJhY2tSZW5kZXIpO1xuICAgIH1cbiAgICB2YXIgdGFyZ2V0ID0gcHJvcHMgJiYgcHJvcHMuc2xvdDtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRjcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScsIHsgc2xvdDogdGFyZ2V0IH0sIG5vZGVzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBub2RlcztcbiAgICB9XG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlc29sdmluZyBmaWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVGaWx0ZXIoaWQpIHtcbiAgICByZXR1cm4gcmVzb2x2ZUFzc2V0KHRoaXMuJG9wdGlvbnMsICdmaWx0ZXJzJywgaWQsIHRydWUpIHx8IGlkZW50aXR5O1xufVxuXG5mdW5jdGlvbiBpc0tleU5vdE1hdGNoKGV4cGVjdCwgYWN0dWFsKSB7XG4gICAgaWYgKGlzQXJyYXkoZXhwZWN0KSkge1xuICAgICAgICByZXR1cm4gZXhwZWN0LmluZGV4T2YoYWN0dWFsKSA9PT0gLTE7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZXhwZWN0ICE9PSBhY3R1YWw7XG4gICAgfVxufVxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgY2hlY2tpbmcga2V5Q29kZXMgZnJvbSBjb25maWcuXG4gKiBleHBvc2VkIGFzIFZ1ZS5wcm90b3R5cGUuX2tcbiAqIHBhc3NpbmcgaW4gZXZlbnRLZXlOYW1lIGFzIGxhc3QgYXJndW1lbnQgc2VwYXJhdGVseSBmb3IgYmFja3dhcmRzIGNvbXBhdFxuICovXG5mdW5jdGlvbiBjaGVja0tleUNvZGVzKGV2ZW50S2V5Q29kZSwga2V5LCBidWlsdEluS2V5Q29kZSwgZXZlbnRLZXlOYW1lLCBidWlsdEluS2V5TmFtZSkge1xuICAgIHZhciBtYXBwZWRLZXlDb2RlID0gY29uZmlnLmtleUNvZGVzW2tleV0gfHwgYnVpbHRJbktleUNvZGU7XG4gICAgaWYgKGJ1aWx0SW5LZXlOYW1lICYmIGV2ZW50S2V5TmFtZSAmJiAhY29uZmlnLmtleUNvZGVzW2tleV0pIHtcbiAgICAgICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2goYnVpbHRJbktleU5hbWUsIGV2ZW50S2V5TmFtZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG1hcHBlZEtleUNvZGUpIHtcbiAgICAgICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2gobWFwcGVkS2V5Q29kZSwgZXZlbnRLZXlDb2RlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZXZlbnRLZXlOYW1lKSB7XG4gICAgICAgIHJldHVybiBoeXBoZW5hdGUoZXZlbnRLZXlOYW1lKSAhPT0ga2V5O1xuICAgIH1cbiAgICByZXR1cm4gZXZlbnRLZXlDb2RlID09PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIG1lcmdpbmcgdi1iaW5kPVwib2JqZWN0XCIgaW50byBhIFZOb2RlJ3MgZGF0YS5cbiAqL1xuZnVuY3Rpb24gYmluZE9iamVjdFByb3BzKGRhdGEsIHRhZywgdmFsdWUsIGFzUHJvcCwgaXNTeW5jKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgd2Fybigndi1iaW5kIHdpdGhvdXQgYXJndW1lbnQgZXhwZWN0cyBhbiBPYmplY3Qgb3IgQXJyYXkgdmFsdWUnLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9PYmplY3QodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGhhc2ggPSB2b2lkIDA7XG4gICAgICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnY2xhc3MnIHx8IGtleSA9PT0gJ3N0eWxlJyB8fCBpc1Jlc2VydmVkQXR0cmlidXRlKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzaCA9IGRhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IGRhdGEuYXR0cnMgJiYgZGF0YS5hdHRycy50eXBlO1xuICAgICAgICAgICAgICAgICAgICBoYXNoID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFzUHJvcCB8fCBjb25maWcubXVzdFVzZVByb3AodGFnLCB0eXBlLCBrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBkYXRhLmRvbVByb3BzIHx8IChkYXRhLmRvbVByb3BzID0ge30pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkYXRhLmF0dHJzIHx8IChkYXRhLmF0dHJzID0ge30pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgY2FtZWxpemVkS2V5ID0gY2FtZWxpemUoa2V5KTtcbiAgICAgICAgICAgICAgICB2YXIgaHlwaGVuYXRlZEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgICAgICAgICAgIGlmICghKGNhbWVsaXplZEtleSBpbiBoYXNoKSAmJiAhKGh5cGhlbmF0ZWRLZXkgaW4gaGFzaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzaFtrZXldID0gdmFsdWVba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9uID0gZGF0YS5vbiB8fCAoZGF0YS5vbiA9IHt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uW1widXBkYXRlOlwiLmNvbmNhdChrZXkpXSA9IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtrZXldID0gJGV2ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBfbG9vcF8xKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyBzdGF0aWMgdHJlZXMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclN0YXRpYyhpbmRleCwgaXNJbkZvcikge1xuICAgIHZhciBjYWNoZWQgPSB0aGlzLl9zdGF0aWNUcmVlcyB8fCAodGhpcy5fc3RhdGljVHJlZXMgPSBbXSk7XG4gICAgdmFyIHRyZWUgPSBjYWNoZWRbaW5kZXhdO1xuICAgIC8vIGlmIGhhcyBhbHJlYWR5LXJlbmRlcmVkIHN0YXRpYyB0cmVlIGFuZCBub3QgaW5zaWRlIHYtZm9yLFxuICAgIC8vIHdlIGNhbiByZXVzZSB0aGUgc2FtZSB0cmVlLlxuICAgIGlmICh0cmVlICYmICFpc0luRm9yKSB7XG4gICAgICAgIHJldHVybiB0cmVlO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UsIHJlbmRlciBhIGZyZXNoIHRyZWUuXG4gICAgdHJlZSA9IGNhY2hlZFtpbmRleF0gPSB0aGlzLiRvcHRpb25zLnN0YXRpY1JlbmRlckZuc1tpbmRleF0uY2FsbCh0aGlzLl9yZW5kZXJQcm94eSwgdGhpcy5fYywgdGhpcyAvLyBmb3IgcmVuZGVyIGZucyBnZW5lcmF0ZWQgZm9yIGZ1bmN0aW9uYWwgY29tcG9uZW50IHRlbXBsYXRlc1xuICAgICk7XG4gICAgbWFya1N0YXRpYyh0cmVlLCBcIl9fc3RhdGljX19cIi5jb25jYXQoaW5kZXgpLCBmYWxzZSk7XG4gICAgcmV0dXJuIHRyZWU7XG59XG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciB2LW9uY2UuXG4gKiBFZmZlY3RpdmVseSBpdCBtZWFucyBtYXJraW5nIHRoZSBub2RlIGFzIHN0YXRpYyB3aXRoIGEgdW5pcXVlIGtleS5cbiAqL1xuZnVuY3Rpb24gbWFya09uY2UodHJlZSwgaW5kZXgsIGtleSkge1xuICAgIG1hcmtTdGF0aWModHJlZSwgXCJfX29uY2VfX1wiLmNvbmNhdChpbmRleCkuY29uY2F0KGtleSA/IFwiX1wiLmNvbmNhdChrZXkpIDogXCJcIiksIHRydWUpO1xuICAgIHJldHVybiB0cmVlO1xufVxuZnVuY3Rpb24gbWFya1N0YXRpYyh0cmVlLCBrZXksIGlzT25jZSkge1xuICAgIGlmIChpc0FycmF5KHRyZWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJlZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRyZWVbaV0gJiYgdHlwZW9mIHRyZWVbaV0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgbWFya1N0YXRpY05vZGUodHJlZVtpXSwgXCJcIi5jb25jYXQoa2V5LCBcIl9cIikuY29uY2F0KGkpLCBpc09uY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBtYXJrU3RhdGljTm9kZSh0cmVlLCBrZXksIGlzT25jZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gbWFya1N0YXRpY05vZGUobm9kZSwga2V5LCBpc09uY2UpIHtcbiAgICBub2RlLmlzU3RhdGljID0gdHJ1ZTtcbiAgICBub2RlLmtleSA9IGtleTtcbiAgICBub2RlLmlzT25jZSA9IGlzT25jZTtcbn1cblxuZnVuY3Rpb24gYmluZE9iamVjdExpc3RlbmVycyhkYXRhLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oJ3Ytb24gd2l0aG91dCBhcmd1bWVudCBleHBlY3RzIGFuIE9iamVjdCB2YWx1ZScsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIG9uID0gKGRhdGEub24gPSBkYXRhLm9uID8gZXh0ZW5kKHt9LCBkYXRhLm9uKSA6IHt9KTtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBleGlzdGluZyA9IG9uW2tleV07XG4gICAgICAgICAgICAgICAgdmFyIG91cnMgPSB2YWx1ZVtrZXldO1xuICAgICAgICAgICAgICAgIG9uW2tleV0gPSBleGlzdGluZyA/IFtdLmNvbmNhdChleGlzdGluZywgb3VycykgOiBvdXJzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlU2NvcGVkU2xvdHMoZm5zLCByZXMsIFxuLy8gdGhlIGZvbGxvd2luZyBhcmUgYWRkZWQgaW4gMi42XG5oYXNEeW5hbWljS2V5cywgY29udGVudEhhc2hLZXkpIHtcbiAgICByZXMgPSByZXMgfHwgeyAkc3RhYmxlOiAhaGFzRHluYW1pY0tleXMgfTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc2xvdCA9IGZuc1tpXTtcbiAgICAgICAgaWYgKGlzQXJyYXkoc2xvdCkpIHtcbiAgICAgICAgICAgIHJlc29sdmVTY29wZWRTbG90cyhzbG90LCByZXMsIGhhc0R5bmFtaWNLZXlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzbG90KSB7XG4gICAgICAgICAgICAvLyBtYXJrZXIgZm9yIHJldmVyc2UgcHJveHlpbmcgdi1zbG90IHdpdGhvdXQgc2NvcGUgb24gdGhpcy4kc2xvdHNcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGlmIChzbG90LnByb3h5KSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICAgIHNsb3QuZm4ucHJveHkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzW3Nsb3Qua2V5XSA9IHNsb3QuZm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbnRlbnRIYXNoS2V5KSB7XG4gICAgICAgIHJlcy4ka2V5ID0gY29udGVudEhhc2hLZXk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIGhlbHBlciB0byBwcm9jZXNzIGR5bmFtaWMga2V5cyBmb3IgZHluYW1pYyBhcmd1bWVudHMgaW4gdi1iaW5kIGFuZCB2LW9uLlxuZnVuY3Rpb24gYmluZER5bmFtaWNLZXlzKGJhc2VPYmosIHZhbHVlcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHZhciBrZXkgPSB2YWx1ZXNbaV07XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkpIHtcbiAgICAgICAgICAgIGJhc2VPYmpbdmFsdWVzW2ldXSA9IHZhbHVlc1tpICsgMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBrZXkgIT09ICcnICYmIGtleSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gbnVsbCBpcyBhIHNwZWNpYWwgdmFsdWUgZm9yIGV4cGxpY2l0bHkgcmVtb3ZpbmcgYSBiaW5kaW5nXG4gICAgICAgICAgICB3YXJuKFwiSW52YWxpZCB2YWx1ZSBmb3IgZHluYW1pYyBkaXJlY3RpdmUgYXJndW1lbnQgKGV4cGVjdGVkIHN0cmluZyBvciBudWxsKTogXCIuY29uY2F0KGtleSksIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBiYXNlT2JqO1xufVxuLy8gaGVscGVyIHRvIGR5bmFtaWNhbGx5IGFwcGVuZCBtb2RpZmllciBydW50aW1lIG1hcmtlcnMgdG8gZXZlbnQgbmFtZXMuXG4vLyBlbnN1cmUgb25seSBhcHBlbmQgd2hlbiB2YWx1ZSBpcyBhbHJlYWR5IHN0cmluZywgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgY2FzdFxuLy8gdG8gc3RyaW5nIGFuZCBjYXVzZSB0aGUgdHlwZSBjaGVjayB0byBtaXNzLlxuZnVuY3Rpb24gcHJlcGVuZE1vZGlmaWVyKHZhbHVlLCBzeW1ib2wpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHN5bWJvbCArIHZhbHVlIDogdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGluc3RhbGxSZW5kZXJIZWxwZXJzKHRhcmdldCkge1xuICAgIHRhcmdldC5fbyA9IG1hcmtPbmNlO1xuICAgIHRhcmdldC5fbiA9IHRvTnVtYmVyO1xuICAgIHRhcmdldC5fcyA9IHRvU3RyaW5nO1xuICAgIHRhcmdldC5fbCA9IHJlbmRlckxpc3Q7XG4gICAgdGFyZ2V0Ll90ID0gcmVuZGVyU2xvdDtcbiAgICB0YXJnZXQuX3EgPSBsb29zZUVxdWFsO1xuICAgIHRhcmdldC5faSA9IGxvb3NlSW5kZXhPZjtcbiAgICB0YXJnZXQuX20gPSByZW5kZXJTdGF0aWM7XG4gICAgdGFyZ2V0Ll9mID0gcmVzb2x2ZUZpbHRlcjtcbiAgICB0YXJnZXQuX2sgPSBjaGVja0tleUNvZGVzO1xuICAgIHRhcmdldC5fYiA9IGJpbmRPYmplY3RQcm9wcztcbiAgICB0YXJnZXQuX3YgPSBjcmVhdGVUZXh0Vk5vZGU7XG4gICAgdGFyZ2V0Ll9lID0gY3JlYXRlRW1wdHlWTm9kZTtcbiAgICB0YXJnZXQuX3UgPSByZXNvbHZlU2NvcGVkU2xvdHM7XG4gICAgdGFyZ2V0Ll9nID0gYmluZE9iamVjdExpc3RlbmVycztcbiAgICB0YXJnZXQuX2QgPSBiaW5kRHluYW1pY0tleXM7XG4gICAgdGFyZ2V0Ll9wID0gcHJlcGVuZE1vZGlmaWVyO1xufVxuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZXNvbHZpbmcgcmF3IGNoaWxkcmVuIFZOb2RlcyBpbnRvIGEgc2xvdCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTbG90cyhjaGlsZHJlbiwgY29udGV4dCkge1xuICAgIGlmICghY2hpbGRyZW4gfHwgIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHZhciBzbG90cyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgICB2YXIgZGF0YSA9IGNoaWxkLmRhdGE7XG4gICAgICAgIC8vIHJlbW92ZSBzbG90IGF0dHJpYnV0ZSBpZiB0aGUgbm9kZSBpcyByZXNvbHZlZCBhcyBhIFZ1ZSBzbG90IG5vZGVcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnNsb3QpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRhLmF0dHJzLnNsb3Q7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbmFtZWQgc2xvdHMgc2hvdWxkIG9ubHkgYmUgcmVzcGVjdGVkIGlmIHRoZSB2bm9kZSB3YXMgcmVuZGVyZWQgaW4gdGhlXG4gICAgICAgIC8vIHNhbWUgY29udGV4dC5cbiAgICAgICAgaWYgKChjaGlsZC5jb250ZXh0ID09PSBjb250ZXh0IHx8IGNoaWxkLmZuQ29udGV4dCA9PT0gY29udGV4dCkgJiZcbiAgICAgICAgICAgIGRhdGEgJiZcbiAgICAgICAgICAgIGRhdGEuc2xvdCAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbmFtZV8xID0gZGF0YS5zbG90O1xuICAgICAgICAgICAgdmFyIHNsb3QgPSBzbG90c1tuYW1lXzFdIHx8IChzbG90c1tuYW1lXzFdID0gW10pO1xuICAgICAgICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICAgICAgICAgIHNsb3QucHVzaC5hcHBseShzbG90LCBjaGlsZC5jaGlsZHJlbiB8fCBbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzbG90LnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgKHNsb3RzLmRlZmF1bHQgfHwgKHNsb3RzLmRlZmF1bHQgPSBbXSkpLnB1c2goY2hpbGQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGlnbm9yZSBzbG90cyB0aGF0IGNvbnRhaW5zIG9ubHkgd2hpdGVzcGFjZVxuICAgIGZvciAodmFyIG5hbWVfMiBpbiBzbG90cykge1xuICAgICAgICBpZiAoc2xvdHNbbmFtZV8yXS5ldmVyeShpc1doaXRlc3BhY2UpKSB7XG4gICAgICAgICAgICBkZWxldGUgc2xvdHNbbmFtZV8yXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2xvdHM7XG59XG5mdW5jdGlvbiBpc1doaXRlc3BhY2Uobm9kZSkge1xuICAgIHJldHVybiAobm9kZS5pc0NvbW1lbnQgJiYgIW5vZGUuYXN5bmNGYWN0b3J5KSB8fCBub2RlLnRleHQgPT09ICcgJztcbn1cblxuZnVuY3Rpb24gaXNBc3luY1BsYWNlaG9sZGVyKG5vZGUpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG5vdCByZWFsbHkgYm9vbGVhbiB0eXBlXG4gICAgcmV0dXJuIG5vZGUuaXNDb21tZW50ICYmIG5vZGUuYXN5bmNGYWN0b3J5O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVTY29wZWRTbG90cyhvd25lclZtLCBzY29wZWRTbG90cywgbm9ybWFsU2xvdHMsIHByZXZTY29wZWRTbG90cykge1xuICAgIHZhciByZXM7XG4gICAgdmFyIGhhc05vcm1hbFNsb3RzID0gT2JqZWN0LmtleXMobm9ybWFsU2xvdHMpLmxlbmd0aCA+IDA7XG4gICAgdmFyIGlzU3RhYmxlID0gc2NvcGVkU2xvdHMgPyAhIXNjb3BlZFNsb3RzLiRzdGFibGUgOiAhaGFzTm9ybWFsU2xvdHM7XG4gICAgdmFyIGtleSA9IHNjb3BlZFNsb3RzICYmIHNjb3BlZFNsb3RzLiRrZXk7XG4gICAgaWYgKCFzY29wZWRTbG90cykge1xuICAgICAgICByZXMgPSB7fTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2NvcGVkU2xvdHMuX25vcm1hbGl6ZWQpIHtcbiAgICAgICAgLy8gZmFzdCBwYXRoIDE6IGNoaWxkIGNvbXBvbmVudCByZS1yZW5kZXIgb25seSwgcGFyZW50IGRpZCBub3QgY2hhbmdlXG4gICAgICAgIHJldHVybiBzY29wZWRTbG90cy5fbm9ybWFsaXplZDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNTdGFibGUgJiZcbiAgICAgICAgcHJldlNjb3BlZFNsb3RzICYmXG4gICAgICAgIHByZXZTY29wZWRTbG90cyAhPT0gZW1wdHlPYmplY3QgJiZcbiAgICAgICAga2V5ID09PSBwcmV2U2NvcGVkU2xvdHMuJGtleSAmJlxuICAgICAgICAhaGFzTm9ybWFsU2xvdHMgJiZcbiAgICAgICAgIXByZXZTY29wZWRTbG90cy4kaGFzTm9ybWFsKSB7XG4gICAgICAgIC8vIGZhc3QgcGF0aCAyOiBzdGFibGUgc2NvcGVkIHNsb3RzIHcvIG5vIG5vcm1hbCBzbG90cyB0byBwcm94eSxcbiAgICAgICAgLy8gb25seSBuZWVkIHRvIG5vcm1hbGl6ZSBvbmNlXG4gICAgICAgIHJldHVybiBwcmV2U2NvcGVkU2xvdHM7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXMgPSB7fTtcbiAgICAgICAgZm9yICh2YXIga2V5XzEgaW4gc2NvcGVkU2xvdHMpIHtcbiAgICAgICAgICAgIGlmIChzY29wZWRTbG90c1trZXlfMV0gJiYga2V5XzFbMF0gIT09ICckJykge1xuICAgICAgICAgICAgICAgIHJlc1trZXlfMV0gPSBub3JtYWxpemVTY29wZWRTbG90KG93bmVyVm0sIG5vcm1hbFNsb3RzLCBrZXlfMSwgc2NvcGVkU2xvdHNba2V5XzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBleHBvc2Ugbm9ybWFsIHNsb3RzIG9uIHNjb3BlZFNsb3RzXG4gICAgZm9yICh2YXIga2V5XzIgaW4gbm9ybWFsU2xvdHMpIHtcbiAgICAgICAgaWYgKCEoa2V5XzIgaW4gcmVzKSkge1xuICAgICAgICAgICAgcmVzW2tleV8yXSA9IHByb3h5Tm9ybWFsU2xvdChub3JtYWxTbG90cywga2V5XzIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGF2b3JpYXogc2VlbXMgdG8gbW9jayBhIG5vbi1leHRlbnNpYmxlICRzY29wZWRTbG90cyBvYmplY3RcbiAgICAvLyBhbmQgd2hlbiB0aGF0IGlzIHBhc3NlZCBkb3duIHRoaXMgd291bGQgY2F1c2UgYW4gZXJyb3JcbiAgICBpZiAoc2NvcGVkU2xvdHMgJiYgT2JqZWN0LmlzRXh0ZW5zaWJsZShzY29wZWRTbG90cykpIHtcbiAgICAgICAgc2NvcGVkU2xvdHMuX25vcm1hbGl6ZWQgPSByZXM7XG4gICAgfVxuICAgIGRlZihyZXMsICckc3RhYmxlJywgaXNTdGFibGUpO1xuICAgIGRlZihyZXMsICcka2V5Jywga2V5KTtcbiAgICBkZWYocmVzLCAnJGhhc05vcm1hbCcsIGhhc05vcm1hbFNsb3RzKTtcbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplU2NvcGVkU2xvdCh2bSwgbm9ybWFsU2xvdHMsIGtleSwgZm4pIHtcbiAgICB2YXIgbm9ybWFsaXplZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGN1ciA9IGN1cnJlbnRJbnN0YW5jZTtcbiAgICAgICAgc2V0Q3VycmVudEluc3RhbmNlKHZtKTtcbiAgICAgICAgdmFyIHJlcyA9IGFyZ3VtZW50cy5sZW5ndGggPyBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpIDogZm4oe30pO1xuICAgICAgICByZXMgPVxuICAgICAgICAgICAgcmVzICYmIHR5cGVvZiByZXMgPT09ICdvYmplY3QnICYmICFpc0FycmF5KHJlcylcbiAgICAgICAgICAgICAgICA/IFtyZXNdIC8vIHNpbmdsZSB2bm9kZVxuICAgICAgICAgICAgICAgIDogbm9ybWFsaXplQ2hpbGRyZW4ocmVzKTtcbiAgICAgICAgdmFyIHZub2RlID0gcmVzICYmIHJlc1swXTtcbiAgICAgICAgc2V0Q3VycmVudEluc3RhbmNlKGN1cik7XG4gICAgICAgIHJldHVybiByZXMgJiZcbiAgICAgICAgICAgICghdm5vZGUgfHxcbiAgICAgICAgICAgICAgICAocmVzLmxlbmd0aCA9PT0gMSAmJiB2bm9kZS5pc0NvbW1lbnQgJiYgIWlzQXN5bmNQbGFjZWhvbGRlcih2bm9kZSkpKSAvLyAjOTY1OCwgIzEwMzkxXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiByZXM7XG4gICAgfTtcbiAgICAvLyB0aGlzIGlzIGEgc2xvdCB1c2luZyB0aGUgbmV3IHYtc2xvdCBzeW50YXggd2l0aG91dCBzY29wZS4gYWx0aG91Z2ggaXQgaXNcbiAgICAvLyBjb21waWxlZCBhcyBhIHNjb3BlZCBzbG90LCByZW5kZXIgZm4gdXNlcnMgd291bGQgZXhwZWN0IGl0IHRvIGJlIHByZXNlbnRcbiAgICAvLyBvbiB0aGlzLiRzbG90cyBiZWNhdXNlIHRoZSB1c2FnZSBpcyBzZW1hbnRpY2FsbHkgYSBub3JtYWwgc2xvdC5cbiAgICBpZiAoZm4ucHJveHkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vcm1hbFNsb3RzLCBrZXksIHtcbiAgICAgICAgICAgIGdldDogbm9ybWFsaXplZCxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBub3JtYWxpemVkO1xufVxuZnVuY3Rpb24gcHJveHlOb3JtYWxTbG90KHNsb3RzLCBrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gc2xvdHNba2V5XTsgfTtcbn1cblxuZnVuY3Rpb24gaW5pdFNldHVwKHZtKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcbiAgICB2YXIgc2V0dXAgPSBvcHRpb25zLnNldHVwO1xuICAgIGlmIChzZXR1cCkge1xuICAgICAgICB2YXIgY3R4ID0gKHZtLl9zZXR1cENvbnRleHQgPSBjcmVhdGVTZXR1cENvbnRleHQodm0pKTtcbiAgICAgICAgc2V0Q3VycmVudEluc3RhbmNlKHZtKTtcbiAgICAgICAgcHVzaFRhcmdldCgpO1xuICAgICAgICB2YXIgc2V0dXBSZXN1bHQgPSBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhzZXR1cCwgbnVsbCwgW3ZtLl9wcm9wcyB8fCBzaGFsbG93UmVhY3RpdmUoe30pLCBjdHhdLCB2bSwgXCJzZXR1cFwiKTtcbiAgICAgICAgcG9wVGFyZ2V0KCk7XG4gICAgICAgIHNldEN1cnJlbnRJbnN0YW5jZSgpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihzZXR1cFJlc3VsdCkpIHtcbiAgICAgICAgICAgIC8vIHJlbmRlciBmdW5jdGlvblxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgb3B0aW9ucy5yZW5kZXIgPSBzZXR1cFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc09iamVjdChzZXR1cFJlc3VsdCkpIHtcbiAgICAgICAgICAgIC8vIGJpbmRpbmdzXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXR1cFJlc3VsdCBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgICAgICAgICAgICAgd2FybihcInNldHVwKCkgc2hvdWxkIG5vdCByZXR1cm4gVk5vZGVzIGRpcmVjdGx5IC0gXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInJldHVybiBhIHJlbmRlciBmdW5jdGlvbiBpbnN0ZWFkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZtLl9zZXR1cFN0YXRlID0gc2V0dXBSZXN1bHQ7XG4gICAgICAgICAgICAvLyBfX3NmYyBpbmRpY2F0ZXMgY29tcGlsZWQgYmluZGluZ3MgZnJvbSA8c2NyaXB0IHNldHVwPlxuICAgICAgICAgICAgaWYgKCFzZXR1cFJlc3VsdC5fX3NmYykge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBzZXR1cFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUmVzZXJ2ZWQoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJveHlXaXRoUmVmVW53cmFwKHZtLCBzZXR1cFJlc3VsdCwga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuKFwiQXZvaWQgdXNpbmcgdmFyaWFibGVzIHRoYXQgc3RhcnQgd2l0aCBfIG9yICQgaW4gc2V0dXAoKS5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBleHBvc2VkIGZvciBjb21waWxlZCByZW5kZXIgZm5cbiAgICAgICAgICAgICAgICB2YXIgcHJveHkgPSAodm0uX3NldHVwUHJveHkgPSB7fSk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHNldHVwUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgIT09ICdfX3NmYycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5V2l0aFJlZlVud3JhcChwcm94eSwgc2V0dXBSZXN1bHQsIGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXR1cFJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB3YXJuKFwic2V0dXAoKSBzaG91bGQgcmV0dXJuIGFuIG9iamVjdC4gUmVjZWl2ZWQ6IFwiLmNvbmNhdChzZXR1cFJlc3VsdCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBzZXR1cFJlc3VsdCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlU2V0dXBDb250ZXh0KHZtKSB7XG4gICAgdmFyIGV4cG9zZUNhbGxlZCA9IGZhbHNlO1xuICAgIHJldHVybiB7XG4gICAgICAgIGdldCBhdHRycygpIHtcbiAgICAgICAgICAgIGlmICghdm0uX2F0dHJzUHJveHkpIHtcbiAgICAgICAgICAgICAgICB2YXIgcHJveHkgPSAodm0uX2F0dHJzUHJveHkgPSB7fSk7XG4gICAgICAgICAgICAgICAgZGVmKHByb3h5LCAnX3ZfYXR0cl9wcm94eScsIHRydWUpO1xuICAgICAgICAgICAgICAgIHN5bmNTZXR1cFByb3h5KHByb3h5LCB2bS4kYXR0cnMsIGVtcHR5T2JqZWN0LCB2bSwgJyRhdHRycycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZtLl9hdHRyc1Byb3h5O1xuICAgICAgICB9LFxuICAgICAgICBnZXQgbGlzdGVuZXJzKCkge1xuICAgICAgICAgICAgaWYgKCF2bS5fbGlzdGVuZXJzUHJveHkpIHtcbiAgICAgICAgICAgICAgICB2YXIgcHJveHkgPSAodm0uX2xpc3RlbmVyc1Byb3h5ID0ge30pO1xuICAgICAgICAgICAgICAgIHN5bmNTZXR1cFByb3h5KHByb3h5LCB2bS4kbGlzdGVuZXJzLCBlbXB0eU9iamVjdCwgdm0sICckbGlzdGVuZXJzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdm0uX2xpc3RlbmVyc1Byb3h5O1xuICAgICAgICB9LFxuICAgICAgICBnZXQgc2xvdHMoKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5pdFNsb3RzUHJveHkodm0pO1xuICAgICAgICB9LFxuICAgICAgICBlbWl0OiBiaW5kKHZtLiRlbWl0LCB2bSksXG4gICAgICAgIGV4cG9zZTogZnVuY3Rpb24gKGV4cG9zZWQpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4cG9zZUNhbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICB3YXJuKFwiZXhwb3NlKCkgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IG9uY2UgcGVyIHNldHVwKCkuXCIsIHZtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXhwb3NlQ2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChleHBvc2VkKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZXhwb3NlZCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm94eVdpdGhSZWZVbndyYXAodm0sIGV4cG9zZWQsIGtleSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuZnVuY3Rpb24gc3luY1NldHVwUHJveHkodG8sIGZyb20sIHByZXYsIGluc3RhbmNlLCB0eXBlKSB7XG4gICAgdmFyIGNoYW5nZWQgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuICAgICAgICBpZiAoIShrZXkgaW4gdG8pKSB7XG4gICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIGRlZmluZVByb3h5QXR0cih0bywga2V5LCBpbnN0YW5jZSwgdHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZnJvbVtrZXldICE9PSBwcmV2W2tleV0pIHtcbiAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGtleSBpbiB0bykge1xuICAgICAgICBpZiAoIShrZXkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgZGVsZXRlIHRvW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNoYW5nZWQ7XG59XG5mdW5jdGlvbiBkZWZpbmVQcm94eUF0dHIocHJveHksIGtleSwgaW5zdGFuY2UsIHR5cGUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJveHksIGtleSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlW3R5cGVdW2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGluaXRTbG90c1Byb3h5KHZtKSB7XG4gICAgaWYgKCF2bS5fc2xvdHNQcm94eSkge1xuICAgICAgICBzeW5jU2V0dXBTbG90cygodm0uX3Nsb3RzUHJveHkgPSB7fSksIHZtLiRzY29wZWRTbG90cyk7XG4gICAgfVxuICAgIHJldHVybiB2bS5fc2xvdHNQcm94eTtcbn1cbmZ1bmN0aW9uIHN5bmNTZXR1cFNsb3RzKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIga2V5IGluIGZyb20pIHtcbiAgICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XTtcbiAgICB9XG4gICAgZm9yICh2YXIga2V5IGluIHRvKSB7XG4gICAgICAgIGlmICghKGtleSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgZGVsZXRlIHRvW2tleV07XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIEBpbnRlcm5hbCB1c2UgbWFudWFsIHR5cGUgZGVmIGJlY2F1c2UgcHVibGljIHNldHVwIGNvbnRleHQgdHlwZSByZWxpZXMgb25cbiAqIGxlZ2FjeSBWTm9kZSB0eXBlc1xuICovXG5mdW5jdGlvbiB1c2VTbG90cygpIHtcbiAgICByZXR1cm4gZ2V0Q29udGV4dCgpLnNsb3RzO1xufVxuLyoqXG4gKiBAaW50ZXJuYWwgdXNlIG1hbnVhbCB0eXBlIGRlZiBiZWNhdXNlIHB1YmxpYyBzZXR1cCBjb250ZXh0IHR5cGUgcmVsaWVzIG9uXG4gKiBsZWdhY3kgVk5vZGUgdHlwZXNcbiAqL1xuZnVuY3Rpb24gdXNlQXR0cnMoKSB7XG4gICAgcmV0dXJuIGdldENvbnRleHQoKS5hdHRycztcbn1cbi8qKlxuICogVnVlIDIgb25seVxuICogQGludGVybmFsIHVzZSBtYW51YWwgdHlwZSBkZWYgYmVjYXVzZSBwdWJsaWMgc2V0dXAgY29udGV4dCB0eXBlIHJlbGllcyBvblxuICogbGVnYWN5IFZOb2RlIHR5cGVzXG4gKi9cbmZ1bmN0aW9uIHVzZUxpc3RlbmVycygpIHtcbiAgICByZXR1cm4gZ2V0Q29udGV4dCgpLmxpc3RlbmVycztcbn1cbmZ1bmN0aW9uIGdldENvbnRleHQoKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWN1cnJlbnRJbnN0YW5jZSkge1xuICAgICAgICB3YXJuKFwidXNlQ29udGV4dCgpIGNhbGxlZCB3aXRob3V0IGFjdGl2ZSBpbnN0YW5jZS5cIik7XG4gICAgfVxuICAgIHZhciB2bSA9IGN1cnJlbnRJbnN0YW5jZTtcbiAgICByZXR1cm4gdm0uX3NldHVwQ29udGV4dCB8fCAodm0uX3NldHVwQ29udGV4dCA9IGNyZWF0ZVNldHVwQ29udGV4dCh2bSkpO1xufVxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgbWVyZ2luZyBkZWZhdWx0IGRlY2xhcmF0aW9ucy4gSW1wb3J0ZWQgYnkgY29tcGlsZWQgY29kZVxuICogb25seS5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBtZXJnZURlZmF1bHRzKHJhdywgZGVmYXVsdHMpIHtcbiAgICB2YXIgcHJvcHMgPSBpc0FycmF5KHJhdylcbiAgICAgICAgPyByYXcucmVkdWNlKGZ1bmN0aW9uIChub3JtYWxpemVkLCBwKSB7IHJldHVybiAoKG5vcm1hbGl6ZWRbcF0gPSB7fSksIG5vcm1hbGl6ZWQpOyB9LCB7fSlcbiAgICAgICAgOiByYXc7XG4gICAgZm9yICh2YXIga2V5IGluIGRlZmF1bHRzKSB7XG4gICAgICAgIHZhciBvcHQgPSBwcm9wc1trZXldO1xuICAgICAgICBpZiAob3B0KSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJheShvcHQpIHx8IGlzRnVuY3Rpb24ob3B0KSkge1xuICAgICAgICAgICAgICAgIHByb3BzW2tleV0gPSB7IHR5cGU6IG9wdCwgZGVmYXVsdDogZGVmYXVsdHNba2V5XSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0LmRlZmF1bHQgPSBkZWZhdWx0c1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcHJvcHNba2V5XSA9IHsgZGVmYXVsdDogZGVmYXVsdHNba2V5XSB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm4oXCJwcm9wcyBkZWZhdWx0IGtleSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGhhcyBubyBjb3JyZXNwb25kaW5nIGRlY2xhcmF0aW9uLlwiKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BzO1xufVxuXG5mdW5jdGlvbiBpbml0UmVuZGVyKHZtKSB7XG4gICAgdm0uX3Zub2RlID0gbnVsbDsgLy8gdGhlIHJvb3Qgb2YgdGhlIGNoaWxkIHRyZWVcbiAgICB2bS5fc3RhdGljVHJlZXMgPSBudWxsOyAvLyB2LW9uY2UgY2FjaGVkIHRyZWVzXG4gICAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcbiAgICB2YXIgcGFyZW50Vm5vZGUgPSAodm0uJHZub2RlID0gb3B0aW9ucy5fcGFyZW50Vm5vZGUpOyAvLyB0aGUgcGxhY2Vob2xkZXIgbm9kZSBpbiBwYXJlbnQgdHJlZVxuICAgIHZhciByZW5kZXJDb250ZXh0ID0gcGFyZW50Vm5vZGUgJiYgcGFyZW50Vm5vZGUuY29udGV4dDtcbiAgICB2bS4kc2xvdHMgPSByZXNvbHZlU2xvdHMob3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4sIHJlbmRlckNvbnRleHQpO1xuICAgIHZtLiRzY29wZWRTbG90cyA9IHBhcmVudFZub2RlXG4gICAgICAgID8gbm9ybWFsaXplU2NvcGVkU2xvdHModm0uJHBhcmVudCwgcGFyZW50Vm5vZGUuZGF0YS5zY29wZWRTbG90cywgdm0uJHNsb3RzKVxuICAgICAgICA6IGVtcHR5T2JqZWN0O1xuICAgIC8vIGJpbmQgdGhlIGNyZWF0ZUVsZW1lbnQgZm4gdG8gdGhpcyBpbnN0YW5jZVxuICAgIC8vIHNvIHRoYXQgd2UgZ2V0IHByb3BlciByZW5kZXIgY29udGV4dCBpbnNpZGUgaXQuXG4gICAgLy8gYXJncyBvcmRlcjogdGFnLCBkYXRhLCBjaGlsZHJlbiwgbm9ybWFsaXphdGlvblR5cGUsIGFsd2F5c05vcm1hbGl6ZVxuICAgIC8vIGludGVybmFsIHZlcnNpb24gaXMgdXNlZCBieSByZW5kZXIgZnVuY3Rpb25zIGNvbXBpbGVkIGZyb20gdGVtcGxhdGVzXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHZtLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQkMSh2bSwgYSwgYiwgYywgZCwgZmFsc2UpOyB9O1xuICAgIC8vIG5vcm1hbGl6YXRpb24gaXMgYWx3YXlzIGFwcGxpZWQgZm9yIHRoZSBwdWJsaWMgdmVyc2lvbiwgdXNlZCBpblxuICAgIC8vIHVzZXItd3JpdHRlbiByZW5kZXIgZnVuY3Rpb25zLlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICB2bS4kY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiBjcmVhdGVFbGVtZW50JDEodm0sIGEsIGIsIGMsIGQsIHRydWUpOyB9O1xuICAgIC8vICRhdHRycyAmICRsaXN0ZW5lcnMgYXJlIGV4cG9zZWQgZm9yIGVhc2llciBIT0MgY3JlYXRpb24uXG4gICAgLy8gdGhleSBuZWVkIHRvIGJlIHJlYWN0aXZlIHNvIHRoYXQgSE9DcyB1c2luZyB0aGVtIGFyZSBhbHdheXMgdXBkYXRlZFxuICAgIHZhciBwYXJlbnREYXRhID0gcGFyZW50Vm5vZGUgJiYgcGFyZW50Vm5vZGUuZGF0YTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGRlZmluZVJlYWN0aXZlKHZtLCAnJGF0dHJzJywgKHBhcmVudERhdGEgJiYgcGFyZW50RGF0YS5hdHRycykgfHwgZW1wdHlPYmplY3QsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgJiYgd2FybihcIiRhdHRycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUodm0sICckbGlzdGVuZXJzJywgb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzIHx8IGVtcHR5T2JqZWN0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAhaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ICYmIHdhcm4oXCIkbGlzdGVuZXJzIGlzIHJlYWRvbmx5LlwiLCB2bSk7XG4gICAgICAgIH0sIHRydWUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUodm0sICckYXR0cnMnLCAocGFyZW50RGF0YSAmJiBwYXJlbnREYXRhLmF0dHJzKSB8fCBlbXB0eU9iamVjdCwgbnVsbCwgdHJ1ZSk7XG4gICAgICAgIGRlZmluZVJlYWN0aXZlKHZtLCAnJGxpc3RlbmVycycsIG9wdGlvbnMuX3BhcmVudExpc3RlbmVycyB8fCBlbXB0eU9iamVjdCwgbnVsbCwgdHJ1ZSk7XG4gICAgfVxufVxudmFyIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSA9IG51bGw7XG5mdW5jdGlvbiByZW5kZXJNaXhpbihWdWUpIHtcbiAgICAvLyBpbnN0YWxsIHJ1bnRpbWUgY29udmVuaWVuY2UgaGVscGVyc1xuICAgIGluc3RhbGxSZW5kZXJIZWxwZXJzKFZ1ZS5wcm90b3R5cGUpO1xuICAgIFZ1ZS5wcm90b3R5cGUuJG5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBuZXh0VGljayhmbiwgdGhpcyk7XG4gICAgfTtcbiAgICBWdWUucHJvdG90eXBlLl9yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHZtLiRvcHRpb25zLCByZW5kZXIgPSBfYS5yZW5kZXIsIF9wYXJlbnRWbm9kZSA9IF9hLl9wYXJlbnRWbm9kZTtcbiAgICAgICAgaWYgKF9wYXJlbnRWbm9kZSAmJiB2bS5faXNNb3VudGVkKSB7XG4gICAgICAgICAgICB2bS4kc2NvcGVkU2xvdHMgPSBub3JtYWxpemVTY29wZWRTbG90cyh2bS4kcGFyZW50LCBfcGFyZW50Vm5vZGUuZGF0YS5zY29wZWRTbG90cywgdm0uJHNsb3RzLCB2bS4kc2NvcGVkU2xvdHMpO1xuICAgICAgICAgICAgaWYgKHZtLl9zbG90c1Byb3h5KSB7XG4gICAgICAgICAgICAgICAgc3luY1NldHVwU2xvdHModm0uX3Nsb3RzUHJveHksIHZtLiRzY29wZWRTbG90cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2V0IHBhcmVudCB2bm9kZS4gdGhpcyBhbGxvd3MgcmVuZGVyIGZ1bmN0aW9ucyB0byBoYXZlIGFjY2Vzc1xuICAgICAgICAvLyB0byB0aGUgZGF0YSBvbiB0aGUgcGxhY2Vob2xkZXIgbm9kZS5cbiAgICAgICAgdm0uJHZub2RlID0gX3BhcmVudFZub2RlO1xuICAgICAgICAvLyByZW5kZXIgc2VsZlxuICAgICAgICB2YXIgcHJldkluc3QgPSBjdXJyZW50SW5zdGFuY2U7XG4gICAgICAgIHZhciBwcmV2UmVuZGVySW5zdCA9IGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZTtcbiAgICAgICAgdmFyIHZub2RlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0Q3VycmVudEluc3RhbmNlKHZtKTtcbiAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSA9IHZtO1xuICAgICAgICAgICAgdm5vZGUgPSByZW5kZXIuY2FsbCh2bS5fcmVuZGVyUHJveHksIHZtLiRjcmVhdGVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIFwicmVuZGVyXCIpO1xuICAgICAgICAgICAgLy8gcmV0dXJuIGVycm9yIHJlbmRlciByZXN1bHQsXG4gICAgICAgICAgICAvLyBvciBwcmV2aW91cyB2bm9kZSB0byBwcmV2ZW50IHJlbmRlciBlcnJvciBjYXVzaW5nIGJsYW5rIGNvbXBvbmVudFxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHZtLiRvcHRpb25zLnJlbmRlckVycm9yKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdm5vZGUgPSB2bS4kb3B0aW9ucy5yZW5kZXJFcnJvci5jYWxsKHZtLl9yZW5kZXJQcm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQsIGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJyZW5kZXJFcnJvclwiKTtcbiAgICAgICAgICAgICAgICAgICAgdm5vZGUgPSB2bS5fdm5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdm5vZGUgPSB2bS5fdm5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSBwcmV2UmVuZGVySW5zdDtcbiAgICAgICAgICAgIHNldEN1cnJlbnRJbnN0YW5jZShwcmV2SW5zdCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgdGhlIHJldHVybmVkIGFycmF5IGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUgbm9kZSwgYWxsb3cgaXRcbiAgICAgICAgaWYgKGlzQXJyYXkodm5vZGUpICYmIHZub2RlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdm5vZGUgPSB2bm9kZVswXTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXR1cm4gZW1wdHkgdm5vZGUgaW4gY2FzZSB0aGUgcmVuZGVyIGZ1bmN0aW9uIGVycm9yZWQgb3V0XG4gICAgICAgIGlmICghKHZub2RlIGluc3RhbmNlb2YgVk5vZGUpKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc0FycmF5KHZub2RlKSkge1xuICAgICAgICAgICAgICAgIHdhcm4oJ011bHRpcGxlIHJvb3Qgbm9kZXMgcmV0dXJuZWQgZnJvbSByZW5kZXIgZnVuY3Rpb24uIFJlbmRlciBmdW5jdGlvbiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ3Nob3VsZCByZXR1cm4gYSBzaW5nbGUgcm9vdCBub2RlLicsIHZtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZub2RlID0gY3JlYXRlRW1wdHlWTm9kZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldCBwYXJlbnRcbiAgICAgICAgdm5vZGUucGFyZW50ID0gX3BhcmVudFZub2RlO1xuICAgICAgICByZXR1cm4gdm5vZGU7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlQ3Rvcihjb21wLCBiYXNlKSB7XG4gICAgaWYgKGNvbXAuX19lc01vZHVsZSB8fCAoaGFzU3ltYm9sICYmIGNvbXBbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ01vZHVsZScpKSB7XG4gICAgICAgIGNvbXAgPSBjb21wLmRlZmF1bHQ7XG4gICAgfVxuICAgIHJldHVybiBpc09iamVjdChjb21wKSA/IGJhc2UuZXh0ZW5kKGNvbXApIDogY29tcDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUFzeW5jUGxhY2Vob2xkZXIoZmFjdG9yeSwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4sIHRhZykge1xuICAgIHZhciBub2RlID0gY3JlYXRlRW1wdHlWTm9kZSgpO1xuICAgIG5vZGUuYXN5bmNGYWN0b3J5ID0gZmFjdG9yeTtcbiAgICBub2RlLmFzeW5jTWV0YSA9IHsgZGF0YTogZGF0YSwgY29udGV4dDogY29udGV4dCwgY2hpbGRyZW46IGNoaWxkcmVuLCB0YWc6IHRhZyB9O1xuICAgIHJldHVybiBub2RlO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUFzeW5jQ29tcG9uZW50KGZhY3RvcnksIGJhc2VDdG9yKSB7XG4gICAgaWYgKGlzVHJ1ZShmYWN0b3J5LmVycm9yKSAmJiBpc0RlZihmYWN0b3J5LmVycm9yQ29tcCkpIHtcbiAgICAgICAgcmV0dXJuIGZhY3RvcnkuZXJyb3JDb21wO1xuICAgIH1cbiAgICBpZiAoaXNEZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgcmV0dXJuIGZhY3RvcnkucmVzb2x2ZWQ7XG4gICAgfVxuICAgIHZhciBvd25lciA9IGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZTtcbiAgICBpZiAob3duZXIgJiYgaXNEZWYoZmFjdG9yeS5vd25lcnMpICYmIGZhY3Rvcnkub3duZXJzLmluZGV4T2Yob3duZXIpID09PSAtMSkge1xuICAgICAgICAvLyBhbHJlYWR5IHBlbmRpbmdcbiAgICAgICAgZmFjdG9yeS5vd25lcnMucHVzaChvd25lcik7XG4gICAgfVxuICAgIGlmIChpc1RydWUoZmFjdG9yeS5sb2FkaW5nKSAmJiBpc0RlZihmYWN0b3J5LmxvYWRpbmdDb21wKSkge1xuICAgICAgICByZXR1cm4gZmFjdG9yeS5sb2FkaW5nQ29tcDtcbiAgICB9XG4gICAgaWYgKG93bmVyICYmICFpc0RlZihmYWN0b3J5Lm93bmVycykpIHtcbiAgICAgICAgdmFyIG93bmVyc18xID0gKGZhY3Rvcnkub3duZXJzID0gW293bmVyXSk7XG4gICAgICAgIHZhciBzeW5jXzEgPSB0cnVlO1xuICAgICAgICB2YXIgdGltZXJMb2FkaW5nXzEgPSBudWxsO1xuICAgICAgICB2YXIgdGltZXJUaW1lb3V0XzEgPSBudWxsO1xuICAgICAgICBvd25lci4kb24oJ2hvb2s6ZGVzdHJveWVkJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVtb3ZlJDIob3duZXJzXzEsIG93bmVyKTsgfSk7XG4gICAgICAgIHZhciBmb3JjZVJlbmRlcl8xID0gZnVuY3Rpb24gKHJlbmRlckNvbXBsZXRlZCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvd25lcnNfMS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBvd25lcnNfMVtpXS4kZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZW5kZXJDb21wbGV0ZWQpIHtcbiAgICAgICAgICAgICAgICBvd25lcnNfMS5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgIGlmICh0aW1lckxvYWRpbmdfMSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJMb2FkaW5nXzEpO1xuICAgICAgICAgICAgICAgICAgICB0aW1lckxvYWRpbmdfMSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aW1lclRpbWVvdXRfMSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJUaW1lb3V0XzEpO1xuICAgICAgICAgICAgICAgICAgICB0aW1lclRpbWVvdXRfMSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgcmVzb2x2ZSA9IG9uY2UoZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgLy8gY2FjaGUgcmVzb2x2ZWRcbiAgICAgICAgICAgIGZhY3RvcnkucmVzb2x2ZWQgPSBlbnN1cmVDdG9yKHJlcywgYmFzZUN0b3IpO1xuICAgICAgICAgICAgLy8gaW52b2tlIGNhbGxiYWNrcyBvbmx5IGlmIHRoaXMgaXMgbm90IGEgc3luY2hyb25vdXMgcmVzb2x2ZVxuICAgICAgICAgICAgLy8gKGFzeW5jIHJlc29sdmVzIGFyZSBzaGltbWVkIGFzIHN5bmNocm9ub3VzIGR1cmluZyBTU1IpXG4gICAgICAgICAgICBpZiAoIXN5bmNfMSkge1xuICAgICAgICAgICAgICAgIGZvcmNlUmVuZGVyXzEodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBvd25lcnNfMS5sZW5ndGggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHJlamVjdF8xID0gb25jZShmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgd2FybihcIkZhaWxlZCB0byByZXNvbHZlIGFzeW5jIGNvbXBvbmVudDogXCIuY29uY2F0KFN0cmluZyhmYWN0b3J5KSkgK1xuICAgICAgICAgICAgICAgICAgICAocmVhc29uID8gXCJcXG5SZWFzb246IFwiLmNvbmNhdChyZWFzb24pIDogJycpKTtcbiAgICAgICAgICAgIGlmIChpc0RlZihmYWN0b3J5LmVycm9yQ29tcCkpIHtcbiAgICAgICAgICAgICAgICBmYWN0b3J5LmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmb3JjZVJlbmRlcl8xKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHJlc18xID0gZmFjdG9yeShyZXNvbHZlLCByZWplY3RfMSk7XG4gICAgICAgIGlmIChpc09iamVjdChyZXNfMSkpIHtcbiAgICAgICAgICAgIGlmIChpc1Byb21pc2UocmVzXzEpKSB7XG4gICAgICAgICAgICAgICAgLy8gKCkgPT4gUHJvbWlzZVxuICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc18xLnRoZW4ocmVzb2x2ZSwgcmVqZWN0XzEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzUHJvbWlzZShyZXNfMS5jb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmVzXzEuY29tcG9uZW50LnRoZW4ocmVzb2x2ZSwgcmVqZWN0XzEpO1xuICAgICAgICAgICAgICAgIGlmIChpc0RlZihyZXNfMS5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5lcnJvckNvbXAgPSBlbnN1cmVDdG9yKHJlc18xLmVycm9yLCBiYXNlQ3Rvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc0RlZihyZXNfMS5sb2FkaW5nKSkge1xuICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmdDb21wID0gZW5zdXJlQ3RvcihyZXNfMS5sb2FkaW5nLCBiYXNlQ3Rvcik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNfMS5kZWxheSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgTm9kZUpTIHRpbWVvdXQgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJMb2FkaW5nXzEgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lckxvYWRpbmdfMSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkgJiYgaXNVbmRlZihmYWN0b3J5LmVycm9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVJlbmRlcl8xKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCByZXNfMS5kZWxheSB8fCAyMDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc0RlZihyZXNfMS50aW1lb3V0KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIE5vZGVKUyB0aW1lb3V0IHR5cGVcbiAgICAgICAgICAgICAgICAgICAgdGltZXJUaW1lb3V0XzEgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyVGltZW91dF8xID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0XzEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IFwidGltZW91dCAoXCIuY29uY2F0KHJlc18xLnRpbWVvdXQsIFwibXMpXCIpIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIHJlc18xLnRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzeW5jXzEgPSBmYWxzZTtcbiAgICAgICAgLy8gcmV0dXJuIGluIGNhc2UgcmVzb2x2ZWQgc3luY2hyb25vdXNseVxuICAgICAgICByZXR1cm4gZmFjdG9yeS5sb2FkaW5nID8gZmFjdG9yeS5sb2FkaW5nQ29tcCA6IGZhY3RvcnkucmVzb2x2ZWQ7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRGaXJzdENvbXBvbmVudENoaWxkKGNoaWxkcmVuKSB7XG4gICAgaWYgKGlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjID0gY2hpbGRyZW5baV07XG4gICAgICAgICAgICBpZiAoaXNEZWYoYykgJiYgKGlzRGVmKGMuY29tcG9uZW50T3B0aW9ucykgfHwgaXNBc3luY1BsYWNlaG9sZGVyKGMpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG52YXIgU0lNUExFX05PUk1BTElaRSA9IDE7XG52YXIgQUxXQVlTX05PUk1BTElaRSA9IDI7XG4vLyB3cmFwcGVyIGZ1bmN0aW9uIGZvciBwcm92aWRpbmcgYSBtb3JlIGZsZXhpYmxlIGludGVyZmFjZVxuLy8gd2l0aG91dCBnZXR0aW5nIHllbGxlZCBhdCBieSBmbG93XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50JDEoY29udGV4dCwgdGFnLCBkYXRhLCBjaGlsZHJlbiwgbm9ybWFsaXphdGlvblR5cGUsIGFsd2F5c05vcm1hbGl6ZSkge1xuICAgIGlmIChpc0FycmF5KGRhdGEpIHx8IGlzUHJpbWl0aXZlKGRhdGEpKSB7XG4gICAgICAgIG5vcm1hbGl6YXRpb25UeXBlID0gY2hpbGRyZW47XG4gICAgICAgIGNoaWxkcmVuID0gZGF0YTtcbiAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKGlzVHJ1ZShhbHdheXNOb3JtYWxpemUpKSB7XG4gICAgICAgIG5vcm1hbGl6YXRpb25UeXBlID0gQUxXQVlTX05PUk1BTElaRTtcbiAgICB9XG4gICAgcmV0dXJuIF9jcmVhdGVFbGVtZW50KGNvbnRleHQsIHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlKTtcbn1cbmZ1bmN0aW9uIF9jcmVhdGVFbGVtZW50KGNvbnRleHQsIHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlKSB7XG4gICAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKGRhdGEuX19vYl9fKSkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICB3YXJuKFwiQXZvaWQgdXNpbmcgb2JzZXJ2ZWQgZGF0YSBvYmplY3QgYXMgdm5vZGUgZGF0YTogXCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGRhdGEpLCBcIlxcblwiKSArICdBbHdheXMgY3JlYXRlIGZyZXNoIHZub2RlIGRhdGEgb2JqZWN0cyBpbiBlYWNoIHJlbmRlciEnLCBjb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgICB9XG4gICAgLy8gb2JqZWN0IHN5bnRheCBpbiB2LWJpbmRcbiAgICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNEZWYoZGF0YS5pcykpIHtcbiAgICAgICAgdGFnID0gZGF0YS5pcztcbiAgICB9XG4gICAgaWYgKCF0YWcpIHtcbiAgICAgICAgLy8gaW4gY2FzZSBvZiBjb21wb25lbnQgOmlzIHNldCB0byBmYWxzeSB2YWx1ZVxuICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlWTm9kZSgpO1xuICAgIH1cbiAgICAvLyB3YXJuIGFnYWluc3Qgbm9uLXByaW1pdGl2ZSBrZXlcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLmtleSkgJiYgIWlzUHJpbWl0aXZlKGRhdGEua2V5KSkge1xuICAgICAgICB3YXJuKCdBdm9pZCB1c2luZyBub24tcHJpbWl0aXZlIHZhbHVlIGFzIGtleSwgJyArXG4gICAgICAgICAgICAndXNlIHN0cmluZy9udW1iZXIgdmFsdWUgaW5zdGVhZC4nLCBjb250ZXh0KTtcbiAgICB9XG4gICAgLy8gc3VwcG9ydCBzaW5nbGUgZnVuY3Rpb24gY2hpbGRyZW4gYXMgZGVmYXVsdCBzY29wZWQgc2xvdFxuICAgIGlmIChpc0FycmF5KGNoaWxkcmVuKSAmJiBpc0Z1bmN0aW9uKGNoaWxkcmVuWzBdKSkge1xuICAgICAgICBkYXRhID0gZGF0YSB8fCB7fTtcbiAgICAgICAgZGF0YS5zY29wZWRTbG90cyA9IHsgZGVmYXVsdDogY2hpbGRyZW5bMF0gfTtcbiAgICAgICAgY2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgICB9XG4gICAgaWYgKG5vcm1hbGl6YXRpb25UeXBlID09PSBBTFdBWVNfTk9STUFMSVpFKSB7XG4gICAgICAgIGNoaWxkcmVuID0gbm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pO1xuICAgIH1cbiAgICBlbHNlIGlmIChub3JtYWxpemF0aW9uVHlwZSA9PT0gU0lNUExFX05PUk1BTElaRSkge1xuICAgICAgICBjaGlsZHJlbiA9IHNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKTtcbiAgICB9XG4gICAgdmFyIHZub2RlLCBucztcbiAgICBpZiAodHlwZW9mIHRhZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIEN0b3IgPSB2b2lkIDA7XG4gICAgICAgIG5zID0gKGNvbnRleHQuJHZub2RlICYmIGNvbnRleHQuJHZub2RlLm5zKSB8fCBjb25maWcuZ2V0VGFnTmFtZXNwYWNlKHRhZyk7XG4gICAgICAgIGlmIChjb25maWcuaXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4gICAgICAgICAgICAvLyBwbGF0Zm9ybSBidWlsdC1pbiBlbGVtZW50c1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICBpc0RlZihkYXRhKSAmJlxuICAgICAgICAgICAgICAgIGlzRGVmKGRhdGEubmF0aXZlT24pICYmXG4gICAgICAgICAgICAgICAgZGF0YS50YWcgIT09ICdjb21wb25lbnQnKSB7XG4gICAgICAgICAgICAgICAgd2FybihcIlRoZSAubmF0aXZlIG1vZGlmaWVyIGZvciB2LW9uIGlzIG9ubHkgdmFsaWQgb24gY29tcG9uZW50cyBidXQgaXQgd2FzIHVzZWQgb24gPFwiLmNvbmNhdCh0YWcsIFwiPi5cIiksIGNvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdm5vZGUgPSBuZXcgVk5vZGUoY29uZmlnLnBhcnNlUGxhdGZvcm1UYWdOYW1lKHRhZyksIGRhdGEsIGNoaWxkcmVuLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKCFkYXRhIHx8ICFkYXRhLnByZSkgJiZcbiAgICAgICAgICAgIGlzRGVmKChDdG9yID0gcmVzb2x2ZUFzc2V0KGNvbnRleHQuJG9wdGlvbnMsICdjb21wb25lbnRzJywgdGFnKSkpKSB7XG4gICAgICAgICAgICAvLyBjb21wb25lbnRcbiAgICAgICAgICAgIHZub2RlID0gY3JlYXRlQ29tcG9uZW50KEN0b3IsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuLCB0YWcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gdW5rbm93biBvciB1bmxpc3RlZCBuYW1lc3BhY2VkIGVsZW1lbnRzXG4gICAgICAgICAgICAvLyBjaGVjayBhdCBydW50aW1lIGJlY2F1c2UgaXQgbWF5IGdldCBhc3NpZ25lZCBhIG5hbWVzcGFjZSB3aGVuIGl0c1xuICAgICAgICAgICAgLy8gcGFyZW50IG5vcm1hbGl6ZXMgY2hpbGRyZW5cbiAgICAgICAgICAgIHZub2RlID0gbmV3IFZOb2RlKHRhZywgZGF0YSwgY2hpbGRyZW4sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gZGlyZWN0IGNvbXBvbmVudCBvcHRpb25zIC8gY29uc3RydWN0b3JcbiAgICAgICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQodGFnLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbik7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KHZub2RlKSkge1xuICAgICAgICByZXR1cm4gdm5vZGU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRGVmKHZub2RlKSkge1xuICAgICAgICBpZiAoaXNEZWYobnMpKVxuICAgICAgICAgICAgYXBwbHlOUyh2bm9kZSwgbnMpO1xuICAgICAgICBpZiAoaXNEZWYoZGF0YSkpXG4gICAgICAgICAgICByZWdpc3RlckRlZXBCaW5kaW5ncyhkYXRhKTtcbiAgICAgICAgcmV0dXJuIHZub2RlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBhcHBseU5TKHZub2RlLCBucywgZm9yY2UpIHtcbiAgICB2bm9kZS5ucyA9IG5zO1xuICAgIGlmICh2bm9kZS50YWcgPT09ICdmb3JlaWduT2JqZWN0Jykge1xuICAgICAgICAvLyB1c2UgZGVmYXVsdCBuYW1lc3BhY2UgaW5zaWRlIGZvcmVpZ25PYmplY3RcbiAgICAgICAgbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZvcmNlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGlzRGVmKHZub2RlLmNoaWxkcmVuKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHZub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdm5vZGUuY2hpbGRyZW5baV07XG4gICAgICAgICAgICBpZiAoaXNEZWYoY2hpbGQudGFnKSAmJlxuICAgICAgICAgICAgICAgIChpc1VuZGVmKGNoaWxkLm5zKSB8fCAoaXNUcnVlKGZvcmNlKSAmJiBjaGlsZC50YWcgIT09ICdzdmcnKSkpIHtcbiAgICAgICAgICAgICAgICBhcHBseU5TKGNoaWxkLCBucywgZm9yY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuLy8gcmVmICM1MzE4XG4vLyBuZWNlc3NhcnkgdG8gZW5zdXJlIHBhcmVudCByZS1yZW5kZXIgd2hlbiBkZWVwIGJpbmRpbmdzIGxpa2UgOnN0eWxlIGFuZFxuLy8gOmNsYXNzIGFyZSB1c2VkIG9uIHNsb3Qgbm9kZXNcbmZ1bmN0aW9uIHJlZ2lzdGVyRGVlcEJpbmRpbmdzKGRhdGEpIHtcbiAgICBpZiAoaXNPYmplY3QoZGF0YS5zdHlsZSkpIHtcbiAgICAgICAgdHJhdmVyc2UoZGF0YS5zdHlsZSk7XG4gICAgfVxuICAgIGlmIChpc09iamVjdChkYXRhLmNsYXNzKSkge1xuICAgICAgICB0cmF2ZXJzZShkYXRhLmNsYXNzKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGludGVybmFsIHRoaXMgZnVuY3Rpb24gbmVlZHMgbWFudWFsIHB1YmxpYyB0eXBlIGRlY2xhcmF0aW9uIGJlY2F1c2UgaXQgcmVsaWVzXG4gKiBvbiBwcmV2aW91c2x5IG1hbnVhbGx5IGF1dGhvcmVkIHR5cGVzIGZyb20gVnVlIDJcbiAqL1xuZnVuY3Rpb24gaCh0eXBlLCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgICBpZiAoIWN1cnJlbnRJbnN0YW5jZSkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICB3YXJuKFwiZ2xvYmFsbHkgaW1wb3J0ZWQgaCgpIGNhbiBvbmx5IGJlIGludm9rZWQgd2hlbiB0aGVyZSBpcyBhbiBhY3RpdmUgXCIgK1xuICAgICAgICAgICAgICAgIFwiY29tcG9uZW50IGluc3RhbmNlLCBlLmcuIHN5bmNocm9ub3VzbHkgaW4gYSBjb21wb25lbnQncyByZW5kZXIgb3Igc2V0dXAgZnVuY3Rpb24uXCIpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudCQxKGN1cnJlbnRJbnN0YW5jZSwgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCAyLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXJyLCB2bSwgaW5mbykge1xuICAgIC8vIERlYWN0aXZhdGUgZGVwcyB0cmFja2luZyB3aGlsZSBwcm9jZXNzaW5nIGVycm9yIGhhbmRsZXIgdG8gYXZvaWQgcG9zc2libGUgaW5maW5pdGUgcmVuZGVyaW5nLlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZXgvaXNzdWVzLzE1MDVcbiAgICBwdXNoVGFyZ2V0KCk7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHZtKSB7XG4gICAgICAgICAgICB2YXIgY3VyID0gdm07XG4gICAgICAgICAgICB3aGlsZSAoKGN1ciA9IGN1ci4kcGFyZW50KSkge1xuICAgICAgICAgICAgICAgIHZhciBob29rcyA9IGN1ci4kb3B0aW9ucy5lcnJvckNhcHR1cmVkO1xuICAgICAgICAgICAgICAgIGlmIChob29rcykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXB0dXJlID0gaG9va3NbaV0uY2FsbChjdXIsIGVyciwgdm0sIGluZm8pID09PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FwdHVyZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxIYW5kbGVFcnJvcihlLCBjdXIsICdlcnJvckNhcHR1cmVkIGhvb2snKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBnbG9iYWxIYW5kbGVFcnJvcihlcnIsIHZtLCBpbmZvKTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHBvcFRhcmdldCgpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGhhbmRsZXIsIGNvbnRleHQsIGFyZ3MsIHZtLCBpbmZvKSB7XG4gICAgdmFyIHJlcztcbiAgICB0cnkge1xuICAgICAgICByZXMgPSBhcmdzID8gaGFuZGxlci5hcHBseShjb250ZXh0LCBhcmdzKSA6IGhhbmRsZXIuY2FsbChjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlcyAmJiAhcmVzLl9pc1Z1ZSAmJiBpc1Byb21pc2UocmVzKSAmJiAhcmVzLl9oYW5kbGVkKSB7XG4gICAgICAgICAgICByZXMuY2F0Y2goZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGhhbmRsZUVycm9yKGUsIHZtLCBpbmZvICsgXCIgKFByb21pc2UvYXN5bmMpXCIpOyB9KTtcbiAgICAgICAgICAgIHJlcy5faGFuZGxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIGluZm8pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gZ2xvYmFsSGFuZGxlRXJyb3IoZXJyLCB2bSwgaW5mbykge1xuICAgIGlmIChjb25maWcuZXJyb3JIYW5kbGVyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLmVycm9ySGFuZGxlci5jYWxsKG51bGwsIGVyciwgdm0sIGluZm8pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgdXNlciBpbnRlbnRpb25hbGx5IHRocm93cyB0aGUgb3JpZ2luYWwgZXJyb3IgaW4gdGhlIGhhbmRsZXIsXG4gICAgICAgICAgICAvLyBkbyBub3QgbG9nIGl0IHR3aWNlXG4gICAgICAgICAgICBpZiAoZSAhPT0gZXJyKSB7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3IoZSwgbnVsbCwgJ2NvbmZpZy5lcnJvckhhbmRsZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBsb2dFcnJvcihlcnIsIHZtLCBpbmZvKTtcbn1cbmZ1bmN0aW9uIGxvZ0Vycm9yKGVyciwgdm0sIGluZm8pIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKFwiRXJyb3IgaW4gXCIuY29uY2F0KGluZm8sIFwiOiBcXFwiXCIpLmNvbmNhdChlcnIudG9TdHJpbmcoKSwgXCJcXFwiXCIpLCB2bSk7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGluQnJvd3NlciAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbn1cblxuLyogZ2xvYmFscyBNdXRhdGlvbk9ic2VydmVyICovXG52YXIgaXNVc2luZ01pY3JvVGFzayA9IGZhbHNlO1xudmFyIGNhbGxiYWNrcyA9IFtdO1xudmFyIHBlbmRpbmcgPSBmYWxzZTtcbmZ1bmN0aW9uIGZsdXNoQ2FsbGJhY2tzKCkge1xuICAgIHBlbmRpbmcgPSBmYWxzZTtcbiAgICB2YXIgY29waWVzID0gY2FsbGJhY2tzLnNsaWNlKDApO1xuICAgIGNhbGxiYWNrcy5sZW5ndGggPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29waWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvcGllc1tpXSgpO1xuICAgIH1cbn1cbi8vIEhlcmUgd2UgaGF2ZSBhc3luYyBkZWZlcnJpbmcgd3JhcHBlcnMgdXNpbmcgbWljcm90YXNrcy5cbi8vIEluIDIuNSB3ZSB1c2VkIChtYWNybykgdGFza3MgKGluIGNvbWJpbmF0aW9uIHdpdGggbWljcm90YXNrcykuXG4vLyBIb3dldmVyLCBpdCBoYXMgc3VidGxlIHByb2JsZW1zIHdoZW4gc3RhdGUgaXMgY2hhbmdlZCByaWdodCBiZWZvcmUgcmVwYWludFxuLy8gKGUuZy4gIzY4MTMsIG91dC1pbiB0cmFuc2l0aW9ucykuXG4vLyBBbHNvLCB1c2luZyAobWFjcm8pIHRhc2tzIGluIGV2ZW50IGhhbmRsZXIgd291bGQgY2F1c2Ugc29tZSB3ZWlyZCBiZWhhdmlvcnNcbi8vIHRoYXQgY2Fubm90IGJlIGNpcmN1bXZlbnRlZCAoZS5nLiAjNzEwOSwgIzcxNTMsICM3NTQ2LCAjNzgzNCwgIzgxMDkpLlxuLy8gU28gd2Ugbm93IHVzZSBtaWNyb3Rhc2tzIGV2ZXJ5d2hlcmUsIGFnYWluLlxuLy8gQSBtYWpvciBkcmF3YmFjayBvZiB0aGlzIHRyYWRlb2ZmIGlzIHRoYXQgdGhlcmUgYXJlIHNvbWUgc2NlbmFyaW9zXG4vLyB3aGVyZSBtaWNyb3Rhc2tzIGhhdmUgdG9vIGhpZ2ggYSBwcmlvcml0eSBhbmQgZmlyZSBpbiBiZXR3ZWVuIHN1cHBvc2VkbHlcbi8vIHNlcXVlbnRpYWwgZXZlbnRzIChlLmcuICM0NTIxLCAjNjY5MCwgd2hpY2ggaGF2ZSB3b3JrYXJvdW5kcylcbi8vIG9yIGV2ZW4gYmV0d2VlbiBidWJibGluZyBvZiB0aGUgc2FtZSBldmVudCAoIzY1NjYpLlxudmFyIHRpbWVyRnVuYztcbi8vIFRoZSBuZXh0VGljayBiZWhhdmlvciBsZXZlcmFnZXMgdGhlIG1pY3JvdGFzayBxdWV1ZSwgd2hpY2ggY2FuIGJlIGFjY2Vzc2VkXG4vLyB2aWEgZWl0aGVyIG5hdGl2ZSBQcm9taXNlLnRoZW4gb3IgTXV0YXRpb25PYnNlcnZlci5cbi8vIE11dGF0aW9uT2JzZXJ2ZXIgaGFzIHdpZGVyIHN1cHBvcnQsIGhvd2V2ZXIgaXQgaXMgc2VyaW91c2x5IGJ1Z2dlZCBpblxuLy8gVUlXZWJWaWV3IGluIGlPUyA+PSA5LjMuMyB3aGVuIHRyaWdnZXJlZCBpbiB0b3VjaCBldmVudCBoYW5kbGVycy4gSXRcbi8vIGNvbXBsZXRlbHkgc3RvcHMgd29ya2luZyBhZnRlciB0cmlnZ2VyaW5nIGEgZmV3IHRpbWVzLi4uIHNvLCBpZiBuYXRpdmVcbi8vIFByb21pc2UgaXMgYXZhaWxhYmxlLCB3ZSB3aWxsIHVzZSBpdDpcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0LCAkZmxvdy1kaXNhYmxlLWxpbmUgKi9cbmlmICh0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUHJvbWlzZSkpIHtcbiAgICB2YXIgcF8xID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBwXzEudGhlbihmbHVzaENhbGxiYWNrcyk7XG4gICAgICAgIC8vIEluIHByb2JsZW1hdGljIFVJV2ViVmlld3MsIFByb21pc2UudGhlbiBkb2Vzbid0IGNvbXBsZXRlbHkgYnJlYWssIGJ1dFxuICAgICAgICAvLyBpdCBjYW4gZ2V0IHN0dWNrIGluIGEgd2VpcmQgc3RhdGUgd2hlcmUgY2FsbGJhY2tzIGFyZSBwdXNoZWQgaW50byB0aGVcbiAgICAgICAgLy8gbWljcm90YXNrIHF1ZXVlIGJ1dCB0aGUgcXVldWUgaXNuJ3QgYmVpbmcgZmx1c2hlZCwgdW50aWwgdGhlIGJyb3dzZXJcbiAgICAgICAgLy8gbmVlZHMgdG8gZG8gc29tZSBvdGhlciB3b3JrLCBlLmcuIGhhbmRsZSBhIHRpbWVyLiBUaGVyZWZvcmUgd2UgY2FuXG4gICAgICAgIC8vIFwiZm9yY2VcIiB0aGUgbWljcm90YXNrIHF1ZXVlIHRvIGJlIGZsdXNoZWQgYnkgYWRkaW5nIGFuIGVtcHR5IHRpbWVyLlxuICAgICAgICBpZiAoaXNJT1MpXG4gICAgICAgICAgICBzZXRUaW1lb3V0KG5vb3ApO1xuICAgIH07XG4gICAgaXNVc2luZ01pY3JvVGFzayA9IHRydWU7XG59XG5lbHNlIGlmICghaXNJRSAmJlxuICAgIHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIChpc05hdGl2ZShNdXRhdGlvbk9ic2VydmVyKSB8fFxuICAgICAgICAvLyBQaGFudG9tSlMgYW5kIGlPUyA3LnhcbiAgICAgICAgTXV0YXRpb25PYnNlcnZlci50b1N0cmluZygpID09PSAnW29iamVjdCBNdXRhdGlvbk9ic2VydmVyQ29uc3RydWN0b3JdJykpIHtcbiAgICAvLyBVc2UgTXV0YXRpb25PYnNlcnZlciB3aGVyZSBuYXRpdmUgUHJvbWlzZSBpcyBub3QgYXZhaWxhYmxlLFxuICAgIC8vIGUuZy4gUGhhbnRvbUpTLCBpT1M3LCBBbmRyb2lkIDQuNFxuICAgIC8vICgjNjQ2NiBNdXRhdGlvbk9ic2VydmVyIGlzIHVucmVsaWFibGUgaW4gSUUxMSlcbiAgICB2YXIgY291bnRlcl8xID0gMTtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaENhbGxiYWNrcyk7XG4gICAgdmFyIHRleHROb2RlXzEgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShTdHJpbmcoY291bnRlcl8xKSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0ZXh0Tm9kZV8xLCB7XG4gICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWVcbiAgICB9KTtcbiAgICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvdW50ZXJfMSA9IChjb3VudGVyXzEgKyAxKSAlIDI7XG4gICAgICAgIHRleHROb2RlXzEuZGF0YSA9IFN0cmluZyhjb3VudGVyXzEpO1xuICAgIH07XG4gICAgaXNVc2luZ01pY3JvVGFzayA9IHRydWU7XG59XG5lbHNlIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShzZXRJbW1lZGlhdGUpKSB7XG4gICAgLy8gRmFsbGJhY2sgdG8gc2V0SW1tZWRpYXRlLlxuICAgIC8vIFRlY2huaWNhbGx5IGl0IGxldmVyYWdlcyB0aGUgKG1hY3JvKSB0YXNrIHF1ZXVlLFxuICAgIC8vIGJ1dCBpdCBpcyBzdGlsbCBhIGJldHRlciBjaG9pY2UgdGhhbiBzZXRUaW1lb3V0LlxuICAgIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2V0SW1tZWRpYXRlKGZsdXNoQ2FsbGJhY2tzKTtcbiAgICB9O1xufVxuZWxzZSB7XG4gICAgLy8gRmFsbGJhY2sgdG8gc2V0VGltZW91dC5cbiAgICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZmx1c2hDYWxsYmFja3MsIDApO1xuICAgIH07XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBuZXh0VGljayhjYiwgY3R4KSB7XG4gICAgdmFyIF9yZXNvbHZlO1xuICAgIGNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGNiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNiLmNhbGwoY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZSwgY3R4LCAnbmV4dFRpY2snKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChfcmVzb2x2ZSkge1xuICAgICAgICAgICAgX3Jlc29sdmUoY3R4KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgICBwZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgdGltZXJGdW5jKCk7XG4gICAgfVxuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIGlmICghY2IgJiYgdHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHVzZUNzc01vZHVsZShuYW1lKSB7XG4gICAgaWYgKG5hbWUgPT09IHZvaWQgMCkgeyBuYW1lID0gJyRzdHlsZSc7IH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIHtcbiAgICAgICAgaWYgKCFjdXJyZW50SW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcInVzZUNzc01vZHVsZSBtdXN0IGJlIGNhbGxlZCBpbnNpZGUgc2V0dXAoKVwiKTtcbiAgICAgICAgICAgIHJldHVybiBlbXB0eU9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbW9kID0gY3VycmVudEluc3RhbmNlW25hbWVdO1xuICAgICAgICBpZiAoIW1vZCkge1xuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgIHdhcm4oXCJDdXJyZW50IGluc3RhbmNlIGRvZXMgbm90IGhhdmUgQ1NTIG1vZHVsZSBuYW1lZCBcXFwiXCIuY29uY2F0KG5hbWUsIFwiXFxcIi5cIikpO1xuICAgICAgICAgICAgcmV0dXJuIGVtcHR5T2JqZWN0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtb2Q7XG4gICAgfVxufVxuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBTRkMncyBDU1MgdmFyaWFibGUgaW5qZWN0aW9uIGZlYXR1cmUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1c2VDc3NWYXJzKGdldHRlcikge1xuICAgIGlmICghaW5Ccm93c2VyICYmICFmYWxzZSlcbiAgICAgICAgcmV0dXJuO1xuICAgIHZhciBpbnN0YW5jZSA9IGN1cnJlbnRJbnN0YW5jZTtcbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgIHdhcm4oXCJ1c2VDc3NWYXJzIGlzIGNhbGxlZCB3aXRob3V0IGN1cnJlbnQgYWN0aXZlIGNvbXBvbmVudCBpbnN0YW5jZS5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd2F0Y2hQb3N0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVsID0gaW5zdGFuY2UuJGVsO1xuICAgICAgICB2YXIgdmFycyA9IGdldHRlcihpbnN0YW5jZSwgaW5zdGFuY2UuX3NldHVwUHJveHkpO1xuICAgICAgICBpZiAoZWwgJiYgZWwubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgIHZhciBzdHlsZSA9IGVsLnN0eWxlO1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHZhcnMpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zZXRQcm9wZXJ0eShcIi0tXCIuY29uY2F0KGtleSksIHZhcnNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuLyoqXG4gKiB2My1jb21wYXRpYmxlIGFzeW5jIGNvbXBvbmVudCBBUEkuXG4gKiBAaW50ZXJuYWwgdGhlIHR5cGUgaXMgbWFudWFsbHkgZGVjbGFyZWQgaW4gPHJvb3Q+L3R5cGVzL3YzLWRlZmluZS1hc3luYy1jb21wb25lbnQuZC50c1xuICogYmVjYXVzZSBpdCByZWxpZXMgb24gZXhpc3RpbmcgbWFudWFsIHR5cGVzXG4gKi9cbmZ1bmN0aW9uIGRlZmluZUFzeW5jQ29tcG9uZW50KHNvdXJjZSkge1xuICAgIGlmIChpc0Z1bmN0aW9uKHNvdXJjZSkpIHtcbiAgICAgICAgc291cmNlID0geyBsb2FkZXI6IHNvdXJjZSB9O1xuICAgIH1cbiAgICB2YXIgbG9hZGVyID0gc291cmNlLmxvYWRlciwgbG9hZGluZ0NvbXBvbmVudCA9IHNvdXJjZS5sb2FkaW5nQ29tcG9uZW50LCBlcnJvckNvbXBvbmVudCA9IHNvdXJjZS5lcnJvckNvbXBvbmVudCwgX2EgPSBzb3VyY2UuZGVsYXksIGRlbGF5ID0gX2EgPT09IHZvaWQgMCA/IDIwMCA6IF9hLCB0aW1lb3V0ID0gc291cmNlLnRpbWVvdXQsIC8vIHVuZGVmaW5lZCA9IG5ldmVyIHRpbWVzIG91dFxuICAgIF9iID0gc291cmNlLnN1c3BlbnNpYmxlLCAvLyB1bmRlZmluZWQgPSBuZXZlciB0aW1lcyBvdXRcbiAgICBzdXNwZW5zaWJsZSA9IF9iID09PSB2b2lkIDAgPyBmYWxzZSA6IF9iLCAvLyBpbiBWdWUgMyBkZWZhdWx0IGlzIHRydWVcbiAgICB1c2VyT25FcnJvciA9IHNvdXJjZS5vbkVycm9yO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN1c3BlbnNpYmxlKSB7XG4gICAgICAgIHdhcm4oXCJUaGUgc3VzcGVuc2libGUgb3B0aW9uIGZvciBhc3luYyBjb21wb25lbnRzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gVnVlMi4gSXQgaXMgaWdub3JlZC5cIik7XG4gICAgfVxuICAgIHZhciBwZW5kaW5nUmVxdWVzdCA9IG51bGw7XG4gICAgdmFyIHJldHJpZXMgPSAwO1xuICAgIHZhciByZXRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0cmllcysrO1xuICAgICAgICBwZW5kaW5nUmVxdWVzdCA9IG51bGw7XG4gICAgICAgIHJldHVybiBsb2FkKCk7XG4gICAgfTtcbiAgICB2YXIgbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHRoaXNSZXF1ZXN0O1xuICAgICAgICByZXR1cm4gKHBlbmRpbmdSZXF1ZXN0IHx8XG4gICAgICAgICAgICAodGhpc1JlcXVlc3QgPSBwZW5kaW5nUmVxdWVzdCA9XG4gICAgICAgICAgICAgICAgbG9hZGVyKClcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoU3RyaW5nKGVycikpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodXNlck9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXJSZXRyeSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUocmV0cnkoKSk7IH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXJGYWlsID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVqZWN0KGVycik7IH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlck9uRXJyb3IoZXJyLCB1c2VyUmV0cnksIHVzZXJGYWlsLCByZXRyaWVzICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChjb21wKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzUmVxdWVzdCAhPT0gcGVuZGluZ1JlcXVlc3QgJiYgcGVuZGluZ1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZW5kaW5nUmVxdWVzdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhY29tcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2FybihcIkFzeW5jIGNvbXBvbmVudCBsb2FkZXIgcmVzb2x2ZWQgdG8gdW5kZWZpbmVkLiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJJZiB5b3UgYXJlIHVzaW5nIHJldHJ5KCksIG1ha2Ugc3VyZSB0byByZXR1cm4gaXRzIHJldHVybiB2YWx1ZS5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gaW50ZXJvcCBtb2R1bGUgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbXAuX19lc01vZHVsZSB8fCBjb21wW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcCA9IGNvbXAuZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb21wICYmICFpc09iamVjdChjb21wKSAmJiAhaXNGdW5jdGlvbihjb21wKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhc3luYyBjb21wb25lbnQgbG9hZCByZXN1bHQ6IFwiLmNvbmNhdChjb21wKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXA7XG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb21wb25lbnQgPSBsb2FkKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcbiAgICAgICAgICAgIGRlbGF5OiBkZWxheSxcbiAgICAgICAgICAgIHRpbWVvdXQ6IHRpbWVvdXQsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3JDb21wb25lbnQsXG4gICAgICAgICAgICBsb2FkaW5nOiBsb2FkaW5nQ29tcG9uZW50XG4gICAgICAgIH07XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlmZUN5Y2xlKGhvb2tOYW1lKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChmbiwgdGFyZ2V0KSB7XG4gICAgICAgIGlmICh0YXJnZXQgPT09IHZvaWQgMCkgeyB0YXJnZXQgPSBjdXJyZW50SW5zdGFuY2U7IH1cbiAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB3YXJuKFwiXCIuY29uY2F0KGZvcm1hdE5hbWUoaG9va05hbWUpLCBcIiBpcyBjYWxsZWQgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgY29tcG9uZW50IGluc3RhbmNlIHRvIGJlIFwiKSArXG4gICAgICAgICAgICAgICAgICAgIFwiYXNzb2NpYXRlZCB3aXRoLiBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiTGlmZWN5Y2xlIGluamVjdGlvbiBBUElzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGV4ZWN1dGlvbiBvZiBzZXR1cCgpLlwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5qZWN0SG9vayh0YXJnZXQsIGhvb2tOYW1lLCBmbik7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGZvcm1hdE5hbWUobmFtZSkge1xuICAgIGlmIChuYW1lID09PSAnYmVmb3JlRGVzdHJveScpIHtcbiAgICAgICAgbmFtZSA9ICdiZWZvcmVVbm1vdW50JztcbiAgICB9XG4gICAgZWxzZSBpZiAobmFtZSA9PT0gJ2Rlc3Ryb3llZCcpIHtcbiAgICAgICAgbmFtZSA9ICd1bm1vdW50ZWQnO1xuICAgIH1cbiAgICByZXR1cm4gXCJvblwiLmNvbmNhdChuYW1lWzBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpKTtcbn1cbmZ1bmN0aW9uIGluamVjdEhvb2soaW5zdGFuY2UsIGhvb2tOYW1lLCBmbikge1xuICAgIHZhciBvcHRpb25zID0gaW5zdGFuY2UuJG9wdGlvbnM7XG4gICAgb3B0aW9uc1tob29rTmFtZV0gPSBtZXJnZUxpZmVjeWNsZUhvb2sob3B0aW9uc1tob29rTmFtZV0sIGZuKTtcbn1cbnZhciBvbkJlZm9yZU1vdW50ID0gY3JlYXRlTGlmZUN5Y2xlKCdiZWZvcmVNb3VudCcpO1xudmFyIG9uTW91bnRlZCA9IGNyZWF0ZUxpZmVDeWNsZSgnbW91bnRlZCcpO1xudmFyIG9uQmVmb3JlVXBkYXRlID0gY3JlYXRlTGlmZUN5Y2xlKCdiZWZvcmVVcGRhdGUnKTtcbnZhciBvblVwZGF0ZWQgPSBjcmVhdGVMaWZlQ3ljbGUoJ3VwZGF0ZWQnKTtcbnZhciBvbkJlZm9yZVVubW91bnQgPSBjcmVhdGVMaWZlQ3ljbGUoJ2JlZm9yZURlc3Ryb3knKTtcbnZhciBvblVubW91bnRlZCA9IGNyZWF0ZUxpZmVDeWNsZSgnZGVzdHJveWVkJyk7XG52YXIgb25BY3RpdmF0ZWQgPSBjcmVhdGVMaWZlQ3ljbGUoJ2FjdGl2YXRlZCcpO1xudmFyIG9uRGVhY3RpdmF0ZWQgPSBjcmVhdGVMaWZlQ3ljbGUoJ2RlYWN0aXZhdGVkJyk7XG52YXIgb25TZXJ2ZXJQcmVmZXRjaCA9IGNyZWF0ZUxpZmVDeWNsZSgnc2VydmVyUHJlZmV0Y2gnKTtcbnZhciBvblJlbmRlclRyYWNrZWQgPSBjcmVhdGVMaWZlQ3ljbGUoJ3JlbmRlclRyYWNrZWQnKTtcbnZhciBvblJlbmRlclRyaWdnZXJlZCA9IGNyZWF0ZUxpZmVDeWNsZSgncmVuZGVyVHJpZ2dlcmVkJyk7XG52YXIgaW5qZWN0RXJyb3JDYXB0dXJlZEhvb2sgPSBjcmVhdGVMaWZlQ3ljbGUoJ2Vycm9yQ2FwdHVyZWQnKTtcbmZ1bmN0aW9uIG9uRXJyb3JDYXB0dXJlZChob29rLCB0YXJnZXQpIHtcbiAgICBpZiAodGFyZ2V0ID09PSB2b2lkIDApIHsgdGFyZ2V0ID0gY3VycmVudEluc3RhbmNlOyB9XG4gICAgaW5qZWN0RXJyb3JDYXB0dXJlZEhvb2soaG9vaywgdGFyZ2V0KTtcbn1cblxuLyoqXG4gKiBOb3RlOiBhbHNvIHVwZGF0ZSBkaXN0L3Z1ZS5ydW50aW1lLm1qcyB3aGVuIGFkZGluZyBuZXcgZXhwb3J0cyB0byB0aGlzIGZpbGUuXG4gKi9cbnZhciB2ZXJzaW9uID0gJzIuNy4xNic7XG4vKipcbiAqIEBpbnRlcm5hbCB0eXBlIGlzIG1hbnVhbGx5IGRlY2xhcmVkIGluIDxyb290Pi90eXBlcy92My1kZWZpbmUtY29tcG9uZW50LmQudHNcbiAqL1xuZnVuY3Rpb24gZGVmaW5lQ29tcG9uZW50KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucztcbn1cblxudmFyIHNlZW5PYmplY3RzID0gbmV3IF9TZXQoKTtcbi8qKlxuICogUmVjdXJzaXZlbHkgdHJhdmVyc2UgYW4gb2JqZWN0IHRvIGV2b2tlIGFsbCBjb252ZXJ0ZWRcbiAqIGdldHRlcnMsIHNvIHRoYXQgZXZlcnkgbmVzdGVkIHByb3BlcnR5IGluc2lkZSB0aGUgb2JqZWN0XG4gKiBpcyBjb2xsZWN0ZWQgYXMgYSBcImRlZXBcIiBkZXBlbmRlbmN5LlxuICovXG5mdW5jdGlvbiB0cmF2ZXJzZSh2YWwpIHtcbiAgICBfdHJhdmVyc2UodmFsLCBzZWVuT2JqZWN0cyk7XG4gICAgc2Vlbk9iamVjdHMuY2xlYXIoKTtcbiAgICByZXR1cm4gdmFsO1xufVxuZnVuY3Rpb24gX3RyYXZlcnNlKHZhbCwgc2Vlbikge1xuICAgIHZhciBpLCBrZXlzO1xuICAgIHZhciBpc0EgPSBpc0FycmF5KHZhbCk7XG4gICAgaWYgKCghaXNBICYmICFpc09iamVjdCh2YWwpKSB8fFxuICAgICAgICB2YWwuX192X3NraXAgLyogUmVhY3RpdmVGbGFncy5TS0lQICovIHx8XG4gICAgICAgIE9iamVjdC5pc0Zyb3plbih2YWwpIHx8XG4gICAgICAgIHZhbCBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHZhbC5fX29iX18pIHtcbiAgICAgICAgdmFyIGRlcElkID0gdmFsLl9fb2JfXy5kZXAuaWQ7XG4gICAgICAgIGlmIChzZWVuLmhhcyhkZXBJZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZWVuLmFkZChkZXBJZCk7XG4gICAgfVxuICAgIGlmIChpc0EpIHtcbiAgICAgICAgaSA9IHZhbC5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pXG4gICAgICAgICAgICBfdHJhdmVyc2UodmFsW2ldLCBzZWVuKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNSZWYodmFsKSkge1xuICAgICAgICBfdHJhdmVyc2UodmFsLnZhbHVlLCBzZWVuKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgICAgICBpID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pXG4gICAgICAgICAgICBfdHJhdmVyc2UodmFsW2tleXNbaV1dLCBzZWVuKTtcbiAgICB9XG59XG5cbnZhciB1aWQkMSA9IDA7XG4vKipcbiAqIEEgd2F0Y2hlciBwYXJzZXMgYW4gZXhwcmVzc2lvbiwgY29sbGVjdHMgZGVwZW5kZW5jaWVzLFxuICogYW5kIGZpcmVzIGNhbGxiYWNrIHdoZW4gdGhlIGV4cHJlc3Npb24gdmFsdWUgY2hhbmdlcy5cbiAqIFRoaXMgaXMgdXNlZCBmb3IgYm90aCB0aGUgJHdhdGNoKCkgYXBpIGFuZCBkaXJlY3RpdmVzLlxuICogQGludGVybmFsXG4gKi9cbnZhciBXYXRjaGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFdhdGNoZXIodm0sIGV4cE9yRm4sIGNiLCBvcHRpb25zLCBpc1JlbmRlcldhdGNoZXIpIHtcbiAgICAgICAgcmVjb3JkRWZmZWN0U2NvcGUodGhpcywgXG4gICAgICAgIC8vIGlmIHRoZSBhY3RpdmUgZWZmZWN0IHNjb3BlIGlzIG1hbnVhbGx5IGNyZWF0ZWQgKG5vdCBhIGNvbXBvbmVudCBzY29wZSksXG4gICAgICAgIC8vIHByaW9yaXRpemUgaXRcbiAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUgJiYgIWFjdGl2ZUVmZmVjdFNjb3BlLl92bVxuICAgICAgICAgICAgPyBhY3RpdmVFZmZlY3RTY29wZVxuICAgICAgICAgICAgOiB2bVxuICAgICAgICAgICAgICAgID8gdm0uX3Njb3BlXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpO1xuICAgICAgICBpZiAoKHRoaXMudm0gPSB2bSkgJiYgaXNSZW5kZXJXYXRjaGVyKSB7XG4gICAgICAgICAgICB2bS5fd2F0Y2hlciA9IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3B0aW9uc1xuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5kZWVwID0gISFvcHRpb25zLmRlZXA7XG4gICAgICAgICAgICB0aGlzLnVzZXIgPSAhIW9wdGlvbnMudXNlcjtcbiAgICAgICAgICAgIHRoaXMubGF6eSA9ICEhb3B0aW9ucy5sYXp5O1xuICAgICAgICAgICAgdGhpcy5zeW5jID0gISFvcHRpb25zLnN5bmM7XG4gICAgICAgICAgICB0aGlzLmJlZm9yZSA9IG9wdGlvbnMuYmVmb3JlO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uVHJhY2sgPSBvcHRpb25zLm9uVHJhY2s7XG4gICAgICAgICAgICAgICAgdGhpcy5vblRyaWdnZXIgPSBvcHRpb25zLm9uVHJpZ2dlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVlcCA9IHRoaXMudXNlciA9IHRoaXMubGF6eSA9IHRoaXMuc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2IgPSBjYjtcbiAgICAgICAgdGhpcy5pZCA9ICsrdWlkJDE7IC8vIHVpZCBmb3IgYmF0Y2hpbmdcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLnBvc3QgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRoaXMubGF6eTsgLy8gZm9yIGxhenkgd2F0Y2hlcnNcbiAgICAgICAgdGhpcy5kZXBzID0gW107XG4gICAgICAgIHRoaXMubmV3RGVwcyA9IFtdO1xuICAgICAgICB0aGlzLmRlcElkcyA9IG5ldyBfU2V0KCk7XG4gICAgICAgIHRoaXMubmV3RGVwSWRzID0gbmV3IF9TZXQoKTtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGV4cE9yRm4udG9TdHJpbmcoKSA6ICcnO1xuICAgICAgICAvLyBwYXJzZSBleHByZXNzaW9uIGZvciBnZXR0ZXJcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZXhwT3JGbikpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0dGVyID0gZXhwT3JGbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0dGVyID0gcGFyc2VQYXRoKGV4cE9yRm4pO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmdldHRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0dGVyID0gbm9vcDtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgICAgIHdhcm4oXCJGYWlsZWQgd2F0Y2hpbmcgcGF0aDogXFxcIlwiLmNvbmNhdChleHBPckZuLCBcIlxcXCIgXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdXYXRjaGVyIG9ubHkgYWNjZXB0cyBzaW1wbGUgZG90LWRlbGltaXRlZCBwYXRocy4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnRm9yIGZ1bGwgY29udHJvbCwgdXNlIGEgZnVuY3Rpb24gaW5zdGVhZC4nLCB2bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGF6eSA/IHVuZGVmaW5lZCA6IHRoaXMuZ2V0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV2YWx1YXRlIHRoZSBnZXR0ZXIsIGFuZCByZS1jb2xsZWN0IGRlcGVuZGVuY2llcy5cbiAgICAgKi9cbiAgICBXYXRjaGVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHB1c2hUYXJnZXQodGhpcyk7XG4gICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgdmFyIHZtID0gdGhpcy52bTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXR0ZXIuY2FsbCh2bSwgdm0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy51c2VyKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIFwiZ2V0dGVyIGZvciB3YXRjaGVyIFxcXCJcIi5jb25jYXQodGhpcy5leHByZXNzaW9uLCBcIlxcXCJcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIC8vIFwidG91Y2hcIiBldmVyeSBwcm9wZXJ0eSBzbyB0aGV5IGFyZSBhbGwgdHJhY2tlZCBhc1xuICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzIGZvciBkZWVwIHdhdGNoaW5nXG4gICAgICAgICAgICBpZiAodGhpcy5kZWVwKSB7XG4gICAgICAgICAgICAgICAgdHJhdmVyc2UodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG9wVGFyZ2V0KCk7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXBEZXBzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQWRkIGEgZGVwZW5kZW5jeSB0byB0aGlzIGRpcmVjdGl2ZS5cbiAgICAgKi9cbiAgICBXYXRjaGVyLnByb3RvdHlwZS5hZGREZXAgPSBmdW5jdGlvbiAoZGVwKSB7XG4gICAgICAgIHZhciBpZCA9IGRlcC5pZDtcbiAgICAgICAgaWYgKCF0aGlzLm5ld0RlcElkcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICB0aGlzLm5ld0RlcElkcy5hZGQoaWQpO1xuICAgICAgICAgICAgdGhpcy5uZXdEZXBzLnB1c2goZGVwKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5kZXBJZHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgICAgIGRlcC5hZGRTdWIodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENsZWFuIHVwIGZvciBkZXBlbmRlbmN5IGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgV2F0Y2hlci5wcm90b3R5cGUuY2xlYW51cERlcHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpID0gdGhpcy5kZXBzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgdmFyIGRlcCA9IHRoaXMuZGVwc1tpXTtcbiAgICAgICAgICAgIGlmICghdGhpcy5uZXdEZXBJZHMuaGFzKGRlcC5pZCkpIHtcbiAgICAgICAgICAgICAgICBkZXAucmVtb3ZlU3ViKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciB0bXAgPSB0aGlzLmRlcElkcztcbiAgICAgICAgdGhpcy5kZXBJZHMgPSB0aGlzLm5ld0RlcElkcztcbiAgICAgICAgdGhpcy5uZXdEZXBJZHMgPSB0bXA7XG4gICAgICAgIHRoaXMubmV3RGVwSWRzLmNsZWFyKCk7XG4gICAgICAgIHRtcCA9IHRoaXMuZGVwcztcbiAgICAgICAgdGhpcy5kZXBzID0gdGhpcy5uZXdEZXBzO1xuICAgICAgICB0aGlzLm5ld0RlcHMgPSB0bXA7XG4gICAgICAgIHRoaXMubmV3RGVwcy5sZW5ndGggPSAwO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU3Vic2NyaWJlciBpbnRlcmZhY2UuXG4gICAgICogV2lsbCBiZSBjYWxsZWQgd2hlbiBhIGRlcGVuZGVuY3kgY2hhbmdlcy5cbiAgICAgKi9cbiAgICBXYXRjaGVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmICh0aGlzLmxhenkpIHtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc3luYykge1xuICAgICAgICAgICAgdGhpcy5ydW4oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXVlV2F0Y2hlcih0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogU2NoZWR1bGVyIGpvYiBpbnRlcmZhY2UuXG4gICAgICogV2lsbCBiZSBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlci5cbiAgICAgKi9cbiAgICBXYXRjaGVyLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5nZXQoKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy52YWx1ZSB8fFxuICAgICAgICAgICAgICAgIC8vIERlZXAgd2F0Y2hlcnMgYW5kIHdhdGNoZXJzIG9uIE9iamVjdC9BcnJheXMgc2hvdWxkIGZpcmUgZXZlblxuICAgICAgICAgICAgICAgIC8vIHdoZW4gdGhlIHZhbHVlIGlzIHRoZSBzYW1lLCBiZWNhdXNlIHRoZSB2YWx1ZSBtYXlcbiAgICAgICAgICAgICAgICAvLyBoYXZlIG11dGF0ZWQuXG4gICAgICAgICAgICAgICAgaXNPYmplY3QodmFsdWUpIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5kZWVwKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IG5ldyB2YWx1ZVxuICAgICAgICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZm8gPSBcImNhbGxiYWNrIGZvciB3YXRjaGVyIFxcXCJcIi5jb25jYXQodGhpcy5leHByZXNzaW9uLCBcIlxcXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKHRoaXMuY2IsIHRoaXMudm0sIFt2YWx1ZSwgb2xkVmFsdWVdLCB0aGlzLnZtLCBpbmZvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2IuY2FsbCh0aGlzLnZtLCB2YWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogRXZhbHVhdGUgdGhlIHZhbHVlIG9mIHRoZSB3YXRjaGVyLlxuICAgICAqIFRoaXMgb25seSBnZXRzIGNhbGxlZCBmb3IgbGF6eSB3YXRjaGVycy5cbiAgICAgKi9cbiAgICBXYXRjaGVyLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0KCk7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIERlcGVuZCBvbiBhbGwgZGVwcyBjb2xsZWN0ZWQgYnkgdGhpcyB3YXRjaGVyLlxuICAgICAqL1xuICAgIFdhdGNoZXIucHJvdG90eXBlLmRlcGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLmRlcHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICB0aGlzLmRlcHNbaV0uZGVwZW5kKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBzZWxmIGZyb20gYWxsIGRlcGVuZGVuY2llcycgc3Vic2NyaWJlciBsaXN0LlxuICAgICAqL1xuICAgIFdhdGNoZXIucHJvdG90eXBlLnRlYXJkb3duID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy52bSAmJiAhdGhpcy52bS5faXNCZWluZ0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgcmVtb3ZlJDIodGhpcy52bS5fc2NvcGUuZWZmZWN0cywgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXBzW2ldLnJlbW92ZVN1Yih0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5vblN0b3ApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uU3RvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gV2F0Y2hlcjtcbn0oKSk7XG5cbnZhciBtYXJrO1xudmFyIG1lYXN1cmU7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZhciBwZXJmXzEgPSBpbkJyb3dzZXIgJiYgd2luZG93LnBlcmZvcm1hbmNlO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChwZXJmXzEgJiZcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBwZXJmXzEubWFyayAmJlxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHBlcmZfMS5tZWFzdXJlICYmXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcGVyZl8xLmNsZWFyTWFya3MgJiZcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBwZXJmXzEuY2xlYXJNZWFzdXJlcykge1xuICAgICAgICBtYXJrID0gZnVuY3Rpb24gKHRhZykgeyByZXR1cm4gcGVyZl8xLm1hcmsodGFnKTsgfTtcbiAgICAgICAgbWVhc3VyZSA9IGZ1bmN0aW9uIChuYW1lLCBzdGFydFRhZywgZW5kVGFnKSB7XG4gICAgICAgICAgICBwZXJmXzEubWVhc3VyZShuYW1lLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICAgICAgICAgIHBlcmZfMS5jbGVhck1hcmtzKHN0YXJ0VGFnKTtcbiAgICAgICAgICAgIHBlcmZfMS5jbGVhck1hcmtzKGVuZFRhZyk7XG4gICAgICAgICAgICAvLyBwZXJmLmNsZWFyTWVhc3VyZXMobmFtZSlcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGluaXRFdmVudHModm0pIHtcbiAgICB2bS5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB2bS5faGFzSG9va0V2ZW50ID0gZmFsc2U7XG4gICAgLy8gaW5pdCBwYXJlbnQgYXR0YWNoZWQgZXZlbnRzXG4gICAgdmFyIGxpc3RlbmVycyA9IHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gICAgaWYgKGxpc3RlbmVycykge1xuICAgICAgICB1cGRhdGVDb21wb25lbnRMaXN0ZW5lcnModm0sIGxpc3RlbmVycyk7XG4gICAgfVxufVxudmFyIHRhcmdldCQxO1xuZnVuY3Rpb24gYWRkJDEoZXZlbnQsIGZuKSB7XG4gICAgdGFyZ2V0JDEuJG9uKGV2ZW50LCBmbik7XG59XG5mdW5jdGlvbiByZW1vdmUkMShldmVudCwgZm4pIHtcbiAgICB0YXJnZXQkMS4kb2ZmKGV2ZW50LCBmbik7XG59XG5mdW5jdGlvbiBjcmVhdGVPbmNlSGFuZGxlciQxKGV2ZW50LCBmbikge1xuICAgIHZhciBfdGFyZ2V0ID0gdGFyZ2V0JDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG9uY2VIYW5kbGVyKCkge1xuICAgICAgICB2YXIgcmVzID0gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgaWYgKHJlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgX3RhcmdldC4kb2ZmKGV2ZW50LCBvbmNlSGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZnVuY3Rpb24gdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzKHZtLCBsaXN0ZW5lcnMsIG9sZExpc3RlbmVycykge1xuICAgIHRhcmdldCQxID0gdm07XG4gICAgdXBkYXRlTGlzdGVuZXJzKGxpc3RlbmVycywgb2xkTGlzdGVuZXJzIHx8IHt9LCBhZGQkMSwgcmVtb3ZlJDEsIGNyZWF0ZU9uY2VIYW5kbGVyJDEsIHZtKTtcbiAgICB0YXJnZXQkMSA9IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGV2ZW50c01peGluKFZ1ZSkge1xuICAgIHZhciBob29rUkUgPSAvXmhvb2s6LztcbiAgICBWdWUucHJvdG90eXBlLiRvbiA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGV2ZW50Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIHZtLiRvbihldmVudFtpXSwgZm4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgKHZtLl9ldmVudHNbZXZlbnRdIHx8ICh2bS5fZXZlbnRzW2V2ZW50XSA9IFtdKSkucHVzaChmbik7XG4gICAgICAgICAgICAvLyBvcHRpbWl6ZSBob29rOmV2ZW50IGNvc3QgYnkgdXNpbmcgYSBib29sZWFuIGZsYWcgbWFya2VkIGF0IHJlZ2lzdHJhdGlvblxuICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiBhIGhhc2ggbG9va3VwXG4gICAgICAgICAgICBpZiAoaG9va1JFLnRlc3QoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgdm0uX2hhc0hvb2tFdmVudCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZtO1xuICAgIH07XG4gICAgVnVlLnByb3RvdHlwZS4kb25jZSA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgICAgZnVuY3Rpb24gb24oKSB7XG4gICAgICAgICAgICB2bS4kb2ZmKGV2ZW50LCBvbik7XG4gICAgICAgICAgICBmbi5hcHBseSh2bSwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBvbi5mbiA9IGZuO1xuICAgICAgICB2bS4kb24oZXZlbnQsIG9uKTtcbiAgICAgICAgcmV0dXJuIHZtO1xuICAgIH07XG4gICAgVnVlLnByb3RvdHlwZS4kb2ZmID0gZnVuY3Rpb24gKGV2ZW50LCBmbikge1xuICAgICAgICB2YXIgdm0gPSB0aGlzO1xuICAgICAgICAvLyBhbGxcbiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB2bS5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgIHJldHVybiB2bTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhcnJheSBvZiBldmVudHNcbiAgICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpXzEgPSAwLCBsID0gZXZlbnQubGVuZ3RoOyBpXzEgPCBsOyBpXzErKykge1xuICAgICAgICAgICAgICAgIHZtLiRvZmYoZXZlbnRbaV8xXSwgZm4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZtO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNwZWNpZmljIGV2ZW50XG4gICAgICAgIHZhciBjYnMgPSB2bS5fZXZlbnRzW2V2ZW50XTtcbiAgICAgICAgaWYgKCFjYnMpIHtcbiAgICAgICAgICAgIHJldHVybiB2bTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZuKSB7XG4gICAgICAgICAgICB2bS5fZXZlbnRzW2V2ZW50XSA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gdm07XG4gICAgICAgIH1cbiAgICAgICAgLy8gc3BlY2lmaWMgaGFuZGxlclxuICAgICAgICB2YXIgY2I7XG4gICAgICAgIHZhciBpID0gY2JzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgY2IgPSBjYnNbaV07XG4gICAgICAgICAgICBpZiAoY2IgPT09IGZuIHx8IGNiLmZuID09PSBmbikge1xuICAgICAgICAgICAgICAgIGNicy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZtO1xuICAgIH07XG4gICAgVnVlLnByb3RvdHlwZS4kZW1pdCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgdm0gPSB0aGlzO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGxvd2VyQ2FzZUV2ZW50ID0gZXZlbnQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChsb3dlckNhc2VFdmVudCAhPT0gZXZlbnQgJiYgdm0uX2V2ZW50c1tsb3dlckNhc2VFdmVudF0pIHtcbiAgICAgICAgICAgICAgICB0aXAoXCJFdmVudCBcXFwiXCIuY29uY2F0KGxvd2VyQ2FzZUV2ZW50LCBcIlxcXCIgaXMgZW1pdHRlZCBpbiBjb21wb25lbnQgXCIpICtcbiAgICAgICAgICAgICAgICAgICAgXCJcIi5jb25jYXQoZm9ybWF0Q29tcG9uZW50TmFtZSh2bSksIFwiIGJ1dCB0aGUgaGFuZGxlciBpcyByZWdpc3RlcmVkIGZvciBcXFwiXCIpLmNvbmNhdChldmVudCwgXCJcXFwiLiBcIikgK1xuICAgICAgICAgICAgICAgICAgICBcIk5vdGUgdGhhdCBIVE1MIGF0dHJpYnV0ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIHlvdSBjYW5ub3QgdXNlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJ2LW9uIHRvIGxpc3RlbiB0byBjYW1lbENhc2UgZXZlbnRzIHdoZW4gdXNpbmcgaW4tRE9NIHRlbXBsYXRlcy4gXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIllvdSBzaG91bGQgcHJvYmFibHkgdXNlIFxcXCJcIi5jb25jYXQoaHlwaGVuYXRlKGV2ZW50KSwgXCJcXFwiIGluc3RlYWQgb2YgXFxcIlwiKS5jb25jYXQoZXZlbnQsIFwiXFxcIi5cIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBjYnMgPSB2bS5fZXZlbnRzW2V2ZW50XTtcbiAgICAgICAgaWYgKGNicykge1xuICAgICAgICAgICAgY2JzID0gY2JzLmxlbmd0aCA+IDEgPyB0b0FycmF5KGNicykgOiBjYnM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IHRvQXJyYXkoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIHZhciBpbmZvID0gXCJldmVudCBoYW5kbGVyIGZvciBcXFwiXCIuY29uY2F0KGV2ZW50LCBcIlxcXCJcIik7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNicy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhjYnNbaV0sIHZtLCBhcmdzLCB2bSwgaW5mbyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZtO1xuICAgIH07XG59XG5cbnZhciBhY3RpdmVJbnN0YW5jZSA9IG51bGw7XG52YXIgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gZmFsc2U7XG5mdW5jdGlvbiBzZXRBY3RpdmVJbnN0YW5jZSh2bSkge1xuICAgIHZhciBwcmV2QWN0aXZlSW5zdGFuY2UgPSBhY3RpdmVJbnN0YW5jZTtcbiAgICBhY3RpdmVJbnN0YW5jZSA9IHZtO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGFjdGl2ZUluc3RhbmNlID0gcHJldkFjdGl2ZUluc3RhbmNlO1xuICAgIH07XG59XG5mdW5jdGlvbiBpbml0TGlmZWN5Y2xlKHZtKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcbiAgICAvLyBsb2NhdGUgZmlyc3Qgbm9uLWFic3RyYWN0IHBhcmVudFxuICAgIHZhciBwYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcbiAgICBpZiAocGFyZW50ICYmICFvcHRpb25zLmFic3RyYWN0KSB7XG4gICAgICAgIHdoaWxlIChwYXJlbnQuJG9wdGlvbnMuYWJzdHJhY3QgJiYgcGFyZW50LiRwYXJlbnQpIHtcbiAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudC4kY2hpbGRyZW4ucHVzaCh2bSk7XG4gICAgfVxuICAgIHZtLiRwYXJlbnQgPSBwYXJlbnQ7XG4gICAgdm0uJHJvb3QgPSBwYXJlbnQgPyBwYXJlbnQuJHJvb3QgOiB2bTtcbiAgICB2bS4kY2hpbGRyZW4gPSBbXTtcbiAgICB2bS4kcmVmcyA9IHt9O1xuICAgIHZtLl9wcm92aWRlZCA9IHBhcmVudCA/IHBhcmVudC5fcHJvdmlkZWQgOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZtLl93YXRjaGVyID0gbnVsbDtcbiAgICB2bS5faW5hY3RpdmUgPSBudWxsO1xuICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IGZhbHNlO1xuICAgIHZtLl9pc01vdW50ZWQgPSBmYWxzZTtcbiAgICB2bS5faXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB2bS5faXNCZWluZ0Rlc3Ryb3llZCA9IGZhbHNlO1xufVxuZnVuY3Rpb24gbGlmZWN5Y2xlTWl4aW4oVnVlKSB7XG4gICAgVnVlLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgICAgdmFyIHByZXZFbCA9IHZtLiRlbDtcbiAgICAgICAgdmFyIHByZXZWbm9kZSA9IHZtLl92bm9kZTtcbiAgICAgICAgdmFyIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSA9IHNldEFjdGl2ZUluc3RhbmNlKHZtKTtcbiAgICAgICAgdm0uX3Zub2RlID0gdm5vZGU7XG4gICAgICAgIC8vIFZ1ZS5wcm90b3R5cGUuX19wYXRjaF9fIGlzIGluamVjdGVkIGluIGVudHJ5IHBvaW50c1xuICAgICAgICAvLyBiYXNlZCBvbiB0aGUgcmVuZGVyaW5nIGJhY2tlbmQgdXNlZC5cbiAgICAgICAgaWYgKCFwcmV2Vm5vZGUpIHtcbiAgICAgICAgICAgIC8vIGluaXRpYWwgcmVuZGVyXG4gICAgICAgICAgICB2bS4kZWwgPSB2bS5fX3BhdGNoX18odm0uJGVsLCB2bm9kZSwgaHlkcmF0aW5nLCBmYWxzZSAvKiByZW1vdmVPbmx5ICovKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZXNcbiAgICAgICAgICAgIHZtLiRlbCA9IHZtLl9fcGF0Y2hfXyhwcmV2Vm5vZGUsIHZub2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXN0b3JlQWN0aXZlSW5zdGFuY2UoKTtcbiAgICAgICAgLy8gdXBkYXRlIF9fdnVlX18gcmVmZXJlbmNlXG4gICAgICAgIGlmIChwcmV2RWwpIHtcbiAgICAgICAgICAgIHByZXZFbC5fX3Z1ZV9fID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodm0uJGVsKSB7XG4gICAgICAgICAgICB2bS4kZWwuX192dWVfXyA9IHZtO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHBhcmVudCBpcyBhbiBIT0MsIHVwZGF0ZSBpdHMgJGVsIGFzIHdlbGxcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB2bTtcbiAgICAgICAgd2hpbGUgKHdyYXBwZXIgJiZcbiAgICAgICAgICAgIHdyYXBwZXIuJHZub2RlICYmXG4gICAgICAgICAgICB3cmFwcGVyLiRwYXJlbnQgJiZcbiAgICAgICAgICAgIHdyYXBwZXIuJHZub2RlID09PSB3cmFwcGVyLiRwYXJlbnQuX3Zub2RlKSB7XG4gICAgICAgICAgICB3cmFwcGVyLiRwYXJlbnQuJGVsID0gd3JhcHBlci4kZWw7XG4gICAgICAgICAgICB3cmFwcGVyID0gd3JhcHBlci4kcGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIC8vIHVwZGF0ZWQgaG9vayBpcyBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlciB0byBlbnN1cmUgdGhhdCBjaGlsZHJlbiBhcmVcbiAgICAgICAgLy8gdXBkYXRlZCBpbiBhIHBhcmVudCdzIHVwZGF0ZWQgaG9vay5cbiAgICB9O1xuICAgIFZ1ZS5wcm90b3R5cGUuJGZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdm0gPSB0aGlzO1xuICAgICAgICBpZiAodm0uX3dhdGNoZXIpIHtcbiAgICAgICAgICAgIHZtLl93YXRjaGVyLnVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBWdWUucHJvdG90eXBlLiRkZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdm0gPSB0aGlzO1xuICAgICAgICBpZiAodm0uX2lzQmVpbmdEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjYWxsSG9vayQxKHZtLCAnYmVmb3JlRGVzdHJveScpO1xuICAgICAgICB2bS5faXNCZWluZ0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgIC8vIHJlbW92ZSBzZWxmIGZyb20gcGFyZW50XG4gICAgICAgIHZhciBwYXJlbnQgPSB2bS4kcGFyZW50O1xuICAgICAgICBpZiAocGFyZW50ICYmICFwYXJlbnQuX2lzQmVpbmdEZXN0cm95ZWQgJiYgIXZtLiRvcHRpb25zLmFic3RyYWN0KSB7XG4gICAgICAgICAgICByZW1vdmUkMihwYXJlbnQuJGNoaWxkcmVuLCB2bSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGVhcmRvd24gc2NvcGUuIHRoaXMgaW5jbHVkZXMgYm90aCB0aGUgcmVuZGVyIHdhdGNoZXIgYW5kIG90aGVyXG4gICAgICAgIC8vIHdhdGNoZXJzIGNyZWF0ZWRcbiAgICAgICAgdm0uX3Njb3BlLnN0b3AoKTtcbiAgICAgICAgLy8gcmVtb3ZlIHJlZmVyZW5jZSBmcm9tIGRhdGEgb2JcbiAgICAgICAgLy8gZnJvemVuIG9iamVjdCBtYXkgbm90IGhhdmUgb2JzZXJ2ZXIuXG4gICAgICAgIGlmICh2bS5fZGF0YS5fX29iX18pIHtcbiAgICAgICAgICAgIHZtLl9kYXRhLl9fb2JfXy52bUNvdW50LS07XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2FsbCB0aGUgbGFzdCBob29rLi4uXG4gICAgICAgIHZtLl9pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgIC8vIGludm9rZSBkZXN0cm95IGhvb2tzIG9uIGN1cnJlbnQgcmVuZGVyZWQgdHJlZVxuICAgICAgICB2bS5fX3BhdGNoX18odm0uX3Zub2RlLCBudWxsKTtcbiAgICAgICAgLy8gZmlyZSBkZXN0cm95ZWQgaG9va1xuICAgICAgICBjYWxsSG9vayQxKHZtLCAnZGVzdHJveWVkJyk7XG4gICAgICAgIC8vIHR1cm4gb2ZmIGFsbCBpbnN0YW5jZSBsaXN0ZW5lcnMuXG4gICAgICAgIHZtLiRvZmYoKTtcbiAgICAgICAgLy8gcmVtb3ZlIF9fdnVlX18gcmVmZXJlbmNlXG4gICAgICAgIGlmICh2bS4kZWwpIHtcbiAgICAgICAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWxlYXNlIGNpcmN1bGFyIHJlZmVyZW5jZSAoIzY3NTkpXG4gICAgICAgIGlmICh2bS4kdm5vZGUpIHtcbiAgICAgICAgICAgIHZtLiR2bm9kZS5wYXJlbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmZ1bmN0aW9uIG1vdW50Q29tcG9uZW50KHZtLCBlbCwgaHlkcmF0aW5nKSB7XG4gICAgdm0uJGVsID0gZWw7XG4gICAgaWYgKCF2bS4kb3B0aW9ucy5yZW5kZXIpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBpbnZhbGlkIHR5cGVcbiAgICAgICAgdm0uJG9wdGlvbnMucmVuZGVyID0gY3JlYXRlRW1wdHlWTm9kZTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKCh2bS4kb3B0aW9ucy50ZW1wbGF0ZSAmJiB2bS4kb3B0aW9ucy50ZW1wbGF0ZS5jaGFyQXQoMCkgIT09ICcjJykgfHxcbiAgICAgICAgICAgICAgICB2bS4kb3B0aW9ucy5lbCB8fFxuICAgICAgICAgICAgICAgIGVsKSB7XG4gICAgICAgICAgICAgICAgd2FybignWW91IGFyZSB1c2luZyB0aGUgcnVudGltZS1vbmx5IGJ1aWxkIG9mIFZ1ZSB3aGVyZSB0aGUgdGVtcGxhdGUgJyArXG4gICAgICAgICAgICAgICAgICAgICdjb21waWxlciBpcyBub3QgYXZhaWxhYmxlLiBFaXRoZXIgcHJlLWNvbXBpbGUgdGhlIHRlbXBsYXRlcyBpbnRvICcgK1xuICAgICAgICAgICAgICAgICAgICAncmVuZGVyIGZ1bmN0aW9ucywgb3IgdXNlIHRoZSBjb21waWxlci1pbmNsdWRlZCBidWlsZC4nLCB2bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB3YXJuKCdGYWlsZWQgdG8gbW91bnQgY29tcG9uZW50OiB0ZW1wbGF0ZSBvciByZW5kZXIgZnVuY3Rpb24gbm90IGRlZmluZWQuJywgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNhbGxIb29rJDEodm0sICdiZWZvcmVNb3VudCcpO1xuICAgIHZhciB1cGRhdGVDb21wb25lbnQ7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgdXBkYXRlQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSB2bS5fbmFtZTtcbiAgICAgICAgICAgIHZhciBpZCA9IHZtLl91aWQ7XG4gICAgICAgICAgICB2YXIgc3RhcnRUYWcgPSBcInZ1ZS1wZXJmLXN0YXJ0OlwiLmNvbmNhdChpZCk7XG4gICAgICAgICAgICB2YXIgZW5kVGFnID0gXCJ2dWUtcGVyZi1lbmQ6XCIuY29uY2F0KGlkKTtcbiAgICAgICAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgICAgICAgICAgdmFyIHZub2RlID0gdm0uX3JlbmRlcigpO1xuICAgICAgICAgICAgbWFyayhlbmRUYWcpO1xuICAgICAgICAgICAgbWVhc3VyZShcInZ1ZSBcIi5jb25jYXQobmFtZSwgXCIgcmVuZGVyXCIpLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICAgICAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgICAgICAgICAgdm0uX3VwZGF0ZSh2bm9kZSwgaHlkcmF0aW5nKTtcbiAgICAgICAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgICAgICAgIG1lYXN1cmUoXCJ2dWUgXCIuY29uY2F0KG5hbWUsIFwiIHBhdGNoXCIpLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHVwZGF0ZUNvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZtLl91cGRhdGUodm0uX3JlbmRlcigpLCBoeWRyYXRpbmcpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICB2YXIgd2F0Y2hlck9wdGlvbnMgPSB7XG4gICAgICAgIGJlZm9yZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHZtLl9pc01vdW50ZWQgJiYgIXZtLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgICAgIGNhbGxIb29rJDEodm0sICdiZWZvcmVVcGRhdGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2F0Y2hlck9wdGlvbnMub25UcmFjayA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBjYWxsSG9vayQxKHZtLCAncmVuZGVyVHJhY2tlZCcsIFtlXSk7IH07XG4gICAgICAgIHdhdGNoZXJPcHRpb25zLm9uVHJpZ2dlciA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBjYWxsSG9vayQxKHZtLCAncmVuZGVyVHJpZ2dlcmVkJywgW2VdKTsgfTtcbiAgICB9XG4gICAgLy8gd2Ugc2V0IHRoaXMgdG8gdm0uX3dhdGNoZXIgaW5zaWRlIHRoZSB3YXRjaGVyJ3MgY29uc3RydWN0b3JcbiAgICAvLyBzaW5jZSB0aGUgd2F0Y2hlcidzIGluaXRpYWwgcGF0Y2ggbWF5IGNhbGwgJGZvcmNlVXBkYXRlIChlLmcuIGluc2lkZSBjaGlsZFxuICAgIC8vIGNvbXBvbmVudCdzIG1vdW50ZWQgaG9vayksIHdoaWNoIHJlbGllcyBvbiB2bS5fd2F0Y2hlciBiZWluZyBhbHJlYWR5IGRlZmluZWRcbiAgICBuZXcgV2F0Y2hlcih2bSwgdXBkYXRlQ29tcG9uZW50LCBub29wLCB3YXRjaGVyT3B0aW9ucywgdHJ1ZSAvKiBpc1JlbmRlcldhdGNoZXIgKi8pO1xuICAgIGh5ZHJhdGluZyA9IGZhbHNlO1xuICAgIC8vIGZsdXNoIGJ1ZmZlciBmb3IgZmx1c2g6IFwicHJlXCIgd2F0Y2hlcnMgcXVldWVkIGluIHNldHVwKClcbiAgICB2YXIgcHJlV2F0Y2hlcnMgPSB2bS5fcHJlV2F0Y2hlcnM7XG4gICAgaWYgKHByZVdhdGNoZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlV2F0Y2hlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHByZVdhdGNoZXJzW2ldLnJ1bigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIG1hbnVhbGx5IG1vdW50ZWQgaW5zdGFuY2UsIGNhbGwgbW91bnRlZCBvbiBzZWxmXG4gICAgLy8gbW91bnRlZCBpcyBjYWxsZWQgZm9yIHJlbmRlci1jcmVhdGVkIGNoaWxkIGNvbXBvbmVudHMgaW4gaXRzIGluc2VydGVkIGhvb2tcbiAgICBpZiAodm0uJHZub2RlID09IG51bGwpIHtcbiAgICAgICAgdm0uX2lzTW91bnRlZCA9IHRydWU7XG4gICAgICAgIGNhbGxIb29rJDEodm0sICdtb3VudGVkJyk7XG4gICAgfVxuICAgIHJldHVybiB2bTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUNoaWxkQ29tcG9uZW50KHZtLCBwcm9wc0RhdGEsIGxpc3RlbmVycywgcGFyZW50Vm5vZGUsIHJlbmRlckNoaWxkcmVuKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgY29tcG9uZW50IGhhcyBzbG90IGNoaWxkcmVuXG4gICAgLy8gd2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBvdmVyd3JpdGluZyAkb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4uXG4gICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIGR5bmFtaWMgc2NvcGVkU2xvdHMgKGhhbmQtd3JpdHRlbiBvciBjb21waWxlZCBidXQgd2l0aFxuICAgIC8vIGR5bmFtaWMgc2xvdCBuYW1lcykuIFN0YXRpYyBzY29wZWQgc2xvdHMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZSBoYXMgdGhlXG4gICAgLy8gXCIkc3RhYmxlXCIgbWFya2VyLlxuICAgIHZhciBuZXdTY29wZWRTbG90cyA9IHBhcmVudFZub2RlLmRhdGEuc2NvcGVkU2xvdHM7XG4gICAgdmFyIG9sZFNjb3BlZFNsb3RzID0gdm0uJHNjb3BlZFNsb3RzO1xuICAgIHZhciBoYXNEeW5hbWljU2NvcGVkU2xvdCA9ICEhKChuZXdTY29wZWRTbG90cyAmJiAhbmV3U2NvcGVkU2xvdHMuJHN0YWJsZSkgfHxcbiAgICAgICAgKG9sZFNjb3BlZFNsb3RzICE9PSBlbXB0eU9iamVjdCAmJiAhb2xkU2NvcGVkU2xvdHMuJHN0YWJsZSkgfHxcbiAgICAgICAgKG5ld1Njb3BlZFNsb3RzICYmIHZtLiRzY29wZWRTbG90cy4ka2V5ICE9PSBuZXdTY29wZWRTbG90cy4ka2V5KSB8fFxuICAgICAgICAoIW5ld1Njb3BlZFNsb3RzICYmIHZtLiRzY29wZWRTbG90cy4ka2V5KSk7XG4gICAgLy8gQW55IHN0YXRpYyBzbG90IGNoaWxkcmVuIGZyb20gdGhlIHBhcmVudCBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyBwYXJlbnQnc1xuICAgIC8vIHVwZGF0ZS4gRHluYW1pYyBzY29wZWQgc2xvdHMgbWF5IGFsc28gaGF2ZSBjaGFuZ2VkLiBJbiBzdWNoIGNhc2VzLCBhIGZvcmNlZFxuICAgIC8vIHVwZGF0ZSBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIGNvcnJlY3RuZXNzLlxuICAgIHZhciBuZWVkc0ZvcmNlVXBkYXRlID0gISEocmVuZGVyQ2hpbGRyZW4gfHwgLy8gaGFzIG5ldyBzdGF0aWMgc2xvdHNcbiAgICAgICAgdm0uJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuIHx8IC8vIGhhcyBvbGQgc3RhdGljIHNsb3RzXG4gICAgICAgIGhhc0R5bmFtaWNTY29wZWRTbG90KTtcbiAgICB2YXIgcHJldlZOb2RlID0gdm0uJHZub2RlO1xuICAgIHZtLiRvcHRpb25zLl9wYXJlbnRWbm9kZSA9IHBhcmVudFZub2RlO1xuICAgIHZtLiR2bm9kZSA9IHBhcmVudFZub2RlOyAvLyB1cGRhdGUgdm0ncyBwbGFjZWhvbGRlciBub2RlIHdpdGhvdXQgcmUtcmVuZGVyXG4gICAgaWYgKHZtLl92bm9kZSkge1xuICAgICAgICAvLyB1cGRhdGUgY2hpbGQgdHJlZSdzIHBhcmVudFxuICAgICAgICB2bS5fdm5vZGUucGFyZW50ID0gcGFyZW50Vm5vZGU7XG4gICAgfVxuICAgIHZtLiRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbiA9IHJlbmRlckNoaWxkcmVuO1xuICAgIC8vIHVwZGF0ZSAkYXR0cnMgYW5kICRsaXN0ZW5lcnMgaGFzaFxuICAgIC8vIHRoZXNlIGFyZSBhbHNvIHJlYWN0aXZlIHNvIHRoZXkgbWF5IHRyaWdnZXIgY2hpbGQgdXBkYXRlIGlmIHRoZSBjaGlsZFxuICAgIC8vIHVzZWQgdGhlbSBkdXJpbmcgcmVuZGVyXG4gICAgdmFyIGF0dHJzID0gcGFyZW50Vm5vZGUuZGF0YS5hdHRycyB8fCBlbXB0eU9iamVjdDtcbiAgICBpZiAodm0uX2F0dHJzUHJveHkpIHtcbiAgICAgICAgLy8gZm9yY2UgdXBkYXRlIGlmIGF0dHJzIGFyZSBhY2Nlc3NlZCBhbmQgaGFzIGNoYW5nZWQgc2luY2UgaXQgbWF5IGJlXG4gICAgICAgIC8vIHBhc3NlZCB0byBhIGNoaWxkIGNvbXBvbmVudC5cbiAgICAgICAgaWYgKHN5bmNTZXR1cFByb3h5KHZtLl9hdHRyc1Byb3h5LCBhdHRycywgKHByZXZWTm9kZS5kYXRhICYmIHByZXZWTm9kZS5kYXRhLmF0dHJzKSB8fCBlbXB0eU9iamVjdCwgdm0sICckYXR0cnMnKSkge1xuICAgICAgICAgICAgbmVlZHNGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdm0uJGF0dHJzID0gYXR0cnM7XG4gICAgLy8gdXBkYXRlIGxpc3RlbmVyc1xuICAgIGxpc3RlbmVycyA9IGxpc3RlbmVycyB8fCBlbXB0eU9iamVjdDtcbiAgICB2YXIgcHJldkxpc3RlbmVycyA9IHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gICAgaWYgKHZtLl9saXN0ZW5lcnNQcm94eSkge1xuICAgICAgICBzeW5jU2V0dXBQcm94eSh2bS5fbGlzdGVuZXJzUHJveHksIGxpc3RlbmVycywgcHJldkxpc3RlbmVycyB8fCBlbXB0eU9iamVjdCwgdm0sICckbGlzdGVuZXJzJyk7XG4gICAgfVxuICAgIHZtLiRsaXN0ZW5lcnMgPSB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzID0gbGlzdGVuZXJzO1xuICAgIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzLCBwcmV2TGlzdGVuZXJzKTtcbiAgICAvLyB1cGRhdGUgcHJvcHNcbiAgICBpZiAocHJvcHNEYXRhICYmIHZtLiRvcHRpb25zLnByb3BzKSB7XG4gICAgICAgIHRvZ2dsZU9ic2VydmluZyhmYWxzZSk7XG4gICAgICAgIHZhciBwcm9wcyA9IHZtLl9wcm9wcztcbiAgICAgICAgdmFyIHByb3BLZXlzID0gdm0uJG9wdGlvbnMuX3Byb3BLZXlzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gcHJvcEtleXNbaV07XG4gICAgICAgICAgICB2YXIgcHJvcE9wdGlvbnMgPSB2bS4kb3B0aW9ucy5wcm9wczsgLy8gd3RmIGZsb3c/XG4gICAgICAgICAgICBwcm9wc1trZXldID0gdmFsaWRhdGVQcm9wKGtleSwgcHJvcE9wdGlvbnMsIHByb3BzRGF0YSwgdm0pO1xuICAgICAgICB9XG4gICAgICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgICAgICAgLy8ga2VlcCBhIGNvcHkgb2YgcmF3IHByb3BzRGF0YVxuICAgICAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgPSBwcm9wc0RhdGE7XG4gICAgfVxuICAgIC8vIHJlc29sdmUgc2xvdHMgKyBmb3JjZSB1cGRhdGUgaWYgaGFzIGNoaWxkcmVuXG4gICAgaWYgKG5lZWRzRm9yY2VVcGRhdGUpIHtcbiAgICAgICAgdm0uJHNsb3RzID0gcmVzb2x2ZVNsb3RzKHJlbmRlckNoaWxkcmVuLCBwYXJlbnRWbm9kZS5jb250ZXh0KTtcbiAgICAgICAgdm0uJGZvcmNlVXBkYXRlKCk7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzSW5JbmFjdGl2ZVRyZWUodm0pIHtcbiAgICB3aGlsZSAodm0gJiYgKHZtID0gdm0uJHBhcmVudCkpIHtcbiAgICAgICAgaWYgKHZtLl9pbmFjdGl2ZSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHZtLCBkaXJlY3QpIHtcbiAgICBpZiAoZGlyZWN0KSB7XG4gICAgICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoaXNJbkluYWN0aXZlVHJlZSh2bSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh2bS5fZGlyZWN0SW5hY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodm0uX2luYWN0aXZlIHx8IHZtLl9pbmFjdGl2ZSA9PT0gbnVsbCkge1xuICAgICAgICB2bS5faW5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsSG9vayQxKHZtLCAnYWN0aXZhdGVkJyk7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHZtLCBkaXJlY3QpIHtcbiAgICBpZiAoZGlyZWN0KSB7XG4gICAgICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIGlmIChpc0luSW5hY3RpdmVUcmVlKHZtKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghdm0uX2luYWN0aXZlKSB7XG4gICAgICAgIHZtLl9pbmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm0uJGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsSG9vayQxKHZtLCAnZGVhY3RpdmF0ZWQnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjYWxsSG9vayQxKHZtLCBob29rLCBhcmdzLCBzZXRDb250ZXh0KSB7XG4gICAgaWYgKHNldENvbnRleHQgPT09IHZvaWQgMCkgeyBzZXRDb250ZXh0ID0gdHJ1ZTsgfVxuICAgIC8vICM3NTczIGRpc2FibGUgZGVwIGNvbGxlY3Rpb24gd2hlbiBpbnZva2luZyBsaWZlY3ljbGUgaG9va3NcbiAgICBwdXNoVGFyZ2V0KCk7XG4gICAgdmFyIHByZXZJbnN0ID0gY3VycmVudEluc3RhbmNlO1xuICAgIHZhciBwcmV2U2NvcGUgPSBnZXRDdXJyZW50U2NvcGUoKTtcbiAgICBzZXRDb250ZXh0ICYmIHNldEN1cnJlbnRJbnN0YW5jZSh2bSk7XG4gICAgdmFyIGhhbmRsZXJzID0gdm0uJG9wdGlvbnNbaG9va107XG4gICAgdmFyIGluZm8gPSBcIlwiLmNvbmNhdChob29rLCBcIiBob29rXCIpO1xuICAgIGlmIChoYW5kbGVycykge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGhhbmRsZXJzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoaGFuZGxlcnNbaV0sIHZtLCBhcmdzIHx8IG51bGwsIHZtLCBpbmZvKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodm0uX2hhc0hvb2tFdmVudCkge1xuICAgICAgICB2bS4kZW1pdCgnaG9vazonICsgaG9vayk7XG4gICAgfVxuICAgIGlmIChzZXRDb250ZXh0KSB7XG4gICAgICAgIHNldEN1cnJlbnRJbnN0YW5jZShwcmV2SW5zdCk7XG4gICAgICAgIHByZXZTY29wZSAmJiBwcmV2U2NvcGUub24oKTtcbiAgICB9XG4gICAgcG9wVGFyZ2V0KCk7XG59XG5cbnZhciBNQVhfVVBEQVRFX0NPVU5UID0gMTAwO1xudmFyIHF1ZXVlID0gW107XG52YXIgYWN0aXZhdGVkQ2hpbGRyZW4gPSBbXTtcbnZhciBoYXMgPSB7fTtcbnZhciBjaXJjdWxhciA9IHt9O1xudmFyIHdhaXRpbmcgPSBmYWxzZTtcbnZhciBmbHVzaGluZyA9IGZhbHNlO1xudmFyIGluZGV4ID0gMDtcbi8qKlxuICogUmVzZXQgdGhlIHNjaGVkdWxlcidzIHN0YXRlLlxuICovXG5mdW5jdGlvbiByZXNldFNjaGVkdWxlclN0YXRlKCkge1xuICAgIGluZGV4ID0gcXVldWUubGVuZ3RoID0gYWN0aXZhdGVkQ2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgICBoYXMgPSB7fTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjaXJjdWxhciA9IHt9O1xuICAgIH1cbiAgICB3YWl0aW5nID0gZmx1c2hpbmcgPSBmYWxzZTtcbn1cbi8vIEFzeW5jIGVkZ2UgY2FzZSAjNjU2NiByZXF1aXJlcyBzYXZpbmcgdGhlIHRpbWVzdGFtcCB3aGVuIGV2ZW50IGxpc3RlbmVycyBhcmVcbi8vIGF0dGFjaGVkLiBIb3dldmVyLCBjYWxsaW5nIHBlcmZvcm1hbmNlLm5vdygpIGhhcyBhIHBlcmYgb3ZlcmhlYWQgZXNwZWNpYWxseVxuLy8gaWYgdGhlIHBhZ2UgaGFzIHRob3VzYW5kcyBvZiBldmVudCBsaXN0ZW5lcnMuIEluc3RlYWQsIHdlIHRha2UgYSB0aW1lc3RhbXBcbi8vIGV2ZXJ5IHRpbWUgdGhlIHNjaGVkdWxlciBmbHVzaGVzIGFuZCB1c2UgdGhhdCBmb3IgYWxsIGV2ZW50IGxpc3RlbmVyc1xuLy8gYXR0YWNoZWQgZHVyaW5nIHRoYXQgZmx1c2guXG52YXIgY3VycmVudEZsdXNoVGltZXN0YW1wID0gMDtcbi8vIEFzeW5jIGVkZ2UgY2FzZSBmaXggcmVxdWlyZXMgc3RvcmluZyBhbiBldmVudCBsaXN0ZW5lcidzIGF0dGFjaCB0aW1lc3RhbXAuXG52YXIgZ2V0Tm93ID0gRGF0ZS5ub3c7XG4vLyBEZXRlcm1pbmUgd2hhdCBldmVudCB0aW1lc3RhbXAgdGhlIGJyb3dzZXIgaXMgdXNpbmcuIEFubm95aW5nbHksIHRoZVxuLy8gdGltZXN0YW1wIGNhbiBlaXRoZXIgYmUgaGktcmVzIChyZWxhdGl2ZSB0byBwYWdlIGxvYWQpIG9yIGxvdy1yZXNcbi8vIChyZWxhdGl2ZSB0byBVTklYIGVwb2NoKSwgc28gaW4gb3JkZXIgdG8gY29tcGFyZSB0aW1lIHdlIGhhdmUgdG8gdXNlIHRoZVxuLy8gc2FtZSB0aW1lc3RhbXAgdHlwZSB3aGVuIHNhdmluZyB0aGUgZmx1c2ggdGltZXN0YW1wLlxuLy8gQWxsIElFIHZlcnNpb25zIHVzZSBsb3ctcmVzIGV2ZW50IHRpbWVzdGFtcHMsIGFuZCBoYXZlIHByb2JsZW1hdGljIGNsb2NrXG4vLyBpbXBsZW1lbnRhdGlvbnMgKCM5NjMyKVxuaWYgKGluQnJvd3NlciAmJiAhaXNJRSkge1xuICAgIHZhciBwZXJmb3JtYW5jZV8xID0gd2luZG93LnBlcmZvcm1hbmNlO1xuICAgIGlmIChwZXJmb3JtYW5jZV8xICYmXG4gICAgICAgIHR5cGVvZiBwZXJmb3JtYW5jZV8xLm5vdyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICBnZXROb3coKSA+IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpLnRpbWVTdGFtcCkge1xuICAgICAgICAvLyBpZiB0aGUgZXZlbnQgdGltZXN0YW1wLCBhbHRob3VnaCBldmFsdWF0ZWQgQUZURVIgdGhlIERhdGUubm93KCksIGlzXG4gICAgICAgIC8vIHNtYWxsZXIgdGhhbiBpdCwgaXQgbWVhbnMgdGhlIGV2ZW50IGlzIHVzaW5nIGEgaGktcmVzIHRpbWVzdGFtcCxcbiAgICAgICAgLy8gYW5kIHdlIG5lZWQgdG8gdXNlIHRoZSBoaS1yZXMgdmVyc2lvbiBmb3IgZXZlbnQgbGlzdGVuZXIgdGltZXN0YW1wcyBhc1xuICAgICAgICAvLyB3ZWxsLlxuICAgICAgICBnZXROb3cgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBwZXJmb3JtYW5jZV8xLm5vdygpOyB9O1xuICAgIH1cbn1cbnZhciBzb3J0Q29tcGFyZUZuID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICBpZiAoYS5wb3N0KSB7XG4gICAgICAgIGlmICghYi5wb3N0KVxuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKGIucG9zdCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiBhLmlkIC0gYi5pZDtcbn07XG4vKipcbiAqIEZsdXNoIGJvdGggcXVldWVzIGFuZCBydW4gdGhlIHdhdGNoZXJzLlxuICovXG5mdW5jdGlvbiBmbHVzaFNjaGVkdWxlclF1ZXVlKCkge1xuICAgIGN1cnJlbnRGbHVzaFRpbWVzdGFtcCA9IGdldE5vdygpO1xuICAgIGZsdXNoaW5nID0gdHJ1ZTtcbiAgICB2YXIgd2F0Y2hlciwgaWQ7XG4gICAgLy8gU29ydCBxdWV1ZSBiZWZvcmUgZmx1c2guXG4gICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQ6XG4gICAgLy8gMS4gQ29tcG9uZW50cyBhcmUgdXBkYXRlZCBmcm9tIHBhcmVudCB0byBjaGlsZC4gKGJlY2F1c2UgcGFyZW50IGlzIGFsd2F5c1xuICAgIC8vICAgIGNyZWF0ZWQgYmVmb3JlIHRoZSBjaGlsZClcbiAgICAvLyAyLiBBIGNvbXBvbmVudCdzIHVzZXIgd2F0Y2hlcnMgYXJlIHJ1biBiZWZvcmUgaXRzIHJlbmRlciB3YXRjaGVyIChiZWNhdXNlXG4gICAgLy8gICAgdXNlciB3YXRjaGVycyBhcmUgY3JlYXRlZCBiZWZvcmUgdGhlIHJlbmRlciB3YXRjaGVyKVxuICAgIC8vIDMuIElmIGEgY29tcG9uZW50IGlzIGRlc3Ryb3llZCBkdXJpbmcgYSBwYXJlbnQgY29tcG9uZW50J3Mgd2F0Y2hlciBydW4sXG4gICAgLy8gICAgaXRzIHdhdGNoZXJzIGNhbiBiZSBza2lwcGVkLlxuICAgIHF1ZXVlLnNvcnQoc29ydENvbXBhcmVGbik7XG4gICAgLy8gZG8gbm90IGNhY2hlIGxlbmd0aCBiZWNhdXNlIG1vcmUgd2F0Y2hlcnMgbWlnaHQgYmUgcHVzaGVkXG4gICAgLy8gYXMgd2UgcnVuIGV4aXN0aW5nIHdhdGNoZXJzXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcXVldWUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHdhdGNoZXIgPSBxdWV1ZVtpbmRleF07XG4gICAgICAgIGlmICh3YXRjaGVyLmJlZm9yZSkge1xuICAgICAgICAgICAgd2F0Y2hlci5iZWZvcmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZCA9IHdhdGNoZXIuaWQ7XG4gICAgICAgIGhhc1tpZF0gPSBudWxsO1xuICAgICAgICB3YXRjaGVyLnJ1bigpO1xuICAgICAgICAvLyBpbiBkZXYgYnVpbGQsIGNoZWNrIGFuZCBzdG9wIGNpcmN1bGFyIHVwZGF0ZXMuXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGhhc1tpZF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY2lyY3VsYXJbaWRdID0gKGNpcmN1bGFyW2lkXSB8fCAwKSArIDE7XG4gICAgICAgICAgICBpZiAoY2lyY3VsYXJbaWRdID4gTUFYX1VQREFURV9DT1VOVCkge1xuICAgICAgICAgICAgICAgIHdhcm4oJ1lvdSBtYXkgaGF2ZSBhbiBpbmZpbml0ZSB1cGRhdGUgbG9vcCAnICtcbiAgICAgICAgICAgICAgICAgICAgKHdhdGNoZXIudXNlclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBcImluIHdhdGNoZXIgd2l0aCBleHByZXNzaW9uIFxcXCJcIi5jb25jYXQod2F0Y2hlci5leHByZXNzaW9uLCBcIlxcXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJpbiBhIGNvbXBvbmVudCByZW5kZXIgZnVuY3Rpb24uXCIpLCB3YXRjaGVyLnZtKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBrZWVwIGNvcGllcyBvZiBwb3N0IHF1ZXVlcyBiZWZvcmUgcmVzZXR0aW5nIHN0YXRlXG4gICAgdmFyIGFjdGl2YXRlZFF1ZXVlID0gYWN0aXZhdGVkQ2hpbGRyZW4uc2xpY2UoKTtcbiAgICB2YXIgdXBkYXRlZFF1ZXVlID0gcXVldWUuc2xpY2UoKTtcbiAgICByZXNldFNjaGVkdWxlclN0YXRlKCk7XG4gICAgLy8gY2FsbCBjb21wb25lbnQgdXBkYXRlZCBhbmQgYWN0aXZhdGVkIGhvb2tzXG4gICAgY2FsbEFjdGl2YXRlZEhvb2tzKGFjdGl2YXRlZFF1ZXVlKTtcbiAgICBjYWxsVXBkYXRlZEhvb2tzKHVwZGF0ZWRRdWV1ZSk7XG4gICAgY2xlYW51cERlcHMoKTtcbiAgICAvLyBkZXZ0b29sIGhvb2tcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoZGV2dG9vbHMgJiYgY29uZmlnLmRldnRvb2xzKSB7XG4gICAgICAgIGRldnRvb2xzLmVtaXQoJ2ZsdXNoJyk7XG4gICAgfVxufVxuZnVuY3Rpb24gY2FsbFVwZGF0ZWRIb29rcyhxdWV1ZSkge1xuICAgIHZhciBpID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgdmFyIHdhdGNoZXIgPSBxdWV1ZVtpXTtcbiAgICAgICAgdmFyIHZtID0gd2F0Y2hlci52bTtcbiAgICAgICAgaWYgKHZtICYmIHZtLl93YXRjaGVyID09PSB3YXRjaGVyICYmIHZtLl9pc01vdW50ZWQgJiYgIXZtLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgY2FsbEhvb2skMSh2bSwgJ3VwZGF0ZWQnKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogUXVldWUgYSBrZXB0LWFsaXZlIGNvbXBvbmVudCB0aGF0IHdhcyBhY3RpdmF0ZWQgZHVyaW5nIHBhdGNoLlxuICogVGhlIHF1ZXVlIHdpbGwgYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSBlbnRpcmUgdHJlZSBoYXMgYmVlbiBwYXRjaGVkLlxuICovXG5mdW5jdGlvbiBxdWV1ZUFjdGl2YXRlZENvbXBvbmVudCh2bSkge1xuICAgIC8vIHNldHRpbmcgX2luYWN0aXZlIHRvIGZhbHNlIGhlcmUgc28gdGhhdCBhIHJlbmRlciBmdW5jdGlvbiBjYW5cbiAgICAvLyByZWx5IG9uIGNoZWNraW5nIHdoZXRoZXIgaXQncyBpbiBhbiBpbmFjdGl2ZSB0cmVlIChlLmcuIHJvdXRlci12aWV3KVxuICAgIHZtLl9pbmFjdGl2ZSA9IGZhbHNlO1xuICAgIGFjdGl2YXRlZENoaWxkcmVuLnB1c2godm0pO1xufVxuZnVuY3Rpb24gY2FsbEFjdGl2YXRlZEhvb2tzKHF1ZXVlKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBxdWV1ZVtpXS5faW5hY3RpdmUgPSB0cnVlO1xuICAgICAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHF1ZXVlW2ldLCB0cnVlIC8qIHRydWUgKi8pO1xuICAgIH1cbn1cbi8qKlxuICogUHVzaCBhIHdhdGNoZXIgaW50byB0aGUgd2F0Y2hlciBxdWV1ZS5cbiAqIEpvYnMgd2l0aCBkdXBsaWNhdGUgSURzIHdpbGwgYmUgc2tpcHBlZCB1bmxlc3MgaXQnc1xuICogcHVzaGVkIHdoZW4gdGhlIHF1ZXVlIGlzIGJlaW5nIGZsdXNoZWQuXG4gKi9cbmZ1bmN0aW9uIHF1ZXVlV2F0Y2hlcih3YXRjaGVyKSB7XG4gICAgdmFyIGlkID0gd2F0Y2hlci5pZDtcbiAgICBpZiAoaGFzW2lkXSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHdhdGNoZXIgPT09IERlcC50YXJnZXQgJiYgd2F0Y2hlci5ub1JlY3Vyc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBoYXNbaWRdID0gdHJ1ZTtcbiAgICBpZiAoIWZsdXNoaW5nKSB7XG4gICAgICAgIHF1ZXVlLnB1c2god2F0Y2hlcik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBpZiBhbHJlYWR5IGZsdXNoaW5nLCBzcGxpY2UgdGhlIHdhdGNoZXIgYmFzZWQgb24gaXRzIGlkXG4gICAgICAgIC8vIGlmIGFscmVhZHkgcGFzdCBpdHMgaWQsIGl0IHdpbGwgYmUgcnVuIG5leHQgaW1tZWRpYXRlbHkuXG4gICAgICAgIHZhciBpID0gcXVldWUubGVuZ3RoIC0gMTtcbiAgICAgICAgd2hpbGUgKGkgPiBpbmRleCAmJiBxdWV1ZVtpXS5pZCA+IHdhdGNoZXIuaWQpIHtcbiAgICAgICAgICAgIGktLTtcbiAgICAgICAgfVxuICAgICAgICBxdWV1ZS5zcGxpY2UoaSArIDEsIDAsIHdhdGNoZXIpO1xuICAgIH1cbiAgICAvLyBxdWV1ZSB0aGUgZmx1c2hcbiAgICBpZiAoIXdhaXRpbmcpIHtcbiAgICAgICAgd2FpdGluZyA9IHRydWU7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFjb25maWcuYXN5bmMpIHtcbiAgICAgICAgICAgIGZsdXNoU2NoZWR1bGVyUXVldWUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBuZXh0VGljayhmbHVzaFNjaGVkdWxlclF1ZXVlKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGluaXRQcm92aWRlKHZtKSB7XG4gICAgdmFyIHByb3ZpZGVPcHRpb24gPSB2bS4kb3B0aW9ucy5wcm92aWRlO1xuICAgIGlmIChwcm92aWRlT3B0aW9uKSB7XG4gICAgICAgIHZhciBwcm92aWRlZCA9IGlzRnVuY3Rpb24ocHJvdmlkZU9wdGlvbilcbiAgICAgICAgICAgID8gcHJvdmlkZU9wdGlvbi5jYWxsKHZtKVxuICAgICAgICAgICAgOiBwcm92aWRlT3B0aW9uO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KHByb3ZpZGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzb3VyY2UgPSByZXNvbHZlUHJvdmlkZWQodm0pO1xuICAgICAgICAvLyBJRTkgZG9lc24ndCBzdXBwb3J0IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIHNvIHdlIGhhdmUgdG9cbiAgICAgICAgLy8gaXRlcmF0ZSB0aGUga2V5cyBvdXJzZWx2ZXMuXG4gICAgICAgIHZhciBrZXlzID0gaGFzU3ltYm9sID8gUmVmbGVjdC5vd25LZXlzKHByb3ZpZGVkKSA6IE9iamVjdC5rZXlzKHByb3ZpZGVkKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzb3VyY2UsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm92aWRlZCwga2V5KSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBpbml0SW5qZWN0aW9ucyh2bSkge1xuICAgIHZhciByZXN1bHQgPSByZXNvbHZlSW5qZWN0KHZtLiRvcHRpb25zLmluamVjdCwgdm0pO1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgICAgICAgT2JqZWN0LmtleXMocmVzdWx0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgIGRlZmluZVJlYWN0aXZlKHZtLCBrZXksIHJlc3VsdFtrZXldLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm4oXCJBdm9pZCBtdXRhdGluZyBhbiBpbmplY3RlZCB2YWx1ZSBkaXJlY3RseSBzaW5jZSB0aGUgY2hhbmdlcyB3aWxsIGJlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwib3ZlcndyaXR0ZW4gd2hlbmV2ZXIgdGhlIHByb3ZpZGVkIGNvbXBvbmVudCByZS1yZW5kZXJzLiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcImluamVjdGlvbiBiZWluZyBtdXRhdGVkOiBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiXCIpLCB2bSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWZpbmVSZWFjdGl2ZSh2bSwga2V5LCByZXN1bHRba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVzb2x2ZUluamVjdChpbmplY3QsIHZtKSB7XG4gICAgaWYgKGluamVjdCkge1xuICAgICAgICAvLyBpbmplY3QgaXMgOmFueSBiZWNhdXNlIGZsb3cgaXMgbm90IHNtYXJ0IGVub3VnaCB0byBmaWd1cmUgb3V0IGNhY2hlZFxuICAgICAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdmFyIGtleXMgPSBoYXNTeW1ib2wgPyBSZWZsZWN0Lm93bktleXMoaW5qZWN0KSA6IE9iamVjdC5rZXlzKGluamVjdCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICAvLyAjNjU3NCBpbiBjYXNlIHRoZSBpbmplY3Qgb2JqZWN0IGlzIG9ic2VydmVkLi4uXG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnX19vYl9fJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHZhciBwcm92aWRlS2V5ID0gaW5qZWN0W2tleV0uZnJvbTtcbiAgICAgICAgICAgIGlmIChwcm92aWRlS2V5IGluIHZtLl9wcm92aWRlZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdm0uX3Byb3ZpZGVkW3Byb3ZpZGVLZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoJ2RlZmF1bHQnIGluIGluamVjdFtrZXldKSB7XG4gICAgICAgICAgICAgICAgdmFyIHByb3ZpZGVEZWZhdWx0ID0gaW5qZWN0W2tleV0uZGVmYXVsdDtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IGlzRnVuY3Rpb24ocHJvdmlkZURlZmF1bHQpXG4gICAgICAgICAgICAgICAgICAgID8gcHJvdmlkZURlZmF1bHQuY2FsbCh2bSlcbiAgICAgICAgICAgICAgICAgICAgOiBwcm92aWRlRGVmYXVsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICB3YXJuKFwiSW5qZWN0aW9uIFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgbm90IGZvdW5kXCIpLCB2bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0KGRhdGEsIHByb3BzLCBjaGlsZHJlbiwgcGFyZW50LCBDdG9yKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB2YXIgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucztcbiAgICAvLyBlbnN1cmUgdGhlIGNyZWF0ZUVsZW1lbnQgZnVuY3Rpb24gaW4gZnVuY3Rpb25hbCBjb21wb25lbnRzXG4gICAgLy8gZ2V0cyBhIHVuaXF1ZSBjb250ZXh0IC0gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIGNvcnJlY3QgbmFtZWQgc2xvdCBjaGVja1xuICAgIHZhciBjb250ZXh0Vm07XG4gICAgaWYgKGhhc093bihwYXJlbnQsICdfdWlkJykpIHtcbiAgICAgICAgY29udGV4dFZtID0gT2JqZWN0LmNyZWF0ZShwYXJlbnQpO1xuICAgICAgICBjb250ZXh0Vm0uX29yaWdpbmFsID0gcGFyZW50O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gdGhlIGNvbnRleHQgdm0gcGFzc2VkIGluIGlzIGEgZnVuY3Rpb25hbCBjb250ZXh0IGFzIHdlbGwuXG4gICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBhcmUgYWJsZSB0byBnZXQgYSBob2xkIHRvIHRoZVxuICAgICAgICAvLyByZWFsIGNvbnRleHQgaW5zdGFuY2UuXG4gICAgICAgIGNvbnRleHRWbSA9IHBhcmVudDtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQuX29yaWdpbmFsO1xuICAgIH1cbiAgICB2YXIgaXNDb21waWxlZCA9IGlzVHJ1ZShvcHRpb25zLl9jb21waWxlZCk7XG4gICAgdmFyIG5lZWROb3JtYWxpemF0aW9uID0gIWlzQ29tcGlsZWQ7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIHRoaXMubGlzdGVuZXJzID0gZGF0YS5vbiB8fCBlbXB0eU9iamVjdDtcbiAgICB0aGlzLmluamVjdGlvbnMgPSByZXNvbHZlSW5qZWN0KG9wdGlvbnMuaW5qZWN0LCBwYXJlbnQpO1xuICAgIHRoaXMuc2xvdHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghX3RoaXMuJHNsb3RzKSB7XG4gICAgICAgICAgICBub3JtYWxpemVTY29wZWRTbG90cyhwYXJlbnQsIGRhdGEuc2NvcGVkU2xvdHMsIChfdGhpcy4kc2xvdHMgPSByZXNvbHZlU2xvdHMoY2hpbGRyZW4sIHBhcmVudCkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXMuJHNsb3RzO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzY29wZWRTbG90cycsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplU2NvcGVkU2xvdHMocGFyZW50LCBkYXRhLnNjb3BlZFNsb3RzLCB0aGlzLnNsb3RzKCkpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gc3VwcG9ydCBmb3IgY29tcGlsZWQgZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICAgIGlmIChpc0NvbXBpbGVkKSB7XG4gICAgICAgIC8vIGV4cG9zaW5nICRvcHRpb25zIGZvciByZW5kZXJTdGF0aWMoKVxuICAgICAgICB0aGlzLiRvcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgLy8gcHJlLXJlc29sdmUgc2xvdHMgZm9yIHJlbmRlclNsb3QoKVxuICAgICAgICB0aGlzLiRzbG90cyA9IHRoaXMuc2xvdHMoKTtcbiAgICAgICAgdGhpcy4kc2NvcGVkU2xvdHMgPSBub3JtYWxpemVTY29wZWRTbG90cyhwYXJlbnQsIGRhdGEuc2NvcGVkU2xvdHMsIHRoaXMuJHNsb3RzKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuX3Njb3BlSWQpIHtcbiAgICAgICAgdGhpcy5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgICAgICAgICB2YXIgdm5vZGUgPSBjcmVhdGVFbGVtZW50JDEoY29udGV4dFZtLCBhLCBiLCBjLCBkLCBuZWVkTm9ybWFsaXphdGlvbik7XG4gICAgICAgICAgICBpZiAodm5vZGUgJiYgIWlzQXJyYXkodm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgdm5vZGUuZm5TY29wZUlkID0gb3B0aW9ucy5fc2NvcGVJZDtcbiAgICAgICAgICAgICAgICB2bm9kZS5mbkNvbnRleHQgPSBwYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdm5vZGU7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50JDEoY29udGV4dFZtLCBhLCBiLCBjLCBkLCBuZWVkTm9ybWFsaXphdGlvbik7XG4gICAgICAgIH07XG4gICAgfVxufVxuaW5zdGFsbFJlbmRlckhlbHBlcnMoRnVuY3Rpb25hbFJlbmRlckNvbnRleHQucHJvdG90eXBlKTtcbmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uYWxDb21wb25lbnQoQ3RvciwgcHJvcHNEYXRhLCBkYXRhLCBjb250ZXh0Vm0sIGNoaWxkcmVuKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gICAgdmFyIHByb3BzID0ge307XG4gICAgdmFyIHByb3BPcHRpb25zID0gb3B0aW9ucy5wcm9wcztcbiAgICBpZiAoaXNEZWYocHJvcE9wdGlvbnMpKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wT3B0aW9ucykge1xuICAgICAgICAgICAgcHJvcHNba2V5XSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BPcHRpb25zLCBwcm9wc0RhdGEgfHwgZW1wdHlPYmplY3QpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoaXNEZWYoZGF0YS5hdHRycykpXG4gICAgICAgICAgICBtZXJnZVByb3BzKHByb3BzLCBkYXRhLmF0dHJzKTtcbiAgICAgICAgaWYgKGlzRGVmKGRhdGEucHJvcHMpKVxuICAgICAgICAgICAgbWVyZ2VQcm9wcyhwcm9wcywgZGF0YS5wcm9wcyk7XG4gICAgfVxuICAgIHZhciByZW5kZXJDb250ZXh0ID0gbmV3IEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0KGRhdGEsIHByb3BzLCBjaGlsZHJlbiwgY29udGV4dFZtLCBDdG9yKTtcbiAgICB2YXIgdm5vZGUgPSBvcHRpb25zLnJlbmRlci5jYWxsKG51bGwsIHJlbmRlckNvbnRleHQuX2MsIHJlbmRlckNvbnRleHQpO1xuICAgIGlmICh2bm9kZSBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgICAgIHJldHVybiBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2RlLCBkYXRhLCByZW5kZXJDb250ZXh0LnBhcmVudCwgb3B0aW9ucywgcmVuZGVyQ29udGV4dCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQXJyYXkodm5vZGUpKSB7XG4gICAgICAgIHZhciB2bm9kZXMgPSBub3JtYWxpemVDaGlsZHJlbih2bm9kZSkgfHwgW107XG4gICAgICAgIHZhciByZXMgPSBuZXcgQXJyYXkodm5vZGVzLmxlbmd0aCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXNbaV0gPSBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2Rlc1tpXSwgZGF0YSwgcmVuZGVyQ29udGV4dC5wYXJlbnQsIG9wdGlvbnMsIHJlbmRlckNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufVxuZnVuY3Rpb24gY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCh2bm9kZSwgZGF0YSwgY29udGV4dFZtLCBvcHRpb25zLCByZW5kZXJDb250ZXh0KSB7XG4gICAgLy8gIzc4MTcgY2xvbmUgbm9kZSBiZWZvcmUgc2V0dGluZyBmbkNvbnRleHQsIG90aGVyd2lzZSBpZiB0aGUgbm9kZSBpcyByZXVzZWRcbiAgICAvLyAoZS5nLiBpdCB3YXMgZnJvbSBhIGNhY2hlZCBub3JtYWwgc2xvdCkgdGhlIGZuQ29udGV4dCBjYXVzZXMgbmFtZWQgc2xvdHNcbiAgICAvLyB0aGF0IHNob3VsZCBub3QgYmUgbWF0Y2hlZCB0byBtYXRjaC5cbiAgICB2YXIgY2xvbmUgPSBjbG9uZVZOb2RlKHZub2RlKTtcbiAgICBjbG9uZS5mbkNvbnRleHQgPSBjb250ZXh0Vm07XG4gICAgY2xvbmUuZm5PcHRpb25zID0gb3B0aW9ucztcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAoY2xvbmUuZGV2dG9vbHNNZXRhID0gY2xvbmUuZGV2dG9vbHNNZXRhIHx8IHt9KS5yZW5kZXJDb250ZXh0ID1cbiAgICAgICAgICAgIHJlbmRlckNvbnRleHQ7XG4gICAgfVxuICAgIGlmIChkYXRhLnNsb3QpIHtcbiAgICAgICAgKGNsb25lLmRhdGEgfHwgKGNsb25lLmRhdGEgPSB7fSkpLnNsb3QgPSBkYXRhLnNsb3Q7XG4gICAgfVxuICAgIHJldHVybiBjbG9uZTtcbn1cbmZ1bmN0aW9uIG1lcmdlUHJvcHModG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuICAgICAgICB0b1tjYW1lbGl6ZShrZXkpXSA9IGZyb21ba2V5XTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWUob3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zLm5hbWUgfHwgb3B0aW9ucy5fX25hbWUgfHwgb3B0aW9ucy5fY29tcG9uZW50VGFnO1xufVxuLy8gaW5saW5lIGhvb2tzIHRvIGJlIGludm9rZWQgb24gY29tcG9uZW50IFZOb2RlcyBkdXJpbmcgcGF0Y2hcbnZhciBjb21wb25lbnRWTm9kZUhvb2tzID0ge1xuICAgIGluaXQ6IGZ1bmN0aW9uICh2bm9kZSwgaHlkcmF0aW5nKSB7XG4gICAgICAgIGlmICh2bm9kZS5jb21wb25lbnRJbnN0YW5jZSAmJlxuICAgICAgICAgICAgIXZub2RlLmNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCAmJlxuICAgICAgICAgICAgdm5vZGUuZGF0YS5rZWVwQWxpdmUpIHtcbiAgICAgICAgICAgIC8vIGtlcHQtYWxpdmUgY29tcG9uZW50cywgdHJlYXQgYXMgYSBwYXRjaFxuICAgICAgICAgICAgdmFyIG1vdW50ZWROb2RlID0gdm5vZGU7IC8vIHdvcmsgYXJvdW5kIGZsb3dcbiAgICAgICAgICAgIGNvbXBvbmVudFZOb2RlSG9va3MucHJlcGF0Y2gobW91bnRlZE5vZGUsIG1vdW50ZWROb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9ICh2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IGNyZWF0ZUNvbXBvbmVudEluc3RhbmNlRm9yVm5vZGUodm5vZGUsIGFjdGl2ZUluc3RhbmNlKSk7XG4gICAgICAgICAgICBjaGlsZC4kbW91bnQoaHlkcmF0aW5nID8gdm5vZGUuZWxtIDogdW5kZWZpbmVkLCBoeWRyYXRpbmcpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwcmVwYXRjaDogZnVuY3Rpb24gKG9sZFZub2RlLCB2bm9kZSkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgICAgIHZhciBjaGlsZCA9ICh2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IG9sZFZub2RlLmNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgICAgdXBkYXRlQ2hpbGRDb21wb25lbnQoY2hpbGQsIG9wdGlvbnMucHJvcHNEYXRhLCAvLyB1cGRhdGVkIHByb3BzXG4gICAgICAgIG9wdGlvbnMubGlzdGVuZXJzLCAvLyB1cGRhdGVkIGxpc3RlbmVyc1xuICAgICAgICB2bm9kZSwgLy8gbmV3IHBhcmVudCB2bm9kZVxuICAgICAgICBvcHRpb25zLmNoaWxkcmVuIC8vIG5ldyBjaGlsZHJlblxuICAgICAgICApO1xuICAgIH0sXG4gICAgaW5zZXJ0OiBmdW5jdGlvbiAodm5vZGUpIHtcbiAgICAgICAgdmFyIGNvbnRleHQgPSB2bm9kZS5jb250ZXh0LCBjb21wb25lbnRJbnN0YW5jZSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICBpZiAoIWNvbXBvbmVudEluc3RhbmNlLl9pc01vdW50ZWQpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgICAgICAgICAgY2FsbEhvb2skMShjb21wb25lbnRJbnN0YW5jZSwgJ21vdW50ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodm5vZGUuZGF0YS5rZWVwQWxpdmUpIHtcbiAgICAgICAgICAgIGlmIChjb250ZXh0Ll9pc01vdW50ZWQpIHtcbiAgICAgICAgICAgICAgICAvLyB2dWUtcm91dGVyIzEyMTJcbiAgICAgICAgICAgICAgICAvLyBEdXJpbmcgdXBkYXRlcywgYSBrZXB0LWFsaXZlIGNvbXBvbmVudCdzIGNoaWxkIGNvbXBvbmVudHMgbWF5XG4gICAgICAgICAgICAgICAgLy8gY2hhbmdlLCBzbyBkaXJlY3RseSB3YWxraW5nIHRoZSB0cmVlIGhlcmUgbWF5IGNhbGwgYWN0aXZhdGVkIGhvb2tzXG4gICAgICAgICAgICAgICAgLy8gb24gaW5jb3JyZWN0IGNoaWxkcmVuLiBJbnN0ZWFkIHdlIHB1c2ggdGhlbSBpbnRvIGEgcXVldWUgd2hpY2ggd2lsbFxuICAgICAgICAgICAgICAgIC8vIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUgd2hvbGUgcGF0Y2ggcHJvY2VzcyBlbmRlZC5cbiAgICAgICAgICAgICAgICBxdWV1ZUFjdGl2YXRlZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlLCB0cnVlIC8qIGRpcmVjdCAqLyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICh2bm9kZSkge1xuICAgICAgICB2YXIgY29tcG9uZW50SW5zdGFuY2UgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIGlmICghdm5vZGUuZGF0YS5rZWVwQWxpdmUpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZS4kZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlLCB0cnVlIC8qIGRpcmVjdCAqLyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xudmFyIGhvb2tzVG9NZXJnZSA9IE9iamVjdC5rZXlzKGNvbXBvbmVudFZOb2RlSG9va3MpO1xuZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50KEN0b3IsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuLCB0YWcpIHtcbiAgICBpZiAoaXNVbmRlZihDdG9yKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBiYXNlQ3RvciA9IGNvbnRleHQuJG9wdGlvbnMuX2Jhc2U7XG4gICAgLy8gcGxhaW4gb3B0aW9ucyBvYmplY3Q6IHR1cm4gaXQgaW50byBhIGNvbnN0cnVjdG9yXG4gICAgaWYgKGlzT2JqZWN0KEN0b3IpKSB7XG4gICAgICAgIEN0b3IgPSBiYXNlQ3Rvci5leHRlbmQoQ3Rvcik7XG4gICAgfVxuICAgIC8vIGlmIGF0IHRoaXMgc3RhZ2UgaXQncyBub3QgYSBjb25zdHJ1Y3RvciBvciBhbiBhc3luYyBjb21wb25lbnQgZmFjdG9yeSxcbiAgICAvLyByZWplY3QuXG4gICAgaWYgKHR5cGVvZiBDdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICB3YXJuKFwiSW52YWxpZCBDb21wb25lbnQgZGVmaW5pdGlvbjogXCIuY29uY2F0KFN0cmluZyhDdG9yKSksIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gYXN5bmMgY29tcG9uZW50XG4gICAgdmFyIGFzeW5jRmFjdG9yeTtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgaWYgKGlzVW5kZWYoQ3Rvci5jaWQpKSB7XG4gICAgICAgIGFzeW5jRmFjdG9yeSA9IEN0b3I7XG4gICAgICAgIEN0b3IgPSByZXNvbHZlQXN5bmNDb21wb25lbnQoYXN5bmNGYWN0b3J5LCBiYXNlQ3Rvcik7XG4gICAgICAgIGlmIChDdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBhIHBsYWNlaG9sZGVyIG5vZGUgZm9yIGFzeW5jIGNvbXBvbmVudCwgd2hpY2ggaXMgcmVuZGVyZWRcbiAgICAgICAgICAgIC8vIGFzIGEgY29tbWVudCBub2RlIGJ1dCBwcmVzZXJ2ZXMgYWxsIHRoZSByYXcgaW5mb3JtYXRpb24gZm9yIHRoZSBub2RlLlxuICAgICAgICAgICAgLy8gdGhlIGluZm9ybWF0aW9uIHdpbGwgYmUgdXNlZCBmb3IgYXN5bmMgc2VydmVyLXJlbmRlcmluZyBhbmQgaHlkcmF0aW9uLlxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUFzeW5jUGxhY2Vob2xkZXIoYXN5bmNGYWN0b3J5LCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbiwgdGFnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkYXRhID0gZGF0YSB8fCB7fTtcbiAgICAvLyByZXNvbHZlIGNvbnN0cnVjdG9yIG9wdGlvbnMgaW4gY2FzZSBnbG9iYWwgbWl4aW5zIGFyZSBhcHBsaWVkIGFmdGVyXG4gICAgLy8gY29tcG9uZW50IGNvbnN0cnVjdG9yIGNyZWF0aW9uXG4gICAgcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyhDdG9yKTtcbiAgICAvLyB0cmFuc2Zvcm0gY29tcG9uZW50IHYtbW9kZWwgZGF0YSBpbnRvIHByb3BzICYgZXZlbnRzXG4gICAgaWYgKGlzRGVmKGRhdGEubW9kZWwpKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgdHJhbnNmb3JtTW9kZWwoQ3Rvci5vcHRpb25zLCBkYXRhKTtcbiAgICB9XG4gICAgLy8gZXh0cmFjdCBwcm9wc1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICB2YXIgcHJvcHNEYXRhID0gZXh0cmFjdFByb3BzRnJvbVZOb2RlRGF0YShkYXRhLCBDdG9yLCB0YWcpO1xuICAgIC8vIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIGlmIChpc1RydWUoQ3Rvci5vcHRpb25zLmZ1bmN0aW9uYWwpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVGdW5jdGlvbmFsQ29tcG9uZW50KEN0b3IsIHByb3BzRGF0YSwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4pO1xuICAgIH1cbiAgICAvLyBleHRyYWN0IGxpc3RlbmVycywgc2luY2UgdGhlc2UgbmVlZHMgdG8gYmUgdHJlYXRlZCBhc1xuICAgIC8vIGNoaWxkIGNvbXBvbmVudCBsaXN0ZW5lcnMgaW5zdGVhZCBvZiBET00gbGlzdGVuZXJzXG4gICAgdmFyIGxpc3RlbmVycyA9IGRhdGEub247XG4gICAgLy8gcmVwbGFjZSB3aXRoIGxpc3RlbmVycyB3aXRoIC5uYXRpdmUgbW9kaWZpZXJcbiAgICAvLyBzbyBpdCBnZXRzIHByb2Nlc3NlZCBkdXJpbmcgcGFyZW50IGNvbXBvbmVudCBwYXRjaC5cbiAgICBkYXRhLm9uID0gZGF0YS5uYXRpdmVPbjtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgaWYgKGlzVHJ1ZShDdG9yLm9wdGlvbnMuYWJzdHJhY3QpKSB7XG4gICAgICAgIC8vIGFic3RyYWN0IGNvbXBvbmVudHMgZG8gbm90IGtlZXAgYW55dGhpbmdcbiAgICAgICAgLy8gb3RoZXIgdGhhbiBwcm9wcyAmIGxpc3RlbmVycyAmIHNsb3RcbiAgICAgICAgLy8gd29yayBhcm91bmQgZmxvd1xuICAgICAgICB2YXIgc2xvdCA9IGRhdGEuc2xvdDtcbiAgICAgICAgZGF0YSA9IHt9O1xuICAgICAgICBpZiAoc2xvdCkge1xuICAgICAgICAgICAgZGF0YS5zbG90ID0gc2xvdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBpbnN0YWxsIGNvbXBvbmVudCBtYW5hZ2VtZW50IGhvb2tzIG9udG8gdGhlIHBsYWNlaG9sZGVyIG5vZGVcbiAgICBpbnN0YWxsQ29tcG9uZW50SG9va3MoZGF0YSk7XG4gICAgLy8gcmV0dXJuIGEgcGxhY2Vob2xkZXIgdm5vZGVcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKEN0b3Iub3B0aW9ucykgfHwgdGFnO1xuICAgIHZhciB2bm9kZSA9IG5ldyBWTm9kZShcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgXCJ2dWUtY29tcG9uZW50LVwiLmNvbmNhdChDdG9yLmNpZCkuY29uY2F0KG5hbWUgPyBcIi1cIi5jb25jYXQobmFtZSkgOiAnJyksIGRhdGEsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHQsIFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICB7IEN0b3I6IEN0b3IsIHByb3BzRGF0YTogcHJvcHNEYXRhLCBsaXN0ZW5lcnM6IGxpc3RlbmVycywgdGFnOiB0YWcsIGNoaWxkcmVuOiBjaGlsZHJlbiB9LCBhc3luY0ZhY3RvcnkpO1xuICAgIHJldHVybiB2bm9kZTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudEluc3RhbmNlRm9yVm5vZGUoXG4vLyB3ZSBrbm93IGl0J3MgTW91bnRlZENvbXBvbmVudFZOb2RlIGJ1dCBmbG93IGRvZXNuJ3RcbnZub2RlLCBcbi8vIGFjdGl2ZUluc3RhbmNlIGluIGxpZmVjeWNsZSBzdGF0ZVxucGFyZW50KSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIF9pc0NvbXBvbmVudDogdHJ1ZSxcbiAgICAgICAgX3BhcmVudFZub2RlOiB2bm9kZSxcbiAgICAgICAgcGFyZW50OiBwYXJlbnRcbiAgICB9O1xuICAgIC8vIGNoZWNrIGlubGluZS10ZW1wbGF0ZSByZW5kZXIgZnVuY3Rpb25zXG4gICAgdmFyIGlubGluZVRlbXBsYXRlID0gdm5vZGUuZGF0YS5pbmxpbmVUZW1wbGF0ZTtcbiAgICBpZiAoaXNEZWYoaW5saW5lVGVtcGxhdGUpKSB7XG4gICAgICAgIG9wdGlvbnMucmVuZGVyID0gaW5saW5lVGVtcGxhdGUucmVuZGVyO1xuICAgICAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IGlubGluZVRlbXBsYXRlLnN0YXRpY1JlbmRlckZucztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyB2bm9kZS5jb21wb25lbnRPcHRpb25zLkN0b3Iob3B0aW9ucyk7XG59XG5mdW5jdGlvbiBpbnN0YWxsQ29tcG9uZW50SG9va3MoZGF0YSkge1xuICAgIHZhciBob29rcyA9IGRhdGEuaG9vayB8fCAoZGF0YS5ob29rID0ge30pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3NUb01lcmdlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBob29rc1RvTWVyZ2VbaV07XG4gICAgICAgIHZhciBleGlzdGluZyA9IGhvb2tzW2tleV07XG4gICAgICAgIHZhciB0b01lcmdlID0gY29tcG9uZW50Vk5vZGVIb29rc1trZXldO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIGlmIChleGlzdGluZyAhPT0gdG9NZXJnZSAmJiAhKGV4aXN0aW5nICYmIGV4aXN0aW5nLl9tZXJnZWQpKSB7XG4gICAgICAgICAgICBob29rc1trZXldID0gZXhpc3RpbmcgPyBtZXJnZUhvb2sodG9NZXJnZSwgZXhpc3RpbmcpIDogdG9NZXJnZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIG1lcmdlSG9vayhmMSwgZjIpIHtcbiAgICB2YXIgbWVyZ2VkID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgLy8gZmxvdyBjb21wbGFpbnMgYWJvdXQgZXh0cmEgYXJncyB3aGljaCBpcyB3aHkgd2UgdXNlIGFueVxuICAgICAgICBmMShhLCBiKTtcbiAgICAgICAgZjIoYSwgYik7XG4gICAgfTtcbiAgICBtZXJnZWQuX21lcmdlZCA9IHRydWU7XG4gICAgcmV0dXJuIG1lcmdlZDtcbn1cbi8vIHRyYW5zZm9ybSBjb21wb25lbnQgdi1tb2RlbCBpbmZvICh2YWx1ZSBhbmQgY2FsbGJhY2spIGludG9cbi8vIHByb3AgYW5kIGV2ZW50IGhhbmRsZXIgcmVzcGVjdGl2ZWx5LlxuZnVuY3Rpb24gdHJhbnNmb3JtTW9kZWwob3B0aW9ucywgZGF0YSkge1xuICAgIHZhciBwcm9wID0gKG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5wcm9wKSB8fCAndmFsdWUnO1xuICAgIHZhciBldmVudCA9IChvcHRpb25zLm1vZGVsICYmIG9wdGlvbnMubW9kZWwuZXZlbnQpIHx8ICdpbnB1dCc7XG4gICAgKGRhdGEuYXR0cnMgfHwgKGRhdGEuYXR0cnMgPSB7fSkpW3Byb3BdID0gZGF0YS5tb2RlbC52YWx1ZTtcbiAgICB2YXIgb24gPSBkYXRhLm9uIHx8IChkYXRhLm9uID0ge30pO1xuICAgIHZhciBleGlzdGluZyA9IG9uW2V2ZW50XTtcbiAgICB2YXIgY2FsbGJhY2sgPSBkYXRhLm1vZGVsLmNhbGxiYWNrO1xuICAgIGlmIChpc0RlZihleGlzdGluZykpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkoZXhpc3RpbmcpXG4gICAgICAgICAgICA/IGV4aXN0aW5nLmluZGV4T2YoY2FsbGJhY2spID09PSAtMVxuICAgICAgICAgICAgOiBleGlzdGluZyAhPT0gY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG9uW2V2ZW50XSA9IFtjYWxsYmFja10uY29uY2F0KGV4aXN0aW5nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgb25bZXZlbnRdID0gY2FsbGJhY2s7XG4gICAgfVxufVxuXG52YXIgd2FybiA9IG5vb3A7XG52YXIgdGlwID0gbm9vcDtcbnZhciBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlOyAvLyB3b3JrIGFyb3VuZCBmbG93IGNoZWNrXG52YXIgZm9ybWF0Q29tcG9uZW50TmFtZTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFyIGhhc0NvbnNvbGVfMSA9IHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJztcbiAgICB2YXIgY2xhc3NpZnlSRV8xID0gLyg/Ol58Wy1fXSkoXFx3KS9nO1xuICAgIHZhciBjbGFzc2lmeV8xID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoY2xhc3NpZnlSRV8xLCBmdW5jdGlvbiAoYykgeyByZXR1cm4gYy50b1VwcGVyQ2FzZSgpOyB9KS5yZXBsYWNlKC9bLV9dL2csICcnKTtcbiAgICB9O1xuICAgIHdhcm4gPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgICAgICBpZiAodm0gPT09IHZvaWQgMCkgeyB2bSA9IGN1cnJlbnRJbnN0YW5jZTsgfVxuICAgICAgICB2YXIgdHJhY2UgPSB2bSA/IGdlbmVyYXRlQ29tcG9uZW50VHJhY2Uodm0pIDogJyc7XG4gICAgICAgIGlmIChjb25maWcud2FybkhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbmZpZy53YXJuSGFuZGxlci5jYWxsKG51bGwsIG1zZywgdm0sIHRyYWNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChoYXNDb25zb2xlXzEgJiYgIWNvbmZpZy5zaWxlbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbVnVlIHdhcm5dOiBcIi5jb25jYXQobXNnKS5jb25jYXQodHJhY2UpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGlwID0gZnVuY3Rpb24gKG1zZywgdm0pIHtcbiAgICAgICAgaWYgKGhhc0NvbnNvbGVfMSAmJiAhY29uZmlnLnNpbGVudCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiW1Z1ZSB0aXBdOiBcIi5jb25jYXQobXNnKSArICh2bSA/IGdlbmVyYXRlQ29tcG9uZW50VHJhY2Uodm0pIDogJycpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZm9ybWF0Q29tcG9uZW50TmFtZSA9IGZ1bmN0aW9uICh2bSwgaW5jbHVkZUZpbGUpIHtcbiAgICAgICAgaWYgKHZtLiRyb290ID09PSB2bSkge1xuICAgICAgICAgICAgcmV0dXJuICc8Um9vdD4nO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvcHRpb25zID0gaXNGdW5jdGlvbih2bSkgJiYgdm0uY2lkICE9IG51bGxcbiAgICAgICAgICAgID8gdm0ub3B0aW9uc1xuICAgICAgICAgICAgOiB2bS5faXNWdWVcbiAgICAgICAgICAgICAgICA/IHZtLiRvcHRpb25zIHx8IHZtLmNvbnN0cnVjdG9yLm9wdGlvbnNcbiAgICAgICAgICAgICAgICA6IHZtO1xuICAgICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUob3B0aW9ucyk7XG4gICAgICAgIHZhciBmaWxlID0gb3B0aW9ucy5fX2ZpbGU7XG4gICAgICAgIGlmICghbmFtZSAmJiBmaWxlKSB7XG4gICAgICAgICAgICB2YXIgbWF0Y2ggPSBmaWxlLm1hdGNoKC8oW14vXFxcXF0rKVxcLnZ1ZSQvKTtcbiAgICAgICAgICAgIG5hbWUgPSBtYXRjaCAmJiBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKChuYW1lID8gXCI8XCIuY29uY2F0KGNsYXNzaWZ5XzEobmFtZSksIFwiPlwiKSA6IFwiPEFub255bW91cz5cIikgK1xuICAgICAgICAgICAgKGZpbGUgJiYgaW5jbHVkZUZpbGUgIT09IGZhbHNlID8gXCIgYXQgXCIuY29uY2F0KGZpbGUpIDogJycpKTtcbiAgICB9O1xuICAgIHZhciByZXBlYXRfMSA9IGZ1bmN0aW9uIChzdHIsIG4pIHtcbiAgICAgICAgdmFyIHJlcyA9ICcnO1xuICAgICAgICB3aGlsZSAobikge1xuICAgICAgICAgICAgaWYgKG4gJSAyID09PSAxKVxuICAgICAgICAgICAgICAgIHJlcyArPSBzdHI7XG4gICAgICAgICAgICBpZiAobiA+IDEpXG4gICAgICAgICAgICAgICAgc3RyICs9IHN0cjtcbiAgICAgICAgICAgIG4gPj49IDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIGdlbmVyYXRlQ29tcG9uZW50VHJhY2UgPSBmdW5jdGlvbiAodm0pIHtcbiAgICAgICAgaWYgKHZtLl9pc1Z1ZSAmJiB2bS4kcGFyZW50KSB7XG4gICAgICAgICAgICB2YXIgdHJlZSA9IFtdO1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA9IDA7XG4gICAgICAgICAgICB3aGlsZSAodm0pIHtcbiAgICAgICAgICAgICAgICBpZiAodHJlZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsYXN0ID0gdHJlZVt0cmVlLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGFzdC5jb25zdHJ1Y3RvciA9PT0gdm0uY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgdm0gPSB2bS4kcGFyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZVt0cmVlLmxlbmd0aCAtIDFdID0gW2xhc3QsIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyZWUucHVzaCh2bSk7XG4gICAgICAgICAgICAgICAgdm0gPSB2bS4kcGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICgnXFxuXFxuZm91bmQgaW5cXG5cXG4nICtcbiAgICAgICAgICAgICAgICB0cmVlXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHZtLCBpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChpID09PSAwID8gJy0tLT4gJyA6IHJlcGVhdF8xKCcgJywgNSArIGkgKiAyKSkuY29uY2F0KGlzQXJyYXkodm0pXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFwiXCIuY29uY2F0KGZvcm1hdENvbXBvbmVudE5hbWUodm1bMF0pLCBcIi4uLiAoXCIpLmNvbmNhdCh2bVsxXSwgXCIgcmVjdXJzaXZlIGNhbGxzKVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtYXRDb21wb25lbnROYW1lKHZtKSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBcIlxcblxcbihmb3VuZCBpbiBcIi5jb25jYXQoZm9ybWF0Q29tcG9uZW50TmFtZSh2bSksIFwiKVwiKTtcbiAgICAgICAgfVxuICAgIH07XG59XG5cbi8qKlxuICogT3B0aW9uIG92ZXJ3cml0aW5nIHN0cmF0ZWdpZXMgYXJlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZVxuICogaG93IHRvIG1lcmdlIGEgcGFyZW50IG9wdGlvbiB2YWx1ZSBhbmQgYSBjaGlsZCBvcHRpb25cbiAqIHZhbHVlIGludG8gdGhlIGZpbmFsIHZhbHVlLlxuICovXG52YXIgc3RyYXRzID0gY29uZmlnLm9wdGlvbk1lcmdlU3RyYXRlZ2llcztcbi8qKlxuICogT3B0aW9ucyB3aXRoIHJlc3RyaWN0aW9uc1xuICovXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHN0cmF0cy5lbCA9IHN0cmF0cy5wcm9wc0RhdGEgPSBmdW5jdGlvbiAocGFyZW50LCBjaGlsZCwgdm0sIGtleSkge1xuICAgICAgICBpZiAoIXZtKSB7XG4gICAgICAgICAgICB3YXJuKFwib3B0aW9uIFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW5zdGFuY2UgXCIpICtcbiAgICAgICAgICAgICAgICAnY3JlYXRpb24gd2l0aCB0aGUgYG5ld2Aga2V5d29yZC4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmYXVsdFN0cmF0KHBhcmVudCwgY2hpbGQpO1xuICAgIH07XG59XG4vKipcbiAqIEhlbHBlciB0aGF0IHJlY3Vyc2l2ZWx5IG1lcmdlcyB0d28gZGF0YSBvYmplY3RzIHRvZ2V0aGVyLlxuICovXG5mdW5jdGlvbiBtZXJnZURhdGEodG8sIGZyb20sIHJlY3Vyc2l2ZSkge1xuICAgIGlmIChyZWN1cnNpdmUgPT09IHZvaWQgMCkgeyByZWN1cnNpdmUgPSB0cnVlOyB9XG4gICAgaWYgKCFmcm9tKVxuICAgICAgICByZXR1cm4gdG87XG4gICAgdmFyIGtleSwgdG9WYWwsIGZyb21WYWw7XG4gICAgdmFyIGtleXMgPSBoYXNTeW1ib2xcbiAgICAgICAgPyBSZWZsZWN0Lm93bktleXMoZnJvbSlcbiAgICAgICAgOiBPYmplY3Qua2V5cyhmcm9tKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgLy8gaW4gY2FzZSB0aGUgb2JqZWN0IGlzIGFscmVhZHkgb2JzZXJ2ZWQuLi5cbiAgICAgICAgaWYgKGtleSA9PT0gJ19fb2JfXycpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgdG9WYWwgPSB0b1trZXldO1xuICAgICAgICBmcm9tVmFsID0gZnJvbVtrZXldO1xuICAgICAgICBpZiAoIXJlY3Vyc2l2ZSB8fCAhaGFzT3duKHRvLCBrZXkpKSB7XG4gICAgICAgICAgICBzZXQodG8sIGtleSwgZnJvbVZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodG9WYWwgIT09IGZyb21WYWwgJiZcbiAgICAgICAgICAgIGlzUGxhaW5PYmplY3QodG9WYWwpICYmXG4gICAgICAgICAgICBpc1BsYWluT2JqZWN0KGZyb21WYWwpKSB7XG4gICAgICAgICAgICBtZXJnZURhdGEodG9WYWwsIGZyb21WYWwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0bztcbn1cbi8qKlxuICogRGF0YVxuICovXG5mdW5jdGlvbiBtZXJnZURhdGFPckZuKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtKSB7XG4gICAgaWYgKCF2bSkge1xuICAgICAgICAvLyBpbiBhIFZ1ZS5leHRlbmQgbWVyZ2UsIGJvdGggc2hvdWxkIGJlIGZ1bmN0aW9uc1xuICAgICAgICBpZiAoIWNoaWxkVmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50VmFsO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcGFyZW50VmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRWYWw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2hlbiBwYXJlbnRWYWwgJiBjaGlsZFZhbCBhcmUgYm90aCBwcmVzZW50LFxuICAgICAgICAvLyB3ZSBuZWVkIHRvIHJldHVybiBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAgICAgICAgLy8gbWVyZ2VkIHJlc3VsdCBvZiBib3RoIGZ1bmN0aW9ucy4uLiBubyBuZWVkIHRvXG4gICAgICAgIC8vIGNoZWNrIGlmIHBhcmVudFZhbCBpcyBhIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZVxuICAgICAgICAvLyBpdCBoYXMgdG8gYmUgYSBmdW5jdGlvbiB0byBwYXNzIHByZXZpb3VzIG1lcmdlcy5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlZERhdGFGbigpIHtcbiAgICAgICAgICAgIHJldHVybiBtZXJnZURhdGEoaXNGdW5jdGlvbihjaGlsZFZhbCkgPyBjaGlsZFZhbC5jYWxsKHRoaXMsIHRoaXMpIDogY2hpbGRWYWwsIGlzRnVuY3Rpb24ocGFyZW50VmFsKSA/IHBhcmVudFZhbC5jYWxsKHRoaXMsIHRoaXMpIDogcGFyZW50VmFsKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBtZXJnZWRJbnN0YW5jZURhdGFGbigpIHtcbiAgICAgICAgICAgIC8vIGluc3RhbmNlIG1lcmdlXG4gICAgICAgICAgICB2YXIgaW5zdGFuY2VEYXRhID0gaXNGdW5jdGlvbihjaGlsZFZhbClcbiAgICAgICAgICAgICAgICA/IGNoaWxkVmFsLmNhbGwodm0sIHZtKVxuICAgICAgICAgICAgICAgIDogY2hpbGRWYWw7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdERhdGEgPSBpc0Z1bmN0aW9uKHBhcmVudFZhbClcbiAgICAgICAgICAgICAgICA/IHBhcmVudFZhbC5jYWxsKHZtLCB2bSlcbiAgICAgICAgICAgICAgICA6IHBhcmVudFZhbDtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZURhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2VEYXRhKGluc3RhbmNlRGF0YSwgZGVmYXVsdERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHREYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cbnN0cmF0cy5kYXRhID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtKSB7XG4gICAgaWYgKCF2bSkge1xuICAgICAgICBpZiAoY2hpbGRWYWwgJiYgdHlwZW9mIGNoaWxkVmFsICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgd2FybignVGhlIFwiZGF0YVwiIG9wdGlvbiBzaG91bGQgYmUgYSBmdW5jdGlvbiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ3RoYXQgcmV0dXJucyBhIHBlci1pbnN0YW5jZSB2YWx1ZSBpbiBjb21wb25lbnQgJyArXG4gICAgICAgICAgICAgICAgICAgICdkZWZpbml0aW9ucy4nLCB2bSk7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50VmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXJnZURhdGFPckZuKHBhcmVudFZhbCwgY2hpbGRWYWwpO1xuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VEYXRhT3JGbihwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSk7XG59O1xuLyoqXG4gKiBIb29rcyBhbmQgcHJvcHMgYXJlIG1lcmdlZCBhcyBhcnJheXMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlTGlmZWN5Y2xlSG9vayhwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gICAgdmFyIHJlcyA9IGNoaWxkVmFsXG4gICAgICAgID8gcGFyZW50VmFsXG4gICAgICAgICAgICA/IHBhcmVudFZhbC5jb25jYXQoY2hpbGRWYWwpXG4gICAgICAgICAgICA6IGlzQXJyYXkoY2hpbGRWYWwpXG4gICAgICAgICAgICAgICAgPyBjaGlsZFZhbFxuICAgICAgICAgICAgICAgIDogW2NoaWxkVmFsXVxuICAgICAgICA6IHBhcmVudFZhbDtcbiAgICByZXR1cm4gcmVzID8gZGVkdXBlSG9va3MocmVzKSA6IHJlcztcbn1cbmZ1bmN0aW9uIGRlZHVwZUhvb2tzKGhvb2tzKSB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJlcy5pbmRleE9mKGhvb2tzW2ldKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKGhvb2tzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuTElGRUNZQ0xFX0hPT0tTLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcbiAgICBzdHJhdHNbaG9va10gPSBtZXJnZUxpZmVjeWNsZUhvb2s7XG59KTtcbi8qKlxuICogQXNzZXRzXG4gKlxuICogV2hlbiBhIHZtIGlzIHByZXNlbnQgKGluc3RhbmNlIGNyZWF0aW9uKSwgd2UgbmVlZCB0byBkb1xuICogYSB0aHJlZS13YXkgbWVyZ2UgYmV0d2VlbiBjb25zdHJ1Y3RvciBvcHRpb25zLCBpbnN0YW5jZVxuICogb3B0aW9ucyBhbmQgcGFyZW50IG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlQXNzZXRzKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtLCBrZXkpIHtcbiAgICB2YXIgcmVzID0gT2JqZWN0LmNyZWF0ZShwYXJlbnRWYWwgfHwgbnVsbCk7XG4gICAgaWYgKGNoaWxkVmFsKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgYXNzZXJ0T2JqZWN0VHlwZShrZXksIGNoaWxkVmFsLCB2bSk7XG4gICAgICAgIHJldHVybiBleHRlbmQocmVzLCBjaGlsZFZhbCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cbkFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzdHJhdHNbdHlwZSArICdzJ10gPSBtZXJnZUFzc2V0cztcbn0pO1xuLyoqXG4gKiBXYXRjaGVycy5cbiAqXG4gKiBXYXRjaGVycyBoYXNoZXMgc2hvdWxkIG5vdCBvdmVyd3JpdGUgb25lXG4gKiBhbm90aGVyLCBzbyB3ZSBtZXJnZSB0aGVtIGFzIGFycmF5cy5cbiAqL1xuc3RyYXRzLndhdGNoID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtLCBrZXkpIHtcbiAgICAvLyB3b3JrIGFyb3VuZCBGaXJlZm94J3MgT2JqZWN0LnByb3RvdHlwZS53YXRjaC4uLlxuICAgIC8vQHRzLWV4cGVjdC1lcnJvciB3b3JrIGFyb3VuZFxuICAgIGlmIChwYXJlbnRWYWwgPT09IG5hdGl2ZVdhdGNoKVxuICAgICAgICBwYXJlbnRWYWwgPSB1bmRlZmluZWQ7XG4gICAgLy9AdHMtZXhwZWN0LWVycm9yIHdvcmsgYXJvdW5kXG4gICAgaWYgKGNoaWxkVmFsID09PSBuYXRpdmVXYXRjaClcbiAgICAgICAgY2hpbGRWYWwgPSB1bmRlZmluZWQ7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFjaGlsZFZhbClcbiAgICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUocGFyZW50VmFsIHx8IG51bGwpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICAgIH1cbiAgICBpZiAoIXBhcmVudFZhbClcbiAgICAgICAgcmV0dXJuIGNoaWxkVmFsO1xuICAgIHZhciByZXQgPSB7fTtcbiAgICBleHRlbmQocmV0LCBwYXJlbnRWYWwpO1xuICAgIGZvciAodmFyIGtleV8xIGluIGNoaWxkVmFsKSB7XG4gICAgICAgIHZhciBwYXJlbnRfMSA9IHJldFtrZXlfMV07XG4gICAgICAgIHZhciBjaGlsZCA9IGNoaWxkVmFsW2tleV8xXTtcbiAgICAgICAgaWYgKHBhcmVudF8xICYmICFpc0FycmF5KHBhcmVudF8xKSkge1xuICAgICAgICAgICAgcGFyZW50XzEgPSBbcGFyZW50XzFdO1xuICAgICAgICB9XG4gICAgICAgIHJldFtrZXlfMV0gPSBwYXJlbnRfMSA/IHBhcmVudF8xLmNvbmNhdChjaGlsZCkgOiBpc0FycmF5KGNoaWxkKSA/IGNoaWxkIDogW2NoaWxkXTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn07XG4vKipcbiAqIE90aGVyIG9iamVjdCBoYXNoZXMuXG4gKi9cbnN0cmF0cy5wcm9wcyA9XG4gICAgc3RyYXRzLm1ldGhvZHMgPVxuICAgICAgICBzdHJhdHMuaW5qZWN0ID1cbiAgICAgICAgICAgIHN0cmF0cy5jb21wdXRlZCA9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtLCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkVmFsICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghcGFyZW50VmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkVmFsO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJldCwgcGFyZW50VmFsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkVmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJldCwgY2hpbGRWYWwpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgICAgIH07XG5zdHJhdHMucHJvdmlkZSA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gICAgaWYgKCFwYXJlbnRWYWwpXG4gICAgICAgIHJldHVybiBjaGlsZFZhbDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgbWVyZ2VEYXRhKHJldCwgaXNGdW5jdGlvbihwYXJlbnRWYWwpID8gcGFyZW50VmFsLmNhbGwodGhpcykgOiBwYXJlbnRWYWwpO1xuICAgICAgICBpZiAoY2hpbGRWYWwpIHtcbiAgICAgICAgICAgIG1lcmdlRGF0YShyZXQsIGlzRnVuY3Rpb24oY2hpbGRWYWwpID8gY2hpbGRWYWwuY2FsbCh0aGlzKSA6IGNoaWxkVmFsLCBmYWxzZSAvLyBub24tcmVjdXJzaXZlXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfTtcbn07XG4vKipcbiAqIERlZmF1bHQgc3RyYXRlZ3kuXG4gKi9cbnZhciBkZWZhdWx0U3RyYXQgPSBmdW5jdGlvbiAocGFyZW50VmFsLCBjaGlsZFZhbCkge1xuICAgIHJldHVybiBjaGlsZFZhbCA9PT0gdW5kZWZpbmVkID8gcGFyZW50VmFsIDogY2hpbGRWYWw7XG59O1xuLyoqXG4gKiBWYWxpZGF0ZSBjb21wb25lbnQgbmFtZXNcbiAqL1xuZnVuY3Rpb24gY2hlY2tDb21wb25lbnRzKG9wdGlvbnMpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucy5jb21wb25lbnRzKSB7XG4gICAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShrZXkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHZhbGlkYXRlQ29tcG9uZW50TmFtZShuYW1lKSB7XG4gICAgaWYgKCFuZXcgUmVnRXhwKFwiXlthLXpBLVpdW1xcXFwtXFxcXC4wLTlfXCIuY29uY2F0KHVuaWNvZGVSZWdFeHAuc291cmNlLCBcIl0qJFwiKSkudGVzdChuYW1lKSkge1xuICAgICAgICB3YXJuKCdJbnZhbGlkIGNvbXBvbmVudCBuYW1lOiBcIicgK1xuICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAnXCIuIENvbXBvbmVudCBuYW1lcyAnICtcbiAgICAgICAgICAgICdzaG91bGQgY29uZm9ybSB0byB2YWxpZCBjdXN0b20gZWxlbWVudCBuYW1lIGluIGh0bWw1IHNwZWNpZmljYXRpb24uJyk7XG4gICAgfVxuICAgIGlmIChpc0J1aWx0SW5UYWcobmFtZSkgfHwgY29uZmlnLmlzUmVzZXJ2ZWRUYWcobmFtZSkpIHtcbiAgICAgICAgd2FybignRG8gbm90IHVzZSBidWlsdC1pbiBvciByZXNlcnZlZCBIVE1MIGVsZW1lbnRzIGFzIGNvbXBvbmVudCAnICtcbiAgICAgICAgICAgICdpZDogJyArXG4gICAgICAgICAgICBuYW1lKTtcbiAgICB9XG59XG4vKipcbiAqIEVuc3VyZSBhbGwgcHJvcHMgb3B0aW9uIHN5bnRheCBhcmUgbm9ybWFsaXplZCBpbnRvIHRoZVxuICogT2JqZWN0LWJhc2VkIGZvcm1hdC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUHJvcHMob3B0aW9ucywgdm0pIHtcbiAgICB2YXIgcHJvcHMgPSBvcHRpb25zLnByb3BzO1xuICAgIGlmICghcHJvcHMpXG4gICAgICAgIHJldHVybjtcbiAgICB2YXIgcmVzID0ge307XG4gICAgdmFyIGksIHZhbCwgbmFtZTtcbiAgICBpZiAoaXNBcnJheShwcm9wcykpIHtcbiAgICAgICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgdmFsID0gcHJvcHNbaV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBuYW1lID0gY2FtZWxpemUodmFsKTtcbiAgICAgICAgICAgICAgICByZXNbbmFtZV0gPSB7IHR5cGU6IG51bGwgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICB3YXJuKCdwcm9wcyBtdXN0IGJlIHN0cmluZ3Mgd2hlbiB1c2luZyBhcnJheSBzeW50YXguJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChwcm9wcykpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICAgICAgICB2YWwgPSBwcm9wc1trZXldO1xuICAgICAgICAgICAgbmFtZSA9IGNhbWVsaXplKGtleSk7XG4gICAgICAgICAgICByZXNbbmFtZV0gPSBpc1BsYWluT2JqZWN0KHZhbCkgPyB2YWwgOiB7IHR5cGU6IHZhbCB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybihcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwicHJvcHNcXFwiOiBleHBlY3RlZCBhbiBBcnJheSBvciBhbiBPYmplY3QsIFwiICtcbiAgICAgICAgICAgIFwiYnV0IGdvdCBcIi5jb25jYXQodG9SYXdUeXBlKHByb3BzKSwgXCIuXCIpLCB2bSk7XG4gICAgfVxuICAgIG9wdGlvbnMucHJvcHMgPSByZXM7XG59XG4vKipcbiAqIE5vcm1hbGl6ZSBhbGwgaW5qZWN0aW9ucyBpbnRvIE9iamVjdC1iYXNlZCBmb3JtYXRcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplSW5qZWN0KG9wdGlvbnMsIHZtKSB7XG4gICAgdmFyIGluamVjdCA9IG9wdGlvbnMuaW5qZWN0O1xuICAgIGlmICghaW5qZWN0KVxuICAgICAgICByZXR1cm47XG4gICAgdmFyIG5vcm1hbGl6ZWQgPSAob3B0aW9ucy5pbmplY3QgPSB7fSk7XG4gICAgaWYgKGlzQXJyYXkoaW5qZWN0KSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluamVjdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbm9ybWFsaXplZFtpbmplY3RbaV1dID0geyBmcm9tOiBpbmplY3RbaV0gfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGluamVjdCkpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGluamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbCA9IGluamVjdFtrZXldO1xuICAgICAgICAgICAgbm9ybWFsaXplZFtrZXldID0gaXNQbGFpbk9iamVjdCh2YWwpXG4gICAgICAgICAgICAgICAgPyBleHRlbmQoeyBmcm9tOiBrZXkgfSwgdmFsKVxuICAgICAgICAgICAgICAgIDogeyBmcm9tOiB2YWwgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcImluamVjdFxcXCI6IGV4cGVjdGVkIGFuIEFycmF5IG9yIGFuIE9iamVjdCwgXCIgK1xuICAgICAgICAgICAgXCJidXQgZ290IFwiLmNvbmNhdCh0b1Jhd1R5cGUoaW5qZWN0KSwgXCIuXCIpLCB2bSk7XG4gICAgfVxufVxuLyoqXG4gKiBOb3JtYWxpemUgcmF3IGZ1bmN0aW9uIGRpcmVjdGl2ZXMgaW50byBvYmplY3QgZm9ybWF0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEaXJlY3RpdmVzJDEob3B0aW9ucykge1xuICAgIHZhciBkaXJzID0gb3B0aW9ucy5kaXJlY3RpdmVzO1xuICAgIGlmIChkaXJzKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBkaXJzKSB7XG4gICAgICAgICAgICB2YXIgZGVmID0gZGlyc1trZXldO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGVmKSkge1xuICAgICAgICAgICAgICAgIGRpcnNba2V5XSA9IHsgYmluZDogZGVmLCB1cGRhdGU6IGRlZiB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0T2JqZWN0VHlwZShuYW1lLCB2YWx1ZSwgdm0pIHtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHdhcm4oXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcIlwiLmNvbmNhdChuYW1lLCBcIlxcXCI6IGV4cGVjdGVkIGFuIE9iamVjdCwgXCIpICtcbiAgICAgICAgICAgIFwiYnV0IGdvdCBcIi5jb25jYXQodG9SYXdUeXBlKHZhbHVlKSwgXCIuXCIpLCB2bSk7XG4gICAgfVxufVxuLyoqXG4gKiBNZXJnZSB0d28gb3B0aW9uIG9iamVjdHMgaW50byBhIG5ldyBvbmUuXG4gKiBDb3JlIHV0aWxpdHkgdXNlZCBpbiBib3RoIGluc3RhbnRpYXRpb24gYW5kIGluaGVyaXRhbmNlLlxuICovXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZCwgdm0pIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjaGVja0NvbXBvbmVudHMoY2hpbGQpO1xuICAgIH1cbiAgICBpZiAoaXNGdW5jdGlvbihjaGlsZCkpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBjaGlsZCA9IGNoaWxkLm9wdGlvbnM7XG4gICAgfVxuICAgIG5vcm1hbGl6ZVByb3BzKGNoaWxkLCB2bSk7XG4gICAgbm9ybWFsaXplSW5qZWN0KGNoaWxkLCB2bSk7XG4gICAgbm9ybWFsaXplRGlyZWN0aXZlcyQxKGNoaWxkKTtcbiAgICAvLyBBcHBseSBleHRlbmRzIGFuZCBtaXhpbnMgb24gdGhlIGNoaWxkIG9wdGlvbnMsXG4gICAgLy8gYnV0IG9ubHkgaWYgaXQgaXMgYSByYXcgb3B0aW9ucyBvYmplY3QgdGhhdCBpc24ndFxuICAgIC8vIHRoZSByZXN1bHQgb2YgYW5vdGhlciBtZXJnZU9wdGlvbnMgY2FsbC5cbiAgICAvLyBPbmx5IG1lcmdlZCBvcHRpb25zIGhhcyB0aGUgX2Jhc2UgcHJvcGVydHkuXG4gICAgaWYgKCFjaGlsZC5fYmFzZSkge1xuICAgICAgICBpZiAoY2hpbGQuZXh0ZW5kcykge1xuICAgICAgICAgICAgcGFyZW50ID0gbWVyZ2VPcHRpb25zKHBhcmVudCwgY2hpbGQuZXh0ZW5kcywgdm0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGlsZC5taXhpbnMpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGQubWl4aW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLm1peGluc1tpXSwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBvcHRpb25zID0ge307XG4gICAgdmFyIGtleTtcbiAgICBmb3IgKGtleSBpbiBwYXJlbnQpIHtcbiAgICAgICAgbWVyZ2VGaWVsZChrZXkpO1xuICAgIH1cbiAgICBmb3IgKGtleSBpbiBjaGlsZCkge1xuICAgICAgICBpZiAoIWhhc093bihwYXJlbnQsIGtleSkpIHtcbiAgICAgICAgICAgIG1lcmdlRmllbGQoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBtZXJnZUZpZWxkKGtleSkge1xuICAgICAgICB2YXIgc3RyYXQgPSBzdHJhdHNba2V5XSB8fCBkZWZhdWx0U3RyYXQ7XG4gICAgICAgIG9wdGlvbnNba2V5XSA9IHN0cmF0KHBhcmVudFtrZXldLCBjaGlsZFtrZXldLCB2bSwga2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG59XG4vKipcbiAqIFJlc29sdmUgYW4gYXNzZXQuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYmVjYXVzZSBjaGlsZCBpbnN0YW5jZXMgbmVlZCBhY2Nlc3NcbiAqIHRvIGFzc2V0cyBkZWZpbmVkIGluIGl0cyBhbmNlc3RvciBjaGFpbi5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUFzc2V0KG9wdGlvbnMsIHR5cGUsIGlkLCB3YXJuTWlzc2luZykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0eXBlb2YgaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGFzc2V0cyA9IG9wdGlvbnNbdHlwZV07XG4gICAgLy8gY2hlY2sgbG9jYWwgcmVnaXN0cmF0aW9uIHZhcmlhdGlvbnMgZmlyc3RcbiAgICBpZiAoaGFzT3duKGFzc2V0cywgaWQpKVxuICAgICAgICByZXR1cm4gYXNzZXRzW2lkXTtcbiAgICB2YXIgY2FtZWxpemVkSWQgPSBjYW1lbGl6ZShpZCk7XG4gICAgaWYgKGhhc093bihhc3NldHMsIGNhbWVsaXplZElkKSlcbiAgICAgICAgcmV0dXJuIGFzc2V0c1tjYW1lbGl6ZWRJZF07XG4gICAgdmFyIFBhc2NhbENhc2VJZCA9IGNhcGl0YWxpemUoY2FtZWxpemVkSWQpO1xuICAgIGlmIChoYXNPd24oYXNzZXRzLCBQYXNjYWxDYXNlSWQpKVxuICAgICAgICByZXR1cm4gYXNzZXRzW1Bhc2NhbENhc2VJZF07XG4gICAgLy8gZmFsbGJhY2sgdG8gcHJvdG90eXBlIGNoYWluXG4gICAgdmFyIHJlcyA9IGFzc2V0c1tpZF0gfHwgYXNzZXRzW2NhbWVsaXplZElkXSB8fCBhc3NldHNbUGFzY2FsQ2FzZUlkXTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuTWlzc2luZyAmJiAhcmVzKSB7XG4gICAgICAgIHdhcm4oJ0ZhaWxlZCB0byByZXNvbHZlICcgKyB0eXBlLnNsaWNlKDAsIC0xKSArICc6ICcgKyBpZCk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcChrZXksIHByb3BPcHRpb25zLCBwcm9wc0RhdGEsIHZtKSB7XG4gICAgdmFyIHByb3AgPSBwcm9wT3B0aW9uc1trZXldO1xuICAgIHZhciBhYnNlbnQgPSAhaGFzT3duKHByb3BzRGF0YSwga2V5KTtcbiAgICB2YXIgdmFsdWUgPSBwcm9wc0RhdGFba2V5XTtcbiAgICAvLyBib29sZWFuIGNhc3RpbmdcbiAgICB2YXIgYm9vbGVhbkluZGV4ID0gZ2V0VHlwZUluZGV4KEJvb2xlYW4sIHByb3AudHlwZSk7XG4gICAgaWYgKGJvb2xlYW5JbmRleCA+IC0xKSB7XG4gICAgICAgIGlmIChhYnNlbnQgJiYgIWhhc093bihwcm9wLCAnZGVmYXVsdCcpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gaHlwaGVuYXRlKGtleSkpIHtcbiAgICAgICAgICAgIC8vIG9ubHkgY2FzdCBlbXB0eSBzdHJpbmcgLyBzYW1lIG5hbWUgdG8gYm9vbGVhbiBpZlxuICAgICAgICAgICAgLy8gYm9vbGVhbiBoYXMgaGlnaGVyIHByaW9yaXR5XG4gICAgICAgICAgICB2YXIgc3RyaW5nSW5kZXggPSBnZXRUeXBlSW5kZXgoU3RyaW5nLCBwcm9wLnR5cGUpO1xuICAgICAgICAgICAgaWYgKHN0cmluZ0luZGV4IDwgMCB8fCBib29sZWFuSW5kZXggPCBzdHJpbmdJbmRleCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBjaGVjayBkZWZhdWx0IHZhbHVlXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFsdWUgPSBnZXRQcm9wRGVmYXVsdFZhbHVlKHZtLCBwcm9wLCBrZXkpO1xuICAgICAgICAvLyBzaW5jZSB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBhIGZyZXNoIGNvcHksXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0byBvYnNlcnZlIGl0LlxuICAgICAgICB2YXIgcHJldlNob3VsZE9ic2VydmUgPSBzaG91bGRPYnNlcnZlO1xuICAgICAgICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XG4gICAgICAgIG9ic2VydmUodmFsdWUpO1xuICAgICAgICB0b2dnbGVPYnNlcnZpbmcocHJldlNob3VsZE9ic2VydmUpO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBhc3NlcnRQcm9wKHByb3AsIGtleSwgdmFsdWUsIHZtLCBhYnNlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhIHByb3AuXG4gKi9cbmZ1bmN0aW9uIGdldFByb3BEZWZhdWx0VmFsdWUodm0sIHByb3AsIGtleSkge1xuICAgIC8vIG5vIGRlZmF1bHQsIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAoIWhhc093bihwcm9wLCAnZGVmYXVsdCcpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBkZWYgPSBwcm9wLmRlZmF1bHQ7XG4gICAgLy8gd2FybiBhZ2FpbnN0IG5vbi1mYWN0b3J5IGRlZmF1bHRzIGZvciBPYmplY3QgJiBBcnJheVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGlzT2JqZWN0KGRlZikpIHtcbiAgICAgICAgd2FybignSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBwcm9wIFwiJyArXG4gICAgICAgICAgICBrZXkgK1xuICAgICAgICAgICAgJ1wiOiAnICtcbiAgICAgICAgICAgICdQcm9wcyB3aXRoIHR5cGUgT2JqZWN0L0FycmF5IG11c3QgdXNlIGEgZmFjdG9yeSBmdW5jdGlvbiAnICtcbiAgICAgICAgICAgICd0byByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUuJywgdm0pO1xuICAgIH1cbiAgICAvLyB0aGUgcmF3IHByb3AgdmFsdWUgd2FzIGFsc28gdW5kZWZpbmVkIGZyb20gcHJldmlvdXMgcmVuZGVyLFxuICAgIC8vIHJldHVybiBwcmV2aW91cyBkZWZhdWx0IHZhbHVlIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHdhdGNoZXIgdHJpZ2dlclxuICAgIGlmICh2bSAmJlxuICAgICAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgJiZcbiAgICAgICAgdm0uJG9wdGlvbnMucHJvcHNEYXRhW2tleV0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB2bS5fcHJvcHNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB2bS5fcHJvcHNba2V5XTtcbiAgICB9XG4gICAgLy8gY2FsbCBmYWN0b3J5IGZ1bmN0aW9uIGZvciBub24tRnVuY3Rpb24gdHlwZXNcbiAgICAvLyBhIHZhbHVlIGlzIEZ1bmN0aW9uIGlmIGl0cyBwcm90b3R5cGUgaXMgZnVuY3Rpb24gZXZlbiBhY3Jvc3MgZGlmZmVyZW50IGV4ZWN1dGlvbiBjb250ZXh0XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oZGVmKSAmJiBnZXRUeXBlKHByb3AudHlwZSkgIT09ICdGdW5jdGlvbidcbiAgICAgICAgPyBkZWYuY2FsbCh2bSlcbiAgICAgICAgOiBkZWY7XG59XG4vKipcbiAqIEFzc2VydCB3aGV0aGVyIGEgcHJvcCBpcyB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0UHJvcChwcm9wLCBuYW1lLCB2YWx1ZSwgdm0sIGFic2VudCkge1xuICAgIGlmIChwcm9wLnJlcXVpcmVkICYmIGFic2VudCkge1xuICAgICAgICB3YXJuKCdNaXNzaW5nIHJlcXVpcmVkIHByb3A6IFwiJyArIG5hbWUgKyAnXCInLCB2bSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09IG51bGwgJiYgIXByb3AucmVxdWlyZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdHlwZSA9IHByb3AudHlwZTtcbiAgICB2YXIgdmFsaWQgPSAhdHlwZSB8fCB0eXBlID09PSB0cnVlO1xuICAgIHZhciBleHBlY3RlZFR5cGVzID0gW107XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgICAgaWYgKCFpc0FycmF5KHR5cGUpKSB7XG4gICAgICAgICAgICB0eXBlID0gW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZS5sZW5ndGggJiYgIXZhbGlkOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBhc3NlcnRlZFR5cGUgPSBhc3NlcnRUeXBlKHZhbHVlLCB0eXBlW2ldLCB2bSk7XG4gICAgICAgICAgICBleHBlY3RlZFR5cGVzLnB1c2goYXNzZXJ0ZWRUeXBlLmV4cGVjdGVkVHlwZSB8fCAnJyk7XG4gICAgICAgICAgICB2YWxpZCA9IGFzc2VydGVkVHlwZS52YWxpZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgaGF2ZUV4cGVjdGVkVHlwZXMgPSBleHBlY3RlZFR5cGVzLnNvbWUoZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQ7IH0pO1xuICAgIGlmICghdmFsaWQgJiYgaGF2ZUV4cGVjdGVkVHlwZXMpIHtcbiAgICAgICAgd2FybihnZXRJbnZhbGlkVHlwZU1lc3NhZ2UobmFtZSwgdmFsdWUsIGV4cGVjdGVkVHlwZXMpLCB2bSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHZhbGlkYXRvciA9IHByb3AudmFsaWRhdG9yO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgICAgaWYgKCF2YWxpZGF0b3IodmFsdWUpKSB7XG4gICAgICAgICAgICB3YXJuKCdJbnZhbGlkIHByb3A6IGN1c3RvbSB2YWxpZGF0b3IgY2hlY2sgZmFpbGVkIGZvciBwcm9wIFwiJyArIG5hbWUgKyAnXCIuJywgdm0pO1xuICAgICAgICB9XG4gICAgfVxufVxudmFyIHNpbXBsZUNoZWNrUkUgPSAvXihTdHJpbmd8TnVtYmVyfEJvb2xlYW58RnVuY3Rpb258U3ltYm9sfEJpZ0ludCkkLztcbmZ1bmN0aW9uIGFzc2VydFR5cGUodmFsdWUsIHR5cGUsIHZtKSB7XG4gICAgdmFyIHZhbGlkO1xuICAgIHZhciBleHBlY3RlZFR5cGUgPSBnZXRUeXBlKHR5cGUpO1xuICAgIGlmIChzaW1wbGVDaGVja1JFLnRlc3QoZXhwZWN0ZWRUeXBlKSkge1xuICAgICAgICB2YXIgdCA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgICAgdmFsaWQgPSB0ID09PSBleHBlY3RlZFR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgLy8gZm9yIHByaW1pdGl2ZSB3cmFwcGVyIG9iamVjdHNcbiAgICAgICAgaWYgKCF2YWxpZCAmJiB0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnT2JqZWN0Jykge1xuICAgICAgICB2YWxpZCA9IGlzUGxhaW5PYmplY3QodmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09ICdBcnJheScpIHtcbiAgICAgICAgdmFsaWQgPSBpc0FycmF5KHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YWxpZCA9IHZhbHVlIGluc3RhbmNlb2YgdHlwZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgd2FybignSW52YWxpZCBwcm9wIHR5cGU6IFwiJyArIFN0cmluZyh0eXBlKSArICdcIiBpcyBub3QgYSBjb25zdHJ1Y3RvcicsIHZtKTtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IHZhbGlkLFxuICAgICAgICBleHBlY3RlZFR5cGU6IGV4cGVjdGVkVHlwZVxuICAgIH07XG59XG52YXIgZnVuY3Rpb25UeXBlQ2hlY2tSRSA9IC9eXFxzKmZ1bmN0aW9uIChcXHcrKS87XG4vKipcbiAqIFVzZSBmdW5jdGlvbiBzdHJpbmcgbmFtZSB0byBjaGVjayBidWlsdC1pbiB0eXBlcyxcbiAqIGJlY2F1c2UgYSBzaW1wbGUgZXF1YWxpdHkgY2hlY2sgd2lsbCBmYWlsIHdoZW4gcnVubmluZ1xuICogYWNyb3NzIGRpZmZlcmVudCB2bXMgLyBpZnJhbWVzLlxuICovXG5mdW5jdGlvbiBnZXRUeXBlKGZuKSB7XG4gICAgdmFyIG1hdGNoID0gZm4gJiYgZm4udG9TdHJpbmcoKS5tYXRjaChmdW5jdGlvblR5cGVDaGVja1JFKTtcbiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6ICcnO1xufVxuZnVuY3Rpb24gaXNTYW1lVHlwZShhLCBiKSB7XG4gICAgcmV0dXJuIGdldFR5cGUoYSkgPT09IGdldFR5cGUoYik7XG59XG5mdW5jdGlvbiBnZXRUeXBlSW5kZXgodHlwZSwgZXhwZWN0ZWRUeXBlcykge1xuICAgIGlmICghaXNBcnJheShleHBlY3RlZFR5cGVzKSkge1xuICAgICAgICByZXR1cm4gaXNTYW1lVHlwZShleHBlY3RlZFR5cGVzLCB0eXBlKSA/IDAgOiAtMTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGV4cGVjdGVkVHlwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKGlzU2FtZVR5cGUoZXhwZWN0ZWRUeXBlc1tpXSwgdHlwZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbn1cbmZ1bmN0aW9uIGdldEludmFsaWRUeXBlTWVzc2FnZShuYW1lLCB2YWx1ZSwgZXhwZWN0ZWRUeXBlcykge1xuICAgIHZhciBtZXNzYWdlID0gXCJJbnZhbGlkIHByb3A6IHR5cGUgY2hlY2sgZmFpbGVkIGZvciBwcm9wIFxcXCJcIi5jb25jYXQobmFtZSwgXCJcXFwiLlwiKSArXG4gICAgICAgIFwiIEV4cGVjdGVkIFwiLmNvbmNhdChleHBlY3RlZFR5cGVzLm1hcChjYXBpdGFsaXplKS5qb2luKCcsICcpKTtcbiAgICB2YXIgZXhwZWN0ZWRUeXBlID0gZXhwZWN0ZWRUeXBlc1swXTtcbiAgICB2YXIgcmVjZWl2ZWRUeXBlID0gdG9SYXdUeXBlKHZhbHVlKTtcbiAgICAvLyBjaGVjayBpZiB3ZSBuZWVkIHRvIHNwZWNpZnkgZXhwZWN0ZWQgdmFsdWVcbiAgICBpZiAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgaXNFeHBsaWNhYmxlKGV4cGVjdGVkVHlwZSkgJiZcbiAgICAgICAgaXNFeHBsaWNhYmxlKHR5cGVvZiB2YWx1ZSkgJiZcbiAgICAgICAgIWlzQm9vbGVhbihleHBlY3RlZFR5cGUsIHJlY2VpdmVkVHlwZSkpIHtcbiAgICAgICAgbWVzc2FnZSArPSBcIiB3aXRoIHZhbHVlIFwiLmNvbmNhdChzdHlsZVZhbHVlKHZhbHVlLCBleHBlY3RlZFR5cGUpKTtcbiAgICB9XG4gICAgbWVzc2FnZSArPSBcIiwgZ290IFwiLmNvbmNhdChyZWNlaXZlZFR5cGUsIFwiIFwiKTtcbiAgICAvLyBjaGVjayBpZiB3ZSBuZWVkIHRvIHNwZWNpZnkgcmVjZWl2ZWQgdmFsdWVcbiAgICBpZiAoaXNFeHBsaWNhYmxlKHJlY2VpdmVkVHlwZSkpIHtcbiAgICAgICAgbWVzc2FnZSArPSBcIndpdGggdmFsdWUgXCIuY29uY2F0KHN0eWxlVmFsdWUodmFsdWUsIHJlY2VpdmVkVHlwZSksIFwiLlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG59XG5mdW5jdGlvbiBzdHlsZVZhbHVlKHZhbHVlLCB0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdTdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBcIlxcXCJcIi5jb25jYXQodmFsdWUsIFwiXFxcIlwiKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ051bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KE51bWJlcih2YWx1ZSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHZhbHVlKTtcbiAgICB9XG59XG52YXIgRVhQTElDQUJMRV9UWVBFUyA9IFsnc3RyaW5nJywgJ251bWJlcicsICdib29sZWFuJ107XG5mdW5jdGlvbiBpc0V4cGxpY2FibGUodmFsdWUpIHtcbiAgICByZXR1cm4gRVhQTElDQUJMRV9UWVBFUy5zb21lKGZ1bmN0aW9uIChlbGVtKSB7IHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBlbGVtOyB9KTtcbn1cbmZ1bmN0aW9uIGlzQm9vbGVhbigpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3Muc29tZShmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gZWxlbS50b0xvd2VyQ2FzZSgpID09PSAnYm9vbGVhbic7IH0pO1xufVxuXG4vKiBub3QgdHlwZSBjaGVja2luZyB0aGlzIGZpbGUgYmVjYXVzZSBmbG93IGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGggUHJveHkgKi9cbnZhciBpbml0UHJveHk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZhciBhbGxvd2VkR2xvYmFsc18xID0gbWFrZU1hcCgnSW5maW5pdHksdW5kZWZpbmVkLE5hTixpc0Zpbml0ZSxpc05hTiwnICtcbiAgICAgICAgJ3BhcnNlRmxvYXQscGFyc2VJbnQsZGVjb2RlVVJJLGRlY29kZVVSSUNvbXBvbmVudCxlbmNvZGVVUkksZW5jb2RlVVJJQ29tcG9uZW50LCcgK1xuICAgICAgICAnTWF0aCxOdW1iZXIsRGF0ZSxBcnJheSxPYmplY3QsQm9vbGVhbixTdHJpbmcsUmVnRXhwLE1hcCxTZXQsSlNPTixJbnRsLEJpZ0ludCwnICtcbiAgICAgICAgJ3JlcXVpcmUnIC8vIGZvciBXZWJwYWNrL0Jyb3dzZXJpZnlcbiAgICApO1xuICAgIHZhciB3YXJuTm9uUHJlc2VudF8xID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgICAgIHdhcm4oXCJQcm9wZXJ0eSBvciBtZXRob2QgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBpcyBub3QgZGVmaW5lZCBvbiB0aGUgaW5zdGFuY2UgYnV0IFwiKSArXG4gICAgICAgICAgICAncmVmZXJlbmNlZCBkdXJpbmcgcmVuZGVyLiBNYWtlIHN1cmUgdGhhdCB0aGlzIHByb3BlcnR5IGlzIHJlYWN0aXZlLCAnICtcbiAgICAgICAgICAgICdlaXRoZXIgaW4gdGhlIGRhdGEgb3B0aW9uLCBvciBmb3IgY2xhc3MtYmFzZWQgY29tcG9uZW50cywgYnkgJyArXG4gICAgICAgICAgICAnaW5pdGlhbGl6aW5nIHRoZSBwcm9wZXJ0eS4gJyArXG4gICAgICAgICAgICAnU2VlOiBodHRwczovL3YyLnZ1ZWpzLm9yZy92Mi9ndWlkZS9yZWFjdGl2aXR5Lmh0bWwjRGVjbGFyaW5nLVJlYWN0aXZlLVByb3BlcnRpZXMuJywgdGFyZ2V0KTtcbiAgICB9O1xuICAgIHZhciB3YXJuUmVzZXJ2ZWRQcmVmaXhfMSA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICB3YXJuKFwiUHJvcGVydHkgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBtdXN0IGJlIGFjY2Vzc2VkIHdpdGggXFxcIiRkYXRhLlwiKS5jb25jYXQoa2V5LCBcIlxcXCIgYmVjYXVzZSBcIikgK1xuICAgICAgICAgICAgJ3Byb3BlcnRpZXMgc3RhcnRpbmcgd2l0aCBcIiRcIiBvciBcIl9cIiBhcmUgbm90IHByb3hpZWQgaW4gdGhlIFZ1ZSBpbnN0YW5jZSB0byAnICtcbiAgICAgICAgICAgICdwcmV2ZW50IGNvbmZsaWN0cyB3aXRoIFZ1ZSBpbnRlcm5hbHMuICcgK1xuICAgICAgICAgICAgJ1NlZTogaHR0cHM6Ly92Mi52dWVqcy5vcmcvdjIvYXBpLyNkYXRhJywgdGFyZ2V0KTtcbiAgICB9O1xuICAgIHZhciBoYXNQcm94eV8xID0gdHlwZW9mIFByb3h5ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShQcm94eSk7XG4gICAgaWYgKGhhc1Byb3h5XzEpIHtcbiAgICAgICAgdmFyIGlzQnVpbHRJbk1vZGlmaWVyXzEgPSBtYWtlTWFwKCdzdG9wLHByZXZlbnQsc2VsZixjdHJsLHNoaWZ0LGFsdCxtZXRhLGV4YWN0Jyk7XG4gICAgICAgIGNvbmZpZy5rZXlDb2RlcyA9IG5ldyBQcm94eShjb25maWcua2V5Q29kZXMsIHtcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHRhcmdldCwga2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChpc0J1aWx0SW5Nb2RpZmllcl8xKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgd2FybihcIkF2b2lkIG92ZXJ3cml0aW5nIGJ1aWx0LWluIG1vZGlmaWVyIGluIGNvbmZpZy5rZXlDb2RlczogLlwiLmNvbmNhdChrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdmFyIGhhc0hhbmRsZXJfMSA9IHtcbiAgICAgICAgaGFzOiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICAgICAgICAgIHZhciBoYXMgPSBrZXkgaW4gdGFyZ2V0O1xuICAgICAgICAgICAgdmFyIGlzQWxsb3dlZCA9IGFsbG93ZWRHbG9iYWxzXzEoa2V5KSB8fFxuICAgICAgICAgICAgICAgICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICBrZXkuY2hhckF0KDApID09PSAnXycgJiZcbiAgICAgICAgICAgICAgICAgICAgIShrZXkgaW4gdGFyZ2V0LiRkYXRhKSk7XG4gICAgICAgICAgICBpZiAoIWhhcyAmJiAhaXNBbGxvd2VkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSBpbiB0YXJnZXQuJGRhdGEpXG4gICAgICAgICAgICAgICAgICAgIHdhcm5SZXNlcnZlZFByZWZpeF8xKHRhcmdldCwga2V5KTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHdhcm5Ob25QcmVzZW50XzEodGFyZ2V0LCBrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhcyB8fCAhaXNBbGxvd2VkO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgZ2V0SGFuZGxlcl8xID0ge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmICEoa2V5IGluIHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5IGluIHRhcmdldC4kZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgd2FyblJlc2VydmVkUHJlZml4XzEodGFyZ2V0LCBrZXkpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgd2Fybk5vblByZXNlbnRfMSh0YXJnZXQsIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0W2tleV07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGluaXRQcm94eSA9IGZ1bmN0aW9uIGluaXRQcm94eSh2bSkge1xuICAgICAgICBpZiAoaGFzUHJveHlfMSkge1xuICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHdoaWNoIHByb3h5IGhhbmRsZXIgdG8gdXNlXG4gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICAgICAgICAgICAgdmFyIGhhbmRsZXJzID0gb3B0aW9ucy5yZW5kZXIgJiYgb3B0aW9ucy5yZW5kZXIuX3dpdGhTdHJpcHBlZCA/IGdldEhhbmRsZXJfMSA6IGhhc0hhbmRsZXJfMTtcbiAgICAgICAgICAgIHZtLl9yZW5kZXJQcm94eSA9IG5ldyBQcm94eSh2bSwgaGFuZGxlcnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdm0uX3JlbmRlclByb3h5ID0gdm07XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG52YXIgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uID0ge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogbm9vcCxcbiAgICBzZXQ6IG5vb3Bcbn07XG5mdW5jdGlvbiBwcm94eSh0YXJnZXQsIHNvdXJjZUtleSwga2V5KSB7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IGZ1bmN0aW9uIHByb3h5R2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tzb3VyY2VLZXldW2tleV07XG4gICAgfTtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gZnVuY3Rpb24gcHJveHlTZXR0ZXIodmFsKSB7XG4gICAgICAgIHRoaXNbc291cmNlS2V5XVtrZXldID0gdmFsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24pO1xufVxuZnVuY3Rpb24gaW5pdFN0YXRlKHZtKSB7XG4gICAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucztcbiAgICBpZiAob3B0cy5wcm9wcylcbiAgICAgICAgaW5pdFByb3BzJDEodm0sIG9wdHMucHJvcHMpO1xuICAgIC8vIENvbXBvc2l0aW9uIEFQSVxuICAgIGluaXRTZXR1cCh2bSk7XG4gICAgaWYgKG9wdHMubWV0aG9kcylcbiAgICAgICAgaW5pdE1ldGhvZHModm0sIG9wdHMubWV0aG9kcyk7XG4gICAgaWYgKG9wdHMuZGF0YSkge1xuICAgICAgICBpbml0RGF0YSh2bSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgb2IgPSBvYnNlcnZlKCh2bS5fZGF0YSA9IHt9KSk7XG4gICAgICAgIG9iICYmIG9iLnZtQ291bnQrKztcbiAgICB9XG4gICAgaWYgKG9wdHMuY29tcHV0ZWQpXG4gICAgICAgIGluaXRDb21wdXRlZCQxKHZtLCBvcHRzLmNvbXB1dGVkKTtcbiAgICBpZiAob3B0cy53YXRjaCAmJiBvcHRzLndhdGNoICE9PSBuYXRpdmVXYXRjaCkge1xuICAgICAgICBpbml0V2F0Y2godm0sIG9wdHMud2F0Y2gpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGluaXRQcm9wcyQxKHZtLCBwcm9wc09wdGlvbnMpIHtcbiAgICB2YXIgcHJvcHNEYXRhID0gdm0uJG9wdGlvbnMucHJvcHNEYXRhIHx8IHt9O1xuICAgIHZhciBwcm9wcyA9ICh2bS5fcHJvcHMgPSBzaGFsbG93UmVhY3RpdmUoe30pKTtcbiAgICAvLyBjYWNoZSBwcm9wIGtleXMgc28gdGhhdCBmdXR1cmUgcHJvcHMgdXBkYXRlcyBjYW4gaXRlcmF0ZSB1c2luZyBBcnJheVxuICAgIC8vIGluc3RlYWQgb2YgZHluYW1pYyBvYmplY3Qga2V5IGVudW1lcmF0aW9uLlxuICAgIHZhciBrZXlzID0gKHZtLiRvcHRpb25zLl9wcm9wS2V5cyA9IFtdKTtcbiAgICB2YXIgaXNSb290ID0gIXZtLiRwYXJlbnQ7XG4gICAgLy8gcm9vdCBpbnN0YW5jZSBwcm9wcyBzaG91bGQgYmUgY29udmVydGVkXG4gICAgaWYgKCFpc1Jvb3QpIHtcbiAgICAgICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgICB9XG4gICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICB2YXIgdmFsdWUgPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wc09wdGlvbnMsIHByb3BzRGF0YSwgdm0pO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGh5cGhlbmF0ZWRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChpc1Jlc2VydmVkQXR0cmlidXRlKGh5cGhlbmF0ZWRLZXkpIHx8XG4gICAgICAgICAgICAgICAgY29uZmlnLmlzUmVzZXJ2ZWRBdHRyKGh5cGhlbmF0ZWRLZXkpKSB7XG4gICAgICAgICAgICAgICAgd2FybihcIlxcXCJcIi5jb25jYXQoaHlwaGVuYXRlZEtleSwgXCJcXFwiIGlzIGEgcmVzZXJ2ZWQgYXR0cmlidXRlIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBjb21wb25lbnQgcHJvcC5cIiksIHZtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmluZVJlYWN0aXZlKHByb3BzLCBrZXksIHZhbHVlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1Jvb3QgJiYgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICB3YXJuKFwiQXZvaWQgbXV0YXRpbmcgYSBwcm9wIGRpcmVjdGx5IHNpbmNlIHRoZSB2YWx1ZSB3aWxsIGJlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwib3ZlcndyaXR0ZW4gd2hlbmV2ZXIgdGhlIHBhcmVudCBjb21wb25lbnQgcmUtcmVuZGVycy4gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJJbnN0ZWFkLCB1c2UgYSBkYXRhIG9yIGNvbXB1dGVkIHByb3BlcnR5IGJhc2VkIG9uIHRoZSBwcm9wJ3MgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJ2YWx1ZS4gUHJvcCBiZWluZyBtdXRhdGVkOiBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiXCIpLCB2bSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdHJ1ZSAvKiBzaGFsbG93ICovKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlZmluZVJlYWN0aXZlKHByb3BzLCBrZXksIHZhbHVlLCB1bmRlZmluZWQsIHRydWUgLyogc2hhbGxvdyAqLyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc3RhdGljIHByb3BzIGFyZSBhbHJlYWR5IHByb3hpZWQgb24gdGhlIGNvbXBvbmVudCdzIHByb3RvdHlwZVxuICAgICAgICAvLyBkdXJpbmcgVnVlLmV4dGVuZCgpLiBXZSBvbmx5IG5lZWQgdG8gcHJveHkgcHJvcHMgZGVmaW5lZCBhdFxuICAgICAgICAvLyBpbnN0YW50aWF0aW9uIGhlcmUuXG4gICAgICAgIGlmICghKGtleSBpbiB2bSkpIHtcbiAgICAgICAgICAgIHByb3h5KHZtLCBcIl9wcm9wc1wiLCBrZXkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHNPcHRpb25zKSB7XG4gICAgICAgIF9sb29wXzEoa2V5KTtcbiAgICB9XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xufVxuZnVuY3Rpb24gaW5pdERhdGEodm0pIHtcbiAgICB2YXIgZGF0YSA9IHZtLiRvcHRpb25zLmRhdGE7XG4gICAgZGF0YSA9IHZtLl9kYXRhID0gaXNGdW5jdGlvbihkYXRhKSA/IGdldERhdGEoZGF0YSwgdm0pIDogZGF0YSB8fCB7fTtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoZGF0YSkpIHtcbiAgICAgICAgZGF0YSA9IHt9O1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICB3YXJuKCdkYXRhIGZ1bmN0aW9ucyBzaG91bGQgcmV0dXJuIGFuIG9iamVjdDpcXG4nICtcbiAgICAgICAgICAgICAgICAnaHR0cHM6Ly92Mi52dWVqcy5vcmcvdjIvZ3VpZGUvY29tcG9uZW50cy5odG1sI2RhdGEtTXVzdC1CZS1hLUZ1bmN0aW9uJywgdm0pO1xuICAgIH1cbiAgICAvLyBwcm94eSBkYXRhIG9uIGluc3RhbmNlXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgICB2YXIgcHJvcHMgPSB2bS4kb3B0aW9ucy5wcm9wcztcbiAgICB2YXIgbWV0aG9kcyA9IHZtLiRvcHRpb25zLm1ldGhvZHM7XG4gICAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgaWYgKG1ldGhvZHMgJiYgaGFzT3duKG1ldGhvZHMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICB3YXJuKFwiTWV0aG9kIFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkIGFzIGEgZGF0YSBwcm9wZXJ0eS5cIiksIHZtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMgJiYgaGFzT3duKHByb3BzLCBrZXkpKSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgd2FybihcIlRoZSBkYXRhIHByb3BlcnR5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgaXMgYWxyZWFkeSBkZWNsYXJlZCBhcyBhIHByb3AuIFwiKSArXG4gICAgICAgICAgICAgICAgICAgIFwiVXNlIHByb3AgZGVmYXVsdCB2YWx1ZSBpbnN0ZWFkLlwiLCB2bSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWlzUmVzZXJ2ZWQoa2V5KSkge1xuICAgICAgICAgICAgcHJveHkodm0sIFwiX2RhdGFcIiwga2V5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBvYnNlcnZlIGRhdGFcbiAgICB2YXIgb2IgPSBvYnNlcnZlKGRhdGEpO1xuICAgIG9iICYmIG9iLnZtQ291bnQrKztcbn1cbmZ1bmN0aW9uIGdldERhdGEoZGF0YSwgdm0pIHtcbiAgICAvLyAjNzU3MyBkaXNhYmxlIGRlcCBjb2xsZWN0aW9uIHdoZW4gaW52b2tpbmcgZGF0YSBnZXR0ZXJzXG4gICAgcHVzaFRhcmdldCgpO1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkYXRhLmNhbGwodm0sIHZtKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIFwiZGF0YSgpXCIpO1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICBwb3BUYXJnZXQoKTtcbiAgICB9XG59XG52YXIgY29tcHV0ZWRXYXRjaGVyT3B0aW9ucyA9IHsgbGF6eTogdHJ1ZSB9O1xuZnVuY3Rpb24gaW5pdENvbXB1dGVkJDEodm0sIGNvbXB1dGVkKSB7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgdmFyIHdhdGNoZXJzID0gKHZtLl9jb21wdXRlZFdhdGNoZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gICAgLy8gY29tcHV0ZWQgcHJvcGVydGllcyBhcmUganVzdCBnZXR0ZXJzIGR1cmluZyBTU1JcbiAgICB2YXIgaXNTU1IgPSBpc1NlcnZlclJlbmRlcmluZygpO1xuICAgIGZvciAodmFyIGtleSBpbiBjb21wdXRlZCkge1xuICAgICAgICB2YXIgdXNlckRlZiA9IGNvbXB1dGVkW2tleV07XG4gICAgICAgIHZhciBnZXR0ZXIgPSBpc0Z1bmN0aW9uKHVzZXJEZWYpID8gdXNlckRlZiA6IHVzZXJEZWYuZ2V0O1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBnZXR0ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgd2FybihcIkdldHRlciBpcyBtaXNzaW5nIGZvciBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiLlwiKSwgdm0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNTU1IpIHtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBpbnRlcm5hbCB3YXRjaGVyIGZvciB0aGUgY29tcHV0ZWQgcHJvcGVydHkuXG4gICAgICAgICAgICB3YXRjaGVyc1trZXldID0gbmV3IFdhdGNoZXIodm0sIGdldHRlciB8fCBub29wLCBub29wLCBjb21wdXRlZFdhdGNoZXJPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb21wb25lbnQtZGVmaW5lZCBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBhbHJlYWR5IGRlZmluZWQgb24gdGhlXG4gICAgICAgIC8vIGNvbXBvbmVudCBwcm90b3R5cGUuIFdlIG9ubHkgbmVlZCB0byBkZWZpbmUgY29tcHV0ZWQgcHJvcGVydGllcyBkZWZpbmVkXG4gICAgICAgIC8vIGF0IGluc3RhbnRpYXRpb24gaGVyZS5cbiAgICAgICAgaWYgKCEoa2V5IGluIHZtKSkge1xuICAgICAgICAgICAgZGVmaW5lQ29tcHV0ZWQodm0sIGtleSwgdXNlckRlZik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgaWYgKGtleSBpbiB2bS4kZGF0YSkge1xuICAgICAgICAgICAgICAgIHdhcm4oXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBpcyBhbHJlYWR5IGRlZmluZWQgaW4gZGF0YS5cIiksIHZtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHZtLiRvcHRpb25zLnByb3BzICYmIGtleSBpbiB2bS4kb3B0aW9ucy5wcm9wcykge1xuICAgICAgICAgICAgICAgIHdhcm4oXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSBwcm9wLlwiKSwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodm0uJG9wdGlvbnMubWV0aG9kcyAmJiBrZXkgaW4gdm0uJG9wdGlvbnMubWV0aG9kcykge1xuICAgICAgICAgICAgICAgIHdhcm4oXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSBtZXRob2QuXCIpLCB2bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBkZWZpbmVDb21wdXRlZCh0YXJnZXQsIGtleSwgdXNlckRlZikge1xuICAgIHZhciBzaG91bGRDYWNoZSA9ICFpc1NlcnZlclJlbmRlcmluZygpO1xuICAgIGlmIChpc0Z1bmN0aW9uKHVzZXJEZWYpKSB7XG4gICAgICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSBzaG91bGRDYWNoZVxuICAgICAgICAgICAgPyBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpXG4gICAgICAgICAgICA6IGNyZWF0ZUdldHRlckludm9rZXIodXNlckRlZik7XG4gICAgICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBub29wO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IHVzZXJEZWYuZ2V0XG4gICAgICAgICAgICA/IHNob3VsZENhY2hlICYmIHVzZXJEZWYuY2FjaGUgIT09IGZhbHNlXG4gICAgICAgICAgICAgICAgPyBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpXG4gICAgICAgICAgICAgICAgOiBjcmVhdGVHZXR0ZXJJbnZva2VyKHVzZXJEZWYuZ2V0KVxuICAgICAgICAgICAgOiBub29wO1xuICAgICAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gdXNlckRlZi5zZXQgfHwgbm9vcDtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9PT0gbm9vcCkge1xuICAgICAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2FybihcIkNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgd2FzIGFzc2lnbmVkIHRvIGJ1dCBpdCBoYXMgbm8gc2V0dGVyLlwiKSwgdGhpcyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNvbXB1dGVkR2V0dGVyKGtleSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBjb21wdXRlZEdldHRlcigpIHtcbiAgICAgICAgdmFyIHdhdGNoZXIgPSB0aGlzLl9jb21wdXRlZFdhdGNoZXJzICYmIHRoaXMuX2NvbXB1dGVkV2F0Y2hlcnNba2V5XTtcbiAgICAgICAgaWYgKHdhdGNoZXIpIHtcbiAgICAgICAgICAgIGlmICh3YXRjaGVyLmRpcnR5KSB7XG4gICAgICAgICAgICAgICAgd2F0Y2hlci5ldmFsdWF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKERlcC50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBEZXAudGFyZ2V0Lm9uVHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgRGVwLnRhcmdldC5vblRyYWNrKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdDogRGVwLnRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZ2V0XCIgLyogVHJhY2tPcFR5cGVzLkdFVCAqLyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3YXRjaGVyLmRlcGVuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHdhdGNoZXIudmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlR2V0dGVySW52b2tlcihmbikge1xuICAgIHJldHVybiBmdW5jdGlvbiBjb21wdXRlZEdldHRlcigpIHtcbiAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgdGhpcyk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGluaXRNZXRob2RzKHZtLCBtZXRob2RzKSB7XG4gICAgdmFyIHByb3BzID0gdm0uJG9wdGlvbnMucHJvcHM7XG4gICAgZm9yICh2YXIga2V5IGluIG1ldGhvZHMpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWV0aG9kc1trZXldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgd2FybihcIk1ldGhvZCBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGhhcyB0eXBlIFxcXCJcIikuY29uY2F0KHR5cGVvZiBtZXRob2RzW2tleV0sIFwiXFxcIiBpbiB0aGUgY29tcG9uZW50IGRlZmluaXRpb24uIFwiKSArXG4gICAgICAgICAgICAgICAgICAgIFwiRGlkIHlvdSByZWZlcmVuY2UgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseT9cIiwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BzICYmIGhhc093bihwcm9wcywga2V5KSkge1xuICAgICAgICAgICAgICAgIHdhcm4oXCJNZXRob2QgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgYXMgYSBwcm9wLlwiKSwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleSBpbiB2bSAmJiBpc1Jlc2VydmVkKGtleSkpIHtcbiAgICAgICAgICAgICAgICB3YXJuKFwiTWV0aG9kIFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgY29uZmxpY3RzIHdpdGggYW4gZXhpc3RpbmcgVnVlIGluc3RhbmNlIG1ldGhvZC4gXCIpICtcbiAgICAgICAgICAgICAgICAgICAgXCJBdm9pZCBkZWZpbmluZyBjb21wb25lbnQgbWV0aG9kcyB0aGF0IHN0YXJ0IHdpdGggXyBvciAkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2bVtrZXldID0gdHlwZW9mIG1ldGhvZHNba2V5XSAhPT0gJ2Z1bmN0aW9uJyA/IG5vb3AgOiBiaW5kKG1ldGhvZHNba2V5XSwgdm0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGluaXRXYXRjaCh2bSwgd2F0Y2gpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gd2F0Y2gpIHtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSB3YXRjaFtrZXldO1xuICAgICAgICBpZiAoaXNBcnJheShoYW5kbGVyKSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYW5kbGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY3JlYXRlV2F0Y2hlcih2bSwga2V5LCBoYW5kbGVyW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNyZWF0ZVdhdGNoZXIodm0sIGtleSwgaGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVXYXRjaGVyKHZtLCBleHBPckZuLCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoaGFuZGxlcikpIHtcbiAgICAgICAgb3B0aW9ucyA9IGhhbmRsZXI7XG4gICAgICAgIGhhbmRsZXIgPSBoYW5kbGVyLmhhbmRsZXI7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaGFuZGxlciA9IHZtW2hhbmRsZXJdO1xuICAgIH1cbiAgICByZXR1cm4gdm0uJHdhdGNoKGV4cE9yRm4sIGhhbmRsZXIsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gc3RhdGVNaXhpbihWdWUpIHtcbiAgICAvLyBmbG93IHNvbWVob3cgaGFzIHByb2JsZW1zIHdpdGggZGlyZWN0bHkgZGVjbGFyZWQgZGVmaW5pdGlvbiBvYmplY3RcbiAgICAvLyB3aGVuIHVzaW5nIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSwgc28gd2UgaGF2ZSB0byBwcm9jZWR1cmFsbHkgYnVpbGQgdXBcbiAgICAvLyB0aGUgb2JqZWN0IGhlcmUuXG4gICAgdmFyIGRhdGFEZWYgPSB7fTtcbiAgICBkYXRhRGVmLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfTtcbiAgICB2YXIgcHJvcHNEZWYgPSB7fTtcbiAgICBwcm9wc0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9wcztcbiAgICB9O1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGRhdGFEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2FybignQXZvaWQgcmVwbGFjaW5nIGluc3RhbmNlIHJvb3QgJGRhdGEuICcgK1xuICAgICAgICAgICAgICAgICdVc2UgbmVzdGVkIGRhdGEgcHJvcGVydGllcyBpbnN0ZWFkLicsIHRoaXMpO1xuICAgICAgICB9O1xuICAgICAgICBwcm9wc0RlZi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3YXJuKFwiJHByb3BzIGlzIHJlYWRvbmx5LlwiLCB0aGlzKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckZGF0YScsIGRhdGFEZWYpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHByb3BzJywgcHJvcHNEZWYpO1xuICAgIFZ1ZS5wcm90b3R5cGUuJHNldCA9IHNldDtcbiAgICBWdWUucHJvdG90eXBlLiRkZWxldGUgPSBkZWw7XG4gICAgVnVlLnByb3RvdHlwZS4kd2F0Y2ggPSBmdW5jdGlvbiAoZXhwT3JGbiwgY2IsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QoY2IpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlV2F0Y2hlcih2bSwgZXhwT3JGbiwgY2IsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBvcHRpb25zLnVzZXIgPSB0cnVlO1xuICAgICAgICB2YXIgd2F0Y2hlciA9IG5ldyBXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChvcHRpb25zLmltbWVkaWF0ZSkge1xuICAgICAgICAgICAgdmFyIGluZm8gPSBcImNhbGxiYWNrIGZvciBpbW1lZGlhdGUgd2F0Y2hlciBcXFwiXCIuY29uY2F0KHdhdGNoZXIuZXhwcmVzc2lvbiwgXCJcXFwiXCIpO1xuICAgICAgICAgICAgcHVzaFRhcmdldCgpO1xuICAgICAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2IsIHZtLCBbd2F0Y2hlci52YWx1ZV0sIHZtLCBpbmZvKTtcbiAgICAgICAgICAgIHBvcFRhcmdldCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiB1bndhdGNoRm4oKSB7XG4gICAgICAgICAgICB3YXRjaGVyLnRlYXJkb3duKCk7XG4gICAgICAgIH07XG4gICAgfTtcbn1cblxudmFyIHVpZCA9IDA7XG5mdW5jdGlvbiBpbml0TWl4aW4kMShWdWUpIHtcbiAgICBWdWUucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgICAgLy8gYSB1aWRcbiAgICAgICAgdm0uX3VpZCA9IHVpZCsrO1xuICAgICAgICB2YXIgc3RhcnRUYWcsIGVuZFRhZztcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgICAgICAgICBzdGFydFRhZyA9IFwidnVlLXBlcmYtc3RhcnQ6XCIuY29uY2F0KHZtLl91aWQpO1xuICAgICAgICAgICAgZW5kVGFnID0gXCJ2dWUtcGVyZi1lbmQ6XCIuY29uY2F0KHZtLl91aWQpO1xuICAgICAgICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYSBmbGFnIHRvIG1hcmsgdGhpcyBhcyBhIFZ1ZSBpbnN0YW5jZSB3aXRob3V0IGhhdmluZyB0byBkbyBpbnN0YW5jZW9mXG4gICAgICAgIC8vIGNoZWNrXG4gICAgICAgIHZtLl9pc1Z1ZSA9IHRydWU7XG4gICAgICAgIC8vIGF2b2lkIGluc3RhbmNlcyBmcm9tIGJlaW5nIG9ic2VydmVkXG4gICAgICAgIHZtLl9fdl9za2lwID0gdHJ1ZTtcbiAgICAgICAgLy8gZWZmZWN0IHNjb3BlXG4gICAgICAgIHZtLl9zY29wZSA9IG5ldyBFZmZlY3RTY29wZSh0cnVlIC8qIGRldGFjaGVkICovKTtcbiAgICAgICAgLy8gIzEzMTM0IGVkZ2UgY2FzZSB3aGVyZSBhIGNoaWxkIGNvbXBvbmVudCBpcyBtYW51YWxseSBjcmVhdGVkIGR1cmluZyB0aGVcbiAgICAgICAgLy8gcmVuZGVyIG9mIGEgcGFyZW50IGNvbXBvbmVudFxuICAgICAgICB2bS5fc2NvcGUucGFyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICB2bS5fc2NvcGUuX3ZtID0gdHJ1ZTtcbiAgICAgICAgLy8gbWVyZ2Ugb3B0aW9uc1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLl9pc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgLy8gb3B0aW1pemUgaW50ZXJuYWwgY29tcG9uZW50IGluc3RhbnRpYXRpb25cbiAgICAgICAgICAgIC8vIHNpbmNlIGR5bmFtaWMgb3B0aW9ucyBtZXJnaW5nIGlzIHByZXR0eSBzbG93LCBhbmQgbm9uZSBvZiB0aGVcbiAgICAgICAgICAgIC8vIGludGVybmFsIGNvbXBvbmVudCBvcHRpb25zIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50LlxuICAgICAgICAgICAgaW5pdEludGVybmFsQ29tcG9uZW50KHZtLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZtLiRvcHRpb25zID0gbWVyZ2VPcHRpb25zKHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnModm0uY29uc3RydWN0b3IpLCBvcHRpb25zIHx8IHt9LCB2bSk7XG4gICAgICAgIH1cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGluaXRQcm94eSh2bSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2bS5fcmVuZGVyUHJveHkgPSB2bTtcbiAgICAgICAgfVxuICAgICAgICAvLyBleHBvc2UgcmVhbCBzZWxmXG4gICAgICAgIHZtLl9zZWxmID0gdm07XG4gICAgICAgIGluaXRMaWZlY3ljbGUodm0pO1xuICAgICAgICBpbml0RXZlbnRzKHZtKTtcbiAgICAgICAgaW5pdFJlbmRlcih2bSk7XG4gICAgICAgIGNhbGxIb29rJDEodm0sICdiZWZvcmVDcmVhdGUnLCB1bmRlZmluZWQsIGZhbHNlIC8qIHNldENvbnRleHQgKi8pO1xuICAgICAgICBpbml0SW5qZWN0aW9ucyh2bSk7IC8vIHJlc29sdmUgaW5qZWN0aW9ucyBiZWZvcmUgZGF0YS9wcm9wc1xuICAgICAgICBpbml0U3RhdGUodm0pO1xuICAgICAgICBpbml0UHJvdmlkZSh2bSk7IC8vIHJlc29sdmUgcHJvdmlkZSBhZnRlciBkYXRhL3Byb3BzXG4gICAgICAgIGNhbGxIb29rJDEodm0sICdjcmVhdGVkJyk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb25maWcucGVyZm9ybWFuY2UgJiYgbWFyaykge1xuICAgICAgICAgICAgdm0uX25hbWUgPSBmb3JtYXRDb21wb25lbnROYW1lKHZtLCBmYWxzZSk7XG4gICAgICAgICAgICBtYXJrKGVuZFRhZyk7XG4gICAgICAgICAgICBtZWFzdXJlKFwidnVlIFwiLmNvbmNhdCh2bS5fbmFtZSwgXCIgaW5pdFwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZtLiRvcHRpb25zLmVsKSB7XG4gICAgICAgICAgICB2bS4kbW91bnQodm0uJG9wdGlvbnMuZWwpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGluaXRJbnRlcm5hbENvbXBvbmVudCh2bSwgb3B0aW9ucykge1xuICAgIHZhciBvcHRzID0gKHZtLiRvcHRpb25zID0gT2JqZWN0LmNyZWF0ZSh2bS5jb25zdHJ1Y3Rvci5vcHRpb25zKSk7XG4gICAgLy8gZG9pbmcgdGhpcyBiZWNhdXNlIGl0J3MgZmFzdGVyIHRoYW4gZHluYW1pYyBlbnVtZXJhdGlvbi5cbiAgICB2YXIgcGFyZW50Vm5vZGUgPSBvcHRpb25zLl9wYXJlbnRWbm9kZTtcbiAgICBvcHRzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICAgIG9wdHMuX3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XG4gICAgdmFyIHZub2RlQ29tcG9uZW50T3B0aW9ucyA9IHBhcmVudFZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgb3B0cy5wcm9wc0RhdGEgPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMucHJvcHNEYXRhO1xuICAgIG9wdHMuX3BhcmVudExpc3RlbmVycyA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5saXN0ZW5lcnM7XG4gICAgb3B0cy5fcmVuZGVyQ2hpbGRyZW4gPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMuY2hpbGRyZW47XG4gICAgb3B0cy5fY29tcG9uZW50VGFnID0gdm5vZGVDb21wb25lbnRPcHRpb25zLnRhZztcbiAgICBpZiAob3B0aW9ucy5yZW5kZXIpIHtcbiAgICAgICAgb3B0cy5yZW5kZXIgPSBvcHRpb25zLnJlbmRlcjtcbiAgICAgICAgb3B0cy5zdGF0aWNSZW5kZXJGbnMgPSBvcHRpb25zLnN0YXRpY1JlbmRlckZucztcbiAgICB9XG59XG5mdW5jdGlvbiByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKEN0b3IpIHtcbiAgICB2YXIgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucztcbiAgICBpZiAoQ3Rvci5zdXBlcikge1xuICAgICAgICB2YXIgc3VwZXJPcHRpb25zID0gcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyhDdG9yLnN1cGVyKTtcbiAgICAgICAgdmFyIGNhY2hlZFN1cGVyT3B0aW9ucyA9IEN0b3Iuc3VwZXJPcHRpb25zO1xuICAgICAgICBpZiAoc3VwZXJPcHRpb25zICE9PSBjYWNoZWRTdXBlck9wdGlvbnMpIHtcbiAgICAgICAgICAgIC8vIHN1cGVyIG9wdGlvbiBjaGFuZ2VkLFxuICAgICAgICAgICAgLy8gbmVlZCB0byByZXNvbHZlIG5ldyBvcHRpb25zLlxuICAgICAgICAgICAgQ3Rvci5zdXBlck9wdGlvbnMgPSBzdXBlck9wdGlvbnM7XG4gICAgICAgICAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGxhdGUtbW9kaWZpZWQvYXR0YWNoZWQgb3B0aW9ucyAoIzQ5NzYpXG4gICAgICAgICAgICB2YXIgbW9kaWZpZWRPcHRpb25zID0gcmVzb2x2ZU1vZGlmaWVkT3B0aW9ucyhDdG9yKTtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBiYXNlIGV4dGVuZCBvcHRpb25zXG4gICAgICAgICAgICBpZiAobW9kaWZpZWRPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgZXh0ZW5kKEN0b3IuZXh0ZW5kT3B0aW9ucywgbW9kaWZpZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoc3VwZXJPcHRpb25zLCBDdG9yLmV4dGVuZE9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubmFtZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuY29tcG9uZW50c1tvcHRpb25zLm5hbWVdID0gQ3RvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbn1cbmZ1bmN0aW9uIHJlc29sdmVNb2RpZmllZE9wdGlvbnMoQ3Rvcikge1xuICAgIHZhciBtb2RpZmllZDtcbiAgICB2YXIgbGF0ZXN0ID0gQ3Rvci5vcHRpb25zO1xuICAgIHZhciBzZWFsZWQgPSBDdG9yLnNlYWxlZE9wdGlvbnM7XG4gICAgZm9yICh2YXIga2V5IGluIGxhdGVzdCkge1xuICAgICAgICBpZiAobGF0ZXN0W2tleV0gIT09IHNlYWxlZFtrZXldKSB7XG4gICAgICAgICAgICBpZiAoIW1vZGlmaWVkKVxuICAgICAgICAgICAgICAgIG1vZGlmaWVkID0ge307XG4gICAgICAgICAgICBtb2RpZmllZFtrZXldID0gbGF0ZXN0W2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1vZGlmaWVkO1xufVxuXG5mdW5jdGlvbiBWdWUob3B0aW9ucykge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICEodGhpcyBpbnN0YW5jZW9mIFZ1ZSkpIHtcbiAgICAgICAgd2FybignVnVlIGlzIGEgY29uc3RydWN0b3IgYW5kIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgYG5ld2Aga2V5d29yZCcpO1xuICAgIH1cbiAgICB0aGlzLl9pbml0KG9wdGlvbnMpO1xufVxuLy9AdHMtZXhwZWN0LWVycm9yIFZ1ZSBoYXMgZnVuY3Rpb24gdHlwZVxuaW5pdE1peGluJDEoVnVlKTtcbi8vQHRzLWV4cGVjdC1lcnJvciBWdWUgaGFzIGZ1bmN0aW9uIHR5cGVcbnN0YXRlTWl4aW4oVnVlKTtcbi8vQHRzLWV4cGVjdC1lcnJvciBWdWUgaGFzIGZ1bmN0aW9uIHR5cGVcbmV2ZW50c01peGluKFZ1ZSk7XG4vL0B0cy1leHBlY3QtZXJyb3IgVnVlIGhhcyBmdW5jdGlvbiB0eXBlXG5saWZlY3ljbGVNaXhpbihWdWUpO1xuLy9AdHMtZXhwZWN0LWVycm9yIFZ1ZSBoYXMgZnVuY3Rpb24gdHlwZVxucmVuZGVyTWl4aW4oVnVlKTtcblxuZnVuY3Rpb24gaW5pdFVzZShWdWUpIHtcbiAgICBWdWUudXNlID0gZnVuY3Rpb24gKHBsdWdpbikge1xuICAgICAgICB2YXIgaW5zdGFsbGVkUGx1Z2lucyA9IHRoaXMuX2luc3RhbGxlZFBsdWdpbnMgfHwgKHRoaXMuX2luc3RhbGxlZFBsdWdpbnMgPSBbXSk7XG4gICAgICAgIGlmIChpbnN0YWxsZWRQbHVnaW5zLmluZGV4T2YocGx1Z2luKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICAvLyBhZGRpdGlvbmFsIHBhcmFtZXRlcnNcbiAgICAgICAgdmFyIGFyZ3MgPSB0b0FycmF5KGFyZ3VtZW50cywgMSk7XG4gICAgICAgIGFyZ3MudW5zaGlmdCh0aGlzKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ocGx1Z2luLmluc3RhbGwpKSB7XG4gICAgICAgICAgICBwbHVnaW4uaW5zdGFsbC5hcHBseShwbHVnaW4sIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzRnVuY3Rpb24ocGx1Z2luKSkge1xuICAgICAgICAgICAgcGx1Z2luLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbGxlZFBsdWdpbnMucHVzaChwbHVnaW4pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbml0TWl4aW4oVnVlKSB7XG4gICAgVnVlLm1peGluID0gZnVuY3Rpb24gKG1peGluKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyh0aGlzLm9wdGlvbnMsIG1peGluKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gaW5pdEV4dGVuZChWdWUpIHtcbiAgICAvKipcbiAgICAgKiBFYWNoIGluc3RhbmNlIGNvbnN0cnVjdG9yLCBpbmNsdWRpbmcgVnVlLCBoYXMgYSB1bmlxdWVcbiAgICAgKiBjaWQuIFRoaXMgZW5hYmxlcyB1cyB0byBjcmVhdGUgd3JhcHBlZCBcImNoaWxkXG4gICAgICogY29uc3RydWN0b3JzXCIgZm9yIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UgYW5kIGNhY2hlIHRoZW0uXG4gICAgICovXG4gICAgVnVlLmNpZCA9IDA7XG4gICAgdmFyIGNpZCA9IDE7XG4gICAgLyoqXG4gICAgICogQ2xhc3MgaW5oZXJpdGFuY2VcbiAgICAgKi9cbiAgICBWdWUuZXh0ZW5kID0gZnVuY3Rpb24gKGV4dGVuZE9wdGlvbnMpIHtcbiAgICAgICAgZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnMgfHwge307XG4gICAgICAgIHZhciBTdXBlciA9IHRoaXM7XG4gICAgICAgIHZhciBTdXBlcklkID0gU3VwZXIuY2lkO1xuICAgICAgICB2YXIgY2FjaGVkQ3RvcnMgPSBleHRlbmRPcHRpb25zLl9DdG9yIHx8IChleHRlbmRPcHRpb25zLl9DdG9yID0ge30pO1xuICAgICAgICBpZiAoY2FjaGVkQ3RvcnNbU3VwZXJJZF0pIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDdG9yc1tTdXBlcklkXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoZXh0ZW5kT3B0aW9ucykgfHwgZ2V0Q29tcG9uZW50TmFtZShTdXBlci5vcHRpb25zKTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgbmFtZSkge1xuICAgICAgICAgICAgdmFsaWRhdGVDb21wb25lbnROYW1lKG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBTdWIgPSBmdW5jdGlvbiBWdWVDb21wb25lbnQob3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5faW5pdChvcHRpb25zKTtcbiAgICAgICAgfTtcbiAgICAgICAgU3ViLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3VwZXIucHJvdG90eXBlKTtcbiAgICAgICAgU3ViLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN1YjtcbiAgICAgICAgU3ViLmNpZCA9IGNpZCsrO1xuICAgICAgICBTdWIub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhTdXBlci5vcHRpb25zLCBleHRlbmRPcHRpb25zKTtcbiAgICAgICAgU3ViWydzdXBlciddID0gU3VwZXI7XG4gICAgICAgIC8vIEZvciBwcm9wcyBhbmQgY29tcHV0ZWQgcHJvcGVydGllcywgd2UgZGVmaW5lIHRoZSBwcm94eSBnZXR0ZXJzIG9uXG4gICAgICAgIC8vIHRoZSBWdWUgaW5zdGFuY2VzIGF0IGV4dGVuc2lvbiB0aW1lLCBvbiB0aGUgZXh0ZW5kZWQgcHJvdG90eXBlLiBUaGlzXG4gICAgICAgIC8vIGF2b2lkcyBPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbHMgZm9yIGVhY2ggaW5zdGFuY2UgY3JlYXRlZC5cbiAgICAgICAgaWYgKFN1Yi5vcHRpb25zLnByb3BzKSB7XG4gICAgICAgICAgICBpbml0UHJvcHMoU3ViKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoU3ViLm9wdGlvbnMuY29tcHV0ZWQpIHtcbiAgICAgICAgICAgIGluaXRDb21wdXRlZChTdWIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFsbG93IGZ1cnRoZXIgZXh0ZW5zaW9uL21peGluL3BsdWdpbiB1c2FnZVxuICAgICAgICBTdWIuZXh0ZW5kID0gU3VwZXIuZXh0ZW5kO1xuICAgICAgICBTdWIubWl4aW4gPSBTdXBlci5taXhpbjtcbiAgICAgICAgU3ViLnVzZSA9IFN1cGVyLnVzZTtcbiAgICAgICAgLy8gY3JlYXRlIGFzc2V0IHJlZ2lzdGVycywgc28gZXh0ZW5kZWQgY2xhc3Nlc1xuICAgICAgICAvLyBjYW4gaGF2ZSB0aGVpciBwcml2YXRlIGFzc2V0cyB0b28uXG4gICAgICAgIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgICAgIFN1Ylt0eXBlXSA9IFN1cGVyW3R5cGVdO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gZW5hYmxlIHJlY3Vyc2l2ZSBzZWxmLWxvb2t1cFxuICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgU3ViLm9wdGlvbnMuY29tcG9uZW50c1tuYW1lXSA9IFN1YjtcbiAgICAgICAgfVxuICAgICAgICAvLyBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBlciBvcHRpb25zIGF0IGV4dGVuc2lvbiB0aW1lLlxuICAgICAgICAvLyBsYXRlciBhdCBpbnN0YW50aWF0aW9uIHdlIGNhbiBjaGVjayBpZiBTdXBlcidzIG9wdGlvbnMgaGF2ZVxuICAgICAgICAvLyBiZWVuIHVwZGF0ZWQuXG4gICAgICAgIFN1Yi5zdXBlck9wdGlvbnMgPSBTdXBlci5vcHRpb25zO1xuICAgICAgICBTdWIuZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnM7XG4gICAgICAgIFN1Yi5zZWFsZWRPcHRpb25zID0gZXh0ZW5kKHt9LCBTdWIub3B0aW9ucyk7XG4gICAgICAgIC8vIGNhY2hlIGNvbnN0cnVjdG9yXG4gICAgICAgIGNhY2hlZEN0b3JzW1N1cGVySWRdID0gU3ViO1xuICAgICAgICByZXR1cm4gU3ViO1xuICAgIH07XG59XG5mdW5jdGlvbiBpbml0UHJvcHMoQ29tcCkge1xuICAgIHZhciBwcm9wcyA9IENvbXAub3B0aW9ucy5wcm9wcztcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgcHJveHkoQ29tcC5wcm90b3R5cGUsIFwiX3Byb3BzXCIsIGtleSk7XG4gICAgfVxufVxuZnVuY3Rpb24gaW5pdENvbXB1dGVkKENvbXApIHtcbiAgICB2YXIgY29tcHV0ZWQgPSBDb21wLm9wdGlvbnMuY29tcHV0ZWQ7XG4gICAgZm9yICh2YXIga2V5IGluIGNvbXB1dGVkKSB7XG4gICAgICAgIGRlZmluZUNvbXB1dGVkKENvbXAucHJvdG90eXBlLCBrZXksIGNvbXB1dGVkW2tleV0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaW5pdEFzc2V0UmVnaXN0ZXJzKFZ1ZSkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhc3NldCByZWdpc3RyYXRpb24gbWV0aG9kcy5cbiAgICAgKi9cbiAgICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZnVuY3Rpb24gaXMgbm90IGV4YWN0IHNhbWUgdHlwZVxuICAgICAgICBWdWVbdHlwZV0gPSBmdW5jdGlvbiAoaWQsIGRlZmluaXRpb24pIHtcbiAgICAgICAgICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNbdHlwZSArICdzJ11baWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZSA9PT0gJ2NvbXBvbmVudCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVDb21wb25lbnROYW1lKGlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdjb21wb25lbnQnICYmIGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uLm5hbWUgPSBkZWZpbml0aW9uLm5hbWUgfHwgaWQ7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb24gPSB0aGlzLm9wdGlvbnMuX2Jhc2UuZXh0ZW5kKGRlZmluaXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2RpcmVjdGl2ZScgJiYgaXNGdW5jdGlvbihkZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uID0geyBiaW5kOiBkZWZpbml0aW9uLCB1cGRhdGU6IGRlZmluaXRpb24gfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zW3R5cGUgKyAncyddW2lkXSA9IGRlZmluaXRpb247XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIF9nZXRDb21wb25lbnROYW1lKG9wdHMpIHtcbiAgICByZXR1cm4gb3B0cyAmJiAoZ2V0Q29tcG9uZW50TmFtZShvcHRzLkN0b3Iub3B0aW9ucykgfHwgb3B0cy50YWcpO1xufVxuZnVuY3Rpb24gbWF0Y2hlcyhwYXR0ZXJuLCBuYW1lKSB7XG4gICAgaWYgKGlzQXJyYXkocGF0dGVybikpIHtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4uaW5kZXhPZihuYW1lKSA+IC0xO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4uc3BsaXQoJywnKS5pbmRleE9mKG5hbWUpID4gLTE7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUmVnRXhwKHBhdHRlcm4pKSB7XG4gICAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobmFtZSk7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gcHJ1bmVDYWNoZShrZWVwQWxpdmVJbnN0YW5jZSwgZmlsdGVyKSB7XG4gICAgdmFyIGNhY2hlID0ga2VlcEFsaXZlSW5zdGFuY2UuY2FjaGUsIGtleXMgPSBrZWVwQWxpdmVJbnN0YW5jZS5rZXlzLCBfdm5vZGUgPSBrZWVwQWxpdmVJbnN0YW5jZS5fdm5vZGUsICR2bm9kZSA9IGtlZXBBbGl2ZUluc3RhbmNlLiR2bm9kZTtcbiAgICBmb3IgKHZhciBrZXkgaW4gY2FjaGUpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gY2FjaGVba2V5XTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICB2YXIgbmFtZV8xID0gZW50cnkubmFtZTtcbiAgICAgICAgICAgIGlmIChuYW1lXzEgJiYgIWZpbHRlcihuYW1lXzEpKSB7XG4gICAgICAgICAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGNhY2hlLCBrZXksIGtleXMsIF92bm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgJHZub2RlLmNvbXBvbmVudE9wdGlvbnMuY2hpbGRyZW4gPSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleSwga2V5cywgY3VycmVudCkge1xuICAgIHZhciBlbnRyeSA9IGNhY2hlW2tleV07XG4gICAgaWYgKGVudHJ5ICYmICghY3VycmVudCB8fCBlbnRyeS50YWcgIT09IGN1cnJlbnQudGFnKSkge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNhbiBiZSB1bmRlZmluZWRcbiAgICAgICAgZW50cnkuY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3koKTtcbiAgICB9XG4gICAgY2FjaGVba2V5XSA9IG51bGw7XG4gICAgcmVtb3ZlJDIoa2V5cywga2V5KTtcbn1cbnZhciBwYXR0ZXJuVHlwZXMgPSBbU3RyaW5nLCBSZWdFeHAsIEFycmF5XTtcbi8vIFRPRE8gZGVmaW5lQ29tcG9uZW50XG52YXIgS2VlcEFsaXZlID0ge1xuICAgIG5hbWU6ICdrZWVwLWFsaXZlJyxcbiAgICBhYnN0cmFjdDogdHJ1ZSxcbiAgICBwcm9wczoge1xuICAgICAgICBpbmNsdWRlOiBwYXR0ZXJuVHlwZXMsXG4gICAgICAgIGV4Y2x1ZGU6IHBhdHRlcm5UeXBlcyxcbiAgICAgICAgbWF4OiBbU3RyaW5nLCBOdW1iZXJdXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGNhY2hlVk5vZGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGNhY2hlID0gX2EuY2FjaGUsIGtleXMgPSBfYS5rZXlzLCB2bm9kZVRvQ2FjaGUgPSBfYS52bm9kZVRvQ2FjaGUsIGtleVRvQ2FjaGUgPSBfYS5rZXlUb0NhY2hlO1xuICAgICAgICAgICAgaWYgKHZub2RlVG9DYWNoZSkge1xuICAgICAgICAgICAgICAgIHZhciB0YWcgPSB2bm9kZVRvQ2FjaGUudGFnLCBjb21wb25lbnRJbnN0YW5jZSA9IHZub2RlVG9DYWNoZS5jb21wb25lbnRJbnN0YW5jZSwgY29tcG9uZW50T3B0aW9ucyA9IHZub2RlVG9DYWNoZS5jb21wb25lbnRPcHRpb25zO1xuICAgICAgICAgICAgICAgIGNhY2hlW2tleVRvQ2FjaGVdID0ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBfZ2V0Q29tcG9uZW50TmFtZShjb21wb25lbnRPcHRpb25zKSxcbiAgICAgICAgICAgICAgICAgICAgdGFnOiB0YWcsXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlOiBjb21wb25lbnRJbnN0YW5jZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleVRvQ2FjaGUpO1xuICAgICAgICAgICAgICAgIC8vIHBydW5lIG9sZGVzdCBlbnRyeVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1heCAmJiBrZXlzLmxlbmd0aCA+IHBhcnNlSW50KHRoaXMubWF4KSkge1xuICAgICAgICAgICAgICAgICAgICBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleXNbMF0sIGtleXMsIHRoaXMuX3Zub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy52bm9kZVRvQ2FjaGUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLmtleXMgPSBbXTtcbiAgICB9LFxuICAgIGRlc3Ryb3llZDogZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jYWNoZSkge1xuICAgICAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KHRoaXMuY2FjaGUsIGtleSwgdGhpcy5rZXlzKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmNhY2hlVk5vZGUoKTtcbiAgICAgICAgdGhpcy4kd2F0Y2goJ2luY2x1ZGUnLCBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBwcnVuZUNhY2hlKF90aGlzLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gbWF0Y2hlcyh2YWwsIG5hbWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuJHdhdGNoKCdleGNsdWRlJywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgcHJ1bmVDYWNoZShfdGhpcywgZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuICFtYXRjaGVzKHZhbCwgbmFtZSk7IH0pO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHVwZGF0ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jYWNoZVZOb2RlKCk7XG4gICAgfSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNsb3QgPSB0aGlzLiRzbG90cy5kZWZhdWx0O1xuICAgICAgICB2YXIgdm5vZGUgPSBnZXRGaXJzdENvbXBvbmVudENoaWxkKHNsb3QpO1xuICAgICAgICB2YXIgY29tcG9uZW50T3B0aW9ucyA9IHZub2RlICYmIHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgICAgIGlmIChjb21wb25lbnRPcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBjaGVjayBwYXR0ZXJuXG4gICAgICAgICAgICB2YXIgbmFtZV8yID0gX2dldENvbXBvbmVudE5hbWUoY29tcG9uZW50T3B0aW9ucyk7XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLCBpbmNsdWRlID0gX2EuaW5jbHVkZSwgZXhjbHVkZSA9IF9hLmV4Y2x1ZGU7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAvLyBub3QgaW5jbHVkZWRcbiAgICAgICAgICAgIChpbmNsdWRlICYmICghbmFtZV8yIHx8ICFtYXRjaGVzKGluY2x1ZGUsIG5hbWVfMikpKSB8fFxuICAgICAgICAgICAgICAgIC8vIGV4Y2x1ZGVkXG4gICAgICAgICAgICAgICAgKGV4Y2x1ZGUgJiYgbmFtZV8yICYmIG1hdGNoZXMoZXhjbHVkZSwgbmFtZV8yKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdm5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2IgPSB0aGlzLCBjYWNoZSA9IF9iLmNhY2hlLCBrZXlzID0gX2Iua2V5cztcbiAgICAgICAgICAgIHZhciBrZXkgPSB2bm9kZS5rZXkgPT0gbnVsbFxuICAgICAgICAgICAgICAgID8gLy8gc2FtZSBjb25zdHJ1Y3RvciBtYXkgZ2V0IHJlZ2lzdGVyZWQgYXMgZGlmZmVyZW50IGxvY2FsIGNvbXBvbmVudHNcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gY2lkIGFsb25lIGlzIG5vdCBlbm91Z2ggKCMzMjY5KVxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLkN0b3IuY2lkICtcbiAgICAgICAgICAgICAgICAgICAgICAgIChjb21wb25lbnRPcHRpb25zLnRhZyA/IFwiOjpcIi5jb25jYXQoY29tcG9uZW50T3B0aW9ucy50YWcpIDogJycpXG4gICAgICAgICAgICAgICAgOiB2bm9kZS5rZXk7XG4gICAgICAgICAgICBpZiAoY2FjaGVba2V5XSkge1xuICAgICAgICAgICAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gY2FjaGVba2V5XS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIGN1cnJlbnQga2V5IGZyZXNoZXN0XG4gICAgICAgICAgICAgICAgcmVtb3ZlJDIoa2V5cywga2V5KTtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRlbGF5IHNldHRpbmcgdGhlIGNhY2hlIHVudGlsIHVwZGF0ZVxuICAgICAgICAgICAgICAgIHRoaXMudm5vZGVUb0NhY2hlID0gdm5vZGU7XG4gICAgICAgICAgICAgICAgdGhpcy5rZXlUb0NhY2hlID0ga2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjYW4gdm5vZGUuZGF0YSBjYW4gYmUgdW5kZWZpbmVkXG4gICAgICAgICAgICB2bm9kZS5kYXRhLmtlZXBBbGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZub2RlIHx8IChzbG90ICYmIHNsb3RbMF0pO1xuICAgIH1cbn07XG5cbnZhciBidWlsdEluQ29tcG9uZW50cyA9IHtcbiAgICBLZWVwQWxpdmU6IEtlZXBBbGl2ZVxufTtcblxuZnVuY3Rpb24gaW5pdEdsb2JhbEFQSShWdWUpIHtcbiAgICAvLyBjb25maWdcbiAgICB2YXIgY29uZmlnRGVmID0ge307XG4gICAgY29uZmlnRGVmLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmZpZzsgfTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjb25maWdEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2FybignRG8gbm90IHJlcGxhY2UgdGhlIFZ1ZS5jb25maWcgb2JqZWN0LCBzZXQgaW5kaXZpZHVhbCBmaWVsZHMgaW5zdGVhZC4nKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZSwgJ2NvbmZpZycsIGNvbmZpZ0RlZik7XG4gICAgLy8gZXhwb3NlZCB1dGlsIG1ldGhvZHMuXG4gICAgLy8gTk9URTogdGhlc2UgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgLSBhdm9pZCByZWx5aW5nIG9uXG4gICAgLy8gdGhlbSB1bmxlc3MgeW91IGFyZSBhd2FyZSBvZiB0aGUgcmlzay5cbiAgICBWdWUudXRpbCA9IHtcbiAgICAgICAgd2Fybjogd2FybixcbiAgICAgICAgZXh0ZW5kOiBleHRlbmQsXG4gICAgICAgIG1lcmdlT3B0aW9uczogbWVyZ2VPcHRpb25zLFxuICAgICAgICBkZWZpbmVSZWFjdGl2ZTogZGVmaW5lUmVhY3RpdmVcbiAgICB9O1xuICAgIFZ1ZS5zZXQgPSBzZXQ7XG4gICAgVnVlLmRlbGV0ZSA9IGRlbDtcbiAgICBWdWUubmV4dFRpY2sgPSBuZXh0VGljaztcbiAgICAvLyAyLjYgZXhwbGljaXQgb2JzZXJ2YWJsZSBBUElcbiAgICBWdWUub2JzZXJ2YWJsZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgb2JzZXJ2ZShvYmopO1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gICAgVnVlLm9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgVnVlLm9wdGlvbnNbdHlwZSArICdzJ10gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIH0pO1xuICAgIC8vIHRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgXCJiYXNlXCIgY29uc3RydWN0b3IgdG8gZXh0ZW5kIGFsbCBwbGFpbi1vYmplY3RcbiAgICAvLyBjb21wb25lbnRzIHdpdGggaW4gV2VleCdzIG11bHRpLWluc3RhbmNlIHNjZW5hcmlvcy5cbiAgICBWdWUub3B0aW9ucy5fYmFzZSA9IFZ1ZTtcbiAgICBleHRlbmQoVnVlLm9wdGlvbnMuY29tcG9uZW50cywgYnVpbHRJbkNvbXBvbmVudHMpO1xuICAgIGluaXRVc2UoVnVlKTtcbiAgICBpbml0TWl4aW4oVnVlKTtcbiAgICBpbml0RXh0ZW5kKFZ1ZSk7XG4gICAgaW5pdEFzc2V0UmVnaXN0ZXJzKFZ1ZSk7XG59XG5cbmluaXRHbG9iYWxBUEkoVnVlKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJGlzU2VydmVyJywge1xuICAgIGdldDogaXNTZXJ2ZXJSZW5kZXJpbmdcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckc3NyQ29udGV4dCcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQ7XG4gICAgfVxufSk7XG4vLyBleHBvc2UgRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgZm9yIHNzciBydW50aW1lIGhlbHBlciBpbnN0YWxsYXRpb25cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUsICdGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCcsIHtcbiAgICB2YWx1ZTogRnVuY3Rpb25hbFJlbmRlckNvbnRleHRcbn0pO1xuVnVlLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG4vLyB0aGVzZSBhcmUgcmVzZXJ2ZWQgZm9yIHdlYiBiZWNhdXNlIHRoZXkgYXJlIGRpcmVjdGx5IGNvbXBpbGVkIGF3YXlcbi8vIGR1cmluZyB0ZW1wbGF0ZSBjb21waWxhdGlvblxudmFyIGlzUmVzZXJ2ZWRBdHRyID0gbWFrZU1hcCgnc3R5bGUsY2xhc3MnKTtcbi8vIGF0dHJpYnV0ZXMgdGhhdCBzaG91bGQgYmUgdXNpbmcgcHJvcHMgZm9yIGJpbmRpbmdcbnZhciBhY2NlcHRWYWx1ZSA9IG1ha2VNYXAoJ2lucHV0LHRleHRhcmVhLG9wdGlvbixzZWxlY3QscHJvZ3Jlc3MnKTtcbnZhciBtdXN0VXNlUHJvcCA9IGZ1bmN0aW9uICh0YWcsIHR5cGUsIGF0dHIpIHtcbiAgICByZXR1cm4gKChhdHRyID09PSAndmFsdWUnICYmIGFjY2VwdFZhbHVlKHRhZykgJiYgdHlwZSAhPT0gJ2J1dHRvbicpIHx8XG4gICAgICAgIChhdHRyID09PSAnc2VsZWN0ZWQnICYmIHRhZyA9PT0gJ29wdGlvbicpIHx8XG4gICAgICAgIChhdHRyID09PSAnY2hlY2tlZCcgJiYgdGFnID09PSAnaW5wdXQnKSB8fFxuICAgICAgICAoYXR0ciA9PT0gJ211dGVkJyAmJiB0YWcgPT09ICd2aWRlbycpKTtcbn07XG52YXIgaXNFbnVtZXJhdGVkQXR0ciA9IG1ha2VNYXAoJ2NvbnRlbnRlZGl0YWJsZSxkcmFnZ2FibGUsc3BlbGxjaGVjaycpO1xudmFyIGlzVmFsaWRDb250ZW50RWRpdGFibGVWYWx1ZSA9IG1ha2VNYXAoJ2V2ZW50cyxjYXJldCx0eXBpbmcscGxhaW50ZXh0LW9ubHknKTtcbnZhciBjb252ZXJ0RW51bWVyYXRlZFZhbHVlID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkgfHwgdmFsdWUgPT09ICdmYWxzZSdcbiAgICAgICAgPyAnZmFsc2UnXG4gICAgICAgIDogLy8gYWxsb3cgYXJiaXRyYXJ5IHN0cmluZyB2YWx1ZSBmb3IgY29udGVudGVkaXRhYmxlXG4gICAgICAgICAgICBrZXkgPT09ICdjb250ZW50ZWRpdGFibGUnICYmIGlzVmFsaWRDb250ZW50RWRpdGFibGVWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgICAgICAgOiAndHJ1ZSc7XG59O1xudmFyIGlzQm9vbGVhbkF0dHIgPSBtYWtlTWFwKCdhbGxvd2Z1bGxzY3JlZW4sYXN5bmMsYXV0b2ZvY3VzLGF1dG9wbGF5LGNoZWNrZWQsY29tcGFjdCxjb250cm9scyxkZWNsYXJlLCcgK1xuICAgICdkZWZhdWx0LGRlZmF1bHRjaGVja2VkLGRlZmF1bHRtdXRlZCxkZWZhdWx0c2VsZWN0ZWQsZGVmZXIsZGlzYWJsZWQsJyArXG4gICAgJ2VuYWJsZWQsZm9ybW5vdmFsaWRhdGUsaGlkZGVuLGluZGV0ZXJtaW5hdGUsaW5lcnQsaXNtYXAsaXRlbXNjb3BlLGxvb3AsbXVsdGlwbGUsJyArXG4gICAgJ211dGVkLG5vaHJlZixub3Jlc2l6ZSxub3NoYWRlLG5vdmFsaWRhdGUsbm93cmFwLG9wZW4scGF1c2VvbmV4aXQscmVhZG9ubHksJyArXG4gICAgJ3JlcXVpcmVkLHJldmVyc2VkLHNjb3BlZCxzZWFtbGVzcyxzZWxlY3RlZCxzb3J0YWJsZSwnICtcbiAgICAndHJ1ZXNwZWVkLHR5cGVtdXN0bWF0Y2gsdmlzaWJsZScpO1xudmFyIHhsaW5rTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayc7XG52YXIgaXNYbGluayA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIG5hbWUuY2hhckF0KDUpID09PSAnOicgJiYgbmFtZS5zbGljZSgwLCA1KSA9PT0gJ3hsaW5rJztcbn07XG52YXIgZ2V0WGxpbmtQcm9wID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gaXNYbGluayhuYW1lKSA/IG5hbWUuc2xpY2UoNiwgbmFtZS5sZW5ndGgpIDogJyc7XG59O1xudmFyIGlzRmFsc3lBdHRyVmFsdWUgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gZmFsc2U7XG59O1xuXG5mdW5jdGlvbiBnZW5DbGFzc0ZvclZub2RlKHZub2RlKSB7XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIHZhciBwYXJlbnROb2RlID0gdm5vZGU7XG4gICAgdmFyIGNoaWxkTm9kZSA9IHZub2RlO1xuICAgIHdoaWxlIChpc0RlZihjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgICAgIGlmIChjaGlsZE5vZGUgJiYgY2hpbGROb2RlLmRhdGEpIHtcbiAgICAgICAgICAgIGRhdGEgPSBtZXJnZUNsYXNzRGF0YShjaGlsZE5vZGUuZGF0YSwgZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBwYXJlbnROb2RlLnBhcmVudCBub3QgVk5vZGVXaXRoRGF0YVxuICAgIHdoaWxlIChpc0RlZigocGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50KSkpIHtcbiAgICAgICAgaWYgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS5kYXRhKSB7XG4gICAgICAgICAgICBkYXRhID0gbWVyZ2VDbGFzc0RhdGEoZGF0YSwgcGFyZW50Tm9kZS5kYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVuZGVyQ2xhc3MoZGF0YS5zdGF0aWNDbGFzcywgZGF0YS5jbGFzcyk7XG59XG5mdW5jdGlvbiBtZXJnZUNsYXNzRGF0YShjaGlsZCwgcGFyZW50KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdGljQ2xhc3M6IGNvbmNhdChjaGlsZC5zdGF0aWNDbGFzcywgcGFyZW50LnN0YXRpY0NsYXNzKSxcbiAgICAgICAgY2xhc3M6IGlzRGVmKGNoaWxkLmNsYXNzKSA/IFtjaGlsZC5jbGFzcywgcGFyZW50LmNsYXNzXSA6IHBhcmVudC5jbGFzc1xuICAgIH07XG59XG5mdW5jdGlvbiByZW5kZXJDbGFzcyhzdGF0aWNDbGFzcywgZHluYW1pY0NsYXNzKSB7XG4gICAgaWYgKGlzRGVmKHN0YXRpY0NsYXNzKSB8fCBpc0RlZihkeW5hbWljQ2xhc3MpKSB7XG4gICAgICAgIHJldHVybiBjb25jYXQoc3RhdGljQ2xhc3MsIHN0cmluZ2lmeUNsYXNzKGR5bmFtaWNDbGFzcykpO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiAnJztcbn1cbmZ1bmN0aW9uIGNvbmNhdChhLCBiKSB7XG4gICAgcmV0dXJuIGEgPyAoYiA/IGEgKyAnICcgKyBiIDogYSkgOiBiIHx8ICcnO1xufVxuZnVuY3Rpb24gc3RyaW5naWZ5Q2xhc3ModmFsdWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeUFycmF5KHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5naWZ5T2JqZWN0KHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiAnJztcbn1cbmZ1bmN0aW9uIHN0cmluZ2lmeUFycmF5KHZhbHVlKSB7XG4gICAgdmFyIHJlcyA9ICcnO1xuICAgIHZhciBzdHJpbmdpZmllZDtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoaXNEZWYoKHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5Q2xhc3ModmFsdWVbaV0pKSkgJiYgc3RyaW5naWZpZWQgIT09ICcnKSB7XG4gICAgICAgICAgICBpZiAocmVzKVxuICAgICAgICAgICAgICAgIHJlcyArPSAnICc7XG4gICAgICAgICAgICByZXMgKz0gc3RyaW5naWZpZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIHN0cmluZ2lmeU9iamVjdCh2YWx1ZSkge1xuICAgIHZhciByZXMgPSAnJztcbiAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlW2tleV0pIHtcbiAgICAgICAgICAgIGlmIChyZXMpXG4gICAgICAgICAgICAgICAgcmVzICs9ICcgJztcbiAgICAgICAgICAgIHJlcyArPSBrZXk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxudmFyIG5hbWVzcGFjZU1hcCA9IHtcbiAgICBzdmc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsXG4gICAgbWF0aDogJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnXG59O1xudmFyIGlzSFRNTFRhZyA9IG1ha2VNYXAoJ2h0bWwsYm9keSxiYXNlLGhlYWQsbGluayxtZXRhLHN0eWxlLHRpdGxlLCcgK1xuICAgICdhZGRyZXNzLGFydGljbGUsYXNpZGUsZm9vdGVyLGhlYWRlcixoMSxoMixoMyxoNCxoNSxoNixoZ3JvdXAsbmF2LHNlY3Rpb24sJyArXG4gICAgJ2RpdixkZCxkbCxkdCxmaWdjYXB0aW9uLGZpZ3VyZSxwaWN0dXJlLGhyLGltZyxsaSxtYWluLG9sLHAscHJlLHVsLCcgK1xuICAgICdhLGIsYWJicixiZGksYmRvLGJyLGNpdGUsY29kZSxkYXRhLGRmbixlbSxpLGtiZCxtYXJrLHEscnAscnQscnRjLHJ1YnksJyArXG4gICAgJ3Msc2FtcCxzbWFsbCxzcGFuLHN0cm9uZyxzdWIsc3VwLHRpbWUsdSx2YXIsd2JyLGFyZWEsYXVkaW8sbWFwLHRyYWNrLHZpZGVvLCcgK1xuICAgICdlbWJlZCxvYmplY3QscGFyYW0sc291cmNlLGNhbnZhcyxzY3JpcHQsbm9zY3JpcHQsZGVsLGlucywnICtcbiAgICAnY2FwdGlvbixjb2wsY29sZ3JvdXAsdGFibGUsdGhlYWQsdGJvZHksdGQsdGgsdHIsJyArXG4gICAgJ2J1dHRvbixkYXRhbGlzdCxmaWVsZHNldCxmb3JtLGlucHV0LGxhYmVsLGxlZ2VuZCxtZXRlcixvcHRncm91cCxvcHRpb24sJyArXG4gICAgJ291dHB1dCxwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWEsJyArXG4gICAgJ2RldGFpbHMsZGlhbG9nLG1lbnUsbWVudWl0ZW0sc3VtbWFyeSwnICtcbiAgICAnY29udGVudCxlbGVtZW50LHNoYWRvdyx0ZW1wbGF0ZSxibG9ja3F1b3RlLGlmcmFtZSx0Zm9vdCcpO1xuLy8gdGhpcyBtYXAgaXMgaW50ZW50aW9uYWxseSBzZWxlY3RpdmUsIG9ubHkgY292ZXJpbmcgU1ZHIGVsZW1lbnRzIHRoYXQgbWF5XG4vLyBjb250YWluIGNoaWxkIGVsZW1lbnRzLlxudmFyIGlzU1ZHID0gbWFrZU1hcCgnc3ZnLGFuaW1hdGUsY2lyY2xlLGNsaXBwYXRoLGN1cnNvcixkZWZzLGRlc2MsZWxsaXBzZSxmaWx0ZXIsZm9udC1mYWNlLCcgK1xuICAgICdmb3JlaWdub2JqZWN0LGcsZ2x5cGgsaW1hZ2UsbGluZSxtYXJrZXIsbWFzayxtaXNzaW5nLWdseXBoLHBhdGgscGF0dGVybiwnICtcbiAgICAncG9seWdvbixwb2x5bGluZSxyZWN0LHN3aXRjaCxzeW1ib2wsdGV4dCx0ZXh0cGF0aCx0c3Bhbix1c2UsdmlldycsIHRydWUpO1xudmFyIGlzUmVzZXJ2ZWRUYWcgPSBmdW5jdGlvbiAodGFnKSB7XG4gICAgcmV0dXJuIGlzSFRNTFRhZyh0YWcpIHx8IGlzU1ZHKHRhZyk7XG59O1xuZnVuY3Rpb24gZ2V0VGFnTmFtZXNwYWNlKHRhZykge1xuICAgIGlmIChpc1NWRyh0YWcpKSB7XG4gICAgICAgIHJldHVybiAnc3ZnJztcbiAgICB9XG4gICAgLy8gYmFzaWMgc3VwcG9ydCBmb3IgTWF0aE1MXG4gICAgLy8gbm90ZSBpdCBkb2Vzbid0IHN1cHBvcnQgb3RoZXIgTWF0aE1MIGVsZW1lbnRzIGJlaW5nIGNvbXBvbmVudCByb290c1xuICAgIGlmICh0YWcgPT09ICdtYXRoJykge1xuICAgICAgICByZXR1cm4gJ21hdGgnO1xuICAgIH1cbn1cbnZhciB1bmtub3duRWxlbWVudENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmZ1bmN0aW9uIGlzVW5rbm93bkVsZW1lbnQodGFnKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFpbkJyb3dzZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChpc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0YWcgPSB0YWcudG9Mb3dlckNhc2UoKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodW5rbm93bkVsZW1lbnRDYWNoZVt0YWddICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVua25vd25FbGVtZW50Q2FjaGVbdGFnXTtcbiAgICB9XG4gICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuICAgIGlmICh0YWcuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI4MjEwMzY0LzEwNzAyNDRcbiAgICAgICAgcmV0dXJuICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gPVxuICAgICAgICAgICAgZWwuY29uc3RydWN0b3IgPT09IHdpbmRvdy5IVE1MVW5rbm93bkVsZW1lbnQgfHxcbiAgICAgICAgICAgICAgICBlbC5jb25zdHJ1Y3RvciA9PT0gd2luZG93LkhUTUxFbGVtZW50KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAodW5rbm93bkVsZW1lbnRDYWNoZVt0YWddID0gL0hUTUxVbmtub3duRWxlbWVudC8udGVzdChlbC50b1N0cmluZygpKSk7XG4gICAgfVxufVxudmFyIGlzVGV4dElucHV0VHlwZSA9IG1ha2VNYXAoJ3RleHQsbnVtYmVyLHBhc3N3b3JkLHNlYXJjaCxlbWFpbCx0ZWwsdXJsJyk7XG5cbi8qKlxuICogUXVlcnkgYW4gZWxlbWVudCBzZWxlY3RvciBpZiBpdCdzIG5vdCBhbiBlbGVtZW50IGFscmVhZHkuXG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5KGVsKSB7XG4gICAgaWYgKHR5cGVvZiBlbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIHNlbGVjdGVkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbCk7XG4gICAgICAgIGlmICghc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybignQ2Fubm90IGZpbmQgZWxlbWVudDogJyArIGVsKTtcbiAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZWw7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZ05hbWUsIHZub2RlKSB7XG4gICAgdmFyIGVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gICAgaWYgKHRhZ05hbWUgIT09ICdzZWxlY3QnKSB7XG4gICAgICAgIHJldHVybiBlbG07XG4gICAgfVxuICAgIC8vIGZhbHNlIG9yIG51bGwgd2lsbCByZW1vdmUgdGhlIGF0dHJpYnV0ZSBidXQgdW5kZWZpbmVkIHdpbGwgbm90XG4gICAgaWYgKHZub2RlLmRhdGEgJiZcbiAgICAgICAgdm5vZGUuZGF0YS5hdHRycyAmJlxuICAgICAgICB2bm9kZS5kYXRhLmF0dHJzLm11bHRpcGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZWxtLnNldEF0dHJpYnV0ZSgnbXVsdGlwbGUnLCAnbXVsdGlwbGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsbTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2UsIHRhZ05hbWUpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZU1hcFtuYW1lc3BhY2VdLCB0YWdOYW1lKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRleHROb2RlKHRleHQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG59XG5mdW5jdGlvbiBjcmVhdGVDb21tZW50KHRleHQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0ZXh0KTtcbn1cbmZ1bmN0aW9uIGluc2VydEJlZm9yZShwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSk7XG59XG5mdW5jdGlvbiByZW1vdmVDaGlsZChub2RlLCBjaGlsZCkge1xuICAgIG5vZGUucmVtb3ZlQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gYXBwZW5kQ2hpbGQobm9kZSwgY2hpbGQpIHtcbiAgICBub2RlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIHBhcmVudE5vZGUobm9kZSkge1xuICAgIHJldHVybiBub2RlLnBhcmVudE5vZGU7XG59XG5mdW5jdGlvbiBuZXh0U2libGluZyhub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7XG59XG5mdW5jdGlvbiB0YWdOYW1lKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50YWdOYW1lO1xufVxuZnVuY3Rpb24gc2V0VGV4dENvbnRlbnQobm9kZSwgdGV4dCkge1xuICAgIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xufVxuZnVuY3Rpb24gc2V0U3R5bGVTY29wZShub2RlLCBzY29wZUlkKSB7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoc2NvcGVJZCwgJycpO1xufVxuXG52YXIgbm9kZU9wcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBjcmVhdGVFbGVtZW50OiBjcmVhdGVFbGVtZW50LFxuICBjcmVhdGVFbGVtZW50TlM6IGNyZWF0ZUVsZW1lbnROUyxcbiAgY3JlYXRlVGV4dE5vZGU6IGNyZWF0ZVRleHROb2RlLFxuICBjcmVhdGVDb21tZW50OiBjcmVhdGVDb21tZW50LFxuICBpbnNlcnRCZWZvcmU6IGluc2VydEJlZm9yZSxcbiAgcmVtb3ZlQ2hpbGQ6IHJlbW92ZUNoaWxkLFxuICBhcHBlbmRDaGlsZDogYXBwZW5kQ2hpbGQsXG4gIHBhcmVudE5vZGU6IHBhcmVudE5vZGUsXG4gIG5leHRTaWJsaW5nOiBuZXh0U2libGluZyxcbiAgdGFnTmFtZTogdGFnTmFtZSxcbiAgc2V0VGV4dENvbnRlbnQ6IHNldFRleHRDb250ZW50LFxuICBzZXRTdHlsZVNjb3BlOiBzZXRTdHlsZVNjb3BlXG59KTtcblxudmFyIHJlZiA9IHtcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChfLCB2bm9kZSkge1xuICAgICAgICByZWdpc3RlclJlZih2bm9kZSk7XG4gICAgfSxcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICAgICAgaWYgKG9sZFZub2RlLmRhdGEucmVmICE9PSB2bm9kZS5kYXRhLnJlZikge1xuICAgICAgICAgICAgcmVnaXN0ZXJSZWYob2xkVm5vZGUsIHRydWUpO1xuICAgICAgICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAodm5vZGUpIHtcbiAgICAgICAgcmVnaXN0ZXJSZWYodm5vZGUsIHRydWUpO1xuICAgIH1cbn07XG5mdW5jdGlvbiByZWdpc3RlclJlZih2bm9kZSwgaXNSZW1vdmFsKSB7XG4gICAgdmFyIHJlZiA9IHZub2RlLmRhdGEucmVmO1xuICAgIGlmICghaXNEZWYocmVmKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIHZhciB2bSA9IHZub2RlLmNvbnRleHQ7XG4gICAgdmFyIHJlZlZhbHVlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgfHwgdm5vZGUuZWxtO1xuICAgIHZhciB2YWx1ZSA9IGlzUmVtb3ZhbCA/IG51bGwgOiByZWZWYWx1ZTtcbiAgICB2YXIgJHJlZnNWYWx1ZSA9IGlzUmVtb3ZhbCA/IHVuZGVmaW5lZCA6IHJlZlZhbHVlO1xuICAgIGlmIChpc0Z1bmN0aW9uKHJlZikpIHtcbiAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcocmVmLCB2bSwgW3ZhbHVlXSwgdm0sIFwidGVtcGxhdGUgcmVmIGZ1bmN0aW9uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBpc0ZvciA9IHZub2RlLmRhdGEucmVmSW5Gb3I7XG4gICAgdmFyIF9pc1N0cmluZyA9IHR5cGVvZiByZWYgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiByZWYgPT09ICdudW1iZXInO1xuICAgIHZhciBfaXNSZWYgPSBpc1JlZihyZWYpO1xuICAgIHZhciByZWZzID0gdm0uJHJlZnM7XG4gICAgaWYgKF9pc1N0cmluZyB8fCBfaXNSZWYpIHtcbiAgICAgICAgaWYgKGlzRm9yKSB7XG4gICAgICAgICAgICB2YXIgZXhpc3RpbmcgPSBfaXNTdHJpbmcgPyByZWZzW3JlZl0gOiByZWYudmFsdWU7XG4gICAgICAgICAgICBpZiAoaXNSZW1vdmFsKSB7XG4gICAgICAgICAgICAgICAgaXNBcnJheShleGlzdGluZykgJiYgcmVtb3ZlJDIoZXhpc3RpbmcsIHJlZlZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghaXNBcnJheShleGlzdGluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc1N0cmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmc1tyZWZdID0gW3JlZlZhbHVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNldHVwUmVmKHZtLCByZWYsIHJlZnNbcmVmXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYudmFsdWUgPSBbcmVmVmFsdWVdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFleGlzdGluZy5pbmNsdWRlcyhyZWZWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcucHVzaChyZWZWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKF9pc1N0cmluZykge1xuICAgICAgICAgICAgaWYgKGlzUmVtb3ZhbCAmJiByZWZzW3JlZl0gIT09IHJlZlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVmc1tyZWZdID0gJHJlZnNWYWx1ZTtcbiAgICAgICAgICAgIHNldFNldHVwUmVmKHZtLCByZWYsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChfaXNSZWYpIHtcbiAgICAgICAgICAgIGlmIChpc1JlbW92YWwgJiYgcmVmLnZhbHVlICE9PSByZWZWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm4oXCJJbnZhbGlkIHRlbXBsYXRlIHJlZiB0eXBlOiBcIi5jb25jYXQodHlwZW9mIHJlZikpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gc2V0U2V0dXBSZWYoX2EsIGtleSwgdmFsKSB7XG4gICAgdmFyIF9zZXR1cFN0YXRlID0gX2EuX3NldHVwU3RhdGU7XG4gICAgaWYgKF9zZXR1cFN0YXRlICYmIGhhc093bihfc2V0dXBTdGF0ZSwga2V5KSkge1xuICAgICAgICBpZiAoaXNSZWYoX3NldHVwU3RhdGVba2V5XSkpIHtcbiAgICAgICAgICAgIF9zZXR1cFN0YXRlW2tleV0udmFsdWUgPSB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfc2V0dXBTdGF0ZVtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIFZpcnR1YWwgRE9NIHBhdGNoaW5nIGFsZ29yaXRobSBiYXNlZCBvbiBTbmFiYmRvbSBieVxuICogU2ltb24gRnJpaXMgVmluZHVtIChAcGFsZGVwaW5kKVxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlXG4gKiBodHRwczovL2dpdGh1Yi5jb20vcGFsZGVwaW5kL3NuYWJiZG9tL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqXG4gKiBtb2RpZmllZCBieSBFdmFuIFlvdSAoQHl5eDk5MDgwMylcbiAqXG4gKiBOb3QgdHlwZS1jaGVja2luZyB0aGlzIGJlY2F1c2UgdGhpcyBmaWxlIGlzIHBlcmYtY3JpdGljYWwgYW5kIHRoZSBjb3N0XG4gKiBvZiBtYWtpbmcgZmxvdyB1bmRlcnN0YW5kIGl0IGlzIG5vdCB3b3J0aCBpdC5cbiAqL1xudmFyIGVtcHR5Tm9kZSA9IG5ldyBWTm9kZSgnJywge30sIFtdKTtcbnZhciBob29rcyA9IFsnY3JlYXRlJywgJ2FjdGl2YXRlJywgJ3VwZGF0ZScsICdyZW1vdmUnLCAnZGVzdHJveSddO1xuZnVuY3Rpb24gc2FtZVZub2RlKGEsIGIpIHtcbiAgICByZXR1cm4gKGEua2V5ID09PSBiLmtleSAmJlxuICAgICAgICBhLmFzeW5jRmFjdG9yeSA9PT0gYi5hc3luY0ZhY3RvcnkgJiZcbiAgICAgICAgKChhLnRhZyA9PT0gYi50YWcgJiZcbiAgICAgICAgICAgIGEuaXNDb21tZW50ID09PSBiLmlzQ29tbWVudCAmJlxuICAgICAgICAgICAgaXNEZWYoYS5kYXRhKSA9PT0gaXNEZWYoYi5kYXRhKSAmJlxuICAgICAgICAgICAgc2FtZUlucHV0VHlwZShhLCBiKSkgfHxcbiAgICAgICAgICAgIChpc1RydWUoYS5pc0FzeW5jUGxhY2Vob2xkZXIpICYmIGlzVW5kZWYoYi5hc3luY0ZhY3RvcnkuZXJyb3IpKSkpO1xufVxuZnVuY3Rpb24gc2FtZUlucHV0VHlwZShhLCBiKSB7XG4gICAgaWYgKGEudGFnICE9PSAnaW5wdXQnKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgaTtcbiAgICB2YXIgdHlwZUEgPSBpc0RlZigoaSA9IGEuZGF0YSkpICYmIGlzRGVmKChpID0gaS5hdHRycykpICYmIGkudHlwZTtcbiAgICB2YXIgdHlwZUIgPSBpc0RlZigoaSA9IGIuZGF0YSkpICYmIGlzRGVmKChpID0gaS5hdHRycykpICYmIGkudHlwZTtcbiAgICByZXR1cm4gdHlwZUEgPT09IHR5cGVCIHx8IChpc1RleHRJbnB1dFR5cGUodHlwZUEpICYmIGlzVGV4dElucHV0VHlwZSh0eXBlQikpO1xufVxuZnVuY3Rpb24gY3JlYXRlS2V5VG9PbGRJZHgoY2hpbGRyZW4sIGJlZ2luSWR4LCBlbmRJZHgpIHtcbiAgICB2YXIgaSwga2V5O1xuICAgIHZhciBtYXAgPSB7fTtcbiAgICBmb3IgKGkgPSBiZWdpbklkeDsgaSA8PSBlbmRJZHg7ICsraSkge1xuICAgICAgICBrZXkgPSBjaGlsZHJlbltpXS5rZXk7XG4gICAgICAgIGlmIChpc0RlZihrZXkpKVxuICAgICAgICAgICAgbWFwW2tleV0gPSBpO1xuICAgIH1cbiAgICByZXR1cm4gbWFwO1xufVxuZnVuY3Rpb24gY3JlYXRlUGF0Y2hGdW5jdGlvbihiYWNrZW5kKSB7XG4gICAgdmFyIGksIGo7XG4gICAgdmFyIGNicyA9IHt9O1xuICAgIHZhciBtb2R1bGVzID0gYmFja2VuZC5tb2R1bGVzLCBub2RlT3BzID0gYmFja2VuZC5ub2RlT3BzO1xuICAgIGZvciAoaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7ICsraSkge1xuICAgICAgICBjYnNbaG9va3NbaV1dID0gW107XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBtb2R1bGVzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWYobW9kdWxlc1tqXVtob29rc1tpXV0pKSB7XG4gICAgICAgICAgICAgICAgY2JzW2hvb2tzW2ldXS5wdXNoKG1vZHVsZXNbal1baG9va3NbaV1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBlbXB0eU5vZGVBdChlbG0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWTm9kZShub2RlT3BzLnRhZ05hbWUoZWxtKS50b0xvd2VyQ2FzZSgpLCB7fSwgW10sIHVuZGVmaW5lZCwgZWxtKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlUm1DYihjaGlsZEVsbSwgbGlzdGVuZXJzKSB7XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgICAgICAgIGlmICgtLXJlbW92ZS5saXN0ZW5lcnMgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZW1vdmVOb2RlKGNoaWxkRWxtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZW1vdmUubGlzdGVuZXJzID0gbGlzdGVuZXJzO1xuICAgICAgICByZXR1cm4gcmVtb3ZlO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVOb2RlKGVsKSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSBub2RlT3BzLnBhcmVudE5vZGUoZWwpO1xuICAgICAgICAvLyBlbGVtZW50IG1heSBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGR1ZSB0byB2LWh0bWwgLyB2LXRleHRcbiAgICAgICAgaWYgKGlzRGVmKHBhcmVudCkpIHtcbiAgICAgICAgICAgIG5vZGVPcHMucmVtb3ZlQ2hpbGQocGFyZW50LCBlbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaXNVbmtub3duRWxlbWVudCh2bm9kZSwgaW5WUHJlKSB7XG4gICAgICAgIHJldHVybiAoIWluVlByZSAmJlxuICAgICAgICAgICAgIXZub2RlLm5zICYmXG4gICAgICAgICAgICAhKGNvbmZpZy5pZ25vcmVkRWxlbWVudHMubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgY29uZmlnLmlnbm9yZWRFbGVtZW50cy5zb21lKGZ1bmN0aW9uIChpZ25vcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzUmVnRXhwKGlnbm9yZSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaWdub3JlLnRlc3Qodm5vZGUudGFnKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBpZ25vcmUgPT09IHZub2RlLnRhZztcbiAgICAgICAgICAgICAgICB9KSkgJiZcbiAgICAgICAgICAgIGNvbmZpZy5pc1Vua25vd25FbGVtZW50KHZub2RlLnRhZykpO1xuICAgIH1cbiAgICB2YXIgY3JlYXRpbmdFbG1JblZQcmUgPSAwO1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUVsbSh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSwgbmVzdGVkLCBvd25lckFycmF5LCBpbmRleCkge1xuICAgICAgICBpZiAoaXNEZWYodm5vZGUuZWxtKSAmJiBpc0RlZihvd25lckFycmF5KSkge1xuICAgICAgICAgICAgLy8gVGhpcyB2bm9kZSB3YXMgdXNlZCBpbiBhIHByZXZpb3VzIHJlbmRlciFcbiAgICAgICAgICAgIC8vIG5vdyBpdCdzIHVzZWQgYXMgYSBuZXcgbm9kZSwgb3ZlcndyaXRpbmcgaXRzIGVsbSB3b3VsZCBjYXVzZVxuICAgICAgICAgICAgLy8gcG90ZW50aWFsIHBhdGNoIGVycm9ycyBkb3duIHRoZSByb2FkIHdoZW4gaXQncyB1c2VkIGFzIGFuIGluc2VydGlvblxuICAgICAgICAgICAgLy8gcmVmZXJlbmNlIG5vZGUuIEluc3RlYWQsIHdlIGNsb25lIHRoZSBub2RlIG9uLWRlbWFuZCBiZWZvcmUgY3JlYXRpbmdcbiAgICAgICAgICAgIC8vIGFzc29jaWF0ZWQgRE9NIGVsZW1lbnQgZm9yIGl0LlxuICAgICAgICAgICAgdm5vZGUgPSBvd25lckFycmF5W2luZGV4XSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHZub2RlLmlzUm9vdEluc2VydCA9ICFuZXN0ZWQ7IC8vIGZvciB0cmFuc2l0aW9uIGVudGVyIGNoZWNrXG4gICAgICAgIGlmIChjcmVhdGVDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICAgICAgdmFyIHRhZyA9IHZub2RlLnRhZztcbiAgICAgICAgaWYgKGlzRGVmKHRhZykpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5wcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRpbmdFbG1JblZQcmUrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzVW5rbm93bkVsZW1lbnQodm5vZGUsIGNyZWF0aW5nRWxtSW5WUHJlKSkge1xuICAgICAgICAgICAgICAgICAgICB3YXJuKCdVbmtub3duIGN1c3RvbSBlbGVtZW50OiA8JyArXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJz4gLSBkaWQgeW91ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3JlZ2lzdGVyIHRoZSBjb21wb25lbnQgY29ycmVjdGx5PyBGb3IgcmVjdXJzaXZlIGNvbXBvbmVudHMsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ21ha2Ugc3VyZSB0byBwcm92aWRlIHRoZSBcIm5hbWVcIiBvcHRpb24uJywgdm5vZGUuY29udGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdm5vZGUuZWxtID0gdm5vZGUubnNcbiAgICAgICAgICAgICAgICA/IG5vZGVPcHMuY3JlYXRlRWxlbWVudE5TKHZub2RlLm5zLCB0YWcpXG4gICAgICAgICAgICAgICAgOiBub2RlT3BzLmNyZWF0ZUVsZW1lbnQodGFnLCB2bm9kZSk7XG4gICAgICAgICAgICBzZXRTY29wZSh2bm9kZSk7XG4gICAgICAgICAgICBjcmVhdGVDaGlsZHJlbih2bm9kZSwgY2hpbGRyZW4sIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGRhdGEgJiYgZGF0YS5wcmUpIHtcbiAgICAgICAgICAgICAgICBjcmVhdGluZ0VsbUluVlByZS0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzVHJ1ZSh2bm9kZS5pc0NvbW1lbnQpKSB7XG4gICAgICAgICAgICB2bm9kZS5lbG0gPSBub2RlT3BzLmNyZWF0ZUNvbW1lbnQodm5vZGUudGV4dCk7XG4gICAgICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2bm9kZS5lbG0gPSBub2RlT3BzLmNyZWF0ZVRleHROb2RlKHZub2RlLnRleHQpO1xuICAgICAgICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkge1xuICAgICAgICB2YXIgaSA9IHZub2RlLmRhdGE7XG4gICAgICAgIGlmIChpc0RlZihpKSkge1xuICAgICAgICAgICAgdmFyIGlzUmVhY3RpdmF0ZWQgPSBpc0RlZih2bm9kZS5jb21wb25lbnRJbnN0YW5jZSkgJiYgaS5rZWVwQWxpdmU7XG4gICAgICAgICAgICBpZiAoaXNEZWYoKGkgPSBpLmhvb2spKSAmJiBpc0RlZigoaSA9IGkuaW5pdCkpKSB7XG4gICAgICAgICAgICAgICAgaSh2bm9kZSwgZmFsc2UgLyogaHlkcmF0aW5nICovKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFmdGVyIGNhbGxpbmcgdGhlIGluaXQgaG9vaywgaWYgdGhlIHZub2RlIGlzIGEgY2hpbGQgY29tcG9uZW50XG4gICAgICAgICAgICAvLyBpdCBzaG91bGQndmUgY3JlYXRlZCBhIGNoaWxkIGluc3RhbmNlIGFuZCBtb3VudGVkIGl0LiB0aGUgY2hpbGRcbiAgICAgICAgICAgIC8vIGNvbXBvbmVudCBhbHNvIGhhcyBzZXQgdGhlIHBsYWNlaG9sZGVyIHZub2RlJ3MgZWxtLlxuICAgICAgICAgICAgLy8gaW4gdGhhdCBjYXNlIHdlIGNhbiBqdXN0IHJldHVybiB0aGUgZWxlbWVudCBhbmQgYmUgZG9uZS5cbiAgICAgICAgICAgIGlmIChpc0RlZih2bm9kZS5jb21wb25lbnRJbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNUcnVlKGlzUmVhY3RpdmF0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWN0aXZhdGVDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICAgICAgaWYgKGlzRGVmKHZub2RlLmRhdGEucGVuZGluZ0luc2VydCkpIHtcbiAgICAgICAgICAgIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoLmFwcGx5KGluc2VydGVkVm5vZGVRdWV1ZSwgdm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0KTtcbiAgICAgICAgICAgIHZub2RlLmRhdGEucGVuZGluZ0luc2VydCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdm5vZGUuZWxtID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuJGVsO1xuICAgICAgICBpZiAoaXNQYXRjaGFibGUodm5vZGUpKSB7XG4gICAgICAgICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgIHNldFNjb3BlKHZub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGVtcHR5IGNvbXBvbmVudCByb290LlxuICAgICAgICAgICAgLy8gc2tpcCBhbGwgZWxlbWVudC1yZWxhdGVkIG1vZHVsZXMgZXhjZXB0IGZvciByZWYgKCMzNDU1KVxuICAgICAgICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRvIGludm9rZSB0aGUgaW5zZXJ0IGhvb2tcbiAgICAgICAgICAgIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoKHZub2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWFjdGl2YXRlQ29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKSB7XG4gICAgICAgIHZhciBpO1xuICAgICAgICAvLyBoYWNrIGZvciAjNDMzOTogYSByZWFjdGl2YXRlZCBjb21wb25lbnQgd2l0aCBpbm5lciB0cmFuc2l0aW9uXG4gICAgICAgIC8vIGRvZXMgbm90IHRyaWdnZXIgYmVjYXVzZSB0aGUgaW5uZXIgbm9kZSdzIGNyZWF0ZWQgaG9va3MgYXJlIG5vdCBjYWxsZWRcbiAgICAgICAgLy8gYWdhaW4uIEl0J3Mgbm90IGlkZWFsIHRvIGludm9sdmUgbW9kdWxlLXNwZWNpZmljIGxvZ2ljIGluIGhlcmUgYnV0XG4gICAgICAgIC8vIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGJldHRlciB3YXkgdG8gZG8gaXQuXG4gICAgICAgIHZhciBpbm5lck5vZGUgPSB2bm9kZTtcbiAgICAgICAgd2hpbGUgKGlubmVyTm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgICAgICAgaW5uZXJOb2RlID0gaW5uZXJOb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICAgICAgICAgIGlmIChpc0RlZigoaSA9IGlubmVyTm9kZS5kYXRhKSkgJiYgaXNEZWYoKGkgPSBpLnRyYW5zaXRpb24pKSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMuYWN0aXZhdGUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgY2JzLmFjdGl2YXRlW2ldKGVtcHR5Tm9kZSwgaW5uZXJOb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2goaW5uZXJOb2RlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB1bmxpa2UgYSBuZXdseSBjcmVhdGVkIGNvbXBvbmVudCxcbiAgICAgICAgLy8gYSByZWFjdGl2YXRlZCBrZWVwLWFsaXZlIGNvbXBvbmVudCBkb2Vzbid0IGluc2VydCBpdHNlbGZcbiAgICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbnNlcnQocGFyZW50LCBlbG0sIHJlZikge1xuICAgICAgICBpZiAoaXNEZWYocGFyZW50KSkge1xuICAgICAgICAgICAgaWYgKGlzRGVmKHJlZikpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZU9wcy5wYXJlbnROb2RlKHJlZikgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnQsIGVsbSwgcmVmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlT3BzLmFwcGVuZENoaWxkKHBhcmVudCwgZWxtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDaGlsZHJlbih2bm9kZSwgY2hpbGRyZW4sIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tEdXBsaWNhdGVLZXlzKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGlfMSA9IDA7IGlfMSA8IGNoaWxkcmVuLmxlbmd0aDsgKytpXzEpIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVFbG0oY2hpbGRyZW5baV8xXSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5lbG0sIG51bGwsIHRydWUsIGNoaWxkcmVuLCBpXzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzUHJpbWl0aXZlKHZub2RlLnRleHQpKSB7XG4gICAgICAgICAgICBub2RlT3BzLmFwcGVuZENoaWxkKHZub2RlLmVsbSwgbm9kZU9wcy5jcmVhdGVUZXh0Tm9kZShTdHJpbmcodm5vZGUudGV4dCkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc1BhdGNoYWJsZSh2bm9kZSkge1xuICAgICAgICB3aGlsZSAodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHZub2RlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0RlZih2bm9kZS50YWcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgICAgIGZvciAodmFyIGlfMiA9IDA7IGlfMiA8IGNicy5jcmVhdGUubGVuZ3RoOyArK2lfMikge1xuICAgICAgICAgICAgY2JzLmNyZWF0ZVtpXzJdKGVtcHR5Tm9kZSwgdm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGkgPSB2bm9kZS5kYXRhLmhvb2s7IC8vIFJldXNlIHZhcmlhYmxlXG4gICAgICAgIGlmIChpc0RlZihpKSkge1xuICAgICAgICAgICAgaWYgKGlzRGVmKGkuY3JlYXRlKSlcbiAgICAgICAgICAgICAgICBpLmNyZWF0ZShlbXB0eU5vZGUsIHZub2RlKTtcbiAgICAgICAgICAgIGlmIChpc0RlZihpLmluc2VydCkpXG4gICAgICAgICAgICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2godm5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNldCBzY29wZSBpZCBhdHRyaWJ1dGUgZm9yIHNjb3BlZCBDU1MuXG4gICAgLy8gdGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIHNwZWNpYWwgY2FzZSB0byBhdm9pZCB0aGUgb3ZlcmhlYWRcbiAgICAvLyBvZiBnb2luZyB0aHJvdWdoIHRoZSBub3JtYWwgYXR0cmlidXRlIHBhdGNoaW5nIHByb2Nlc3MuXG4gICAgZnVuY3Rpb24gc2V0U2NvcGUodm5vZGUpIHtcbiAgICAgICAgdmFyIGk7XG4gICAgICAgIGlmIChpc0RlZigoaSA9IHZub2RlLmZuU2NvcGVJZCkpKSB7XG4gICAgICAgICAgICBub2RlT3BzLnNldFN0eWxlU2NvcGUodm5vZGUuZWxtLCBpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBhbmNlc3RvciA9IHZub2RlO1xuICAgICAgICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmKChpID0gYW5jZXN0b3IuY29udGV4dCkpICYmIGlzRGVmKChpID0gaS4kb3B0aW9ucy5fc2NvcGVJZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBmb3Igc2xvdCBjb250ZW50IHRoZXkgc2hvdWxkIGFsc28gZ2V0IHRoZSBzY29wZUlkIGZyb20gdGhlIGhvc3QgaW5zdGFuY2UuXG4gICAgICAgIGlmIChpc0RlZigoaSA9IGFjdGl2ZUluc3RhbmNlKSkgJiZcbiAgICAgICAgICAgIGkgIT09IHZub2RlLmNvbnRleHQgJiZcbiAgICAgICAgICAgIGkgIT09IHZub2RlLmZuQ29udGV4dCAmJlxuICAgICAgICAgICAgaXNEZWYoKGkgPSBpLiRvcHRpb25zLl9zY29wZUlkKSkpIHtcbiAgICAgICAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZFZub2RlcyhwYXJlbnRFbG0sIHJlZkVsbSwgdm5vZGVzLCBzdGFydElkeCwgZW5kSWR4LCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICAgICAgZm9yICg7IHN0YXJ0SWR4IDw9IGVuZElkeDsgKytzdGFydElkeCkge1xuICAgICAgICAgICAgY3JlYXRlRWxtKHZub2Rlc1tzdGFydElkeF0sIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0sIGZhbHNlLCB2bm9kZXMsIHN0YXJ0SWR4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpbnZva2VEZXN0cm95SG9vayh2bm9kZSkge1xuICAgICAgICB2YXIgaSwgajtcbiAgICAgICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICAgIGlmIChpc0RlZigoaSA9IGRhdGEuaG9vaykpICYmIGlzRGVmKChpID0gaS5kZXN0cm95KSkpXG4gICAgICAgICAgICAgICAgaSh2bm9kZSk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmRlc3Ryb3kubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgY2JzLmRlc3Ryb3lbaV0odm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0RlZigoaSA9IHZub2RlLmNoaWxkcmVuKSkpIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKHZub2RlLmNoaWxkcmVuW2pdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVWbm9kZXModm5vZGVzLCBzdGFydElkeCwgZW5kSWR4KSB7XG4gICAgICAgIGZvciAoOyBzdGFydElkeCA8PSBlbmRJZHg7ICsrc3RhcnRJZHgpIHtcbiAgICAgICAgICAgIHZhciBjaCA9IHZub2Rlc1tzdGFydElkeF07XG4gICAgICAgICAgICBpZiAoaXNEZWYoY2gpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmKGNoLnRhZykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayhjaCk7XG4gICAgICAgICAgICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKGNoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRleHQgbm9kZVxuICAgICAgICAgICAgICAgICAgICByZW1vdmVOb2RlKGNoLmVsbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2sodm5vZGUsIHJtKSB7XG4gICAgICAgIGlmIChpc0RlZihybSkgfHwgaXNEZWYodm5vZGUuZGF0YSkpIHtcbiAgICAgICAgICAgIHZhciBpXzM7XG4gICAgICAgICAgICB2YXIgbGlzdGVuZXJzID0gY2JzLnJlbW92ZS5sZW5ndGggKyAxO1xuICAgICAgICAgICAgaWYgKGlzRGVmKHJtKSkge1xuICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgYSByZWN1cnNpdmVseSBwYXNzZWQgZG93biBybSBjYWxsYmFja1xuICAgICAgICAgICAgICAgIC8vIGluY3JlYXNlIHRoZSBsaXN0ZW5lcnMgY291bnRcbiAgICAgICAgICAgICAgICBybS5saXN0ZW5lcnMgKz0gbGlzdGVuZXJzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGlyZWN0bHkgcmVtb3ZpbmdcbiAgICAgICAgICAgICAgICBybSA9IGNyZWF0ZVJtQ2Iodm5vZGUuZWxtLCBsaXN0ZW5lcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gcmVjdXJzaXZlbHkgaW52b2tlIGhvb2tzIG9uIGNoaWxkIGNvbXBvbmVudCByb290IG5vZGVcbiAgICAgICAgICAgIGlmIChpc0RlZigoaV8zID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSAmJlxuICAgICAgICAgICAgICAgIGlzRGVmKChpXzMgPSBpXzMuX3Zub2RlKSkgJiZcbiAgICAgICAgICAgICAgICBpc0RlZihpXzMuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rKGlfMywgcm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChpXzMgPSAwOyBpXzMgPCBjYnMucmVtb3ZlLmxlbmd0aDsgKytpXzMpIHtcbiAgICAgICAgICAgICAgICBjYnMucmVtb3ZlW2lfM10odm5vZGUsIHJtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0RlZigoaV8zID0gdm5vZGUuZGF0YS5ob29rKSkgJiYgaXNEZWYoKGlfMyA9IGlfMy5yZW1vdmUpKSkge1xuICAgICAgICAgICAgICAgIGlfMyh2bm9kZSwgcm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcm0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUodm5vZGUuZWxtKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVDaGlsZHJlbihwYXJlbnRFbG0sIG9sZENoLCBuZXdDaCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCByZW1vdmVPbmx5KSB7XG4gICAgICAgIHZhciBvbGRTdGFydElkeCA9IDA7XG4gICAgICAgIHZhciBuZXdTdGFydElkeCA9IDA7XG4gICAgICAgIHZhciBvbGRFbmRJZHggPSBvbGRDaC5sZW5ndGggLSAxO1xuICAgICAgICB2YXIgb2xkU3RhcnRWbm9kZSA9IG9sZENoWzBdO1xuICAgICAgICB2YXIgb2xkRW5kVm5vZGUgPSBvbGRDaFtvbGRFbmRJZHhdO1xuICAgICAgICB2YXIgbmV3RW5kSWR4ID0gbmV3Q2gubGVuZ3RoIC0gMTtcbiAgICAgICAgdmFyIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFswXTtcbiAgICAgICAgdmFyIG5ld0VuZFZub2RlID0gbmV3Q2hbbmV3RW5kSWR4XTtcbiAgICAgICAgdmFyIG9sZEtleVRvSWR4LCBpZHhJbk9sZCwgdm5vZGVUb01vdmUsIHJlZkVsbTtcbiAgICAgICAgLy8gcmVtb3ZlT25seSBpcyBhIHNwZWNpYWwgZmxhZyB1c2VkIG9ubHkgYnkgPHRyYW5zaXRpb24tZ3JvdXA+XG4gICAgICAgIC8vIHRvIGVuc3VyZSByZW1vdmVkIGVsZW1lbnRzIHN0YXkgaW4gY29ycmVjdCByZWxhdGl2ZSBwb3NpdGlvbnNcbiAgICAgICAgLy8gZHVyaW5nIGxlYXZpbmcgdHJhbnNpdGlvbnNcbiAgICAgICAgdmFyIGNhbk1vdmUgPSAhcmVtb3ZlT25seTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGNoZWNrRHVwbGljYXRlS2V5cyhuZXdDaCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKG9sZFN0YXJ0SWR4IDw9IG9sZEVuZElkeCAmJiBuZXdTdGFydElkeCA8PSBuZXdFbmRJZHgpIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmKG9sZFN0YXJ0Vm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdOyAvLyBWbm9kZSBoYXMgYmVlbiBtb3ZlZCBsZWZ0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc1VuZGVmKG9sZEVuZFZub2RlKSkge1xuICAgICAgICAgICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2FtZVZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld1N0YXJ0Vm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgcGF0Y2hWbm9kZShvbGRTdGFydFZub2RlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgICAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdO1xuICAgICAgICAgICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNhbWVWbm9kZShvbGRFbmRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgcGF0Y2hWbm9kZShvbGRFbmRWbm9kZSwgbmV3RW5kVm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld0VuZElkeCk7XG4gICAgICAgICAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICAgICAgICAgICAgbmV3RW5kVm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzYW1lVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgLy8gVm5vZGUgbW92ZWQgcmlnaHRcbiAgICAgICAgICAgICAgICBwYXRjaFZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld0VuZFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdFbmRJZHgpO1xuICAgICAgICAgICAgICAgIGNhbk1vdmUgJiZcbiAgICAgICAgICAgICAgICAgICAgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50RWxtLCBvbGRTdGFydFZub2RlLmVsbSwgbm9kZU9wcy5uZXh0U2libGluZyhvbGRFbmRWbm9kZS5lbG0pKTtcbiAgICAgICAgICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07XG4gICAgICAgICAgICAgICAgbmV3RW5kVm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzYW1lVm5vZGUob2xkRW5kVm5vZGUsIG5ld1N0YXJ0Vm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgLy8gVm5vZGUgbW92ZWQgbGVmdFxuICAgICAgICAgICAgICAgIHBhdGNoVm5vZGUob2xkRW5kVm5vZGUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgICAgICAgICBjYW5Nb3ZlICYmXG4gICAgICAgICAgICAgICAgICAgIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgb2xkRW5kVm5vZGUuZWxtLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgICAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICAgICAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3RhcnRJZHhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzVW5kZWYob2xkS2V5VG9JZHgpKVxuICAgICAgICAgICAgICAgICAgICBvbGRLZXlUb0lkeCA9IGNyZWF0ZUtleVRvT2xkSWR4KG9sZENoLCBvbGRTdGFydElkeCwgb2xkRW5kSWR4KTtcbiAgICAgICAgICAgICAgICBpZHhJbk9sZCA9IGlzRGVmKG5ld1N0YXJ0Vm5vZGUua2V5KVxuICAgICAgICAgICAgICAgICAgICA/IG9sZEtleVRvSWR4W25ld1N0YXJ0Vm5vZGUua2V5XVxuICAgICAgICAgICAgICAgICAgICA6IGZpbmRJZHhJbk9sZChuZXdTdGFydFZub2RlLCBvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzVW5kZWYoaWR4SW5PbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5ldyBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIGZhbHNlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdm5vZGVUb01vdmUgPSBvbGRDaFtpZHhJbk9sZF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChzYW1lVm5vZGUodm5vZGVUb01vdmUsIG5ld1N0YXJ0Vm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFZub2RlKHZub2RlVG9Nb3ZlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbGRDaFtpZHhJbk9sZF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5Nb3ZlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50RWxtLCB2bm9kZVRvTW92ZS5lbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNhbWUga2V5IGJ1dCBkaWZmZXJlbnQgZWxlbWVudC4gdHJlYXQgYXMgbmV3IGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIGZhbHNlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob2xkU3RhcnRJZHggPiBvbGRFbmRJZHgpIHtcbiAgICAgICAgICAgIHJlZkVsbSA9IGlzVW5kZWYobmV3Q2hbbmV3RW5kSWR4ICsgMV0pID8gbnVsbCA6IG5ld0NoW25ld0VuZElkeCArIDFdLmVsbTtcbiAgICAgICAgICAgIGFkZFZub2RlcyhwYXJlbnRFbG0sIHJlZkVsbSwgbmV3Q2gsIG5ld1N0YXJ0SWR4LCBuZXdFbmRJZHgsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobmV3U3RhcnRJZHggPiBuZXdFbmRJZHgpIHtcbiAgICAgICAgICAgIHJlbW92ZVZub2RlcyhvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tEdXBsaWNhdGVLZXlzKGNoaWxkcmVuKSB7XG4gICAgICAgIHZhciBzZWVuS2V5cyA9IHt9O1xuICAgICAgICBmb3IgKHZhciBpXzQgPSAwOyBpXzQgPCBjaGlsZHJlbi5sZW5ndGg7IGlfNCsrKSB7XG4gICAgICAgICAgICB2YXIgdm5vZGUgPSBjaGlsZHJlbltpXzRdO1xuICAgICAgICAgICAgdmFyIGtleSA9IHZub2RlLmtleTtcbiAgICAgICAgICAgIGlmIChpc0RlZihrZXkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlZW5LZXlzW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgd2FybihcIkR1cGxpY2F0ZSBrZXlzIGRldGVjdGVkOiAnXCIuY29uY2F0KGtleSwgXCInLiBUaGlzIG1heSBjYXVzZSBhbiB1cGRhdGUgZXJyb3IuXCIpLCB2bm9kZS5jb250ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZW5LZXlzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kSWR4SW5PbGQobm9kZSwgb2xkQ2gsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgZm9yICh2YXIgaV81ID0gc3RhcnQ7IGlfNSA8IGVuZDsgaV81KyspIHtcbiAgICAgICAgICAgIHZhciBjID0gb2xkQ2hbaV81XTtcbiAgICAgICAgICAgIGlmIChpc0RlZihjKSAmJiBzYW1lVm5vZGUobm9kZSwgYykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGlfNTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwYXRjaFZub2RlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBvd25lckFycmF5LCBpbmRleCwgcmVtb3ZlT25seSkge1xuICAgICAgICBpZiAob2xkVm5vZGUgPT09IHZub2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRGVmKHZub2RlLmVsbSkgJiYgaXNEZWYob3duZXJBcnJheSkpIHtcbiAgICAgICAgICAgIC8vIGNsb25lIHJldXNlZCB2bm9kZVxuICAgICAgICAgICAgdm5vZGUgPSBvd25lckFycmF5W2luZGV4XSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlbG0gPSAodm5vZGUuZWxtID0gb2xkVm5vZGUuZWxtKTtcbiAgICAgICAgaWYgKGlzVHJ1ZShvbGRWbm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIpKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWYodm5vZGUuYXN5bmNGYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICAgICAgICAgIGh5ZHJhdGUob2xkVm5vZGUuZWxtLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZub2RlLmlzQXN5bmNQbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmV1c2UgZWxlbWVudCBmb3Igc3RhdGljIHRyZWVzLlxuICAgICAgICAvLyBub3RlIHdlIG9ubHkgZG8gdGhpcyBpZiB0aGUgdm5vZGUgaXMgY2xvbmVkIC1cbiAgICAgICAgLy8gaWYgdGhlIG5ldyBub2RlIGlzIG5vdCBjbG9uZWQgaXQgbWVhbnMgdGhlIHJlbmRlciBmdW5jdGlvbnMgaGF2ZSBiZWVuXG4gICAgICAgIC8vIHJlc2V0IGJ5IHRoZSBob3QtcmVsb2FkLWFwaSBhbmQgd2UgbmVlZCB0byBkbyBhIHByb3BlciByZS1yZW5kZXIuXG4gICAgICAgIGlmIChpc1RydWUodm5vZGUuaXNTdGF0aWMpICYmXG4gICAgICAgICAgICBpc1RydWUob2xkVm5vZGUuaXNTdGF0aWMpICYmXG4gICAgICAgICAgICB2bm9kZS5rZXkgPT09IG9sZFZub2RlLmtleSAmJlxuICAgICAgICAgICAgKGlzVHJ1ZSh2bm9kZS5pc0Nsb25lZCkgfHwgaXNUcnVlKHZub2RlLmlzT25jZSkpKSB7XG4gICAgICAgICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IG9sZFZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpO1xuICAgICAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZigoaSA9IGRhdGEuaG9vaykpICYmIGlzRGVmKChpID0gaS5wcmVwYXRjaCkpKSB7XG4gICAgICAgICAgICBpKG9sZFZub2RlLCB2bm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG9sZENoID0gb2xkVm5vZGUuY2hpbGRyZW47XG4gICAgICAgIHZhciBjaCA9IHZub2RlLmNoaWxkcmVuO1xuICAgICAgICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNQYXRjaGFibGUodm5vZGUpKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnVwZGF0ZS5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICBjYnMudXBkYXRlW2ldKG9sZFZub2RlLCB2bm9kZSk7XG4gICAgICAgICAgICBpZiAoaXNEZWYoKGkgPSBkYXRhLmhvb2spKSAmJiBpc0RlZigoaSA9IGkudXBkYXRlKSkpXG4gICAgICAgICAgICAgICAgaShvbGRWbm9kZSwgdm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1VuZGVmKHZub2RlLnRleHQpKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWYob2xkQ2gpICYmIGlzRGVmKGNoKSkge1xuICAgICAgICAgICAgICAgIGlmIChvbGRDaCAhPT0gY2gpXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNoaWxkcmVuKGVsbSwgb2xkQ2gsIGNoLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNEZWYoY2gpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tEdXBsaWNhdGVLZXlzKGNoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmKG9sZFZub2RlLnRleHQpKVxuICAgICAgICAgICAgICAgICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpO1xuICAgICAgICAgICAgICAgIGFkZFZub2RlcyhlbG0sIG51bGwsIGNoLCAwLCBjaC5sZW5ndGggLSAxLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNEZWYob2xkQ2gpKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlVm5vZGVzKG9sZENoLCAwLCBvbGRDaC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzRGVmKG9sZFZub2RlLnRleHQpKSB7XG4gICAgICAgICAgICAgICAgbm9kZU9wcy5zZXRUZXh0Q29udGVudChlbG0sICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvbGRWbm9kZS50ZXh0ICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICAgICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgdm5vZGUudGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWYoKGkgPSBkYXRhLmhvb2spKSAmJiBpc0RlZigoaSA9IGkucG9zdHBhdGNoKSkpXG4gICAgICAgICAgICAgICAgaShvbGRWbm9kZSwgdm5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGludm9rZUluc2VydEhvb2sodm5vZGUsIHF1ZXVlLCBpbml0aWFsKSB7XG4gICAgICAgIC8vIGRlbGF5IGluc2VydCBob29rcyBmb3IgY29tcG9uZW50IHJvb3Qgbm9kZXMsIGludm9rZSB0aGVtIGFmdGVyIHRoZVxuICAgICAgICAvLyBlbGVtZW50IGlzIHJlYWxseSBpbnNlcnRlZFxuICAgICAgICBpZiAoaXNUcnVlKGluaXRpYWwpICYmIGlzRGVmKHZub2RlLnBhcmVudCkpIHtcbiAgICAgICAgICAgIHZub2RlLnBhcmVudC5kYXRhLnBlbmRpbmdJbnNlcnQgPSBxdWV1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAodmFyIGlfNiA9IDA7IGlfNiA8IHF1ZXVlLmxlbmd0aDsgKytpXzYpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZVtpXzZdLmRhdGEuaG9vay5pbnNlcnQocXVldWVbaV82XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIGh5ZHJhdGlvbkJhaWxlZCA9IGZhbHNlO1xuICAgIC8vIGxpc3Qgb2YgbW9kdWxlcyB0aGF0IGNhbiBza2lwIGNyZWF0ZSBob29rIGR1cmluZyBoeWRyYXRpb24gYmVjYXVzZSB0aGV5XG4gICAgLy8gYXJlIGFscmVhZHkgcmVuZGVyZWQgb24gdGhlIGNsaWVudCBvciBoYXMgbm8gbmVlZCBmb3IgaW5pdGlhbGl6YXRpb25cbiAgICAvLyBOb3RlOiBzdHlsZSBpcyBleGNsdWRlZCBiZWNhdXNlIGl0IHJlbGllcyBvbiBpbml0aWFsIGNsb25lIGZvciBmdXR1cmVcbiAgICAvLyBkZWVwIHVwZGF0ZXMgKCM3MDYzKS5cbiAgICB2YXIgaXNSZW5kZXJlZE1vZHVsZSA9IG1ha2VNYXAoJ2F0dHJzLGNsYXNzLHN0YXRpY0NsYXNzLHN0YXRpY1N0eWxlLGtleScpO1xuICAgIC8vIE5vdGU6IHRoaXMgaXMgYSBicm93c2VyLW9ubHkgZnVuY3Rpb24gc28gd2UgY2FuIGFzc3VtZSBlbG1zIGFyZSBET00gbm9kZXMuXG4gICAgZnVuY3Rpb24gaHlkcmF0ZShlbG0sIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIGluVlByZSkge1xuICAgICAgICB2YXIgaTtcbiAgICAgICAgdmFyIHRhZyA9IHZub2RlLnRhZywgZGF0YSA9IHZub2RlLmRhdGEsIGNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW47XG4gICAgICAgIGluVlByZSA9IGluVlByZSB8fCAoZGF0YSAmJiBkYXRhLnByZSk7XG4gICAgICAgIHZub2RlLmVsbSA9IGVsbTtcbiAgICAgICAgaWYgKGlzVHJ1ZSh2bm9kZS5pc0NvbW1lbnQpICYmIGlzRGVmKHZub2RlLmFzeW5jRmFjdG9yeSkpIHtcbiAgICAgICAgICAgIHZub2RlLmlzQXN5bmNQbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhc3NlcnQgbm9kZSBtYXRjaFxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgaWYgKCFhc3NlcnROb2RlTWF0Y2goZWxtLCB2bm9kZSwgaW5WUHJlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICAgIGlmIChpc0RlZigoaSA9IGRhdGEuaG9vaykpICYmIGlzRGVmKChpID0gaS5pbml0KSkpXG4gICAgICAgICAgICAgICAgaSh2bm9kZSwgdHJ1ZSAvKiBoeWRyYXRpbmcgKi8pO1xuICAgICAgICAgICAgaWYgKGlzRGVmKChpID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSkge1xuICAgICAgICAgICAgICAgIC8vIGNoaWxkIGNvbXBvbmVudC4gaXQgc2hvdWxkIGhhdmUgaHlkcmF0ZWQgaXRzIG93biB0cmVlLlxuICAgICAgICAgICAgICAgIGluaXRDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRGVmKHRhZykpIHtcbiAgICAgICAgICAgIGlmIChpc0RlZihjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICAvLyBlbXB0eSBlbGVtZW50LCBhbGxvdyBjbGllbnQgdG8gcGljayB1cCBhbmQgcG9wdWxhdGUgY2hpbGRyZW5cbiAgICAgICAgICAgICAgICBpZiAoIWVsbS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdi1odG1sIGFuZCBkb21Qcm9wczogaW5uZXJIVE1MXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0RlZigoaSA9IGRhdGEpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaXNEZWYoKGkgPSBpLmRvbVByb3BzKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRGVmKChpID0gaS5pbm5lckhUTUwpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IGVsbS5pbm5lckhUTUwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWh5ZHJhdGlvbkJhaWxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoeWRyYXRpb25CYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BhcmVudDogJywgZWxtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdzZXJ2ZXIgaW5uZXJIVE1MOiAnLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdjbGllbnQgaW5uZXJIVE1MOiAnLCBlbG0uaW5uZXJIVE1MKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXRlcmF0ZSBhbmQgY29tcGFyZSBjaGlsZHJlbiBsaXN0c1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkcmVuTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkTm9kZSA9IGVsbS5maXJzdENoaWxkO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaV83ID0gMDsgaV83IDwgY2hpbGRyZW4ubGVuZ3RoOyBpXzcrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2hpbGROb2RlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFoeWRyYXRlKGNoaWxkTm9kZSwgY2hpbGRyZW5baV83XSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpblZQcmUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGNoaWxkTm9kZSBpcyBub3QgbnVsbCwgaXQgbWVhbnMgdGhlIGFjdHVhbCBjaGlsZE5vZGVzIGxpc3QgaXNcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvbmdlciB0aGFuIHRoZSB2aXJ0dWFsIGNoaWxkcmVuIGxpc3QuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkcmVuTWF0Y2ggfHwgY2hpbGROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFoeWRyYXRpb25CYWlsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHlkcmF0aW9uQmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYXJlbnQ6ICcsIGVsbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTWlzbWF0Y2hpbmcgY2hpbGROb2RlcyB2cy4gVk5vZGVzOiAnLCBlbG0uY2hpbGROb2RlcywgY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZnVsbEludm9rZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNSZW5kZXJlZE1vZHVsZShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdWxsSW52b2tlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludm9rZUNyZWF0ZUhvb2tzKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFmdWxsSW52b2tlICYmIGRhdGFbJ2NsYXNzJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZW5zdXJlIGNvbGxlY3RpbmcgZGVwcyBmb3IgZGVlcCBjbGFzcyBiaW5kaW5ncyBmb3IgZnV0dXJlIHVwZGF0ZXNcbiAgICAgICAgICAgICAgICAgICAgdHJhdmVyc2UoZGF0YVsnY2xhc3MnXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGVsbS5kYXRhICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICAgICAgICBlbG0uZGF0YSA9IHZub2RlLnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFzc2VydE5vZGVNYXRjaChub2RlLCB2bm9kZSwgaW5WUHJlKSB7XG4gICAgICAgIGlmIChpc0RlZih2bm9kZS50YWcpKSB7XG4gICAgICAgICAgICByZXR1cm4gKHZub2RlLnRhZy5pbmRleE9mKCd2dWUtY29tcG9uZW50JykgPT09IDAgfHxcbiAgICAgICAgICAgICAgICAoIWlzVW5rbm93bkVsZW1lbnQodm5vZGUsIGluVlByZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgdm5vZGUudGFnLnRvTG93ZXJDYXNlKCkgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAobm9kZS50YWdOYW1lICYmIG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09ICh2bm9kZS5pc0NvbW1lbnQgPyA4IDogMyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoKG9sZFZub2RlLCB2bm9kZSwgaHlkcmF0aW5nLCByZW1vdmVPbmx5KSB7XG4gICAgICAgIGlmIChpc1VuZGVmKHZub2RlKSkge1xuICAgICAgICAgICAgaWYgKGlzRGVmKG9sZFZub2RlKSlcbiAgICAgICAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayhvbGRWbm9kZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlzSW5pdGlhbFBhdGNoID0gZmFsc2U7XG4gICAgICAgIHZhciBpbnNlcnRlZFZub2RlUXVldWUgPSBbXTtcbiAgICAgICAgaWYgKGlzVW5kZWYob2xkVm5vZGUpKSB7XG4gICAgICAgICAgICAvLyBlbXB0eSBtb3VudCAobGlrZWx5IGFzIGNvbXBvbmVudCksIGNyZWF0ZSBuZXcgcm9vdCBlbGVtZW50XG4gICAgICAgICAgICBpc0luaXRpYWxQYXRjaCA9IHRydWU7XG4gICAgICAgICAgICBjcmVhdGVFbG0odm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgaXNSZWFsRWxlbWVudCA9IGlzRGVmKG9sZFZub2RlLm5vZGVUeXBlKTtcbiAgICAgICAgICAgIGlmICghaXNSZWFsRWxlbWVudCAmJiBzYW1lVm5vZGUob2xkVm5vZGUsIHZub2RlKSkge1xuICAgICAgICAgICAgICAgIC8vIHBhdGNoIGV4aXN0aW5nIHJvb3Qgbm9kZVxuICAgICAgICAgICAgICAgIHBhdGNoVm5vZGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG51bGwsIG51bGwsIHJlbW92ZU9ubHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVhbEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbW91bnRpbmcgdG8gYSByZWFsIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhpcyBpcyBzZXJ2ZXItcmVuZGVyZWQgY29udGVudCBhbmQgaWYgd2UgY2FuIHBlcmZvcm1cbiAgICAgICAgICAgICAgICAgICAgLy8gYSBzdWNjZXNzZnVsIGh5ZHJhdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9sZFZub2RlLm5vZGVUeXBlID09PSAxICYmIG9sZFZub2RlLmhhc0F0dHJpYnV0ZShTU1JfQVRUUikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9sZFZub2RlLnJlbW92ZUF0dHJpYnV0ZShTU1JfQVRUUik7XG4gICAgICAgICAgICAgICAgICAgICAgICBoeWRyYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1RydWUoaHlkcmF0aW5nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGh5ZHJhdGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlSW5zZXJ0SG9vayh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2xkVm5vZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybignVGhlIGNsaWVudC1zaWRlIHJlbmRlcmVkIHZpcnR1YWwgRE9NIHRyZWUgaXMgbm90IG1hdGNoaW5nICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2VydmVyLXJlbmRlcmVkIGNvbnRlbnQuIFRoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSBpbmNvcnJlY3QgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdIVE1MIG1hcmt1cCwgZm9yIGV4YW1wbGUgbmVzdGluZyBibG9jay1sZXZlbCBlbGVtZW50cyBpbnNpZGUgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8cD4sIG9yIG1pc3NpbmcgPHRib2R5Pi4gQmFpbGluZyBoeWRyYXRpb24gYW5kIHBlcmZvcm1pbmcgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmdWxsIGNsaWVudC1zaWRlIHJlbmRlci4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBlaXRoZXIgbm90IHNlcnZlci1yZW5kZXJlZCwgb3IgaHlkcmF0aW9uIGZhaWxlZC5cbiAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGFuIGVtcHR5IG5vZGUgYW5kIHJlcGxhY2UgaXRcbiAgICAgICAgICAgICAgICAgICAgb2xkVm5vZGUgPSBlbXB0eU5vZGVBdChvbGRWbm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHJlcGxhY2luZyBleGlzdGluZyBlbGVtZW50XG4gICAgICAgICAgICAgICAgdmFyIG9sZEVsbSA9IG9sZFZub2RlLmVsbTtcbiAgICAgICAgICAgICAgICB2YXIgcGFyZW50RWxtID0gbm9kZU9wcy5wYXJlbnROb2RlKG9sZEVsbSk7XG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBub2RlXG4gICAgICAgICAgICAgICAgY3JlYXRlRWxtKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIFxuICAgICAgICAgICAgICAgIC8vIGV4dHJlbWVseSByYXJlIGVkZ2UgY2FzZTogZG8gbm90IGluc2VydCBpZiBvbGQgZWxlbWVudCBpcyBpbiBhXG4gICAgICAgICAgICAgICAgLy8gbGVhdmluZyB0cmFuc2l0aW9uLiBPbmx5IGhhcHBlbnMgd2hlbiBjb21iaW5pbmcgdHJhbnNpdGlvbiArXG4gICAgICAgICAgICAgICAgLy8ga2VlcC1hbGl2ZSArIEhPQ3MuICgjNDU5MClcbiAgICAgICAgICAgICAgICBvbGRFbG0uX2xlYXZlQ2IgPyBudWxsIDogcGFyZW50RWxtLCBub2RlT3BzLm5leHRTaWJsaW5nKG9sZEVsbSkpO1xuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBwYXJlbnQgcGxhY2Vob2xkZXIgbm9kZSBlbGVtZW50LCByZWN1cnNpdmVseVxuICAgICAgICAgICAgICAgIGlmIChpc0RlZih2bm9kZS5wYXJlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhbmNlc3RvciA9IHZub2RlLnBhcmVudDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhdGNoYWJsZSA9IGlzUGF0Y2hhYmxlKHZub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpXzggPSAwOyBpXzggPCBjYnMuZGVzdHJveS5sZW5ndGg7ICsraV84KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2JzLmRlc3Ryb3lbaV84XShhbmNlc3Rvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3Rvci5lbG0gPSB2bm9kZS5lbG07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGF0Y2hhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaV85ID0gMDsgaV85IDwgY2JzLmNyZWF0ZS5sZW5ndGg7ICsraV85KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNicy5jcmVhdGVbaV85XShlbXB0eU5vZGUsIGFuY2VzdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIzY1MTNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnZva2UgaW5zZXJ0IGhvb2tzIHRoYXQgbWF5IGhhdmUgYmVlbiBtZXJnZWQgYnkgY3JlYXRlIGhvb2tzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGUuZy4gZm9yIGRpcmVjdGl2ZXMgdGhhdCB1c2VzIHRoZSBcImluc2VydGVkXCIgaG9vay5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5zZXJ0XzEgPSBhbmNlc3Rvci5kYXRhLmhvb2suaW5zZXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnRfMS5tZXJnZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RhcnQgYXQgaW5kZXggMSB0byBhdm9pZCByZS1pbnZva2luZyBjb21wb25lbnQgbW91bnRlZCBob29rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb25lIGluc2VydCBob29rcyB0byBhdm9pZCBiZWluZyBtdXRhdGVkIGR1cmluZyBpdGVyYXRpb24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGUuZy4gZm9yIGN1c3RvbWVkIGRpcmVjdGl2ZXMgdW5kZXIgdHJhbnNpdGlvbiBncm91cC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsb25lZCA9IGluc2VydF8xLmZucy5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaV8xMCA9IDA7IGlfMTAgPCBjbG9uZWQubGVuZ3RoOyBpXzEwKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lZFtpXzEwXSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJSZWYoYW5jZXN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZGVzdHJveSBvbGQgbm9kZVxuICAgICAgICAgICAgICAgIGlmIChpc0RlZihwYXJlbnRFbG0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVZub2Rlcyhbb2xkVm5vZGVdLCAwLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNEZWYob2xkVm5vZGUudGFnKSkge1xuICAgICAgICAgICAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayhvbGRWbm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGludm9rZUluc2VydEhvb2sodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgaXNJbml0aWFsUGF0Y2gpO1xuICAgICAgICByZXR1cm4gdm5vZGUuZWxtO1xuICAgIH07XG59XG5cbnZhciBkaXJlY3RpdmVzID0ge1xuICAgIGNyZWF0ZTogdXBkYXRlRGlyZWN0aXZlcyxcbiAgICB1cGRhdGU6IHVwZGF0ZURpcmVjdGl2ZXMsXG4gICAgZGVzdHJveTogZnVuY3Rpb24gdW5iaW5kRGlyZWN0aXZlcyh2bm9kZSkge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGVtcHR5Tm9kZSBpcyBub3QgVk5vZGVXaXRoRGF0YVxuICAgICAgICB1cGRhdGVEaXJlY3RpdmVzKHZub2RlLCBlbXB0eU5vZGUpO1xuICAgIH1cbn07XG5mdW5jdGlvbiB1cGRhdGVEaXJlY3RpdmVzKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIGlmIChvbGRWbm9kZS5kYXRhLmRpcmVjdGl2ZXMgfHwgdm5vZGUuZGF0YS5kaXJlY3RpdmVzKSB7XG4gICAgICAgIF91cGRhdGUob2xkVm5vZGUsIHZub2RlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfdXBkYXRlKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIHZhciBpc0NyZWF0ZSA9IG9sZFZub2RlID09PSBlbXB0eU5vZGU7XG4gICAgdmFyIGlzRGVzdHJveSA9IHZub2RlID09PSBlbXB0eU5vZGU7XG4gICAgdmFyIG9sZERpcnMgPSBub3JtYWxpemVEaXJlY3RpdmVzKG9sZFZub2RlLmRhdGEuZGlyZWN0aXZlcywgb2xkVm5vZGUuY29udGV4dCk7XG4gICAgdmFyIG5ld0RpcnMgPSBub3JtYWxpemVEaXJlY3RpdmVzKHZub2RlLmRhdGEuZGlyZWN0aXZlcywgdm5vZGUuY29udGV4dCk7XG4gICAgdmFyIGRpcnNXaXRoSW5zZXJ0ID0gW107XG4gICAgdmFyIGRpcnNXaXRoUG9zdHBhdGNoID0gW107XG4gICAgdmFyIGtleSwgb2xkRGlyLCBkaXI7XG4gICAgZm9yIChrZXkgaW4gbmV3RGlycykge1xuICAgICAgICBvbGREaXIgPSBvbGREaXJzW2tleV07XG4gICAgICAgIGRpciA9IG5ld0RpcnNba2V5XTtcbiAgICAgICAgaWYgKCFvbGREaXIpIHtcbiAgICAgICAgICAgIC8vIG5ldyBkaXJlY3RpdmUsIGJpbmRcbiAgICAgICAgICAgIGNhbGxIb29rKGRpciwgJ2JpbmQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgICAgICAgaWYgKGRpci5kZWYgJiYgZGlyLmRlZi5pbnNlcnRlZCkge1xuICAgICAgICAgICAgICAgIGRpcnNXaXRoSW5zZXJ0LnB1c2goZGlyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGV4aXN0aW5nIGRpcmVjdGl2ZSwgdXBkYXRlXG4gICAgICAgICAgICBkaXIub2xkVmFsdWUgPSBvbGREaXIudmFsdWU7XG4gICAgICAgICAgICBkaXIub2xkQXJnID0gb2xkRGlyLmFyZztcbiAgICAgICAgICAgIGNhbGxIb29rKGRpciwgJ3VwZGF0ZScsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICAgICAgICBpZiAoZGlyLmRlZiAmJiBkaXIuZGVmLmNvbXBvbmVudFVwZGF0ZWQpIHtcbiAgICAgICAgICAgICAgICBkaXJzV2l0aFBvc3RwYXRjaC5wdXNoKGRpcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRpcnNXaXRoSW5zZXJ0Lmxlbmd0aCkge1xuICAgICAgICB2YXIgY2FsbEluc2VydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlyc1dpdGhJbnNlcnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjYWxsSG9vayhkaXJzV2l0aEluc2VydFtpXSwgJ2luc2VydGVkJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGlzQ3JlYXRlKSB7XG4gICAgICAgICAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ2luc2VydCcsIGNhbGxJbnNlcnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbEluc2VydCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChkaXJzV2l0aFBvc3RwYXRjaC5sZW5ndGgpIHtcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdwb3N0cGF0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpcnNXaXRoUG9zdHBhdGNoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2FsbEhvb2soZGlyc1dpdGhQb3N0cGF0Y2hbaV0sICdjb21wb25lbnRVcGRhdGVkJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghaXNDcmVhdGUpIHtcbiAgICAgICAgZm9yIChrZXkgaW4gb2xkRGlycykge1xuICAgICAgICAgICAgaWYgKCFuZXdEaXJzW2tleV0pIHtcbiAgICAgICAgICAgICAgICAvLyBubyBsb25nZXIgcHJlc2VudCwgdW5iaW5kXG4gICAgICAgICAgICAgICAgY2FsbEhvb2sob2xkRGlyc1trZXldLCAndW5iaW5kJywgb2xkVm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxudmFyIGVtcHR5TW9kaWZpZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmZ1bmN0aW9uIG5vcm1hbGl6ZURpcmVjdGl2ZXMoZGlycywgdm0pIHtcbiAgICB2YXIgcmVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBpZiAoIWRpcnMpIHtcbiAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHZhciBpLCBkaXI7XG4gICAgZm9yIChpID0gMDsgaSA8IGRpcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGlyID0gZGlyc1tpXTtcbiAgICAgICAgaWYgKCFkaXIubW9kaWZpZXJzKSB7XG4gICAgICAgICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgICAgICAgIGRpci5tb2RpZmllcnMgPSBlbXB0eU1vZGlmaWVycztcbiAgICAgICAgfVxuICAgICAgICByZXNbZ2V0UmF3RGlyTmFtZShkaXIpXSA9IGRpcjtcbiAgICAgICAgaWYgKHZtLl9zZXR1cFN0YXRlICYmIHZtLl9zZXR1cFN0YXRlLl9fc2ZjKSB7XG4gICAgICAgICAgICB2YXIgc2V0dXBEZWYgPSBkaXIuZGVmIHx8IHJlc29sdmVBc3NldCh2bSwgJ19zZXR1cFN0YXRlJywgJ3YtJyArIGRpci5uYW1lKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2V0dXBEZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBkaXIuZGVmID0ge1xuICAgICAgICAgICAgICAgICAgICBiaW5kOiBzZXR1cERlZixcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlOiBzZXR1cERlZixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlyLmRlZiA9IHNldHVwRGVmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRpci5kZWYgPSBkaXIuZGVmIHx8IHJlc29sdmVBc3NldCh2bS4kb3B0aW9ucywgJ2RpcmVjdGl2ZXMnLCBkaXIubmFtZSwgdHJ1ZSk7XG4gICAgfVxuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBnZXRSYXdEaXJOYW1lKGRpcikge1xuICAgIHJldHVybiAoZGlyLnJhd05hbWUgfHwgXCJcIi5jb25jYXQoZGlyLm5hbWUsIFwiLlwiKS5jb25jYXQoT2JqZWN0LmtleXMoZGlyLm1vZGlmaWVycyB8fCB7fSkuam9pbignLicpKSk7XG59XG5mdW5jdGlvbiBjYWxsSG9vayhkaXIsIGhvb2ssIHZub2RlLCBvbGRWbm9kZSwgaXNEZXN0cm95KSB7XG4gICAgdmFyIGZuID0gZGlyLmRlZiAmJiBkaXIuZGVmW2hvb2tdO1xuICAgIGlmIChmbikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm4odm5vZGUuZWxtLCBkaXIsIHZub2RlLCBvbGRWbm9kZSwgaXNEZXN0cm95KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaGFuZGxlRXJyb3IoZSwgdm5vZGUuY29udGV4dCwgXCJkaXJlY3RpdmUgXCIuY29uY2F0KGRpci5uYW1lLCBcIiBcIikuY29uY2F0KGhvb2ssIFwiIGhvb2tcIikpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG52YXIgYmFzZU1vZHVsZXMgPSBbcmVmLCBkaXJlY3RpdmVzXTtcblxuZnVuY3Rpb24gdXBkYXRlQXR0cnMob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgdmFyIG9wdHMgPSB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICAgIGlmIChpc0RlZihvcHRzKSAmJiBvcHRzLkN0b3Iub3B0aW9ucy5pbmhlcml0QXR0cnMgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5hdHRycykgJiYgaXNVbmRlZih2bm9kZS5kYXRhLmF0dHJzKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBrZXksIGN1ciwgb2xkO1xuICAgIHZhciBlbG0gPSB2bm9kZS5lbG07XG4gICAgdmFyIG9sZEF0dHJzID0gb2xkVm5vZGUuZGF0YS5hdHRycyB8fCB7fTtcbiAgICB2YXIgYXR0cnMgPSB2bm9kZS5kYXRhLmF0dHJzIHx8IHt9O1xuICAgIC8vIGNsb25lIG9ic2VydmVkIG9iamVjdHMsIGFzIHRoZSB1c2VyIHByb2JhYmx5IHdhbnRzIHRvIG11dGF0ZSBpdFxuICAgIGlmIChpc0RlZihhdHRycy5fX29iX18pIHx8IGlzVHJ1ZShhdHRycy5fdl9hdHRyX3Byb3h5KSkge1xuICAgICAgICBhdHRycyA9IHZub2RlLmRhdGEuYXR0cnMgPSBleHRlbmQoe30sIGF0dHJzKTtcbiAgICB9XG4gICAgZm9yIChrZXkgaW4gYXR0cnMpIHtcbiAgICAgICAgY3VyID0gYXR0cnNba2V5XTtcbiAgICAgICAgb2xkID0gb2xkQXR0cnNba2V5XTtcbiAgICAgICAgaWYgKG9sZCAhPT0gY3VyKSB7XG4gICAgICAgICAgICBzZXRBdHRyKGVsbSwga2V5LCBjdXIsIHZub2RlLmRhdGEucHJlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyAjNDM5MTogaW4gSUU5LCBzZXR0aW5nIHR5cGUgY2FuIHJlc2V0IHZhbHVlIGZvciBpbnB1dFt0eXBlPXJhZGlvXVxuICAgIC8vICM2NjY2OiBJRS9FZGdlIGZvcmNlcyBwcm9ncmVzcyB2YWx1ZSBkb3duIHRvIDEgYmVmb3JlIHNldHRpbmcgYSBtYXhcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoKGlzSUUgfHwgaXNFZGdlKSAmJiBhdHRycy52YWx1ZSAhPT0gb2xkQXR0cnMudmFsdWUpIHtcbiAgICAgICAgc2V0QXR0cihlbG0sICd2YWx1ZScsIGF0dHJzLnZhbHVlKTtcbiAgICB9XG4gICAgZm9yIChrZXkgaW4gb2xkQXR0cnMpIHtcbiAgICAgICAgaWYgKGlzVW5kZWYoYXR0cnNba2V5XSkpIHtcbiAgICAgICAgICAgIGlmIChpc1hsaW5rKGtleSkpIHtcbiAgICAgICAgICAgICAgICBlbG0ucmVtb3ZlQXR0cmlidXRlTlMoeGxpbmtOUywgZ2V0WGxpbmtQcm9wKGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWlzRW51bWVyYXRlZEF0dHIoa2V5KSkge1xuICAgICAgICAgICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHNldEF0dHIoZWwsIGtleSwgdmFsdWUsIGlzSW5QcmUpIHtcbiAgICBpZiAoaXNJblByZSB8fCBlbC50YWdOYW1lLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgICAgIGJhc2VTZXRBdHRyKGVsLCBrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNCb29sZWFuQXR0cihrZXkpKSB7XG4gICAgICAgIC8vIHNldCBhdHRyaWJ1dGUgZm9yIGJsYW5rIHZhbHVlXG4gICAgICAgIC8vIGUuZy4gPG9wdGlvbiBkaXNhYmxlZD5TZWxlY3Qgb25lPC9vcHRpb24+XG4gICAgICAgIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyB0ZWNobmljYWxseSBhbGxvd2Z1bGxzY3JlZW4gaXMgYSBib29sZWFuIGF0dHJpYnV0ZSBmb3IgPGlmcmFtZT4sXG4gICAgICAgICAgICAvLyBidXQgRmxhc2ggZXhwZWN0cyBhIHZhbHVlIG9mIFwidHJ1ZVwiIHdoZW4gdXNlZCBvbiA8ZW1iZWQ+IHRhZ1xuICAgICAgICAgICAgdmFsdWUgPSBrZXkgPT09ICdhbGxvd2Z1bGxzY3JlZW4nICYmIGVsLnRhZ05hbWUgPT09ICdFTUJFRCcgPyAndHJ1ZScgOiBrZXk7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNFbnVtZXJhdGVkQXR0cihrZXkpKSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShrZXksIGNvbnZlcnRFbnVtZXJhdGVkVmFsdWUoa2V5LCB2YWx1ZSkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1hsaW5rKGtleSkpIHtcbiAgICAgICAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGVOUyh4bGlua05TLCBnZXRYbGlua1Byb3Aoa2V5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGVOUyh4bGlua05TLCBrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYmFzZVNldEF0dHIoZWwsIGtleSwgdmFsdWUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGJhc2VTZXRBdHRyKGVsLCBrZXksIHZhbHVlKSB7XG4gICAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gIzcxMzg6IElFMTAgJiAxMSBmaXJlcyBpbnB1dCBldmVudCB3aGVuIHNldHRpbmcgcGxhY2Vob2xkZXIgb25cbiAgICAgICAgLy8gPHRleHRhcmVhPi4uLiBibG9jayB0aGUgZmlyc3QgaW5wdXQgZXZlbnQgYW5kIHJlbW92ZSB0aGUgYmxvY2tlclxuICAgICAgICAvLyBpbW1lZGlhdGVseS5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChpc0lFICYmXG4gICAgICAgICAgICAhaXNJRTkgJiZcbiAgICAgICAgICAgIGVsLnRhZ05hbWUgPT09ICdURVhUQVJFQScgJiZcbiAgICAgICAgICAgIGtleSA9PT0gJ3BsYWNlaG9sZGVyJyAmJlxuICAgICAgICAgICAgdmFsdWUgIT09ICcnICYmXG4gICAgICAgICAgICAhZWwuX19pZXBoKSB7XG4gICAgICAgICAgICB2YXIgYmxvY2tlcl8xID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2lucHV0JywgYmxvY2tlcl8xKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGJsb2NrZXJfMSk7XG4gICAgICAgICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgICAgICAgIGVsLl9faWVwaCA9IHRydWU7IC8qIElFIHBsYWNlaG9sZGVyIHBhdGNoZWQgKi9cbiAgICAgICAgfVxuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gICAgfVxufVxudmFyIGF0dHJzID0ge1xuICAgIGNyZWF0ZTogdXBkYXRlQXR0cnMsXG4gICAgdXBkYXRlOiB1cGRhdGVBdHRyc1xufTtcblxuZnVuY3Rpb24gdXBkYXRlQ2xhc3Mob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgdmFyIGVsID0gdm5vZGUuZWxtO1xuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgb2xkRGF0YSA9IG9sZFZub2RlLmRhdGE7XG4gICAgaWYgKGlzVW5kZWYoZGF0YS5zdGF0aWNDbGFzcykgJiZcbiAgICAgICAgaXNVbmRlZihkYXRhLmNsYXNzKSAmJlxuICAgICAgICAoaXNVbmRlZihvbGREYXRhKSB8fFxuICAgICAgICAgICAgKGlzVW5kZWYob2xkRGF0YS5zdGF0aWNDbGFzcykgJiYgaXNVbmRlZihvbGREYXRhLmNsYXNzKSkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGNscyA9IGdlbkNsYXNzRm9yVm5vZGUodm5vZGUpO1xuICAgIC8vIGhhbmRsZSB0cmFuc2l0aW9uIGNsYXNzZXNcbiAgICB2YXIgdHJhbnNpdGlvbkNsYXNzID0gZWwuX3RyYW5zaXRpb25DbGFzc2VzO1xuICAgIGlmIChpc0RlZih0cmFuc2l0aW9uQ2xhc3MpKSB7XG4gICAgICAgIGNscyA9IGNvbmNhdChjbHMsIHN0cmluZ2lmeUNsYXNzKHRyYW5zaXRpb25DbGFzcykpO1xuICAgIH1cbiAgICAvLyBzZXQgdGhlIGNsYXNzXG4gICAgaWYgKGNscyAhPT0gZWwuX3ByZXZDbGFzcykge1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgY2xzKTtcbiAgICAgICAgZWwuX3ByZXZDbGFzcyA9IGNscztcbiAgICB9XG59XG52YXIga2xhc3MgPSB7XG4gICAgY3JlYXRlOiB1cGRhdGVDbGFzcyxcbiAgICB1cGRhdGU6IHVwZGF0ZUNsYXNzXG59O1xuXG4vLyBpbiBzb21lIGNhc2VzLCB0aGUgZXZlbnQgdXNlZCBoYXMgdG8gYmUgZGV0ZXJtaW5lZCBhdCBydW50aW1lXG4vLyBzbyB3ZSB1c2VkIHNvbWUgcmVzZXJ2ZWQgdG9rZW5zIGR1cmluZyBjb21waWxlLlxudmFyIFJBTkdFX1RPS0VOID0gJ19fcic7XG52YXIgQ0hFQ0tCT1hfUkFESU9fVE9LRU4gPSAnX19jJztcblxuLy8gbm9ybWFsaXplIHYtbW9kZWwgZXZlbnQgdG9rZW5zIHRoYXQgY2FuIG9ubHkgYmUgZGV0ZXJtaW5lZCBhdCBydW50aW1lLlxuLy8gaXQncyBpbXBvcnRhbnQgdG8gcGxhY2UgdGhlIGV2ZW50IGFzIHRoZSBmaXJzdCBpbiB0aGUgYXJyYXkgYmVjYXVzZVxuLy8gdGhlIHdob2xlIHBvaW50IGlzIGVuc3VyaW5nIHRoZSB2LW1vZGVsIGNhbGxiYWNrIGdldHMgY2FsbGVkIGJlZm9yZVxuLy8gdXNlci1hdHRhY2hlZCBoYW5kbGVycy5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUV2ZW50cyhvbikge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpc0RlZihvbltSQU5HRV9UT0tFTl0pKSB7XG4gICAgICAgIC8vIElFIGlucHV0W3R5cGU9cmFuZ2VdIG9ubHkgc3VwcG9ydHMgYGNoYW5nZWAgZXZlbnRcbiAgICAgICAgdmFyIGV2ZW50XzEgPSBpc0lFID8gJ2NoYW5nZScgOiAnaW5wdXQnO1xuICAgICAgICBvbltldmVudF8xXSA9IFtdLmNvbmNhdChvbltSQU5HRV9UT0tFTl0sIG9uW2V2ZW50XzFdIHx8IFtdKTtcbiAgICAgICAgZGVsZXRlIG9uW1JBTkdFX1RPS0VOXTtcbiAgICB9XG4gICAgLy8gVGhpcyB3YXMgb3JpZ2luYWxseSBpbnRlbmRlZCB0byBmaXggIzQ1MjEgYnV0IG5vIGxvbmdlciBuZWNlc3NhcnlcbiAgICAvLyBhZnRlciAyLjUuIEtlZXBpbmcgaXQgZm9yIGJhY2t3YXJkcyBjb21wYXQgd2l0aCBnZW5lcmF0ZWQgY29kZSBmcm9tIDwgMi40XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzRGVmKG9uW0NIRUNLQk9YX1JBRElPX1RPS0VOXSkpIHtcbiAgICAgICAgb24uY2hhbmdlID0gW10uY29uY2F0KG9uW0NIRUNLQk9YX1JBRElPX1RPS0VOXSwgb24uY2hhbmdlIHx8IFtdKTtcbiAgICAgICAgZGVsZXRlIG9uW0NIRUNLQk9YX1JBRElPX1RPS0VOXTtcbiAgICB9XG59XG52YXIgdGFyZ2V0O1xuZnVuY3Rpb24gY3JlYXRlT25jZUhhbmRsZXIoZXZlbnQsIGhhbmRsZXIsIGNhcHR1cmUpIHtcbiAgICB2YXIgX3RhcmdldCA9IHRhcmdldDsgLy8gc2F2ZSBjdXJyZW50IHRhcmdldCBlbGVtZW50IGluIGNsb3N1cmVcbiAgICByZXR1cm4gZnVuY3Rpb24gb25jZUhhbmRsZXIoKSB7XG4gICAgICAgIHZhciByZXMgPSBoYW5kbGVyLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIGlmIChyZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJlbW92ZShldmVudCwgb25jZUhhbmRsZXIsIGNhcHR1cmUsIF90YXJnZXQpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbi8vICM5NDQ2OiBGaXJlZm94IDw9IDUzIChpbiBwYXJ0aWN1bGFyLCBFU1IgNTIpIGhhcyBpbmNvcnJlY3QgRXZlbnQudGltZVN0YW1wXG4vLyBpbXBsZW1lbnRhdGlvbiBhbmQgZG9lcyBub3QgZmlyZSBtaWNyb3Rhc2tzIGluIGJldHdlZW4gZXZlbnQgcHJvcGFnYXRpb24sIHNvXG4vLyBzYWZlIHRvIGV4Y2x1ZGUuXG52YXIgdXNlTWljcm90YXNrRml4ID0gaXNVc2luZ01pY3JvVGFzayAmJiAhKGlzRkYgJiYgTnVtYmVyKGlzRkZbMV0pIDw9IDUzKTtcbmZ1bmN0aW9uIGFkZChuYW1lLCBoYW5kbGVyLCBjYXB0dXJlLCBwYXNzaXZlKSB7XG4gICAgLy8gYXN5bmMgZWRnZSBjYXNlICM2NTY2OiBpbm5lciBjbGljayBldmVudCB0cmlnZ2VycyBwYXRjaCwgZXZlbnQgaGFuZGxlclxuICAgIC8vIGF0dGFjaGVkIHRvIG91dGVyIGVsZW1lbnQgZHVyaW5nIHBhdGNoLCBhbmQgdHJpZ2dlcmVkIGFnYWluLiBUaGlzXG4gICAgLy8gaGFwcGVucyBiZWNhdXNlIGJyb3dzZXJzIGZpcmUgbWljcm90YXNrIHRpY2tzIGJldHdlZW4gZXZlbnQgcHJvcGFnYXRpb24uXG4gICAgLy8gdGhlIHNvbHV0aW9uIGlzIHNpbXBsZTogd2Ugc2F2ZSB0aGUgdGltZXN0YW1wIHdoZW4gYSBoYW5kbGVyIGlzIGF0dGFjaGVkLFxuICAgIC8vIGFuZCB0aGUgaGFuZGxlciB3b3VsZCBvbmx5IGZpcmUgaWYgdGhlIGV2ZW50IHBhc3NlZCB0byBpdCB3YXMgZmlyZWRcbiAgICAvLyBBRlRFUiBpdCB3YXMgYXR0YWNoZWQuXG4gICAgaWYgKHVzZU1pY3JvdGFza0ZpeCkge1xuICAgICAgICB2YXIgYXR0YWNoZWRUaW1lc3RhbXBfMSA9IGN1cnJlbnRGbHVzaFRpbWVzdGFtcDtcbiAgICAgICAgdmFyIG9yaWdpbmFsXzEgPSBoYW5kbGVyO1xuICAgICAgICAvL0B0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgaGFuZGxlciA9IG9yaWdpbmFsXzEuX3dyYXBwZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgLy8gbm8gYnViYmxpbmcsIHNob3VsZCBhbHdheXMgZmlyZS5cbiAgICAgICAgICAgIC8vIHRoaXMgaXMganVzdCBhIHNhZmV0eSBuZXQgaW4gY2FzZSBldmVudC50aW1lU3RhbXAgaXMgdW5yZWxpYWJsZSBpblxuICAgICAgICAgICAgLy8gY2VydGFpbiB3ZWlyZCBlbnZpcm9ubWVudHMuLi5cbiAgICAgICAgICAgIGUudGFyZ2V0ID09PSBlLmN1cnJlbnRUYXJnZXQgfHxcbiAgICAgICAgICAgICAgICAvLyBldmVudCBpcyBmaXJlZCBhZnRlciBoYW5kbGVyIGF0dGFjaG1lbnRcbiAgICAgICAgICAgICAgICBlLnRpbWVTdGFtcCA+PSBhdHRhY2hlZFRpbWVzdGFtcF8xIHx8XG4gICAgICAgICAgICAgICAgLy8gYmFpbCBmb3IgZW52aXJvbm1lbnRzIHRoYXQgaGF2ZSBidWdneSBldmVudC50aW1lU3RhbXAgaW1wbGVtZW50YXRpb25zXG4gICAgICAgICAgICAgICAgLy8gIzk0NjIgaU9TIDkgYnVnOiBldmVudC50aW1lU3RhbXAgaXMgMCBhZnRlciBoaXN0b3J5LnB1c2hTdGF0ZVxuICAgICAgICAgICAgICAgIC8vICM5NjgxIFF0V2ViRW5naW5lIGV2ZW50LnRpbWVTdGFtcCBpcyBuZWdhdGl2ZSB2YWx1ZVxuICAgICAgICAgICAgICAgIGUudGltZVN0YW1wIDw9IDAgfHxcbiAgICAgICAgICAgICAgICAvLyAjOTQ0OCBiYWlsIGlmIGV2ZW50IGlzIGZpcmVkIGluIGFub3RoZXIgZG9jdW1lbnQgaW4gYSBtdWx0aS1wYWdlXG4gICAgICAgICAgICAgICAgLy8gZWxlY3Ryb24vbncuanMgYXBwLCBzaW5jZSBldmVudC50aW1lU3RhbXAgd2lsbCBiZSB1c2luZyBhIGRpZmZlcmVudFxuICAgICAgICAgICAgICAgIC8vIHN0YXJ0aW5nIHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgIGUudGFyZ2V0Lm93bmVyRG9jdW1lbnQgIT09IGRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsXzEuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgaGFuZGxlciwgc3VwcG9ydHNQYXNzaXZlID8geyBjYXB0dXJlOiBjYXB0dXJlLCBwYXNzaXZlOiBwYXNzaXZlIH0gOiBjYXB0dXJlKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZShuYW1lLCBoYW5kbGVyLCBjYXB0dXJlLCBfdGFyZ2V0KSB7XG4gICAgKF90YXJnZXQgfHwgdGFyZ2V0KS5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIFxuICAgIC8vQHRzLWV4cGVjdC1lcnJvclxuICAgIGhhbmRsZXIuX3dyYXBwZXIgfHwgaGFuZGxlciwgY2FwdHVyZSk7XG59XG5mdW5jdGlvbiB1cGRhdGVET01MaXN0ZW5lcnMob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5vbikgJiYgaXNVbmRlZih2bm9kZS5kYXRhLm9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBvbiA9IHZub2RlLmRhdGEub24gfHwge307XG4gICAgdmFyIG9sZE9uID0gb2xkVm5vZGUuZGF0YS5vbiB8fCB7fTtcbiAgICAvLyB2bm9kZSBpcyBlbXB0eSB3aGVuIHJlbW92aW5nIGFsbCBsaXN0ZW5lcnMsXG4gICAgLy8gYW5kIHVzZSBvbGQgdm5vZGUgZG9tIGVsZW1lbnRcbiAgICB0YXJnZXQgPSB2bm9kZS5lbG0gfHwgb2xkVm5vZGUuZWxtO1xuICAgIG5vcm1hbGl6ZUV2ZW50cyhvbik7XG4gICAgdXBkYXRlTGlzdGVuZXJzKG9uLCBvbGRPbiwgYWRkLCByZW1vdmUsIGNyZWF0ZU9uY2VIYW5kbGVyLCB2bm9kZS5jb250ZXh0KTtcbiAgICB0YXJnZXQgPSB1bmRlZmluZWQ7XG59XG52YXIgZXZlbnRzID0ge1xuICAgIGNyZWF0ZTogdXBkYXRlRE9NTGlzdGVuZXJzLFxuICAgIHVwZGF0ZTogdXBkYXRlRE9NTGlzdGVuZXJzLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZW1wdHlOb2RlIGhhcyBhY3R1YWxseSBkYXRhXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKHZub2RlKSB7IHJldHVybiB1cGRhdGVET01MaXN0ZW5lcnModm5vZGUsIGVtcHR5Tm9kZSk7IH1cbn07XG5cbnZhciBzdmdDb250YWluZXI7XG5mdW5jdGlvbiB1cGRhdGVET01Qcm9wcyhvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICBpZiAoaXNVbmRlZihvbGRWbm9kZS5kYXRhLmRvbVByb3BzKSAmJiBpc1VuZGVmKHZub2RlLmRhdGEuZG9tUHJvcHMpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGtleSwgY3VyO1xuICAgIHZhciBlbG0gPSB2bm9kZS5lbG07XG4gICAgdmFyIG9sZFByb3BzID0gb2xkVm5vZGUuZGF0YS5kb21Qcm9wcyB8fCB7fTtcbiAgICB2YXIgcHJvcHMgPSB2bm9kZS5kYXRhLmRvbVByb3BzIHx8IHt9O1xuICAgIC8vIGNsb25lIG9ic2VydmVkIG9iamVjdHMsIGFzIHRoZSB1c2VyIHByb2JhYmx5IHdhbnRzIHRvIG11dGF0ZSBpdFxuICAgIGlmIChpc0RlZihwcm9wcy5fX29iX18pIHx8IGlzVHJ1ZShwcm9wcy5fdl9hdHRyX3Byb3h5KSkge1xuICAgICAgICBwcm9wcyA9IHZub2RlLmRhdGEuZG9tUHJvcHMgPSBleHRlbmQoe30sIHByb3BzKTtcbiAgICB9XG4gICAgZm9yIChrZXkgaW4gb2xkUHJvcHMpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIHByb3BzKSkge1xuICAgICAgICAgICAgZWxtW2tleV0gPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGtleSBpbiBwcm9wcykge1xuICAgICAgICBjdXIgPSBwcm9wc1trZXldO1xuICAgICAgICAvLyBpZ25vcmUgY2hpbGRyZW4gaWYgdGhlIG5vZGUgaGFzIHRleHRDb250ZW50IG9yIGlubmVySFRNTCxcbiAgICAgICAgLy8gYXMgdGhlc2Ugd2lsbCB0aHJvdyBhd2F5IGV4aXN0aW5nIERPTSBub2RlcyBhbmQgY2F1c2UgcmVtb3ZhbCBlcnJvcnNcbiAgICAgICAgLy8gb24gc3Vic2VxdWVudCBwYXRjaGVzICgjMzM2MClcbiAgICAgICAgaWYgKGtleSA9PT0gJ3RleHRDb250ZW50JyB8fCBrZXkgPT09ICdpbm5lckhUTUwnKSB7XG4gICAgICAgICAgICBpZiAodm5vZGUuY2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIGlmIChjdXIgPT09IG9sZFByb3BzW2tleV0pXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAvLyAjNjYwMSB3b3JrIGFyb3VuZCBDaHJvbWUgdmVyc2lvbiA8PSA1NSBidWcgd2hlcmUgc2luZ2xlIHRleHROb2RlXG4gICAgICAgICAgICAvLyByZXBsYWNlZCBieSBpbm5lckhUTUwvdGV4dENvbnRlbnQgcmV0YWlucyBpdHMgcGFyZW50Tm9kZSBwcm9wZXJ0eVxuICAgICAgICAgICAgaWYgKGVsbS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVsbS5yZW1vdmVDaGlsZChlbG0uY2hpbGROb2Rlc1swXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ3ZhbHVlJyAmJiBlbG0udGFnTmFtZSAhPT0gJ1BST0dSRVNTJykge1xuICAgICAgICAgICAgLy8gc3RvcmUgdmFsdWUgYXMgX3ZhbHVlIGFzIHdlbGwgc2luY2VcbiAgICAgICAgICAgIC8vIG5vbi1zdHJpbmcgdmFsdWVzIHdpbGwgYmUgc3RyaW5naWZpZWRcbiAgICAgICAgICAgIGVsbS5fdmFsdWUgPSBjdXI7XG4gICAgICAgICAgICAvLyBhdm9pZCByZXNldHRpbmcgY3Vyc29yIHBvc2l0aW9uIHdoZW4gdmFsdWUgaXMgdGhlIHNhbWVcbiAgICAgICAgICAgIHZhciBzdHJDdXIgPSBpc1VuZGVmKGN1cikgPyAnJyA6IFN0cmluZyhjdXIpO1xuICAgICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZVZhbHVlKGVsbSwgc3RyQ3VyKSkge1xuICAgICAgICAgICAgICAgIGVsbS52YWx1ZSA9IHN0ckN1cjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChrZXkgPT09ICdpbm5lckhUTUwnICYmXG4gICAgICAgICAgICBpc1NWRyhlbG0udGFnTmFtZSkgJiZcbiAgICAgICAgICAgIGlzVW5kZWYoZWxtLmlubmVySFRNTCkpIHtcbiAgICAgICAgICAgIC8vIElFIGRvZXNuJ3Qgc3VwcG9ydCBpbm5lckhUTUwgZm9yIFNWRyBlbGVtZW50c1xuICAgICAgICAgICAgc3ZnQ29udGFpbmVyID0gc3ZnQ29udGFpbmVyIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgc3ZnQ29udGFpbmVyLmlubmVySFRNTCA9IFwiPHN2Zz5cIi5jb25jYXQoY3VyLCBcIjwvc3ZnPlwiKTtcbiAgICAgICAgICAgIHZhciBzdmcgPSBzdmdDb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIHdoaWxlIChlbG0uZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgIGVsbS5yZW1vdmVDaGlsZChlbG0uZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoc3ZnLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICBlbG0uYXBwZW5kQ2hpbGQoc3ZnLmZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAvLyBza2lwIHRoZSB1cGRhdGUgaWYgb2xkIGFuZCBuZXcgVkRPTSBzdGF0ZSBpcyB0aGUgc2FtZS5cbiAgICAgICAgLy8gYHZhbHVlYCBpcyBoYW5kbGVkIHNlcGFyYXRlbHkgYmVjYXVzZSB0aGUgRE9NIHZhbHVlIG1heSBiZSB0ZW1wb3JhcmlseVxuICAgICAgICAvLyBvdXQgb2Ygc3luYyB3aXRoIFZET00gc3RhdGUgZHVlIHRvIGZvY3VzLCBjb21wb3NpdGlvbiBhbmQgbW9kaWZpZXJzLlxuICAgICAgICAvLyBUaGlzICAjNDUyMSBieSBza2lwcGluZyB0aGUgdW5uZWNlc3NhcnkgYGNoZWNrZWRgIHVwZGF0ZS5cbiAgICAgICAgY3VyICE9PSBvbGRQcm9wc1trZXldKSB7XG4gICAgICAgICAgICAvLyBzb21lIHByb3BlcnR5IHVwZGF0ZXMgY2FuIHRocm93XG4gICAgICAgICAgICAvLyBlLmcuIGB2YWx1ZWAgb24gPHByb2dyZXNzPiB3LyBub24tZmluaXRlIHZhbHVlXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGVsbVtrZXldID0gY3VyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHsgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gc2hvdWxkVXBkYXRlVmFsdWUoZWxtLCBjaGVja1ZhbCkge1xuICAgIHJldHVybiAoXG4gICAgLy9AdHMtZXhwZWN0LWVycm9yXG4gICAgIWVsbS5jb21wb3NpbmcgJiZcbiAgICAgICAgKGVsbS50YWdOYW1lID09PSAnT1BUSU9OJyB8fFxuICAgICAgICAgICAgaXNOb3RJbkZvY3VzQW5kRGlydHkoZWxtLCBjaGVja1ZhbCkgfHxcbiAgICAgICAgICAgIGlzRGlydHlXaXRoTW9kaWZpZXJzKGVsbSwgY2hlY2tWYWwpKSk7XG59XG5mdW5jdGlvbiBpc05vdEluRm9jdXNBbmREaXJ0eShlbG0sIGNoZWNrVmFsKSB7XG4gICAgLy8gcmV0dXJuIHRydWUgd2hlbiB0ZXh0Ym94ICgubnVtYmVyIGFuZCAudHJpbSkgbG9zZXMgZm9jdXMgYW5kIGl0cyB2YWx1ZSBpc1xuICAgIC8vIG5vdCBlcXVhbCB0byB0aGUgdXBkYXRlZCB2YWx1ZVxuICAgIHZhciBub3RJbkZvY3VzID0gdHJ1ZTtcbiAgICAvLyAjNjE1N1xuICAgIC8vIHdvcmsgYXJvdW5kIElFIGJ1ZyB3aGVuIGFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluIGFuIGlmcmFtZVxuICAgIHRyeSB7XG4gICAgICAgIG5vdEluRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBlbG07XG4gICAgfVxuICAgIGNhdGNoIChlKSB7IH1cbiAgICByZXR1cm4gbm90SW5Gb2N1cyAmJiBlbG0udmFsdWUgIT09IGNoZWNrVmFsO1xufVxuZnVuY3Rpb24gaXNEaXJ0eVdpdGhNb2RpZmllcnMoZWxtLCBuZXdWYWwpIHtcbiAgICB2YXIgdmFsdWUgPSBlbG0udmFsdWU7XG4gICAgdmFyIG1vZGlmaWVycyA9IGVsbS5fdk1vZGlmaWVyczsgLy8gaW5qZWN0ZWQgYnkgdi1tb2RlbCBydW50aW1lXG4gICAgaWYgKGlzRGVmKG1vZGlmaWVycykpIHtcbiAgICAgICAgaWYgKG1vZGlmaWVycy5udW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0b051bWJlcih2YWx1ZSkgIT09IHRvTnVtYmVyKG5ld1ZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vZGlmaWVycy50cmltKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudHJpbSgpICE9PSBuZXdWYWwudHJpbSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZSAhPT0gbmV3VmFsO1xufVxudmFyIGRvbVByb3BzID0ge1xuICAgIGNyZWF0ZTogdXBkYXRlRE9NUHJvcHMsXG4gICAgdXBkYXRlOiB1cGRhdGVET01Qcm9wc1xufTtcblxudmFyIHBhcnNlU3R5bGVUZXh0ID0gY2FjaGVkKGZ1bmN0aW9uIChjc3NUZXh0KSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIHZhciBsaXN0RGVsaW1pdGVyID0gLzsoPyFbXihdKlxcKSkvZztcbiAgICB2YXIgcHJvcGVydHlEZWxpbWl0ZXIgPSAvOiguKykvO1xuICAgIGNzc1RleHQuc3BsaXQobGlzdERlbGltaXRlcikuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgdmFyIHRtcCA9IGl0ZW0uc3BsaXQocHJvcGVydHlEZWxpbWl0ZXIpO1xuICAgICAgICAgICAgdG1wLmxlbmd0aCA+IDEgJiYgKHJlc1t0bXBbMF0udHJpbSgpXSA9IHRtcFsxXS50cmltKCkpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcztcbn0pO1xuLy8gbWVyZ2Ugc3RhdGljIGFuZCBkeW5hbWljIHN0eWxlIGRhdGEgb24gdGhlIHNhbWUgdm5vZGVcbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0eWxlRGF0YShkYXRhKSB7XG4gICAgdmFyIHN0eWxlID0gbm9ybWFsaXplU3R5bGVCaW5kaW5nKGRhdGEuc3R5bGUpO1xuICAgIC8vIHN0YXRpYyBzdHlsZSBpcyBwcmUtcHJvY2Vzc2VkIGludG8gYW4gb2JqZWN0IGR1cmluZyBjb21waWxhdGlvblxuICAgIC8vIGFuZCBpcyBhbHdheXMgYSBmcmVzaCBvYmplY3QsIHNvIGl0J3Mgc2FmZSB0byBtZXJnZSBpbnRvIGl0XG4gICAgcmV0dXJuIGRhdGEuc3RhdGljU3R5bGUgPyBleHRlbmQoZGF0YS5zdGF0aWNTdHlsZSwgc3R5bGUpIDogc3R5bGU7XG59XG4vLyBub3JtYWxpemUgcG9zc2libGUgYXJyYXkgLyBzdHJpbmcgdmFsdWVzIGludG8gT2JqZWN0XG5mdW5jdGlvbiBub3JtYWxpemVTdHlsZUJpbmRpbmcoYmluZGluZ1N0eWxlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYmluZGluZ1N0eWxlKSkge1xuICAgICAgICByZXR1cm4gdG9PYmplY3QoYmluZGluZ1N0eWxlKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBiaW5kaW5nU3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBwYXJzZVN0eWxlVGV4dChiaW5kaW5nU3R5bGUpO1xuICAgIH1cbiAgICByZXR1cm4gYmluZGluZ1N0eWxlO1xufVxuLyoqXG4gKiBwYXJlbnQgY29tcG9uZW50IHN0eWxlIHNob3VsZCBiZSBhZnRlciBjaGlsZCdzXG4gKiBzbyB0aGF0IHBhcmVudCBjb21wb25lbnQncyBzdHlsZSBjb3VsZCBvdmVycmlkZSBpdFxuICovXG5mdW5jdGlvbiBnZXRTdHlsZSh2bm9kZSwgY2hlY2tDaGlsZCkge1xuICAgIHZhciByZXMgPSB7fTtcbiAgICB2YXIgc3R5bGVEYXRhO1xuICAgIGlmIChjaGVja0NoaWxkKSB7XG4gICAgICAgIHZhciBjaGlsZE5vZGUgPSB2bm9kZTtcbiAgICAgICAgd2hpbGUgKGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICAgICAgICAgIGlmIChjaGlsZE5vZGUgJiZcbiAgICAgICAgICAgICAgICBjaGlsZE5vZGUuZGF0YSAmJlxuICAgICAgICAgICAgICAgIChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEoY2hpbGROb2RlLmRhdGEpKSkge1xuICAgICAgICAgICAgICAgIGV4dGVuZChyZXMsIHN0eWxlRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEodm5vZGUuZGF0YSkpKSB7XG4gICAgICAgIGV4dGVuZChyZXMsIHN0eWxlRGF0YSk7XG4gICAgfVxuICAgIHZhciBwYXJlbnROb2RlID0gdm5vZGU7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBwYXJlbnROb2RlLnBhcmVudCBub3QgVk5vZGVXaXRoRGF0YVxuICAgIHdoaWxlICgocGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50KSkge1xuICAgICAgICBpZiAocGFyZW50Tm9kZS5kYXRhICYmIChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEocGFyZW50Tm9kZS5kYXRhKSkpIHtcbiAgICAgICAgICAgIGV4dGVuZChyZXMsIHN0eWxlRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxudmFyIGNzc1ZhclJFID0gL14tLS87XG52YXIgaW1wb3J0YW50UkUgPSAvXFxzKiFpbXBvcnRhbnQkLztcbnZhciBzZXRQcm9wID0gZnVuY3Rpb24gKGVsLCBuYW1lLCB2YWwpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoY3NzVmFyUkUudGVzdChuYW1lKSkge1xuICAgICAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWwpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpbXBvcnRhbnRSRS50ZXN0KHZhbCkpIHtcbiAgICAgICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoaHlwaGVuYXRlKG5hbWUpLCB2YWwucmVwbGFjZShpbXBvcnRhbnRSRSwgJycpLCAnaW1wb3J0YW50Jyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemUobmFtZSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgICAgIC8vIFN1cHBvcnQgdmFsdWVzIGFycmF5IGNyZWF0ZWQgYnkgYXV0b3ByZWZpeGVyLCBlLmcuXG4gICAgICAgICAgICAvLyB7ZGlzcGxheTogW1wiLXdlYmtpdC1ib3hcIiwgXCItbXMtZmxleGJveFwiLCBcImZsZXhcIl19XG4gICAgICAgICAgICAvLyBTZXQgdGhlbSBvbmUgYnkgb25lLCBhbmQgdGhlIGJyb3dzZXIgd2lsbCBvbmx5IHNldCB0aG9zZSBpdCBjYW4gcmVjb2duaXplXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdmFsLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZWwuc3R5bGVbbm9ybWFsaXplZE5hbWVdID0gdmFsW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWwuc3R5bGVbbm9ybWFsaXplZE5hbWVdID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxufTtcbnZhciB2ZW5kb3JOYW1lcyA9IFsnV2Via2l0JywgJ01veicsICdtcyddO1xudmFyIGVtcHR5U3R5bGU7XG52YXIgbm9ybWFsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgZW1wdHlTdHlsZSA9IGVtcHR5U3R5bGUgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGU7XG4gICAgcHJvcCA9IGNhbWVsaXplKHByb3ApO1xuICAgIGlmIChwcm9wICE9PSAnZmlsdGVyJyAmJiBwcm9wIGluIGVtcHR5U3R5bGUpIHtcbiAgICAgICAgcmV0dXJuIHByb3A7XG4gICAgfVxuICAgIHZhciBjYXBOYW1lID0gcHJvcC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHByb3Auc2xpY2UoMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2ZW5kb3JOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbmFtZV8xID0gdmVuZG9yTmFtZXNbaV0gKyBjYXBOYW1lO1xuICAgICAgICBpZiAobmFtZV8xIGluIGVtcHR5U3R5bGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lXzE7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbmZ1bmN0aW9uIHVwZGF0ZVN0eWxlKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgb2xkRGF0YSA9IG9sZFZub2RlLmRhdGE7XG4gICAgaWYgKGlzVW5kZWYoZGF0YS5zdGF0aWNTdHlsZSkgJiZcbiAgICAgICAgaXNVbmRlZihkYXRhLnN0eWxlKSAmJlxuICAgICAgICBpc1VuZGVmKG9sZERhdGEuc3RhdGljU3R5bGUpICYmXG4gICAgICAgIGlzVW5kZWYob2xkRGF0YS5zdHlsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgY3VyLCBuYW1lO1xuICAgIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgICB2YXIgb2xkU3RhdGljU3R5bGUgPSBvbGREYXRhLnN0YXRpY1N0eWxlO1xuICAgIHZhciBvbGRTdHlsZUJpbmRpbmcgPSBvbGREYXRhLm5vcm1hbGl6ZWRTdHlsZSB8fCBvbGREYXRhLnN0eWxlIHx8IHt9O1xuICAgIC8vIGlmIHN0YXRpYyBzdHlsZSBleGlzdHMsIHN0eWxlYmluZGluZyBhbHJlYWR5IG1lcmdlZCBpbnRvIGl0IHdoZW4gZG9pbmcgbm9ybWFsaXplU3R5bGVEYXRhXG4gICAgdmFyIG9sZFN0eWxlID0gb2xkU3RhdGljU3R5bGUgfHwgb2xkU3R5bGVCaW5kaW5nO1xuICAgIHZhciBzdHlsZSA9IG5vcm1hbGl6ZVN0eWxlQmluZGluZyh2bm9kZS5kYXRhLnN0eWxlKSB8fCB7fTtcbiAgICAvLyBzdG9yZSBub3JtYWxpemVkIHN0eWxlIHVuZGVyIGEgZGlmZmVyZW50IGtleSBmb3IgbmV4dCBkaWZmXG4gICAgLy8gbWFrZSBzdXJlIHRvIGNsb25lIGl0IGlmIGl0J3MgcmVhY3RpdmUsIHNpbmNlIHRoZSB1c2VyIGxpa2VseSB3YW50c1xuICAgIC8vIHRvIG11dGF0ZSBpdC5cbiAgICB2bm9kZS5kYXRhLm5vcm1hbGl6ZWRTdHlsZSA9IGlzRGVmKHN0eWxlLl9fb2JfXykgPyBleHRlbmQoe30sIHN0eWxlKSA6IHN0eWxlO1xuICAgIHZhciBuZXdTdHlsZSA9IGdldFN0eWxlKHZub2RlLCB0cnVlKTtcbiAgICBmb3IgKG5hbWUgaW4gb2xkU3R5bGUpIHtcbiAgICAgICAgaWYgKGlzVW5kZWYobmV3U3R5bGVbbmFtZV0pKSB7XG4gICAgICAgICAgICBzZXRQcm9wKGVsLCBuYW1lLCAnJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChuYW1lIGluIG5ld1N0eWxlKSB7XG4gICAgICAgIGN1ciA9IG5ld1N0eWxlW25hbWVdO1xuICAgICAgICAvLyBpZTkgc2V0dGluZyB0byBudWxsIGhhcyBubyBlZmZlY3QsIG11c3QgdXNlIGVtcHR5IHN0cmluZ1xuICAgICAgICBzZXRQcm9wKGVsLCBuYW1lLCBjdXIgPT0gbnVsbCA/ICcnIDogY3VyKTtcbiAgICB9XG59XG52YXIgc3R5bGUgPSB7XG4gICAgY3JlYXRlOiB1cGRhdGVTdHlsZSxcbiAgICB1cGRhdGU6IHVwZGF0ZVN0eWxlXG59O1xuXG52YXIgd2hpdGVzcGFjZVJFID0gL1xccysvO1xuLyoqXG4gKiBBZGQgY2xhc3Mgd2l0aCBjb21wYXRpYmlsaXR5IGZvciBTVkcgc2luY2UgY2xhc3NMaXN0IGlzIG5vdCBzdXBwb3J0ZWQgb25cbiAqIFNWRyBlbGVtZW50cyBpbiBJRVxuICovXG5mdW5jdGlvbiBhZGRDbGFzcyhlbCwgY2xzKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFjbHMgfHwgIShjbHMgPSBjbHMudHJpbSgpKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgICAgICBpZiAoY2xzLmluZGV4T2YoJyAnKSA+IC0xKSB7XG4gICAgICAgICAgICBjbHMuc3BsaXQod2hpdGVzcGFjZVJFKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IHJldHVybiBlbC5jbGFzc0xpc3QuYWRkKGMpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoY2xzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIGN1ciA9IFwiIFwiLmNvbmNhdChlbC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycsIFwiIFwiKTtcbiAgICAgICAgaWYgKGN1ci5pbmRleE9mKCcgJyArIGNscyArICcgJykgPCAwKSB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgKGN1ciArIGNscykudHJpbSgpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogUmVtb3ZlIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgU1ZHIHNpbmNlIGNsYXNzTGlzdCBpcyBub3Qgc3VwcG9ydGVkIG9uXG4gKiBTVkcgZWxlbWVudHMgaW4gSUVcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoZWwsIGNscykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghY2xzIHx8ICEoY2xzID0gY2xzLnRyaW0oKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICAgICAgaWYgKGNscy5pbmRleE9mKCcgJykgPiAtMSkge1xuICAgICAgICAgICAgY2xzLnNwbGl0KHdoaXRlc3BhY2VSRSkuZm9yRWFjaChmdW5jdGlvbiAoYykgeyByZXR1cm4gZWwuY2xhc3NMaXN0LnJlbW92ZShjKTsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKGNscyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlbC5jbGFzc0xpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBjdXIgPSBcIiBcIi5jb25jYXQoZWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnLCBcIiBcIik7XG4gICAgICAgIHZhciB0YXIgPSAnICcgKyBjbHMgKyAnICc7XG4gICAgICAgIHdoaWxlIChjdXIuaW5kZXhPZih0YXIpID49IDApIHtcbiAgICAgICAgICAgIGN1ciA9IGN1ci5yZXBsYWNlKHRhciwgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBjdXIgPSBjdXIudHJpbSgpO1xuICAgICAgICBpZiAoY3VyKSB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgY3VyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVRyYW5zaXRpb24oZGVmKSB7XG4gICAgaWYgKCFkZWYpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0eXBlb2YgZGVmID09PSAnb2JqZWN0Jykge1xuICAgICAgICB2YXIgcmVzID0ge307XG4gICAgICAgIGlmIChkZWYuY3NzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgZXh0ZW5kKHJlcywgYXV0b0Nzc1RyYW5zaXRpb24oZGVmLm5hbWUgfHwgJ3YnKSk7XG4gICAgICAgIH1cbiAgICAgICAgZXh0ZW5kKHJlcywgZGVmKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGF1dG9Dc3NUcmFuc2l0aW9uKGRlZik7XG4gICAgfVxufVxudmFyIGF1dG9Dc3NUcmFuc2l0aW9uID0gY2FjaGVkKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZW50ZXJDbGFzczogXCJcIi5jb25jYXQobmFtZSwgXCItZW50ZXJcIiksXG4gICAgICAgIGVudGVyVG9DbGFzczogXCJcIi5jb25jYXQobmFtZSwgXCItZW50ZXItdG9cIiksXG4gICAgICAgIGVudGVyQWN0aXZlQ2xhc3M6IFwiXCIuY29uY2F0KG5hbWUsIFwiLWVudGVyLWFjdGl2ZVwiKSxcbiAgICAgICAgbGVhdmVDbGFzczogXCJcIi5jb25jYXQobmFtZSwgXCItbGVhdmVcIiksXG4gICAgICAgIGxlYXZlVG9DbGFzczogXCJcIi5jb25jYXQobmFtZSwgXCItbGVhdmUtdG9cIiksXG4gICAgICAgIGxlYXZlQWN0aXZlQ2xhc3M6IFwiXCIuY29uY2F0KG5hbWUsIFwiLWxlYXZlLWFjdGl2ZVwiKVxuICAgIH07XG59KTtcbnZhciBoYXNUcmFuc2l0aW9uID0gaW5Ccm93c2VyICYmICFpc0lFOTtcbnZhciBUUkFOU0lUSU9OID0gJ3RyYW5zaXRpb24nO1xudmFyIEFOSU1BVElPTiA9ICdhbmltYXRpb24nO1xuLy8gVHJhbnNpdGlvbiBwcm9wZXJ0eS9ldmVudCBzbmlmZmluZ1xudmFyIHRyYW5zaXRpb25Qcm9wID0gJ3RyYW5zaXRpb24nO1xudmFyIHRyYW5zaXRpb25FbmRFdmVudCA9ICd0cmFuc2l0aW9uZW5kJztcbnZhciBhbmltYXRpb25Qcm9wID0gJ2FuaW1hdGlvbic7XG52YXIgYW5pbWF0aW9uRW5kRXZlbnQgPSAnYW5pbWF0aW9uZW5kJztcbmlmIChoYXNUcmFuc2l0aW9uKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHdpbmRvdy5vbnRyYW5zaXRpb25lbmQgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB3aW5kb3cub253ZWJraXR0cmFuc2l0aW9uZW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdHJhbnNpdGlvblByb3AgPSAnV2Via2l0VHJhbnNpdGlvbic7XG4gICAgICAgIHRyYW5zaXRpb25FbmRFdmVudCA9ICd3ZWJraXRUcmFuc2l0aW9uRW5kJztcbiAgICB9XG4gICAgaWYgKHdpbmRvdy5vbmFuaW1hdGlvbmVuZCA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHdpbmRvdy5vbndlYmtpdGFuaW1hdGlvbmVuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFuaW1hdGlvblByb3AgPSAnV2Via2l0QW5pbWF0aW9uJztcbiAgICAgICAgYW5pbWF0aW9uRW5kRXZlbnQgPSAnd2Via2l0QW5pbWF0aW9uRW5kJztcbiAgICB9XG59XG4vLyBiaW5kaW5nIHRvIHdpbmRvdyBpcyBuZWNlc3NhcnkgdG8gbWFrZSBob3QgcmVsb2FkIHdvcmsgaW4gSUUgaW4gc3RyaWN0IG1vZGVcbnZhciByYWYgPSBpbkJyb3dzZXJcbiAgICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICAgICAgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KVxuICAgICAgICA6IHNldFRpbWVvdXRcbiAgICA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZ1bmN0aW9uICgvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBmbikgeyByZXR1cm4gZm4oKTsgfTtcbmZ1bmN0aW9uIG5leHRGcmFtZShmbikge1xuICAgIHJhZihmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgcmFmKGZuKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgY2xzKSB7XG4gICAgdmFyIHRyYW5zaXRpb25DbGFzc2VzID0gZWwuX3RyYW5zaXRpb25DbGFzc2VzIHx8IChlbC5fdHJhbnNpdGlvbkNsYXNzZXMgPSBbXSk7XG4gICAgaWYgKHRyYW5zaXRpb25DbGFzc2VzLmluZGV4T2YoY2xzKSA8IDApIHtcbiAgICAgICAgdHJhbnNpdGlvbkNsYXNzZXMucHVzaChjbHMpO1xuICAgICAgICBhZGRDbGFzcyhlbCwgY2xzKTtcbiAgICB9XG59XG5mdW5jdGlvbiByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGNscykge1xuICAgIGlmIChlbC5fdHJhbnNpdGlvbkNsYXNzZXMpIHtcbiAgICAgICAgcmVtb3ZlJDIoZWwuX3RyYW5zaXRpb25DbGFzc2VzLCBjbHMpO1xuICAgIH1cbiAgICByZW1vdmVDbGFzcyhlbCwgY2xzKTtcbn1cbmZ1bmN0aW9uIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgZXhwZWN0ZWRUeXBlLCBjYikge1xuICAgIHZhciBfYSA9IGdldFRyYW5zaXRpb25JbmZvKGVsLCBleHBlY3RlZFR5cGUpLCB0eXBlID0gX2EudHlwZSwgdGltZW91dCA9IF9hLnRpbWVvdXQsIHByb3BDb3VudCA9IF9hLnByb3BDb3VudDtcbiAgICBpZiAoIXR5cGUpXG4gICAgICAgIHJldHVybiBjYigpO1xuICAgIHZhciBldmVudCA9IHR5cGUgPT09IFRSQU5TSVRJT04gPyB0cmFuc2l0aW9uRW5kRXZlbnQgOiBhbmltYXRpb25FbmRFdmVudDtcbiAgICB2YXIgZW5kZWQgPSAwO1xuICAgIHZhciBlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIG9uRW5kKTtcbiAgICAgICAgY2IoKTtcbiAgICB9O1xuICAgIHZhciBvbkVuZCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmIChlLnRhcmdldCA9PT0gZWwpIHtcbiAgICAgICAgICAgIGlmICgrK2VuZGVkID49IHByb3BDb3VudCkge1xuICAgICAgICAgICAgICAgIGVuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGVuZGVkIDwgcHJvcENvdW50KSB7XG4gICAgICAgICAgICBlbmQoKTtcbiAgICAgICAgfVxuICAgIH0sIHRpbWVvdXQgKyAxKTtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBvbkVuZCk7XG59XG52YXIgdHJhbnNmb3JtUkUgPSAvXFxiKHRyYW5zZm9ybXxhbGwpKCx8JCkvO1xuZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbkluZm8oZWwsIGV4cGVjdGVkVHlwZSkge1xuICAgIHZhciBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG4gICAgLy8gSlNET00gbWF5IHJldHVybiB1bmRlZmluZWQgZm9yIHRyYW5zaXRpb24gcHJvcGVydGllc1xuICAgIHZhciB0cmFuc2l0aW9uRGVsYXlzID0gKHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdEZWxheSddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9ucyA9IChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnRHVyYXRpb24nXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gICAgdmFyIHRyYW5zaXRpb25UaW1lb3V0ID0gZ2V0VGltZW91dCh0cmFuc2l0aW9uRGVsYXlzLCB0cmFuc2l0aW9uRHVyYXRpb25zKTtcbiAgICB2YXIgYW5pbWF0aW9uRGVsYXlzID0gKHN0eWxlc1thbmltYXRpb25Qcm9wICsgJ0RlbGF5J10gfHwgJycpLnNwbGl0KCcsICcpO1xuICAgIHZhciBhbmltYXRpb25EdXJhdGlvbnMgPSAoc3R5bGVzW2FuaW1hdGlvblByb3AgKyAnRHVyYXRpb24nXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gICAgdmFyIGFuaW1hdGlvblRpbWVvdXQgPSBnZXRUaW1lb3V0KGFuaW1hdGlvbkRlbGF5cywgYW5pbWF0aW9uRHVyYXRpb25zKTtcbiAgICB2YXIgdHlwZTtcbiAgICB2YXIgdGltZW91dCA9IDA7XG4gICAgdmFyIHByb3BDb3VudCA9IDA7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGV4cGVjdGVkVHlwZSA9PT0gVFJBTlNJVElPTikge1xuICAgICAgICBpZiAodHJhbnNpdGlvblRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgICB0eXBlID0gVFJBTlNJVElPTjtcbiAgICAgICAgICAgIHRpbWVvdXQgPSB0cmFuc2l0aW9uVGltZW91dDtcbiAgICAgICAgICAgIHByb3BDb3VudCA9IHRyYW5zaXRpb25EdXJhdGlvbnMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gQU5JTUFUSU9OKSB7XG4gICAgICAgIGlmIChhbmltYXRpb25UaW1lb3V0ID4gMCkge1xuICAgICAgICAgICAgdHlwZSA9IEFOSU1BVElPTjtcbiAgICAgICAgICAgIHRpbWVvdXQgPSBhbmltYXRpb25UaW1lb3V0O1xuICAgICAgICAgICAgcHJvcENvdW50ID0gYW5pbWF0aW9uRHVyYXRpb25zLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGltZW91dCA9IE1hdGgubWF4KHRyYW5zaXRpb25UaW1lb3V0LCBhbmltYXRpb25UaW1lb3V0KTtcbiAgICAgICAgdHlwZSA9XG4gICAgICAgICAgICB0aW1lb3V0ID4gMFxuICAgICAgICAgICAgICAgID8gdHJhbnNpdGlvblRpbWVvdXQgPiBhbmltYXRpb25UaW1lb3V0XG4gICAgICAgICAgICAgICAgICAgID8gVFJBTlNJVElPTlxuICAgICAgICAgICAgICAgICAgICA6IEFOSU1BVElPTlxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgcHJvcENvdW50ID0gdHlwZVxuICAgICAgICAgICAgPyB0eXBlID09PSBUUkFOU0lUSU9OXG4gICAgICAgICAgICAgICAgPyB0cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aFxuICAgICAgICAgICAgICAgIDogYW5pbWF0aW9uRHVyYXRpb25zLmxlbmd0aFxuICAgICAgICAgICAgOiAwO1xuICAgIH1cbiAgICB2YXIgaGFzVHJhbnNmb3JtID0gdHlwZSA9PT0gVFJBTlNJVElPTiAmJiB0cmFuc2Zvcm1SRS50ZXN0KHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdQcm9wZXJ0eSddKTtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICB0aW1lb3V0OiB0aW1lb3V0LFxuICAgICAgICBwcm9wQ291bnQ6IHByb3BDb3VudCxcbiAgICAgICAgaGFzVHJhbnNmb3JtOiBoYXNUcmFuc2Zvcm1cbiAgICB9O1xufVxuZnVuY3Rpb24gZ2V0VGltZW91dChkZWxheXMsIGR1cmF0aW9ucykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgd2hpbGUgKGRlbGF5cy5sZW5ndGggPCBkdXJhdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGRlbGF5cyA9IGRlbGF5cy5jb25jYXQoZGVsYXlzKTtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsIGR1cmF0aW9ucy5tYXAoZnVuY3Rpb24gKGQsIGkpIHtcbiAgICAgICAgcmV0dXJuIHRvTXMoZCkgKyB0b01zKGRlbGF5c1tpXSk7XG4gICAgfSkpO1xufVxuLy8gT2xkIHZlcnNpb25zIG9mIENocm9taXVtIChiZWxvdyA2MS4wLjMxNjMuMTAwKSBmb3JtYXRzIGZsb2F0aW5nIHBvaW50ZXIgbnVtYmVyc1xuLy8gaW4gYSBsb2NhbGUtZGVwZW5kZW50IHdheSwgdXNpbmcgYSBjb21tYSBpbnN0ZWFkIG9mIGEgZG90LlxuLy8gSWYgY29tbWEgaXMgbm90IHJlcGxhY2VkIHdpdGggYSBkb3QsIHRoZSBpbnB1dCB3aWxsIGJlIHJvdW5kZWQgZG93biAoaS5lLiBhY3Rpbmdcbi8vIGFzIGEgZmxvb3IgZnVuY3Rpb24pIGNhdXNpbmcgdW5leHBlY3RlZCBiZWhhdmlvcnNcbmZ1bmN0aW9uIHRvTXMocykge1xuICAgIHJldHVybiBOdW1iZXIocy5zbGljZSgwLCAtMSkucmVwbGFjZSgnLCcsICcuJykpICogMTAwMDtcbn1cblxuZnVuY3Rpb24gZW50ZXIodm5vZGUsIHRvZ2dsZURpc3BsYXkpIHtcbiAgICB2YXIgZWwgPSB2bm9kZS5lbG07XG4gICAgLy8gY2FsbCBsZWF2ZSBjYWxsYmFjayBub3dcbiAgICBpZiAoaXNEZWYoZWwuX2xlYXZlQ2IpKSB7XG4gICAgICAgIGVsLl9sZWF2ZUNiLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIGVsLl9sZWF2ZUNiKCk7XG4gICAgfVxuICAgIHZhciBkYXRhID0gcmVzb2x2ZVRyYW5zaXRpb24odm5vZGUuZGF0YS50cmFuc2l0aW9uKTtcbiAgICBpZiAoaXNVbmRlZihkYXRhKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpc0RlZihlbC5fZW50ZXJDYikgfHwgZWwubm9kZVR5cGUgIT09IDEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgY3NzID0gZGF0YS5jc3MsIHR5cGUgPSBkYXRhLnR5cGUsIGVudGVyQ2xhc3MgPSBkYXRhLmVudGVyQ2xhc3MsIGVudGVyVG9DbGFzcyA9IGRhdGEuZW50ZXJUb0NsYXNzLCBlbnRlckFjdGl2ZUNsYXNzID0gZGF0YS5lbnRlckFjdGl2ZUNsYXNzLCBhcHBlYXJDbGFzcyA9IGRhdGEuYXBwZWFyQ2xhc3MsIGFwcGVhclRvQ2xhc3MgPSBkYXRhLmFwcGVhclRvQ2xhc3MsIGFwcGVhckFjdGl2ZUNsYXNzID0gZGF0YS5hcHBlYXJBY3RpdmVDbGFzcywgYmVmb3JlRW50ZXIgPSBkYXRhLmJlZm9yZUVudGVyLCBlbnRlciA9IGRhdGEuZW50ZXIsIGFmdGVyRW50ZXIgPSBkYXRhLmFmdGVyRW50ZXIsIGVudGVyQ2FuY2VsbGVkID0gZGF0YS5lbnRlckNhbmNlbGxlZCwgYmVmb3JlQXBwZWFyID0gZGF0YS5iZWZvcmVBcHBlYXIsIGFwcGVhciA9IGRhdGEuYXBwZWFyLCBhZnRlckFwcGVhciA9IGRhdGEuYWZ0ZXJBcHBlYXIsIGFwcGVhckNhbmNlbGxlZCA9IGRhdGEuYXBwZWFyQ2FuY2VsbGVkLCBkdXJhdGlvbiA9IGRhdGEuZHVyYXRpb247XG4gICAgLy8gYWN0aXZlSW5zdGFuY2Ugd2lsbCBhbHdheXMgYmUgdGhlIDx0cmFuc2l0aW9uPiBjb21wb25lbnQgbWFuYWdpbmcgdGhpc1xuICAgIC8vIHRyYW5zaXRpb24uIE9uZSBlZGdlIGNhc2UgdG8gY2hlY2sgaXMgd2hlbiB0aGUgPHRyYW5zaXRpb24+IGlzIHBsYWNlZFxuICAgIC8vIGFzIHRoZSByb290IG5vZGUgb2YgYSBjaGlsZCBjb21wb25lbnQuIEluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGNoZWNrXG4gICAgLy8gPHRyYW5zaXRpb24+J3MgcGFyZW50IGZvciBhcHBlYXIgY2hlY2suXG4gICAgdmFyIGNvbnRleHQgPSBhY3RpdmVJbnN0YW5jZTtcbiAgICB2YXIgdHJhbnNpdGlvbk5vZGUgPSBhY3RpdmVJbnN0YW5jZS4kdm5vZGU7XG4gICAgd2hpbGUgKHRyYW5zaXRpb25Ob2RlICYmIHRyYW5zaXRpb25Ob2RlLnBhcmVudCkge1xuICAgICAgICBjb250ZXh0ID0gdHJhbnNpdGlvbk5vZGUuY29udGV4dDtcbiAgICAgICAgdHJhbnNpdGlvbk5vZGUgPSB0cmFuc2l0aW9uTm9kZS5wYXJlbnQ7XG4gICAgfVxuICAgIHZhciBpc0FwcGVhciA9ICFjb250ZXh0Ll9pc01vdW50ZWQgfHwgIXZub2RlLmlzUm9vdEluc2VydDtcbiAgICBpZiAoaXNBcHBlYXIgJiYgIWFwcGVhciAmJiBhcHBlYXIgIT09ICcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHN0YXJ0Q2xhc3MgPSBpc0FwcGVhciAmJiBhcHBlYXJDbGFzcyA/IGFwcGVhckNsYXNzIDogZW50ZXJDbGFzcztcbiAgICB2YXIgYWN0aXZlQ2xhc3MgPSBpc0FwcGVhciAmJiBhcHBlYXJBY3RpdmVDbGFzcyA/IGFwcGVhckFjdGl2ZUNsYXNzIDogZW50ZXJBY3RpdmVDbGFzcztcbiAgICB2YXIgdG9DbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhclRvQ2xhc3MgPyBhcHBlYXJUb0NsYXNzIDogZW50ZXJUb0NsYXNzO1xuICAgIHZhciBiZWZvcmVFbnRlckhvb2sgPSBpc0FwcGVhciA/IGJlZm9yZUFwcGVhciB8fCBiZWZvcmVFbnRlciA6IGJlZm9yZUVudGVyO1xuICAgIHZhciBlbnRlckhvb2sgPSBpc0FwcGVhciA/IChpc0Z1bmN0aW9uKGFwcGVhcikgPyBhcHBlYXIgOiBlbnRlcikgOiBlbnRlcjtcbiAgICB2YXIgYWZ0ZXJFbnRlckhvb2sgPSBpc0FwcGVhciA/IGFmdGVyQXBwZWFyIHx8IGFmdGVyRW50ZXIgOiBhZnRlckVudGVyO1xuICAgIHZhciBlbnRlckNhbmNlbGxlZEhvb2sgPSBpc0FwcGVhclxuICAgICAgICA/IGFwcGVhckNhbmNlbGxlZCB8fCBlbnRlckNhbmNlbGxlZFxuICAgICAgICA6IGVudGVyQ2FuY2VsbGVkO1xuICAgIHZhciBleHBsaWNpdEVudGVyRHVyYXRpb24gPSB0b051bWJlcihpc09iamVjdChkdXJhdGlvbikgPyBkdXJhdGlvbi5lbnRlciA6IGR1cmF0aW9uKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBleHBsaWNpdEVudGVyRHVyYXRpb24gIT0gbnVsbCkge1xuICAgICAgICBjaGVja0R1cmF0aW9uKGV4cGxpY2l0RW50ZXJEdXJhdGlvbiwgJ2VudGVyJywgdm5vZGUpO1xuICAgIH1cbiAgICB2YXIgZXhwZWN0c0NTUyA9IGNzcyAhPT0gZmFsc2UgJiYgIWlzSUU5O1xuICAgIHZhciB1c2VyV2FudHNDb250cm9sID0gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChlbnRlckhvb2spO1xuICAgIHZhciBjYiA9IChlbC5fZW50ZXJDYiA9IG9uY2UoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCB0b0NsYXNzKTtcbiAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgYWN0aXZlQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgaWYgKGNiLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIHN0YXJ0Q2xhc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW50ZXJDYW5jZWxsZWRIb29rICYmIGVudGVyQ2FuY2VsbGVkSG9vayhlbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhZnRlckVudGVySG9vayAmJiBhZnRlckVudGVySG9vayhlbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWwuX2VudGVyQ2IgPSBudWxsO1xuICAgIH0pKTtcbiAgICBpZiAoIXZub2RlLmRhdGEuc2hvdykge1xuICAgICAgICAvLyByZW1vdmUgcGVuZGluZyBsZWF2ZSBlbGVtZW50IG9uIGVudGVyIGJ5IGluamVjdGluZyBhbiBpbnNlcnQgaG9va1xuICAgICAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ2luc2VydCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnROb2RlO1xuICAgICAgICAgICAgdmFyIHBlbmRpbmdOb2RlID0gcGFyZW50ICYmIHBhcmVudC5fcGVuZGluZyAmJiBwYXJlbnQuX3BlbmRpbmdbdm5vZGUua2V5XTtcbiAgICAgICAgICAgIGlmIChwZW5kaW5nTm9kZSAmJlxuICAgICAgICAgICAgICAgIHBlbmRpbmdOb2RlLnRhZyA9PT0gdm5vZGUudGFnICYmXG4gICAgICAgICAgICAgICAgcGVuZGluZ05vZGUuZWxtLl9sZWF2ZUNiKSB7XG4gICAgICAgICAgICAgICAgcGVuZGluZ05vZGUuZWxtLl9sZWF2ZUNiKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbnRlckhvb2sgJiYgZW50ZXJIb29rKGVsLCBjYik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBzdGFydCBlbnRlciB0cmFuc2l0aW9uXG4gICAgYmVmb3JlRW50ZXJIb29rICYmIGJlZm9yZUVudGVySG9vayhlbCk7XG4gICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBzdGFydENsYXNzKTtcbiAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBhY3RpdmVDbGFzcyk7XG4gICAgICAgIG5leHRGcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIHN0YXJ0Q2xhc3MpO1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgaWYgKCFjYi5jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIHRvQ2xhc3MpO1xuICAgICAgICAgICAgICAgIGlmICghdXNlcldhbnRzQ29udHJvbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZER1cmF0aW9uKGV4cGxpY2l0RW50ZXJEdXJhdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2IsIGV4cGxpY2l0RW50ZXJEdXJhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVuVHJhbnNpdGlvbkVuZHMoZWwsIHR5cGUsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh2bm9kZS5kYXRhLnNob3cpIHtcbiAgICAgICAgdG9nZ2xlRGlzcGxheSAmJiB0b2dnbGVEaXNwbGF5KCk7XG4gICAgICAgIGVudGVySG9vayAmJiBlbnRlckhvb2soZWwsIGNiKTtcbiAgICB9XG4gICAgaWYgKCFleHBlY3RzQ1NTICYmICF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICAgIGNiKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gbGVhdmUodm5vZGUsIHJtKSB7XG4gICAgdmFyIGVsID0gdm5vZGUuZWxtO1xuICAgIC8vIGNhbGwgZW50ZXIgY2FsbGJhY2sgbm93XG4gICAgaWYgKGlzRGVmKGVsLl9lbnRlckNiKSkge1xuICAgICAgICBlbC5fZW50ZXJDYi5jYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICBlbC5fZW50ZXJDYigpO1xuICAgIH1cbiAgICB2YXIgZGF0YSA9IHJlc29sdmVUcmFuc2l0aW9uKHZub2RlLmRhdGEudHJhbnNpdGlvbik7XG4gICAgaWYgKGlzVW5kZWYoZGF0YSkgfHwgZWwubm9kZVR5cGUgIT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHJtKCk7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpc0RlZihlbC5fbGVhdmVDYikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgY3NzID0gZGF0YS5jc3MsIHR5cGUgPSBkYXRhLnR5cGUsIGxlYXZlQ2xhc3MgPSBkYXRhLmxlYXZlQ2xhc3MsIGxlYXZlVG9DbGFzcyA9IGRhdGEubGVhdmVUb0NsYXNzLCBsZWF2ZUFjdGl2ZUNsYXNzID0gZGF0YS5sZWF2ZUFjdGl2ZUNsYXNzLCBiZWZvcmVMZWF2ZSA9IGRhdGEuYmVmb3JlTGVhdmUsIGxlYXZlID0gZGF0YS5sZWF2ZSwgYWZ0ZXJMZWF2ZSA9IGRhdGEuYWZ0ZXJMZWF2ZSwgbGVhdmVDYW5jZWxsZWQgPSBkYXRhLmxlYXZlQ2FuY2VsbGVkLCBkZWxheUxlYXZlID0gZGF0YS5kZWxheUxlYXZlLCBkdXJhdGlvbiA9IGRhdGEuZHVyYXRpb247XG4gICAgdmFyIGV4cGVjdHNDU1MgPSBjc3MgIT09IGZhbHNlICYmICFpc0lFOTtcbiAgICB2YXIgdXNlcldhbnRzQ29udHJvbCA9IGdldEhvb2tBcmd1bWVudHNMZW5ndGgobGVhdmUpO1xuICAgIHZhciBleHBsaWNpdExlYXZlRHVyYXRpb24gPSB0b051bWJlcihpc09iamVjdChkdXJhdGlvbikgPyBkdXJhdGlvbi5sZWF2ZSA6IGR1cmF0aW9uKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc0RlZihleHBsaWNpdExlYXZlRHVyYXRpb24pKSB7XG4gICAgICAgIGNoZWNrRHVyYXRpb24oZXhwbGljaXRMZWF2ZUR1cmF0aW9uLCAnbGVhdmUnLCB2bm9kZSk7XG4gICAgfVxuICAgIHZhciBjYiA9IChlbC5fbGVhdmVDYiA9IG9uY2UoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoZWwucGFyZW50Tm9kZSAmJiBlbC5wYXJlbnROb2RlLl9wZW5kaW5nKSB7XG4gICAgICAgICAgICBlbC5wYXJlbnROb2RlLl9wZW5kaW5nW3Zub2RlLmtleV0gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XG4gICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQWN0aXZlQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgaWYgKGNiLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGVhdmVDYW5jZWxsZWQgJiYgbGVhdmVDYW5jZWxsZWQoZWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcm0oKTtcbiAgICAgICAgICAgIGFmdGVyTGVhdmUgJiYgYWZ0ZXJMZWF2ZShlbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWwuX2xlYXZlQ2IgPSBudWxsO1xuICAgIH0pKTtcbiAgICBpZiAoZGVsYXlMZWF2ZSkge1xuICAgICAgICBkZWxheUxlYXZlKHBlcmZvcm1MZWF2ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBwZXJmb3JtTGVhdmUoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVyZm9ybUxlYXZlKCkge1xuICAgICAgICAvLyB0aGUgZGVsYXllZCBsZWF2ZSBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gY2FuY2VsbGVkXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgaWYgKGNiLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlY29yZCBsZWF2aW5nIGVsZW1lbnRcbiAgICAgICAgaWYgKCF2bm9kZS5kYXRhLnNob3cgJiYgZWwucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgfHwgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgPSB7fSkpW3Zub2RlLmtleV0gPVxuICAgICAgICAgICAgICAgIHZub2RlO1xuICAgICAgICB9XG4gICAgICAgIGJlZm9yZUxlYXZlICYmIGJlZm9yZUxlYXZlKGVsKTtcbiAgICAgICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQWN0aXZlQ2xhc3MpO1xuICAgICAgICAgICAgbmV4dEZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgICBpZiAoIWNiLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdXNlcldhbnRzQ29udHJvbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWREdXJhdGlvbihleHBsaWNpdExlYXZlRHVyYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChjYiwgZXhwbGljaXRMZWF2ZUR1cmF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgY2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbGVhdmUgJiYgbGVhdmUoZWwsIGNiKTtcbiAgICAgICAgaWYgKCFleHBlY3RzQ1NTICYmICF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICAgICAgICBjYigpO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8gb25seSB1c2VkIGluIGRldiBtb2RlXG5mdW5jdGlvbiBjaGVja0R1cmF0aW9uKHZhbCwgbmFtZSwgdm5vZGUpIHtcbiAgICBpZiAodHlwZW9mIHZhbCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgd2FybihcIjx0cmFuc2l0aW9uPiBleHBsaWNpdCBcIi5jb25jYXQobmFtZSwgXCIgZHVyYXRpb24gaXMgbm90IGEgdmFsaWQgbnVtYmVyIC0gXCIpICtcbiAgICAgICAgICAgIFwiZ290IFwiLmNvbmNhdChKU09OLnN0cmluZ2lmeSh2YWwpLCBcIi5cIiksIHZub2RlLmNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc05hTih2YWwpKSB7XG4gICAgICAgIHdhcm4oXCI8dHJhbnNpdGlvbj4gZXhwbGljaXQgXCIuY29uY2F0KG5hbWUsIFwiIGR1cmF0aW9uIGlzIE5hTiAtIFwiKSArXG4gICAgICAgICAgICAndGhlIGR1cmF0aW9uIGV4cHJlc3Npb24gbWlnaHQgYmUgaW5jb3JyZWN0LicsIHZub2RlLmNvbnRleHQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzVmFsaWREdXJhdGlvbih2YWwpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbCk7XG59XG4vKipcbiAqIE5vcm1hbGl6ZSBhIHRyYW5zaXRpb24gaG9vaydzIGFyZ3VtZW50IGxlbmd0aC4gVGhlIGhvb2sgbWF5IGJlOlxuICogLSBhIG1lcmdlZCBob29rIChpbnZva2VyKSB3aXRoIHRoZSBvcmlnaW5hbCBpbiAuZm5zXG4gKiAtIGEgd3JhcHBlZCBjb21wb25lbnQgbWV0aG9kIChjaGVjayAuX2xlbmd0aClcbiAqIC0gYSBwbGFpbiBmdW5jdGlvbiAoLmxlbmd0aClcbiAqL1xuZnVuY3Rpb24gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChmbikge1xuICAgIGlmIChpc1VuZGVmKGZuKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICB2YXIgaW52b2tlckZucyA9IGZuLmZucztcbiAgICBpZiAoaXNEZWYoaW52b2tlckZucykpIHtcbiAgICAgICAgLy8gaW52b2tlclxuICAgICAgICByZXR1cm4gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChBcnJheS5pc0FycmF5KGludm9rZXJGbnMpID8gaW52b2tlckZuc1swXSA6IGludm9rZXJGbnMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICByZXR1cm4gKGZuLl9sZW5ndGggfHwgZm4ubGVuZ3RoKSA+IDE7XG4gICAgfVxufVxuZnVuY3Rpb24gX2VudGVyKF8sIHZub2RlKSB7XG4gICAgaWYgKHZub2RlLmRhdGEuc2hvdyAhPT0gdHJ1ZSkge1xuICAgICAgICBlbnRlcih2bm9kZSk7XG4gICAgfVxufVxudmFyIHRyYW5zaXRpb24gPSBpbkJyb3dzZXJcbiAgICA/IHtcbiAgICAgICAgY3JlYXRlOiBfZW50ZXIsXG4gICAgICAgIGFjdGl2YXRlOiBfZW50ZXIsXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gKHZub2RlLCBybSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmICh2bm9kZS5kYXRhLnNob3cgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgbGVhdmUodm5vZGUsIHJtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJtKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgOiB7fTtcblxudmFyIHBsYXRmb3JtTW9kdWxlcyA9IFthdHRycywga2xhc3MsIGV2ZW50cywgZG9tUHJvcHMsIHN0eWxlLCB0cmFuc2l0aW9uXTtcblxuLy8gdGhlIGRpcmVjdGl2ZSBtb2R1bGUgc2hvdWxkIGJlIGFwcGxpZWQgbGFzdCwgYWZ0ZXIgYWxsXG4vLyBidWlsdC1pbiBtb2R1bGVzIGhhdmUgYmVlbiBhcHBsaWVkLlxudmFyIG1vZHVsZXMgPSBwbGF0Zm9ybU1vZHVsZXMuY29uY2F0KGJhc2VNb2R1bGVzKTtcbnZhciBwYXRjaCA9IGNyZWF0ZVBhdGNoRnVuY3Rpb24oeyBub2RlT3BzOiBub2RlT3BzLCBtb2R1bGVzOiBtb2R1bGVzIH0pO1xuXG4vKipcbiAqIE5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBsaWtlIGF0dGFjaGluZ1xuICogcHJvcGVydGllcyB0byBFbGVtZW50cy5cbiAqL1xuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAoaXNJRTkpIHtcbiAgICAvLyBodHRwOi8vd3d3Lm1hdHRzNDExLmNvbS9wb3N0L2ludGVybmV0LWV4cGxvcmVyLTktb25pbnB1dC9cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rpb25jaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgaWYgKGVsICYmIGVsLnZtb2RlbCkge1xuICAgICAgICAgICAgdHJpZ2dlcihlbCwgJ2lucHV0Jyk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbnZhciBkaXJlY3RpdmUgPSB7XG4gICAgaW5zZXJ0ZWQ6IGZ1bmN0aW9uIChlbCwgYmluZGluZywgdm5vZGUsIG9sZFZub2RlKSB7XG4gICAgICAgIGlmICh2bm9kZS50YWcgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgICAgICAvLyAjNjkwM1xuICAgICAgICAgICAgaWYgKG9sZFZub2RlLmVsbSAmJiAhb2xkVm5vZGUuZWxtLl92T3B0aW9ucykge1xuICAgICAgICAgICAgICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAncG9zdHBhdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmUuY29tcG9uZW50VXBkYXRlZChlbCwgYmluZGluZywgdm5vZGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZub2RlLmNvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWwuX3ZPcHRpb25zID0gW10ubWFwLmNhbGwoZWwub3B0aW9ucywgZ2V0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZub2RlLnRhZyA9PT0gJ3RleHRhcmVhJyB8fCBpc1RleHRJbnB1dFR5cGUoZWwudHlwZSkpIHtcbiAgICAgICAgICAgIGVsLl92TW9kaWZpZXJzID0gYmluZGluZy5tb2RpZmllcnM7XG4gICAgICAgICAgICBpZiAoIWJpbmRpbmcubW9kaWZpZXJzLmxhenkpIHtcbiAgICAgICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbnN0YXJ0Jywgb25Db21wb3NpdGlvblN0YXJ0KTtcbiAgICAgICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbmVuZCcsIG9uQ29tcG9zaXRpb25FbmQpO1xuICAgICAgICAgICAgICAgIC8vIFNhZmFyaSA8IDEwLjIgJiBVSVdlYlZpZXcgZG9lc24ndCBmaXJlIGNvbXBvc2l0aW9uZW5kIHdoZW5cbiAgICAgICAgICAgICAgICAvLyBzd2l0Y2hpbmcgZm9jdXMgYmVmb3JlIGNvbmZpcm1pbmcgY29tcG9zaXRpb24gY2hvaWNlXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBhbHNvIGZpeGVzIHRoZSBpc3N1ZSB3aGVyZSBzb21lIGJyb3dzZXJzIGUuZy4gaU9TIENocm9tZVxuICAgICAgICAgICAgICAgIC8vIGZpcmVzIFwiY2hhbmdlXCIgaW5zdGVhZCBvZiBcImlucHV0XCIgb24gYXV0b2NvbXBsZXRlLlxuICAgICAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIG9uQ29tcG9zaXRpb25FbmQpO1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmIChpc0lFOSkge1xuICAgICAgICAgICAgICAgICAgICBlbC52bW9kZWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgY29tcG9uZW50VXBkYXRlZDogZnVuY3Rpb24gKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuICAgICAgICBpZiAodm5vZGUudGFnID09PSAnc2VsZWN0Jykge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZub2RlLmNvbnRleHQpO1xuICAgICAgICAgICAgLy8gaW4gY2FzZSB0aGUgb3B0aW9ucyByZW5kZXJlZCBieSB2LWZvciBoYXZlIGNoYW5nZWQsXG4gICAgICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHZhbHVlIGlzIG91dC1vZi1zeW5jIHdpdGggdGhlIHJlbmRlcmVkIG9wdGlvbnMuXG4gICAgICAgICAgICAvLyBkZXRlY3Qgc3VjaCBjYXNlcyBhbmQgZmlsdGVyIG91dCB2YWx1ZXMgdGhhdCBubyBsb25nZXIgaGFzIGEgbWF0Y2hpbmdcbiAgICAgICAgICAgIC8vIG9wdGlvbiBpbiB0aGUgRE9NLlxuICAgICAgICAgICAgdmFyIHByZXZPcHRpb25zXzEgPSBlbC5fdk9wdGlvbnM7XG4gICAgICAgICAgICB2YXIgY3VyT3B0aW9uc18xID0gKGVsLl92T3B0aW9ucyA9IFtdLm1hcC5jYWxsKGVsLm9wdGlvbnMsIGdldFZhbHVlKSk7XG4gICAgICAgICAgICBpZiAoY3VyT3B0aW9uc18xLnNvbWUoZnVuY3Rpb24gKG8sIGkpIHsgcmV0dXJuICFsb29zZUVxdWFsKG8sIHByZXZPcHRpb25zXzFbaV0pOyB9KSkge1xuICAgICAgICAgICAgICAgIC8vIHRyaWdnZXIgY2hhbmdlIGV2ZW50IGlmXG4gICAgICAgICAgICAgICAgLy8gbm8gbWF0Y2hpbmcgb3B0aW9uIGZvdW5kIGZvciBhdCBsZWFzdCBvbmUgdmFsdWVcbiAgICAgICAgICAgICAgICB2YXIgbmVlZFJlc2V0ID0gZWwubXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgPyBiaW5kaW5nLnZhbHVlLnNvbWUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIGhhc05vTWF0Y2hpbmdPcHRpb24odiwgY3VyT3B0aW9uc18xKTsgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBiaW5kaW5nLnZhbHVlICE9PSBiaW5kaW5nLm9sZFZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNOb01hdGNoaW5nT3B0aW9uKGJpbmRpbmcudmFsdWUsIGN1ck9wdGlvbnNfMSk7XG4gICAgICAgICAgICAgICAgaWYgKG5lZWRSZXNldCkge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKGVsLCAnY2hhbmdlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcbmZ1bmN0aW9uIHNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bSkge1xuICAgIGFjdHVhbGx5U2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZtKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXNJRSB8fCBpc0VkZ2UpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBhY3R1YWxseVNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bSk7XG4gICAgICAgIH0sIDApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFjdHVhbGx5U2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZtKSB7XG4gICAgdmFyIHZhbHVlID0gYmluZGluZy52YWx1ZTtcbiAgICB2YXIgaXNNdWx0aXBsZSA9IGVsLm11bHRpcGxlO1xuICAgIGlmIChpc011bHRpcGxlICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICB3YXJuKFwiPHNlbGVjdCBtdWx0aXBsZSB2LW1vZGVsPVxcXCJcIi5jb25jYXQoYmluZGluZy5leHByZXNzaW9uLCBcIlxcXCI+IFwiKSArXG4gICAgICAgICAgICAgICAgXCJleHBlY3RzIGFuIEFycmF5IHZhbHVlIGZvciBpdHMgYmluZGluZywgYnV0IGdvdCBcIi5jb25jYXQoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ1xuICAgICAgICAgICAgICAgICAgICAuY2FsbCh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDgsIC0xKSksIHZtKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgc2VsZWN0ZWQsIG9wdGlvbjtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGVsLm9wdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIG9wdGlvbiA9IGVsLm9wdGlvbnNbaV07XG4gICAgICAgIGlmIChpc011bHRpcGxlKSB7XG4gICAgICAgICAgICBzZWxlY3RlZCA9IGxvb3NlSW5kZXhPZih2YWx1ZSwgZ2V0VmFsdWUob3B0aW9uKSkgPiAtMTtcbiAgICAgICAgICAgIGlmIChvcHRpb24uc2VsZWN0ZWQgIT09IHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAobG9vc2VFcXVhbChnZXRWYWx1ZShvcHRpb24pLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWwuc2VsZWN0ZWRJbmRleCAhPT0gaSkge1xuICAgICAgICAgICAgICAgICAgICBlbC5zZWxlY3RlZEluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghaXNNdWx0aXBsZSkge1xuICAgICAgICBlbC5zZWxlY3RlZEluZGV4ID0gLTE7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFzTm9NYXRjaGluZ09wdGlvbih2YWx1ZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zLmV2ZXJ5KGZ1bmN0aW9uIChvKSB7IHJldHVybiAhbG9vc2VFcXVhbChvLCB2YWx1ZSk7IH0pO1xufVxuZnVuY3Rpb24gZ2V0VmFsdWUob3B0aW9uKSB7XG4gICAgcmV0dXJuICdfdmFsdWUnIGluIG9wdGlvbiA/IG9wdGlvbi5fdmFsdWUgOiBvcHRpb24udmFsdWU7XG59XG5mdW5jdGlvbiBvbkNvbXBvc2l0aW9uU3RhcnQoZSkge1xuICAgIGUudGFyZ2V0LmNvbXBvc2luZyA9IHRydWU7XG59XG5mdW5jdGlvbiBvbkNvbXBvc2l0aW9uRW5kKGUpIHtcbiAgICAvLyBwcmV2ZW50IHRyaWdnZXJpbmcgYW4gaW5wdXQgZXZlbnQgZm9yIG5vIHJlYXNvblxuICAgIGlmICghZS50YXJnZXQuY29tcG9zaW5nKVxuICAgICAgICByZXR1cm47XG4gICAgZS50YXJnZXQuY29tcG9zaW5nID0gZmFsc2U7XG4gICAgdHJpZ2dlcihlLnRhcmdldCwgJ2lucHV0Jyk7XG59XG5mdW5jdGlvbiB0cmlnZ2VyKGVsLCB0eXBlKSB7XG4gICAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpO1xuICAgIGUuaW5pdEV2ZW50KHR5cGUsIHRydWUsIHRydWUpO1xuICAgIGVsLmRpc3BhdGNoRXZlbnQoZSk7XG59XG5cbi8vIHJlY3Vyc2l2ZWx5IHNlYXJjaCBmb3IgcG9zc2libGUgdHJhbnNpdGlvbiBkZWZpbmVkIGluc2lkZSB0aGUgY29tcG9uZW50IHJvb3RcbmZ1bmN0aW9uIGxvY2F0ZU5vZGUodm5vZGUpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgcmV0dXJuIHZub2RlLmNvbXBvbmVudEluc3RhbmNlICYmICghdm5vZGUuZGF0YSB8fCAhdm5vZGUuZGF0YS50cmFuc2l0aW9uKVxuICAgICAgICA/IGxvY2F0ZU5vZGUodm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlKVxuICAgICAgICA6IHZub2RlO1xufVxudmFyIHNob3cgPSB7XG4gICAgYmluZDogZnVuY3Rpb24gKGVsLCBfYSwgdm5vZGUpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gX2EudmFsdWU7XG4gICAgICAgIHZub2RlID0gbG9jYXRlTm9kZSh2bm9kZSk7XG4gICAgICAgIHZhciB0cmFuc2l0aW9uID0gdm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLnRyYW5zaXRpb247XG4gICAgICAgIHZhciBvcmlnaW5hbERpc3BsYXkgPSAoZWwuX192T3JpZ2luYWxEaXNwbGF5ID1cbiAgICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJyA/ICcnIDogZWwuc3R5bGUuZGlzcGxheSk7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0cmFuc2l0aW9uKSB7XG4gICAgICAgICAgICB2bm9kZS5kYXRhLnNob3cgPSB0cnVlO1xuICAgICAgICAgICAgZW50ZXIodm5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gb3JpZ2luYWxEaXNwbGF5O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gdmFsdWUgPyBvcmlnaW5hbERpc3BsYXkgOiAnbm9uZSc7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGVsLCBfYSwgdm5vZGUpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gX2EudmFsdWUsIG9sZFZhbHVlID0gX2Eub2xkVmFsdWU7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIXZhbHVlID09PSAhb2xkVmFsdWUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZub2RlID0gbG9jYXRlTm9kZSh2bm9kZSk7XG4gICAgICAgIHZhciB0cmFuc2l0aW9uID0gdm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLnRyYW5zaXRpb247XG4gICAgICAgIGlmICh0cmFuc2l0aW9uKSB7XG4gICAgICAgICAgICB2bm9kZS5kYXRhLnNob3cgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZW50ZXIodm5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxlYXZlKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gdmFsdWUgPyBlbC5fX3ZPcmlnaW5hbERpc3BsYXkgOiAnbm9uZSc7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHVuYmluZDogZnVuY3Rpb24gKGVsLCBiaW5kaW5nLCB2bm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSkge1xuICAgICAgICBpZiAoIWlzRGVzdHJveSkge1xuICAgICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbnZhciBwbGF0Zm9ybURpcmVjdGl2ZXMgPSB7XG4gICAgbW9kZWw6IGRpcmVjdGl2ZSxcbiAgICBzaG93OiBzaG93XG59O1xuXG4vLyBQcm92aWRlcyB0cmFuc2l0aW9uIHN1cHBvcnQgZm9yIGEgc2luZ2xlIGVsZW1lbnQvY29tcG9uZW50LlxudmFyIHRyYW5zaXRpb25Qcm9wcyA9IHtcbiAgICBuYW1lOiBTdHJpbmcsXG4gICAgYXBwZWFyOiBCb29sZWFuLFxuICAgIGNzczogQm9vbGVhbixcbiAgICBtb2RlOiBTdHJpbmcsXG4gICAgdHlwZTogU3RyaW5nLFxuICAgIGVudGVyQ2xhc3M6IFN0cmluZyxcbiAgICBsZWF2ZUNsYXNzOiBTdHJpbmcsXG4gICAgZW50ZXJUb0NsYXNzOiBTdHJpbmcsXG4gICAgbGVhdmVUb0NsYXNzOiBTdHJpbmcsXG4gICAgZW50ZXJBY3RpdmVDbGFzczogU3RyaW5nLFxuICAgIGxlYXZlQWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgICBhcHBlYXJDbGFzczogU3RyaW5nLFxuICAgIGFwcGVhckFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gICAgYXBwZWFyVG9DbGFzczogU3RyaW5nLFxuICAgIGR1cmF0aW9uOiBbTnVtYmVyLCBTdHJpbmcsIE9iamVjdF1cbn07XG4vLyBpbiBjYXNlIHRoZSBjaGlsZCBpcyBhbHNvIGFuIGFic3RyYWN0IGNvbXBvbmVudCwgZS5nLiA8a2VlcC1hbGl2ZT5cbi8vIHdlIHdhbnQgdG8gcmVjdXJzaXZlbHkgcmV0cmlldmUgdGhlIHJlYWwgY29tcG9uZW50IHRvIGJlIHJlbmRlcmVkXG5mdW5jdGlvbiBnZXRSZWFsQ2hpbGQodm5vZGUpIHtcbiAgICB2YXIgY29tcE9wdGlvbnMgPSB2bm9kZSAmJiB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICAgIGlmIChjb21wT3B0aW9ucyAmJiBjb21wT3B0aW9ucy5DdG9yLm9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgICAgcmV0dXJuIGdldFJlYWxDaGlsZChnZXRGaXJzdENvbXBvbmVudENoaWxkKGNvbXBPcHRpb25zLmNoaWxkcmVuKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdm5vZGU7XG4gICAgfVxufVxuZnVuY3Rpb24gZXh0cmFjdFRyYW5zaXRpb25EYXRhKGNvbXApIHtcbiAgICB2YXIgZGF0YSA9IHt9O1xuICAgIHZhciBvcHRpb25zID0gY29tcC4kb3B0aW9ucztcbiAgICAvLyBwcm9wc1xuICAgIGZvciAodmFyIGtleSBpbiBvcHRpb25zLnByb3BzRGF0YSkge1xuICAgICAgICBkYXRhW2tleV0gPSBjb21wW2tleV07XG4gICAgfVxuICAgIC8vIGV2ZW50cy5cbiAgICAvLyBleHRyYWN0IGxpc3RlbmVycyBhbmQgcGFzcyB0aGVtIGRpcmVjdGx5IHRvIHRoZSB0cmFuc2l0aW9uIG1ldGhvZHNcbiAgICB2YXIgbGlzdGVuZXJzID0gb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xuICAgIGZvciAodmFyIGtleSBpbiBsaXN0ZW5lcnMpIHtcbiAgICAgICAgZGF0YVtjYW1lbGl6ZShrZXkpXSA9IGxpc3RlbmVyc1trZXldO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbn1cbmZ1bmN0aW9uIHBsYWNlaG9sZGVyKGgsIHJhd0NoaWxkKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIGlmICgvXFxkLWtlZXAtYWxpdmUkLy50ZXN0KHJhd0NoaWxkLnRhZykpIHtcbiAgICAgICAgcmV0dXJuIGgoJ2tlZXAtYWxpdmUnLCB7XG4gICAgICAgICAgICBwcm9wczogcmF3Q2hpbGQuY29tcG9uZW50T3B0aW9ucy5wcm9wc0RhdGFcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFzUGFyZW50VHJhbnNpdGlvbih2bm9kZSkge1xuICAgIHdoaWxlICgodm5vZGUgPSB2bm9kZS5wYXJlbnQpKSB7XG4gICAgICAgIGlmICh2bm9kZS5kYXRhLnRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gaXNTYW1lQ2hpbGQoY2hpbGQsIG9sZENoaWxkKSB7XG4gICAgcmV0dXJuIG9sZENoaWxkLmtleSA9PT0gY2hpbGQua2V5ICYmIG9sZENoaWxkLnRhZyA9PT0gY2hpbGQudGFnO1xufVxudmFyIGlzTm90VGV4dE5vZGUgPSBmdW5jdGlvbiAoYykgeyByZXR1cm4gYy50YWcgfHwgaXNBc3luY1BsYWNlaG9sZGVyKGMpOyB9O1xudmFyIGlzVlNob3dEaXJlY3RpdmUgPSBmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC5uYW1lID09PSAnc2hvdyc7IH07XG52YXIgVHJhbnNpdGlvbiA9IHtcbiAgICBuYW1lOiAndHJhbnNpdGlvbicsXG4gICAgcHJvcHM6IHRyYW5zaXRpb25Qcm9wcyxcbiAgICBhYnN0cmFjdDogdHJ1ZSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuJHNsb3RzLmRlZmF1bHQ7XG4gICAgICAgIGlmICghY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBmaWx0ZXIgb3V0IHRleHQgbm9kZXMgKHBvc3NpYmxlIHdoaXRlc3BhY2VzKVxuICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLmZpbHRlcihpc05vdFRleHROb2RlKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2FybiBtdWx0aXBsZSBlbGVtZW50c1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjaGlsZHJlbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB3YXJuKCc8dHJhbnNpdGlvbj4gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIHNpbmdsZSBlbGVtZW50LiBVc2UgJyArXG4gICAgICAgICAgICAgICAgJzx0cmFuc2l0aW9uLWdyb3VwPiBmb3IgbGlzdHMuJywgdGhpcy4kcGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbW9kZSA9IHRoaXMubW9kZTtcbiAgICAgICAgLy8gd2FybiBpbnZhbGlkIG1vZGVcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgbW9kZSAmJiBtb2RlICE9PSAnaW4tb3V0JyAmJiBtb2RlICE9PSAnb3V0LWluJykge1xuICAgICAgICAgICAgd2FybignaW52YWxpZCA8dHJhbnNpdGlvbj4gbW9kZTogJyArIG1vZGUsIHRoaXMuJHBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJhd0NoaWxkID0gY2hpbGRyZW5bMF07XG4gICAgICAgIC8vIGlmIHRoaXMgaXMgYSBjb21wb25lbnQgcm9vdCBub2RlIGFuZCB0aGUgY29tcG9uZW50J3NcbiAgICAgICAgLy8gcGFyZW50IGNvbnRhaW5lciBub2RlIGFsc28gaGFzIHRyYW5zaXRpb24sIHNraXAuXG4gICAgICAgIGlmIChoYXNQYXJlbnRUcmFuc2l0aW9uKHRoaXMuJHZub2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJhd0NoaWxkO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFwcGx5IHRyYW5zaXRpb24gZGF0YSB0byBjaGlsZFxuICAgICAgICAvLyB1c2UgZ2V0UmVhbENoaWxkKCkgdG8gaWdub3JlIGFic3RyYWN0IGNvbXBvbmVudHMgZS5nLiBrZWVwLWFsaXZlXG4gICAgICAgIHZhciBjaGlsZCA9IGdldFJlYWxDaGlsZChyYXdDaGlsZCk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIWNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmF3Q2hpbGQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2xlYXZpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBwbGFjZWhvbGRlcihoLCByYXdDaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZW5zdXJlIGEga2V5IHRoYXQgaXMgdW5pcXVlIHRvIHRoZSB2bm9kZSB0eXBlIGFuZCB0byB0aGlzIHRyYW5zaXRpb25cbiAgICAgICAgLy8gY29tcG9uZW50IGluc3RhbmNlLiBUaGlzIGtleSB3aWxsIGJlIHVzZWQgdG8gcmVtb3ZlIHBlbmRpbmcgbGVhdmluZyBub2Rlc1xuICAgICAgICAvLyBkdXJpbmcgZW50ZXJpbmcuXG4gICAgICAgIHZhciBpZCA9IFwiX190cmFuc2l0aW9uLVwiLmNvbmNhdCh0aGlzLl91aWQsIFwiLVwiKTtcbiAgICAgICAgY2hpbGQua2V5ID1cbiAgICAgICAgICAgIGNoaWxkLmtleSA9PSBudWxsXG4gICAgICAgICAgICAgICAgPyBjaGlsZC5pc0NvbW1lbnRcbiAgICAgICAgICAgICAgICAgICAgPyBpZCArICdjb21tZW50J1xuICAgICAgICAgICAgICAgICAgICA6IGlkICsgY2hpbGQudGFnXG4gICAgICAgICAgICAgICAgOiBpc1ByaW1pdGl2ZShjaGlsZC5rZXkpXG4gICAgICAgICAgICAgICAgICAgID8gU3RyaW5nKGNoaWxkLmtleSkuaW5kZXhPZihpZCkgPT09IDBcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY2hpbGQua2V5XG4gICAgICAgICAgICAgICAgICAgICAgICA6IGlkICsgY2hpbGQua2V5XG4gICAgICAgICAgICAgICAgICAgIDogY2hpbGQua2V5O1xuICAgICAgICB2YXIgZGF0YSA9ICgoY2hpbGQuZGF0YSB8fCAoY2hpbGQuZGF0YSA9IHt9KSkudHJhbnNpdGlvbiA9XG4gICAgICAgICAgICBleHRyYWN0VHJhbnNpdGlvbkRhdGEodGhpcykpO1xuICAgICAgICB2YXIgb2xkUmF3Q2hpbGQgPSB0aGlzLl92bm9kZTtcbiAgICAgICAgdmFyIG9sZENoaWxkID0gZ2V0UmVhbENoaWxkKG9sZFJhd0NoaWxkKTtcbiAgICAgICAgLy8gbWFyayB2LXNob3dcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgdHJhbnNpdGlvbiBtb2R1bGUgY2FuIGhhbmQgb3ZlciB0aGUgY29udHJvbCB0byB0aGUgZGlyZWN0aXZlXG4gICAgICAgIGlmIChjaGlsZC5kYXRhLmRpcmVjdGl2ZXMgJiYgY2hpbGQuZGF0YS5kaXJlY3RpdmVzLnNvbWUoaXNWU2hvd0RpcmVjdGl2ZSkpIHtcbiAgICAgICAgICAgIGNoaWxkLmRhdGEuc2hvdyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9sZENoaWxkICYmXG4gICAgICAgICAgICBvbGRDaGlsZC5kYXRhICYmXG4gICAgICAgICAgICAhaXNTYW1lQ2hpbGQoY2hpbGQsIG9sZENoaWxkKSAmJlxuICAgICAgICAgICAgIWlzQXN5bmNQbGFjZWhvbGRlcihvbGRDaGlsZCkgJiZcbiAgICAgICAgICAgIC8vICM2Njg3IGNvbXBvbmVudCByb290IGlzIGEgY29tbWVudCBub2RlXG4gICAgICAgICAgICAhKG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlICYmXG4gICAgICAgICAgICAgICAgb2xkQ2hpbGQuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlLmlzQ29tbWVudCkpIHtcbiAgICAgICAgICAgIC8vIHJlcGxhY2Ugb2xkIGNoaWxkIHRyYW5zaXRpb24gZGF0YSB3aXRoIGZyZXNoIG9uZVxuICAgICAgICAgICAgLy8gaW1wb3J0YW50IGZvciBkeW5hbWljIHRyYW5zaXRpb25zIVxuICAgICAgICAgICAgdmFyIG9sZERhdGEgPSAob2xkQ2hpbGQuZGF0YS50cmFuc2l0aW9uID0gZXh0ZW5kKHt9LCBkYXRhKSk7XG4gICAgICAgICAgICAvLyBoYW5kbGUgdHJhbnNpdGlvbiBtb2RlXG4gICAgICAgICAgICBpZiAobW9kZSA9PT0gJ291dC1pbicpIHtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gcGxhY2Vob2xkZXIgbm9kZSBhbmQgcXVldWUgdXBkYXRlIHdoZW4gbGVhdmUgZmluaXNoZXNcbiAgICAgICAgICAgICAgICB0aGlzLl9sZWF2aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBtZXJnZVZOb2RlSG9vayhvbGREYXRhLCAnYWZ0ZXJMZWF2ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2xlYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuJGZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyKGgsIHJhd0NoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1vZGUgPT09ICdpbi1vdXQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXN5bmNQbGFjZWhvbGRlcihjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9sZFJhd0NoaWxkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgZGVsYXllZExlYXZlXzE7XG4gICAgICAgICAgICAgICAgdmFyIHBlcmZvcm1MZWF2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsYXllZExlYXZlXzEoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG1lcmdlVk5vZGVIb29rKGRhdGEsICdhZnRlckVudGVyJywgcGVyZm9ybUxlYXZlKTtcbiAgICAgICAgICAgICAgICBtZXJnZVZOb2RlSG9vayhkYXRhLCAnZW50ZXJDYW5jZWxsZWQnLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICAgICAgICAgIG1lcmdlVk5vZGVIb29rKG9sZERhdGEsICdkZWxheUxlYXZlJywgZnVuY3Rpb24gKGxlYXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGF5ZWRMZWF2ZV8xID0gbGVhdmU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJhd0NoaWxkO1xuICAgIH1cbn07XG5cbi8vIFByb3ZpZGVzIHRyYW5zaXRpb24gc3VwcG9ydCBmb3IgbGlzdCBpdGVtcy5cbnZhciBwcm9wcyA9IGV4dGVuZCh7XG4gICAgdGFnOiBTdHJpbmcsXG4gICAgbW92ZUNsYXNzOiBTdHJpbmdcbn0sIHRyYW5zaXRpb25Qcm9wcyk7XG5kZWxldGUgcHJvcHMubW9kZTtcbnZhciBUcmFuc2l0aW9uR3JvdXAgPSB7XG4gICAgcHJvcHM6IHByb3BzLFxuICAgIGJlZm9yZU1vdW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciB1cGRhdGUgPSB0aGlzLl91cGRhdGU7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSA9IGZ1bmN0aW9uICh2bm9kZSwgaHlkcmF0aW5nKSB7XG4gICAgICAgICAgICB2YXIgcmVzdG9yZUFjdGl2ZUluc3RhbmNlID0gc2V0QWN0aXZlSW5zdGFuY2UoX3RoaXMpO1xuICAgICAgICAgICAgLy8gZm9yY2UgcmVtb3ZpbmcgcGFzc1xuICAgICAgICAgICAgX3RoaXMuX19wYXRjaF9fKF90aGlzLl92bm9kZSwgX3RoaXMua2VwdCwgZmFsc2UsIC8vIGh5ZHJhdGluZ1xuICAgICAgICAgICAgdHJ1ZSAvLyByZW1vdmVPbmx5ICghaW1wb3J0YW50LCBhdm9pZHMgdW5uZWNlc3NhcnkgbW92ZXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgX3RoaXMuX3Zub2RlID0gX3RoaXMua2VwdDtcbiAgICAgICAgICAgIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSgpO1xuICAgICAgICAgICAgdXBkYXRlLmNhbGwoX3RoaXMsIHZub2RlLCBoeWRyYXRpbmcpO1xuICAgICAgICB9O1xuICAgIH0sXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoaCkge1xuICAgICAgICB2YXIgdGFnID0gdGhpcy50YWcgfHwgdGhpcy4kdm5vZGUuZGF0YS50YWcgfHwgJ3NwYW4nO1xuICAgICAgICB2YXIgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdmFyIHByZXZDaGlsZHJlbiA9ICh0aGlzLnByZXZDaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4pO1xuICAgICAgICB2YXIgcmF3Q2hpbGRyZW4gPSB0aGlzLiRzbG90cy5kZWZhdWx0IHx8IFtdO1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSAodGhpcy5jaGlsZHJlbiA9IFtdKTtcbiAgICAgICAgdmFyIHRyYW5zaXRpb25EYXRhID0gZXh0cmFjdFRyYW5zaXRpb25EYXRhKHRoaXMpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhd0NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgYyA9IHJhd0NoaWxkcmVuW2ldO1xuICAgICAgICAgICAgaWYgKGMudGFnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGMua2V5ICE9IG51bGwgJiYgU3RyaW5nKGMua2V5KS5pbmRleE9mKCdfX3ZsaXN0JykgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjKTtcbiAgICAgICAgICAgICAgICAgICAgbWFwW2Mua2V5XSA9IGM7XG4gICAgICAgICAgICAgICAgICAgIChjLmRhdGEgfHwgKGMuZGF0YSA9IHt9KSkudHJhbnNpdGlvbiA9IHRyYW5zaXRpb25EYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvcHRzID0gYy5jb21wb25lbnRPcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZV8xID0gb3B0c1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBnZXRDb21wb25lbnROYW1lKG9wdHMuQ3Rvci5vcHRpb25zKSB8fCBvcHRzLnRhZyB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBjLnRhZztcbiAgICAgICAgICAgICAgICAgICAgd2FybihcIjx0cmFuc2l0aW9uLWdyb3VwPiBjaGlsZHJlbiBtdXN0IGJlIGtleWVkOiA8XCIuY29uY2F0KG5hbWVfMSwgXCI+XCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZDaGlsZHJlbikge1xuICAgICAgICAgICAgdmFyIGtlcHQgPSBbXTtcbiAgICAgICAgICAgIHZhciByZW1vdmVkID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBjID0gcHJldkNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgICAgIGMuZGF0YS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkRhdGE7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGlzIG5vdCB0eXBlZCBpbiBOb2RlXG4gICAgICAgICAgICAgICAgYy5kYXRhLnBvcyA9IGMuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGlmIChtYXBbYy5rZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIGtlcHQucHVzaChjKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWQucHVzaChjKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmtlcHQgPSBoKHRhZywgbnVsbCwga2VwdCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZWQgPSByZW1vdmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoKHRhZywgbnVsbCwgY2hpbGRyZW4pO1xuICAgIH0sXG4gICAgdXBkYXRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByZXZDaGlsZHJlbjtcbiAgICAgICAgdmFyIG1vdmVDbGFzcyA9IHRoaXMubW92ZUNsYXNzIHx8ICh0aGlzLm5hbWUgfHwgJ3YnKSArICctbW92ZSc7XG4gICAgICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLmhhc01vdmUoY2hpbGRyZW5bMF0uZWxtLCBtb3ZlQ2xhc3MpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UgZGl2aWRlIHRoZSB3b3JrIGludG8gdGhyZWUgbG9vcHMgdG8gYXZvaWQgbWl4aW5nIERPTSByZWFkcyBhbmQgd3JpdGVzXG4gICAgICAgIC8vIGluIGVhY2ggaXRlcmF0aW9uIC0gd2hpY2ggaGVscHMgcHJldmVudCBsYXlvdXQgdGhyYXNoaW5nLlxuICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGNhbGxQZW5kaW5nQ2JzKTtcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChyZWNvcmRQb3NpdGlvbik7XG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2goYXBwbHlUcmFuc2xhdGlvbik7XG4gICAgICAgIC8vIGZvcmNlIHJlZmxvdyB0byBwdXQgZXZlcnl0aGluZyBpbiBwb3NpdGlvblxuICAgICAgICAvLyBhc3NpZ24gdG8gdGhpcyB0byBhdm9pZCBiZWluZyByZW1vdmVkIGluIHRyZWUtc2hha2luZ1xuICAgICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgICAgdGhpcy5fcmVmbG93ID0gZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICAgIGlmIChjLmRhdGEubW92ZWQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZWxfMSA9IGMuZWxtO1xuICAgICAgICAgICAgICAgIHZhciBzID0gZWxfMS5zdHlsZTtcbiAgICAgICAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWxfMSwgbW92ZUNsYXNzKTtcbiAgICAgICAgICAgICAgICBzLnRyYW5zZm9ybSA9IHMuV2Via2l0VHJhbnNmb3JtID0gcy50cmFuc2l0aW9uRHVyYXRpb24gPSAnJztcbiAgICAgICAgICAgICAgICBlbF8xLmFkZEV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZEV2ZW50LCAoZWxfMS5fbW92ZUNiID0gZnVuY3Rpb24gY2IoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLnRhcmdldCAhPT0gZWxfMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghZSB8fCAvdHJhbnNmb3JtJC8udGVzdChlLnByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsXzEucmVtb3ZlRXZlbnRMaXN0ZW5lcih0cmFuc2l0aW9uRW5kRXZlbnQsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsXzEuX21vdmVDYiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWxfMSwgbW92ZUNsYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGhhc01vdmU6IGZ1bmN0aW9uIChlbCwgbW92ZUNsYXNzKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmICghaGFzVHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKHRoaXMuX2hhc01vdmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzTW92ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIERldGVjdCB3aGV0aGVyIGFuIGVsZW1lbnQgd2l0aCB0aGUgbW92ZSBjbGFzcyBhcHBsaWVkIGhhc1xuICAgICAgICAgICAgLy8gQ1NTIHRyYW5zaXRpb25zLiBTaW5jZSB0aGUgZWxlbWVudCBtYXkgYmUgaW5zaWRlIGFuIGVudGVyaW5nXG4gICAgICAgICAgICAvLyB0cmFuc2l0aW9uIGF0IHRoaXMgdmVyeSBtb21lbnQsIHdlIG1ha2UgYSBjbG9uZSBvZiBpdCBhbmQgcmVtb3ZlXG4gICAgICAgICAgICAvLyBhbGwgb3RoZXIgdHJhbnNpdGlvbiBjbGFzc2VzIGFwcGxpZWQgdG8gZW5zdXJlIG9ubHkgdGhlIG1vdmUgY2xhc3NcbiAgICAgICAgICAgIC8vIGlzIGFwcGxpZWQuXG4gICAgICAgICAgICB2YXIgY2xvbmUgPSBlbC5jbG9uZU5vZGUoKTtcbiAgICAgICAgICAgIGlmIChlbC5fdHJhbnNpdGlvbkNsYXNzZXMpIHtcbiAgICAgICAgICAgICAgICBlbC5fdHJhbnNpdGlvbkNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzKGNsb25lLCBjbHMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWRkQ2xhc3MoY2xvbmUsIG1vdmVDbGFzcyk7XG4gICAgICAgICAgICBjbG9uZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgdGhpcy4kZWwuYXBwZW5kQ2hpbGQoY2xvbmUpO1xuICAgICAgICAgICAgdmFyIGluZm8gPSBnZXRUcmFuc2l0aW9uSW5mbyhjbG9uZSk7XG4gICAgICAgICAgICB0aGlzLiRlbC5yZW1vdmVDaGlsZChjbG9uZSk7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuX2hhc01vdmUgPSBpbmZvLmhhc1RyYW5zZm9ybSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuZnVuY3Rpb24gY2FsbFBlbmRpbmdDYnMoYykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChjLmVsbS5fbW92ZUNiKSB7XG4gICAgICAgIGMuZWxtLl9tb3ZlQ2IoKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGMuZWxtLl9lbnRlckNiKSB7XG4gICAgICAgIGMuZWxtLl9lbnRlckNiKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVjb3JkUG9zaXRpb24oYykge1xuICAgIGMuZGF0YS5uZXdQb3MgPSBjLmVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbn1cbmZ1bmN0aW9uIGFwcGx5VHJhbnNsYXRpb24oYykge1xuICAgIHZhciBvbGRQb3MgPSBjLmRhdGEucG9zO1xuICAgIHZhciBuZXdQb3MgPSBjLmRhdGEubmV3UG9zO1xuICAgIHZhciBkeCA9IG9sZFBvcy5sZWZ0IC0gbmV3UG9zLmxlZnQ7XG4gICAgdmFyIGR5ID0gb2xkUG9zLnRvcCAtIG5ld1Bvcy50b3A7XG4gICAgaWYgKGR4IHx8IGR5KSB7XG4gICAgICAgIGMuZGF0YS5tb3ZlZCA9IHRydWU7XG4gICAgICAgIHZhciBzID0gYy5lbG0uc3R5bGU7XG4gICAgICAgIHMudHJhbnNmb3JtID0gcy5XZWJraXRUcmFuc2Zvcm0gPSBcInRyYW5zbGF0ZShcIi5jb25jYXQoZHgsIFwicHgsXCIpLmNvbmNhdChkeSwgXCJweClcIik7XG4gICAgICAgIHMudHJhbnNpdGlvbkR1cmF0aW9uID0gJzBzJztcbiAgICB9XG59XG5cbnZhciBwbGF0Zm9ybUNvbXBvbmVudHMgPSB7XG4gICAgVHJhbnNpdGlvbjogVHJhbnNpdGlvbixcbiAgICBUcmFuc2l0aW9uR3JvdXA6IFRyYW5zaXRpb25Hcm91cFxufTtcblxuLy8gaW5zdGFsbCBwbGF0Zm9ybSBzcGVjaWZpYyB1dGlsc1xuVnVlLmNvbmZpZy5tdXN0VXNlUHJvcCA9IG11c3RVc2VQcm9wO1xuVnVlLmNvbmZpZy5pc1Jlc2VydmVkVGFnID0gaXNSZXNlcnZlZFRhZztcblZ1ZS5jb25maWcuaXNSZXNlcnZlZEF0dHIgPSBpc1Jlc2VydmVkQXR0cjtcblZ1ZS5jb25maWcuZ2V0VGFnTmFtZXNwYWNlID0gZ2V0VGFnTmFtZXNwYWNlO1xuVnVlLmNvbmZpZy5pc1Vua25vd25FbGVtZW50ID0gaXNVbmtub3duRWxlbWVudDtcbi8vIGluc3RhbGwgcGxhdGZvcm0gcnVudGltZSBkaXJlY3RpdmVzICYgY29tcG9uZW50c1xuZXh0ZW5kKFZ1ZS5vcHRpb25zLmRpcmVjdGl2ZXMsIHBsYXRmb3JtRGlyZWN0aXZlcyk7XG5leHRlbmQoVnVlLm9wdGlvbnMuY29tcG9uZW50cywgcGxhdGZvcm1Db21wb25lbnRzKTtcbi8vIGluc3RhbGwgcGxhdGZvcm0gcGF0Y2ggZnVuY3Rpb25cblZ1ZS5wcm90b3R5cGUuX19wYXRjaF9fID0gaW5Ccm93c2VyID8gcGF0Y2ggOiBub29wO1xuLy8gcHVibGljIG1vdW50IG1ldGhvZFxuVnVlLnByb3RvdHlwZS4kbW91bnQgPSBmdW5jdGlvbiAoZWwsIGh5ZHJhdGluZykge1xuICAgIGVsID0gZWwgJiYgaW5Ccm93c2VyID8gcXVlcnkoZWwpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBtb3VudENvbXBvbmVudCh0aGlzLCBlbCwgaHlkcmF0aW5nKTtcbn07XG4vLyBkZXZ0b29scyBnbG9iYWwgaG9va1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpbkJyb3dzZXIpIHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5kZXZ0b29scykge1xuICAgICAgICAgICAgaWYgKGRldnRvb2xzKSB7XG4gICAgICAgICAgICAgICAgZGV2dG9vbHMuZW1pdCgnaW5pdCcsIFZ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcpIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgY29uc29sZVtjb25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oJ0Rvd25sb2FkIHRoZSBWdWUgRGV2dG9vbHMgZXh0ZW5zaW9uIGZvciBhIGJldHRlciBkZXZlbG9wbWVudCBleHBlcmllbmNlOlxcbicgK1xuICAgICAgICAgICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1kZXZ0b29scycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnICYmXG4gICAgICAgICAgICBjb25maWcucHJvZHVjdGlvblRpcCAhPT0gZmFsc2UgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgY29uc29sZVtjb25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oXCJZb3UgYXJlIHJ1bm5pbmcgVnVlIGluIGRldmVsb3BtZW50IG1vZGUuXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiTWFrZSBzdXJlIHRvIHR1cm4gb24gcHJvZHVjdGlvbiBtb2RlIHdoZW4gZGVwbG95aW5nIGZvciBwcm9kdWN0aW9uLlxcblwiICtcbiAgICAgICAgICAgICAgICBcIlNlZSBtb3JlIHRpcHMgYXQgaHR0cHM6Ly92dWVqcy5vcmcvZ3VpZGUvZGVwbG95bWVudC5odG1sXCIpO1xuICAgICAgICB9XG4gICAgfSwgMCk7XG59XG5cbmV4cG9ydCB7IEVmZmVjdFNjb3BlLCBjb21wdXRlZCwgY3VzdG9tUmVmLCBWdWUgYXMgZGVmYXVsdCwgZGVmaW5lQXN5bmNDb21wb25lbnQsIGRlZmluZUNvbXBvbmVudCwgZGVsLCBlZmZlY3RTY29wZSwgZ2V0Q3VycmVudEluc3RhbmNlLCBnZXRDdXJyZW50U2NvcGUsIGgsIGluamVjdCwgaXNQcm94eSwgaXNSZWFjdGl2ZSwgaXNSZWFkb25seSwgaXNSZWYsIGlzU2hhbGxvdywgbWFya1JhdywgbWVyZ2VEZWZhdWx0cywgbmV4dFRpY2ssIG9uQWN0aXZhdGVkLCBvbkJlZm9yZU1vdW50LCBvbkJlZm9yZVVubW91bnQsIG9uQmVmb3JlVXBkYXRlLCBvbkRlYWN0aXZhdGVkLCBvbkVycm9yQ2FwdHVyZWQsIG9uTW91bnRlZCwgb25SZW5kZXJUcmFja2VkLCBvblJlbmRlclRyaWdnZXJlZCwgb25TY29wZURpc3Bvc2UsIG9uU2VydmVyUHJlZmV0Y2gsIG9uVW5tb3VudGVkLCBvblVwZGF0ZWQsIHByb3ZpZGUsIHByb3h5UmVmcywgcmVhY3RpdmUsIHJlYWRvbmx5LCByZWYkMSBhcyByZWYsIHNldCwgc2hhbGxvd1JlYWN0aXZlLCBzaGFsbG93UmVhZG9ubHksIHNoYWxsb3dSZWYsIHRvUmF3LCB0b1JlZiwgdG9SZWZzLCB0cmlnZ2VyUmVmLCB1bnJlZiwgdXNlQXR0cnMsIHVzZUNzc01vZHVsZSwgdXNlQ3NzVmFycywgdXNlTGlzdGVuZXJzLCB1c2VTbG90cywgdmVyc2lvbiwgd2F0Y2gsIHdhdGNoRWZmZWN0LCB3YXRjaFBvc3RFZmZlY3QsIHdhdGNoU3luY0VmZmVjdCB9O1xuIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgdmFyIF92bSA9IHRoaXMsXG4gICAgX2MgPSBfdm0uX3NlbGYuX2NcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgW1xuICAgICAgX2MoXCJmbGV4LWZpbHRlci1iYXJcIiwgeyBhdHRyczogeyBzdG9yZTogX3ZtLnN0b3JlIH0gfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJmbGV4LWNvbnRlbnQtbG9hZGVyXCIsIHtcbiAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgIHZhbHVlOiBfdm0ubG9hZGluZyxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwibG9hZGluZ1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGF0dHJzOiB7IHN0b3JlOiBfdm0uc3RvcmUgfSxcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZmxleC10YWJsZVwiLCB7XG4gICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICB2YWx1ZTogIV92bS5sb2FkaW5nLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogXCIhbG9hZGluZ1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGF0dHJzOiB7IHN0b3JlOiBfdm0uc3RvcmUgfSxcbiAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICB2YWx1ZTogX3ZtLmxvYWRpbmcsXG4gICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uICgkJHYpIHtcbiAgICAgICAgICAgIF92bS5sb2FkaW5nID0gJCR2XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleHByZXNzaW9uOiBcImxvYWRpbmdcIixcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/cnVsZVNldFsxXS5ydWxlc1syXSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0FwcC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmQzMjc4ZGVcIiIsInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gIHZhciBfdm0gPSB0aGlzLFxuICAgIF9jID0gX3ZtLl9zZWxmLl9jXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIFtcbiAgICAgIF9jKFwidnVldGFibGVcIiwge1xuICAgICAgICByZWY6IFwidnVldGFibGVcIixcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBjc3M6IF92bS5jc3MudGFibGUsXG4gICAgICAgICAgZmllbGRzOiBfdm0uc3RvcmUuZmllbGRzIHx8IFtdLFxuICAgICAgICAgIHNlYXJjaEZpZWxkczogX3ZtLnN0b3JlLnNlYXJjaEZpZWxkcyB8fCBbXSxcbiAgICAgICAgICBzb3J0T3JkZXI6IF92bS5zdG9yZS5zb3J0T3JkZXIsXG4gICAgICAgICAgXCJtdWx0aS1zb3J0XCI6IHRydWUsXG4gICAgICAgICAgXCJhcGktbW9kZVwiOiB0cnVlLFxuICAgICAgICAgIFwiYXBpLXVybFwiOiBfdm0uc3RvcmUuYXBpLFxuICAgICAgICAgIFwicGVyLXBhZ2VcIjogX3ZtLnBlclBhZ2UsXG4gICAgICAgICAgXCJhcHBlbmQtcGFyYW1zXCI6IF92bS5leHRyYVBhcmFtcyxcbiAgICAgICAgICBcInBhZ2luYXRpb24tcGF0aFwiOiBcImxpbmtzLnBhZ2luYXRpb25cIixcbiAgICAgICAgICBcInNob3ctc29ydC1pY29uc1wiOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgIFwidnVldGFibGU6cGFnaW5hdGlvbi1kYXRhXCI6IF92bS5vblBhZ2luYXRpb25EYXRhLFxuICAgICAgICAgIFwidnVldGFibGU6bG9hZGluZ1wiOiBfdm0ub25WdWV0YWJsZUxvYWRpbmcsXG4gICAgICAgICAgXCJ2dWV0YWJsZTpsb2FkLXN1Y2Nlc3NcIjogX3ZtLm9uVnVlVGFibGVMb2FkU3VjY2VzcyxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImZsZXgtbGlzdC1wYWdpbmF0aW9uXCIgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwidnVldGFibGUtcGFnaW5hdGlvbi1pbmZvXCIsIHtcbiAgICAgICAgICAgIHJlZjogXCJwYWdpbmF0aW9uSW5mb1wiLFxuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgXCJpbmZvLXRlbXBsYXRlXCI6IF92bS5zdG9yZS5wYWdpbmF0aW9uSW5mbyxcbiAgICAgICAgICAgICAgXCJpbmZvLW5vLWRhdGEtdGVtcGxhdGVcIjogX3ZtLnN0b3JlLmVtcHR5UmVzdWx0LFxuICAgICAgICAgICAgICBjc3M6IF92bS5jc3MucGFnaW5hdGlvbkluZm8sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJ2dWV0YWJsZS1wYWdpbmF0aW9uXCIsIHtcbiAgICAgICAgICAgIHJlZjogXCJwYWdpbmF0aW9uXCIsXG4gICAgICAgICAgICBhdHRyczogeyBjc3M6IF92bS5jc3MucGFnaW5hdGlvbiB9LFxuICAgICAgICAgICAgb246IHsgXCJ2dWV0YWJsZS1wYWdpbmF0aW9uOmNoYW5nZS1wYWdlXCI6IF92bS5vbkNoYW5nZVBhZ2UgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3J1bGVTZXRbMV0ucnVsZXNbMl0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9UYWJsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Mzc2OWM3YTFcIiIsInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gIHZhciBfdm0gPSB0aGlzLFxuICAgIF9jID0gX3ZtLl9zZWxmLl9jXG4gIHJldHVybiBfdm0uaXNGaXhlZEhlYWRlclxuICAgID8gX2MoXCJkaXZcIiwgW1xuICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInZ1ZXRhYmxlLWhlYWQtd3JhcHBlclwiIH0sIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwidGFibGVcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3M6IFtcInZ1ZXRhYmxlXCIsIF92bS5jc3MudGFibGVDbGFzcywgX3ZtLmNzcy50YWJsZUhlYWRlckNsYXNzXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwidGhlYWRcIiwgW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJ0clwiLFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnRhYmxlRmllbGRzLCBmdW5jdGlvbiAoZmllbGQsIGZpZWxkSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5pc1NwZWNpYWxGaWVsZChmaWVsZC5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5leHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PSBcIl9fY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2dWV0YWJsZS10aC1jaGVja2JveC1cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0udHJhY2tCeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC50aXRsZUNsYXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyB3aWR0aDogZmllbGQud2lkdGggfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiY2hlY2tib3hcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uY2hlY2tDaGVja2JveGVzU3RhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnRvZ2dsZUFsbENoZWNrYm94ZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09IFwiX19jb21wb25lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwidGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2dWV0YWJsZS10aC1jb21wb25lbnQtXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS50cmFja0J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC50aXRsZUNsYXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uc29ydENsYXNzKGZpZWxkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzb3J0YWJsZTogX3ZtLmlzU29ydGFibGUoZmllbGQpIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgd2lkdGg6IGZpZWxkLndpZHRoIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucmVuZGVyVGl0bGUoZmllbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9yZGVyQnkoZmllbGQsICRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gXCJfX3Nsb3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwidGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2dWV0YWJsZS10aC1zbG90LVwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdEFyZ3MoZmllbGQubmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnRpdGxlQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zb3J0Q2xhc3MoZmllbGQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHNvcnRhYmxlOiBfdm0uaXNTb3J0YWJsZShmaWVsZCkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyB3aWR0aDogZmllbGQud2lkdGggfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVySFRNTDogX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5yZW5kZXJUaXRsZShmaWVsZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub3JkZXJCeShmaWVsZCwgJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5leHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PSBcIl9fc2VxdWVuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwidGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2dWV0YWJsZS10aC1zZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC50aXRsZUNsYXNzIHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgd2lkdGg6IGZpZWxkLndpZHRoIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucmVuZGVyVGl0bGUoZmllbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLm5vdEluKF92bS5leHRyYWN0TmFtZShmaWVsZC5uYW1lKSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIl9fc2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJfX2NoZWNrYm94XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiX19jb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJfX3Nsb3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJ0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZ1ZXRhYmxlLXRoLVwiICsgZmllbGQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudGl0bGVDbGFzcyB8fCBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IHdpZHRoOiBmaWVsZC53aWR0aCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBfdm0uX3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnJlbmRlclRpdGxlKGZpZWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidnVldGFibGUtdGgtXCIgKyBmaWVsZC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnRpdGxlQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnNvcnRDbGFzcyhmaWVsZCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzb3J0YWJsZTogX3ZtLmlzU29ydGFibGUoZmllbGQpIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IHdpZHRoOiBmaWVsZC53aWR0aCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBpZDogXCJfXCIgKyBmaWVsZC5uYW1lIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBfdm0uX3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucmVuZGVyVGl0bGUoZmllbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vcmRlckJ5KGZpZWxkLCAkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgIF92bS5zY3JvbGxWaXNpYmxlXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwidnVldGFibGUtZ3V0dGVyLWNvbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyB3aWR0aDogX3ZtLnNjcm9sbEJhcldpZHRoIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgXVxuICAgICAgICAgICksXG4gICAgICAgIF0pLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInZ1ZXRhYmxlLWJvZHktd3JhcHBlclwiLFxuICAgICAgICAgICAgc3R5bGU6IHsgaGVpZ2h0OiBfdm0udGFibGVIZWlnaHQgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcInRhYmxlXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzczogW1widnVldGFibGVcIiwgX3ZtLmNzcy50YWJsZUNsYXNzLCBfdm0uY3NzLnRhYmxlQm9keUNsYXNzXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJjb2xncm91cFwiLFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnRhYmxlRmllbGRzLCBmdW5jdGlvbiAoZmllbGQsIGZpZWxkSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiY29sXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidnVldGFibGUtdGgtXCIgKyBmaWVsZC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnRpdGxlQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IHdpZHRoOiBmaWVsZC53aWR0aCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBpZDogXCJfY29sX1wiICsgZmllbGQubmFtZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwidGJvZHlcIixcbiAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwidnVldGFibGUtYm9keVwiIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fbChfdm0udGFibGVEYXRhLCBmdW5jdGlvbiAoaXRlbSwgaXRlbUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcInRyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGl0ZW1JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLm9uUm93Q2xhc3MoaXRlbSwgaXRlbUluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpdGVtLWluZGV4XCI6IGl0ZW1JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcjogX3ZtLm9uUm93Q2hhbmdlZChpdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uUm93Q2xpY2tlZChpdGVtLCAkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJsY2xpY2s6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vblJvd0RvdWJsZUNsaWNrZWQoaXRlbSwgJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9sKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnRhYmxlRmllbGRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGZpZWxkLCBmaWVsZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmlzU3BlY2lhbEZpZWxkKGZpZWxkLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIl9fc2VxdWVuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInRkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidnVldGFibGUtc2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmRhdGFDbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnJlbmRlclNlcXVlbmNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJfX2hhbmRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwidGRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2dWV0YWJsZS1oYW5kbGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmRhdGFDbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnJlbmRlckljb25UYWcoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFuZGxlLWljb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uY3NzLmhhbmRsZUljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJfX2NoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidnVldGFibGUtY2hlY2tib3hlc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5kYXRhQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucm93U2VsZWN0ZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9nZ2xlQ2hlY2tib3goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJfX2NvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZ1ZXRhYmxlLWNvbXBvbmVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5kYXRhQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5leHRyYWN0QXJncyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicm93LWRhdGFcIjogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicm93LWluZGV4XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicm93LWZpZWxkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnNvcnRGaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiX19zbG90XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidnVldGFibGUtc2xvdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5kYXRhQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl90KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdEFyZ3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93RGF0YTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dJbmRleDogaXRlbUluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0ZpZWxkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuc29ydEZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInRkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBmaWVsZC5kYXRhQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucmVuZGVyTm9ybWFsRmllbGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uQ2VsbENsaWNrZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRibGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vbkNlbGxEb3VibGVDbGlja2VkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0bWVudTogZnVuY3Rpb24gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uQ2VsbFJpZ2h0Q2xpY2tlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS51c2VEZXRhaWxSb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0cmFuc2l0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGl0ZW1JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBuYW1lOiBfdm0uZGV0YWlsUm93VHJhbnNpdGlvbiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmlzVmlzaWJsZURldGFpbFJvdyhpdGVtW192bS50cmFja0J5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0clwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbX3ZtLmNzcy5kZXRhaWxSb3dDbGFzc10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub25EZXRhaWxSb3dDbGljayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xzcGFuOiBfdm0uY291bnRWaXNpYmxlRmllbGRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhfdm0uZGV0YWlsUm93Q29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInJvdy1kYXRhXCI6IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicm93LWluZGV4XCI6IGl0ZW1JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfdm0uZGlzcGxheUVtcHR5RGF0YVJvd1xuICAgICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInRyXCIsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInRkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInZ1ZXRhYmxlLWVtcHR5LXJlc3VsdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgY29sc3BhbjogX3ZtLmNvdW50VmlzaWJsZUZpZWxkcyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLm5vRGF0YVRlbXBsYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgIF92bS5sZXNzVGhhbk1pblJvd3NcbiAgICAgICAgICAgICAgICAgICAgICA/IF92bS5fbChfdm0uYmxhbmtSb3dzLCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0clwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsga2V5OiBpLCBzdGF0aWNDbGFzczogXCJibGFuay1yb3dcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnRhYmxlRmllbGRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZmllbGQsIGZpZWxkSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwidGRcIiwgeyBrZXk6IGZpZWxkSW5kZXggfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiwqBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdXG4gICAgICAgICksXG4gICAgICBdKVxuICAgIDogX2MoXCJ0YWJsZVwiLCB7IGNsYXNzOiBbXCJ2dWV0YWJsZVwiLCBfdm0uY3NzLnRhYmxlQ2xhc3NdIH0sIFtcbiAgICAgICAgX2MoXCJ0aGVhZFwiLCBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcInRyXCIsXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5fbChfdm0udGFibGVGaWVsZHMsIGZ1bmN0aW9uIChmaWVsZCwgZmllbGRJbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICBmaWVsZC52aXNpYmxlXG4gICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmlzU3BlY2lhbEZpZWxkKGZpZWxkLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09IFwiX19jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZ1ZXRhYmxlLXRoLWNoZWNrYm94LVwiICsgX3ZtLnRyYWNrQnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudGl0bGVDbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgd2lkdGg6IGZpZWxkLndpZHRoIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImNoZWNrYm94XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogX3ZtLmNoZWNrQ2hlY2tib3hlc1N0YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnRvZ2dsZUFsbENoZWNrYm94ZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09IFwiX19jb21wb25lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwidGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2dWV0YWJsZS10aC1jb21wb25lbnQtXCIgKyBfdm0udHJhY2tCeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudGl0bGVDbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnNvcnRDbGFzcyhmaWVsZCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgc29ydGFibGU6IF92bS5pc1NvcnRhYmxlKGZpZWxkKSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IHdpZHRoOiBmaWVsZC53aWR0aCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLnJlbmRlclRpdGxlKGZpZWxkKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9yZGVyQnkoZmllbGQsICRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gXCJfX3Nsb3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwidGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2dWV0YWJsZS10aC1zbG90LVwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdEFyZ3MoZmllbGQubmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnRpdGxlQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zb3J0Q2xhc3MoZmllbGQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHNvcnRhYmxlOiBfdm0uaXNTb3J0YWJsZShmaWVsZCkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyB3aWR0aDogZmllbGQud2lkdGggfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVySFRNTDogX3ZtLl9zKF92bS5yZW5kZXJUaXRsZShmaWVsZCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vcmRlckJ5KGZpZWxkLCAkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09IFwiX19zZXF1ZW5jZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJ0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZ1ZXRhYmxlLXRoLXNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnRpdGxlQ2xhc3MgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnNvcnRDbGFzcyhmaWVsZCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgd2lkdGg6IGZpZWxkLndpZHRoIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhfdm0ucmVuZGVyVGl0bGUoZmllbGQpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ubm90SW4oX3ZtLmV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiX19zZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIl9fY2hlY2tib3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJfX2NvbXBvbmVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIl9fc2xvdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidnVldGFibGUtdGgtXCIgKyBmaWVsZC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC50aXRsZUNsYXNzIHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zb3J0Q2xhc3MoZmllbGQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IHdpZHRoOiBmaWVsZC53aWR0aCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLnJlbmRlclRpdGxlKGZpZWxkKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwidGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2dWV0YWJsZS10aC1cIiArIGZpZWxkLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudGl0bGVDbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uc29ydENsYXNzKGZpZWxkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHNvcnRhYmxlOiBfdm0uaXNTb3J0YWJsZShmaWVsZCkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgd2lkdGg6IGZpZWxkLndpZHRoIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGlkOiBcIl9cIiArIGZpZWxkLm5hbWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhfdm0ucmVuZGVyVGl0bGUoZmllbGQpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vcmRlckJ5KGZpZWxkLCAkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMlxuICAgICAgICAgICksXG4gICAgICAgIF0pLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcbiAgICAgICAgICBcInRib2R5XCIsXG4gICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJ2dWV0YWJsZS1ib2R5XCIgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfdm0uX2woX3ZtLnRhYmxlRGF0YSwgZnVuY3Rpb24gKGl0ZW0sIGl0ZW1JbmRleCkge1xuICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJ0clwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGl0ZW1JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5vblJvd0NsYXNzKGl0ZW0sIGl0ZW1JbmRleCksXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgXCJpdGVtLWluZGV4XCI6IGl0ZW1JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICByZW5kZXI6IF92bS5vblJvd0NoYW5nZWQoaXRlbSksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgZGJsY2xpY2s6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub25Sb3dEb3VibGVDbGlja2VkKGl0ZW0sICRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uUm93Q2xpY2tlZChpdGVtLCAkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fbChfdm0udGFibGVGaWVsZHMsIGZ1bmN0aW9uIChmaWVsZCwgZmllbGRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC52aXNpYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmlzU3BlY2lhbEZpZWxkKGZpZWxkLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09IFwiX19zZXF1ZW5jZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJ0ZFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZ1ZXRhYmxlLXNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmRhdGFDbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucmVuZGVyU2VxdWVuY2UoaXRlbUluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5leHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PSBcIl9faGFuZGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInRkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidnVldGFibGUtaGFuZGxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmRhdGFDbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucmVuZGVySWNvblRhZyhbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhhbmRsZS1pY29uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uY3NzLmhhbmRsZUljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gXCJfX2NoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidnVldGFibGUtY2hlY2tib3hlc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmRhdGFDbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiY2hlY2tib3hcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkOiBfdm0ucm93U2VsZWN0ZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9nZ2xlQ2hlY2tib3goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIl9fY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidnVldGFibGUtY29tcG9uZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuZGF0YUNsYXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoX3ZtLmV4dHJhY3RBcmdzKGZpZWxkLm5hbWUpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInJvdy1kYXRhXCI6IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInJvdy1pbmRleFwiOiBpdGVtSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInJvdy1maWVsZFwiOiBmaWVsZC5zb3J0RmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT09IFwiX19zbG90XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidnVldGFibGUtc2xvdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmRhdGFDbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdEFyZ3MoZmllbGQubmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93SW5kZXg6IGl0ZW1JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0ZpZWxkOiBmaWVsZC5zb3J0RmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5oYXNDYWxsYmFjayhmaWVsZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInRkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBmaWVsZC5kYXRhQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uY2FsbENhbGxiYWNrKGZpZWxkLCBpdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vbkNlbGxDbGlja2VkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYmxjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub25DZWxsRG91YmxlQ2xpY2tlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dG1lbnU6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uQ2VsbFJpZ2h0Q2xpY2tlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfYyhcInRkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBmaWVsZC5kYXRhQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZ2V0T2JqZWN0VmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uQ2VsbENsaWNrZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRibGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vbkNlbGxEb3VibGVDbGlja2VkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0bWVudTogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub25DZWxsUmlnaHRDbGlja2VkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX3ZtLnVzZURldGFpbFJvd1xuICAgICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRyYW5zaXRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBpdGVtSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IG5hbWU6IF92bS5kZXRhaWxSb3dUcmFuc2l0aW9uIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uaXNWaXNpYmxlRGV0YWlsUm93KGl0ZW1bX3ZtLnRyYWNrQnldKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbX3ZtLmNzcy5kZXRhaWxSb3dDbGFzc10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub25EZXRhaWxSb3dDbGljayhpdGVtLCAkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xzcGFuOiBfdm0uY291bnRWaXNpYmxlRmllbGRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoX3ZtLmRldGFpbFJvd0NvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyb3ctZGF0YVwiOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyb3ctaW5kZXhcIjogaXRlbUluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfdm0uZGlzcGxheUVtcHR5RGF0YVJvd1xuICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgIF9jKFwidHJcIiwgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcInRkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJ2dWV0YWJsZS1lbXB0eS1yZXN1bHRcIixcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBjb2xzcGFuOiBfdm0uY291bnRWaXNpYmxlRmllbGRzIH0sXG4gICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLm5vRGF0YVRlbXBsYXRlKSB9LFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfdm0ubGVzc1RoYW5NaW5Sb3dzXG4gICAgICAgICAgICAgID8gX3ZtLl9sKF92bS5ibGFua1Jvd3MsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwidHJcIixcbiAgICAgICAgICAgICAgICAgICAgeyBrZXk6IGksIHN0YXRpY0NsYXNzOiBcImJsYW5rLXJvd1wiIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnRhYmxlRmllbGRzLCBmdW5jdGlvbiAoZmllbGQsIGZpZWxkSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwidGRcIiwgeyBrZXk6IGZpZWxkSW5kZXggfSwgW192bS5fdihcIsKgXCIpXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIDJcbiAgICAgICAgKSxcbiAgICAgIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0yIS4uLy4uLy4uL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3J1bGVTZXRbMV0ucnVsZXNbMl0hLi4vLi4vLi4vdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL1Z1ZXRhYmxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YmZhMDViMCZzY29wZWQ9dHJ1ZVwiIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZSBhIGJvdW5kIHZlcnNpb24gb2YgYSBmdW5jdGlvbiB3aXRoIGEgc3BlY2lmaWVkIGB0aGlzYCBjb250ZXh0XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gYmluZFxuICogQHBhcmFtIHsqfSB0aGlzQXJnIC0gVGhlIHZhbHVlIHRvIGJlIHBhc3NlZCBhcyB0aGUgYHRoaXNgIHBhcmFtZXRlclxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIG5ldyBmdW5jdGlvbiB0aGF0IHdpbGwgY2FsbCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGB0aGlzYCBjb250ZXh0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxuY29uc3QgeyB0b1N0cmluZyB9ID0gT2JqZWN0LnByb3RvdHlwZTtcbmNvbnN0IHsgZ2V0UHJvdG90eXBlT2YgfSA9IE9iamVjdDtcbmNvbnN0IHsgaXRlcmF0b3IsIHRvU3RyaW5nVGFnIH0gPSBTeW1ib2w7XG5cbmNvbnN0IGtpbmRPZiA9ICgoY2FjaGUpID0+ICh0aGluZykgPT4ge1xuICBjb25zdCBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmNvbnN0IGtpbmRPZlRlc3QgPSAodHlwZSkgPT4ge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKHRoaW5nKSA9PiBraW5kT2YodGhpbmcpID09PSB0eXBlO1xufTtcblxuY29uc3QgdHlwZU9mVGVzdCA9ICh0eXBlKSA9PiAodGhpbmcpID0+IHR5cGVvZiB0aGluZyA9PT0gdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIG5vbi1udWxsIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IHsgaXNBcnJheSB9ID0gQXJyYXk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVbmRlZmluZWQgPSB0eXBlT2ZUZXN0KCd1bmRlZmluZWQnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIChcbiAgICB2YWwgIT09IG51bGwgJiZcbiAgICAhaXNVbmRlZmluZWQodmFsKSAmJlxuICAgIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJlxuICAgICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpICYmXG4gICAgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmXG4gICAgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbClcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICBsZXQgcmVzdWx0O1xuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSB2YWwgJiYgdmFsLmJ1ZmZlciAmJiBpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJpbmcgPSB0eXBlT2ZUZXN0KCdzdHJpbmcnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Z1bmN0aW9uID0gdHlwZU9mVGVzdCgnZnVuY3Rpb24nKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc051bWJlciA9IHR5cGVPZlRlc3QoJ251bWJlcicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgIT09IG51bGwgJiYgdHlwZW9mIHRoaW5nID09PSAnb2JqZWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJvb2xlYW5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJvb2xlYW4sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jvb2xlYW4gPSAodGhpbmcpID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChcbiAgICAocHJvdG90eXBlID09PSBudWxsIHx8XG4gICAgICBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHxcbiAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJlxuICAgICEodG9TdHJpbmdUYWcgaW4gdmFsKSAmJlxuICAgICEoaXRlcmF0b3IgaW4gdmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBlbXB0eSBvYmplY3QgKHNhZmVseSBoYW5kbGVzIEJ1ZmZlcnMpXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBlbXB0eSBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0VtcHR5T2JqZWN0ID0gKHZhbCkgPT4ge1xuICAvLyBFYXJseSByZXR1cm4gZm9yIG5vbi1vYmplY3RzIG9yIEJ1ZmZlcnMgdG8gcHJldmVudCBSYW5nZUVycm9yXG4gIGlmICghaXNPYmplY3QodmFsKSB8fCBpc0J1ZmZlcih2YWwpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModmFsKS5sZW5ndGggPT09IDAgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCkgPT09IE9iamVjdC5wcm90b3R5cGU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBGYWxsYmFjayBmb3IgYW55IG90aGVyIG9iamVjdHMgdGhhdCBtaWdodCBjYXVzZSBSYW5nZUVycm9yIHdpdGggT2JqZWN0LmtleXMoKVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFJlYWN0IE5hdGl2ZSBCbG9iXG4gKiBSZWFjdCBOYXRpdmUgXCJibG9iXCI6IGFuIG9iamVjdCB3aXRoIGEgYHVyaWAgYXR0cmlidXRlLiBPcHRpb25hbGx5LCBpdCBjYW5cbiAqIGFsc28gaGF2ZSBhIGBuYW1lYCBhbmQgYHR5cGVgIGF0dHJpYnV0ZSB0byBzcGVjaWZ5IGZpbGVuYW1lIGFuZCBjb250ZW50IHR5cGVcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvYmxvYi8yNjY4NGNmM2FkZjQwOTRlYjZjNDA1ZDM0NWE3NWJmOGM3YzBiZjg4L0xpYnJhcmllcy9OZXR3b3JrL0Zvcm1EYXRhLmpzI0w2OC1MNzFcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWFjdCBOYXRpdmUgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUmVhY3ROYXRpdmVCbG9iID0gKHZhbHVlKSA9PiB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUudXJpICE9PSAndW5kZWZpbmVkJyk7XG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBlbnZpcm9ubWVudCBpcyBSZWFjdCBOYXRpdmVcbiAqIFJlYWN0TmF0aXZlIGBGb3JtRGF0YWAgaGFzIGEgbm9uLXN0YW5kYXJkIGBnZXRQYXJ0cygpYCBtZXRob2RcbiAqXG4gKiBAcGFyYW0geyp9IGZvcm1EYXRhIFRoZSBmb3JtRGF0YSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgZW52aXJvbm1lbnQgaXMgUmVhY3QgTmF0aXZlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWFjdE5hdGl2ZSA9IChmb3JtRGF0YSkgPT4gZm9ybURhdGEgJiYgdHlwZW9mIGZvcm1EYXRhLmdldFBhcnRzICE9PSAndW5kZWZpbmVkJztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGVMaXN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAodmFsKSA9PiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBnZXRHbG9iYWwoKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBnbG9iYWxUaGlzO1xuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gc2VsZjtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gd2luZG93O1xuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBnbG9iYWw7XG4gIHJldHVybiB7fTtcbn1cblxuY29uc3QgRyA9IGdldEdsb2JhbCgpO1xuY29uc3QgRm9ybURhdGFDdG9yID0gdHlwZW9mIEcuRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID8gRy5Gb3JtRGF0YSA6IHVuZGVmaW5lZDtcblxuY29uc3QgaXNGb3JtRGF0YSA9ICh0aGluZykgPT4ge1xuICBpZiAoIXRoaW5nKSByZXR1cm4gZmFsc2U7XG4gIGlmIChGb3JtRGF0YUN0b3IgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YUN0b3IpIHJldHVybiB0cnVlO1xuICAvLyBSZWplY3QgcGxhaW4gb2JqZWN0cyBpbmhlcml0aW5nIGRpcmVjdGx5IGZyb20gT2JqZWN0LnByb3RvdHlwZSBzbyBwcm90b3R5cGUtcG9sbHV0aW9uIGdhZGdldHMgY2FuJ3Qgc3Bvb2YgRm9ybURhdGEuXG4gIGNvbnN0IHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGhpbmcpO1xuICBpZiAoIXByb3RvIHx8IHByb3RvID09PSBPYmplY3QucHJvdG90eXBlKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGtpbmQgPSBraW5kT2YodGhpbmcpO1xuICByZXR1cm4gKFxuICAgIGtpbmQgPT09ICdmb3JtZGF0YScgfHxcbiAgICAvLyBkZXRlY3QgZm9ybS1kYXRhIGluc3RhbmNlXG4gICAgKGtpbmQgPT09ICdvYmplY3QnICYmIGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXScpXG4gICk7XG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuY29uc3QgW2lzUmVhZGFibGVTdHJlYW0sIGlzUmVxdWVzdCwgaXNSZXNwb25zZSwgaXNIZWFkZXJzXSA9IFtcbiAgJ1JlYWRhYmxlU3RyZWFtJyxcbiAgJ1JlcXVlc3QnLFxuICAnUmVzcG9uc2UnLFxuICAnSGVhZGVycycsXG5dLm1hcChraW5kT2ZUZXN0KTtcblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuY29uc3QgdHJpbSA9IChzdHIpID0+IHtcbiAgcmV0dXJuIHN0ci50cmltID8gc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywgJycpO1xufTtcbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5PHVua25vd24+fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmFsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwgeyBhbGxPd25LZXlzID0gZmFsc2UgfSA9IHt9KSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGk7XG4gIGxldCBsO1xuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yIChpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBCdWZmZXIgY2hlY2tcbiAgICBpZiAoaXNCdWZmZXIob2JqKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGNvbnN0IGtleXMgPSBhbGxPd25LZXlzID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKSA6IE9iamVjdC5rZXlzKG9iaik7XG4gICAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGtleTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGaW5kcyBhIGtleSBpbiBhbiBvYmplY3QsIGNhc2UtaW5zZW5zaXRpdmUsIHJldHVybmluZyB0aGUgYWN0dWFsIGtleSBuYW1lLlxuICogUmV0dXJucyBudWxsIGlmIHRoZSBvYmplY3QgaXMgYSBCdWZmZXIgb3IgaWYgbm8gbWF0Y2ggaXMgZm91bmQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIFRoZSBvYmplY3QgdG8gc2VhcmNoLlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgdG8gZmluZCAoY2FzZS1pbnNlbnNpdGl2ZSkuXG4gKiBAcmV0dXJucyB7P3N0cmluZ30gVGhlIGFjdHVhbCBrZXkgbmFtZSBpZiBmb3VuZCwgb3RoZXJ3aXNlIG51bGwuXG4gKi9cbmZ1bmN0aW9uIGZpbmRLZXkob2JqLCBrZXkpIHtcbiAgaWYgKGlzQnVmZmVyKG9iaikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIGdsb2JhbFRoaXM7XG4gIHJldHVybiB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWw7XG59KSgpO1xuXG5jb25zdCBpc0NvbnRleHREZWZpbmVkID0gKGNvbnRleHQpID0+ICFpc1VuZGVmaW5lZChjb250ZXh0KSAmJiBjb250ZXh0ICE9PSBfZ2xvYmFsO1xuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSguLi5vYmpzKSB7XG4gIGNvbnN0IHsgY2FzZWxlc3MsIHNraXBVbmRlZmluZWQgfSA9IChpc0NvbnRleHREZWZpbmVkKHRoaXMpICYmIHRoaXMpIHx8IHt9O1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgY29uc3QgYXNzaWduVmFsdWUgPSAodmFsLCBrZXkpID0+IHtcbiAgICAvLyBTa2lwIGRhbmdlcm91cyBwcm9wZXJ0eSBuYW1lcyB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJyB8fCBrZXkgPT09ICdjb25zdHJ1Y3RvcicgfHwga2V5ID09PSAncHJvdG90eXBlJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldEtleSA9IChjYXNlbGVzcyAmJiBmaW5kS2V5KHJlc3VsdCwga2V5KSkgfHwga2V5O1xuICAgIC8vIFJlYWQgdmlhIG93bi1wcm9wIG9ubHkg4oCUIGEgYmFyZSBgcmVzdWx0W3RhcmdldEtleV1gIHdhbGtzIHRoZSBwcm90b3R5cGVcbiAgICAvLyBjaGFpbiwgc28gYSBwb2xsdXRlZCBPYmplY3QucHJvdG90eXBlIHZhbHVlIGNvdWxkIHN1cmZhY2UgaGVyZSBhbmQgZ2V0XG4gICAgLy8gY29waWVkIGludG8gdGhlIG1lcmdlZCByZXN1bHQuXG4gICAgY29uc3QgZXhpc3RpbmcgPSBoYXNPd25Qcm9wZXJ0eShyZXN1bHQsIHRhcmdldEtleSkgPyByZXN1bHRbdGFyZ2V0S2V5XSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChleGlzdGluZykgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKGV4aXN0aW5nLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSBpZiAoIXNraXBVbmRlZmluZWQgfHwgIWlzVW5kZWZpbmVkKHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IG9ianMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgb2Jqc1tpXSAmJiBmb3JFYWNoKG9ianNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5hbGxPd25LZXlzXVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5jb25zdCBleHRlbmQgPSAoYSwgYiwgdGhpc0FyZywgeyBhbGxPd25LZXlzIH0gPSB7fSkgPT4ge1xuICBmb3JFYWNoKFxuICAgIGIsXG4gICAgKHZhbCwga2V5KSA9PiB7XG4gICAgICBpZiAodGhpc0FyZyAmJiBpc0Z1bmN0aW9uKHZhbCkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsIGtleSwge1xuICAgICAgICAgIC8vIE51bGwtcHJvdG8gZGVzY3JpcHRvciBzbyBhIHBvbGx1dGVkIE9iamVjdC5wcm90b3R5cGUuZ2V0IGNhbm5vdFxuICAgICAgICAgIC8vIGhpamFjayBkZWZpbmVQcm9wZXJ0eSdzIGFjY2Vzc29yLXZzLWRhdGEgcmVzb2x1dGlvbi5cbiAgICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgICAgdmFsdWU6IGJpbmQodmFsLCB0aGlzQXJnKSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwga2V5LCB7XG4gICAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICAgIHZhbHVlOiB2YWwsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgeyBhbGxPd25LZXlzIH1cbiAgKTtcbiAgcmV0dXJuIGE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5jb25zdCBzdHJpcEJPTSA9IChjb250ZW50KSA9PiB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4ZmVmZikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufTtcblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgaW5oZXJpdHMgPSAoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykgPT4ge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25zdHJ1Y3Rvci5wcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgdmFsdWU6IGNvbnN0cnVjdG9yLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25zdHJ1Y3RvciwgJ3N1cGVyJywge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsXG4gIH0pO1xuICBwcm9wcyAmJiBPYmplY3QuYXNzaWduKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvcHMpO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlIG9iamVjdCB3aXRoIGRlZXAgcHJvdG90eXBlIGNoYWluIHRvIGEgZmxhdCBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VPYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IFtkZXN0T2JqXVxuICogQHBhcmFtIHtGdW5jdGlvbnxCb29sZWFufSBbZmlsdGVyXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BGaWx0ZXJdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuY29uc3QgdG9GbGF0T2JqZWN0ID0gKHNvdXJjZU9iaiwgZGVzdE9iaiwgZmlsdGVyLCBwcm9wRmlsdGVyKSA9PiB7XG4gIGxldCBwcm9wcztcbiAgbGV0IGk7XG4gIGxldCBwcm9wO1xuICBjb25zdCBtZXJnZWQgPSB7fTtcblxuICBkZXN0T2JqID0gZGVzdE9iaiB8fCB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIGlmIChzb3VyY2VPYmogPT0gbnVsbCkgcmV0dXJuIGRlc3RPYmo7XG5cbiAgZG8ge1xuICAgIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlT2JqKTtcbiAgICBpID0gcHJvcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICBwcm9wID0gcHJvcHNbaV07XG4gICAgICBpZiAoKCFwcm9wRmlsdGVyIHx8IHByb3BGaWx0ZXIocHJvcCwgc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgIW1lcmdlZFtwcm9wXSkge1xuICAgICAgICBkZXN0T2JqW3Byb3BdID0gc291cmNlT2JqW3Byb3BdO1xuICAgICAgICBtZXJnZWRbcHJvcF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VPYmogPSBmaWx0ZXIgIT09IGZhbHNlICYmIGdldFByb3RvdHlwZU9mKHNvdXJjZU9iaik7XG4gIH0gd2hpbGUgKHNvdXJjZU9iaiAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgc291cmNlT2JqICE9PSBPYmplY3QucHJvdG90eXBlKTtcblxuICByZXR1cm4gZGVzdE9iajtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBlbmRzV2l0aCA9IChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pID0+IHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICBjb25zdCBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBuZXcgYXJyYXkgZnJvbSBhcnJheSBsaWtlIG9iamVjdCBvciBudWxsIGlmIGZhaWxlZFxuICpcbiAqIEBwYXJhbSB7Kn0gW3RoaW5nXVxuICpcbiAqIEByZXR1cm5zIHs/QXJyYXl9XG4gKi9cbmNvbnN0IHRvQXJyYXkgPSAodGhpbmcpID0+IHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIG51bGw7XG4gIGlmIChpc0FycmF5KHRoaW5nKSkgcmV0dXJuIHRoaW5nO1xuICBsZXQgaSA9IHRoaW5nLmxlbmd0aDtcbiAgaWYgKCFpc051bWJlcihpKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFyciA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBhcnJbaV0gPSB0aGluZ1tpXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufTtcblxuLyoqXG4gKiBDaGVja2luZyBpZiB0aGUgVWludDhBcnJheSBleGlzdHMgYW5kIGlmIGl0IGRvZXMsIGl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGVcbiAqIHRoaW5nIHBhc3NlZCBpbiBpcyBhbiBpbnN0YW5jZSBvZiBVaW50OEFycmF5XG4gKlxuICogQHBhcmFtIHtUeXBlZEFycmF5fVxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmNvbnN0IGlzVHlwZWRBcnJheSA9ICgoVHlwZWRBcnJheSkgPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gKHRoaW5nKSA9PiB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxuLyoqXG4gKiBGb3IgZWFjaCBlbnRyeSBpbiB0aGUgb2JqZWN0LCBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBrZXkgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBmb3JFYWNoRW50cnkgPSAob2JqLCBmbikgPT4ge1xuICBjb25zdCBnZW5lcmF0b3IgPSBvYmogJiYgb2JqW2l0ZXJhdG9yXTtcblxuICBjb25zdCBfaXRlcmF0b3IgPSBnZW5lcmF0b3IuY2FsbChvYmopO1xuXG4gIGxldCByZXN1bHQ7XG5cbiAgd2hpbGUgKChyZXN1bHQgPSBfaXRlcmF0b3IubmV4dCgpKSAmJiAhcmVzdWx0LmRvbmUpIHtcbiAgICBjb25zdCBwYWlyID0gcmVzdWx0LnZhbHVlO1xuICAgIGZuLmNhbGwob2JqLCBwYWlyWzBdLCBwYWlyWzFdKTtcbiAgfVxufTtcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgYSBzdHJpbmcsIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgbWF0Y2hlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdFeHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBzZWFyY2guXG4gKlxuICogQHJldHVybnMge0FycmF5PGJvb2xlYW4+fVxuICovXG5jb25zdCBtYXRjaEFsbCA9IChyZWdFeHAsIHN0cikgPT4ge1xuICBsZXQgbWF0Y2hlcztcbiAgY29uc3QgYXJyID0gW107XG5cbiAgd2hpbGUgKChtYXRjaGVzID0gcmVnRXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaChtYXRjaGVzKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59O1xuXG4vKiBDaGVja2luZyBpZiB0aGUga2luZE9mVGVzdCBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYW4gSFRNTEZvcm1FbGVtZW50LiAqL1xuY29uc3QgaXNIVE1MRm9ybSA9IGtpbmRPZlRlc3QoJ0hUTUxGb3JtRWxlbWVudCcpO1xuXG5jb25zdCB0b0NhbWVsQ2FzZSA9IChzdHIpID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csIGZ1bmN0aW9uIHJlcGxhY2VyKG0sIHAxLCBwMikge1xuICAgIHJldHVybiBwMS50b1VwcGVyQ2FzZSgpICsgcDI7XG4gIH0pO1xufTtcblxuLyogQ3JlYXRpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgY2hlY2sgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5LiAqL1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSAoXG4gICh7IGhhc093blByb3BlcnR5IH0pID0+XG4gIChvYmosIHByb3ApID0+XG4gICAgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApXG4pKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufTtcblxuLyoqXG4gKiBNYWtlcyBhbGwgbWV0aG9kcyByZWFkLW9ubHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqL1xuXG5jb25zdCBmcmVlemVNZXRob2RzID0gKG9iaikgPT4ge1xuICByZWR1Y2VEZXNjcmlwdG9ycyhvYmosIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgLy8gc2tpcCByZXN0cmljdGVkIHByb3BzIGluIHN0cmljdCBtb2RlXG4gICAgaWYgKGlzRnVuY3Rpb24ob2JqKSAmJiBbJ2FyZ3VtZW50cycsICdjYWxsZXInLCAnY2FsbGVlJ10uaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtuYW1lXTtcblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybjtcblxuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZhbHNlO1xuXG4gICAgaWYgKCd3cml0YWJsZScgaW4gZGVzY3JpcHRvcikge1xuICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGVzY3JpcHRvci5zZXQpIHtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBFcnJvcihcIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICdcIiArIG5hbWUgKyBcIidcIik7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFycmF5IG9yIGEgZGVsaW1pdGVkIHN0cmluZyBpbnRvIGFuIG9iamVjdCBzZXQgd2l0aCB2YWx1ZXMgYXMga2V5cyBhbmQgdHJ1ZSBhcyB2YWx1ZXMuXG4gKiBVc2VmdWwgZm9yIGZhc3QgbWVtYmVyc2hpcCBjaGVja3MuXG4gKlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGFycmF5T3JTdHJpbmcgLSBUaGUgYXJyYXkgb3Igc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVsaW1pdGVyIC0gVGhlIGRlbGltaXRlciB0byB1c2UgaWYgaW5wdXQgaXMgYSBzdHJpbmcuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3Qgd2l0aCBrZXlzIGZyb20gdGhlIGFycmF5IG9yIHN0cmluZywgdmFsdWVzIHNldCB0byB0cnVlLlxuICovXG5jb25zdCB0b09iamVjdFNldCA9IChhcnJheU9yU3RyaW5nLCBkZWxpbWl0ZXIpID0+IHtcbiAgY29uc3Qgb2JqID0ge307XG5cbiAgY29uc3QgZGVmaW5lID0gKGFycikgPT4ge1xuICAgIGFyci5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgb2JqW3ZhbHVlXSA9IHRydWU7XG4gICAgfSk7XG4gIH07XG5cbiAgaXNBcnJheShhcnJheU9yU3RyaW5nKSA/IGRlZmluZShhcnJheU9yU3RyaW5nKSA6IGRlZmluZShTdHJpbmcoYXJyYXlPclN0cmluZykuc3BsaXQoZGVsaW1pdGVyKSk7XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuY29uc3QgdG9GaW5pdGVOdW1iZXIgPSAodmFsdWUsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoKHZhbHVlID0gK3ZhbHVlKSkgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbn07XG5cbi8qKlxuICogSWYgdGhlIHRoaW5nIGlzIGEgRm9ybURhdGEgb2JqZWN0LCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHRoaW5nIC0gVGhlIHRoaW5nIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1NwZWNDb21wbGlhbnRGb3JtKHRoaW5nKSB7XG4gIHJldHVybiAhIShcbiAgICB0aGluZyAmJlxuICAgIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJlxuICAgIHRoaW5nW3RvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJyAmJlxuICAgIHRoaW5nW2l0ZXJhdG9yXVxuICApO1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGNvbnZlcnRzIGFuIG9iamVjdCB0byBhIEpTT04tY29tcGF0aWJsZSBvYmplY3QsIGhhbmRsaW5nIGNpcmN1bGFyIHJlZmVyZW5jZXMgYW5kIEJ1ZmZlcnMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIFRoZSBvYmplY3QgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBKU09OLWNvbXBhdGlibGUgb2JqZWN0LlxuICovXG5jb25zdCB0b0pTT05PYmplY3QgPSAob2JqKSA9PiB7XG4gIGNvbnN0IHZpc2l0ZWQgPSBuZXcgV2Vha1NldCgpO1xuXG4gIGNvbnN0IHZpc2l0ID0gKHNvdXJjZSkgPT4ge1xuICAgIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICBpZiAodmlzaXRlZC5oYXMoc291cmNlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vQnVmZmVyIGNoZWNrXG4gICAgICBpZiAoaXNCdWZmZXIoc291cmNlKSkge1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoISgndG9KU09OJyBpbiBzb3VyY2UpKSB7XG4gICAgICAgIC8vIGFkZC1vbiBkZXNjZW50IC8gZGVsZXRlLW9uLWFzY2VudDogcHJlc2VydmVzIHBhdGggc2VtYW50aWNzLCBzbyBEQUcgbm9kZXMgc2VyaWFsaXNlIGF0IGV2ZXJ5IG9jY3VycmVuY2UgKHNlZSAjNzIzMCkuXG4gICAgICAgIHZpc2l0ZWQuYWRkKHNvdXJjZSk7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGlzQXJyYXkoc291cmNlKSA/IFtdIDoge307XG5cbiAgICAgICAgZm9yRWFjaChzb3VyY2UsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gdmlzaXQodmFsdWUpO1xuICAgICAgICAgICFpc1VuZGVmaW5lZChyZWR1Y2VkVmFsdWUpICYmICh0YXJnZXRba2V5XSA9IHJlZHVjZWRWYWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZpc2l0ZWQuZGVsZXRlKHNvdXJjZSk7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlO1xuICB9O1xuXG4gIHJldHVybiB2aXNpdChvYmopO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgdmFsdWUgaXMgYW4gYXN5bmMgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyAtIFRoZSB2YWx1ZSB0byB0ZXN0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gYXN5bmMgZnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZS5cbiAqL1xuY29uc3QgaXNBc3luY0ZuID0ga2luZE9mVGVzdCgnQXN5bmNGdW5jdGlvbicpO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgYSB2YWx1ZSBpcyB0aGVuYWJsZSAoaGFzIHRoZW4gYW5kIGNhdGNoIG1ldGhvZHMpLlxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgLSBUaGUgdmFsdWUgdG8gdGVzdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIHRoZW5hYmxlLCBvdGhlcndpc2UgZmFsc2UuXG4gKi9cbmNvbnN0IGlzVGhlbmFibGUgPSAodGhpbmcpID0+XG4gIHRoaW5nICYmXG4gIChpc09iamVjdCh0aGluZykgfHwgaXNGdW5jdGlvbih0aGluZykpICYmXG4gIGlzRnVuY3Rpb24odGhpbmcudGhlbikgJiZcbiAgaXNGdW5jdGlvbih0aGluZy5jYXRjaCk7XG5cbi8vIG9yaWdpbmFsIGNvZGVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EaWdpdGFsQnJhaW5KUy9BeGlvc1Byb21pc2UvYmxvYi8xNmRlYWIxMzcxMGVjMDk3Nzk5MjIxMzFmM2ZhNTk1NDMyMGY4M2FiL2xpYi91dGlscy5qcyNMMTEtTDM0XG5cbi8qKlxuICogUHJvdmlkZXMgYSBjcm9zcy1wbGF0Zm9ybSBzZXRJbW1lZGlhdGUgaW1wbGVtZW50YXRpb24uXG4gKiBVc2VzIG5hdGl2ZSBzZXRJbW1lZGlhdGUgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbHMgYmFjayB0byBwb3N0TWVzc2FnZSBvciBzZXRUaW1lb3V0LlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2V0SW1tZWRpYXRlU3VwcG9ydGVkIC0gV2hldGhlciBzZXRJbW1lZGlhdGUgaXMgc3VwcG9ydGVkLlxuICogQHBhcmFtIHtib29sZWFufSBwb3N0TWVzc2FnZVN1cHBvcnRlZCAtIFdoZXRoZXIgcG9zdE1lc3NhZ2UgaXMgc3VwcG9ydGVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRvIHNjaGVkdWxlIGEgY2FsbGJhY2sgYXN5bmNocm9ub3VzbHkuXG4gKi9cbmNvbnN0IF9zZXRJbW1lZGlhdGUgPSAoKHNldEltbWVkaWF0ZVN1cHBvcnRlZCwgcG9zdE1lc3NhZ2VTdXBwb3J0ZWQpID0+IHtcbiAgaWYgKHNldEltbWVkaWF0ZVN1cHBvcnRlZCkge1xuICAgIHJldHVybiBzZXRJbW1lZGlhdGU7XG4gIH1cblxuICByZXR1cm4gcG9zdE1lc3NhZ2VTdXBwb3J0ZWRcbiAgICA/ICgodG9rZW4sIGNhbGxiYWNrcykgPT4ge1xuICAgICAgICBfZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgJ21lc3NhZ2UnLFxuICAgICAgICAgICh7IHNvdXJjZSwgZGF0YSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoc291cmNlID09PSBfZ2xvYmFsICYmIGRhdGEgPT09IHRva2VuKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5sZW5ndGggJiYgY2FsbGJhY2tzLnNoaWZ0KCkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIChjYikgPT4ge1xuICAgICAgICAgIGNhbGxiYWNrcy5wdXNoKGNiKTtcbiAgICAgICAgICBfZ2xvYmFsLnBvc3RNZXNzYWdlKHRva2VuLCAnKicpO1xuICAgICAgICB9O1xuICAgICAgfSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLCBbXSlcbiAgICA6IChjYikgPT4gc2V0VGltZW91dChjYik7XG59KSh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nLCBpc0Z1bmN0aW9uKF9nbG9iYWwucG9zdE1lc3NhZ2UpKTtcblxuLyoqXG4gKiBTY2hlZHVsZXMgYSBtaWNyb3Rhc2sgb3IgYXN5bmNocm9ub3VzIGNhbGxiYWNrIGFzIHNvb24gYXMgcG9zc2libGUuXG4gKiBVc2VzIHF1ZXVlTWljcm90YXNrIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGxzIGJhY2sgdG8gcHJvY2Vzcy5uZXh0VGljayBvciBfc2V0SW1tZWRpYXRlLlxuICpcbiAqIEB0eXBlIHtGdW5jdGlvbn1cbiAqL1xuY29uc3QgYXNhcCA9XG4gIHR5cGVvZiBxdWV1ZU1pY3JvdGFzayAhPT0gJ3VuZGVmaW5lZCdcbiAgICA/IHF1ZXVlTWljcm90YXNrLmJpbmQoX2dsb2JhbClcbiAgICA6ICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5uZXh0VGljaykgfHwgX3NldEltbWVkaWF0ZTtcblxuLy8gKioqKioqKioqKioqKioqKioqKioqXG5cbmNvbnN0IGlzSXRlcmFibGUgPSAodGhpbmcpID0+IHRoaW5nICE9IG51bGwgJiYgaXNGdW5jdGlvbih0aGluZ1tpdGVyYXRvcl0pO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmcsXG4gIGlzTnVtYmVyLFxuICBpc0Jvb2xlYW4sXG4gIGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc0VtcHR5T2JqZWN0LFxuICBpc1JlYWRhYmxlU3RyZWFtLFxuICBpc1JlcXVlc3QsXG4gIGlzUmVzcG9uc2UsXG4gIGlzSGVhZGVycyxcbiAgaXNVbmRlZmluZWQsXG4gIGlzRGF0ZSxcbiAgaXNGaWxlLFxuICBpc1JlYWN0TmF0aXZlQmxvYixcbiAgaXNSZWFjdE5hdGl2ZSxcbiAgaXNCbG9iLFxuICBpc1JlZ0V4cCxcbiAgaXNGdW5jdGlvbixcbiAgaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1R5cGVkQXJyYXksXG4gIGlzRmlsZUxpc3QsXG4gIGZvckVhY2gsXG4gIG1lcmdlLFxuICBleHRlbmQsXG4gIHRyaW0sXG4gIHN0cmlwQk9NLFxuICBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0LFxuICBraW5kT2YsXG4gIGtpbmRPZlRlc3QsXG4gIGVuZHNXaXRoLFxuICB0b0FycmF5LFxuICBmb3JFYWNoRW50cnksXG4gIG1hdGNoQWxsLFxuICBpc0hUTUxGb3JtLFxuICBoYXNPd25Qcm9wZXJ0eSxcbiAgaGFzT3duUHJvcDogaGFzT3duUHJvcGVydHksIC8vIGFuIGFsaWFzIHRvIGF2b2lkIEVTTGludCBuby1wcm90b3R5cGUtYnVpbHRpbnMgZGV0ZWN0aW9uXG4gIHJlZHVjZURlc2NyaXB0b3JzLFxuICBmcmVlemVNZXRob2RzLFxuICB0b09iamVjdFNldCxcbiAgdG9DYW1lbENhc2UsXG4gIG5vb3AsXG4gIHRvRmluaXRlTnVtYmVyLFxuICBmaW5kS2V5LFxuICBnbG9iYWw6IF9nbG9iYWwsXG4gIGlzQ29udGV4dERlZmluZWQsXG4gIGlzU3BlY0NvbXBsaWFudEZvcm0sXG4gIHRvSlNPTk9iamVjdCxcbiAgaXNBc3luY0ZuLFxuICBpc1RoZW5hYmxlLFxuICBzZXRJbW1lZGlhdGU6IF9zZXRJbW1lZGlhdGUsXG4gIGFzYXAsXG4gIGlzSXRlcmFibGUsXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vLyBSYXdBeGlvc0hlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG5jb25zdCBpZ25vcmVEdXBsaWNhdGVPZiA9IHV0aWxzLnRvT2JqZWN0U2V0KFtcbiAgJ2FnZScsXG4gICdhdXRob3JpemF0aW9uJyxcbiAgJ2NvbnRlbnQtbGVuZ3RoJyxcbiAgJ2NvbnRlbnQtdHlwZScsXG4gICdldGFnJyxcbiAgJ2V4cGlyZXMnLFxuICAnZnJvbScsXG4gICdob3N0JyxcbiAgJ2lmLW1vZGlmaWVkLXNpbmNlJyxcbiAgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsXG4gICdsb2NhdGlvbicsXG4gICdtYXgtZm9yd2FyZHMnLFxuICAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJyxcbiAgJ3JldHJ5LWFmdGVyJyxcbiAgJ3VzZXItYWdlbnQnLFxuXSk7XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByYXdIZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5leHBvcnQgZGVmYXVsdCAocmF3SGVhZGVycykgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJlxuICAgIHJhd0hlYWRlcnMuc3BsaXQoJ1xcbicpLmZvckVhY2goZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdmFsID0gbGluZS5zdWJzdHJpbmcoaSArIDEpLnRyaW0oKTtcblxuICAgICAgaWYgKCFrZXkgfHwgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mW2tleV0pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICAgIHBhcnNlZFtrZXldLnB1c2godmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG5mdW5jdGlvbiB0cmltU1BvckhUQUIoc3RyKSB7XG4gIGxldCBzdGFydCA9IDA7XG4gIGxldCBlbmQgPSBzdHIubGVuZ3RoO1xuXG4gIHdoaWxlIChzdGFydCA8IGVuZCkge1xuICAgIGNvbnN0IGNvZGUgPSBzdHIuY2hhckNvZGVBdChzdGFydCk7XG5cbiAgICBpZiAoY29kZSAhPT0gMHgwOSAmJiBjb2RlICE9PSAweDIwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBzdGFydCArPSAxO1xuICB9XG5cbiAgd2hpbGUgKGVuZCA+IHN0YXJ0KSB7XG4gICAgY29uc3QgY29kZSA9IHN0ci5jaGFyQ29kZUF0KGVuZCAtIDEpO1xuXG4gICAgaWYgKGNvZGUgIT09IDB4MDkgJiYgY29kZSAhPT0gMHgyMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZW5kIC09IDE7XG4gIH1cblxuICByZXR1cm4gc3RhcnQgPT09IDAgJiYgZW5kID09PSBzdHIubGVuZ3RoID8gc3RyIDogc3RyLnNsaWNlKHN0YXJ0LCBlbmQpO1xufVxuXG4vLyBUaGUgY29udHJvbC1jb2RlIHJhbmdlcyBhcmUgaW50ZW50aW9uYWw6IGhlYWRlciBzYW5pdGl6YXRpb24gc3RyaXBzIEMwL0RFTCBieXRlcy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5jb25zdCBJTlZBTElEX1VOSUNPREVfSEVBREVSX1ZBTFVFX0NIQVJTID0gbmV3IFJlZ0V4cCgnW1xcXFx1MDAwMC1cXFxcdTAwMDhcXFxcdTAwMGEtXFxcXHUwMDFmXFxcXHUwMDdmXSsnLCAnZycpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbmNvbnN0IElOVkFMSURfQllURV9TVFJJTkdfSEVBREVSX1ZBTFVFX0NIQVJTID0gbmV3IFJlZ0V4cCgnW15cXFxcdTAwMDlcXFxcdTAwMjAtXFxcXHUwMDdlXFxcXHUwMDgwLVxcXFx1MDBmZl0rJywgJ2cnKTtcblxuZnVuY3Rpb24gc2FuaXRpemVWYWx1ZSh2YWx1ZSwgaW52YWxpZENoYXJzKSB7XG4gIGlmICh1dGlscy5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5tYXAoKGl0ZW0pID0+IHNhbml0aXplVmFsdWUoaXRlbSwgaW52YWxpZENoYXJzKSk7XG4gIH1cblxuICByZXR1cm4gdHJpbVNQb3JIVEFCKFN0cmluZyh2YWx1ZSkucmVwbGFjZShpbnZhbGlkQ2hhcnMsICcnKSk7XG59XG5cbmV4cG9ydCBjb25zdCBzYW5pdGl6ZUhlYWRlclZhbHVlID0gKHZhbHVlKSA9PlxuICBzYW5pdGl6ZVZhbHVlKHZhbHVlLCBJTlZBTElEX1VOSUNPREVfSEVBREVSX1ZBTFVFX0NIQVJTKTtcblxuZXhwb3J0IGNvbnN0IHNhbml0aXplQnl0ZVN0cmluZ0hlYWRlclZhbHVlID0gKHZhbHVlKSA9PlxuICBzYW5pdGl6ZVZhbHVlKHZhbHVlLCBJTlZBTElEX0JZVEVfU1RSSU5HX0hFQURFUl9WQUxVRV9DSEFSUyk7XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0J5dGVTdHJpbmdIZWFkZXJPYmplY3QoaGVhZGVycykge1xuICBjb25zdCBieXRlU3RyaW5nSGVhZGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLnRvSlNPTigpLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgIGJ5dGVTdHJpbmdIZWFkZXJzW2hlYWRlcl0gPSBzYW5pdGl6ZUJ5dGVTdHJpbmdIZWFkZXJWYWx1ZSh2YWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBieXRlU3RyaW5nSGVhZGVycztcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBwYXJzZUhlYWRlcnMgZnJvbSAnLi4vaGVscGVycy9wYXJzZUhlYWRlcnMuanMnO1xuaW1wb3J0IHsgc2FuaXRpemVIZWFkZXJWYWx1ZSB9IGZyb20gJy4uL2hlbHBlcnMvc2FuaXRpemVIZWFkZXJWYWx1ZS5qcyc7XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChub3JtYWxpemVWYWx1ZSkgOiBzYW5pdGl6ZUhlYWRlclZhbHVlKFN0cmluZyh2YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRva2VucyhzdHIpIHtcbiAgY29uc3QgdG9rZW5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgY29uc3QgdG9rZW5zUkUgPSAvKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nO1xuICBsZXQgbWF0Y2g7XG5cbiAgd2hpbGUgKChtYXRjaCA9IHRva2Vuc1JFLmV4ZWMoc3RyKSkpIHtcbiAgICB0b2tlbnNbbWF0Y2hbMV1dID0gbWF0Y2hbMl07XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5jb25zdCBpc1ZhbGlkSGVhZGVyTmFtZSA9IChzdHIpID0+IC9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3Qoc3RyLnRyaW0oKSk7XG5cbmZ1bmN0aW9uIG1hdGNoSGVhZGVyVmFsdWUoY29udGV4dCwgdmFsdWUsIGhlYWRlciwgZmlsdGVyLCBpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgaWYgKHV0aWxzLmlzRnVuY3Rpb24oZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLCB2YWx1ZSwgaGVhZGVyKTtcbiAgfVxuXG4gIGlmIChpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgICB2YWx1ZSA9IGhlYWRlcjtcbiAgfVxuXG4gIGlmICghdXRpbHMuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzLmlzU3RyaW5nKGZpbHRlcikpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5kZXhPZihmaWx0ZXIpICE9PSAtMTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc1JlZ0V4cChmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci50ZXN0KHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXJcbiAgICAudHJpbSgpXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCAodywgY2hhciwgc3RyKSA9PiB7XG4gICAgICByZXR1cm4gY2hhci50b1VwcGVyQ2FzZSgpICsgc3RyO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEFjY2Vzc29ycyhvYmosIGhlYWRlcikge1xuICBjb25zdCBhY2Nlc3Nvck5hbWUgPSB1dGlscy50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKChtZXRob2ROYW1lKSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgbWV0aG9kTmFtZSArIGFjY2Vzc29yTmFtZSwge1xuICAgICAgLy8gTnVsbC1wcm90byBkZXNjcmlwdG9yIHNvIGEgcG9sbHV0ZWQgT2JqZWN0LnByb3RvdHlwZS5nZXQgY2Fubm90IHR1cm5cbiAgICAgIC8vIHRoaXMgZGF0YSBkZXNjcmlwdG9yIGludG8gYW4gYWNjZXNzb3IgZGVzY3JpcHRvciBvbiB0aGUgd2F5IGluLlxuICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIChhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG4gIH0pO1xufVxuXG5jbGFzcyBBeGlvc0hlYWRlcnMge1xuICBjb25zdHJ1Y3RvcihoZWFkZXJzKSB7XG4gICAgaGVhZGVycyAmJiB0aGlzLnNldChoZWFkZXJzKTtcbiAgfVxuXG4gIHNldChoZWFkZXIsIHZhbHVlT3JSZXdyaXRlLCByZXdyaXRlKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFsSGVhZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBsSGVhZGVyKTtcblxuICAgICAgaWYgKFxuICAgICAgICAha2V5IHx8XG4gICAgICAgIHNlbGZba2V5XSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIF9yZXdyaXRlID09PSB0cnVlIHx8XG4gICAgICAgIChfcmV3cml0ZSA9PT0gdW5kZWZpbmVkICYmIHNlbGZba2V5XSAhPT0gZmFsc2UpXG4gICAgICApIHtcbiAgICAgICAgc2VsZltrZXkgfHwgX2hlYWRlcl0gPSBub3JtYWxpemVWYWx1ZShfdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldEhlYWRlcnMgPSAoaGVhZGVycywgX3Jld3JpdGUpID0+XG4gICAgICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIChfdmFsdWUsIF9oZWFkZXIpID0+IHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSk7XG5cbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChoZWFkZXIpIHx8IGhlYWRlciBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpIHtcbiAgICAgIHNldEhlYWRlcnMoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1N0cmluZyhoZWFkZXIpICYmIChoZWFkZXIgPSBoZWFkZXIudHJpbSgpKSAmJiAhaXNWYWxpZEhlYWRlck5hbWUoaGVhZGVyKSkge1xuICAgICAgc2V0SGVhZGVycyhwYXJzZUhlYWRlcnMoaGVhZGVyKSwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QoaGVhZGVyKSAmJiB1dGlscy5pc0l0ZXJhYmxlKGhlYWRlcikpIHtcbiAgICAgIGxldCBvYmogPSB7fSxcbiAgICAgICAgZGVzdCxcbiAgICAgICAga2V5O1xuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBoZWFkZXIpIHtcbiAgICAgICAgaWYgKCF1dGlscy5pc0FycmF5KGVudHJ5KSkge1xuICAgICAgICAgIHRocm93IFR5cGVFcnJvcignT2JqZWN0IGl0ZXJhdG9yIG11c3QgcmV0dXJuIGEga2V5LXZhbHVlIHBhaXInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9ialsoa2V5ID0gZW50cnlbMF0pXSA9IChkZXN0ID0gb2JqW2tleV0pXG4gICAgICAgICAgPyB1dGlscy5pc0FycmF5KGRlc3QpXG4gICAgICAgICAgICA/IFsuLi5kZXN0LCBlbnRyeVsxXV1cbiAgICAgICAgICAgIDogW2Rlc3QsIGVudHJ5WzFdXVxuICAgICAgICAgIDogZW50cnlbMV07XG4gICAgICB9XG5cbiAgICAgIHNldEhlYWRlcnMob2JqLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlciAhPSBudWxsICYmIHNldEhlYWRlcih2YWx1ZU9yUmV3cml0ZSwgaGVhZGVyLCByZXdyaXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChoZWFkZXIsIHBhcnNlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldO1xuXG4gICAgICAgIGlmICghcGFyc2VyKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZVRva2Vucyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzUmVnRXhwKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmV4ZWModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXMoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIHJldHVybiAhIShcbiAgICAgICAga2V5ICYmXG4gICAgICAgIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZGVsZXRlKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBkZWxldGVIZWFkZXIoX2hlYWRlcikge1xuICAgICAgX2hlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKF9oZWFkZXIpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBfaGVhZGVyKTtcblxuICAgICAgICBpZiAoa2V5ICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHNlbGYsIHNlbGZba2V5XSwga2V5LCBtYXRjaGVyKSkpIHtcbiAgICAgICAgICBkZWxldGUgc2VsZltrZXldO1xuXG4gICAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIuZm9yRWFjaChkZWxldGVIZWFkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVIZWFkZXIoaGVhZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIGNsZWFyKG1hdGNoZXIpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gICAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyLCB0cnVlKSkge1xuICAgICAgICBkZWxldGUgdGhpc1trZXldO1xuICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIG5vcm1hbGl6ZShmb3JtYXQpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBoZWFkZXJzID0ge307XG5cbiAgICB1dGlscy5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KGhlYWRlcnMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgc2VsZltrZXldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmb3JtYXQgPyBmb3JtYXRIZWFkZXIoaGVhZGVyKSA6IFN0cmluZyhoZWFkZXIpLnRyaW0oKTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZWQgIT09IGhlYWRlcikge1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgfVxuXG4gICAgICBzZWxmW25vcm1hbGl6ZWRdID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuXG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWRdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29uY2F0KC4uLnRhcmdldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywgLi4udGFyZ2V0cyk7XG4gIH1cblxuICB0b0pTT04oYXNTdHJpbmdzKSB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIHZhbHVlICE9IG51bGwgJiZcbiAgICAgICAgdmFsdWUgIT09IGZhbHNlICYmXG4gICAgICAgIChvYmpbaGVhZGVyXSA9IGFzU3RyaW5ncyAmJiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywgJykgOiB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVxuICAgICAgLm1hcCgoW2hlYWRlciwgdmFsdWVdKSA9PiBoZWFkZXIgKyAnOiAnICsgdmFsdWUpXG4gICAgICAuam9pbignXFxuJyk7XG4gIH1cblxuICBnZXRTZXRDb29raWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCdzZXQtY29va2llJykgfHwgW107XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdBeGlvc0hlYWRlcnMnO1xuICB9XG5cbiAgc3RhdGljIGZyb20odGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcgaW5zdGFuY2VvZiB0aGlzID8gdGhpbmcgOiBuZXcgdGhpcyh0aGluZyk7XG4gIH1cblxuICBzdGF0aWMgY29uY2F0KGZpcnN0LCAuLi50YXJnZXRzKSB7XG4gICAgY29uc3QgY29tcHV0ZWQgPSBuZXcgdGhpcyhmaXJzdCk7XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4gY29tcHV0ZWQuc2V0KHRhcmdldCkpO1xuXG4gICAgcmV0dXJuIGNvbXB1dGVkO1xuICB9XG5cbiAgc3RhdGljIGFjY2Vzc29yKGhlYWRlcikge1xuICAgIGNvbnN0IGludGVybmFscyA9XG4gICAgICAodGhpc1skaW50ZXJuYWxzXSA9XG4gICAgICB0aGlzWyRpbnRlcm5hbHNdID1cbiAgICAgICAge1xuICAgICAgICAgIGFjY2Vzc29yczoge30sXG4gICAgICAgIH0pO1xuXG4gICAgY29uc3QgYWNjZXNzb3JzID0gaW50ZXJuYWxzLmFjY2Vzc29ycztcbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcblxuICAgIGZ1bmN0aW9uIGRlZmluZUFjY2Vzc29yKF9oZWFkZXIpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghYWNjZXNzb3JzW2xIZWFkZXJdKSB7XG4gICAgICAgIGJ1aWxkQWNjZXNzb3JzKHByb3RvdHlwZSwgX2hlYWRlcik7XG4gICAgICAgIGFjY2Vzc29yc1tsSGVhZGVyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXRpbHMuaXNBcnJheShoZWFkZXIpID8gaGVhZGVyLmZvckVhY2goZGVmaW5lQWNjZXNzb3IpIDogZGVmaW5lQWNjZXNzb3IoaGVhZGVyKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbkF4aW9zSGVhZGVycy5hY2Nlc3NvcihbXG4gICdDb250ZW50LVR5cGUnLFxuICAnQ29udGVudC1MZW5ndGgnLFxuICAnQWNjZXB0JyxcbiAgJ0FjY2VwdC1FbmNvZGluZycsXG4gICdVc2VyLUFnZW50JyxcbiAgJ0F1dGhvcml6YXRpb24nLFxuXSk7XG5cbi8vIHJlc2VydmVkIG5hbWVzIGhvdGZpeFxudXRpbHMucmVkdWNlRGVzY3JpcHRvcnMoQXhpb3NIZWFkZXJzLnByb3RvdHlwZSwgKHsgdmFsdWUgfSwga2V5KSA9PiB7XG4gIGxldCBtYXBwZWQgPSBrZXlbMF0udG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTsgLy8gbWFwIGBzZXRgID0+IGBTZXRgXG4gIHJldHVybiB7XG4gICAgZ2V0OiAoKSA9PiB2YWx1ZSxcbiAgICBzZXQoaGVhZGVyVmFsdWUpIHtcbiAgICAgIHRoaXNbbWFwcGVkXSA9IGhlYWRlclZhbHVlO1xuICAgIH0sXG4gIH07XG59KTtcblxudXRpbHMuZnJlZXplTWV0aG9kcyhBeGlvc0hlYWRlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0hlYWRlcnM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4vQXhpb3NIZWFkZXJzLmpzJztcblxuY29uc3QgUkVEQUNURUQgPSAnW1JFREFDVEVEICoqKipdJztcblxuZnVuY3Rpb24gaGFzT3duT3JQcm90b3R5cGVUb0pTT04oc291cmNlKSB7XG4gIGlmICh1dGlscy5oYXNPd25Qcm9wKHNvdXJjZSwgJ3RvSlNPTicpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBsZXQgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZSk7XG5cbiAgd2hpbGUgKHByb3RvdHlwZSAmJiBwcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBpZiAodXRpbHMuaGFzT3duUHJvcChwcm90b3R5cGUsICd0b0pTT04nKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIEJ1aWxkIGEgcGxhaW4tb2JqZWN0IHNuYXBzaG90IG9mIGBjb25maWdgIGFuZCByZXBsYWNlIHRoZSB2YWx1ZSBvZiBhbnkga2V5XG4vLyAoY2FzZS1pbnNlbnNpdGl2ZSkgbGlzdGVkIGluIGByZWRhY3RLZXlzYCB3aXRoIFJFREFDVEVELiBXYWxrcyB0aHJvdWdoIGFycmF5c1xuLy8gYW5kIEF4aW9zSGVhZGVycywgYW5kIHNob3J0LWNpcmN1aXRzIG9uIGNpcmN1bGFyIHJlZmVyZW5jZXMuXG5mdW5jdGlvbiByZWRhY3RDb25maWcoY29uZmlnLCByZWRhY3RLZXlzKSB7XG4gIGNvbnN0IGxvd2VyS2V5cyA9IG5ldyBTZXQocmVkYWN0S2V5cy5tYXAoKGspID0+IFN0cmluZyhrKS50b0xvd2VyQ2FzZSgpKSk7XG4gIGNvbnN0IHNlZW4gPSBbXTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UpID0+IHtcbiAgICBpZiAoc291cmNlID09PSBudWxsIHx8IHR5cGVvZiBzb3VyY2UgIT09ICdvYmplY3QnKSByZXR1cm4gc291cmNlO1xuICAgIGlmICh1dGlscy5pc0J1ZmZlcihzb3VyY2UpKSByZXR1cm4gc291cmNlO1xuICAgIGlmIChzZWVuLmluZGV4T2Yoc291cmNlKSAhPT0gLTEpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgQXhpb3NIZWFkZXJzKSB7XG4gICAgICBzb3VyY2UgPSBzb3VyY2UudG9KU09OKCk7XG4gICAgfVxuXG4gICAgc2Vlbi5wdXNoKHNvdXJjZSk7XG5cbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgc291cmNlLmZvckVhY2goKHYsIGkpID0+IHtcbiAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gdmlzaXQodik7XG4gICAgICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSkge1xuICAgICAgICAgIHJlc3VsdFtpXSA9IHJlZHVjZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpICYmIGhhc093bk9yUHJvdG90eXBlVG9KU09OKHNvdXJjZSkpIHtcbiAgICAgICAgc2Vlbi5wb3AoKTtcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNvdXJjZSkpIHtcbiAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gbG93ZXJLZXlzLmhhcyhrZXkudG9Mb3dlckNhc2UoKSkgPyBSRURBQ1RFRCA6IHZpc2l0KHZhbHVlKTtcbiAgICAgICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChyZWR1Y2VkVmFsdWUpKSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSByZWR1Y2VkVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZWVuLnBvcCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgcmV0dXJuIHZpc2l0KGNvbmZpZyk7XG59XG5cbmNsYXNzIEF4aW9zRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHN0YXRpYyBmcm9tKGVycm9yLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlLCBjdXN0b21Qcm9wcykge1xuICAgIGNvbnN0IGF4aW9zRXJyb3IgPSBuZXcgQXhpb3NFcnJvcihlcnJvci5tZXNzYWdlLCBjb2RlIHx8IGVycm9yLmNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuICAgIGF4aW9zRXJyb3IuY2F1c2UgPSBlcnJvcjtcbiAgICBheGlvc0Vycm9yLm5hbWUgPSBlcnJvci5uYW1lO1xuXG4gICAgLy8gUHJlc2VydmUgc3RhdHVzIGZyb20gdGhlIG9yaWdpbmFsIGVycm9yIGlmIG5vdCBhbHJlYWR5IHNldCBmcm9tIHJlc3BvbnNlXG4gICAgaWYgKGVycm9yLnN0YXR1cyAhPSBudWxsICYmIGF4aW9zRXJyb3Iuc3RhdHVzID09IG51bGwpIHtcbiAgICAgIGF4aW9zRXJyb3Iuc3RhdHVzID0gZXJyb3Iuc3RhdHVzO1xuICAgIH1cblxuICAgIGN1c3RvbVByb3BzICYmIE9iamVjdC5hc3NpZ24oYXhpb3NFcnJvciwgY3VzdG9tUHJvcHMpO1xuICAgIHJldHVybiBheGlvc0Vycm9yO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG5cbiAgICAvLyBNYWtlIG1lc3NhZ2UgZW51bWVyYWJsZSB0byBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgLy8gVGhlIG5hdGl2ZSBFcnJvciBjb25zdHJ1Y3RvciBzZXRzIG1lc3NhZ2UgYXMgbm9uLWVudW1lcmFibGUsXG4gICAgLy8gYnV0IGF4aW9zIDwgdjEuMTMuMyBoYWQgaXQgYXMgZW51bWVyYWJsZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnbWVzc2FnZScsIHtcbiAgICAgIC8vIE51bGwtcHJvdG8gZGVzY3JpcHRvciBzbyBhIHBvbGx1dGVkIE9iamVjdC5wcm90b3R5cGUuZ2V0IGNhbm5vdCB0dXJuXG4gICAgICAvLyB0aGlzIGRhdGEgZGVzY3JpcHRvciBpbnRvIGFuIGFjY2Vzc29yIGRlc2NyaXB0b3Igb24gdGhlIHdheSBpbi5cbiAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgIHZhbHVlOiBtZXNzYWdlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYW1lID0gJ0F4aW9zRXJyb3InO1xuICAgIHRoaXMuaXNBeGlvc0Vycm9yID0gdHJ1ZTtcbiAgICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTtcbiAgICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgIHRoaXMuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICAvLyBPcHQtaW4gcmVkYWN0aW9uOiB3aGVuIHRoZSByZXF1ZXN0IGNvbmZpZyBjYXJyaWVzIGEgYHJlZGFjdGAgYXJyYXksIHRoZVxuICAgIC8vIHZhbHVlIG9mIGFueSBtYXRjaGluZyBrZXkgKGNhc2UtaW5zZW5zaXRpdmUsIGF0IGFueSBkZXB0aCkgaXMgcmVwbGFjZWRcbiAgICAvLyB3aXRoIFJFREFDVEVEIGluIHRoZSBzZXJpYWxpemVkIHNuYXBzaG90LiBVbmRlZmluZWQgb3IgZW1wdHkgbGVhdmVzIHRoZVxuICAgIC8vIGV4aXN0aW5nIHNlcmlhbGl6YXRpb24gYmVoYXZpb3IgdW5jaGFuZ2VkLlxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IHJlZGFjdEtleXMgPSBjb25maWcgJiYgdXRpbHMuaGFzT3duUHJvcChjb25maWcsICdyZWRhY3QnKSA/IGNvbmZpZy5yZWRhY3QgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc2VyaWFsaXplZENvbmZpZyA9XG4gICAgICB1dGlscy5pc0FycmF5KHJlZGFjdEtleXMpICYmIHJlZGFjdEtleXMubGVuZ3RoID4gMFxuICAgICAgICA/IHJlZGFjdENvbmZpZyhjb25maWcsIHJlZGFjdEtleXMpXG4gICAgICAgIDogdXRpbHMudG9KU09OT2JqZWN0KGNvbmZpZyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiBzZXJpYWxpemVkQ29uZmlnLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICB9O1xuICB9XG59XG5cbi8vIFRoaXMgY2FuIGJlIGNoYW5nZWQgdG8gc3RhdGljIHByb3BlcnRpZXMgYXMgc29vbiBhcyB0aGUgcGFyc2VyIG9wdGlvbnMgaW4gLmVzbGludC5janMgYXJlIHVwZGF0ZWQuXG5BeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFID0gJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJztcbkF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04gPSAnRVJSX0JBRF9PUFRJT04nO1xuQXhpb3NFcnJvci5FQ09OTkFCT1JURUQgPSAnRUNPTk5BQk9SVEVEJztcbkF4aW9zRXJyb3IuRVRJTUVET1VUID0gJ0VUSU1FRE9VVCc7XG5BeGlvc0Vycm9yLkVDT05OUkVGVVNFRCA9ICdFQ09OTlJFRlVTRUQnO1xuQXhpb3NFcnJvci5FUlJfTkVUV09SSyA9ICdFUlJfTkVUV09SSyc7XG5BeGlvc0Vycm9yLkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMgPSAnRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyc7XG5BeGlvc0Vycm9yLkVSUl9ERVBSRUNBVEVEID0gJ0VSUl9ERVBSRUNBVEVEJztcbkF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSA9ICdFUlJfQkFEX1JFU1BPTlNFJztcbkF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNUID0gJ0VSUl9CQURfUkVRVUVTVCc7XG5BeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCA9ICdFUlJfQ0FOQ0VMRUQnO1xuQXhpb3NFcnJvci5FUlJfTk9UX1NVUFBPUlQgPSAnRVJSX05PVF9TVVBQT1JUJztcbkF4aW9zRXJyb3IuRVJSX0lOVkFMSURfVVJMID0gJ0VSUl9JTlZBTElEX1VSTCc7XG5BeGlvc0Vycm9yLkVSUl9GT1JNX0RBVEFfREVQVEhfRVhDRUVERUQgPSAnRVJSX0ZPUk1fREFUQV9ERVBUSF9FWENFRURFRCc7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zRXJyb3I7XG4iLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3RyaWN0XG5leHBvcnQgZGVmYXVsdCBudWxsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbi8vIHRlbXBvcmFyeSBob3RmaXggdG8gYXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlcyB1bnRpbCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBpcyByZWZhY3RvcmVkXG5pbXBvcnQgUGxhdGZvcm1Gb3JtRGF0YSBmcm9tICcuLi9wbGF0Zm9ybS9ub2RlL2NsYXNzZXMvRm9ybURhdGEuanMnO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHRoaW5nIGlzIGEgYXJyYXkgb3IganMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGluZyAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYmUgdmlzaXRlZC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWaXNpdGFibGUodGhpbmcpIHtcbiAgcmV0dXJuIHV0aWxzLmlzUGxhaW5PYmplY3QodGhpbmcpIHx8IHV0aWxzLmlzQXJyYXkodGhpbmcpO1xufVxuXG4vKipcbiAqIEl0IHJlbW92ZXMgdGhlIGJyYWNrZXRzIGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwYXJhbWV0ZXIuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGtleSB3aXRob3V0IHRoZSBicmFja2V0cy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQnJhY2tldHMoa2V5KSB7XG4gIHJldHVybiB1dGlscy5lbmRzV2l0aChrZXksICdbXScpID8ga2V5LnNsaWNlKDAsIC0yKSA6IGtleTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhdGgsIGEga2V5LCBhbmQgYSBib29sZWFuLCBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGJlaW5nIGl0ZXJhdGVkIG92ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZG90cyAtIElmIHRydWUsIHRoZSBrZXkgd2lsbCBiZSByZW5kZXJlZCB3aXRoIGRvdHMgaW5zdGVhZCBvZiBicmFja2V0cy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4ga2V5O1xuICByZXR1cm4gcGF0aFxuICAgIC5jb25jYXQoa2V5KVxuICAgIC5tYXAoZnVuY3Rpb24gZWFjaCh0b2tlbiwgaSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICB0b2tlbiA9IHJlbW92ZUJyYWNrZXRzKHRva2VuKTtcbiAgICAgIHJldHVybiAhZG90cyAmJiBpID8gJ1snICsgdG9rZW4gKyAnXScgOiB0b2tlbjtcbiAgICB9KVxuICAgIC5qb2luKGRvdHMgPyAnLicgOiAnJyk7XG59XG5cbi8qKlxuICogSWYgdGhlIGFycmF5IGlzIGFuIGFycmF5IGFuZCBub25lIG9mIGl0cyBlbGVtZW50cyBhcmUgdmlzaXRhYmxlLCB0aGVuIGl0J3MgYSBmbGF0IGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmxhdEFycmF5KGFycikge1xuICByZXR1cm4gdXRpbHMuaXNBcnJheShhcnIpICYmICFhcnIuc29tZShpc1Zpc2l0YWJsZSk7XG59XG5cbmNvbnN0IHByZWRpY2F0ZXMgPSB1dGlscy50b0ZsYXRPYmplY3QodXRpbHMsIHt9LCBudWxsLCBmdW5jdGlvbiBmaWx0ZXIocHJvcCkge1xuICByZXR1cm4gL15pc1tBLVpdLy50ZXN0KHByb3ApO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcGFyYW0gez9PYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMudmlzaXRvcl1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubWV0YVRva2VucyA9IHRydWVdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmRvdHMgPSBmYWxzZV1cbiAqIEBwYXJhbSB7P0Jvb2xlYW59IFtvcHRpb25zLmluZGV4ZXMgPSBmYWxzZV1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG4vKipcbiAqIEl0IGNvbnZlcnRzIGFuIG9iamVjdCBpbnRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgdG8gZm9ybSBkYXRhLlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIC0gVGhlIEZvcm1EYXRhIG9iamVjdCB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgKFBsYXRmb3JtRm9ybURhdGEgfHwgRm9ybURhdGEpKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIG9wdGlvbnMgPSB1dGlscy50b0ZsYXRPYmplY3QoXG4gICAgb3B0aW9ucyxcbiAgICB7XG4gICAgICBtZXRhVG9rZW5zOiB0cnVlLFxuICAgICAgZG90czogZmFsc2UsXG4gICAgICBpbmRleGVzOiBmYWxzZSxcbiAgICB9LFxuICAgIGZhbHNlLFxuICAgIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICAgICAgcmV0dXJuICF1dGlscy5pc1VuZGVmaW5lZChzb3VyY2Vbb3B0aW9uXSk7XG4gICAgfVxuICApO1xuXG4gIGNvbnN0IG1ldGFUb2tlbnMgPSBvcHRpb25zLm1ldGFUb2tlbnM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICBjb25zdCB2aXNpdG9yID0gb3B0aW9ucy52aXNpdG9yIHx8IGRlZmF1bHRWaXNpdG9yO1xuICBjb25zdCBkb3RzID0gb3B0aW9ucy5kb3RzO1xuICBjb25zdCBpbmRleGVzID0gb3B0aW9ucy5pbmRleGVzO1xuICBjb25zdCBfQmxvYiA9IG9wdGlvbnMuQmxvYiB8fCAodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2IpO1xuICBjb25zdCBtYXhEZXB0aCA9IG9wdGlvbnMubWF4RGVwdGggPT09IHVuZGVmaW5lZCA/IDEwMCA6IG9wdGlvbnMubWF4RGVwdGg7XG4gIGNvbnN0IHVzZUJsb2IgPSBfQmxvYiAmJiB1dGlscy5pc1NwZWNDb21wbGlhbnRGb3JtKGZvcm1EYXRhKTtcblxuICBpZiAoIXV0aWxzLmlzRnVuY3Rpb24odmlzaXRvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJyc7XG5cbiAgICBpZiAodXRpbHMuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQm9vbGVhbih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICghdXNlQmxvYiAmJiB1dGlscy5pc0Jsb2IodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVzZUJsb2IgJiYgdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgPyBuZXcgQmxvYihbdmFsdWVdKSA6IEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCB2aXNpdG9yLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0ga2V5XG4gICAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nfE51bWJlcj59IHBhdGhcbiAgICogQHRoaXMge0Zvcm1EYXRhfVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJuIHRydWUgdG8gdmlzaXQgdGhlIGVhY2ggcHJvcCBvZiB0aGUgdmFsdWUgcmVjdXJzaXZlbHlcbiAgICovXG4gIGZ1bmN0aW9uIGRlZmF1bHRWaXNpdG9yKHZhbHVlLCBrZXksIHBhdGgpIHtcbiAgICBsZXQgYXJyID0gdmFsdWU7XG5cbiAgICBpZiAodXRpbHMuaXNSZWFjdE5hdGl2ZShmb3JtRGF0YSkgJiYgdXRpbHMuaXNSZWFjdE5hdGl2ZUJsb2IodmFsdWUpKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQocmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cyksIGNvbnZlcnRWYWx1ZSh2YWx1ZSkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSAmJiAhcGF0aCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodXRpbHMuZW5kc1dpdGgoa2V5LCAne30nKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gbWV0YVRva2VucyA/IGtleSA6IGtleS5zbGljZSgwLCAtMik7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICh1dGlscy5pc0FycmF5KHZhbHVlKSAmJiBpc0ZsYXRBcnJheSh2YWx1ZSkpIHx8XG4gICAgICAgICgodXRpbHMuaXNGaWxlTGlzdCh2YWx1ZSkgfHwgdXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSkgJiYgKGFyciA9IHV0aWxzLnRvQXJyYXkodmFsdWUpKSlcbiAgICAgICkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gcmVtb3ZlQnJhY2tldHMoa2V5KTtcblxuICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkge1xuICAgICAgICAgICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJlxuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgICAgICAgaW5kZXhlcyA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgID8gcmVuZGVyS2V5KFtrZXldLCBpbmRleCwgZG90cylcbiAgICAgICAgICAgICAgICA6IGluZGV4ZXMgPT09IG51bGxcbiAgICAgICAgICAgICAgICAgID8ga2V5XG4gICAgICAgICAgICAgICAgICA6IGtleSArICdbXScsXG4gICAgICAgICAgICAgIGNvbnZlcnRWYWx1ZShlbClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzVmlzaXRhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9ybURhdGEuYXBwZW5kKHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpLCBjb252ZXJ0VmFsdWUodmFsdWUpKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHN0YWNrID0gW107XG5cbiAgY29uc3QgZXhwb3NlZEhlbHBlcnMgPSBPYmplY3QuYXNzaWduKHByZWRpY2F0ZXMsIHtcbiAgICBkZWZhdWx0VmlzaXRvcixcbiAgICBjb252ZXJ0VmFsdWUsXG4gICAgaXNWaXNpdGFibGUsXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkKHZhbHVlLCBwYXRoLCBkZXB0aCA9IDApIHtcbiAgICBpZiAodXRpbHMuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoZGVwdGggPiBtYXhEZXB0aCkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICdPYmplY3QgaXMgdG9vIGRlZXBseSBuZXN0ZWQgKCcgKyBkZXB0aCArICcgbGV2ZWxzKS4gTWF4IGRlcHRoOiAnICsgbWF4RGVwdGgsXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0ZPUk1fREFUQV9ERVBUSF9FWENFRURFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiBlYWNoKGVsLCBrZXkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9XG4gICAgICAgICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJlxuICAgICAgICB2aXNpdG9yLmNhbGwoZm9ybURhdGEsIGVsLCB1dGlscy5pc1N0cmluZyhrZXkpID8ga2V5LnRyaW0oKSA6IGtleSwgcGF0aCwgZXhwb3NlZEhlbHBlcnMpO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldLCBkZXB0aCArIDEpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Gb3JtRGF0YTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBJdCBlbmNvZGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHVucmVzZXJ2ZWQgc2V0IHdpdGhcbiAqIHRoZWlyIHBlcmNlbnQtZW5jb2RlZCBlcXVpdmFsZW50c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZShzdHIpIHtcbiAgY29uc3QgY2hhck1hcCA9IHtcbiAgICAnISc6ICclMjEnLFxuICAgIFwiJ1wiOiAnJTI3JyxcbiAgICAnKCc6ICclMjgnLFxuICAgICcpJzogJyUyOScsXG4gICAgJ34nOiAnJTdFJyxcbiAgICAnJTIwJzogJysnLFxuICB9O1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCl+XXwlMjAvZywgZnVuY3Rpb24gcmVwbGFjZXIobWF0Y2gpIHtcbiAgICByZXR1cm4gY2hhck1hcFttYXRjaF07XG4gIH0pO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGFyYW1zIG9iamVjdCBhbmQgY29udmVydHMgaXQgdG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGJlIGNvbnZlcnRlZCB0byBhIEZvcm1EYXRhIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBwYXNzZWQgdG8gdGhlIEF4aW9zIGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpIHtcbiAgdGhpcy5fcGFpcnMgPSBbXTtcblxuICBwYXJhbXMgJiYgdG9Gb3JtRGF0YShwYXJhbXMsIHRoaXMsIG9wdGlvbnMpO1xufVxuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc1VSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG5cbnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fcGFpcnMucHVzaChbbmFtZSwgdmFsdWVdKTtcbn07XG5cbnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKGVuY29kZXIpIHtcbiAgY29uc3QgX2VuY29kZSA9IGVuY29kZXJcbiAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZW5jb2Rlci5jYWxsKHRoaXMsIHZhbHVlLCBlbmNvZGUpO1xuICAgICAgfVxuICAgIDogZW5jb2RlO1xuXG4gIHJldHVybiB0aGlzLl9wYWlyc1xuICAgIC5tYXAoZnVuY3Rpb24gZWFjaChwYWlyKSB7XG4gICAgICByZXR1cm4gX2VuY29kZShwYWlyWzBdKSArICc9JyArIF9lbmNvZGUocGFpclsxXSk7XG4gICAgfSwgJycpXG4gICAgLmpvaW4oJyYnKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4uL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMnO1xuXG4vKipcbiAqIEl0IHJlcGxhY2VzIFVSTC1lbmNvZGVkIGZvcm1zIG9mIGA6YCwgYCRgLCBgLGAsIGFuZCBzcGFjZXMgd2l0aFxuICogdGhlaXIgcGxhaW4gY291bnRlcnBhcnRzIChgOmAsIGAkYCwgYCxgLCBgK2ApLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWwgVGhlIHZhbHVlIHRvIGJlIGVuY29kZWQuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKVxuICAgIC5yZXBsYWNlKC8lM0EvZ2ksICc6JylcbiAgICAucmVwbGFjZSgvJTI0L2csICckJylcbiAgICAucmVwbGFjZSgvJTJDL2dpLCAnLCcpXG4gICAgLnJlcGxhY2UoLyUyMC9nLCAnKycpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7PyhvYmplY3R8RnVuY3Rpb24pfSBvcHRpb25zXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIG9wdGlvbnMpIHtcbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgY29uc3QgX2VuY29kZSA9IChvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RlKSB8fCBlbmNvZGU7XG5cbiAgY29uc3QgX29wdGlvbnMgPSB1dGlscy5pc0Z1bmN0aW9uKG9wdGlvbnMpXG4gICAgPyB7XG4gICAgICAgIHNlcmlhbGl6ZTogb3B0aW9ucyxcbiAgICAgIH1cbiAgICA6IG9wdGlvbnM7XG5cbiAgY29uc3Qgc2VyaWFsaXplRm4gPSBfb3B0aW9ucyAmJiBfb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgX29wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSB1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpXG4gICAgICA/IHBhcmFtcy50b1N0cmluZygpXG4gICAgICA6IG5ldyBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIF9vcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgY29uc3QgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG5cbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuY2xhc3MgSW50ZXJjZXB0b3JNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgdGhlIGludGVyY2VwdG9yLCBzeW5jaHJvbm91cyBhbmQgcnVuV2hlblxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gICAqL1xuICB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICAgIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgICBmdWxmaWxsZWQsXG4gICAgICByZWplY3RlZCxcbiAgICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGwsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGVqZWN0KGlkKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBpbnRlcmNlcHRvcnMgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVycykge1xuICAgICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICAgKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmb3JFYWNoKGZuKSB7XG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZSxcbiAgbGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZzogdHJ1ZSxcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzJztcbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnID8gVVJMU2VhcmNoUGFyYW1zIDogQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcgPyBGb3JtRGF0YSA6IG51bGw7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyA/IEJsb2IgOiBudWxsO1xuIiwiaW1wb3J0IFVSTFNlYXJjaFBhcmFtcyBmcm9tICcuL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzJztcbmltcG9ydCBGb3JtRGF0YSBmcm9tICcuL2NsYXNzZXMvRm9ybURhdGEuanMnO1xuaW1wb3J0IEJsb2IgZnJvbSAnLi9jbGFzc2VzL0Jsb2IuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzQnJvd3NlcjogdHJ1ZSxcbiAgY2xhc3Nlczoge1xuICAgIFVSTFNlYXJjaFBhcmFtcyxcbiAgICBGb3JtRGF0YSxcbiAgICBCbG9iLFxuICB9LFxuICBwcm90b2NvbHM6IFsnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2Jsb2InLCAndXJsJywgJ2RhdGEnXSxcbn07XG4iLCJjb25zdCBoYXNCcm93c2VyRW52ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxuY29uc3QgX25hdmlnYXRvciA9ICh0eXBlb2YgbmF2aWdhdG9yID09PSAnb2JqZWN0JyAmJiBuYXZpZ2F0b3IpIHx8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlckVudiA9XG4gIGhhc0Jyb3dzZXJFbnYgJiZcbiAgKCFfbmF2aWdhdG9yIHx8IFsnUmVhY3ROYXRpdmUnLCAnTmF0aXZlU2NyaXB0JywgJ05TJ10uaW5kZXhPZihfbmF2aWdhdG9yLnByb2R1Y3QpIDwgMCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIHdlYldvcmtlciBlbnZpcm9ubWVudFxuICpcbiAqIEFsdGhvdWdoIHRoZSBgaXNTdGFuZGFyZEJyb3dzZXJFbnZgIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdFxuICogYGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyYCwgdGhlIFdlYldvcmtlciB3aWxsIHN0aWxsIGJlXG4gKiBmaWx0ZXJlZCBvdXQgZHVlIHRvIGl0cyBqdWRnbWVudCBzdGFuZGFyZFxuICogYHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdgLlxuICogVGhpcyBsZWFkcyB0byBhIHByb2JsZW0gd2hlbiBheGlvcyBwb3N0IGBGb3JtRGF0YWAgaW4gd2ViV29ya2VyXG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiA9ICgoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSAmJlxuICAgIHR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMgPT09ICdmdW5jdGlvbidcbiAgKTtcbn0pKCk7XG5cbmNvbnN0IG9yaWdpbiA9IChoYXNCcm93c2VyRW52ICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmKSB8fCAnaHR0cDovL2xvY2FsaG9zdCc7XG5cbmV4cG9ydCB7XG4gIGhhc0Jyb3dzZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyRW52LFxuICBfbmF2aWdhdG9yIGFzIG5hdmlnYXRvcixcbiAgb3JpZ2luLFxufTtcbiIsImltcG9ydCBwbGF0Zm9ybSBmcm9tICcuL25vZGUvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi9jb21tb24vdXRpbHMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIC4uLnV0aWxzLFxuICAuLi5wbGF0Zm9ybSxcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b0Zvcm1EYXRhKGRhdGEsIG5ldyBwbGF0Zm9ybS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcygpLCB7XG4gICAgdmlzaXRvcjogZnVuY3Rpb24gKHZhbHVlLCBrZXksIHBhdGgsIGhlbHBlcnMpIHtcbiAgICAgIGlmIChwbGF0Zm9ybS5pc05vZGUgJiYgdXRpbHMuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGVscGVycy5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcgbGlrZSBgZm9vW3hdW3ldW3pdYCBhbmQgcmV0dXJucyBhbiBhcnJheSBsaWtlIGBbJ2ZvbycsICd4JywgJ3knLCAneiddXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICpcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUHJvcFBhdGgobmFtZSkge1xuICAvLyBmb29beF1beV1bel1cbiAgLy8gZm9vLngueS56XG4gIC8vIGZvby14LXktelxuICAvLyBmb28geCB5IHpcbiAgcmV0dXJuIHV0aWxzLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZywgbmFtZSkubWFwKChtYXRjaCkgPT4ge1xuICAgIHJldHVybiBtYXRjaFswXSA9PT0gJ1tdJyA/ICcnIDogbWF0Y2hbMV0gfHwgbWF0Y2hbMF07XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gYXJyYXkgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNvbnZlcnQgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIGtleXMgYW5kIHZhbHVlcyBhcyB0aGUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5VG9PYmplY3QoYXJyKSB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYXJyKTtcbiAgbGV0IGk7XG4gIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICBsZXQga2V5O1xuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldO1xuICAgIG9ialtrZXldID0gYXJyW2tleV07XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIEZvcm1EYXRhIG9iamVjdCBhbmQgcmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gY29udmVydCB0byBKU09OLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3Q8c3RyaW5nLCBhbnk+IHwgbnVsbH0gVGhlIGNvbnZlcnRlZCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGZvcm1EYXRhVG9KU09OKGZvcm1EYXRhKSB7XG4gIGZ1bmN0aW9uIGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0LCBpbmRleCkge1xuICAgIGxldCBuYW1lID0gcGF0aFtpbmRleCsrXTtcblxuICAgIGlmIChuYW1lID09PSAnX19wcm90b19fJykgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBpc051bWVyaWNLZXkgPSBOdW1iZXIuaXNGaW5pdGUoK25hbWUpO1xuICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID49IHBhdGgubGVuZ3RoO1xuICAgIG5hbWUgPSAhbmFtZSAmJiB1dGlscy5pc0FycmF5KHRhcmdldCkgPyB0YXJnZXQubGVuZ3RoIDogbmFtZTtcblxuICAgIGlmIChpc0xhc3QpIHtcbiAgICAgIGlmICh1dGlscy5oYXNPd25Qcm9wKHRhcmdldCwgbmFtZSkpIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gdXRpbHMuaXNBcnJheSh0YXJnZXRbbmFtZV0pXG4gICAgICAgICAgPyB0YXJnZXRbbmFtZV0uY29uY2F0KHZhbHVlKVxuICAgICAgICAgIDogW3RhcmdldFtuYW1lXSwgdmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICAgIH1cblxuICAgIGlmICghdXRpbHMuaGFzT3duUHJvcCh0YXJnZXQsIG5hbWUpIHx8ICF1dGlscy5pc09iamVjdCh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldFtuYW1lXSwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCAmJiB1dGlscy5pc0FycmF5KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IGFycmF5VG9PYmplY3QodGFyZ2V0W25hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc0Zvcm1EYXRhKGZvcm1EYXRhKSAmJiB1dGlscy5pc0Z1bmN0aW9uKGZvcm1EYXRhLmVudHJpZXMpKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG5cbiAgICB1dGlscy5mb3JFYWNoRW50cnkoZm9ybURhdGEsIChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgYnVpbGRQYXRoKHBhcnNlUHJvcFBhdGgobmFtZSksIHZhbHVlLCBvYmosIDApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3JtRGF0YVRvSlNPTjtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCB0b1VSTEVuY29kZWRGb3JtIGZyb20gJy4uL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IGZvcm1EYXRhVG9KU09OIGZyb20gJy4uL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuXG5jb25zdCBvd24gPSAob2JqLCBrZXkpID0+IChvYmogIT0gbnVsbCAmJiB1dGlscy5oYXNPd25Qcm9wKG9iaiwga2V5KSA/IG9ialtrZXldIDogdW5kZWZpbmVkKTtcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZywgdHJpZXMgdG8gcGFyc2UgaXQsIGFuZCBpZiBpdCBmYWlscywgaXQgcmV0dXJucyB0aGUgc3RyaW5naWZpZWQgdmVyc2lvblxuICogb2YgdGhlIGlucHV0XG4gKlxuICogQHBhcmFtIHthbnl9IHJhd1ZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHN0cmluZ2lmaWVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyc2VyIC0gQSBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlbmNvZGVyIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmFsdWUgYW5kIHJldHVybnMgYSBzdHJpbmcuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gQSBzdHJpbmdpZmllZCB2ZXJzaW9uIG9mIHRoZSByYXdWYWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzLmlzU3RyaW5nKHJhd1ZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICAocGFyc2VyIHx8IEpTT04ucGFyc2UpKHJhd1ZhbHVlKTtcbiAgICAgIHJldHVybiB1dGlscy50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlbmNvZGVyIHx8IEpTT04uc3RyaW5naWZ5KShyYXdWYWx1ZSk7XG59XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnLCAnZmV0Y2gnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSB8fCAnJztcbiAgICAgIGNvbnN0IGhhc0pTT05Db250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA+IC0xO1xuICAgICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMuaXNPYmplY3QoZGF0YSk7XG5cbiAgICAgIGlmIChpc09iamVjdFBheWxvYWQgJiYgdXRpbHMuaXNIVE1MRm9ybShkYXRhKSkge1xuICAgICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0Zvcm1EYXRhID0gdXRpbHMuaXNGb3JtRGF0YShkYXRhKTtcblxuICAgICAgaWYgKGlzRm9ybURhdGEpIHtcbiAgICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpIHx8XG4gICAgICAgIHV0aWxzLmlzUmVhZGFibGVTdHJlYW0oZGF0YSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgICB9XG4gICAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgICBpZiAoaXNPYmplY3RQYXlsb2FkKSB7XG4gICAgICAgIGNvbnN0IGZvcm1TZXJpYWxpemVyID0gb3duKHRoaXMsICdmb3JtU2VyaWFsaXplcicpO1xuICAgICAgICBpZiAoY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykgPiAtMSkge1xuICAgICAgICAgIHJldHVybiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIGZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChpc0ZpbGVMaXN0ID0gdXRpbHMuaXNGaWxlTGlzdChkYXRhKSkgfHxcbiAgICAgICAgICBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBlbnYgPSBvd24odGhpcywgJ2VudicpO1xuICAgICAgICAgIGNvbnN0IF9Gb3JtRGF0YSA9IGVudiAmJiBlbnYuRm9ybURhdGE7XG5cbiAgICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICAgIGlzRmlsZUxpc3QgPyB7ICdmaWxlc1tdJzogZGF0YSB9IDogZGF0YSxcbiAgICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgICBmb3JtU2VyaWFsaXplclxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzT2JqZWN0UGF5bG9hZCB8fCBoYXNKU09OQ29udGVudFR5cGUpIHtcbiAgICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24vanNvbicsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSxcbiAgXSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW1xuICAgIGZ1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IG93bih0aGlzLCAndHJhbnNpdGlvbmFsJykgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgICAgY29uc3QgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgICAgY29uc3QgcmVzcG9uc2VUeXBlID0gb3duKHRoaXMsICdyZXNwb25zZVR5cGUnKTtcbiAgICAgIGNvbnN0IEpTT05SZXF1ZXN0ZWQgPSByZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgICAgaWYgKHV0aWxzLmlzUmVzcG9uc2UoZGF0YSkgfHwgdXRpbHMuaXNSZWFkYWJsZVN0cmVhbShkYXRhKSkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBkYXRhICYmXG4gICAgICAgIHV0aWxzLmlzU3RyaW5nKGRhdGEpICYmXG4gICAgICAgICgoZm9yY2VkSlNPTlBhcnNpbmcgJiYgIXJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZClcbiAgICAgICkge1xuICAgICAgICBjb25zdCBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhLCBvd24odGhpcywgJ3BhcnNlUmV2aXZlcicpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCBvd24odGhpcywgJ3Jlc3BvbnNlJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSxcbiAgXSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iLFxuICB9LFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyxcbiAgICAgICdDb250ZW50LVR5cGUnOiB1bmRlZmluZWQsXG4gICAgfSxcbiAgfSxcbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAncXVlcnknXSwgKG1ldGhvZCkgPT4ge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0cztcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHBhcmFtIHs/T2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGZucywgcmVzcG9uc2UpIHtcbiAgY29uc3QgY29uZmlnID0gdGhpcyB8fCBkZWZhdWx0cztcbiAgY29uc3QgY29udGV4dCA9IHJlc3BvbnNlIHx8IGNvbmZpZztcbiAgY29uc3QgaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbnRleHQuaGVhZGVycyk7XG4gIGxldCBkYXRhID0gY29udGV4dC5kYXRhO1xuXG4gIHV0aWxzLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb25maWcsIGRhdGEsIGhlYWRlcnMubm9ybWFsaXplKCksIHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgaGVhZGVycy5ub3JtYWxpemUoKTtcblxuICByZXR1cm4gZGF0YTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuXG5jbGFzcyBDYW5jZWxlZEVycm9yIGV4dGVuZHMgQXhpb3NFcnJvciB7XG4gIC8qKlxuICAgKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgVGhlIGNvbmZpZy5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSByZXF1ZXN0IFRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q2FuY2VsZWRFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgICBzdXBlcihtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQsIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgdGhpcy5uYW1lID0gJ0NhbmNlbGVkRXJyb3InO1xuICAgIHRoaXMuX19DQU5DRUxfXyA9IHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FuY2VsZWRFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi9BeGlvc0Vycm9yLmpzJztcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IHZhbGlkYXRlU3RhdHVzID0gcmVzcG9uc2UuY29uZmlnLnZhbGlkYXRlU3RhdHVzO1xuICBpZiAoIXJlc3BvbnNlLnN0YXR1cyB8fCAhdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICByZXNwb25zZS5zdGF0dXMgPj0gNDAwICYmIHJlc3BvbnNlLnN0YXR1cyA8IDUwMCA/IEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNUIDogQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KTooPzpcXC9cXC8pPy8uZXhlYyh1cmwpO1xuICByZXR1cm4gKG1hdGNoICYmIG1hdGNoWzFdKSB8fCAnJztcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDYWxjdWxhdGUgZGF0YSBtYXhSYXRlXG4gKiBAcGFyYW0ge051bWJlcn0gW3NhbXBsZXNDb3VudD0gMTBdXG4gKiBAcGFyYW0ge051bWJlcn0gW21pbj0gMTAwMF1cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc3BlZWRvbWV0ZXIoc2FtcGxlc0NvdW50LCBtaW4pIHtcbiAgc2FtcGxlc0NvdW50ID0gc2FtcGxlc0NvdW50IHx8IDEwO1xuICBjb25zdCBieXRlcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBjb25zdCB0aW1lc3RhbXBzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGxldCBoZWFkID0gMDtcbiAgbGV0IHRhaWwgPSAwO1xuICBsZXQgZmlyc3RTYW1wbGVUUztcblxuICBtaW4gPSBtaW4gIT09IHVuZGVmaW5lZCA/IG1pbiA6IDEwMDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHB1c2goY2h1bmtMZW5ndGgpIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgY29uc3Qgc3RhcnRlZEF0ID0gdGltZXN0YW1wc1t0YWlsXTtcblxuICAgIGlmICghZmlyc3RTYW1wbGVUUykge1xuICAgICAgZmlyc3RTYW1wbGVUUyA9IG5vdztcbiAgICB9XG5cbiAgICBieXRlc1toZWFkXSA9IGNodW5rTGVuZ3RoO1xuICAgIHRpbWVzdGFtcHNbaGVhZF0gPSBub3c7XG5cbiAgICBsZXQgaSA9IHRhaWw7XG4gICAgbGV0IGJ5dGVzQ291bnQgPSAwO1xuXG4gICAgd2hpbGUgKGkgIT09IGhlYWQpIHtcbiAgICAgIGJ5dGVzQ291bnQgKz0gYnl0ZXNbaSsrXTtcbiAgICAgIGkgPSBpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGhlYWQgPSAoaGVhZCArIDEpICUgc2FtcGxlc0NvdW50O1xuXG4gICAgaWYgKGhlYWQgPT09IHRhaWwpIHtcbiAgICAgIHRhaWwgPSAodGFpbCArIDEpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGlmIChub3cgLSBmaXJzdFNhbXBsZVRTIDwgbWluKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFzc2VkID0gc3RhcnRlZEF0ICYmIG5vdyAtIHN0YXJ0ZWRBdDtcblxuICAgIHJldHVybiBwYXNzZWQgPyBNYXRoLnJvdW5kKChieXRlc0NvdW50ICogMTAwMCkgLyBwYXNzZWQpIDogdW5kZWZpbmVkO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzcGVlZG9tZXRlcjtcbiIsIi8qKlxuICogVGhyb3R0bGUgZGVjb3JhdG9yXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtOdW1iZXJ9IGZyZXFcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiB0aHJvdHRsZShmbiwgZnJlcSkge1xuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgbGV0IHRocmVzaG9sZCA9IDEwMDAgLyBmcmVxO1xuICBsZXQgbGFzdEFyZ3M7XG4gIGxldCB0aW1lcjtcblxuICBjb25zdCBpbnZva2UgPSAoYXJncywgbm93ID0gRGF0ZS5ub3coKSkgPT4ge1xuICAgIHRpbWVzdGFtcCA9IG5vdztcbiAgICBsYXN0QXJncyA9IG51bGw7XG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBmbiguLi5hcmdzKTtcbiAgfTtcblxuICBjb25zdCB0aHJvdHRsZWQgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcGFzc2VkID0gbm93IC0gdGltZXN0YW1wO1xuICAgIGlmIChwYXNzZWQgPj0gdGhyZXNob2xkKSB7XG4gICAgICBpbnZva2UoYXJncywgbm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgICAgaWYgKCF0aW1lcikge1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgICBpbnZva2UobGFzdEFyZ3MpO1xuICAgICAgICB9LCB0aHJlc2hvbGQgLSBwYXNzZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBmbHVzaCA9ICgpID0+IGxhc3RBcmdzICYmIGludm9rZShsYXN0QXJncyk7XG5cbiAgcmV0dXJuIFt0aHJvdHRsZWQsIGZsdXNoXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdGhyb3R0bGU7XG4iLCJpbXBvcnQgc3BlZWRvbWV0ZXIgZnJvbSAnLi9zcGVlZG9tZXRlci5qcyc7XG5pbXBvcnQgdGhyb3R0bGUgZnJvbSAnLi90aHJvdHRsZS5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG5leHBvcnQgY29uc3QgcHJvZ3Jlc3NFdmVudFJlZHVjZXIgPSAobGlzdGVuZXIsIGlzRG93bmxvYWRTdHJlYW0sIGZyZXEgPSAzKSA9PiB7XG4gIGxldCBieXRlc05vdGlmaWVkID0gMDtcbiAgY29uc3QgX3NwZWVkb21ldGVyID0gc3BlZWRvbWV0ZXIoNTAsIDI1MCk7XG5cbiAgcmV0dXJuIHRocm90dGxlKChlKSA9PiB7XG4gICAgaWYgKCFlIHx8IHR5cGVvZiBlLmxvYWRlZCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmF3TG9hZGVkID0gZS5sb2FkZWQ7XG4gICAgY29uc3QgdG90YWwgPSBlLmxlbmd0aENvbXB1dGFibGUgPyBlLnRvdGFsIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGxvYWRlZCA9IHRvdGFsICE9IG51bGwgPyBNYXRoLm1pbihyYXdMb2FkZWQsIHRvdGFsKSA6IHJhd0xvYWRlZDtcbiAgICBjb25zdCBwcm9ncmVzc0J5dGVzID0gTWF0aC5tYXgoMCwgbG9hZGVkIC0gYnl0ZXNOb3RpZmllZCk7XG4gICAgY29uc3QgcmF0ZSA9IF9zcGVlZG9tZXRlcihwcm9ncmVzc0J5dGVzKTtcblxuICAgIGJ5dGVzTm90aWZpZWQgPSBNYXRoLm1heChieXRlc05vdGlmaWVkLCBsb2FkZWQpO1xuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGxvYWRlZCxcbiAgICAgIHRvdGFsLFxuICAgICAgcHJvZ3Jlc3M6IHRvdGFsID8gbG9hZGVkIC8gdG90YWwgOiB1bmRlZmluZWQsXG4gICAgICBieXRlczogcHJvZ3Jlc3NCeXRlcyxcbiAgICAgIHJhdGU6IHJhdGUgPyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXN0aW1hdGVkOiByYXRlICYmIHRvdGFsID8gKHRvdGFsIC0gbG9hZGVkKSAvIHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBldmVudDogZSxcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRvdGFsICE9IG51bGwsXG4gICAgICBbaXNEb3dubG9hZFN0cmVhbSA/ICdkb3dubG9hZCcgOiAndXBsb2FkJ106IHRydWUsXG4gICAgfTtcblxuICAgIGxpc3RlbmVyKGRhdGEpO1xuICB9LCBmcmVxKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yID0gKHRvdGFsLCB0aHJvdHRsZWQpID0+IHtcbiAgY29uc3QgbGVuZ3RoQ29tcHV0YWJsZSA9IHRvdGFsICE9IG51bGw7XG5cbiAgcmV0dXJuIFtcbiAgICAobG9hZGVkKSA9PlxuICAgICAgdGhyb3R0bGVkWzBdKHtcbiAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZSxcbiAgICAgICAgdG90YWwsXG4gICAgICAgIGxvYWRlZCxcbiAgICAgIH0pLFxuICAgIHRocm90dGxlZFsxXSxcbiAgXTtcbn07XG5cbmV4cG9ydCBjb25zdCBhc3luY0RlY29yYXRvciA9XG4gIChmbikgPT5cbiAgKC4uLmFyZ3MpID0+XG4gICAgdXRpbHMuYXNhcCgoKSA9PiBmbiguLi5hcmdzKSk7XG4iLCJpbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnZcbiAgPyAoKG9yaWdpbiwgaXNNU0lFKSA9PiAodXJsKSA9PiB7XG4gICAgICB1cmwgPSBuZXcgVVJMKHVybCwgcGxhdGZvcm0ub3JpZ2luKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgb3JpZ2luLnByb3RvY29sID09PSB1cmwucHJvdG9jb2wgJiZcbiAgICAgICAgb3JpZ2luLmhvc3QgPT09IHVybC5ob3N0ICYmXG4gICAgICAgIChpc01TSUUgfHwgb3JpZ2luLnBvcnQgPT09IHVybC5wb3J0KVxuICAgICAgKTtcbiAgICB9KShcbiAgICAgIG5ldyBVUkwocGxhdGZvcm0ub3JpZ2luKSxcbiAgICAgIHBsYXRmb3JtLm5hdmlnYXRvciAmJiAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KHBsYXRmb3JtLm5hdmlnYXRvci51c2VyQWdlbnQpXG4gICAgKVxuICA6ICgpID0+IHRydWU7XG4iLCJpbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52XG4gID8gLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gICAge1xuICAgICAgd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlLCBzYW1lU2l0ZSkge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGNvb2tpZSA9IFtgJHtuYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9YF07XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpKSB7XG4gICAgICAgICAgY29va2llLnB1c2goYGV4cGlyZXM9JHtuZXcgRGF0ZShleHBpcmVzKS50b1VUQ1N0cmluZygpfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhwYXRoKSkge1xuICAgICAgICAgIGNvb2tpZS5wdXNoKGBwYXRoPSR7cGF0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICAgIGNvb2tpZS5wdXNoKGBkb21haW49JHtkb21haW59YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY3VyZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoc2FtZVNpdGUpKSB7XG4gICAgICAgICAgY29va2llLnB1c2goYFNhbWVTaXRlPSR7c2FtZVNpdGV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICAgIH0sXG5cbiAgICAgIHJlYWQobmFtZSkge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIG51bGw7XG4gICAgICAgIC8vIE1hdGNoIG5hbWU9dmFsdWUgYnkgc3BsaXR0aW5nIG9uIHRoZSBzZW1pY29sb24gc2VwYXJhdG9yIGluc3RlYWQgb2YgYnVpbGRpbmcgYVxuICAgICAgICAvLyBSZWdFeHAgZnJvbSBgbmFtZWAg4oCUIGludGVycG9sYXRpbmcgYW4gdW5lc2NhcGVkIHN0cmluZyBpbnRvIGEgUmVnRXhwIHdvdWxkIGxldFxuICAgICAgICAvLyBtZXRhY2hhcmFjdGVycyAoZS5nLiBgLis/YCBpbiBhbiBhdHRhY2tlci1pbmZsdWVuY2VkIGNvb2tpZSBuYW1lKSBjYXVzZSBSZURvUyBvclxuICAgICAgICAvLyBtYXRjaCB0aGUgd3JvbmcgY29va2llLiBCcm93c2VycyBtYXkgc2VyaWFsaXplIGNvb2tpZSBwYWlycyBhcyBlaXRoZXIgXCI7XCIgb3JcbiAgICAgICAgLy8gXCI7IFwiLCBzbyBpZ25vcmUgb3B0aW9uYWwgd2hpdGVzcGFjZSBiZWZvcmUgZWFjaCBjb29raWUgbmFtZS5cbiAgICAgICAgY29uc3QgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjb29raWUgPSBjb29raWVzW2ldLnJlcGxhY2UoL15cXHMrLywgJycpO1xuICAgICAgICAgIGNvbnN0IGVxID0gY29va2llLmluZGV4T2YoJz0nKTtcbiAgICAgICAgICBpZiAoZXEgIT09IC0xICYmIGNvb2tpZS5zbGljZSgwLCBlcSkgPT09IG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoY29va2llLnNsaWNlKGVxICsgMSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0sXG5cbiAgICAgIHJlbW92ZShuYW1lKSB7XG4gICAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCwgJy8nKTtcbiAgICAgIH0sXG4gICAgfVxuICA6IC8vIE5vbi1zdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICB7XG4gICAgICB3cml0ZSgpIHt9LFxuICAgICAgcmVhZCgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlKCkge30sXG4gICAgfTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvP1xcLyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGlzQWJzb2x1dGVVUkwgZnJvbSAnLi4vaGVscGVycy9pc0Fic29sdXRlVVJMLmpzJztcbmltcG9ydCBjb21iaW5lVVJMcyBmcm9tICcuLi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMLCBhbGxvd0Fic29sdXRlVXJscykge1xuICBsZXQgaXNSZWxhdGl2ZVVybCA9ICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCk7XG4gIGlmIChiYXNlVVJMICYmIChpc1JlbGF0aXZlVXJsIHx8IGFsbG93QWJzb2x1dGVVcmxzID09PSBmYWxzZSkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL0F4aW9zSGVhZGVycy5qcyc7XG5cbmNvbnN0IGhlYWRlcnNUb09iamVjdCA9ICh0aGluZykgPT4gKHRoaW5nIGluc3RhbmNlb2YgQXhpb3NIZWFkZXJzID8geyAuLi50aGluZyB9IDogdGhpbmcpO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuXG4gIC8vIFVzZSBhIG51bGwtcHJvdG90eXBlIG9iamVjdCBzbyB0aGF0IGRvd25zdHJlYW0gcmVhZHMgc3VjaCBhcyBgY29uZmlnLmF1dGhgXG4gIC8vIG9yIGBjb25maWcuYmFzZVVSTGAgY2Fubm90IGluaGVyaXQgcG9sbHV0ZWQgdmFsdWVzIGZyb20gT2JqZWN0LnByb3RvdHlwZS5cbiAgLy8gYGhhc093blByb3BlcnR5YCBpcyByZXN0b3JlZCBhcyBhIG5vbi1lbnVtZXJhYmxlIG93biBzbG90IHRvIHByZXNlcnZlXG4gIC8vIGVyZ29ub21pY3MgZm9yIHVzZXIgY29kZSB0aGF0IHJlbGllcyBvbiBpdC5cbiAgY29uc3QgY29uZmlnID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbmZpZywgJ2hhc093blByb3BlcnR5Jywge1xuICAgIC8vIE51bGwtcHJvdG8gZGVzY3JpcHRvciBzbyBhIHBvbGx1dGVkIE9iamVjdC5wcm90b3R5cGUuZ2V0IGNhbm5vdCB0dXJuXG4gICAgLy8gdGhpcyBkYXRhIGRlc2NyaXB0b3IgaW50byBhbiBhY2Nlc3NvciBkZXNjcmlwdG9yIG9uIHRoZSB3YXkgaW4uXG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIHZhbHVlOiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgfSk7XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UsIHByb3AsIGNhc2VsZXNzKSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZS5jYWxsKHsgY2FzZWxlc3MgfSwgdGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMoYSwgYiwgcHJvcCwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYiwgcHJvcCwgY2FzZWxlc3MpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhLCBwcm9wLCBjYXNlbGVzcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhhLCBiLCBwcm9wKSB7XG4gICAgaWYgKHV0aWxzLmhhc093blByb3AoY29uZmlnMiwgcHJvcCkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmhhc093blByb3AoY29uZmlnMSwgcHJvcCkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lcmdlTWFwID0ge1xuICAgIHVybDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBtZXRob2Q6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgZGF0YTogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBiYXNlVVJMOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVzcG9uc2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcGFyYW1zU2VyaWFsaXplcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXRNZXNzYWdlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhDcmVkZW50aWFsczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoWFNSRlRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGFkYXB0ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VUeXBlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZDb29raWVOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZIZWFkZXJOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGRlY29tcHJlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Q29udGVudExlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhCb2R5TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGJlZm9yZVJlZGlyZWN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zcG9ydDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cHNBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBjYW5jZWxUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBzb2NrZXRQYXRoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGFsbG93ZWRTb2NrZXRQYXRoczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZUVuY29kaW5nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHZhbGlkYXRlU3RhdHVzOiBtZXJnZURpcmVjdEtleXMsXG4gICAgaGVhZGVyczogKGEsIGIsIHByb3ApID0+XG4gICAgICBtZXJnZURlZXBQcm9wZXJ0aWVzKGhlYWRlcnNUb09iamVjdChhKSwgaGVhZGVyc1RvT2JqZWN0KGIpLCBwcm9wLCB0cnVlKSxcbiAgfTtcblxuICB1dGlscy5mb3JFYWNoKE9iamVjdC5rZXlzKHsgLi4uY29uZmlnMSwgLi4uY29uZmlnMiB9KSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICBpZiAocHJvcCA9PT0gJ19fcHJvdG9fXycgfHwgcHJvcCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCBwcm9wID09PSAncHJvdG90eXBlJykgcmV0dXJuO1xuICAgIGNvbnN0IG1lcmdlID0gdXRpbHMuaGFzT3duUHJvcChtZXJnZU1hcCwgcHJvcCkgPyBtZXJnZU1hcFtwcm9wXSA6IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgY29uc3QgYSA9IHV0aWxzLmhhc093blByb3AoY29uZmlnMSwgcHJvcCkgPyBjb25maWcxW3Byb3BdIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGIgPSB1dGlscy5oYXNPd25Qcm9wKGNvbmZpZzIsIHByb3ApID8gY29uZmlnMltwcm9wXSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBjb25maWdWYWx1ZSA9IG1lcmdlKGEsIGIsIHByb3ApO1xuICAgICh1dGlscy5pc1VuZGVmaW5lZChjb25maWdWYWx1ZSkgJiYgbWVyZ2UgIT09IG1lcmdlRGlyZWN0S2V5cykgfHwgKGNvbmZpZ1twcm9wXSA9IGNvbmZpZ1ZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cbiIsImltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IGlzVVJMU2FtZU9yaWdpbiBmcm9tICcuL2lzVVJMU2FtZU9yaWdpbi5qcyc7XG5pbXBvcnQgY29va2llcyBmcm9tICcuL2Nvb2tpZXMuanMnO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSAnLi4vY29yZS9idWlsZEZ1bGxQYXRoLmpzJztcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tICcuLi9jb3JlL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gJy4vYnVpbGRVUkwuanMnO1xuXG5jb25zdCBGT1JNX0RBVEFfQ09OVEVOVF9IRUFERVJTID0gWydjb250ZW50LXR5cGUnLCAnY29udGVudC1sZW5ndGgnXTtcblxuZnVuY3Rpb24gc2V0Rm9ybURhdGFIZWFkZXJzKGhlYWRlcnMsIGZvcm1IZWFkZXJzLCBwb2xpY3kpIHtcbiAgaWYgKHBvbGljeSAhPT0gJ2NvbnRlbnQtb25seScpIHtcbiAgICBoZWFkZXJzLnNldChmb3JtSGVhZGVycyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgT2JqZWN0LmVudHJpZXMoZm9ybUhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbF0pID0+IHtcbiAgICBpZiAoRk9STV9EQVRBX0NPTlRFTlRfSEVBREVSUy5pbmNsdWRlcyhrZXkudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgIGhlYWRlcnMuc2V0KGtleSwgdmFsKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIEVuY29kZSBhIFVURi04IHN0cmluZyB0byBhIExhdGluLTEgYnl0ZSBzdHJpbmcgZm9yIHVzZSB3aXRoIGJ0b2EoKS5cbiAqIFRoaXMgaXMgYSBtb2Rlcm4gcmVwbGFjZW1lbnQgZm9yIHRoZSBkZXByZWNhdGVkIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKSBwYXR0ZXJuLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgVGhlIHN0cmluZyB0byBlbmNvZGVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBVVEYtOCBieXRlcyBhcyBhIExhdGluLTEgc3RyaW5nXG4gKi9cbmNvbnN0IGVuY29kZVVURjggPSAoc3RyKSA9PlxuICBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC8lKFswLTlBLUZdezJ9KS9naSwgKF8sIGhleCkgPT5cbiAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGhleCwgMTYpKVxuICApO1xuXG5leHBvcnQgZGVmYXVsdCAoY29uZmlnKSA9PiB7XG4gIGNvbnN0IG5ld0NvbmZpZyA9IG1lcmdlQ29uZmlnKHt9LCBjb25maWcpO1xuXG4gIC8vIFJlYWQgb25seSBvd24gcHJvcGVydGllcyB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb24gZ2FkZ2V0c1xuICAvLyAoZS5nLiBPYmplY3QucHJvdG90eXBlLmJhc2VVUkwgPSAnaHR0cHM6Ly9ldmlsLmNvbScpLlxuICBjb25zdCBvd24gPSAoa2V5KSA9PiAodXRpbHMuaGFzT3duUHJvcChuZXdDb25maWcsIGtleSkgPyBuZXdDb25maWdba2V5XSA6IHVuZGVmaW5lZCk7XG5cbiAgY29uc3QgZGF0YSA9IG93bignZGF0YScpO1xuICBsZXQgd2l0aFhTUkZUb2tlbiA9IG93bignd2l0aFhTUkZUb2tlbicpO1xuICBjb25zdCB4c3JmSGVhZGVyTmFtZSA9IG93bigneHNyZkhlYWRlck5hbWUnKTtcbiAgY29uc3QgeHNyZkNvb2tpZU5hbWUgPSBvd24oJ3hzcmZDb29raWVOYW1lJyk7XG4gIGxldCBoZWFkZXJzID0gb3duKCdoZWFkZXJzJyk7XG4gIGNvbnN0IGF1dGggPSBvd24oJ2F1dGgnKTtcbiAgY29uc3QgYmFzZVVSTCA9IG93bignYmFzZVVSTCcpO1xuICBjb25zdCBhbGxvd0Fic29sdXRlVXJscyA9IG93bignYWxsb3dBYnNvbHV0ZVVybHMnKTtcbiAgY29uc3QgdXJsID0gb3duKCd1cmwnKTtcblxuICBuZXdDb25maWcuaGVhZGVycyA9IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShoZWFkZXJzKTtcblxuICBuZXdDb25maWcudXJsID0gYnVpbGRVUkwoXG4gICAgYnVpbGRGdWxsUGF0aChiYXNlVVJMLCB1cmwsIGFsbG93QWJzb2x1dGVVcmxzKSxcbiAgICBjb25maWcucGFyYW1zLFxuICAgIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyXG4gICk7XG5cbiAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICBpZiAoYXV0aCkge1xuICAgIGhlYWRlcnMuc2V0KFxuICAgICAgJ0F1dGhvcml6YXRpb24nLFxuICAgICAgJ0Jhc2ljICcgK1xuICAgICAgICBidG9hKChhdXRoLnVzZXJuYW1lIHx8ICcnKSArICc6JyArIChhdXRoLnBhc3N3b3JkID8gZW5jb2RlVVRGOChhdXRoLnBhc3N3b3JkKSA6ICcnKSlcbiAgICApO1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkpIHtcbiAgICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52IHx8IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudikge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSh1bmRlZmluZWQpOyAvLyBicm93c2VyIGhhbmRsZXMgaXRcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzRnVuY3Rpb24oZGF0YS5nZXRIZWFkZXJzKSkge1xuICAgICAgLy8gTm9kZS5qcyBGb3JtRGF0YSAobGlrZSBmb3JtLWRhdGEgcGFja2FnZSlcbiAgICAgIHNldEZvcm1EYXRhSGVhZGVycyhoZWFkZXJzLCBkYXRhLmdldEhlYWRlcnMoKSwgb3duKCdmb3JtRGF0YUhlYWRlclBvbGljeScpKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG5cbiAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudikge1xuICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHdpdGhYU1JGVG9rZW4pKSB7XG4gICAgICB3aXRoWFNSRlRva2VuID0gd2l0aFhTUkZUb2tlbihuZXdDb25maWcpO1xuICAgIH1cblxuICAgIC8vIFN0cmljdCBib29sZWFuIGNoZWNrIOKAlCBwcmV2ZW50cyBwcm90by1wb2xsdXRpb24gZ2FkZ2V0cyAoZS5nLiBPYmplY3QucHJvdG90eXBlLndpdGhYU1JGVG9rZW4gPSAxKVxuICAgIC8vIGFuZCBtaXNjb25maWd1cmF0aW9ucyAoZS5nLiBcImZhbHNlXCIpIGZyb20gc2hvcnQtY2lyY3VpdGluZyB0aGUgc2FtZS1vcmlnaW4gY2hlY2sgYW5kIGxlYWtpbmdcbiAgICAvLyB0aGUgWFNSRiB0b2tlbiBjcm9zcy1vcmlnaW4uXG4gICAgY29uc3Qgc2hvdWxkU2VuZFhTUkYgPVxuICAgICAgd2l0aFhTUkZUb2tlbiA9PT0gdHJ1ZSB8fCAod2l0aFhTUkZUb2tlbiA9PSBudWxsICYmIGlzVVJMU2FtZU9yaWdpbihuZXdDb25maWcudXJsKSk7XG5cbiAgICBpZiAoc2hvdWxkU2VuZFhTUkYpIHtcbiAgICAgIGNvbnN0IHhzcmZWYWx1ZSA9IHhzcmZIZWFkZXJOYW1lICYmIHhzcmZDb29raWVOYW1lICYmIGNvb2tpZXMucmVhZCh4c3JmQ29va2llTmFtZSk7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgaGVhZGVycy5zZXQoeHNyZkhlYWRlck5hbWUsIHhzcmZWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0NvbmZpZztcbn07XG4iLCJpbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHNldHRsZSBmcm9tICcuLi9jb3JlL3NldHRsZS5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgcGFyc2VQcm90b2NvbCBmcm9tICcuLi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IHsgcHJvZ3Jlc3NFdmVudFJlZHVjZXIgfSBmcm9tICcuLi9oZWxwZXJzL3Byb2dyZXNzRXZlbnRSZWR1Y2VyLmpzJztcbmltcG9ydCByZXNvbHZlQ29uZmlnIGZyb20gJy4uL2hlbHBlcnMvcmVzb2x2ZUNvbmZpZy5qcyc7XG5pbXBvcnQgeyB0b0J5dGVTdHJpbmdIZWFkZXJPYmplY3QgfSBmcm9tICcuLi9oZWxwZXJzL3Nhbml0aXplSGVhZGVyVmFsdWUuanMnO1xuXG5jb25zdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnO1xuXG5leHBvcnQgZGVmYXVsdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiZcbiAgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBkaXNwYXRjaFhoclJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBjb25zdCBfY29uZmlnID0gcmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuICAgICAgbGV0IHJlcXVlc3REYXRhID0gX2NvbmZpZy5kYXRhO1xuICAgICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShfY29uZmlnLmhlYWRlcnMpLm5vcm1hbGl6ZSgpO1xuICAgICAgbGV0IHsgcmVzcG9uc2VUeXBlLCBvblVwbG9hZFByb2dyZXNzLCBvbkRvd25sb2FkUHJvZ3Jlc3MgfSA9IF9jb25maWc7XG4gICAgICBsZXQgb25DYW5jZWxlZDtcbiAgICAgIGxldCB1cGxvYWRUaHJvdHRsZWQsIGRvd25sb2FkVGhyb3R0bGVkO1xuICAgICAgbGV0IGZsdXNoVXBsb2FkLCBmbHVzaERvd25sb2FkO1xuXG4gICAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgICBmbHVzaFVwbG9hZCAmJiBmbHVzaFVwbG9hZCgpOyAvLyBmbHVzaCBldmVudHNcbiAgICAgICAgZmx1c2hEb3dubG9hZCAmJiBmbHVzaERvd25sb2FkKCk7IC8vIGZsdXNoIGV2ZW50c1xuXG4gICAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcblxuICAgICAgICBfY29uZmlnLnNpZ25hbCAmJiBfY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgICByZXF1ZXN0Lm9wZW4oX2NvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgX2NvbmZpZy51cmwsIHRydWUpO1xuXG4gICAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgICAgcmVxdWVzdC50aW1lb3V0ID0gX2NvbmZpZy50aW1lb3V0O1xuXG4gICAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShcbiAgICAgICAgICAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ICYmIHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID1cbiAgICAgICAgICAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nXG4gICAgICAgICAgICA/IHJlcXVlc3QucmVzcG9uc2VUZXh0XG4gICAgICAgICAgICA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgIH07XG5cbiAgICAgICAgc2V0dGxlKFxuICAgICAgICAgIGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJlxuICAgICAgICAgICAgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuc3RhcnRzV2l0aCgnZmlsZTonKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBjb25maWcsIHJlcXVlc3QpKTtcbiAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcihldmVudCkge1xuICAgICAgICAvLyBCcm93c2VycyBkZWxpdmVyIGEgUHJvZ3Jlc3NFdmVudCBpbiBYSFIgb25lcnJvclxuICAgICAgICAvLyAobWVzc2FnZSBtYXkgYmUgZW1wdHk7IHdoZW4gcHJlc2VudCwgc3VyZmFjZSBpdClcbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9YTUxIdHRwUmVxdWVzdC9lcnJvcl9ldmVudFxuICAgICAgICBjb25zdCBtc2cgPSBldmVudCAmJiBldmVudC5tZXNzYWdlID8gZXZlbnQubWVzc2FnZSA6ICdOZXR3b3JrIEVycm9yJztcbiAgICAgICAgY29uc3QgZXJyID0gbmV3IEF4aW9zRXJyb3IobXNnLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgICAvLyBhdHRhY2ggdGhlIHVuZGVybHlpbmcgZXZlbnQgZm9yIGNvbnN1bWVycyB3aG8gd2FudCBkZXRhaWxzXG4gICAgICAgIGVyci5ldmVudCA9IGV2ZW50IHx8IG51bGw7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgICAgbGV0IHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXRcbiAgICAgICAgICA/ICd0aW1lb3V0IG9mICcgKyBfY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnXG4gICAgICAgICAgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IF9jb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgICBpZiAoX2NvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoXG4gICAgICAgICAgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgcmVxdWVzdFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICByZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkICYmIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKG51bGwpO1xuXG4gICAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICAgIHV0aWxzLmZvckVhY2godG9CeXRlU3RyaW5nSGVhZGVyT2JqZWN0KHJlcXVlc3RIZWFkZXJzKSwgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKF9jb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhX2NvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBfY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgICAgaWYgKG9uRG93bmxvYWRQcm9ncmVzcykge1xuICAgICAgICBbZG93bmxvYWRUaHJvdHRsZWQsIGZsdXNoRG93bmxvYWRdID0gcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKTtcbiAgICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGRvd25sb2FkVGhyb3R0bGVkKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICAgIGlmIChvblVwbG9hZFByb2dyZXNzICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICAgIFt1cGxvYWRUaHJvdHRsZWQsIGZsdXNoVXBsb2FkXSA9IHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uVXBsb2FkUHJvZ3Jlc3MpO1xuXG4gICAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdXBsb2FkVGhyb3R0bGVkKTtcblxuICAgICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgZmx1c2hVcGxvYWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoX2NvbmZpZy5jYW5jZWxUb2tlbiB8fCBfY29uZmlnLnNpZ25hbCkge1xuICAgICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICAgIG9uQ2FuY2VsZWQgPSAoY2FuY2VsKSA9PiB7XG4gICAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlamVjdCghY2FuY2VsIHx8IGNhbmNlbC50eXBlID8gbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnLCByZXF1ZXN0KSA6IGNhbmNlbCk7XG4gICAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgfTtcblxuICAgICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgICBpZiAoX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgICBfY29uZmlnLnNpZ25hbC5hYm9ydGVkXG4gICAgICAgICAgICA/IG9uQ2FuY2VsZWQoKVxuICAgICAgICAgICAgOiBfY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VQcm90b2NvbChfY29uZmlnLnVybCk7XG5cbiAgICAgIGlmIChwcm90b2NvbCAmJiAhcGxhdGZvcm0ucHJvdG9jb2xzLmluY2x1ZGVzKHByb3RvY29sKSkge1xuICAgICAgICByZWplY3QoXG4gICAgICAgICAgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgICAnVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sICsgJzonLFxuICAgICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsXG4gICAgICAgICAgICBjb25maWdcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhIHx8IG51bGwpO1xuICAgIH0pO1xuICB9O1xuIiwiaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbmNvbnN0IGNvbXBvc2VTaWduYWxzID0gKHNpZ25hbHMsIHRpbWVvdXQpID0+IHtcbiAgc2lnbmFscyA9IHNpZ25hbHMgPyBzaWduYWxzLmZpbHRlcihCb29sZWFuKSA6IFtdO1xuXG4gIGlmICghdGltZW91dCAmJiAhc2lnbmFscy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIGxldCBhYm9ydGVkID0gZmFsc2U7XG5cbiAgY29uc3Qgb25hYm9ydCA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICBpZiAoIWFib3J0ZWQpIHtcbiAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgIGNvbnN0IGVyciA9IHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVhc29uIDogdGhpcy5yZWFzb247XG4gICAgICBjb250cm9sbGVyLmFib3J0KFxuICAgICAgICBlcnIgaW5zdGFuY2VvZiBBeGlvc0Vycm9yXG4gICAgICAgICAgPyBlcnJcbiAgICAgICAgICA6IG5ldyBDYW5jZWxlZEVycm9yKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBlcnIpXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBsZXQgdGltZXIgPVxuICAgIHRpbWVvdXQgJiZcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgIG9uYWJvcnQobmV3IEF4aW9zRXJyb3IoYHRpbWVvdXQgb2YgJHt0aW1lb3V0fW1zIGV4Y2VlZGVkYCwgQXhpb3NFcnJvci5FVElNRURPVVQpKTtcbiAgICB9LCB0aW1lb3V0KTtcblxuICBjb25zdCB1bnN1YnNjcmliZSA9ICgpID0+IHtcbiAgICBpZiAoIXNpZ25hbHMpIHsgcmV0dXJuOyB9XG4gICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICB0aW1lciA9IG51bGw7XG4gICAgc2lnbmFscy5mb3JFYWNoKChzaWduYWwpID0+IHtcbiAgICAgIHNpZ25hbC51bnN1YnNjcmliZVxuICAgICAgICA/IHNpZ25hbC51bnN1YnNjcmliZShvbmFib3J0KVxuICAgICAgICA6IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uYWJvcnQpO1xuICAgIH0pO1xuICAgIHNpZ25hbHMgPSBudWxsO1xuICB9O1xuXG4gIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KSk7XG5cbiAgY29uc3QgeyBzaWduYWwgfSA9IGNvbnRyb2xsZXI7XG5cbiAgc2lnbmFsLnVuc3Vic2NyaWJlID0gKCkgPT4gdXRpbHMuYXNhcCh1bnN1YnNjcmliZSk7XG5cbiAgcmV0dXJuIHNpZ25hbDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2VTaWduYWxzO1xuIiwiZXhwb3J0IGNvbnN0IHN0cmVhbUNodW5rID0gZnVuY3Rpb24qIChjaHVuaywgY2h1bmtTaXplKSB7XG4gIGxldCBsZW4gPSBjaHVuay5ieXRlTGVuZ3RoO1xuXG4gIGlmICghY2h1bmtTaXplIHx8IGxlbiA8IGNodW5rU2l6ZSkge1xuICAgIHlpZWxkIGNodW5rO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBwb3MgPSAwO1xuICBsZXQgZW5kO1xuXG4gIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICBlbmQgPSBwb3MgKyBjaHVua1NpemU7XG4gICAgeWllbGQgY2h1bmsuc2xpY2UocG9zLCBlbmQpO1xuICAgIHBvcyA9IGVuZDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJlYWRCeXRlcyA9IGFzeW5jIGZ1bmN0aW9uKiAoaXRlcmFibGUsIGNodW5rU2l6ZSkge1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHJlYWRTdHJlYW0oaXRlcmFibGUpKSB7XG4gICAgeWllbGQqIHN0cmVhbUNodW5rKGNodW5rLCBjaHVua1NpemUpO1xuICB9XG59O1xuXG5jb25zdCByZWFkU3RyZWFtID0gYXN5bmMgZnVuY3Rpb24qIChzdHJlYW0pIHtcbiAgaWYgKHN0cmVhbVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pIHtcbiAgICB5aWVsZCogc3RyZWFtO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgdHJ5IHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB5aWVsZCB2YWx1ZTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgcmVhZGVyLmNhbmNlbCgpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdHJhY2tTdHJlYW0gPSAoc3RyZWFtLCBjaHVua1NpemUsIG9uUHJvZ3Jlc3MsIG9uRmluaXNoKSA9PiB7XG4gIGNvbnN0IGl0ZXJhdG9yID0gcmVhZEJ5dGVzKHN0cmVhbSwgY2h1bmtTaXplKTtcblxuICBsZXQgYnl0ZXMgPSAwO1xuICBsZXQgZG9uZTtcbiAgbGV0IF9vbkZpbmlzaCA9IChlKSA9PiB7XG4gICAgaWYgKCFkb25lKSB7XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIG9uRmluaXNoICYmIG9uRmluaXNoKGUpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKFxuICAgIHtcbiAgICAgIGFzeW5jIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICBfb25GaW5pc2goKTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgbGVuID0gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAob25Qcm9ncmVzcykge1xuICAgICAgICAgICAgbGV0IGxvYWRlZEJ5dGVzID0gKGJ5dGVzICs9IGxlbik7XG4gICAgICAgICAgICBvblByb2dyZXNzKGxvYWRlZEJ5dGVzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIF9vbkZpbmlzaChlcnIpO1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNhbmNlbChyZWFzb24pIHtcbiAgICAgICAgX29uRmluaXNoKHJlYXNvbik7XG4gICAgICAgIHJldHVybiBpdGVyYXRvci5yZXR1cm4oKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBoaWdoV2F0ZXJNYXJrOiAyLFxuICAgIH1cbiAgKTtcbn07XG4iLCIvKipcbiAqIEVzdGltYXRlIGRlY29kZWQgYnl0ZSBsZW5ndGggb2YgYSBkYXRhOi8vIFVSTCAqd2l0aG91dCogYWxsb2NhdGluZyBsYXJnZSBidWZmZXJzLlxuICogLSBGb3IgYmFzZTY0OiBjb21wdXRlIGV4YWN0IGRlY29kZWQgc2l6ZSB1c2luZyBsZW5ndGggYW5kIHBhZGRpbmc7XG4gKiAgICAgICAgICAgICAgIGhhbmRsZSAlWFggYXQgdGhlIGNoYXJhY3Rlci1jb3VudCBsZXZlbCAobm8gc3RyaW5nIGFsbG9jYXRpb24pLlxuICogLSBGb3Igbm9uLWJhc2U2NDogdXNlIFVURi04IGJ5dGVMZW5ndGggb2YgdGhlIGVuY29kZWQgYm9keSBhcyBhIHNhZmUgdXBwZXIgYm91bmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXN0aW1hdGVEYXRhVVJMRGVjb2RlZEJ5dGVzKHVybCkge1xuICBpZiAoIXVybCB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykgcmV0dXJuIDA7XG4gIGlmICghdXJsLnN0YXJ0c1dpdGgoJ2RhdGE6JykpIHJldHVybiAwO1xuXG4gIGNvbnN0IGNvbW1hID0gdXJsLmluZGV4T2YoJywnKTtcbiAgaWYgKGNvbW1hIDwgMCkgcmV0dXJuIDA7XG5cbiAgY29uc3QgbWV0YSA9IHVybC5zbGljZSg1LCBjb21tYSk7XG4gIGNvbnN0IGJvZHkgPSB1cmwuc2xpY2UoY29tbWEgKyAxKTtcbiAgY29uc3QgaXNCYXNlNjQgPSAvO2Jhc2U2NC9pLnRlc3QobWV0YSk7XG5cbiAgaWYgKGlzQmFzZTY0KSB7XG4gICAgbGV0IGVmZmVjdGl2ZUxlbiA9IGJvZHkubGVuZ3RoO1xuICAgIGNvbnN0IGxlbiA9IGJvZHkubGVuZ3RoOyAvLyBjYWNoZSBsZW5ndGhcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChib2R5LmNoYXJDb2RlQXQoaSkgPT09IDM3IC8qICclJyAqLyAmJiBpICsgMiA8IGxlbikge1xuICAgICAgICBjb25zdCBhID0gYm9keS5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgICAgICAgY29uc3QgYiA9IGJvZHkuY2hhckNvZGVBdChpICsgMik7XG4gICAgICAgIGNvbnN0IGlzSGV4ID1cbiAgICAgICAgICAoKGEgPj0gNDggJiYgYSA8PSA1NykgfHwgKGEgPj0gNjUgJiYgYSA8PSA3MCkgfHwgKGEgPj0gOTcgJiYgYSA8PSAxMDIpKSAmJlxuICAgICAgICAgICgoYiA+PSA0OCAmJiBiIDw9IDU3KSB8fCAoYiA+PSA2NSAmJiBiIDw9IDcwKSB8fCAoYiA+PSA5NyAmJiBiIDw9IDEwMikpO1xuXG4gICAgICAgIGlmIChpc0hleCkge1xuICAgICAgICAgIGVmZmVjdGl2ZUxlbiAtPSAyO1xuICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwYWQgPSAwO1xuICAgIGxldCBpZHggPSBsZW4gLSAxO1xuXG4gICAgY29uc3QgdGFpbElzUGN0M0QgPSAoaikgPT5cbiAgICAgIGogPj0gMiAmJlxuICAgICAgYm9keS5jaGFyQ29kZUF0KGogLSAyKSA9PT0gMzcgJiYgLy8gJyUnXG4gICAgICBib2R5LmNoYXJDb2RlQXQoaiAtIDEpID09PSA1MSAmJiAvLyAnMydcbiAgICAgIChib2R5LmNoYXJDb2RlQXQoaikgPT09IDY4IHx8IGJvZHkuY2hhckNvZGVBdChqKSA9PT0gMTAwKTsgLy8gJ0QnIG9yICdkJ1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBpZiAoYm9keS5jaGFyQ29kZUF0KGlkeCkgPT09IDYxIC8qICc9JyAqLykge1xuICAgICAgICBwYWQrKztcbiAgICAgICAgaWR4LS07XG4gICAgICB9IGVsc2UgaWYgKHRhaWxJc1BjdDNEKGlkeCkpIHtcbiAgICAgICAgcGFkKys7XG4gICAgICAgIGlkeCAtPSAzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYWQgPT09IDEgJiYgaWR4ID49IDApIHtcbiAgICAgIGlmIChib2R5LmNoYXJDb2RlQXQoaWR4KSA9PT0gNjEgLyogJz0nICovKSB7XG4gICAgICAgIHBhZCsrO1xuICAgICAgfSBlbHNlIGlmICh0YWlsSXNQY3QzRChpZHgpKSB7XG4gICAgICAgIHBhZCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGdyb3VwcyA9IE1hdGguZmxvb3IoZWZmZWN0aXZlTGVuIC8gNCk7XG4gICAgY29uc3QgYnl0ZXMgPSBncm91cHMgKiAzIC0gKHBhZCB8fCAwKTtcbiAgICByZXR1cm4gYnl0ZXMgPiAwID8gYnl0ZXMgOiAwO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBCdWZmZXIuYnl0ZUxlbmd0aCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBCdWZmZXIuYnl0ZUxlbmd0aChib2R5LCAndXRmOCcpO1xuICB9XG5cbiAgLy8gQ29tcHV0ZSBVVEYtOCBieXRlIGxlbmd0aCBkaXJlY3RseSBmcm9tIFVURi0xNiBjb2RlIHVuaXRzIHdpdGhvdXQgYWxsb2NhdGluZ1xuICAvLyBhIGJ5dGUgYnVmZmVyIChUZXh0RW5jb2Rlci5lbmNvZGUgd291bGQgZGVmZWF0IHRoZSBEb1MgZ3VhcmQgb24gbGFyZ2UgYm9kaWVzKS5cbiAgLy8gVXNpbmcgYm9keS5sZW5ndGggaGVyZSB3b3VsZCB1bmRlcmNvdW50IG5vbi1BU0NJSSAoZS5nLiAn4oKsJyBpcyAxIGNvZGUgdW5pdFxuICAvLyBidXQgMyBVVEYtOCBieXRlcykuXG4gIGxldCBieXRlcyA9IDA7XG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBib2R5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgY29uc3QgYyA9IGJvZHkuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoYyA8IDB4ODApIHtcbiAgICAgIGJ5dGVzICs9IDE7XG4gICAgfSBlbHNlIGlmIChjIDwgMHg4MDApIHtcbiAgICAgIGJ5dGVzICs9IDI7XG4gICAgfSBlbHNlIGlmIChjID49IDB4ZDgwMCAmJiBjIDw9IDB4ZGJmZiAmJiBpICsgMSA8IGxlbikge1xuICAgICAgY29uc3QgbmV4dCA9IGJvZHkuY2hhckNvZGVBdChpICsgMSk7XG4gICAgICBpZiAobmV4dCA+PSAweGRjMDAgJiYgbmV4dCA8PSAweGRmZmYpIHtcbiAgICAgICAgYnl0ZXMgKz0gNDtcbiAgICAgICAgaSsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnl0ZXMgKz0gMztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYnl0ZXMgKz0gMztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJ5dGVzO1xufVxuIiwiZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIjEuMTYuMVwiOyIsImltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBjb21wb3NlU2lnbmFscyBmcm9tICcuLi9oZWxwZXJzL2NvbXBvc2VTaWduYWxzLmpzJztcbmltcG9ydCB7IHRyYWNrU3RyZWFtIH0gZnJvbSAnLi4vaGVscGVycy90cmFja1N0cmVhbS5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCB7XG4gIHByb2dyZXNzRXZlbnRSZWR1Y2VyLFxuICBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yLFxuICBhc3luY0RlY29yYXRvcixcbn0gZnJvbSAnLi4vaGVscGVycy9wcm9ncmVzc0V2ZW50UmVkdWNlci5qcyc7XG5pbXBvcnQgcmVzb2x2ZUNvbmZpZyBmcm9tICcuLi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanMnO1xuaW1wb3J0IHNldHRsZSBmcm9tICcuLi9jb3JlL3NldHRsZS5qcyc7XG5pbXBvcnQgZXN0aW1hdGVEYXRhVVJMRGVjb2RlZEJ5dGVzIGZyb20gJy4uL2hlbHBlcnMvZXN0aW1hdGVEYXRhVVJMRGVjb2RlZEJ5dGVzLmpzJztcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tICcuLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgeyB0b0J5dGVTdHJpbmdIZWFkZXJPYmplY3QgfSBmcm9tICcuLi9oZWxwZXJzL3Nhbml0aXplSGVhZGVyVmFsdWUuanMnO1xuXG5jb25zdCBERUZBVUxUX0NIVU5LX1NJWkUgPSA2NCAqIDEwMjQ7XG5cbmNvbnN0IHsgaXNGdW5jdGlvbiB9ID0gdXRpbHM7XG5cbmNvbnN0IHRlc3QgPSAoZm4sIC4uLmFyZ3MpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFmbiguLi5hcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29uc3QgZmFjdG9yeSA9IChlbnYpID0+IHtcbiAgY29uc3QgZ2xvYmFsT2JqZWN0ID1cbiAgICB1dGlscy5nbG9iYWwgIT09IHVuZGVmaW5lZCAmJiB1dGlscy5nbG9iYWwgIT09IG51bGxcbiAgICAgID8gdXRpbHMuZ2xvYmFsXG4gICAgICA6IGdsb2JhbFRoaXM7XG4gIGNvbnN0IHsgUmVhZGFibGVTdHJlYW0sIFRleHRFbmNvZGVyIH0gPSBnbG9iYWxPYmplY3Q7XG5cbiAgZW52ID0gdXRpbHMubWVyZ2UuY2FsbChcbiAgICB7XG4gICAgICBza2lwVW5kZWZpbmVkOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgUmVxdWVzdDogZ2xvYmFsT2JqZWN0LlJlcXVlc3QsXG4gICAgICBSZXNwb25zZTogZ2xvYmFsT2JqZWN0LlJlc3BvbnNlLFxuICAgIH0sXG4gICAgZW52XG4gICk7XG5cbiAgY29uc3QgeyBmZXRjaDogZW52RmV0Y2gsIFJlcXVlc3QsIFJlc3BvbnNlIH0gPSBlbnY7XG4gIGNvbnN0IGlzRmV0Y2hTdXBwb3J0ZWQgPSBlbnZGZXRjaCA/IGlzRnVuY3Rpb24oZW52RmV0Y2gpIDogdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nO1xuICBjb25zdCBpc1JlcXVlc3RTdXBwb3J0ZWQgPSBpc0Z1bmN0aW9uKFJlcXVlc3QpO1xuICBjb25zdCBpc1Jlc3BvbnNlU3VwcG9ydGVkID0gaXNGdW5jdGlvbihSZXNwb25zZSk7XG5cbiAgaWYgKCFpc0ZldGNoU3VwcG9ydGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgaXNGdW5jdGlvbihSZWFkYWJsZVN0cmVhbSk7XG5cbiAgY29uc3QgZW5jb2RlVGV4dCA9XG4gICAgaXNGZXRjaFN1cHBvcnRlZCAmJlxuICAgICh0eXBlb2YgVGV4dEVuY29kZXIgPT09ICdmdW5jdGlvbidcbiAgICAgID8gKFxuICAgICAgICAgIChlbmNvZGVyKSA9PiAoc3RyKSA9PlxuICAgICAgICAgICAgZW5jb2Rlci5lbmNvZGUoc3RyKVxuICAgICAgICApKG5ldyBUZXh0RW5jb2RlcigpKVxuICAgICAgOiBhc3luYyAoc3RyKSA9PiBuZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVxdWVzdChzdHIpLmFycmF5QnVmZmVyKCkpKTtcblxuICBjb25zdCBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gPVxuICAgIGlzUmVxdWVzdFN1cHBvcnRlZCAmJlxuICAgIGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiZcbiAgICB0ZXN0KCgpID0+IHtcbiAgICAgIGxldCBkdXBsZXhBY2Nlc3NlZCA9IGZhbHNlO1xuXG4gICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QocGxhdGZvcm0ub3JpZ2luLCB7XG4gICAgICAgIGJvZHk6IG5ldyBSZWFkYWJsZVN0cmVhbSgpLFxuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgZ2V0IGR1cGxleCgpIHtcbiAgICAgICAgICBkdXBsZXhBY2Nlc3NlZCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuICdoYWxmJztcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBoYXNDb250ZW50VHlwZSA9IHJlcXVlc3QuaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpO1xuXG4gICAgICBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwpIHtcbiAgICAgICAgcmVxdWVzdC5ib2R5LmNhbmNlbCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZHVwbGV4QWNjZXNzZWQgJiYgIWhhc0NvbnRlbnRUeXBlO1xuICAgIH0pO1xuXG4gIGNvbnN0IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gPVxuICAgIGlzUmVzcG9uc2VTdXBwb3J0ZWQgJiZcbiAgICBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmXG4gICAgdGVzdCgoKSA9PiB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgnJykuYm9keSkpO1xuXG4gIGNvbnN0IHJlc29sdmVycyA9IHtcbiAgICBzdHJlYW06IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKChyZXMpID0+IHJlcy5ib2R5KSxcbiAgfTtcblxuICBpc0ZldGNoU3VwcG9ydGVkICYmXG4gICAgKCgpID0+IHtcbiAgICAgIFsndGV4dCcsICdhcnJheUJ1ZmZlcicsICdibG9iJywgJ2Zvcm1EYXRhJywgJ3N0cmVhbSddLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgICAgIXJlc29sdmVyc1t0eXBlXSAmJlxuICAgICAgICAgIChyZXNvbHZlcnNbdHlwZV0gPSAocmVzLCBjb25maWcpID0+IHtcbiAgICAgICAgICAgIGxldCBtZXRob2QgPSByZXMgJiYgcmVzW3R5cGVdO1xuXG4gICAgICAgICAgICBpZiAobWV0aG9kKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtZXRob2QuY2FsbChyZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICAgYFJlc3BvbnNlIHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBzdXBwb3J0ZWRgLFxuICAgICAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCxcbiAgICAgICAgICAgICAgY29uZmlnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSkoKTtcblxuICBjb25zdCBnZXRCb2R5TGVuZ3RoID0gYXN5bmMgKGJvZHkpID0+IHtcbiAgICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNCbG9iKGJvZHkpKSB7XG4gICAgICByZXR1cm4gYm9keS5zaXplO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc1NwZWNDb21wbGlhbnRGb3JtKGJvZHkpKSB7XG4gICAgICBjb25zdCBfcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHBsYXRmb3JtLm9yaWdpbiwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIChhd2FpdCBfcmVxdWVzdC5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhib2R5KSB8fCB1dGlscy5pc0FycmF5QnVmZmVyKGJvZHkpKSB7XG4gICAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhib2R5KSkge1xuICAgICAgYm9keSA9IGJvZHkgKyAnJztcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNTdHJpbmcoYm9keSkpIHtcbiAgICAgIHJldHVybiAoYXdhaXQgZW5jb2RlVGV4dChib2R5KSkuYnl0ZUxlbmd0aDtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVzb2x2ZUJvZHlMZW5ndGggPSBhc3luYyAoaGVhZGVycywgYm9keSkgPT4ge1xuICAgIGNvbnN0IGxlbmd0aCA9IHV0aWxzLnRvRmluaXRlTnVtYmVyKGhlYWRlcnMuZ2V0Q29udGVudExlbmd0aCgpKTtcblxuICAgIHJldHVybiBsZW5ndGggPT0gbnVsbCA/IGdldEJvZHlMZW5ndGgoYm9keSkgOiBsZW5ndGg7XG4gIH07XG5cbiAgcmV0dXJuIGFzeW5jIChjb25maWcpID0+IHtcbiAgICBsZXQge1xuICAgICAgdXJsLFxuICAgICAgbWV0aG9kLFxuICAgICAgZGF0YSxcbiAgICAgIHNpZ25hbCxcbiAgICAgIGNhbmNlbFRva2VuLFxuICAgICAgdGltZW91dCxcbiAgICAgIG9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICAgIG9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgICByZXNwb25zZVR5cGUsXG4gICAgICBoZWFkZXJzLFxuICAgICAgd2l0aENyZWRlbnRpYWxzID0gJ3NhbWUtb3JpZ2luJyxcbiAgICAgIGZldGNoT3B0aW9ucyxcbiAgICAgIG1heENvbnRlbnRMZW5ndGgsXG4gICAgICBtYXhCb2R5TGVuZ3RoLFxuICAgIH0gPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG5cbiAgICBjb25zdCBoYXNNYXhDb250ZW50TGVuZ3RoID0gdXRpbHMuaXNOdW1iZXIobWF4Q29udGVudExlbmd0aCkgJiYgbWF4Q29udGVudExlbmd0aCA+IC0xO1xuICAgIGNvbnN0IGhhc01heEJvZHlMZW5ndGggPSB1dGlscy5pc051bWJlcihtYXhCb2R5TGVuZ3RoKSAmJiBtYXhCb2R5TGVuZ3RoID4gLTE7XG5cbiAgICBsZXQgX2ZldGNoID0gZW52RmV0Y2ggfHwgZmV0Y2g7XG5cbiAgICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgPyAocmVzcG9uc2VUeXBlICsgJycpLnRvTG93ZXJDYXNlKCkgOiAndGV4dCc7XG5cbiAgICBsZXQgY29tcG9zZWRTaWduYWwgPSBjb21wb3NlU2lnbmFscyhcbiAgICAgIFtzaWduYWwsIGNhbmNlbFRva2VuICYmIGNhbmNlbFRva2VuLnRvQWJvcnRTaWduYWwoKV0sXG4gICAgICB0aW1lb3V0XG4gICAgKTtcblxuICAgIGxldCByZXF1ZXN0ID0gbnVsbDtcblxuICAgIGNvbnN0IHVuc3Vic2NyaWJlID1cbiAgICAgIGNvbXBvc2VkU2lnbmFsICYmXG4gICAgICBjb21wb3NlZFNpZ25hbC51bnN1YnNjcmliZSAmJlxuICAgICAgKCgpID0+IHtcbiAgICAgICAgY29tcG9zZWRTaWduYWwudW5zdWJzY3JpYmUoKTtcbiAgICAgIH0pO1xuXG4gICAgbGV0IHJlcXVlc3RDb250ZW50TGVuZ3RoO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEVuZm9yY2UgbWF4Q29udGVudExlbmd0aCBmb3IgZGF0YTogVVJMcyB1cC1mcm9udCBzbyB3ZSBuZXZlciBtYXRlcmlhbGl6ZVxuICAgICAgLy8gYW4gb3ZlcnNpemVkIHBheWxvYWQuIFRoZSBIVFRQIGFkYXB0ZXIgYXBwbGllcyB0aGUgc2FtZSBjaGVjayAoc2VlIGh0dHAuanNcbiAgICAgIC8vIFwiaWYgKHByb3RvY29sID09PSAnZGF0YTonKVwiIGJyYW5jaCkuXG4gICAgICBpZiAoaGFzTWF4Q29udGVudExlbmd0aCAmJiB0eXBlb2YgdXJsID09PSAnc3RyaW5nJyAmJiB1cmwuc3RhcnRzV2l0aCgnZGF0YTonKSkge1xuICAgICAgICBjb25zdCBlc3RpbWF0ZWQgPSBlc3RpbWF0ZURhdGFVUkxEZWNvZGVkQnl0ZXModXJsKTtcbiAgICAgICAgaWYgKGVzdGltYXRlZCA+IG1heENvbnRlbnRMZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIG1heENvbnRlbnRMZW5ndGggKyAnIGV4Y2VlZGVkJyxcbiAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHJlcXVlc3RcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEVuZm9yY2UgbWF4Qm9keUxlbmd0aCBhZ2FpbnN0IHRoZSBvdXRib3VuZCByZXF1ZXN0IGJvZHkgYmVmb3JlIGRpc3BhdGNoLlxuICAgICAgLy8gTWlycm9ycyBodHRwLmpzIGJlaGF2aW9yIChFUlJfQkFEX1JFUVVFU1QgLyAnUmVxdWVzdCBib2R5IGxhcmdlciB0aGFuXG4gICAgICAvLyBtYXhCb2R5TGVuZ3RoIGxpbWl0JykuIFNraXAgd2hlbiB0aGUgYm9keSBsZW5ndGggY2Fubm90IGJlIGRldGVybWluZWRcbiAgICAgIC8vIChlLmcuIGEgbGl2ZSBSZWFkYWJsZVN0cmVhbSBzdXBwbGllZCBieSB0aGUgY2FsbGVyKS5cbiAgICAgIGlmIChoYXNNYXhCb2R5TGVuZ3RoICYmIG1ldGhvZCAhPT0gJ2dldCcgJiYgbWV0aG9kICE9PSAnaGVhZCcpIHtcbiAgICAgICAgY29uc3Qgb3V0Ym91bmRMZW5ndGggPSBhd2FpdCByZXNvbHZlQm9keUxlbmd0aChoZWFkZXJzLCBkYXRhKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBvdXRib3VuZExlbmd0aCA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICBpc0Zpbml0ZShvdXRib3VuZExlbmd0aCkgJiZcbiAgICAgICAgICBvdXRib3VuZExlbmd0aCA+IG1heEJvZHlMZW5ndGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgICAnUmVxdWVzdCBib2R5IGxhcmdlciB0aGFuIG1heEJvZHlMZW5ndGggbGltaXQnLFxuICAgICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICByZXF1ZXN0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3MgJiZcbiAgICAgICAgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtICYmXG4gICAgICAgIG1ldGhvZCAhPT0gJ2dldCcgJiZcbiAgICAgICAgbWV0aG9kICE9PSAnaGVhZCcgJiZcbiAgICAgICAgKHJlcXVlc3RDb250ZW50TGVuZ3RoID0gYXdhaXQgcmVzb2x2ZUJvZHlMZW5ndGgoaGVhZGVycywgZGF0YSkpICE9PSAwXG4gICAgICApIHtcbiAgICAgICAgbGV0IF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZGF0YSxcbiAgICAgICAgICBkdXBsZXg6ICdoYWxmJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IGNvbnRlbnRUeXBlSGVhZGVyO1xuXG4gICAgICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpICYmIChjb250ZW50VHlwZUhlYWRlciA9IF9yZXF1ZXN0LmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkpIHtcbiAgICAgICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlSGVhZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfcmVxdWVzdC5ib2R5KSB7XG4gICAgICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgICByZXF1ZXN0Q29udGVudExlbmd0aCxcbiAgICAgICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGFzeW5jRGVjb3JhdG9yKG9uVXBsb2FkUHJvZ3Jlc3MpKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBkYXRhID0gdHJhY2tTdHJlYW0oX3JlcXVlc3QuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvblByb2dyZXNzLCBmbHVzaCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF1dGlscy5pc1N0cmluZyh3aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICAgIHdpdGhDcmVkZW50aWFscyA9IHdpdGhDcmVkZW50aWFscyA/ICdpbmNsdWRlJyA6ICdvbWl0JztcbiAgICAgIH1cblxuICAgICAgLy8gQ2xvdWRmbGFyZSBXb3JrZXJzIHRocm93cyB3aGVuIGNyZWRlbnRpYWxzIGFyZSBkZWZpbmVkXG4gICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nsb3VkZmxhcmUvd29ya2VyZC9pc3N1ZXMvOTAyXG4gICAgICBjb25zdCBpc0NyZWRlbnRpYWxzU3VwcG9ydGVkID0gaXNSZXF1ZXN0U3VwcG9ydGVkICYmICdjcmVkZW50aWFscycgaW4gUmVxdWVzdC5wcm90b3R5cGU7XG5cbiAgICAgIC8vIElmIGRhdGEgaXMgRm9ybURhdGEgYW5kIENvbnRlbnQtVHlwZSBpcyBtdWx0aXBhcnQvZm9ybS1kYXRhIHdpdGhvdXQgYm91bmRhcnksXG4gICAgICAvLyBkZWxldGUgaXQgc28gZmV0Y2ggY2FuIHNldCBpdCBjb3JyZWN0bHkgd2l0aCB0aGUgYm91bmRhcnlcbiAgICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY29udGVudFR5cGUgJiZcbiAgICAgICAgICAvXm11bHRpcGFydFxcL2Zvcm0tZGF0YS9pLnRlc3QoY29udGVudFR5cGUpICYmXG4gICAgICAgICAgIS9ib3VuZGFyeT0vaS50ZXN0KGNvbnRlbnRUeXBlKVxuICAgICAgICApIHtcbiAgICAgICAgICBoZWFkZXJzLmRlbGV0ZSgnY29udGVudC10eXBlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2V0IFVzZXItQWdlbnQgaGVhZGVyIGlmIG5vdCBhbHJlYWR5IHNldCAoZmV0Y2ggZGVmYXVsdHMgdG8gJ25vZGUnIGluIE5vZGUuanMpXG4gICAgICBoZWFkZXJzLnNldCgnVXNlci1BZ2VudCcsICdheGlvcy8nICsgVkVSU0lPTiwgZmFsc2UpO1xuXG4gICAgICBjb25zdCByZXNvbHZlZE9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmZldGNoT3B0aW9ucyxcbiAgICAgICAgc2lnbmFsOiBjb21wb3NlZFNpZ25hbCxcbiAgICAgICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgICAgaGVhZGVyczogdG9CeXRlU3RyaW5nSGVhZGVyT2JqZWN0KGhlYWRlcnMubm9ybWFsaXplKCkpLFxuICAgICAgICBib2R5OiBkYXRhLFxuICAgICAgICBkdXBsZXg6ICdoYWxmJyxcbiAgICAgICAgY3JlZGVudGlhbHM6IGlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQgPyB3aXRoQ3JlZGVudGlhbHMgOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICByZXF1ZXN0ID0gaXNSZXF1ZXN0U3VwcG9ydGVkICYmIG5ldyBSZXF1ZXN0KHVybCwgcmVzb2x2ZWRPcHRpb25zKTtcblxuICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgKGlzUmVxdWVzdFN1cHBvcnRlZFxuICAgICAgICA/IF9mZXRjaChyZXF1ZXN0LCBmZXRjaE9wdGlvbnMpXG4gICAgICAgIDogX2ZldGNoKHVybCwgcmVzb2x2ZWRPcHRpb25zKSk7XG5cbiAgICAgIC8vIENoZWFwIHByZS1jaGVjazogaWYgdGhlIHNlcnZlciBob25lc3RseSBkZWNsYXJlcyBhIGNvbnRlbnQtbGVuZ3RoIHRoYXRcbiAgICAgIC8vIGFscmVhZHkgZXhjZWVkcyB0aGUgY2FwLCByZWplY3QgYmVmb3JlIHdlIHN0YXJ0IHN0cmVhbWluZy5cbiAgICAgIGlmIChoYXNNYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGRlY2xhcmVkTGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykpO1xuICAgICAgICBpZiAoZGVjbGFyZWRMZW5ndGggIT0gbnVsbCAmJiBkZWNsYXJlZExlbmd0aCA+IG1heENvbnRlbnRMZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIG1heENvbnRlbnRMZW5ndGggKyAnIGV4Y2VlZGVkJyxcbiAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHJlcXVlc3RcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzU3RyZWFtUmVzcG9uc2UgPVxuICAgICAgICBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChyZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3Jlc3BvbnNlJyk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJlxuICAgICAgICByZXNwb25zZS5ib2R5ICYmXG4gICAgICAgIChvbkRvd25sb2FkUHJvZ3Jlc3MgfHwgaGFzTWF4Q29udGVudExlbmd0aCB8fCAoaXNTdHJlYW1SZXNwb25zZSAmJiB1bnN1YnNjcmliZSkpXG4gICAgICApIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuXG4gICAgICAgIFsnc3RhdHVzJywgJ3N0YXR1c1RleHQnLCAnaGVhZGVycyddLmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgICAgICBvcHRpb25zW3Byb3BdID0gcmVzcG9uc2VbcHJvcF07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQ29udGVudExlbmd0aCA9IHV0aWxzLnRvRmluaXRlTnVtYmVyKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LWxlbmd0aCcpKTtcblxuICAgICAgICBjb25zdCBbb25Qcm9ncmVzcywgZmx1c2hdID1cbiAgICAgICAgICAob25Eb3dubG9hZFByb2dyZXNzICYmXG4gICAgICAgICAgICBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yKFxuICAgICAgICAgICAgICByZXNwb25zZUNvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGFzeW5jRGVjb3JhdG9yKG9uRG93bmxvYWRQcm9ncmVzcyksIHRydWUpXG4gICAgICAgICAgICApKSB8fFxuICAgICAgICAgIFtdO1xuXG4gICAgICAgIGxldCBieXRlc1JlYWQgPSAwO1xuICAgICAgICBjb25zdCBvbkNodW5rUHJvZ3Jlc3MgPSAobG9hZGVkQnl0ZXMpID0+IHtcbiAgICAgICAgICBpZiAoaGFzTWF4Q29udGVudExlbmd0aCkge1xuICAgICAgICAgICAgYnl0ZXNSZWFkID0gbG9hZGVkQnl0ZXM7XG4gICAgICAgICAgICBpZiAoYnl0ZXNSZWFkID4gbWF4Q29udGVudExlbmd0aCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICAgICAnbWF4Q29udGVudExlbmd0aCBzaXplIG9mICcgKyBtYXhDb250ZW50TGVuZ3RoICsgJyBleGNlZWRlZCcsXG4gICAgICAgICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLFxuICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICByZXF1ZXN0XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIG9uUHJvZ3Jlc3MgJiYgb25Qcm9ncmVzcyhsb2FkZWRCeXRlcyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoXG4gICAgICAgICAgdHJhY2tTdHJlYW0ocmVzcG9uc2UuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvbkNodW5rUHJvZ3Jlc3MsICgpID0+IHtcbiAgICAgICAgICAgIGZsdXNoICYmIGZsdXNoKCk7XG4gICAgICAgICAgICB1bnN1YnNjcmliZSAmJiB1bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlIHx8ICd0ZXh0JztcblxuICAgICAgbGV0IHJlc3BvbnNlRGF0YSA9IGF3YWl0IHJlc29sdmVyc1t1dGlscy5maW5kS2V5KHJlc29sdmVycywgcmVzcG9uc2VUeXBlKSB8fCAndGV4dCddKFxuICAgICAgICByZXNwb25zZSxcbiAgICAgICAgY29uZmlnXG4gICAgICApO1xuXG4gICAgICAvLyBGYWxsYmFjayBlbmZvcmNlbWVudCBmb3IgZW52aXJvbm1lbnRzIHdpdGhvdXQgUmVhZGFibGVTdHJlYW0gc3VwcG9ydFxuICAgICAgLy8gKGxlZ2FjeSBydW50aW1lcykuIERldGVjdCBtYXRlcmlhbGl6ZWQgc2l6ZSBmcm9tIHR5cGVkIG91dHB1dDsgc2tpcFxuICAgICAgLy8gc3RyZWFtcy9SZXNwb25zZSBwYXNzdGhyb3VnaCBzaW5jZSB0aGUgdXNlciB3aWxsIHJlYWQgdGhvc2UgdGhlbXNlbHZlcy5cbiAgICAgIGlmIChoYXNNYXhDb250ZW50TGVuZ3RoICYmICFzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmICFpc1N0cmVhbVJlc3BvbnNlKSB7XG4gICAgICAgIGxldCBtYXRlcmlhbGl6ZWRTaXplO1xuICAgICAgICBpZiAocmVzcG9uc2VEYXRhICE9IG51bGwpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlc3BvbnNlRGF0YS5ieXRlTGVuZ3RoID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgbWF0ZXJpYWxpemVkU2l6ZSA9IHJlc3BvbnNlRGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlc3BvbnNlRGF0YS5zaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgbWF0ZXJpYWxpemVkU2l6ZSA9IHJlc3BvbnNlRGF0YS5zaXplO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlc3BvbnNlRGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG1hdGVyaWFsaXplZFNpemUgPVxuICAgICAgICAgICAgICB0eXBlb2YgVGV4dEVuY29kZXIgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICA/IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShyZXNwb25zZURhdGEpLmJ5dGVMZW5ndGhcbiAgICAgICAgICAgICAgICA6IHJlc3BvbnNlRGF0YS5sZW5ndGg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbWF0ZXJpYWxpemVkU2l6ZSA9PT0gJ251bWJlcicgJiYgbWF0ZXJpYWxpemVkU2l6ZSA+IG1heENvbnRlbnRMZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIG1heENvbnRlbnRMZW5ndGggKyAnIGV4Y2VlZGVkJyxcbiAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHJlcXVlc3RcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICFpc1N0cmVhbVJlc3BvbnNlICYmIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG5cbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHtcbiAgICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgICAgaGVhZGVyczogQXhpb3NIZWFkZXJzLmZyb20ocmVzcG9uc2UuaGVhZGVycyksXG4gICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG5cbiAgICAgIC8vIFNhZmFyaSBjYW4gc3VyZmFjZSBmZXRjaCBhYm9ydHMgYXMgYSBET01FeGNlcHRpb24tbGlrZSBvYmplY3Qgd2hvc2VcbiAgICAgIC8vIGJyYW5kZWQgZ2V0dGVycyB0aHJvdy4gUHJlZmVyIG91ciBjb21wb3NlZCBzaWduYWwgcmVhc29uIGJlZm9yZSByZWFkaW5nXG4gICAgICAvLyB0aGUgY2F1Z2h0IGVycm9yLCBwcmVzZXJ2aW5nIHRpbWVvdXQgdnMgY2FuY2VsbGF0aW9uIHNlbWFudGljcy5cbiAgICAgIGlmIChjb21wb3NlZFNpZ25hbCAmJiBjb21wb3NlZFNpZ25hbC5hYm9ydGVkICYmIGNvbXBvc2VkU2lnbmFsLnJlYXNvbiBpbnN0YW5jZW9mIEF4aW9zRXJyb3IpIHtcbiAgICAgICAgY29uc3QgY2FuY2VsZWRFcnJvciA9IGNvbXBvc2VkU2lnbmFsLnJlYXNvbjtcbiAgICAgICAgY2FuY2VsZWRFcnJvci5jb25maWcgPSBjb25maWc7XG4gICAgICAgIHJlcXVlc3QgJiYgKGNhbmNlbGVkRXJyb3IucmVxdWVzdCA9IHJlcXVlc3QpO1xuICAgICAgICBlcnIgIT09IGNhbmNlbGVkRXJyb3IgJiYgKGNhbmNlbGVkRXJyb3IuY2F1c2UgPSBlcnIpO1xuICAgICAgICB0aHJvdyBjYW5jZWxlZEVycm9yO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXJyICYmIGVyci5uYW1lID09PSAnVHlwZUVycm9yJyAmJiAvTG9hZCBmYWlsZWR8ZmV0Y2gvaS50ZXN0KGVyci5tZXNzYWdlKSkge1xuICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgJ05ldHdvcmsgRXJyb3InLFxuICAgICAgICAgICAgQXhpb3NFcnJvci5FUlJfTkVUV09SSyxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICBlcnIgJiYgZXJyLnJlc3BvbnNlXG4gICAgICAgICAgKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjYXVzZTogZXJyLmNhdXNlIHx8IGVycixcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlcnIsIGVyciAmJiBlcnIuY29kZSwgY29uZmlnLCByZXF1ZXN0LCBlcnIgJiYgZXJyLnJlc3BvbnNlKTtcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBzZWVkQ2FjaGUgPSBuZXcgTWFwKCk7XG5cbmV4cG9ydCBjb25zdCBnZXRGZXRjaCA9IChjb25maWcpID0+IHtcbiAgbGV0IGVudiA9IChjb25maWcgJiYgY29uZmlnLmVudikgfHwge307XG4gIGNvbnN0IHsgZmV0Y2gsIFJlcXVlc3QsIFJlc3BvbnNlIH0gPSBlbnY7XG4gIGNvbnN0IHNlZWRzID0gW1JlcXVlc3QsIFJlc3BvbnNlLCBmZXRjaF07XG5cbiAgbGV0IGxlbiA9IHNlZWRzLmxlbmd0aCxcbiAgICBpID0gbGVuLFxuICAgIHNlZWQsXG4gICAgdGFyZ2V0LFxuICAgIG1hcCA9IHNlZWRDYWNoZTtcblxuICB3aGlsZSAoaS0tKSB7XG4gICAgc2VlZCA9IHNlZWRzW2ldO1xuICAgIHRhcmdldCA9IG1hcC5nZXQoc2VlZCk7XG5cbiAgICB0YXJnZXQgPT09IHVuZGVmaW5lZCAmJiBtYXAuc2V0KHNlZWQsICh0YXJnZXQgPSBpID8gbmV3IE1hcCgpIDogZmFjdG9yeShlbnYpKSk7XG5cbiAgICBtYXAgPSB0YXJnZXQ7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufTtcblxuY29uc3QgYWRhcHRlciA9IGdldEZldGNoKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGFkYXB0ZXI7XG4iLCJpbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IGh0dHBBZGFwdGVyIGZyb20gJy4vaHR0cC5qcyc7XG5pbXBvcnQgeGhyQWRhcHRlciBmcm9tICcuL3hoci5qcyc7XG5pbXBvcnQgKiBhcyBmZXRjaEFkYXB0ZXIgZnJvbSAnLi9mZXRjaC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuXG4vKipcbiAqIEtub3duIGFkYXB0ZXJzIG1hcHBpbmcuXG4gKiBQcm92aWRlcyBlbnZpcm9ubWVudC1zcGVjaWZpYyBhZGFwdGVycyBmb3IgQXhpb3M6XG4gKiAtIGBodHRwYCBmb3IgTm9kZS5qc1xuICogLSBgeGhyYCBmb3IgYnJvd3NlcnNcbiAqIC0gYGZldGNoYCBmb3IgZmV0Y2ggQVBJLWJhc2VkIHJlcXVlc3RzXG4gKlxuICogQHR5cGUge09iamVjdDxzdHJpbmcsIEZ1bmN0aW9ufE9iamVjdD59XG4gKi9cbmNvbnN0IGtub3duQWRhcHRlcnMgPSB7XG4gIGh0dHA6IGh0dHBBZGFwdGVyLFxuICB4aHI6IHhockFkYXB0ZXIsXG4gIGZldGNoOiB7XG4gICAgZ2V0OiBmZXRjaEFkYXB0ZXIuZ2V0RmV0Y2gsXG4gIH0sXG59O1xuXG4vLyBBc3NpZ24gYWRhcHRlciBuYW1lcyBmb3IgZWFzaWVyIGRlYnVnZ2luZyBhbmQgaWRlbnRpZmljYXRpb25cbnV0aWxzLmZvckVhY2goa25vd25BZGFwdGVycywgKGZuLCB2YWx1ZSkgPT4ge1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgLy8gTnVsbC1wcm90byBkZXNjcmlwdG9ycyBzbyBhIHBvbGx1dGVkIE9iamVjdC5wcm90b3R5cGUuZ2V0IGNhbm5vdCB0dXJuXG4gICAgICAvLyB0aGVzZSBkYXRhIGRlc2NyaXB0b3JzIGludG8gYWNjZXNzb3IgZGVzY3JpcHRvcnMgb24gdGhlIHdheSBpbi5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7IF9fcHJvdG9fXzogbnVsbCwgdmFsdWUgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ2FkYXB0ZXJOYW1lJywgeyBfX3Byb3RvX186IG51bGwsIHZhbHVlIH0pO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXIgYSByZWplY3Rpb24gcmVhc29uIHN0cmluZyBmb3IgdW5rbm93biBvciB1bnN1cHBvcnRlZCBhZGFwdGVyc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb25cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmNvbnN0IHJlbmRlclJlYXNvbiA9IChyZWFzb24pID0+IGAtICR7cmVhc29ufWA7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgaXMgcmVzb2x2ZWQgKGZ1bmN0aW9uLCBudWxsLCBvciBmYWxzZSlcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx8ZmFsc2V9IGFkYXB0ZXJcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBpc1Jlc29sdmVkSGFuZGxlID0gKGFkYXB0ZXIpID0+XG4gIHV0aWxzLmlzRnVuY3Rpb24oYWRhcHRlcikgfHwgYWRhcHRlciA9PT0gbnVsbCB8fCBhZGFwdGVyID09PSBmYWxzZTtcblxuLyoqXG4gKiBHZXQgdGhlIGZpcnN0IHN1aXRhYmxlIGFkYXB0ZXIgZnJvbSB0aGUgcHJvdmlkZWQgbGlzdC5cbiAqIFRyaWVzIGVhY2ggYWRhcHRlciBpbiBvcmRlciB1bnRpbCBhIHN1cHBvcnRlZCBvbmUgaXMgZm91bmQuXG4gKiBUaHJvd3MgYW4gQXhpb3NFcnJvciBpZiBubyBhZGFwdGVyIGlzIHN1aXRhYmxlLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nfEZ1bmN0aW9uPnxzdHJpbmd8RnVuY3Rpb259IGFkYXB0ZXJzIC0gQWRhcHRlcihzKSBieSBuYW1lIG9yIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIEF4aW9zIHJlcXVlc3QgY29uZmlndXJhdGlvblxuICogQHRocm93cyB7QXhpb3NFcnJvcn0gSWYgbm8gc3VpdGFibGUgYWRhcHRlciBpcyBhdmFpbGFibGVcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gVGhlIHJlc29sdmVkIGFkYXB0ZXIgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2V0QWRhcHRlcihhZGFwdGVycywgY29uZmlnKSB7XG4gIGFkYXB0ZXJzID0gdXRpbHMuaXNBcnJheShhZGFwdGVycykgPyBhZGFwdGVycyA6IFthZGFwdGVyc107XG5cbiAgY29uc3QgeyBsZW5ndGggfSA9IGFkYXB0ZXJzO1xuICBsZXQgbmFtZU9yQWRhcHRlcjtcbiAgbGV0IGFkYXB0ZXI7XG5cbiAgY29uc3QgcmVqZWN0ZWRSZWFzb25zID0ge307XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIG5hbWVPckFkYXB0ZXIgPSBhZGFwdGVyc1tpXTtcbiAgICBsZXQgaWQ7XG5cbiAgICBhZGFwdGVyID0gbmFtZU9yQWRhcHRlcjtcblxuICAgIGlmICghaXNSZXNvbHZlZEhhbmRsZShuYW1lT3JBZGFwdGVyKSkge1xuICAgICAgYWRhcHRlciA9IGtub3duQWRhcHRlcnNbKGlkID0gU3RyaW5nKG5hbWVPckFkYXB0ZXIpKS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgaWYgKGFkYXB0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgVW5rbm93biBhZGFwdGVyICcke2lkfSdgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWRhcHRlciAmJiAodXRpbHMuaXNGdW5jdGlvbihhZGFwdGVyKSB8fCAoYWRhcHRlciA9IGFkYXB0ZXIuZ2V0KGNvbmZpZykpKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmVqZWN0ZWRSZWFzb25zW2lkIHx8ICcjJyArIGldID0gYWRhcHRlcjtcbiAgfVxuXG4gIGlmICghYWRhcHRlcikge1xuICAgIGNvbnN0IHJlYXNvbnMgPSBPYmplY3QuZW50cmllcyhyZWplY3RlZFJlYXNvbnMpLm1hcChcbiAgICAgIChbaWQsIHN0YXRlXSkgPT5cbiAgICAgICAgYGFkYXB0ZXIgJHtpZH0gYCArXG4gICAgICAgIChzdGF0ZSA9PT0gZmFsc2UgPyAnaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQnIDogJ2lzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkJylcbiAgICApO1xuXG4gICAgbGV0IHMgPSBsZW5ndGhcbiAgICAgID8gcmVhc29ucy5sZW5ndGggPiAxXG4gICAgICAgID8gJ3NpbmNlIDpcXG4nICsgcmVhc29ucy5tYXAocmVuZGVyUmVhc29uKS5qb2luKCdcXG4nKVxuICAgICAgICA6ICcgJyArIHJlbmRlclJlYXNvbihyZWFzb25zWzBdKVxuICAgICAgOiAnYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQnO1xuXG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICBgVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCBgICsgcyxcbiAgICAgICdFUlJfTk9UX1NVUFBPUlQnXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG4vKipcbiAqIEV4cG9ydHMgQXhpb3MgYWRhcHRlcnMgYW5kIHV0aWxpdHkgdG8gcmVzb2x2ZSBhbiBhZGFwdGVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLyoqXG4gICAqIFJlc29sdmUgYW4gYWRhcHRlciBmcm9tIGEgbGlzdCBvZiBhZGFwdGVyIG5hbWVzIG9yIGZ1bmN0aW9ucy5cbiAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgKi9cbiAgZ2V0QWRhcHRlcixcblxuICAvKipcbiAgICogRXhwb3NlcyBhbGwga25vd24gYWRhcHRlcnNcbiAgICogQHR5cGUge09iamVjdDxzdHJpbmcsIEZ1bmN0aW9ufE9iamVjdD59XG4gICAqL1xuICBhZGFwdGVyczoga25vd25BZGFwdGVycyxcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0cmFuc2Zvcm1EYXRhIGZyb20gJy4vdHJhbnNmb3JtRGF0YS5qcyc7XG5pbXBvcnQgaXNDYW5jZWwgZnJvbSAnLi4vY2FuY2VsL2lzQ2FuY2VsLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCBhZGFwdGVycyBmcm9tICcuLi9hZGFwdGVycy9hZGFwdGVycy5qcyc7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb25maWcuaGVhZGVycyk7XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChjb25maWcsIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0KTtcblxuICBpZiAoWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgIT09IC0xKSB7XG4gICAgY29uZmlnLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsIGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IGFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyKGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXIsIGNvbmZpZyk7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKFxuICAgIGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gRXhwb3NlIHRoZSBjdXJyZW50IHJlc3BvbnNlIG9uIGNvbmZpZyBzbyB0aGF0IHRyYW5zZm9ybVJlc3BvbnNlIGNhblxuICAgICAgLy8gYXR0YWNoIGl0IHRvIGFueSBBeGlvc0Vycm9yIGl0IHRocm93cyAoZS5nLiBvbiBKU09OIHBhcnNlIGZhaWx1cmUpLlxuICAgICAgLy8gV2UgY2xlYW4gaXQgdXAgYWZ0ZXJ3YXJkcyB0byBhdm9pZCBwb2xsdXRpbmcgdGhlIGNvbmZpZyBvYmplY3QuXG4gICAgICBjb25maWcucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoY29uZmlnLCBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsIHJlc3BvbnNlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGRlbGV0ZSBjb25maWcucmVzcG9uc2U7XG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZXNwb25zZS5oZWFkZXJzKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG4gICAgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICAgIGNvbmZpZy5yZXNwb25zZSA9IHJlYXNvbi5yZXNwb25zZTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgICAgICAgICByZWFzb24ucmVzcG9uc2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcucmVzcG9uc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20ocmVhc29uLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICAgIH1cbiAgKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gJy4uL2Vudi9kYXRhLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB7fTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblsnb2JqZWN0JywgJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ2Z1bmN0aW9uJywgJ3N0cmluZycsICdzeW1ib2wnXS5mb3JFYWNoKCh0eXBlLCBpKSA9PiB7XG4gIHZhbGlkYXRvcnNbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG5jb25zdCBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb24gLSBkZXByZWNhdGVkIHZlcnNpb24gLyByZW1vdmVkIHNpbmNlIHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gbWVzc2FnZSAtIHNvbWUgbWVzc2FnZSB3aXRoIGFkZGl0aW9uYWwgaW5mb1xuICpcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycy50cmFuc2l0aW9uYWwgPSBmdW5jdGlvbiB0cmFuc2l0aW9uYWwodmFsaWRhdG9yLCB2ZXJzaW9uLCBtZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2Uob3B0LCBkZXNjKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICdbQXhpb3MgdicgK1xuICAgICAgVkVSU0lPTiArXG4gICAgICBcIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnXCIgK1xuICAgICAgb3B0ICtcbiAgICAgIFwiJ1wiICtcbiAgICAgIGRlc2MgK1xuICAgICAgKG1lc3NhZ2UgPyAnLiAnICsgbWVzc2FnZSA6ICcnKVxuICAgICk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gKHZhbHVlLCBvcHQsIG9wdHMpID0+IHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxudmFsaWRhdG9ycy5zcGVsbGluZyA9IGZ1bmN0aW9uIHNwZWxsaW5nKGNvcnJlY3RTcGVsbGluZykge1xuICByZXR1cm4gKHZhbHVlLCBvcHQpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUud2FybihgJHtvcHR9IGlzIGxpa2VseSBhIG1pc3NwZWxsaW5nIG9mICR7Y29ycmVjdFNwZWxsaW5nfWApO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGFsbG93VW5rbm93blxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnLCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgY29uc3Qgb3B0ID0ga2V5c1tpXTtcbiAgICAvLyBVc2UgaGFzT3duUHJvcGVydHkgc28gYSBwb2xsdXRlZCBPYmplY3QucHJvdG90eXBlLjxvcHQ+IGNhbm5vdCBzdXBwbHlcbiAgICAvLyBhIG5vbi1mdW5jdGlvbiB2YWxpZGF0b3IgYW5kIGNhdXNlIGEgVHlwZUVycm9yLlxuICAgIGNvbnN0IHZhbGlkYXRvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzY2hlbWEsIG9wdCkgPyBzY2hlbWFbb3B0XSA6IHVuZGVmaW5lZDtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAnb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCxcbiAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnMsXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gJy4uL2hlbHBlcnMvYnVpbGRVUkwuanMnO1xuaW1wb3J0IEludGVyY2VwdG9yTWFuYWdlciBmcm9tICcuL0ludGVyY2VwdG9yTWFuYWdlci5qcyc7XG5pbXBvcnQgZGlzcGF0Y2hSZXF1ZXN0IGZyb20gJy4vZGlzcGF0Y2hSZXF1ZXN0LmpzJztcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tICcuL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBidWlsZEZ1bGxQYXRoIGZyb20gJy4vYnVpbGRGdWxsUGF0aC5qcyc7XG5pbXBvcnQgdmFsaWRhdG9yIGZyb20gJy4uL2hlbHBlcnMvdmFsaWRhdG9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyc7XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuY2xhc3MgQXhpb3Mge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZUNvbmZpZykge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZyB8fCB7fTtcbiAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBjb25maWdPclVybCBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gICAqIEBwYXJhbSB7P09iamVjdH0gY29uZmlnXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAgICovXG4gIGFzeW5jIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBsZXQgZHVtbXkgPSB7fTtcblxuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA/IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGR1bW15KSA6IChkdW1teSA9IG5ldyBFcnJvcigpKTtcblxuICAgICAgICAvLyBzbGljZSBvZmYgdGhlIEVycm9yOiAuLi4gbGluZVxuICAgICAgICBjb25zdCBzdGFjayA9ICgoKSA9PiB7XG4gICAgICAgICAgaWYgKCFkdW1teS5zdGFjaykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpcnN0TmV3bGluZUluZGV4ID0gZHVtbXkuc3RhY2suaW5kZXhPZignXFxuJyk7XG5cbiAgICAgICAgICByZXR1cm4gZmlyc3ROZXdsaW5lSW5kZXggPT09IC0xID8gJycgOiBkdW1teS5zdGFjay5zbGljZShmaXJzdE5ld2xpbmVJbmRleCArIDEpO1xuICAgICAgICB9KSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghZXJyLnN0YWNrKSB7XG4gICAgICAgICAgICBlcnIuc3RhY2sgPSBzdGFjaztcbiAgICAgICAgICAgIC8vIG1hdGNoIHdpdGhvdXQgdGhlIDIgdG9wIHN0YWNrIGxpbmVzXG4gICAgICAgICAgfSBlbHNlIGlmIChzdGFjaykge1xuICAgICAgICAgICAgY29uc3QgZmlyc3ROZXdsaW5lSW5kZXggPSBzdGFjay5pbmRleE9mKCdcXG4nKTtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZE5ld2xpbmVJbmRleCA9XG4gICAgICAgICAgICAgIGZpcnN0TmV3bGluZUluZGV4ID09PSAtMSA/IC0xIDogc3RhY2suaW5kZXhPZignXFxuJywgZmlyc3ROZXdsaW5lSW5kZXggKyAxKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YWNrV2l0aG91dFR3b1RvcExpbmVzID1cbiAgICAgICAgICAgICAgc2Vjb25kTmV3bGluZUluZGV4ID09PSAtMSA/ICcnIDogc3RhY2suc2xpY2Uoc2Vjb25kTmV3bGluZUluZGV4ICsgMSk7XG5cbiAgICAgICAgICAgIGlmICghU3RyaW5nKGVyci5zdGFjaykuZW5kc1dpdGgoc3RhY2tXaXRob3V0VHdvVG9wTGluZXMpKSB7XG4gICAgICAgICAgICAgIGVyci5zdGFjayArPSAnXFxuJyArIHN0YWNrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlnbm9yZSB0aGUgY2FzZSB3aGVyZSBcInN0YWNrXCIgaXMgYW4gdW4td3JpdGFibGUgcHJvcGVydHlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgICAgY29uZmlnLnVybCA9IGNvbmZpZ09yVXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgICB9XG5cbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gICAgY29uc3QgeyB0cmFuc2l0aW9uYWwsIHBhcmFtc1NlcmlhbGl6ZXIsIGhlYWRlcnMgfSA9IGNvbmZpZztcblxuICAgIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMoXG4gICAgICAgIHRyYW5zaXRpb25hbCxcbiAgICAgICAge1xuICAgICAgICAgIHNpbGVudEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgICAgbGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zU2VyaWFsaXplcikpIHtcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIgPSB7XG4gICAgICAgICAgc2VyaWFsaXplOiBwYXJhbXNTZXJpYWxpemVyLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMoXG4gICAgICAgICAgcGFyYW1zU2VyaWFsaXplcixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgICBzZXJpYWxpemU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IGNvbmZpZy5hbGxvd0Fic29sdXRlVXJsc1xuICAgIGlmIChjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH0gZWxzZSBpZiAodGhpcy5kZWZhdWx0cy5hbGxvd0Fic29sdXRlVXJscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMgPSB0aGlzLmRlZmF1bHRzLmFsbG93QWJzb2x1dGVVcmxzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKFxuICAgICAgY29uZmlnLFxuICAgICAge1xuICAgICAgICBiYXNlVXJsOiB2YWxpZGF0b3JzLnNwZWxsaW5nKCdiYXNlVVJMJyksXG4gICAgICAgIHdpdGhYc3JmVG9rZW46IHZhbGlkYXRvcnMuc3BlbGxpbmcoJ3dpdGhYU1JGVG9rZW4nKSxcbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKTtcblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzID0gaGVhZGVycyAmJiB1dGlscy5tZXJnZShoZWFkZXJzLmNvbW1vbiwgaGVhZGVyc1tjb25maWcubWV0aG9kXSk7XG5cbiAgICBoZWFkZXJzICYmXG4gICAgICB1dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ3F1ZXJ5JywgJ2NvbW1vbiddLCAobWV0aG9kKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBoZWFkZXJzW21ldGhvZF07XG4gICAgICB9KTtcblxuICAgIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmNvbmNhdChjb250ZXh0SGVhZGVycywgaGVhZGVycyk7XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gICAgY29uc3QgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICBsZXQgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9yLnN5bmNocm9ub3VzO1xuXG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgY29uc3QgbGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZyA9XG4gICAgICAgIHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwubGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZztcblxuICAgICAgaWYgKGxlZ2FjeUludGVyY2VwdG9yUmVxUmVzT3JkZXJpbmcpIHtcbiAgICAgICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJvbWlzZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGxlbjtcblxuICAgIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QuYmluZCh0aGlzKSwgdW5kZWZpbmVkXTtcbiAgICAgIGNoYWluLnVuc2hpZnQoLi4ucmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgY2hhaW4ucHVzaCguLi5yZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgbGVuID0gY2hhaW4ubGVuZ3RoO1xuXG4gICAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW5baSsrXSwgY2hhaW5baSsrXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIGxlbiA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIGxldCBuZXdDb25maWcgPSBjb25maWc7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgY29uc3Qgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgY29uc3Qgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICB0cnkge1xuICAgICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgb25SZWplY3RlZC5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QuY2FsbCh0aGlzLCBuZXdDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIGkgPSAwO1xuICAgIGxlbiA9IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgZ2V0VXJpKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsLCBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMpO1xuICAgIHJldHVybiBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuICB9XG59XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChcbiAgICAgIG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIHVybCxcbiAgICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAncXVlcnknXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICBmdW5jdGlvbiBnZW5lcmF0ZUhUVFBNZXRob2QoaXNGb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGh0dHBNZXRob2QodXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoXG4gICAgICAgIG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICBoZWFkZXJzOiBpc0Zvcm1cbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIC8vIFFVRVJZIGlzIGEgc2FmZS9pZGVtcG90ZW50IHJlYWQgbWV0aG9kOyBtdWx0aXBhcnQgZm9ybSBib2RpZXMgZG9uJ3QgZml0XG4gIC8vIGl0cyBzZW1hbnRpY3MsIHNvIG5vIHF1ZXJ5Rm9ybSBzaG9ydGhhbmQgaXMgZ2VuZXJhdGVkLlxuICBpZiAobWV0aG9kICE9PSAncXVlcnknKSB7XG4gICAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG4gIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9DYW5jZWxlZEVycm9yLmpzJztcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsVG9rZW59XG4gKi9cbmNsYXNzIENhbmNlbFRva2VuIHtcbiAgY29uc3RydWN0b3IoZXhlY3V0b3IpIHtcbiAgICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVQcm9taXNlO1xuXG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2VuID0gdGhpcztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4oKGNhbmNlbCkgPT4ge1xuICAgICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICAgIGxldCBpID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICAgIH1cbiAgICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICAgIH0pO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbiA9IChvbmZ1bGZpbGxlZCkgPT4ge1xuICAgICAgbGV0IF9yZXNvbHZlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICB0b2tlbi5zdWJzY3JpYmUocmVzb2x2ZSk7XG4gICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgICBwcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uIHJlamVjdCgpIHtcbiAgICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gICAqL1xuICB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgdGhyb3cgdGhpcy5yZWFzb247XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIGxpc3RlbmVyKHRoaXMucmVhc29uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtsaXN0ZW5lcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICB0b0Fib3J0U2lnbmFsKCkge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBjb25zdCBhYm9ydCA9IChlcnIpID0+IHtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zdWJzY3JpYmUoYWJvcnQpO1xuXG4gICAgY29udHJvbGxlci5zaWduYWwudW5zdWJzY3JpYmUgPSAoKSA9PiB0aGlzLnVuc3Vic2NyaWJlKGFib3J0KTtcblxuICAgIHJldHVybiBjb250cm9sbGVyLnNpZ25hbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gICAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gICAqL1xuICBzdGF0aWMgc291cmNlKCkge1xuICAgIGxldCBjYW5jZWw7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgICAgY2FuY2VsID0gYztcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICBjYW5jZWwsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW5jZWxUb2tlbjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIGNvbnN0IGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBeGlvc0Vycm9yKHBheWxvYWQpIHtcbiAgcmV0dXJuIHV0aWxzLmlzT2JqZWN0KHBheWxvYWQpICYmIHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlO1xufVxuIiwiY29uc3QgSHR0cFN0YXR1c0NvZGUgPSB7XG4gIENvbnRpbnVlOiAxMDAsXG4gIFN3aXRjaGluZ1Byb3RvY29sczogMTAxLFxuICBQcm9jZXNzaW5nOiAxMDIsXG4gIEVhcmx5SGludHM6IDEwMyxcbiAgT2s6IDIwMCxcbiAgQ3JlYXRlZDogMjAxLFxuICBBY2NlcHRlZDogMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246IDIwMyxcbiAgTm9Db250ZW50OiAyMDQsXG4gIFJlc2V0Q29udGVudDogMjA1LFxuICBQYXJ0aWFsQ29udGVudDogMjA2LFxuICBNdWx0aVN0YXR1czogMjA3LFxuICBBbHJlYWR5UmVwb3J0ZWQ6IDIwOCxcbiAgSW1Vc2VkOiAyMjYsXG4gIE11bHRpcGxlQ2hvaWNlczogMzAwLFxuICBNb3ZlZFBlcm1hbmVudGx5OiAzMDEsXG4gIEZvdW5kOiAzMDIsXG4gIFNlZU90aGVyOiAzMDMsXG4gIE5vdE1vZGlmaWVkOiAzMDQsXG4gIFVzZVByb3h5OiAzMDUsXG4gIFVudXNlZDogMzA2LFxuICBUZW1wb3JhcnlSZWRpcmVjdDogMzA3LFxuICBQZXJtYW5lbnRSZWRpcmVjdDogMzA4LFxuICBCYWRSZXF1ZXN0OiA0MDAsXG4gIFVuYXV0aG9yaXplZDogNDAxLFxuICBQYXltZW50UmVxdWlyZWQ6IDQwMixcbiAgRm9yYmlkZGVuOiA0MDMsXG4gIE5vdEZvdW5kOiA0MDQsXG4gIE1ldGhvZE5vdEFsbG93ZWQ6IDQwNSxcbiAgTm90QWNjZXB0YWJsZTogNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDQwNyxcbiAgUmVxdWVzdFRpbWVvdXQ6IDQwOCxcbiAgQ29uZmxpY3Q6IDQwOSxcbiAgR29uZTogNDEwLFxuICBMZW5ndGhSZXF1aXJlZDogNDExLFxuICBQcmVjb25kaXRpb25GYWlsZWQ6IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlOiA0MTMsXG4gIFVyaVRvb0xvbmc6IDQxNCxcbiAgVW5zdXBwb3J0ZWRNZWRpYVR5cGU6IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZTogNDE2LFxuICBFeHBlY3RhdGlvbkZhaWxlZDogNDE3LFxuICBJbUFUZWFwb3Q6IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0OiA0MjEsXG4gIFVucHJvY2Vzc2FibGVFbnRpdHk6IDQyMixcbiAgTG9ja2VkOiA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3k6IDQyNCxcbiAgVG9vRWFybHk6IDQyNSxcbiAgVXBncmFkZVJlcXVpcmVkOiA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkOiA0MjgsXG4gIFRvb01hbnlSZXF1ZXN0czogNDI5LFxuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6IDQ1MSxcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvcjogNTAwLFxuICBOb3RJbXBsZW1lbnRlZDogNTAxLFxuICBCYWRHYXRld2F5OiA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZTogNTAzLFxuICBHYXRld2F5VGltZW91dDogNTA0LFxuICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDogNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXM6IDUwNixcbiAgSW5zdWZmaWNpZW50U3RvcmFnZTogNTA3LFxuICBMb29wRGV0ZWN0ZWQ6IDUwOCxcbiAgTm90RXh0ZW5kZWQ6IDUxMCxcbiAgTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDUxMSxcbiAgV2ViU2VydmVySXNEb3duOiA1MjEsXG4gIENvbm5lY3Rpb25UaW1lZE91dDogNTIyLFxuICBPcmlnaW5Jc1VucmVhY2hhYmxlOiA1MjMsXG4gIFRpbWVvdXRPY2N1cnJlZDogNTI0LFxuICBTc2xIYW5kc2hha2VGYWlsZWQ6IDUyNSxcbiAgSW52YWxpZFNzbENlcnRpZmljYXRlOiA1MjYsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBIdHRwU3RhdHVzQ29kZTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMuanMnO1xuaW1wb3J0IGJpbmQgZnJvbSAnLi9oZWxwZXJzL2JpbmQuanMnO1xuaW1wb3J0IEF4aW9zIGZyb20gJy4vY29yZS9BeGlvcy5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9jb3JlL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBmb3JtRGF0YVRvSlNPTiBmcm9tICcuL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQ2FuY2VsVG9rZW4gZnJvbSAnLi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4vY2FuY2VsL2lzQ2FuY2VsLmpzJztcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tICcuL2Vudi9kYXRhLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBzcHJlYWQgZnJvbSAnLi9oZWxwZXJzL3NwcmVhZC5qcyc7XG5pbXBvcnQgaXNBeGlvc0Vycm9yIGZyb20gJy4vaGVscGVycy9pc0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCBhZGFwdGVycyBmcm9tICcuL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzJztcbmltcG9ydCBIdHRwU3RhdHVzQ29kZSBmcm9tICcuL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybnMge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIGNvbnN0IGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQsIHsgYWxsT3duS2V5czogdHJ1ZSB9KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0LCBudWxsLCB7IGFsbE93bktleXM6IHRydWUgfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW47XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzO1xuXG5heGlvcy5mb3JtVG9KU09OID0gKHRoaW5nKSA9PiBmb3JtRGF0YVRvSlNPTih1dGlscy5pc0hUTUxGb3JtKHRoaW5nKSA/IG5ldyBGb3JtRGF0YSh0aGluZykgOiB0aGluZyk7XG5cbmF4aW9zLmdldEFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyO1xuXG5heGlvcy5IdHRwU3RhdHVzQ29kZSA9IEh0dHBTdGF0dXNDb2RlO1xuXG5heGlvcy5kZWZhdWx0ID0gYXhpb3M7XG5cbi8vIHRoaXMgbW9kdWxlIHNob3VsZCBvbmx5IGhhdmUgYSBkZWZhdWx0IGV4cG9ydFxuZXhwb3J0IGRlZmF1bHQgYXhpb3M7XG4iLCI8dGVtcGxhdGU+XHJcbjxkaXYgdi1pZj1cImlzRml4ZWRIZWFkZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwidnVldGFibGUtaGVhZC13cmFwcGVyXCI+XHJcbiAgICA8dGFibGUgOmNsYXNzPVwiWyd2dWV0YWJsZScsIGNzcy50YWJsZUNsYXNzLCBjc3MudGFibGVIZWFkZXJDbGFzc11cIj5cclxuICAgIDx0aGVhZD5cclxuICAgICAgPHRyPlxyXG4gICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cIihmaWVsZCwgZmllbGRJbmRleCkgaW4gdGFibGVGaWVsZHNcIj5cclxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiZmllbGQudmlzaWJsZVwiPlxyXG4gICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImlzU3BlY2lhbEZpZWxkKGZpZWxkLm5hbWUpXCI+XHJcbiAgICAgICAgICAgICAgPHRoIHYtaWY9XCJleHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PSAnX19jaGVja2JveCdcIlxyXG4gICAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiBmaWVsZC53aWR0aH1cIlxyXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwiWyd2dWV0YWJsZS10aC1jaGVja2JveC0nK3RyYWNrQnksIGZpZWxkLnRpdGxlQ2xhc3NdXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgQGNoYW5nZT1cInRvZ2dsZUFsbENoZWNrYm94ZXMoZmllbGQubmFtZSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIDpjaGVja2VkPVwiY2hlY2tDaGVja2JveGVzU3RhdGUoZmllbGQubmFtZSlcIj5cclxuICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCB2LWlmPVwiZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gJ19fY29tcG9uZW50J1wiXHJcbiAgICAgICAgICAgICAgICA6a2V5PVwiZmllbGRJbmRleFwiXHJcbiAgICAgICAgICAgICAgICA6c3R5bGU9XCJ7d2lkdGg6IGZpZWxkLndpZHRofVwiXHJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJbJ3Z1ZXRhYmxlLXRoLWNvbXBvbmVudC0nK3RyYWNrQnksIGZpZWxkLnRpdGxlQ2xhc3MsIHNvcnRDbGFzcyhmaWVsZCksIHsnc29ydGFibGUnOiBpc1NvcnRhYmxlKGZpZWxkKX1dXCJcclxuICAgICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlclRpdGxlKGZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJvcmRlckJ5KGZpZWxkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICA+PC90aD5cclxuICAgICAgICAgICAgICA8dGggdi1pZj1cImV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09ICdfX3Nsb3QnXCJcclxuICAgICAgICAgICAgICAgIDprZXk9XCJmaWVsZEluZGV4XCJcclxuICAgICAgICAgICAgICAgIDpzdHlsZT1cInt3aWR0aDogZmllbGQud2lkdGh9XCJcclxuICAgICAgICAgICAgICAgIDpjbGFzcz1cIlsndnVldGFibGUtdGgtc2xvdC0nK2V4dHJhY3RBcmdzKGZpZWxkLm5hbWUpLCBmaWVsZC50aXRsZUNsYXNzLCBzb3J0Q2xhc3MoZmllbGQpLCB7J3NvcnRhYmxlJzogaXNTb3J0YWJsZShmaWVsZCl9XVwiXHJcbiAgICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXJUaXRsZShmaWVsZClcIlxyXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwib3JkZXJCeShmaWVsZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgPjwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIHYtaWY9XCJleHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PSAnX19zZXF1ZW5jZSdcIlxyXG4gICAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiBmaWVsZC53aWR0aH1cIlxyXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwiWyd2dWV0YWJsZS10aC1zZXF1ZW5jZScsIGZpZWxkLnRpdGxlQ2xhc3MgfHwgJyddXCIgdi1odG1sPVwicmVuZGVyVGl0bGUoZmllbGQpXCI+XHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICA8dGggdi1pZj1cIm5vdEluKGV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpLCBbJ19fc2VxdWVuY2UnLCAnX19jaGVja2JveCcsICdfX2NvbXBvbmVudCcsICdfX3Nsb3QnXSlcIlxyXG4gICAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiBmaWVsZC53aWR0aH1cIlxyXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwiWyd2dWV0YWJsZS10aC0nK2ZpZWxkLm5hbWUsIGZpZWxkLnRpdGxlQ2xhc3MgfHwgJyddXCIgdi1odG1sPVwicmVuZGVyVGl0bGUoZmllbGQpXCI+XHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cclxuICAgICAgICAgICAgICA8dGggQGNsaWNrPVwib3JkZXJCeShmaWVsZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA6a2V5PVwiZmllbGRJbmRleFwiXHJcbiAgICAgICAgICAgICAgICA6aWQ9XCInXycgKyBmaWVsZC5uYW1lXCJcclxuICAgICAgICAgICAgICAgIDpzdHlsZT1cInt3aWR0aDogZmllbGQud2lkdGh9XCJcclxuICAgICAgICAgICAgICAgIDpjbGFzcz1cIlsndnVldGFibGUtdGgtJytmaWVsZC5uYW1lLCBmaWVsZC50aXRsZUNsYXNzLCBzb3J0Q2xhc3MoZmllbGQpLCB7J3NvcnRhYmxlJzogaXNTb3J0YWJsZShmaWVsZCl9XVwiXHJcbiAgICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXJUaXRsZShmaWVsZClcIlxyXG4gICAgICAgICAgICAgID48L3RoPlxyXG4gICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgIDx0aCB2LWlmPVwic2Nyb2xsVmlzaWJsZVwiIDpzdHlsZT1cInt3aWR0aDogc2Nyb2xsQmFyV2lkdGh9XCIgY2xhc3M9XCJ2dWV0YWJsZS1ndXR0ZXItY29sXCI+PC90aD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGhlYWQ+XHJcbiAgICA8L3RhYmxlPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJ2dWV0YWJsZS1ib2R5LXdyYXBwZXJcIiA6c3R5bGU9XCJ7aGVpZ2h0OiB0YWJsZUhlaWdodH1cIj5cclxuICAgIDx0YWJsZSA6Y2xhc3M9XCJbJ3Z1ZXRhYmxlJywgY3NzLnRhYmxlQ2xhc3MsIGNzcy50YWJsZUJvZHlDbGFzc11cIj5cclxuICAgICAgPGNvbGdyb3VwPlxyXG4gICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cIihmaWVsZCwgZmllbGRJbmRleCkgaW4gdGFibGVGaWVsZHNcIj5cclxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiZmllbGQudmlzaWJsZVwiPlxyXG4gICAgICAgICAgICA8Y29sXHJcbiAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgIDppZD1cIidfY29sXycgKyBmaWVsZC5uYW1lXCJcclxuICAgICAgICAgICAgICA6c3R5bGU9XCJ7d2lkdGg6IGZpZWxkLndpZHRofVwiXHJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiWyd2dWV0YWJsZS10aC0nK2ZpZWxkLm5hbWUsIGZpZWxkLnRpdGxlQ2xhc3NdXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgPC9jb2xncm91cD5cclxuICAgICAgPHRib2R5IHYtY2xvYWsgY2xhc3M9XCJ2dWV0YWJsZS1ib2R5XCI+XHJcbiAgICAgICAgPHRlbXBsYXRlIHYtZm9yPVwiKGl0ZW0sIGl0ZW1JbmRleCkgaW4gdGFibGVEYXRhXCI+XHJcbiAgICAgICAgICA8dHIgXHJcbiAgICAgICAgICAgIDprZXk9XCJpdGVtSW5kZXhcIlxyXG4gICAgICAgICAgICA6aXRlbS1pbmRleD1cIml0ZW1JbmRleFwiIFxyXG4gICAgICAgICAgICA6cmVuZGVyPVwib25Sb3dDaGFuZ2VkKGl0ZW0pXCIgXHJcbiAgICAgICAgICAgIDpjbGFzcz1cIm9uUm93Q2xhc3MoaXRlbSwgaXRlbUluZGV4KVwiXHJcbiAgICAgICAgICAgIEBjbGljaz1cIm9uUm93Q2xpY2tlZChpdGVtLCAkZXZlbnQpXCIgXHJcbiAgICAgICAgICAgIEBkYmxjbGljaz1cIm9uUm93RG91YmxlQ2xpY2tlZChpdGVtLCAkZXZlbnQpXCIgXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cIihmaWVsZCwgZmllbGRJbmRleCkgaW4gdGFibGVGaWVsZHNcIj5cclxuICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImZpZWxkLnZpc2libGVcIj5cclxuICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiaXNTcGVjaWFsRmllbGQoZmllbGQubmFtZSlcIj5cclxuICAgICAgICAgICAgICAgICAgPHRkIHYtaWY9XCJleHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PSAnX19zZXF1ZW5jZSdcIiBcclxuICAgICAgICAgICAgICAgICAgICA6a2V5PVwiZmllbGRJbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwiWyd2dWV0YWJsZS1zZXF1ZW5jZScsIGZpZWxkLmRhdGFDbGFzc11cIlxyXG4gICAgICAgICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlclNlcXVlbmNlKGl0ZW1JbmRleClcIj5cclxuICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkIHYtaWY9XCJleHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PSAnX19oYW5kbGUnXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cIlsndnVldGFibGUtaGFuZGxlJywgZmllbGQuZGF0YUNsYXNzXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdi1odG1sPVwicmVuZGVySWNvblRhZyhbJ2hhbmRsZS1pY29uJywgY3NzLmhhbmRsZUljb25dKVwiXHJcbiAgICAgICAgICAgICAgICAgID48L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8dGQgdi1pZj1cImV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09ICdfX2NoZWNrYm94J1wiIFxyXG4gICAgICAgICAgICAgICAgICAgIDprZXk9XCJmaWVsZEluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJbJ3Z1ZXRhYmxlLWNoZWNrYm94ZXMnLCBmaWVsZC5kYXRhQ2xhc3NdXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgQGNoYW5nZT1cInRvZ2dsZUNoZWNrYm94KGl0ZW0sIGZpZWxkLm5hbWUsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgOmNoZWNrZWQ9XCJyb3dTZWxlY3RlZChpdGVtLCBmaWVsZC5uYW1lKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8dGQgdi1pZj1cImV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09PSAnX19jb21wb25lbnQnXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cIlsndnVldGFibGUtY29tcG9uZW50JywgZmllbGQuZGF0YUNsYXNzXVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8Y29tcG9uZW50IDppcz1cImV4dHJhY3RBcmdzKGZpZWxkLm5hbWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIDpyb3ctZGF0YT1cIml0ZW1cIiA6cm93LWluZGV4PVwiaXRlbUluZGV4XCIgOnJvdy1maWVsZD1cImZpZWxkLnNvcnRGaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvY29tcG9uZW50PlxyXG4gICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8dGQgdi1pZj1cImV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09PSAnX19zbG90J1wiIFxyXG4gICAgICAgICAgICAgICAgICAgIDprZXk9XCJmaWVsZEluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJbJ3Z1ZXRhYmxlLXNsb3QnLCBmaWVsZC5kYXRhQ2xhc3NdXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzbG90IDpuYW1lPVwiZXh0cmFjdEFyZ3MoZmllbGQubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgOnJvdy1kYXRhPVwiaXRlbVwiIDpyb3ctaW5kZXg9XCJpdGVtSW5kZXhcIiA6cm93LWZpZWxkPVwiZmllbGQuc29ydEZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9zbG90PlxyXG4gICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZCA6Y2xhc3M9XCJmaWVsZC5kYXRhQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgIDprZXk9XCJmaWVsZEluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXJOb3JtYWxGaWVsZChmaWVsZCwgaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIEBjbGljaz1cIm9uQ2VsbENsaWNrZWQoaXRlbSwgZmllbGQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIEBkYmxjbGljaz1cIm9uQ2VsbERvdWJsZUNsaWNrZWQoaXRlbSwgZmllbGQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIEBjb250ZXh0bWVudT1cIm9uQ2VsbFJpZ2h0Q2xpY2tlZChpdGVtLCBmaWVsZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgID48L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwidXNlRGV0YWlsUm93XCI+XHJcbiAgICAgICAgICAgIDx0cmFuc2l0aW9uIDpuYW1lPVwiZGV0YWlsUm93VHJhbnNpdGlvblwiIDprZXk9XCJpdGVtSW5kZXhcIj5cclxuICAgICAgICAgICAgICA8dHIgdi1pZj1cImlzVmlzaWJsZURldGFpbFJvdyhpdGVtW3RyYWNrQnldKVwiXHJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJbY3NzLmRldGFpbFJvd0NsYXNzXVwiXHJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJvbkRldGFpbFJvd0NsaWNrKGl0ZW0sICRldmVudClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDx0ZCA6Y29sc3Bhbj1cImNvdW50VmlzaWJsZUZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8Y29tcG9uZW50IDppcz1cImRldGFpbFJvd0NvbXBvbmVudFwiIDpyb3ctZGF0YT1cIml0ZW1cIiA6cm93LWluZGV4PVwiaXRlbUluZGV4XCI+PC9jb21wb25lbnQ+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdHJhbnNpdGlvbj5cclxuICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImRpc3BsYXlFbXB0eURhdGFSb3dcIj5cclxuICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgPHRkIDpjb2xzcGFuPVwiY291bnRWaXNpYmxlRmllbGRzXCIgY2xhc3M9XCJ2dWV0YWJsZS1lbXB0eS1yZXN1bHRcIiB2LWh0bWw9XCJub0RhdGFUZW1wbGF0ZVwiPjwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJsZXNzVGhhbk1pblJvd3NcIj5cclxuICAgICAgICAgIDx0ciB2LWZvcj1cImkgaW4gYmxhbmtSb3dzXCIgY2xhc3M9XCJibGFuay1yb3dcIiA6a2V5PVwiaVwiPlxyXG4gICAgICAgICAgICA8dGVtcGxhdGUgdi1mb3I9XCIoZmllbGQsIGZpZWxkSW5kZXgpIGluIHRhYmxlRmllbGRzXCI+XHJcbiAgICAgICAgICAgICAgPHRkIHYtaWY9XCJmaWVsZC52aXNpYmxlXCIgOmtleT1cImZpZWxkSW5kZXhcIj4mbmJzcDs8L3RkPlxyXG4gICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICA8L3Rib2R5PlxyXG4gICAgPC90YWJsZT5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjx0YWJsZSB2LWVsc2UgOmNsYXNzPVwiWyd2dWV0YWJsZScsIGNzcy50YWJsZUNsYXNzXVwiPiA8IS0tIG5vIGZpeGVkIGhlYWRlciAtIHJlZ3VsYXIgdGFibGUgLS0+XHJcbiAgPHRoZWFkPlxyXG4gICAgPHRyPlxyXG4gICAgICA8dGVtcGxhdGUgdi1mb3I9XCIoZmllbGQsIGZpZWxkSW5kZXgpIGluIHRhYmxlRmllbGRzXCI+XHJcbiAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJmaWVsZC52aXNpYmxlXCI+XHJcbiAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImlzU3BlY2lhbEZpZWxkKGZpZWxkLm5hbWUpXCI+XHJcbiAgICAgICAgICAgIDx0aCB2LWlmPVwiZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gJ19fY2hlY2tib3gnXCJcclxuICAgICAgICAgICAgICA6a2V5PVwiZmllbGRJbmRleFwiXHJcbiAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiBmaWVsZC53aWR0aH1cIlxyXG4gICAgICAgICAgICAgIDpjbGFzcz1cIlsndnVldGFibGUtdGgtY2hlY2tib3gtJyt0cmFja0J5LCBmaWVsZC50aXRsZUNsYXNzXVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgQGNoYW5nZT1cInRvZ2dsZUFsbENoZWNrYm94ZXMoZmllbGQubmFtZSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA6Y2hlY2tlZD1cImNoZWNrQ2hlY2tib3hlc1N0YXRlKGZpZWxkLm5hbWUpXCI+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDx0aCB2LWlmPVwiZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gJ19fY29tcG9uZW50J1wiXHJcbiAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgIDpzdHlsZT1cInt3aWR0aDogZmllbGQud2lkdGh9XCJcclxuICAgICAgICAgICAgICA6Y2xhc3M9XCJbJ3Z1ZXRhYmxlLXRoLWNvbXBvbmVudC0nK3RyYWNrQnksIGZpZWxkLnRpdGxlQ2xhc3MsIHNvcnRDbGFzcyhmaWVsZCksIHsnc29ydGFibGUnOiBpc1NvcnRhYmxlKGZpZWxkKX1dXCJcclxuICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXJUaXRsZShmaWVsZClcIlxyXG4gICAgICAgICAgICAgIEBjbGljaz1cIm9yZGVyQnkoZmllbGQsICRldmVudClcIlxyXG4gICAgICAgICAgICA+PC90aD5cclxuICAgICAgICAgICAgPHRoIHYtaWY9XCJleHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PSAnX19zbG90J1wiXHJcbiAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgIDpzdHlsZT1cInt3aWR0aDogZmllbGQud2lkdGh9XCJcclxuICAgICAgICAgICAgICA6Y2xhc3M9XCJbJ3Z1ZXRhYmxlLXRoLXNsb3QtJytleHRyYWN0QXJncyhmaWVsZC5uYW1lKSwgZmllbGQudGl0bGVDbGFzcywgc29ydENsYXNzKGZpZWxkKSwgeydzb3J0YWJsZSc6IGlzU29ydGFibGUoZmllbGQpfV1cIlxyXG4gICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlclRpdGxlKGZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgQGNsaWNrPVwib3JkZXJCeShmaWVsZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L3RoPlxyXG4gICAgICAgICAgICA8dGggdi1pZj1cImV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09ICdfX3NlcXVlbmNlJ1wiXHJcbiAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgIDpzdHlsZT1cInt3aWR0aDogZmllbGQud2lkdGh9XCJcclxuICAgICAgICAgICAgICA6Y2xhc3M9XCJbJ3Z1ZXRhYmxlLXRoLXNlcXVlbmNlJywgZmllbGQudGl0bGVDbGFzcyB8fCAnJywgc29ydENsYXNzKGZpZWxkKV1cIiB2LWh0bWw9XCJyZW5kZXJUaXRsZShmaWVsZClcIlxyXG4gICAgICAgICAgICA+PC90aD5cclxuICAgICAgICAgICAgPHRoIHYtaWY9XCJub3RJbihleHRyYWN0TmFtZShmaWVsZC5uYW1lKSwgWydfX3NlcXVlbmNlJywgJ19fY2hlY2tib3gnLCAnX19jb21wb25lbnQnLCAnX19zbG90J10pXCJcclxuICAgICAgICAgICAgICA6a2V5PVwiZmllbGRJbmRleFwiXHJcbiAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiBmaWVsZC53aWR0aH1cIlxyXG4gICAgICAgICAgICAgIDpjbGFzcz1cIlsndnVldGFibGUtdGgtJytmaWVsZC5uYW1lLCBmaWVsZC50aXRsZUNsYXNzIHx8ICcnLCBzb3J0Q2xhc3MoZmllbGQpXVwiIHYtaHRtbD1cInJlbmRlclRpdGxlKGZpZWxkKVwiXHJcbiAgICAgICAgICAgID48L3RoPlxyXG4gICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XHJcbiAgICAgICAgICAgIDx0aCBAY2xpY2s9XCJvcmRlckJ5KGZpZWxkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICA6a2V5PVwiZmllbGRJbmRleFwiXHJcbiAgICAgICAgICAgICAgOmlkPVwiJ18nICsgZmllbGQubmFtZVwiXHJcbiAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiBmaWVsZC53aWR0aH1cIlxyXG4gICAgICAgICAgICAgIDpjbGFzcz1cIlsndnVldGFibGUtdGgtJytmaWVsZC5uYW1lLCBmaWVsZC50aXRsZUNsYXNzLCBzb3J0Q2xhc3MoZmllbGQpLCAgeydzb3J0YWJsZSc6IGlzU29ydGFibGUoZmllbGQpfV1cIlxyXG4gICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlclRpdGxlKGZpZWxkKVwiXHJcbiAgICAgICAgICAgID48L3RoPlxyXG4gICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICA8L3RlbXBsYXRlPlxyXG4gICAgPC90cj5cclxuICA8L3RoZWFkPlxyXG4gIDx0Ym9keSB2LWNsb2FrIGNsYXNzPVwidnVldGFibGUtYm9keVwiPlxyXG4gICAgPHRlbXBsYXRlIHYtZm9yPVwiKGl0ZW0sIGl0ZW1JbmRleCkgaW4gdGFibGVEYXRhXCI+XHJcbiAgICAgIDx0ciBAZGJsY2xpY2s9XCJvblJvd0RvdWJsZUNsaWNrZWQoaXRlbSwgJGV2ZW50KVwiIFxyXG4gICAgICAgIDprZXk9XCJpdGVtSW5kZXhcIlxyXG4gICAgICAgIDppdGVtLWluZGV4PVwiaXRlbUluZGV4XCIgXHJcbiAgICAgICAgOnJlbmRlcj1cIm9uUm93Q2hhbmdlZChpdGVtKVwiIFxyXG4gICAgICAgIDpjbGFzcz1cIm9uUm93Q2xhc3MoaXRlbSwgaXRlbUluZGV4KVwiXHJcbiAgICAgICAgQGNsaWNrPVwib25Sb3dDbGlja2VkKGl0ZW0sICRldmVudClcIiBcclxuICAgICAgPlxyXG4gICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cIihmaWVsZCwgZmllbGRJbmRleCkgaW4gdGFibGVGaWVsZHNcIj5cclxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiZmllbGQudmlzaWJsZVwiPlxyXG4gICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImlzU3BlY2lhbEZpZWxkKGZpZWxkLm5hbWUpXCI+XHJcbiAgICAgICAgICAgICAgPHRkIHYtaWY9XCJleHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PSAnX19zZXF1ZW5jZSdcIiBcclxuICAgICAgICAgICAgICAgIDprZXk9XCJmaWVsZEluZGV4XCJcclxuICAgICAgICAgICAgICAgIDpjbGFzcz1cIlsndnVldGFibGUtc2VxdWVuY2UnLCBmaWVsZC5kYXRhQ2xhc3NdXCJcclxuICAgICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlclNlcXVlbmNlKGl0ZW1JbmRleClcIlxyXG4gICAgICAgICAgICAgID48L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZCB2LWlmPVwiZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gJ19faGFuZGxlJ1wiIFxyXG4gICAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwiWyd2dWV0YWJsZS1oYW5kbGUnLCBmaWVsZC5kYXRhQ2xhc3NdXCJcclxuICAgICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlckljb25UYWcoWydoYW5kbGUtaWNvbicsIGNzcy5oYW5kbGVJY29uXSlcIlxyXG4gICAgICAgICAgICAgID48L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZCB2LWlmPVwiZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gJ19fY2hlY2tib3gnXCIgXHJcbiAgICAgICAgICAgICAgICA6a2V5PVwiZmllbGRJbmRleFwiXHJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJbJ3Z1ZXRhYmxlLWNoZWNrYm94ZXMnLCBmaWVsZC5kYXRhQ2xhc3NdXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgQGNoYW5nZT1cInRvZ2dsZUNoZWNrYm94KGl0ZW0sIGZpZWxkLm5hbWUsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICA6Y2hlY2tlZD1cInJvd1NlbGVjdGVkKGl0ZW0sIGZpZWxkLm5hbWUpXCI+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQgdi1pZj1cImV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09PSAnX19jb21wb25lbnQnXCIgXHJcbiAgICAgICAgICAgICAgICA6a2V5PVwiZmllbGRJbmRleFwiXHJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJbJ3Z1ZXRhYmxlLWNvbXBvbmVudCcsIGZpZWxkLmRhdGFDbGFzc11cIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxjb21wb25lbnQgOmlzPVwiZXh0cmFjdEFyZ3MoZmllbGQubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICA6cm93LWRhdGE9XCJpdGVtXCIgOnJvdy1pbmRleD1cIml0ZW1JbmRleFwiIDpyb3ctZmllbGQ9XCJmaWVsZC5zb3J0RmllbGRcIlxyXG4gICAgICAgICAgICAgICAgPjwvY29tcG9uZW50PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkIHYtaWY9XCJleHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PT0gJ19fc2xvdCdcIiBcclxuICAgICAgICAgICAgICAgIDprZXk9XCJmaWVsZEluZGV4XCJcclxuICAgICAgICAgICAgICAgIDpjbGFzcz1cIlsndnVldGFibGUtc2xvdCcsIGZpZWxkLmRhdGFDbGFzc11cIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzbG90IDpuYW1lPVwiZXh0cmFjdEFyZ3MoZmllbGQubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICA6cm93LWRhdGE9XCJpdGVtXCIgOnJvdy1pbmRleD1cIml0ZW1JbmRleFwiIDpyb3ctZmllbGQ9XCJmaWVsZC5zb3J0RmllbGRcIlxyXG4gICAgICAgICAgICAgICAgPjwvc2xvdD5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICA8dGVtcGxhdGUgdi1lbHNlPlxyXG4gICAgICAgICAgICAgIDx0ZCB2LWlmPVwiaGFzQ2FsbGJhY2soZmllbGQpXCIgXHJcbiAgICAgICAgICAgICAgICA6a2V5PVwiZmllbGRJbmRleFwiXHJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJmaWVsZC5kYXRhQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgdi1odG1sPVwiY2FsbENhbGxiYWNrKGZpZWxkLCBpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJvbkNlbGxDbGlja2VkKGl0ZW0sIGZpZWxkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIEBkYmxjbGljaz1cIm9uQ2VsbERvdWJsZUNsaWNrZWQoaXRlbSwgZmllbGQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgQGNvbnRleHRtZW51PVwib25DZWxsUmlnaHRDbGlja2VkKGl0ZW0sIGZpZWxkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICA+PC90ZD5cclxuICAgICAgICAgICAgICA8dGQgdi1lbHNlIFxyXG4gICAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwiZmllbGQuZGF0YUNsYXNzXCJcclxuICAgICAgICAgICAgICAgIHYtaHRtbD1cImdldE9iamVjdFZhbHVlKGl0ZW0sIGZpZWxkLm5hbWUsICcnKVwiXHJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJvbkNlbGxDbGlja2VkKGl0ZW0sIGZpZWxkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIEBkYmxjbGljaz1cIm9uQ2VsbERvdWJsZUNsaWNrZWQoaXRlbSwgZmllbGQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgQGNvbnRleHRtZW51PVwib25DZWxsUmlnaHRDbGlja2VkKGl0ZW0sIGZpZWxkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICA+PC90ZD5cclxuICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgPC90cj5cclxuICAgICAgPHRlbXBsYXRlIHYtaWY9XCJ1c2VEZXRhaWxSb3dcIj5cclxuICAgICAgICA8dHJhbnNpdGlvbiA6bmFtZT1cImRldGFpbFJvd1RyYW5zaXRpb25cIiA6a2V5PVwiaXRlbUluZGV4XCI+XHJcbiAgICAgICAgICA8dHIgdi1pZj1cImlzVmlzaWJsZURldGFpbFJvdyhpdGVtW3RyYWNrQnldKVwiXHJcbiAgICAgICAgICAgIDpjbGFzcz1cIltjc3MuZGV0YWlsUm93Q2xhc3NdXCJcclxuICAgICAgICAgICAgQGNsaWNrPVwib25EZXRhaWxSb3dDbGljayhpdGVtLCAkZXZlbnQpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHRkIDpjb2xzcGFuPVwiY291bnRWaXNpYmxlRmllbGRzXCI+XHJcbiAgICAgICAgICAgICAgPGNvbXBvbmVudCA6aXM9XCJkZXRhaWxSb3dDb21wb25lbnRcIiA6cm93LWRhdGE9XCJpdGVtXCIgOnJvdy1pbmRleD1cIml0ZW1JbmRleFwiPjwvY29tcG9uZW50PlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RyYW5zaXRpb24+XHJcbiAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICA8L3RlbXBsYXRlPlxyXG4gICAgPHRlbXBsYXRlIHYtaWY9XCJkaXNwbGF5RW1wdHlEYXRhUm93XCI+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGQgOmNvbHNwYW49XCJjb3VudFZpc2libGVGaWVsZHNcIiBjbGFzcz1cInZ1ZXRhYmxlLWVtcHR5LXJlc3VsdFwiIHYtaHRtbD1cIm5vRGF0YVRlbXBsYXRlXCI+PC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGVtcGxhdGU+XHJcbiAgICA8dGVtcGxhdGUgdi1pZj1cImxlc3NUaGFuTWluUm93c1wiPlxyXG4gICAgICA8dHIgdi1mb3I9XCJpIGluIGJsYW5rUm93c1wiIGNsYXNzPVwiYmxhbmstcm93XCIgOmtleT1cImlcIj5cclxuICAgICAgICA8dGVtcGxhdGUgdi1mb3I9XCIoZmllbGQsIGZpZWxkSW5kZXgpIGluIHRhYmxlRmllbGRzXCI+XHJcbiAgICAgICAgICA8dGQgdi1pZj1cImZpZWxkLnZpc2libGVcIiA6a2V5PVwiZmllbGRJbmRleFwiPiZuYnNwOzwvdGQ+XHJcbiAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGVtcGxhdGU+XHJcbiAgPC90Ym9keT5cclxuPC90YWJsZT5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcydcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBwcm9wczoge1xyXG4gICAgZmllbGRzOiB7XHJcbiAgICAgIHR5cGU6IEFycmF5LFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIGxvYWRPblN0YXJ0OiB7XHJcbiAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgIGRlZmF1bHQ6IHRydWVcclxuICAgIH0sXHJcbiAgICBhcGlVcmw6IHtcclxuICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgZGVmYXVsdDogJydcclxuICAgIH0sXHJcbiAgICBodHRwTWV0aG9kOiB7XHJcbiAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgIGRlZmF1bHQ6ICdnZXQnLFxyXG4gICAgICAgIHZhbGlkYXRvcjogKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gWydnZXQnLCAncG9zdCddLmluZGV4T2YodmFsdWUpID4gLTFcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgcmVhY3RpdmVBcGlVcmw6IHtcclxuICAgICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcclxuICAgIH0sXHJcbiAgICBhcGlNb2RlOiB7XHJcbiAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgIGRlZmF1bHQ6IHRydWVcclxuICAgIH0sXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgIHR5cGU6IFtBcnJheSwgT2JqZWN0XSxcclxuICAgICAgZGVmYXVsdDogbnVsbFxyXG4gICAgfSxcclxuICAgIGRhdGFUb3RhbDoge1xyXG4gICAgICB0eXBlOiBOdW1iZXIsXHJcbiAgICAgIGRlZmF1bHQ6IDBcclxuICAgIH0sXHJcbiAgICBkYXRhTWFuYWdlcjoge1xyXG4gICAgICB0eXBlOiBGdW5jdGlvbixcclxuICAgICAgZGVmYXVsdDogbnVsbFxyXG4gICAgfSxcclxuICAgIGRhdGFQYXRoOiB7XHJcbiAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgIGRlZmF1bHQ6ICdkYXRhJ1xyXG4gICAgfSxcclxuICAgIHBhZ2luYXRpb25QYXRoOiB7XHJcbiAgICAgICAgdHlwZTogW1N0cmluZ10sXHJcbiAgICAgICAgZGVmYXVsdDogJ2xpbmtzLnBhZ2luYXRpb24nXHJcbiAgICB9LFxyXG4gICAgcXVlcnlQYXJhbXM6IHtcclxuICAgICAgdHlwZTogW09iamVjdCwgRnVuY3Rpb25dLFxyXG4gICAgICBkZWZhdWx0ICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgc29ydDogJ3NvcnQnLFxyXG4gICAgICAgICAgcGFnZTogJ3BhZ2UnLFxyXG4gICAgICAgICAgcGVyUGFnZTogJ3Blcl9wYWdlJ1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGFwcGVuZFBhcmFtczoge1xyXG4gICAgICB0eXBlOiBPYmplY3QsXHJcbiAgICAgIGRlZmF1bHQgKCkge1xyXG4gICAgICAgIHJldHVybiB7fVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgaHR0cE9wdGlvbnM6IHtcclxuICAgICAgdHlwZTogT2JqZWN0LFxyXG4gICAgICBkZWZhdWx0ICgpIHtcclxuICAgICAgICByZXR1cm4ge31cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGh0dHBGZXRjaDoge1xyXG4gICAgICB0eXBlOiBGdW5jdGlvbixcclxuICAgICAgZGVmYXVsdDogbnVsbFxyXG4gICAgfSxcclxuICAgIHBlclBhZ2U6IHtcclxuICAgICAgICB0eXBlOiBOdW1iZXIsXHJcbiAgICAgICAgZGVmYXVsdDogMTBcclxuICAgIH0sXHJcbiAgICBpbml0aWFsUGFnZToge1xyXG4gICAgICB0eXBlOiBOdW1iZXIsXHJcbiAgICAgIGRlZmF1bHQ6IDFcclxuICAgIH0sXHJcbiAgICBzb3J0T3JkZXI6IHtcclxuICAgICAgdHlwZTogQXJyYXksXHJcbiAgICAgIGRlZmF1bHQgKCkge1xyXG4gICAgICAgIHJldHVybiBbXVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgbXVsdGlTb3J0OiB7XHJcbiAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgIGRlZmF1bHQgKCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgdGFibGVIZWlnaHQ6IHtcclxuICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICBkZWZhdWx0OiBudWxsXHJcbiAgICB9LFxyXG4gICAgLypcclxuICAgICAqIHBoeXNpY2FsIGtleSB0aGF0IHdpbGwgdHJpZ2dlciBtdWx0aS1zb3J0IG9wdGlvblxyXG4gICAgICogcG9zc2libGUgdmFsdWVzOiAnYWx0JywgJ2N0cmwnLCAnbWV0YScsICdzaGlmdCdcclxuICAgICAqICdjdHJsJyBtaWdodCBub3Qgd29yayBhcyBleHBlY3RlZCBvbiBNYWNcclxuICAgICAqL1xyXG4gICAgbXVsdGlTb3J0S2V5OiB7XHJcbiAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgZGVmYXVsdDogJ2FsdCdcclxuICAgIH0sXHJcbiAgICAvKiBkZXByZWNhdGVkICovXHJcbiAgICByb3dDbGFzc0NhbGxiYWNrOiB7XHJcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcclxuICAgICAgZGVmYXVsdDogJydcclxuICAgIH0sXHJcbiAgICByb3dDbGFzczoge1xyXG4gICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXHJcbiAgICAgIGRlZmF1bHQ6ICcnXHJcbiAgICB9LFxyXG4gICAgZGV0YWlsUm93Q29tcG9uZW50OiB7XHJcbiAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgZGVmYXVsdDogJydcclxuICAgIH0sXHJcbiAgICBkZXRhaWxSb3dUcmFuc2l0aW9uOiB7XHJcbiAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgZGVmYXVsdDogJydcclxuICAgIH0sXHJcbiAgICB0cmFja0J5OiB7XHJcbiAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgZGVmYXVsdDogJ2lkJ1xyXG4gICAgfSxcclxuICAgIGNzczoge1xyXG4gICAgICB0eXBlOiBPYmplY3QsXHJcbiAgICAgIGRlZmF1bHQgKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB0YWJsZUNsYXNzOiAndWkgYmx1ZSBzZWxlY3RhYmxlIGNlbGxlZCBzdGFja2FibGUgYXR0YWNoZWQgdGFibGUnLFxyXG4gICAgICAgICAgbG9hZGluZ0NsYXNzOiAnbG9hZGluZycsXHJcbiAgICAgICAgICBhc2NlbmRpbmdJY29uOiAnYmx1ZSBjaGV2cm9uIHVwIGljb24nLFxyXG4gICAgICAgICAgZGVzY2VuZGluZ0ljb246ICdibHVlIGNoZXZyb24gZG93biBpY29uJyxcclxuICAgICAgICAgIGFzY2VuZGluZ0NsYXNzOiAnc29ydGVkLWFzYycsXHJcbiAgICAgICAgICBkZXNjZW5kaW5nQ2xhc3M6ICdzb3J0ZWQtZGVzYycsXHJcbiAgICAgICAgICBzb3J0YWJsZUljb246ICcnLFxyXG4gICAgICAgICAgZGV0YWlsUm93Q2xhc3M6ICd2dWV0YWJsZS1kZXRhaWwtcm93JyxcclxuICAgICAgICAgIGhhbmRsZUljb246ICdncmV5IHNpZGViYXIgaWNvbicsXHJcbiAgICAgICAgICB0YWJsZUJvZHlDbGFzczogJ3Z1ZXRhYmxlLXNlbWFudGljLW5vLXRvcCB2dWV0YWJsZS1maXhlZC1sYXlvdXQnLFxyXG4gICAgICAgICAgdGFibGVIZWFkZXJDbGFzczogJ3Z1ZXRhYmxlLWZpeGVkLWxheW91dCdcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBtaW5Sb3dzOiB7XHJcbiAgICAgIHR5cGU6IE51bWJlcixcclxuICAgICAgZGVmYXVsdDogMFxyXG4gICAgfSxcclxuICAgIHNpbGVudDoge1xyXG4gICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICBkZWZhdWx0OiBmYWxzZVxyXG4gICAgfSxcclxuICAgIG5vRGF0YVRlbXBsYXRlOiB7XHJcbiAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgZGVmYXVsdCgpIHtcclxuICAgICAgICByZXR1cm4gJ05vIERhdGEgQXZhaWxhYmxlJ1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgc2hvd1NvcnRJY29uczoge1xyXG4gICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICBkZWZhdWx0OiB0cnVlXHJcbiAgICB9XHJcbiAgfSxcclxuICBkYXRhICgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGV2ZW50UHJlZml4OiAndnVldGFibGU6JyxcclxuICAgICAgdGFibGVGaWVsZHM6IFtdLFxyXG4gICAgICB0YWJsZURhdGE6IG51bGwsXHJcbiAgICAgIHRhYmxlUGFnaW5hdGlvbjogbnVsbCxcclxuICAgICAgY3VycmVudFBhZ2U6IHRoaXMuaW5pdGlhbFBhZ2UsXHJcbiAgICAgIHNlbGVjdGVkVG86IFtdLFxyXG4gICAgICB2aXNpYmxlRGV0YWlsUm93czogW10sXHJcbiAgICAgIGxhc3RTY3JvbGxQb3NpdGlvbjogMCxcclxuICAgICAgc2Nyb2xsQmFyV2lkdGg6ICcxN3B4JywgLy9jaHJvbWUgZGVmYXVsdFxyXG4gICAgICBzY3JvbGxWaXNpYmxlOiBmYWxzZSxcclxuICAgIH1cclxuICB9LFxyXG4gIG1vdW50ZWQgKCkge1xyXG4gICAgdGhpcy5ub3JtYWxpemVGaWVsZHMoKVxyXG4gICAgdGhpcy5ub3JtYWxpemVTb3J0T3JkZXIoKVxyXG4gICAgaWYgKHRoaXMuaXNGaXhlZEhlYWRlcikge1xyXG4gICAgICB0aGlzLnNjcm9sbEJhcldpZHRoID0gdGhpcy5nZXRTY3JvbGxCYXJXaWR0aCgpICsgJ3B4JztcclxuICAgIH1cclxuICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCkge1xyXG4gICAgICB0aGlzLmZpcmVFdmVudCgnaW5pdGlhbGl6ZWQnLCB0aGlzLnRhYmxlRmllbGRzKVxyXG4gICAgfSlcclxuXHJcbiAgICBpZiAodGhpcy5sb2FkT25TdGFydCkge1xyXG4gICAgICB0aGlzLmxvYWREYXRhKClcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzRml4ZWRIZWFkZXIpIHtcclxuICAgICAgbGV0IGVsZW0gPSB0aGlzLiRlbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2dWV0YWJsZS1ib2R5LXdyYXBwZXInKVswXTtcclxuICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oYW5kbGVTY3JvbGwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuICBkZXN0cm95ZWQgKCkge1xyXG4gICAgbGV0IGVsZW0gPSB0aGlzLiRlbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2dWV0YWJsZS1ib2R5LXdyYXBwZXInKVswXTtcclxuICAgIGlmIChlbGVtICE9IG51bGwpIHtcclxuICAgICAgZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmhhbmRsZVNjcm9sbCk7XHJcbiAgICB9XHJcbiAgfSxcclxuICBjb21wdXRlZDoge1xyXG4gICAgdmVyc2lvbjogKCkgPT4gVkVSU0lPTixcclxuICAgIHVzZURldGFpbFJvdyAoKSB7XHJcbiAgICAgIGlmICh0aGlzLnRhYmxlRGF0YSAmJiB0aGlzLnRhYmxlRGF0YVswXSAmJiB0aGlzLmRldGFpbFJvd0NvbXBvbmVudCAhPT0gJycgJiYgdHlwZW9mIHRoaXMudGFibGVEYXRhWzBdW3RoaXMudHJhY2tCeV0gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgdGhpcy53YXJuKCdZb3UgbmVlZCB0byBkZWZpbmUgdW5pcXVlIHJvdyBpZGVudGlmaWVyIGluIG9yZGVyIGZvciBkZXRhaWwtcm93IGZlYXR1cmUgdG8gd29yay4gVXNlIGB0cmFjay1ieWAgcHJvcCB0byBkZWZpbmUgb25lIScpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmRldGFpbFJvd0NvbXBvbmVudCAhPT0gJydcclxuICAgIH0sXHJcbiAgICBjb3VudFZpc2libGVGaWVsZHMgKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy50YWJsZUZpZWxkcy5maWx0ZXIoZnVuY3Rpb24oZmllbGQpIHtcclxuICAgICAgICByZXR1cm4gZmllbGQudmlzaWJsZVxyXG4gICAgICB9KS5sZW5ndGhcclxuICAgIH0sXHJcbiAgICBjb3VudFRhYmxlRGF0YSAoKSB7XHJcbiAgICAgIGlmICh0aGlzLnRhYmxlRGF0YSA9PT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiAwXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMudGFibGVEYXRhLmxlbmd0aFxyXG4gICAgfSxcclxuICAgIGRpc3BsYXlFbXB0eURhdGFSb3cgKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb3VudFRhYmxlRGF0YSA9PT0gMCAmJiB0aGlzLm5vRGF0YVRlbXBsYXRlLmxlbmd0aCA+IDBcclxuICAgIH0sXHJcbiAgICBsZXNzVGhhbk1pblJvd3MgKCkge1xyXG4gICAgICBpZiAodGhpcy50YWJsZURhdGEgPT09IG51bGwgfHwgdGhpcy50YWJsZURhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy50YWJsZURhdGEubGVuZ3RoIDwgdGhpcy5taW5Sb3dzXHJcbiAgICB9LFxyXG4gICAgYmxhbmtSb3dzICgpIHtcclxuICAgICAgaWYgKHRoaXMudGFibGVEYXRhID09PSBudWxsIHx8IHRoaXMudGFibGVEYXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1pblJvd3NcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy50YWJsZURhdGEubGVuZ3RoID49IHRoaXMubWluUm93cykge1xyXG4gICAgICAgIHJldHVybiAwXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLm1pblJvd3MgLSB0aGlzLnRhYmxlRGF0YS5sZW5ndGhcclxuICAgIH0sXHJcbiAgICBpc0FwaU1vZGUgKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5hcGlNb2RlXHJcbiAgICB9LFxyXG4gICAgaXNEYXRhTW9kZSAoKSB7XHJcbiAgICAgIHJldHVybiAhIHRoaXMuYXBpTW9kZVxyXG4gICAgfSxcclxuICAgIGlzRml4ZWRIZWFkZXIgKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy50YWJsZUhlaWdodCAhPSBudWxsXHJcbiAgICB9XHJcbiAgfSxcclxuICBtZXRob2RzOiB7XHJcbiAgICBnZXRTY3JvbGxCYXJXaWR0aCAoKSB7XHJcbiAgICAgIGNvbnN0IG91dGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnN0IGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcblxyXG4gICAgICBvdXRlci5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICAgIG91dGVyLnN0eWxlLndpZHRoID0gJzEwMHB4JztcclxuXHJcbiAgICAgIGlubmVyLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG5cclxuXHJcbiAgICAgIG91dGVyLmFwcGVuZENoaWxkKGlubmVyKTtcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRlcik7XHJcblxyXG5cclxuICAgICAgY29uc3Qgd2lkdGhXaXRob3V0U2Nyb2xsYmFyID0gb3V0ZXIub2Zmc2V0V2lkdGg7XHJcblxyXG4gICAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnO1xyXG5cclxuICAgICAgY29uc3Qgd2lkdGhXaXRoU2Nyb2xsYmFyID0gaW5uZXIub2Zmc2V0V2lkdGg7XHJcblxyXG5cclxuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChvdXRlcik7XHJcblxyXG5cclxuICAgICAgcmV0dXJuICh3aWR0aFdpdGhvdXRTY3JvbGxiYXIgLSB3aWR0aFdpdGhTY3JvbGxiYXIpO1xyXG4gICAgfSxcclxuICAgIGhhbmRsZVNjcm9sbCAoZSkgeyAvL21ha2Ugc3VyZSB0aGF0IHRoZSBoZWFkZXIgYW5kIHRoZSBib2R5IGFyZSBhbGlnbmVkIHdoZW4gc2Nyb2xsaW5nIGhvcml6b250YWxseSBvbiBhIHRhYmxlIHRoYXQgaXMgd2lkZXIgdGhhbiB0aGUgdmlld3BvcnRcclxuICAgICAgbGV0IGhvcml6b250YWwgPSBlLmN1cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdDtcclxuICAgICAgaWYgKGhvcml6b250YWwgIT0gdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24pIHsgLy9kb24ndCBtb2RpZnkgaGVhZGVyIHNjcm9sbCBpZiB3ZSBhcmUgc2Nyb2xsaW5nIHZlcnRpY2FsbHlcclxuICAgICAgICBsZXQgaGVhZGVyID0gdGhpcy4kZWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndnVldGFibGUtaGVhZC13cmFwcGVyJylbMF1cclxuICAgICAgICBpZiAoaGVhZGVyICE9IG51bGwpIHtcclxuICAgICAgICAgIGhlYWRlci5zY3JvbGxMZWZ0ID0gaG9yaXpvbnRhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24gPSBob3Jpem9udGFsO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSxcclxuICAgIG5vcm1hbGl6ZUZpZWxkcyAoKSB7XHJcbiAgICAgIGlmICh0eXBlb2YodGhpcy5maWVsZHMpID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHRoaXMud2FybignWW91IG5lZWQgdG8gcHJvdmlkZSBcImZpZWxkc1wiIHByb3AuJylcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy50YWJsZUZpZWxkcyA9IFtdXHJcbiAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICBsZXQgb2JqXHJcbiAgICAgIHRoaXMuZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZmllbGQsIGkpIHtcclxuICAgICAgICBpZiAodHlwZW9mIChmaWVsZCkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBvYmogPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IGZpZWxkLFxyXG4gICAgICAgICAgICB0aXRsZTogc2VsZi5zZXRUaXRsZShmaWVsZCksXHJcbiAgICAgICAgICAgIHRpdGxlQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgICBkYXRhQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogbnVsbCxcclxuICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBmaWVsZC5uYW1lLFxyXG4gICAgICAgICAgICB3aWR0aDogZmllbGQud2lkdGgsXHJcbiAgICAgICAgICAgIHRpdGxlOiAoZmllbGQudGl0bGUgPT09IHVuZGVmaW5lZCkgPyBzZWxmLnNldFRpdGxlKGZpZWxkLm5hbWUpIDogZmllbGQudGl0bGUsXHJcbiAgICAgICAgICAgIHNvcnRGaWVsZDogZmllbGQuc29ydEZpZWxkLFxyXG4gICAgICAgICAgICB0aXRsZUNsYXNzOiAoZmllbGQudGl0bGVDbGFzcyA9PT0gdW5kZWZpbmVkKSA/ICcnIDogZmllbGQudGl0bGVDbGFzcyxcclxuICAgICAgICAgICAgZGF0YUNsYXNzOiAoZmllbGQuZGF0YUNsYXNzID09PSB1bmRlZmluZWQpID8gJycgOiBmaWVsZC5kYXRhQ2xhc3MsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiAoZmllbGQuY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkgPyAnJyA6IGZpZWxkLmNhbGxiYWNrLFxyXG4gICAgICAgICAgICB2aXNpYmxlOiAoZmllbGQudmlzaWJsZSA9PT0gdW5kZWZpbmVkKSA/IHRydWUgOiBmaWVsZC52aXNpYmxlLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBzZWxmLnRhYmxlRmllbGRzLnB1c2gob2JqKVxyXG4gICAgICB9KVxyXG4gICAgfSxcclxuICAgIHNldERhdGEgKGRhdGEpIHtcclxuICAgICAgaWYgKGRhdGEgPT09IG51bGwgfHwgdHlwZW9mKGRhdGEpID09PSAndW5kZWZpbmVkJykgcmV0dXJuXHJcblxyXG4gICAgICB0aGlzLmZpcmVFdmVudCgnbG9hZGluZycpXHJcblxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xyXG4gICAgICAgIHRoaXMudGFibGVEYXRhID0gZGF0YVxyXG4gICAgICAgIHRoaXMuZmlyZUV2ZW50KCdsb2FkZWQnKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMuZ2V0T2JqZWN0VmFsdWUoZGF0YSwgdGhpcy5kYXRhUGF0aCwgbnVsbClcclxuICAgICAgdGhpcy50YWJsZVBhZ2luYXRpb24gPSB0aGlzLmdldE9iamVjdFZhbHVlKGRhdGEsIHRoaXMucGFnaW5hdGlvblBhdGgsIG51bGwpXHJcblxyXG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpIHtcclxuICAgICAgICB0aGlzLmZpeEhlYWRlcigpXHJcbiAgICAgICAgdGhpcy5maXJlRXZlbnQoJ3BhZ2luYXRpb24tZGF0YScsIHRoaXMudGFibGVQYWdpbmF0aW9uKVxyXG4gICAgICAgIHRoaXMuZmlyZUV2ZW50KCdsb2FkZWQnKVxyXG4gICAgICB9KVxyXG4gICAgfSxcclxuICAgIHNldFRpdGxlIChzdHIpIHtcclxuICAgICAgaWYgKHRoaXMuaXNTcGVjaWFsRmllbGQoc3RyKSkge1xyXG4gICAgICAgIHJldHVybiAnJ1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy50aXRsZUNhc2Uoc3RyKVxyXG4gICAgfSxcclxuICAgIGdldFRpdGxlIChmaWVsZCkge1xyXG4gICAgICBpZiAodHlwZW9mKGZpZWxkLnRpdGxlKSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZpZWxkLnRpdGxlKClcclxuXHJcbiAgICAgIHJldHVybiB0eXBlb2YoZmllbGQudGl0bGUpID09PSAndW5kZWZpbmVkJ1xyXG4gICAgICAgID8gZmllbGQubmFtZS5yZXBsYWNlKCcuJywgJyAnKVxyXG4gICAgICAgIDogZmllbGQudGl0bGVcclxuICAgIH0sXHJcbiAgICByZW5kZXJUaXRsZSAoZmllbGQpIHtcclxuICAgICAgbGV0IHRpdGxlID0gdGhpcy5nZXRUaXRsZShmaWVsZClcclxuXHJcbiAgICAgIGlmICh0aXRsZS5sZW5ndGggPiAwICYmIHRoaXMuaXNJbkN1cnJlbnRTb3J0R3JvdXAoZmllbGQpIHx8IHRoaXMuaGFzU29ydGFibGVJY29uKGZpZWxkKSkge1xyXG4gICAgICAgIGxldCBzdHlsZSA9IGBvcGFjaXR5OiR7dGhpcy5zb3J0SWNvbk9wYWNpdHkoZmllbGQpfTtwb3NpdGlvbjpyZWxhdGl2ZTtmbG9hdDpyaWdodGBcclxuICAgICAgICBsZXQgaWNvblRhZyA9IHRoaXMuc2hvd1NvcnRJY29ucyA/IHRoaXMucmVuZGVySWNvblRhZyhbJ3NvcnQtaWNvbicsIHRoaXMuc29ydEljb24oZmllbGQpXSwgYHN0eWxlPVwiJHtzdHlsZX1cImApIDogJydcclxuICAgICAgICByZXR1cm4gdGl0bGUgKyAnICcgKyBpY29uVGFnXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aXRsZVxyXG4gICAgfSxcclxuICAgIHJlbmRlclNlcXVlbmNlIChpbmRleCkge1xyXG4gICAgICByZXR1cm4gdGhpcy50YWJsZVBhZ2luYXRpb25cclxuICAgICAgICA/IHRoaXMudGFibGVQYWdpbmF0aW9uLmZyb20gKyBpbmRleFxyXG4gICAgICAgIDogaW5kZXhcclxuICAgIH0sXHJcbiAgICByZW5kZXJOb3JtYWxGaWVsZCAoZmllbGQsIGl0ZW0pIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaGFzQ2FsbGJhY2soZmllbGQpXHJcbiAgICAgICAgPyB0aGlzLmNhbGxDYWxsYmFjayhmaWVsZCwgaXRlbSlcclxuICAgICAgICA6IHRoaXMuZ2V0T2JqZWN0VmFsdWUoaXRlbSwgZmllbGQubmFtZSwgJycpXHJcbiAgICB9LFxyXG4gICAgaXNTcGVjaWFsRmllbGQgKGZpZWxkTmFtZSkge1xyXG4gICAgICByZXR1cm4gZmllbGROYW1lLnNsaWNlKDAsIDIpID09PSAnX18nXHJcbiAgICB9LFxyXG4gICAgdGl0bGVDYXNlIChzdHIpIHtcclxuICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXHcrL2csIGZ1bmN0aW9uKHR4dCkge1xyXG4gICAgICAgIHJldHVybiB0eHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0eHQuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKClcclxuICAgICAgfSlcclxuICAgIH0sXHJcbiAgICBjYW1lbENhc2UgKHN0ciwgZGVsaW1pdGVyID0gJ18nKSB7XHJcbiAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICByZXR1cm4gc3RyLnNwbGl0KGRlbGltaXRlcikubWFwKGZ1bmN0aW9uKGl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gc2VsZi50aXRsZUNhc2UoaXRlbSlcclxuICAgICAgfSkuam9pbignJylcclxuICAgIH0sXHJcbiAgICBub3RJbiAoc3RyLCBhcnIpIHtcclxuICAgICAgcmV0dXJuIGFyci5pbmRleE9mKHN0cikgPT09IC0xXHJcbiAgICB9LFxyXG4gICAgbG9hZERhdGEgKHN1Y2Nlc3MgPSB0aGlzLmxvYWRTdWNjZXNzLCBmYWlsZWQgPSB0aGlzLmxvYWRGYWlsZWQpIHtcclxuICAgICAgaWYgKHRoaXMuaXNEYXRhTW9kZSkge1xyXG4gICAgICAgIHRoaXMuY2FsbERhdGFNYW5hZ2VyKClcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5maXJlRXZlbnQoJ2xvYWRpbmcnKVxyXG5cclxuICAgICAgdGhpcy5odHRwT3B0aW9uc1sncGFyYW1zJ10gPSB0aGlzLmdldEFwcGVuZFBhcmFtcyggdGhpcy5nZXRBbGxRdWVyeVBhcmFtcygpIClcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmZldGNoKHRoaXMuYXBpVXJsLCB0aGlzLmh0dHBPcHRpb25zKS50aGVuKFxyXG4gICAgICAgICAgc3VjY2VzcyxcclxuICAgICAgICAgIGZhaWxlZFxyXG4gICAgICApLmNhdGNoKCgpID0+IGZhaWxlZCgpKVxyXG4gICAgfSxcclxuICAgIGZldGNoIChhcGlVcmwsIGh0dHBPcHRpb25zKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHBGZXRjaFxyXG4gICAgICAgICAgPyB0aGlzLmh0dHBGZXRjaChhcGlVcmwsIGh0dHBPcHRpb25zKVxyXG4gICAgICAgICAgOiBheGlvc1t0aGlzLmh0dHBNZXRob2RdKGFwaVVybCwgaHR0cE9wdGlvbnMpXHJcbiAgICB9LFxyXG4gICAgbG9hZFN1Y2Nlc3MgKHJlc3BvbnNlKSB7XHJcbiAgICAgIHRoaXMuZmlyZUV2ZW50KCdsb2FkLXN1Y2Nlc3MnLCByZXNwb25zZSlcclxuXHJcbiAgICAgIGxldCBib2R5ID0gdGhpcy50cmFuc2Zvcm0ocmVzcG9uc2UuZGF0YSlcclxuXHJcbiAgICAgIHRoaXMudGFibGVEYXRhID0gdGhpcy5nZXRPYmplY3RWYWx1ZShib2R5LCB0aGlzLmRhdGFQYXRoLCBudWxsKVxyXG4gICAgICB0aGlzLnRhYmxlUGFnaW5hdGlvbiA9IHRoaXMuZ2V0T2JqZWN0VmFsdWUoYm9keSwgdGhpcy5wYWdpbmF0aW9uUGF0aCwgbnVsbClcclxuXHJcbiAgICAgIGlmICh0aGlzLnRhYmxlUGFnaW5hdGlvbiA9PT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMud2FybigndnVldGFibGU6IHBhZ2luYXRpb24tcGF0aCBcIicgKyB0aGlzLnBhZ2luYXRpb25QYXRoICsgJ1wiIG5vdCBmb3VuZC4gJ1xyXG4gICAgICAgICAgKyAnSXQgbG9va3MgbGlrZSB0aGUgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXZlciBkb2VzIG5vdCBoYXZlIHBhZ2luYXRpb24gaW5mb3JtYXRpb24gJ1xyXG4gICAgICAgICAgKyBcIm9yIHlvdSBtYXkgaGF2ZSBzZXQgaXQgaW5jb3JyZWN0bHkuXFxuXCJcclxuICAgICAgICAgICsgJ1lvdSBjYW4gZXhwbGljaXRseSBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgYnkgc2V0dGluZyBwYWdpbmF0aW9uLXBhdGg9XCJcIi4nXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpIHtcclxuICAgICAgICB0aGlzLmZpeEhlYWRlcigpXHJcbiAgICAgICAgdGhpcy5maXJlRXZlbnQoJ3BhZ2luYXRpb24tZGF0YScsIHRoaXMudGFibGVQYWdpbmF0aW9uKVxyXG4gICAgICAgIHRoaXMuZmlyZUV2ZW50KCdsb2FkZWQnKVxyXG4gICAgICB9KVxyXG4gICAgfSxcclxuICAgIGZpeEhlYWRlcigpIHtcclxuICAgICAgaWYgKCF0aGlzLmlzRml4ZWRIZWFkZXIpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBlbGVtID0gdGhpcy4kZWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndnVldGFibGUtYm9keS13cmFwcGVyJylbMF1cclxuICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChlbGVtLnNjcm9sbEhlaWdodCA+IGVsZW0uY2xpZW50SGVpZ2h0KSB7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbFZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGxvYWRGYWlsZWQgKHJlc3BvbnNlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2xvYWQtZXJyb3InLCByZXNwb25zZSlcclxuICAgICAgdGhpcy5maXJlRXZlbnQoJ2xvYWQtZXJyb3InLCByZXNwb25zZSlcclxuICAgICAgdGhpcy5maXJlRXZlbnQoJ2xvYWRlZCcpXHJcbiAgICB9LFxyXG4gICAgdHJhbnNmb3JtIChkYXRhKSB7XHJcbiAgICAgIGxldCBmdW5jID0gJ3RyYW5zZm9ybSdcclxuXHJcbiAgICAgIGlmICh0aGlzLnBhcmVudEZ1bmN0aW9uRXhpc3RzKGZ1bmMpKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy4kcGFyZW50W2Z1bmNdLmNhbGwodGhpcy4kcGFyZW50LCBkYXRhKVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZGF0YVxyXG4gICAgfSxcclxuICAgIHBhcmVudEZ1bmN0aW9uRXhpc3RzIChmdW5jKSB7XHJcbiAgICAgIHJldHVybiAoZnVuYyAhPT0gJycgJiYgdHlwZW9mIHRoaXMuJHBhcmVudFtmdW5jXSA9PT0gJ2Z1bmN0aW9uJylcclxuICAgIH0sXHJcbiAgICBjYWxsUGFyZW50RnVuY3Rpb24gKGZ1bmMsIGFyZ3MsIGRlZmF1bHRWYWx1ZSA9IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMucGFyZW50RnVuY3Rpb25FeGlzdHMoZnVuYykpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kcGFyZW50W2Z1bmNdLmNhbGwodGhpcy4kcGFyZW50LCBhcmdzKVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlXHJcbiAgICB9LFxyXG4gICAgZmlyZUV2ZW50IChldmVudE5hbWUsIGFyZ3MpIHtcclxuICAgICAgdGhpcy4kZW1pdCh0aGlzLmV2ZW50UHJlZml4ICsgZXZlbnROYW1lLCBhcmdzKVxyXG4gICAgfSxcclxuICAgIHdhcm4gKG1zZykge1xyXG4gICAgICBpZiAoIXRoaXMuc2lsZW50KSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKG1zZylcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGdldEFsbFF1ZXJ5UGFyYW1zICgpIHtcclxuICAgICAgbGV0IHBhcmFtcyA9IHt9XHJcblxyXG4gICAgICBpZiAodHlwZW9mKHRoaXMucXVlcnlQYXJhbXMpID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcGFyYW1zID0gdGhpcy5xdWVyeVBhcmFtcyh0aGlzLnNvcnRPcmRlciwgdGhpcy5jdXJyZW50UGFnZSwgdGhpcy5wZXJQYWdlKVxyXG4gICAgICAgIHJldHVybiB0eXBlb2YocGFyYW1zKSAhPT0gJ29iamVjdCcgPyB7fSA6IHBhcmFtc1xyXG4gICAgICB9XHJcblxyXG4gICAgICBwYXJhbXNbdGhpcy5xdWVyeVBhcmFtcy5zb3J0XSA9IHRoaXMuZ2V0U29ydFBhcmFtKClcclxuICAgICAgcGFyYW1zW3RoaXMucXVlcnlQYXJhbXMucGFnZV0gPSB0aGlzLmN1cnJlbnRQYWdlXHJcbiAgICAgIHBhcmFtc1t0aGlzLnF1ZXJ5UGFyYW1zLnBlclBhZ2VdID0gdGhpcy5wZXJQYWdlXHJcblxyXG4gICAgICByZXR1cm4gcGFyYW1zXHJcbiAgICB9LFxyXG4gICAgZ2V0U29ydFBhcmFtICgpIHtcclxuICAgICAgaWYgKCF0aGlzLnNvcnRPcmRlciB8fCB0aGlzLnNvcnRPcmRlci5maWVsZCA9PSAnJykge1xyXG4gICAgICAgIHJldHVybiAnJ1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHRoaXMuJHBhcmVudFsnZ2V0U29ydFBhcmFtJ10gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kcGFyZW50WydnZXRTb3J0UGFyYW0nXS5jYWxsKHRoaXMuJHBhcmVudCwgdGhpcy5zb3J0T3JkZXIpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmdldERlZmF1bHRTb3J0UGFyYW0oKVxyXG4gICAgfSxcclxuICAgIGdldERlZmF1bHRTb3J0UGFyYW0gKCkge1xyXG4gICAgICBsZXQgcmVzdWx0ID0gJyc7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc29ydE9yZGVyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGZpZWxkTmFtZSA9ICh0eXBlb2YgdGhpcy5zb3J0T3JkZXJbaV0uc29ydEZpZWxkID09PSAndW5kZWZpbmVkJylcclxuICAgICAgICAgID8gdGhpcy5zb3J0T3JkZXJbaV0uZmllbGRcclxuICAgICAgICAgIDogdGhpcy5zb3J0T3JkZXJbaV0uc29ydEZpZWxkO1xyXG5cclxuICAgICAgICByZXN1bHQgKz0gZmllbGROYW1lICsgJ3wnICsgdGhpcy5zb3J0T3JkZXJbaV0uZGlyZWN0aW9uICsgKChpKzEpIDwgdGhpcy5zb3J0T3JkZXIubGVuZ3RoID8gJywnIDogJycpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9LFxyXG4gICAgZ2V0QXBwZW5kUGFyYW1zIChwYXJhbXMpIHtcclxuICAgICAgZm9yIChsZXQgeCBpbiB0aGlzLmFwcGVuZFBhcmFtcykge1xyXG4gICAgICAgIHBhcmFtc1t4XSA9IHRoaXMuYXBwZW5kUGFyYW1zW3hdXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBwYXJhbXNcclxuICAgIH0sXHJcbiAgICBleHRyYWN0TmFtZSAoc3RyaW5nKSB7XHJcbiAgICAgIHJldHVybiBzdHJpbmcuc3BsaXQoJzonKVswXS50cmltKClcclxuICAgIH0sXHJcbiAgICBleHRyYWN0QXJncyAoc3RyaW5nKSB7XHJcbiAgICAgIHJldHVybiBzdHJpbmcuc3BsaXQoJzonKVsxXVxyXG4gICAgfSxcclxuICAgIGlzU29ydGFibGUgKGZpZWxkKSB7XHJcbiAgICAgIHJldHVybiAhKHR5cGVvZiBmaWVsZC5zb3J0RmllbGQgPT09ICd1bmRlZmluZWQnKVxyXG4gICAgfSxcclxuICAgIGlzSW5DdXJyZW50U29ydEdyb3VwIChmaWVsZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50U29ydE9yZGVyUG9zaXRpb24oZmllbGQpICE9PSBmYWxzZTtcclxuICAgIH0sXHJcbiAgICBoYXNTb3J0YWJsZUljb24gKGZpZWxkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmlzU29ydGFibGUoZmllbGQpICYmIHRoaXMuY3NzLnNvcnRhYmxlSWNvbiAhPSAnJ1xyXG4gICAgfSxcclxuICAgIGN1cnJlbnRTb3J0T3JkZXJQb3NpdGlvbiAoZmllbGQpIHtcclxuICAgICAgaWYgKCAhIHRoaXMuaXNTb3J0YWJsZShmaWVsZCkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNvcnRPcmRlci5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0aGlzLmZpZWxkSXNJblNvcnRPcmRlclBvc2l0aW9uKGZpZWxkLCBpKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG4gICAgZmllbGRJc0luU29ydE9yZGVyUG9zaXRpb24gKGZpZWxkLCBpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNvcnRPcmRlcltpXS5maWVsZCA9PT0gZmllbGQubmFtZSAmJiB0aGlzLnNvcnRPcmRlcltpXS5zb3J0RmllbGQgPT09IGZpZWxkLnNvcnRGaWVsZFxyXG4gICAgfSxcclxuICAgIG9yZGVyQnkgKGZpZWxkLCBldmVudCkge1xyXG4gICAgICBpZiAoICEgdGhpcy5pc1NvcnRhYmxlKGZpZWxkKSApIHJldHVyblxyXG5cclxuICAgICAgbGV0IGtleSA9IHRoaXMubXVsdGlTb3J0S2V5LnRvTG93ZXJDYXNlKCkgKyAnS2V5J1xyXG5cclxuICAgICAgaWYgKHRoaXMubXVsdGlTb3J0ICYmIGV2ZW50W2tleV0pIHsgLy9hZGRpbmcgY29sdW1uIHRvIG11bHRpc29ydFxyXG4gICAgICAgIHRoaXMubXVsdGlDb2x1bW5Tb3J0KGZpZWxkKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vbm8gbXVsdGlzb3J0LCBvciByZXNldHRpbmcgc29ydFxyXG4gICAgICAgIHRoaXMuc2luZ2xlQ29sdW1uU29ydChmaWVsZClcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDEgICAgLy8gcmVzZXQgcGFnZSBpbmRleFxyXG4gICAgICBpZiAodGhpcy5hcGlNb2RlIHx8IHRoaXMuZGF0YU1hbmFnZXIpIHtcclxuICAgICAgICB0aGlzLmxvYWREYXRhKClcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIG11bHRpQ29sdW1uU29ydCAoZmllbGQpIHtcclxuICAgICAgbGV0IGkgPSB0aGlzLmN1cnJlbnRTb3J0T3JkZXJQb3NpdGlvbihmaWVsZCk7XHJcblxyXG4gICAgICBpZihpID09PSBmYWxzZSkgeyAvL3RoaXMgZmllbGQgaXMgbm90IGluIHRoZSBzb3J0IGFycmF5IHlldFxyXG4gICAgICAgIHRoaXMuc29ydE9yZGVyLnB1c2goe1xyXG4gICAgICAgICAgZmllbGQ6IGZpZWxkLm5hbWUsXHJcbiAgICAgICAgICBzb3J0RmllbGQ6IGZpZWxkLnNvcnRGaWVsZCxcclxuICAgICAgICAgIGRpcmVjdGlvbjogJ2FzYydcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHsgLy90aGlzIGZpZWxkIGlzIGluIHRoZSBzb3J0IGFycmF5LCBub3cgd2UgY2hhbmdlIGl0cyBzdGF0ZVxyXG4gICAgICAgIGlmKHRoaXMuc29ydE9yZGVyW2ldLmRpcmVjdGlvbiA9PT0gJ2FzYycpIHtcclxuICAgICAgICAgIC8vIHN3aXRjaCBkaXJlY3Rpb25cclxuICAgICAgICAgIHRoaXMuc29ydE9yZGVyW2ldLmRpcmVjdGlvbiA9ICdkZXNjJ1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvL3JlbW92ZSBzb3J0IGNvbmRpdGlvblxyXG4gICAgICAgICAgdGhpcy5zb3J0T3JkZXIuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHNpbmdsZUNvbHVtblNvcnQgKGZpZWxkKSB7XHJcbiAgICAgIGlmICh0aGlzLnNvcnRPcmRlci5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLmNsZWFyU29ydE9yZGVyKClcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zb3J0T3JkZXIuc3BsaWNlKDEpOyAvL3JlbW92ZXMgYWRkaXRpb25hbCBjb2x1bW5zXHJcblxyXG4gICAgICBpZiAodGhpcy5maWVsZElzSW5Tb3J0T3JkZXJQb3NpdGlvbihmaWVsZCwgMCkpIHtcclxuICAgICAgICAvLyBjaGFuZ2Ugc29ydCBkaXJlY3Rpb25cclxuICAgICAgICB0aGlzLnNvcnRPcmRlclswXS5kaXJlY3Rpb24gPSB0aGlzLnNvcnRPcmRlclswXS5kaXJlY3Rpb24gPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYydcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyByZXNldCBzb3J0IGRpcmVjdGlvblxyXG4gICAgICAgIHRoaXMuc29ydE9yZGVyWzBdLmRpcmVjdGlvbiA9ICdhc2MnXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zb3J0T3JkZXJbMF0uZmllbGQgPSBmaWVsZC5uYW1lXHJcbiAgICAgIHRoaXMuc29ydE9yZGVyWzBdLnNvcnRGaWVsZCA9IGZpZWxkLnNvcnRGaWVsZFxyXG4gICAgfSxcclxuICAgIGNsZWFyU29ydE9yZGVyICgpIHtcclxuICAgICAgdGhpcy5zb3J0T3JkZXIucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICcnLFxyXG4gICAgICAgIHNvcnRGaWVsZDogJycsXHJcbiAgICAgICAgZGlyZWN0aW9uOiAnYXNjJ1xyXG4gICAgICB9KTtcclxuICAgIH0sXHJcbiAgICBzb3J0Q2xhc3MgKGZpZWxkKSB7XHJcbiAgICAgIGxldCBjbHMgPSAnJ1xyXG4gICAgICBsZXQgaSA9IHRoaXMuY3VycmVudFNvcnRPcmRlclBvc2l0aW9uKGZpZWxkKVxyXG5cclxuICAgICAgaWYgKGkgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgY2xzID0gKHRoaXMuc29ydE9yZGVyW2ldLmRpcmVjdGlvbiA9PSAnYXNjJykgPyB0aGlzLmNzcy5hc2NlbmRpbmdDbGFzcyA6IHRoaXMuY3NzLmRlc2NlbmRpbmdDbGFzc1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gY2xzXHJcbiAgICB9LFxyXG4gICAgc29ydEljb24gKGZpZWxkKSB7XHJcbiAgICAgIGxldCBjbHMgPSB0aGlzLmNzcy5zb3J0YWJsZUljb25cclxuICAgICAgbGV0IGkgPSB0aGlzLmN1cnJlbnRTb3J0T3JkZXJQb3NpdGlvbihmaWVsZClcclxuXHJcbiAgICAgIGlmIChpICE9PSBmYWxzZSkge1xyXG4gICAgICAgIGNscyA9ICh0aGlzLnNvcnRPcmRlcltpXS5kaXJlY3Rpb24gPT0gJ2FzYycpID8gdGhpcy5jc3MuYXNjZW5kaW5nSWNvbiA6IHRoaXMuY3NzLmRlc2NlbmRpbmdJY29uXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjbHM7XHJcbiAgICB9LFxyXG4gICAgc29ydEljb25PcGFjaXR5IChmaWVsZCkge1xyXG4gICAgICAvKlxyXG4gICAgICAgKiBmaWVsZHMgd2l0aCBzdHJvbmdlciBwcmVjZWRlbmNlIGhhdmUgZGFya2VyIGNvbG9yXHJcbiAgICAgICAqXHJcbiAgICAgICAqIGlmIHRoZXJlIGFyZSBmZXcgZmllbGRzLCB3ZSBnbyBkb3duIGJ5IDAuM1xyXG4gICAgICAgKiBleC4gMiBmaWVsZHMgYXJlIHNlbGVjdGVkOiAxLjAsIDAuN1xyXG4gICAgICAgKlxyXG4gICAgICAgKiBpZiB0aGVyZSBhcmUgbW9yZSB3ZSBnbyBkb3duIGV2ZW5seSBvbiB0aGUgZ2l2ZW4gc3BlY3RydW1cclxuICAgICAgICogZXguIDYgZmllbGRzIGFyZSBzZWxlY3RlZDogMS4wLCAwLjg2LCAwLjcyLCAwLjU4LCAwLjQ0LCAwLjNcclxuICAgICAgICovXHJcbiAgICAgIGxldCBtYXggPSAxLjAsXHJcbiAgICAgICAgICBtaW4gPSAwLjMsXHJcbiAgICAgICAgICBzdGVwID0gMC4zXHJcblxyXG4gICAgICBsZXQgY291bnQgPSB0aGlzLnNvcnRPcmRlci5sZW5ndGg7XHJcbiAgICAgIGxldCBjdXJyZW50ID0gdGhpcy5jdXJyZW50U29ydE9yZGVyUG9zaXRpb24oZmllbGQpXHJcblxyXG5cclxuICAgICAgaWYobWF4IC0gY291bnQgKiBzdGVwIDwgbWluKSB7XHJcbiAgICAgICAgc3RlcCA9IChtYXggLSBtaW4pIC8gKGNvdW50LTEpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBvcGFjaXR5ID0gbWF4IC0gY3VycmVudCAqIHN0ZXBcclxuXHJcbiAgICAgIHJldHVybiBvcGFjaXR5XHJcbiAgICB9LFxyXG4gICAgaGFzQ2FsbGJhY2sgKGl0ZW0pIHtcclxuICAgICAgcmV0dXJuIGl0ZW0uY2FsbGJhY2sgPyB0cnVlIDogZmFsc2VcclxuICAgIH0sXHJcbiAgICBjYWxsQ2FsbGJhY2sgKGZpZWxkLCBpdGVtKSB7XHJcbiAgICAgIGlmICggISB0aGlzLmhhc0NhbGxiYWNrKGZpZWxkKSkgcmV0dXJuXHJcblxyXG4gICAgICBpZih0eXBlb2YoZmllbGQuY2FsbGJhY2spID09ICdmdW5jdGlvbicpIHtcclxuICAgICAgIHJldHVybiBmaWVsZC5jYWxsYmFjayh0aGlzLmdldE9iamVjdFZhbHVlKGl0ZW0sIGZpZWxkLm5hbWUpKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgYXJncyA9IGZpZWxkLmNhbGxiYWNrLnNwbGl0KCd8JylcclxuICAgICAgbGV0IGZ1bmMgPSBhcmdzLnNoaWZ0KClcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy4kcGFyZW50W2Z1bmNdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRPYmplY3RWYWx1ZShpdGVtLCBmaWVsZC5uYW1lKVxyXG5cclxuICAgICAgICByZXR1cm4gKGFyZ3MubGVuZ3RoID4gMClcclxuICAgICAgICAgID8gdGhpcy4kcGFyZW50W2Z1bmNdLmFwcGx5KHRoaXMuJHBhcmVudCwgW3ZhbHVlXS5jb25jYXQoYXJncykpXHJcbiAgICAgICAgICA6IHRoaXMuJHBhcmVudFtmdW5jXS5jYWxsKHRoaXMuJHBhcmVudCwgdmFsdWUpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBudWxsXHJcbiAgICB9LFxyXG4gICAgZ2V0T2JqZWN0VmFsdWUgKG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgIGRlZmF1bHRWYWx1ZSA9ICh0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAndW5kZWZpbmVkJykgPyBudWxsIDogZGVmYXVsdFZhbHVlXHJcblxyXG4gICAgICBsZXQgb2JqID0gb2JqZWN0XHJcbiAgICAgIGlmIChwYXRoLnRyaW0oKSAhPSAnJykge1xyXG4gICAgICAgIGxldCBrZXlzID0gcGF0aC5zcGxpdCgnLicpXHJcbiAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgICAgICAgaWYgKG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqW2tleV0gIT09ICd1bmRlZmluZWQnICYmIG9ialtrZXldICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIG9iaiA9IG9ialtrZXldXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvYmogPSBkZWZhdWx0VmFsdWVcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gb2JqXHJcbiAgICB9LFxyXG4gICAgdG9nZ2xlQ2hlY2tib3ggKGRhdGFJdGVtLCBmaWVsZE5hbWUsIGV2ZW50KSB7XHJcbiAgICAgIGxldCBpc0NoZWNrZWQgPSBldmVudC50YXJnZXQuY2hlY2tlZFxyXG4gICAgICBsZXQgaWRDb2x1bW4gPSB0aGlzLnRyYWNrQnlcclxuXHJcbiAgICAgIGlmIChkYXRhSXRlbVtpZENvbHVtbl0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMud2FybignX19jaGVja2JveCBmaWVsZDogVGhlIFwiJyt0aGlzLnRyYWNrQnkrJ1wiIGZpZWxkIGRvZXMgbm90IGV4aXN0ISBNYWtlIHN1cmUgdGhlIGZpZWxkIHlvdSBzcGVjaWZ5IGluIFwidHJhY2stYnlcIiBwcm9wIGRvZXMgZXhpc3QuJylcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGtleSA9IGRhdGFJdGVtW2lkQ29sdW1uXVxyXG4gICAgICBpZiAoaXNDaGVja2VkKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZChrZXkpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy51bnNlbGVjdElkKGtleSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLiRlbWl0KCd2dWV0YWJsZTpjaGVja2JveC10b2dnbGVkJywgaXNDaGVja2VkLCBkYXRhSXRlbSlcclxuICAgIH0sXHJcbiAgICBzZWxlY3RJZCAoa2V5KSB7XHJcbiAgICAgIGlmICggISB0aGlzLmlzU2VsZWN0ZWRSb3coa2V5KSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUby5wdXNoKGtleSlcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHVuc2VsZWN0SWQgKGtleSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVG8gPSB0aGlzLnNlbGVjdGVkVG8uZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gaXRlbSAhPT0ga2V5XHJcbiAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgaXNTZWxlY3RlZFJvdyAoa2V5KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVG8uaW5kZXhPZihrZXkpID49IDBcclxuICAgIH0sXHJcbiAgICByb3dTZWxlY3RlZCAoZGF0YUl0ZW0sIGZpZWxkTmFtZSl7XHJcbiAgICAgIGxldCBpZENvbHVtbiA9IHRoaXMudHJhY2tCeVxyXG4gICAgICBsZXQga2V5ID0gZGF0YUl0ZW1baWRDb2x1bW5dXHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5pc1NlbGVjdGVkUm93KGtleSlcclxuICAgIH0sXHJcbiAgICBjaGVja0NoZWNrYm94ZXNTdGF0ZSAoZmllbGROYW1lKSB7XHJcbiAgICAgIGlmICghIHRoaXMudGFibGVEYXRhKSByZXR1cm5cclxuXHJcbiAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICBsZXQgaWRDb2x1bW4gPSB0aGlzLnRyYWNrQnlcclxuICAgICAgbGV0IHNlbGVjdG9yID0gJ3RoLnZ1ZXRhYmxlLXRoLWNoZWNrYm94LScgKyBpZENvbHVtbiArICcgaW5wdXRbdHlwZT1jaGVja2JveF0nXHJcbiAgICAgIGxldCBlbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKVxyXG5cclxuICAgICAgLy9maXhlZDpkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsIHJldHVybiB0aGUgdHlwZW9mIG5vZGVMaXN0IG5vdCBhcnJheVxyXG4gICAgICBpZiAoZWxzLmZvckVhY2g9PT11bmRlZmluZWQpXHJcbiAgICAgICAgZWxzLmZvckVhY2g9ZnVuY3Rpb24oY2Ipe1xyXG4gICAgICAgICAgW10uZm9yRWFjaC5jYWxsKGVscywgY2IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIC8vIGNvdW50IGhvdyBtYW55IGNoZWNrYm94IHJvdyBpbiB0aGUgY3VycmVudCBwYWdlIGhhcyBiZWVuIGNoZWNrZWRcclxuICAgICAgbGV0IHNlbGVjdGVkID0gdGhpcy50YWJsZURhdGEuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gc2VsZi5zZWxlY3RlZFRvLmluZGV4T2YoaXRlbVtpZENvbHVtbl0pID49IDBcclxuICAgICAgfSlcclxuXHJcbiAgICAgIC8vIGNvdW50ID09IDAsIGNsZWFyIHRoZSBjaGVja2JveFxyXG4gICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoIDw9IDApIHtcclxuICAgICAgICBlbHMuZm9yRWFjaChmdW5jdGlvbihlbCkge1xyXG4gICAgICAgICAgZWwuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlXHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgfVxyXG4gICAgICAvLyBjb3VudCA+IDAgYW5kIGNvdW50IDwgcGVyUGFnZSwgc2V0IGNoZWNrYm94IHN0YXRlIHRvICdpbmRldGVybWluYXRlJ1xyXG4gICAgICBlbHNlIGlmIChzZWxlY3RlZC5sZW5ndGggPCB0aGlzLnBlclBhZ2UpIHtcclxuICAgICAgICBlbHMuZm9yRWFjaChmdW5jdGlvbihlbCkge1xyXG4gICAgICAgICAgZWwuaW5kZXRlcm1pbmF0ZSA9IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH1cclxuICAgICAgLy8gY291bnQgPT0gcGVyUGFnZSwgc2V0IGNoZWNrYm94IHN0YXRlIHRvICdjaGVja2VkJ1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBlbHMuZm9yRWFjaChmdW5jdGlvbihlbCkge1xyXG4gICAgICAgICAgZWwuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlXHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgdG9nZ2xlQWxsQ2hlY2tib3hlcyAoZmllbGROYW1lLCBldmVudCkge1xyXG4gICAgICBsZXQgc2VsZiA9IHRoaXNcclxuICAgICAgbGV0IGlzQ2hlY2tlZCA9IGV2ZW50LnRhcmdldC5jaGVja2VkXHJcbiAgICAgIGxldCBpZENvbHVtbiA9IHRoaXMudHJhY2tCeVxyXG5cclxuICAgICAgaWYgKGlzQ2hlY2tlZCkge1xyXG4gICAgICAgIHRoaXMudGFibGVEYXRhLmZvckVhY2goZnVuY3Rpb24oZGF0YUl0ZW0pIHtcclxuICAgICAgICAgIHNlbGYuc2VsZWN0SWQoZGF0YUl0ZW1baWRDb2x1bW5dKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50YWJsZURhdGEuZm9yRWFjaChmdW5jdGlvbihkYXRhSXRlbSkge1xyXG4gICAgICAgICAgc2VsZi51bnNlbGVjdElkKGRhdGFJdGVtW2lkQ29sdW1uXSlcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuJGVtaXQoJ3Z1ZXRhYmxlOmNoZWNrYm94LXRvZ2dsZWQtYWxsJywgaXNDaGVja2VkKVxyXG4gICAgfSxcclxuICAgIGdvdG9QcmV2aW91c1BhZ2UgKCkge1xyXG4gICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IDEpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlLS1cclxuICAgICAgICB0aGlzLmxvYWREYXRhKClcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGdvdG9OZXh0UGFnZSAoKSB7XHJcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlIDwgdGhpcy50YWJsZVBhZ2luYXRpb24ubGFzdF9wYWdlKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSsrXHJcbiAgICAgICAgdGhpcy5sb2FkRGF0YSgpXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBnb3RvUGFnZSAocGFnZSkge1xyXG4gICAgICBpZiAocGFnZSAhPSB0aGlzLmN1cnJlbnRQYWdlICYmIChwYWdlID4gMCAmJiBwYWdlIDw9IHRoaXMudGFibGVQYWdpbmF0aW9uLmxhc3RfcGFnZSkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZVxyXG4gICAgICAgIHRoaXMubG9hZERhdGEoKVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgaXNWaXNpYmxlRGV0YWlsUm93IChyb3dJZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy52aXNpYmxlRGV0YWlsUm93cy5pbmRleE9mKCByb3dJZCApID49IDBcclxuICAgIH0sXHJcbiAgICBzaG93RGV0YWlsUm93IChyb3dJZCkge1xyXG4gICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlRGV0YWlsUm93KHJvd0lkKSkge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZURldGFpbFJvd3MucHVzaChyb3dJZClcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGhpZGVEZXRhaWxSb3cgKHJvd0lkKSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVmlzaWJsZURldGFpbFJvdyhyb3dJZCkpIHtcclxuICAgICAgICB0aGlzLnZpc2libGVEZXRhaWxSb3dzLnNwbGljZShcclxuICAgICAgICAgIHRoaXMudmlzaWJsZURldGFpbFJvd3MuaW5kZXhPZihyb3dJZCksXHJcbiAgICAgICAgICAxXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgdG9nZ2xlRGV0YWlsUm93IChyb3dJZCkge1xyXG4gICAgICBpZiAodGhpcy5pc1Zpc2libGVEZXRhaWxSb3cocm93SWQpKSB7XHJcbiAgICAgICAgdGhpcy5oaWRlRGV0YWlsUm93KHJvd0lkKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2hvd0RldGFpbFJvdyhyb3dJZClcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHNob3dGaWVsZCAoaW5kZXgpIHtcclxuICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHRoaXMudGFibGVGaWVsZHMubGVuZ3RoKSByZXR1cm5cclxuXHJcbiAgICAgIHRoaXMudGFibGVGaWVsZHNbaW5kZXhdLnZpc2libGUgPSB0cnVlXHJcbiAgICB9LFxyXG4gICAgaGlkZUZpZWxkIChpbmRleCkge1xyXG4gICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gdGhpcy50YWJsZUZpZWxkcy5sZW5ndGgpIHJldHVyblxyXG5cclxuICAgICAgdGhpcy50YWJsZUZpZWxkc1tpbmRleF0udmlzaWJsZSA9IGZhbHNlXHJcbiAgICB9LFxyXG4gICAgdG9nZ2xlRmllbGQgKGluZGV4KSB7XHJcbiAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiB0aGlzLnRhYmxlRmllbGRzLmxlbmd0aCkgcmV0dXJuXHJcblxyXG4gICAgICB0aGlzLnRhYmxlRmllbGRzW2luZGV4XS52aXNpYmxlID0gISB0aGlzLnRhYmxlRmllbGRzW2luZGV4XS52aXNpYmxlXHJcbiAgICB9LFxyXG4gICAgcmVuZGVySWNvblRhZyAoY2xhc3Nlcywgb3B0aW9ucyA9ICcnKSB7XHJcbiAgICAgIHJldHVybiB0eXBlb2YodGhpcy5jc3MucmVuZGVySWNvbikgPT09ICd1bmRlZmluZWQnXHJcbiAgICAgICAgPyBgPGkgY2xhc3M9XCIke2NsYXNzZXMuam9pbignICcpfVwiICR7b3B0aW9uc30+PC9pPmBcclxuICAgICAgICA6IHRoaXMuY3NzLnJlbmRlckljb24oY2xhc3Nlcywgb3B0aW9ucylcclxuICAgIH0sXHJcbiAgICBtYWtlUGFnaW5hdGlvbiAodG90YWwgPSBudWxsLCBwZXJQYWdlID0gbnVsbCwgY3VycmVudFBhZ2UgPSBudWxsKSB7XHJcbiAgICAgIGxldCBwYWdpbmF0aW9uID0ge31cclxuICAgICAgdG90YWwgPSB0b3RhbCA9PT0gbnVsbCA/IHRoaXMuZGF0YVRvdGFsIDogdG90YWxcclxuICAgICAgcGVyUGFnZSA9IHBlclBhZ2UgPT09IG51bGwgPyB0aGlzLnBlclBhZ2UgOiBwZXJQYWdlXHJcbiAgICAgIGN1cnJlbnRQYWdlID0gY3VycmVudFBhZ2UgPT09IG51bGwgPyB0aGlzLmN1cnJlbnRQYWdlIDogY3VycmVudFBhZ2VcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgJ3RvdGFsJzogdG90YWwsXHJcbiAgICAgICAgJ3Blcl9wYWdlJzogcGVyUGFnZSxcclxuICAgICAgICAnY3VycmVudF9wYWdlJzogY3VycmVudFBhZ2UsXHJcbiAgICAgICAgJ2xhc3RfcGFnZSc6IE1hdGguY2VpbCh0b3RhbCAvIHBlclBhZ2UpIHx8IDAsXHJcbiAgICAgICAgJ25leHRfcGFnZV91cmwnOiAnJyxcclxuICAgICAgICAncHJldl9wYWdlX3VybCc6ICcnLFxyXG4gICAgICAgICdmcm9tJzogKGN1cnJlbnRQYWdlIC0xKSAqIHBlclBhZ2UgKzEsXHJcbiAgICAgICAgJ3RvJzogTWF0aC5taW4oY3VycmVudFBhZ2UgKiBwZXJQYWdlLCB0b3RhbClcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIG5vcm1hbGl6ZVNvcnRPcmRlciAoKSB7XHJcbiAgICAgIHRoaXMuc29ydE9yZGVyLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xyXG4gICAgICAgIGl0ZW0uc29ydEZpZWxkID0gaXRlbS5zb3J0RmllbGQgfHwgaXRlbS5maWVsZFxyXG4gICAgICB9KVxyXG4gICAgfSxcclxuICAgIGNhbGxEYXRhTWFuYWdlciAoKSB7XHJcbiAgICAgIGlmICh0aGlzLmRhdGFNYW5hZ2VyID09PSBudWxsICYmIHRoaXMuZGF0YSA9PT0gbnVsbCkgcmV0dXJuXHJcblxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RGF0YSh0aGlzLmRhdGEpXHJcbiAgICAgIH0gXHJcbiAgICAgIFxyXG4gICAgICB0aGlzLm5vcm1hbGl6ZVNvcnRPcmRlcigpXHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5zZXREYXRhKFxyXG4gICAgICAgIHRoaXMuZGF0YU1hbmFnZXJcclxuICAgICAgICAgID8gdGhpcy5kYXRhTWFuYWdlcih0aGlzLnNvcnRPcmRlciwgdGhpcy5tYWtlUGFnaW5hdGlvbigpKVxyXG4gICAgICAgICAgOiB0aGlzLmRhdGFcclxuICAgICAgKVxyXG4gICAgfSxcclxuICAgIG9uUm93Q2xhc3MgKGRhdGFJdGVtLCBpbmRleCkge1xyXG4gICAgICBpZiAodGhpcy5yb3dDbGFzc0NhbGxiYWNrICE9PSAnJykge1xyXG4gICAgICAgIHRoaXMud2FybignXCJyb3ctY2xhc3MtY2FsbGJhY2tcIiBwcm9wIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgXCJyb3ctY2xhc3NcIiBwcm9wIGluc3RlYWQuJylcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHR5cGVvZih0aGlzLnJvd0NsYXNzKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJvd0NsYXNzKGRhdGFJdGVtLCBpbmRleClcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMucm93Q2xhc3NcclxuICAgIH0sXHJcbiAgICBvblJvd0NoYW5nZWQgKGRhdGFJdGVtKSB7XHJcbiAgICAgIHRoaXMuZmlyZUV2ZW50KCdyb3ctY2hhbmdlZCcsIGRhdGFJdGVtKVxyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfSxcclxuICAgIG9uUm93Q2xpY2tlZCAoZGF0YUl0ZW0sIGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuJGVtaXQodGhpcy5ldmVudFByZWZpeCArICdyb3ctY2xpY2tlZCcsIGRhdGFJdGVtLCBldmVudClcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH0sXHJcbiAgICBvblJvd0RvdWJsZUNsaWNrZWQgKGRhdGFJdGVtLCBldmVudCkge1xyXG4gICAgICB0aGlzLiRlbWl0KHRoaXMuZXZlbnRQcmVmaXggKyAncm93LWRibGNsaWNrZWQnLCBkYXRhSXRlbSwgZXZlbnQpXHJcbiAgICB9LFxyXG4gICAgb25EZXRhaWxSb3dDbGljayAoZGF0YUl0ZW0sIGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuJGVtaXQodGhpcy5ldmVudFByZWZpeCArICdkZXRhaWwtcm93LWNsaWNrZWQnLCBkYXRhSXRlbSwgZXZlbnQpXHJcbiAgICB9LFxyXG4gICAgb25DZWxsQ2xpY2tlZCAoZGF0YUl0ZW0sIGZpZWxkLCBldmVudCkge1xyXG4gICAgICB0aGlzLiRlbWl0KHRoaXMuZXZlbnRQcmVmaXggKyAnY2VsbC1jbGlja2VkJywgZGF0YUl0ZW0sIGZpZWxkLCBldmVudClcclxuICAgIH0sXHJcbiAgICBvbkNlbGxEb3VibGVDbGlja2VkIChkYXRhSXRlbSwgZmllbGQsIGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuJGVtaXQodGhpcy5ldmVudFByZWZpeCArICdjZWxsLWRibGNsaWNrZWQnLCBkYXRhSXRlbSwgZmllbGQsIGV2ZW50KVxyXG4gICAgfSxcclxuICAgIG9uQ2VsbFJpZ2h0Q2xpY2tlZCAoZGF0YUl0ZW0sIGZpZWxkLCBldmVudCkge1xyXG4gICAgICB0aGlzLiRlbWl0KHRoaXMuZXZlbnRQcmVmaXggKyAnY2VsbC1yaWdodGNsaWNrZWQnLCBkYXRhSXRlbSwgZmllbGQsIGV2ZW50KVxyXG4gICAgfSxcclxuICAgIC8qXHJcbiAgICAgKiBBUEkgZm9yIGV4dGVybmFsc1xyXG4gICAgICovXHJcbiAgICBjaGFuZ2VQYWdlIChwYWdlKSB7XHJcbiAgICAgIGlmIChwYWdlID09PSAncHJldicpIHtcclxuICAgICAgICB0aGlzLmdvdG9QcmV2aW91c1BhZ2UoKVxyXG4gICAgICB9IGVsc2UgaWYgKHBhZ2UgPT09ICduZXh0Jykge1xyXG4gICAgICAgIHRoaXMuZ290b05leHRQYWdlKClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmdvdG9QYWdlKHBhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICByZWxvYWQgKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2FkRGF0YSgpXHJcbiAgICB9LFxyXG4gICAgcmVmcmVzaCAoKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxXHJcbiAgICAgIHJldHVybiB0aGlzLmxvYWREYXRhKClcclxuICAgIH0sXHJcbiAgICByZXNldERhdGEgKCkge1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IG51bGxcclxuICAgICAgdGhpcy50YWJsZVBhZ2luYXRpb24gPSBudWxsXHJcbiAgICAgIHRoaXMuZmlyZUV2ZW50KCdkYXRhLXJlc2V0JylcclxuICAgIH1cclxuICB9LCAvLyBlbmQ6IG1ldGhvZHNcclxuICB3YXRjaDoge1xyXG4gICAgJ211bHRpU29ydCcgKG5ld1ZhbCwgb2xkVmFsKSB7XHJcbiAgICAgIGlmIChuZXdWYWwgPT09IGZhbHNlICYmIHRoaXMuc29ydE9yZGVyLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICB0aGlzLnNvcnRPcmRlci5zcGxpY2UoMSk7XHJcbiAgICAgICAgdGhpcy5sb2FkRGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgJ2FwaVVybCcgIChuZXdWYWwsIG9sZFZhbCkge1xyXG4gICAgICBpZih0aGlzLnJlYWN0aXZlQXBpVXJsICYmIG5ld1ZhbCAhPT0gb2xkVmFsKVxyXG4gICAgICAgIHRoaXMucmVmcmVzaCgpXHJcbiAgICB9LFxyXG4gICAgJ2RhdGEnIChuZXdWYWwsIG9sZFZhbCkge1xyXG4gICAgICB0aGlzLnNldERhdGEobmV3VmFsKVxyXG4gICAgfSxcclxuICAgICd0YWJsZUhlaWdodCcgKG5ld1ZhbCwgb2xkVmFsKSB7XHJcbiAgICAgIHRoaXMuZml4SGVhZGVyKClcclxuICAgIH1cclxuICB9LFxyXG59XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIHNjb3BlZD5cclxuICBbdi1jbG9ha10ge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxuICB9XHJcbiAgLnZ1ZXRhYmxlIHRoLnNvcnRhYmxlOmhvdmVyIHtcclxuICAgIGNvbG9yOiAjMjE4NWQwO1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gIH1cclxuICAudnVldGFibGUtYm9keS13cmFwcGVyIHtcclxuICAgIHBvc2l0aW9uOnJlbGF0aXZlO1xyXG4gICAgb3ZlcmZsb3cteTphdXRvO1xyXG4gIH1cclxuICAudnVldGFibGUtaGVhZC13cmFwcGVyIHtcclxuICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcclxuICB9XHJcbiAgLnZ1ZXRhYmxlLWFjdGlvbnMge1xyXG4gICAgd2lkdGg6IDE1JTtcclxuICAgIHBhZGRpbmc6IDEycHggMHB4O1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIH1cclxuICAudnVldGFibGUtcGFnaW5hdGlvbiB7XHJcbiAgICBiYWNrZ3JvdW5kOiAjZjlmYWZiICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG4gIC52dWV0YWJsZS1wYWdpbmF0aW9uLWluZm8ge1xyXG4gICAgbWFyZ2luLXRvcDogYXV0bztcclxuICAgIG1hcmdpbi1ib3R0b206IGF1dG87XHJcbiAgfVxyXG4gIC52dWV0YWJsZS1lbXB0eS1yZXN1bHQge1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIH1cclxuICAudnVldGFibGUtY2xpcC10ZXh0IHtcclxuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcclxuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gIH1cclxuICAudnVldGFibGUtc2VtYW50aWMtbm8tdG9wIHtcclxuICAgIGJvcmRlci10b3A6bm9uZSAhaW1wb3J0YW50O1xyXG4gICAgbWFyZ2luLXRvcDowICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG4gIC52dWV0YWJsZS1maXhlZC1sYXlvdXQge1xyXG4gICAgdGFibGUtbGF5b3V0OiBmaXhlZDtcclxuICB9XHJcbiAgLnZ1ZXRhYmxlLWd1dHRlci1jb2wge1xyXG4gICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xyXG4gICAgYm9yZGVyLWxlZnQ6IG5vbmUgICFpbXBvcnRhbnQ7XHJcbiAgICBib3JkZXItcmlnaHQ6IG5vbmUgICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG48L3N0eWxlPlxyXG4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMiEuLi8uLi8uLi92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vVnVldGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0yIS4uLy4uLy4uL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9WdWV0YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL3Z1ZS1zdHlsZS1sb2FkZXIvaW5kZXguanMhLi4vLi4vLi4vY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vVnVldGFibGUudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NWJmYTA1YjAmcHJvZCZzY29wZWQ9dHJ1ZSZsYW5nPWNzc1wiIiwiLyogZ2xvYmFscyBfX1ZVRV9TU1JfQ09OVEVYVF9fICovXG5cbi8vIElNUE9SVEFOVDogRG8gTk9UIHVzZSBFUzIwMTUgZmVhdHVyZXMgaW4gdGhpcyBmaWxlIChleGNlcHQgZm9yIG1vZHVsZXMpLlxuLy8gVGhpcyBtb2R1bGUgaXMgYSBydW50aW1lIHV0aWxpdHkgZm9yIGNsZWFuZXIgY29tcG9uZW50IG1vZHVsZSBvdXRwdXQgYW5kIHdpbGxcbi8vIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCB3ZWJwYWNrIHVzZXIgYnVuZGxlLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciAvKiBzZXJ2ZXIgb25seSAqLyxcbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID1cbiAgICB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJyA/IHNjcmlwdEV4cG9ydHMub3B0aW9ucyA6IHNjcmlwdEV4cG9ydHNcblxuICAvLyByZW5kZXIgZnVuY3Rpb25zXG4gIGlmIChyZW5kZXIpIHtcbiAgICBvcHRpb25zLnJlbmRlciA9IHJlbmRlclxuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gc3RhdGljUmVuZGVyRm5zXG4gICAgb3B0aW9ucy5fY29tcGlsZWQgPSB0cnVlXG4gIH1cblxuICAvLyBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChmdW5jdGlvbmFsVGVtcGxhdGUpIHtcbiAgICBvcHRpb25zLmZ1bmN0aW9uYWwgPSB0cnVlXG4gIH1cblxuICAvLyBzY29wZWRJZFxuICBpZiAoc2NvcGVJZCkge1xuICAgIG9wdGlvbnMuX3Njb3BlSWQgPSAnZGF0YS12LScgKyBzY29wZUlkXG4gIH1cblxuICB2YXIgaG9va1xuICBpZiAobW9kdWxlSWRlbnRpZmllcikge1xuICAgIC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgKG9wdGlvbnMuZnVuY3Rpb25hbCA/IHRoaXMucGFyZW50IDogdGhpcykuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgOiBpbmplY3RTdHlsZXNcbiAgfVxuXG4gIGlmIChob29rKSB7XG4gICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvbmFsIGNvbXBvbmVudCBpbiB2dWUgZmlsZVxuICAgICAgdmFyIG9yaWdpbmFsUmVuZGVyID0gb3B0aW9ucy5yZW5kZXJcbiAgICAgIG9wdGlvbnMucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyV2l0aFN0eWxlSW5qZWN0aW9uKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmcgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9WdWV0YWJsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWJmYTA1YjAmc2NvcGVkPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9WdWV0YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuZXhwb3J0ICogZnJvbSBcIi4vVnVldGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vVnVldGFibGUudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NWJmYTA1YjAmcHJvZCZzY29wZWQ9dHJ1ZSZsYW5nPWNzc1wiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjViZmEwNWIwXCIsXG4gIG51bGxcbiAgXG4pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgdmFyIF92bSA9IHRoaXMsXG4gICAgX2MgPSBfdm0uX3NlbGYuX2NcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICB2YWx1ZTogX3ZtLnRhYmxlUGFnaW5hdGlvbiAmJiBfdm0udGFibGVQYWdpbmF0aW9uLmxhc3RfcGFnZSA+IDEsXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJ0YWJsZVBhZ2luYXRpb24gJiYgdGFibGVQYWdpbmF0aW9uLmxhc3RfcGFnZSA+IDFcIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjbGFzczogX3ZtLmNzcy53cmFwcGVyQ2xhc3MsXG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJhXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgXCJidG4tbmF2XCIsXG4gICAgICAgICAgICBfdm0uY3NzLmxpbmtDbGFzcyxcbiAgICAgICAgICAgIF92bS5pc09uRmlyc3RQYWdlID8gX3ZtLmNzcy5kaXNhYmxlZENsYXNzIDogXCJcIixcbiAgICAgICAgICBdLFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3ZtLmxvYWRQYWdlKDEpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfdm0uY3NzLmljb25zLmZpcnN0ICE9IFwiXCJcbiAgICAgICAgICAgID8gX2MoXCJpXCIsIHsgY2xhc3M6IFtfdm0uY3NzLmljb25zLmZpcnN0XSB9KVxuICAgICAgICAgICAgOiBfYyhcInNwYW5cIiwgW192bS5fdihcIsKrXCIpXSksXG4gICAgICAgIF1cbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiYVwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgIFwiYnRuLW5hdlwiLFxuICAgICAgICAgICAgX3ZtLmNzcy5saW5rQ2xhc3MsXG4gICAgICAgICAgICBfdm0uaXNPbkZpcnN0UGFnZSA/IF92bS5jc3MuZGlzYWJsZWRDbGFzcyA6IFwiXCIsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF92bS5sb2FkUGFnZShcInByZXZcIilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF92bS5jc3MuaWNvbnMubmV4dCAhPSBcIlwiXG4gICAgICAgICAgICA/IF9jKFwiaVwiLCB7IGNsYXNzOiBbX3ZtLmNzcy5pY29ucy5wcmV2XSB9KVxuICAgICAgICAgICAgOiBfYyhcInNwYW5cIiwgW192bS5fdihcIsKg4oC5XCIpXSksXG4gICAgICAgIF1cbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLm5vdEVub3VnaFBhZ2VzXG4gICAgICAgID8gW1xuICAgICAgICAgICAgX3ZtLl9sKF92bS50b3RhbFBhZ2UsIGZ1bmN0aW9uIChuKSB7XG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgX2MoXCJhXCIsIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5jc3MucGFnZUNsYXNzLFxuICAgICAgICAgICAgICAgICAgICBfdm0uaXNDdXJyZW50UGFnZShuKSA/IF92bS5jc3MuYWN0aXZlQ2xhc3MgOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IGlubmVySFRNTDogX3ZtLl9zKG4pIH0sXG4gICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ubG9hZFBhZ2UobilcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXG4gICAgICAgICAgICBfdm0uX2woX3ZtLndpbmRvd1NpemUsIGZ1bmN0aW9uIChuKSB7XG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgX2MoXCJhXCIsIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5jc3MucGFnZUNsYXNzLFxuICAgICAgICAgICAgICAgICAgICBfdm0uaXNDdXJyZW50UGFnZShfdm0ud2luZG93U3RhcnQgKyBuIC0gMSlcbiAgICAgICAgICAgICAgICAgICAgICA/IF92bS5jc3MuYWN0aXZlQ2xhc3NcbiAgICAgICAgICAgICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLndpbmRvd1N0YXJ0ICsgbiAtIDEpIH0sXG4gICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ubG9hZFBhZ2UoX3ZtLndpbmRvd1N0YXJ0ICsgbiAtIDEpXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImFcIixcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICBcImJ0bi1uYXZcIixcbiAgICAgICAgICAgIF92bS5jc3MubGlua0NsYXNzLFxuICAgICAgICAgICAgX3ZtLmlzT25MYXN0UGFnZSA/IF92bS5jc3MuZGlzYWJsZWRDbGFzcyA6IFwiXCIsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF92bS5sb2FkUGFnZShcIm5leHRcIilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF92bS5jc3MuaWNvbnMubmV4dCAhPSBcIlwiXG4gICAgICAgICAgICA/IF9jKFwiaVwiLCB7IGNsYXNzOiBbX3ZtLmNzcy5pY29ucy5uZXh0XSB9KVxuICAgICAgICAgICAgOiBfYyhcInNwYW5cIiwgW192bS5fdihcIuKAusKgXCIpXSksXG4gICAgICAgIF1cbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiYVwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgIFwiYnRuLW5hdlwiLFxuICAgICAgICAgICAgX3ZtLmNzcy5saW5rQ2xhc3MsXG4gICAgICAgICAgICBfdm0uaXNPbkxhc3RQYWdlID8gX3ZtLmNzcy5kaXNhYmxlZENsYXNzIDogXCJcIixcbiAgICAgICAgICBdLFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3ZtLmxvYWRQYWdlKF92bS50b3RhbFBhZ2UpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfdm0uY3NzLmljb25zLmxhc3QgIT0gXCJcIlxuICAgICAgICAgICAgPyBfYyhcImlcIiwgeyBjbGFzczogW192bS5jc3MuaWNvbnMubGFzdF0gfSlcbiAgICAgICAgICAgIDogX2MoXCJzcGFuXCIsIFtfdm0uX3YoXCLCu1wiKV0pLFxuICAgICAgICBdXG4gICAgICApLFxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0yIS4uLy4uLy4uL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3J1bGVTZXRbMV0ucnVsZXNbMl0hLi4vLi4vLi4vdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL1Z1ZXRhYmxlUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjI2MDE3YjZcIiIsIjxzY3JpcHQ+XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBwcm9wczoge1xyXG4gICAgY3NzOiB7XHJcbiAgICAgIHR5cGU6IE9iamVjdCxcclxuICAgICAgZGVmYXVsdCAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHdyYXBwZXJDbGFzczogJ3VpIHJpZ2h0IGZsb2F0ZWQgcGFnaW5hdGlvbiBtZW51JyxcclxuICAgICAgICAgIGFjdGl2ZUNsYXNzOiAnYWN0aXZlIGxhcmdlJyxcclxuICAgICAgICAgIGRpc2FibGVkQ2xhc3M6ICdkaXNhYmxlZCcsXHJcbiAgICAgICAgICBwYWdlQ2xhc3M6ICdpdGVtJyxcclxuICAgICAgICAgIGxpbmtDbGFzczogJ2ljb24gaXRlbScsXHJcbiAgICAgICAgICBwYWdpbmF0aW9uQ2xhc3M6ICd1aSBib3R0b20gYXR0YWNoZWQgc2VnbWVudCBncmlkJyxcclxuICAgICAgICAgIHBhZ2luYXRpb25JbmZvQ2xhc3M6ICdsZWZ0IGZsb2F0ZWQgbGVmdCBhbGlnbmVkIHNpeCB3aWRlIGNvbHVtbicsXHJcbiAgICAgICAgICBkcm9wZG93bkNsYXNzOiAndWkgc2VhcmNoIGRyb3Bkb3duJyxcclxuICAgICAgICAgIGljb25zOiB7XHJcbiAgICAgICAgICAgIGZpcnN0OiAnYW5nbGUgZG91YmxlIGxlZnQgaWNvbicsXHJcbiAgICAgICAgICAgIHByZXY6ICdsZWZ0IGNoZXZyb24gaWNvbicsXHJcbiAgICAgICAgICAgIG5leHQ6ICdyaWdodCBjaGV2cm9uIGljb24nLFxyXG4gICAgICAgICAgICBsYXN0OiAnYW5nbGUgZG91YmxlIHJpZ2h0IGljb24nLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIG9uRWFjaFNpZGU6IHtcclxuICAgICAgdHlwZTogTnVtYmVyLFxyXG4gICAgICBkZWZhdWx0ICgpIHtcclxuICAgICAgICByZXR1cm4gMlxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gIH0sXHJcbiAgZGF0YTogZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBldmVudFByZWZpeDogJ3Z1ZXRhYmxlLXBhZ2luYXRpb246JyxcclxuICAgICAgdGFibGVQYWdpbmF0aW9uOiBudWxsXHJcbiAgICB9XHJcbiAgfSxcclxuICBjb21wdXRlZDoge1xyXG4gICAgdG90YWxQYWdlICgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudGFibGVQYWdpbmF0aW9uID09PSBudWxsXHJcbiAgICAgICAgPyAwXHJcbiAgICAgICAgOiB0aGlzLnRhYmxlUGFnaW5hdGlvbi5sYXN0X3BhZ2VcclxuICAgIH0sXHJcbiAgICBpc09uRmlyc3RQYWdlICgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudGFibGVQYWdpbmF0aW9uID09PSBudWxsXHJcbiAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgIDogdGhpcy50YWJsZVBhZ2luYXRpb24uY3VycmVudF9wYWdlID09PSAxXHJcbiAgICB9LFxyXG4gICAgaXNPbkxhc3RQYWdlICgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudGFibGVQYWdpbmF0aW9uID09PSBudWxsXHJcbiAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgIDogdGhpcy50YWJsZVBhZ2luYXRpb24uY3VycmVudF9wYWdlID09PSB0aGlzLnRhYmxlUGFnaW5hdGlvbi5sYXN0X3BhZ2VcclxuICAgIH0sXHJcbiAgICBub3RFbm91Z2hQYWdlcyAoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRvdGFsUGFnZSA8ICh0aGlzLm9uRWFjaFNpZGUgKiAyKSArIDRcclxuICAgIH0sXHJcbiAgICB3aW5kb3dTaXplICgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMub25FYWNoU2lkZSAqIDIgKzE7XHJcbiAgICB9LFxyXG4gICAgd2luZG93U3RhcnQgKCkge1xyXG4gICAgICBpZiAoIXRoaXMudGFibGVQYWdpbmF0aW9uIHx8IHRoaXMudGFibGVQYWdpbmF0aW9uLmN1cnJlbnRfcGFnZSA8PSB0aGlzLm9uRWFjaFNpZGUpIHtcclxuICAgICAgICByZXR1cm4gMVxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudGFibGVQYWdpbmF0aW9uLmN1cnJlbnRfcGFnZSA+PSAodGhpcy50b3RhbFBhZ2UgLSB0aGlzLm9uRWFjaFNpZGUpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG90YWxQYWdlIC0gdGhpcy5vbkVhY2hTaWRlKjJcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMudGFibGVQYWdpbmF0aW9uLmN1cnJlbnRfcGFnZSAtIHRoaXMub25FYWNoU2lkZVxyXG4gICAgfSxcclxuICB9LFxyXG4gIG1ldGhvZHM6IHtcclxuICAgIGxvYWRQYWdlIChwYWdlKSB7XHJcbiAgICAgIHRoaXMuJGVtaXQodGhpcy5ldmVudFByZWZpeCsnY2hhbmdlLXBhZ2UnLCBwYWdlKVxyXG4gICAgfSxcclxuICAgIGlzQ3VycmVudFBhZ2UgKHBhZ2UpIHtcclxuICAgICAgcmV0dXJuIHBhZ2UgPT09IHRoaXMudGFibGVQYWdpbmF0aW9uLmN1cnJlbnRfcGFnZVxyXG4gICAgfSxcclxuICAgIHNldFBhZ2luYXRpb25EYXRhICh0YWJsZVBhZ2luYXRpb24pIHtcclxuICAgICAgdGhpcy50YWJsZVBhZ2luYXRpb24gPSB0YWJsZVBhZ2luYXRpb25cclxuICAgIH0sXHJcbiAgICByZXNldERhdGEgKCkge1xyXG4gICAgICB0aGlzLnRhYmxlUGFnaW5hdGlvbiA9IG51bGxcclxuICAgIH1cclxuICB9XHJcbn1cclxuPC9zY3JpcHQ+XHJcbiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0yIS4uLy4uLy4uL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9WdWV0YWJsZVBhZ2luYXRpb25NaXhpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTIhLi4vLi4vLi4vdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL1Z1ZXRhYmxlUGFnaW5hdGlvbk1peGluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiIiwidmFyIHJlbmRlciwgc3RhdGljUmVuZGVyRm5zXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1Z1ZXRhYmxlUGFnaW5hdGlvbk1peGluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5leHBvcnQgKiBmcm9tIFwiLi9WdWV0YWJsZVBhZ2luYXRpb25NaXhpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCI8dGVtcGxhdGU+XHJcbiAgPGRpdiB2LXNob3c9XCJ0YWJsZVBhZ2luYXRpb24gJiYgdGFibGVQYWdpbmF0aW9uLmxhc3RfcGFnZSA+IDFcIiA6Y2xhc3M9XCJjc3Mud3JhcHBlckNsYXNzXCI+XHJcbiAgICA8YSBAY2xpY2s9XCJsb2FkUGFnZSgxKVwiXHJcbiAgICAgIDpjbGFzcz1cIlsnYnRuLW5hdicsIGNzcy5saW5rQ2xhc3MsIGlzT25GaXJzdFBhZ2UgPyBjc3MuZGlzYWJsZWRDbGFzcyA6ICcnXVwiPlxyXG4gICAgICAgIDxpIHYtaWY9XCJjc3MuaWNvbnMuZmlyc3QgIT0gJydcIiA6Y2xhc3M9XCJbY3NzLmljb25zLmZpcnN0XVwiPjwvaT5cclxuICAgICAgICA8c3BhbiB2LWVsc2U+JmxhcXVvOzwvc3Bhbj5cclxuICAgIDwvYT5cclxuICAgIDxhIEBjbGljaz1cImxvYWRQYWdlKCdwcmV2JylcIlxyXG4gICAgICA6Y2xhc3M9XCJbJ2J0bi1uYXYnLCBjc3MubGlua0NsYXNzLCBpc09uRmlyc3RQYWdlID8gY3NzLmRpc2FibGVkQ2xhc3MgOiAnJ11cIj5cclxuICAgICAgICA8aSB2LWlmPVwiY3NzLmljb25zLm5leHQgIT0gJydcIiA6Y2xhc3M9XCJbY3NzLmljb25zLnByZXZdXCI+PC9pPlxyXG4gICAgICAgIDxzcGFuIHYtZWxzZT4mbmJzcDsmbHNhcXVvOzwvc3Bhbj5cclxuICAgIDwvYT5cclxuICAgIDx0ZW1wbGF0ZSB2LWlmPVwibm90RW5vdWdoUGFnZXNcIj5cclxuICAgICAgPHRlbXBsYXRlIHYtZm9yPVwibiBpbiB0b3RhbFBhZ2VcIj5cclxuICAgICAgICA8YSBAY2xpY2s9XCJsb2FkUGFnZShuKVwiXHJcbiAgICAgICAgICA6Y2xhc3M9XCJbY3NzLnBhZ2VDbGFzcywgaXNDdXJyZW50UGFnZShuKSA/IGNzcy5hY3RpdmVDbGFzcyA6ICcnXVwiXHJcbiAgICAgICAgICB2LWh0bWw9XCJuXCI+XHJcbiAgICAgICAgPC9hPlxyXG4gICAgICA8L3RlbXBsYXRlPlxyXG4gICAgPC90ZW1wbGF0ZT5cclxuICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XHJcbiAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cIm4gaW4gd2luZG93U2l6ZVwiPlxyXG4gICAgICAgIDxhIEBjbGljaz1cImxvYWRQYWdlKHdpbmRvd1N0YXJ0K24tMSlcIlxyXG4gICAgICAgICAgOmNsYXNzPVwiW2Nzcy5wYWdlQ2xhc3MsIGlzQ3VycmVudFBhZ2Uod2luZG93U3RhcnQrbi0xKSA/IGNzcy5hY3RpdmVDbGFzcyA6ICcnXVwiXHJcbiAgICAgICAgICB2LWh0bWw9XCJ3aW5kb3dTdGFydCtuLTFcIj5cclxuICAgICAgICA8L2E+XHJcbiAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICA8L3RlbXBsYXRlPlxyXG4gICAgPGEgQGNsaWNrPVwibG9hZFBhZ2UoJ25leHQnKVwiXHJcbiAgICAgIDpjbGFzcz1cIlsnYnRuLW5hdicsIGNzcy5saW5rQ2xhc3MsIGlzT25MYXN0UGFnZSA/IGNzcy5kaXNhYmxlZENsYXNzIDogJyddXCI+XHJcbiAgICAgIDxpIHYtaWY9XCJjc3MuaWNvbnMubmV4dCAhPSAnJ1wiIDpjbGFzcz1cIltjc3MuaWNvbnMubmV4dF1cIj48L2k+XHJcbiAgICAgIDxzcGFuIHYtZWxzZT4mcnNhcXVvOyZuYnNwOzwvc3Bhbj5cclxuICAgIDwvYT5cclxuICAgIDxhIEBjbGljaz1cImxvYWRQYWdlKHRvdGFsUGFnZSlcIlxyXG4gICAgICA6Y2xhc3M9XCJbJ2J0bi1uYXYnLCBjc3MubGlua0NsYXNzLCBpc09uTGFzdFBhZ2UgPyBjc3MuZGlzYWJsZWRDbGFzcyA6ICcnXVwiPlxyXG4gICAgICA8aSB2LWlmPVwiY3NzLmljb25zLmxhc3QgIT0gJydcIiA6Y2xhc3M9XCJbY3NzLmljb25zLmxhc3RdXCI+PC9pPlxyXG4gICAgICA8c3BhbiB2LWVsc2U+JnJhcXVvOzwvc3Bhbj5cclxuICAgIDwvYT5cclxuICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbmltcG9ydCBQYWdpbmF0aW9uTWl4aW4gZnJvbSAnLi9WdWV0YWJsZVBhZ2luYXRpb25NaXhpbi52dWUnXHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgbWl4aW5zOiBbUGFnaW5hdGlvbk1peGluXSxcclxufVxyXG48L3NjcmlwdD5cclxuIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTIhLi4vLi4vLi4vdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL1Z1ZXRhYmxlUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTIhLi4vLi4vLi4vdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL1Z1ZXRhYmxlUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vVnVldGFibGVQYWdpbmF0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMjYwMTdiNlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1Z1ZXRhYmxlUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuZXhwb3J0ICogZnJvbSBcIi4vVnVldGFibGVQYWdpbmF0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gIHZhciBfdm0gPSB0aGlzLFxuICAgIF9jID0gX3ZtLl9zZWxmLl9jXG4gIHJldHVybiBfYyhcImRpdlwiLCB7XG4gICAgY2xhc3M6IFtcInZ1ZXRhYmxlLXBhZ2luYXRpb24taW5mb1wiLCBfdm0uY3NzLmluZm9DbGFzc10sXG4gICAgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLnBhZ2luYXRpb25JbmZvKSB9LFxuICB9KVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMiEuLi8uLi8uLi92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4uLy4uLy4uL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9WdWV0YWJsZVBhZ2luYXRpb25JbmZvLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01MmMyY2U0MVwiIiwiPHNjcmlwdD5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHByb3BzOiB7XHJcbiAgICBjc3M6IHtcclxuICAgICAgdHlwZTogT2JqZWN0LFxyXG4gICAgICBkZWZhdWx0KCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBpbmZvQ2xhc3M6ICdsZWZ0IGZsb2F0ZWQgbGVmdCBhbGlnbmVkIHNpeCB3aWRlIGNvbHVtbidcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBpbmZvVGVtcGxhdGU6IHtcclxuICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICBkZWZhdWx0KCkge1xyXG4gICAgICAgIHJldHVybiBcIkRpc3BsYXlpbmcge2Zyb219IHRvIHt0b30gb2Yge3RvdGFsfSBpdGVtc1wiXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBub0RhdGFUZW1wbGF0ZToge1xyXG4gICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgIGRlZmF1bHQoKSB7XHJcbiAgICAgICAgcmV0dXJuICdObyByZWxldmFudCBkYXRhJ1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gIH0sXHJcbiAgZGF0YTogZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0YWJsZVBhZ2luYXRpb246IG51bGxcclxuICAgIH1cclxuICB9LFxyXG4gIGNvbXB1dGVkOiB7XHJcbiAgICBwYWdpbmF0aW9uSW5mbyAoKSB7XHJcbiAgICAgIGlmICh0aGlzLnRhYmxlUGFnaW5hdGlvbiA9PSBudWxsIHx8IHRoaXMudGFibGVQYWdpbmF0aW9uLnRvdGFsID09IDApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ub0RhdGFUZW1wbGF0ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5pbmZvVGVtcGxhdGVcclxuICAgICAgICAucmVwbGFjZSgne2Zyb219JywgdGhpcy50YWJsZVBhZ2luYXRpb24uZnJvbSB8fCAwKVxyXG4gICAgICAgIC5yZXBsYWNlKCd7dG99JywgdGhpcy50YWJsZVBhZ2luYXRpb24udG8gfHwgMClcclxuICAgICAgICAucmVwbGFjZSgne3RvdGFsfScsIHRoaXMudGFibGVQYWdpbmF0aW9uLnRvdGFsIHx8IDApXHJcbiAgICB9LFxyXG4gIH0sXHJcbiAgbWV0aG9kczoge1xyXG4gICAgc2V0UGFnaW5hdGlvbkRhdGEgKHRhYmxlUGFnaW5hdGlvbikge1xyXG4gICAgICB0aGlzLnRhYmxlUGFnaW5hdGlvbiA9IHRhYmxlUGFnaW5hdGlvblxyXG4gICAgfSxcclxuICAgIHJlc2V0RGF0YSAoKSB7XHJcbiAgICAgIHRoaXMudGFibGVQYWdpbmF0aW9uID0gbnVsbFxyXG4gICAgfVxyXG4gIH0sXHJcbn1cclxuPC9zY3JpcHQ+XHJcbiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0yIS4uLy4uLy4uL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9WdWV0YWJsZVBhZ2luYXRpb25JbmZvTWl4aW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0yIS4uLy4uLy4uL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9WdWV0YWJsZVBhZ2luYXRpb25JbmZvTWl4aW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCIiLCJ2YXIgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnNcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vVnVldGFibGVQYWdpbmF0aW9uSW5mb01peGluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5leHBvcnQgKiBmcm9tIFwiLi9WdWV0YWJsZVBhZ2luYXRpb25JbmZvTWl4aW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiPHRlbXBsYXRlPlxyXG4gIDxkaXYgOmNsYXNzPVwiWyd2dWV0YWJsZS1wYWdpbmF0aW9uLWluZm8nLCBjc3MuaW5mb0NsYXNzXVwiXHJcbiAgICB2LWh0bWw9XCJwYWdpbmF0aW9uSW5mb1wiPlxyXG4gIDwvZGl2PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdD5cclxuaW1wb3J0IFBhZ2luYXRpb25JbmZvTWl4aW4gZnJvbSAnLi9WdWV0YWJsZVBhZ2luYXRpb25JbmZvTWl4aW4udnVlJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIG1peGluczogW1BhZ2luYXRpb25JbmZvTWl4aW5dLFxyXG59XHJcbjwvc2NyaXB0PlxyXG4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMiEuLi8uLi8uLi92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vVnVldGFibGVQYWdpbmF0aW9uSW5mby52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTIhLi4vLi4vLi4vdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL1Z1ZXRhYmxlUGFnaW5hdGlvbkluZm8udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL1Z1ZXRhYmxlUGFnaW5hdGlvbkluZm8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUyYzJjZTQxXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vVnVldGFibGVQYWdpbmF0aW9uSW5mby52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuZXhwb3J0ICogZnJvbSBcIi4vVnVldGFibGVQYWdpbmF0aW9uSW5mby52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgdGFibGU6IHtcbiAgICAgICAgdGFibGVDbGFzczogJ3RhYmxlJyxcbiAgICAgICAgbG9hZGluZ0NsYXNzOiAnbG9hZGluZycsXG4gICAgICAgIHNvcnRhYmxlSWNvbjogJycsXG4gICAgICAgIGFzY2VuZGluZ0ljb246ICdmYSBmYS1mdyBmYS1jaGV2cm9uLXVwJyxcbiAgICAgICAgZGVzY2VuZGluZ0ljb246ICdmYSBmYS1mdyBmYS1jaGV2cm9uLWRvd24nLFxuICAgICAgICBhc2NlbmRpbmdDbGFzczogJycsXG4gICAgICAgIGRlc2NlbmRpbmdDbGFzczogJycsXG4gICAgICAgIGhhbmRsZUljb246ICdmYSBmYS1mdyBmYS1iYXJzJyxcbiAgICAgICAgcmVuZGVySWNvbjogKGNsYXNzZXMsIG9wdGlvbnMpID0+IGA8aSBjbGFzcz1cIiR7Y2xhc3Nlcy5qb2luKCcgJyl9XCI+PC9pPmBcbiAgICB9LFxuICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgd3JhcHBlckNsYXNzOiAnZmxleC1vYmplY3RzLXBhZ2luYXRpb24nLFxuICAgICAgICBhY3RpdmVDbGFzczogJ2J1dHRvbiBhY3RpdmUnLFxuICAgICAgICBkaXNhYmxlZENsYXNzOiAnYnV0dG9uIGRpc2FibGVkJyxcbiAgICAgICAgcGFnZUNsYXNzOiAnYnV0dG9uIHBhZ2UnLFxuICAgICAgICBsaW5rQ2xhc3M6ICdidXR0b24gbGluaycsXG4gICAgICAgIGljb25zOiB7XG4gICAgICAgICAgICBmaXJzdDogJ2ZhIGZhLWZ3IGZhLWFuZ2xlLWRvdWJsZS1sZWZ0JyxcbiAgICAgICAgICAgIHByZXY6ICdmYSBmYS1mdyBmYS1jaGV2cm9uLWxlZnQnLFxuICAgICAgICAgICAgbmV4dDogJ2ZhIGZhLWZ3IGZhLWNoZXZyb24tcmlnaHQnLFxuICAgICAgICAgICAgbGFzdDogJ2ZhIGZhLWZ3IGZhLWFuZ2xlLWRvdWJsZS1yaWdodCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcGFnaW5hdGlvbkluZm86IHtcbiAgICAgICAgaW5mb0NsYXNzOiAnJ1xuICAgIH1cbn07XG4iLCI8dGVtcGxhdGU+XG4gICAgPGRpdj5cbiAgICAgICAgPHZ1ZXRhYmxlIHJlZj1cInZ1ZXRhYmxlXCJcbiAgICAgICAgICAgICAgICAgIDpjc3M9XCJjc3MudGFibGVcIlxuICAgICAgICAgICAgICAgICAgOmZpZWxkcz1cInN0b3JlLmZpZWxkcyB8fCBbXVwiXG4gICAgICAgICAgICAgICAgICA6c2VhcmNoRmllbGRzPVwic3RvcmUuc2VhcmNoRmllbGRzIHx8IFtdXCJcbiAgICAgICAgICAgICAgICAgIDpzb3J0T3JkZXI9XCJzdG9yZS5zb3J0T3JkZXJcIlxuICAgICAgICAgICAgICAgICAgOm11bHRpLXNvcnQ9XCJ0cnVlXCJcblxuICAgICAgICAgICAgICAgICAgOmFwaS1tb2RlPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICA6YXBpLXVybD1cInN0b3JlLmFwaVwiXG4gICAgICAgICAgICAgICAgICA6cGVyLXBhZ2U9XCJwZXJQYWdlXCJcbiAgICAgICAgICAgICAgICAgIDphcHBlbmQtcGFyYW1zPVwiZXh0cmFQYXJhbXNcIlxuICAgICAgICAgICAgICAgICAgcGFnaW5hdGlvbi1wYXRoPVwibGlua3MucGFnaW5hdGlvblwiXG4gICAgICAgICAgICAgICAgICA6c2hvdy1zb3J0LWljb25zPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBAdnVldGFibGU6cGFnaW5hdGlvbi1kYXRhPVwib25QYWdpbmF0aW9uRGF0YVwiXG4gICAgICAgICAgICAgICAgICBAdnVldGFibGU6bG9hZGluZz1cIm9uVnVldGFibGVMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgIEB2dWV0YWJsZTpsb2FkLXN1Y2Nlc3M9XCJvblZ1ZVRhYmxlTG9hZFN1Y2Nlc3NcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWxpc3QtcGFnaW5hdGlvblwiPlxuICAgICAgICAgICAgPHZ1ZXRhYmxlLXBhZ2luYXRpb24taW5mbyByZWY9XCJwYWdpbmF0aW9uSW5mb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDppbmZvLXRlbXBsYXRlPVwic3RvcmUucGFnaW5hdGlvbkluZm9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6aW5mby1uby1kYXRhLXRlbXBsYXRlPVwic3RvcmUuZW1wdHlSZXN1bHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y3NzPVwiY3NzLnBhZ2luYXRpb25JbmZvXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8dnVldGFibGUtcGFnaW5hdGlvbiByZWY9XCJwYWdpbmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjc3M9XCJjc3MucGFnaW5hdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdnVldGFibGUtcGFnaW5hdGlvbjpjaGFuZ2UtcGFnZT1cIm9uQ2hhbmdlUGFnZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gICAgaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuICAgIGltcG9ydCBWdWV0YWJsZSBmcm9tICd2dWV0YWJsZS0yL3NyYy9jb21wb25lbnRzL1Z1ZXRhYmxlLnZ1ZSc7XG4gICAgaW1wb3J0IFZ1ZXRhYmxlUGFnaW5hdGlvbiBmcm9tIFwidnVldGFibGUtMi9zcmMvY29tcG9uZW50cy9WdWV0YWJsZVBhZ2luYXRpb24udnVlXCI7XG4gICAgaW1wb3J0IFZ1ZXRhYmxlUGFnaW5hdGlvbkluZm8gZnJvbSAndnVldGFibGUtMi9zcmMvY29tcG9uZW50cy9WdWV0YWJsZVBhZ2luYXRpb25JbmZvLnZ1ZSc7XG4gICAgaW1wb3J0IFZ1ZXRhYmxlQ3NzQ29uZmlnIGZyb20gXCIuLi9WdWV0YWJsZUNzc0NvbmZpZy5qc1wiO1xuXG4gICAgaW1wb3J0IHNldCBmcm9tICdsb2Rhc2gvc2V0JztcbiAgICBpbXBvcnQgdW5zZXQgZnJvbSAnbG9kYXNoL3Vuc2V0JztcblxuICAgIGV4cG9ydCBkZWZhdWx0IHtcbiAgICAgICAgcHJvcHM6IFsnc3RvcmUnLCAndmFsdWUnXSxcbiAgICAgICAgY29tcG9uZW50czoge1Z1ZXRhYmxlLCBWdWV0YWJsZVBhZ2luYXRpb24sIFZ1ZXRhYmxlUGFnaW5hdGlvbkluZm99LFxuICAgICAgICBkYXRhOiAoKSA9PiAoe1xuICAgICAgICAgICAgY3NzOiBWdWV0YWJsZUNzc0NvbmZpZyxcbiAgICAgICAgICAgIHBlclBhZ2U6IDEwLFxuICAgICAgICAgICAgZGF0YTogW10sXG4gICAgICAgICAgICBleHRyYVBhcmFtczoge31cbiAgICAgICAgfSksXG4gICAgICAgIGNyZWF0ZWQoKSB7XG4gICAgICAgICAgICB0aGlzLnBlclBhZ2UgPSB0aGlzLnN0b3JlLnBlclBhZ2U7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBPYmplY3QudmFsdWVzKHRoaXMuc3RvcmUuZGF0YSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1vdW50ZWQoKSB7XG4gICAgICAgICAgICB0aGlzLiRyZWZzLnZ1ZXRhYmxlLnNldERhdGEodGhpcy5zdG9yZS5kYXRhKTtcbiAgICAgICAgICAgIHRoaXMuJGV2ZW50cy4kb24oJ2ZpbHRlci1zZXQnLCBldmVudCA9PiB0aGlzLm9uRmlsdGVyU2V0KGV2ZW50KSk7XG4gICAgICAgICAgICB0aGlzLiRldmVudHMuJG9uKCdmaWx0ZXItcmVzZXQnLCBldmVudCA9PiB0aGlzLm9uRmlsdGVyUmVzZXQoKSk7XG4gICAgICAgICAgICB0aGlzLiRldmVudHMuJG9uKCdmaWx0ZXItcGVyUGFnZScsIGV2ZW50ID0+IHRoaXMub25GaWx0ZXJQZXJQYWdlKGV2ZW50KSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgIG9uUGFnaW5hdGlvbkRhdGEocGFnaW5hdGlvbkRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRyZWZzLnBhZ2luYXRpb24uc2V0UGFnaW5hdGlvbkRhdGEocGFnaW5hdGlvbkRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuJHJlZnMucGFnaW5hdGlvbkluZm8uc2V0UGFnaW5hdGlvbkRhdGEocGFnaW5hdGlvbkRhdGEpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRmlsdGVyU2V0IChmaWx0ZXJUZXh0KSB7XG4gICAgICAgICAgICAgICAgc2V0KHRoaXMuZXh0cmFQYXJhbXMsICdmaWx0ZXInLCBmaWx0ZXJUZXh0KTtcbiAgICAgICAgICAgICAgICBWdWUubmV4dFRpY2soKCkgPT4gdGhpcy4kcmVmcy52dWV0YWJsZS5yZWZyZXNoKCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRmlsdGVyUmVzZXQgKCkge1xuICAgICAgICAgICAgICAgIHVuc2V0KHRoaXMuZXh0cmFQYXJhbXMsICdmaWx0ZXInKTtcbiAgICAgICAgICAgICAgICBWdWUubmV4dFRpY2soKCkgPT4gdGhpcy4kcmVmcy52dWV0YWJsZS5yZWZyZXNoKCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRmlsdGVyUGVyUGFnZSAobGltaXQpIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnb25GaWx0ZXJQZXJQYWdlJywgbGltaXQsIHRoaXMuc3RvcmUuZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJQYWdlID0gbGltaXQgfHwgdGhpcy4kcmVmcy5wYWdpbmF0aW9uSW5mby50YWJsZVBhZ2luYXRpb24udG90YWw7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy4kcmVmcy52dWV0YWJsZS5wZXJQYWdlID0gbGltaXQ7XG4gICAgICAgICAgICAgICAgVnVlLm5leHRUaWNrKCgpID0+IHRoaXMuJHJlZnMudnVldGFibGUucmVmcmVzaCgpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkNoYW5nZVBhZ2UocGFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJHJlZnMudnVldGFibGUuY2hhbmdlUGFnZShwYWdlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblZ1ZXRhYmxlTG9hZGluZygpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHRydWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uVnVlVGFibGVMb2FkU3VjY2VzcygpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PlxuIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0yIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vVGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL1RhYmxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9UYWJsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Mzc2OWM3YTFcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9UYWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuZXhwb3J0ICogZnJvbSBcIi4vVGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gIHZhciBfdm0gPSB0aGlzLFxuICAgIF9jID0gX3ZtLl9zZWxmLl9jXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInNlYXJjaC13cmFwcGVyXCIgfSwgW1xuICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbC50cmltXCIsXG4gICAgICAgICAgdmFsdWU6IF92bS5maWx0ZXJUZXh0LFxuICAgICAgICAgIGV4cHJlc3Npb246IFwiZmlsdGVyVGV4dFwiLFxuICAgICAgICAgIG1vZGlmaWVyczogeyB0cmltOiB0cnVlIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgc3RhdGljQ2xhc3M6IFwic2VhcmNoXCIsXG4gICAgICBhdHRyczogeyB0eXBlOiBcInRleHRcIiwgcGxhY2Vob2xkZXI6IF92bS5zdG9yZS5zZWFyY2hQbGFjZWhvbGRlciB9LFxuICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IF92bS5maWx0ZXJUZXh0IH0sXG4gICAgICBvbjoge1xuICAgICAgICBpbnB1dDogW1xuICAgICAgICAgIGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICgkZXZlbnQudGFyZ2V0LmNvbXBvc2luZykgcmV0dXJuXG4gICAgICAgICAgICBfdm0uZmlsdGVyVGV4dCA9ICRldmVudC50YXJnZXQudmFsdWUudHJpbSgpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBfdm0uZG9GaWx0ZXIsXG4gICAgICAgIF0sXG4gICAgICAgIGJsdXI6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3ZtLiRmb3JjZVVwZGF0ZSgpXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX2MoXG4gICAgICBcInNlbGVjdFwiLFxuICAgICAge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICB2YWx1ZTogX3ZtLnN0b3JlLnBlclBhZ2UsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcInN0b3JlLnBlclBhZ2VcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzdGF0aWNDbGFzczogXCJmaWx0ZXItcGVyUGFnZVwiLFxuICAgICAgICBvbjoge1xuICAgICAgICAgIGNoYW5nZTogW1xuICAgICAgICAgICAgZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICB2YXIgJCRzZWxlY3RlZFZhbCA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgICAgICAgICAgICAgICAuY2FsbCgkZXZlbnQudGFyZ2V0Lm9wdGlvbnMsIGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gby5zZWxlY3RlZFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IFwiX3ZhbHVlXCIgaW4gbyA/IG8uX3ZhbHVlIDogby52YWx1ZVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF92bS4kc2V0KFxuICAgICAgICAgICAgICAgIF92bS5zdG9yZSxcbiAgICAgICAgICAgICAgICBcInBlclBhZ2VcIixcbiAgICAgICAgICAgICAgICAkZXZlbnQudGFyZ2V0Lm11bHRpcGxlID8gJCRzZWxlY3RlZFZhbCA6ICQkc2VsZWN0ZWRWYWxbMF1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF92bS5jaGFuZ2VQZXJQYWdlLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgX3ZtLl9sKHRoaXMucGVyUGFnZU9wdGlvbnMsIGZ1bmN0aW9uICh2YWx1ZSwgdGl0bGUpIHtcbiAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgIFwib3B0aW9uXCIsXG4gICAgICAgICAgeyBkb21Qcm9wczogeyB2YWx1ZTogdmFsdWUsIHNlbGVjdGVkOiBfdm0uc3RvcmUucGVyUGFnZSA9PT0gdmFsdWUgfSB9LFxuICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKHRpdGxlKSldXG4gICAgICAgIClcbiAgICAgIH0pLFxuICAgICAgMFxuICAgICksXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/cnVsZVNldFsxXS5ydWxlc1syXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0ZpbHRlckJhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTQ3N2M1YmUmc2NvcGVkPXRydWVcIiIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLXdyYXBwZXJcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJzZWFyY2hcIiA6cGxhY2Vob2xkZXI9XCJzdG9yZS5zZWFyY2hQbGFjZWhvbGRlclwiIHYtbW9kZWwudHJpbT1cImZpbHRlclRleHRcIiBAaW5wdXQ9XCJkb0ZpbHRlclwiPlxuICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZmlsdGVyLXBlclBhZ2VcIiB2LW1vZGVsPVwic3RvcmUucGVyUGFnZVwiIEBjaGFuZ2U9XCJjaGFuZ2VQZXJQYWdlXCI+XG4gICAgICAgICAgICA8b3B0aW9uIHYtZm9yPVwiKHZhbHVlLCB0aXRsZSkgaW4gdGhpcy5wZXJQYWdlT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIDp2YWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgOnNlbGVjdGVkPVwic3RvcmUucGVyUGFnZSA9PT0gdmFsdWVcIj57eyB0aXRsZSB9fTwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gICAgaW1wb3J0IGRlYm91bmNlIGZyb20gJ2xvZGFzaC9kZWJvdW5jZSc7XG5cbiAgICBleHBvcnQgZGVmYXVsdCB7XG4gICAgICAgIHByb3BzOiBbJ3N0b3JlJ10sXG4gICAgICAgIGRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgICBmaWx0ZXJUZXh0OiAnJyxcbiAgICAgICAgICAgIHNlYXJjaFBsYWNlaG9sZGVyOiAnRmlsdGVyLi4uJyxcbiAgICAgICAgICAgIHNlbGVjdGVkOiAnJ1xuICAgICAgICB9KSxcbiAgICAgICAgY29tcHV0ZWQ6IHtcbiAgICAgICAgICAgIHBlclBhZ2VPcHRpb25zKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICcyNSc6IDI1LFxuICAgICAgICAgICAgICAgICAgICAnNTAnOiA1MCxcbiAgICAgICAgICAgICAgICAgICAgJzEwMCc6IDEwMCxcbiAgICAgICAgICAgICAgICAgICAgJzIwMCc6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgJ0FsbCc6ICcnXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmICghb3B0aW9uc1t0aGlzLnN0b3JlLnBlclBhZ2VdKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNbdGhpcy5zdG9yZS5wZXJQYWdlXSA9IHRoaXMuc3RvcmUucGVyUGFnZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlZCgpIHtcbiAgICAgICAgICAgIHRoaXMuZG9GaWx0ZXIgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZXZlbnRzLmZpcmUoJ2ZpbHRlci1zZXQnLCB0aGlzLmZpbHRlclRleHQpO1xuICAgICAgICAgICAgfSwgMjUwLCB7IGxlYWRpbmc6IGZhbHNlIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmNoYW5nZVBlclBhZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZXZlbnRzLmZpcmUoJ2ZpbHRlci1wZXJQYWdlJywgdGhpcy5zdG9yZS5wZXJQYWdlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgIHJlc2V0RmlsdGVyKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVGV4dCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuJGV2ZW50cy5maXJlKCdmaWx0ZXItcmVzZXQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuICAgIC5zZWFyY2gtd3JhcHBlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgfVxuXG4gICAgLnNlYXJjaC13cmFwcGVyIHNlbGVjdCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICAgIH1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9GaWx0ZXJCYXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0ZpbHRlckJhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2luZGV4LmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0ZpbHRlckJhci52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD01NDc3YzViZSZwcm9kJnNjb3BlZD10cnVlJmxhbmc9Y3NzXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0ZpbHRlckJhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTQ3N2M1YmUmc2NvcGVkPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9GaWx0ZXJCYXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0ZpbHRlckJhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9GaWx0ZXJCYXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NTQ3N2M1YmUmcHJvZCZzY29wZWQ9dHJ1ZSZsYW5nPWNzc1wiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCI1NDc3YzViZVwiLFxuICBudWxsXG4gIFxuKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gIHZhciBfdm0gPSB0aGlzLFxuICAgIF9jID0gX3ZtLl9zZWxmLl9jXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIFtcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3R5bGU6IHsgaGVpZ2h0OiAzMDAsIHdpZHRoOiBcIjEwMCVcIiB9IH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImNvbnRlbnQtbG9hZGVyXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgaGVpZ2h0OiBfdm0uZml4ZWRBbW91bnQgKiBfdm0uY291bnQsXG4gICAgICAgICAgICB3aWR0aDogMTA2MCxcbiAgICAgICAgICAgIHNwZWVkOiAyLFxuICAgICAgICAgICAgcHJpbWFyeUNvbG9yOiBcIiNkOWQ5ZDlcIixcbiAgICAgICAgICAgIHNlY29uZGFyeUNvbG9yOiBcIiNlY2ViZWJcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLl9sKF92bS5jb3VudCwgZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICBfYyhcInJlY3RcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICB4OiBcIjEzXCIsXG4gICAgICAgICAgICAgICAgICB5OiBfdm0uZml4ZWRBbW91bnQgKiBpbmRleCArIF92bS5vZmZzZXQsXG4gICAgICAgICAgICAgICAgICByeDogXCI2XCIsXG4gICAgICAgICAgICAgICAgICByeTogXCI2XCIsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogMjAwICogX3ZtLnJhbmRvbSgpLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjEyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFwicmVjdFwiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIHg6IFwiNTMzXCIsXG4gICAgICAgICAgICAgICAgICB5OiBfdm0uZml4ZWRBbW91bnQgKiBpbmRleCArIF92bS5vZmZzZXQsXG4gICAgICAgICAgICAgICAgICByeDogXCI2XCIsXG4gICAgICAgICAgICAgICAgICByeTogXCI2XCIsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogNjMgKiBfdm0ucmFuZG9tKCksXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMTJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXCJyZWN0XCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgeDogXCI2NTNcIixcbiAgICAgICAgICAgICAgICAgIHk6IF92bS5maXhlZEFtb3VudCAqIGluZGV4ICsgX3ZtLm9mZnNldCxcbiAgICAgICAgICAgICAgICAgIHJ4OiBcIjZcIixcbiAgICAgICAgICAgICAgICAgIHJ5OiBcIjZcIixcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA3OCAqIF92bS5yYW5kb20oKSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIxMlwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcInJlY3RcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICB4OiBcIjc1NVwiLFxuICAgICAgICAgICAgICAgICAgeTogX3ZtLmZpeGVkQW1vdW50ICogaW5kZXggKyBfdm0ub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgcng6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgcnk6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDExNyAqIF92bS5yYW5kb20oKSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIxMlwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcInJlY3RcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICB4OiBcIjkzOFwiLFxuICAgICAgICAgICAgICAgICAgeTogX3ZtLmZpeGVkQW1vdW50ICogaW5kZXggKyBfdm0ub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgcng6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgcnk6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDgzICogX3ZtLnJhbmRvbSgpLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjEyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFwicmVjdFwiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIHg6IFwiMFwiLFxuICAgICAgICAgICAgICAgICAgeTogX3ZtLmZpeGVkQW1vdW50ICogaW5kZXgsXG4gICAgICAgICAgICAgICAgICByeDogXCI2XCIsXG4gICAgICAgICAgICAgICAgICByeTogXCI2XCIsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogXCIxMDYwXCIsXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiLjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgICAgMlxuICAgICAgKSxcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3J1bGVTZXRbMV0ucnVsZXNbMl0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9Db250ZW50TG9hZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZjJkYTU5NFwiIiwiaW1wb3J0IF9tZXJnZUpTWFByb3BzIGZyb20gJ2JhYmVsLWhlbHBlci12dWUtanN4LW1lcmdlLXByb3BzJztcblxudmFyIHVpZCA9IChmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7XG59KTtcblxudmFyIENvbnRlbnRMb2FkZXIgPSB7XG4gIG5hbWU6ICdDb250ZW50TG9hZGVyJyxcbiAgZnVuY3Rpb25hbDogdHJ1ZSxcbiAgcHJvcHM6IHtcbiAgICB3aWR0aDoge1xuICAgICAgdHlwZTogW051bWJlciwgU3RyaW5nXSxcbiAgICAgIFwiZGVmYXVsdFwiOiA0MDBcbiAgICB9LFxuICAgIGhlaWdodDoge1xuICAgICAgdHlwZTogW051bWJlciwgU3RyaW5nXSxcbiAgICAgIFwiZGVmYXVsdFwiOiAxMzBcbiAgICB9LFxuICAgIHNwZWVkOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBcImRlZmF1bHRcIjogMlxuICAgIH0sXG4gICAgcHJlc2VydmVBc3BlY3RSYXRpbzoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgXCJkZWZhdWx0XCI6ICd4TWlkWU1pZCBtZWV0J1xuICAgIH0sXG4gICAgYmFzZVVybDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgXCJkZWZhdWx0XCI6ICcnXG4gICAgfSxcbiAgICBwcmltYXJ5Q29sb3I6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIFwiZGVmYXVsdFwiOiAnI2Y5ZjlmOSdcbiAgICB9LFxuICAgIHNlY29uZGFyeUNvbG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBcImRlZmF1bHRcIjogJyNlY2ViZWInXG4gICAgfSxcbiAgICBwcmltYXJ5T3BhY2l0eToge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgXCJkZWZhdWx0XCI6IDFcbiAgICB9LFxuICAgIHNlY29uZGFyeU9wYWNpdHk6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIFwiZGVmYXVsdFwiOiAxXG4gICAgfSxcbiAgICB1bmlxdWVLZXk6IHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0sXG4gICAgYW5pbWF0ZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIFwiZGVmYXVsdFwiOiB0cnVlXG4gICAgfVxuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoLCBfcmVmKSB7XG4gICAgdmFyIHByb3BzID0gX3JlZi5wcm9wcyxcbiAgICAgICAgZGF0YSA9IF9yZWYuZGF0YSxcbiAgICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICAgIHZhciBpZENsaXAgPSBwcm9wcy51bmlxdWVLZXkgPyBwcm9wcy51bmlxdWVLZXkgKyBcIi1pZENsaXBcIiA6IHVpZCgpO1xuICAgIHZhciBpZEdyYWRpZW50ID0gcHJvcHMudW5pcXVlS2V5ID8gcHJvcHMudW5pcXVlS2V5ICsgXCItaWRHcmFkaWVudFwiIDogdWlkKCk7XG4gICAgcmV0dXJuIGgoXCJzdmdcIiwgX21lcmdlSlNYUHJvcHMoW2RhdGEsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIFwiICsgcHJvcHMud2lkdGggKyBcIiBcIiArIHByb3BzLmhlaWdodCxcbiAgICAgICAgdmVyc2lvbjogXCIxLjFcIixcbiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbzogcHJvcHMucHJlc2VydmVBc3BlY3RSYXRpb1xuICAgICAgfVxuICAgIH1dKSwgW2goXCJyZWN0XCIsIHtcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGZpbGw6IFwidXJsKFwiICsgcHJvcHMuYmFzZVVybCArIFwiI1wiICsgaWRHcmFkaWVudCArIFwiKVwiXG4gICAgICB9LFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgXCJjbGlwLXBhdGhcIjogXCJ1cmwoXCIgKyBwcm9wcy5iYXNlVXJsICsgXCIjXCIgKyBpZENsaXAgKyBcIilcIixcbiAgICAgICAgeDogXCIwXCIsXG4gICAgICAgIHk6IFwiMFwiLFxuICAgICAgICB3aWR0aDogcHJvcHMud2lkdGgsXG4gICAgICAgIGhlaWdodDogcHJvcHMuaGVpZ2h0XG4gICAgICB9XG4gICAgfSksIGgoXCJkZWZzXCIsIFtoKFwiY2xpcFBhdGhcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgaWQ6IGlkQ2xpcFxuICAgICAgfVxuICAgIH0sIFtjaGlsZHJlbiB8fCBoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjBcIixcbiAgICAgICAgeTogXCIwXCIsXG4gICAgICAgIHJ4OiBcIjVcIixcbiAgICAgICAgcnk6IFwiNVwiLFxuICAgICAgICB3aWR0aDogcHJvcHMud2lkdGgsXG4gICAgICAgIGhlaWdodDogcHJvcHMuaGVpZ2h0XG4gICAgICB9XG4gICAgfSldKSwgaChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIGlkOiBpZEdyYWRpZW50XG4gICAgICB9XG4gICAgfSwgW2goXCJzdG9wXCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIG9mZnNldDogXCIwJVwiLFxuICAgICAgICBcInN0b3AtY29sb3JcIjogcHJvcHMucHJpbWFyeUNvbG9yLFxuICAgICAgICBcInN0b3Atb3BhY2l0eVwiOiBwcm9wcy5wcmltYXJ5T3BhY2l0eVxuICAgICAgfVxuICAgIH0sIFtwcm9wcy5hbmltYXRlID8gaChcImFuaW1hdGVcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgYXR0cmlidXRlTmFtZTogXCJvZmZzZXRcIixcbiAgICAgICAgdmFsdWVzOiBcIi0yOyAxXCIsXG4gICAgICAgIGR1cjogcHJvcHMuc3BlZWQgKyBcInNcIixcbiAgICAgICAgcmVwZWF0Q291bnQ6IFwiaW5kZWZpbml0ZVwiXG4gICAgICB9XG4gICAgfSkgOiBudWxsXSksIGgoXCJzdG9wXCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIG9mZnNldDogXCI1MCVcIixcbiAgICAgICAgXCJzdG9wLWNvbG9yXCI6IHByb3BzLnNlY29uZGFyeUNvbG9yLFxuICAgICAgICBcInN0b3Atb3BhY2l0eVwiOiBwcm9wcy5zZWNvbmRhcnlPcGFjaXR5XG4gICAgICB9XG4gICAgfSwgW3Byb3BzLmFuaW1hdGUgPyBoKFwiYW5pbWF0ZVwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICBhdHRyaWJ1dGVOYW1lOiBcIm9mZnNldFwiLFxuICAgICAgICB2YWx1ZXM6IFwiLTEuNTsgMS41XCIsXG4gICAgICAgIGR1cjogcHJvcHMuc3BlZWQgKyBcInNcIixcbiAgICAgICAgcmVwZWF0Q291bnQ6IFwiaW5kZWZpbml0ZVwiXG4gICAgICB9XG4gICAgfSkgOiBudWxsXSksIGgoXCJzdG9wXCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgICAgIFwic3RvcC1jb2xvclwiOiBwcm9wcy5wcmltYXJ5Q29sb3IsXG4gICAgICAgIFwic3RvcC1vcGFjaXR5XCI6IHByb3BzLnByaW1hcnlPcGFjaXR5XG4gICAgICB9XG4gICAgfSwgW3Byb3BzLmFuaW1hdGUgPyBoKFwiYW5pbWF0ZVwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICBhdHRyaWJ1dGVOYW1lOiBcIm9mZnNldFwiLFxuICAgICAgICB2YWx1ZXM6IFwiLTE7IDJcIixcbiAgICAgICAgZHVyOiBwcm9wcy5zcGVlZCArIFwic1wiLFxuICAgICAgICByZXBlYXRDb3VudDogXCJpbmRlZmluaXRlXCJcbiAgICAgIH1cbiAgICB9KSA6IG51bGxdKV0pXSldKTtcbiAgfVxufTtcblxudmFyIEJ1bGxldExpc3RMb2FkZXIgPSB7XG4gIG5hbWU6ICdCdWxsZXRMaXN0TG9hZGVyJyxcbiAgZnVuY3Rpb25hbDogdHJ1ZSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCwgX3JlZikge1xuICAgIHZhciBkYXRhID0gX3JlZi5kYXRhO1xuICAgIHJldHVybiBoKENvbnRlbnRMb2FkZXIsIGRhdGEsIFtoKFwiY2lyY2xlXCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIGN4OiBcIjEwXCIsXG4gICAgICAgIGN5OiBcIjIwXCIsXG4gICAgICAgIHI6IFwiOFwiXG4gICAgICB9XG4gICAgfSksIGgoXCJyZWN0XCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHg6IFwiMjVcIixcbiAgICAgICAgeTogXCIxNVwiLFxuICAgICAgICByeDogXCI1XCIsXG4gICAgICAgIHJ5OiBcIjVcIixcbiAgICAgICAgd2lkdGg6IFwiMjIwXCIsXG4gICAgICAgIGhlaWdodDogXCIxMFwiXG4gICAgICB9XG4gICAgfSksIGgoXCJjaXJjbGVcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgY3g6IFwiMTBcIixcbiAgICAgICAgY3k6IFwiNTBcIixcbiAgICAgICAgcjogXCI4XCJcbiAgICAgIH1cbiAgICB9KSwgaChcInJlY3RcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgeDogXCIyNVwiLFxuICAgICAgICB5OiBcIjQ1XCIsXG4gICAgICAgIHJ4OiBcIjVcIixcbiAgICAgICAgcnk6IFwiNVwiLFxuICAgICAgICB3aWR0aDogXCIyMjBcIixcbiAgICAgICAgaGVpZ2h0OiBcIjEwXCJcbiAgICAgIH1cbiAgICB9KSwgaChcImNpcmNsZVwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICBjeDogXCIxMFwiLFxuICAgICAgICBjeTogXCI4MFwiLFxuICAgICAgICByOiBcIjhcIlxuICAgICAgfVxuICAgIH0pLCBoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjI1XCIsXG4gICAgICAgIHk6IFwiNzVcIixcbiAgICAgICAgcng6IFwiNVwiLFxuICAgICAgICByeTogXCI1XCIsXG4gICAgICAgIHdpZHRoOiBcIjIyMFwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTBcIlxuICAgICAgfVxuICAgIH0pLCBoKFwiY2lyY2xlXCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIGN4OiBcIjEwXCIsXG4gICAgICAgIGN5OiBcIjExMFwiLFxuICAgICAgICByOiBcIjhcIlxuICAgICAgfVxuICAgIH0pLCBoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjI1XCIsXG4gICAgICAgIHk6IFwiMTA1XCIsXG4gICAgICAgIHJ4OiBcIjVcIixcbiAgICAgICAgcnk6IFwiNVwiLFxuICAgICAgICB3aWR0aDogXCIyMjBcIixcbiAgICAgICAgaGVpZ2h0OiBcIjEwXCJcbiAgICAgIH1cbiAgICB9KV0pO1xuICB9XG59O1xuXG52YXIgQ29kZUxvYWRlciA9IHtcbiAgbmFtZTogJ0NvZGVMb2FkZXInLFxuICBmdW5jdGlvbmFsOiB0cnVlLFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoLCBfcmVmKSB7XG4gICAgdmFyIGRhdGEgPSBfcmVmLmRhdGE7XG4gICAgcmV0dXJuIGgoQ29udGVudExvYWRlciwgZGF0YSwgW2goXCJyZWN0XCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHg6IFwiMFwiLFxuICAgICAgICB5OiBcIjBcIixcbiAgICAgICAgcng6IFwiM1wiLFxuICAgICAgICByeTogXCIzXCIsXG4gICAgICAgIHdpZHRoOiBcIjcwXCIsXG4gICAgICAgIGhlaWdodDogXCIxMFwiXG4gICAgICB9XG4gICAgfSksIGgoXCJyZWN0XCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHg6IFwiODBcIixcbiAgICAgICAgeTogXCIwXCIsXG4gICAgICAgIHJ4OiBcIjNcIixcbiAgICAgICAgcnk6IFwiM1wiLFxuICAgICAgICB3aWR0aDogXCIxMDBcIixcbiAgICAgICAgaGVpZ2h0OiBcIjEwXCJcbiAgICAgIH1cbiAgICB9KSwgaChcInJlY3RcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgeDogXCIxOTBcIixcbiAgICAgICAgeTogXCIwXCIsXG4gICAgICAgIHJ4OiBcIjNcIixcbiAgICAgICAgcnk6IFwiM1wiLFxuICAgICAgICB3aWR0aDogXCIxMFwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTBcIlxuICAgICAgfVxuICAgIH0pLCBoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjE1XCIsXG4gICAgICAgIHk6IFwiMjBcIixcbiAgICAgICAgcng6IFwiM1wiLFxuICAgICAgICByeTogXCIzXCIsXG4gICAgICAgIHdpZHRoOiBcIjEzMFwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTBcIlxuICAgICAgfVxuICAgIH0pLCBoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjE1NVwiLFxuICAgICAgICB5OiBcIjIwXCIsXG4gICAgICAgIHJ4OiBcIjNcIixcbiAgICAgICAgcnk6IFwiM1wiLFxuICAgICAgICB3aWR0aDogXCIxMzBcIixcbiAgICAgICAgaGVpZ2h0OiBcIjEwXCJcbiAgICAgIH1cbiAgICB9KSwgaChcInJlY3RcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgeDogXCIxNVwiLFxuICAgICAgICB5OiBcIjQwXCIsXG4gICAgICAgIHJ4OiBcIjNcIixcbiAgICAgICAgcnk6IFwiM1wiLFxuICAgICAgICB3aWR0aDogXCI5MFwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTBcIlxuICAgICAgfVxuICAgIH0pLCBoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjExNVwiLFxuICAgICAgICB5OiBcIjQwXCIsXG4gICAgICAgIHJ4OiBcIjNcIixcbiAgICAgICAgcnk6IFwiM1wiLFxuICAgICAgICB3aWR0aDogXCI2MFwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTBcIlxuICAgICAgfVxuICAgIH0pLCBoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjE4NVwiLFxuICAgICAgICB5OiBcIjQwXCIsXG4gICAgICAgIHJ4OiBcIjNcIixcbiAgICAgICAgcnk6IFwiM1wiLFxuICAgICAgICB3aWR0aDogXCI2MFwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTBcIlxuICAgICAgfVxuICAgIH0pLCBoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjBcIixcbiAgICAgICAgeTogXCI2MFwiLFxuICAgICAgICByeDogXCIzXCIsXG4gICAgICAgIHJ5OiBcIjNcIixcbiAgICAgICAgd2lkdGg6IFwiMzBcIixcbiAgICAgICAgaGVpZ2h0OiBcIjEwXCJcbiAgICAgIH1cbiAgICB9KV0pO1xuICB9XG59O1xuXG52YXIgRmFjZWJvb2tMb2FkZXIgPSB7XG4gIG5hbWU6ICdGYWNlYm9va0xvYWRlcicsXG4gIGZ1bmN0aW9uYWw6IHRydWUsXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgsIF9yZWYpIHtcbiAgICB2YXIgZGF0YSA9IF9yZWYuZGF0YTtcbiAgICByZXR1cm4gaChDb250ZW50TG9hZGVyLCBkYXRhLCBbaChcInJlY3RcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgeDogXCI3MFwiLFxuICAgICAgICB5OiBcIjE1XCIsXG4gICAgICAgIHJ4OiBcIjRcIixcbiAgICAgICAgcnk6IFwiNFwiLFxuICAgICAgICB3aWR0aDogXCIxMTdcIixcbiAgICAgICAgaGVpZ2h0OiBcIjYuNFwiXG4gICAgICB9XG4gICAgfSksIGgoXCJyZWN0XCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHg6IFwiNzBcIixcbiAgICAgICAgeTogXCIzNVwiLFxuICAgICAgICByeDogXCIzXCIsXG4gICAgICAgIHJ5OiBcIjNcIixcbiAgICAgICAgd2lkdGg6IFwiODVcIixcbiAgICAgICAgaGVpZ2h0OiBcIjYuNFwiXG4gICAgICB9XG4gICAgfSksIGgoXCJyZWN0XCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHg6IFwiMFwiLFxuICAgICAgICB5OiBcIjgwXCIsXG4gICAgICAgIHJ4OiBcIjNcIixcbiAgICAgICAgcnk6IFwiM1wiLFxuICAgICAgICB3aWR0aDogXCIzNTBcIixcbiAgICAgICAgaGVpZ2h0OiBcIjYuNFwiXG4gICAgICB9XG4gICAgfSksIGgoXCJyZWN0XCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHg6IFwiMFwiLFxuICAgICAgICB5OiBcIjEwMFwiLFxuICAgICAgICByeDogXCIzXCIsXG4gICAgICAgIHJ5OiBcIjNcIixcbiAgICAgICAgd2lkdGg6IFwiMzgwXCIsXG4gICAgICAgIGhlaWdodDogXCI2LjRcIlxuICAgICAgfVxuICAgIH0pLCBoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjBcIixcbiAgICAgICAgeTogXCIxMjBcIixcbiAgICAgICAgcng6IFwiM1wiLFxuICAgICAgICByeTogXCIzXCIsXG4gICAgICAgIHdpZHRoOiBcIjIwMVwiLFxuICAgICAgICBoZWlnaHQ6IFwiNi40XCJcbiAgICAgIH1cbiAgICB9KSwgaChcImNpcmNsZVwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICBjeDogXCIzMFwiLFxuICAgICAgICBjeTogXCIzMFwiLFxuICAgICAgICByOiBcIjMwXCJcbiAgICAgIH1cbiAgICB9KV0pO1xuICB9XG59O1xuXG52YXIgTGlzdExvYWRlciA9IHtcbiAgbmFtZTogJ0xpc3RMb2FkZXInLFxuICBmdW5jdGlvbmFsOiB0cnVlLFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoLCBfcmVmKSB7XG4gICAgdmFyIGRhdGEgPSBfcmVmLmRhdGE7XG4gICAgcmV0dXJuIGgoQ29udGVudExvYWRlciwgZGF0YSwgW2goXCJyZWN0XCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHg6IFwiMFwiLFxuICAgICAgICB5OiBcIjBcIixcbiAgICAgICAgcng6IFwiM1wiLFxuICAgICAgICByeTogXCIzXCIsXG4gICAgICAgIHdpZHRoOiBcIjI1MFwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTBcIlxuICAgICAgfVxuICAgIH0pLCBoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjIwXCIsXG4gICAgICAgIHk6IFwiMjBcIixcbiAgICAgICAgcng6IFwiM1wiLFxuICAgICAgICByeTogXCIzXCIsXG4gICAgICAgIHdpZHRoOiBcIjIyMFwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTBcIlxuICAgICAgfVxuICAgIH0pLCBoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjIwXCIsXG4gICAgICAgIHk6IFwiNDBcIixcbiAgICAgICAgcng6IFwiM1wiLFxuICAgICAgICByeTogXCIzXCIsXG4gICAgICAgIHdpZHRoOiBcIjE3MFwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTBcIlxuICAgICAgfVxuICAgIH0pLCBoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjBcIixcbiAgICAgICAgeTogXCI2MFwiLFxuICAgICAgICByeDogXCIzXCIsXG4gICAgICAgIHJ5OiBcIjNcIixcbiAgICAgICAgd2lkdGg6IFwiMjUwXCIsXG4gICAgICAgIGhlaWdodDogXCIxMFwiXG4gICAgICB9XG4gICAgfSksIGgoXCJyZWN0XCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHg6IFwiMjBcIixcbiAgICAgICAgeTogXCI4MFwiLFxuICAgICAgICByeDogXCIzXCIsXG4gICAgICAgIHJ5OiBcIjNcIixcbiAgICAgICAgd2lkdGg6IFwiMjAwXCIsXG4gICAgICAgIGhlaWdodDogXCIxMFwiXG4gICAgICB9XG4gICAgfSksIGgoXCJyZWN0XCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHg6IFwiMjBcIixcbiAgICAgICAgeTogXCIxMDBcIixcbiAgICAgICAgcng6IFwiM1wiLFxuICAgICAgICByeTogXCIzXCIsXG4gICAgICAgIHdpZHRoOiBcIjgwXCIsXG4gICAgICAgIGhlaWdodDogXCIxMFwiXG4gICAgICB9XG4gICAgfSldKTtcbiAgfVxufTtcblxudmFyIEluc3RhZ3JhbUxvYWRlciA9IHtcbiAgbmFtZTogJ0luc3RhZ3JhbUxvYWRlcicsXG4gIGZ1bmN0aW9uYWw6IHRydWUsXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgsIF9yZWYpIHtcbiAgICB2YXIgZGF0YSA9IF9yZWYuZGF0YTtcbiAgICByZXR1cm4gaChDb250ZW50TG9hZGVyLCBfbWVyZ2VKU1hQcm9wcyhbZGF0YSwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgaGVpZ2h0OiA0ODBcbiAgICAgIH1cbiAgICB9XSksIFtoKFwiY2lyY2xlXCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIGN4OiBcIjMwXCIsXG4gICAgICAgIGN5OiBcIjMwXCIsXG4gICAgICAgIHI6IFwiMzBcIlxuICAgICAgfVxuICAgIH0pLCBoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjc1XCIsXG4gICAgICAgIHk6IFwiMTNcIixcbiAgICAgICAgcng6IFwiNFwiLFxuICAgICAgICByeTogXCI0XCIsXG4gICAgICAgIHdpZHRoOiBcIjEwMFwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTNcIlxuICAgICAgfVxuICAgIH0pLCBoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjc1XCIsXG4gICAgICAgIHk6IFwiMzdcIixcbiAgICAgICAgcng6IFwiNFwiLFxuICAgICAgICByeTogXCI0XCIsXG4gICAgICAgIHdpZHRoOiBcIjUwXCIsXG4gICAgICAgIGhlaWdodDogXCI4XCJcbiAgICAgIH1cbiAgICB9KSwgaChcInJlY3RcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgeDogXCIwXCIsXG4gICAgICAgIHk6IFwiNzBcIixcbiAgICAgICAgcng6IFwiNVwiLFxuICAgICAgICByeTogXCI1XCIsXG4gICAgICAgIHdpZHRoOiBcIjQwMFwiLFxuICAgICAgICBoZWlnaHQ6IFwiNDAwXCJcbiAgICAgIH1cbiAgICB9KV0pO1xuICB9XG59O1xuXG5leHBvcnQgeyBDb250ZW50TG9hZGVyLCBCdWxsZXRMaXN0TG9hZGVyLCBDb2RlTG9hZGVyLCBGYWNlYm9va0xvYWRlciwgTGlzdExvYWRlciwgSW5zdGFncmFtTG9hZGVyIH07XG4iLCI8dGVtcGxhdGU+XG4gICAgPGRpdj5cbiAgICAgICAgPGRpdiA6c3R5bGU9XCJ7IGhlaWdodDogMzAwLCB3aWR0aDogJzEwMCUnIH1cIj48L2Rpdj5cbiAgICAgICAgPGNvbnRlbnQtbG9hZGVyXG4gICAgICAgICAgICA6aGVpZ2h0PVwiZml4ZWRBbW91bnQgKiBjb3VudFwiXG4gICAgICAgICAgICA6d2lkdGg9XCIxMDYwXCJcbiAgICAgICAgICAgIDpzcGVlZD1cIjJcIlxuICAgICAgICAgICAgcHJpbWFyeUNvbG9yPVwiI2Q5ZDlkOVwiXG4gICAgICAgICAgICBzZWNvbmRhcnlDb2xvcj1cIiNlY2ViZWJcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8dGVtcGxhdGUgdi1mb3I9XCJpbmRleCBpbiBjb3VudFwiPlxuICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIxM1wiIDp5PVwiZml4ZWRBbW91bnQgKiBpbmRleCArIG9mZnNldFwiIHJ4PVwiNlwiIHJ5PVwiNlwiIDp3aWR0aD1cIjIwMCAqIHJhbmRvbSgpXCIgaGVpZ2h0PVwiMTJcIiAvPlxuICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI1MzNcIiA6eT1cImZpeGVkQW1vdW50ICogaW5kZXggKyBvZmZzZXRcIiByeD1cIjZcIiByeT1cIjZcIiA6d2lkdGg9XCI2MyAqIHJhbmRvbSgpXCIgaGVpZ2h0PVwiMTJcIiAvPlxuICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI2NTNcIiA6eT1cImZpeGVkQW1vdW50ICogaW5kZXggKyBvZmZzZXRcIiByeD1cIjZcIiByeT1cIjZcIiA6d2lkdGg9XCI3OCAqIHJhbmRvbSgpXCIgaGVpZ2h0PVwiMTJcIiAvPlxuICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI3NTVcIiA6eT1cImZpeGVkQW1vdW50ICogaW5kZXggKyBvZmZzZXRcIiByeD1cIjZcIiByeT1cIjZcIiA6d2lkdGg9XCIxMTcgKiByYW5kb20oKVwiIGhlaWdodD1cIjEyXCIgLz5cbiAgICAgICAgICAgICAgICA8cmVjdCB4PVwiOTM4XCIgOnk9XCJmaXhlZEFtb3VudCAqIGluZGV4ICsgb2Zmc2V0XCIgcng9XCI2XCIgcnk9XCI2XCIgOndpZHRoPVwiODMgKiByYW5kb20oKVwiIGhlaWdodD1cIjEyXCIgLz5cblxuICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIwXCIgOnk9XCJmaXhlZEFtb3VudCAqIGluZGV4XCIgcng9XCI2XCIgcnk9XCI2XCIgd2lkdGg9XCIxMDYwXCIgaGVpZ2h0PVwiLjNcIiAvPlxuICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPC9jb250ZW50LWxvYWRlcj5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gICAgaW1wb3J0IHsgQ29udGVudExvYWRlciB9IGZyb20gJ3Z1ZS1jb250ZW50LWxvYWRlcic7XG5cbiAgICBleHBvcnQgZGVmYXVsdCB7XG4gICAgICAgIHByb3BzOiBbJ3N0b3JlJ10sXG4gICAgICAgIGRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgICBmaXhlZEFtb3VudDogMzEsXG4gICAgICAgICAgICBvZmZzZXQ6IDEwLFxuICAgICAgICAgICAgc3RlcHM6IFswLjcsIDAuOCwgMC45LCAxXVxuICAgICAgICB9KSxcbiAgICAgICAgY29tcHV0ZWQ6IHtcbiAgICAgICAgICAgIGNvdW50KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlLnBlclBhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgIHJhbmRvbSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdGVwc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLnN0ZXBzLmxlbmd0aCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgICBDb250ZW50TG9hZGVyXG4gICAgICAgIH1cbiAgICB9XG48L3NjcmlwdD5cbiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0NvbnRlbnRMb2FkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0NvbnRlbnRMb2FkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0NvbnRlbnRMb2FkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFmMmRhNTk0XCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vQ29udGVudExvYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuZXhwb3J0ICogZnJvbSBcIi4vQ29udGVudExvYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiPHRlbXBsYXRlPlxuICAgIDxkaXY+XG4gICAgICAgIDxmbGV4LWZpbHRlci1iYXIgOnN0b3JlPVwic3RvcmVcIiAvPlxuICAgICAgICA8ZmxleC1jb250ZW50LWxvYWRlciA6c3RvcmU9XCJzdG9yZVwiIHYtc2hvdz1cImxvYWRpbmdcIiAvPlxuICAgICAgICA8ZmxleC10YWJsZSA6c3RvcmU9XCJzdG9yZVwiIHYtbW9kZWw9XCJsb2FkaW5nXCIgdi1zaG93PVwiIWxvYWRpbmdcIiAvPlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgICBpbXBvcnQgRmxleFRhYmxlIGZyb20gJy4vY29tcG9uZW50cy9UYWJsZS52dWUnO1xuICAgIGltcG9ydCBGbGV4RmlsdGVyQmFyIGZyb20gJy4vY29tcG9uZW50cy9GaWx0ZXJCYXIudnVlJztcbiAgICBpbXBvcnQgRmxleENvbnRlbnRMb2FkZXIgZnJvbSAnLi9jb21wb25lbnRzL0NvbnRlbnRMb2FkZXIudnVlJztcblxuICAgIGV4cG9ydCBkZWZhdWx0IHtcbiAgICAgICAgcHJvcHM6IFsnaW5pdGlhbFN0b3JlJ10sXG4gICAgICAgIGNvbXBvbmVudHM6IHtGbGV4VGFibGUsIEZsZXhGaWx0ZXJCYXIsIEZsZXhDb250ZW50TG9hZGVyfSxcbiAgICAgICAgZGF0YTogKCkgPT4gKHtcbiAgICAgICAgICAgIHBlclBhZ2U6IDEwLFxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZVxuICAgICAgICB9KSxcbiAgICAgICAgY29tcHV0ZWQ6IHtcbiAgICAgICAgICAgIHN0b3JlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHRoaXMuaW5pdGlhbFN0b3JlIHx8ICd7fScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9BcHAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0FwcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vQXBwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZDMyNzhkZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0FwcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuZXhwb3J0ICogZnJvbSBcIi4vQXBwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7XG5pbXBvcnQgVnVlRXZlbnRzIGZyb20gJ3Z1ZS1ldmVudHMnO1xuaW1wb3J0IEFwcCBmcm9tICcuL0FwcC52dWUnO1xuXG5WdWUudXNlKFZ1ZUV2ZW50cyk7XG5cbmNvbnN0IElEID0gJyNmbGV4LW9iamVjdHMtbGlzdCc7XG5jb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihJRCk7XG5cbmlmIChlbGVtZW50KSB7XG4gICAgY29uc3QgaW5pdGlhbFN0b3JlID0gZWxlbWVudC5kYXRhc2V0LmluaXRpYWxTdG9yZTtcblxuICAgIG5ldyBWdWUoeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgICBlbDogSUQsXG4gICAgICAgIHJlbmRlcjogaCA9PiBoKEFwcCwge1xuICAgICAgICAgICAgcHJvcHM6IHtpbml0aWFsU3RvcmV9XG4gICAgICAgIH0pXG4gICAgfSk7XG59XG4iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0galF1ZXJ5OyIsIi8qKlxuICogKGMpIFRyaWxieSBNZWRpYSwgTExDXG4gKiBBdXRob3IgRGphbWlsIExlZ2F0b1xuICpcbiAqIEJhc2VkIG9uIE1hcmsgTWF0eWFzJ3MgRmluZGVyanNcbiAqIE1JVCBMaWNlbnNlXG4gKi9cblxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnZXZlbnRlbWl0dGVyMyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUUyA9IHtcbiAgICBsYWJlbEtleTogJ25hbWUnLFxuICAgIHZhbHVlS2V5OiAndmFsdWUnLCAvLyBuZXdcbiAgICBjaGlsZEtleTogJ2NoaWxkcmVuJyxcbiAgICBpY29uS2V5OiAnaWNvbicsIC8vIG5ld1xuICAgIGl0ZW1LZXk6ICdpdGVtLWtleScsIC8vIG5ld1xuICAgIGl0ZW1UcmlnZ2VyOiBudWxsLFxuICAgIHBhdGhCYXI6IHRydWUsXG4gICAgY2xhc3NOYW1lOiB7XG4gICAgICAgIGNvbnRhaW5lcjogJ2Zqcy1jb250YWluZXInLFxuICAgICAgICBwYXRoQmFyOiAnZmpzLXBhdGgtYmFyJyxcbiAgICAgICAgY29sOiAnZmpzLWNvbCcsXG4gICAgICAgIGxpc3Q6ICdmanMtbGlzdCcsXG4gICAgICAgIGl0ZW06ICdmanMtaXRlbScsXG4gICAgICAgIGFjdGl2ZTogJ2Zqcy1hY3RpdmUnLFxuICAgICAgICBjaGlsZHJlbjogJ2Zqcy1oYXMtY2hpbGRyZW4nLFxuICAgICAgICB1cmw6ICdmanMtdXJsJyxcbiAgICAgICAgaXRlbVByZXBlbmQ6ICdmanMtaXRlbS1wcmVwZW5kJyxcbiAgICAgICAgaXRlbUNvbnRlbnQ6ICdmanMtaXRlbS1jb250ZW50JyxcbiAgICAgICAgaXRlbUFwcGVuZDogJ2Zqcy1pdGVtLWFwcGVuZCdcbiAgICB9XG59O1xuXG5jbGFzcyBGaW5kZXIge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRhaW5lciwgZGF0YSwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLiRlbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lciA9ICQoY29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcblxuICAgICAgICB0aGlzLmNvbmZpZyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBERUZBVUxUUywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLm9mZignY2xpY2suZmluZGVyIGtleWRvd24uZmluZGVyJyk7XG5cbiAgICAgICAgLy8gZG9tIGV2ZW50c1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5vbignY2xpY2suZmluZGVyJywgdGhpcy5jbGlja0V2ZW50LmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5vbigna2V5ZG93bi5maW5kZXInLCB0aGlzLmtleWRvd25FdmVudC5iaW5kKHRoaXMpKTtcblxuICAgICAgICAvLyBpbnRlcm5hbCBldmVudHNcbiAgICAgICAgdGhpcy4kZW1pdHRlci5vbignaXRlbS1zZWxlY3RlZCcsIHRoaXMuaXRlbVNlbGVjdGVkLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLiRlbWl0dGVyLm9uKCdjcmVhdGUtY29sdW1uJywgdGhpcy5hZGRDb2x1bW4uYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuJGVtaXR0ZXIub24oJ25hdmlnYXRlJywgdGhpcy5uYXZpZ2F0ZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy4kZW1pdHRlci5vbignZ28tdG8nLCB0aGlzLmdvVG8uYmluZCh0aGlzLCB0aGlzLmRhdGEpKTtcblxuICAgICAgICB0aGlzLmNvbnRhaW5lci5hZGRDbGFzcyh0aGlzLmNvbmZpZy5jbGFzc05hbWUuY29udGFpbmVyKS5hdHRyKCd0YWJpbmRleCcsIDApO1xuXG4gICAgICAgIHRoaXMuY3JlYXRlQ29sdW1uKHRoaXMuZGF0YSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnBhdGhCYXIpIHtcbiAgICAgICAgICAgIHRoaXMucGF0aEJhciA9IHRoaXMuY3JlYXRlUGF0aEJhcigpO1xuICAgICAgICAgICAgdGhpcy5wYXRoQmFyLm9uKCdjbGljay5maW5kZXInLCAnW2RhdGEtYnJlYWRjcnVtYi1ub2RlXScsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoJ2JyZWFkY3J1bWJOb2RlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvKHRoaXMuZGF0YSwgbG9jYXRpb24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAnJyBpcyA8Um9vdD5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmRlZmF1bHRQYXRoIHx8IHRoaXMuY29uZmlnLmRlZmF1bHRQYXRoID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5nb1RvKHRoaXMuZGF0YSwgdGhpcy5jb25maWcuZGVmYXVsdFBhdGgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVsb2FkKGRhdGEgPSB0aGlzLmRhdGEpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVDb2x1bW4oZGF0YSk7XG5cbiAgICAgICAgLy8gJycgaXMgPFJvb3Q+XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5kZWZhdWx0UGF0aCB8fCB0aGlzLmNvbmZpZy5kZWZhdWx0UGF0aCA9PT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMuZ29UbyhkYXRhLCB0aGlzLmNvbmZpZy5kZWZhdWx0UGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVDb2x1bW4oZGF0YSwgcGFyZW50KSB7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gKGRhdGEpID0+IHRoaXMuY3JlYXRlQ29sdW1uKGRhdGEsIHBhcmVudCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBkYXRhLmNhbGwodGhpcywgcGFyZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSB8fCB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gQXJyYXkuZnJvbShkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLmNvbmZpZy5jcmVhdGVMaXN0IHx8IHRoaXMuY3JlYXRlTGlzdDtcbiAgICAgICAgICAgIGNvbnN0IGRpdiA9ICQoJzxkaXYgLz4nKTtcbiAgICAgICAgICAgIGRpdi5hcHBlbmQobGlzdC5jYWxsKHRoaXMsIGRhdGEpKS5hZGRDbGFzcyh0aGlzLmNvbmZpZy5jbGFzc05hbWUuY29sKTtcbiAgICAgICAgICAgIHRoaXMuJGVtaXR0ZXIuZW1pdCgnY3JlYXRlLWNvbHVtbicsIGRpdik7XG5cbiAgICAgICAgICAgIHJldHVybiBkaXY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZGF0YSB0eXBlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVQYXRoQmFyKCkge1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5zaWJsaW5ncyhgLiR7dGhpcy5jb25maWcuY2xhc3NOYW1lLnBhdGhCYXJ9YCkucmVtb3ZlKCk7XG4gICAgICAgIGNvbnN0IHBhdGhCYXIgPSAkKGA8ZGl2IGNsYXNzPVwiJHt0aGlzLmNvbmZpZy5jbGFzc05hbWUucGF0aEJhcn1cIiAvPmApO1xuICAgICAgICBwYXRoQmFyLmluc2VydEFmdGVyKHRoaXMuY29udGFpbmVyKTtcblxuICAgICAgICByZXR1cm4gcGF0aEJhcjtcbiAgICB9XG5cbiAgICBjbGlja0V2ZW50KGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGFyZ2V0LmNsb3Nlc3QoYC4ke3RoaXMuY29uZmlnLmNsYXNzTmFtZS5jb2x9YCk7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0YXJnZXQuY2xvc2VzdChgLiR7dGhpcy5jb25maWcuY2xhc3NOYW1lLml0ZW19YCk7XG4gICAgICAgIGNvbnN0IHByZXZlbnQgPSB0YXJnZXQuaXMoJ1tkYXRhLWZsZXhwYWdlcy1wcmV2ZW50XScpID8gdGFyZ2V0IDogdGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWZsZXhwYWdlcy1wcmV2ZW50XScpO1xuXG4gICAgICAgIGlmIChwcmV2ZW50LmRhdGEoJ2ZsZXhwYWdlc1ByZXZlbnQnKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5pdGVtVHJpZ2dlcikge1xuICAgICAgICAgICAgaWYgKHRhcmdldC5pcyh0aGlzLmNvbmZpZy5pdGVtVHJpZ2dlcikgfHwgdGFyZ2V0LmNsb3Nlc3QodGhpcy5jb25maWcuaXRlbVRyaWdnZXIpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0dGVyLmVtaXQoJ2l0ZW0tc2VsZWN0ZWQnLCB7Y29sdW1uLCBpdGVtfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaWYgKGl0ZW0ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLiRlbWl0dGVyLmVtaXQoJ2l0ZW0tc2VsZWN0ZWQnLCB7IGNvbHVtbiwgaXRlbSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGtleWRvd25FdmVudChldmVudCkge1xuICAgICAgICBjb25zdCBjb2RlcyA9IHsgMzc6ICdsZWZ0JywgMzg6ICd1cCcsIDM5OiAncmlnaHQnLCA0MDogJ2Rvd24nLCAxMzogJ2VudGVyJyB9O1xuXG4gICAgICAgIGlmIChldmVudC5rZXlDb2RlIGluIGNvZGVzKSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIHRoaXMuJGVtaXR0ZXIuZW1pdCgnbmF2aWdhdGUnLCB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiBjb2Rlc1tldmVudC5rZXlDb2RlXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpdGVtU2VsZWN0ZWQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHZhbHVlLml0ZW07XG4gICAgICAgIGlmICghZWxlbWVudC5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBlbGVtZW50WzBdLl9pdGVtO1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB2YWx1ZS5jb2x1bW47XG4gICAgICAgIGNvbnN0IGRhdGEgPSBpdGVtW3RoaXMuY29uZmlnLmNoaWxkS2V5XSB8fCB0aGlzLmRhdGE7IC8vIFRPRE86IHRoaXMuZGF0YSBmb3IgY29uc3RhbnQgcmVmcmVzaFxuICAgICAgICBjb25zdCBhY3RpdmUgPSAkKGNvbHVtbikuZmluZChgLiR7dGhpcy5jb25maWcuY2xhc3NOYW1lLmFjdGl2ZX1gKTtcblxuICAgICAgICBpZiAoYWN0aXZlLmxlbmd0aCkge1xuICAgICAgICAgICAgYWN0aXZlLnJlbW92ZUNsYXNzKHRoaXMuY29uZmlnLmNsYXNzTmFtZS5hY3RpdmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudC5hZGRDbGFzcyh0aGlzLmNvbmZpZy5jbGFzc05hbWUuYWN0aXZlKTtcbiAgICAgICAgY29sdW1uLm5leHRBbGwoKS5yZW1vdmUoKTsgLy8gPyE/IT9cblxuICAgICAgICB0aGlzLmNvbnRhaW5lclswXS5mb2N1cygpO1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8od2luZG93LnBhZ2VYT2Zmc2V0LCB3aW5kb3cucGFnZVlPZmZzZXQpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlUGF0aEJhcigpO1xuXG4gICAgICAgIGxldCBuZXdDb2x1bW47XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBuZXdDb2x1bW4gPSB0aGlzLmNyZWF0ZUNvbHVtbihkYXRhLCBpdGVtKTtcbiAgICAgICAgICAgIHRoaXMuJGVtaXR0ZXIuZW1pdCgnaW50ZXJpb3Itc2VsZWN0ZWQnLCBpdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuJGVtaXR0ZXIuZW1pdCgnbGVhZi1zZWxlY3RlZCcsIGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld0NvbHVtbjtcbiAgICB9XG5cbiAgICBhZGRDb2x1bW4oY29sdW1uKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChjb2x1bW4pO1xuICAgICAgICB0aGlzLiRlbWl0dGVyLmVtaXQoJ2NvbHVtbi1jcmVhdGVkJywgY29sdW1uKTtcbiAgICB9XG5cbiAgICBuYXZpZ2F0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmZpbmRMYXN0QWN0aXZlKCk7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHZhbHVlLmRpcmVjdGlvbjtcbiAgICAgICAgbGV0IGNvbHVtbjtcbiAgICAgICAgbGV0IGl0ZW07XG4gICAgICAgIGxldCB0YXJnZXQ7XG5cbiAgICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAgICAgaXRlbSA9IGFjdGl2ZS5pdGVtO1xuICAgICAgICAgICAgY29sdW1uID0gYWN0aXZlLmNvbHVtbjtcblxuICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3VwJyAmJiBpdGVtLnByZXYoKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBpdGVtLnByZXYoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnZG93bicgJiYgaXRlbS5uZXh0KCkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gaXRlbS5uZXh0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3JpZ2h0JyAmJiBjb2x1bW4ubmV4dCgpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IGNvbHVtbi5uZXh0KCk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gY29sdW1uLmZpbmQoYC4ke3RoaXMuY29uZmlnLmNsYXNzTmFtZS5pdGVtfWApLmZpcnN0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2xlZnQnICYmIGNvbHVtbi5wcmV2KCkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gY29sdW1uLnByZXYoKTtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBjb2x1bW4uZmluZChgLiR7dGhpcy5jb25maWcuY2xhc3NOYW1lLmFjdGl2ZX1gKS5maXJzdCgpIHx8IGNvbHVtbi5maW5kKGAuJHt0aGlzLmNvbmZpZy5jbGFzc05hbWUuaXRlbX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuY29udGFpbmVyLmZpbmQoYC4ke3RoaXMuY29uZmlnLmNsYXNzTmFtZS5jb2x9YCkuZmlyc3QoKTtcbiAgICAgICAgICAgIHRhcmdldCA9IGNvbHVtbi5maW5kKGAuJHt0aGlzLmNvbmZpZy5jbGFzc05hbWUuaXRlbX1gKS5maXJzdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdGl2ZSAmJiBkaXJlY3Rpb24gPT09ICdlbnRlcicpIHtcbiAgICAgICAgICAgIGNvbnN0IGhyZWYgPSBhY3RpdmUuaXRlbS5maW5kKCdhJykucHJvcCgnaHJlZicpO1xuICAgICAgICAgICAgaWYgKGhyZWYpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSBocmVmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy4kZW1pdHRlci5lbWl0KCdpdGVtLXNlbGVjdGVkJywge1xuICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICBpdGVtOiB0YXJnZXRcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNJblZpZXcodGFyZ2V0LCBjb2x1bW4sIHRydWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb1ZpZXcodGFyZ2V0WzBdLCBjb2x1bW5bMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ29UbyhkYXRhLCBwYXRoKSB7XG4gICAgICAgIHBhdGggPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IHBhdGguc3BsaXQoJy8nKS5tYXAoYml0ID0+IGJpdC50cmltKCkpLmZpbHRlcihCb29sZWFuKTtcblxuICAgICAgICBpZiAocGF0aC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNoaWxkcmVuKCkucmVtb3ZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGRhdGEuY2FsbCh0aGlzLCBudWxsLCAoZGF0YSkgPT4gdGhpcy5zZWxlY3RQYXRoKHBhdGgsIGRhdGEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UGF0aChwYXRoLCBkYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdFBhdGgocGF0aCwgZGF0YSwgY29sdW1uKSB7XG4gICAgICAgIGNvbHVtbiA9IGNvbHVtbiB8fCAocGF0aC5sZW5ndGggPyB0aGlzLmNyZWF0ZUNvbHVtbihkYXRhKSA6IHRoaXMuY29udGFpbmVyLmZpbmQoYD4gLiR7dGhpcy5jb25maWcuY2xhc3NOYW1lLmNvbH1gKSk7XG5cbiAgICAgICAgY29uc3QgY3VycmVudCA9IHBhdGhbMF0gfHwgJyc7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YS5maW5kKChpdGVtKSA9PiBpdGVtW3RoaXMuY29uZmlnLml0ZW1LZXldID09PSBjdXJyZW50KTtcbiAgICAgICAgY29uc3QgaXRlbSA9IGNvbHVtbi5maW5kKGBbZGF0YS1manMtaXRlbT1cIiR7Y3VycmVudH1cIl1gKS5maXJzdCgpO1xuICAgICAgICBjb25zdCBuZXdDb2x1bW4gPSB0aGlzLml0ZW1TZWxlY3RlZCh7XG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICBpdGVtXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5pc0luVmlldyhpdGVtLCBjb2x1bW4sIHRydWUpKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvVmlldyhpdGVtWzBdLCBjb2x1bW5bMF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcGF0aC5zaGlmdCgpO1xuXG4gICAgICAgIGlmIChwYXRoLmxlbmd0aCAmJiBjaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RQYXRoKHBhdGgsIGNoaWxkcmVuW3RoaXMuY29uZmlnLmNoaWxkS2V5XSwgbmV3Q29sdW1uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZpbmRMYXN0QWN0aXZlKCkge1xuICAgICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmNvbnRhaW5lci5maW5kKGAuJHt0aGlzLmNvbmZpZy5jbGFzc05hbWUuYWN0aXZlfWApO1xuICAgICAgICBpZiAoIWFjdGl2ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXRlbSA9IGFjdGl2ZS5sYXN0KCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IGl0ZW0uY2xvc2VzdChgLiR7dGhpcy5jb25maWcuY2xhc3NOYW1lLmNvbH1gKTtcblxuICAgICAgICByZXR1cm4geyBpdGVtLCBjb2x1bW4gfTtcbiAgICB9XG5cbiAgICBjcmVhdGVMaXN0KGRhdGEpIHtcbiAgICAgICAgY29uc3QgbGlzdCA9ICQoJzx1bCAvPicpO1xuICAgICAgICBjb25zdCBjcmVhdGVJdGVtID0gdGhpcy5jb25maWcuY3JlYXRlSXRlbSB8fCB0aGlzLmNyZWF0ZUl0ZW07XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gZGF0YS5tYXAoKGl0ZW0pID0+IGNyZWF0ZUl0ZW0uY2FsbCh0aGlzLCBpdGVtKSk7XG5cbiAgICAgICAgY29uc3QgZnJhZ21lbnRzID0gaXRlbXMucmVkdWNlKChmcmFnbWVudCwgY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoY3VycmVudFswXSB8fCBjdXJyZW50KTtcblxuICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50O1xuICAgICAgICB9LCBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuXG4gICAgICAgIGxpc3QuYXBwZW5kKGZyYWdtZW50cykuYWRkQ2xhc3ModGhpcy5jb25maWcuY2xhc3NOYW1lLmxpc3QpO1xuXG4gICAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIGNyZWF0ZUl0ZW0oaXRlbSkge1xuICAgICAgICBjb25zdCBsaXN0SXRlbSA9ICQoJzxsaSAvPicpO1xuICAgICAgICBjb25zdCBsaXN0SXRlbUNsYXNzZXMgPSBbdGhpcy5jb25maWcuY2xhc3NOYW1lLml0ZW1dO1xuICAgICAgICBjb25zdCBsaW5rID0gJChgPGEgaHJlZj1cIiR7aXRlbS5ocmVmIHx8ICcnfVwiIC8+YCk7XG4gICAgICAgIGNvbnN0IGNyZWF0ZUl0ZW1Db250ZW50ID0gdGhpcy5jb25maWcuY3JlYXRlSXRlbUNvbnRlbnQgfHwgdGhpcy5jcmVhdGVJdGVtQ29udGVudDtcbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBjcmVhdGVJdGVtQ29udGVudC5jYWxsKHRoaXMsIGl0ZW0pO1xuICAgICAgICBsaW5rLmFwcGVuZChmcmFnbWVudClcbiAgICAgICAgICAgIC5hdHRyKCdocmVmJywgJycpXG4gICAgICAgICAgICAuYXR0cigndGFiaW5kZXgnLCAtMSk7XG5cbiAgICAgICAgaWYgKGl0ZW0udXJsKSB7XG4gICAgICAgICAgICBsaW5rLmF0dHIoJ2hyZWYnLCBpdGVtLnVybCk7XG4gICAgICAgICAgICBsaXN0SXRlbUNsYXNzZXMucHVzaChpdGVtLmNsYXNzTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbVt0aGlzLmNvbmZpZy5jaGlsZEtleV0pIHtcbiAgICAgICAgICAgIGxpc3RJdGVtQ2xhc3Nlcy5wdXNoKHRoaXMuY29uZmlnLmNsYXNzTmFtZVt0aGlzLmNvbmZpZy5jaGlsZEtleV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGlzdEl0ZW0uYWRkQ2xhc3MobGlzdEl0ZW1DbGFzc2VzLmpvaW4oJyAnKSk7XG4gICAgICAgIGxpc3RJdGVtLmFwcGVuZChsaW5rKVxuICAgICAgICAgICAgLmF0dHIoJ2RhdGEtZmpzLWl0ZW0nLCBpdGVtW3RoaXMuY29uZmlnLml0ZW1LZXldKTtcblxuICAgICAgICBsaXN0SXRlbVswXS5faXRlbSA9IGl0ZW07XG5cbiAgICAgICAgcmV0dXJuIGxpc3RJdGVtO1xuICAgIH1cblxuICAgIHVwZGF0ZVBhdGhCYXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWcucGF0aEJhcikgeyByZXR1cm4gZmFsc2U7IH1cblxuICAgICAgICBjb25zdCBhY3RpdmVJdGVtcyA9IHRoaXMuY29udGFpbmVyLmZpbmQoYC4ke3RoaXMuY29uZmlnLmNsYXNzTmFtZS5hY3RpdmV9YCk7XG4gICAgICAgIGxldCBpdGVtS2V5cyA9ICcnO1xuICAgICAgICB0aGlzLnBhdGhCYXIuZW1wdHkoKTtcbiAgICAgICAgYWN0aXZlSXRlbXMuZWFjaCgoaW5kZXgsIGFjdGl2ZUl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBhY3RpdmVJdGVtLl9pdGVtO1xuICAgICAgICAgICAgY29uc3QgaXNMYXN0ID0gKGluZGV4ICsgMSkgPT09IGFjdGl2ZUl0ZW1zLmxlbmd0aDtcbiAgICAgICAgICAgIGl0ZW1LZXlzICs9IGAvJHtpdGVtW3RoaXMuY29uZmlnLml0ZW1LZXldfWA7XG4gICAgICAgICAgICB0aGlzLnBhdGhCYXIuYXBwZW5kKGBcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJyZWFkY3J1bWItbm9kZSAke2l0ZW0uaWNvbn1cIiAke2l0ZW0udHlwZSA9PT0gJ2RpcicgfHwgaXRlbS5jaGlsZF9jb3VudCA+IDAgPyBgZGF0YS1icmVhZGNydW1iLW5vZGU9XCIke2l0ZW1LZXlzfVwiYCA6ICcnfT5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCIke2l0ZW0uaWNvbn1cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJlYWRjcnVtYi1ub2RlLW5hbWVcIj4keyQoJzxkaXYgLz4nKS5odG1sKGl0ZW1bdGhpcy5jb25maWcubGFiZWxLZXldKS5odG1sKCl9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAkeyFpc0xhc3QgPyAnPGkgY2xhc3M9XCJmYSBmYS1mdyBmYS1jaGV2cm9uLXJpZ2h0XCI+PC9pPicgOiAnJ31cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICBgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0SWNvbih0eXBlKSB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAncm9vdCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdmYS1zaXRlbWFwJztcbiAgICAgICAgICAgIGNhc2UgJ2ZpbGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZmEtZmlsZS1vJztcbiAgICAgICAgICAgIGNhc2UgJ2Rpcic6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAnZmEtZm9sZGVyJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzSW5WaWV3KGVsZW1lbnQsIGNvbnRhaW5lciwgcGFydGlhbCkge1xuICAgICAgICBpZiAoIWVsZW1lbnQubGVuZ3RoIHx8ICFjb250YWluZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IGNvbnRhaW5lci5oZWlnaHQoKTtcbiAgICAgICAgY29uc3QgZWxlbWVudFRvcCA9ICQoZWxlbWVudCkub2Zmc2V0KCkudG9wIC0gY29udGFpbmVyLm9mZnNldCgpLnRvcDtcbiAgICAgICAgY29uc3QgZWxlbWVudEJvdHRvbSA9IGVsZW1lbnRUb3AgKyAkKGVsZW1lbnQpLmhlaWdodCgpO1xuXG4gICAgICAgIGNvbnN0IGlzVG90YWwgPSAoZWxlbWVudFRvcCA+PSAwICYmIGVsZW1lbnRCb3R0b20gPD0gY29udGFpbmVySGVpZ2h0KTtcbiAgICAgICAgY29uc3QgaXNQYXJ0aWFsID0gKChlbGVtZW50VG9wIDwgMCAmJiBlbGVtZW50Qm90dG9tID4gMCkgfHwgKGVsZW1lbnRUb3AgPiAwICYmIGVsZW1lbnRUb3AgPD0gY29udGFpbmVyLmhlaWdodCgpKSkgJiYgcGFydGlhbDtcblxuICAgICAgICByZXR1cm4gaXNUb3RhbCB8fCBpc1BhcnRpYWw7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9WaWV3KGVsZW1lbnQsIGNvbnRhaW5lcikge1xuICAgICAgICBjb25zdCB0b3AgPSBwYXJzZUludChjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLCAxMCk7XG4gICAgICAgIGNvbnN0IGJvdCA9IHBhcnNlSW50KGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20sIDEwKTtcblxuICAgICAgICBjb25zdCBub3dfdG9wID0gcGFyc2VJbnQoZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AsIDEwKTtcbiAgICAgICAgY29uc3Qgbm93X2JvdCA9IHBhcnNlSW50KGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tLCAxMCk7XG5cbiAgICAgICAgbGV0IHNjcm9sbF9ieSA9IDA7XG4gICAgICAgIGlmIChub3dfdG9wIDwgdG9wKSB7XG4gICAgICAgICAgICBzY3JvbGxfYnkgPSAtKHRvcCAtIG5vd190b3ApO1xuICAgICAgICB9IGVsc2UgaWYgKG5vd19ib3QgPiBib3QpIHtcbiAgICAgICAgICAgIHNjcm9sbF9ieSA9IG5vd19ib3QgLSBib3Q7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2Nyb2xsX2J5ICE9PSAwKSB7XG4gICAgICAgICAgICBjb250YWluZXIuc2Nyb2xsVG9wICs9IHNjcm9sbF9ieTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmluZGVyO1xuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBGaW5kZXIgZnJvbSAnLi4vdXRpbHMvZmluZGVyJztcbmltcG9ydCB7IGdldEluaXRpYWxSb3V0ZSwgZ2V0U3RvcmUsIHNldEluaXRpYWxSb3V0ZSB9IGZyb20gJy4vaW5kZXgnO1xuLy8gaW1wb3J0IGdldEZpbHRlcnMgZnJvbSAnLi4vdXRpbHMvZ2V0LWZpbHRlcnMnO1xuXG5sZXQgWEhSVVVJRCA9IDA7XG5jb25zdCBHUkFWX0NPTkZJRyA9IHR5cGVvZiBnbG9iYWwuR3JhdkNvbmZpZyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwuR3JhdkNvbmZpZyA6IGdsb2JhbC5HcmF2QWRtaW4uY29uZmlnO1xuXG5leHBvcnQgY29uc3QgSW5zdGFuY2VzID0ge307XG5cbmNvbnN0IGlzSW5WaWV3cG9ydCA9IChlbGVtKSA9PiB7XG4gICAgY29uc3QgYm91bmRpbmcgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHRpdGxlYmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3RpdGxlYmFyJyk7XG4gICAgY29uc3Qgb2Zmc2V0ID0gdGl0bGViYXIgPyB0aXRsZWJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgOiAwO1xuICAgIHJldHVybiAoXG4gICAgICAgIGJvdW5kaW5nLnRvcCA+PSBvZmZzZXQgJiZcbiAgICAgICAgYm91bmRpbmcubGVmdCA+PSAwICYmXG4gICAgICAgIGJvdW5kaW5nLmJvdHRvbSA8PSAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpICYmXG4gICAgICAgIGJvdW5kaW5nLnJpZ2h0IDw9ICh3aW5kb3cuaW5uZXJXaWR0aCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpXG4gICAgKTtcbn07XG5cbmV4cG9ydCBjbGFzcyBGbGV4UGFnZXMge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRhaW5lciwgZGF0YSkge1xuICAgICAgICB0aGlzLmNvbnRhaW5lciA9ICQoY29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgY29uc3QgZGF0YUxvYWQgPSB0aGlzLmRhdGFMb2FkO1xuXG4gICAgICAgIHRoaXMuZmluZGVyID0gbmV3IEZpbmRlcihcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLFxuICAgICAgICAgICAgKHBhcmVudCwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YUxvYWQuY2FsbCh0aGlzLCBwYXJlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWxLZXk6ICd0aXRsZScsXG4gICAgICAgICAgICAgICAgZGVmYXVsdFBhdGg6IGdldEluaXRpYWxSb3V0ZSgpLFxuICAgICAgICAgICAgICAgIGl0ZW1UcmlnZ2VyOiAnW2RhdGEtZmxleHBhZ2VzLWV4cGFuZF0nLFxuICAgICAgICAgICAgICAgIGNyZWF0ZUl0ZW06IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZsZXhQYWdlcy5jcmVhdGVJdGVtKHRoaXMuY29uZmlnLCBpdGVtLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNyZWF0ZUl0ZW1Db250ZW50OiBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBGbGV4UGFnZXMuY3JlYXRlSXRlbUNvbnRlbnQodGhpcy5jb25maWcsIGl0ZW0sIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmZpbmRlci4kZW1pdHRlci5vbignbGVhZi1zZWxlY3RlZCcsIChpdGVtKSA9PiB7XG4gICAgICAgICAgICBzZXRJbml0aWFsUm91dGUoe1xuICAgICAgICAgICAgICAgIHJvdXRlOiBpdGVtLnJvdXRlLnJhd1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZmluZGVyLiRlbWl0dGVyLm9uKCdpbnRlcmlvci1zZWxlY3RlZCcsIChpdGVtKSA9PiB7XG4gICAgICAgICAgICBzZXRJbml0aWFsUm91dGUoe1xuICAgICAgICAgICAgICAgIHJvdXRlOiBpdGVtLnJvdXRlLnJhd1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8qXG4gICAgICAgIHRoaXMuZmluZGVyLiRlbWl0dGVyLm9uKCdsZWFmLXNlbGVjdGVkJywgKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzZWxlY3RlZCcsIGl0ZW0pO1xuICAgICAgICAgICAgdGhpcy5maW5kZXIuZW1pdCgnY3JlYXRlLWNvbHVtbicsICgpID0+IHRoaXMuY3JlYXRlU2ltcGxlQ29sdW1uKGl0ZW0pKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5maW5kZXIuJGVtaXR0ZXIub24oJ2l0ZW0tc2VsZWN0ZWQnLCAoc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzZWxlY3RlZCcsIHNlbGVjdGVkKTtcbiAgICAgICAgICAgIC8vIGZvciBmdXR1cmUgdXNlIG9ubHkgLSBjcmVhdGUgY29sdW1uLWNhcmQgY3JlYXRpb24gZm9yIGZpbGUgd2l0aCBkZXRhaWxzIGxpa2UgaW4gbWFjT1MgZmluZGVyXG4gICAgICAgICAgICAvLyB0aGlzLmZpbmRlci4kZW1pdHRlcignY3JlYXRlLWNvbHVtbicsICgpID0+IHRoaXMuY3JlYXRlU2ltcGxlQ29sdW1uKHNlbGVjdGVkKSk7XG4gICAgICAgIH0pOyAqL1xuXG4gICAgICAgIHRoaXMuZmluZGVyLiRlbWl0dGVyLm9uKCdjb2x1bW4tY3JlYXRlZCcsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyWzBdLnNjcm9sbExlZnQgPSB0aGlzLmNvbnRhaW5lclswXS5zY3JvbGxXaWR0aCAtIHRoaXMuY29udGFpbmVyWzBdLmNsaWVudFdpZHRoO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlSXRlbShjb25maWcsIGl0ZW0sIGZpbmRlcikge1xuICAgICAgICBjb25zdCBsaXN0SXRlbSA9ICQoJzxsaSAvPicpO1xuICAgICAgICBjb25zdCBsaXN0SXRlbUNsYXNzZXMgPSBbY29uZmlnLmNsYXNzTmFtZS5pdGVtXTtcbiAgICAgICAgLy8gY29uc3QgaHJlZiA9IGAke0dSQVZfQ09ORklHLmN1cnJlbnRfdXJsfS8ke2l0ZW0ucm91dGUucmF3fWAucmVwbGFjZSgnLy8nLCAnLycpO1xuICAgICAgICBjb25zdCBsaW5rID0gJCgnPGRpdiBjbGFzcz1cImZqcy1pdGVtLXdyYXBwZXJcIiAvPicpO1xuICAgICAgICBjb25zdCBjcmVhdGVJdGVtQ29udGVudCA9IGNvbmZpZy5jcmVhdGVJdGVtQ29udGVudCB8fCBmaW5kZXIuY3JlYXRlSXRlbUNvbnRlbnQ7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gY3JlYXRlSXRlbUNvbnRlbnQuY2FsbCh0aGlzLCBpdGVtKTtcbiAgICAgICAgbGluay5hcHBlbmQoZnJhZ21lbnQpXG4gICAgICAgIC8vIC5hdHRyKCdocmVmJywgaHJlZilcbiAgICAgICAgICAgIC5hdHRyKCd0YWJpbmRleCcsIC0xKTtcblxuICAgICAgICBpZiAoaXRlbS51cmwpIHtcbiAgICAgICAgICAgIGxpbmsuYXR0cignaHJlZicsIGl0ZW0udXJsKTtcbiAgICAgICAgICAgIGxpc3RJdGVtQ2xhc3Nlcy5wdXNoKGl0ZW0uY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtW2NvbmZpZy5jaGlsZEtleV0pIHtcbiAgICAgICAgICAgIGxpc3RJdGVtQ2xhc3Nlcy5wdXNoKGNvbmZpZy5jbGFzc05hbWVbY29uZmlnLmNoaWxkS2V5XSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbS5maWx0ZXJzX2hpdCkge1xuICAgICAgICAgICAgbGlzdEl0ZW1DbGFzc2VzLnB1c2goJ2ZpbHRlcnMtaGl0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBsaXN0SXRlbS5hZGRDbGFzcyhsaXN0SXRlbUNsYXNzZXMuam9pbignICcpKTtcbiAgICAgICAgbGlzdEl0ZW0uYXBwZW5kKGxpbmspXG4gICAgICAgICAgICAuYXR0cignZGF0YS1manMtaXRlbScsIGl0ZW1bY29uZmlnLml0ZW1LZXldKTtcblxuICAgICAgICBsaXN0SXRlbVswXS5faXRlbSA9IGl0ZW07XG5cbiAgICAgICAgcmV0dXJuIGxpc3RJdGVtO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVJdGVtQ29udGVudChjb25maWcsIGl0ZW0pIHtcbiAgICAgICAgY29uc3QgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgY29uc3Qgcm91dGUgPSBgJHtHUkFWX0NPTkZJRy5jdXJyZW50X3VybH0vJHtpdGVtLnJvdXRlLnJhd31gLnJlcGxhY2UoJy8vJywgJy8nKTtcbiAgICAgICAgY29uc3QgdGl0bGUgPSAkKCc8ZGl2IGNsYXNzPVwiZmpzLXRpdGxlXCIgLz4nKTtcbiAgICAgICAgY29uc3QgbGluayA9ICQoYDxhIGhyZWY9XCIke3JvdXRlfVwiIC8+YCk7XG4gICAgICAgIGNvbnN0IGljb24gPSAkKGA8c3BhbiBjbGFzcz1cImZqcy1pY29uICR7aXRlbS5pY29ufSBiYWRnZS0ke2l0ZW0uZXh0cmFzICYmIGl0ZW0uZXh0cmFzLnB1Ymxpc2hlZCA/ICdwdWJsaXNoZWQnIDogJ3VucHVibGlzaGVkJ31cIiAvPmApO1xuXG4gICAgICAgIGlmIChpdGVtLmV4dHJhcyAmJiBpdGVtLmV4dHJhcy5sYW5nKSB7XG4gICAgICAgICAgICBsZXQgc3RhdHVzID0gJyc7XG4gICAgICAgICAgICBpZiAoaXRlbS5leHRyYXMudHJhbnNsYXRlZCkge1xuICAgICAgICAgICAgICAgIHN0YXR1cyA9ICd0cmFuc2xhdGVkJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGl0ZW0uZXh0cmFzLmxhbmcgPT09ICduL2EnKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzID0gJ25vdC1hdmFpbGFibGUnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsYW5nID0gJChgPHNwYW4gY2xhc3M9XCJiYWRnZS1sYW5nICR7c3RhdHVzfVwiPiR7aXRlbS5leHRyYXMubGFuZ308L3NwYW4+YCk7XG4gICAgICAgICAgICBsYW5nLmFwcGVuZFRvKGljb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW0uZXh0cmFzICYmIGl0ZW0uZXh0cmFzICYmIChpdGVtLmV4dHJhcy5wdWJsaXNoZWRfZGF0ZSB8fCBpdGVtLmV4dHJhcy51bnB1Ymxpc2hlZF9kYXRlKSkge1xuICAgICAgICAgICAgY29uc3QgY2xvY2sgPSAkKCc8c3BhbiBjbGFzcz1cImJhZGdlLWNsb2NrXCIgLz4nKTtcbiAgICAgICAgICAgIGNsb2NrLmFwcGVuZFRvKGljb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5mbyA9ICQoYDxzcGFuIGNsYXNzPVwiZmpzLWluZm9cIj48YiB0aXRsZT1cIiR7aXRlbS50aXRsZX1cIj4ke2l0ZW0udGl0bGV9PC9iPiA8ZW0gdGl0bGU9XCIke2l0ZW0ucm91dGUuZGlzcGxheX1cIj4ke2l0ZW0ucm91dGUuZGlzcGxheX08L2VtPjwvc3Bhbj5gKTtcbiAgICAgICAgY29uc3QgYWN0aW9ucyA9ICQoJzxzcGFuIGNsYXNzPVwiZmpzLWFjdGlvbnNcIiAvPicpO1xuXG4gICAgICAgIGxldCBkb3Rkb3Rkb3QgPSBudWxsO1xuICAgICAgICBpZiAoaXRlbS5leHRyYXMpIHtcbiAgICAgICAgICAgIGNvbnN0IExBTkdfVVJMID0gJCgnW2RhdGEtbGFuZy11cmxdJykuZGF0YSgnbGFuZ1VybCcpO1xuICAgICAgICAgICAgZG90ZG90ZG90ID0gJCgnPGRpdiBjbGFzcz1cImJ1dHRvbi1ncm91cFwiIGRhdGEtZmxleHBhZ2VzLWRvdHgzIGRhdGEtZmxleHBhZ2VzLXByZXZlbnQ+PGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBkcm9wZG93bi10b2dnbGVcIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCI+PGkgY2xhc3M9XCJmYSBmYS1lbGxpcHNpcy12IGZqcy1hY3Rpb24tdG9nZ2xlXCI+PC9pPjwvYnV0dG9uPjwvZGl2PicpO1xuICAgICAgICAgICAgZG90ZG90ZG90Lm9uKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZG90ZG90ZG90LmZpbmQoJy5kcm9wZG93bi1tZW51JykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0YWdzID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGxldCBsYW5ncyA9ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZXh0cmFzLnRhZ3MuZm9yRWFjaCgodGFnKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdzICs9IGA8c3BhbiBjbGFzcz1cImJhZGdlIHRhZyB0YWctJHt0YWd9XCI+JHt0YWd9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IGl0ZW0uZXh0cmFzLmxhbmdzIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpLmZvckVhY2goKGxhbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0ZWQgPSB0cmFuc2xhdGlvbnNbbGFuZ107XG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5ncyArPSBgPGEgY2xhc3M9XCJsYW5nXCIgaHJlZj1cIiR7TEFOR19VUkwucmVwbGFjZSgvJUxBTkclL2csIGxhbmcpLnJlcGxhY2UoJy8vJywgJy8nKX0ke2l0ZW0ucm91dGUucmF3fVwiPjxzcGFuIGNsYXNzPVwiYmFkZ2UgbGFuZy0ke2xhbmcgPyBsYW5nIDogJ2RlZmF1bHQnfSBsYW5nLSR7dHJhbnNsYXRlZCA/ICd0cmFuc2xhdGVkJyA6ICdub24tdHJhbnNsYXRlZCd9XCI+PGkgY2xhc3M9XCJmYSBmYS1mdyBmYS1jaXJjbGVcIj48L2k+ICR7bGFuZyA/IGxhbmcgOiAnZGVmYXVsdCd9PC9zcGFuPjwvYT5gO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5QcmV2aWV3ID0gaXRlbS5leHRyYXMuYWN0aW9ucy5pbmNsdWRlcygncHJldmlldycpICYmICghKGl0ZW0uZXh0cmFzLnRhZ3MuaW5jbHVkZXMoJ25vbi1yb3V0YWJsZScpIHx8IGl0ZW0uZXh0cmFzLnRhZ3MuaW5jbHVkZXMoJ3VucHVibGlzaGVkJykpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FuRWRpdCA9IGl0ZW0uZXh0cmFzLmFjdGlvbnMuaW5jbHVkZXMoJ2VkaXQnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FuQ29weSA9IGl0ZW0uZXh0cmFzLmFjdGlvbnMuaW5jbHVkZXMoJ2NvcHknKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FuTW92ZSA9IGZhbHNlOyAvLyBpdGVtLmV4dHJhcy5hY3Rpb25zLmluY2x1ZGVzKCdtb3ZlJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbkRlbGV0ZSA9IGl0ZW0uZXh0cmFzLmFjdGlvbnMuaW5jbHVkZXMoJ2RlbGV0ZScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1bCA9ICQoYDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCI+XG4gICAgPGRpdiBjbGFzcz1cImFjdGlvbi1iYXJcIj5cbiAgICAgICAgJHtjYW5QcmV2aWV3ID8gYDxhIGhyZWY9XCIke3JvdXRlfS86cHJldmlld1wiIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIHRpdGxlPVwiUHJldmlld1wiPjxpIGNsYXNzPVwiZmEgZmEtZncgZmEtZXllXCI+PC9pPjwvYT5gIDogJyd9XG4gICAgICAgICR7Y2FuRWRpdCA/IGA8YSBocmVmPVwiJHtyb3V0ZX1cIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiB0aXRsZT1cIkVkaXRcIj48aSBjbGFzcz1cImZhIGZhLWZ3IGZhLXBlbmNpbFwiPjwvaT48L2E+YCA6ICcnfVxuICAgICAgICAke2NhbkNvcHkgPyBgPGEgaHJlZj1cIiR7cm91dGV9L3Rhc2s6Y29weS9hZG1pbi1ub25jZToke0dSQVZfQ09ORklHLmFkbWluX25vbmNlfVwiIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIHRpdGxlPVwiRHVwbGljYXRlXCIgaHJlZj1cIiNtb2RhbC1wYWdlLWNvcHlcIiBkYXRhLXJlbW9kYWwtdGFyZ2V0PVwibW9kYWwtcGFnZS1jb3B5XCIgZGF0YS1jb3B5LWZsZXgtcGFnZSBkYXRhLXRpdGxlPVwiJHtpdGVtLnRpdGxlfVwiIGRhdGEtZm9sZGVyPVwiJHtpdGVtWydpdGVtLWtleSddfVwiPjxpIGNsYXNzPVwiZmEgZmEtZncgZmEtY29weVwiPjwvaT48L2E+YCA6ICcnfVxuICAgICAgICAke2Nhbk1vdmUgPyAnPGEgaHJlZj1cIiNcIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiB0aXRsZT1cIk1vdmUgKGNvbWluZyBzb29uKVwiPjxpIGNsYXNzPVwiZmEgZmEtZncgZmEtYXJyb3dzXCI+PC9pPjwvYT4nIDogJyd9XG4gICAgICAgICR7Y2FuRGVsZXRlID8gYDxhIGhyZWY9XCIjZGVsZXRlXCIgZGF0YS1yZW1vZGFsLXRhcmdldD1cImRlbGV0ZVwiIGRhdGEtZGVsZXRlLXVybD1cIiR7cm91dGV9L3Rhc2s6ZGVsZXRlL2FkbWluLW5vbmNlOiR7R1JBVl9DT05GSUcuYWRtaW5fbm9uY2V9XCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGRhbmdlclwiIHRpdGxlPVwiRGVsZXRlXCI+PGkgY2xhc3M9XCJmYSBmYS1mdyBmYS10cmFzaC1vXCI+PC9pPjwvYT5gIDogJyd9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImRpdmlkZXJcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidGFnc1wiPiR7dGFnc308L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxuICAgICR7aXRlbS5leHRyYXMubGFuZyB8fCB0eXBlb2YgaXRlbS5leHRyYXMubGFuZ3MgIT09ICd1bmRlZmluZWQnID8gYDxkaXYgY2xhc3M9XCJsYW5nc1wiPiR7bGFuZ3N9PC9kaXY+PGRpdiBjbGFzcz1cImRpdmlkZXJcIj48L2Rpdj5gIDogJyd9XG4gICAgPGRpdiBjbGFzcz1cImRldGFpbHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImluZm9zXCI+XG4gICAgICAgICAgICA8dGFibGU+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+PGI+cm91dGU8L2I+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPiR7aXRlbS5yb3V0ZS5kaXNwbGF5fTwvdGQ+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD48Yj50ZW1wbGF0ZTwvYj48L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+JHtpdGVtLmV4dHJhcy50ZW1wbGF0ZX08L3RkPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgJHtpdGVtLmV4dHJhcyAmJiBpdGVtLmV4dHJhcy5wdWJsaXNoZWRfZGF0ZSA/IGBcbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD48Yj5wdWJsaXNoPC9iPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD4ke2l0ZW0uZXh0cmFzLnB1Ymxpc2hlZF9kYXRlfTwvdGQ+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICBgIDogJyd9XG4gICAgICAgICAgICAgICAgJHtpdGVtLmV4dHJhcyAmJiBpdGVtLmV4dHJhcy51bnB1Ymxpc2hlZF9kYXRlID8gYFxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRkPjxiPnVucHVibGlzaDwvYj48L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+JHtpdGVtLmV4dHJhcy51bnB1Ymxpc2hlZF9kYXRlfTwvdGQ+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICBgIDogJyd9XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+PGI+bW9kaWZpZWQ8L2I+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPiR7aXRlbS5tb2RpZmllZH08L3RkPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PmApO1xuICAgICAgICAgICAgICAgICAgICB1bC5hcHBlbmRUbyhkb3Rkb3Rkb3QpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbS5jaGlsZF9jb3VudCkge1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gJCgnPGJ1dHRvbiBjbGFzcz1cImZqcy1jaGlsZHJlblwiIGRhdGEtZmxleHBhZ2VzLWV4cGFuZCBkYXRhLWZsZXhwYWdlcy1wcmV2ZW50IC8+Jyk7XG4gICAgICAgICAgICBjb25zdCBjb3VudCA9ICQoYDxzcGFuIGNsYXNzPVwiYmFkZ2UgY2hpbGQtY291bnRcIj4ke3R5cGVvZiBpdGVtLmNvdW50ICE9PSAndW5kZWZpbmVkJyA/IGAke2l0ZW0uY291bnR9IC8gYCA6ICcnfSR7aXRlbS5jaGlsZF9jb3VudH08L3NwYW4+YCk7XG4gICAgICAgICAgICBjb25zdCBhcnJvdyA9ICQoJzxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1yaWdodFwiPjwvaT4nKTtcbiAgICAgICAgICAgIGNvdW50LmFwcGVuZFRvKGJ1dHRvbik7XG4gICAgICAgICAgICBhcnJvdy5hcHBlbmRUbyhidXR0b24pO1xuICAgICAgICAgICAgYnV0dG9uLmFwcGVuZFRvKGFjdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWNvbi5hcHBlbmRUbyh0aXRsZSk7XG4gICAgICAgIGRvdGRvdGRvdC5hcHBlbmRUbyh0aXRsZSk7XG4gICAgICAgIGxpbmsuYXBwZW5kVG8odGl0bGUpO1xuICAgICAgICBpbmZvLmFwcGVuZFRvKGxpbmspO1xuXG4gICAgICAgIHRpdGxlLmFwcGVuZFRvKGZyYWcpO1xuICAgICAgICBhY3Rpb25zLmFwcGVuZFRvKGZyYWcpO1xuXG4gICAgICAgIHJldHVybiBmcmFnO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVMb2FkaW5nQ29sdW1uKCkge1xuICAgICAgICByZXR1cm4gJChgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmpzLWNvbCBsZWFmLWNvbFwiIHN0eWxlPVwib3ZlcmZsb3c6IGhpZGRlbjtcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVhZi1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyYXYtbG9hZGluZ1wiPjxkaXYgY2xhc3M9XCJncmF2LWxvYWRlclwiPkxvYWRpbmcuLi48L2Rpdj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICBgKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlRXJyb3JDb2x1bW4oZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuICQoYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZqcy1jb2wgbGVhZi1jb2xcIiBzdHlsZT1cIm92ZXJmbG93OiBoaWRkZW47XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlYWYtcm93IGVycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZncgZmEtd2FybmluZ1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+JHtlcnJvcn08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgYCk7XG4gICAgfVxuXG4gICAgY3JlYXRlU2ltcGxlQ29sdW1uKGl0ZW0pIHt9XG5cbiAgICBkYXRhTG9hZChwYXJlbnQsIGNhbGxiYWNrLCBmaWx0ZXJzID0gZ2V0U3RvcmUoKS5maWx0ZXJzIHx8IHt9KSB7XG4gICAgICAgIC8qIGlmICghcGFyZW50ICYmIE9iamVjdC5rZXlzKGZpbHRlcnMpLmxlbmd0aCkge1xuICAgICAgICAgICAgcGFyZW50ID0geyBjaGlsZF9jb3VudDogMSwgcm91dGU6IHsgcmF3OiAnJyB9IH07XG4gICAgICAgIH0qL1xuXG4gICAgICAgIGlmICghcGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sodGhpcy5kYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGFyZW50LmNoaWxkX2NvdW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBVVUlEID0gKytYSFJVVUlEO1xuICAgICAgICB0aGlzLnN0YXJ0TG9hZGVyKCk7XG5cbiAgICAgICAgY29uc3Qgd2l0aEZpbHRlcnMgPSBPYmplY3Qua2V5cyhmaWx0ZXJzKS5sZW5ndGggPyB7IC4uLmZpbHRlcnMgfSA6IHt9O1xuXG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IGAke0dSQVZfQ09ORklHLmN1cnJlbnRfdXJsfWAsXG4gICAgICAgICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgICAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oe30sIHtcbiAgICAgICAgICAgICAgICByb3V0ZTogYjY0X2VuY29kZV91bmljb2RlKHBhcmVudC5yb3V0ZS5yYXcpLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogJ2xpc3RMZXZlbCdcbiAgICAgICAgICAgIH0sIHdpdGhGaWx0ZXJzKSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcExvYWRlcigpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmRlci4kZW1pdHRlci5lbWl0KCdjcmVhdGUtY29sdW1uJywgRmxleFBhZ2VzLmNyZWF0ZUVycm9yQ29sdW1uKHJlc3BvbnNlLm1lc3NhZ2UpWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBzdGFsZSByZXF1ZXN0XG4gICAgICAgICAgICAgICAgaWYgKFVVSUQgIT09IFhIUlVVSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4gPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhcnRMb2FkZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5maW5kZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nSW5kaWNhdG9yID0gRmxleFBhZ2VzLmNyZWF0ZUxvYWRpbmdDb2x1bW4oKTtcbiAgICAgICAgdGhpcy5maW5kZXIuJGVtaXR0ZXIuZW1pdCgnY3JlYXRlLWNvbHVtbicsIHRoaXMubG9hZGluZ0luZGljYXRvclswXSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGluZ0luZGljYXRvcjtcbiAgICB9XG5cbiAgICBzdG9wTG9hZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nSW5kaWNhdG9yICYmIHRoaXMubG9hZGluZ0luZGljYXRvci5yZW1vdmUoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBiNjRfZW5jb2RlX3VuaWNvZGUgPSAoc3RyKSA9PiB7XG4gICAgcmV0dXJuIGJ0b2EoZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvJShbMC05QS1GXXsyfSkvZyxcbiAgICAgICAgZnVuY3Rpb24gdG9Tb2xpZEJ5dGVzKG1hdGNoLCBwMSkge1xuICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoJzB4JyArIHAxKTtcbiAgICAgICAgfSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGI2NF9kZWNvZGVfdW5pY29kZSA9IChzdHIpID0+IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGF0b2Ioc3RyKS5zcGxpdCgnJykubWFwKGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgcmV0dXJuICclJyArICgnMDAnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpO1xuICAgIH0pLmpvaW4oJycpKTtcbn07XG5cbmNvbnN0IHVwZGF0ZVBvc2l0aW9uID0gKHNjcm9sbGluZ0NvbHVtbiwgcGFnZUNvbHVtbnMpID0+IHtcbiAgICBjb25zdCBncm91cCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwYWdlcy1jb2x1bW5zIC5idXR0b24tZ3JvdXAub3BlbicpO1xuICAgIGlmIChncm91cCkge1xuICAgICAgICBjb25zdCBidXR0b24gPSBncm91cC5xdWVyeVNlbGVjdG9yKCdbZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXScpO1xuICAgICAgICBjb25zdCBkcm9wZG93biA9IGdyb3VwLnF1ZXJ5U2VsZWN0b3IoJy5kcm9wZG93bi1tZW51Jyk7XG4gICAgICAgIGNvbnN0IGJ1dHRvbkluVmlldyA9IGlzSW5WaWV3cG9ydChidXR0b24pO1xuXG4gICAgICAgIGlmIChidXR0b24gJiYgZHJvcGRvd24pIHtcbiAgICAgICAgICAgIGlmICghYnV0dG9uSW5WaWV3KSB7XG4gICAgICAgICAgICAgICAgJChkcm9wZG93bikuY3NzKHsgZGlzcGxheTogJ25vbmUnIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkKGRyb3Bkb3duKS5jc3MoeyBkaXNwbGF5OiAnaW5oZXJpdCcgfSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBidXR0b25DbGllbnRSZWN0ID0gYnV0dG9uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyb3Bkb3duQ2xpZW50UmVjdCA9IGRyb3Bkb3duLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9ICh3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9ICh3aW5kb3cucGFnZVhPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvcCA9IGJ1dHRvbkNsaWVudFJlY3QuaGVpZ2h0ICsgYnV0dG9uQ2xpZW50UmVjdC50b3AgKyBzY3JvbGxUb3A7XG4gICAgICAgICAgICAgICAgbGV0IGxlZnQgPSBidXR0b25DbGllbnRSZWN0LmxlZnQgKyBzY3JvbGxMZWZ0OyAvLyAgLSBkcm9wZG93bkNsaWVudFJlY3Qud2lkdGhcblxuICAgICAgICAgICAgICAgIGlmIChsZWZ0ICsgZHJvcGRvd25DbGllbnRSZWN0LndpZHRoID4gd2luZG93LmlubmVyV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gZHJvcGRvd25DbGllbnRSZWN0LndpZHRoIC0gNTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAkKGRyb3Bkb3duKS5jc3MoeyB0b3AsIGxlZnQgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsaW5nQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldENsaWVudFJlY3QgPSBldmVudC50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgodG9wIDwgdGFyZ2V0Q2xpZW50UmVjdC50b3AgKyBzY3JvbGxUb3ApIHx8ICh0b3AgPiB0YXJnZXRDbGllbnRSZWN0LnRvcCArIHNjcm9sbFRvcCArIHRhcmdldENsaWVudFJlY3QuaGVpZ2h0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJChkcm9wZG93bikuY3NzKHsgZGlzcGxheTogJ25vbmUnIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHBhZ2VDb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldENsaWVudFJlY3QgPSBldmVudC50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgobGVmdCA8IHRhcmdldENsaWVudFJlY3QubGVmdCArIHNjcm9sbExlZnQpIHx8IChsZWZ0ID4gdGFyZ2V0Q2xpZW50UmVjdC5sZWZ0ICsgc2Nyb2xsTGVmdCArIHRhcmdldENsaWVudFJlY3Qud2lkdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKGRyb3Bkb3duKS5jc3MoeyBkaXNwbGF5OiAnbm9uZScgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5jb25zdCBjbG9zZUdob3N0RHJvcGRvd25zID0gKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5lZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNwYWdlcy1jb2x1bW5zIC5idXR0b24tZ3JvdXA6bm90KC5vcGVuKSAuZHJvcGRvd24tbWVudScpIHx8IFtdO1xuICAgIG9wZW5lZC5mb3JFYWNoKChpdGVtKSA9PiB7IGl0ZW0uc3R5bGUuZGlzcGxheSA9ICdub25lJzsgfSk7XG59O1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0ICYmICFldmVudC50YXJnZXQuY2xhc3NMaXN0KSB7IHJldHVybiB0cnVlOyB9XG4gICAgY29uc3Qgc2Nyb2xsaW5nRG9jdW1lbnQgPSBldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdnbS1zY3JvbGwtdmlldycpIHx8IGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2NvbnRlbnQtd3JhcHBlcicpO1xuICAgIGNvbnN0IHNjcm9sbGluZ0NvbHVtbiA9IGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2Zqcy1jb2wnKTtcbiAgICBjb25zdCBwYWdlQ29sdW1ucyA9IGV2ZW50LnRhcmdldC5pZCA9PT0gJ3BhZ2VzLWNvbHVtbnMnO1xuXG4gICAgaWYgKHNjcm9sbGluZ0RvY3VtZW50IHx8IHNjcm9sbGluZ0NvbHVtbiB8fCBwYWdlQ29sdW1ucykge1xuICAgICAgICBjbG9zZUdob3N0RHJvcGRvd25zKCk7XG4gICAgICAgIHVwZGF0ZVBvc2l0aW9uKHNjcm9sbGluZ0NvbHVtbiwgcGFnZUNvbHVtbnMpO1xuICAgIH1cbn0sIHRydWUpO1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgIGNsb3NlR2hvc3REcm9wZG93bnMoKTtcbiAgICBpZiAoZXZlbnQudGFyZ2V0LmRhdGFzZXQudG9nZ2xlIHx8IGV2ZW50LnRhcmdldC5jbG9zZXN0KCdbZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXScpKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclNjcm9sbGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmdtLXNjcm9sbC12aWV3Jyk7XG5cbiAgICAgICAgKChjb250YWluZXJTY3JvbGxlci5sZW5ndGggPyBjb250YWluZXJTY3JvbGxlciA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jb250ZW50LXdyYXBwZXInKSkgfHwgW10pLmZvckVhY2goKHNjcm9sbCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsRXZlbnQgPSBuZXcgRXZlbnQoJ3Njcm9sbCcpO1xuICAgICAgICAgICAgc2Nyb2xsLmRpc3BhdGNoRXZlbnQoc2Nyb2xsRXZlbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoKGV2ZW50LnRhcmdldC5jbGFzc0xpc3QgJiYgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnZHJvcGRvd24tbWVudScpKSB8fCAoZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5kcm9wZG93bi1tZW51JykpKSB7XG4gICAgICAgIGlmICghJChldmVudC50YXJnZXQpLmNsb3Nlc3QoJy5kcm9wZG93bi1tZW51JykuZmluZChldmVudC50YXJnZXQpLmxlbmd0aCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnRhcmdldC5kYXRhc2V0LmNvcHlGbGV4UGFnZSB8fCBldmVudC50YXJnZXQuY2xvc2VzdCgnW2RhdGEtY29weS1mbGV4LXBhZ2VdJykpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQuY29weUZsZXhQYWdlID8gZXZlbnQudGFyZ2V0IDogZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWNvcHktZmxleC1wYWdlXScpO1xuICAgICAgICBjb25zdCBtb2RhbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXJlbW9kYWwtaWQ9XCJtb2RhbC1wYWdlLWNvcHlcIl0nKTtcbiAgICAgICAgY29uc3QgZm9ybSA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ2Zvcm0nKTtcbiAgICAgICAgY29uc3QgdGl0bGVGaWVsZCA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPVwiZGF0YVt0aXRsZV1cIl0nKTtcbiAgICAgICAgY29uc3QgZm9sZGVyRmllbGQgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKCdbbmFtZT1cImRhdGFbZm9sZGVyXVwiXScpO1xuXG4gICAgICAgIHRpdGxlRmllbGQudmFsdWUgPSBgJHt0YXJnZXQuZGF0YXNldC50aXRsZX0gKENvcHkpYDtcbiAgICAgICAgZm9sZGVyRmllbGQudmFsdWUgPSBgJHt0YXJnZXQuZGF0YXNldC5mb2xkZXJ9LWNvcHlgO1xuICAgICAgICBmb3JtLmFjdGlvbiA9IHRhcmdldC5ocmVmO1xuICAgIH1cbn0pO1xuXG4vLyBQcmV2ZW50IGRyb3Bkb3ducyBmcm9tIGNsb3Npbmcgd2hlbiBjbGlja2luZyB3aXRoaW5cbiQoZG9jdW1lbnQpLm9uKCdjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaScsICcuZmpzLWl0ZW0td3JhcHBlciAuZHJvcGRvd24tbWVudScsIChldmVudCkgPT4ge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufSk7XG4iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sICovXHJcblxyXG5cclxudmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xyXG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xyXG59O1xuXG5mdW5jdGlvbiBoYXNPd24ob2JqLCBrZXkpIHtcclxuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xyXG59XHJcbi8vIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMuXHJcbmZ1bmN0aW9uIGVzY2FwZVJlKHN0cikge1xyXG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bLiorP14kfFtcXF0oKXt9XFxcXC1dL2csIFwiXFxcXCQmXCIpO1xyXG59XHJcbi8vIFJldHVybiBhIGZ1dHVyZSBkYXRlIGJ5IHRoZSBnaXZlbiBzdHJpbmcuXHJcbmZ1bmN0aW9uIGNvbXB1dGVFeHBpcmVzKHN0cikge1xyXG4gICAgdmFyIGxhc3RDaCA9IHN0ci5jaGFyQXQoc3RyLmxlbmd0aCAtIDEpO1xyXG4gICAgdmFyIHZhbHVlID0gcGFyc2VJbnQoc3RyLCAxMCk7XHJcbiAgICB2YXIgZXhwaXJlcyA9IG5ldyBEYXRlKCk7XHJcbiAgICBzd2l0Y2ggKGxhc3RDaCkge1xyXG4gICAgICAgIGNhc2UgXCJZXCI6XHJcbiAgICAgICAgICAgIGV4cGlyZXMuc2V0RnVsbFllYXIoZXhwaXJlcy5nZXRGdWxsWWVhcigpICsgdmFsdWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiTVwiOlxyXG4gICAgICAgICAgICBleHBpcmVzLnNldE1vbnRoKGV4cGlyZXMuZ2V0TW9udGgoKSArIHZhbHVlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIkRcIjpcclxuICAgICAgICAgICAgZXhwaXJlcy5zZXREYXRlKGV4cGlyZXMuZ2V0RGF0ZSgpICsgdmFsdWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiaFwiOlxyXG4gICAgICAgICAgICBleHBpcmVzLnNldEhvdXJzKGV4cGlyZXMuZ2V0SG91cnMoKSArIHZhbHVlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIm1cIjpcclxuICAgICAgICAgICAgZXhwaXJlcy5zZXRNaW51dGVzKGV4cGlyZXMuZ2V0TWludXRlcygpICsgdmFsdWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic1wiOlxyXG4gICAgICAgICAgICBleHBpcmVzLnNldFNlY29uZHMoZXhwaXJlcy5nZXRTZWNvbmRzKCkgKyB2YWx1ZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGV4cGlyZXMgPSBuZXcgRGF0ZShzdHIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGV4cGlyZXM7XHJcbn1cclxuLy8gQ29udmVydCBhbiBvYmplY3QgdG8gYSBjb29raWUgb3B0aW9uIHN0cmluZy5cclxuZnVuY3Rpb24gY29udmVydChvcHRzKSB7XHJcbiAgICB2YXIgcmVzID0gXCJcIjtcclxuICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSBPYmplY3Qua2V5cyhvcHRzKTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICB2YXIga2V5ID0gX2FbX2ldO1xyXG4gICAgICAgIGlmICgvXmV4cGlyZXMkL2kudGVzdChrZXkpKSB7XHJcbiAgICAgICAgICAgIHZhciBleHBpcmVzID0gb3B0c1trZXldO1xyXG4gICAgICAgICAgICB2YXIgZXhwaXJlc0RhdGUgPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXhwaXJlcyA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgZXhwaXJlc0RhdGUgPSBleHBpcmVzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZXhwaXJlcyArPSB0eXBlb2YgZXhwaXJlcyA9PT0gXCJudW1iZXJcIiA/IFwiRFwiIDogXCJcIjtcclxuICAgICAgICAgICAgICAgIGV4cGlyZXNEYXRlID0gY29tcHV0ZUV4cGlyZXMoU3RyaW5nKGV4cGlyZXMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXMgKz0gXCI7XCIuY29uY2F0KGtleSwgXCI9XCIpLmNvbmNhdChleHBpcmVzRGF0ZS50b1VUQ1N0cmluZygpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoL15zZWN1cmV8cGFydGl0aW9uZWQkLy50ZXN0KGtleSkpIHtcclxuICAgICAgICAgICAgaWYgKG9wdHNba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgcmVzICs9IFwiO1wiLmNvbmNhdChrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXMgKz0gXCI7XCIuY29uY2F0KGtleSwgXCI9XCIpLmNvbmNhdChvcHRzW2tleV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghaGFzT3duKG9wdHMsIFwicGF0aFwiKSkge1xyXG4gICAgICAgIHJlcyArPSBcIjtwYXRoPS9cIjtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbn1cblxuLy8gQ2hlY2sgaWYgdGhlIGJyb3dzZXIgY29va2llIGlzIGVuYWJsZWQuXHJcbmZ1bmN0aW9uIGlzRW5hYmxlZCgpIHtcclxuICAgIHZhciBrZXkgPSBcIkBrZXlAXCI7XHJcbiAgICB2YXIgdmFsdWUgPSBcIjFcIjtcclxuICAgIHZhciByZSA9IG5ldyBSZWdFeHAoXCIoPzpefDsgKVwiLmNvbmNhdChrZXksIFwiPVwiKS5jb25jYXQodmFsdWUsIFwiKD86O3wkKVwiKSk7XHJcbiAgICBkb2N1bWVudC5jb29raWUgPSBcIlwiLmNvbmNhdChrZXksIFwiPVwiKS5jb25jYXQodmFsdWUsIFwiO3BhdGg9L1wiKTtcclxuICAgIHZhciBlbmFibGVkID0gcmUudGVzdChkb2N1bWVudC5jb29raWUpO1xyXG4gICAgaWYgKGVuYWJsZWQpIHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcclxuICAgICAgICByZW1vdmUoa2V5KTtcclxuICAgIH1cclxuICAgIHJldHVybiBlbmFibGVkO1xyXG59XHJcbi8vIEdldCB0aGUgY29va2llIHZhbHVlIGJ5IGtleS5cclxuZnVuY3Rpb24gZ2V0KGtleSwgZGVjb2Rlcikge1xyXG4gICAgaWYgKGRlY29kZXIgPT09IHZvaWQgMCkgeyBkZWNvZGVyID0gZGVjb2RlVVJJQ29tcG9uZW50OyB9XHJcbiAgICBpZiAodHlwZW9mIGtleSAhPT0gXCJzdHJpbmdcIiB8fCAha2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICB2YXIgcmVLZXkgPSBuZXcgUmVnRXhwKFwiKD86Xnw7IClcIi5jb25jYXQoZXNjYXBlUmUoa2V5KSwgXCIoPzo9KFteO10qKSk/KD86O3wkKVwiKSk7XHJcbiAgICB2YXIgbWF0Y2ggPSByZUtleS5leGVjKGRvY3VtZW50LmNvb2tpZSk7XHJcbiAgICBpZiAobWF0Y2ggPT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgZGVjb2RlciA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGRlY29kZXIobWF0Y2hbMV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1hdGNoWzFdO1xyXG59XHJcbi8vIFRoZSBhbGwgY29va2llc1xyXG5mdW5jdGlvbiBnZXRBbGwoZGVjb2Rlcikge1xyXG4gICAgaWYgKGRlY29kZXIgPT09IHZvaWQgMCkgeyBkZWNvZGVyID0gZGVjb2RlVVJJQ29tcG9uZW50OyB9XHJcbiAgICB2YXIgcmVLZXkgPSAvKD86Xnw7ICkoW149XSs/KSg/Oj0oW147XSopKT8oPzo7fCQpL2c7XHJcbiAgICB2YXIgY29va2llcyA9IHt9O1xyXG4gICAgdmFyIG1hdGNoO1xyXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24gKi9cclxuICAgIHdoaWxlICgobWF0Y2ggPSByZUtleS5leGVjKGRvY3VtZW50LmNvb2tpZSkpKSB7XHJcbiAgICAgICAgcmVLZXkubGFzdEluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaC5sZW5ndGggLSAxO1xyXG4gICAgICAgIGNvb2tpZXNbbWF0Y2hbMV1dID1cclxuICAgICAgICAgICAgdHlwZW9mIGRlY29kZXIgPT09IFwiZnVuY3Rpb25cIiA/IGRlY29kZXIobWF0Y2hbMl0pIDogbWF0Y2hbMl07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29va2llcztcclxufVxyXG5mdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSwgZW5jb2Rlciwgb3B0aW9ucykge1xyXG4gICAgaWYgKGVuY29kZXIgPT09IHZvaWQgMCkgeyBlbmNvZGVyID0gZW5jb2RlVVJJQ29tcG9uZW50OyB9XHJcbiAgICBpZiAodHlwZW9mIGVuY29kZXIgPT09IFwib2JqZWN0XCIgJiYgZW5jb2RlciAhPT0gbnVsbCkge1xyXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXHJcbiAgICAgICAgb3B0aW9ucyA9IGVuY29kZXI7XHJcbiAgICAgICAgZW5jb2RlciA9IGVuY29kZVVSSUNvbXBvbmVudDtcclxuICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXHJcbiAgICB9XHJcbiAgICB2YXIgYXR0cnNTdHIgPSBjb252ZXJ0KG9wdGlvbnMgfHwge30pO1xyXG4gICAgdmFyIHZhbHVlU3RyID0gdHlwZW9mIGVuY29kZXIgPT09IFwiZnVuY3Rpb25cIiA/IGVuY29kZXIodmFsdWUpIDogdmFsdWU7XHJcbiAgICB2YXIgbmV3Q29va2llID0gXCJcIi5jb25jYXQoa2V5LCBcIj1cIikuY29uY2F0KHZhbHVlU3RyKS5jb25jYXQoYXR0cnNTdHIpO1xyXG4gICAgZG9jdW1lbnQuY29va2llID0gbmV3Q29va2llO1xyXG59XHJcbi8vIFJlbW92ZSBhIGNvb2tpZSBieSB0aGUgc3BlY2lmaWVkIGtleS5cclxuZnVuY3Rpb24gcmVtb3ZlKGtleSwgb3B0aW9ucykge1xyXG4gICAgdmFyIG9wdHMgPSB7IGV4cGlyZXM6IC0xIH07XHJcbiAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICAgIG9wdHMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb3B0aW9ucyksIG9wdHMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNldChrZXksIFwiYVwiLCBvcHRzKTtcclxufVxyXG4vLyBHZXQgdGhlIGNvb2tpZSdzIHZhbHVlIHdpdGhvdXQgZGVjb2RpbmcuXHJcbmZ1bmN0aW9uIGdldFJhdyhrZXkpIHtcclxuICAgIHJldHVybiBnZXQoa2V5LCBudWxsKTtcclxufVxyXG4vLyBTZXQgYSBjb29raWUgd2l0aG91dCBlbmNvZGluZyB0aGUgdmFsdWUuXHJcbmZ1bmN0aW9uIHNldFJhdyhrZXksIHZhbHVlLCBvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gc2V0KGtleSwgdmFsdWUsIG51bGwsIG9wdGlvbnMpO1xyXG59XG5cbmV4cG9ydCB7IGdldCwgZ2V0QWxsLCBnZXRBbGwgYXMgZ2V0QWxsQ29va2llcywgZ2V0IGFzIGdldENvb2tpZSwgZ2V0UmF3LCBnZXRSYXcgYXMgZ2V0UmF3Q29va2llLCBpc0VuYWJsZWQgYXMgaXNDb29raWVFbmFibGVkLCBpc0VuYWJsZWQsIHJlbW92ZSwgcmVtb3ZlIGFzIHJlbW92ZUNvb2tpZSwgc2V0LCBzZXQgYXMgc2V0Q29va2llLCBzZXRSYXcsIHNldFJhdyBhcyBzZXRSYXdDb29raWUgfTtcbiIsImV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgICBjb25zdCBpbnB1dHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjcGFnZXMtZmlsdGVycyBpbnB1dFtuYW1lXScpO1xuICAgIGNvbnN0IGZpbHRlcnMgPSB7fTtcbiAgICBjb25zdCB0cmFja011bHRpID0gW107XG5cbiAgICBpbnB1dHMuZm9yRWFjaCgoZmlsdGVyKSA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXIudHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgaWYgKGZpbHRlci5pbmRldGVybWluYXRlIHx8IGZpbHRlci5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlci5uYW1lLm1hdGNoKC9cXFtdJC8pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBmaWx0ZXIubmFtZS5yZXBsYWNlKC9cXFtdJC8sICcnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXJzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzW25hbWVdID0gW107XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRyYWNrTXVsdGkuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrTXVsdGkucHVzaChuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnNbbmFtZV0ucHVzaChmaWx0ZXIudmFsdWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnNbZmlsdGVyLm5hbWVdID0gZmlsdGVyLnZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXIudmFsdWUpIHtcbiAgICAgICAgICAgIGZpbHRlcnNbZmlsdGVyLm5hbWVdID0gZmlsdGVyLnZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB0cmFja011bHRpLmZvckVhY2goKG11bHRpKSA9PiB7XG4gICAgICAgIGZpbHRlcnNbbXVsdGldID0gZmlsdGVyc1ttdWx0aV0uam9pbignLCcpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpbHRlcnM7XG59O1xuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCB7IGI2NF9kZWNvZGVfdW5pY29kZSwgYjY0X2VuY29kZV91bmljb2RlLCBGbGV4UGFnZXMgfSBmcm9tICcuL2ZpbmRlcic7XG5pbXBvcnQgeyBpc0VuYWJsZWQsIGdldENvb2tpZSwgc2V0Q29va2llIH0gZnJvbSAndGlueS1jb29raWUnO1xuaW1wb3J0IGdldEZpbHRlcnMgZnJvbSAnLi4vdXRpbHMvZ2V0LWZpbHRlcnMnO1xuXG5jb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjcGFnZXMtY29udGVudC13cmFwcGVyJyk7XG5cbmV4cG9ydCBjb25zdCBnZXRTdG9yZSA9ICgpID0+IHtcbiAgICBpZiAoIWlzRW5hYmxlZCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoYjY0X2RlY29kZV91bmljb2RlKGdldENvb2tpZSgnZ3Jhdi1hZG1pbi1mbGV4cGFnZXMnKSB8fCAnZTMwPScpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRTdG9yZSA9IChzdG9yZSA9IHt9LCBvcHRpb25zID0geyBleHBpcmVzOiAnMVknLCBzYW1lc2l0ZTogJ0xheCcgfSkgPT4ge1xuICAgIGlmICghaXNFbmFibGVkKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0Q29va2llKCdncmF2LWFkbWluLWZsZXhwYWdlcycsIGI2NF9lbmNvZGVfdW5pY29kZShKU09OLnN0cmluZ2lmeShzdG9yZSkpLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbml0aWFsUm91dGUgPSAoKSA9PiB7XG4gICAgY29uc3QgcGFyc2VkID0gZ2V0U3RvcmUoKTtcbiAgICByZXR1cm4gcGFyc2VkLnJvdXRlIHx8ICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldEluaXRpYWxSb3V0ZSA9ICh7IHJvdXRlID0gJycsIGZpbHRlcnMgPSBnZXRTdG9yZSgpLmZpbHRlcnMgfHwge30sIG9wdGlvbnMgPSB7IGV4cGlyZXM6ICcxWScgfX0gPSB7fSkgPT4ge1xuICAgIHJldHVybiBzZXRTdG9yZSh7IHJvdXRlLCBmaWx0ZXJzIH0sIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGxldCBGbGV4UGFnZXNJbnN0YW5jZSA9IG51bGw7XG5cbmV4cG9ydCBjb25zdCBSZUxvYWQgPSAoZnJlc2ggPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IHNlYXJjaCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwYWdlcy1maWx0ZXJzIFtuYW1lPVwiZmlsdGVyc1tzZWFyY2hdXCJdJyk7XG4gICAgY29uc3QgbG9hZGVyID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5ncmF2LWxvYWRpbmcnKTtcbiAgICBjb25zdCBjb250ZW50ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJyNwYWdlcy1jb2x1bW5zJyk7XG4gICAgY29uc3QgZ3JhdkNvbmZpZyA9IHR5cGVvZiBnbG9iYWwuR3JhdkNvbmZpZyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwuR3JhdkNvbmZpZyA6IGdsb2JhbC5HcmF2QWRtaW4uY29uZmlnO1xuXG4gICAgaWYgKGZyZXNoICYmIHNlYXJjaCkge1xuICAgICAgICBzZWFyY2guZm9jdXMoKTtcbiAgICB9XG5cbiAgICBpZiAobG9hZGVyICYmIGNvbnRlbnQpIHtcbiAgICAgICAgbG9hZGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICBjb250ZW50LmlubmVySFRNTCA9ICcnO1xuXG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSBmcmVzaCA/IGdldFN0b3JlKCkuZmlsdGVycyB8fCB7fSA6IGdldEZpbHRlcnMoKTtcbiAgICAgICAgY29uc3Qgd2l0aEZpbHRlcnMgPSBPYmplY3Qua2V5cyhmaWx0ZXJzKS5sZW5ndGggPyB7IC4uLmZpbHRlcnMsIGluaXRpYWw6IHRydWUgfSA6IHt9O1xuXG4gICAgICAgIGNvbnN0IHN0b3JlID0gZ2V0U3RvcmUoKTtcbiAgICAgICAgc3RvcmUuZmlsdGVycyA9IGZpbHRlcnM7XG4gICAgICAgIHNldFN0b3JlKHN0b3JlKTtcblxuICAgICAgICBsZXQgaXNTZWFyY2hGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICAgIGlzU2VhcmNoRm9jdXNlZCA9IHNlYXJjaCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNvbnRlbnQtd3JhcHBlciAuZ20tc2Nyb2xsLXZpZXcnKTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsUG9zaXRpb24gPSB7XG4gICAgICAgICAgICB0b3A6IGNvbnRlbnRXcmFwcGVyID8gY29udGVudFdyYXBwZXIuc2Nyb2xsVG9wIDogMCxcbiAgICAgICAgICAgIGxlZnQ6IGNvbnRlbnRXcmFwcGVyID8gY29udGVudFdyYXBwZXIuc2Nyb2xsTGVmdCA6IDBcbiAgICAgICAgfTtcblxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiBgJHtncmF2Q29uZmlnLmN1cnJlbnRfdXJsfWAsXG4gICAgICAgICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgICAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oe30sIHtcbiAgICAgICAgICAgICAgICByb3V0ZTogYjY0X2VuY29kZV91bmljb2RlKGdldEluaXRpYWxSb3V0ZSgpKSxcbiAgICAgICAgICAgICAgICBpbml0aWFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogJ2xpc3RMZXZlbCdcbiAgICAgICAgICAgIH0sIHdpdGhGaWx0ZXJzKSxcbiAgICAgICAgICAgIHN1Y2Nlc3MocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBsb2FkZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudC5pbm5lckhUTUwgPSByZXNwb25zZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBGbGV4UGFnZXNJbnN0YW5jZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgRmxleFBhZ2VzSW5zdGFuY2UgPSBuZXcgRmxleFBhZ2VzKGNvbnRlbnQsIHJlc3BvbnNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHNlYXJjaCAmJiBpc1NlYXJjaEZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRXcmFwcGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRXcmFwcGVyLnNjcm9sbFRvKHNjcm9sbFBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gRmxleFBhZ2VzSW5zdGFuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5cbmlmIChjb250YWluZXIpIHtcbiAgICBSZUxvYWQodHJ1ZSk7XG59XG4iLCJpbXBvcnQgJy4uL3V0aWxzL2luZGV0ZXJtaW5hdGUnO1xuaW1wb3J0ICcuL3BhbmVsJztcbmltcG9ydCB7IFJlTG9hZCB9IGZyb20gJy4uL2NvbHVtbnMnO1xuaW1wb3J0IHRocm90dGxlIGZyb20gJ2xvZGFzaC90aHJvdHRsZSc7XG5cbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgZmlsdGVyVHlwZSA9IGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQuZGF0YXNldC5maWx0ZXJzO1xuXG4gICAgaWYgKGZpbHRlclR5cGUgPT09ICdyZXNldCcpIHtcbiAgICAgICAgY29uc3QgZmlsdGVycyA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KCcjcGFnZXMtZmlsdGVycycpO1xuICAgICAgICAoZmlsdGVycy5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwidGV4dFwiXScpIHx8IFtdKS5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgICAgICAgaW5wdXQudmFsdWUgPSAnJztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgKGZpbHRlcnMucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJykgfHwgW10pLmZvckVhY2goKGlucHV0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gaW5wdXQuY2xvc2VzdCgnLmNoZWNrYm94ZXMnKTtcbiAgICAgICAgICAgIGlmICh3cmFwcGVyKSB7XG4gICAgICAgICAgICAgICAgd3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCdzdGF0dXMtY2hlY2tlZCcsICdzdGF0dXMtdW5jaGVja2VkJywgJ3N0YXR1cy1pbmRldGVybWluYXRlJyk7XG4gICAgICAgICAgICAgICAgd3JhcHBlci5kYXRhc2V0Ll9jaGVja1N0YXR1cyA9ICcwJztcbiAgICAgICAgICAgICAgICB3cmFwcGVyLmNsYXNzTGlzdC5hZGQoJ3N0YXR1cy11bmNoZWNrZWQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5wdXQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgaW5wdXQudmFsdWUgPSAnJztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJUeXBlID09PSAnYXBwbHknKSB7XG4gICAgICAgIFJlTG9hZCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufSk7XG5cbmNvbnN0IHRocm90dGxlZFJlbG9hZCA9IHRocm90dGxlKCgpID0+IHtcbiAgICBSZUxvYWQoKTtcbn0sIDM1MCwgeyBsZWFkaW5nOiBmYWxzZSB9KTtcblxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSAmJiBldmVudC50YXJnZXQuZ2V0QXR0cmlidXRlKCduYW1lJykgPT09ICdmaWx0ZXJzW3NlYXJjaF0nKSB7XG4gICAgICAgIHRocm90dGxlZFJlbG9hZC5jYW5jZWwoKTtcbiAgICAgICAgdGhyb3R0bGVkUmVsb2FkKCk7XG4gICAgfVxufSk7XG4iLCJpbXBvcnQgJy4vbGlzdCc7XG5pbXBvcnQgJy4vY29sdW1ucyc7XG5pbXBvcnQgJy4vZmlsdGVycyc7XG4iXSwibmFtZXMiOlsiZW1wdHlPYmplY3QiLCJPYmplY3QiLCJmcmVlemUiLCJpc0FycmF5IiwiQXJyYXkiLCJpc1VuZGVmIiwidiIsInVuZGVmaW5lZCIsImlzRGVmIiwiaXNUcnVlIiwiaXNGYWxzZSIsImlzUHJpbWl0aXZlIiwidmFsdWUiLCJfdHlwZW9mIiwiaXNGdW5jdGlvbiIsImlzT2JqZWN0Iiwib2JqIiwiX3RvU3RyaW5nIiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJ0b1Jhd1R5cGUiLCJjYWxsIiwic2xpY2UiLCJpc1BsYWluT2JqZWN0IiwiaXNSZWdFeHAiLCJpc1ZhbGlkQXJyYXlJbmRleCIsInZhbCIsIm4iLCJwYXJzZUZsb2F0IiwiU3RyaW5nIiwiTWF0aCIsImZsb29yIiwiaXNGaW5pdGUiLCJpc1Byb21pc2UiLCJ0aGVuIiwiY2F0Y2giLCJKU09OIiwic3RyaW5naWZ5IiwicmVwbGFjZXIiLCJfa2V5IiwiX192X2lzUmVmIiwidG9OdW1iZXIiLCJpc05hTiIsIm1ha2VNYXAiLCJzdHIiLCJleHBlY3RzTG93ZXJDYXNlIiwibWFwIiwiY3JlYXRlIiwibGlzdCIsInNwbGl0IiwiaSIsImxlbmd0aCIsInRvTG93ZXJDYXNlIiwiaXNCdWlsdEluVGFnIiwiaXNSZXNlcnZlZEF0dHJpYnV0ZSIsInJlbW92ZSQyIiwiYXJyIiwiaXRlbSIsImxlbiIsImluZGV4IiwiaW5kZXhPZiIsInNwbGljZSIsImhhc093blByb3BlcnR5IiwiaGFzT3duIiwia2V5IiwiY2FjaGVkIiwiZm4iLCJjYWNoZSIsImNhY2hlZEZuIiwiaGl0IiwiY2FtZWxpemVSRSIsImNhbWVsaXplIiwicmVwbGFjZSIsIl8iLCJjIiwidG9VcHBlckNhc2UiLCJjYXBpdGFsaXplIiwiY2hhckF0IiwiaHlwaGVuYXRlUkUiLCJoeXBoZW5hdGUiLCJwb2x5ZmlsbEJpbmQiLCJjdHgiLCJib3VuZEZuIiwiYSIsImwiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9sZW5ndGgiLCJuYXRpdmVCaW5kIiwiYmluZCIsIkZ1bmN0aW9uIiwidG9BcnJheSIsInN0YXJ0IiwicmV0IiwiZXh0ZW5kIiwidG8iLCJfZnJvbSIsInRvT2JqZWN0IiwicmVzIiwibm9vcCIsImIiLCJubyIsImlkZW50aXR5IiwibG9vc2VFcXVhbCIsImlzT2JqZWN0QSIsImlzT2JqZWN0QiIsImlzQXJyYXlBIiwiaXNBcnJheUIiLCJldmVyeSIsImUiLCJEYXRlIiwiZ2V0VGltZSIsImtleXNBIiwia2V5cyIsImtleXNCIiwibG9vc2VJbmRleE9mIiwib25jZSIsImNhbGxlZCIsImhhc0NoYW5nZWQiLCJ4IiwieSIsIlNTUl9BVFRSIiwiQVNTRVRfVFlQRVMiLCJMSUZFQ1lDTEVfSE9PS1MiLCJjb25maWciLCJvcHRpb25NZXJnZVN0cmF0ZWdpZXMiLCJzaWxlbnQiLCJwcm9kdWN0aW9uVGlwIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiZGV2dG9vbHMiLCJwZXJmb3JtYW5jZSIsImVycm9ySGFuZGxlciIsIndhcm5IYW5kbGVyIiwiaWdub3JlZEVsZW1lbnRzIiwia2V5Q29kZXMiLCJpc1Jlc2VydmVkVGFnIiwiaXNSZXNlcnZlZEF0dHIiLCJpc1Vua25vd25FbGVtZW50IiwiZ2V0VGFnTmFtZXNwYWNlIiwicGFyc2VQbGF0Zm9ybVRhZ05hbWUiLCJtdXN0VXNlUHJvcCIsImFzeW5jIiwiX2xpZmVjeWNsZUhvb2tzIiwidW5pY29kZVJlZ0V4cCIsImlzUmVzZXJ2ZWQiLCJjaGFyQ29kZUF0IiwiZGVmIiwiZW51bWVyYWJsZSIsImRlZmluZVByb3BlcnR5Iiwid3JpdGFibGUiLCJjb25maWd1cmFibGUiLCJiYWlsUkUiLCJSZWdFeHAiLCJjb25jYXQiLCJzb3VyY2UiLCJwYXJzZVBhdGgiLCJwYXRoIiwidGVzdCIsInNlZ21lbnRzIiwiaGFzUHJvdG8iLCJpbkJyb3dzZXIiLCJ3aW5kb3ciLCJVQSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImlzSUUiLCJpc0lFOSIsImlzRWRnZSIsImlzSU9TIiwiaXNGRiIsIm1hdGNoIiwibmF0aXZlV2F0Y2giLCJ3YXRjaCIsInN1cHBvcnRzUGFzc2l2ZSIsIm9wdHMiLCJnZXQiLCJhZGRFdmVudExpc3RlbmVyIiwiX2lzU2VydmVyIiwiaXNTZXJ2ZXJSZW5kZXJpbmciLCJnbG9iYWwiLCJWVUVfRU5WIiwiX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyIsImlzTmF0aXZlIiwiQ3RvciIsImhhc1N5bWJvbCIsIlN5bWJvbCIsIlJlZmxlY3QiLCJvd25LZXlzIiwiX1NldCIsIlNldCIsInNldCIsImhhcyIsImFkZCIsImNsZWFyIiwiY3VycmVudEluc3RhbmNlIiwiZ2V0Q3VycmVudEluc3RhbmNlIiwicHJveHkiLCJzZXRDdXJyZW50SW5zdGFuY2UiLCJ2bSIsIl9zY29wZSIsIm9mZiIsIm9uIiwiVk5vZGUiLCJ0YWciLCJkYXRhIiwiY2hpbGRyZW4iLCJ0ZXh0IiwiZWxtIiwiY29udGV4dCIsImNvbXBvbmVudE9wdGlvbnMiLCJhc3luY0ZhY3RvcnkiLCJucyIsImZuQ29udGV4dCIsImZuT3B0aW9ucyIsImZuU2NvcGVJZCIsImNvbXBvbmVudEluc3RhbmNlIiwicGFyZW50IiwicmF3IiwiaXNTdGF0aWMiLCJpc1Jvb3RJbnNlcnQiLCJpc0NvbW1lbnQiLCJpc0Nsb25lZCIsImlzT25jZSIsImFzeW5jTWV0YSIsImlzQXN5bmNQbGFjZWhvbGRlciIsImNyZWF0ZUVtcHR5Vk5vZGUiLCJub2RlIiwiY3JlYXRlVGV4dFZOb2RlIiwiY2xvbmVWTm9kZSIsInZub2RlIiwiY2xvbmVkIiwiX19hc3NpZ24iLCJhc3NpZ24iLCJ0IiwicyIsInAiLCJTdXBwcmVzc2VkRXJyb3IiLCJlcnJvciIsInN1cHByZXNzZWQiLCJtZXNzYWdlIiwiRXJyb3IiLCJuYW1lIiwidWlkJDIiLCJwZW5kaW5nQ2xlYW51cERlcHMiLCJjbGVhbnVwRGVwcyIsImRlcCIsInN1YnMiLCJmaWx0ZXIiLCJfcGVuZGluZyIsIkRlcCIsImlkIiwiYWRkU3ViIiwic3ViIiwicHVzaCIsInJlbW92ZVN1YiIsImRlcGVuZCIsImluZm8iLCJ0YXJnZXQiLCJhZGREZXAiLCJvblRyYWNrIiwiZWZmZWN0Iiwibm90aWZ5Iiwic29ydCIsIm9uVHJpZ2dlciIsInVwZGF0ZSIsInRhcmdldFN0YWNrIiwicHVzaFRhcmdldCIsInBvcFRhcmdldCIsInBvcCIsImFycmF5UHJvdG8iLCJhcnJheU1ldGhvZHMiLCJtZXRob2RzVG9QYXRjaCIsImZvckVhY2giLCJtZXRob2QiLCJvcmlnaW5hbCIsIm11dGF0b3IiLCJhcmdzIiwiX2kiLCJyZXN1bHQiLCJvYiIsIl9fb2JfXyIsImluc2VydGVkIiwib2JzZXJ2ZUFycmF5IiwidHlwZSIsImFycmF5S2V5cyIsImdldE93blByb3BlcnR5TmFtZXMiLCJOT19JTklUSUFMX1ZBTFVFIiwic2hvdWxkT2JzZXJ2ZSIsInRvZ2dsZU9ic2VydmluZyIsIm1vY2tEZXAiLCJPYnNlcnZlciIsInNoYWxsb3ciLCJtb2NrIiwidm1Db3VudCIsIl9fcHJvdG9fXyIsImRlZmluZVJlYWN0aXZlIiwib2JzZXJ2ZSIsInNzck1vY2tSZWFjdGl2aXR5IiwiaXNFeHRlbnNpYmxlIiwiX192X3NraXAiLCJpc1JlZiIsImN1c3RvbVNldHRlciIsIm9ic2VydmVFdmVuSWZTaGFsbG93IiwicHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJnZXR0ZXIiLCJzZXR0ZXIiLCJjaGlsZE9iIiwicmVhY3RpdmVHZXR0ZXIiLCJkZXBlbmRBcnJheSIsInJlYWN0aXZlU2V0dGVyIiwibmV3VmFsIiwibmV3VmFsdWUiLCJvbGRWYWx1ZSIsIndhcm4iLCJpc1JlYWRvbmx5IiwibWF4IiwiX2lzVnVlIiwiZGVsIiwicmVhY3RpdmUiLCJtYWtlUmVhY3RpdmUiLCJzaGFsbG93UmVhY3RpdmUiLCJleGlzdGluZ09iIiwiaXNDb2xsZWN0aW9uVHlwZSIsImlzUmVhY3RpdmUiLCJpc1NoYWxsb3ciLCJfX3ZfaXNTaGFsbG93IiwiX192X2lzUmVhZG9ubHkiLCJpc1Byb3h5IiwidG9SYXciLCJvYnNlcnZlZCIsIm1hcmtSYXciLCJSZWZGbGFnIiwiciIsInJlZiQxIiwiY3JlYXRlUmVmIiwic2hhbGxvd1JlZiIsInJhd1ZhbHVlIiwicmVmIiwidHJpZ2dlclJlZiIsInVucmVmIiwicHJveHlSZWZzIiwib2JqZWN0V2l0aFJlZnMiLCJwcm94eVdpdGhSZWZVbndyYXAiLCJjdXN0b21SZWYiLCJmYWN0b3J5IiwiX2EiLCJ0b1JlZnMiLCJvYmplY3QiLCJ0b1JlZiIsImRlZmF1bHRWYWx1ZSIsInJhd1RvUmVhZG9ubHlGbGFnIiwicmF3VG9TaGFsbG93UmVhZG9ubHlGbGFnIiwicmVhZG9ubHkiLCJjcmVhdGVSZWFkb25seSIsImV4aXN0aW5nRmxhZyIsImV4aXN0aW5nUHJveHkiLCJnZXRQcm90b3R5cGVPZiIsImRlZmluZVJlYWRvbmx5UHJvcGVydHkiLCJzaGFsbG93UmVhZG9ubHkiLCJjb21wdXRlZCIsImdldHRlck9yT3B0aW9ucyIsImRlYnVnT3B0aW9ucyIsIm9ubHlHZXR0ZXIiLCJ3YXRjaGVyIiwiV2F0Y2hlciIsImxhenkiLCJkaXJ0eSIsImV2YWx1YXRlIiwiV0FUQ0hFUiIsIldBVENIRVJfQ0IiLCJXQVRDSEVSX0dFVFRFUiIsIldBVENIRVJfQ0xFQU5VUCIsIndhdGNoRWZmZWN0Iiwib3B0aW9ucyIsImRvV2F0Y2giLCJ3YXRjaFBvc3RFZmZlY3QiLCJmbHVzaCIsIndhdGNoU3luY0VmZmVjdCIsIklOSVRJQUxfV0FUQ0hFUl9WQUxVRSIsImNiIiwiX2IiLCJpbW1lZGlhdGUiLCJkZWVwIiwiX2MiLCJ3YXJuSW52YWxpZFNvdXJjZSIsImluc3RhbmNlIiwiaW52b2tlV2l0aEVycm9ySGFuZGxpbmciLCJmb3JjZVRyaWdnZXIiLCJpc011bHRpU291cmNlIiwic29tZSIsInRyYXZlcnNlIiwiX2lzRGVzdHJveWVkIiwiY2xlYW51cCIsIm9uQ2xlYW51cCIsImJhc2VHZXR0ZXJfMSIsIm9uU3RvcCIsIm5vUmVjdXJzZSIsInJ1biIsImFjdGl2ZSIsInBvc3QiLCJxdWV1ZVdhdGNoZXIiLCJfaXNNb3VudGVkIiwiYnVmZmVyIiwiX3ByZVdhdGNoZXJzIiwiJG9uY2UiLCJ0ZWFyZG93biIsImFjdGl2ZUVmZmVjdFNjb3BlIiwiRWZmZWN0U2NvcGUiLCJkZXRhY2hlZCIsImVmZmVjdHMiLCJjbGVhbnVwcyIsInNjb3BlcyIsImN1cnJlbnRFZmZlY3RTY29wZSIsInN0b3AiLCJmcm9tUGFyZW50IiwibGFzdCIsImVmZmVjdFNjb3BlIiwicmVjb3JkRWZmZWN0U2NvcGUiLCJzY29wZSIsImdldEN1cnJlbnRTY29wZSIsIm9uU2NvcGVEaXNwb3NlIiwicHJvdmlkZSIsInJlc29sdmVQcm92aWRlZCIsImV4aXN0aW5nIiwiX3Byb3ZpZGVkIiwicGFyZW50UHJvdmlkZXMiLCIkcGFyZW50IiwiaW5qZWN0IiwidHJlYXREZWZhdWx0QXNGYWN0b3J5IiwicHJvdmlkZXMiLCJub3JtYWxpemVFdmVudCIsInBhc3NpdmUiLCJjYXB0dXJlIiwiY3JlYXRlRm5JbnZva2VyIiwiZm5zIiwiaW52b2tlciIsInVwZGF0ZUxpc3RlbmVycyIsIm9sZE9uIiwicmVtb3ZlIiwiY3JlYXRlT25jZUhhbmRsZXIiLCJjdXIiLCJvbGQiLCJldmVudCIsInBhcmFtcyIsIm1lcmdlVk5vZGVIb29rIiwiaG9va0tleSIsImhvb2siLCJvbGRIb29rIiwid3JhcHBlZEhvb2siLCJtZXJnZWQiLCJleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhIiwicHJvcE9wdGlvbnMiLCJwcm9wcyIsImF0dHJzIiwiYWx0S2V5Iiwia2V5SW5Mb3dlckNhc2UiLCJ0aXAiLCJmb3JtYXRDb21wb25lbnROYW1lIiwiY2hlY2tQcm9wIiwiaGFzaCIsInByZXNlcnZlIiwic2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4iLCJub3JtYWxpemVDaGlsZHJlbiIsIm5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4iLCJpc1RleHROb2RlIiwibmVzdGVkSW5kZXgiLCJsYXN0SW5kZXgiLCJzaGlmdCIsIl9pc1ZMaXN0IiwicmVuZGVyTGlzdCIsInJlbmRlciIsIml0ZXJhdG9yIiwibmV4dCIsImRvbmUiLCJyZW5kZXJTbG90IiwiZmFsbGJhY2tSZW5kZXIiLCJiaW5kT2JqZWN0Iiwic2NvcGVkU2xvdEZuIiwiJHNjb3BlZFNsb3RzIiwibm9kZXMiLCIkc2xvdHMiLCJzbG90IiwiJGNyZWF0ZUVsZW1lbnQiLCJyZXNvbHZlRmlsdGVyIiwicmVzb2x2ZUFzc2V0IiwiJG9wdGlvbnMiLCJpc0tleU5vdE1hdGNoIiwiZXhwZWN0IiwiYWN0dWFsIiwiY2hlY2tLZXlDb2RlcyIsImV2ZW50S2V5Q29kZSIsImJ1aWx0SW5LZXlDb2RlIiwiZXZlbnRLZXlOYW1lIiwiYnVpbHRJbktleU5hbWUiLCJtYXBwZWRLZXlDb2RlIiwiYmluZE9iamVjdFByb3BzIiwiYXNQcm9wIiwiaXNTeW5jIiwiX2xvb3BfMSIsImRvbVByb3BzIiwiY2FtZWxpemVkS2V5IiwiaHlwaGVuYXRlZEtleSIsIiRldmVudCIsInJlbmRlclN0YXRpYyIsImlzSW5Gb3IiLCJfc3RhdGljVHJlZXMiLCJ0cmVlIiwic3RhdGljUmVuZGVyRm5zIiwiX3JlbmRlclByb3h5IiwibWFya1N0YXRpYyIsIm1hcmtPbmNlIiwibWFya1N0YXRpY05vZGUiLCJiaW5kT2JqZWN0TGlzdGVuZXJzIiwib3VycyIsInJlc29sdmVTY29wZWRTbG90cyIsImhhc0R5bmFtaWNLZXlzIiwiY29udGVudEhhc2hLZXkiLCIkc3RhYmxlIiwiJGtleSIsImJpbmREeW5hbWljS2V5cyIsImJhc2VPYmoiLCJ2YWx1ZXMiLCJwcmVwZW5kTW9kaWZpZXIiLCJzeW1ib2wiLCJpbnN0YWxsUmVuZGVySGVscGVycyIsIl9vIiwiX24iLCJfcyIsIl9sIiwiX3QiLCJfcSIsIl9tIiwiX2YiLCJfayIsIl92IiwiX2UiLCJfdSIsIl9nIiwiX2QiLCJfcCIsInJlc29sdmVTbG90cyIsInNsb3RzIiwiY2hpbGQiLCJuYW1lXzEiLCJkZWZhdWx0IiwibmFtZV8yIiwiaXNXaGl0ZXNwYWNlIiwibm9ybWFsaXplU2NvcGVkU2xvdHMiLCJvd25lclZtIiwic2NvcGVkU2xvdHMiLCJub3JtYWxTbG90cyIsInByZXZTY29wZWRTbG90cyIsImhhc05vcm1hbFNsb3RzIiwiaXNTdGFibGUiLCJfbm9ybWFsaXplZCIsIiRoYXNOb3JtYWwiLCJrZXlfMSIsIm5vcm1hbGl6ZVNjb3BlZFNsb3QiLCJrZXlfMiIsInByb3h5Tm9ybWFsU2xvdCIsIm5vcm1hbGl6ZWQiLCJpbml0U2V0dXAiLCJzZXR1cCIsIl9zZXR1cENvbnRleHQiLCJjcmVhdGVTZXR1cENvbnRleHQiLCJzZXR1cFJlc3VsdCIsIl9wcm9wcyIsIl9zZXR1cFN0YXRlIiwiX19zZmMiLCJfc2V0dXBQcm94eSIsImV4cG9zZUNhbGxlZCIsIl9hdHRyc1Byb3h5Iiwic3luY1NldHVwUHJveHkiLCIkYXR0cnMiLCJsaXN0ZW5lcnMiLCJfbGlzdGVuZXJzUHJveHkiLCIkbGlzdGVuZXJzIiwiaW5pdFNsb3RzUHJveHkiLCJlbWl0IiwiJGVtaXQiLCJleHBvc2UiLCJleHBvc2VkIiwiZnJvbSIsInByZXYiLCJjaGFuZ2VkIiwiZGVmaW5lUHJveHlBdHRyIiwiX3Nsb3RzUHJveHkiLCJzeW5jU2V0dXBTbG90cyIsInVzZVNsb3RzIiwiZ2V0Q29udGV4dCIsInVzZUF0dHJzIiwidXNlTGlzdGVuZXJzIiwibWVyZ2VEZWZhdWx0cyIsImRlZmF1bHRzIiwicmVkdWNlIiwib3B0IiwiaW5pdFJlbmRlciIsIl92bm9kZSIsInBhcmVudFZub2RlIiwiJHZub2RlIiwiX3BhcmVudFZub2RlIiwicmVuZGVyQ29udGV4dCIsIl9yZW5kZXJDaGlsZHJlbiIsImQiLCJjcmVhdGVFbGVtZW50JDEiLCJwYXJlbnREYXRhIiwiaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50IiwiX3BhcmVudExpc3RlbmVycyIsImN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSIsInJlbmRlck1peGluIiwiVnVlIiwiJG5leHRUaWNrIiwibmV4dFRpY2siLCJfcmVuZGVyIiwicHJldkluc3QiLCJwcmV2UmVuZGVySW5zdCIsImhhbmRsZUVycm9yIiwicmVuZGVyRXJyb3IiLCJlbnN1cmVDdG9yIiwiY29tcCIsImJhc2UiLCJfX2VzTW9kdWxlIiwidG9TdHJpbmdUYWciLCJjcmVhdGVBc3luY1BsYWNlaG9sZGVyIiwicmVzb2x2ZUFzeW5jQ29tcG9uZW50IiwiYmFzZUN0b3IiLCJlcnJvckNvbXAiLCJyZXNvbHZlZCIsIm93bmVyIiwib3duZXJzIiwibG9hZGluZyIsImxvYWRpbmdDb21wIiwib3duZXJzXzEiLCJzeW5jXzEiLCJ0aW1lckxvYWRpbmdfMSIsInRpbWVyVGltZW91dF8xIiwiJG9uIiwiZm9yY2VSZW5kZXJfMSIsInJlbmRlckNvbXBsZXRlZCIsIiRmb3JjZVVwZGF0ZSIsImNsZWFyVGltZW91dCIsInJlc29sdmUiLCJyZWplY3RfMSIsInJlYXNvbiIsInJlc18xIiwiY29tcG9uZW50IiwiZGVsYXkiLCJzZXRUaW1lb3V0IiwidGltZW91dCIsImdldEZpcnN0Q29tcG9uZW50Q2hpbGQiLCJTSU1QTEVfTk9STUFMSVpFIiwiQUxXQVlTX05PUk1BTElaRSIsIm5vcm1hbGl6YXRpb25UeXBlIiwiYWx3YXlzTm9ybWFsaXplIiwiX2NyZWF0ZUVsZW1lbnQiLCJpcyIsIm5hdGl2ZU9uIiwicHJlIiwiY3JlYXRlQ29tcG9uZW50IiwiYXBwbHlOUyIsInJlZ2lzdGVyRGVlcEJpbmRpbmdzIiwiZm9yY2UiLCJzdHlsZSIsImNsYXNzIiwiaCIsImVyciIsImhvb2tzIiwiZXJyb3JDYXB0dXJlZCIsImdsb2JhbEhhbmRsZUVycm9yIiwiaGFuZGxlciIsIl9oYW5kbGVkIiwibG9nRXJyb3IiLCJjb25zb2xlIiwiaXNVc2luZ01pY3JvVGFzayIsImNhbGxiYWNrcyIsInBlbmRpbmciLCJmbHVzaENhbGxiYWNrcyIsImNvcGllcyIsInRpbWVyRnVuYyIsIlByb21pc2UiLCJwXzEiLCJNdXRhdGlvbk9ic2VydmVyIiwiY291bnRlcl8xIiwib2JzZXJ2ZXIiLCJ0ZXh0Tm9kZV8xIiwiZG9jdW1lbnQiLCJjcmVhdGVUZXh0Tm9kZSIsImNoYXJhY3RlckRhdGEiLCJzZXRJbW1lZGlhdGUiLCJfcmVzb2x2ZSIsInVzZUNzc01vZHVsZSIsIm1vZCIsInVzZUNzc1ZhcnMiLCJlbCIsIiRlbCIsInZhcnMiLCJub2RlVHlwZSIsInNldFByb3BlcnR5IiwiZGVmaW5lQXN5bmNDb21wb25lbnQiLCJsb2FkZXIiLCJsb2FkaW5nQ29tcG9uZW50IiwiZXJyb3JDb21wb25lbnQiLCJzdXNwZW5zaWJsZSIsInVzZXJPbkVycm9yIiwib25FcnJvciIsInBlbmRpbmdSZXF1ZXN0IiwicmV0cmllcyIsInJldHJ5IiwibG9hZCIsInRoaXNSZXF1ZXN0IiwicmVqZWN0IiwidXNlclJldHJ5IiwidXNlckZhaWwiLCJjcmVhdGVMaWZlQ3ljbGUiLCJob29rTmFtZSIsImZvcm1hdE5hbWUiLCJpbmplY3RIb29rIiwibWVyZ2VMaWZlY3ljbGVIb29rIiwib25CZWZvcmVNb3VudCIsIm9uTW91bnRlZCIsIm9uQmVmb3JlVXBkYXRlIiwib25VcGRhdGVkIiwib25CZWZvcmVVbm1vdW50Iiwib25Vbm1vdW50ZWQiLCJvbkFjdGl2YXRlZCIsIm9uRGVhY3RpdmF0ZWQiLCJvblNlcnZlclByZWZldGNoIiwib25SZW5kZXJUcmFja2VkIiwib25SZW5kZXJUcmlnZ2VyZWQiLCJpbmplY3RFcnJvckNhcHR1cmVkSG9vayIsIm9uRXJyb3JDYXB0dXJlZCIsInZlcnNpb24iLCJkZWZpbmVDb21wb25lbnQiLCJzZWVuT2JqZWN0cyIsIl90cmF2ZXJzZSIsInNlZW4iLCJpc0EiLCJpc0Zyb3plbiIsImRlcElkIiwidWlkJDEiLCJleHBPckZuIiwiaXNSZW5kZXJXYXRjaGVyIiwiX3ZtIiwiX3dhdGNoZXIiLCJ1c2VyIiwic3luYyIsImJlZm9yZSIsImRlcHMiLCJuZXdEZXBzIiwiZGVwSWRzIiwibmV3RGVwSWRzIiwiZXhwcmVzc2lvbiIsInRtcCIsIl9pc0JlaW5nRGVzdHJveWVkIiwibWFyayIsIm1lYXN1cmUiLCJwZXJmXzEiLCJjbGVhck1hcmtzIiwiY2xlYXJNZWFzdXJlcyIsInN0YXJ0VGFnIiwiZW5kVGFnIiwiaW5pdEV2ZW50cyIsIl9ldmVudHMiLCJfaGFzSG9va0V2ZW50IiwidXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzIiwidGFyZ2V0JDEiLCJhZGQkMSIsInJlbW92ZSQxIiwiJG9mZiIsImNyZWF0ZU9uY2VIYW5kbGVyJDEiLCJfdGFyZ2V0Iiwib25jZUhhbmRsZXIiLCJvbGRMaXN0ZW5lcnMiLCJldmVudHNNaXhpbiIsImhvb2tSRSIsImlfMSIsImNicyIsImxvd2VyQ2FzZUV2ZW50IiwiYWN0aXZlSW5zdGFuY2UiLCJzZXRBY3RpdmVJbnN0YW5jZSIsInByZXZBY3RpdmVJbnN0YW5jZSIsImluaXRMaWZlY3ljbGUiLCJhYnN0cmFjdCIsIiRjaGlsZHJlbiIsIiRyb290IiwiJHJlZnMiLCJfaW5hY3RpdmUiLCJfZGlyZWN0SW5hY3RpdmUiLCJsaWZlY3ljbGVNaXhpbiIsIl91cGRhdGUiLCJoeWRyYXRpbmciLCJwcmV2RWwiLCJwcmV2Vm5vZGUiLCJyZXN0b3JlQWN0aXZlSW5zdGFuY2UiLCJfX3BhdGNoX18iLCJfX3Z1ZV9fIiwid3JhcHBlciIsIiRkZXN0cm95IiwiY2FsbEhvb2skMSIsIl9kYXRhIiwibW91bnRDb21wb25lbnQiLCJ0ZW1wbGF0ZSIsInVwZGF0ZUNvbXBvbmVudCIsIl9uYW1lIiwiX3VpZCIsIndhdGNoZXJPcHRpb25zIiwicHJlV2F0Y2hlcnMiLCJ1cGRhdGVDaGlsZENvbXBvbmVudCIsInByb3BzRGF0YSIsInJlbmRlckNoaWxkcmVuIiwibmV3U2NvcGVkU2xvdHMiLCJvbGRTY29wZWRTbG90cyIsImhhc0R5bmFtaWNTY29wZWRTbG90IiwibmVlZHNGb3JjZVVwZGF0ZSIsInByZXZWTm9kZSIsInByZXZMaXN0ZW5lcnMiLCJwcm9wS2V5cyIsIl9wcm9wS2V5cyIsInZhbGlkYXRlUHJvcCIsImlzSW5JbmFjdGl2ZVRyZWUiLCJhY3RpdmF0ZUNoaWxkQ29tcG9uZW50IiwiZGlyZWN0IiwiZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50Iiwic2V0Q29udGV4dCIsInByZXZTY29wZSIsImhhbmRsZXJzIiwiaiIsIk1BWF9VUERBVEVfQ09VTlQiLCJxdWV1ZSIsImFjdGl2YXRlZENoaWxkcmVuIiwiY2lyY3VsYXIiLCJ3YWl0aW5nIiwiZmx1c2hpbmciLCJyZXNldFNjaGVkdWxlclN0YXRlIiwiY3VycmVudEZsdXNoVGltZXN0YW1wIiwiZ2V0Tm93Iiwibm93IiwicGVyZm9ybWFuY2VfMSIsImNyZWF0ZUV2ZW50IiwidGltZVN0YW1wIiwic29ydENvbXBhcmVGbiIsImZsdXNoU2NoZWR1bGVyUXVldWUiLCJhY3RpdmF0ZWRRdWV1ZSIsInVwZGF0ZWRRdWV1ZSIsImNhbGxBY3RpdmF0ZWRIb29rcyIsImNhbGxVcGRhdGVkSG9va3MiLCJxdWV1ZUFjdGl2YXRlZENvbXBvbmVudCIsImluaXRQcm92aWRlIiwicHJvdmlkZU9wdGlvbiIsInByb3ZpZGVkIiwiaW5pdEluamVjdGlvbnMiLCJyZXNvbHZlSW5qZWN0IiwicHJvdmlkZUtleSIsInByb3ZpZGVEZWZhdWx0IiwiRnVuY3Rpb25hbFJlbmRlckNvbnRleHQiLCJfdGhpcyIsImNvbnRleHRWbSIsIl9vcmlnaW5hbCIsImlzQ29tcGlsZWQiLCJfY29tcGlsZWQiLCJuZWVkTm9ybWFsaXphdGlvbiIsImluamVjdGlvbnMiLCJfc2NvcGVJZCIsImNyZWF0ZUZ1bmN0aW9uYWxDb21wb25lbnQiLCJtZXJnZVByb3BzIiwiY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCIsInZub2RlcyIsImNsb25lIiwiZGV2dG9vbHNNZXRhIiwiZ2V0Q29tcG9uZW50TmFtZSIsIl9fbmFtZSIsIl9jb21wb25lbnRUYWciLCJjb21wb25lbnRWTm9kZUhvb2tzIiwiaW5pdCIsImtlZXBBbGl2ZSIsIm1vdW50ZWROb2RlIiwicHJlcGF0Y2giLCJjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlIiwiJG1vdW50Iiwib2xkVm5vZGUiLCJpbnNlcnQiLCJkZXN0cm95IiwiaG9va3NUb01lcmdlIiwiX2Jhc2UiLCJjaWQiLCJyZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zIiwibW9kZWwiLCJ0cmFuc2Zvcm1Nb2RlbCIsImZ1bmN0aW9uYWwiLCJpbnN0YWxsQ29tcG9uZW50SG9va3MiLCJfaXNDb21wb25lbnQiLCJpbmxpbmVUZW1wbGF0ZSIsInRvTWVyZ2UiLCJfbWVyZ2VkIiwibWVyZ2VIb29rIiwiZjEiLCJmMiIsInByb3AiLCJjYWxsYmFjayIsImdlbmVyYXRlQ29tcG9uZW50VHJhY2UiLCJoYXNDb25zb2xlXzEiLCJjbGFzc2lmeVJFXzEiLCJjbGFzc2lmeV8xIiwibXNnIiwidHJhY2UiLCJpbmNsdWRlRmlsZSIsImNvbnN0cnVjdG9yIiwiZmlsZSIsIl9fZmlsZSIsInJlcGVhdF8xIiwiY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlIiwiam9pbiIsInN0cmF0cyIsImRlZmF1bHRTdHJhdCIsIm1lcmdlRGF0YSIsInJlY3Vyc2l2ZSIsInRvVmFsIiwiZnJvbVZhbCIsIm1lcmdlRGF0YU9yRm4iLCJwYXJlbnRWYWwiLCJjaGlsZFZhbCIsIm1lcmdlZERhdGFGbiIsIm1lcmdlZEluc3RhbmNlRGF0YUZuIiwiaW5zdGFuY2VEYXRhIiwiZGVmYXVsdERhdGEiLCJkZWR1cGVIb29rcyIsIm1lcmdlQXNzZXRzIiwiYXNzZXJ0T2JqZWN0VHlwZSIsInBhcmVudF8xIiwibWV0aG9kcyIsImNoZWNrQ29tcG9uZW50cyIsImNvbXBvbmVudHMiLCJ2YWxpZGF0ZUNvbXBvbmVudE5hbWUiLCJub3JtYWxpemVQcm9wcyIsIm5vcm1hbGl6ZUluamVjdCIsIm5vcm1hbGl6ZURpcmVjdGl2ZXMkMSIsImRpcnMiLCJkaXJlY3RpdmVzIiwibWVyZ2VPcHRpb25zIiwiZXh0ZW5kcyIsIm1peGlucyIsIm1lcmdlRmllbGQiLCJzdHJhdCIsIndhcm5NaXNzaW5nIiwiYXNzZXRzIiwiY2FtZWxpemVkSWQiLCJQYXNjYWxDYXNlSWQiLCJhYnNlbnQiLCJib29sZWFuSW5kZXgiLCJnZXRUeXBlSW5kZXgiLCJCb29sZWFuIiwic3RyaW5nSW5kZXgiLCJnZXRQcm9wRGVmYXVsdFZhbHVlIiwicHJldlNob3VsZE9ic2VydmUiLCJhc3NlcnRQcm9wIiwiZ2V0VHlwZSIsInJlcXVpcmVkIiwidmFsaWQiLCJleHBlY3RlZFR5cGVzIiwiYXNzZXJ0ZWRUeXBlIiwiYXNzZXJ0VHlwZSIsImV4cGVjdGVkVHlwZSIsImhhdmVFeHBlY3RlZFR5cGVzIiwiZ2V0SW52YWxpZFR5cGVNZXNzYWdlIiwidmFsaWRhdG9yIiwic2ltcGxlQ2hlY2tSRSIsImZ1bmN0aW9uVHlwZUNoZWNrUkUiLCJpc1NhbWVUeXBlIiwicmVjZWl2ZWRUeXBlIiwiaXNFeHBsaWNhYmxlIiwiaXNCb29sZWFuIiwic3R5bGVWYWx1ZSIsIk51bWJlciIsIkVYUExJQ0FCTEVfVFlQRVMiLCJlbGVtIiwiaW5pdFByb3h5IiwiYWxsb3dlZEdsb2JhbHNfMSIsIndhcm5Ob25QcmVzZW50XzEiLCJ3YXJuUmVzZXJ2ZWRQcmVmaXhfMSIsImhhc1Byb3h5XzEiLCJQcm94eSIsImlzQnVpbHRJbk1vZGlmaWVyXzEiLCJoYXNIYW5kbGVyXzEiLCJpc0FsbG93ZWQiLCIkZGF0YSIsImdldEhhbmRsZXJfMSIsIl93aXRoU3RyaXBwZWQiLCJzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24iLCJzb3VyY2VLZXkiLCJwcm94eUdldHRlciIsInByb3h5U2V0dGVyIiwiaW5pdFN0YXRlIiwiaW5pdFByb3BzJDEiLCJpbml0TWV0aG9kcyIsImluaXREYXRhIiwiaW5pdENvbXB1dGVkJDEiLCJpbml0V2F0Y2giLCJwcm9wc09wdGlvbnMiLCJpc1Jvb3QiLCJnZXREYXRhIiwiY29tcHV0ZWRXYXRjaGVyT3B0aW9ucyIsIndhdGNoZXJzIiwiX2NvbXB1dGVkV2F0Y2hlcnMiLCJpc1NTUiIsInVzZXJEZWYiLCJkZWZpbmVDb21wdXRlZCIsInNob3VsZENhY2hlIiwiY3JlYXRlQ29tcHV0ZWRHZXR0ZXIiLCJjcmVhdGVHZXR0ZXJJbnZva2VyIiwiY29tcHV0ZWRHZXR0ZXIiLCJjcmVhdGVXYXRjaGVyIiwiJHdhdGNoIiwic3RhdGVNaXhpbiIsImRhdGFEZWYiLCJwcm9wc0RlZiIsIiRzZXQiLCIkZGVsZXRlIiwidW53YXRjaEZuIiwidWlkIiwiaW5pdE1peGluJDEiLCJfaW5pdCIsImluaXRJbnRlcm5hbENvbXBvbmVudCIsIl9zZWxmIiwidm5vZGVDb21wb25lbnRPcHRpb25zIiwic3VwZXIiLCJzdXBlck9wdGlvbnMiLCJjYWNoZWRTdXBlck9wdGlvbnMiLCJtb2RpZmllZE9wdGlvbnMiLCJyZXNvbHZlTW9kaWZpZWRPcHRpb25zIiwiZXh0ZW5kT3B0aW9ucyIsIm1vZGlmaWVkIiwibGF0ZXN0Iiwic2VhbGVkIiwic2VhbGVkT3B0aW9ucyIsImluaXRVc2UiLCJ1c2UiLCJwbHVnaW4iLCJpbnN0YWxsZWRQbHVnaW5zIiwiX2luc3RhbGxlZFBsdWdpbnMiLCJ1bnNoaWZ0IiwiaW5zdGFsbCIsImluaXRNaXhpbiIsIm1peGluIiwiaW5pdEV4dGVuZCIsIlN1cGVyIiwiU3VwZXJJZCIsImNhY2hlZEN0b3JzIiwiX0N0b3IiLCJTdWIiLCJWdWVDb21wb25lbnQiLCJpbml0UHJvcHMiLCJpbml0Q29tcHV0ZWQiLCJDb21wIiwiaW5pdEFzc2V0UmVnaXN0ZXJzIiwiZGVmaW5pdGlvbiIsIl9nZXRDb21wb25lbnROYW1lIiwibWF0Y2hlcyIsInBhdHRlcm4iLCJwcnVuZUNhY2hlIiwia2VlcEFsaXZlSW5zdGFuY2UiLCJlbnRyeSIsInBydW5lQ2FjaGVFbnRyeSIsImN1cnJlbnQiLCJwYXR0ZXJuVHlwZXMiLCJLZWVwQWxpdmUiLCJpbmNsdWRlIiwiZXhjbHVkZSIsImNhY2hlVk5vZGUiLCJ2bm9kZVRvQ2FjaGUiLCJrZXlUb0NhY2hlIiwicGFyc2VJbnQiLCJjcmVhdGVkIiwiZGVzdHJveWVkIiwibW91bnRlZCIsInVwZGF0ZWQiLCJidWlsdEluQ29tcG9uZW50cyIsImluaXRHbG9iYWxBUEkiLCJjb25maWdEZWYiLCJ1dGlsIiwiZGVsZXRlIiwib2JzZXJ2YWJsZSIsInNzckNvbnRleHQiLCJhY2NlcHRWYWx1ZSIsImF0dHIiLCJpc0VudW1lcmF0ZWRBdHRyIiwiaXNWYWxpZENvbnRlbnRFZGl0YWJsZVZhbHVlIiwiY29udmVydEVudW1lcmF0ZWRWYWx1ZSIsImlzRmFsc3lBdHRyVmFsdWUiLCJpc0Jvb2xlYW5BdHRyIiwieGxpbmtOUyIsImlzWGxpbmsiLCJnZXRYbGlua1Byb3AiLCJnZW5DbGFzc0ZvclZub2RlIiwicGFyZW50Tm9kZSIsImNoaWxkTm9kZSIsIm1lcmdlQ2xhc3NEYXRhIiwicmVuZGVyQ2xhc3MiLCJzdGF0aWNDbGFzcyIsImR5bmFtaWNDbGFzcyIsInN0cmluZ2lmeUNsYXNzIiwic3RyaW5naWZ5QXJyYXkiLCJzdHJpbmdpZnlPYmplY3QiLCJzdHJpbmdpZmllZCIsIm5hbWVzcGFjZU1hcCIsInN2ZyIsIm1hdGgiLCJpc0hUTUxUYWciLCJpc1NWRyIsInVua25vd25FbGVtZW50Q2FjaGUiLCJjcmVhdGVFbGVtZW50IiwiSFRNTFVua25vd25FbGVtZW50IiwiSFRNTEVsZW1lbnQiLCJpc1RleHRJbnB1dFR5cGUiLCJxdWVyeSIsInNlbGVjdGVkIiwicXVlcnlTZWxlY3RvciIsInRhZ05hbWUiLCJtdWx0aXBsZSIsInNldEF0dHJpYnV0ZSIsImNyZWF0ZUVsZW1lbnROUyIsIm5hbWVzcGFjZSIsImNyZWF0ZUNvbW1lbnQiLCJpbnNlcnRCZWZvcmUiLCJuZXdOb2RlIiwicmVmZXJlbmNlTm9kZSIsInJlbW92ZUNoaWxkIiwiYXBwZW5kQ2hpbGQiLCJuZXh0U2libGluZyIsInNldFRleHRDb250ZW50IiwidGV4dENvbnRlbnQiLCJzZXRTdHlsZVNjb3BlIiwic2NvcGVJZCIsIm5vZGVPcHMiLCJyZWdpc3RlclJlZiIsImlzUmVtb3ZhbCIsInJlZlZhbHVlIiwiJHJlZnNWYWx1ZSIsImlzRm9yIiwicmVmSW5Gb3IiLCJfaXNTdHJpbmciLCJfaXNSZWYiLCJyZWZzIiwic2V0U2V0dXBSZWYiLCJpbmNsdWRlcyIsImVtcHR5Tm9kZSIsInNhbWVWbm9kZSIsInNhbWVJbnB1dFR5cGUiLCJ0eXBlQSIsInR5cGVCIiwiY3JlYXRlS2V5VG9PbGRJZHgiLCJiZWdpbklkeCIsImVuZElkeCIsImNyZWF0ZVBhdGNoRnVuY3Rpb24iLCJiYWNrZW5kIiwibW9kdWxlcyIsImVtcHR5Tm9kZUF0IiwiY3JlYXRlUm1DYiIsImNoaWxkRWxtIiwicmVtb3ZlTm9kZSIsImluVlByZSIsImlnbm9yZSIsImNyZWF0aW5nRWxtSW5WUHJlIiwiY3JlYXRlRWxtIiwiaW5zZXJ0ZWRWbm9kZVF1ZXVlIiwicGFyZW50RWxtIiwicmVmRWxtIiwibmVzdGVkIiwib3duZXJBcnJheSIsInNldFNjb3BlIiwiY3JlYXRlQ2hpbGRyZW4iLCJpbnZva2VDcmVhdGVIb29rcyIsImlzUmVhY3RpdmF0ZWQiLCJpbml0Q29tcG9uZW50IiwicmVhY3RpdmF0ZUNvbXBvbmVudCIsInBlbmRpbmdJbnNlcnQiLCJpc1BhdGNoYWJsZSIsImlubmVyTm9kZSIsInRyYW5zaXRpb24iLCJhY3RpdmF0ZSIsImNoZWNrRHVwbGljYXRlS2V5cyIsImlfMiIsImFuY2VzdG9yIiwiYWRkVm5vZGVzIiwic3RhcnRJZHgiLCJpbnZva2VEZXN0cm95SG9vayIsInJlbW92ZVZub2RlcyIsImNoIiwicmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayIsInJtIiwiaV8zIiwidXBkYXRlQ2hpbGRyZW4iLCJvbGRDaCIsIm5ld0NoIiwicmVtb3ZlT25seSIsIm9sZFN0YXJ0SWR4IiwibmV3U3RhcnRJZHgiLCJvbGRFbmRJZHgiLCJvbGRTdGFydFZub2RlIiwib2xkRW5kVm5vZGUiLCJuZXdFbmRJZHgiLCJuZXdTdGFydFZub2RlIiwibmV3RW5kVm5vZGUiLCJvbGRLZXlUb0lkeCIsImlkeEluT2xkIiwidm5vZGVUb01vdmUiLCJjYW5Nb3ZlIiwicGF0Y2hWbm9kZSIsImZpbmRJZHhJbk9sZCIsInNlZW5LZXlzIiwiaV80IiwiZW5kIiwiaV81IiwiaHlkcmF0ZSIsInBvc3RwYXRjaCIsImludm9rZUluc2VydEhvb2siLCJpbml0aWFsIiwiaV82IiwiaHlkcmF0aW9uQmFpbGVkIiwiaXNSZW5kZXJlZE1vZHVsZSIsImFzc2VydE5vZGVNYXRjaCIsImhhc0NoaWxkTm9kZXMiLCJpbm5lckhUTUwiLCJjaGlsZHJlbk1hdGNoIiwiZmlyc3RDaGlsZCIsImlfNyIsImNoaWxkTm9kZXMiLCJmdWxsSW52b2tlIiwicGF0Y2giLCJpc0luaXRpYWxQYXRjaCIsImlzUmVhbEVsZW1lbnQiLCJoYXNBdHRyaWJ1dGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJvbGRFbG0iLCJfbGVhdmVDYiIsInBhdGNoYWJsZSIsImlfOCIsImlfOSIsImluc2VydF8xIiwiaV8xMCIsInVwZGF0ZURpcmVjdGl2ZXMiLCJ1bmJpbmREaXJlY3RpdmVzIiwiaXNDcmVhdGUiLCJpc0Rlc3Ryb3kiLCJvbGREaXJzIiwibm9ybWFsaXplRGlyZWN0aXZlcyIsIm5ld0RpcnMiLCJkaXJzV2l0aEluc2VydCIsImRpcnNXaXRoUG9zdHBhdGNoIiwib2xkRGlyIiwiZGlyIiwiY2FsbEhvb2siLCJvbGRBcmciLCJhcmciLCJjb21wb25lbnRVcGRhdGVkIiwiY2FsbEluc2VydCIsImVtcHR5TW9kaWZpZXJzIiwibW9kaWZpZXJzIiwiZ2V0UmF3RGlyTmFtZSIsInNldHVwRGVmIiwicmF3TmFtZSIsImJhc2VNb2R1bGVzIiwidXBkYXRlQXR0cnMiLCJpbmhlcml0QXR0cnMiLCJvbGRBdHRycyIsIl92X2F0dHJfcHJveHkiLCJzZXRBdHRyIiwicmVtb3ZlQXR0cmlidXRlTlMiLCJpc0luUHJlIiwiYmFzZVNldEF0dHIiLCJzZXRBdHRyaWJ1dGVOUyIsIl9faWVwaCIsImJsb2NrZXJfMSIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ1cGRhdGVDbGFzcyIsIm9sZERhdGEiLCJjbHMiLCJ0cmFuc2l0aW9uQ2xhc3MiLCJfdHJhbnNpdGlvbkNsYXNzZXMiLCJfcHJldkNsYXNzIiwia2xhc3MiLCJSQU5HRV9UT0tFTiIsIkNIRUNLQk9YX1JBRElPX1RPS0VOIiwibm9ybWFsaXplRXZlbnRzIiwiZXZlbnRfMSIsImNoYW5nZSIsInVzZU1pY3JvdGFza0ZpeCIsImF0dGFjaGVkVGltZXN0YW1wXzEiLCJvcmlnaW5hbF8xIiwiX3dyYXBwZXIiLCJjdXJyZW50VGFyZ2V0Iiwib3duZXJEb2N1bWVudCIsInVwZGF0ZURPTUxpc3RlbmVycyIsImV2ZW50cyIsInN2Z0NvbnRhaW5lciIsInVwZGF0ZURPTVByb3BzIiwib2xkUHJvcHMiLCJfdmFsdWUiLCJzdHJDdXIiLCJzaG91bGRVcGRhdGVWYWx1ZSIsImNoZWNrVmFsIiwiY29tcG9zaW5nIiwiaXNOb3RJbkZvY3VzQW5kRGlydHkiLCJpc0RpcnR5V2l0aE1vZGlmaWVycyIsIm5vdEluRm9jdXMiLCJhY3RpdmVFbGVtZW50IiwiX3ZNb2RpZmllcnMiLCJudW1iZXIiLCJ0cmltIiwicGFyc2VTdHlsZVRleHQiLCJjc3NUZXh0IiwibGlzdERlbGltaXRlciIsInByb3BlcnR5RGVsaW1pdGVyIiwibm9ybWFsaXplU3R5bGVEYXRhIiwibm9ybWFsaXplU3R5bGVCaW5kaW5nIiwic3RhdGljU3R5bGUiLCJiaW5kaW5nU3R5bGUiLCJnZXRTdHlsZSIsImNoZWNrQ2hpbGQiLCJzdHlsZURhdGEiLCJjc3NWYXJSRSIsImltcG9ydGFudFJFIiwic2V0UHJvcCIsIm5vcm1hbGl6ZWROYW1lIiwibm9ybWFsaXplIiwidmVuZG9yTmFtZXMiLCJlbXB0eVN0eWxlIiwiY2FwTmFtZSIsInVwZGF0ZVN0eWxlIiwib2xkU3RhdGljU3R5bGUiLCJvbGRTdHlsZUJpbmRpbmciLCJub3JtYWxpemVkU3R5bGUiLCJvbGRTdHlsZSIsIm5ld1N0eWxlIiwid2hpdGVzcGFjZVJFIiwiYWRkQ2xhc3MiLCJjbGFzc0xpc3QiLCJnZXRBdHRyaWJ1dGUiLCJyZW1vdmVDbGFzcyIsInRhciIsInJlc29sdmVUcmFuc2l0aW9uIiwiY3NzIiwiYXV0b0Nzc1RyYW5zaXRpb24iLCJlbnRlckNsYXNzIiwiZW50ZXJUb0NsYXNzIiwiZW50ZXJBY3RpdmVDbGFzcyIsImxlYXZlQ2xhc3MiLCJsZWF2ZVRvQ2xhc3MiLCJsZWF2ZUFjdGl2ZUNsYXNzIiwiaGFzVHJhbnNpdGlvbiIsIlRSQU5TSVRJT04iLCJBTklNQVRJT04iLCJ0cmFuc2l0aW9uUHJvcCIsInRyYW5zaXRpb25FbmRFdmVudCIsImFuaW1hdGlvblByb3AiLCJhbmltYXRpb25FbmRFdmVudCIsIm9udHJhbnNpdGlvbmVuZCIsIm9ud2Via2l0dHJhbnNpdGlvbmVuZCIsIm9uYW5pbWF0aW9uZW5kIiwib253ZWJraXRhbmltYXRpb25lbmQiLCJyYWYiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJuZXh0RnJhbWUiLCJhZGRUcmFuc2l0aW9uQ2xhc3MiLCJ0cmFuc2l0aW9uQ2xhc3NlcyIsInJlbW92ZVRyYW5zaXRpb25DbGFzcyIsIndoZW5UcmFuc2l0aW9uRW5kcyIsImdldFRyYW5zaXRpb25JbmZvIiwicHJvcENvdW50IiwiZW5kZWQiLCJvbkVuZCIsInRyYW5zZm9ybVJFIiwic3R5bGVzIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInRyYW5zaXRpb25EZWxheXMiLCJ0cmFuc2l0aW9uRHVyYXRpb25zIiwidHJhbnNpdGlvblRpbWVvdXQiLCJnZXRUaW1lb3V0IiwiYW5pbWF0aW9uRGVsYXlzIiwiYW5pbWF0aW9uRHVyYXRpb25zIiwiYW5pbWF0aW9uVGltZW91dCIsImhhc1RyYW5zZm9ybSIsImRlbGF5cyIsImR1cmF0aW9ucyIsInRvTXMiLCJlbnRlciIsInRvZ2dsZURpc3BsYXkiLCJjYW5jZWxsZWQiLCJfZW50ZXJDYiIsImFwcGVhckNsYXNzIiwiYXBwZWFyVG9DbGFzcyIsImFwcGVhckFjdGl2ZUNsYXNzIiwiYmVmb3JlRW50ZXIiLCJhZnRlckVudGVyIiwiZW50ZXJDYW5jZWxsZWQiLCJiZWZvcmVBcHBlYXIiLCJhcHBlYXIiLCJhZnRlckFwcGVhciIsImFwcGVhckNhbmNlbGxlZCIsImR1cmF0aW9uIiwidHJhbnNpdGlvbk5vZGUiLCJpc0FwcGVhciIsInN0YXJ0Q2xhc3MiLCJhY3RpdmVDbGFzcyIsInRvQ2xhc3MiLCJiZWZvcmVFbnRlckhvb2siLCJlbnRlckhvb2siLCJhZnRlckVudGVySG9vayIsImVudGVyQ2FuY2VsbGVkSG9vayIsImV4cGxpY2l0RW50ZXJEdXJhdGlvbiIsImNoZWNrRHVyYXRpb24iLCJleHBlY3RzQ1NTIiwidXNlcldhbnRzQ29udHJvbCIsImdldEhvb2tBcmd1bWVudHNMZW5ndGgiLCJzaG93IiwicGVuZGluZ05vZGUiLCJpc1ZhbGlkRHVyYXRpb24iLCJsZWF2ZSIsImJlZm9yZUxlYXZlIiwiYWZ0ZXJMZWF2ZSIsImxlYXZlQ2FuY2VsbGVkIiwiZGVsYXlMZWF2ZSIsImV4cGxpY2l0TGVhdmVEdXJhdGlvbiIsInBlcmZvcm1MZWF2ZSIsImludm9rZXJGbnMiLCJfZW50ZXIiLCJwbGF0Zm9ybU1vZHVsZXMiLCJ2bW9kZWwiLCJ0cmlnZ2VyIiwiZGlyZWN0aXZlIiwiYmluZGluZyIsIl92T3B0aW9ucyIsInNldFNlbGVjdGVkIiwiZ2V0VmFsdWUiLCJvbkNvbXBvc2l0aW9uU3RhcnQiLCJvbkNvbXBvc2l0aW9uRW5kIiwicHJldk9wdGlvbnNfMSIsImN1ck9wdGlvbnNfMSIsIm8iLCJuZWVkUmVzZXQiLCJoYXNOb01hdGNoaW5nT3B0aW9uIiwiYWN0dWFsbHlTZXRTZWxlY3RlZCIsImlzTXVsdGlwbGUiLCJvcHRpb24iLCJzZWxlY3RlZEluZGV4IiwiaW5pdEV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsImxvY2F0ZU5vZGUiLCJvcmlnaW5hbERpc3BsYXkiLCJfX3ZPcmlnaW5hbERpc3BsYXkiLCJkaXNwbGF5IiwidW5iaW5kIiwicGxhdGZvcm1EaXJlY3RpdmVzIiwidHJhbnNpdGlvblByb3BzIiwibW9kZSIsImdldFJlYWxDaGlsZCIsImNvbXBPcHRpb25zIiwiZXh0cmFjdFRyYW5zaXRpb25EYXRhIiwicGxhY2Vob2xkZXIiLCJyYXdDaGlsZCIsImhhc1BhcmVudFRyYW5zaXRpb24iLCJpc1NhbWVDaGlsZCIsIm9sZENoaWxkIiwiaXNOb3RUZXh0Tm9kZSIsImlzVlNob3dEaXJlY3RpdmUiLCJUcmFuc2l0aW9uIiwiX2xlYXZpbmciLCJvbGRSYXdDaGlsZCIsImRlbGF5ZWRMZWF2ZV8xIiwibW92ZUNsYXNzIiwiVHJhbnNpdGlvbkdyb3VwIiwiYmVmb3JlTW91bnQiLCJrZXB0IiwicHJldkNoaWxkcmVuIiwicmF3Q2hpbGRyZW4iLCJ0cmFuc2l0aW9uRGF0YSIsInJlbW92ZWQiLCJwb3MiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJoYXNNb3ZlIiwiY2FsbFBlbmRpbmdDYnMiLCJyZWNvcmRQb3NpdGlvbiIsImFwcGx5VHJhbnNsYXRpb24iLCJfcmVmbG93IiwiYm9keSIsIm9mZnNldEhlaWdodCIsIm1vdmVkIiwiZWxfMSIsInRyYW5zZm9ybSIsIldlYmtpdFRyYW5zZm9ybSIsInRyYW5zaXRpb25EdXJhdGlvbiIsIl9tb3ZlQ2IiLCJwcm9wZXJ0eU5hbWUiLCJfaGFzTW92ZSIsImNsb25lTm9kZSIsIm5ld1BvcyIsIm9sZFBvcyIsImR4IiwibGVmdCIsImR5IiwidG9wIiwicGxhdGZvcm1Db21wb25lbnRzIiwic3RvcmUiLCIkJHYiLCJ0YWJsZSIsImZpZWxkcyIsInNlYXJjaEZpZWxkcyIsInNvcnRPcmRlciIsImFwaSIsInBlclBhZ2UiLCJleHRyYVBhcmFtcyIsIm9uUGFnaW5hdGlvbkRhdGEiLCJvblZ1ZXRhYmxlTG9hZGluZyIsIm9uVnVlVGFibGVMb2FkU3VjY2VzcyIsInBhZ2luYXRpb25JbmZvIiwiZW1wdHlSZXN1bHQiLCJwYWdpbmF0aW9uIiwib25DaGFuZ2VQYWdlIiwiaXNGaXhlZEhlYWRlciIsInRhYmxlQ2xhc3MiLCJ0YWJsZUhlYWRlckNsYXNzIiwidGFibGVGaWVsZHMiLCJmaWVsZCIsImZpZWxkSW5kZXgiLCJ2aXNpYmxlIiwiaXNTcGVjaWFsRmllbGQiLCJleHRyYWN0TmFtZSIsInRyYWNrQnkiLCJ0aXRsZUNsYXNzIiwid2lkdGgiLCJjaGVja2VkIiwiY2hlY2tDaGVja2JveGVzU3RhdGUiLCJ0b2dnbGVBbGxDaGVja2JveGVzIiwic29ydENsYXNzIiwic29ydGFibGUiLCJpc1NvcnRhYmxlIiwicmVuZGVyVGl0bGUiLCJjbGljayIsIm9yZGVyQnkiLCJleHRyYWN0QXJncyIsIm5vdEluIiwic2Nyb2xsVmlzaWJsZSIsInNjcm9sbEJhcldpZHRoIiwiaGVpZ2h0IiwidGFibGVIZWlnaHQiLCJ0YWJsZUJvZHlDbGFzcyIsInRhYmxlRGF0YSIsIml0ZW1JbmRleCIsIm9uUm93Q2xhc3MiLCJvblJvd0NoYW5nZWQiLCJvblJvd0NsaWNrZWQiLCJkYmxjbGljayIsIm9uUm93RG91YmxlQ2xpY2tlZCIsImRhdGFDbGFzcyIsInJlbmRlclNlcXVlbmNlIiwicmVuZGVySWNvblRhZyIsImhhbmRsZUljb24iLCJyb3dTZWxlY3RlZCIsInRvZ2dsZUNoZWNrYm94Iiwic29ydEZpZWxkIiwicm93RGF0YSIsInJvd0luZGV4Iiwicm93RmllbGQiLCJyZW5kZXJOb3JtYWxGaWVsZCIsIm9uQ2VsbENsaWNrZWQiLCJvbkNlbGxEb3VibGVDbGlja2VkIiwiY29udGV4dG1lbnUiLCJvbkNlbGxSaWdodENsaWNrZWQiLCJ1c2VEZXRhaWxSb3ciLCJkZXRhaWxSb3dUcmFuc2l0aW9uIiwiaXNWaXNpYmxlRGV0YWlsUm93IiwiZGV0YWlsUm93Q2xhc3MiLCJvbkRldGFpbFJvd0NsaWNrIiwiY29sc3BhbiIsImNvdW50VmlzaWJsZUZpZWxkcyIsImRldGFpbFJvd0NvbXBvbmVudCIsImRpc3BsYXlFbXB0eURhdGFSb3ciLCJub0RhdGFUZW1wbGF0ZSIsImxlc3NUaGFuTWluUm93cyIsImJsYW5rUm93cyIsImhhc0NhbGxiYWNrIiwiY2FsbENhbGxiYWNrIiwiZ2V0T2JqZWN0VmFsdWUiLCJ0aGlzQXJnIiwid3JhcCIsIl9zbGljZWRUb0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIlR5cGVFcnJvciIsIl9hcnJheUxpa2VUb0FycmF5IiwidSIsImYiLCJyZXR1cm4iLCJraW5kT2YiLCJ0aGluZyIsImtpbmRPZlRlc3QiLCJ0eXBlT2ZUZXN0IiwiaXNVbmRlZmluZWQiLCJpc0J1ZmZlciIsImlzQXJyYXlCdWZmZXIiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiaXNTdHJpbmciLCJpc051bWJlciIsImlzRW1wdHlPYmplY3QiLCJpc0RhdGUiLCJpc0ZpbGUiLCJpc1JlYWN0TmF0aXZlQmxvYiIsInVyaSIsImlzUmVhY3ROYXRpdmUiLCJmb3JtRGF0YSIsImdldFBhcnRzIiwiaXNCbG9iIiwiaXNGaWxlTGlzdCIsImlzU3RyZWFtIiwicGlwZSIsImdldEdsb2JhbCIsImdsb2JhbFRoaXMiLCJzZWxmIiwiRyIsIkZvcm1EYXRhQ3RvciIsIkZvcm1EYXRhIiwiaXNGb3JtRGF0YSIsInByb3RvIiwiYXBwZW5kIiwia2luZCIsImlzVVJMU2VhcmNoUGFyYW1zIiwiX21hcCIsIl9tYXAyIiwiaXNSZWFkYWJsZVN0cmVhbSIsImlzUmVxdWVzdCIsImlzUmVzcG9uc2UiLCJpc0hlYWRlcnMiLCJfcmVmIiwiX3JlZiRhbGxPd25LZXlzIiwiYWxsT3duS2V5cyIsImZpbmRLZXkiLCJfZ2xvYmFsIiwiaXNDb250ZXh0RGVmaW5lZCIsIm1lcmdlIiwiX3JlZjIiLCJjYXNlbGVzcyIsInNraXBVbmRlZmluZWQiLCJhc3NpZ25WYWx1ZSIsInRhcmdldEtleSIsIl9sZW4iLCJvYmpzIiwiX2tleTIiLCJfcmVmMyIsInN0cmlwQk9NIiwiY29udGVudCIsImluaGVyaXRzIiwic3VwZXJDb25zdHJ1Y3RvciIsImRlc2NyaXB0b3JzIiwidG9GbGF0T2JqZWN0Iiwic291cmNlT2JqIiwiZGVzdE9iaiIsInByb3BGaWx0ZXIiLCJlbmRzV2l0aCIsInNlYXJjaFN0cmluZyIsInBvc2l0aW9uIiwiaXNUeXBlZEFycmF5IiwiVHlwZWRBcnJheSIsIlVpbnQ4QXJyYXkiLCJmb3JFYWNoRW50cnkiLCJnZW5lcmF0b3IiLCJfaXRlcmF0b3IiLCJwYWlyIiwibWF0Y2hBbGwiLCJyZWdFeHAiLCJleGVjIiwiaXNIVE1MRm9ybSIsInRvQ2FtZWxDYXNlIiwibSIsInAxIiwicDIiLCJfcmVmNCIsInJlZHVjZURlc2NyaXB0b3JzIiwicmVkdWNlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJyZWR1Y2VkRGVzY3JpcHRvcnMiLCJkZXNjcmlwdG9yIiwiZGVmaW5lUHJvcGVydGllcyIsImZyZWV6ZU1ldGhvZHMiLCJ0b09iamVjdFNldCIsImFycmF5T3JTdHJpbmciLCJkZWxpbWl0ZXIiLCJkZWZpbmUiLCJ0b0Zpbml0ZU51bWJlciIsImlzU3BlY0NvbXBsaWFudEZvcm0iLCJ0b0pTT05PYmplY3QiLCJ2aXNpdGVkIiwiV2Vha1NldCIsInZpc2l0IiwicmVkdWNlZFZhbHVlIiwiaXNBc3luY0ZuIiwiaXNUaGVuYWJsZSIsIl9zZXRJbW1lZGlhdGUiLCJzZXRJbW1lZGlhdGVTdXBwb3J0ZWQiLCJwb3N0TWVzc2FnZVN1cHBvcnRlZCIsInRva2VuIiwiX3JlZjUiLCJwb3N0TWVzc2FnZSIsInJhbmRvbSIsImFzYXAiLCJxdWV1ZU1pY3JvdGFzayIsImlzSXRlcmFibGUiLCJoYXNPd25Qcm9wIiwidXRpbHMiLCJpZ25vcmVEdXBsaWNhdGVPZiIsInJhd0hlYWRlcnMiLCJwYXJzZWQiLCJwYXJzZXIiLCJsaW5lIiwic3Vic3RyaW5nIiwidHJpbVNQb3JIVEFCIiwiY29kZSIsIklOVkFMSURfVU5JQ09ERV9IRUFERVJfVkFMVUVfQ0hBUlMiLCJJTlZBTElEX0JZVEVfU1RSSU5HX0hFQURFUl9WQUxVRV9DSEFSUyIsInNhbml0aXplVmFsdWUiLCJpbnZhbGlkQ2hhcnMiLCJzYW5pdGl6ZUhlYWRlclZhbHVlIiwic2FuaXRpemVCeXRlU3RyaW5nSGVhZGVyVmFsdWUiLCJ0b0J5dGVTdHJpbmdIZWFkZXJPYmplY3QiLCJoZWFkZXJzIiwiYnl0ZVN0cmluZ0hlYWRlcnMiLCJ0b0pTT04iLCJoZWFkZXIiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJfaXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJGIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsIl9jcmVhdGVDbGFzcyIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwicGFyc2VIZWFkZXJzIiwiJGludGVybmFscyIsIm5vcm1hbGl6ZUhlYWRlciIsIm5vcm1hbGl6ZVZhbHVlIiwicGFyc2VUb2tlbnMiLCJ0b2tlbnMiLCJ0b2tlbnNSRSIsImlzVmFsaWRIZWFkZXJOYW1lIiwibWF0Y2hIZWFkZXJWYWx1ZSIsImlzSGVhZGVyTmFtZUZpbHRlciIsImZvcm1hdEhlYWRlciIsInciLCJjaGFyIiwiYnVpbGRBY2Nlc3NvcnMiLCJhY2Nlc3Nvck5hbWUiLCJtZXRob2ROYW1lIiwiYXJnMSIsImFyZzIiLCJhcmczIiwiQXhpb3NIZWFkZXJzIiwidmFsdWVPclJld3JpdGUiLCJyZXdyaXRlIiwic2V0SGVhZGVyIiwiX2hlYWRlciIsIl9yZXdyaXRlIiwibEhlYWRlciIsInNldEhlYWRlcnMiLCJkZXN0IiwiX3N0ZXAiLCJtYXRjaGVyIiwiZGVsZXRlZCIsImRlbGV0ZUhlYWRlciIsImZvcm1hdCIsIl90aGlzJGNvbnN0cnVjdG9yIiwidGFyZ2V0cyIsImFzU3RyaW5ncyIsImVudHJpZXMiLCJnZXRTZXRDb29raWUiLCJmaXJzdCIsIl9sZW4yIiwiYWNjZXNzb3IiLCJpbnRlcm5hbHMiLCJhY2Nlc3NvcnMiLCJkZWZpbmVBY2Nlc3NvciIsIm1hcHBlZCIsImhlYWRlclZhbHVlIiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsImNvbnN0cnVjdCIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJSZWZlcmVuY2VFcnJvciIsIl9pbmhlcml0cyIsIl9zZXRQcm90b3R5cGVPZiIsIl93cmFwTmF0aXZlU3VwZXIiLCJNYXAiLCJfaXNOYXRpdmVGdW5jdGlvbiIsIldyYXBwZXIiLCJfY29uc3RydWN0IiwidmFsdWVPZiIsInNldFByb3RvdHlwZU9mIiwiUkVEQUNURUQiLCJoYXNPd25PclByb3RvdHlwZVRvSlNPTiIsInJlZGFjdENvbmZpZyIsInJlZGFjdEtleXMiLCJsb3dlcktleXMiLCJrIiwiX09iamVjdCRlbnRyaWVzIiwiX09iamVjdCRlbnRyaWVzJF9pIiwiQXhpb3NFcnJvciIsIl9FcnJvciIsInJlcXVlc3QiLCJyZXNwb25zZSIsImlzQXhpb3NFcnJvciIsInN0YXR1cyIsInJlZGFjdCIsInNlcmlhbGl6ZWRDb25maWciLCJkZXNjcmlwdGlvbiIsImZpbGVOYW1lIiwibGluZU51bWJlciIsImNvbHVtbk51bWJlciIsInN0YWNrIiwiY3VzdG9tUHJvcHMiLCJheGlvc0Vycm9yIiwiY2F1c2UiLCJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRUNPTk5SRUZVU0VEIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIiwiRVJSX0ZPUk1fREFUQV9ERVBUSF9FWENFRURFRCIsIlBsYXRmb3JtRm9ybURhdGEiLCJpc1Zpc2l0YWJsZSIsInJlbW92ZUJyYWNrZXRzIiwicmVuZGVyS2V5IiwiZG90cyIsImVhY2giLCJpc0ZsYXRBcnJheSIsInByZWRpY2F0ZXMiLCJ0b0Zvcm1EYXRhIiwibWV0YVRva2VucyIsImluZGV4ZXMiLCJkZWZpbmVkIiwidmlzaXRvciIsImRlZmF1bHRWaXNpdG9yIiwiX0Jsb2IiLCJCbG9iIiwibWF4RGVwdGgiLCJ1c2VCbG9iIiwiY29udmVydFZhbHVlIiwidG9JU09TdHJpbmciLCJCdWZmZXIiLCJleHBvc2VkSGVscGVycyIsImJ1aWxkIiwiZGVwdGgiLCJlbmNvZGUiLCJjaGFyTWFwIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiQXhpb3NVUkxTZWFyY2hQYXJhbXMiLCJfcGFpcnMiLCJlbmNvZGVyIiwiX2VuY29kZSIsImJ1aWxkVVJMIiwidXJsIiwiX29wdGlvbnMiLCJzZXJpYWxpemUiLCJzZXJpYWxpemVGbiIsInNlcmlhbGl6ZWRQYXJhbXMiLCJoYXNobWFya0luZGV4IiwiSW50ZXJjZXB0b3JNYW5hZ2VyIiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJzeW5jaHJvbm91cyIsInJ1bldoZW4iLCJlamVjdCIsImZvckVhY2hIYW5kbGVyIiwic2lsZW50SlNPTlBhcnNpbmciLCJmb3JjZWRKU09OUGFyc2luZyIsImNsYXJpZnlUaW1lb3V0RXJyb3IiLCJsZWdhY3lJbnRlcmNlcHRvclJlcVJlc09yZGVyaW5nIiwiVVJMU2VhcmNoUGFyYW1zIiwiaXNCcm93c2VyIiwiY2xhc3NlcyIsInByb3RvY29scyIsImhhc0Jyb3dzZXJFbnYiLCJfbmF2aWdhdG9yIiwiaGFzU3RhbmRhcmRCcm93c2VyRW52IiwicHJvZHVjdCIsImhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiIsIldvcmtlckdsb2JhbFNjb3BlIiwiaW1wb3J0U2NyaXB0cyIsIm9yaWdpbiIsImxvY2F0aW9uIiwiaHJlZiIsInBsYXRmb3JtIiwiX29iamVjdFNwcmVhZCIsImdldE93blByb3BlcnR5U3ltYm9scyIsIl9kZWZpbmVQcm9wZXJ0eSIsInRvVVJMRW5jb2RlZEZvcm0iLCJoZWxwZXJzIiwiaXNOb2RlIiwicGFyc2VQcm9wUGF0aCIsImFycmF5VG9PYmplY3QiLCJmb3JtRGF0YVRvSlNPTiIsImJ1aWxkUGF0aCIsImlzTnVtZXJpY0tleSIsImlzTGFzdCIsInRyYW5zaXRpb25hbERlZmF1bHRzIiwib3duIiwic3RyaW5naWZ5U2FmZWx5IiwicGFyc2UiLCJ0cmFuc2l0aW9uYWwiLCJhZGFwdGVyIiwidHJhbnNmb3JtUmVxdWVzdCIsImNvbnRlbnRUeXBlIiwiZ2V0Q29udGVudFR5cGUiLCJoYXNKU09OQ29udGVudFR5cGUiLCJpc09iamVjdFBheWxvYWQiLCJzZXRDb250ZW50VHlwZSIsImZvcm1TZXJpYWxpemVyIiwiX0Zvcm1EYXRhIiwidHJhbnNmb3JtUmVzcG9uc2UiLCJyZXNwb25zZVR5cGUiLCJKU09OUmVxdWVzdGVkIiwic3RyaWN0SlNPTlBhcnNpbmciLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwibWF4Q29udGVudExlbmd0aCIsIm1heEJvZHlMZW5ndGgiLCJ2YWxpZGF0ZVN0YXR1cyIsImNvbW1vbiIsIkFjY2VwdCIsInRyYW5zZm9ybURhdGEiLCJpc0NhbmNlbCIsIl9fQ0FOQ0VMX18iLCJDYW5jZWxlZEVycm9yIiwiX0F4aW9zRXJyb3IiLCJzZXR0bGUiLCJwYXJzZVByb3RvY29sIiwic3BlZWRvbWV0ZXIiLCJzYW1wbGVzQ291bnQiLCJtaW4iLCJieXRlcyIsInRpbWVzdGFtcHMiLCJoZWFkIiwidGFpbCIsImZpcnN0U2FtcGxlVFMiLCJjaHVua0xlbmd0aCIsInN0YXJ0ZWRBdCIsImJ5dGVzQ291bnQiLCJwYXNzZWQiLCJyb3VuZCIsInRocm90dGxlIiwiZnJlcSIsInRpbWVzdGFtcCIsInRocmVzaG9sZCIsImxhc3RBcmdzIiwidGltZXIiLCJpbnZva2UiLCJ0aHJvdHRsZWQiLCJwcm9ncmVzc0V2ZW50UmVkdWNlciIsImxpc3RlbmVyIiwiaXNEb3dubG9hZFN0cmVhbSIsImJ5dGVzTm90aWZpZWQiLCJfc3BlZWRvbWV0ZXIiLCJsb2FkZWQiLCJyYXdMb2FkZWQiLCJ0b3RhbCIsImxlbmd0aENvbXB1dGFibGUiLCJwcm9ncmVzc0J5dGVzIiwicmF0ZSIsInByb2dyZXNzIiwiZXN0aW1hdGVkIiwicHJvZ3Jlc3NFdmVudERlY29yYXRvciIsImFzeW5jRGVjb3JhdG9yIiwiaXNNU0lFIiwiVVJMIiwicHJvdG9jb2wiLCJob3N0IiwicG9ydCIsIndyaXRlIiwiZXhwaXJlcyIsImRvbWFpbiIsInNlY3VyZSIsInNhbWVTaXRlIiwiY29va2llIiwidG9VVENTdHJpbmciLCJyZWFkIiwiY29va2llcyIsImVxIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiaXNBYnNvbHV0ZVVSTCIsImNvbWJpbmVVUkxzIiwiYmFzZVVSTCIsInJlbGF0aXZlVVJMIiwiYnVpbGRGdWxsUGF0aCIsInJlcXVlc3RlZFVSTCIsImFsbG93QWJzb2x1dGVVcmxzIiwiaXNSZWxhdGl2ZVVybCIsImhlYWRlcnNUb09iamVjdCIsIm1lcmdlQ29uZmlnIiwiY29uZmlnMSIsImNvbmZpZzIiLCJnZXRNZXJnZWRWYWx1ZSIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJ2YWx1ZUZyb21Db25maWcyIiwiZGVmYXVsdFRvQ29uZmlnMiIsIm1lcmdlRGlyZWN0S2V5cyIsIm1lcmdlTWFwIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXRNZXNzYWdlIiwid2l0aENyZWRlbnRpYWxzIiwid2l0aFhTUkZUb2tlbiIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJkZWNvbXByZXNzIiwiYmVmb3JlUmVkaXJlY3QiLCJ0cmFuc3BvcnQiLCJodHRwQWdlbnQiLCJodHRwc0FnZW50IiwiY2FuY2VsVG9rZW4iLCJzb2NrZXRQYXRoIiwiYWxsb3dlZFNvY2tldFBhdGhzIiwicmVzcG9uc2VFbmNvZGluZyIsImNvbXB1dGVDb25maWdWYWx1ZSIsImNvbmZpZ1ZhbHVlIiwiaXNVUkxTYW1lT3JpZ2luIiwiRk9STV9EQVRBX0NPTlRFTlRfSEVBREVSUyIsInNldEZvcm1EYXRhSGVhZGVycyIsImZvcm1IZWFkZXJzIiwicG9saWN5IiwiZW5jb2RlVVRGOCIsImhleCIsImZyb21DaGFyQ29kZSIsIm5ld0NvbmZpZyIsImF1dGgiLCJidG9hIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsImdldEhlYWRlcnMiLCJzaG91bGRTZW5kWFNSRiIsInhzcmZWYWx1ZSIsInJlc29sdmVDb25maWciLCJpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQiLCJYTUxIdHRwUmVxdWVzdCIsImRpc3BhdGNoWGhyUmVxdWVzdCIsIl9jb25maWciLCJyZXF1ZXN0RGF0YSIsInJlcXVlc3RIZWFkZXJzIiwib25DYW5jZWxlZCIsInVwbG9hZFRocm90dGxlZCIsImRvd25sb2FkVGhyb3R0bGVkIiwiZmx1c2hVcGxvYWQiLCJmbHVzaERvd25sb2FkIiwidW5zdWJzY3JpYmUiLCJzaWduYWwiLCJvcGVuIiwib25sb2FkZW5kIiwicmVzcG9uc2VIZWFkZXJzIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2VEYXRhIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzVGV4dCIsIl9yZWplY3QiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJoYW5kbGVMb2FkIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwic3RhcnRzV2l0aCIsIm9uYWJvcnQiLCJoYW5kbGVBYm9ydCIsIm9uZXJyb3IiLCJvbnRpbWVvdXQiLCJoYW5kbGVUaW1lb3V0IiwidGltZW91dEVycm9yTWVzc2FnZSIsInNldFJlcXVlc3RIZWFkZXIiLCJfcHJvZ3Jlc3NFdmVudFJlZHVjZXIiLCJfcHJvZ3Jlc3NFdmVudFJlZHVjZXIyIiwidXBsb2FkIiwiX3Byb2dyZXNzRXZlbnRSZWR1Y2VyMyIsIl9wcm9ncmVzc0V2ZW50UmVkdWNlcjQiLCJjYW5jZWwiLCJhYm9ydCIsInN1YnNjcmliZSIsImFib3J0ZWQiLCJzZW5kIiwiY29tcG9zZVNpZ25hbHMiLCJzaWduYWxzIiwiY29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsIkdlbmVyYXRvciIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZGlzcGxheU5hbWUiLCJfcmVnZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiX3dyYXBBc3luY0dlbmVyYXRvciIsIkFzeW5jR2VuZXJhdG9yIiwicmVzdW1lIiwiX092ZXJsb2FkWWllbGQiLCJhc3luY0l0ZXJhdG9yIiwidGhyb3ciLCJfYXdhaXRBc3luY0dlbmVyYXRvciIsIl9hc3luY0dlbmVyYXRvckRlbGVnYXRlIiwicHVtcCIsIl9hc3luY0l0ZXJhdG9yIiwiQXN5bmNGcm9tU3luY0l0ZXJhdG9yIiwiQXN5bmNGcm9tU3luY0l0ZXJhdG9yQ29udGludWF0aW9uIiwiX3JldHVybiIsIl90aHJvdyIsInN0cmVhbUNodW5rIiwiY2h1bmsiLCJjaHVua1NpemUiLCJfY29udGV4dCIsImJ5dGVMZW5ndGgiLCJyZWFkQnl0ZXMiLCJfY2FsbGVlIiwiaXRlcmFibGUiLCJfaXRlcmF0b3JBYnJ1cHRDb21wbGV0aW9uIiwiX2RpZEl0ZXJhdG9yRXJyb3IiLCJfaXRlcmF0b3JFcnJvciIsIl9jb250ZXh0MiIsInJlYWRTdHJlYW0iLCJfcmVnZW5lcmF0b3JWYWx1ZXMiLCJfeCIsIl94MiIsIl9jYWxsZWUyIiwic3RyZWFtIiwicmVhZGVyIiwiX3lpZWxkJF9hd2FpdEFzeW5jR2VuIiwiX2NvbnRleHQzIiwiZ2V0UmVhZGVyIiwiX3gzIiwidHJhY2tTdHJlYW0iLCJvblByb2dyZXNzIiwib25GaW5pc2giLCJfb25GaW5pc2giLCJSZWFkYWJsZVN0cmVhbSIsInB1bGwiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9jYWxsZWUzIiwiX3lpZWxkJGl0ZXJhdG9yJG5leHQiLCJfZG9uZSIsImxvYWRlZEJ5dGVzIiwiX3QyIiwiX2NvbnRleHQ0IiwiY2xvc2UiLCJlbnF1ZXVlIiwiaGlnaFdhdGVyTWFyayIsImVzdGltYXRlRGF0YVVSTERlY29kZWRCeXRlcyIsImNvbW1hIiwibWV0YSIsImlzQmFzZTY0IiwiZWZmZWN0aXZlTGVuIiwiaXNIZXgiLCJwYWQiLCJpZHgiLCJ0YWlsSXNQY3QzRCIsImdyb3VwcyIsIlZFUlNJT04iLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJfbmV4dCIsIkRFRkFVTFRfQ0hVTktfU0laRSIsImdsb2JhbE9iamVjdCIsIlRleHRFbmNvZGVyIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiX2VudiIsImVudkZldGNoIiwiZmV0Y2giLCJpc0ZldGNoU3VwcG9ydGVkIiwiaXNSZXF1ZXN0U3VwcG9ydGVkIiwiaXNSZXNwb25zZVN1cHBvcnRlZCIsImlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQiLCJlbmNvZGVUZXh0IiwiYXJyYXlCdWZmZXIiLCJzdXBwb3J0c1JlcXVlc3RTdHJlYW0iLCJkdXBsZXhBY2Nlc3NlZCIsImR1cGxleCIsImhhc0NvbnRlbnRUeXBlIiwic3VwcG9ydHNSZXNwb25zZVN0cmVhbSIsInJlc29sdmVycyIsImdldEJvZHlMZW5ndGgiLCJfcmVxdWVzdCIsInNpemUiLCJyZXNvbHZlQm9keUxlbmd0aCIsImdldENvbnRlbnRMZW5ndGgiLCJfeDQiLCJfY2FsbGVlNCIsIl9yZXNvbHZlQ29uZmlnIiwiX3Jlc29sdmVDb25maWckd2l0aENyIiwiZmV0Y2hPcHRpb25zIiwiaGFzTWF4Q29udGVudExlbmd0aCIsImhhc01heEJvZHlMZW5ndGgiLCJfZmV0Y2giLCJjb21wb3NlZFNpZ25hbCIsInJlcXVlc3RDb250ZW50TGVuZ3RoIiwib3V0Ym91bmRMZW5ndGgiLCJjb250ZW50VHlwZUhlYWRlciIsIl9wcm9ncmVzc0V2ZW50RGVjb3JhdCIsIl9wcm9ncmVzc0V2ZW50RGVjb3JhdDIiLCJpc0NyZWRlbnRpYWxzU3VwcG9ydGVkIiwicmVzb2x2ZWRPcHRpb25zIiwiZGVjbGFyZWRMZW5ndGgiLCJpc1N0cmVhbVJlc3BvbnNlIiwicmVzcG9uc2VDb250ZW50TGVuZ3RoIiwiX3JlZjYiLCJfb25Qcm9ncmVzcyIsIl9mbHVzaCIsImJ5dGVzUmVhZCIsIm9uQ2h1bmtQcm9ncmVzcyIsIm1hdGVyaWFsaXplZFNpemUiLCJjYW5jZWxlZEVycm9yIiwiX3QzIiwiX3Q0IiwiX3Q1IiwidG9BYm9ydFNpZ25hbCIsImNyZWRlbnRpYWxzIiwiX3g1Iiwic2VlZENhY2hlIiwiZ2V0RmV0Y2giLCJzZWVkcyIsInNlZWQiLCJodHRwQWRhcHRlciIsInhockFkYXB0ZXIiLCJmZXRjaEFkYXB0ZXIiLCJrbm93bkFkYXB0ZXJzIiwiaHR0cCIsInhociIsInJlbmRlclJlYXNvbiIsImlzUmVzb2x2ZWRIYW5kbGUiLCJnZXRBZGFwdGVyIiwiYWRhcHRlcnMiLCJfYWRhcHRlcnMiLCJuYW1lT3JBZGFwdGVyIiwicmVqZWN0ZWRSZWFzb25zIiwicmVhc29ucyIsInN0YXRlIiwidGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZCIsInRocm93SWZSZXF1ZXN0ZWQiLCJkaXNwYXRjaFJlcXVlc3QiLCJvbkFkYXB0ZXJSZXNvbHV0aW9uIiwib25BZGFwdGVyUmVqZWN0aW9uIiwidmFsaWRhdG9ycyIsImRlcHJlY2F0ZWRXYXJuaW5ncyIsImZvcm1hdE1lc3NhZ2UiLCJkZXNjIiwic3BlbGxpbmciLCJjb3JyZWN0U3BlbGxpbmciLCJhc3NlcnRPcHRpb25zIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiQXhpb3MiLCJpbnN0YW5jZUNvbmZpZyIsImludGVyY2VwdG9ycyIsIl9yZXF1ZXN0MiIsImNvbmZpZ09yVXJsIiwiZHVtbXkiLCJmaXJzdE5ld2xpbmVJbmRleCIsInNlY29uZE5ld2xpbmVJbmRleCIsInN0YWNrV2l0aG91dFR3b1RvcExpbmVzIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJib29sZWFuIiwiZnVuY3Rpb24iLCJiYXNlVXJsIiwid2l0aFhzcmZUb2tlbiIsImNvbnRleHRIZWFkZXJzIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJ1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyIsImludGVyY2VwdG9yIiwicmVzcG9uc2VJbnRlcmNlcHRvckNoYWluIiwicHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzIiwicHJvbWlzZSIsImNoYWluIiwib25GdWxmaWxsZWQiLCJvblJlamVjdGVkIiwiZ2V0VXJpIiwiZnVsbFBhdGgiLCJmb3JFYWNoTWV0aG9kTm9EYXRhIiwiZm9yRWFjaE1ldGhvZFdpdGhEYXRhIiwiZ2VuZXJhdGVIVFRQTWV0aG9kIiwiaXNGb3JtIiwiaHR0cE1ldGhvZCIsIkNhbmNlbFRva2VuIiwiZXhlY3V0b3IiLCJyZXNvbHZlUHJvbWlzZSIsInByb21pc2VFeGVjdXRvciIsIl9saXN0ZW5lcnMiLCJvbmZ1bGZpbGxlZCIsInNwcmVhZCIsInBheWxvYWQiLCJIdHRwU3RhdHVzQ29kZSIsIkNvbnRpbnVlIiwiU3dpdGNoaW5nUHJvdG9jb2xzIiwiUHJvY2Vzc2luZyIsIkVhcmx5SGludHMiLCJPayIsIkNyZWF0ZWQiLCJBY2NlcHRlZCIsIk5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbiIsIk5vQ29udGVudCIsIlJlc2V0Q29udGVudCIsIlBhcnRpYWxDb250ZW50IiwiTXVsdGlTdGF0dXMiLCJBbHJlYWR5UmVwb3J0ZWQiLCJJbVVzZWQiLCJNdWx0aXBsZUNob2ljZXMiLCJNb3ZlZFBlcm1hbmVudGx5IiwiRm91bmQiLCJTZWVPdGhlciIsIk5vdE1vZGlmaWVkIiwiVXNlUHJveHkiLCJVbnVzZWQiLCJUZW1wb3JhcnlSZWRpcmVjdCIsIlBlcm1hbmVudFJlZGlyZWN0IiwiQmFkUmVxdWVzdCIsIlVuYXV0aG9yaXplZCIsIlBheW1lbnRSZXF1aXJlZCIsIkZvcmJpZGRlbiIsIk5vdEZvdW5kIiwiTWV0aG9kTm90QWxsb3dlZCIsIk5vdEFjY2VwdGFibGUiLCJQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLCJSZXF1ZXN0VGltZW91dCIsIkNvbmZsaWN0IiwiR29uZSIsIkxlbmd0aFJlcXVpcmVkIiwiUHJlY29uZGl0aW9uRmFpbGVkIiwiUGF5bG9hZFRvb0xhcmdlIiwiVXJpVG9vTG9uZyIsIlVuc3VwcG9ydGVkTWVkaWFUeXBlIiwiUmFuZ2VOb3RTYXRpc2ZpYWJsZSIsIkV4cGVjdGF0aW9uRmFpbGVkIiwiSW1BVGVhcG90IiwiTWlzZGlyZWN0ZWRSZXF1ZXN0IiwiVW5wcm9jZXNzYWJsZUVudGl0eSIsIkxvY2tlZCIsIkZhaWxlZERlcGVuZGVuY3kiLCJUb29FYXJseSIsIlVwZ3JhZGVSZXF1aXJlZCIsIlByZWNvbmRpdGlvblJlcXVpcmVkIiwiVG9vTWFueVJlcXVlc3RzIiwiUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlIiwiVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnMiLCJJbnRlcm5hbFNlcnZlckVycm9yIiwiTm90SW1wbGVtZW50ZWQiLCJCYWRHYXRld2F5IiwiU2VydmljZVVuYXZhaWxhYmxlIiwiR2F0ZXdheVRpbWVvdXQiLCJIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZCIsIlZhcmlhbnRBbHNvTmVnb3RpYXRlcyIsIkluc3VmZmljaWVudFN0b3JhZ2UiLCJMb29wRGV0ZWN0ZWQiLCJOb3RFeHRlbmRlZCIsIk5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkIiwiV2ViU2VydmVySXNEb3duIiwiQ29ubmVjdGlvblRpbWVkT3V0IiwiT3JpZ2luSXNVbnJlYWNoYWJsZSIsIlRpbWVvdXRPY2N1cnJlZCIsIlNzbEhhbmRzaGFrZUZhaWxlZCIsIkludmFsaWRTc2xDZXJ0aWZpY2F0ZSIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImF4aW9zIiwiQ2FuY2VsIiwiYWxsIiwicHJvbWlzZXMiLCJmb3JtVG9KU09OIiwibG9hZE9uU3RhcnQiLCJhcGlVcmwiLCJyZWFjdGl2ZUFwaVVybCIsImFwaU1vZGUiLCJkYXRhVG90YWwiLCJkYXRhTWFuYWdlciIsImRhdGFQYXRoIiwicGFnaW5hdGlvblBhdGgiLCJxdWVyeVBhcmFtcyIsInBhZ2UiLCJhcHBlbmRQYXJhbXMiLCJodHRwT3B0aW9ucyIsImh0dHBGZXRjaCIsImluaXRpYWxQYWdlIiwibXVsdGlTb3J0IiwibXVsdGlTb3J0S2V5Iiwicm93Q2xhc3NDYWxsYmFjayIsInJvd0NsYXNzIiwibG9hZGluZ0NsYXNzIiwiYXNjZW5kaW5nSWNvbiIsImRlc2NlbmRpbmdJY29uIiwiYXNjZW5kaW5nQ2xhc3MiLCJkZXNjZW5kaW5nQ2xhc3MiLCJzb3J0YWJsZUljb24iLCJtaW5Sb3dzIiwic2hvd1NvcnRJY29ucyIsImV2ZW50UHJlZml4IiwidGFibGVQYWdpbmF0aW9uIiwiY3VycmVudFBhZ2UiLCJzZWxlY3RlZFRvIiwidmlzaWJsZURldGFpbFJvd3MiLCJsYXN0U2Nyb2xsUG9zaXRpb24iLCJub3JtYWxpemVGaWVsZHMiLCJub3JtYWxpemVTb3J0T3JkZXIiLCJnZXRTY3JvbGxCYXJXaWR0aCIsImZpcmVFdmVudCIsImxvYWREYXRhIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImhhbmRsZVNjcm9sbCIsImNvdW50VGFibGVEYXRhIiwiaXNBcGlNb2RlIiwiaXNEYXRhTW9kZSIsIm91dGVyIiwiaW5uZXIiLCJ2aXNpYmlsaXR5Iiwid2lkdGhXaXRob3V0U2Nyb2xsYmFyIiwib2Zmc2V0V2lkdGgiLCJvdmVyZmxvdyIsIndpZHRoV2l0aFNjcm9sbGJhciIsImhvcml6b250YWwiLCJzY3JvbGxMZWZ0IiwidGl0bGUiLCJzZXRUaXRsZSIsInNldERhdGEiLCJmaXhIZWFkZXIiLCJ0aXRsZUNhc2UiLCJnZXRUaXRsZSIsImlzSW5DdXJyZW50U29ydEdyb3VwIiwiaGFzU29ydGFibGVJY29uIiwic29ydEljb25PcGFjaXR5IiwiaWNvblRhZyIsInNvcnRJY29uIiwiZmllbGROYW1lIiwidHh0Iiwic3Vic3RyIiwiY2FtZWxDYXNlIiwic3VjY2VzcyIsImxvYWRTdWNjZXNzIiwiZmFpbGVkIiwibG9hZEZhaWxlZCIsImNhbGxEYXRhTWFuYWdlciIsImdldEFwcGVuZFBhcmFtcyIsImdldEFsbFF1ZXJ5UGFyYW1zIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiZnVuYyIsInBhcmVudEZ1bmN0aW9uRXhpc3RzIiwiY2FsbFBhcmVudEZ1bmN0aW9uIiwiZXZlbnROYW1lIiwiZ2V0U29ydFBhcmFtIiwiZ2V0RGVmYXVsdFNvcnRQYXJhbSIsImRpcmVjdGlvbiIsInN0cmluZyIsImN1cnJlbnRTb3J0T3JkZXJQb3NpdGlvbiIsImZpZWxkSXNJblNvcnRPcmRlclBvc2l0aW9uIiwibXVsdGlDb2x1bW5Tb3J0Iiwic2luZ2xlQ29sdW1uU29ydCIsImNsZWFyU29ydE9yZGVyIiwic3RlcCIsImNvdW50Iiwib3BhY2l0eSIsImRhdGFJdGVtIiwiaXNDaGVja2VkIiwiaWRDb2x1bW4iLCJzZWxlY3RJZCIsInVuc2VsZWN0SWQiLCJpc1NlbGVjdGVkUm93Iiwic2VsZWN0b3IiLCJlbHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiaW5kZXRlcm1pbmF0ZSIsImdvdG9QcmV2aW91c1BhZ2UiLCJnb3RvTmV4dFBhZ2UiLCJsYXN0X3BhZ2UiLCJnb3RvUGFnZSIsInJvd0lkIiwic2hvd0RldGFpbFJvdyIsImhpZGVEZXRhaWxSb3ciLCJ0b2dnbGVEZXRhaWxSb3ciLCJzaG93RmllbGQiLCJoaWRlRmllbGQiLCJ0b2dnbGVGaWVsZCIsInJlbmRlckljb24iLCJtYWtlUGFnaW5hdGlvbiIsImNlaWwiLCJjaGFuZ2VQYWdlIiwicmVsb2FkIiwicmVmcmVzaCIsInJlc2V0RGF0YSIsIm9sZFZhbCIsIndyYXBwZXJDbGFzcyIsImxpbmtDbGFzcyIsImlzT25GaXJzdFBhZ2UiLCJkaXNhYmxlZENsYXNzIiwibG9hZFBhZ2UiLCJpY29ucyIsIm5vdEVub3VnaFBhZ2VzIiwidG90YWxQYWdlIiwicGFnZUNsYXNzIiwiaXNDdXJyZW50UGFnZSIsIndpbmRvd1NpemUiLCJ3aW5kb3dTdGFydCIsImlzT25MYXN0UGFnZSIsInBhZ2luYXRpb25DbGFzcyIsInBhZ2luYXRpb25JbmZvQ2xhc3MiLCJkcm9wZG93bkNsYXNzIiwib25FYWNoU2lkZSIsImN1cnJlbnRfcGFnZSIsInNldFBhZ2luYXRpb25EYXRhIiwiUGFnaW5hdGlvbk1peGluIiwiaW5mb0NsYXNzIiwiaW5mb1RlbXBsYXRlIiwiUGFnaW5hdGlvbkluZm9NaXhpbiIsIlZ1ZXRhYmxlIiwiVnVldGFibGVQYWdpbmF0aW9uIiwiVnVldGFibGVQYWdpbmF0aW9uSW5mbyIsIlZ1ZXRhYmxlQ3NzQ29uZmlnIiwidW5zZXQiLCJ2dWV0YWJsZSIsIiRldmVudHMiLCJvbkZpbHRlclNldCIsIm9uRmlsdGVyUmVzZXQiLCJvbkZpbHRlclBlclBhZ2UiLCJwYWdpbmF0aW9uRGF0YSIsImZpbHRlclRleHQiLCJfdGhpczIiLCJfdGhpczMiLCJsaW1pdCIsIl90aGlzNCIsInNlYXJjaFBsYWNlaG9sZGVyIiwiaW5wdXQiLCJkb0ZpbHRlciIsImJsdXIiLCIkJHNlbGVjdGVkVmFsIiwiY2hhbmdlUGVyUGFnZSIsInBlclBhZ2VPcHRpb25zIiwiZGVib3VuY2UiLCJmaXJlIiwibGVhZGluZyIsInJlc2V0RmlsdGVyIiwiZml4ZWRBbW91bnQiLCJzcGVlZCIsInByaW1hcnlDb2xvciIsInNlY29uZGFyeUNvbG9yIiwib2Zmc2V0IiwicngiLCJyeSIsIl9tZXJnZUpTWFByb3BzIiwiQ29udGVudExvYWRlciIsInByZXNlcnZlQXNwZWN0UmF0aW8iLCJwcmltYXJ5T3BhY2l0eSIsInNlY29uZGFyeU9wYWNpdHkiLCJ1bmlxdWVLZXkiLCJhbmltYXRlIiwiaWRDbGlwIiwiaWRHcmFkaWVudCIsInZpZXdCb3giLCJmaWxsIiwiYXR0cmlidXRlTmFtZSIsImR1ciIsInJlcGVhdENvdW50IiwiQnVsbGV0TGlzdExvYWRlciIsImN4IiwiY3kiLCJDb2RlTG9hZGVyIiwiRmFjZWJvb2tMb2FkZXIiLCJMaXN0TG9hZGVyIiwiSW5zdGFncmFtTG9hZGVyIiwic3RlcHMiLCJGbGV4VGFibGUiLCJGbGV4RmlsdGVyQmFyIiwiRmxleENvbnRlbnRMb2FkZXIiLCJpbml0aWFsU3RvcmUiLCJWdWVFdmVudHMiLCJBcHAiLCJJRCIsImVsZW1lbnQiLCJkYXRhc2V0IiwiJCIsIkV2ZW50RW1pdHRlciIsIkRFRkFVTFRTIiwibGFiZWxLZXkiLCJ2YWx1ZUtleSIsImNoaWxkS2V5IiwiaWNvbktleSIsIml0ZW1LZXkiLCJpdGVtVHJpZ2dlciIsInBhdGhCYXIiLCJjbGFzc05hbWUiLCJjb250YWluZXIiLCJjb2wiLCJpdGVtUHJlcGVuZCIsIml0ZW1Db250ZW50IiwiaXRlbUFwcGVuZCIsIkZpbmRlciIsIiRlbWl0dGVyIiwiY2xpY2tFdmVudCIsImtleWRvd25FdmVudCIsIml0ZW1TZWxlY3RlZCIsImFkZENvbHVtbiIsIm5hdmlnYXRlIiwiZ29UbyIsImNyZWF0ZUNvbHVtbiIsImNyZWF0ZVBhdGhCYXIiLCJwcmV2ZW50RGVmYXVsdCIsImRlZmF1bHRQYXRoIiwiY3JlYXRlTGlzdCIsImRpdiIsInNpYmxpbmdzIiwiaW5zZXJ0QWZ0ZXIiLCJjb2x1bW4iLCJjbG9zZXN0IiwicHJldmVudCIsInN0b3BQcm9wYWdhdGlvbiIsImNvZGVzIiwia2V5Q29kZSIsIl9pdGVtIiwiZmluZCIsIm5leHRBbGwiLCJmb2N1cyIsInNjcm9sbFRvIiwicGFnZVhPZmZzZXQiLCJwYWdlWU9mZnNldCIsInVwZGF0ZVBhdGhCYXIiLCJuZXdDb2x1bW4iLCJmaW5kTGFzdEFjdGl2ZSIsImlzSW5WaWV3Iiwic2Nyb2xsVG9WaWV3IiwiYml0Iiwic2VsZWN0UGF0aCIsIl90aGlzNSIsImNyZWF0ZUl0ZW0iLCJpdGVtcyIsImZyYWdtZW50cyIsImZyYWdtZW50IiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImxpc3RJdGVtIiwibGlzdEl0ZW1DbGFzc2VzIiwibGluayIsImNyZWF0ZUl0ZW1Db250ZW50IiwiX3RoaXM2IiwiYWN0aXZlSXRlbXMiLCJpdGVtS2V5cyIsImVtcHR5IiwiYWN0aXZlSXRlbSIsImljb24iLCJjaGlsZF9jb3VudCIsImh0bWwiLCJnZXRJY29uIiwicGFydGlhbCIsImNvbnRhaW5lckhlaWdodCIsImVsZW1lbnRUb3AiLCJlbGVtZW50Qm90dG9tIiwiaXNUb3RhbCIsImlzUGFydGlhbCIsImJvdCIsImJvdHRvbSIsIm5vd190b3AiLCJub3dfYm90Iiwic2Nyb2xsX2J5Iiwic2Nyb2xsVG9wIiwiZ2V0SW5pdGlhbFJvdXRlIiwiZ2V0U3RvcmUiLCJzZXRJbml0aWFsUm91dGUiLCJYSFJVVUlEIiwiR1JBVl9DT05GSUciLCJHcmF2Q29uZmlnIiwiR3JhdkFkbWluIiwiSW5zdGFuY2VzIiwiaXNJblZpZXdwb3J0IiwiYm91bmRpbmciLCJ0aXRsZWJhciIsImlubmVySGVpZ2h0IiwiZG9jdW1lbnRFbGVtZW50IiwicmlnaHQiLCJpbm5lcldpZHRoIiwiY2xpZW50V2lkdGgiLCJGbGV4UGFnZXMiLCJkYXRhTG9hZCIsImZpbmRlciIsInJvdXRlIiwic2Nyb2xsV2lkdGgiLCJjcmVhdGVTaW1wbGVDb2x1bW4iLCJmaWx0ZXJzIiwiVVVJRCIsInN0YXJ0TG9hZGVyIiwid2l0aEZpbHRlcnMiLCJhamF4IiwiY3VycmVudF91cmwiLCJiNjRfZW5jb2RlX3VuaWNvZGUiLCJhY3Rpb24iLCJzdG9wTG9hZGVyIiwiY3JlYXRlRXJyb3JDb2x1bW4iLCJsb2FkaW5nSW5kaWNhdG9yIiwiY3JlYXRlTG9hZGluZ0NvbHVtbiIsImZpbHRlcnNfaGl0IiwiZnJhZyIsImV4dHJhcyIsInB1Ymxpc2hlZCIsImxhbmciLCJ0cmFuc2xhdGVkIiwiYXBwZW5kVG8iLCJwdWJsaXNoZWRfZGF0ZSIsInVucHVibGlzaGVkX2RhdGUiLCJjbG9jayIsImFjdGlvbnMiLCJkb3Rkb3Rkb3QiLCJMQU5HX1VSTCIsInRhZ3MiLCJsYW5ncyIsInRyYW5zbGF0aW9ucyIsImNhblByZXZpZXciLCJjYW5FZGl0IiwiY2FuQ29weSIsImNhbkRlbGV0ZSIsInVsIiwiYWRtaW5fbm9uY2UiLCJidXR0b24iLCJhcnJvdyIsInRvU29saWRCeXRlcyIsImI2NF9kZWNvZGVfdW5pY29kZSIsImF0b2IiLCJ1cGRhdGVQb3NpdGlvbiIsInNjcm9sbGluZ0NvbHVtbiIsInBhZ2VDb2x1bW5zIiwiZ3JvdXAiLCJkcm9wZG93biIsImJ1dHRvbkluVmlldyIsImJ1dHRvbkNsaWVudFJlY3QiLCJkcm9wZG93bkNsaWVudFJlY3QiLCJ0YXJnZXRDbGllbnRSZWN0IiwiY2xvc2VHaG9zdERyb3Bkb3ducyIsIm9wZW5lZCIsInNjcm9sbGluZ0RvY3VtZW50IiwiY29udGFpbnMiLCJ0b2dnbGUiLCJjb250YWluZXJTY3JvbGxlciIsInNjcm9sbCIsInNjcm9sbEV2ZW50IiwiRXZlbnQiLCJjb3B5RmxleFBhZ2UiLCJtb2RhbCIsImZvcm0iLCJ0aXRsZUZpZWxkIiwiZm9sZGVyRmllbGQiLCJmb2xkZXIiLCJpbnB1dHMiLCJ0cmFja011bHRpIiwibXVsdGkiLCJpc0VuYWJsZWQiLCJnZXRDb29raWUiLCJzZXRDb29raWUiLCJnZXRGaWx0ZXJzIiwic2V0U3RvcmUiLCJzYW1lc2l0ZSIsIl9yZWYkcm91dGUiLCJfcmVmJGZpbHRlcnMiLCJfcmVmJG9wdGlvbnMiLCJGbGV4UGFnZXNJbnN0YW5jZSIsIlJlTG9hZCIsImZyZXNoIiwic2VhcmNoIiwiZ3JhdkNvbmZpZyIsImlzU2VhcmNoRm9jdXNlZCIsImNvbnRlbnRXcmFwcGVyIiwic2Nyb2xsUG9zaXRpb24iLCJmaWx0ZXJUeXBlIiwiX2NoZWNrU3RhdHVzIiwidGhyb3R0bGVkUmVsb2FkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8100\n\n}");
/***/ },
/***/ 857
() {
eval("{document.addEventListener('click', function (event) {\n var wrapper = event.target.closest('.checkboxes.indeterminate');\n if (wrapper) {\n event.preventDefault();\n var checkbox = wrapper.querySelector('input[type=\"checkbox\"]:not([disabled])');\n var checkStatus = wrapper.dataset._checkStatus;\n wrapper.classList.remove('status-checked', 'status-unchecked', 'status-indeterminate');\n switch (checkStatus) {\n // checked, going indeterminate\n case '1':\n wrapper.dataset._checkStatus = '2';\n checkbox.indeterminate = true;\n checkbox.checked = false;\n checkbox.value = 0;\n wrapper.classList.add('status-indeterminate');\n break;\n\n // indeterminate, going unchecked\n case '2':\n wrapper.dataset._checkStatus = '0';\n checkbox.indeterminate = false;\n checkbox.checked = false;\n checkbox.value = '';\n wrapper.classList.add('status-unchecked');\n break;\n\n // unchecked, going checked\n case '0':\n default:\n wrapper.dataset._checkStatus = '1';\n checkbox.indeterminate = false;\n checkbox.checked = true;\n checkbox.value = 1;\n wrapper.classList.add('status-checked');\n break;\n }\n var input = new CustomEvent('input', {\n detail: {\n target: checkbox\n }\n });\n document.dispatchEvent(input);\n }\n});\n(document.querySelectorAll('input[type=\"checkbox\"][indeterminate=\"true\"]') || []).forEach(function (input) {\n input.indeterminate = true;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODU3LmpzIiwibmFtZXMiOlsiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJ3cmFwcGVyIiwidGFyZ2V0IiwiY2xvc2VzdCIsInByZXZlbnREZWZhdWx0IiwiY2hlY2tib3giLCJxdWVyeVNlbGVjdG9yIiwiY2hlY2tTdGF0dXMiLCJkYXRhc2V0IiwiX2NoZWNrU3RhdHVzIiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwiaW5kZXRlcm1pbmF0ZSIsImNoZWNrZWQiLCJ2YWx1ZSIsImFkZCIsImlucHV0IiwiQ3VzdG9tRXZlbnQiLCJkZXRhaWwiLCJkaXNwYXRjaEV2ZW50IiwicXVlcnlTZWxlY3RvckFsbCIsImZvckVhY2giXSwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL2FwcC91dGlscy9pbmRldGVybWluYXRlLmpzPzFkMzQiXSwic291cmNlc0NvbnRlbnQiOlsiZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB3cmFwcGVyID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5jaGVja2JveGVzLmluZGV0ZXJtaW5hdGUnKTtcbiAgICBpZiAod3JhcHBlcikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBjaGVja2JveCA9IHdyYXBwZXIucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOm5vdChbZGlzYWJsZWRdKScpO1xuICAgICAgICBjb25zdCBjaGVja1N0YXR1cyA9IHdyYXBwZXIuZGF0YXNldC5fY2hlY2tTdGF0dXM7XG4gICAgICAgIHdyYXBwZXIuY2xhc3NMaXN0LnJlbW92ZSgnc3RhdHVzLWNoZWNrZWQnLCAnc3RhdHVzLXVuY2hlY2tlZCcsICdzdGF0dXMtaW5kZXRlcm1pbmF0ZScpO1xuXG4gICAgICAgIHN3aXRjaCAoY2hlY2tTdGF0dXMpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrZWQsIGdvaW5nIGluZGV0ZXJtaW5hdGVcbiAgICAgICAgICAgIGNhc2UgJzEnOlxuICAgICAgICAgICAgICAgIHdyYXBwZXIuZGF0YXNldC5fY2hlY2tTdGF0dXMgPSAnMic7XG4gICAgICAgICAgICAgICAgY2hlY2tib3guaW5kZXRlcm1pbmF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2hlY2tib3guY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNoZWNrYm94LnZhbHVlID0gMDtcbiAgICAgICAgICAgICAgICB3cmFwcGVyLmNsYXNzTGlzdC5hZGQoJ3N0YXR1cy1pbmRldGVybWluYXRlJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGluZGV0ZXJtaW5hdGUsIGdvaW5nIHVuY2hlY2tlZFxuICAgICAgICAgICAgY2FzZSAnMic6XG4gICAgICAgICAgICAgICAgd3JhcHBlci5kYXRhc2V0Ll9jaGVja1N0YXR1cyA9ICcwJztcbiAgICAgICAgICAgICAgICBjaGVja2JveC5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY2hlY2tib3guY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNoZWNrYm94LnZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgd3JhcHBlci5jbGFzc0xpc3QuYWRkKCdzdGF0dXMtdW5jaGVja2VkJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIHVuY2hlY2tlZCwgZ29pbmcgY2hlY2tlZFxuICAgICAgICAgICAgY2FzZSAnMCc6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHdyYXBwZXIuZGF0YXNldC5fY2hlY2tTdGF0dXMgPSAnMSc7XG4gICAgICAgICAgICAgICAgY2hlY2tib3guaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNoZWNrYm94LnZhbHVlID0gMTtcbiAgICAgICAgICAgICAgICB3cmFwcGVyLmNsYXNzTGlzdC5hZGQoJ3N0YXR1cy1jaGVja2VkJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbnB1dCA9IG5ldyBDdXN0b21FdmVudCgnaW5wdXQnLCB7IGRldGFpbDogeyB0YXJnZXQ6IGNoZWNrYm94IH19KTtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChpbnB1dCk7XG4gICAgfVxufSk7XG5cbihkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl1baW5kZXRlcm1pbmF0ZT1cInRydWVcIl0nKSB8fCBbXSkuZm9yRWFjaCgoaW5wdXQpID0+IHsgaW5wdXQuaW5kZXRlcm1pbmF0ZSA9IHRydWU7IH0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQUEsUUFBUSxDQUFDQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsVUFBQ0MsS0FBSyxFQUFLO0VBQzFDLElBQU1DLE9BQU8sR0FBR0QsS0FBSyxDQUFDRSxNQUFNLENBQUNDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQztFQUNqRSxJQUFJRixPQUFPLEVBQUU7SUFDVEQsS0FBSyxDQUFDSSxjQUFjLENBQUMsQ0FBQztJQUN0QixJQUFNQyxRQUFRLEdBQUdKLE9BQU8sQ0FBQ0ssYUFBYSxDQUFDLHdDQUF3QyxDQUFDO0lBQ2hGLElBQU1DLFdBQVcsR0FBR04sT0FBTyxDQUFDTyxPQUFPLENBQUNDLFlBQVk7SUFDaERSLE9BQU8sQ0FBQ1MsU0FBUyxDQUFDQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLENBQUM7SUFFdEYsUUFBUUosV0FBVztNQUNmO01BQ0EsS0FBSyxHQUFHO1FBQ0pOLE9BQU8sQ0FBQ08sT0FBTyxDQUFDQyxZQUFZLEdBQUcsR0FBRztRQUNsQ0osUUFBUSxDQUFDTyxhQUFhLEdBQUcsSUFBSTtRQUM3QlAsUUFBUSxDQUFDUSxPQUFPLEdBQUcsS0FBSztRQUN4QlIsUUFBUSxDQUFDUyxLQUFLLEdBQUcsQ0FBQztRQUNsQmIsT0FBTyxDQUFDUyxTQUFTLENBQUNLLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQztRQUM3Qzs7TUFFSjtNQUNBLEtBQUssR0FBRztRQUNKZCxPQUFPLENBQUNPLE9BQU8sQ0FBQ0MsWUFBWSxHQUFHLEdBQUc7UUFDbENKLFFBQVEsQ0FBQ08sYUFBYSxHQUFHLEtBQUs7UUFDOUJQLFFBQVEsQ0FBQ1EsT0FBTyxHQUFHLEtBQUs7UUFDeEJSLFFBQVEsQ0FBQ1MsS0FBSyxHQUFHLEVBQUU7UUFDbkJiLE9BQU8sQ0FBQ1MsU0FBUyxDQUFDSyxHQUFHLENBQUMsa0JBQWtCLENBQUM7UUFDekM7O01BRUo7TUFDQSxLQUFLLEdBQUc7TUFDUjtRQUNJZCxPQUFPLENBQUNPLE9BQU8sQ0FBQ0MsWUFBWSxHQUFHLEdBQUc7UUFDbENKLFFBQVEsQ0FBQ08sYUFBYSxHQUFHLEtBQUs7UUFDOUJQLFFBQVEsQ0FBQ1EsT0FBTyxHQUFHLElBQUk7UUFDdkJSLFFBQVEsQ0FBQ1MsS0FBSyxHQUFHLENBQUM7UUFDbEJiLE9BQU8sQ0FBQ1MsU0FBUyxDQUFDSyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7UUFDdkM7SUFDUjtJQUVBLElBQU1DLEtBQUssR0FBRyxJQUFJQyxXQUFXLENBQUMsT0FBTyxFQUFFO01BQUVDLE1BQU0sRUFBRTtRQUFFaEIsTUFBTSxFQUFFRztNQUFTO0lBQUMsQ0FBQyxDQUFDO0lBQ3ZFUCxRQUFRLENBQUNxQixhQUFhLENBQUNILEtBQUssQ0FBQztFQUNqQztBQUNKLENBQUMsQ0FBQztBQUVGLENBQUNsQixRQUFRLENBQUNzQixnQkFBZ0IsQ0FBQyw4Q0FBOEMsQ0FBQyxJQUFJLEVBQUUsRUFBRUMsT0FBTyxDQUFDLFVBQUNMLEtBQUssRUFBSztFQUFFQSxLQUFLLENBQUNKLGFBQWEsR0FBRyxJQUFJO0FBQUUsQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119\n//# sourceURL=webpack-internal:///857\n\n}");
/***/ },
/***/ 3244
(module) {
eval("{var nestRE = /^(attrs|props|on|nativeOn|class|style|hook)$/;\nmodule.exports = function mergeJSXProps(objs) {\n return objs.reduce(function (a, b) {\n var aa, bb, key, nestedKey, temp;\n for (key in b) {\n aa = a[key];\n bb = b[key];\n if (aa && nestRE.test(key)) {\n // normalize class\n if (key === 'class') {\n if (typeof aa === 'string') {\n temp = aa;\n a[key] = aa = {};\n aa[temp] = true;\n }\n if (typeof bb === 'string') {\n temp = bb;\n b[key] = bb = {};\n bb[temp] = true;\n }\n }\n if (key === 'on' || key === 'nativeOn' || key === 'hook') {\n // merge functions\n for (nestedKey in bb) {\n aa[nestedKey] = mergeFn(aa[nestedKey], bb[nestedKey]);\n }\n } else if (Array.isArray(aa)) {\n a[key] = aa.concat(bb);\n } else if (Array.isArray(bb)) {\n a[key] = [aa].concat(bb);\n } else {\n for (nestedKey in bb) {\n aa[nestedKey] = bb[nestedKey];\n }\n }\n } else {\n a[key] = b[key];\n }\n }\n return a;\n }, {});\n};\nfunction mergeFn(a, b) {\n return function () {\n a && a.apply(this, arguments);\n b && b.apply(this, arguments);\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzI0NC5qcyIsIm5hbWVzIjpbIm5lc3RSRSIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXJnZUpTWFByb3BzIiwib2JqcyIsInJlZHVjZSIsImEiLCJiIiwiYWEiLCJiYiIsImtleSIsIm5lc3RlZEtleSIsInRlbXAiLCJ0ZXN0IiwibWVyZ2VGbiIsIkFycmF5IiwiaXNBcnJheSIsImNvbmNhdCIsImFwcGx5IiwiYXJndW1lbnRzIl0sInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvYmFiZWwtaGVscGVyLXZ1ZS1qc3gtbWVyZ2UtcHJvcHMvaW5kZXguanM/OTJmYSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbmVzdFJFID0gL14oYXR0cnN8cHJvcHN8b258bmF0aXZlT258Y2xhc3N8c3R5bGV8aG9vaykkL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1lcmdlSlNYUHJvcHMgKG9ianMpIHtcbiAgcmV0dXJuIG9ianMucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgdmFyIGFhLCBiYiwga2V5LCBuZXN0ZWRLZXksIHRlbXBcbiAgICBmb3IgKGtleSBpbiBiKSB7XG4gICAgICBhYSA9IGFba2V5XVxuICAgICAgYmIgPSBiW2tleV1cbiAgICAgIGlmIChhYSAmJiBuZXN0UkUudGVzdChrZXkpKSB7XG4gICAgICAgIC8vIG5vcm1hbGl6ZSBjbGFzc1xuICAgICAgICBpZiAoa2V5ID09PSAnY2xhc3MnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBhYSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRlbXAgPSBhYVxuICAgICAgICAgICAgYVtrZXldID0gYWEgPSB7fVxuICAgICAgICAgICAgYWFbdGVtcF0gPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2YgYmIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0ZW1wID0gYmJcbiAgICAgICAgICAgIGJba2V5XSA9IGJiID0ge31cbiAgICAgICAgICAgIGJiW3RlbXBdID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnb24nIHx8IGtleSA9PT0gJ25hdGl2ZU9uJyB8fCBrZXkgPT09ICdob29rJykge1xuICAgICAgICAgIC8vIG1lcmdlIGZ1bmN0aW9uc1xuICAgICAgICAgIGZvciAobmVzdGVkS2V5IGluIGJiKSB7XG4gICAgICAgICAgICBhYVtuZXN0ZWRLZXldID0gbWVyZ2VGbihhYVtuZXN0ZWRLZXldLCBiYltuZXN0ZWRLZXldKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFhKSkge1xuICAgICAgICAgIGFba2V5XSA9IGFhLmNvbmNhdChiYilcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJiKSkge1xuICAgICAgICAgIGFba2V5XSA9IFthYV0uY29uY2F0KGJiKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAobmVzdGVkS2V5IGluIGJiKSB7XG4gICAgICAgICAgICBhYVtuZXN0ZWRLZXldID0gYmJbbmVzdGVkS2V5XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYVtrZXldID0gYltrZXldXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhXG4gIH0sIHt9KVxufVxuXG5mdW5jdGlvbiBtZXJnZUZuIChhLCBiKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgYSAmJiBhLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICBiICYmIGIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLElBQUlBLE1BQU0sR0FBRyw4Q0FBOEM7QUFFM0RDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHLFNBQVNDLGFBQWFBLENBQUVDLElBQUksRUFBRTtFQUM3QyxPQUFPQSxJQUFJLENBQUNDLE1BQU0s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\n//# sourceURL=webpack-internal:///3244\n\n}");
/***/ },
/***/ 4789
(module) {
"use strict";
eval("{\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LENBQUNHLE1BQU0sQ0FBQ0gsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztVQUNuRUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHVSxRQUFRO1FBQ3BCO01BQ0Y7TUFDQWIsSUFBSSxDQUFDb0IsSUFBSSxDQUFDakIsSUFBSSxDQUFDO0lBQ2pCO0VBQ0YsQ0FBQztFQUNELE9BQU9ILElBQUk7QUFDYixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcz8yNGZiIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzV2l0aE1hcHBpbmdUb1N0cmluZykge1xuICB2YXIgbGlzdCA9IFtdO1xuXG4gIC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcbiAgbGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgICAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBpdGVtWzVdICE9PSBcInVuZGVmaW5lZFwiO1xuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpO1xuICAgICAgfVxuICAgICAgY29udGVudCArPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9O1xuXG4gIC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG4gIGxpc3QuaSA9IGZ1bmN0aW9uIGkobW9kdWxlcywgbWVkaWEsIGRlZHVwZSwgc3VwcG9ydHMsIGxheWVyKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCB1bmRlZmluZWRdXTtcbiAgICB9XG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRoaXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIGlkID0gdGhpc1trXVswXTtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgX2sgPSAwOyBfayA8IG1vZHVsZXMubGVuZ3RoOyBfaysrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19rXSk7XG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGxheWVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbVs1XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG1lZGlhKSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdXBwb3J0cykge1xuICAgICAgICBpZiAoIWl0ZW1bNF0pIHtcbiAgICAgICAgICBpdGVtWzRdID0gXCJcIi5jb25jYXQoc3VwcG9ydHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs0XSA9IHN1cHBvcnRzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gbGlzdDtcbn07Il0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJjc3NXaXRoTWFwcGluZ1RvU3RyaW5nIiwibGlzdCIsInRvU3RyaW5nIiwibWFwIiwiaXRlbSIsImNvbnRlbnQiLCJuZWVkTGF5ZXIiLCJjb25jYXQiLCJsZW5ndGgiLCJqb2luIiwiaSIsIm1vZHVsZXMiLCJtZWRpYSIsImRlZHVwZSIsInN1cHBvcnRzIiwibGF5ZXIiLCJ1bmRlZmluZWQiLCJhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzIiwiayIsImlkIiwiX2siLCJwdXNoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4789\n\n}");
/***/ },
/***/ 79
(module) {
"use strict";
eval("{\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWJBLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHLFVBQVVDLElBQUksRUFBRTtFQUMvQixJQUFJQyxPQUFPLEdBQUdELElBQUksQ0FBQyxDQUFDLENBQUM7RUFDckIsSUFBSUUsVUFBVSxHQUFHRixJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3hCLElBQUksQ0FBQ0UsVUFBVSxFQUFFO0lBQ2YsT0FBT0QsT0FBTztFQUNoQjtFQUNBLElBQUksT0FBT0UsSUFBSSxLQUFLLFVBQVUsRUFBRTtJQUM5QixJQUFJQyxNQUFNLEdBQUdELElBQUksQ0FBQ0UsUUFBUSxDQUFDQyxrQkFBa0IsQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUNOLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRSxJQUFJTyxJQUFJLEdBQUcsOERBQThELENBQUNDLE1BQU0sQ0FBQ04sTUFBTSxDQUFDO0lBQ3hGLElBQUlPLGFBQWEsR0FBRyxNQUFNLENBQUNELE1BQU0sQ0FBQ0QsSUFBSSxFQUFFLEtBQUssQ0FBQztJQUM5QyxPQUFPLENBQUNSLE9BQU8sQ0FBQyxDQUFDUyxNQUFNLENBQUMsQ0FBQ0MsYUFBYSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQztFQUNyRDtFQUNBLE9BQU8sQ0FBQ1gsT0FBTyxDQUFDLENBQUNXLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDN0IsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzP2FmMTIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgdmFyIGNvbnRlbnQgPSBpdGVtWzFdO1xuICB2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG4gIGlmICghY3NzTWFwcGluZykge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIml0ZW0iLCJjb250ZW50IiwiY3NzTWFwcGluZyIsImJ0b2EiLCJiYXNlNjQiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkYXRhIiwiY29uY2F0Iiwic291cmNlTWFwcGluZyIsImpvaW4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///79\n\n}");
/***/ },
/***/ 6651
(module) {
"use strict";
eval("{\n\nvar has = Object.prototype.hasOwnProperty,\n prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n var listener = new EE(fn, context || emitter, once),\n evt = prefix ? prefix + event : event;\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);else emitter._events[evt] = [emitter._events[evt], listener];\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = [],\n events,\n name;\n if (this._eventsCount === 0) return names;\n for (name in events = this._events) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event,\n handlers = this._events[evt];\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event,\n listeners = this._events[evt];\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n if (!this._events[evt]) return false;\n var listeners = this._events[evt],\n len = arguments.length,\n args,\n i;\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n switch (len) {\n case 1:\n return listeners.fn.call(listeners.context), true;\n case 2:\n return listeners.fn.call(listeners.context, a1), true;\n case 3:\n return listeners.fn.call(listeners.context, a1, a2), true;\n case 4:\n return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5:\n return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6:\n return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n for (i = 1, args = new Array(len - 1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length,\n j;\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n switch (len) {\n case 1:\n listeners[i].fn.call(listeners[i].context);\n break;\n case 2:\n listeners[i].fn.call(listeners[i].context, a1);\n break;\n case 3:\n listeners[i].fn.call(listeners[i].context, a1, a2);\n break;\n case 4:\n listeners[i].fn.call(listeners[i].context, a1, a2, a3);\n break;\n default:\n if (!args) for (j = 1, args = new Array(len - 1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n var listeners = this._events[evt];\n if (listeners.fn) {\n if (listeners.fn === fn && (!once || listeners.once) && (!context || listeners.context === context)) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (listeners[i].fn !== fn || once && !listeners[i].once || context && listeners[i].context !== context) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;else clearEvent(this, evt);\n }\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif (true) {\n module.exports = EventEmitter;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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WUFBWSxDQUFDcEIsU0FBUyxDQUFDb0QsR0FBRyxHQUFHaEMsWUFBWSxDQUFDcEIsU0FBUyxDQUFDOEMsY0FBYztBQUNsRTFCLFlBQVksQ0FBQ3BCLFNBQVMsQ0FBQ1UsV0FBVyxHQUFHVSxZQUFZLENBQUNwQixTQUFTLENBQUNrRCxFQUFFOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTlCLFlBQVksQ0FBQ2lDLFFBQVEsR0FBR25ELE1BQU07O0FBRTlCO0FBQ0E7QUFDQTtBQUNBa0IsWUFBWSxDQUFDQSxZQUFZLEdBQUdBLFlBQVk7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBNkIsRUFBRTtFQUNqQ2tDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHbkMsWUFBWTtBQUMvQiIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzP2JhMTAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAsIHByZWZpeCA9ICd+JztcblxuLyoqXG4gKiBDb25zdHJ1Y3RvciB0byBjcmVhdGUgYSBzdG9yYWdlIGZvciBvdXIgYEVFYCBvYmplY3RzLlxuICogQW4gYEV2ZW50c2AgaW5zdGFuY2UgaXMgYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFdmVudHMoKSB7fVxuXG4vL1xuLy8gV2UgdHJ5IHRvIG5vdCBpbmhlcml0IGZyb20gYE9iamVjdC5wcm90b3R5cGVgLiBJbiBzb21lIGVuZ2luZXMgY3JlYXRpbmcgYW5cbi8vIGluc3RhbmNlIGluIHRoaXMgd2F5IGlzIGZhc3RlciB0aGFuIGNhbGxpbmcgYE9iamVjdC5jcmVhdGUobnVsbClgIGRpcmVjdGx5LlxuLy8gSWYgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIG5vdCBzdXBwb3J0ZWQgd2UgcHJlZml4IHRoZSBldmVudCBuYW1lcyB3aXRoIGFcbi8vIGNoYXJhY3RlciB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbHQtaW4gb2JqZWN0IHByb3BlcnRpZXMgYXJlIG5vdFxuLy8gb3ZlcnJpZGRlbiBvciB1c2VkIGFzIGFuIGF0dGFjayB2ZWN0b3IuXG4vL1xuaWYgKE9iamVjdC5jcmVhdGUpIHtcbiAgRXZlbnRzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgLy9cbiAgLy8gVGhpcyBoYWNrIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBgX19wcm90b19fYCBwcm9wZXJ0eSBpcyBzdGlsbCBpbmhlcml0ZWQgaW5cbiAgLy8gc29tZSBvbGQgYnJvd3NlcnMgbGlrZSBBbmRyb2lkIDQsIGlQaG9uZSA1LjEsIE9wZXJhIDExIGFuZCBTYWZhcmkgNS5cbiAgLy9cbiAgaWYgKCFuZXcgRXZlbnRzKCkuX19wcm90b19fKSBwcmVmaXggPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRhdGlvbiBvZiBhIHNpbmdsZSBldmVudCBsaXN0ZW5lci5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBbb25jZT1mYWxzZV0gU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBlbWl0dGVyIFJlZmVyZW5jZSB0byB0aGUgYEV2ZW50RW1pdHRlcmAgaW5zdGFuY2UuXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIFNwZWNpZnkgaWYgdGhlIGxpc3RlbmVyIGlzIGEgb25lLXRpbWUgbGlzdGVuZXIuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYWRkTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgZW1pdHRlciwgb25jZSlcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHNbZXZ0XSkgZW1pdHRlci5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lciwgZW1pdHRlci5fZXZlbnRzQ291bnQrKztcbiAgZWxzZSBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdLmZuKSBlbWl0dGVyLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IFtlbWl0dGVyLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJdO1xuXG4gIHJldHVybiBlbWl0dGVyO1xufVxuXG4vKipcbiAqIENsZWFyIGV2ZW50IGJ5IG5hbWUuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldnQgVGhlIEV2ZW50IG5hbWUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjbGVhckV2ZW50KGVtaXR0ZXIsIGV2dCkge1xuICBpZiAoLS1lbWl0dGVyLl9ldmVudHNDb3VudCA9PT0gMCkgZW1pdHRlci5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICBlbHNlIGRlbGV0ZSBlbWl0dGVyLl9ldmVudHNbZXZ0XTtcbn1cblxuLyoqXG4gKiBNaW5pbWFsIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBgRXZlbnRFbWl0dGVyYCBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG59XG5cbi8qKlxuICogUmV0dXJuIGFuIGFycmF5IGxpc3RpbmcgdGhlIGV2ZW50cyBmb3Igd2hpY2ggdGhlIGVtaXR0ZXIgaGFzIHJlZ2lzdGVyZWRcbiAqIGxpc3RlbmVycy5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHZhciBuYW1lcyA9IFtdXG4gICAgLCBldmVudHNcbiAgICAsIG5hbWU7XG5cbiAgaWYgKHRoaXMuX2V2ZW50c0NvdW50ID09PSAwKSByZXR1cm4gbmFtZXM7XG5cbiAgZm9yIChuYW1lIGluIChldmVudHMgPSB0aGlzLl9ldmVudHMpKSB7XG4gICAgaWYgKGhhcy5jYWxsKGV2ZW50cywgbmFtZSkpIG5hbWVzLnB1c2gocHJlZml4ID8gbmFtZS5zbGljZSgxKSA6IG5hbWUpO1xuICB9XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICByZXR1cm4gbmFtZXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZXZlbnRzKSk7XG4gIH1cblxuICByZXR1cm4gbmFtZXM7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0FycmF5fSBUaGUgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50XG4gICAgLCBoYW5kbGVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghaGFuZGxlcnMpIHJldHVybiBbXTtcbiAgaWYgKGhhbmRsZXJzLmZuKSByZXR1cm4gW2hhbmRsZXJzLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGhhbmRsZXJzLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGhhbmRsZXJzW2ldLmZuO1xuICB9XG5cbiAgcmV0dXJuIGVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsaXN0ZW5lcnMgbGlzdGVuaW5nIHRvIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWJlciBvZiBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uIGxpc3RlbmVyQ291bnQoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghbGlzdGVuZXJzKSByZXR1cm4gMDtcbiAgaWYgKGxpc3RlbmVycy5mbikgcmV0dXJuIDE7XG4gIHJldHVybiBsaXN0ZW5lcnMubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBDYWxscyBlYWNoIG9mIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBldmVudCBoYWQgbGlzdGVuZXJzLCBlbHNlIGBmYWxzZWAuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQsIGExLCBhMiwgYTMsIGE0LCBhNSkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVycy5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCksIHRydWU7XG4gICAgICBjYXNlIDI6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEpLCB0cnVlO1xuICAgICAgY2FzZSAzOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiksIHRydWU7XG4gICAgICBjYXNlIDQ6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMyksIHRydWU7XG4gICAgICBjYXNlIDU6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQpLCB0cnVlO1xuICAgICAgY2FzZSA2OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0LCBhNSksIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgIH1cblxuICAgIGxpc3RlbmVycy5mbi5hcHBseShsaXN0ZW5lcnMuY29udGV4dCwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGhcbiAgICAgICwgajtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGxpc3RlbmVyc1tpXS5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnNbaV0uZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICAgIGNhc2UgMTogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQpOyBicmVhaztcbiAgICAgICAgY2FzZSAyOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEpOyBicmVhaztcbiAgICAgICAgY2FzZSAzOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgNDogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMiwgYTMpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG9uZS10aW1lIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCB0cnVlKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBsaXN0ZW5lcnMgb2YgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgbWF0Y2ggdGhpcyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgaGF2ZSB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25lLXRpbWUgbGlzdGVuZXJzLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiB0aGlzO1xuICBpZiAoIWZuKSB7XG4gICAgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAoXG4gICAgICBsaXN0ZW5lcnMuZm4gPT09IGZuICYmXG4gICAgICAoIW9uY2UgfHwgbGlzdGVuZXJzLm9uY2UpICYmXG4gICAgICAoIWNvbnRleHQgfHwgbGlzdGVuZXJzLmNvbnRleHQgPT09IGNvbnRleHQpXG4gICAgKSB7XG4gICAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwLCBldmVudHMgPSBbXSwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm4gfHxcbiAgICAgICAgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKSB8fFxuICAgICAgICAoY29udGV4dCAmJiBsaXN0ZW5lcnNbaV0uY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vXG4gICAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAgIC8vXG4gICAgaWYgKGV2ZW50cy5sZW5ndGgpIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgICBlbHNlIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycywgb3IgdGhvc2Ugb2YgdGhlIHNwZWNpZmllZCBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gW2V2ZW50XSBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dDtcblxuICBpZiAoZXZlbnQpIHtcbiAgICBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuICAgIGlmICh0aGlzLl9ldmVudHNbZXZ0XSkgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gQWxsb3cgYEV2ZW50RW1pdHRlcmAgdG8gYmUgaW1wb3J0ZWQgYXMgbW9kdWxlIG5hbWVzcGFjZS5cbi8vXG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIl0sIm5hbWVzIjpbImhhcyIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicHJlZml4IiwiRXZlbnRzIiwiY3JlYXRlIiwiX19wcm90b19fIiwiRUUiLCJmbiIsImNvbnRleHQiLCJvbmNlIiwiYWRkTGlzdGVuZXIiLCJlbWl0dGVyIiwiZXZlbnQiLCJUeXBlRXJyb3IiLCJsaXN0ZW5lciIsImV2dCIsIl9ldmVudHMiLCJfZXZlbnRzQ291bnQiLCJwdXNoIiwiY2xlYXJFdmVudCIsIkV2ZW50RW1pdHRlciIsImV2ZW50TmFtZXMiLCJuYW1lcyIsImV2ZW50cyIsIm5hbWUiLCJjYWxsIiwic2xpY2UiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJjb25jYXQiLCJsaXN0ZW5lcnMiLCJoYW5kbGVycyIsImkiLCJsIiwibGVuZ3RoIiwiZWUiLCJBcnJheSIsImxpc3RlbmVyQ291bnQiLCJlbWl0IiwiYTEiLCJhMiIsImEzIiwiYTQiLCJhNSIsImxlbiIsImFyZ3VtZW50cyIsImFyZ3MiLCJyZW1vdmVMaXN0ZW5lciIsInVuZGVmaW5lZCIsImFwcGx5IiwiaiIsIm9uIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwib2ZmIiwicHJlZml4ZWQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6651\n\n}");
/***/ },
/***/ 1388
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var hashClear = __webpack_require__(2503),\n hashDelete = __webpack_require__(2211),\n hashGet = __webpack_require__(5186),\n hashHas = __webpack_require__(8502),\n hashSet = __webpack_require__(4158);\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\nmodule.exports = Hash;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM4OC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxTQUFTLEdBQUdDLG1CQUFPLENBQUMsSUFBYyxDQUFDO0VBQ25DQyxVQUFVLEdBQUdELG1CQUFPLENBQUMsSUFBZSxDQUFDO0VBQ3JDRSxPQUFPLEdBQUdGLG1CQUFPLENBQUMsSUFBWSxDQUFDO0VBQy9CRyxPQUFPLEdBQUdILG1CQUFPLENBQUMsSUFBWSxDQUFDO0VBQy9CSSxPQUFPLEdBQUdKLG1CQUFPLENBQUMsSUFBWSxDQUFDOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNLLElBQUlBLENBQUNDLE9BQU8sRUFBRTtFQUNyQixJQUFJQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ1ZDLE1BQU0sR0FBR0YsT0FBTyxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUdBLE9BQU8sQ0FBQ0UsTUFBTTtFQUVqRCxJQUFJLENBQUNDLEtBQUssQ0FBQyxDQUFDO0VBQ1osT0FBTyxFQUFFRixLQUFLLEdBQUdDLE1BQU0sRUFBRTtJQUN2QixJQUFJRSxLQUFLLEdBQUdKLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDO0lBQzFCLElBQUksQ0FBQ0ksR0FBRyxDQUFDRCxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUVBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QjtBQUNGOztBQUVBO0FBQ0FMLElBQUksQ0FBQ08sU0FBUyxDQUFDSCxLQUFLLEdBQUdWLFNBQVM7QUFDaENNLElBQUksQ0FBQ08sU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHWCxVQUFVO0FBQ3JDSSxJQUFJLENBQUNPLFNBQVMsQ0FBQ0MsR0FBRyxHQUFHWCxPQUFPO0FBQzVCRyxJQUFJLENBQUNPLFNBQVMsQ0FBQ0UsR0FBRyxHQUFHWCxPQUFPO0FBQzVCRSxJQUFJLENBQUNPLFNBQVMsQ0FBQ0QsR0FBRyxHQUFHUCxPQUFPO0FBRTVCVyxNQUFNLENBQUNDLE9BQU8sR0FBR1gsSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanM/ZTI0YiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaENsZWFyID0gcmVxdWlyZSgnLi9faGFzaENsZWFyJyksXG4gICAgaGFzaERlbGV0ZSA9IHJlcXVpcmUoJy4vX2hhc2hEZWxldGUnKSxcbiAgICBoYXNoR2V0ID0gcmVxdWlyZSgnLi9faGFzaEdldCcpLFxuICAgIGhhc2hIYXMgPSByZXF1aXJlKCcuL19oYXNoSGFzJyksXG4gICAgaGFzaFNldCA9IHJlcXVpcmUoJy4vX2hhc2hTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjtcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IGhhc2hEZWxldGU7XG5IYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhcztcbkhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaDtcbiJdLCJuYW1lcyI6WyJoYXNoQ2xlYXIiLCJyZXF1aXJlIiwiaGFzaERlbGV0ZSIsImhhc2hHZXQiLCJoYXNoSGFzIiwiaGFzaFNldCIsIkhhc2giLCJlbnRyaWVzIiwiaW5kZXgiLCJsZW5ndGgiLCJjbGVhciIsImVudHJ5Iiwic2V0IiwicHJvdG90eXBlIiwiZ2V0IiwiaGFzIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1388\n\n}");
/***/ },
/***/ 8448
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var listCacheClear = __webpack_require__(2403),\n listCacheDelete = __webpack_require__(5447),\n listCacheGet = __webpack_require__(470),\n listCacheHas = __webpack_require__(6674),\n listCacheSet = __webpack_require__(9962);\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\nmodule.exports = ListCache;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQ0OC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxjQUFjLEdBQUdDLG1CQUFPLENBQUMsSUFBbUIsQ0FBQztFQUM3Q0MsZUFBZSxHQUFHRCxtQkFBTyxDQUFDLElBQW9CLENBQUM7RUFDL0NFLFlBQVksR0FBR0YsbUJBQU8sQ0FBQyxHQUFpQixDQUFDO0VBQ3pDRyxZQUFZLEdBQUdILG1CQUFPLENBQUMsSUFBaUIsQ0FBQztFQUN6Q0ksWUFBWSxHQUFHSixtQkFBTyxDQUFDLElBQWlCLENBQUM7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0ssU0FBU0EsQ0FBQ0MsT0FBTyxFQUFFO0VBQzFCLElBQUlDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDVkMsTUFBTSxHQUFHRixPQUFPLElBQUksSUFBSSxHQUFHLENBQUMsR0FBR0EsT0FBTyxDQUFDRSxNQUFNO0VBRWpELElBQUksQ0FBQ0MsS0FBSyxDQUFDLENBQUM7RUFDWixPQUFPLEVBQUVGLEtBQUssR0FBR0MsTUFBTSxFQUFFO0lBQ3ZCLElBQUlFLEtBQUssR0FBR0osT0FBTyxDQUFDQyxLQUFLLENBQUM7SUFDMUIsSUFBSSxDQUFDSSxHQUFHLENBQUNELEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRUEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCO0FBQ0Y7O0FBRUE7QUFDQUwsU0FBUyxDQUFDTyxTQUFTLENBQUNILEtBQUssR0FBR1YsY0FBYztBQUMxQ00sU0FBUyxDQUFDTyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUdYLGVBQWU7QUFDL0NJLFNBQVMsQ0FBQ08sU0FBUyxDQUFDQyxHQUFHLEdBQUdYLFlBQVk7QUFDdENHLFNBQVMsQ0FBQ08sU0FBUyxDQUFDRSxHQUFHLEdBQUdYLFlBQVk7QUFDdENFLFNBQVMsQ0FBQ08sU0FBUyxDQUFDRCxHQUFHLEdBQUdQLFlBQVk7QUFFdENXLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHWCxTQUFTIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTGlzdENhY2hlLmpzPzVlMmUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiJdLCJuYW1lcyI6WyJsaXN0Q2FjaGVDbGVhciIsInJlcXVpcmUiLCJsaXN0Q2FjaGVEZWxldGUiLCJsaXN0Q2FjaGVHZXQiLCJsaXN0Q2FjaGVIYXMiLCJsaXN0Q2FjaGVTZXQiLCJMaXN0Q2FjaGUiLCJlbnRyaWVzIiwiaW5kZXgiLCJsZW5ndGgiLCJjbGVhciIsImVudHJ5Iiwic2V0IiwicHJvdG90eXBlIiwiZ2V0IiwiaGFzIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8448\n\n}");
/***/ },
/***/ 588
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var getNative = __webpack_require__(8345),\n root = __webpack_require__(2912);\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\nmodule.exports = Map;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTg4LmpzIiwibWFwcGluZ3MiOiJBQUFBLElBQUlBLFNBQVMsR0FBR0MsbUJBQU8sQ0FBQyxJQUFjLENBQUM7RUFDbkNDLElBQUksR0FBR0QsbUJBQU8sQ0FBQyxJQUFTLENBQUM7O0FBRTdCO0FBQ0EsSUFBSUUsR0FBRyxHQUFHSCxTQUFTLENBQUNFLElBQUksRUFBRSxLQUFLLENBQUM7QUFFaENFLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHRixHQUFHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzPzc5YmMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiJdLCJuYW1lcyI6WyJnZXROYXRpdmUiLCJyZXF1aXJlIiwicm9vdCIsIk1hcCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///588\n\n}");
/***/ },
/***/ 3752
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var mapCacheClear = __webpack_require__(8331),\n mapCacheDelete = __webpack_require__(1503),\n mapCacheGet = __webpack_require__(9902),\n mapCacheHas = __webpack_require__(1322),\n mapCacheSet = __webpack_require__(7506);\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\nmodule.exports = MapCache;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1Mi5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxhQUFhLEdBQUdDLG1CQUFPLENBQUMsSUFBa0IsQ0FBQztFQUMzQ0MsY0FBYyxHQUFHRCxtQkFBTyxDQUFDLElBQW1CLENBQUM7RUFDN0NFLFdBQVcsR0FBR0YsbUJBQU8sQ0FBQyxJQUFnQixDQUFDO0VBQ3ZDRyxXQUFXLEdBQUdILG1CQUFPLENBQUMsSUFBZ0IsQ0FBQztFQUN2Q0ksV0FBVyxHQUFHSixtQkFBTyxDQUFDLElBQWdCLENBQUM7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0ssUUFBUUEsQ0FBQ0MsT0FBTyxFQUFFO0VBQ3pCLElBQUlDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDVkMsTUFBTSxHQUFHRixPQUFPLElBQUksSUFBSSxHQUFHLENBQUMsR0FBR0EsT0FBTyxDQUFDRSxNQUFNO0VBRWpELElBQUksQ0FBQ0MsS0FBSyxDQUFDLENBQUM7RUFDWixPQUFPLEVBQUVGLEtBQUssR0FBR0MsTUFBTSxFQUFFO0lBQ3ZCLElBQUlFLEtBQUssR0FBR0osT0FBTyxDQUFDQyxLQUFLLENBQUM7SUFDMUIsSUFBSSxDQUFDSSxHQUFHLENBQUNELEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRUEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCO0FBQ0Y7O0FBRUE7QUFDQUwsUUFBUSxDQUFDTyxTQUFTLENBQUNILEtBQUssR0FBR1YsYUFBYTtBQUN4Q00sUUFBUSxDQUFDTyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUdYLGNBQWM7QUFDN0NJLFFBQVEsQ0FBQ08sU0FBUyxDQUFDQyxHQUFHLEdBQUdYLFdBQVc7QUFDcENHLFFBQVEsQ0FBQ08sU0FBUyxDQUFDRSxHQUFHLEdBQUdYLFdBQVc7QUFDcENFLFFBQVEsQ0FBQ08sU0FBUyxDQUFDRCxHQUFHLEdBQUdQLFdBQVc7QUFFcENXLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHWCxRQUFRIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanM/N2I4MyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIl0sIm5hbWVzIjpbIm1hcENhY2hlQ2xlYXIiLCJyZXF1aXJlIiwibWFwQ2FjaGVEZWxldGUiLCJtYXBDYWNoZUdldCIsIm1hcENhY2hlSGFzIiwibWFwQ2FjaGVTZXQiLCJNYXBDYWNoZSIsImVudHJpZXMiLCJpbmRleCIsImxlbmd0aCIsImNsZWFyIiwiZW50cnkiLCJzZXQiLCJwcm90b3R5cGUiLCJnZXQiLCJoYXMiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3752\n\n}");
/***/ },
/***/ 8444
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var root = __webpack_require__(2912);\n\n/** Built-in value references. */\nvar _Symbol = root.Symbol;\nmodule.exports = _Symbol;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQ0NC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxJQUFJLEdBQUdDLG1CQUFPLENBQUMsSUFBUyxDQUFDOztBQUU3QjtBQUNBLElBQUlDLE9BQU0sR0FBR0YsSUFBSSxDQUFDRSxNQUFNO0FBRXhCQyxNQUFNLENBQUNDLE9BQU8sR0FBR0YsT0FBTSIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N5bWJvbC5qcz85ZTY5Il0sInNvdXJjZXNDb250ZW50IjpbInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iXSwibmFtZXMiOlsicm9vdCIsInJlcXVpcmUiLCJTeW1ib2wiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8444\n\n}");
/***/ },
/***/ 9293
(module) {
eval("{/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\nmodule.exports = arrayMap;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTI5My5qcyIsIm5hbWVzIjpbImFycmF5TWFwIiwiYXJyYXkiLCJpdGVyYXRlZSIsImluZGV4IiwibGVuZ3RoIiwicmVzdWx0IiwiQXJyYXkiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheU1hcC5qcz83OTQ4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlNYXA7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFFBQVFBLENBQUNDLEtBQUssRUFBRUMsUUFBUSxFQUFFO0VBQ2pDLElBQUlDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDVkMsTUFBTSxHQUFHSCxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsR0FBR0EsS0FBSyxDQUFDRyxNQUFNO0lBQ3pDQyxNQUFNLEdBQUdDLEtBQUssQ0FBQ0YsTUFBTSxDQUFDO0VBRTFCLE9BQU8sRUFBRUQsS0FBSyxHQUFHQyxNQUFNLEVBQUU7SUFDdkJDLE1BQU0sQ0FBQ0YsS0FBSyxDQUFDLEdBQUdELFFBQVEsQ0FBQ0QsS0FBSyxDQUFDRSxLQUFLLENBQUMsRUFBRUEsS0FBSyxFQUFFRixLQUFLLENBQUM7RUFDdEQ7RUFDQSxPQUFPSSxNQUFNO0FBQ2Y7QUFFQUUsTUFBTSxDQUFDQyxPQUFPLEdBQUdSLFFBQVEiLCJpZ25vcmVMaXN0IjpbXX0=\n//# sourceURL=webpack-internal:///9293\n\n}");
/***/ },
/***/ 7436
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var baseAssignValue = __webpack_require__(8119),\n eq = __webpack_require__(547);\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || value === undefined && !(key in object)) {\n baseAssignValue(object, key, value);\n }\n}\nmodule.exports = assignValue;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxlQUFlLEdBQUdDLG1CQUFPLENBQUMsSUFBb0IsQ0FBQztFQUMvQ0MsRUFBRSxHQUFHRCxtQkFBTyxDQUFDLEdBQU0sQ0FBQzs7QUFFeEI7QUFDQSxJQUFJRSxXQUFXLEdBQUdDLE1BQU0sQ0FBQ0MsU0FBUzs7QUFFbEM7QUFDQSxJQUFJQyxjQUFjLEdBQUdILFdBQVcsQ0FBQ0csY0FBYzs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxXQUFXQSxDQUFDQyxNQUFNLEVBQUVDLEdBQUcsRUFBRUMsS0FBSyxFQUFFO0VBQ3ZDLElBQUlDLFFBQVEsR0FBR0gsTUFBTSxDQUFDQyxHQUFHLENBQUM7RUFDMUIsSUFBSSxFQUFFSCxjQUFjLENBQUNNLElBQUksQ0FBQ0osTUFBTSxFQUFFQyxHQUFHLENBQUMsSUFBSVAsRUFBRSxDQUFDUyxRQUFRLEVBQUVELEtBQUssQ0FBQyxDQUFDLElBQ3pEQSxLQUFLLEtBQUtHLFNBQVMsSUFBSSxFQUFFSixHQUFHLElBQUlELE1BQU0sQ0FBRSxFQUFFO0lBQzdDUixlQUFlLENBQUNRLE1BQU0sRUFBRUMsR0FBRyxFQUFFQyxLQUFLLENBQUM7RUFDckM7QUFDRjtBQUVBSSxNQUFNLENBQUNDLE9BQU8sR0FBR1IsV0FBVyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnblZhbHVlLmpzPzMyYjMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnblZhbHVlO1xuIl0sIm5hbWVzIjpbImJhc2VBc3NpZ25WYWx1ZSIsInJlcXVpcmUiLCJlcSIsIm9iamVjdFByb3RvIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJhc3NpZ25WYWx1ZSIsIm9iamVjdCIsImtleSIsInZhbHVlIiwib2JqVmFsdWUiLCJjYWxsIiwidW5kZWZpbmVkIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7436\n\n}");
/***/ },
/***/ 7412
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var eq = __webpack_require__(547);\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\nmodule.exports = assocIndexOf;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQxMi5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxFQUFFLEdBQUdDLG1CQUFPLENBQUMsR0FBTSxDQUFDOztBQUV4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsWUFBWUEsQ0FBQ0MsS0FBSyxFQUFFQyxHQUFHLEVBQUU7RUFDaEMsSUFBSUMsTUFBTSxHQUFHRixLQUFLLENBQUNFLE1BQU07RUFDekIsT0FBT0EsTUFBTSxFQUFFLEVBQUU7SUFDZixJQUFJTCxFQUFFLENBQUNHLEtBQUssQ0FBQ0UsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVELEdBQUcsQ0FBQyxFQUFFO01BQzdCLE9BQU9DLE1BQU07SUFDZjtFQUNGO0VBQ0EsT0FBTyxDQUFDLENBQUM7QUFDWDtBQUVBQyxNQUFNLENBQUNDLE9BQU8sR0FBR0wsWUFBWSIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcz9jYjVhIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iXSwibmFtZXMiOlsiZXEiLCJyZXF1aXJlIiwiYXNzb2NJbmRleE9mIiwiYXJyYXkiLCJrZXkiLCJsZW5ndGgiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7412\n\n}");
/***/ },
/***/ 8119
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var defineProperty = __webpack_require__(926);\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\nmodule.exports = baseAssignValue;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExOS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxjQUFjLEdBQUdDLG1CQUFPLENBQUMsR0FBbUIsQ0FBQzs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsZUFBZUEsQ0FBQ0MsTUFBTSxFQUFFQyxHQUFHLEVBQUVDLEtBQUssRUFBRTtFQUMzQyxJQUFJRCxHQUFHLElBQUksV0FBVyxJQUFJSixjQUFjLEVBQUU7SUFDeENBLGNBQWMsQ0FBQ0csTUFBTSxFQUFFQyxHQUFHLEVBQUU7TUFDMUIsY0FBYyxFQUFFLElBQUk7TUFDcEIsWUFBWSxFQUFFLElBQUk7TUFDbEIsT0FBTyxFQUFFQyxLQUFLO01BQ2QsVUFBVSxFQUFFO0lBQ2QsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxNQUFNO0lBQ0xGLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDLEdBQUdDLEtBQUs7RUFDckI7QUFDRjtBQUVBQyxNQUFNLENBQUNDLE9BQU8sR0FBR0wsZUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25WYWx1ZS5qcz84NzJhIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnblZhbHVlO1xuIl0sIm5hbWVzIjpbImRlZmluZVByb3BlcnR5IiwicmVxdWlyZSIsImJhc2VBc3NpZ25WYWx1ZSIsIm9iamVjdCIsImtleSIsInZhbHVlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8119\n\n}");
/***/ },
/***/ 1009
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var castPath = __webpack_require__(7364),\n toKey = __webpack_require__(9690);\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n var index = 0,\n length = path.length;\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return index && index == length ? object : undefined;\n}\nmodule.exports = baseGet;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTAwOS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxRQUFRLEdBQUdDLG1CQUFPLENBQUMsSUFBYSxDQUFDO0VBQ2pDQyxLQUFLLEdBQUdELG1CQUFPLENBQUMsSUFBVSxDQUFDOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0UsT0FBT0EsQ0FBQ0MsTUFBTSxFQUFFQyxJQUFJLEVBQUU7RUFDN0JBLElBQUksR0FBR0wsUUFBUSxDQUFDSyxJQUFJLEVBQUVELE1BQU0sQ0FBQztFQUU3QixJQUFJRSxLQUFLLEdBQUcsQ0FBQztJQUNUQyxNQUFNLEdBQUdGLElBQUksQ0FBQ0UsTUFBTTtFQUV4QixPQUFPSCxNQUFNLElBQUksSUFBSSxJQUFJRSxLQUFLLEdBQUdDLE1BQU0sRUFBRTtJQUN2Q0gsTUFBTSxHQUFHQSxNQUFNLENBQUNGLEtBQUssQ0FBQ0csSUFBSSxDQUFDQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDdkM7RUFDQSxPQUFRQSxLQUFLLElBQUlBLEtBQUssSUFBSUMsTUFBTSxHQUFJSCxNQUFNLEdBQUdJLFNBQVM7QUFDeEQ7QUFFQUMsTUFBTSxDQUFDQyxPQUFPLEdBQUdQLE9BQU8iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0LmpzPzY1NmIiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAwLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldDtcbiJdLCJuYW1lcyI6WyJjYXN0UGF0aCIsInJlcXVpcmUiLCJ0b0tleSIsImJhc2VHZXQiLCJvYmplY3QiLCJwYXRoIiwiaW5kZXgiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1009\n\n}");
/***/ },
/***/ 8409
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var _Symbol = __webpack_require__(8444),\n getRawTag = __webpack_require__(5504),\n objectToString = __webpack_require__(6919);\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = _Symbol ? _Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);\n}\nmodule.exports = baseGetTag;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwOS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxPQUFNLEdBQUdDLG1CQUFPLENBQUMsSUFBVyxDQUFDO0VBQzdCQyxTQUFTLEdBQUdELG1CQUFPLENBQUMsSUFBYyxDQUFDO0VBQ25DRSxjQUFjLEdBQUdGLG1CQUFPLENBQUMsSUFBbUIsQ0FBQzs7QUFFakQ7QUFDQSxJQUFJRyxPQUFPLEdBQUcsZUFBZTtFQUN6QkMsWUFBWSxHQUFHLG9CQUFvQjs7QUFFdkM7QUFDQSxJQUFJQyxjQUFjLEdBQUdOLE9BQU0sR0FBR0EsT0FBTSxDQUFDTyxXQUFXLEdBQUdDLFNBQVM7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsVUFBVUEsQ0FBQ0MsS0FBSyxFQUFFO0VBQ3pCLElBQUlBLEtBQUssSUFBSSxJQUFJLEVBQUU7SUFDakIsT0FBT0EsS0FBSyxLQUFLRixTQUFTLEdBQUdILFlBQVksR0FBR0QsT0FBTztFQUNyRDtFQUNBLE9BQVFFLGNBQWMsSUFBSUEsY0FBYyxJQUFJSyxNQUFNLENBQUNELEtBQUssQ0FBQyxHQUNyRFIsU0FBUyxDQUFDUSxLQUFLLENBQUMsR0FDaEJQLGNBQWMsQ0FBQ08sS0FBSyxDQUFDO0FBQzNCO0FBRUFFLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHSixVQUFVIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldFRhZy5qcz8zNzI5Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iXSwibmFtZXMiOlsiU3ltYm9sIiwicmVxdWlyZSIsImdldFJhd1RhZyIsIm9iamVjdFRvU3RyaW5nIiwibnVsbFRhZyIsInVuZGVmaW5lZFRhZyIsInN5bVRvU3RyaW5nVGFnIiwidG9TdHJpbmdUYWciLCJ1bmRlZmluZWQiLCJiYXNlR2V0VGFnIiwidmFsdWUiLCJPYmplY3QiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8409\n\n}");
/***/ },
/***/ 4434
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var isFunction = __webpack_require__(7333),\n isMasked = __webpack_require__(2377),\n isObject = __webpack_require__(3926),\n toSource = __webpack_require__(7180);\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$');\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\nmodule.exports = baseIsNative;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQzNC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxVQUFVLEdBQUdDLG1CQUFPLENBQUMsSUFBYyxDQUFDO0VBQ3BDQyxRQUFRLEdBQUdELG1CQUFPLENBQUMsSUFBYSxDQUFDO0VBQ2pDRSxRQUFRLEdBQUdGLG1CQUFPLENBQUMsSUFBWSxDQUFDO0VBQ2hDRyxRQUFRLEdBQUdILG1CQUFPLENBQUMsSUFBYSxDQUFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlJLFlBQVksR0FBRyxxQkFBcUI7O0FBRXhDO0FBQ0EsSUFBSUMsWUFBWSxHQUFHLDZCQUE2Qjs7QUFFaEQ7QUFDQSxJQUFJQyxTQUFTLEdBQUdDLFFBQVEsQ0FBQ0MsU0FBUztFQUM5QkMsV0FBVyxHQUFHQyxNQUFNLENBQUNGLFNBQVM7O0FBRWxDO0FBQ0EsSUFBSUcsWUFBWSxHQUFHTCxTQUFTLENBQUNNLFFBQVE7O0FBRXJDO0FBQ0EsSUFBSUMsY0FBYyxHQUFHSixXQUFXLENBQUNJLGNBQWM7O0FBRS9DO0FBQ0EsSUFBSUMsVUFBVSxHQUFHQyxNQUFNLENBQUMsR0FBRyxHQUN6QkosWUFBWSxDQUFDSyxJQUFJLENBQUNILGNBQWMsQ0FBQyxDQUFDSSxPQUFPLENBQUNiLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FDOURhLE9BQU8sQ0FBQyx3REFBd0QsRUFBRSxPQUFPLENBQUMsR0FBRyxHQUNoRixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxZQUFZQSxDQUFDQyxLQUFLLEVBQUU7RUFDM0IsSUFBSSxDQUFDakIsUUFBUSxDQUFDaUIsS0FBSyxDQUFDLElBQUlsQixRQUFRLENBQUNrQixLQUFLLENBQUMsRUFBRTtJQUN2QyxPQUFPLEtBQUs7RUFDZDtFQUNBLElBQUlDLE9BQU8sR0FBR3JCLFVBQVUsQ0FBQ29CLEtBQUssQ0FBQyxHQUFHTCxVQUFVLEdBQUdULFlBQVk7RUFDM0QsT0FBT2UsT0FBTyxDQUFDQyxJQUFJLENBQUNsQixRQUFRLENBQUNnQixLQUFLLENBQUMsQ0FBQztBQUN0QztBQUVBRyxNQUFNLENBQUNDLE9BQU8sR0FBR0wsWUFBWSIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc05hdGl2ZS5qcz8zNGFjIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNNYXNrZWQgPSByZXF1aXJlKCcuL19pc01hc2tlZCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYXRpdmU7XG4iXSwibmFtZXMiOlsiaXNGdW5jdGlvbiIsInJlcXVpcmUiLCJpc01hc2tlZCIsImlzT2JqZWN0IiwidG9Tb3VyY2UiLCJyZVJlZ0V4cENoYXIiLCJyZUlzSG9zdEN0b3IiLCJmdW5jUHJvdG8iLCJGdW5jdGlvbiIsInByb3RvdHlwZSIsIm9iamVjdFByb3RvIiwiT2JqZWN0IiwiZnVuY1RvU3RyaW5nIiwidG9TdHJpbmciLCJoYXNPd25Qcm9wZXJ0eSIsInJlSXNOYXRpdmUiLCJSZWdFeHAiLCJjYWxsIiwicmVwbGFjZSIsImJhc2VJc05hdGl2ZSIsInZhbHVlIiwicGF0dGVybiIsInRlc3QiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4434\n\n}");
/***/ },
/***/ 6549
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var assignValue = __webpack_require__(7436),\n castPath = __webpack_require__(7364),\n isIndex = __webpack_require__(6450),\n isObject = __webpack_require__(3926),\n toKey = __webpack_require__(9690);\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue) ? objValue : isIndex(path[index + 1]) ? [] : {};\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\nmodule.exports = baseSet;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjU0OS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxXQUFXLEdBQUdDLG1CQUFPLENBQUMsSUFBZ0IsQ0FBQztFQUN2Q0MsUUFBUSxHQUFHRCxtQkFBTyxDQUFDLElBQWEsQ0FBQztFQUNqQ0UsT0FBTyxHQUFHRixtQkFBTyxDQUFDLElBQVksQ0FBQztFQUMvQkcsUUFBUSxHQUFHSCxtQkFBTyxDQUFDLElBQVksQ0FBQztFQUNoQ0ksS0FBSyxHQUFHSixtQkFBTyxDQUFDLElBQVUsQ0FBQzs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTSyxPQUFPQSxDQUFDQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFFQyxVQUFVLEVBQUU7RUFDaEQsSUFBSSxDQUFDTixRQUFRLENBQUNHLE1BQU0sQ0FBQyxFQUFFO0lBQ3JCLE9BQU9BLE1BQU07RUFDZjtFQUNBQyxJQUFJLEdBQUdOLFFBQVEsQ0FBQ00sSUFBSSxFQUFFRCxNQUFNLENBQUM7RUFFN0IsSUFBSUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNWQyxNQUFNLEdBQUdKLElBQUksQ0FBQ0ksTUFBTTtJQUNwQkMsU0FBUyxHQUFHRCxNQUFNLEdBQUcsQ0FBQztJQUN0QkUsTUFBTSxHQUFHUCxNQUFNO0VBRW5CLE9BQU9PLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRUgsS0FBSyxHQUFHQyxNQUFNLEVBQUU7SUFDekMsSUFBSUcsR0FBRyxHQUFHVixLQUFLLENBQUNHLElBQUksQ0FBQ0csS0FBSyxDQUFDLENBQUM7TUFDeEJLLFFBQVEsR0FBR1AsS0FBSztJQUVwQixJQUFJTSxHQUFHLEtBQUssV0FBVyxJQUFJQSxHQUFHLEtBQUssYUFBYSxJQUFJQSxHQUFHLEtBQUssV0FBVyxFQUFFO01BQ3ZFLE9BQU9SLE1BQU07SUFDZjtJQUVBLElBQUlJLEtBQUssSUFBSUUsU0FBUyxFQUFFO01BQ3RCLElBQUlJLFFBQVEsR0FBR0gsTUFBTSxDQUFDQyxHQUFHLENBQUM7TUFDMUJDLFFBQVEsR0FBR04sVUFBVSxHQUFHQSxVQUFVLENBQUNPLFFBQVEsRUFBRUYsR0FBRyxFQUFFRCxNQUFNLENBQUMsR0FBR0ksU0FBUztNQUNyRSxJQUFJRixRQUFRLEtBQUtFLFNBQVMsRUFBRTtRQUMxQkYsUUFBUSxHQUFHWixRQUFRLENBQUNhLFFBQVEsQ0FBQyxHQUN6QkEsUUFBUSxHQUNQZCxPQUFPLENBQUNLLElBQUksQ0FBQ0csS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBRTtNQUMxQztJQUNGO0lBQ0FYLFdBQVcsQ0FBQ2MsTUFBTSxFQUFFQyxHQUFHLEVBQUVDLFFBQVEsQ0FBQztJQUNsQ0YsTUFBTSxHQUFHQSxNQUFNLENBQUNDLEdBQUcsQ0FBQztFQUN0QjtFQUNBLE9BQU9SLE1BQU07QUFDZjtBQUVBWSxNQUFNLENBQUNDLE9BQU8sR0FBR2QsT0FBTyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXQuanM/MTU5YSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIHBhdGggY3JlYXRpb24uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMSxcbiAgICAgIG5lc3RlZCA9IG9iamVjdDtcblxuICB3aGlsZSAobmVzdGVkICE9IG51bGwgJiYgKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSksXG4gICAgICAgIG5ld1ZhbHVlID0gdmFsdWU7XG5cbiAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJyB8fCBrZXkgPT09ICdjb25zdHJ1Y3RvcicgfHwga2V5ID09PSAncHJvdG90eXBlJykge1xuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggIT0gbGFzdEluZGV4KSB7XG4gICAgICB2YXIgb2JqVmFsdWUgPSBuZXN0ZWRba2V5XTtcbiAgICAgIG5ld1ZhbHVlID0gY3VzdG9taXplciA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIGtleSwgbmVzdGVkKSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaXNPYmplY3Qob2JqVmFsdWUpXG4gICAgICAgICAgPyBvYmpWYWx1ZVxuICAgICAgICAgIDogKGlzSW5kZXgocGF0aFtpbmRleCArIDFdKSA/IFtdIDoge30pO1xuICAgICAgfVxuICAgIH1cbiAgICBhc3NpZ25WYWx1ZShuZXN0ZWQsIGtleSwgbmV3VmFsdWUpO1xuICAgIG5lc3RlZCA9IG5lc3RlZFtrZXldO1xuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldDtcbiJdLCJuYW1lcyI6WyJhc3NpZ25WYWx1ZSIsInJlcXVpcmUiLCJjYXN0UGF0aCIsImlzSW5kZXgiLCJpc09iamVjdCIsInRvS2V5IiwiYmFzZVNldCIsIm9iamVjdCIsInBhdGgiLCJ2YWx1ZSIsImN1c3RvbWl6ZXIiLCJpbmRleCIsImxlbmd0aCIsImxhc3RJbmRleCIsIm5lc3RlZCIsImtleSIsIm5ld1ZhbHVlIiwib2JqVmFsdWUiLCJ1bmRlZmluZWQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6549\n\n}");
/***/ },
/***/ 4599
(module) {
eval("{/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n if (start < 0) {\n start = -start > length ? 0 : length + start;\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : end - start >>> 0;\n start >>>= 0;\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\nmodule.exports = baseSlice;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU5OS5qcyIsIm5hbWVzIjpbImJhc2VTbGljZSIsImFycmF5Iiwic3RhcnQiLCJlbmQiLCJpbmRleCIsImxlbmd0aCIsInJlc3VsdCIsIkFycmF5IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNsaWNlLmpzPzJiMTAiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zbGljZWAgd2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2xpY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IC1zdGFydCA+IGxlbmd0aCA/IDAgOiAobGVuZ3RoICsgc3RhcnQpO1xuICB9XG4gIGVuZCA9IGVuZCA+IGxlbmd0aCA/IGxlbmd0aCA6IGVuZDtcbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuZ3RoO1xuICB9XG4gIGxlbmd0aCA9IHN0YXJ0ID4gZW5kID8gMCA6ICgoZW5kIC0gc3RhcnQpID4+PiAwKTtcbiAgc3RhcnQgPj4+PSAwO1xuXG4gIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBhcnJheVtpbmRleCArIHN0YXJ0XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTbGljZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsU0FBU0EsQ0FBQ0MsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLEdBQUcsRUFBRTtFQUNwQyxJQUFJQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ1ZDLE1BQU0sR0FBR0osS0FBSyxDQUFDSSxNQUFNO0VBRXpCLElBQUlILEtBQUssR0FBRyxDQUFDLEVBQUU7SUFDYkEsS0FBSyxHQUFHLENBQUNBLEtBQUssR0FBR0csTUFBTSxHQUFHLENBQUMsR0FBSUEsTUFBTSxHQUFHSCxLQUFNO0VBQ2hEO0VBQ0FDLEdBQUcsR0FBR0EsR0FBRyxHQUFHRSxNQUFNLEdBQUdBLE1BQU0sR0FBR0YsR0FBRztFQUNqQyxJQUFJQSxHQUFHLEdBQUcsQ0FBQyxFQUFFO0lBQ1hBLEdBQUcsSUFBSUUsTUFBTTtFQUNmO0VBQ0FBLE1BQU0sR0FBR0gsS0FBSyxHQUFHQyxHQUFHLEdBQUcsQ0FBQyxHQUFLQSxHQUFHLEdBQUdELEtBQUssS0FBTSxDQUFFO0VBQ2hEQSxLQUFLLE1BQU0sQ0FBQztFQUVaLElBQUlJLE1BQU0sR0FBR0MsS0FBSyxDQUFDRixNQUFNLENBQUM7RUFDMUIsT0FBTyxFQUFFRCxLQUFLLEdBQUdDLE1BQU0sRUFBRTtJQUN2QkMsTUFBTSxDQUFDRixLQUFLLENBQUMsR0FBR0gsS0FBSyxDQUFDRyxLQUFLLEdBQUdGLEtBQUssQ0FBQztFQUN0QztFQUNBLE9BQU9JLE1BQU07QUFDZjtBQUVBRSxNQUFNLENBQUNDLE9BQU8sR0FBR1QsU0FBUyIsImlnbm9yZUxpc3QiOltdfQ==\n//# sourceURL=webpack-internal:///4599\n\n}");
/***/ },
/***/ 3605
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var _Symbol = __webpack_require__(8444),\n arrayMap = __webpack_require__(9293),\n isArray = __webpack_require__(2140),\n isSymbol = __webpack_require__(8889);\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = _Symbol ? _Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result;\n}\nmodule.exports = baseToString;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYwNS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxPQUFNLEdBQUdDLG1CQUFPLENBQUMsSUFBVyxDQUFDO0VBQzdCQyxRQUFRLEdBQUdELG1CQUFPLENBQUMsSUFBYSxDQUFDO0VBQ2pDRSxPQUFPLEdBQUdGLG1CQUFPLENBQUMsSUFBVyxDQUFDO0VBQzlCRyxRQUFRLEdBQUdILG1CQUFPLENBQUMsSUFBWSxDQUFDOztBQUVwQztBQUNBLElBQUlJLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7QUFFcEI7QUFDQSxJQUFJQyxXQUFXLEdBQUdOLE9BQU0sR0FBR0EsT0FBTSxDQUFDTyxTQUFTLEdBQUdDLFNBQVM7RUFDbkRDLGNBQWMsR0FBR0gsV0FBVyxHQUFHQSxXQUFXLENBQUNJLFFBQVEsR0FBR0YsU0FBUzs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNHLFlBQVlBLENBQUNDLEtBQUssRUFBRTtFQUMzQjtFQUNBLElBQUksT0FBT0EsS0FBSyxJQUFJLFFBQVEsRUFBRTtJQUM1QixPQUFPQSxLQUFLO0VBQ2Q7RUFDQSxJQUFJVCxPQUFPLENBQUNTLEtBQUssQ0FBQyxFQUFFO0lBQ2xCO0lBQ0EsT0FBT1YsUUFBUSxDQUFDVSxLQUFLLEVBQUVELFlBQVksQ0FBQyxHQUFHLEVBQUU7RUFDM0M7RUFDQSxJQUFJUCxRQUFRLENBQUNRLEtBQUssQ0FBQyxFQUFFO0lBQ25CLE9BQU9ILGNBQWMsR0FBR0EsY0FBYyxDQUFDSSxJQUFJLENBQUNELEtBQUssQ0FBQyxHQUFHLEVBQUU7RUFDekQ7RUFDQSxJQUFJRSxNQUFNLEdBQUlGLEtBQUssR0FBRyxFQUFHO0VBQ3pCLE9BQVFFLE1BQU0sSUFBSSxHQUFHLElBQUssQ0FBQyxHQUFHRixLQUFLLElBQUssQ0FBQ1AsUUFBUSxHQUFJLElBQUksR0FBR1MsTUFBTTtBQUNwRTtBQUVBQyxNQUFNLENBQUNDLE9BQU8sR0FBR0wsWUFBWSIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUb1N0cmluZy5qcz9jZTg2Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xuICAvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgdmFsdWVzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBzeW1ib2xUb1N0cmluZyA/IHN5bWJvbFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUb1N0cmluZztcbiJdLCJuYW1lcyI6WyJTeW1ib2wiLCJyZXF1aXJlIiwiYXJyYXlNYXAiLCJpc0FycmF5IiwiaXNTeW1ib2wiLCJJTkZJTklUWSIsInN5bWJvbFByb3RvIiwicHJvdG90eXBlIiwidW5kZWZpbmVkIiwic3ltYm9sVG9TdHJpbmciLCJ0b1N0cmluZyIsImJhc2VUb1N0cmluZyIsInZhbHVlIiwiY2FsbCIsInJlc3VsdCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3605\n\n}");
/***/ },
/***/ 6221
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var trimmedEndIndex = __webpack_require__(39);\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') : string;\n}\nmodule.exports = baseTrim;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjIyMS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxlQUFlLEdBQUdDLG1CQUFPLENBQUMsRUFBb0IsQ0FBQzs7QUFFbkQ7QUFDQSxJQUFJQyxXQUFXLEdBQUcsTUFBTTs7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxRQUFRQSxDQUFDQyxNQUFNLEVBQUU7RUFDeEIsT0FBT0EsTUFBTSxHQUNUQSxNQUFNLENBQUNDLEtBQUssQ0FBQyxDQUFDLEVBQUVMLGVBQWUsQ0FBQ0ksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUNFLE9BQU8sQ0FBQ0osV0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUNyRUUsTUFBTTtBQUNaO0FBRUFHLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHTCxRQUFRIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRyaW0uanM/OGQ3NCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdHJpbW1lZEVuZEluZGV4ID0gcmVxdWlyZSgnLi9fdHJpbW1lZEVuZEluZGV4Jyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgd2hpdGVzcGFjZS4gKi9cbnZhciByZVRyaW1TdGFydCA9IC9eXFxzKy87XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udHJpbWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byB0cmltLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUcmltKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nXG4gICAgPyBzdHJpbmcuc2xpY2UoMCwgdHJpbW1lZEVuZEluZGV4KHN0cmluZykgKyAxKS5yZXBsYWNlKHJlVHJpbVN0YXJ0LCAnJylcbiAgICA6IHN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVHJpbTtcbiJdLCJuYW1lcyI6WyJ0cmltbWVkRW5kSW5kZXgiLCJyZXF1aXJlIiwicmVUcmltU3RhcnQiLCJiYXNlVHJpbSIsInN0cmluZyIsInNsaWNlIiwicmVwbGFjZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6221\n\n}");
/***/ },
/***/ 8372
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var castPath = __webpack_require__(7364),\n last = __webpack_require__(3449),\n parent = __webpack_require__(3908),\n toKey = __webpack_require__(9690);\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n path = castPath(path, object);\n\n // Prevent prototype pollution:\n // https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg\n // https://github.com/lodash/lodash/security/advisories/GHSA-f23m-r3pf-42rh\n var index = -1,\n length = path.length;\n if (!length) {\n return true;\n }\n while (++index < length) {\n var key = toKey(path[index]);\n\n // Always block \"__proto__\" anywhere in the path if it's not expected\n if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) {\n return false;\n }\n\n // Block constructor/prototype as non-terminal traversal keys to prevent\n // escaping the object graph into built-in constructors and prototypes.\n if ((key === 'constructor' || key === 'prototype') && index < length - 1) {\n return false;\n }\n }\n var obj = parent(object, path);\n return obj == null || delete obj[toKey(last(path))];\n}\nmodule.exports = baseUnset;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODM3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxRQUFRLEdBQUdDLG1CQUFPLENBQUMsSUFBYSxDQUFDO0VBQ2pDQyxJQUFJLEdBQUdELG1CQUFPLENBQUMsSUFBUSxDQUFDO0VBQ3hCRSxNQUFNLEdBQUdGLG1CQUFPLENBQUMsSUFBVyxDQUFDO0VBQzdCRyxLQUFLLEdBQUdILG1CQUFPLENBQUMsSUFBVSxDQUFDOztBQUUvQjtBQUNBLElBQUlJLFdBQVcsR0FBR0MsTUFBTSxDQUFDQyxTQUFTOztBQUVsQztBQUNBLElBQUlDLGNBQWMsR0FBR0gsV0FBVyxDQUFDRyxjQUFjOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsU0FBU0EsQ0FBQ0MsTUFBTSxFQUFFQyxJQUFJLEVBQUU7RUFDL0JBLElBQUksR0FBR1gsUUFBUSxDQUFDVyxJQUFJLEVBQUVELE1BQU0sQ0FBQzs7RUFFN0I7RUFDQTtFQUNBO0VBQ0EsSUFBSUUsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNWQyxNQUFNLEdBQUdGLElBQUksQ0FBQ0UsTUFBTTtFQUV4QixJQUFJLENBQUNBLE1BQU0sRUFBRTtJQUNYLE9BQU8sSUFBSTtFQUNiO0VBRUEsT0FBTyxFQUFFRCxLQUFLLEdBQUdDLE1BQU0sRUFBRTtJQUN2QixJQUFJQyxHQUFHLEdBQUdWLEtBQUssQ0FBQ08sSUFBSSxDQUFDQyxLQUFLLENBQUMsQ0FBQzs7SUFFNUI7SUFDQSxJQUFJRSxHQUFHLEtBQUssV0FBVyxJQUFJLENBQUNOLGNBQWMsQ0FBQ08sSUFBSSxDQUFDTCxNQUFNLEVBQUUsV0FBVyxDQUFDLEVBQUU7TUFDcEUsT0FBTyxLQUFLO0lBQ2Q7O0lBRUE7SUFDQTtJQUNBLElBQUksQ0FBQ0ksR0FBRyxLQUFLLGFBQWEsSUFBSUEsR0FBRyxLQUFLLFdBQVcsS0FBS0YsS0FBSyxHQUFHQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ3hFLE9BQU8sS0FBSztJQUNkO0VBQ0Y7RUFFQSxJQUFJRyxHQUFHLEdBQUdiLE1BQU0sQ0FBQ08sTUFBTSxFQUFFQyxJQUFJLENBQUM7RUFDOUIsT0FBT0ssR0FBRyxJQUFJLElBQUksSUFBSSxPQUFPQSxHQUFHLENBQUNaLEtBQUssQ0FBQ0YsSUFBSSxDQUFDUyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3JEO0FBRUFNLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHVCxTQUFTIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuc2V0LmpzPzRiYjUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBsYXN0ID0gcmVxdWlyZSgnLi9sYXN0JyksXG4gICAgcGFyZW50ID0gcmVxdWlyZSgnLi9fcGFyZW50JyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuc2V0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwcm9wZXJ0eSBwYXRoIHRvIHVuc2V0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBkZWxldGVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbnNldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgLy8gUHJldmVudCBwcm90b3R5cGUgcG9sbHV0aW9uOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9zZWN1cml0eS9hZHZpc29yaWVzL0dIU0EteHhqci1tbWp2LTRncGdcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvc2VjdXJpdHkvYWR2aXNvcmllcy9HSFNBLWYyM20tcjNwZi00MnJoXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKTtcblxuICAgIC8vIEFsd2F5cyBibG9jayBcIl9fcHJvdG9fX1wiIGFueXdoZXJlIGluIHRoZSBwYXRoIGlmIGl0J3Mgbm90IGV4cGVjdGVkXG4gICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycgJiYgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX19wcm90b19fJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBCbG9jayBjb25zdHJ1Y3Rvci9wcm90b3R5cGUgYXMgbm9uLXRlcm1pbmFsIHRyYXZlcnNhbCBrZXlzIHRvIHByZXZlbnRcbiAgICAvLyBlc2NhcGluZyB0aGUgb2JqZWN0IGdyYXBoIGludG8gYnVpbHQtaW4gY29uc3RydWN0b3JzIGFuZCBwcm90b3R5cGVzLlxuICAgIGlmICgoa2V5ID09PSAnY29uc3RydWN0b3InIHx8IGtleSA9PT0gJ3Byb3RvdHlwZScpICYmIGluZGV4IDwgbGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvYmogPSBwYXJlbnQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIG9iaiA9PSBudWxsIHx8IGRlbGV0ZSBvYmpbdG9LZXkobGFzdChwYXRoKSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbnNldDtcbiJdLCJuYW1lcyI6WyJjYXN0UGF0aCIsInJlcXVpcmUiLCJsYXN0IiwicGFyZW50IiwidG9LZXkiLCJvYmplY3RQcm90byIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiYmFzZVVuc2V0Iiwib2JqZWN0IiwicGF0aCIsImluZGV4IiwibGVuZ3RoIiwia2V5IiwiY2FsbCIsIm9iaiIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8372\n\n}");
/***/ },
/***/ 7364
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var isArray = __webpack_require__(2140),\n isKey = __webpack_require__(4333),\n stringToPath = __webpack_require__(3031),\n toString = __webpack_require__(3221);\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\nmodule.exports = castPath;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxPQUFPLEdBQUdDLG1CQUFPLENBQUMsSUFBVyxDQUFDO0VBQzlCQyxLQUFLLEdBQUdELG1CQUFPLENBQUMsSUFBVSxDQUFDO0VBQzNCRSxZQUFZLEdBQUdGLG1CQUFPLENBQUMsSUFBaUIsQ0FBQztFQUN6Q0csUUFBUSxHQUFHSCxtQkFBTyxDQUFDLElBQVksQ0FBQzs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNJLFFBQVFBLENBQUNDLEtBQUssRUFBRUMsTUFBTSxFQUFFO0VBQy9CLElBQUlQLE9BQU8sQ0FBQ00sS0FBSyxDQUFDLEVBQUU7SUFDbEIsT0FBT0EsS0FBSztFQUNkO0VBQ0EsT0FBT0osS0FBSyxDQUFDSSxLQUFLLEVBQUVDLE1BQU0sQ0FBQyxHQUFHLENBQUNELEtBQUssQ0FBQyxHQUFHSCxZQUFZLENBQUNDLFFBQVEsQ0FBQ0UsS0FBSyxDQUFDLENBQUM7QUFDdkU7QUFFQUUsTUFBTSxDQUFDQyxPQUFPLEdBQUdKLFFBQVEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0UGF0aC5qcz9lMmU0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIHN0cmluZ1RvUGF0aCA9IHJlcXVpcmUoJy4vX3N0cmluZ1RvUGF0aCcpLFxuICAgIHRvU3RyaW5nID0gcmVxdWlyZSgnLi90b1N0cmluZycpO1xuXG4vKipcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3QgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2FzdFBhdGgodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGlzS2V5KHZhbHVlLCBvYmplY3QpID8gW3ZhbHVlXSA6IHN0cmluZ1RvUGF0aCh0b1N0cmluZyh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhc3RQYXRoO1xuIl0sIm5hbWVzIjpbImlzQXJyYXkiLCJyZXF1aXJlIiwiaXNLZXkiLCJzdHJpbmdUb1BhdGgiLCJ0b1N0cmluZyIsImNhc3RQYXRoIiwidmFsdWUiLCJvYmplY3QiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n\n}");
/***/ },
/***/ 2424
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var root = __webpack_require__(2912);\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\nmodule.exports = coreJsData;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxJQUFJLEdBQUdDLG1CQUFPLENBQUMsSUFBUyxDQUFDOztBQUU3QjtBQUNBLElBQUlDLFVBQVUsR0FBR0YsSUFBSSxDQUFDLG9CQUFvQixDQUFDO0FBRTNDRyxNQUFNLENBQUNDLE9BQU8sR0FBR0YsVUFBVSIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanM/ZGEwMyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3JlSnNEYXRhO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJyZXF1aXJlIiwiY29yZUpzRGF0YSIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2424\n\n}");
/***/ },
/***/ 926
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var getNative = __webpack_require__(8345);\nvar defineProperty = function () {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}();\nmodule.exports = defineProperty;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTI2LmpzIiwibWFwcGluZ3MiOiJBQUFBLElBQUlBLFNBQVMsR0FBR0MsbUJBQU8sQ0FBQyxJQUFjLENBQUM7QUFFdkMsSUFBSUMsY0FBYyxHQUFJLFlBQVc7RUFDL0IsSUFBSTtJQUNGLElBQUlDLElBQUksR0FBR0gsU0FBUyxDQUFDSSxNQUFNLEVBQUUsZ0JBQWdCLENBQUM7SUFDOUNELElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEIsT0FBT0EsSUFBSTtFQUNiLENBQUMsQ0FBQyxPQUFPRSxDQUFDLEVBQUUsQ0FBQztBQUNmLENBQUMsQ0FBQyxDQUFFO0FBRUpDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHTCxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZGVmaW5lUHJvcGVydHkuanM/M2I0YSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZVByb3BlcnR5O1xuIl0sIm5hbWVzIjpbImdldE5hdGl2ZSIsInJlcXVpcmUiLCJkZWZpbmVQcm9wZXJ0eSIsImZ1bmMiLCJPYmplY3QiLCJlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///926\n\n}");
/***/ },
/***/ 6617
(module, __unused_webpack_exports, __webpack_require__) {
eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = (typeof __webpack_require__.g === \"undefined\" ? \"undefined\" : _typeof(__webpack_require__.g)) == 'object' && __webpack_require__.g && __webpack_require__.g.Object === Object && __webpack_require__.g;\nmodule.exports = freeGlobal;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjYxNy5qcyIsIm1hcHBpbmdzIjoiO0FBQUE7QUFDQSxJQUFJQSxVQUFVLEdBQUcsUUFBT0MscUJBQU0saUNBQUFDLE9BQUEsQ0FBTkQscUJBQU0sTUFBSSxRQUFRLElBQUlBLHFCQUFNLElBQUlBLHFCQUFNLENBQUNFLE1BQU0sS0FBS0EsTUFBTSxJQUFJRixxQkFBTTtBQUUxRkcsTUFBTSxDQUFDQyxPQUFPLEdBQUdMLFVBQVUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzPzU4NWEiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIl0sIm5hbWVzIjpbImZyZWVHbG9iYWwiLCJnbG9iYWwiLCJfdHlwZW9mIiwiT2JqZWN0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6617\n\n}");
/***/ },
/***/ 1046
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var isKeyable = __webpack_require__(4649);\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;\n}\nmodule.exports = getMapData;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxTQUFTLEdBQUdDLG1CQUFPLENBQUMsSUFBYyxDQUFDOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsVUFBVUEsQ0FBQ0MsR0FBRyxFQUFFQyxHQUFHLEVBQUU7RUFDNUIsSUFBSUMsSUFBSSxHQUFHRixHQUFHLENBQUNHLFFBQVE7RUFDdkIsT0FBT04sU0FBUyxDQUFDSSxHQUFHLENBQUMsR0FDakJDLElBQUksQ0FBQyxPQUFPRCxHQUFHLElBQUksUUFBUSxHQUFHLFFBQVEsR0FBRyxNQUFNLENBQUMsR0FDaERDLElBQUksQ0FBQ0YsR0FBRztBQUNkO0FBRUFJLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHTixVQUFVIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcz80MjQ1Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBpc0tleWFibGUgPSByZXF1aXJlKCcuL19pc0tleWFibGUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xuICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcbiAgcmV0dXJuIGlzS2V5YWJsZShrZXkpXG4gICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICA6IGRhdGEubWFwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE1hcERhdGE7XG4iXSwibmFtZXMiOlsiaXNLZXlhYmxlIiwicmVxdWlyZSIsImdldE1hcERhdGEiLCJtYXAiLCJrZXkiLCJkYXRhIiwiX19kYXRhX18iLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1046\n\n}");
/***/ },
/***/ 8345
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var baseIsNative = __webpack_require__(4434),\n getValue = __webpack_require__(329);\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\nmodule.exports = getNative;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODM0NS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxZQUFZLEdBQUdDLG1CQUFPLENBQUMsSUFBaUIsQ0FBQztFQUN6Q0MsUUFBUSxHQUFHRCxtQkFBTyxDQUFDLEdBQWEsQ0FBQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNFLFNBQVNBLENBQUNDLE1BQU0sRUFBRUMsR0FBRyxFQUFFO0VBQzlCLElBQUlDLEtBQUssR0FBR0osUUFBUSxDQUFDRSxNQUFNLEVBQUVDLEdBQUcsQ0FBQztFQUNqQyxPQUFPTCxZQUFZLENBQUNNLEtBQUssQ0FBQyxHQUFHQSxLQUFLLEdBQUdDLFNBQVM7QUFDaEQ7QUFFQUMsTUFBTSxDQUFDQyxPQUFPLEdBQUdOLFNBQVMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXROYXRpdmUuanM/MGIwNyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYmFzZUlzTmF0aXZlID0gcmVxdWlyZSgnLi9fYmFzZUlzTmF0aXZlJyksXG4gICAgZ2V0VmFsdWUgPSByZXF1aXJlKCcuL19nZXRWYWx1ZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5hdGl2ZTtcbiJdLCJuYW1lcyI6WyJiYXNlSXNOYXRpdmUiLCJyZXF1aXJlIiwiZ2V0VmFsdWUiLCJnZXROYXRpdmUiLCJvYmplY3QiLCJrZXkiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8345\n\n}");
/***/ },
/***/ 5504
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var _Symbol = __webpack_require__(8444);\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = _Symbol ? _Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\nmodule.exports = getRawTag;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTUwNC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxPQUFNLEdBQUdDLG1CQUFPLENBQUMsSUFBVyxDQUFDOztBQUVqQztBQUNBLElBQUlDLFdBQVcsR0FBR0MsTUFBTSxDQUFDQyxTQUFTOztBQUVsQztBQUNBLElBQUlDLGNBQWMsR0FBR0gsV0FBVyxDQUFDRyxjQUFjOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUMsb0JBQW9CLEdBQUdKLFdBQVcsQ0FBQ0ssUUFBUTs7QUFFL0M7QUFDQSxJQUFJQyxjQUFjLEdBQUdSLE9BQU0sR0FBR0EsT0FBTSxDQUFDUyxXQUFXLEdBQUdDLFNBQVM7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsU0FBU0EsQ0FBQ0MsS0FBSyxFQUFFO0VBQ3hCLElBQUlDLEtBQUssR0FBR1IsY0FBYyxDQUFDUyxJQUFJLENBQUNGLEtBQUssRUFBRUosY0FBYyxDQUFDO0lBQ2xETyxHQUFHLEdBQUdILEtBQUssQ0FBQ0osY0FBYyxDQUFDO0VBRS9CLElBQUk7SUFDRkksS0FBSyxDQUFDSixjQUFjLENBQUMsR0FBR0UsU0FBUztJQUNqQyxJQUFJTSxRQUFRLEdBQUcsSUFBSTtFQUNyQixDQUFDLENBQUMsT0FBT0MsQ0FBQyxFQUFFLENBQUM7RUFFYixJQUFJQyxNQUFNLEdBQUdaLG9CQUFvQixDQUFDUSxJQUFJLENBQUNGLEtBQUssQ0FBQztFQUM3QyxJQUFJSSxRQUFRLEVBQUU7SUFDWixJQUFJSCxLQUFLLEVBQUU7TUFDVEQsS0FBSyxDQUFDSixjQUFjLENBQUMsR0FBR08sR0FBRztJQUM3QixDQUFDLE1BQU07TUFDTCxPQUFPSCxLQUFLLENBQUNKLGNBQWMsQ0FBQztJQUM5QjtFQUNGO0VBQ0EsT0FBT1UsTUFBTTtBQUNmO0FBRUFDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHVCxTQUFTIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzPzAwZmQiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIl0sIm5hbWVzIjpbIlN5bWJvbCIsInJlcXVpcmUiLCJvYmplY3RQcm90byIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwibmF0aXZlT2JqZWN0VG9TdHJpbmciLCJ0b1N0cmluZyIsInN5bVRvU3RyaW5nVGFnIiwidG9TdHJpbmdUYWciLCJ1bmRlZmluZWQiLCJnZXRSYXdUYWciLCJ2YWx1ZSIsImlzT3duIiwiY2FsbCIsInRhZyIsInVubWFza2VkIiwiZSIsInJlc3VsdCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5504\n\n}");
/***/ },
/***/ 329
(module) {
eval("{/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\nmodule.exports = getValue;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzI5LmpzIiwibmFtZXMiOlsiZ2V0VmFsdWUiLCJvYmplY3QiLCJrZXkiLCJ1bmRlZmluZWQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRWYWx1ZS5qcz8zNjk4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsUUFBUUEsQ0FBQ0MsTUFBTSxFQUFFQyxHQUFHLEVBQUU7RUFDN0IsT0FBT0QsTUFBTSxJQUFJLElBQUksR0FBR0UsU0FBUyxHQUFHRixNQUFNLENBQUNDLEdBQUcsQ0FBQztBQUNqRDtBQUVBRSxNQUFNLENBQUNDLE9BQU8sR0FBR0wsUUFBUSIsImlnbm9yZUxpc3QiOltdfQ==\n//# sourceURL=webpack-internal:///329\n\n}");
/***/ },
/***/ 2503
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var nativeCreate = __webpack_require__(7615);\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\nmodule.exports = hashClear;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxZQUFZLEdBQUdDLG1CQUFPLENBQUMsSUFBaUIsQ0FBQzs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxTQUFTQSxDQUFBLEVBQUc7RUFDbkIsSUFBSSxDQUFDQyxRQUFRLEdBQUdILFlBQVksR0FBR0EsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0RCxJQUFJLENBQUNJLElBQUksR0FBRyxDQUFDO0FBQ2Y7QUFFQUMsTUFBTSxDQUFDQyxPQUFPLEdBQUdKLFNBQVMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoQ2xlYXIuanM/NDlmNCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiJdLCJuYW1lcyI6WyJuYXRpdmVDcmVhdGUiLCJyZXF1aXJlIiwiaGFzaENsZWFyIiwiX19kYXRhX18iLCJzaXplIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2503\n\n}");
/***/ },
/***/ 2211
(module) {
eval("{/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\nmodule.exports = hashDelete;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxMS5qcyIsIm5hbWVzIjpbImhhc2hEZWxldGUiLCJrZXkiLCJyZXN1bHQiLCJoYXMiLCJfX2RhdGFfXyIsInNpemUiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzPzFlZmMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFVBQVVBLENBQUNDLEdBQUcsRUFBRTtFQUN2QixJQUFJQyxNQUFNLEdBQUcsSUFBSSxDQUFDQyxHQUFHLENBQUNGLEdBQUcsQ0FBQyxJQUFJLE9BQU8sSUFBSSxDQUFDRyxRQUFRLENBQUNILEdBQUcsQ0FBQztFQUN2RCxJQUFJLENBQUNJLElBQUksSUFBSUgsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDO0VBQzNCLE9BQU9BLE1BQU07QUFDZjtBQUVBSSxNQUFNLENBQUNDLE9BQU8sR0FBR1AsVUFBVSIsImlnbm9yZUxpc3QiOltdfQ==\n//# sourceURL=webpack-internal:///2211\n\n}");
/***/ },
/***/ 5186
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var nativeCreate = __webpack_require__(7615);\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\nmodule.exports = hashGet;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTE4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxZQUFZLEdBQUdDLG1CQUFPLENBQUMsSUFBaUIsQ0FBQzs7QUFFN0M7QUFDQSxJQUFJQyxjQUFjLEdBQUcsMkJBQTJCOztBQUVoRDtBQUNBLElBQUlDLFdBQVcsR0FBR0MsTUFBTSxDQUFDQyxTQUFTOztBQUVsQztBQUNBLElBQUlDLGNBQWMsR0FBR0gsV0FBVyxDQUFDRyxjQUFjOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxPQUFPQSxDQUFDQyxHQUFHLEVBQUU7RUFDcEIsSUFBSUMsSUFBSSxHQUFHLElBQUksQ0FBQ0MsUUFBUTtFQUN4QixJQUFJVixZQUFZLEVBQUU7SUFDaEIsSUFBSVcsTUFBTSxHQUFHRixJQUFJLENBQUNELEdBQUcsQ0FBQztJQUN0QixPQUFPRyxNQUFNLEtBQUtULGNBQWMsR0FBR1UsU0FBUyxHQUFHRCxNQUFNO0VBQ3ZEO0VBQ0EsT0FBT0wsY0FBYyxDQUFDTyxJQUFJLENBQUNKLElBQUksRUFBRUQsR0FBRyxDQUFDLEdBQUdDLElBQUksQ0FBQ0QsR0FBRyxDQUFDLEdBQUdJLFNBQVM7QUFDL0Q7QUFFQUUsTUFBTSxDQUFDQyxPQUFPLEdBQUdSLE9BQU8iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoR2V0LmpzP2JiYzAiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEdldDtcbiJdLCJuYW1lcyI6WyJuYXRpdmVDcmVhdGUiLCJyZXF1aXJlIiwiSEFTSF9VTkRFRklORUQiLCJvYmplY3RQcm90byIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiaGFzaEdldCIsImtleSIsImRhdGEiLCJfX2RhdGFfXyIsInJlc3VsdCIsInVuZGVmaW5lZCIsImNhbGwiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5186\n\n}");
/***/ },
/***/ 8502
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var nativeCreate = __webpack_require__(7615);\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\nmodule.exports = hashHas;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwMi5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxZQUFZLEdBQUdDLG1CQUFPLENBQUMsSUFBaUIsQ0FBQzs7QUFFN0M7QUFDQSxJQUFJQyxXQUFXLEdBQUdDLE1BQU0sQ0FBQ0MsU0FBUzs7QUFFbEM7QUFDQSxJQUFJQyxjQUFjLEdBQUdILFdBQVcsQ0FBQ0csY0FBYzs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsT0FBT0EsQ0FBQ0MsR0FBRyxFQUFFO0VBQ3BCLElBQUlDLElBQUksR0FBRyxJQUFJLENBQUNDLFFBQVE7RUFDeEIsT0FBT1QsWUFBWSxHQUFJUSxJQUFJLENBQUNELEdBQUcsQ0FBQyxLQUFLRyxTQUFTLEdBQUlMLGNBQWMsQ0FBQ00sSUFBSSxDQUFDSCxJQUFJLEVBQUVELEdBQUcsQ0FBQztBQUNsRjtBQUVBSyxNQUFNLENBQUNDLE9BQU8sR0FBR1AsT0FBTyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanM/N2E0OCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIl0sIm5hbWVzIjpbIm5hdGl2ZUNyZWF0ZSIsInJlcXVpcmUiLCJvYmplY3RQcm90byIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiaGFzaEhhcyIsImtleSIsImRhdGEiLCJfX2RhdGFfXyIsInVuZGVmaW5lZCIsImNhbGwiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8502\n\n}");
/***/ },
/***/ 4158
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var nativeCreate = __webpack_require__(7615);\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value;\n return this;\n}\nmodule.exports = hashSet;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE1OC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxZQUFZLEdBQUdDLG1CQUFPLENBQUMsSUFBaUIsQ0FBQzs7QUFFN0M7QUFDQSxJQUFJQyxjQUFjLEdBQUcsMkJBQTJCOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLE9BQU9BLENBQUNDLEdBQUcsRUFBRUMsS0FBSyxFQUFFO0VBQzNCLElBQUlDLElBQUksR0FBRyxJQUFJLENBQUNDLFFBQVE7RUFDeEIsSUFBSSxDQUFDQyxJQUFJLElBQUksSUFBSSxDQUFDQyxHQUFHLENBQUNMLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0VBQ2xDRSxJQUFJLENBQUNGLEdBQUcsQ0FBQyxHQUFJSixZQUFZLElBQUlLLEtBQUssS0FBS0ssU0FBUyxHQUFJUixjQUFjLEdBQUdHLEtBQUs7RUFDMUUsT0FBTyxJQUFJO0FBQ2I7QUFFQU0sTUFBTSxDQUFDQyxPQUFPLEdBQUdULE9BQU8iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzPzI1MjQiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoU2V0O1xuIl0sIm5hbWVzIjpbIm5hdGl2ZUNyZWF0ZSIsInJlcXVpcmUiLCJIQVNIX1VOREVGSU5FRCIsImhhc2hTZXQiLCJrZXkiLCJ2YWx1ZSIsImRhdGEiLCJfX2RhdGFfXyIsInNpemUiLCJoYXMiLCJ1bmRlZmluZWQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4158\n\n}");
/***/ },
/***/ 6450
(module) {
eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = _typeof(value);\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length && (type == 'number' || type != 'symbol' && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;\n}\nmodule.exports = isIndex;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQ1MC5qcyIsIm5hbWVzIjpbIk1BWF9TQUZFX0lOVEVHRVIiLCJyZUlzVWludCIsImlzSW5kZXgiLCJ2YWx1ZSIsImxlbmd0aCIsInR5cGUiLCJfdHlwZW9mIiwidGVzdCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSW5kZXguanM/YzA5OCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJbmRleDtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0EsSUFBSUEsZ0JBQWdCLEdBQUcsZ0JBQWdCOztBQUV2QztBQUNBLElBQUlDLFFBQVEsR0FBRyxrQkFBa0I7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxPQUFPQSxDQUFDQyxLQUFLLEVBQUVDLE1BQU0sRUFBRTtFQUM5QixJQUFJQyxJQUFJLEdBQUFDLE9BQUEsQ0FBVUgsS0FBSztFQUN2QkMsTUFBTSxHQUFHQSxNQUFNLElBQUksSUFBSSxHQUFHSixnQkFBZ0IsR0FBR0ksTUFBTTtFQUVuRCxPQUFPLENBQUMsQ0FBQ0EsTUFBTSxLQUNaQyxJQUFJLElBQUksUUFBUSxJQUNkQSxJQUFJLElBQUksUUFBUSxJQUFJSixRQUFRLENBQUNNLElBQUksQ0FBQ0osS0FBSyxDQUFFLENBQUMsSUFDeENBLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSUEsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUlBLEtBQUssR0FBR0MsTUFBTztBQUN4RDtBQUVBSSxNQUFNLENBQUNDLE9BQU8sR0FBR1AsT0FBTyIsImlnbm9yZUxpc3QiOltdfQ==\n//# sourceURL=webpack-internal:///6450\n\n}");
/***/ },
/***/ 4333
(module, __unused_webpack_exports, __webpack_require__) {
eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar isArray = __webpack_require__(2140),\n isSymbol = __webpack_require__(8889);\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = _typeof(value);\n if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);\n}\nmodule.exports = isKey;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMzMy5qcyIsIm1hcHBpbmdzIjoiO0FBQUEsSUFBSUEsT0FBTyxHQUFHQyxtQkFBTyxDQUFDLElBQVcsQ0FBQztFQUM5QkMsUUFBUSxHQUFHRCxtQkFBTyxDQUFDLElBQVksQ0FBQzs7QUFFcEM7QUFDQSxJQUFJRSxZQUFZLEdBQUcsa0RBQWtEO0VBQ2pFQyxhQUFhLEdBQUcsT0FBTzs7QUFFM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLEtBQUtBLENBQUNDLEtBQUssRUFBRUMsTUFBTSxFQUFFO0VBQzVCLElBQUlQLE9BQU8sQ0FBQ00sS0FBSyxDQUFDLEVBQUU7SUFDbEIsT0FBTyxLQUFLO0VBQ2Q7RUFDQSxJQUFJRSxJQUFJLEdBQUFDLE9BQUEsQ0FBVUgsS0FBSztFQUN2QixJQUFJRSxJQUFJLElBQUksUUFBUSxJQUFJQSxJQUFJLElBQUksUUFBUSxJQUFJQSxJQUFJLElBQUksU0FBUyxJQUN6REYsS0FBSyxJQUFJLElBQUksSUFBSUosUUFBUSxDQUFDSSxLQUFLLENBQUMsRUFBRTtJQUNwQyxPQUFPLElBQUk7RUFDYjtFQUNBLE9BQU9GLGFBQWEsQ0FBQ00sSUFBSSxDQUFDSixLQUFLLENBQUMsSUFBSSxDQUFDSCxZQUFZLENBQUNPLElBQUksQ0FBQ0osS0FBSyxDQUFDLElBQzFEQyxNQUFNLElBQUksSUFBSSxJQUFJRCxLQUFLLElBQUlLLE1BQU0sQ0FBQ0osTUFBTSxDQUFFO0FBQy9DO0FBRUFLLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHUixLQUFLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXkuanM/ZjYwOCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXk7XG4iXSwibmFtZXMiOlsiaXNBcnJheSIsInJlcXVpcmUiLCJpc1N5bWJvbCIsInJlSXNEZWVwUHJvcCIsInJlSXNQbGFpblByb3AiLCJpc0tleSIsInZhbHVlIiwib2JqZWN0IiwidHlwZSIsIl90eXBlb2YiLCJ0ZXN0IiwiT2JqZWN0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4333\n\n}");
/***/ },
/***/ 4649
(module) {
eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = _typeof(value);\n return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null;\n}\nmodule.exports = isKeyable;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDY0OS5qcyIsIm5hbWVzIjpbImlzS2V5YWJsZSIsInZhbHVlIiwidHlwZSIsIl90eXBlb2YiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanM/MTI5MCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxTQUFTQSxDQUFDQyxLQUFLLEVBQUU7RUFDeEIsSUFBSUMsSUFBSSxHQUFBQyxPQUFBLENBQVVGLEtBQUs7RUFDdkIsT0FBUUMsSUFBSSxJQUFJLFFBQVEsSUFBSUEsSUFBSSxJQUFJLFFBQVEsSUFBSUEsSUFBSSxJQUFJLFFBQVEsSUFBSUEsSUFBSSxJQUFJLFNBQVMsR0FDaEZELEtBQUssS0FBSyxXQUFXLEdBQ3JCQSxLQUFLLEtBQUssSUFBSztBQUN0QjtBQUVBRyxNQUFNLENBQUNDLE9BQU8sR0FBR0wsU0FBUyIsImlnbm9yZUxpc3QiOltdfQ==\n//# sourceURL=webpack-internal:///4649\n\n}");
/***/ },
/***/ 2377
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var coreJsData = __webpack_require__(2424);\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = function () {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? 'Symbol(src)_1.' + uid : '';\n}();\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && maskSrcKey in func;\n}\nmodule.exports = isMasked;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ny5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxVQUFVLEdBQUdDLG1CQUFPLENBQUMsSUFBZSxDQUFDOztBQUV6QztBQUNBLElBQUlDLFVBQVUsR0FBSSxZQUFXO0VBQzNCLElBQUlDLEdBQUcsR0FBRyxRQUFRLENBQUNDLElBQUksQ0FBQ0osVUFBVSxJQUFJQSxVQUFVLENBQUNLLElBQUksSUFBSUwsVUFBVSxDQUFDSyxJQUFJLENBQUNDLFFBQVEsSUFBSSxFQUFFLENBQUM7RUFDeEYsT0FBT0gsR0FBRyxHQUFJLGdCQUFnQixHQUFHQSxHQUFHLEdBQUksRUFBRTtBQUM1QyxDQUFDLENBQUMsQ0FBRTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNJLFFBQVFBLENBQUNDLElBQUksRUFBRTtFQUN0QixPQUFPLENBQUMsQ0FBQ04sVUFBVSxJQUFLQSxVQUFVLElBQUlNLElBQUs7QUFDN0M7QUFFQUMsTUFBTSxDQUFDQyxPQUFPLEdBQUdILFFBQVEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcz8xMzY4Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBjb3JlSnNEYXRhID0gcmVxdWlyZSgnLi9fY29yZUpzRGF0YScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFza2VkO1xuIl0sIm5hbWVzIjpbImNvcmVKc0RhdGEiLCJyZXF1aXJlIiwibWFza1NyY0tleSIsInVpZCIsImV4ZWMiLCJrZXlzIiwiSUVfUFJPVE8iLCJpc01hc2tlZCIsImZ1bmMiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2377\n\n}");
/***/ },
/***/ 2403
(module) {
eval("{/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\nmodule.exports = listCacheClear;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQwMy5qcyIsIm5hbWVzIjpbImxpc3RDYWNoZUNsZWFyIiwiX19kYXRhX18iLCJzaXplIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanM/MjhjOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsY0FBY0EsQ0FBQSxFQUFHO0VBQ3hCLElBQUksQ0FBQ0MsUUFBUSxHQUFHLEVBQUU7RUFDbEIsSUFBSSxDQUFDQyxJQUFJLEdBQUcsQ0FBQztBQUNmO0FBRUFDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHSixjQUFjIiwiaWdub3JlTGlzdCI6W119\n//# sourceURL=webpack-internal:///2403\n\n}");
/***/ },
/***/ 5447
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var assocIndexOf = __webpack_require__(7412);\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\nmodule.exports = listCacheDelete;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxZQUFZLEdBQUdDLG1CQUFPLENBQUMsSUFBaUIsQ0FBQzs7QUFFN0M7QUFDQSxJQUFJQyxVQUFVLEdBQUdDLEtBQUssQ0FBQ0MsU0FBUzs7QUFFaEM7QUFDQSxJQUFJQyxNQUFNLEdBQUdILFVBQVUsQ0FBQ0csTUFBTTs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsZUFBZUEsQ0FBQ0MsR0FBRyxFQUFFO0VBQzVCLElBQUlDLElBQUksR0FBRyxJQUFJLENBQUNDLFFBQVE7SUFDcEJDLEtBQUssR0FBR1YsWUFBWSxDQUFDUSxJQUFJLEVBQUVELEdBQUcsQ0FBQztFQUVuQyxJQUFJRyxLQUFLLEdBQUcsQ0FBQyxFQUFFO0lBQ2IsT0FBTyxLQUFLO0VBQ2Q7RUFDQSxJQUFJQyxTQUFTLEdBQUdILElBQUksQ0FBQ0ksTUFBTSxHQUFHLENBQUM7RUFDL0IsSUFBSUYsS0FBSyxJQUFJQyxTQUFTLEVBQUU7SUFDdEJILElBQUksQ0FBQ0ssR0FBRyxDQUFDLENBQUM7RUFDWixDQUFDLE1BQU07SUFDTFIsTUFBTSxDQUFDUyxJQUFJLENBQUNOLElBQUksRUFBRUUsS0FBSyxFQUFFLENBQUMsQ0FBQztFQUM3QjtFQUNBLEVBQUUsSUFBSSxDQUFDSyxJQUFJO0VBQ1gsT0FBTyxJQUFJO0FBQ2I7QUFFQUMsTUFBTSxDQUFDQyxPQUFPLEdBQUdYLGVBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVEZWxldGUuanM/NjlkNSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVEZWxldGU7XG4iXSwibmFtZXMiOlsiYXNzb2NJbmRleE9mIiwicmVxdWlyZSIsImFycmF5UHJvdG8iLCJBcnJheSIsInByb3RvdHlwZSIsInNwbGljZSIsImxpc3RDYWNoZURlbGV0ZSIsImtleSIsImRhdGEiLCJfX2RhdGFfXyIsImluZGV4IiwibGFzdEluZGV4IiwibGVuZ3RoIiwicG9wIiwiY2FsbCIsInNpemUiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5447\n\n}");
/***/ },
/***/ 470
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var assocIndexOf = __webpack_require__(7412);\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n return index < 0 ? undefined : data[index][1];\n}\nmodule.exports = listCacheGet;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDcwLmpzIiwibWFwcGluZ3MiOiJBQUFBLElBQUlBLFlBQVksR0FBR0MsbUJBQU8sQ0FBQyxJQUFpQixDQUFDOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxZQUFZQSxDQUFDQyxHQUFHLEVBQUU7RUFDekIsSUFBSUMsSUFBSSxHQUFHLElBQUksQ0FBQ0MsUUFBUTtJQUNwQkMsS0FBSyxHQUFHTixZQUFZLENBQUNJLElBQUksRUFBRUQsR0FBRyxDQUFDO0VBRW5DLE9BQU9HLEtBQUssR0FBRyxDQUFDLEdBQUdDLFNBQVMsR0FBR0gsSUFBSSxDQUFDRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0M7QUFFQUUsTUFBTSxDQUFDQyxPQUFPLEdBQUdQLFlBQVkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanM/YjRjMCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIl0sIm5hbWVzIjpbImFzc29jSW5kZXhPZiIsInJlcXVpcmUiLCJsaXN0Q2FjaGVHZXQiLCJrZXkiLCJkYXRhIiwiX19kYXRhX18iLCJpbmRleCIsInVuZGVmaW5lZCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///470\n\n}");
/***/ },
/***/ 6674
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var assocIndexOf = __webpack_require__(7412);\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\nmodule.exports = listCacheHas;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjY3NC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxZQUFZLEdBQUdDLG1CQUFPLENBQUMsSUFBaUIsQ0FBQzs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsWUFBWUEsQ0FBQ0MsR0FBRyxFQUFFO0VBQ3pCLE9BQU9ILFlBQVksQ0FBQyxJQUFJLENBQUNJLFFBQVEsRUFBRUQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0FBRUFFLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHSixZQUFZIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzP2ZiYTUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iXSwibmFtZXMiOlsiYXNzb2NJbmRleE9mIiwicmVxdWlyZSIsImxpc3RDYWNoZUhhcyIsImtleSIsIl9fZGF0YV9fIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6674\n\n}");
/***/ },
/***/ 9962
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var assocIndexOf = __webpack_require__(7412);\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\nmodule.exports = listCacheSet;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTk2Mi5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxZQUFZLEdBQUdDLG1CQUFPLENBQUMsSUFBaUIsQ0FBQzs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxZQUFZQSxDQUFDQyxHQUFHLEVBQUVDLEtBQUssRUFBRTtFQUNoQyxJQUFJQyxJQUFJLEdBQUcsSUFBSSxDQUFDQyxRQUFRO0lBQ3BCQyxLQUFLLEdBQUdQLFlBQVksQ0FBQ0ssSUFBSSxFQUFFRixHQUFHLENBQUM7RUFFbkMsSUFBSUksS0FBSyxHQUFHLENBQUMsRUFBRTtJQUNiLEVBQUUsSUFBSSxDQUFDQyxJQUFJO0lBQ1hILElBQUksQ0FBQ0ksSUFBSSxDQUFDLENBQUNOLEdBQUcsRUFBRUMsS0FBSyxDQUFDLENBQUM7RUFDekIsQ0FBQyxNQUFNO0lBQ0xDLElBQUksQ0FBQ0UsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdILEtBQUs7RUFDeEI7RUFDQSxPQUFPLElBQUk7QUFDYjtBQUVBTSxNQUFNLENBQUNDLE9BQU8sR0FBR1QsWUFBWSIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcz82N2NhIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiJdLCJuYW1lcyI6WyJhc3NvY0luZGV4T2YiLCJyZXF1aXJlIiwibGlzdENhY2hlU2V0Iiwia2V5IiwidmFsdWUiLCJkYXRhIiwiX19kYXRhX18iLCJpbmRleCIsInNpemUiLCJwdXNoIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9962\n\n}");
/***/ },
/***/ 8331
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var Hash = __webpack_require__(1388),\n ListCache = __webpack_require__(8448),\n Map = __webpack_require__(588);\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash(),\n 'map': new (Map || ListCache)(),\n 'string': new Hash()\n };\n}\nmodule.exports = mapCacheClear;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzMS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxJQUFJLEdBQUdDLG1CQUFPLENBQUMsSUFBUyxDQUFDO0VBQ3pCQyxTQUFTLEdBQUdELG1CQUFPLENBQUMsSUFBYyxDQUFDO0VBQ25DRSxHQUFHLEdBQUdGLG1CQUFPLENBQUMsR0FBUSxDQUFDOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNHLGFBQWFBLENBQUEsRUFBRztFQUN2QixJQUFJLENBQUNDLElBQUksR0FBRyxDQUFDO0VBQ2IsSUFBSSxDQUFDQyxRQUFRLEdBQUc7SUFDZCxNQUFNLEVBQUUsSUFBSU4sSUFBSSxDQUFELENBQUM7SUFDaEIsS0FBSyxFQUFFLEtBQUtHLEdBQUcsSUFBSUQsU0FBUyxHQUFDO0lBQzdCLFFBQVEsRUFBRSxJQUFJRixJQUFJLENBQUQ7RUFDbkIsQ0FBQztBQUNIO0FBRUFPLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHSixhQUFhIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcz83YzY0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiJdLCJuYW1lcyI6WyJIYXNoIiwicmVxdWlyZSIsIkxpc3RDYWNoZSIsIk1hcCIsIm1hcENhY2hlQ2xlYXIiLCJzaXplIiwiX19kYXRhX18iLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8331\n\n}");
/***/ },
/***/ 1503
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var getMapData = __webpack_require__(1046);\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\nmodule.exports = mapCacheDelete;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxVQUFVLEdBQUdDLG1CQUFPLENBQUMsSUFBZSxDQUFDOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxjQUFjQSxDQUFDQyxHQUFHLEVBQUU7RUFDM0IsSUFBSUMsTUFBTSxHQUFHSixVQUFVLENBQUMsSUFBSSxFQUFFRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQ0EsR0FBRyxDQUFDO0VBQ2pELElBQUksQ0FBQ0UsSUFBSSxJQUFJRCxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUM7RUFDM0IsT0FBT0EsTUFBTTtBQUNmO0FBRUFFLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHTCxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanM/OTNlZCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVEZWxldGU7XG4iXSwibmFtZXMiOlsiZ2V0TWFwRGF0YSIsInJlcXVpcmUiLCJtYXBDYWNoZURlbGV0ZSIsImtleSIsInJlc3VsdCIsInNpemUiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n\n}");
/***/ },
/***/ 9902
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var getMapData = __webpack_require__(1046);\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\nmodule.exports = mapCacheGet;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkwMi5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxVQUFVLEdBQUdDLG1CQUFPLENBQUMsSUFBZSxDQUFDOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxXQUFXQSxDQUFDQyxHQUFHLEVBQUU7RUFDeEIsT0FBT0gsVUFBVSxDQUFDLElBQUksRUFBRUcsR0FBRyxDQUFDLENBQUNDLEdBQUcsQ0FBQ0QsR0FBRyxDQUFDO0FBQ3ZDO0FBRUFFLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHSixXQUFXIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVHZXQuanM/MjQ3OCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlR2V0O1xuIl0sIm5hbWVzIjpbImdldE1hcERhdGEiLCJyZXF1aXJlIiwibWFwQ2FjaGVHZXQiLCJrZXkiLCJnZXQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9902\n\n}");
/***/ },
/***/ 1322
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var getMapData = __webpack_require__(1046);\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\nmodule.exports = mapCacheHas;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTMyMi5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxVQUFVLEdBQUdDLG1CQUFPLENBQUMsSUFBZSxDQUFDOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxXQUFXQSxDQUFDQyxHQUFHLEVBQUU7RUFDeEIsT0FBT0gsVUFBVSxDQUFDLElBQUksRUFBRUcsR0FBRyxDQUFDLENBQUNDLEdBQUcsQ0FBQ0QsR0FBRyxDQUFDO0FBQ3ZDO0FBRUFFLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHSixXQUFXIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVIYXMuanM/YTUyNCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUhhcztcbiJdLCJuYW1lcyI6WyJnZXRNYXBEYXRhIiwicmVxdWlyZSIsIm1hcENhY2hlSGFzIiwia2V5IiwiaGFzIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1322\n\n}");
/***/ },
/***/ 7506
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var getMapData = __webpack_require__(1046);\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\nmodule.exports = mapCacheSet;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUwNi5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxVQUFVLEdBQUdDLG1CQUFPLENBQUMsSUFBZSxDQUFDOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLFdBQVdBLENBQUNDLEdBQUcsRUFBRUMsS0FBSyxFQUFFO0VBQy9CLElBQUlDLElBQUksR0FBR0wsVUFBVSxDQUFDLElBQUksRUFBRUcsR0FBRyxDQUFDO0lBQzVCRyxJQUFJLEdBQUdELElBQUksQ0FBQ0MsSUFBSTtFQUVwQkQsSUFBSSxDQUFDRSxHQUFHLENBQUNKLEdBQUcsRUFBRUMsS0FBSyxDQUFDO0VBQ3BCLElBQUksQ0FBQ0UsSUFBSSxJQUFJRCxJQUFJLENBQUNDLElBQUksSUFBSUEsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDO0VBQ3RDLE9BQU8sSUFBSTtBQUNiO0FBRUFFLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHUCxXQUFXIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanM/MWZjOCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlU2V0O1xuIl0sIm5hbWVzIjpbImdldE1hcERhdGEiLCJyZXF1aXJlIiwibWFwQ2FjaGVTZXQiLCJrZXkiLCJ2YWx1ZSIsImRhdGEiLCJzaXplIiwic2V0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7506\n\n}");
/***/ },
/***/ 2251
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var memoize = __webpack_require__(6157);\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function (key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n var cache = result.cache;\n return result;\n}\nmodule.exports = memoizeCapped;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjI1MS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxPQUFPLEdBQUdDLG1CQUFPLENBQUMsSUFBVyxDQUFDOztBQUVsQztBQUNBLElBQUlDLGdCQUFnQixHQUFHLEdBQUc7O0FBRTFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxhQUFhQSxDQUFDQyxJQUFJLEVBQUU7RUFDM0IsSUFBSUMsTUFBTSxHQUFHTCxPQUFPLENBQUNJLElBQUksRUFBRSxVQUFTRSxHQUFHLEVBQUU7SUFDdkMsSUFBSUMsS0FBSyxDQUFDQyxJQUFJLEtBQUtOLGdCQUFnQixFQUFFO01BQ25DSyxLQUFLLENBQUNFLEtBQUssQ0FBQyxDQUFDO0lBQ2Y7SUFDQSxPQUFPSCxHQUFHO0VBQ1osQ0FBQyxDQUFDO0VBRUYsSUFBSUMsS0FBSyxHQUFHRixNQUFNLENBQUNFLEtBQUs7RUFDeEIsT0FBT0YsTUFBTTtBQUNmO0FBRUFLLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHUixhQUFhIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWVtb2l6ZUNhcHBlZC5qcz8yMzRkIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBtZW1vaXplID0gcmVxdWlyZSgnLi9tZW1vaXplJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBtYXhpbXVtIG1lbW9pemUgY2FjaGUgc2l6ZS4gKi9cbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcbiAqIGNhY2hlIHdoZW4gaXQgZXhjZWVkcyBgTUFYX01FTU9JWkVfU0laRWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtZW1vaXplQ2FwcGVkKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IG1lbW9pemUoZnVuYywgZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKGNhY2hlLnNpemUgPT09IE1BWF9NRU1PSVpFX1NJWkUpIHtcbiAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH0pO1xuXG4gIHZhciBjYWNoZSA9IHJlc3VsdC5jYWNoZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplQ2FwcGVkO1xuIl0sIm5hbWVzIjpbIm1lbW9pemUiLCJyZXF1aXJlIiwiTUFYX01FTU9JWkVfU0laRSIsIm1lbW9pemVDYXBwZWQiLCJmdW5jIiwicmVzdWx0Iiwia2V5IiwiY2FjaGUiLCJzaXplIiwiY2xlYXIiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2251\n\n}");
/***/ },
/***/ 7615
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var getNative = __webpack_require__(8345);\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\nmodule.exports = nativeCreate;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzYxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxTQUFTLEdBQUdDLG1CQUFPLENBQUMsSUFBYyxDQUFDOztBQUV2QztBQUNBLElBQUlDLFlBQVksR0FBR0YsU0FBUyxDQUFDRyxNQUFNLEVBQUUsUUFBUSxDQUFDO0FBRTlDQyxNQUFNLENBQUNDLE9BQU8sR0FBR0gsWUFBWSIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUNyZWF0ZS5qcz82MDQ0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVDcmVhdGU7XG4iXSwibmFtZXMiOlsiZ2V0TmF0aXZlIiwicmVxdWlyZSIsIm5hdGl2ZUNyZWF0ZSIsIk9iamVjdCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7615\n\n}");
/***/ },
/***/ 6919
(module) {
eval("{/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\nmodule.exports = objectToString;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjkxOS5qcyIsIm5hbWVzIjpbIm9iamVjdFByb3RvIiwiT2JqZWN0IiwicHJvdG90eXBlIiwibmF0aXZlT2JqZWN0VG9TdHJpbmciLCJ0b1N0cmluZyIsIm9iamVjdFRvU3RyaW5nIiwidmFsdWUiLCJjYWxsIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanM/MjlmMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RUb1N0cmluZztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxJQUFJQSxXQUFXLEdBQUdDLE1BQU0sQ0FBQ0MsU0FBUzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlDLG9CQUFvQixHQUFHSCxXQUFXLENBQUNJLFFBQVE7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsY0FBY0EsQ0FBQ0MsS0FBSyxFQUFFO0VBQzdCLE9BQU9ILG9CQUFvQixDQUFDSSxJQUFJLENBQUNELEtBQUssQ0FBQztBQUN6QztBQUVBRSxNQUFNLENBQUNDLE9BQU8sR0FBR0osY0FBYyIsImlnbm9yZUxpc3QiOltdfQ==\n//# sourceURL=webpack-internal:///6919\n\n}");
/***/ },
/***/ 3908
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var baseGet = __webpack_require__(1009),\n baseSlice = __webpack_require__(4599);\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\nmodule.exports = parent;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxPQUFPLEdBQUdDLG1CQUFPLENBQUMsSUFBWSxDQUFDO0VBQy9CQyxTQUFTLEdBQUdELG1CQUFPLENBQUMsSUFBYyxDQUFDOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0UsTUFBTUEsQ0FBQ0MsTUFBTSxFQUFFQyxJQUFJLEVBQUU7RUFDNUIsT0FBT0EsSUFBSSxDQUFDQyxNQUFNLEdBQUcsQ0FBQyxHQUFHRixNQUFNLEdBQUdKLE9BQU8sQ0FBQ0ksTUFBTSxFQUFFRixTQUFTLENBQUNHLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRTtBQUVBRSxNQUFNLENBQUNDLE9BQU8sR0FBR0wsTUFBTSIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3BhcmVudC5qcz84Mjk2Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpLFxuICAgIGJhc2VTbGljZSA9IHJlcXVpcmUoJy4vX2Jhc2VTbGljZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIHBhcmVudCB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgdmFsdWUgb2YuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGFyZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiBwYXJlbnQob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBwYXRoLmxlbmd0aCA8IDIgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIl0sIm5hbWVzIjpbImJhc2VHZXQiLCJyZXF1aXJlIiwiYmFzZVNsaWNlIiwicGFyZW50Iiwib2JqZWN0IiwicGF0aCIsImxlbmd0aCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3908\n\n}");
/***/ },
/***/ 2912
(module, __unused_webpack_exports, __webpack_require__) {
eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar freeGlobal = __webpack_require__(6617);\n\n/** Detect free variable `self`. */\nvar freeSelf = (typeof self === \"undefined\" ? \"undefined\" : _typeof(self)) == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\nmodule.exports = root;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjkxMi5qcyIsIm1hcHBpbmdzIjoiO0FBQUEsSUFBSUEsVUFBVSxHQUFHQyxtQkFBTyxDQUFDLElBQWUsQ0FBQzs7QUFFekM7QUFDQSxJQUFJQyxRQUFRLEdBQUcsUUFBT0MsSUFBSSxpQ0FBQUMsT0FBQSxDQUFKRCxJQUFJLE1BQUksUUFBUSxJQUFJQSxJQUFJLElBQUlBLElBQUksQ0FBQ0UsTUFBTSxLQUFLQSxNQUFNLElBQUlGLElBQUk7O0FBRWhGO0FBQ0EsSUFBSUcsSUFBSSxHQUFHTixVQUFVLElBQUlFLFFBQVEsSUFBSUssUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFFOURDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHSCxJQUFJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcz8yYjNlIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiJdLCJuYW1lcyI6WyJmcmVlR2xvYmFsIiwicmVxdWlyZSIsImZyZWVTZWxmIiwic2VsZiIsIl90eXBlb2YiLCJPYmplY3QiLCJyb290IiwiRnVuY3Rpb24iLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2912\n\n}");
/***/ },
/***/ 3031
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var memoizeCapped = __webpack_require__(2251);\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function (string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function (match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : number || match);\n });\n return result;\n});\nmodule.exports = stringToPath;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzAzMS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxhQUFhLEdBQUdDLG1CQUFPLENBQUMsSUFBa0IsQ0FBQzs7QUFFL0M7QUFDQSxJQUFJQyxVQUFVLEdBQUcsa0dBQWtHOztBQUVuSDtBQUNBLElBQUlDLFlBQVksR0FBRyxVQUFVOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlDLFlBQVksR0FBR0osYUFBYSxDQUFDLFVBQVNLLE1BQU0sRUFBRTtFQUNoRCxJQUFJQyxNQUFNLEdBQUcsRUFBRTtFQUNmLElBQUlELE1BQU0sQ0FBQ0UsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTO0lBQ3ZDRCxNQUFNLENBQUNFLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDakI7RUFDQUgsTUFBTSxDQUFDSSxPQUFPLENBQUNQLFVBQVUsRUFBRSxVQUFTUSxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxTQUFTLEVBQUU7SUFDbkVQLE1BQU0sQ0FBQ0UsSUFBSSxDQUFDSSxLQUFLLEdBQUdDLFNBQVMsQ0FBQ0osT0FBTyxDQUFDTixZQUFZLEVBQUUsSUFBSSxDQUFDLEdBQUlRLE1BQU0sSUFBSUQsS0FBTSxDQUFDO0VBQ2hGLENBQUMsQ0FBQztFQUNGLE9BQU9KLE1BQU07QUFDZixDQUFDLENBQUM7QUFFRlEsTUFBTSxDQUFDQyxPQUFPLEdBQUdYLFlBQVkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb1BhdGguanM/MThkOCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWVtb2l6ZUNhcHBlZCA9IHJlcXVpcmUoJy4vX21lbW9pemVDYXBwZWQnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1RvUGF0aDtcbiJdLCJuYW1lcyI6WyJtZW1vaXplQ2FwcGVkIiwicmVxdWlyZSIsInJlUHJvcE5hbWUiLCJyZUVzY2FwZUNoYXIiLCJzdHJpbmdUb1BhdGgiLCJzdHJpbmciLCJyZXN1bHQiLCJjaGFyQ29kZUF0IiwicHVzaCIsInJlcGxhY2UiLCJtYXRjaCIsIm51bWJlciIsInF1b3RlIiwic3ViU3RyaW5nIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3031\n\n}");
/***/ },
/***/ 9690
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var isSymbol = __webpack_require__(8889);\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result;\n}\nmodule.exports = toKey;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY5MC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxRQUFRLEdBQUdDLG1CQUFPLENBQUMsSUFBWSxDQUFDOztBQUVwQztBQUNBLElBQUlDLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7QUFFcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxLQUFLQSxDQUFDQyxLQUFLLEVBQUU7RUFDcEIsSUFBSSxPQUFPQSxLQUFLLElBQUksUUFBUSxJQUFJSixRQUFRLENBQUNJLEtBQUssQ0FBQyxFQUFFO0lBQy9DLE9BQU9BLEtBQUs7RUFDZDtFQUNBLElBQUlDLE1BQU0sR0FBSUQsS0FBSyxHQUFHLEVBQUc7RUFDekIsT0FBUUMsTUFBTSxJQUFJLEdBQUcsSUFBSyxDQUFDLEdBQUdELEtBQUssSUFBSyxDQUFDRixRQUFRLEdBQUksSUFBSSxHQUFHRyxNQUFNO0FBQ3BFO0FBRUFDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHSixLQUFLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9LZXkuanM/ZjRkNiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cbiAqL1xuZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvS2V5O1xuIl0sIm5hbWVzIjpbImlzU3ltYm9sIiwicmVxdWlyZSIsIklORklOSVRZIiwidG9LZXkiLCJ2YWx1ZSIsInJlc3VsdCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9690\n\n}");
/***/ },
/***/ 7180
(module) {
eval("{/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return func + '';\n } catch (e) {}\n }\n return '';\n}\nmodule.exports = toSource;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzE4MC5qcyIsIm5hbWVzIjpbImZ1bmNQcm90byIsIkZ1bmN0aW9uIiwicHJvdG90eXBlIiwiZnVuY1RvU3RyaW5nIiwidG9TdHJpbmciLCJ0b1NvdXJjZSIsImZ1bmMiLCJjYWxsIiwiZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzP2RjNTciXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU291cmNlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLElBQUlBLFNBQVMsR0FBR0MsUUFBUSxDQUFDQyxTQUFTOztBQUVsQztBQUNBLElBQUlDLFlBQVksR0FBR0gsU0FBUyxDQUFDSSxRQUFROztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLFFBQVFBLENBQUNDLElBQUksRUFBRTtFQUN0QixJQUFJQSxJQUFJLElBQUksSUFBSSxFQUFFO0lBQ2hCLElBQUk7TUFDRixPQUFPSCxZQUFZLENBQUNJLElBQUksQ0FBQ0QsSUFBSSxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxPQUFPRSxDQUFDLEVBQUUsQ0FBQztJQUNiLElBQUk7TUFDRixPQUFRRixJQUFJLEdBQUcsRUFBRTtJQUNuQixDQUFDLENBQUMsT0FBT0UsQ0FBQyxFQUFFLENBQUM7RUFDZjtFQUNBLE9BQU8sRUFBRTtBQUNYO0FBRUFDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHTCxRQUFRIiwiaWdub3JlTGlzdCI6W119\n//# sourceURL=webpack-internal:///7180\n\n}");
/***/ },
/***/ 39
(module) {
eval("{/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\nmodule.exports = trimmedEndIndex;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkuanMiLCJuYW1lcyI6WyJyZVdoaXRlc3BhY2UiLCJ0cmltbWVkRW5kSW5kZXgiLCJzdHJpbmciLCJpbmRleCIsImxlbmd0aCIsInRlc3QiLCJjaGFyQXQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvbG9kYXNoL190cmltbWVkRW5kSW5kZXguanM/NGNlZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVXNlZCB0byBtYXRjaCBhIHNpbmdsZSB3aGl0ZXNwYWNlIGNoYXJhY3Rlci4gKi9cbnZhciByZVdoaXRlc3BhY2UgPSAvXFxzLztcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltRW5kYCB0byBnZXQgdGhlIGluZGV4IG9mIHRoZSBsYXN0IG5vbi13aGl0ZXNwYWNlXG4gKiBjaGFyYWN0ZXIgb2YgYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyLlxuICovXG5mdW5jdGlvbiB0cmltbWVkRW5kSW5kZXgoc3RyaW5nKSB7XG4gIHZhciBpbmRleCA9IHN0cmluZy5sZW5ndGg7XG5cbiAgd2hpbGUgKGluZGV4LS0gJiYgcmVXaGl0ZXNwYWNlLnRlc3Qoc3RyaW5nLmNoYXJBdChpbmRleCkpKSB7fVxuICByZXR1cm4gaW5kZXg7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdHJpbW1lZEVuZEluZGV4O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLElBQUlBLFlBQVksR0FBRyxJQUFJOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsZUFBZUEsQ0FBQ0MsTUFBTSxFQUFFO0VBQy9CLElBQUlDLEtBQUssR0FBR0QsTUFBTSxDQUFDRSxNQUFNO0VBRXpCLE9BQU9ELEtBQUssRUFBRSxJQUFJSCxZQUFZLENBQUNLLElBQUksQ0FBQ0gsTUFBTSxDQUFDSSxNQUFNLENBQUNILEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUM1RCxPQUFPQSxLQUFLO0FBQ2Q7QUFFQUksTUFBTSxDQUFDQyxPQUFPLEdBQUdQLGVBQWUiLCJpZ25vcmVMaXN0IjpbXX0=\n//# sourceURL=webpack-internal:///39\n\n}");
/***/ },
/***/ 4902
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var isObject = __webpack_require__(3926),\n now = __webpack_require__(4493),\n toNumber = __webpack_require__(4121);\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;\n }\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;\n }\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\nmodule.exports = debounce;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUtBLENBQUEsRUFBRztJQUNmLE9BQU94QixPQUFPLEtBQUtXLFNBQVMsR0FBR1osTUFBTSxHQUFHc0IsWUFBWSxDQUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUM3RDtFQUVBLFNBQVN5QyxTQUFTQSxDQUFBLEVBQUc7SUFDbkIsSUFBSWpCLElBQUksR0FBR3hCLEdBQUcsQ0FBQyxDQUFDO01BQ1owQyxVQUFVLEdBQUdOLFlBQVksQ0FBQ1osSUFBSSxDQUFDO0lBRW5DWixRQUFRLEdBQUcrQixTQUFTO0lBQ3BCOUIsUUFBUSxHQUFHLElBQUk7SUFDZkksWUFBWSxHQUFHTyxJQUFJO0lBRW5CLElBQUlrQixVQUFVLEVBQUU7TUFDZCxJQUFJMUIsT0FBTyxLQUFLVyxTQUFTLEVBQUU7UUFDekIsT0FBT0UsV0FBVyxDQUFDWixZQUFZLENBQUM7TUFDbEM7TUFDQSxJQUFJRyxNQUFNLEVBQUU7UUFDVjtRQUNBbUIsWUFBWSxDQUFDdkIsT0FBTyxDQUFDO1FBQ3JCQSxPQUFPLEdBQUdjLFVBQVUsQ0FBQ0MsWUFBWSxFQUFFckIsSUFBSSxDQUFDO1FBQ3hDLE9BQU9hLFVBQVUsQ0FBQ04sWUFBWSxDQUFDO01BQ2pDO0lBQ0Y7SUFDQSxJQUFJRCxPQUFPLEtBQUtXLFNBQVMsRUFBRTtNQUN6QlgsT0FBTyxHQUFHYyxVQUFVLENBQUNDLFlBQVksRUFBRXJCLElBQUksQ0FBQztJQUMxQztJQUNBLE9BQU9LLE1BQU07RUFDZjtFQUNBMEIsU0FBUyxDQUFDSCxNQUFNLEdBQUdBLE1BQU07RUFDekJHLFNBQVMsQ0FBQ0QsS0FBSyxHQUFHQSxLQUFLO0VBQ3ZCLE9BQU9DLFNBQVM7QUFDbEI7QUFFQUcsTUFBTSxDQUFDQyxPQUFPLEdBQUdyQyxRQUFRIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9kZWJvdW5jZS5qcz9iMDQ3Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBub3cgPSByZXF1aXJlKCcuL25vdycpLFxuICAgIHRvTnVtYmVyID0gcmVxdWlyZSgnLi90b051bWJlcicpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXgsXG4gICAgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlYm91bmNlZCBmdW5jdGlvbiB0aGF0IGRlbGF5cyBpbnZva2luZyBgZnVuY2AgdW50aWwgYWZ0ZXIgYHdhaXRgXG4gKiBtaWxsaXNlY29uZHMgaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlIGRlYm91bmNlZCBmdW5jdGlvbiB3YXNcbiAqIGludm9rZWQuIFRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gY29tZXMgd2l0aCBhIGBjYW5jZWxgIG1ldGhvZCB0byBjYW5jZWxcbiAqIGRlbGF5ZWQgYGZ1bmNgIGludm9jYXRpb25zIGFuZCBhIGBmbHVzaGAgbWV0aG9kIHRvIGltbWVkaWF0ZWx5IGludm9rZSB0aGVtLlxuICogUHJvdmlkZSBgb3B0aW9uc2AgdG8gaW5kaWNhdGUgd2hldGhlciBgZnVuY2Agc2hvdWxkIGJlIGludm9rZWQgb24gdGhlXG4gKiBsZWFkaW5nIGFuZC9vciB0cmFpbGluZyBlZGdlIG9mIHRoZSBgd2FpdGAgdGltZW91dC4gVGhlIGBmdW5jYCBpcyBpbnZva2VkXG4gKiB3aXRoIHRoZSBsYXN0IGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uLiBTdWJzZXF1ZW50XG4gKiBjYWxscyB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYFxuICogaW52b2NhdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogSWYgYGxlYWRpbmdgIGFuZCBgdHJhaWxpbmdgIG9wdGlvbnMgYXJlIGB0cnVlYCwgYGZ1bmNgIGlzXG4gKiBpbnZva2VkIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIGRlYm91bmNlZCBmdW5jdGlvblxuICogaXMgaW52b2tlZCBtb3JlIHRoYW4gb25jZSBkdXJpbmcgdGhlIGB3YWl0YCB0aW1lb3V0LlxuICpcbiAqIElmIGB3YWl0YCBpcyBgMGAgYW5kIGBsZWFkaW5nYCBpcyBgZmFsc2VgLCBgZnVuY2AgaW52b2NhdGlvbiBpcyBkZWZlcnJlZFxuICogdW50aWwgdG8gdGhlIG5leHQgdGljaywgc2ltaWxhciB0byBgc2V0VGltZW91dGAgd2l0aCBhIHRpbWVvdXQgb2YgYDBgLlxuICpcbiAqIFNlZSBbRGF2aWQgQ29yYmFjaG8ncyBhcnRpY2xlXShodHRwczovL2Nzcy10cmlja3MuY29tL2RlYm91bmNpbmctdGhyb3R0bGluZy1leHBsYWluZWQtZXhhbXBsZXMvKVxuICogZm9yIGRldGFpbHMgb3ZlciB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgXy5kZWJvdW5jZWAgYW5kIGBfLnRocm90dGxlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlYm91bmNlLlxuICogQHBhcmFtIHtudW1iZXJ9IFt3YWl0PTBdIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9ZmFsc2VdXG4gKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFdhaXRdXG4gKiAgVGhlIG1heGltdW0gdGltZSBgZnVuY2AgaXMgYWxsb3dlZCB0byBiZSBkZWxheWVkIGJlZm9yZSBpdCdzIGludm9rZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRyYWlsaW5nPXRydWVdXG4gKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGRlYm91bmNlZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogLy8gQXZvaWQgY29zdGx5IGNhbGN1bGF0aW9ucyB3aGlsZSB0aGUgd2luZG93IHNpemUgaXMgaW4gZmx1eC5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdyZXNpemUnLCBfLmRlYm91bmNlKGNhbGN1bGF0ZUxheW91dCwgMTUwKSk7XG4gKlxuICogLy8gSW52b2tlIGBzZW5kTWFpbGAgd2hlbiBjbGlja2VkLCBkZWJvdW5jaW5nIHN1YnNlcXVlbnQgY2FsbHMuXG4gKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgXy5kZWJvdW5jZShzZW5kTWFpbCwgMzAwLCB7XG4gKiAgICdsZWFkaW5nJzogdHJ1ZSxcbiAqICAgJ3RyYWlsaW5nJzogZmFsc2VcbiAqIH0pKTtcbiAqXG4gKiAvLyBFbnN1cmUgYGJhdGNoTG9nYCBpcyBpbnZva2VkIG9uY2UgYWZ0ZXIgMSBzZWNvbmQgb2YgZGVib3VuY2VkIGNhbGxzLlxuICogdmFyIGRlYm91bmNlZCA9IF8uZGVib3VuY2UoYmF0Y2hMb2csIDI1MCwgeyAnbWF4V2FpdCc6IDEwMDAgfSk7XG4gKiB2YXIgc291cmNlID0gbmV3IEV2ZW50U291cmNlKCcvc3RyZWFtJyk7XG4gKiBqUXVlcnkoc291cmNlKS5vbignbWVzc2FnZScsIGRlYm91bmNlZCk7XG4gKlxuICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyBkZWJvdW5jZWQgaW52b2NhdGlvbi5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIGRlYm91bmNlZC5jYW5jZWwpO1xuICovXG5mdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gIHZhciBsYXN0QXJncyxcbiAgICAgIGxhc3RUaGlzLFxuICAgICAgbWF4V2FpdCxcbiAgICAgIHJlc3VsdCxcbiAgICAgIHRpbWVySWQsXG4gICAgICBsYXN0Q2FsbFRpbWUsXG4gICAgICBsYXN0SW52b2tlVGltZSA9IDAsXG4gICAgICBsZWFkaW5nID0gZmFsc2UsXG4gICAgICBtYXhpbmcgPSBmYWxzZSxcbiAgICAgIHRyYWlsaW5nID0gdHJ1ZTtcblxuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB3YWl0ID0gdG9OdW1iZXIod2FpdCkgfHwgMDtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgbGVhZGluZyA9ICEhb3B0aW9ucy5sZWFkaW5nO1xuICAgIG1heGluZyA9ICdtYXhXYWl0JyBpbiBvcHRpb25zO1xuICAgIG1heFdhaXQgPSBtYXhpbmcgPyBuYXRpdmVNYXgodG9OdW1iZXIob3B0aW9ucy5tYXhXYWl0KSB8fCAwLCB3YWl0KSA6IG1heFdhaXQ7XG4gICAgdHJhaWxpbmcgPSAndHJhaWxpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMudHJhaWxpbmcgOiB0cmFpbGluZztcbiAgfVxuXG4gIGZ1bmN0aW9uIGludm9rZUZ1bmModGltZSkge1xuICAgIHZhciBhcmdzID0gbGFzdEFyZ3MsXG4gICAgICAgIHRoaXNBcmcgPSBsYXN0VGhpcztcblxuICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxlYWRpbmdFZGdlKHRpbWUpIHtcbiAgICAvLyBSZXNldCBhbnkgYG1heFdhaXRgIHRpbWVyLlxuICAgIGxhc3RJbnZva2VUaW1lID0gdGltZTtcbiAgICAvLyBTdGFydCB0aGUgdGltZXIgZm9yIHRoZSB0cmFpbGluZyBlZGdlLlxuICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgLy8gSW52b2tlIHRoZSBsZWFkaW5nIGVkZ2UuXG4gICAgcmV0dXJuIGxlYWRpbmcgPyBpbnZva2VGdW5jKHRpbWUpIDogcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtYWluaW5nV2FpdCh0aW1lKSB7XG4gICAgdmFyIHRpbWVTaW5jZUxhc3RDYWxsID0gdGltZSAtIGxhc3RDYWxsVGltZSxcbiAgICAgICAgdGltZVNpbmNlTGFzdEludm9rZSA9IHRpbWUgLSBsYXN0SW52b2tlVGltZSxcbiAgICAgICAgdGltZVdhaXRpbmcgPSB3YWl0IC0gdGltZVNpbmNlTGFzdENhbGw7XG5cbiAgICByZXR1cm4gbWF4aW5nXG4gICAgICA/IG5hdGl2ZU1pbih0aW1lV2FpdGluZywgbWF4V2FpdCAtIHRpbWVTaW5jZUxhc3RJbnZva2UpXG4gICAgICA6IHRpbWVXYWl0aW5nO1xuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkSW52b2tlKHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lO1xuXG4gICAgLy8gRWl0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwsIGFjdGl2aXR5IGhhcyBzdG9wcGVkIGFuZCB3ZSdyZSBhdCB0aGVcbiAgICAvLyB0cmFpbGluZyBlZGdlLCB0aGUgc3lzdGVtIHRpbWUgaGFzIGdvbmUgYmFja3dhcmRzIGFuZCB3ZSdyZSB0cmVhdGluZ1xuICAgIC8vIGl0IGFzIHRoZSB0cmFpbGluZyBlZGdlLCBvciB3ZSd2ZSBoaXQgdGhlIGBtYXhXYWl0YCBsaW1pdC5cbiAgICByZXR1cm4gKGxhc3RDYWxsVGltZSA9PT0gdW5kZWZpbmVkIHx8ICh0aW1lU2luY2VMYXN0Q2FsbCA+PSB3YWl0KSB8fFxuICAgICAgKHRpbWVTaW5jZUxhc3RDYWxsIDwgMCkgfHwgKG1heGluZyAmJiB0aW1lU2luY2VMYXN0SW52b2tlID49IG1heFdhaXQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpbWVyRXhwaXJlZCgpIHtcbiAgICB2YXIgdGltZSA9IG5vdygpO1xuICAgIGlmIChzaG91bGRJbnZva2UodGltZSkpIHtcbiAgICAgIHJldHVybiB0cmFpbGluZ0VkZ2UodGltZSk7XG4gICAgfVxuICAgIC8vIFJlc3RhcnQgdGhlIHRpbWVyLlxuICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgcmVtYWluaW5nV2FpdCh0aW1lKSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFpbGluZ0VkZ2UodGltZSkge1xuICAgIHRpbWVySWQgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBPbmx5IGludm9rZSBpZiB3ZSBoYXZlIGBsYXN0QXJnc2Agd2hpY2ggbWVhbnMgYGZ1bmNgIGhhcyBiZWVuXG4gICAgLy8gZGVib3VuY2VkIGF0IGxlYXN0IG9uY2UuXG4gICAgaWYgKHRyYWlsaW5nICYmIGxhc3RBcmdzKSB7XG4gICAgICByZXR1cm4gaW52b2tlRnVuYyh0aW1lKTtcbiAgICB9XG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGlmICh0aW1lcklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICB9XG4gICAgbGFzdEludm9rZVRpbWUgPSAwO1xuICAgIGxhc3RBcmdzID0gbGFzdENhbGxUaW1lID0gbGFzdFRoaXMgPSB0aW1lcklkID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgcmV0dXJuIHRpbWVySWQgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IHRyYWlsaW5nRWRnZShub3coKSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWJvdW5jZWQoKSB7XG4gICAgdmFyIHRpbWUgPSBub3coKSxcbiAgICAgICAgaXNJbnZva2luZyA9IHNob3VsZEludm9rZSh0aW1lKTtcblxuICAgIGxhc3RBcmdzID0gYXJndW1lbnRzO1xuICAgIGxhc3RUaGlzID0gdGhpcztcbiAgICBsYXN0Q2FsbFRpbWUgPSB0aW1lO1xuXG4gICAgaWYgKGlzSW52b2tpbmcpIHtcbiAgICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGxlYWRpbmdFZGdlKGxhc3RDYWxsVGltZSk7XG4gICAgICB9XG4gICAgICBpZiAobWF4aW5nKSB7XG4gICAgICAgIC8vIEhhbmRsZSBpbnZvY2F0aW9ucyBpbiBhIHRpZ2h0IGxvb3AuXG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAgICAgcmV0dXJuIGludm9rZUZ1bmMobGFzdENhbGxUaW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBkZWJvdW5jZWQuY2FuY2VsID0gY2FuY2VsO1xuICBkZWJvdW5jZWQuZmx1c2ggPSBmbHVzaDtcbiAgcmV0dXJuIGRlYm91bmNlZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkZWJvdW5jZTtcbiJdLCJuYW1lcyI6WyJpc09iamVjdCIsInJlcXVpcmUiLCJub3ciLCJ0b051bWJlciIsIkZVTkNfRVJST1JfVEVYVCIsIm5hdGl2ZU1heCIsIk1hdGgiLCJtYXgiLCJuYXRpdmVNaW4iLCJtaW4iLCJkZWJvdW5jZSIsImZ1bmMiLCJ3YWl0Iiwib3B0aW9ucyIsImxhc3RBcmdzIiwibGFzdFRoaXMiLCJtYXhXYWl0IiwicmVzdWx0IiwidGltZXJJZCIsImxhc3RDYWxsVGltZSIsImxhc3RJbnZva2VUaW1lIiwibGVhZGluZyIsIm1heGluZyIsInRyYWlsaW5nIiwiVHlwZUVycm9yIiwiaW52b2tlRnVuYyIsInRpbWUiLCJhcmdzIiwidGhpc0FyZyIsInVuZGVmaW5lZCIsImFwcGx5IiwibGVhZGluZ0VkZ2UiLCJzZXRUaW1lb3V0IiwidGltZXJFeHBpcmVkIiwicmVtYWluaW5nV2FpdCIsInRpbWVTaW5jZUxhc3RDYWxsIiwidGltZVNpbmNlTGFzdEludm9rZSIsInRpbWVXYWl0aW5nIiwic2hvdWxkSW52b2tlIiwidHJhaWxpbmdFZGdlIiwiY2FuY2VsIiwiY2xlYXJUaW1lb3V0IiwiZmx1c2giLCJkZWJvdW5jZWQiLCJpc0ludm9raW5nIiwiYXJndW1lbnRzIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4902\n\n}");
/***/ },
/***/ 547
(module) {
eval("{/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || value !== value && other !== other;\n}\nmodule.exports = eq;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQ3LmpzIiwibmFtZXMiOlsiZXEiLCJ2YWx1ZSIsIm90aGVyIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9lcS5qcz85NjM4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsRUFBRUEsQ0FBQ0MsS0FBSyxFQUFFQyxLQUFLLEVBQUU7RUFDeEIsT0FBT0QsS0FBSyxLQUFLQyxLQUFLLElBQUtELEtBQUssS0FBS0EsS0FBSyxJQUFJQyxLQUFLLEtBQUtBLEtBQU07QUFDaEU7QUFFQUMsTUFBTSxDQUFDQyxPQUFPLEdBQUdKLEVBQUUiLCJpZ25vcmVMaXN0IjpbXX0=\n//# sourceURL=webpack-internal:///547\n\n}");
/***/ },
/***/ 2140
(module) {
eval("{/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\nmodule.exports = isArray;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE0MC5qcyIsIm5hbWVzIjpbImlzQXJyYXkiLCJBcnJheSIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcz82NzQ3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxPQUFPLEdBQUdDLEtBQUssQ0FBQ0QsT0FBTztBQUUzQkUsTUFBTSxDQUFDQyxPQUFPLEdBQUdILE9BQU8iLCJpZ25vcmVMaXN0IjpbXX0=\n//# sourceURL=webpack-internal:///2140\n\n}");
/***/ },
/***/ 7333
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var baseGetTag = __webpack_require__(8409),\n isObject = __webpack_require__(3926);\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\nmodule.exports = isFunction;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMzMy5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxVQUFVLEdBQUdDLG1CQUFPLENBQUMsSUFBZSxDQUFDO0VBQ3JDQyxRQUFRLEdBQUdELG1CQUFPLENBQUMsSUFBWSxDQUFDOztBQUVwQztBQUNBLElBQUlFLFFBQVEsR0FBRyx3QkFBd0I7RUFDbkNDLE9BQU8sR0FBRyxtQkFBbUI7RUFDN0JDLE1BQU0sR0FBRyw0QkFBNEI7RUFDckNDLFFBQVEsR0FBRyxnQkFBZ0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxVQUFVQSxDQUFDQyxLQUFLLEVBQUU7RUFDekIsSUFBSSxDQUFDTixRQUFRLENBQUNNLEtBQUssQ0FBQyxFQUFFO0lBQ3BCLE9BQU8sS0FBSztFQUNkO0VBQ0E7RUFDQTtFQUNBLElBQUlDLEdBQUcsR0FBR1QsVUFBVSxDQUFDUSxLQUFLLENBQUM7RUFDM0IsT0FBT0MsR0FBRyxJQUFJTCxPQUFPLElBQUlLLEdBQUcsSUFBSUosTUFBTSxJQUFJSSxHQUFHLElBQUlOLFFBQVEsSUFBSU0sR0FBRyxJQUFJSCxRQUFRO0FBQzlFO0FBRUFJLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHSixVQUFVIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzPzk1MjAiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiJdLCJuYW1lcyI6WyJiYXNlR2V0VGFnIiwicmVxdWlyZSIsImlzT2JqZWN0IiwiYXN5bmNUYWciLCJmdW5jVGFnIiwiZ2VuVGFnIiwicHJveHlUYWciLCJpc0Z1bmN0aW9uIiwidmFsdWUiLCJ0YWciLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7333\n\n}");
/***/ },
/***/ 3926
(module) {
eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = _typeof(value);\n return value != null && (type == 'object' || type == 'function');\n}\nmodule.exports = isObject;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkyNi5qcyIsIm5hbWVzIjpbImlzT2JqZWN0IiwidmFsdWUiLCJ0eXBlIiwiX3R5cGVvZiIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanM/MWE4YyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdDtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsUUFBUUEsQ0FBQ0MsS0FBSyxFQUFFO0VBQ3ZCLElBQUlDLElBQUksR0FBQUMsT0FBQSxDQUFVRixLQUFLO0VBQ3ZCLE9BQU9BLEtBQUssSUFBSSxJQUFJLEtBQUtDLElBQUksSUFBSSxRQUFRLElBQUlBLElBQUksSUFBSSxVQUFVLENBQUM7QUFDbEU7QUFFQUUsTUFBTSxDQUFDQyxPQUFPLEdBQUdMLFFBQVEiLCJpZ25vcmVMaXN0IjpbXX0=\n//# sourceURL=webpack-internal:///3926\n\n}");
/***/ },
/***/ 8593
(module) {
eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && _typeof(value) == 'object';\n}\nmodule.exports = isObjectLike;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODU5My5qcyIsIm5hbWVzIjpbImlzT2JqZWN0TGlrZSIsInZhbHVlIiwiX3R5cGVvZiIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzPzEzMTAiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3RMaWtlO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsWUFBWUEsQ0FBQ0MsS0FBSyxFQUFFO0VBQzNCLE9BQU9BLEtBQUssSUFBSSxJQUFJLElBQUlDLE9BQUEsQ0FBT0QsS0FBSyxLQUFJLFFBQVE7QUFDbEQ7QUFFQUUsTUFBTSxDQUFDQyxPQUFPLEdBQUdKLFlBQVkiLCJpZ25vcmVMaXN0IjpbXX0=\n//# sourceURL=webpack-internal:///8593\n\n}");
/***/ },
/***/ 8889
(module, __unused_webpack_exports, __webpack_require__) {
eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar baseGetTag = __webpack_require__(8409),\n isObjectLike = __webpack_require__(8593);\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return _typeof(value) == 'symbol' || isObjectLike(value) && baseGetTag(value) == symbolTag;\n}\nmodule.exports = isSymbol;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODg4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQUEsSUFBSUEsVUFBVSxHQUFHQyxtQkFBTyxDQUFDLElBQWUsQ0FBQztFQUNyQ0MsWUFBWSxHQUFHRCxtQkFBTyxDQUFDLElBQWdCLENBQUM7O0FBRTVDO0FBQ0EsSUFBSUUsU0FBUyxHQUFHLGlCQUFpQjs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLFFBQVFBLENBQUNDLEtBQUssRUFBRTtFQUN2QixPQUFPQyxPQUFBLENBQU9ELEtBQUssS0FBSSxRQUFRLElBQzVCSCxZQUFZLENBQUNHLEtBQUssQ0FBQyxJQUFJTCxVQUFVLENBQUNLLEtBQUssQ0FBQyxJQUFJRixTQUFVO0FBQzNEO0FBRUFJLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHSixRQUFRIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcz9mZmQ2Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N5bWJvbDtcbiJdLCJuYW1lcyI6WyJiYXNlR2V0VGFnIiwicmVxdWlyZSIsImlzT2JqZWN0TGlrZSIsInN5bWJvbFRhZyIsImlzU3ltYm9sIiwidmFsdWUiLCJfdHlwZW9mIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8889\n\n}");
/***/ },
/***/ 3449
(module) {
eval("{/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\nmodule.exports = last;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0OS5qcyIsIm5hbWVzIjpbImxhc3QiLCJhcnJheSIsImxlbmd0aCIsInVuZGVmaW5lZCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbGFzdC5qcz80NDE2Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2V0cyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ubGFzdChbMSwgMiwgM10pO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiBsYXN0KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxhc3Q7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxJQUFJQSxDQUFDQyxLQUFLLEVBQUU7RUFDbkIsSUFBSUMsTUFBTSxHQUFHRCxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsR0FBR0EsS0FBSyxDQUFDQyxNQUFNO0VBQzdDLE9BQU9BLE1BQU0sR0FBR0QsS0FBSyxDQUFDQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUdDLFNBQVM7QUFDL0M7QUFFQUMsTUFBTSxDQUFDQyxPQUFPLEdBQUdMLElBQUkiLCJpZ25vcmVMaXN0IjpbXX0=\n//# sourceURL=webpack-internal:///3449\n\n}");
/***/ },
/***/ 6157
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var MapCache = __webpack_require__(3752);\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || resolver != null && typeof resolver != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var _memoized = function memoized() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = _memoized.cache;\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n _memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n _memoized.cache = new (memoize.Cache || MapCache)();\n return _memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\nmodule.exports = memoize;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjE1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxRQUFRLEdBQUdDLG1CQUFPLENBQUMsSUFBYSxDQUFDOztBQUVyQztBQUNBLElBQUlDLGVBQWUsR0FBRyxxQkFBcUI7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxPQUFPQSxDQUFDQyxJQUFJLEVBQUVDLFFBQVEsRUFBRTtFQUMvQixJQUFJLE9BQU9ELElBQUksSUFBSSxVQUFVLElBQUtDLFFBQVEsSUFBSSxJQUFJLElBQUksT0FBT0EsUUFBUSxJQUFJLFVBQVcsRUFBRTtJQUNwRixNQUFNLElBQUlDLFNBQVMsQ0FBQ0osZUFBZSxDQUFDO0VBQ3RDO0VBQ0EsSUFBSUssU0FBUSxHQUFHLFNBQVhBLFFBQVFBLENBQUEsRUFBYztJQUN4QixJQUFJQyxJQUFJLEdBQUdDLFNBQVM7TUFDaEJDLEdBQUcsR0FBR0wsUUFBUSxHQUFHQSxRQUFRLENBQUNNLEtBQUssQ0FBQyxJQUFJLEVBQUVILElBQUksQ0FBQyxHQUFHQSxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ3JESSxLQUFLLEdBQUdMLFNBQVEsQ0FBQ0ssS0FBSztJQUUxQixJQUFJQSxLQUFLLENBQUNDLEdBQUcsQ0FBQ0gsR0FBRyxDQUFDLEVBQUU7TUFDbEIsT0FBT0UsS0FBSyxDQUFDRSxHQUFHLENBQUNKLEdBQUcsQ0FBQztJQUN2QjtJQUNBLElBQUlLLE1BQU0sR0FBR1gsSUFBSSxDQUFDTyxLQUFLLENBQUMsSUFBSSxFQUFFSCxJQUFJLENBQUM7SUFDbkNELFNBQVEsQ0FBQ0ssS0FBSyxHQUFHQSxLQUFLLENBQUNJLEdBQUcsQ0FBQ04sR0FBRyxFQUFFSyxNQUFNLENBQUMsSUFBSUgsS0FBSztJQUNoRCxPQUFPRyxNQUFNO0VBQ2YsQ0FBQztFQUNEUixTQUFRLENBQUNLLEtBQUssR0FBRyxLQUFLVCxPQUFPLENBQUNjLEtBQUssSUFBSWpCLFFBQVEsR0FBQztFQUNoRCxPQUFPTyxTQUFRO0FBQ2pCOztBQUVBO0FBQ0FKLE9BQU8sQ0FBQ2MsS0FBSyxHQUFHakIsUUFBUTtBQUV4QmtCLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHaEIsT0FBTyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVtb2l6ZS5qcz9lMzgwIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbWVtb2l6ZXMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuIElmIGByZXNvbHZlcmAgaXNcbiAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxuICogcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uIGlzIHVzZWQgYXMgdGhlIG1hcCBjYWNoZSBrZXkuIFRoZSBgZnVuY2BcbiAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxuICpcbiAqICoqTm90ZToqKiBUaGUgY2FjaGUgaXMgZXhwb3NlZCBhcyB0aGUgYGNhY2hlYCBwcm9wZXJ0eSBvbiB0aGUgbWVtb2l6ZWRcbiAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcbiAqIFtgTWFwYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcHJvcGVydGllcy1vZi10aGUtbWFwLXByb3RvdHlwZS1vYmplY3QpXG4gKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xuICpcbiAqIHZhciB2YWx1ZXMgPSBfLm1lbW9pemUoXy52YWx1ZXMpO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiB2YWx1ZXMob3RoZXIpO1xuICogLy8gPT4gWzMsIDRdXG4gKlxuICogb2JqZWN0LmEgPSAyO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cbiAqIHZhbHVlcy5jYWNoZS5zZXQob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWydhJywgJ2InXVxuICpcbiAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xuICovXG5mdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cbm1lbW9pemUuQ2FjaGUgPSBNYXBDYWNoZTtcblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplO1xuIl0sIm5hbWVzIjpbIk1hcENhY2hlIiwicmVxdWlyZSIsIkZVTkNfRVJST1JfVEVYVCIsIm1lbW9pemUiLCJmdW5jIiwicmVzb2x2ZXIiLCJUeXBlRXJyb3IiLCJtZW1vaXplZCIsImFyZ3MiLCJhcmd1bWVudHMiLCJrZXkiLCJhcHBseSIsImNhY2hlIiwiaGFzIiwiZ2V0IiwicmVzdWx0Iiwic2V0IiwiQ2FjaGUiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6157\n\n}");
/***/ },
/***/ 4493
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var root = __webpack_require__(2912);\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function now() {\n return root.Date.now();\n};\nmodule.exports = now;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ5My5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxJQUFJLEdBQUdDLG1CQUFPLENBQUMsSUFBUyxDQUFDOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlDLEdBQUcsR0FBRyxTQUFOQSxHQUFHQSxDQUFBLEVBQWM7RUFDbkIsT0FBT0YsSUFBSSxDQUFDRyxJQUFJLENBQUNELEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFFREUsTUFBTSxDQUFDQyxPQUFPLEdBQUdILEdBQUciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvbG9kYXNoL25vdy5qcz80MDhjIl0sInNvdXJjZXNDb250ZW50IjpbInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKipcbiAqIEdldHMgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGF0IGhhdmUgZWxhcHNlZCBzaW5jZVxuICogdGhlIFVuaXggZXBvY2ggKDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IERhdGVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVzdGFtcC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5kZWZlcihmdW5jdGlvbihzdGFtcCkge1xuICogICBjb25zb2xlLmxvZyhfLm5vdygpIC0gc3RhbXApO1xuICogfSwgXy5ub3coKSk7XG4gKiAvLyA9PiBMb2dzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGl0IHRvb2sgZm9yIHRoZSBkZWZlcnJlZCBpbnZvY2F0aW9uLlxuICovXG52YXIgbm93ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiByb290LkRhdGUubm93KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vdztcbiJdLCJuYW1lcyI6WyJyb290IiwicmVxdWlyZSIsIm5vdyIsIkRhdGUiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4493\n\n}");
/***/ },
/***/ 7093
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var baseSet = __webpack_require__(6549);\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\nmodule.exports = set;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzA5My5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxPQUFPLEdBQUdDLG1CQUFPLENBQUMsSUFBWSxDQUFDOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLEdBQUdBLENBQUNDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxLQUFLLEVBQUU7RUFDaEMsT0FBT0YsTUFBTSxJQUFJLElBQUksR0FBR0EsTUFBTSxHQUFHSCxPQUFPLENBQUNHLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxLQUFLLENBQUM7QUFDL0Q7QUFFQUMsTUFBTSxDQUFDQyxPQUFPLEdBQUdMLEdBQUciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvbG9kYXNoL3NldC5qcz8wZjVjIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBiYXNlU2V0ID0gcmVxdWlyZSgnLi9fYmFzZVNldCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgYSBwb3J0aW9uIG9mIGBwYXRoYCBkb2Vzbid0IGV4aXN0LFxuICogaXQncyBjcmVhdGVkLiBBcnJheXMgYXJlIGNyZWF0ZWQgZm9yIG1pc3NpbmcgaW5kZXggcHJvcGVydGllcyB3aGlsZSBvYmplY3RzXG4gKiBhcmUgY3JlYXRlZCBmb3IgYWxsIG90aGVyIG1pc3NpbmcgcHJvcGVydGllcy4gVXNlIGBfLnNldFdpdGhgIHRvIGN1c3RvbWl6ZVxuICogYHBhdGhgIGNyZWF0aW9uLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAqXG4gKiBfLnNldChvYmplY3QsICdhWzBdLmIuYycsIDQpO1xuICogY29uc29sZS5sb2cob2JqZWN0LmFbMF0uYi5jKTtcbiAqIC8vID0+IDRcbiAqXG4gKiBfLnNldChvYmplY3QsIFsneCcsICcwJywgJ3knLCAneiddLCA1KTtcbiAqIGNvbnNvbGUubG9nKG9iamVjdC54WzBdLnkueik7XG4gKiAvLyA9PiA1XG4gKi9cbmZ1bmN0aW9uIHNldChvYmplY3QsIHBhdGgsIHZhbHVlKSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IG9iamVjdCA6IGJhc2VTZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0O1xuIl0sIm5hbWVzIjpbImJhc2VTZXQiLCJyZXF1aXJlIiwic2V0Iiwib2JqZWN0IiwicGF0aCIsInZhbHVlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7093\n\n}");
/***/ },
/***/ 8585
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var debounce = __webpack_require__(4902),\n isObject = __webpack_require__(3926);\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\nmodule.exports = throttle;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODU4NS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxRQUFRLEdBQUdDLG1CQUFPLENBQUMsSUFBWSxDQUFDO0VBQ2hDQyxRQUFRLEdBQUdELG1CQUFPLENBQUMsSUFBWSxDQUFDOztBQUVwQztBQUNBLElBQUlFLGVBQWUsR0FBRyxxQkFBcUI7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxRQUFRQSxDQUFDQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFO0VBQ3JDLElBQUlDLE9BQU8sR0FBRyxJQUFJO0lBQ2RDLFFBQVEsR0FBRyxJQUFJO0VBRW5CLElBQUksT0FBT0osSUFBSSxJQUFJLFVBQVUsRUFBRTtJQUM3QixNQUFNLElBQUlLLFNBQVMsQ0FBQ1AsZUFBZSxDQUFDO0VBQ3RDO0VBQ0EsSUFBSUQsUUFBUSxDQUFDSyxPQUFPLENBQUMsRUFBRTtJQUNyQkMsT0FBTyxHQUFHLFNBQVMsSUFBSUQsT0FBTyxHQUFHLENBQUMsQ0FBQ0EsT0FBTyxDQUFDQyxPQUFPLEdBQUdBLE9BQU87SUFDNURDLFFBQVEsR0FBRyxVQUFVLElBQUlGLE9BQU8sR0FBRyxDQUFDLENBQUNBLE9BQU8sQ0FBQ0UsUUFBUSxHQUFHQSxRQUFRO0VBQ2xFO0VBQ0EsT0FBT1QsUUFBUSxDQUFDSyxJQUFJLEVBQUVDLElBQUksRUFBRTtJQUMxQixTQUFTLEVBQUVFLE9BQU87SUFDbEIsU0FBUyxFQUFFRixJQUFJO0lBQ2YsVUFBVSxFQUFFRztFQUNkLENBQUMsQ0FBQztBQUNKO0FBRUFFLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHUixRQUFRIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90aHJvdHRsZS5qcz8wZjMyIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBkZWJvdW5jZSA9IHJlcXVpcmUoJy4vZGVib3VuY2UnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgdGhyb3R0bGVkIGZ1bmN0aW9uIHRoYXQgb25seSBpbnZva2VzIGBmdW5jYCBhdCBtb3N0IG9uY2UgcGVyXG4gKiBldmVyeSBgd2FpdGAgbWlsbGlzZWNvbmRzLiBUaGUgdGhyb3R0bGVkIGZ1bmN0aW9uIGNvbWVzIHdpdGggYSBgY2FuY2VsYFxuICogbWV0aG9kIHRvIGNhbmNlbCBkZWxheWVkIGBmdW5jYCBpbnZvY2F0aW9ucyBhbmQgYSBgZmx1c2hgIG1ldGhvZCB0b1xuICogaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uIFByb3ZpZGUgYG9wdGlvbnNgIHRvIGluZGljYXRlIHdoZXRoZXIgYGZ1bmNgXG4gKiBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGUgbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgZWRnZSBvZiB0aGUgYHdhaXRgXG4gKiB0aW1lb3V0LiBUaGUgYGZ1bmNgIGlzIGludm9rZWQgd2l0aCB0aGUgbGFzdCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlXG4gKiB0aHJvdHRsZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnQgY2FsbHMgdG8gdGhlIHRocm90dGxlZCBmdW5jdGlvbiByZXR1cm4gdGhlXG4gKiByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgIGludm9jYXRpb24uXG4gKlxuICogKipOb3RlOioqIElmIGBsZWFkaW5nYCBhbmQgYHRyYWlsaW5nYCBvcHRpb25zIGFyZSBgdHJ1ZWAsIGBmdW5jYCBpc1xuICogaW52b2tlZCBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb25cbiAqIGlzIGludm9rZWQgbW9yZSB0aGFuIG9uY2UgZHVyaW5nIHRoZSBgd2FpdGAgdGltZW91dC5cbiAqXG4gKiBJZiBgd2FpdGAgaXMgYDBgIGFuZCBgbGVhZGluZ2AgaXMgYGZhbHNlYCwgYGZ1bmNgIGludm9jYXRpb24gaXMgZGVmZXJyZWRcbiAqIHVudGlsIHRvIHRoZSBuZXh0IHRpY2ssIHNpbWlsYXIgdG8gYHNldFRpbWVvdXRgIHdpdGggYSB0aW1lb3V0IG9mIGAwYC5cbiAqXG4gKiBTZWUgW0RhdmlkIENvcmJhY2hvJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9kZWJvdW5jaW5nLXRocm90dGxpbmctZXhwbGFpbmVkLWV4YW1wbGVzLylcbiAqIGZvciBkZXRhaWxzIG92ZXIgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYF8udGhyb3R0bGVgIGFuZCBgXy5kZWJvdW5jZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB0aHJvdHRsZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2FpdD0wXSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aHJvdHRsZSBpbnZvY2F0aW9ucyB0by5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sZWFkaW5nPXRydWVdXG4gKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy50cmFpbGluZz10cnVlXVxuICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB0aHJvdHRsZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIEF2b2lkIGV4Y2Vzc2l2ZWx5IHVwZGF0aW5nIHRoZSBwb3NpdGlvbiB3aGlsZSBzY3JvbGxpbmcuXG4gKiBqUXVlcnkod2luZG93KS5vbignc2Nyb2xsJywgXy50aHJvdHRsZSh1cGRhdGVQb3NpdGlvbiwgMTAwKSk7XG4gKlxuICogLy8gSW52b2tlIGByZW5ld1Rva2VuYCB3aGVuIHRoZSBjbGljayBldmVudCBpcyBmaXJlZCwgYnV0IG5vdCBtb3JlIHRoYW4gb25jZSBldmVyeSA1IG1pbnV0ZXMuXG4gKiB2YXIgdGhyb3R0bGVkID0gXy50aHJvdHRsZShyZW5ld1Rva2VuLCAzMDAwMDAsIHsgJ3RyYWlsaW5nJzogZmFsc2UgfSk7XG4gKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgdGhyb3R0bGVkKTtcbiAqXG4gKiAvLyBDYW5jZWwgdGhlIHRyYWlsaW5nIHRocm90dGxlZCBpbnZvY2F0aW9uLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgdGhyb3R0bGVkLmNhbmNlbCk7XG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIGxlYWRpbmcgPSB0cnVlLFxuICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIGlmIChpc09iamVjdChvcHRpb25zKSkge1xuICAgIGxlYWRpbmcgPSAnbGVhZGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy5sZWFkaW5nIDogbGVhZGluZztcbiAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICB9XG4gIHJldHVybiBkZWJvdW5jZShmdW5jLCB3YWl0LCB7XG4gICAgJ2xlYWRpbmcnOiBsZWFkaW5nLFxuICAgICdtYXhXYWl0Jzogd2FpdCxcbiAgICAndHJhaWxpbmcnOiB0cmFpbGluZ1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0aHJvdHRsZTtcbiJdLCJuYW1lcyI6WyJkZWJvdW5jZSIsInJlcXVpcmUiLCJpc09iamVjdCIsIkZVTkNfRVJST1JfVEVYVCIsInRocm90dGxlIiwiZnVuYyIsIndhaXQiLCJvcHRpb25zIiwibGVhZGluZyIsInRyYWlsaW5nIiwiVHlwZUVycm9yIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8585\n\n}");
/***/ },
/***/ 4121
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var baseTrim = __webpack_require__(6221),\n isObject = __webpack_require__(3926),\n isSymbol = __webpack_require__(8889);\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? other + '' : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;\n}\nmodule.exports = toNumber;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDEyMS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxRQUFRLEdBQUdDLG1CQUFPLENBQUMsSUFBYSxDQUFDO0VBQ2pDQyxRQUFRLEdBQUdELG1CQUFPLENBQUMsSUFBWSxDQUFDO0VBQ2hDRSxRQUFRLEdBQUdGLG1CQUFPLENBQUMsSUFBWSxDQUFDOztBQUVwQztBQUNBLElBQUlHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7QUFFZjtBQUNBLElBQUlDLFVBQVUsR0FBRyxvQkFBb0I7O0FBRXJDO0FBQ0EsSUFBSUMsVUFBVSxHQUFHLFlBQVk7O0FBRTdCO0FBQ0EsSUFBSUMsU0FBUyxHQUFHLGFBQWE7O0FBRTdCO0FBQ0EsSUFBSUMsWUFBWSxHQUFHQyxRQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsUUFBUUEsQ0FBQ0MsS0FBSyxFQUFFO0VBQ3ZCLElBQUksT0FBT0EsS0FBSyxJQUFJLFFBQVEsRUFBRTtJQUM1QixPQUFPQSxLQUFLO0VBQ2Q7RUFDQSxJQUFJUixRQUFRLENBQUNRLEtBQUssQ0FBQyxFQUFFO0lBQ25CLE9BQU9QLEdBQUc7RUFDWjtFQUNBLElBQUlGLFFBQVEsQ0FBQ1MsS0FBSyxDQUFDLEVBQUU7SUFDbkIsSUFBSUMsS0FBSyxHQUFHLE9BQU9ELEtBQUssQ0FBQ0UsT0FBTyxJQUFJLFVBQVUsR0FBR0YsS0FBSyxDQUFDRSxPQUFPLENBQUMsQ0FBQyxHQUFHRixLQUFLO0lBQ3hFQSxLQUFLLEdBQUdULFFBQVEsQ0FBQ1UsS0FBSyxDQUFDLEdBQUlBLEtBQUssR0FBRyxFQUFFLEdBQUlBLEtBQUs7RUFDaEQ7RUFDQSxJQUFJLE9BQU9ELEtBQUssSUFBSSxRQUFRLEVBQUU7SUFDNUIsT0FBT0EsS0FBSyxLQUFLLENBQUMsR0FBR0EsS0FBSyxHQUFHLENBQUNBLEtBQUs7RUFDckM7RUFDQUEsS0FBSyxHQUFHWCxRQUFRLENBQUNXLEtBQUssQ0FBQztFQUN2QixJQUFJRyxRQUFRLEdBQUdSLFVBQVUsQ0FBQ1MsSUFBSSxDQUFDSixLQUFLLENBQUM7RUFDckMsT0FBUUcsUUFBUSxJQUFJUCxTQUFTLENBQUNRLElBQUksQ0FBQ0osS0FBSyxDQUFDLEdBQ3JDSCxZQUFZLENBQUNHLEtBQUssQ0FBQ0ssS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFRixRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUM3Q1QsVUFBVSxDQUFDVSxJQUFJLENBQUNKLEtBQUssQ0FBQyxHQUFHUCxHQUFHLEdBQUcsQ0FBQ08sS0FBTTtBQUM3QztBQUVBTSxNQUFNLENBQUNDLE9BQU8sR0FBR1IsUUFBUSIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9OdW1iZXIuanM/YjRiMCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYmFzZVRyaW0gPSByZXF1aXJlKCcuL19iYXNlVHJpbScpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBOQU4gPSAwIC8gMDtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJhZCBzaWduZWQgaGV4YWRlY2ltYWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmFkSGV4ID0gL15bLStdMHhbMC05YS1mXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiaW5hcnkgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmluYXJ5ID0gL14wYlswMV0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb2N0YWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzT2N0YWwgPSAvXjBvWzAtN10rJC9pO1xuXG4vKiogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgd2l0aG91dCBhIGRlcGVuZGVuY3kgb24gYHJvb3RgLiAqL1xudmFyIGZyZWVQYXJzZUludCA9IHBhcnNlSW50O1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9OdW1iZXIoMy4yKTtcbiAqIC8vID0+IDMuMlxuICpcbiAqIF8udG9OdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiA1ZS0zMjRcbiAqXG4gKiBfLnRvTnVtYmVyKEluZmluaXR5KTtcbiAqIC8vID0+IEluZmluaXR5XG4gKlxuICogXy50b051bWJlcignMy4yJyk7XG4gKiAvLyA9PiAzLjJcbiAqL1xuZnVuY3Rpb24gdG9OdW1iZXIodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIE5BTjtcbiAgfVxuICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgdmFyIG90aGVyID0gdHlwZW9mIHZhbHVlLnZhbHVlT2YgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLnZhbHVlT2YoKSA6IHZhbHVlO1xuICAgIHZhbHVlID0gaXNPYmplY3Qob3RoZXIpID8gKG90aGVyICsgJycpIDogb3RoZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogK3ZhbHVlO1xuICB9XG4gIHZhbHVlID0gYmFzZVRyaW0odmFsdWUpO1xuICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOClcbiAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b051bWJlcjtcbiJdLCJuYW1lcyI6WyJiYXNlVHJpbSIsInJlcXVpcmUiLCJpc09iamVjdCIsImlzU3ltYm9sIiwiTkFOIiwicmVJc0JhZEhleCIsInJlSXNCaW5hcnkiLCJyZUlzT2N0YWwiLCJmcmVlUGFyc2VJbnQiLCJwYXJzZUludCIsInRvTnVtYmVyIiwidmFsdWUiLCJvdGhlciIsInZhbHVlT2YiLCJpc0JpbmFyeSIsInRlc3QiLCJzbGljZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4121\n\n}");
/***/ },
/***/ 3221
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var baseToString = __webpack_require__(3605);\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\nmodule.exports = toString;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzIyMS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxZQUFZLEdBQUdDLG1CQUFPLENBQUMsSUFBaUIsQ0FBQzs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsUUFBUUEsQ0FBQ0MsS0FBSyxFQUFFO0VBQ3ZCLE9BQU9BLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHSCxZQUFZLENBQUNHLEtBQUssQ0FBQztBQUNqRDtBQUVBQyxNQUFNLENBQUNDLE9BQU8sR0FBR0gsUUFBUSIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9TdHJpbmcuanM/NzZkZCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYmFzZVRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVRvU3RyaW5nJyk7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b1N0cmluZyhudWxsKTtcbiAqIC8vID0+ICcnXG4gKlxuICogXy50b1N0cmluZygtMCk7XG4gKiAvLyA9PiAnLTAnXG4gKlxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICogLy8gPT4gJzEsMiwzJ1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1N0cmluZztcbiJdLCJuYW1lcyI6WyJiYXNlVG9TdHJpbmciLCJyZXF1aXJlIiwidG9TdHJpbmciLCJ2YWx1ZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3221\n\n}");
/***/ },
/***/ 6484
(module, __unused_webpack_exports, __webpack_require__) {
eval("{var baseUnset = __webpack_require__(8372);\n\n/**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\nfunction unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n}\nmodule.exports = unset;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQ4NC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxTQUFTLEdBQUdDLG1CQUFPLENBQUMsSUFBYyxDQUFDOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxLQUFLQSxDQUFDQyxNQUFNLEVBQUVDLElBQUksRUFBRTtFQUMzQixPQUFPRCxNQUFNLElBQUksSUFBSSxHQUFHLElBQUksR0FBR0gsU0FBUyxDQUFDRyxNQUFNLEVBQUVDLElBQUksQ0FBQztBQUN4RDtBQUVBQyxNQUFNLENBQUNDLE9BQU8sR0FBR0osS0FBSyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdW5zZXQuanM/M2NmZSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYmFzZVVuc2V0ID0gcmVxdWlyZSgnLi9fYmFzZVVuc2V0Jyk7XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgcHJvcGVydHkgYXQgYHBhdGhgIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gdW5zZXQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGRlbGV0ZWQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiA3IH0gfV0gfTtcbiAqIF8udW5zZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3QpO1xuICogLy8gPT4geyAnYSc6IFt7ICdiJzoge30gfV0gfTtcbiAqXG4gKiBfLnVuc2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdCk7XG4gKiAvLyA9PiB7ICdhJzogW3sgJ2InOiB7fSB9XSB9O1xuICovXG5mdW5jdGlvbiB1bnNldChvYmplY3QsIHBhdGgpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdHJ1ZSA6IGJhc2VVbnNldChvYmplY3QsIHBhdGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVuc2V0O1xuIl0sIm5hbWVzIjpbImJhc2VVbnNldCIsInJlcXVpcmUiLCJ1bnNldCIsIm9iamVjdCIsInBhdGgiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6484\n\n}");
/***/ },
/***/ 2627
(__unused_webpack_module, exports) {
"use strict";
eval("{var __webpack_unused_export__;\n\n\nfunction _typeof2(o) { \"@babel/helpers - typeof\"; return _typeof2 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof2(o); }\n__webpack_unused_export__ = ({\n value: true\n});\nvar _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n return _typeof2(obj);\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n};\nfunction plugin(Vue) {\n // Exit if the plugin has already been installed.\n if (plugin.installed) return;\n\n // Create a `vm` to serve as our global event bus.\n var events = new Vue({\n methods: {\n /**\n * Emit the given event.\n *\n * @param {string|object} event\n * @param {...*} args\n */\n emit: function emit(event) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n this.$emit.apply(this, [event].concat(args));\n },\n /**\n * Emit the given event.\n *\n * @param {string|object} event\n * @param {...*} args\n */\n fire: function fire(event) {\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n this.emit.apply(this, [event].concat(args));\n },\n /**\n * Listen for the given event.\n *\n * @param {string} event\n * @param {function} callback\n */\n on: function on(event, callback) {\n this.$on(event, callback);\n },\n /**\n * Listen for the given event.\n *\n * @param {string} event\n * @param {function} callback\n */\n listen: function listen(event, callback) {\n this.on(event, callback);\n },\n /**\n * Listen for the given event once.\n *\n * @param {string} event\n * @param {function} callback\n */\n once: function once(event, callback) {\n this.$once(event, callback);\n },\n /**\n * Remove one or more event listeners.\n *\n * @param {string} event\n * @param {function} callback\n */\n off: function off(event, callback) {\n this.$off(event, callback);\n },\n /**\n * Remove one or more event listeners.\n *\n * @param {string} event\n * @param {function} callback\n */\n remove: function remove(event, callback) {\n this.off(event, callback);\n }\n }\n });\n\n // Extend `Vue.prototype` to include our global event bus.\n Object.defineProperty(Vue.prototype, '$events', {\n get: function get() {\n return events;\n }\n });\n\n // Register a mixin that adds an `events` option to Vue 2.0 components.\n Vue.mixin({\n // Hook into the Vue 2.0 `beforeCreate` life-cycle event.\n beforeCreate: function beforeCreate() {\n // Exit if there's no `events` option.\n if (_typeof(this.$options.events) !== 'object') return;\n // Cache of events to bound functions for automatic unsubscriptions\n var eventMap = {};\n // Loop through each event.\n for (var key in this.$options.events) {\n // Assign event type and bound function to map\n eventMap[key] = this.$options.events[key].bind(this);\n }\n // Listen for the `hook:beforeMount` Vue 2.0 life-cycle event.\n this.$once('hook:beforeMount', function () {\n // Loop through each event.\n for (var key in eventMap) {\n // Register a listener for the event.\n events.$on(key, eventMap[key]);\n }\n });\n // Listen for the `hook:beforeDestroy` Vue 2.0 life-cycle event.\n this.$once('hook:beforeDestroy', function () {\n // Loop through each event.\n for (var key in eventMap) {\n // Register a listener for the event.\n events.$off(key, eventMap[key]);\n }\n // Release cache\n eventMap = null;\n });\n }\n });\n}\n\n// Check for `window.Vue`\nif (typeof window !== 'undefined' && window.Vue) {\n // Install plugin automatically.\n window.Vue.use(plugin);\n}\nexports.A = plugin;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SUFBSTZCLFFBQVEsR0FBRyxDQUFDLENBQUM7TUFDakI7TUFDQSxLQUFLLElBQUlDLEdBQUcsSUFBSSxJQUFJLENBQUNGLFFBQVEsQ0FBQzVCLE1BQU0sRUFBRTtRQUNwQztRQUNBNkIsUUFBUSxDQUFDQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUNGLFFBQVEsQ0FBQzVCLE1BQU0sQ0FBQzhCLEdBQUcsQ0FBQyxDQUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDO01BQ3REO01BQ0E7TUFDQSxJQUFJLENBQUNWLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxZQUFZO1FBQ3pDO1FBQ0EsS0FBSyxJQUFJUyxHQUFHLElBQUlELFFBQVEsRUFBRTtVQUN4QjtVQUNBN0IsTUFBTSxDQUFDa0IsR0FBRyxDQUFDWSxHQUFHLEVBQUVELFFBQVEsQ0FBQ0MsR0FBRyxDQUFDLENBQUM7UUFDaEM7TUFDRixDQUFDLENBQUM7TUFDRjtNQUNBLElBQUksQ0FBQ1QsS0FBSyxDQUFDLG9CQUFvQixFQUFFLFlBQVk7UUFDM0M7UUFDQSxLQUFLLElBQUlTLEdBQUcsSUFBSUQsUUFBUSxFQUFFO1VBQ3hCO1VBQ0E3QixNQUFNLENBQUN1QixJQUFJLENBQUNPLEdBQUcsRUFBRUQsUUFBUSxDQUFDQyxHQUFHLENBQUMsQ0FBQztRQUNqQztRQUNBO1FBQ0FELFFBQVEsR0FBRyxJQUFJO01BQ2pCLENBQUMsQ0FBQztJQUNKO0VBQ0YsQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQSxJQUFJLE9BQU9HLE1BQU0sS0FBSyxXQUFXLElBQUlBLE1BQU0sQ0FBQ2xDLEdBQUcsRUFBRTtFQUMvQztFQUNBa0MsTUFBTSxDQUFDbEMsR0FBRyxDQUFDbUMsR0FBRyxDQUFDcEMsTUFBTSxDQUFDO0FBQ3hCO0FBRUFKLFNBQWUsR0FBR0ksTUFBTSIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy92dWUtZXZlbnRzL2Rpc3QvaW5kZXguanM/YWEzYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuZnVuY3Rpb24gcGx1Z2luKFZ1ZSkge1xuXG4gIC8vIEV4aXQgaWYgdGhlIHBsdWdpbiBoYXMgYWxyZWFkeSBiZWVuIGluc3RhbGxlZC5cbiAgaWYgKHBsdWdpbi5pbnN0YWxsZWQpIHJldHVybjtcblxuICAvLyBDcmVhdGUgYSBgdm1gIHRvIHNlcnZlIGFzIG91ciBnbG9iYWwgZXZlbnQgYnVzLlxuICB2YXIgZXZlbnRzID0gbmV3IFZ1ZSh7XG4gICAgbWV0aG9kczoge1xuICAgICAgLyoqXG4gICAgICAgKiBFbWl0IHRoZSBnaXZlbiBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IGV2ZW50XG4gICAgICAgKiBAcGFyYW0gey4uLip9IGFyZ3NcbiAgICAgICAqL1xuICAgICAgZW1pdDogZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJGVtaXQuYXBwbHkodGhpcywgW2V2ZW50XS5jb25jYXQoYXJncykpO1xuICAgICAgfSxcblxuXG4gICAgICAvKipcbiAgICAgICAqIEVtaXQgdGhlIGdpdmVuIGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gZXZlbnRcbiAgICAgICAqIEBwYXJhbSB7Li4uKn0gYXJnc1xuICAgICAgICovXG4gICAgICBmaXJlOiBmdW5jdGlvbiBmaXJlKGV2ZW50KSB7XG4gICAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbWl0LmFwcGx5KHRoaXMsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgIH0sXG5cblxuICAgICAgLyoqXG4gICAgICAgKiBMaXN0ZW4gZm9yIHRoZSBnaXZlbiBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gICAgICAgKi9cbiAgICAgIG9uOiBmdW5jdGlvbiBvbihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy4kb24oZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgIH0sXG5cblxuICAgICAgLyoqXG4gICAgICAgKiBMaXN0ZW4gZm9yIHRoZSBnaXZlbiBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gICAgICAgKi9cbiAgICAgIGxpc3RlbjogZnVuY3Rpb24gbGlzdGVuKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgICB0aGlzLm9uKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICB9LFxuXG5cbiAgICAgIC8qKlxuICAgICAgICogTGlzdGVuIGZvciB0aGUgZ2l2ZW4gZXZlbnQgb25jZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gICAgICAgKi9cbiAgICAgIG9uY2U6IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuJG9uY2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgIH0sXG5cblxuICAgICAgLyoqXG4gICAgICAgKiBSZW1vdmUgb25lIG9yIG1vcmUgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFxuICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAgICAgICAqL1xuICAgICAgb2ZmOiBmdW5jdGlvbiBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuJG9mZihldmVudCwgY2FsbGJhY2spO1xuICAgICAgfSxcblxuXG4gICAgICAvKipcbiAgICAgICAqIFJlbW92ZSBvbmUgb3IgbW9yZSBldmVudCBsaXN0ZW5lcnMuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICAgICAgICovXG4gICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShldmVudCwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5vZmYoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIEV4dGVuZCBgVnVlLnByb3RvdHlwZWAgdG8gaW5jbHVkZSBvdXIgZ2xvYmFsIGV2ZW50IGJ1cy5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckZXZlbnRzJywge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIGV2ZW50cztcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFJlZ2lzdGVyIGEgbWl4aW4gdGhhdCBhZGRzIGFuIGBldmVudHNgIG9wdGlvbiB0byBWdWUgMi4wIGNvbXBvbmVudHMuXG4gIFZ1ZS5taXhpbih7XG4gICAgLy8gSG9vayBpbnRvIHRoZSBWdWUgMi4wIGBiZWZvcmVDcmVhdGVgIGxpZmUtY3ljbGUgZXZlbnQuXG4gICAgYmVmb3JlQ3JlYXRlOiBmdW5jdGlvbiBiZWZvcmVDcmVhdGUoKSB7XG4gICAgICAvLyBFeGl0IGlmIHRoZXJlJ3Mgbm8gYGV2ZW50c2Agb3B0aW9uLlxuICAgICAgaWYgKF90eXBlb2YodGhpcy4kb3B0aW9ucy5ldmVudHMpICE9PSAnb2JqZWN0JykgcmV0dXJuO1xuICAgICAgLy8gQ2FjaGUgb2YgZXZlbnRzIHRvIGJvdW5kIGZ1bmN0aW9ucyBmb3IgYXV0b21hdGljIHVuc3Vic2NyaXB0aW9uc1xuICAgICAgdmFyIGV2ZW50TWFwID0ge307XG4gICAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBldmVudC5cbiAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLiRvcHRpb25zLmV2ZW50cykge1xuICAgICAgICAvLyBBc3NpZ24gZXZlbnQgdHlwZSBhbmQgYm91bmQgZnVuY3Rpb24gdG8gbWFwXG4gICAgICAgIGV2ZW50TWFwW2tleV0gPSB0aGlzLiRvcHRpb25zLmV2ZW50c1trZXldLmJpbmQodGhpcyk7XG4gICAgICB9XG4gICAgICAvLyBMaXN0ZW4gZm9yIHRoZSBgaG9vazpiZWZvcmVNb3VudGAgVnVlIDIuMCBsaWZlLWN5Y2xlIGV2ZW50LlxuICAgICAgdGhpcy4kb25jZSgnaG9vazpiZWZvcmVNb3VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggZXZlbnQuXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBldmVudE1hcCkge1xuICAgICAgICAgIC8vIFJlZ2lzdGVyIGEgbGlzdGVuZXIgZm9yIHRoZSBldmVudC5cbiAgICAgICAgICBldmVudHMuJG9uKGtleSwgZXZlbnRNYXBba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gTGlzdGVuIGZvciB0aGUgYGhvb2s6YmVmb3JlRGVzdHJveWAgVnVlIDIuMCBsaWZlLWN5Y2xlIGV2ZW50LlxuICAgICAgdGhpcy4kb25jZSgnaG9vazpiZWZvcmVEZXN0cm95JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBldmVudC5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIGV2ZW50TWFwKSB7XG4gICAgICAgICAgLy8gUmVnaXN0ZXIgYSBsaXN0ZW5lciBmb3IgdGhlIGV2ZW50LlxuICAgICAgICAgIGV2ZW50cy4kb2ZmKGtleSwgZXZlbnRNYXBba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVsZWFzZSBjYWNoZVxuICAgICAgICBldmVudE1hcCA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG4vLyBDaGVjayBmb3IgYHdpbmRvdy5WdWVgXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LlZ1ZSkge1xuICAvLyBJbnN0YWxsIHBsdWdpbiBhdXRvbWF0aWNhbGx5LlxuICB3aW5kb3cuVnVlLnVzZShwbHVnaW4pO1xufVxuXG5leHBvcnRzLmRlZmF1bHQgPSBwbHVnaW47Il0sIm5hbWVzIjpbIl90eXBlb2YyIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIl90eXBlb2YiLCJvYmoiLCJwbHVnaW4iLCJWdWUiLCJpbnN0YWxsZWQiLCJldmVudHMiLCJtZXRob2RzIiwiZW1pdCIsImV2ZW50IiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCIkZW1pdCIsImFwcGx5IiwiY29uY2F0IiwiZmlyZSIsIl9sZW4yIiwiX2tleTIiLCJvbiIsImNhbGxiYWNrIiwiJG9uIiwibGlzdGVuIiwib25jZSIsIiRvbmNlIiwib2ZmIiwiJG9mZiIsInJlbW92ZSIsImdldCIsIm1peGluIiwiYmVmb3JlQ3JlYXRlIiwiJG9wdGlvbnMiLCJldmVudE1hcCIsImtleSIsImJpbmQiLCJ3aW5kb3ciLCJ1c2UiLCJkZWZhdWx0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2627\n\n}");
/***/ },
/***/ 740
(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4789);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.search-wrapper[data-v-5477c5be] {\n display: flex;\n}\n.search-wrapper select[data-v-5477c5be] {\n margin-bottom: 0;\n margin-left: 1rem;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./app/list/components/FilterBar.vue\"],\"names\":[],\"mappings\":\";AAmEA;IACA,aAAA;AACA;AAEA;IACA,gBAAA;IACA,iBAAA;AACA\",\"sourcesContent\":[\"<template>\\n <div class=\\\"search-wrapper\\\">\\n <input type=\\\"text\\\" class=\\\"search\\\" :placeholder=\\\"store.searchPlaceholder\\\" v-model.trim=\\\"filterText\\\" @input=\\\"doFilter\\\">\\n <select class=\\\"filter-perPage\\\" v-model=\\\"store.perPage\\\" @change=\\\"changePerPage\\\">\\n <option v-for=\\\"(value, title) in this.perPageOptions\\\"\\n :value=\\\"value\\\"\\n :selected=\\\"store.perPage === value\\\">{{ title }}</option>\\n </select>\\n </div>\\n</template>\\n\\n<script>\\n import debounce from 'lodash/debounce';\\n\\n export default {\\n props: ['store'],\\n data: () => ({\\n filterText: '',\\n searchPlaceholder: 'Filter...',\\n selected: ''\\n }),\\n computed: {\\n perPageOptions() {\\n const options = {\\n '25': 25,\\n '50': 50,\\n '100': 100,\\n '200': 200,\\n 'All': ''\\n };\\n\\n if (!options[this.store.perPage]) {\\n options[this.store.perPage] = this.store.perPage;\\n }\\n\\n return options;\\n }\\n },\\n created() {\\n this.doFilter = debounce(() => {\\n this.$events.fire('filter-set', this.filterText);\\n }, 250, { leading: false });\\n\\n this.changePerPage = () => {\\n this.$events.fire('filter-perPage', this.store.perPage);\\n };\\n },\\n methods: {\\n resetFilter() {\\n this.filterText = '';\\n this.$events.fire('filter-reset');\\n }\\n }\\n }\\n</script>\\n\\n<style scoped>\\n .search-wrapper {\\n display: flex;\\n }\\n\\n .search-wrapper select {\\n margin-bottom: 0;\\n margin-left: 1rem;\\n }\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQwLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDZ0g7QUFDakI7QUFDL0YsOEJBQThCLG1GQUEyQixDQUFDLDRGQUFxQztBQUMvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLGdHQUFnRyxNQUFNLFVBQVUsS0FBSyxLQUFLLFdBQVcsV0FBVyx5ZEFBeWQsUUFBUSw4R0FBOEcsd0JBQXdCLG1EQUFtRCwrR0FBK0csdUJBQXVCLGdDQUFnQyxtQ0FBbUMsbUxBQW1MLHVEQUF1RCx1RUFBdUUsbUJBQW1CLG1DQUFtQyxlQUFlLFdBQVcsc0JBQXNCLDhDQUE4QyxtRUFBbUUsZUFBZSxTQUFTLGdCQUFnQixFQUFFLDRDQUE0QywwRUFBMEUsZ0JBQWdCLFdBQVcscUJBQXFCLDZCQUE2Qix1Q0FBdUMsb0RBQW9ELGVBQWUsV0FBVyxPQUFPLG9EQUFvRCx3QkFBd0IsT0FBTyxnQ0FBZ0MsMkJBQTJCLDRCQUE0QixPQUFPLCtCQUErQjtBQUMzakU7QUFDQSxpRUFBZSx1QkFBdUIsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL2FwcC9saXN0L2NvbXBvbmVudHMvRmlsdGVyQmFyLnZ1ZT9iMDA4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGBcbi5zZWFyY2gtd3JhcHBlcltkYXRhLXYtNTQ3N2M1YmVdIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xufVxuLnNlYXJjaC13cmFwcGVyIHNlbGVjdFtkYXRhLXYtNTQ3N2M1YmVdIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xufVxuYCwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9hcHAvbGlzdC9jb21wb25lbnRzL0ZpbHRlckJhci52dWVcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIjtBQW1FQTtJQUNBLGFBQUE7QUFDQTtBQUVBO0lBQ0EsZ0JBQUE7SUFDQSxpQkFBQTtBQUNBXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIjx0ZW1wbGF0ZT5cXG4gICAgPGRpdiBjbGFzcz1cXFwic2VhcmNoLXdyYXBwZXJcXFwiPlxcbiAgICAgICAgPGlucHV0IHR5cGU9XFxcInRleHRcXFwiIGNsYXNzPVxcXCJzZWFyY2hcXFwiIDpwbGFjZWhvbGRlcj1cXFwic3RvcmUuc2VhcmNoUGxhY2Vob2xkZXJcXFwiIHYtbW9kZWwudHJpbT1cXFwiZmlsdGVyVGV4dFxcXCIgQGlucHV0PVxcXCJkb0ZpbHRlclxcXCI+XFxuICAgICAgICA8c2VsZWN0IGNsYXNzPVxcXCJmaWx0ZXItcGVyUGFnZVxcXCIgdi1tb2RlbD1cXFwic3RvcmUucGVyUGFnZVxcXCIgQGNoYW5nZT1cXFwiY2hhbmdlUGVyUGFnZVxcXCI+XFxuICAgICAgICAgICAgPG9wdGlvbiB2LWZvcj1cXFwiKHZhbHVlLCB0aXRsZSkgaW4gdGhpcy5wZXJQYWdlT3B0aW9uc1xcXCJcXG4gICAgICAgICAgICAgICAgICAgIDp2YWx1ZT1cXFwidmFsdWVcXFwiXFxuICAgICAgICAgICAgICAgICAgICA6c2VsZWN0ZWQ9XFxcInN0b3JlLnBlclBhZ2UgPT09IHZhbHVlXFxcIj57eyB0aXRsZSB9fTwvb3B0aW9uPlxcbiAgICAgICAgPC9zZWxlY3Q+XFxuICAgIDwvZGl2PlxcbjwvdGVtcGxhdGU+XFxuXFxuPHNjcmlwdD5cXG4gICAgaW1wb3J0IGRlYm91bmNlIGZyb20gJ2xvZGFzaC9kZWJvdW5jZSc7XFxuXFxuICAgIGV4cG9ydCBkZWZhdWx0IHtcXG4gICAgICAgIHByb3BzOiBbJ3N0b3JlJ10sXFxuICAgICAgICBkYXRhOiAoKSA9PiAoe1xcbiAgICAgICAgICAgIGZpbHRlclRleHQ6ICcnLFxcbiAgICAgICAgICAgIHNlYXJjaFBsYWNlaG9sZGVyOiAnRmlsdGVyLi4uJyxcXG4gICAgICAgICAgICBzZWxlY3RlZDogJydcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29tcHV0ZWQ6IHtcXG4gICAgICAgICAgICBwZXJQYWdlT3B0aW9ucygpIHtcXG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcXG4gICAgICAgICAgICAgICAgICAgICcyNSc6IDI1LFxcbiAgICAgICAgICAgICAgICAgICAgJzUwJzogNTAsXFxuICAgICAgICAgICAgICAgICAgICAnMTAwJzogMTAwLFxcbiAgICAgICAgICAgICAgICAgICAgJzIwMCc6IDIwMCxcXG4gICAgICAgICAgICAgICAgICAgICdBbGwnOiAnJ1xcbiAgICAgICAgICAgICAgICB9O1xcblxcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnNbdGhpcy5zdG9yZS5wZXJQYWdlXSkge1xcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1t0aGlzLnN0b3JlLnBlclBhZ2VdID0gdGhpcy5zdG9yZS5wZXJQYWdlO1xcbiAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICBjcmVhdGVkKCkge1xcbiAgICAgICAgICAgIHRoaXMuZG9GaWx0ZXIgPSBkZWJvdW5jZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHRoaXMuJGV2ZW50cy5maXJlKCdmaWx0ZXItc2V0JywgdGhpcy5maWx0ZXJUZXh0KTtcXG4gICAgICAgICAgICB9LCAyNTAsIHsgbGVhZGluZzogZmFsc2UgfSk7XFxuXFxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VQZXJQYWdlID0gKCkgPT4ge1xcbiAgICAgICAgICAgICAgICB0aGlzLiRldmVudHMuZmlyZSgnZmlsdGVyLXBlclBhZ2UnLCB0aGlzLnN0b3JlLnBlclBhZ2UpO1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICB9LFxcbiAgICAgICAgbWV0aG9kczoge1xcbiAgICAgICAgICAgIHJlc2V0RmlsdGVyKCkge1xcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclRleHQgPSAnJztcXG4gICAgICAgICAgICAgICAgdGhpcy4kZXZlbnRzLmZpcmUoJ2ZpbHRlci1yZXNldCcpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcbjwvc2NyaXB0PlxcblxcbjxzdHlsZSBzY29wZWQ+XFxuICAgIC5zZWFyY2gtd3JhcHBlciB7XFxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICB9XFxuXFxuICAgIC5zZWFyY2gtd3JhcHBlciBzZWxlY3Qge1xcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xcbiAgICB9XFxuPC9zdHlsZT5cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///740\n\n}");
/***/ },
/***/ 4941
(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79);\n/* harmony import */ var _css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4789);\n/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n[v-cloak][data-v-5bfa05b0] {\n display: none;\n}\n.vuetable th.sortable[data-v-5bfa05b0]:hover {\n color: #2185d0;\n cursor: pointer;\n}\n.vuetable-body-wrapper[data-v-5bfa05b0] {\n position:relative;\n overflow-y:auto;\n}\n.vuetable-head-wrapper[data-v-5bfa05b0] {\n overflow-x: hidden;\n}\n.vuetable-actions[data-v-5bfa05b0] {\n width: 15%;\n padding: 12px 0px;\n text-align: center;\n}\n.vuetable-pagination[data-v-5bfa05b0] {\n background: #f9fafb !important;\n}\n.vuetable-pagination-info[data-v-5bfa05b0] {\n margin-top: auto;\n margin-bottom: auto;\n}\n.vuetable-empty-result[data-v-5bfa05b0] {\n text-align: center;\n}\n.vuetable-clip-text[data-v-5bfa05b0] {\n white-space: pre-wrap;\n text-overflow: ellipsis;\n overflow: hidden;\n display: block;\n}\n.vuetable-semantic-no-top[data-v-5bfa05b0] {\n border-top:none !important;\n margin-top:0 !important;\n}\n.vuetable-fixed-layout[data-v-5bfa05b0] {\n table-layout: fixed;\n}\n.vuetable-gutter-col[data-v-5bfa05b0] {\n padding: 0 !important;\n border-left: none !important;\n border-right: none !important;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/vuetable-2/src/components/Vuetable.vue\"],\"names\":[],\"mappings\":\";AAi0CA;EACA,aAAA;AACA;AACA;EACA,cAAA;EACA,eAAA;AACA;AACA;EACA,iBAAA;EACA,eAAA;AACA;AACA;EACA,kBAAA;AACA;AACA;EACA,UAAA;EACA,iBAAA;EACA,kBAAA;AACA;AACA;EACA,8BAAA;AACA;AACA;EACA,gBAAA;EACA,mBAAA;AACA;AACA;EACA,kBAAA;AACA;AACA;EACA,qBAAA;EACA,uBAAA;EACA,gBAAA;EACA,cAAA;AACA;AACA;EACA,0BAAA;EACA,uBAAA;AACA;AACA;EACA,mBAAA;AACA;AACA;EACA,qBAAA;EACA,6BAAA;EACA,8BAAA;AACA\",\"sourcesContent\":[\"<template>\\r\\n<div v-if=\\\"isFixedHeader\\\">\\r\\n <div class=\\\"vuetable-head-wrapper\\\">\\r\\n <table :class=\\\"['vuetable', css.tableClass, css.tableHeaderClass]\\\">\\r\\n <thead>\\r\\n <tr>\\r\\n <template v-for=\\\"(field, fieldIndex) in tableFields\\\">\\r\\n <template v-if=\\\"field.visible\\\">\\r\\n <template v-if=\\\"isSpecialField(field.name)\\\">\\r\\n <th v-if=\\\"extractName(field.name) == '__checkbox'\\\"\\r\\n :key=\\\"fieldIndex\\\"\\r\\n :style=\\\"{width: field.width}\\\"\\r\\n :class=\\\"['vuetable-th-checkbox-'+trackBy, field.titleClass]\\\"\\r\\n >\\r\\n <input type=\\\"checkbox\\\" @change=\\\"toggleAllCheckboxes(field.name, $event)\\\"\\r\\n :checked=\\\"checkCheckboxesState(field.name)\\\">\\r\\n </th>\\r\\n <th v-if=\\\"extractName(field.name) == '__component'\\\"\\r\\n :key=\\\"fieldIndex\\\"\\r\\n :style=\\\"{width: field.width}\\\"\\r\\n :class=\\\"['vuetable-th-component-'+trackBy, field.titleClass, sortClass(field), {'sortable': isSortable(field)}]\\\"\\r\\n v-html=\\\"renderTitle(field)\\\"\\r\\n @click=\\\"orderBy(field, $event)\\\"\\r\\n ></th>\\r\\n <th v-if=\\\"extractName(field.name) == '__slot'\\\"\\r\\n :key=\\\"fieldIndex\\\"\\r\\n :style=\\\"{width: field.width}\\\"\\r\\n :class=\\\"['vuetable-th-slot-'+extractArgs(field.name), field.titleClass, sortClass(field), {'sortable': isSortable(field)}]\\\"\\r\\n v-html=\\\"renderTitle(field)\\\"\\r\\n @click=\\\"orderBy(field, $event)\\\"\\r\\n ></th>\\r\\n <th v-if=\\\"extractName(field.name) == '__sequence'\\\"\\r\\n :key=\\\"fieldIndex\\\"\\r\\n :style=\\\"{width: field.width}\\\"\\r\\n :class=\\\"['vuetable-th-sequence', field.titleClass || '']\\\" v-html=\\\"renderTitle(field)\\\">\\r\\n </th>\\r\\n <th v-if=\\\"notIn(extractName(field.name), ['__sequence', '__checkbox', '__component', '__slot'])\\\"\\r\\n :key=\\\"fieldIndex\\\"\\r\\n :style=\\\"{width: field.width}\\\"\\r\\n :class=\\\"['vuetable-th-'+field.name, field.titleClass || '']\\\" v-html=\\\"renderTitle(field)\\\">\\r\\n </th>\\r\\n </template>\\r\\n <template v-else>\\r\\n <th @click=\\\"orderBy(field, $event)\\\"\\r\\n :key=\\\"fieldIndex\\\"\\r\\n :id=\\\"'_' + field.name\\\"\\r\\n :style=\\\"{width: field.width}\\\"\\r\\n :class=\\\"['vuetable-th-'+field.name, field.titleClass, sortClass(field), {'sortable': isSortable(field)}]\\\"\\r\\n v-html=\\\"renderTitle(field)\\\"\\r\\n ></th>\\r\\n </template>\\r\\n </template>\\r\\n </template>\\r\\n <th v-if=\\\"scrollVisible\\\" :style=\\\"{width: scrollBarWidth}\\\" class=\\\"vuetable-gutter-col\\\"></th>\\r\\n </tr>\\r\\n </thead>\\r\\n </table>\\r\\n </div>\\r\\n <div class=\\\"vuetable-body-wrapper\\\" :style=\\\"{height: tableHeight}\\\">\\r\\n <table :class=\\\"['vuetable', css.tableClass, css.tableBodyClass]\\\">\\r\\n <colgroup>\\r\\n <template v-for=\\\"(field, fieldIndex) in tableFields\\\">\\r\\n <template v-if=\\\"field.visible\\\">\\r\\n <col\\r\\n :key=\\\"fieldIndex\\\"\\r\\n :id=\\\"'_col_' + field.name\\\"\\r\\n :style=\\\"{width: field.width}\\\"\\r\\n :class=\\\"['vuetable-th-'+field.name, field.titleClass]\\\"\\r\\n />\\r\\n </template>\\r\\n </template>\\r\\n </colgroup>\\r\\n <tbody v-cloak class=\\\"vuetable-body\\\">\\r\\n <template v-for=\\\"(item, itemIndex) in tableData\\\">\\r\\n <tr \\r\\n :key=\\\"itemIndex\\\"\\r\\n :item-index=\\\"itemIndex\\\" \\r\\n :render=\\\"onRowChanged(item)\\\" \\r\\n :class=\\\"onRowClass(item, itemIndex)\\\"\\r\\n @click=\\\"onRowClicked(item, $event)\\\" \\r\\n @dblclick=\\\"onRowDoubleClicked(item, $event)\\\" \\r\\n >\\r\\n <template v-for=\\\"(field, fieldIndex) in tableFields\\\">\\r\\n <template v-if=\\\"field.visible\\\">\\r\\n <template v-if=\\\"isSpecialField(field.name)\\\">\\r\\n <td v-if=\\\"extractName(field.name) == '__sequence'\\\" \\r\\n :key=\\\"fieldIndex\\\"\\r\\n :class=\\\"['vuetable-sequence', field.dataClass]\\\"\\r\\n v-html=\\\"renderSequence(itemIndex)\\\">\\r\\n </td>\\r\\n <td v-if=\\\"extractName(field.name) == '__handle'\\\" \\r\\n :key=\\\"fieldIndex\\\"\\r\\n :class=\\\"['vuetable-handle', field.dataClass]\\\"\\r\\n v-html=\\\"renderIconTag(['handle-icon', css.handleIcon])\\\"\\r\\n ></td>\\r\\n <td v-if=\\\"extractName(field.name) == '__checkbox'\\\" \\r\\n :key=\\\"fieldIndex\\\"\\r\\n :class=\\\"['vuetable-checkboxes', field.dataClass]\\\"\\r\\n >\\r\\n <input type=\\\"checkbox\\\"\\r\\n @change=\\\"toggleCheckbox(item, field.name, $event)\\\"\\r\\n :checked=\\\"rowSelected(item, field.name)\\\">\\r\\n </td>\\r\\n <td v-if=\\\"extractName(field.name) === '__component'\\\" \\r\\n :key=\\\"fieldIndex\\\"\\r\\n :class=\\\"['vuetable-component', field.dataClass]\\\"\\r\\n >\\r\\n <component :is=\\\"extractArgs(field.name)\\\"\\r\\n :row-data=\\\"item\\\" :row-index=\\\"itemIndex\\\" :row-field=\\\"field.sortField\\\"\\r\\n ></component>\\r\\n </td>\\r\\n <td v-if=\\\"extractName(field.name) === '__slot'\\\" \\r\\n :key=\\\"fieldIndex\\\"\\r\\n :class=\\\"['vuetable-slot', field.dataClass]\\\"\\r\\n >\\r\\n <slot :name=\\\"extractArgs(field.name)\\\"\\r\\n :row-data=\\\"item\\\" :row-index=\\\"itemIndex\\\" :row-field=\\\"field.sortField\\\"\\r\\n ></slot>\\r\\n </td>\\r\\n </template>\\r\\n <template v-else>\\r\\n <td :class=\\\"field.dataClass\\\"\\r\\n :key=\\\"fieldIndex\\\"\\r\\n v-html=\\\"renderNormalField(field, item)\\\"\\r\\n @click=\\\"onCellClicked(item, field, $event)\\\"\\r\\n @dblclick=\\\"onCellDoubleClicked(item, field, $event)\\\"\\r\\n @contextmenu=\\\"onCellRightClicked(item, field, $event)\\\"\\r\\n ></td>\\r\\n </template>\\r\\n </template>\\r\\n </template>\\r\\n </tr>\\r\\n <template v-if=\\\"useDetailRow\\\">\\r\\n <transition :name=\\\"detailRowTransition\\\" :key=\\\"itemIndex\\\">\\r\\n <tr v-if=\\\"isVisibleDetailRow(item[trackBy])\\\"\\r\\n :class=\\\"[css.detailRowClass]\\\"\\r\\n @click=\\\"onDetailRowClick(item, $event)\\\"\\r\\n >\\r\\n <td :colspan=\\\"countVisibleFields\\\">\\r\\n <component :is=\\\"detailRowComponent\\\" :row-data=\\\"item\\\" :row-index=\\\"itemIndex\\\"></component>\\r\\n </td>\\r\\n </tr>\\r\\n </transition>\\r\\n </template>\\r\\n </template>\\r\\n <template v-if=\\\"displayEmptyDataRow\\\">\\r\\n <tr>\\r\\n <td :colspan=\\\"countVisibleFields\\\" class=\\\"vuetable-empty-result\\\" v-html=\\\"noDataTemplate\\\"></td>\\r\\n </tr>\\r\\n </template>\\r\\n <template v-if=\\\"lessThanMinRows\\\">\\r\\n <tr v-for=\\\"i in blankRows\\\" class=\\\"blank-row\\\" :key=\\\"i\\\">\\r\\n <template v-for=\\\"(field, fieldIndex) in tableFields\\\">\\r\\n <td v-if=\\\"field.visible\\\" :key=\\\"fieldIndex\\\">&nbsp;</td>\\r\\n </template>\\r\\n </tr>\\r\\n </template>\\r\\n </tbody>\\r\\n </table>\\r\\n </div>\\r\\n</div>\\r\\n<table v-else :class=\\\"['vuetable', css.tableClass]\\\"> <!-- no fixed header - regular table -->\\r\\n <thead>\\r\\n <tr>\\r\\n <template v-for=\\\"(field, fieldIndex) in tableFields\\\">\\r\\n <template v-if=\\\"field.visible\\\">\\r\\n <template v-if=\\\"isSpecialField(field.name)\\\">\\r\\n <th v-if=\\\"extractName(field.name) == '__checkbox'\\\"\\r\\n :key=\\\"fieldIndex\\\"\\r\\n :style=\\\"{width: field.width}\\\"\\r\\n :class=\\\"['vuetable-th-checkbox-'+trackBy, field.titleClass]\\\"\\r\\n >\\r\\n <input type=\\\"checkbox\\\" @change=\\\"toggleAllCheckboxes(field.name, $event)\\\"\\r\\n :checked=\\\"checkCheckboxesState(field.name)\\\">\\r\\n </th>\\r\\n <th v-if=\\\"extractName(field.name) == '__component'\\\"\\r\\n :key=\\\"fieldIndex\\\"\\r\\n :style=\\\"{width: field.width}\\\"\\r\\n :class=\\\"['vuetable-th-component-'+trackBy, field.titleClass, sortClass(field), {'sortable': isSortable(field)}]\\\"\\r\\n v-html=\\\"renderTitle(field)\\\"\\r\\n @click=\\\"orderBy(field, $event)\\\"\\r\\n ></th>\\r\\n <th v-if=\\\"extractName(field.name) == '__slot'\\\"\\r\\n :key=\\\"fieldIndex\\\"\\r\\n :style=\\\"{width: field.width}\\\"\\r\\n :class=\\\"['vuetable-th-slot-'+extractArgs(field.name), field.titleClass, sortClass(field), {'sortable': isSortable(field)}]\\\"\\r\\n v-html=\\\"renderTitle(field)\\\"\\r\\n @click=\\\"orderBy(field, $event)\\\"\\r\\n ></th>\\r\\n <th v-if=\\\"extractName(field.name) == '__sequence'\\\"\\r\\n :key=\\\"fieldIndex\\\"\\r\\n :style=\\\"{width: field.width}\\\"\\r\\n :class=\\\"['vuetable-th-sequence', field.titleClass || '', sortClass(field)]\\\" v-html=\\\"renderTitle(field)\\\"\\r\\n ></th>\\r\\n <th v-if=\\\"notIn(extractName(field.name), ['__sequence', '__checkbox', '__component', '__slot'])\\\"\\r\\n :key=\\\"fieldIndex\\\"\\r\\n :style=\\\"{width: field.width}\\\"\\r\\n :class=\\\"['vuetable-th-'+field.name, field.titleClass || '', sortClass(field)]\\\" v-html=\\\"renderTitle(field)\\\"\\r\\n ></th>\\r\\n </template>\\r\\n <template v-else>\\r\\n <th @click=\\\"orderBy(field, $event)\\\"\\r\\n :key=\\\"fieldIndex\\\"\\r\\n :id=\\\"'_' + field.name\\\"\\r\\n :style=\\\"{width: field.width}\\\"\\r\\n :class=\\\"['vuetable-th-'+field.name, field.titleClass, sortClass(field), {'sortable': isSortable(field)}]\\\"\\r\\n v-html=\\\"renderTitle(field)\\\"\\r\\n ></th>\\r\\n </template>\\r\\n </template>\\r\\n </template>\\r\\n </tr>\\r\\n </thead>\\r\\n <tbody v-cloak class=\\\"vuetable-body\\\">\\r\\n <template v-for=\\\"(item, itemIndex) in tableData\\\">\\r\\n <tr @dblclick=\\\"onRowDoubleClicked(item, $event)\\\" \\r\\n :key=\\\"itemIndex\\\"\\r\\n :item-index=\\\"itemIndex\\\" \\r\\n :render=\\\"onRowChanged(item)\\\" \\r\\n :class=\\\"onRowClass(item, itemIndex)\\\"\\r\\n @click=\\\"onRowClicked(item, $event)\\\" \\r\\n >\\r\\n <template v-for=\\\"(field, fieldIndex) in tableFields\\\">\\r\\n <template v-if=\\\"field.visible\\\">\\r\\n <template v-if=\\\"isSpecialField(field.name)\\\">\\r\\n <td v-if=\\\"extractName(field.name) == '__sequence'\\\" \\r\\n :key=\\\"fieldIndex\\\"\\r\\n :class=\\\"['vuetable-sequence', field.dataClass]\\\"\\r\\n v-html=\\\"renderSequence(itemIndex)\\\"\\r\\n ></td>\\r\\n <td v-if=\\\"extractName(field.name) == '__handle'\\\" \\r\\n :key=\\\"fieldIndex\\\"\\r\\n :class=\\\"['vuetable-handle', field.dataClass]\\\"\\r\\n v-html=\\\"renderIconTag(['handle-icon', css.handleIcon])\\\"\\r\\n ></td>\\r\\n <td v-if=\\\"extractName(field.name) == '__checkbox'\\\" \\r\\n :key=\\\"fieldIndex\\\"\\r\\n :class=\\\"['vuetable-checkboxes', field.dataClass]\\\"\\r\\n >\\r\\n <input type=\\\"checkbox\\\"\\r\\n @change=\\\"toggleCheckbox(item, field.name, $event)\\\"\\r\\n :checked=\\\"rowSelected(item, field.name)\\\">\\r\\n </td>\\r\\n <td v-if=\\\"extractName(field.name) === '__component'\\\" \\r\\n :key=\\\"fieldIndex\\\"\\r\\n :class=\\\"['vuetable-component', field.dataClass]\\\"\\r\\n >\\r\\n <component :is=\\\"extractArgs(field.name)\\\"\\r\\n :row-data=\\\"item\\\" :row-index=\\\"itemIndex\\\" :row-field=\\\"field.sortField\\\"\\r\\n ></component>\\r\\n </td>\\r\\n <td v-if=\\\"extractName(field.name) === '__slot'\\\" \\r\\n :key=\\\"fieldIndex\\\"\\r\\n :class=\\\"['vuetable-slot', field.dataClass]\\\"\\r\\n >\\r\\n <slot :name=\\\"extractArgs(field.name)\\\"\\r\\n :row-data=\\\"item\\\" :row-index=\\\"itemIndex\\\" :row-field=\\\"field.sortField\\\"\\r\\n ></slot>\\r\\n </td>\\r\\n </template>\\r\\n <template v-else>\\r\\n <td v-if=\\\"hasCallback(field)\\\" \\r\\n :key=\\\"fieldIndex\\\"\\r\\n :class=\\\"field.dataClass\\\"\\r\\n v-html=\\\"callCallback(field, item)\\\"\\r\\n @click=\\\"onCellClicked(item, field, $event)\\\"\\r\\n @dblclick=\\\"onCellDoubleClicked(item, field, $event)\\\"\\r\\n @contextmenu=\\\"onCellRightClicked(item, field, $event)\\\"\\r\\n ></td>\\r\\n <td v-else \\r\\n :key=\\\"fieldIndex\\\"\\r\\n :class=\\\"field.dataClass\\\"\\r\\n v-html=\\\"getObjectValue(item, field.name, '')\\\"\\r\\n @click=\\\"onCellClicked(item, field, $event)\\\"\\r\\n @dblclick=\\\"onCellDoubleClicked(item, field, $event)\\\"\\r\\n @contextmenu=\\\"onCellRightClicked(item, field, $event)\\\"\\r\\n ></td>\\r\\n </template>\\r\\n </template>\\r\\n </template>\\r\\n </tr>\\r\\n <template v-if=\\\"useDetailRow\\\">\\r\\n <transition :name=\\\"detailRowTransition\\\" :key=\\\"itemIndex\\\">\\r\\n <tr v-if=\\\"isVisibleDetailRow(item[trackBy])\\\"\\r\\n :class=\\\"[css.detailRowClass]\\\"\\r\\n @click=\\\"onDetailRowClick(item, $event)\\\"\\r\\n >\\r\\n <td :colspan=\\\"countVisibleFields\\\">\\r\\n <component :is=\\\"detailRowComponent\\\" :row-data=\\\"item\\\" :row-index=\\\"itemIndex\\\"></component>\\r\\n </td>\\r\\n </tr>\\r\\n </transition>\\r\\n </template>\\r\\n </template>\\r\\n <template v-if=\\\"displayEmptyDataRow\\\">\\r\\n <tr>\\r\\n <td :colspan=\\\"countVisibleFields\\\" class=\\\"vuetable-empty-result\\\" v-html=\\\"noDataTemplate\\\"></td>\\r\\n </tr>\\r\\n </template>\\r\\n <template v-if=\\\"lessThanMinRows\\\">\\r\\n <tr v-for=\\\"i in blankRows\\\" class=\\\"blank-row\\\" :key=\\\"i\\\">\\r\\n <template v-for=\\\"(field, fieldIndex) in tableFields\\\">\\r\\n <td v-if=\\\"field.visible\\\" :key=\\\"fieldIndex\\\">&nbsp;</td>\\r\\n </template>\\r\\n </tr>\\r\\n </template>\\r\\n </tbody>\\r\\n</table>\\r\\n</template>\\r\\n\\r\\n<script>\\r\\nimport axios from 'axios'\\r\\n\\r\\nexport default {\\r\\n props: {\\r\\n fields: {\\r\\n type: Array,\\r\\n required: true\\r\\n },\\r\\n loadOnStart: {\\r\\n type: Boolean,\\r\\n default: true\\r\\n },\\r\\n apiUrl: {\\r\\n type: String,\\r\\n default: ''\\r\\n },\\r\\n httpMethod: {\\r\\n type: String,\\r\\n default: 'get',\\r\\n validator: (value) => {\\r\\n return ['get', 'post'].indexOf(value) > -1\\r\\n }\\r\\n },\\r\\n reactiveApiUrl: {\\r\\n type: Boolean,\\r\\n default: true\\r\\n },\\r\\n apiMode: {\\r\\n type: Boolean,\\r\\n default: true\\r\\n },\\r\\n data: {\\r\\n type: [Array, Object],\\r\\n default: null\\r\\n },\\r\\n dataTotal: {\\r\\n type: Number,\\r\\n default: 0\\r\\n },\\r\\n dataManager: {\\r\\n type: Function,\\r\\n default: null\\r\\n },\\r\\n dataPath: {\\r\\n type: String,\\r\\n default: 'data'\\r\\n },\\r\\n paginationPath: {\\r\\n type: [String],\\r\\n default: 'links.pagination'\\r\\n },\\r\\n queryParams: {\\r\\n type: [Object, Function],\\r\\n default () {\\r\\n return {\\r\\n sort: 'sort',\\r\\n page: 'page',\\r\\n perPage: 'per_page'\\r\\n }\\r\\n }\\r\\n },\\r\\n appendParams: {\\r\\n type: Object,\\r\\n default () {\\r\\n return {}\\r\\n }\\r\\n },\\r\\n httpOptions: {\\r\\n type: Object,\\r\\n default () {\\r\\n return {}\\r\\n }\\r\\n },\\r\\n httpFetch: {\\r\\n type: Function,\\r\\n default: null\\r\\n },\\r\\n perPage: {\\r\\n type: Number,\\r\\n default: 10\\r\\n },\\r\\n initialPage: {\\r\\n type: Number,\\r\\n default: 1\\r\\n },\\r\\n sortOrder: {\\r\\n type: Array,\\r\\n default () {\\r\\n return []\\r\\n }\\r\\n },\\r\\n multiSort: {\\r\\n type: Boolean,\\r\\n default () {\\r\\n return false\\r\\n }\\r\\n },\\r\\n tableHeight: {\\r\\n type: String,\\r\\n default: null\\r\\n },\\r\\n /*\\r\\n * physical key that will trigger multi-sort option\\r\\n * possible values: 'alt', 'ctrl', 'meta', 'shift'\\r\\n * 'ctrl' might not work as expected on Mac\\r\\n */\\r\\n multiSortKey: {\\r\\n type: String,\\r\\n default: 'alt'\\r\\n },\\r\\n /* deprecated */\\r\\n rowClassCallback: {\\r\\n type: [String, Function],\\r\\n default: ''\\r\\n },\\r\\n rowClass: {\\r\\n type: [String, Function],\\r\\n default: ''\\r\\n },\\r\\n detailRowComponent: {\\r\\n type: String,\\r\\n default: ''\\r\\n },\\r\\n detailRowTransition: {\\r\\n type: String,\\r\\n default: ''\\r\\n },\\r\\n trackBy: {\\r\\n type: String,\\r\\n default: 'id'\\r\\n },\\r\\n css: {\\r\\n type: Object,\\r\\n default () {\\r\\n return {\\r\\n tableClass: 'ui blue selectable celled stackable attached table',\\r\\n loadingClass: 'loading',\\r\\n ascendingIcon: 'blue chevron up icon',\\r\\n descendingIcon: 'blue chevron down icon',\\r\\n ascendingClass: 'sorted-asc',\\r\\n descendingClass: 'sorted-desc',\\r\\n sortableIcon: '',\\r\\n detailRowClass: 'vuetable-detail-row',\\r\\n handleIcon: 'grey sidebar icon',\\r\\n tableBodyClass: 'vuetable-semantic-no-top vuetable-fixed-layout',\\r\\n tableHeaderClass: 'vuetable-fixed-layout'\\r\\n }\\r\\n }\\r\\n },\\r\\n minRows: {\\r\\n type: Number,\\r\\n default: 0\\r\\n },\\r\\n silent: {\\r\\n type: Boolean,\\r\\n default: false\\r\\n },\\r\\n noDataTemplate: {\\r\\n type: String,\\r\\n default() {\\r\\n return 'No Data Available'\\r\\n }\\r\\n },\\r\\n showSortIcons: {\\r\\n type: Boolean,\\r\\n default: true\\r\\n }\\r\\n },\\r\\n data () {\\r\\n return {\\r\\n eventPrefix: 'vuetable:',\\r\\n tableFields: [],\\r\\n tableData: null,\\r\\n tablePagination: null,\\r\\n currentPage: this.initialPage,\\r\\n selectedTo: [],\\r\\n visibleDetailRows: [],\\r\\n lastScrollPosition: 0,\\r\\n scrollBarWidth: '17px', //chrome default\\r\\n scrollVisible: false,\\r\\n }\\r\\n },\\r\\n mounted () {\\r\\n this.normalizeFields()\\r\\n this.normalizeSortOrder()\\r\\n if (this.isFixedHeader) {\\r\\n this.scrollBarWidth = this.getScrollBarWidth() + 'px';\\r\\n }\\r\\n this.$nextTick(function() {\\r\\n this.fireEvent('initialized', this.tableFields)\\r\\n })\\r\\n\\r\\n if (this.loadOnStart) {\\r\\n this.loadData()\\r\\n }\\r\\n if (this.isFixedHeader) {\\r\\n let elem = this.$el.getElementsByClassName('vuetable-body-wrapper')[0];\\r\\n if (elem != null) {\\r\\n elem.addEventListener('scroll', this.handleScroll);\\r\\n }\\r\\n }\\r\\n },\\r\\n destroyed () {\\r\\n let elem = this.$el.getElementsByClassName('vuetable-body-wrapper')[0];\\r\\n if (elem != null) {\\r\\n elem.removeEventListener('scroll', this.handleScroll);\\r\\n }\\r\\n },\\r\\n computed: {\\r\\n version: () => VERSION,\\r\\n useDetailRow () {\\r\\n if (this.tableData && this.tableData[0] && this.detailRowComponent !== '' && typeof this.tableData[0][this.trackBy] === 'undefined') {\\r\\n this.warn('You need to define unique row identifier in order for detail-row feature to work. Use `track-by` prop to define one!')\\r\\n return false\\r\\n }\\r\\n\\r\\n return this.detailRowComponent !== ''\\r\\n },\\r\\n countVisibleFields () {\\r\\n return this.tableFields.filter(function(field) {\\r\\n return field.visible\\r\\n }).length\\r\\n },\\r\\n countTableData () {\\r\\n if (this.tableData === null) {\\r\\n return 0\\r\\n }\\r\\n return this.tableData.length\\r\\n },\\r\\n displayEmptyDataRow () {\\r\\n return this.countTableData === 0 && this.noDataTemplate.length > 0\\r\\n },\\r\\n lessThanMinRows () {\\r\\n if (this.tableData === null || this.tableData.length === 0) {\\r\\n return true\\r\\n }\\r\\n return this.tableData.length < this.minRows\\r\\n },\\r\\n blankRows () {\\r\\n if (this.tableData === null || this.tableData.length === 0) {\\r\\n return this.minRows\\r\\n }\\r\\n if (this.tableData.length >= this.minRows) {\\r\\n return 0\\r\\n }\\r\\n\\r\\n return this.minRows - this.tableData.length\\r\\n },\\r\\n isApiMode () {\\r\\n return this.apiMode\\r\\n },\\r\\n isDataMode () {\\r\\n return ! this.apiMode\\r\\n },\\r\\n isFixedHeader () {\\r\\n return this.tableHeight != null\\r\\n }\\r\\n },\\r\\n methods: {\\r\\n getScrollBarWidth () {\\r\\n const outer = document.createElement('div');\\r\\n const inner = document.createElement('div');\\r\\n\\r\\n outer.style.visibility = 'hidden';\\r\\n outer.style.width = '100px';\\r\\n\\r\\n inner.style.width = '100%';\\r\\n\\r\\n\\r\\n outer.appendChild(inner);\\r\\n document.body.appendChild(outer);\\r\\n\\r\\n\\r\\n const widthWithoutScrollbar = outer.offsetWidth;\\r\\n\\r\\n outer.style.overflow = 'scroll';\\r\\n\\r\\n const widthWithScrollbar = inner.offsetWidth;\\r\\n\\r\\n\\r\\n document.body.removeChild(outer);\\r\\n\\r\\n\\r\\n return (widthWithoutScrollbar - widthWithScrollbar);\\r\\n },\\r\\n handleScroll (e) { //make sure that the header and the body are aligned when scrolling horizontally on a table that is wider than the viewport\\r\\n let horizontal = e.currentTarget.scrollLeft;\\r\\n if (horizontal != this.lastScrollPosition) { //don't modify header scroll if we are scrolling vertically\\r\\n let header = this.$el.getElementsByClassName('vuetable-head-wrapper')[0]\\r\\n if (header != null) {\\r\\n header.scrollLeft = horizontal;\\r\\n }\\r\\n this.lastScrollPosition = horizontal;\\r\\n }\\r\\n\\r\\n },\\r\\n normalizeFields () {\\r\\n if (typeof(this.fields) === 'undefined') {\\r\\n this.warn('You need to provide \\\"fields\\\" prop.')\\r\\n return\\r\\n }\\r\\n\\r\\n this.tableFields = []\\r\\n let self = this\\r\\n let obj\\r\\n this.fields.forEach(function(field, i) {\\r\\n if (typeof (field) === 'string') {\\r\\n obj = {\\r\\n name: field,\\r\\n title: self.setTitle(field),\\r\\n titleClass: '',\\r\\n dataClass: '',\\r\\n callback: null,\\r\\n visible: true,\\r\\n }\\r\\n } else {\\r\\n obj = {\\r\\n name: field.name,\\r\\n width: field.width,\\r\\n title: (field.title === undefined) ? self.setTitle(field.name) : field.title,\\r\\n sortField: field.sortField,\\r\\n titleClass: (field.titleClass === undefined) ? '' : field.titleClass,\\r\\n dataClass: (field.dataClass === undefined) ? '' : field.dataClass,\\r\\n callback: (field.callback === undefined) ? '' : field.callback,\\r\\n visible: (field.visible === undefined) ? true : field.visible,\\r\\n }\\r\\n }\\r\\n self.tableFields.push(obj)\\r\\n })\\r\\n },\\r\\n setData (data) {\\r\\n if (data === null || typeof(data) === 'undefined') return\\r\\n\\r\\n this.fireEvent('loading')\\r\\n\\r\\n if (Array.isArray(data)) {\\r\\n this.tableData = data\\r\\n this.fireEvent('loaded')\\r\\n return\\r\\n }\\r\\n\\r\\n this.tableData = this.getObjectValue(data, this.dataPath, null)\\r\\n this.tablePagination = this.getObjectValue(data, this.paginationPath, null)\\r\\n\\r\\n this.$nextTick(function() {\\r\\n this.fixHeader()\\r\\n this.fireEvent('pagination-data', this.tablePagination)\\r\\n this.fireEvent('loaded')\\r\\n })\\r\\n },\\r\\n setTitle (str) {\\r\\n if (this.isSpecialField(str)) {\\r\\n return ''\\r\\n }\\r\\n\\r\\n return this.titleCase(str)\\r\\n },\\r\\n getTitle (field) {\\r\\n if (typeof(field.title) === 'function') return field.title()\\r\\n\\r\\n return typeof(field.title) === 'undefined'\\r\\n ? field.name.replace('.', ' ')\\r\\n : field.title\\r\\n },\\r\\n renderTitle (field) {\\r\\n let title = this.getTitle(field)\\r\\n\\r\\n if (title.length > 0 && this.isInCurrentSortGroup(field) || this.hasSortableIcon(field)) {\\r\\n let style = `opacity:${this.sortIconOpacity(field)};position:relative;float:right`\\r\\n let iconTag = this.showSortIcons ? this.renderIconTag(['sort-icon', this.sortIcon(field)], `style=\\\"${style}\\\"`) : ''\\r\\n return title + ' ' + iconTag\\r\\n }\\r\\n\\r\\n return title\\r\\n },\\r\\n renderSequence (index) {\\r\\n return this.tablePagination\\r\\n ? this.tablePagination.from + index\\r\\n : index\\r\\n },\\r\\n renderNormalField (field, item) {\\r\\n return this.hasCallback(field)\\r\\n ? this.callCallback(field, item)\\r\\n : this.getObjectValue(item, field.name, '')\\r\\n },\\r\\n isSpecialField (fieldName) {\\r\\n return fieldName.slice(0, 2) === '__'\\r\\n },\\r\\n titleCase (str) {\\r\\n return str.replace(/\\\\w+/g, function(txt) {\\r\\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()\\r\\n })\\r\\n },\\r\\n camelCase (str, delimiter = '_') {\\r\\n let self = this\\r\\n return str.split(delimiter).map(function(item) {\\r\\n return self.titleCase(item)\\r\\n }).join('')\\r\\n },\\r\\n notIn (str, arr) {\\r\\n return arr.indexOf(str) === -1\\r\\n },\\r\\n loadData (success = this.loadSuccess, failed = this.loadFailed) {\\r\\n if (this.isDataMode) {\\r\\n this.callDataManager()\\r\\n return\\r\\n }\\r\\n\\r\\n this.fireEvent('loading')\\r\\n\\r\\n this.httpOptions['params'] = this.getAppendParams( this.getAllQueryParams() )\\r\\n\\r\\n return this.fetch(this.apiUrl, this.httpOptions).then(\\r\\n success,\\r\\n failed\\r\\n ).catch(() => failed())\\r\\n },\\r\\n fetch (apiUrl, httpOptions) {\\r\\n return this.httpFetch\\r\\n ? this.httpFetch(apiUrl, httpOptions)\\r\\n : axios[this.httpMethod](apiUrl, httpOptions)\\r\\n },\\r\\n loadSuccess (response) {\\r\\n this.fireEvent('load-success', response)\\r\\n\\r\\n let body = this.transform(response.data)\\r\\n\\r\\n this.tableData = this.getObjectValue(body, this.dataPath, null)\\r\\n this.tablePagination = this.getObjectValue(body, this.paginationPath, null)\\r\\n\\r\\n if (this.tablePagination === null) {\\r\\n this.warn('vuetable: pagination-path \\\"' + this.paginationPath + '\\\" not found. '\\r\\n + 'It looks like the data returned from the sever does not have pagination information '\\r\\n + \\\"or you may have set it incorrectly.\\\\n\\\"\\r\\n + 'You can explicitly suppress this warning by setting pagination-path=\\\"\\\".'\\r\\n )\\r\\n }\\r\\n\\r\\n this.$nextTick(function() {\\r\\n this.fixHeader()\\r\\n this.fireEvent('pagination-data', this.tablePagination)\\r\\n this.fireEvent('loaded')\\r\\n })\\r\\n },\\r\\n fixHeader() {\\r\\n if (!this.isFixedHeader) {\\r\\n return;\\r\\n }\\r\\n\\r\\n let elem = this.$el.getElementsByClassName('vuetable-body-wrapper')[0]\\r\\n if (elem != null) {\\r\\n if (elem.scrollHeight > elem.clientHeight) {\\r\\n this.scrollVisible = true;\\r\\n }\\r\\n else {\\r\\n this.scrollVisible = false;\\r\\n }\\r\\n }\\r\\n },\\r\\n loadFailed (response) {\\r\\n console.error('load-error', response)\\r\\n this.fireEvent('load-error', response)\\r\\n this.fireEvent('loaded')\\r\\n },\\r\\n transform (data) {\\r\\n let func = 'transform'\\r\\n\\r\\n if (this.parentFunctionExists(func)) {\\r\\n return this.$parent[func].call(this.$parent, data)\\r\\n }\\r\\n\\r\\n return data\\r\\n },\\r\\n parentFunctionExists (func) {\\r\\n return (func !== '' && typeof this.$parent[func] === 'function')\\r\\n },\\r\\n callParentFunction (func, args, defaultValue = null) {\\r\\n if (this.parentFunctionExists(func)) {\\r\\n return this.$parent[func].call(this.$parent, args)\\r\\n }\\r\\n\\r\\n return defaultValue\\r\\n },\\r\\n fireEvent (eventName, args) {\\r\\n this.$emit(this.eventPrefix + eventName, args)\\r\\n },\\r\\n warn (msg) {\\r\\n if (!this.silent) {\\r\\n console.warn(msg)\\r\\n }\\r\\n },\\r\\n getAllQueryParams () {\\r\\n let params = {}\\r\\n\\r\\n if (typeof(this.queryParams) === 'function') {\\r\\n params = this.queryParams(this.sortOrder, this.currentPage, this.perPage)\\r\\n return typeof(params) !== 'object' ? {} : params\\r\\n }\\r\\n\\r\\n params[this.queryParams.sort] = this.getSortParam()\\r\\n params[this.queryParams.page] = this.currentPage\\r\\n params[this.queryParams.perPage] = this.perPage\\r\\n\\r\\n return params\\r\\n },\\r\\n getSortParam () {\\r\\n if (!this.sortOrder || this.sortOrder.field == '') {\\r\\n return ''\\r\\n }\\r\\n\\r\\n if (typeof this.$parent['getSortParam'] === 'function') {\\r\\n return this.$parent['getSortParam'].call(this.$parent, this.sortOrder)\\r\\n }\\r\\n\\r\\n return this.getDefaultSortParam()\\r\\n },\\r\\n getDefaultSortParam () {\\r\\n let result = '';\\r\\n\\r\\n for (let i = 0; i < this.sortOrder.length; i++) {\\r\\n let fieldName = (typeof this.sortOrder[i].sortField === 'undefined')\\r\\n ? this.sortOrder[i].field\\r\\n : this.sortOrder[i].sortField;\\r\\n\\r\\n result += fieldName + '|' + this.sortOrder[i].direction + ((i+1) < this.sortOrder.length ? ',' : '');\\r\\n }\\r\\n return result;\\r\\n },\\r\\n getAppendParams (params) {\\r\\n for (let x in this.appendParams) {\\r\\n params[x] = this.appendParams[x]\\r\\n }\\r\\n\\r\\n return params\\r\\n },\\r\\n extractName (string) {\\r\\n return string.split(':')[0].trim()\\r\\n },\\r\\n extractArgs (string) {\\r\\n return string.split(':')[1]\\r\\n },\\r\\n isSortable (field) {\\r\\n return !(typeof field.sortField === 'undefined')\\r\\n },\\r\\n isInCurrentSortGroup (field) {\\r\\n return this.currentSortOrderPosition(field) !== false;\\r\\n },\\r\\n hasSortableIcon (field) {\\r\\n return this.isSortable(field) && this.css.sortableIcon != ''\\r\\n },\\r\\n currentSortOrderPosition (field) {\\r\\n if ( ! this.isSortable(field)) {\\r\\n return false\\r\\n }\\r\\n\\r\\n for (let i = 0; i < this.sortOrder.length; i++) {\\r\\n if (this.fieldIsInSortOrderPosition(field, i)) {\\r\\n return i;\\r\\n }\\r\\n }\\r\\n\\r\\n return false;\\r\\n },\\r\\n fieldIsInSortOrderPosition (field, i) {\\r\\n return this.sortOrder[i].field === field.name && this.sortOrder[i].sortField === field.sortField\\r\\n },\\r\\n orderBy (field, event) {\\r\\n if ( ! this.isSortable(field) ) return\\r\\n\\r\\n let key = this.multiSortKey.toLowerCase() + 'Key'\\r\\n\\r\\n if (this.multiSort && event[key]) { //adding column to multisort\\r\\n this.multiColumnSort(field)\\r\\n } else {\\r\\n //no multisort, or resetting sort\\r\\n this.singleColumnSort(field)\\r\\n }\\r\\n\\r\\n this.currentPage = 1 // reset page index\\r\\n if (this.apiMode || this.dataManager) {\\r\\n this.loadData()\\r\\n }\\r\\n },\\r\\n multiColumnSort (field) {\\r\\n let i = this.currentSortOrderPosition(field);\\r\\n\\r\\n if(i === false) { //this field is not in the sort array yet\\r\\n this.sortOrder.push({\\r\\n field: field.name,\\r\\n sortField: field.sortField,\\r\\n direction: 'asc'\\r\\n });\\r\\n } else { //this field is in the sort array, now we change its state\\r\\n if(this.sortOrder[i].direction === 'asc') {\\r\\n // switch direction\\r\\n this.sortOrder[i].direction = 'desc'\\r\\n } else {\\r\\n //remove sort condition\\r\\n this.sortOrder.splice(i, 1);\\r\\n }\\r\\n }\\r\\n },\\r\\n singleColumnSort (field) {\\r\\n if (this.sortOrder.length === 0) {\\r\\n this.clearSortOrder()\\r\\n }\\r\\n\\r\\n this.sortOrder.splice(1); //removes additional columns\\r\\n\\r\\n if (this.fieldIsInSortOrderPosition(field, 0)) {\\r\\n // change sort direction\\r\\n this.sortOrder[0].direction = this.sortOrder[0].direction === 'asc' ? 'desc' : 'asc'\\r\\n } else {\\r\\n // reset sort direction\\r\\n this.sortOrder[0].direction = 'asc'\\r\\n }\\r\\n this.sortOrder[0].field = field.name\\r\\n this.sortOrder[0].sortField = field.sortField\\r\\n },\\r\\n clearSortOrder () {\\r\\n this.sortOrder.push({\\r\\n field: '',\\r\\n sortField: '',\\r\\n direction: 'asc'\\r\\n });\\r\\n },\\r\\n sortClass (field) {\\r\\n let cls = ''\\r\\n let i = this.currentSortOrderPosition(field)\\r\\n\\r\\n if (i !== false) {\\r\\n cls = (this.sortOrder[i].direction == 'asc') ? this.css.ascendingClass : this.css.descendingClass\\r\\n }\\r\\n\\r\\n return cls\\r\\n },\\r\\n sortIcon (field) {\\r\\n let cls = this.css.sortableIcon\\r\\n let i = this.currentSortOrderPosition(field)\\r\\n\\r\\n if (i !== false) {\\r\\n cls = (this.sortOrder[i].direction == 'asc') ? this.css.ascendingIcon : this.css.descendingIcon\\r\\n }\\r\\n\\r\\n return cls;\\r\\n },\\r\\n sortIconOpacity (field) {\\r\\n /*\\r\\n * fields with stronger precedence have darker color\\r\\n *\\r\\n * if there are few fields, we go down by 0.3\\r\\n * ex. 2 fields are selected: 1.0, 0.7\\r\\n *\\r\\n * if there are more we go down evenly on the given spectrum\\r\\n * ex. 6 fields are selected: 1.0, 0.86, 0.72, 0.58, 0.44, 0.3\\r\\n */\\r\\n let max = 1.0,\\r\\n min = 0.3,\\r\\n step = 0.3\\r\\n\\r\\n let count = this.sortOrder.length;\\r\\n let current = this.currentSortOrderPosition(field)\\r\\n\\r\\n\\r\\n if(max - count * step < min) {\\r\\n step = (max - min) / (count-1)\\r\\n }\\r\\n\\r\\n let opacity = max - current * step\\r\\n\\r\\n return opacity\\r\\n },\\r\\n hasCallback (item) {\\r\\n return item.callback ? true : false\\r\\n },\\r\\n callCallback (field, item) {\\r\\n if ( ! this.hasCallback(field)) return\\r\\n\\r\\n if(typeof(field.callback) == 'function') {\\r\\n return field.callback(this.getObjectValue(item, field.name))\\r\\n }\\r\\n\\r\\n let args = field.callback.split('|')\\r\\n let func = args.shift()\\r\\n\\r\\n if (typeof this.$parent[func] === 'function') {\\r\\n let value = this.getObjectValue(item, field.name)\\r\\n\\r\\n return (args.length > 0)\\r\\n ? this.$parent[func].apply(this.$parent, [value].concat(args))\\r\\n : this.$parent[func].call(this.$parent, value)\\r\\n }\\r\\n\\r\\n return null\\r\\n },\\r\\n getObjectValue (object, path, defaultValue) {\\r\\n defaultValue = (typeof defaultValue === 'undefined') ? null : defaultValue\\r\\n\\r\\n let obj = object\\r\\n if (path.trim() != '') {\\r\\n let keys = path.split('.')\\r\\n keys.forEach(function(key) {\\r\\n if (obj !== null && typeof obj[key] !== 'undefined' && obj[key] !== null) {\\r\\n obj = obj[key]\\r\\n } else {\\r\\n obj = defaultValue\\r\\n return\\r\\n }\\r\\n })\\r\\n }\\r\\n return obj\\r\\n },\\r\\n toggleCheckbox (dataItem, fieldName, event) {\\r\\n let isChecked = event.target.checked\\r\\n let idColumn = this.trackBy\\r\\n\\r\\n if (dataItem[idColumn] === undefined) {\\r\\n this.warn('__checkbox field: The \\\"'+this.trackBy+'\\\" field does not exist! Make sure the field you specify in \\\"track-by\\\" prop does exist.')\\r\\n return\\r\\n }\\r\\n\\r\\n let key = dataItem[idColumn]\\r\\n if (isChecked) {\\r\\n this.selectId(key)\\r\\n } else {\\r\\n this.unselectId(key)\\r\\n }\\r\\n this.$emit('vuetable:checkbox-toggled', isChecked, dataItem)\\r\\n },\\r\\n selectId (key) {\\r\\n if ( ! this.isSelectedRow(key)) {\\r\\n this.selectedTo.push(key)\\r\\n }\\r\\n },\\r\\n unselectId (key) {\\r\\n this.selectedTo = this.selectedTo.filter(function(item) {\\r\\n return item !== key\\r\\n })\\r\\n },\\r\\n isSelectedRow (key) {\\r\\n return this.selectedTo.indexOf(key) >= 0\\r\\n },\\r\\n rowSelected (dataItem, fieldName){\\r\\n let idColumn = this.trackBy\\r\\n let key = dataItem[idColumn]\\r\\n\\r\\n return this.isSelectedRow(key)\\r\\n },\\r\\n checkCheckboxesState (fieldName) {\\r\\n if (! this.tableData) return\\r\\n\\r\\n let self = this\\r\\n let idColumn = this.trackBy\\r\\n let selector = 'th.vuetable-th-checkbox-' + idColumn + ' input[type=checkbox]'\\r\\n let els = document.querySelectorAll(selector)\\r\\n\\r\\n //fixed:document.querySelectorAll return the typeof nodeList not array\\r\\n if (els.forEach===undefined)\\r\\n els.forEach=function(cb){\\r\\n [].forEach.call(els, cb);\\r\\n }\\r\\n\\r\\n // count how many checkbox row in the current page has been checked\\r\\n let selected = this.tableData.filter(function(item) {\\r\\n return self.selectedTo.indexOf(item[idColumn]) >= 0\\r\\n })\\r\\n\\r\\n // count == 0, clear the checkbox\\r\\n if (selected.length <= 0) {\\r\\n els.forEach(function(el) {\\r\\n el.indeterminate = false\\r\\n })\\r\\n return false\\r\\n }\\r\\n // count > 0 and count < perPage, set checkbox state to 'indeterminate'\\r\\n else if (selected.length < this.perPage) {\\r\\n els.forEach(function(el) {\\r\\n el.indeterminate = true\\r\\n })\\r\\n return true\\r\\n }\\r\\n // count == perPage, set checkbox state to 'checked'\\r\\n else {\\r\\n els.forEach(function(el) {\\r\\n el.indeterminate = false\\r\\n })\\r\\n return true\\r\\n }\\r\\n },\\r\\n toggleAllCheckboxes (fieldName, event) {\\r\\n let self = this\\r\\n let isChecked = event.target.checked\\r\\n let idColumn = this.trackBy\\r\\n\\r\\n if (isChecked) {\\r\\n this.tableData.forEach(function(dataItem) {\\r\\n self.selectId(dataItem[idColumn])\\r\\n })\\r\\n } else {\\r\\n this.tableData.forEach(function(dataItem) {\\r\\n self.unselectId(dataItem[idColumn])\\r\\n })\\r\\n }\\r\\n this.$emit('vuetable:checkbox-toggled-all', isChecked)\\r\\n },\\r\\n gotoPreviousPage () {\\r\\n if (this.currentPage > 1) {\\r\\n this.currentPage--\\r\\n this.loadData()\\r\\n }\\r\\n },\\r\\n gotoNextPage () {\\r\\n if (this.currentPage < this.tablePagination.last_page) {\\r\\n this.currentPage++\\r\\n this.loadData()\\r\\n }\\r\\n },\\r\\n gotoPage (page) {\\r\\n if (page != this.currentPage && (page > 0 && page <= this.tablePagination.last_page)) {\\r\\n this.currentPage = page\\r\\n this.loadData()\\r\\n }\\r\\n },\\r\\n isVisibleDetailRow (rowId) {\\r\\n return this.visibleDetailRows.indexOf( rowId ) >= 0\\r\\n },\\r\\n showDetailRow (rowId) {\\r\\n if (!this.isVisibleDetailRow(rowId)) {\\r\\n this.visibleDetailRows.push(rowId)\\r\\n }\\r\\n },\\r\\n hideDetailRow (rowId) {\\r\\n if (this.isVisibleDetailRow(rowId)) {\\r\\n this.visibleDetailRows.splice(\\r\\n this.visibleDetailRows.indexOf(rowId),\\r\\n 1\\r\\n )\\r\\n }\\r\\n },\\r\\n toggleDetailRow (rowId) {\\r\\n if (this.isVisibleDetailRow(rowId)) {\\r\\n this.hideDetailRow(rowId)\\r\\n } else {\\r\\n this.showDetailRow(rowId)\\r\\n }\\r\\n },\\r\\n showField (index) {\\r\\n if (index < 0 || index > this.tableFields.length) return\\r\\n\\r\\n this.tableFields[index].visible = true\\r\\n },\\r\\n hideField (index) {\\r\\n if (index < 0 || index > this.tableFields.length) return\\r\\n\\r\\n this.tableFields[index].visible = false\\r\\n },\\r\\n toggleField (index) {\\r\\n if (index < 0 || index > this.tableFields.length) return\\r\\n\\r\\n this.tableFields[index].visible = ! this.tableFields[index].visible\\r\\n },\\r\\n renderIconTag (classes, options = '') {\\r\\n return typeof(this.css.renderIcon) === 'undefined'\\r\\n ? `<i class=\\\"${classes.join(' ')}\\\" ${options}></i>`\\r\\n : this.css.renderIcon(classes, options)\\r\\n },\\r\\n makePagination (total = null, perPage = null, currentPage = null) {\\r\\n let pagination = {}\\r\\n total = total === null ? this.dataTotal : total\\r\\n perPage = perPage === null ? this.perPage : perPage\\r\\n currentPage = currentPage === null ? this.currentPage : currentPage\\r\\n\\r\\n return {\\r\\n 'total': total,\\r\\n 'per_page': perPage,\\r\\n 'current_page': currentPage,\\r\\n 'last_page': Math.ceil(total / perPage) || 0,\\r\\n 'next_page_url': '',\\r\\n 'prev_page_url': '',\\r\\n 'from': (currentPage -1) * perPage +1,\\r\\n 'to': Math.min(currentPage * perPage, total)\\r\\n }\\r\\n },\\r\\n normalizeSortOrder () {\\r\\n this.sortOrder.forEach(function(item) {\\r\\n item.sortField = item.sortField || item.field\\r\\n })\\r\\n },\\r\\n callDataManager () {\\r\\n if (this.dataManager === null && this.data === null) return\\r\\n\\r\\n if (Array.isArray(this.data)) {\\r\\n return this.setData(this.data)\\r\\n } \\r\\n \\r\\n this.normalizeSortOrder()\\r\\n\\r\\n return this.setData(\\r\\n this.dataManager\\r\\n ? this.dataManager(this.sortOrder, this.makePagination())\\r\\n : this.data\\r\\n )\\r\\n },\\r\\n onRowClass (dataItem, index) {\\r\\n if (this.rowClassCallback !== '') {\\r\\n this.warn('\\\"row-class-callback\\\" prop is deprecated, please use \\\"row-class\\\" prop instead.')\\r\\n return\\r\\n }\\r\\n\\r\\n if (typeof(this.rowClass) === 'function') {\\r\\n return this.rowClass(dataItem, index)\\r\\n }\\r\\n\\r\\n return this.rowClass\\r\\n },\\r\\n onRowChanged (dataItem) {\\r\\n this.fireEvent('row-changed', dataItem)\\r\\n return true\\r\\n },\\r\\n onRowClicked (dataItem, event) {\\r\\n this.$emit(this.eventPrefix + 'row-clicked', dataItem, event)\\r\\n return true\\r\\n },\\r\\n onRowDoubleClicked (dataItem, event) {\\r\\n this.$emit(this.eventPrefix + 'row-dblclicked', dataItem, event)\\r\\n },\\r\\n onDetailRowClick (dataItem, event) {\\r\\n this.$emit(this.eventPrefix + 'detail-row-clicked', dataItem, event)\\r\\n },\\r\\n onCellClicked (dataItem, field, event) {\\r\\n this.$emit(this.eventPrefix + 'cell-clicked', dataItem, field, event)\\r\\n },\\r\\n onCellDoubleClicked (dataItem, field, event) {\\r\\n this.$emit(this.eventPrefix + 'cell-dblclicked', dataItem, field, event)\\r\\n },\\r\\n onCellRightClicked (dataItem, field, event) {\\r\\n this.$emit(this.eventPrefix + 'cell-rightclicked', dataItem, field, event)\\r\\n },\\r\\n /*\\r\\n * API for externals\\r\\n */\\r\\n changePage (page) {\\r\\n if (page === 'prev') {\\r\\n this.gotoPreviousPage()\\r\\n } else if (page === 'next') {\\r\\n this.gotoNextPage()\\r\\n } else {\\r\\n this.gotoPage(page)\\r\\n }\\r\\n },\\r\\n reload () {\\r\\n return this.loadData()\\r\\n },\\r\\n refresh () {\\r\\n this.currentPage = 1\\r\\n return this.loadData()\\r\\n },\\r\\n resetData () {\\r\\n this.tableData = null\\r\\n this.tablePagination = null\\r\\n this.fireEvent('data-reset')\\r\\n }\\r\\n }, // end: methods\\r\\n watch: {\\r\\n 'multiSort' (newVal, oldVal) {\\r\\n if (newVal === false && this.sortOrder.length > 1) {\\r\\n this.sortOrder.splice(1);\\r\\n this.loadData();\\r\\n }\\r\\n },\\r\\n 'apiUrl' (newVal, oldVal) {\\r\\n if(this.reactiveApiUrl && newVal !== oldVal)\\r\\n this.refresh()\\r\\n },\\r\\n 'data' (newVal, oldVal) {\\r\\n this.setData(newVal)\\r\\n },\\r\\n 'tableHeight' (newVal, oldVal) {\\r\\n this.fixHeader()\\r\\n }\\r\\n },\\r\\n}\\r\\n</script>\\r\\n\\r\\n<style scoped>\\r\\n [v-cloak] {\\r\\n display: none;\\r\\n }\\r\\n .vuetable th.sortable:hover {\\r\\n color: #2185d0;\\r\\n cursor: pointer;\\r\\n }\\r\\n .vuetable-body-wrapper {\\r\\n position:relative;\\r\\n overflow-y:auto;\\r\\n }\\r\\n .vuetable-head-wrapper {\\r\\n overflow-x: hidden;\\r\\n }\\r\\n .vuetable-actions {\\r\\n width: 15%;\\r\\n padding: 12px 0px;\\r\\n text-align: center;\\r\\n }\\r\\n .vuetable-pagination {\\r\\n background: #f9fafb !important;\\r\\n }\\r\\n .vuetable-pagination-info {\\r\\n margin-top: auto;\\r\\n margin-bottom: auto;\\r\\n }\\r\\n .vuetable-empty-result {\\r\\n text-align: center;\\r\\n }\\r\\n .vuetable-clip-text {\\r\\n white-space: pre-wrap;\\r\\n text-overflow: ellipsis;\\r\\n overflow: hidden;\\r\\n display: block;\\r\\n }\\r\\n .vuetable-semantic-no-top {\\r\\n border-top:none !important;\\r\\n margin-top:0 !important;\\r\\n }\\r\\n .vuetable-fixed-layout {\\r\\n table-layout: fixed;\\r\\n }\\r\\n .vuetable-gutter-col {\\r\\n padding: 0 !important;\\r\\n border-left: none !important;\\r\\n border-right: none !important;\\r\\n }\\r\\n</style>\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LHdCQUF3QixPQUFPLDhCQUE4QiwwQkFBMEIsd0JBQXdCLE9BQU8sOEJBQThCLDJCQUEyQixPQUFPLHlCQUF5QixtQkFBbUIsMEJBQTBCLDJCQUEyQixPQUFPLDRCQUE0Qix1Q0FBdUMsT0FBTyxpQ0FBaUMseUJBQXlCLDRCQUE0QixPQUFPLDhCQUE4QiwyQkFBMkIsT0FBTywyQkFBMkIsOEJBQThCLGdDQUFnQyx5QkFBeUIsdUJBQXVCLE9BQU8saUNBQWlDLG1DQUFtQyxnQ0FBZ0MsT0FBTyw4QkFBOEIsNEJBQTRCLE9BQU8sNEJBQTRCLDhCQUE4QixzQ0FBc0MsdUNBQXVDLE9BQU8sbUNBQW1DO0FBQ2hpN0M7QUFDQSxpRUFBZSx1QkFBdUIsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy92dWV0YWJsZS0yL3NyYy9jb21wb25lbnRzL1Z1ZXRhYmxlLnZ1ZT9lZWIxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgXG5bdi1jbG9ha11bZGF0YS12LTViZmEwNWIwXSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4udnVldGFibGUgdGguc29ydGFibGVbZGF0YS12LTViZmEwNWIwXTpob3ZlciB7XG4gIGNvbG9yOiAjMjE4NWQwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4udnVldGFibGUtYm9keS13cmFwcGVyW2RhdGEtdi01YmZhMDViMF0ge1xuICBwb3NpdGlvbjpyZWxhdGl2ZTtcbiAgb3ZlcmZsb3cteTphdXRvO1xufVxuLnZ1ZXRhYmxlLWhlYWQtd3JhcHBlcltkYXRhLXYtNWJmYTA1YjBdIHtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xufVxuLnZ1ZXRhYmxlLWFjdGlvbnNbZGF0YS12LTViZmEwNWIwXSB7XG4gIHdpZHRoOiAxNSU7XG4gIHBhZGRpbmc6IDEycHggMHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4udnVldGFibGUtcGFnaW5hdGlvbltkYXRhLXYtNWJmYTA1YjBdIHtcbiAgYmFja2dyb3VuZDogI2Y5ZmFmYiAhaW1wb3J0YW50O1xufVxuLnZ1ZXRhYmxlLXBhZ2luYXRpb24taW5mb1tkYXRhLXYtNWJmYTA1YjBdIHtcbiAgbWFyZ2luLXRvcDogYXV0bztcbiAgbWFyZ2luLWJvdHRvbTogYXV0bztcbn1cbi52dWV0YWJsZS1lbXB0eS1yZXN1bHRbZGF0YS12LTViZmEwNWIwXSB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi52dWV0YWJsZS1jbGlwLXRleHRbZGF0YS12LTViZmEwNWIwXSB7XG4gIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLnZ1ZXRhYmxlLXNlbWFudGljLW5vLXRvcFtkYXRhLXYtNWJmYTA1YjBdIHtcbiAgYm9yZGVyLXRvcDpub25lICFpbXBvcnRhbnQ7XG4gIG1hcmdpbi10b3A6MCAhaW1wb3J0YW50O1xufVxuLnZ1ZXRhYmxlLWZpeGVkLWxheW91dFtkYXRhLXYtNWJmYTA1YjBdIHtcbiAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbn1cbi52dWV0YWJsZS1ndXR0ZXItY29sW2RhdGEtdi01YmZhMDViMF0ge1xuICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gIGJvcmRlci1sZWZ0OiBub25lICAhaW1wb3J0YW50O1xuICBib3JkZXItcmlnaHQ6IG5vbmUgICFpbXBvcnRhbnQ7XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy92dWV0YWJsZS0yL3NyYy9jb21wb25lbnRzL1Z1ZXRhYmxlLnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiO0FBaTBDQTtFQUNBLGFBQUE7QUFDQTtBQUNBO0VBQ0EsY0FBQTtFQUNBLGVBQUE7QUFDQTtBQUNBO0VBQ0EsaUJBQUE7RUFDQSxlQUFBO0FBQ0E7QUFDQTtFQUNBLGtCQUFBO0FBQ0E7QUFDQTtFQUNBLFVBQUE7RUFDQSxpQkFBQTtFQUNBLGtCQUFBO0FBQ0E7QUFDQTtFQUNBLDhCQUFBO0FBQ0E7QUFDQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7QUFDQTtBQUNBO0VBQ0Esa0JBQUE7QUFDQTtBQUNBO0VBQ0EscUJBQUE7RUFDQSx1QkFBQTtFQUNBLGdCQUFBO0VBQ0EsY0FBQTtBQUNBO0FBQ0E7RUFDQSwwQkFBQTtFQUNBLHVCQUFBO0FBQ0E7QUFDQTtFQUNBLG1CQUFBO0FBQ0E7QUFDQTtFQUNBLHFCQUFBO0VBQ0EsNkJBQUE7RUFDQSw4QkFBQTtBQUNBXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIjx0ZW1wbGF0ZT5cXHJcXG48ZGl2IHYtaWY9XFxcImlzRml4ZWRIZWFkZXJcXFwiPlxcclxcbiAgPGRpdiBjbGFzcz1cXFwidnVldGFibGUtaGVhZC13cmFwcGVyXFxcIj5cXHJcXG4gICAgPHRhYmxlIDpjbGFzcz1cXFwiWyd2dWV0YWJsZScsIGNzcy50YWJsZUNsYXNzLCBjc3MudGFibGVIZWFkZXJDbGFzc11cXFwiPlxcclxcbiAgICA8dGhlYWQ+XFxyXFxuICAgICAgPHRyPlxcclxcbiAgICAgICAgPHRlbXBsYXRlIHYtZm9yPVxcXCIoZmllbGQsIGZpZWxkSW5kZXgpIGluIHRhYmxlRmllbGRzXFxcIj5cXHJcXG4gICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XFxcImZpZWxkLnZpc2libGVcXFwiPlxcclxcbiAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVxcXCJpc1NwZWNpYWxGaWVsZChmaWVsZC5uYW1lKVxcXCI+XFxyXFxuICAgICAgICAgICAgICA8dGggdi1pZj1cXFwiZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gJ19fY2hlY2tib3gnXFxcIlxcclxcbiAgICAgICAgICAgICAgICA6a2V5PVxcXCJmaWVsZEluZGV4XFxcIlxcclxcbiAgICAgICAgICAgICAgICA6c3R5bGU9XFxcInt3aWR0aDogZmllbGQud2lkdGh9XFxcIlxcclxcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XFxcIlsndnVldGFibGUtdGgtY2hlY2tib3gtJyt0cmFja0J5LCBmaWVsZC50aXRsZUNsYXNzXVxcXCJcXHJcXG4gICAgICAgICAgICAgID5cXHJcXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XFxcImNoZWNrYm94XFxcIiBAY2hhbmdlPVxcXCJ0b2dnbGVBbGxDaGVja2JveGVzKGZpZWxkLm5hbWUsICRldmVudClcXFwiXFxyXFxuICAgICAgICAgICAgICAgICAgOmNoZWNrZWQ9XFxcImNoZWNrQ2hlY2tib3hlc1N0YXRlKGZpZWxkLm5hbWUpXFxcIj5cXHJcXG4gICAgICAgICAgICAgIDwvdGg+XFxyXFxuICAgICAgICAgICAgICA8dGggdi1pZj1cXFwiZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gJ19fY29tcG9uZW50J1xcXCJcXHJcXG4gICAgICAgICAgICAgICAgOmtleT1cXFwiZmllbGRJbmRleFxcXCJcXHJcXG4gICAgICAgICAgICAgICAgOnN0eWxlPVxcXCJ7d2lkdGg6IGZpZWxkLndpZHRofVxcXCJcXHJcXG4gICAgICAgICAgICAgICAgOmNsYXNzPVxcXCJbJ3Z1ZXRhYmxlLXRoLWNvbXBvbmVudC0nK3RyYWNrQnksIGZpZWxkLnRpdGxlQ2xhc3MsIHNvcnRDbGFzcyhmaWVsZCksIHsnc29ydGFibGUnOiBpc1NvcnRhYmxlKGZpZWxkKX1dXFxcIlxcclxcbiAgICAgICAgICAgICAgICB2LWh0bWw9XFxcInJlbmRlclRpdGxlKGZpZWxkKVxcXCJcXHJcXG4gICAgICAgICAgICAgICAgQGNsaWNrPVxcXCJvcmRlckJ5KGZpZWxkLCAkZXZlbnQpXFxcIlxcclxcbiAgICAgICAgICAgICAgPjwvdGg+XFxyXFxuICAgICAgICAgICAgICA8dGggdi1pZj1cXFwiZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gJ19fc2xvdCdcXFwiXFxyXFxuICAgICAgICAgICAgICAgIDprZXk9XFxcImZpZWxkSW5kZXhcXFwiXFxyXFxuICAgICAgICAgICAgICAgIDpzdHlsZT1cXFwie3dpZHRoOiBmaWVsZC53aWR0aH1cXFwiXFxyXFxuICAgICAgICAgICAgICAgIDpjbGFzcz1cXFwiWyd2dWV0YWJsZS10aC1zbG90LScrZXh0cmFjdEFyZ3MoZmllbGQubmFtZSksIGZpZWxkLnRpdGxlQ2xhc3MsIHNvcnRDbGFzcyhmaWVsZCksIHsnc29ydGFibGUnOiBpc1NvcnRhYmxlKGZpZWxkKX1dXFxcIlxcclxcbiAgICAgICAgICAgICAgICB2LWh0bWw9XFxcInJlbmRlclRpdGxlKGZpZWxkKVxcXCJcXHJcXG4gICAgICAgICAgICAgICAgQGNsaWNrPVxcXCJvcmRlckJ5KGZpZWxkLCAkZXZlbnQpXFxcIlxcclxcbiAgICAgICAgICAgICAgPjwvdGg+XFxyXFxuICAgICAgICAgICAgICA8dGggdi1pZj1cXFwiZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gJ19fc2VxdWVuY2UnXFxcIlxcclxcbiAgICAgICAgICAgICAgICA6a2V5PVxcXCJmaWVsZEluZGV4XFxcIlxcclxcbiAgICAgICAgICAgICAgICA6c3R5bGU9XFxcInt3aWR0aDogZmllbGQud2lkdGh9XFxcIlxcclxcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XFxcIlsndnVldGFibGUtdGgtc2VxdWVuY2UnLCBmaWVsZC50aXRsZUNsYXNzIHx8ICcnXVxcXCIgdi1odG1sPVxcXCJyZW5kZXJUaXRsZShmaWVsZClcXFwiPlxcclxcbiAgICAgICAgICAgICAgPC90aD5cXHJcXG4gICAgICAgICAgICAgIDx0aCB2LWlmPVxcXCJub3RJbihleHRyYWN0TmFtZShmaWVsZC5uYW1lKSwgWydfX3NlcXVlbmNlJywgJ19fY2hlY2tib3gnLCAnX19jb21wb25lbnQnLCAnX19zbG90J10pXFxcIlxcclxcbiAgICAgICAgICAgICAgICA6a2V5PVxcXCJmaWVsZEluZGV4XFxcIlxcclxcbiAgICAgICAgICAgICAgICA6c3R5bGU9XFxcInt3aWR0aDogZmllbGQud2lkdGh9XFxcIlxcclxcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XFxcIlsndnVldGFibGUtdGgtJytmaWVsZC5uYW1lLCBmaWVsZC50aXRsZUNsYXNzIHx8ICcnXVxcXCIgdi1odG1sPVxcXCJyZW5kZXJUaXRsZShmaWVsZClcXFwiPlxcclxcbiAgICAgICAgICAgICAgPC90aD5cXHJcXG4gICAgICAgICAgICA8L3RlbXBsYXRlPlxcclxcbiAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XFxyXFxuICAgICAgICAgICAgICA8dGggQGNsaWNrPVxcXCJvcmRlckJ5KGZpZWxkLCAkZXZlbnQpXFxcIlxcclxcbiAgICAgICAgICAgICAgICA6a2V5PVxcXCJmaWVsZEluZGV4XFxcIlxcclxcbiAgICAgICAgICAgICAgICA6aWQ9XFxcIidfJyArIGZpZWxkLm5hbWVcXFwiXFxyXFxuICAgICAgICAgICAgICAgIDpzdHlsZT1cXFwie3dpZHRoOiBmaWVsZC53aWR0aH1cXFwiXFxyXFxuICAgICAgICAgICAgICAgIDpjbGFzcz1cXFwiWyd2dWV0YWJsZS10aC0nK2ZpZWxkLm5hbWUsIGZpZWxkLnRpdGxlQ2xhc3MsIHNvcnRDbGFzcyhmaWVsZCksIHsnc29ydGFibGUnOiBpc1NvcnRhYmxlKGZpZWxkKX1dXFxcIlxcclxcbiAgICAgICAgICAgICAgICB2LWh0bWw9XFxcInJlbmRlclRpdGxlKGZpZWxkKVxcXCJcXHJcXG4gICAgICAgICAgICAgID48L3RoPlxcclxcbiAgICAgICAgICAgIDwvdGVtcGxhdGU+XFxyXFxuICAgICAgICAgIDwvdGVtcGxhdGU+XFxyXFxuICAgICAgICA8L3RlbXBsYXRlPlxcclxcbiAgICAgICAgPHRoIHYtaWY9XFxcInNjcm9sbFZpc2libGVcXFwiIDpzdHlsZT1cXFwie3dpZHRoOiBzY3JvbGxCYXJXaWR0aH1cXFwiIGNsYXNzPVxcXCJ2dWV0YWJsZS1ndXR0ZXItY29sXFxcIj48L3RoPlxcclxcbiAgICAgIDwvdHI+XFxyXFxuICAgIDwvdGhlYWQ+XFxyXFxuICAgIDwvdGFibGU+XFxyXFxuICA8L2Rpdj5cXHJcXG4gIDxkaXYgY2xhc3M9XFxcInZ1ZXRhYmxlLWJvZHktd3JhcHBlclxcXCIgOnN0eWxlPVxcXCJ7aGVpZ2h0OiB0YWJsZUhlaWdodH1cXFwiPlxcclxcbiAgICA8dGFibGUgOmNsYXNzPVxcXCJbJ3Z1ZXRhYmxlJywgY3NzLnRhYmxlQ2xhc3MsIGNzcy50YWJsZUJvZHlDbGFzc11cXFwiPlxcclxcbiAgICAgIDxjb2xncm91cD5cXHJcXG4gICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cXFwiKGZpZWxkLCBmaWVsZEluZGV4KSBpbiB0YWJsZUZpZWxkc1xcXCI+XFxyXFxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVxcXCJmaWVsZC52aXNpYmxlXFxcIj5cXHJcXG4gICAgICAgICAgICA8Y29sXFxyXFxuICAgICAgICAgICAgICA6a2V5PVxcXCJmaWVsZEluZGV4XFxcIlxcclxcbiAgICAgICAgICAgICAgOmlkPVxcXCInX2NvbF8nICsgZmllbGQubmFtZVxcXCJcXHJcXG4gICAgICAgICAgICAgIDpzdHlsZT1cXFwie3dpZHRoOiBmaWVsZC53aWR0aH1cXFwiXFxyXFxuICAgICAgICAgICAgICA6Y2xhc3M9XFxcIlsndnVldGFibGUtdGgtJytmaWVsZC5uYW1lLCBmaWVsZC50aXRsZUNsYXNzXVxcXCJcXHJcXG4gICAgICAgICAgICAvPlxcclxcbiAgICAgICAgICA8L3RlbXBsYXRlPlxcclxcbiAgICAgICAgPC90ZW1wbGF0ZT5cXHJcXG4gICAgICA8L2NvbGdyb3VwPlxcclxcbiAgICAgIDx0Ym9keSB2LWNsb2FrIGNsYXNzPVxcXCJ2dWV0YWJsZS1ib2R5XFxcIj5cXHJcXG4gICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cXFwiKGl0ZW0sIGl0ZW1JbmRleCkgaW4gdGFibGVEYXRhXFxcIj5cXHJcXG4gICAgICAgICAgPHRyIFxcclxcbiAgICAgICAgICAgIDprZXk9XFxcIml0ZW1JbmRleFxcXCJcXHJcXG4gICAgICAgICAgICA6aXRlbS1pbmRleD1cXFwiaXRlbUluZGV4XFxcIiBcXHJcXG4gICAgICAgICAgICA6cmVuZGVyPVxcXCJvblJvd0NoYW5nZWQoaXRlbSlcXFwiIFxcclxcbiAgICAgICAgICAgIDpjbGFzcz1cXFwib25Sb3dDbGFzcyhpdGVtLCBpdGVtSW5kZXgpXFxcIlxcclxcbiAgICAgICAgICAgIEBjbGljaz1cXFwib25Sb3dDbGlja2VkKGl0ZW0sICRldmVudClcXFwiIFxcclxcbiAgICAgICAgICAgIEBkYmxjbGljaz1cXFwib25Sb3dEb3VibGVDbGlja2VkKGl0ZW0sICRldmVudClcXFwiIFxcclxcbiAgICAgICAgICA+XFxyXFxuICAgICAgICAgICAgPHRlbXBsYXRlIHYtZm9yPVxcXCIoZmllbGQsIGZpZWxkSW5kZXgpIGluIHRhYmxlRmllbGRzXFxcIj5cXHJcXG4gICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVxcXCJmaWVsZC52aXNpYmxlXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XFxcImlzU3BlY2lhbEZpZWxkKGZpZWxkLm5hbWUpXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgICA8dGQgdi1pZj1cXFwiZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gJ19fc2VxdWVuY2UnXFxcIiBcXHJcXG4gICAgICAgICAgICAgICAgICAgIDprZXk9XFxcImZpZWxkSW5kZXhcXFwiXFxyXFxuICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XFxcIlsndnVldGFibGUtc2VxdWVuY2UnLCBmaWVsZC5kYXRhQ2xhc3NdXFxcIlxcclxcbiAgICAgICAgICAgICAgICAgICAgdi1odG1sPVxcXCJyZW5kZXJTZXF1ZW5jZShpdGVtSW5kZXgpXFxcIj5cXHJcXG4gICAgICAgICAgICAgICAgICA8L3RkPlxcclxcbiAgICAgICAgICAgICAgICAgIDx0ZCB2LWlmPVxcXCJleHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PSAnX19oYW5kbGUnXFxcIiBcXHJcXG4gICAgICAgICAgICAgICAgICAgIDprZXk9XFxcImZpZWxkSW5kZXhcXFwiXFxyXFxuICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XFxcIlsndnVldGFibGUtaGFuZGxlJywgZmllbGQuZGF0YUNsYXNzXVxcXCJcXHJcXG4gICAgICAgICAgICAgICAgICAgIHYtaHRtbD1cXFwicmVuZGVySWNvblRhZyhbJ2hhbmRsZS1pY29uJywgY3NzLmhhbmRsZUljb25dKVxcXCJcXHJcXG4gICAgICAgICAgICAgICAgICA+PC90ZD5cXHJcXG4gICAgICAgICAgICAgICAgICA8dGQgdi1pZj1cXFwiZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gJ19fY2hlY2tib3gnXFxcIiBcXHJcXG4gICAgICAgICAgICAgICAgICAgIDprZXk9XFxcImZpZWxkSW5kZXhcXFwiXFxyXFxuICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XFxcIlsndnVldGFibGUtY2hlY2tib3hlcycsIGZpZWxkLmRhdGFDbGFzc11cXFwiXFxyXFxuICAgICAgICAgICAgICAgICAgPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XFxcImNoZWNrYm94XFxcIlxcclxcbiAgICAgICAgICAgICAgICAgICAgICBAY2hhbmdlPVxcXCJ0b2dnbGVDaGVja2JveChpdGVtLCBmaWVsZC5uYW1lLCAkZXZlbnQpXFxcIlxcclxcbiAgICAgICAgICAgICAgICAgICAgICA6Y2hlY2tlZD1cXFwicm93U2VsZWN0ZWQoaXRlbSwgZmllbGQubmFtZSlcXFwiPlxcclxcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XFxyXFxuICAgICAgICAgICAgICAgICAgPHRkIHYtaWY9XFxcImV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09PSAnX19jb21wb25lbnQnXFxcIiBcXHJcXG4gICAgICAgICAgICAgICAgICAgIDprZXk9XFxcImZpZWxkSW5kZXhcXFwiXFxyXFxuICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XFxcIlsndnVldGFibGUtY29tcG9uZW50JywgZmllbGQuZGF0YUNsYXNzXVxcXCJcXHJcXG4gICAgICAgICAgICAgICAgICA+XFxyXFxuICAgICAgICAgICAgICAgICAgICA8Y29tcG9uZW50IDppcz1cXFwiZXh0cmFjdEFyZ3MoZmllbGQubmFtZSlcXFwiXFxyXFxuICAgICAgICAgICAgICAgICAgICAgIDpyb3ctZGF0YT1cXFwiaXRlbVxcXCIgOnJvdy1pbmRleD1cXFwiaXRlbUluZGV4XFxcIiA6cm93LWZpZWxkPVxcXCJmaWVsZC5zb3J0RmllbGRcXFwiXFxyXFxuICAgICAgICAgICAgICAgICAgICA+PC9jb21wb25lbnQ+XFxyXFxuICAgICAgICAgICAgICAgICAgPC90ZD5cXHJcXG4gICAgICAgICAgICAgICAgICA8dGQgdi1pZj1cXFwiZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT09ICdfX3Nsb3QnXFxcIiBcXHJcXG4gICAgICAgICAgICAgICAgICAgIDprZXk9XFxcImZpZWxkSW5kZXhcXFwiXFxyXFxuICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XFxcIlsndnVldGFibGUtc2xvdCcsIGZpZWxkLmRhdGFDbGFzc11cXFwiXFxyXFxuICAgICAgICAgICAgICAgICAgPlxcclxcbiAgICAgICAgICAgICAgICAgICAgPHNsb3QgOm5hbWU9XFxcImV4dHJhY3RBcmdzKGZpZWxkLm5hbWUpXFxcIlxcclxcbiAgICAgICAgICAgICAgICAgICAgICA6cm93LWRhdGE9XFxcIml0ZW1cXFwiIDpyb3ctaW5kZXg9XFxcIml0ZW1JbmRleFxcXCIgOnJvdy1maWVsZD1cXFwiZmllbGQuc29ydEZpZWxkXFxcIlxcclxcbiAgICAgICAgICAgICAgICAgICAgPjwvc2xvdD5cXHJcXG4gICAgICAgICAgICAgICAgICA8L3RkPlxcclxcbiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxcclxcbiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1lbHNlPlxcclxcbiAgICAgICAgICAgICAgICAgIDx0ZCA6Y2xhc3M9XFxcImZpZWxkLmRhdGFDbGFzc1xcXCJcXHJcXG4gICAgICAgICAgICAgICAgICAgIDprZXk9XFxcImZpZWxkSW5kZXhcXFwiXFxyXFxuICAgICAgICAgICAgICAgICAgICB2LWh0bWw9XFxcInJlbmRlck5vcm1hbEZpZWxkKGZpZWxkLCBpdGVtKVxcXCJcXHJcXG4gICAgICAgICAgICAgICAgICAgIEBjbGljaz1cXFwib25DZWxsQ2xpY2tlZChpdGVtLCBmaWVsZCwgJGV2ZW50KVxcXCJcXHJcXG4gICAgICAgICAgICAgICAgICAgIEBkYmxjbGljaz1cXFwib25DZWxsRG91YmxlQ2xpY2tlZChpdGVtLCBmaWVsZCwgJGV2ZW50KVxcXCJcXHJcXG4gICAgICAgICAgICAgICAgICAgIEBjb250ZXh0bWVudT1cXFwib25DZWxsUmlnaHRDbGlja2VkKGl0ZW0sIGZpZWxkLCAkZXZlbnQpXFxcIlxcclxcbiAgICAgICAgICAgICAgICAgID48L3RkPlxcclxcbiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxcclxcbiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cXHJcXG4gICAgICAgICAgICA8L3RlbXBsYXRlPlxcclxcbiAgICAgICAgICA8L3RyPlxcclxcbiAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cXFwidXNlRGV0YWlsUm93XFxcIj5cXHJcXG4gICAgICAgICAgICA8dHJhbnNpdGlvbiA6bmFtZT1cXFwiZGV0YWlsUm93VHJhbnNpdGlvblxcXCIgOmtleT1cXFwiaXRlbUluZGV4XFxcIj5cXHJcXG4gICAgICAgICAgICAgIDx0ciB2LWlmPVxcXCJpc1Zpc2libGVEZXRhaWxSb3coaXRlbVt0cmFja0J5XSlcXFwiXFxyXFxuICAgICAgICAgICAgICAgIDpjbGFzcz1cXFwiW2Nzcy5kZXRhaWxSb3dDbGFzc11cXFwiXFxyXFxuICAgICAgICAgICAgICAgIEBjbGljaz1cXFwib25EZXRhaWxSb3dDbGljayhpdGVtLCAkZXZlbnQpXFxcIlxcclxcbiAgICAgICAgICAgICAgPlxcclxcbiAgICAgICAgICAgICAgICA8dGQgOmNvbHNwYW49XFxcImNvdW50VmlzaWJsZUZpZWxkc1xcXCI+XFxyXFxuICAgICAgICAgICAgICAgICAgPGNvbXBvbmVudCA6aXM9XFxcImRldGFpbFJvd0NvbXBvbmVudFxcXCIgOnJvdy1kYXRhPVxcXCJpdGVtXFxcIiA6cm93LWluZGV4PVxcXCJpdGVtSW5kZXhcXFwiPjwvY29tcG9uZW50PlxcclxcbiAgICAgICAgICAgICAgICA8L3RkPlxcclxcbiAgICAgICAgICAgICAgPC90cj5cXHJcXG4gICAgICAgICAgICA8L3RyYW5zaXRpb24+XFxyXFxuICAgICAgICAgIDwvdGVtcGxhdGU+XFxyXFxuICAgICAgICA8L3RlbXBsYXRlPlxcclxcbiAgICAgICAgPHRlbXBsYXRlIHYtaWY9XFxcImRpc3BsYXlFbXB0eURhdGFSb3dcXFwiPlxcclxcbiAgICAgICAgICA8dHI+XFxyXFxuICAgICAgICAgICAgPHRkIDpjb2xzcGFuPVxcXCJjb3VudFZpc2libGVGaWVsZHNcXFwiIGNsYXNzPVxcXCJ2dWV0YWJsZS1lbXB0eS1yZXN1bHRcXFwiIHYtaHRtbD1cXFwibm9EYXRhVGVtcGxhdGVcXFwiPjwvdGQ+XFxyXFxuICAgICAgICAgIDwvdHI+XFxyXFxuICAgICAgICA8L3RlbXBsYXRlPlxcclxcbiAgICAgICAgPHRlbXBsYXRlIHYtaWY9XFxcImxlc3NUaGFuTWluUm93c1xcXCI+XFxyXFxuICAgICAgICAgIDx0ciB2LWZvcj1cXFwiaSBpbiBibGFua1Jvd3NcXFwiIGNsYXNzPVxcXCJibGFuay1yb3dcXFwiIDprZXk9XFxcImlcXFwiPlxcclxcbiAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cXFwiKGZpZWxkLCBmaWVsZEluZGV4KSBpbiB0YWJsZUZpZWxkc1xcXCI+XFxyXFxuICAgICAgICAgICAgICA8dGQgdi1pZj1cXFwiZmllbGQudmlzaWJsZVxcXCIgOmtleT1cXFwiZmllbGRJbmRleFxcXCI+Jm5ic3A7PC90ZD5cXHJcXG4gICAgICAgICAgICA8L3RlbXBsYXRlPlxcclxcbiAgICAgICAgICA8L3RyPlxcclxcbiAgICAgICAgPC90ZW1wbGF0ZT5cXHJcXG4gICAgICA8L3Rib2R5PlxcclxcbiAgICA8L3RhYmxlPlxcclxcbiAgPC9kaXY+XFxyXFxuPC9kaXY+XFxyXFxuPHRhYmxlIHYtZWxzZSA6Y2xhc3M9XFxcIlsndnVldGFibGUnLCBjc3MudGFibGVDbGFzc11cXFwiPiA8IS0tIG5vIGZpeGVkIGhlYWRlciAtIHJlZ3VsYXIgdGFibGUgLS0+XFxyXFxuICA8dGhlYWQ+XFxyXFxuICAgIDx0cj5cXHJcXG4gICAgICA8dGVtcGxhdGUgdi1mb3I9XFxcIihmaWVsZCwgZmllbGRJbmRleCkgaW4gdGFibGVGaWVsZHNcXFwiPlxcclxcbiAgICAgICAgPHRlbXBsYXRlIHYtaWY9XFxcImZpZWxkLnZpc2libGVcXFwiPlxcclxcbiAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cXFwiaXNTcGVjaWFsRmllbGQoZmllbGQubmFtZSlcXFwiPlxcclxcbiAgICAgICAgICAgIDx0aCB2LWlmPVxcXCJleHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PSAnX19jaGVja2JveCdcXFwiXFxyXFxuICAgICAgICAgICAgICA6a2V5PVxcXCJmaWVsZEluZGV4XFxcIlxcclxcbiAgICAgICAgICAgICAgOnN0eWxlPVxcXCJ7d2lkdGg6IGZpZWxkLndpZHRofVxcXCJcXHJcXG4gICAgICAgICAgICAgIDpjbGFzcz1cXFwiWyd2dWV0YWJsZS10aC1jaGVja2JveC0nK3RyYWNrQnksIGZpZWxkLnRpdGxlQ2xhc3NdXFxcIlxcclxcbiAgICAgICAgICAgID5cXHJcXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJjaGVja2JveFxcXCIgQGNoYW5nZT1cXFwidG9nZ2xlQWxsQ2hlY2tib3hlcyhmaWVsZC5uYW1lLCAkZXZlbnQpXFxcIlxcclxcbiAgICAgICAgICAgICAgICA6Y2hlY2tlZD1cXFwiY2hlY2tDaGVja2JveGVzU3RhdGUoZmllbGQubmFtZSlcXFwiPlxcclxcbiAgICAgICAgICAgIDwvdGg+XFxyXFxuICAgICAgICAgICAgPHRoIHYtaWY9XFxcImV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09ICdfX2NvbXBvbmVudCdcXFwiXFxyXFxuICAgICAgICAgICAgICA6a2V5PVxcXCJmaWVsZEluZGV4XFxcIlxcclxcbiAgICAgICAgICAgICAgOnN0eWxlPVxcXCJ7d2lkdGg6IGZpZWxkLndpZHRofVxcXCJcXHJcXG4gICAgICAgICAgICAgIDpjbGFzcz1cXFwiWyd2dWV0YWJsZS10aC1jb21wb25lbnQtJyt0cmFja0J5LCBmaWVsZC50aXRsZUNsYXNzLCBzb3J0Q2xhc3MoZmllbGQpLCB7J3NvcnRhYmxlJzogaXNTb3J0YWJsZShmaWVsZCl9XVxcXCJcXHJcXG4gICAgICAgICAgICAgIHYtaHRtbD1cXFwicmVuZGVyVGl0bGUoZmllbGQpXFxcIlxcclxcbiAgICAgICAgICAgICAgQGNsaWNrPVxcXCJvcmRlckJ5KGZpZWxkLCAkZXZlbnQpXFxcIlxcclxcbiAgICAgICAgICAgID48L3RoPlxcclxcbiAgICAgICAgICAgIDx0aCB2LWlmPVxcXCJleHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PSAnX19zbG90J1xcXCJcXHJcXG4gICAgICAgICAgICAgIDprZXk9XFxcImZpZWxkSW5kZXhcXFwiXFxyXFxuICAgICAgICAgICAgICA6c3R5bGU9XFxcInt3aWR0aDogZmllbGQud2lkdGh9XFxcIlxcclxcbiAgICAgICAgICAgICAgOmNsYXNzPVxcXCJbJ3Z1ZXRhYmxlLXRoLXNsb3QtJytleHRyYWN0QXJncyhmaWVsZC5uYW1lKSwgZmllbGQudGl0bGVDbGFzcywgc29ydENsYXNzKGZpZWxkKSwgeydzb3J0YWJsZSc6IGlzU29ydGFibGUoZmllbGQpfV1cXFwiXFxyXFxuICAgICAgICAgICAgICB2LWh0bWw9XFxcInJlbmRlclRpdGxlKGZpZWxkKVxcXCJcXHJcXG4gICAgICAgICAgICAgIEBjbGljaz1cXFwib3JkZXJCeShmaWVsZCwgJGV2ZW50KVxcXCJcXHJcXG4gICAgICAgICAgICA+PC90aD5cXHJcXG4gICAgICAgICAgICA8dGggdi1pZj1cXFwiZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gJ19fc2VxdWVuY2UnXFxcIlxcclxcbiAgICAgICAgICAgICAgOmtleT1cXFwiZmllbGRJbmRleFxcXCJcXHJcXG4gICAgICAgICAgICAgIDpzdHlsZT1cXFwie3dpZHRoOiBmaWVsZC53aWR0aH1cXFwiXFxyXFxuICAgICAgICAgICAgICA6Y2xhc3M9XFxcIlsndnVldGFibGUtdGgtc2VxdWVuY2UnLCBmaWVsZC50aXRsZUNsYXNzIHx8ICcnLCBzb3J0Q2xhc3MoZmllbGQpXVxcXCIgdi1odG1sPVxcXCJyZW5kZXJUaXRsZShmaWVsZClcXFwiXFxyXFxuICAgICAgICAgICAgPjwvdGg+XFxyXFxuICAgICAgICAgICAgPHRoIHYtaWY9XFxcIm5vdEluKGV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpLCBbJ19fc2VxdWVuY2UnLCAnX19jaGVja2JveCcsICdfX2NvbXBvbmVudCcsICdfX3Nsb3QnXSlcXFwiXFxyXFxuICAgICAgICAgICAgICA6a2V5PVxcXCJmaWVsZEluZGV4XFxcIlxcclxcbiAgICAgICAgICAgICAgOnN0eWxlPVxcXCJ7d2lkdGg6IGZpZWxkLndpZHRofVxcXCJcXHJcXG4gICAgICAgICAgICAgIDpjbGFzcz1cXFwiWyd2dWV0YWJsZS10aC0nK2ZpZWxkLm5hbWUsIGZpZWxkLnRpdGxlQ2xhc3MgfHwgJycsIHNvcnRDbGFzcyhmaWVsZCldXFxcIiB2LWh0bWw9XFxcInJlbmRlclRpdGxlKGZpZWxkKVxcXCJcXHJcXG4gICAgICAgICAgICA+PC90aD5cXHJcXG4gICAgICAgICAgPC90ZW1wbGF0ZT5cXHJcXG4gICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cXHJcXG4gICAgICAgICAgICA8dGggQGNsaWNrPVxcXCJvcmRlckJ5KGZpZWxkLCAkZXZlbnQpXFxcIlxcclxcbiAgICAgICAgICAgICAgOmtleT1cXFwiZmllbGRJbmRleFxcXCJcXHJcXG4gICAgICAgICAgICAgIDppZD1cXFwiJ18nICsgZmllbGQubmFtZVxcXCJcXHJcXG4gICAgICAgICAgICAgIDpzdHlsZT1cXFwie3dpZHRoOiBmaWVsZC53aWR0aH1cXFwiXFxyXFxuICAgICAgICAgICAgICA6Y2xhc3M9XFxcIlsndnVldGFibGUtdGgtJytmaWVsZC5uYW1lLCBmaWVsZC50aXRsZUNsYXNzLCBzb3J0Q2xhc3MoZmllbGQpLCAgeydzb3J0YWJsZSc6IGlzU29ydGFibGUoZmllbGQpfV1cXFwiXFxyXFxuICAgICAgICAgICAgICB2LWh0bWw9XFxcInJlbmRlclRpdGxlKGZpZWxkKVxcXCJcXHJcXG4gICAgICAgICAgICA+PC90aD5cXHJcXG4gICAgICAgICAgPC90ZW1wbGF0ZT5cXHJcXG4gICAgICAgIDwvdGVtcGxhdGU+XFxyXFxuICAgICAgPC90ZW1wbGF0ZT5cXHJcXG4gICAgPC90cj5cXHJcXG4gIDwvdGhlYWQ+XFxyXFxuICA8dGJvZHkgdi1jbG9hayBjbGFzcz1cXFwidnVldGFibGUtYm9keVxcXCI+XFxyXFxuICAgIDx0ZW1wbGF0ZSB2LWZvcj1cXFwiKGl0ZW0sIGl0ZW1JbmRleCkgaW4gdGFibGVEYXRhXFxcIj5cXHJcXG4gICAgICA8dHIgQGRibGNsaWNrPVxcXCJvblJvd0RvdWJsZUNsaWNrZWQoaXRlbSwgJGV2ZW50KVxcXCIgXFxyXFxuICAgICAgICA6a2V5PVxcXCJpdGVtSW5kZXhcXFwiXFxyXFxuICAgICAgICA6aXRlbS1pbmRleD1cXFwiaXRlbUluZGV4XFxcIiBcXHJcXG4gICAgICAgIDpyZW5kZXI9XFxcIm9uUm93Q2hhbmdlZChpdGVtKVxcXCIgXFxyXFxuICAgICAgICA6Y2xhc3M9XFxcIm9uUm93Q2xhc3MoaXRlbSwgaXRlbUluZGV4KVxcXCJcXHJcXG4gICAgICAgIEBjbGljaz1cXFwib25Sb3dDbGlja2VkKGl0ZW0sICRldmVudClcXFwiIFxcclxcbiAgICAgID5cXHJcXG4gICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cXFwiKGZpZWxkLCBmaWVsZEluZGV4KSBpbiB0YWJsZUZpZWxkc1xcXCI+XFxyXFxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVxcXCJmaWVsZC52aXNpYmxlXFxcIj5cXHJcXG4gICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cXFwiaXNTcGVjaWFsRmllbGQoZmllbGQubmFtZSlcXFwiPlxcclxcbiAgICAgICAgICAgICAgPHRkIHYtaWY9XFxcImV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09ICdfX3NlcXVlbmNlJ1xcXCIgXFxyXFxuICAgICAgICAgICAgICAgIDprZXk9XFxcImZpZWxkSW5kZXhcXFwiXFxyXFxuICAgICAgICAgICAgICAgIDpjbGFzcz1cXFwiWyd2dWV0YWJsZS1zZXF1ZW5jZScsIGZpZWxkLmRhdGFDbGFzc11cXFwiXFxyXFxuICAgICAgICAgICAgICAgIHYtaHRtbD1cXFwicmVuZGVyU2VxdWVuY2UoaXRlbUluZGV4KVxcXCJcXHJcXG4gICAgICAgICAgICAgID48L3RkPlxcclxcbiAgICAgICAgICAgICAgPHRkIHYtaWY9XFxcImV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09ICdfX2hhbmRsZSdcXFwiIFxcclxcbiAgICAgICAgICAgICAgICA6a2V5PVxcXCJmaWVsZEluZGV4XFxcIlxcclxcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XFxcIlsndnVldGFibGUtaGFuZGxlJywgZmllbGQuZGF0YUNsYXNzXVxcXCJcXHJcXG4gICAgICAgICAgICAgICAgdi1odG1sPVxcXCJyZW5kZXJJY29uVGFnKFsnaGFuZGxlLWljb24nLCBjc3MuaGFuZGxlSWNvbl0pXFxcIlxcclxcbiAgICAgICAgICAgICAgPjwvdGQ+XFxyXFxuICAgICAgICAgICAgICA8dGQgdi1pZj1cXFwiZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gJ19fY2hlY2tib3gnXFxcIiBcXHJcXG4gICAgICAgICAgICAgICAgOmtleT1cXFwiZmllbGRJbmRleFxcXCJcXHJcXG4gICAgICAgICAgICAgICAgOmNsYXNzPVxcXCJbJ3Z1ZXRhYmxlLWNoZWNrYm94ZXMnLCBmaWVsZC5kYXRhQ2xhc3NdXFxcIlxcclxcbiAgICAgICAgICAgICAgPlxcclxcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwiY2hlY2tib3hcXFwiXFxyXFxuICAgICAgICAgICAgICAgICAgQGNoYW5nZT1cXFwidG9nZ2xlQ2hlY2tib3goaXRlbSwgZmllbGQubmFtZSwgJGV2ZW50KVxcXCJcXHJcXG4gICAgICAgICAgICAgICAgICA6Y2hlY2tlZD1cXFwicm93U2VsZWN0ZWQoaXRlbSwgZmllbGQubmFtZSlcXFwiPlxcclxcbiAgICAgICAgICAgICAgPC90ZD5cXHJcXG4gICAgICAgICAgICAgIDx0ZCB2LWlmPVxcXCJleHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PT0gJ19fY29tcG9uZW50J1xcXCIgXFxyXFxuICAgICAgICAgICAgICAgIDprZXk9XFxcImZpZWxkSW5kZXhcXFwiXFxyXFxuICAgICAgICAgICAgICAgIDpjbGFzcz1cXFwiWyd2dWV0YWJsZS1jb21wb25lbnQnLCBmaWVsZC5kYXRhQ2xhc3NdXFxcIlxcclxcbiAgICAgICAgICAgICAgPlxcclxcbiAgICAgICAgICAgICAgICA8Y29tcG9uZW50IDppcz1cXFwiZXh0cmFjdEFyZ3MoZmllbGQubmFtZSlcXFwiXFxyXFxuICAgICAgICAgICAgICAgICAgOnJvdy1kYXRhPVxcXCJpdGVtXFxcIiA6cm93LWluZGV4PVxcXCJpdGVtSW5kZXhcXFwiIDpyb3ctZmllbGQ9XFxcImZpZWxkLnNvcnRGaWVsZFxcXCJcXHJcXG4gICAgICAgICAgICAgICAgPjwvY29tcG9uZW50PlxcclxcbiAgICAgICAgICAgICAgPC90ZD5cXHJcXG4gICAgICAgICAgICAgIDx0ZCB2LWlmPVxcXCJleHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PT0gJ19fc2xvdCdcXFwiIFxcclxcbiAgICAgICAgICAgICAgICA6a2V5PVxcXCJmaWVsZEluZGV4XFxcIlxcclxcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XFxcIlsndnVldGFibGUtc2xvdCcsIGZpZWxkLmRhdGFDbGFzc11cXFwiXFxyXFxuICAgICAgICAgICAgICA+XFxyXFxuICAgICAgICAgICAgICAgIDxzbG90IDpuYW1lPVxcXCJleHRyYWN0QXJncyhmaWVsZC5uYW1lKVxcXCJcXHJcXG4gICAgICAgICAgICAgICAgICA6cm93LWRhdGE9XFxcIml0ZW1cXFwiIDpyb3ctaW5kZXg9XFxcIml0ZW1JbmRleFxcXCIgOnJvdy1maWVsZD1cXFwiZmllbGQuc29ydEZpZWxkXFxcIlxcclxcbiAgICAgICAgICAgICAgICA+PC9zbG90PlxcclxcbiAgICAgICAgICAgICAgPC90ZD5cXHJcXG4gICAgICAgICAgICA8L3RlbXBsYXRlPlxcclxcbiAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XFxyXFxuICAgICAgICAgICAgICA8dGQgdi1pZj1cXFwiaGFzQ2FsbGJhY2soZmllbGQpXFxcIiBcXHJcXG4gICAgICAgICAgICAgICAgOmtleT1cXFwiZmllbGRJbmRleFxcXCJcXHJcXG4gICAgICAgICAgICAgICAgOmNsYXNzPVxcXCJmaWVsZC5kYXRhQ2xhc3NcXFwiXFxyXFxuICAgICAgICAgICAgICAgIHYtaHRtbD1cXFwiY2FsbENhbGxiYWNrKGZpZWxkLCBpdGVtKVxcXCJcXHJcXG4gICAgICAgICAgICAgICAgQGNsaWNrPVxcXCJvbkNlbGxDbGlja2VkKGl0ZW0sIGZpZWxkLCAkZXZlbnQpXFxcIlxcclxcbiAgICAgICAgICAgICAgICBAZGJsY2xpY2s9XFxcIm9uQ2VsbERvdWJsZUNsaWNrZWQoaXRlbSwgZmllbGQsICRldmVudClcXFwiXFxyXFxuICAgICAgICAgICAgICAgIEBjb250ZXh0bWVudT1cXFwib25DZWxsUmlnaHRDbGlja2VkKGl0ZW0sIGZpZWxkLCAkZXZlbnQpXFxcIlxcclxcbiAgICAgICAgICAgICAgPjwvdGQ+XFxyXFxuICAgICAgICAgICAgICA8dGQgdi1lbHNlIFxcclxcbiAgICAgICAgICAgICAgICA6a2V5PVxcXCJmaWVsZEluZGV4XFxcIlxcclxcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XFxcImZpZWxkLmRhdGFDbGFzc1xcXCJcXHJcXG4gICAgICAgICAgICAgICAgdi1odG1sPVxcXCJnZXRPYmplY3RWYWx1ZShpdGVtLCBmaWVsZC5uYW1lLCAnJylcXFwiXFxyXFxuICAgICAgICAgICAgICAgIEBjbGljaz1cXFwib25DZWxsQ2xpY2tlZChpdGVtLCBmaWVsZCwgJGV2ZW50KVxcXCJcXHJcXG4gICAgICAgICAgICAgICAgQGRibGNsaWNrPVxcXCJvbkNlbGxEb3VibGVDbGlja2VkKGl0ZW0sIGZpZWxkLCAkZXZlbnQpXFxcIlxcclxcbiAgICAgICAgICAgICAgICBAY29udGV4dG1lbnU9XFxcIm9uQ2VsbFJpZ2h0Q2xpY2tlZChpdGVtLCBmaWVsZCwgJGV2ZW50KVxcXCJcXHJcXG4gICAgICAgICAgICAgID48L3RkPlxcclxcbiAgICAgICAgICAgIDwvdGVtcGxhdGU+XFxyXFxuICAgICAgICAgIDwvdGVtcGxhdGU+XFxyXFxuICAgICAgICA8L3RlbXBsYXRlPlxcclxcbiAgICAgIDwvdHI+XFxyXFxuICAgICAgPHRlbXBsYXRlIHYtaWY9XFxcInVzZURldGFpbFJvd1xcXCI+XFxyXFxuICAgICAgICA8dHJhbnNpdGlvbiA6bmFtZT1cXFwiZGV0YWlsUm93VHJhbnNpdGlvblxcXCIgOmtleT1cXFwiaXRlbUluZGV4XFxcIj5cXHJcXG4gICAgICAgICAgPHRyIHYtaWY9XFxcImlzVmlzaWJsZURldGFpbFJvdyhpdGVtW3RyYWNrQnldKVxcXCJcXHJcXG4gICAgICAgICAgICA6Y2xhc3M9XFxcIltjc3MuZGV0YWlsUm93Q2xhc3NdXFxcIlxcclxcbiAgICAgICAgICAgIEBjbGljaz1cXFwib25EZXRhaWxSb3dDbGljayhpdGVtLCAkZXZlbnQpXFxcIlxcclxcbiAgICAgICAgICA+XFxyXFxuICAgICAgICAgICAgPHRkIDpjb2xzcGFuPVxcXCJjb3VudFZpc2libGVGaWVsZHNcXFwiPlxcclxcbiAgICAgICAgICAgICAgPGNvbXBvbmVudCA6aXM9XFxcImRldGFpbFJvd0NvbXBvbmVudFxcXCIgOnJvdy1kYXRhPVxcXCJpdGVtXFxcIiA6cm93LWluZGV4PVxcXCJpdGVtSW5kZXhcXFwiPjwvY29tcG9uZW50PlxcclxcbiAgICAgICAgICAgIDwvdGQ+XFxyXFxuICAgICAgICAgIDwvdHI+XFxyXFxuICAgICAgICA8L3RyYW5zaXRpb24+XFxyXFxuICAgICAgPC90ZW1wbGF0ZT5cXHJcXG4gICAgPC90ZW1wbGF0ZT5cXHJcXG4gICAgPHRlbXBsYXRlIHYtaWY9XFxcImRpc3BsYXlFbXB0eURhdGFSb3dcXFwiPlxcclxcbiAgICAgIDx0cj5cXHJcXG4gICAgICAgIDx0ZCA6Y29sc3Bhbj1cXFwiY291bnRWaXNpYmxlRmllbGRzXFxcIiBjbGFzcz1cXFwidnVldGFibGUtZW1wdHktcmVzdWx0XFxcIiB2LWh0bWw9XFxcIm5vRGF0YVRlbXBsYXRlXFxcIj48L3RkPlxcclxcbiAgICAgIDwvdHI+XFxyXFxuICAgIDwvdGVtcGxhdGU+XFxyXFxuICAgIDx0ZW1wbGF0ZSB2LWlmPVxcXCJsZXNzVGhhbk1pblJvd3NcXFwiPlxcclxcbiAgICAgIDx0ciB2LWZvcj1cXFwiaSBpbiBibGFua1Jvd3NcXFwiIGNsYXNzPVxcXCJibGFuay1yb3dcXFwiIDprZXk9XFxcImlcXFwiPlxcclxcbiAgICAgICAgPHRlbXBsYXRlIHYtZm9yPVxcXCIoZmllbGQsIGZpZWxkSW5kZXgpIGluIHRhYmxlRmllbGRzXFxcIj5cXHJcXG4gICAgICAgICAgPHRkIHYtaWY9XFxcImZpZWxkLnZpc2libGVcXFwiIDprZXk9XFxcImZpZWxkSW5kZXhcXFwiPiZuYnNwOzwvdGQ+XFxyXFxuICAgICAgICA8L3RlbXBsYXRlPlxcclxcbiAgICAgIDwvdHI+XFxyXFxuICAgIDwvdGVtcGxhdGU+XFxyXFxuICA8L3Rib2R5PlxcclxcbjwvdGFibGU+XFxyXFxuPC90ZW1wbGF0ZT5cXHJcXG5cXHJcXG48c2NyaXB0PlxcclxcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcydcXHJcXG5cXHJcXG5leHBvcnQgZGVmYXVsdCB7XFxyXFxuICBwcm9wczoge1xcclxcbiAgICBmaWVsZHM6IHtcXHJcXG4gICAgICB0eXBlOiBBcnJheSxcXHJcXG4gICAgICByZXF1aXJlZDogdHJ1ZVxcclxcbiAgICB9LFxcclxcbiAgICBsb2FkT25TdGFydDoge1xcclxcbiAgICAgIHR5cGU6IEJvb2xlYW4sXFxyXFxuICAgICAgZGVmYXVsdDogdHJ1ZVxcclxcbiAgICB9LFxcclxcbiAgICBhcGlVcmw6IHtcXHJcXG4gICAgICAgIHR5cGU6IFN0cmluZyxcXHJcXG4gICAgICAgIGRlZmF1bHQ6ICcnXFxyXFxuICAgIH0sXFxyXFxuICAgIGh0dHBNZXRob2Q6IHtcXHJcXG4gICAgICAgIHR5cGU6IFN0cmluZyxcXHJcXG4gICAgICAgIGRlZmF1bHQ6ICdnZXQnLFxcclxcbiAgICAgICAgdmFsaWRhdG9yOiAodmFsdWUpID0+IHtcXHJcXG4gICAgICAgICAgcmV0dXJuIFsnZ2V0JywgJ3Bvc3QnXS5pbmRleE9mKHZhbHVlKSA+IC0xXFxyXFxuICAgICAgICB9XFxyXFxuICAgIH0sXFxyXFxuICAgIHJlYWN0aXZlQXBpVXJsOiB7XFxyXFxuICAgICAgICB0eXBlOiBCb29sZWFuLFxcclxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxcclxcbiAgICB9LFxcclxcbiAgICBhcGlNb2RlOiB7XFxyXFxuICAgICAgdHlwZTogQm9vbGVhbixcXHJcXG4gICAgICBkZWZhdWx0OiB0cnVlXFxyXFxuICAgIH0sXFxyXFxuICAgIGRhdGE6IHtcXHJcXG4gICAgICB0eXBlOiBbQXJyYXksIE9iamVjdF0sXFxyXFxuICAgICAgZGVmYXVsdDogbnVsbFxcclxcbiAgICB9LFxcclxcbiAgICBkYXRhVG90YWw6IHtcXHJcXG4gICAgICB0eXBlOiBOdW1iZXIsXFxyXFxuICAgICAgZGVmYXVsdDogMFxcclxcbiAgICB9LFxcclxcbiAgICBkYXRhTWFuYWdlcjoge1xcclxcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxcclxcbiAgICAgIGRlZmF1bHQ6IG51bGxcXHJcXG4gICAgfSxcXHJcXG4gICAgZGF0YVBhdGg6IHtcXHJcXG4gICAgICAgIHR5cGU6IFN0cmluZyxcXHJcXG4gICAgICAgIGRlZmF1bHQ6ICdkYXRhJ1xcclxcbiAgICB9LFxcclxcbiAgICBwYWdpbmF0aW9uUGF0aDoge1xcclxcbiAgICAgICAgdHlwZTogW1N0cmluZ10sXFxyXFxuICAgICAgICBkZWZhdWx0OiAnbGlua3MucGFnaW5hdGlvbidcXHJcXG4gICAgfSxcXHJcXG4gICAgcXVlcnlQYXJhbXM6IHtcXHJcXG4gICAgICB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbl0sXFxyXFxuICAgICAgZGVmYXVsdCAoKSB7XFxyXFxuICAgICAgICByZXR1cm4ge1xcclxcbiAgICAgICAgICBzb3J0OiAnc29ydCcsXFxyXFxuICAgICAgICAgIHBhZ2U6ICdwYWdlJyxcXHJcXG4gICAgICAgICAgcGVyUGFnZTogJ3Blcl9wYWdlJ1xcclxcbiAgICAgICAgfVxcclxcbiAgICAgIH1cXHJcXG4gICAgfSxcXHJcXG4gICAgYXBwZW5kUGFyYW1zOiB7XFxyXFxuICAgICAgdHlwZTogT2JqZWN0LFxcclxcbiAgICAgIGRlZmF1bHQgKCkge1xcclxcbiAgICAgICAgcmV0dXJuIHt9XFxyXFxuICAgICAgfVxcclxcbiAgICB9LFxcclxcbiAgICBodHRwT3B0aW9uczoge1xcclxcbiAgICAgIHR5cGU6IE9iamVjdCxcXHJcXG4gICAgICBkZWZhdWx0ICgpIHtcXHJcXG4gICAgICAgIHJldHVybiB7fVxcclxcbiAgICAgIH1cXHJcXG4gICAgfSxcXHJcXG4gICAgaHR0cEZldGNoOiB7XFxyXFxuICAgICAgdHlwZTogRnVuY3Rpb24sXFxyXFxuICAgICAgZGVmYXVsdDogbnVsbFxcclxcbiAgICB9LFxcclxcbiAgICBwZXJQYWdlOiB7XFxyXFxuICAgICAgICB0eXBlOiBOdW1iZXIsXFxyXFxuICAgICAgICBkZWZhdWx0OiAxMFxcclxcbiAgICB9LFxcclxcbiAgICBpbml0aWFsUGFnZToge1xcclxcbiAgICAgIHR5cGU6IE51bWJlcixcXHJcXG4gICAgICBkZWZhdWx0OiAxXFxyXFxuICAgIH0sXFxyXFxuICAgIHNvcnRPcmRlcjoge1xcclxcbiAgICAgIHR5cGU6IEFycmF5LFxcclxcbiAgICAgIGRlZmF1bHQgKCkge1xcclxcbiAgICAgICAgcmV0dXJuIFtdXFxyXFxuICAgICAgfVxcclxcbiAgICB9LFxcclxcbiAgICBtdWx0aVNvcnQ6IHtcXHJcXG4gICAgICB0eXBlOiBCb29sZWFuLFxcclxcbiAgICAgIGRlZmF1bHQgKCkge1xcclxcbiAgICAgICAgcmV0dXJuIGZhbHNlXFxyXFxuICAgICAgfVxcclxcbiAgICB9LFxcclxcbiAgICB0YWJsZUhlaWdodDoge1xcclxcbiAgICAgIHR5cGU6IFN0cmluZyxcXHJcXG4gICAgICBkZWZhdWx0OiBudWxsXFxyXFxuICAgIH0sXFxyXFxuICAgIC8qXFxyXFxuICAgICAqIHBoeXNpY2FsIGtleSB0aGF0IHdpbGwgdHJpZ2dlciBtdWx0aS1zb3J0IG9wdGlvblxcclxcbiAgICAgKiBwb3NzaWJsZSB2YWx1ZXM6ICdhbHQnLCAnY3RybCcsICdtZXRhJywgJ3NoaWZ0J1xcclxcbiAgICAgKiAnY3RybCcgbWlnaHQgbm90IHdvcmsgYXMgZXhwZWN0ZWQgb24gTWFjXFxyXFxuICAgICAqL1xcclxcbiAgICBtdWx0aVNvcnRLZXk6IHtcXHJcXG4gICAgICB0eXBlOiBTdHJpbmcsXFxyXFxuICAgICAgZGVmYXVsdDogJ2FsdCdcXHJcXG4gICAgfSxcXHJcXG4gICAgLyogZGVwcmVjYXRlZCAqL1xcclxcbiAgICByb3dDbGFzc0NhbGxiYWNrOiB7XFxyXFxuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxcclxcbiAgICAgIGRlZmF1bHQ6ICcnXFxyXFxuICAgIH0sXFxyXFxuICAgIHJvd0NsYXNzOiB7XFxyXFxuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxcclxcbiAgICAgIGRlZmF1bHQ6ICcnXFxyXFxuICAgIH0sXFxyXFxuICAgIGRldGFpbFJvd0NvbXBvbmVudDoge1xcclxcbiAgICAgIHR5cGU6IFN0cmluZyxcXHJcXG4gICAgICBkZWZhdWx0OiAnJ1xcclxcbiAgICB9LFxcclxcbiAgICBkZXRhaWxSb3dUcmFuc2l0aW9uOiB7XFxyXFxuICAgICAgdHlwZTogU3RyaW5nLFxcclxcbiAgICAgIGRlZmF1bHQ6ICcnXFxyXFxuICAgIH0sXFxyXFxuICAgIHRyYWNrQnk6IHtcXHJcXG4gICAgICB0eXBlOiBTdHJpbmcsXFxyXFxuICAgICAgZGVmYXVsdDogJ2lkJ1xcclxcbiAgICB9LFxcclxcbiAgICBjc3M6IHtcXHJcXG4gICAgICB0eXBlOiBPYmplY3QsXFxyXFxuICAgICAgZGVmYXVsdCAoKSB7XFxyXFxuICAgICAgICByZXR1cm4ge1xcclxcbiAgICAgICAgICB0YWJsZUNsYXNzOiAndWkgYmx1ZSBzZWxlY3RhYmxlIGNlbGxlZCBzdGFja2FibGUgYXR0YWNoZWQgdGFibGUnLFxcclxcbiAgICAgICAgICBsb2FkaW5nQ2xhc3M6ICdsb2FkaW5nJyxcXHJcXG4gICAgICAgICAgYXNjZW5kaW5nSWNvbjogJ2JsdWUgY2hldnJvbiB1cCBpY29uJyxcXHJcXG4gICAgICAgICAgZGVzY2VuZGluZ0ljb246ICdibHVlIGNoZXZyb24gZG93biBpY29uJyxcXHJcXG4gICAgICAgICAgYXNjZW5kaW5nQ2xhc3M6ICdzb3J0ZWQtYXNjJyxcXHJcXG4gICAgICAgICAgZGVzY2VuZGluZ0NsYXNzOiAnc29ydGVkLWRlc2MnLFxcclxcbiAgICAgICAgICBzb3J0YWJsZUljb246ICcnLFxcclxcbiAgICAgICAgICBkZXRhaWxSb3dDbGFzczogJ3Z1ZXRhYmxlLWRldGFpbC1yb3cnLFxcclxcbiAgICAgICAgICBoYW5kbGVJY29uOiAnZ3JleSBzaWRlYmFyIGljb24nLFxcclxcbiAgICAgICAgICB0YWJsZUJvZHlDbGFzczogJ3Z1ZXRhYmxlLXNlbWFudGljLW5vLXRvcCB2dWV0YWJsZS1maXhlZC1sYXlvdXQnLFxcclxcbiAgICAgICAgICB0YWJsZUhlYWRlckNsYXNzOiAndnVldGFibGUtZml4ZWQtbGF5b3V0J1xcclxcbiAgICAgICAgfVxcclxcbiAgICAgIH1cXHJcXG4gICAgfSxcXHJcXG4gICAgbWluUm93czoge1xcclxcbiAgICAgIHR5cGU6IE51bWJlcixcXHJcXG4gICAgICBkZWZhdWx0OiAwXFxyXFxuICAgIH0sXFxyXFxuICAgIHNpbGVudDoge1xcclxcbiAgICAgIHR5cGU6IEJvb2xlYW4sXFxyXFxuICAgICAgZGVmYXVsdDogZmFsc2VcXHJcXG4gICAgfSxcXHJcXG4gICAgbm9EYXRhVGVtcGxhdGU6IHtcXHJcXG4gICAgICB0eXBlOiBTdHJpbmcsXFxyXFxuICAgICAgZGVmYXVsdCgpIHtcXHJcXG4gICAgICAgIHJldHVybiAnTm8gRGF0YSBBdmFpbGFibGUnXFxyXFxuICAgICAgfVxcclxcbiAgICB9LFxcclxcbiAgICBzaG93U29ydEljb25zOiB7XFxyXFxuICAgICAgdHlwZTogQm9vbGVhbixcXHJcXG4gICAgICBkZWZhdWx0OiB0cnVlXFxyXFxuICAgIH1cXHJcXG4gIH0sXFxyXFxuICBkYXRhICgpIHtcXHJcXG4gICAgcmV0dXJuIHtcXHJcXG4gICAgICBldmVudFByZWZpeDogJ3Z1ZXRhYmxlOicsXFxyXFxuICAgICAgdGFibGVGaWVsZHM6IFtdLFxcclxcbiAgICAgIHRhYmxlRGF0YTogbnVsbCxcXHJcXG4gICAgICB0YWJsZVBhZ2luYXRpb246IG51bGwsXFxyXFxuICAgICAgY3VycmVudFBhZ2U6IHRoaXMuaW5pdGlhbFBhZ2UsXFxyXFxuICAgICAgc2VsZWN0ZWRUbzogW10sXFxyXFxuICAgICAgdmlzaWJsZURldGFpbFJvd3M6IFtdLFxcclxcbiAgICAgIGxhc3RTY3JvbGxQb3NpdGlvbjogMCxcXHJcXG4gICAgICBzY3JvbGxCYXJXaWR0aDogJzE3cHgnLCAvL2Nocm9tZSBkZWZhdWx0XFxyXFxuICAgICAgc2Nyb2xsVmlzaWJsZTogZmFsc2UsXFxyXFxuICAgIH1cXHJcXG4gIH0sXFxyXFxuICBtb3VudGVkICgpIHtcXHJcXG4gICAgdGhpcy5ub3JtYWxpemVGaWVsZHMoKVxcclxcbiAgICB0aGlzLm5vcm1hbGl6ZVNvcnRPcmRlcigpXFxyXFxuICAgIGlmICh0aGlzLmlzRml4ZWRIZWFkZXIpIHtcXHJcXG4gICAgICB0aGlzLnNjcm9sbEJhcldpZHRoID0gdGhpcy5nZXRTY3JvbGxCYXJXaWR0aCgpICsgJ3B4JztcXHJcXG4gICAgfVxcclxcbiAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpIHtcXHJcXG4gICAgICB0aGlzLmZpcmVFdmVudCgnaW5pdGlhbGl6ZWQnLCB0aGlzLnRhYmxlRmllbGRzKVxcclxcbiAgICB9KVxcclxcblxcclxcbiAgICBpZiAodGhpcy5sb2FkT25TdGFydCkge1xcclxcbiAgICAgIHRoaXMubG9hZERhdGEoKVxcclxcbiAgICB9XFxyXFxuICAgIGlmICh0aGlzLmlzRml4ZWRIZWFkZXIpIHtcXHJcXG4gICAgICBsZXQgZWxlbSA9IHRoaXMuJGVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3Z1ZXRhYmxlLWJvZHktd3JhcHBlcicpWzBdO1xcclxcbiAgICAgIGlmIChlbGVtICE9IG51bGwpIHtcXHJcXG4gICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oYW5kbGVTY3JvbGwpO1xcclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcbiAgfSxcXHJcXG4gIGRlc3Ryb3llZCAoKSB7XFxyXFxuICAgIGxldCBlbGVtID0gdGhpcy4kZWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndnVldGFibGUtYm9keS13cmFwcGVyJylbMF07XFxyXFxuICAgIGlmIChlbGVtICE9IG51bGwpIHtcXHJcXG4gICAgICBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuaGFuZGxlU2Nyb2xsKTtcXHJcXG4gICAgfVxcclxcbiAgfSxcXHJcXG4gIGNvbXB1dGVkOiB7XFxyXFxuICAgIHZlcnNpb246ICgpID0+IFZFUlNJT04sXFxyXFxuICAgIHVzZURldGFpbFJvdyAoKSB7XFxyXFxuICAgICAgaWYgKHRoaXMudGFibGVEYXRhICYmIHRoaXMudGFibGVEYXRhWzBdICYmIHRoaXMuZGV0YWlsUm93Q29tcG9uZW50ICE9PSAnJyAmJiB0eXBlb2YgdGhpcy50YWJsZURhdGFbMF1bdGhpcy50cmFja0J5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcXHJcXG4gICAgICAgIHRoaXMud2FybignWW91IG5lZWQgdG8gZGVmaW5lIHVuaXF1ZSByb3cgaWRlbnRpZmllciBpbiBvcmRlciBmb3IgZGV0YWlsLXJvdyBmZWF0dXJlIHRvIHdvcmsuIFVzZSBgdHJhY2stYnlgIHByb3AgdG8gZGVmaW5lIG9uZSEnKVxcclxcbiAgICAgICAgcmV0dXJuIGZhbHNlXFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIHJldHVybiB0aGlzLmRldGFpbFJvd0NvbXBvbmVudCAhPT0gJydcXHJcXG4gICAgfSxcXHJcXG4gICAgY291bnRWaXNpYmxlRmllbGRzICgpIHtcXHJcXG4gICAgICByZXR1cm4gdGhpcy50YWJsZUZpZWxkcy5maWx0ZXIoZnVuY3Rpb24oZmllbGQpIHtcXHJcXG4gICAgICAgIHJldHVybiBmaWVsZC52aXNpYmxlXFxyXFxuICAgICAgfSkubGVuZ3RoXFxyXFxuICAgIH0sXFxyXFxuICAgIGNvdW50VGFibGVEYXRhICgpIHtcXHJcXG4gICAgICBpZiAodGhpcy50YWJsZURhdGEgPT09IG51bGwpIHtcXHJcXG4gICAgICAgIHJldHVybiAwXFxyXFxuICAgICAgfVxcclxcbiAgICAgIHJldHVybiB0aGlzLnRhYmxlRGF0YS5sZW5ndGhcXHJcXG4gICAgfSxcXHJcXG4gICAgZGlzcGxheUVtcHR5RGF0YVJvdyAoKSB7XFxyXFxuICAgICAgcmV0dXJuIHRoaXMuY291bnRUYWJsZURhdGEgPT09IDAgJiYgdGhpcy5ub0RhdGFUZW1wbGF0ZS5sZW5ndGggPiAwXFxyXFxuICAgIH0sXFxyXFxuICAgIGxlc3NUaGFuTWluUm93cyAoKSB7XFxyXFxuICAgICAgaWYgKHRoaXMudGFibGVEYXRhID09PSBudWxsIHx8IHRoaXMudGFibGVEYXRhLmxlbmd0aCA9PT0gMCkge1xcclxcbiAgICAgICAgcmV0dXJuIHRydWVcXHJcXG4gICAgICB9XFxyXFxuICAgICAgcmV0dXJuIHRoaXMudGFibGVEYXRhLmxlbmd0aCA8IHRoaXMubWluUm93c1xcclxcbiAgICB9LFxcclxcbiAgICBibGFua1Jvd3MgKCkge1xcclxcbiAgICAgIGlmICh0aGlzLnRhYmxlRGF0YSA9PT0gbnVsbCB8fCB0aGlzLnRhYmxlRGF0YS5sZW5ndGggPT09IDApIHtcXHJcXG4gICAgICAgIHJldHVybiB0aGlzLm1pblJvd3NcXHJcXG4gICAgICB9XFxyXFxuICAgICAgaWYgKHRoaXMudGFibGVEYXRhLmxlbmd0aCA+PSB0aGlzLm1pblJvd3MpIHtcXHJcXG4gICAgICAgIHJldHVybiAwXFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIHJldHVybiB0aGlzLm1pblJvd3MgLSB0aGlzLnRhYmxlRGF0YS5sZW5ndGhcXHJcXG4gICAgfSxcXHJcXG4gICAgaXNBcGlNb2RlICgpIHtcXHJcXG4gICAgICByZXR1cm4gdGhpcy5hcGlNb2RlXFxyXFxuICAgIH0sXFxyXFxuICAgIGlzRGF0YU1vZGUgKCkge1xcclxcbiAgICAgIHJldHVybiAhIHRoaXMuYXBpTW9kZVxcclxcbiAgICB9LFxcclxcbiAgICBpc0ZpeGVkSGVhZGVyICgpIHtcXHJcXG4gICAgICByZXR1cm4gdGhpcy50YWJsZUhlaWdodCAhPSBudWxsXFxyXFxuICAgIH1cXHJcXG4gIH0sXFxyXFxuICBtZXRob2RzOiB7XFxyXFxuICAgIGdldFNjcm9sbEJhcldpZHRoICgpIHtcXHJcXG4gICAgICBjb25zdCBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xcclxcbiAgICAgIGNvbnN0IGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XFxyXFxuXFxyXFxuICAgICAgb3V0ZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xcclxcbiAgICAgIG91dGVyLnN0eWxlLndpZHRoID0gJzEwMHB4JztcXHJcXG5cXHJcXG4gICAgICBpbm5lci5zdHlsZS53aWR0aCA9ICcxMDAlJztcXHJcXG5cXHJcXG5cXHJcXG4gICAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7XFxyXFxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRlcik7XFxyXFxuXFxyXFxuXFxyXFxuICAgICAgY29uc3Qgd2lkdGhXaXRob3V0U2Nyb2xsYmFyID0gb3V0ZXIub2Zmc2V0V2lkdGg7XFxyXFxuXFxyXFxuICAgICAgb3V0ZXIuc3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcXHJcXG5cXHJcXG4gICAgICBjb25zdCB3aWR0aFdpdGhTY3JvbGxiYXIgPSBpbm5lci5vZmZzZXRXaWR0aDtcXHJcXG5cXHJcXG5cXHJcXG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG91dGVyKTtcXHJcXG5cXHJcXG5cXHJcXG4gICAgICByZXR1cm4gKHdpZHRoV2l0aG91dFNjcm9sbGJhciAtIHdpZHRoV2l0aFNjcm9sbGJhcik7XFxyXFxuICAgIH0sXFxyXFxuICAgIGhhbmRsZVNjcm9sbCAoZSkgeyAvL21ha2Ugc3VyZSB0aGF0IHRoZSBoZWFkZXIgYW5kIHRoZSBib2R5IGFyZSBhbGlnbmVkIHdoZW4gc2Nyb2xsaW5nIGhvcml6b250YWxseSBvbiBhIHRhYmxlIHRoYXQgaXMgd2lkZXIgdGhhbiB0aGUgdmlld3BvcnRcXHJcXG4gICAgICBsZXQgaG9yaXpvbnRhbCA9IGUuY3VycmVudFRhcmdldC5zY3JvbGxMZWZ0O1xcclxcbiAgICAgIGlmIChob3Jpem9udGFsICE9IHRoaXMubGFzdFNjcm9sbFBvc2l0aW9uKSB7IC8vZG9uJ3QgbW9kaWZ5IGhlYWRlciBzY3JvbGwgaWYgd2UgYXJlIHNjcm9sbGluZyB2ZXJ0aWNhbGx5XFxyXFxuICAgICAgICBsZXQgaGVhZGVyID0gdGhpcy4kZWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndnVldGFibGUtaGVhZC13cmFwcGVyJylbMF1cXHJcXG4gICAgICAgIGlmIChoZWFkZXIgIT0gbnVsbCkge1xcclxcbiAgICAgICAgICBoZWFkZXIuc2Nyb2xsTGVmdCA9IGhvcml6b250YWw7XFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgICB0aGlzLmxhc3RTY3JvbGxQb3NpdGlvbiA9IGhvcml6b250YWw7XFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICB9LFxcclxcbiAgICBub3JtYWxpemVGaWVsZHMgKCkge1xcclxcbiAgICAgIGlmICh0eXBlb2YodGhpcy5maWVsZHMpID09PSAndW5kZWZpbmVkJykge1xcclxcbiAgICAgICAgdGhpcy53YXJuKCdZb3UgbmVlZCB0byBwcm92aWRlIFxcXCJmaWVsZHNcXFwiIHByb3AuJylcXHJcXG4gICAgICAgIHJldHVyblxcclxcbiAgICAgIH1cXHJcXG5cXHJcXG4gICAgICB0aGlzLnRhYmxlRmllbGRzID0gW11cXHJcXG4gICAgICBsZXQgc2VsZiA9IHRoaXNcXHJcXG4gICAgICBsZXQgb2JqXFxyXFxuICAgICAgdGhpcy5maWVsZHMuZm9yRWFjaChmdW5jdGlvbihmaWVsZCwgaSkge1xcclxcbiAgICAgICAgaWYgKHR5cGVvZiAoZmllbGQpID09PSAnc3RyaW5nJykge1xcclxcbiAgICAgICAgICBvYmogPSB7XFxyXFxuICAgICAgICAgICAgbmFtZTogZmllbGQsXFxyXFxuICAgICAgICAgICAgdGl0bGU6IHNlbGYuc2V0VGl0bGUoZmllbGQpLFxcclxcbiAgICAgICAgICAgIHRpdGxlQ2xhc3M6ICcnLFxcclxcbiAgICAgICAgICAgIGRhdGFDbGFzczogJycsXFxyXFxuICAgICAgICAgICAgY2FsbGJhY2s6IG51bGwsXFxyXFxuICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcXHJcXG4gICAgICAgICAgfVxcclxcbiAgICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgICAgb2JqID0ge1xcclxcbiAgICAgICAgICAgIG5hbWU6IGZpZWxkLm5hbWUsXFxyXFxuICAgICAgICAgICAgd2lkdGg6IGZpZWxkLndpZHRoLFxcclxcbiAgICAgICAgICAgIHRpdGxlOiAoZmllbGQudGl0bGUgPT09IHVuZGVmaW5lZCkgPyBzZWxmLnNldFRpdGxlKGZpZWxkLm5hbWUpIDogZmllbGQudGl0bGUsXFxyXFxuICAgICAgICAgICAgc29ydEZpZWxkOiBmaWVsZC5zb3J0RmllbGQsXFxyXFxuICAgICAgICAgICAgdGl0bGVDbGFzczogKGZpZWxkLnRpdGxlQ2xhc3MgPT09IHVuZGVmaW5lZCkgPyAnJyA6IGZpZWxkLnRpdGxlQ2xhc3MsXFxyXFxuICAgICAgICAgICAgZGF0YUNsYXNzOiAoZmllbGQuZGF0YUNsYXNzID09PSB1bmRlZmluZWQpID8gJycgOiBmaWVsZC5kYXRhQ2xhc3MsXFxyXFxuICAgICAgICAgICAgY2FsbGJhY2s6IChmaWVsZC5jYWxsYmFjayA9PT0gdW5kZWZpbmVkKSA/ICcnIDogZmllbGQuY2FsbGJhY2ssXFxyXFxuICAgICAgICAgICAgdmlzaWJsZTogKGZpZWxkLnZpc2libGUgPT09IHVuZGVmaW5lZCkgPyB0cnVlIDogZmllbGQudmlzaWJsZSxcXHJcXG4gICAgICAgICAgfVxcclxcbiAgICAgICAgfVxcclxcbiAgICAgICAgc2VsZi50YWJsZUZpZWxkcy5wdXNoKG9iailcXHJcXG4gICAgICB9KVxcclxcbiAgICB9LFxcclxcbiAgICBzZXREYXRhIChkYXRhKSB7XFxyXFxuICAgICAgaWYgKGRhdGEgPT09IG51bGwgfHwgdHlwZW9mKGRhdGEpID09PSAndW5kZWZpbmVkJykgcmV0dXJuXFxyXFxuXFxyXFxuICAgICAgdGhpcy5maXJlRXZlbnQoJ2xvYWRpbmcnKVxcclxcblxcclxcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XFxyXFxuICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IGRhdGFcXHJcXG4gICAgICAgIHRoaXMuZmlyZUV2ZW50KCdsb2FkZWQnKVxcclxcbiAgICAgICAgcmV0dXJuXFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIHRoaXMudGFibGVEYXRhID0gdGhpcy5nZXRPYmplY3RWYWx1ZShkYXRhLCB0aGlzLmRhdGFQYXRoLCBudWxsKVxcclxcbiAgICAgIHRoaXMudGFibGVQYWdpbmF0aW9uID0gdGhpcy5nZXRPYmplY3RWYWx1ZShkYXRhLCB0aGlzLnBhZ2luYXRpb25QYXRoLCBudWxsKVxcclxcblxcclxcbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCkge1xcclxcbiAgICAgICAgdGhpcy5maXhIZWFkZXIoKVxcclxcbiAgICAgICAgdGhpcy5maXJlRXZlbnQoJ3BhZ2luYXRpb24tZGF0YScsIHRoaXMudGFibGVQYWdpbmF0aW9uKVxcclxcbiAgICAgICAgdGhpcy5maXJlRXZlbnQoJ2xvYWRlZCcpXFxyXFxuICAgICAgfSlcXHJcXG4gICAgfSxcXHJcXG4gICAgc2V0VGl0bGUgKHN0cikge1xcclxcbiAgICAgIGlmICh0aGlzLmlzU3BlY2lhbEZpZWxkKHN0cikpIHtcXHJcXG4gICAgICAgIHJldHVybiAnJ1xcclxcbiAgICAgIH1cXHJcXG5cXHJcXG4gICAgICByZXR1cm4gdGhpcy50aXRsZUNhc2Uoc3RyKVxcclxcbiAgICB9LFxcclxcbiAgICBnZXRUaXRsZSAoZmllbGQpIHtcXHJcXG4gICAgICBpZiAodHlwZW9mKGZpZWxkLnRpdGxlKSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZpZWxkLnRpdGxlKClcXHJcXG5cXHJcXG4gICAgICByZXR1cm4gdHlwZW9mKGZpZWxkLnRpdGxlKSA9PT0gJ3VuZGVmaW5lZCdcXHJcXG4gICAgICAgID8gZmllbGQubmFtZS5yZXBsYWNlKCcuJywgJyAnKVxcclxcbiAgICAgICAgOiBmaWVsZC50aXRsZVxcclxcbiAgICB9LFxcclxcbiAgICByZW5kZXJUaXRsZSAoZmllbGQpIHtcXHJcXG4gICAgICBsZXQgdGl0bGUgPSB0aGlzLmdldFRpdGxlKGZpZWxkKVxcclxcblxcclxcbiAgICAgIGlmICh0aXRsZS5sZW5ndGggPiAwICYmIHRoaXMuaXNJbkN1cnJlbnRTb3J0R3JvdXAoZmllbGQpIHx8IHRoaXMuaGFzU29ydGFibGVJY29uKGZpZWxkKSkge1xcclxcbiAgICAgICAgbGV0IHN0eWxlID0gYG9wYWNpdHk6JHt0aGlzLnNvcnRJY29uT3BhY2l0eShmaWVsZCl9O3Bvc2l0aW9uOnJlbGF0aXZlO2Zsb2F0OnJpZ2h0YFxcclxcbiAgICAgICAgbGV0IGljb25UYWcgPSB0aGlzLnNob3dTb3J0SWNvbnMgPyB0aGlzLnJlbmRlckljb25UYWcoWydzb3J0LWljb24nLCB0aGlzLnNvcnRJY29uKGZpZWxkKV0sIGBzdHlsZT1cXFwiJHtzdHlsZX1cXFwiYCkgOiAnJ1xcclxcbiAgICAgICAgcmV0dXJuIHRpdGxlICsgJyAnICsgaWNvblRhZ1xcclxcbiAgICAgIH1cXHJcXG5cXHJcXG4gICAgICByZXR1cm4gdGl0bGVcXHJcXG4gICAgfSxcXHJcXG4gICAgcmVuZGVyU2VxdWVuY2UgKGluZGV4KSB7XFxyXFxuICAgICAgcmV0dXJuIHRoaXMudGFibGVQYWdpbmF0aW9uXFxyXFxuICAgICAgICA/IHRoaXMudGFibGVQYWdpbmF0aW9uLmZyb20gKyBpbmRleFxcclxcbiAgICAgICAgOiBpbmRleFxcclxcbiAgICB9LFxcclxcbiAgICByZW5kZXJOb3JtYWxGaWVsZCAoZmllbGQsIGl0ZW0pIHtcXHJcXG4gICAgICByZXR1cm4gdGhpcy5oYXNDYWxsYmFjayhmaWVsZClcXHJcXG4gICAgICAgID8gdGhpcy5jYWxsQ2FsbGJhY2soZmllbGQsIGl0ZW0pXFxyXFxuICAgICAgICA6IHRoaXMuZ2V0T2JqZWN0VmFsdWUoaXRlbSwgZmllbGQubmFtZSwgJycpXFxyXFxuICAgIH0sXFxyXFxuICAgIGlzU3BlY2lhbEZpZWxkIChmaWVsZE5hbWUpIHtcXHJcXG4gICAgICByZXR1cm4gZmllbGROYW1lLnNsaWNlKDAsIDIpID09PSAnX18nXFxyXFxuICAgIH0sXFxyXFxuICAgIHRpdGxlQ2FzZSAoc3RyKSB7XFxyXFxuICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXFxcdysvZywgZnVuY3Rpb24odHh0KSB7XFxyXFxuICAgICAgICByZXR1cm4gdHh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdHh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpXFxyXFxuICAgICAgfSlcXHJcXG4gICAgfSxcXHJcXG4gICAgY2FtZWxDYXNlIChzdHIsIGRlbGltaXRlciA9ICdfJykge1xcclxcbiAgICAgIGxldCBzZWxmID0gdGhpc1xcclxcbiAgICAgIHJldHVybiBzdHIuc3BsaXQoZGVsaW1pdGVyKS5tYXAoZnVuY3Rpb24oaXRlbSkge1xcclxcbiAgICAgICAgcmV0dXJuIHNlbGYudGl0bGVDYXNlKGl0ZW0pXFxyXFxuICAgICAgfSkuam9pbignJylcXHJcXG4gICAgfSxcXHJcXG4gICAgbm90SW4gKHN0ciwgYXJyKSB7XFxyXFxuICAgICAgcmV0dXJuIGFyci5pbmRleE9mKHN0cikgPT09IC0xXFxyXFxuICAgIH0sXFxyXFxuICAgIGxvYWREYXRhIChzdWNjZXNzID0gdGhpcy5sb2FkU3VjY2VzcywgZmFpbGVkID0gdGhpcy5sb2FkRmFpbGVkKSB7XFxyXFxuICAgICAgaWYgKHRoaXMuaXNEYXRhTW9kZSkge1xcclxcbiAgICAgICAgdGhpcy5jYWxsRGF0YU1hbmFnZXIoKVxcclxcbiAgICAgICAgcmV0dXJuXFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIHRoaXMuZmlyZUV2ZW50KCdsb2FkaW5nJylcXHJcXG5cXHJcXG4gICAgICB0aGlzLmh0dHBPcHRpb25zWydwYXJhbXMnXSA9IHRoaXMuZ2V0QXBwZW5kUGFyYW1zKCB0aGlzLmdldEFsbFF1ZXJ5UGFyYW1zKCkgKVxcclxcblxcclxcbiAgICAgIHJldHVybiB0aGlzLmZldGNoKHRoaXMuYXBpVXJsLCB0aGlzLmh0dHBPcHRpb25zKS50aGVuKFxcclxcbiAgICAgICAgICBzdWNjZXNzLFxcclxcbiAgICAgICAgICBmYWlsZWRcXHJcXG4gICAgICApLmNhdGNoKCgpID0+IGZhaWxlZCgpKVxcclxcbiAgICB9LFxcclxcbiAgICBmZXRjaCAoYXBpVXJsLCBodHRwT3B0aW9ucykge1xcclxcbiAgICAgIHJldHVybiB0aGlzLmh0dHBGZXRjaFxcclxcbiAgICAgICAgICA/IHRoaXMuaHR0cEZldGNoKGFwaVVybCwgaHR0cE9wdGlvbnMpXFxyXFxuICAgICAgICAgIDogYXhpb3NbdGhpcy5odHRwTWV0aG9kXShhcGlVcmwsIGh0dHBPcHRpb25zKVxcclxcbiAgICB9LFxcclxcbiAgICBsb2FkU3VjY2VzcyAocmVzcG9uc2UpIHtcXHJcXG4gICAgICB0aGlzLmZpcmVFdmVudCgnbG9hZC1zdWNjZXNzJywgcmVzcG9uc2UpXFxyXFxuXFxyXFxuICAgICAgbGV0IGJvZHkgPSB0aGlzLnRyYW5zZm9ybShyZXNwb25zZS5kYXRhKVxcclxcblxcclxcbiAgICAgIHRoaXMudGFibGVEYXRhID0gdGhpcy5nZXRPYmplY3RWYWx1ZShib2R5LCB0aGlzLmRhdGFQYXRoLCBudWxsKVxcclxcbiAgICAgIHRoaXMudGFibGVQYWdpbmF0aW9uID0gdGhpcy5nZXRPYmplY3RWYWx1ZShib2R5LCB0aGlzLnBhZ2luYXRpb25QYXRoLCBudWxsKVxcclxcblxcclxcbiAgICAgIGlmICh0aGlzLnRhYmxlUGFnaW5hdGlvbiA9PT0gbnVsbCkge1xcclxcbiAgICAgICAgdGhpcy53YXJuKCd2dWV0YWJsZTogcGFnaW5hdGlvbi1wYXRoIFxcXCInICsgdGhpcy5wYWdpbmF0aW9uUGF0aCArICdcXFwiIG5vdCBmb3VuZC4gJ1xcclxcbiAgICAgICAgICArICdJdCBsb29rcyBsaWtlIHRoZSBkYXRhIHJldHVybmVkIGZyb20gdGhlIHNldmVyIGRvZXMgbm90IGhhdmUgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbiAnXFxyXFxuICAgICAgICAgICsgXFxcIm9yIHlvdSBtYXkgaGF2ZSBzZXQgaXQgaW5jb3JyZWN0bHkuXFxcXG5cXFwiXFxyXFxuICAgICAgICAgICsgJ1lvdSBjYW4gZXhwbGljaXRseSBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgYnkgc2V0dGluZyBwYWdpbmF0aW9uLXBhdGg9XFxcIlxcXCIuJ1xcclxcbiAgICAgICAgKVxcclxcbiAgICAgIH1cXHJcXG5cXHJcXG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpIHtcXHJcXG4gICAgICAgIHRoaXMuZml4SGVhZGVyKClcXHJcXG4gICAgICAgIHRoaXMuZmlyZUV2ZW50KCdwYWdpbmF0aW9uLWRhdGEnLCB0aGlzLnRhYmxlUGFnaW5hdGlvbilcXHJcXG4gICAgICAgIHRoaXMuZmlyZUV2ZW50KCdsb2FkZWQnKVxcclxcbiAgICAgIH0pXFxyXFxuICAgIH0sXFxyXFxuICAgIGZpeEhlYWRlcigpIHtcXHJcXG4gICAgICBpZiAoIXRoaXMuaXNGaXhlZEhlYWRlcikge1xcclxcbiAgICAgICAgcmV0dXJuO1xcclxcbiAgICAgIH1cXHJcXG5cXHJcXG4gICAgICBsZXQgZWxlbSA9IHRoaXMuJGVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3Z1ZXRhYmxlLWJvZHktd3JhcHBlcicpWzBdXFxyXFxuICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xcclxcbiAgICAgICAgaWYgKGVsZW0uc2Nyb2xsSGVpZ2h0ID4gZWxlbS5jbGllbnRIZWlnaHQpIHtcXHJcXG4gICAgICAgICAgdGhpcy5zY3JvbGxWaXNpYmxlID0gdHJ1ZTtcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICAgIGVsc2Uge1xcclxcbiAgICAgICAgICB0aGlzLnNjcm9sbFZpc2libGUgPSBmYWxzZTtcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICB9XFxyXFxuICAgIH0sXFxyXFxuICAgIGxvYWRGYWlsZWQgKHJlc3BvbnNlKSB7XFxyXFxuICAgICAgY29uc29sZS5lcnJvcignbG9hZC1lcnJvcicsIHJlc3BvbnNlKVxcclxcbiAgICAgIHRoaXMuZmlyZUV2ZW50KCdsb2FkLWVycm9yJywgcmVzcG9uc2UpXFxyXFxuICAgICAgdGhpcy5maXJlRXZlbnQoJ2xvYWRlZCcpXFxyXFxuICAgIH0sXFxyXFxuICAgIHRyYW5zZm9ybSAoZGF0YSkge1xcclxcbiAgICAgIGxldCBmdW5jID0gJ3RyYW5zZm9ybSdcXHJcXG5cXHJcXG4gICAgICBpZiAodGhpcy5wYXJlbnRGdW5jdGlvbkV4aXN0cyhmdW5jKSkge1xcclxcbiAgICAgICAgICByZXR1cm4gdGhpcy4kcGFyZW50W2Z1bmNdLmNhbGwodGhpcy4kcGFyZW50LCBkYXRhKVxcclxcbiAgICAgIH1cXHJcXG5cXHJcXG4gICAgICByZXR1cm4gZGF0YVxcclxcbiAgICB9LFxcclxcbiAgICBwYXJlbnRGdW5jdGlvbkV4aXN0cyAoZnVuYykge1xcclxcbiAgICAgIHJldHVybiAoZnVuYyAhPT0gJycgJiYgdHlwZW9mIHRoaXMuJHBhcmVudFtmdW5jXSA9PT0gJ2Z1bmN0aW9uJylcXHJcXG4gICAgfSxcXHJcXG4gICAgY2FsbFBhcmVudEZ1bmN0aW9uIChmdW5jLCBhcmdzLCBkZWZhdWx0VmFsdWUgPSBudWxsKSB7XFxyXFxuICAgICAgaWYgKHRoaXMucGFyZW50RnVuY3Rpb25FeGlzdHMoZnVuYykpIHtcXHJcXG4gICAgICAgIHJldHVybiB0aGlzLiRwYXJlbnRbZnVuY10uY2FsbCh0aGlzLiRwYXJlbnQsIGFyZ3MpXFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWVcXHJcXG4gICAgfSxcXHJcXG4gICAgZmlyZUV2ZW50IChldmVudE5hbWUsIGFyZ3MpIHtcXHJcXG4gICAgICB0aGlzLiRlbWl0KHRoaXMuZXZlbnRQcmVmaXggKyBldmVudE5hbWUsIGFyZ3MpXFxyXFxuICAgIH0sXFxyXFxuICAgIHdhcm4gKG1zZykge1xcclxcbiAgICAgIGlmICghdGhpcy5zaWxlbnQpIHtcXHJcXG4gICAgICAgIGNvbnNvbGUud2Fybihtc2cpXFxyXFxuICAgICAgfVxcclxcbiAgICB9LFxcclxcbiAgICBnZXRBbGxRdWVyeVBhcmFtcyAoKSB7XFxyXFxuICAgICAgbGV0IHBhcmFtcyA9IHt9XFxyXFxuXFxyXFxuICAgICAgaWYgKHR5cGVvZih0aGlzLnF1ZXJ5UGFyYW1zKSA9PT0gJ2Z1bmN0aW9uJykge1xcclxcbiAgICAgICAgcGFyYW1zID0gdGhpcy5xdWVyeVBhcmFtcyh0aGlzLnNvcnRPcmRlciwgdGhpcy5jdXJyZW50UGFnZSwgdGhpcy5wZXJQYWdlKVxcclxcbiAgICAgICAgcmV0dXJuIHR5cGVvZihwYXJhbXMpICE9PSAnb2JqZWN0JyA/IHt9IDogcGFyYW1zXFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIHBhcmFtc1t0aGlzLnF1ZXJ5UGFyYW1zLnNvcnRdID0gdGhpcy5nZXRTb3J0UGFyYW0oKVxcclxcbiAgICAgIHBhcmFtc1t0aGlzLnF1ZXJ5UGFyYW1zLnBhZ2VdID0gdGhpcy5jdXJyZW50UGFnZVxcclxcbiAgICAgIHBhcmFtc1t0aGlzLnF1ZXJ5UGFyYW1zLnBlclBhZ2VdID0gdGhpcy5wZXJQYWdlXFxyXFxuXFxyXFxuICAgICAgcmV0dXJuIHBhcmFtc1xcclxcbiAgICB9LFxcclxcbiAgICBnZXRTb3J0UGFyYW0gKCkge1xcclxcbiAgICAgIGlmICghdGhpcy5zb3J0T3JkZXIgfHwgdGhpcy5zb3J0T3JkZXIuZmllbGQgPT0gJycpIHtcXHJcXG4gICAgICAgIHJldHVybiAnJ1xcclxcbiAgICAgIH1cXHJcXG5cXHJcXG4gICAgICBpZiAodHlwZW9mIHRoaXMuJHBhcmVudFsnZ2V0U29ydFBhcmFtJ10gPT09ICdmdW5jdGlvbicpIHtcXHJcXG4gICAgICAgIHJldHVybiB0aGlzLiRwYXJlbnRbJ2dldFNvcnRQYXJhbSddLmNhbGwodGhpcy4kcGFyZW50LCB0aGlzLnNvcnRPcmRlcilcXHJcXG4gICAgICB9XFxyXFxuXFxyXFxuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGVmYXVsdFNvcnRQYXJhbSgpXFxyXFxuICAgIH0sXFxyXFxuICAgIGdldERlZmF1bHRTb3J0UGFyYW0gKCkge1xcclxcbiAgICAgIGxldCByZXN1bHQgPSAnJztcXHJcXG5cXHJcXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc29ydE9yZGVyLmxlbmd0aDsgaSsrKSB7XFxyXFxuICAgICAgICBsZXQgZmllbGROYW1lID0gKHR5cGVvZiB0aGlzLnNvcnRPcmRlcltpXS5zb3J0RmllbGQgPT09ICd1bmRlZmluZWQnKVxcclxcbiAgICAgICAgICA/IHRoaXMuc29ydE9yZGVyW2ldLmZpZWxkXFxyXFxuICAgICAgICAgIDogdGhpcy5zb3J0T3JkZXJbaV0uc29ydEZpZWxkO1xcclxcblxcclxcbiAgICAgICAgcmVzdWx0ICs9IGZpZWxkTmFtZSArICd8JyArIHRoaXMuc29ydE9yZGVyW2ldLmRpcmVjdGlvbiArICgoaSsxKSA8IHRoaXMuc29ydE9yZGVyLmxlbmd0aCA/ICcsJyA6ICcnKTtcXHJcXG4gICAgICB9XFxyXFxuICAgICAgcmV0dXJuIHJlc3VsdDtcXHJcXG4gICAgfSxcXHJcXG4gICAgZ2V0QXBwZW5kUGFyYW1zIChwYXJhbXMpIHtcXHJcXG4gICAgICBmb3IgKGxldCB4IGluIHRoaXMuYXBwZW5kUGFyYW1zKSB7XFxyXFxuICAgICAgICBwYXJhbXNbeF0gPSB0aGlzLmFwcGVuZFBhcmFtc1t4XVxcclxcbiAgICAgIH1cXHJcXG5cXHJcXG4gICAgICByZXR1cm4gcGFyYW1zXFxyXFxuICAgIH0sXFxyXFxuICAgIGV4dHJhY3ROYW1lIChzdHJpbmcpIHtcXHJcXG4gICAgICByZXR1cm4gc3RyaW5nLnNwbGl0KCc6JylbMF0udHJpbSgpXFxyXFxuICAgIH0sXFxyXFxuICAgIGV4dHJhY3RBcmdzIChzdHJpbmcpIHtcXHJcXG4gICAgICByZXR1cm4gc3RyaW5nLnNwbGl0KCc6JylbMV1cXHJcXG4gICAgfSxcXHJcXG4gICAgaXNTb3J0YWJsZSAoZmllbGQpIHtcXHJcXG4gICAgICByZXR1cm4gISh0eXBlb2YgZmllbGQuc29ydEZpZWxkID09PSAndW5kZWZpbmVkJylcXHJcXG4gICAgfSxcXHJcXG4gICAgaXNJbkN1cnJlbnRTb3J0R3JvdXAgKGZpZWxkKSB7XFxyXFxuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFNvcnRPcmRlclBvc2l0aW9uKGZpZWxkKSAhPT0gZmFsc2U7XFxyXFxuICAgIH0sXFxyXFxuICAgIGhhc1NvcnRhYmxlSWNvbiAoZmllbGQpIHtcXHJcXG4gICAgICByZXR1cm4gdGhpcy5pc1NvcnRhYmxlKGZpZWxkKSAmJiB0aGlzLmNzcy5zb3J0YWJsZUljb24gIT0gJydcXHJcXG4gICAgfSxcXHJcXG4gICAgY3VycmVudFNvcnRPcmRlclBvc2l0aW9uIChmaWVsZCkge1xcclxcbiAgICAgIGlmICggISB0aGlzLmlzU29ydGFibGUoZmllbGQpKSB7XFxyXFxuICAgICAgICByZXR1cm4gZmFsc2VcXHJcXG4gICAgICB9XFxyXFxuXFxyXFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNvcnRPcmRlci5sZW5ndGg7IGkrKykge1xcclxcbiAgICAgICAgaWYgKHRoaXMuZmllbGRJc0luU29ydE9yZGVyUG9zaXRpb24oZmllbGQsIGkpKSB7XFxyXFxuICAgICAgICAgIHJldHVybiBpO1xcclxcbiAgICAgICAgfVxcclxcbiAgICAgIH1cXHJcXG5cXHJcXG4gICAgICByZXR1cm4gZmFsc2U7XFxyXFxuICAgIH0sXFxyXFxuICAgIGZpZWxkSXNJblNvcnRPcmRlclBvc2l0aW9uIChmaWVsZCwgaSkge1xcclxcbiAgICAgIHJldHVybiB0aGlzLnNvcnRPcmRlcltpXS5maWVsZCA9PT0gZmllbGQubmFtZSAmJiB0aGlzLnNvcnRPcmRlcltpXS5zb3J0RmllbGQgPT09IGZpZWxkLnNvcnRGaWVsZFxcclxcbiAgICB9LFxcclxcbiAgICBvcmRlckJ5IChmaWVsZCwgZXZlbnQpIHtcXHJcXG4gICAgICBpZiAoICEgdGhpcy5pc1NvcnRhYmxlKGZpZWxkKSApIHJldHVyblxcclxcblxcclxcbiAgICAgIGxldCBrZXkgPSB0aGlzLm11bHRpU29ydEtleS50b0xvd2VyQ2FzZSgpICsgJ0tleSdcXHJcXG5cXHJcXG4gICAgICBpZiAodGhpcy5tdWx0aVNvcnQgJiYgZXZlbnRba2V5XSkgeyAvL2FkZGluZyBjb2x1bW4gdG8gbXVsdGlzb3J0XFxyXFxuICAgICAgICB0aGlzLm11bHRpQ29sdW1uU29ydChmaWVsZClcXHJcXG4gICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgLy9ubyBtdWx0aXNvcnQsIG9yIHJlc2V0dGluZyBzb3J0XFxyXFxuICAgICAgICB0aGlzLnNpbmdsZUNvbHVtblNvcnQoZmllbGQpXFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxICAgIC8vIHJlc2V0IHBhZ2UgaW5kZXhcXHJcXG4gICAgICBpZiAodGhpcy5hcGlNb2RlIHx8IHRoaXMuZGF0YU1hbmFnZXIpIHtcXHJcXG4gICAgICAgIHRoaXMubG9hZERhdGEoKVxcclxcbiAgICAgIH1cXHJcXG4gICAgfSxcXHJcXG4gICAgbXVsdGlDb2x1bW5Tb3J0IChmaWVsZCkge1xcclxcbiAgICAgIGxldCBpID0gdGhpcy5jdXJyZW50U29ydE9yZGVyUG9zaXRpb24oZmllbGQpO1xcclxcblxcclxcbiAgICAgIGlmKGkgPT09IGZhbHNlKSB7IC8vdGhpcyBmaWVsZCBpcyBub3QgaW4gdGhlIHNvcnQgYXJyYXkgeWV0XFxyXFxuICAgICAgICB0aGlzLnNvcnRPcmRlci5wdXNoKHtcXHJcXG4gICAgICAgICAgZmllbGQ6IGZpZWxkLm5hbWUsXFxyXFxuICAgICAgICAgIHNvcnRGaWVsZDogZmllbGQuc29ydEZpZWxkLFxcclxcbiAgICAgICAgICBkaXJlY3Rpb246ICdhc2MnXFxyXFxuICAgICAgICB9KTtcXHJcXG4gICAgICB9IGVsc2UgeyAvL3RoaXMgZmllbGQgaXMgaW4gdGhlIHNvcnQgYXJyYXksIG5vdyB3ZSBjaGFuZ2UgaXRzIHN0YXRlXFxyXFxuICAgICAgICBpZih0aGlzLnNvcnRPcmRlcltpXS5kaXJlY3Rpb24gPT09ICdhc2MnKSB7XFxyXFxuICAgICAgICAgIC8vIHN3aXRjaCBkaXJlY3Rpb25cXHJcXG4gICAgICAgICAgdGhpcy5zb3J0T3JkZXJbaV0uZGlyZWN0aW9uID0gJ2Rlc2MnXFxyXFxuICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgICAvL3JlbW92ZSBzb3J0IGNvbmRpdGlvblxcclxcbiAgICAgICAgICB0aGlzLnNvcnRPcmRlci5zcGxpY2UoaSwgMSk7XFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgfVxcclxcbiAgICB9LFxcclxcbiAgICBzaW5nbGVDb2x1bW5Tb3J0IChmaWVsZCkge1xcclxcbiAgICAgIGlmICh0aGlzLnNvcnRPcmRlci5sZW5ndGggPT09IDApIHtcXHJcXG4gICAgICAgIHRoaXMuY2xlYXJTb3J0T3JkZXIoKVxcclxcbiAgICAgIH1cXHJcXG5cXHJcXG4gICAgICB0aGlzLnNvcnRPcmRlci5zcGxpY2UoMSk7IC8vcmVtb3ZlcyBhZGRpdGlvbmFsIGNvbHVtbnNcXHJcXG5cXHJcXG4gICAgICBpZiAodGhpcy5maWVsZElzSW5Tb3J0T3JkZXJQb3NpdGlvbihmaWVsZCwgMCkpIHtcXHJcXG4gICAgICAgIC8vIGNoYW5nZSBzb3J0IGRpcmVjdGlvblxcclxcbiAgICAgICAgdGhpcy5zb3J0T3JkZXJbMF0uZGlyZWN0aW9uID0gdGhpcy5zb3J0T3JkZXJbMF0uZGlyZWN0aW9uID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnXFxyXFxuICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgIC8vIHJlc2V0IHNvcnQgZGlyZWN0aW9uXFxyXFxuICAgICAgICB0aGlzLnNvcnRPcmRlclswXS5kaXJlY3Rpb24gPSAnYXNjJ1xcclxcbiAgICAgIH1cXHJcXG4gICAgICB0aGlzLnNvcnRPcmRlclswXS5maWVsZCA9IGZpZWxkLm5hbWVcXHJcXG4gICAgICB0aGlzLnNvcnRPcmRlclswXS5zb3J0RmllbGQgPSBmaWVsZC5zb3J0RmllbGRcXHJcXG4gICAgfSxcXHJcXG4gICAgY2xlYXJTb3J0T3JkZXIgKCkge1xcclxcbiAgICAgIHRoaXMuc29ydE9yZGVyLnB1c2goe1xcclxcbiAgICAgICAgZmllbGQ6ICcnLFxcclxcbiAgICAgICAgc29ydEZpZWxkOiAnJyxcXHJcXG4gICAgICAgIGRpcmVjdGlvbjogJ2FzYydcXHJcXG4gICAgICB9KTtcXHJcXG4gICAgfSxcXHJcXG4gICAgc29ydENsYXNzIChmaWVsZCkge1xcclxcbiAgICAgIGxldCBjbHMgPSAnJ1xcclxcbiAgICAgIGxldCBpID0gdGhpcy5jdXJyZW50U29ydE9yZGVyUG9zaXRpb24oZmllbGQpXFxyXFxuXFxyXFxuICAgICAgaWYgKGkgIT09IGZhbHNlKSB7XFxyXFxuICAgICAgICBjbHMgPSAodGhpcy5zb3J0T3JkZXJbaV0uZGlyZWN0aW9uID09ICdhc2MnKSA/IHRoaXMuY3NzLmFzY2VuZGluZ0NsYXNzIDogdGhpcy5jc3MuZGVzY2VuZGluZ0NsYXNzXFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIHJldHVybiBjbHNcXHJcXG4gICAgfSxcXHJcXG4gICAgc29ydEljb24gKGZpZWxkKSB7XFxyXFxuICAgICAgbGV0IGNscyA9IHRoaXMuY3NzLnNvcnRhYmxlSWNvblxcclxcbiAgICAgIGxldCBpID0gdGhpcy5jdXJyZW50U29ydE9yZGVyUG9zaXRpb24oZmllbGQpXFxyXFxuXFxyXFxuICAgICAgaWYgKGkgIT09IGZhbHNlKSB7XFxyXFxuICAgICAgICBjbHMgPSAodGhpcy5zb3J0T3JkZXJbaV0uZGlyZWN0aW9uID09ICdhc2MnKSA/IHRoaXMuY3NzLmFzY2VuZGluZ0ljb24gOiB0aGlzLmNzcy5kZXNjZW5kaW5nSWNvblxcclxcbiAgICAgIH1cXHJcXG5cXHJcXG4gICAgICByZXR1cm4gY2xzO1xcclxcbiAgICB9LFxcclxcbiAgICBzb3J0SWNvbk9wYWNpdHkgKGZpZWxkKSB7XFxyXFxuICAgICAgLypcXHJcXG4gICAgICAgKiBmaWVsZHMgd2l0aCBzdHJvbmdlciBwcmVjZWRlbmNlIGhhdmUgZGFya2VyIGNvbG9yXFxyXFxuICAgICAgICpcXHJcXG4gICAgICAgKiBpZiB0aGVyZSBhcmUgZmV3IGZpZWxkcywgd2UgZ28gZG93biBieSAwLjNcXHJcXG4gICAgICAgKiBleC4gMiBmaWVsZHMgYXJlIHNlbGVjdGVkOiAxLjAsIDAuN1xcclxcbiAgICAgICAqXFxyXFxuICAgICAgICogaWYgdGhlcmUgYXJlIG1vcmUgd2UgZ28gZG93biBldmVubHkgb24gdGhlIGdpdmVuIHNwZWN0cnVtXFxyXFxuICAgICAgICogZXguIDYgZmllbGRzIGFyZSBzZWxlY3RlZDogMS4wLCAwLjg2LCAwLjcyLCAwLjU4LCAwLjQ0LCAwLjNcXHJcXG4gICAgICAgKi9cXHJcXG4gICAgICBsZXQgbWF4ID0gMS4wLFxcclxcbiAgICAgICAgICBtaW4gPSAwLjMsXFxyXFxuICAgICAgICAgIHN0ZXAgPSAwLjNcXHJcXG5cXHJcXG4gICAgICBsZXQgY291bnQgPSB0aGlzLnNvcnRPcmRlci5sZW5ndGg7XFxyXFxuICAgICAgbGV0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnRTb3J0T3JkZXJQb3NpdGlvbihmaWVsZClcXHJcXG5cXHJcXG5cXHJcXG4gICAgICBpZihtYXggLSBjb3VudCAqIHN0ZXAgPCBtaW4pIHtcXHJcXG4gICAgICAgIHN0ZXAgPSAobWF4IC0gbWluKSAvIChjb3VudC0xKVxcclxcbiAgICAgIH1cXHJcXG5cXHJcXG4gICAgICBsZXQgb3BhY2l0eSA9IG1heCAtIGN1cnJlbnQgKiBzdGVwXFxyXFxuXFxyXFxuICAgICAgcmV0dXJuIG9wYWNpdHlcXHJcXG4gICAgfSxcXHJcXG4gICAgaGFzQ2FsbGJhY2sgKGl0ZW0pIHtcXHJcXG4gICAgICByZXR1cm4gaXRlbS5jYWxsYmFjayA/IHRydWUgOiBmYWxzZVxcclxcbiAgICB9LFxcclxcbiAgICBjYWxsQ2FsbGJhY2sgKGZpZWxkLCBpdGVtKSB7XFxyXFxuICAgICAgaWYgKCAhIHRoaXMuaGFzQ2FsbGJhY2soZmllbGQpKSByZXR1cm5cXHJcXG5cXHJcXG4gICAgICBpZih0eXBlb2YoZmllbGQuY2FsbGJhY2spID09ICdmdW5jdGlvbicpIHtcXHJcXG4gICAgICAgcmV0dXJuIGZpZWxkLmNhbGxiYWNrKHRoaXMuZ2V0T2JqZWN0VmFsdWUoaXRlbSwgZmllbGQubmFtZSkpXFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIGxldCBhcmdzID0gZmllbGQuY2FsbGJhY2suc3BsaXQoJ3wnKVxcclxcbiAgICAgIGxldCBmdW5jID0gYXJncy5zaGlmdCgpXFxyXFxuXFxyXFxuICAgICAgaWYgKHR5cGVvZiB0aGlzLiRwYXJlbnRbZnVuY10gPT09ICdmdW5jdGlvbicpIHtcXHJcXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0T2JqZWN0VmFsdWUoaXRlbSwgZmllbGQubmFtZSlcXHJcXG5cXHJcXG4gICAgICAgIHJldHVybiAoYXJncy5sZW5ndGggPiAwKVxcclxcbiAgICAgICAgICA/IHRoaXMuJHBhcmVudFtmdW5jXS5hcHBseSh0aGlzLiRwYXJlbnQsIFt2YWx1ZV0uY29uY2F0KGFyZ3MpKVxcclxcbiAgICAgICAgICA6IHRoaXMuJHBhcmVudFtmdW5jXS5jYWxsKHRoaXMuJHBhcmVudCwgdmFsdWUpXFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIHJldHVybiBudWxsXFxyXFxuICAgIH0sXFxyXFxuICAgIGdldE9iamVjdFZhbHVlIChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xcclxcbiAgICAgIGRlZmF1bHRWYWx1ZSA9ICh0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAndW5kZWZpbmVkJykgPyBudWxsIDogZGVmYXVsdFZhbHVlXFxyXFxuXFxyXFxuICAgICAgbGV0IG9iaiA9IG9iamVjdFxcclxcbiAgICAgIGlmIChwYXRoLnRyaW0oKSAhPSAnJykge1xcclxcbiAgICAgICAgbGV0IGtleXMgPSBwYXRoLnNwbGl0KCcuJylcXHJcXG4gICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcXHJcXG4gICAgICAgICAgaWYgKG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqW2tleV0gIT09ICd1bmRlZmluZWQnICYmIG9ialtrZXldICE9PSBudWxsKSB7XFxyXFxuICAgICAgICAgICAgb2JqID0gb2JqW2tleV1cXHJcXG4gICAgICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgICAgICBvYmogPSBkZWZhdWx0VmFsdWVcXHJcXG4gICAgICAgICAgICByZXR1cm5cXHJcXG4gICAgICAgICAgfVxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgICB9XFxyXFxuICAgICAgcmV0dXJuIG9ialxcclxcbiAgICB9LFxcclxcbiAgICB0b2dnbGVDaGVja2JveCAoZGF0YUl0ZW0sIGZpZWxkTmFtZSwgZXZlbnQpIHtcXHJcXG4gICAgICBsZXQgaXNDaGVja2VkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWRcXHJcXG4gICAgICBsZXQgaWRDb2x1bW4gPSB0aGlzLnRyYWNrQnlcXHJcXG5cXHJcXG4gICAgICBpZiAoZGF0YUl0ZW1baWRDb2x1bW5dID09PSB1bmRlZmluZWQpIHtcXHJcXG4gICAgICAgIHRoaXMud2FybignX19jaGVja2JveCBmaWVsZDogVGhlIFxcXCInK3RoaXMudHJhY2tCeSsnXFxcIiBmaWVsZCBkb2VzIG5vdCBleGlzdCEgTWFrZSBzdXJlIHRoZSBmaWVsZCB5b3Ugc3BlY2lmeSBpbiBcXFwidHJhY2stYnlcXFwiIHByb3AgZG9lcyBleGlzdC4nKVxcclxcbiAgICAgICAgcmV0dXJuXFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIGxldCBrZXkgPSBkYXRhSXRlbVtpZENvbHVtbl1cXHJcXG4gICAgICBpZiAoaXNDaGVja2VkKSB7XFxyXFxuICAgICAgICB0aGlzLnNlbGVjdElkKGtleSlcXHJcXG4gICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgdGhpcy51bnNlbGVjdElkKGtleSlcXHJcXG4gICAgICB9XFxyXFxuICAgICAgdGhpcy4kZW1pdCgndnVldGFibGU6Y2hlY2tib3gtdG9nZ2xlZCcsIGlzQ2hlY2tlZCwgZGF0YUl0ZW0pXFxyXFxuICAgIH0sXFxyXFxuICAgIHNlbGVjdElkIChrZXkpIHtcXHJcXG4gICAgICBpZiAoICEgdGhpcy5pc1NlbGVjdGVkUm93KGtleSkpIHtcXHJcXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUby5wdXNoKGtleSlcXHJcXG4gICAgICB9XFxyXFxuICAgIH0sXFxyXFxuICAgIHVuc2VsZWN0SWQgKGtleSkge1xcclxcbiAgICAgIHRoaXMuc2VsZWN0ZWRUbyA9IHRoaXMuc2VsZWN0ZWRUby5maWx0ZXIoZnVuY3Rpb24oaXRlbSkge1xcclxcbiAgICAgICAgcmV0dXJuIGl0ZW0gIT09IGtleVxcclxcbiAgICAgIH0pXFxyXFxuICAgIH0sXFxyXFxuICAgIGlzU2VsZWN0ZWRSb3cgKGtleSkge1xcclxcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVG8uaW5kZXhPZihrZXkpID49IDBcXHJcXG4gICAgfSxcXHJcXG4gICAgcm93U2VsZWN0ZWQgKGRhdGFJdGVtLCBmaWVsZE5hbWUpe1xcclxcbiAgICAgIGxldCBpZENvbHVtbiA9IHRoaXMudHJhY2tCeVxcclxcbiAgICAgIGxldCBrZXkgPSBkYXRhSXRlbVtpZENvbHVtbl1cXHJcXG5cXHJcXG4gICAgICByZXR1cm4gdGhpcy5pc1NlbGVjdGVkUm93KGtleSlcXHJcXG4gICAgfSxcXHJcXG4gICAgY2hlY2tDaGVja2JveGVzU3RhdGUgKGZpZWxkTmFtZSkge1xcclxcbiAgICAgIGlmICghIHRoaXMudGFibGVEYXRhKSByZXR1cm5cXHJcXG5cXHJcXG4gICAgICBsZXQgc2VsZiA9IHRoaXNcXHJcXG4gICAgICBsZXQgaWRDb2x1bW4gPSB0aGlzLnRyYWNrQnlcXHJcXG4gICAgICBsZXQgc2VsZWN0b3IgPSAndGgudnVldGFibGUtdGgtY2hlY2tib3gtJyArIGlkQ29sdW1uICsgJyBpbnB1dFt0eXBlPWNoZWNrYm94XSdcXHJcXG4gICAgICBsZXQgZWxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcilcXHJcXG5cXHJcXG4gICAgICAvL2ZpeGVkOmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgcmV0dXJuIHRoZSB0eXBlb2Ygbm9kZUxpc3Qgbm90IGFycmF5XFxyXFxuICAgICAgaWYgKGVscy5mb3JFYWNoPT09dW5kZWZpbmVkKVxcclxcbiAgICAgICAgZWxzLmZvckVhY2g9ZnVuY3Rpb24oY2Ipe1xcclxcbiAgICAgICAgICBbXS5mb3JFYWNoLmNhbGwoZWxzLCBjYik7XFxyXFxuICAgICAgICB9XFxyXFxuXFxyXFxuICAgICAgLy8gY291bnQgaG93IG1hbnkgY2hlY2tib3ggcm93IGluIHRoZSBjdXJyZW50IHBhZ2UgaGFzIGJlZW4gY2hlY2tlZFxcclxcbiAgICAgIGxldCBzZWxlY3RlZCA9IHRoaXMudGFibGVEYXRhLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XFxyXFxuICAgICAgICByZXR1cm4gc2VsZi5zZWxlY3RlZFRvLmluZGV4T2YoaXRlbVtpZENvbHVtbl0pID49IDBcXHJcXG4gICAgICB9KVxcclxcblxcclxcbiAgICAgIC8vIGNvdW50ID09IDAsIGNsZWFyIHRoZSBjaGVja2JveFxcclxcbiAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPD0gMCkge1xcclxcbiAgICAgICAgZWxzLmZvckVhY2goZnVuY3Rpb24oZWwpIHtcXHJcXG4gICAgICAgICAgZWwuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlXFxyXFxuICAgICAgICB9KVxcclxcbiAgICAgICAgcmV0dXJuIGZhbHNlXFxyXFxuICAgICAgfVxcclxcbiAgICAgIC8vIGNvdW50ID4gMCBhbmQgY291bnQgPCBwZXJQYWdlLCBzZXQgY2hlY2tib3ggc3RhdGUgdG8gJ2luZGV0ZXJtaW5hdGUnXFxyXFxuICAgICAgZWxzZSBpZiAoc2VsZWN0ZWQubGVuZ3RoIDwgdGhpcy5wZXJQYWdlKSB7XFxyXFxuICAgICAgICBlbHMuZm9yRWFjaChmdW5jdGlvbihlbCkge1xcclxcbiAgICAgICAgICBlbC5pbmRldGVybWluYXRlID0gdHJ1ZVxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgICAgIHJldHVybiB0cnVlXFxyXFxuICAgICAgfVxcclxcbiAgICAgIC8vIGNvdW50ID09IHBlclBhZ2UsIHNldCBjaGVja2JveCBzdGF0ZSB0byAnY2hlY2tlZCdcXHJcXG4gICAgICBlbHNlIHtcXHJcXG4gICAgICAgIGVscy5mb3JFYWNoKGZ1bmN0aW9uKGVsKSB7XFxyXFxuICAgICAgICAgIGVsLmluZGV0ZXJtaW5hdGUgPSBmYWxzZVxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgICAgIHJldHVybiB0cnVlXFxyXFxuICAgICAgfVxcclxcbiAgICB9LFxcclxcbiAgICB0b2dnbGVBbGxDaGVja2JveGVzIChmaWVsZE5hbWUsIGV2ZW50KSB7XFxyXFxuICAgICAgbGV0IHNlbGYgPSB0aGlzXFxyXFxuICAgICAgbGV0IGlzQ2hlY2tlZCA9IGV2ZW50LnRhcmdldC5jaGVja2VkXFxyXFxuICAgICAgbGV0IGlkQ29sdW1uID0gdGhpcy50cmFja0J5XFxyXFxuXFxyXFxuICAgICAgaWYgKGlzQ2hlY2tlZCkge1xcclxcbiAgICAgICAgdGhpcy50YWJsZURhdGEuZm9yRWFjaChmdW5jdGlvbihkYXRhSXRlbSkge1xcclxcbiAgICAgICAgICBzZWxmLnNlbGVjdElkKGRhdGFJdGVtW2lkQ29sdW1uXSlcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgIHRoaXMudGFibGVEYXRhLmZvckVhY2goZnVuY3Rpb24oZGF0YUl0ZW0pIHtcXHJcXG4gICAgICAgICAgc2VsZi51bnNlbGVjdElkKGRhdGFJdGVtW2lkQ29sdW1uXSlcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgICAgfVxcclxcbiAgICAgIHRoaXMuJGVtaXQoJ3Z1ZXRhYmxlOmNoZWNrYm94LXRvZ2dsZWQtYWxsJywgaXNDaGVja2VkKVxcclxcbiAgICB9LFxcclxcbiAgICBnb3RvUHJldmlvdXNQYWdlICgpIHtcXHJcXG4gICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IDEpIHtcXHJcXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UtLVxcclxcbiAgICAgICAgdGhpcy5sb2FkRGF0YSgpXFxyXFxuICAgICAgfVxcclxcbiAgICB9LFxcclxcbiAgICBnb3RvTmV4dFBhZ2UgKCkge1xcclxcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlIDwgdGhpcy50YWJsZVBhZ2luYXRpb24ubGFzdF9wYWdlKSB7XFxyXFxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlKytcXHJcXG4gICAgICAgIHRoaXMubG9hZERhdGEoKVxcclxcbiAgICAgIH1cXHJcXG4gICAgfSxcXHJcXG4gICAgZ290b1BhZ2UgKHBhZ2UpIHtcXHJcXG4gICAgICBpZiAocGFnZSAhPSB0aGlzLmN1cnJlbnRQYWdlICYmIChwYWdlID4gMCAmJiBwYWdlIDw9IHRoaXMudGFibGVQYWdpbmF0aW9uLmxhc3RfcGFnZSkpIHtcXHJcXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlXFxyXFxuICAgICAgICB0aGlzLmxvYWREYXRhKClcXHJcXG4gICAgICB9XFxyXFxuICAgIH0sXFxyXFxuICAgIGlzVmlzaWJsZURldGFpbFJvdyAocm93SWQpIHtcXHJcXG4gICAgICByZXR1cm4gdGhpcy52aXNpYmxlRGV0YWlsUm93cy5pbmRleE9mKCByb3dJZCApID49IDBcXHJcXG4gICAgfSxcXHJcXG4gICAgc2hvd0RldGFpbFJvdyAocm93SWQpIHtcXHJcXG4gICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlRGV0YWlsUm93KHJvd0lkKSkge1xcclxcbiAgICAgICAgdGhpcy52aXNpYmxlRGV0YWlsUm93cy5wdXNoKHJvd0lkKVxcclxcbiAgICAgIH1cXHJcXG4gICAgfSxcXHJcXG4gICAgaGlkZURldGFpbFJvdyAocm93SWQpIHtcXHJcXG4gICAgICBpZiAodGhpcy5pc1Zpc2libGVEZXRhaWxSb3cocm93SWQpKSB7XFxyXFxuICAgICAgICB0aGlzLnZpc2libGVEZXRhaWxSb3dzLnNwbGljZShcXHJcXG4gICAgICAgICAgdGhpcy52aXNpYmxlRGV0YWlsUm93cy5pbmRleE9mKHJvd0lkKSxcXHJcXG4gICAgICAgICAgMVxcclxcbiAgICAgICAgKVxcclxcbiAgICAgIH1cXHJcXG4gICAgfSxcXHJcXG4gICAgdG9nZ2xlRGV0YWlsUm93IChyb3dJZCkge1xcclxcbiAgICAgIGlmICh0aGlzLmlzVmlzaWJsZURldGFpbFJvdyhyb3dJZCkpIHtcXHJcXG4gICAgICAgIHRoaXMuaGlkZURldGFpbFJvdyhyb3dJZClcXHJcXG4gICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsUm93KHJvd0lkKVxcclxcbiAgICAgIH1cXHJcXG4gICAgfSxcXHJcXG4gICAgc2hvd0ZpZWxkIChpbmRleCkge1xcclxcbiAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiB0aGlzLnRhYmxlRmllbGRzLmxlbmd0aCkgcmV0dXJuXFxyXFxuXFxyXFxuICAgICAgdGhpcy50YWJsZUZpZWxkc1tpbmRleF0udmlzaWJsZSA9IHRydWVcXHJcXG4gICAgfSxcXHJcXG4gICAgaGlkZUZpZWxkIChpbmRleCkge1xcclxcbiAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiB0aGlzLnRhYmxlRmllbGRzLmxlbmd0aCkgcmV0dXJuXFxyXFxuXFxyXFxuICAgICAgdGhpcy50YWJsZUZpZWxkc1tpbmRleF0udmlzaWJsZSA9IGZhbHNlXFxyXFxuICAgIH0sXFxyXFxuICAgIHRvZ2dsZUZpZWxkIChpbmRleCkge1xcclxcbiAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiB0aGlzLnRhYmxlRmllbGRzLmxlbmd0aCkgcmV0dXJuXFxyXFxuXFxyXFxuICAgICAgdGhpcy50YWJsZUZpZWxkc1tpbmRleF0udmlzaWJsZSA9ICEgdGhpcy50YWJsZUZpZWxkc1tpbmRleF0udmlzaWJsZVxcclxcbiAgICB9LFxcclxcbiAgICByZW5kZXJJY29uVGFnIChjbGFzc2VzLCBvcHRpb25zID0gJycpIHtcXHJcXG4gICAgICByZXR1cm4gdHlwZW9mKHRoaXMuY3NzLnJlbmRlckljb24pID09PSAndW5kZWZpbmVkJ1xcclxcbiAgICAgICAgPyBgPGkgY2xhc3M9XFxcIiR7Y2xhc3Nlcy5qb2luKCcgJyl9XFxcIiAke29wdGlvbnN9PjwvaT5gXFxyXFxuICAgICAgICA6IHRoaXMuY3NzLnJlbmRlckljb24oY2xhc3Nlcywgb3B0aW9ucylcXHJcXG4gICAgfSxcXHJcXG4gICAgbWFrZVBhZ2luYXRpb24gKHRvdGFsID0gbnVsbCwgcGVyUGFnZSA9IG51bGwsIGN1cnJlbnRQYWdlID0gbnVsbCkge1xcclxcbiAgICAgIGxldCBwYWdpbmF0aW9uID0ge31cXHJcXG4gICAgICB0b3RhbCA9IHRvdGFsID09PSBudWxsID8gdGhpcy5kYXRhVG90YWwgOiB0b3RhbFxcclxcbiAgICAgIHBlclBhZ2UgPSBwZXJQYWdlID09PSBudWxsID8gdGhpcy5wZXJQYWdlIDogcGVyUGFnZVxcclxcbiAgICAgIGN1cnJlbnRQYWdlID0gY3VycmVudFBhZ2UgPT09IG51bGwgPyB0aGlzLmN1cnJlbnRQYWdlIDogY3VycmVudFBhZ2VcXHJcXG5cXHJcXG4gICAgICByZXR1cm4ge1xcclxcbiAgICAgICAgJ3RvdGFsJzogdG90YWwsXFxyXFxuICAgICAgICAncGVyX3BhZ2UnOiBwZXJQYWdlLFxcclxcbiAgICAgICAgJ2N1cnJlbnRfcGFnZSc6IGN1cnJlbnRQYWdlLFxcclxcbiAgICAgICAgJ2xhc3RfcGFnZSc6IE1hdGguY2VpbCh0b3RhbCAvIHBlclBhZ2UpIHx8IDAsXFxyXFxuICAgICAgICAnbmV4dF9wYWdlX3VybCc6ICcnLFxcclxcbiAgICAgICAgJ3ByZXZfcGFnZV91cmwnOiAnJyxcXHJcXG4gICAgICAgICdmcm9tJzogKGN1cnJlbnRQYWdlIC0xKSAqIHBlclBhZ2UgKzEsXFxyXFxuICAgICAgICAndG8nOiBNYXRoLm1pbihjdXJyZW50UGFnZSAqIHBlclBhZ2UsIHRvdGFsKVxcclxcbiAgICAgIH1cXHJcXG4gICAgfSxcXHJcXG4gICAgbm9ybWFsaXplU29ydE9yZGVyICgpIHtcXHJcXG4gICAgICB0aGlzLnNvcnRPcmRlci5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcXHJcXG4gICAgICAgIGl0ZW0uc29ydEZpZWxkID0gaXRlbS5zb3J0RmllbGQgfHwgaXRlbS5maWVsZFxcclxcbiAgICAgIH0pXFxyXFxuICAgIH0sXFxyXFxuICAgIGNhbGxEYXRhTWFuYWdlciAoKSB7XFxyXFxuICAgICAgaWYgKHRoaXMuZGF0YU1hbmFnZXIgPT09IG51bGwgJiYgdGhpcy5kYXRhID09PSBudWxsKSByZXR1cm5cXHJcXG5cXHJcXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEpKSB7XFxyXFxuICAgICAgICByZXR1cm4gdGhpcy5zZXREYXRhKHRoaXMuZGF0YSlcXHJcXG4gICAgICB9IFxcclxcbiAgICAgIFxcclxcbiAgICAgIHRoaXMubm9ybWFsaXplU29ydE9yZGVyKClcXHJcXG5cXHJcXG4gICAgICByZXR1cm4gdGhpcy5zZXREYXRhKFxcclxcbiAgICAgICAgdGhpcy5kYXRhTWFuYWdlclxcclxcbiAgICAgICAgICA/IHRoaXMuZGF0YU1hbmFnZXIodGhpcy5zb3J0T3JkZXIsIHRoaXMubWFrZVBhZ2luYXRpb24oKSlcXHJcXG4gICAgICAgICAgOiB0aGlzLmRhdGFcXHJcXG4gICAgICApXFxyXFxuICAgIH0sXFxyXFxuICAgIG9uUm93Q2xhc3MgKGRhdGFJdGVtLCBpbmRleCkge1xcclxcbiAgICAgIGlmICh0aGlzLnJvd0NsYXNzQ2FsbGJhY2sgIT09ICcnKSB7XFxyXFxuICAgICAgICB0aGlzLndhcm4oJ1xcXCJyb3ctY2xhc3MtY2FsbGJhY2tcXFwiIHByb3AgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBcXFwicm93LWNsYXNzXFxcIiBwcm9wIGluc3RlYWQuJylcXHJcXG4gICAgICAgIHJldHVyblxcclxcbiAgICAgIH1cXHJcXG5cXHJcXG4gICAgICBpZiAodHlwZW9mKHRoaXMucm93Q2xhc3MpID09PSAnZnVuY3Rpb24nKSB7XFxyXFxuICAgICAgICByZXR1cm4gdGhpcy5yb3dDbGFzcyhkYXRhSXRlbSwgaW5kZXgpXFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIHJldHVybiB0aGlzLnJvd0NsYXNzXFxyXFxuICAgIH0sXFxyXFxuICAgIG9uUm93Q2hhbmdlZCAoZGF0YUl0ZW0pIHtcXHJcXG4gICAgICB0aGlzLmZpcmVFdmVudCgncm93LWNoYW5nZWQnLCBkYXRhSXRlbSlcXHJcXG4gICAgICByZXR1cm4gdHJ1ZVxcclxcbiAgICB9LFxcclxcbiAgICBvblJvd0NsaWNrZWQgKGRhdGFJdGVtLCBldmVudCkge1xcclxcbiAgICAgIHRoaXMuJGVtaXQodGhpcy5ldmVudFByZWZpeCArICdyb3ctY2xpY2tlZCcsIGRhdGFJdGVtLCBldmVudClcXHJcXG4gICAgICByZXR1cm4gdHJ1ZVxcclxcbiAgICB9LFxcclxcbiAgICBvblJvd0RvdWJsZUNsaWNrZWQgKGRhdGFJdGVtLCBldmVudCkge1xcclxcbiAgICAgIHRoaXMuJGVtaXQodGhpcy5ldmVudFByZWZpeCArICdyb3ctZGJsY2xpY2tlZCcsIGRhdGFJdGVtLCBldmVudClcXHJcXG4gICAgfSxcXHJcXG4gICAgb25EZXRhaWxSb3dDbGljayAoZGF0YUl0ZW0sIGV2ZW50KSB7XFxyXFxuICAgICAgdGhpcy4kZW1pdCh0aGlzLmV2ZW50UHJlZml4ICsgJ2RldGFpbC1yb3ctY2xpY2tlZCcsIGRhdGFJdGVtLCBldmVudClcXHJcXG4gICAgfSxcXHJcXG4gICAgb25DZWxsQ2xpY2tlZCAoZGF0YUl0ZW0sIGZpZWxkLCBldmVudCkge1xcclxcbiAgICAgIHRoaXMuJGVtaXQodGhpcy5ldmVudFByZWZpeCArICdjZWxsLWNsaWNrZWQnLCBkYXRhSXRlbSwgZmllbGQsIGV2ZW50KVxcclxcbiAgICB9LFxcclxcbiAgICBvbkNlbGxEb3VibGVDbGlja2VkIChkYXRhSXRlbSwgZmllbGQsIGV2ZW50KSB7XFxyXFxuICAgICAgdGhpcy4kZW1pdCh0aGlzLmV2ZW50UHJlZml4ICsgJ2NlbGwtZGJsY2xpY2tlZCcsIGRhdGFJdGVtLCBmaWVsZCwgZXZlbnQpXFxyXFxuICAgIH0sXFxyXFxuICAgIG9uQ2VsbFJpZ2h0Q2xpY2tlZCAoZGF0YUl0ZW0sIGZpZWxkLCBldmVudCkge1xcclxcbiAgICAgIHRoaXMuJGVtaXQodGhpcy5ldmVudFByZWZpeCArICdjZWxsLXJpZ2h0Y2xpY2tlZCcsIGRhdGFJdGVtLCBmaWVsZCwgZXZlbnQpXFxyXFxuICAgIH0sXFxyXFxuICAgIC8qXFxyXFxuICAgICAqIEFQSSBmb3IgZXh0ZXJuYWxzXFxyXFxuICAgICAqL1xcclxcbiAgICBjaGFuZ2VQYWdlIChwYWdlKSB7XFxyXFxuICAgICAgaWYgKHBhZ2UgPT09ICdwcmV2Jykge1xcclxcbiAgICAgICAgdGhpcy5nb3RvUHJldmlvdXNQYWdlKClcXHJcXG4gICAgICB9IGVsc2UgaWYgKHBhZ2UgPT09ICduZXh0Jykge1xcclxcbiAgICAgICAgdGhpcy5nb3RvTmV4dFBhZ2UoKVxcclxcbiAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICB0aGlzLmdvdG9QYWdlKHBhZ2UpXFxyXFxuICAgICAgfVxcclxcbiAgICB9LFxcclxcbiAgICByZWxvYWQgKCkge1xcclxcbiAgICAgIHJldHVybiB0aGlzLmxvYWREYXRhKClcXHJcXG4gICAgfSxcXHJcXG4gICAgcmVmcmVzaCAoKSB7XFxyXFxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDFcXHJcXG4gICAgICByZXR1cm4gdGhpcy5sb2FkRGF0YSgpXFxyXFxuICAgIH0sXFxyXFxuICAgIHJlc2V0RGF0YSAoKSB7XFxyXFxuICAgICAgdGhpcy50YWJsZURhdGEgPSBudWxsXFxyXFxuICAgICAgdGhpcy50YWJsZVBhZ2luYXRpb24gPSBudWxsXFxyXFxuICAgICAgdGhpcy5maXJlRXZlbnQoJ2RhdGEtcmVzZXQnKVxcclxcbiAgICB9XFxyXFxuICB9LCAvLyBlbmQ6IG1ldGhvZHNcXHJcXG4gIHdhdGNoOiB7XFxyXFxuICAgICdtdWx0aVNvcnQnIChuZXdWYWwsIG9sZFZhbCkge1xcclxcbiAgICAgIGlmIChuZXdWYWwgPT09IGZhbHNlICYmIHRoaXMuc29ydE9yZGVyLmxlbmd0aCA+IDEpIHtcXHJcXG4gICAgICAgIHRoaXMuc29ydE9yZGVyLnNwbGljZSgxKTtcXHJcXG4gICAgICAgIHRoaXMubG9hZERhdGEoKTtcXHJcXG4gICAgICB9XFxyXFxuICAgIH0sXFxyXFxuICAgICdhcGlVcmwnICAobmV3VmFsLCBvbGRWYWwpIHtcXHJcXG4gICAgICBpZih0aGlzLnJlYWN0aXZlQXBpVXJsICYmIG5ld1ZhbCAhPT0gb2xkVmFsKVxcclxcbiAgICAgICAgdGhpcy5yZWZyZXNoKClcXHJcXG4gICAgfSxcXHJcXG4gICAgJ2RhdGEnIChuZXdWYWwsIG9sZFZhbCkge1xcclxcbiAgICAgIHRoaXMuc2V0RGF0YShuZXdWYWwpXFxyXFxuICAgIH0sXFxyXFxuICAgICd0YWJsZUhlaWdodCcgKG5ld1ZhbCwgb2xkVmFsKSB7XFxyXFxuICAgICAgdGhpcy5maXhIZWFkZXIoKVxcclxcbiAgICB9XFxyXFxuICB9LFxcclxcbn1cXHJcXG48L3NjcmlwdD5cXHJcXG5cXHJcXG48c3R5bGUgc2NvcGVkPlxcclxcbiAgW3YtY2xvYWtdIHtcXHJcXG4gICAgZGlzcGxheTogbm9uZTtcXHJcXG4gIH1cXHJcXG4gIC52dWV0YWJsZSB0aC5zb3J0YWJsZTpob3ZlciB7XFxyXFxuICAgIGNvbG9yOiAjMjE4NWQwO1xcclxcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxuICB9XFxyXFxuICAudnVldGFibGUtYm9keS13cmFwcGVyIHtcXHJcXG4gICAgcG9zaXRpb246cmVsYXRpdmU7XFxyXFxuICAgIG92ZXJmbG93LXk6YXV0bztcXHJcXG4gIH1cXHJcXG4gIC52dWV0YWJsZS1oZWFkLXdyYXBwZXIge1xcclxcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XFxyXFxuICB9XFxyXFxuICAudnVldGFibGUtYWN0aW9ucyB7XFxyXFxuICAgIHdpZHRoOiAxNSU7XFxyXFxuICAgIHBhZGRpbmc6IDEycHggMHB4O1xcclxcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxyXFxuICB9XFxyXFxuICAudnVldGFibGUtcGFnaW5hdGlvbiB7XFxyXFxuICAgIGJhY2tncm91bmQ6ICNmOWZhZmIgIWltcG9ydGFudDtcXHJcXG4gIH1cXHJcXG4gIC52dWV0YWJsZS1wYWdpbmF0aW9uLWluZm8ge1xcclxcbiAgICBtYXJnaW4tdG9wOiBhdXRvO1xcclxcbiAgICBtYXJnaW4tYm90dG9tOiBhdXRvO1xcclxcbiAgfVxcclxcbiAgLnZ1ZXRhYmxlLWVtcHR5LXJlc3VsdCB7XFxyXFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXHJcXG4gIH1cXHJcXG4gIC52dWV0YWJsZS1jbGlwLXRleHQge1xcclxcbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XFxyXFxuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcclxcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbiAgICBkaXNwbGF5OiBibG9jaztcXHJcXG4gIH1cXHJcXG4gIC52dWV0YWJsZS1zZW1hbnRpYy1uby10b3Age1xcclxcbiAgICBib3JkZXItdG9wOm5vbmUgIWltcG9ydGFudDtcXHJcXG4gICAgbWFyZ2luLXRvcDowICFpbXBvcnRhbnQ7XFxyXFxuICB9XFxyXFxuICAudnVldGFibGUtZml4ZWQtbGF5b3V0IHtcXHJcXG4gICAgdGFibGUtbGF5b3V0OiBmaXhlZDtcXHJcXG4gIH1cXHJcXG4gIC52dWV0YWJsZS1ndXR0ZXItY29sIHtcXHJcXG4gICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xcclxcbiAgICBib3JkZXItbGVmdDogbm9uZSAgIWltcG9ydGFudDtcXHJcXG4gICAgYm9yZGVyLXJpZ2h0OiBub25lICAhaW1wb3J0YW50O1xcclxcbiAgfVxcclxcbjwvc3R5bGU+XFxyXFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4941\n\n}");
/***/ },
/***/ 537
(module, __unused_webpack_exports, __webpack_require__) {
eval("{// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(740);\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = (__webpack_require__(8665)/* [\"default\"] */ .A)\nvar update = add(\"3befc108\", content, false, {});\n// Hot Module Replacement\nif(false) // removed by dead control flow\n{}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTM3LmpzIiwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLEdBQStQO0FBQ3JSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSwrQ0FBaUY7QUFDM0YsK0NBQStDO0FBQy9DO0FBQ0EsR0FBRyxLQUFVLEVBQUU7QUFBQSIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL2FwcC9saXN0L2NvbXBvbmVudHMvRmlsdGVyQmFyLnZ1ZT85MjZiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHN0eWxlLWxvYWRlcjogQWRkcyBzb21lIGNzcyB0byB0aGUgRE9NIGJ5IGFkZGluZyBhIDxzdHlsZT4gdGFnXG5cbi8vIGxvYWQgdGhlIHN0eWxlc1xudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9GaWx0ZXJCYXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NTQ3N2M1YmUmcHJvZCZzY29wZWQ9dHJ1ZSZsYW5nPWNzc1wiKTtcbmlmKGNvbnRlbnQuX19lc01vZHVsZSkgY29udGVudCA9IGNvbnRlbnQuZGVmYXVsdDtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgYWRkID0gcmVxdWlyZShcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzXCIpLmRlZmF1bHRcbnZhciB1cGRhdGUgPSBhZGQoXCIzYmVmYzEwOFwiLCBjb250ZW50LCBmYWxzZSwge30pO1xuLy8gSG90IE1vZHVsZSBSZXBsYWNlbWVudFxuaWYobW9kdWxlLmhvdCkge1xuIC8vIFdoZW4gdGhlIHN0eWxlcyBjaGFuZ2UsIHVwZGF0ZSB0aGUgPHN0eWxlPiB0YWdzXG4gaWYoIWNvbnRlbnQubG9jYWxzKSB7XG4gICBtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vRmlsdGVyQmFyLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTU0NzdjNWJlJnByb2Qmc2NvcGVkPXRydWUmbGFuZz1jc3NcIiwgZnVuY3Rpb24oKSB7XG4gICAgIHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vRmlsdGVyQmFyLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTU0NzdjNWJlJnByb2Qmc2NvcGVkPXRydWUmbGFuZz1jc3NcIik7XG4gICAgIGlmKG5ld0NvbnRlbnQuX19lc01vZHVsZSkgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQuZGVmYXVsdDtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///537\n\n}");
/***/ },
/***/ 1152
(module, __unused_webpack_exports, __webpack_require__) {
eval("{// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(4941);\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = (__webpack_require__(8665)/* [\"default\"] */ .A)\nvar update = add(\"48743156\", content, false, {});\n// Hot Module Replacement\nif(false) // removed by dead control flow\n{}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTE1Mi5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxJQUF1TjtBQUM3TztBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsK0NBQW9FO0FBQzlFLCtDQUErQztBQUMvQztBQUNBLEdBQUcsS0FBVSxFQUFFO0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvdnVldGFibGUtMi9zcmMvY29tcG9uZW50cy9WdWV0YWJsZS52dWU/ZjgyNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vVnVldGFibGUudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NWJmYTA1YjAmcHJvZCZzY29wZWQ9dHJ1ZSZsYW5nPWNzc1wiKTtcbmlmKGNvbnRlbnQuX19lc01vZHVsZSkgY29udGVudCA9IGNvbnRlbnQuZGVmYXVsdDtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgYWRkID0gcmVxdWlyZShcIiEuLi8uLi8uLi92dWUtc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXNDbGllbnQuanNcIikuZGVmYXVsdFxudmFyIHVwZGF0ZSA9IGFkZChcIjQ4NzQzMTU2XCIsIGNvbnRlbnQsIGZhbHNlLCB7fSk7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG4gLy8gV2hlbiB0aGUgc3R5bGVzIGNoYW5nZSwgdXBkYXRlIHRoZSA8c3R5bGU+IHRhZ3NcbiBpZighY29udGVudC5sb2NhbHMpIHtcbiAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9WdWV0YWJsZS52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD01YmZhMDViMCZwcm9kJnNjb3BlZD10cnVlJmxhbmc9Y3NzXCIsIGZ1bmN0aW9uKCkge1xuICAgICB2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL1Z1ZXRhYmxlLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTViZmEwNWIwJnByb2Qmc2NvcGVkPXRydWUmbGFuZz1jc3NcIik7XG4gICAgIGlmKG5ld0NvbnRlbnQuX19lc01vZHVsZSkgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQuZGVmYXVsdDtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1152\n\n}");
/***/ },
/***/ 8665
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("{\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n A: () => (/* binding */ addStylesClient)\n});\n\n;// ./node_modules/vue-style-loader/lib/listToStyles.js\n/**\n * Translates the list format produced by css-loader into something\n * easier to manipulate.\n */\nfunction listToStyles(parentId, list) {\n var styles = [];\n var newStyles = {};\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = item[0];\n var css = item[1];\n var media = item[2];\n var sourceMap = item[3];\n var part = {\n id: parentId + ':' + i,\n css: css,\n media: media,\n sourceMap: sourceMap\n };\n if (!newStyles[id]) {\n styles.push(newStyles[id] = {\n id: id,\n parts: [part]\n });\n } else {\n newStyles[id].parts.push(part);\n }\n }\n return styles;\n}\n;// ./node_modules/vue-style-loader/lib/addStylesClient.js\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n Modified by Evan You @yyx990803\n*/\n\n\n\nvar hasDocument = typeof document !== 'undefined'\n\nif (typeof DEBUG !== 'undefined' && DEBUG) {\n if (!hasDocument) {\n throw new Error(\n 'vue-style-loader cannot be used in a non-browser environment. ' +\n \"Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.\"\n ) }\n}\n\n/*\ntype StyleObject = {\n id: number;\n parts: Array<StyleObjectPart>\n}\n\ntype StyleObjectPart = {\n css: string;\n media: string;\n sourceMap: ?string\n}\n*/\n\nvar stylesInDom = {/*\n [id: number]: {\n id: number,\n refs: number,\n parts: Array<(obj?: StyleObjectPart) => void>\n }\n*/}\n\nvar head = hasDocument && (document.head || document.getElementsByTagName('head')[0])\nvar singletonElement = null\nvar singletonCounter = 0\nvar isProduction = false\nvar noop = function () {}\nvar options = null\nvar ssrIdKey = 'data-vue-ssr-id'\n\n// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n// tags it will allow on a page\nvar isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\\b/.test(navigator.userAgent.toLowerCase())\n\nfunction addStylesClient (parentId, list, _isProduction, _options) {\n isProduction = _isProduction\n\n options = _options || {}\n\n var styles = listToStyles(parentId, list)\n addStylesToDom(styles)\n\n return function update (newList) {\n var mayRemove = []\n for (var i = 0; i < styles.length; i++) {\n var item = styles[i]\n var domStyle = stylesInDom[item.id]\n domStyle.refs--\n mayRemove.push(domStyle)\n }\n if (newList) {\n styles = listToStyles(parentId, newList)\n addStylesToDom(styles)\n } else {\n styles = []\n }\n for (var i = 0; i < mayRemove.length; i++) {\n var domStyle = mayRemove[i]\n if (domStyle.refs === 0) {\n for (var j = 0; j < domStyle.parts.length; j++) {\n domStyle.parts[j]()\n }\n delete stylesInDom[domStyle.id]\n }\n }\n }\n}\n\nfunction addStylesToDom (styles /* Array<StyleObject> */) {\n for (var i = 0; i < styles.length; i++) {\n var item = styles[i]\n var domStyle = stylesInDom[item.id]\n if (domStyle) {\n domStyle.refs++\n for (var j = 0; j < domStyle.parts.length; j++) {\n domStyle.parts[j](item.parts[j])\n }\n for (; j < item.parts.length; j++) {\n domStyle.parts.push(addStyle(item.parts[j]))\n }\n if (domStyle.parts.length > item.parts.length) {\n domStyle.parts.length = item.parts.length\n }\n } else {\n var parts = []\n for (var j = 0; j < item.parts.length; j++) {\n parts.push(addStyle(item.parts[j]))\n }\n stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }\n }\n }\n}\n\nfunction createStyleElement () {\n var styleElement = document.createElement('style')\n styleElement.type = 'text/css'\n head.appendChild(styleElement)\n return styleElement\n}\n\nfunction addStyle (obj /* StyleObjectPart */) {\n var update, remove\n var styleElement = document.querySelector('style[' + ssrIdKey + '~=\"' + obj.id + '\"]')\n\n if (styleElement) {\n if (isProduction) {\n // has SSR styles and in production mode.\n // simply do nothing.\n return noop\n } else {\n // has SSR styles but in dev mode.\n // for some reason Chrome can't handle source map in server-rendered\n // style tags - source maps in <style> only works if the style tag is\n // created and inserted dynamically. So we remove the server rendered\n // styles and inject new ones.\n styleElement.parentNode.removeChild(styleElement)\n }\n }\n\n if (isOldIE) {\n // use singleton mode for IE9.\n var styleIndex = singletonCounter++\n styleElement = singletonElement || (singletonElement = createStyleElement())\n update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)\n remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)\n } else {\n // use multi-style-tag mode in all other cases\n styleElement = createStyleElement()\n update = applyToTag.bind(null, styleElement)\n remove = function () {\n styleElement.parentNode.removeChild(styleElement)\n }\n }\n\n update(obj)\n\n return function updateStyle (newObj /* StyleObjectPart */) {\n if (newObj) {\n if (newObj.css === obj.css &&\n newObj.media === obj.media &&\n newObj.sourceMap === obj.sourceMap) {\n return\n }\n update(obj = newObj)\n } else {\n remove()\n }\n }\n}\n\nvar replaceText = (function () {\n var textStore = []\n\n return function (index, replacement) {\n textStore[index] = replacement\n return textStore.filter(Boolean).join('\\n')\n }\n})()\n\nfunction applyToSingletonTag (styleElement, index, remove, obj) {\n var css = remove ? '' : obj.css\n\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = replaceText(index, css)\n } else {\n var cssNode = document.createTextNode(css)\n var childNodes = styleElement.childNodes\n if (childNodes[index]) styleElement.removeChild(childNodes[index])\n if (childNodes.length) {\n styleElement.insertBefore(cssNode, childNodes[index])\n } else {\n styleElement.appendChild(cssNode)\n }\n }\n}\n\nfunction applyToTag (styleElement, obj) {\n var css = obj.css\n var media = obj.media\n var sourceMap = obj.sourceMap\n\n if (media) {\n styleElement.setAttribute('media', media)\n }\n if (options.ssrId) {\n styleElement.setAttribute(ssrIdKey, obj.id)\n }\n\n if (sourceMap) {\n // https://developer.chrome.com/devtools/docs/javascript-debugging\n // this makes source maps inside style tags work properly in Chrome\n css += '\\n/*# sourceURL=' + sourceMap.sources[0] + ' */'\n // http://stackoverflow.com/a/26603875\n css += '\\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'\n }\n\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild)\n }\n styleElement.appendChild(document.createTextNode(css))\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2xpYi9saXN0VG9TdHlsZXMuanM/OWJiYyIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzPzQ5OWUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUcmFuc2xhdGVzIHRoZSBsaXN0IGZvcm1hdCBwcm9kdWNlZCBieSBjc3MtbG9hZGVyIGludG8gc29tZXRoaW5nXG4gKiBlYXNpZXIgdG8gbWFuaXB1bGF0ZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGlzdFRvU3R5bGVzIChwYXJlbnRJZCwgbGlzdCkge1xuICB2YXIgc3R5bGVzID0gW11cbiAgdmFyIG5ld1N0eWxlcyA9IHt9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXVxuICAgIHZhciBpZCA9IGl0ZW1bMF1cbiAgICB2YXIgY3NzID0gaXRlbVsxXVxuICAgIHZhciBtZWRpYSA9IGl0ZW1bMl1cbiAgICB2YXIgc291cmNlTWFwID0gaXRlbVszXVxuICAgIHZhciBwYXJ0ID0ge1xuICAgICAgaWQ6IHBhcmVudElkICsgJzonICsgaSxcbiAgICAgIGNzczogY3NzLFxuICAgICAgbWVkaWE6IG1lZGlhLFxuICAgICAgc291cmNlTWFwOiBzb3VyY2VNYXBcbiAgICB9XG4gICAgaWYgKCFuZXdTdHlsZXNbaWRdKSB7XG4gICAgICBzdHlsZXMucHVzaChuZXdTdHlsZXNbaWRdID0geyBpZDogaWQsIHBhcnRzOiBbcGFydF0gfSlcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3U3R5bGVzW2lkXS5wYXJ0cy5wdXNoKHBhcnQpXG4gICAgfVxuICB9XG4gIHJldHVybiBzdHlsZXNcbn1cbiIsIi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiAgTW9kaWZpZWQgYnkgRXZhbiBZb3UgQHl5eDk5MDgwM1xuKi9cblxuaW1wb3J0IGxpc3RUb1N0eWxlcyBmcm9tICcuL2xpc3RUb1N0eWxlcydcblxudmFyIGhhc0RvY3VtZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuXG5pZiAodHlwZW9mIERFQlVHICE9PSAndW5kZWZpbmVkJyAmJiBERUJVRykge1xuICBpZiAoIWhhc0RvY3VtZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2dWUtc3R5bGUtbG9hZGVyIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQuICcgK1xuICAgIFwiVXNlIHsgdGFyZ2V0OiAnbm9kZScgfSBpbiB5b3VyIFdlYnBhY2sgY29uZmlnIHRvIGluZGljYXRlIGEgc2VydmVyLXJlbmRlcmluZyBlbnZpcm9ubWVudC5cIlxuICApIH1cbn1cblxuLypcbnR5cGUgU3R5bGVPYmplY3QgPSB7XG4gIGlkOiBudW1iZXI7XG4gIHBhcnRzOiBBcnJheTxTdHlsZU9iamVjdFBhcnQ+XG59XG5cbnR5cGUgU3R5bGVPYmplY3RQYXJ0ID0ge1xuICBjc3M6IHN0cmluZztcbiAgbWVkaWE6IHN0cmluZztcbiAgc291cmNlTWFwOiA/c3RyaW5nXG59XG4qL1xuXG52YXIgc3R5bGVzSW5Eb20gPSB7LypcbiAgW2lkOiBudW1iZXJdOiB7XG4gICAgaWQ6IG51bWJlcixcbiAgICByZWZzOiBudW1iZXIsXG4gICAgcGFydHM6IEFycmF5PChvYmo/OiBTdHlsZU9iamVjdFBhcnQpID0+IHZvaWQ+XG4gIH1cbiovfVxuXG52YXIgaGVhZCA9IGhhc0RvY3VtZW50ICYmIChkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0pXG52YXIgc2luZ2xldG9uRWxlbWVudCA9IG51bGxcbnZhciBzaW5nbGV0b25Db3VudGVyID0gMFxudmFyIGlzUHJvZHVjdGlvbiA9IGZhbHNlXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHt9XG52YXIgb3B0aW9ucyA9IG51bGxcbnZhciBzc3JJZEtleSA9ICdkYXRhLXZ1ZS1zc3ItaWQnXG5cbi8vIEZvcmNlIHNpbmdsZS10YWcgc29sdXRpb24gb24gSUU2LTksIHdoaWNoIGhhcyBhIGhhcmQgbGltaXQgb24gdGhlICMgb2YgPHN0eWxlPlxuLy8gdGFncyBpdCB3aWxsIGFsbG93IG9uIGEgcGFnZVxudmFyIGlzT2xkSUUgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAvbXNpZSBbNi05XVxcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZFN0eWxlc0NsaWVudCAocGFyZW50SWQsIGxpc3QsIF9pc1Byb2R1Y3Rpb24sIF9vcHRpb25zKSB7XG4gIGlzUHJvZHVjdGlvbiA9IF9pc1Byb2R1Y3Rpb25cblxuICBvcHRpb25zID0gX29wdGlvbnMgfHwge31cblxuICB2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKHBhcmVudElkLCBsaXN0KVxuICBhZGRTdHlsZXNUb0RvbShzdHlsZXMpXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAobmV3TGlzdCkge1xuICAgIHZhciBtYXlSZW1vdmUgPSBbXVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHN0eWxlc1tpXVxuICAgICAgdmFyIGRvbVN0eWxlID0gc3R5bGVzSW5Eb21baXRlbS5pZF1cbiAgICAgIGRvbVN0eWxlLnJlZnMtLVxuICAgICAgbWF5UmVtb3ZlLnB1c2goZG9tU3R5bGUpXG4gICAgfVxuICAgIGlmIChuZXdMaXN0KSB7XG4gICAgICBzdHlsZXMgPSBsaXN0VG9TdHlsZXMocGFyZW50SWQsIG5ld0xpc3QpXG4gICAgICBhZGRTdHlsZXNUb0RvbShzdHlsZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlcyA9IFtdXG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF5UmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZG9tU3R5bGUgPSBtYXlSZW1vdmVbaV1cbiAgICAgIGlmIChkb21TdHlsZS5yZWZzID09PSAwKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZG9tU3R5bGUucGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBkb21TdHlsZS5wYXJ0c1tqXSgpXG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHN0eWxlc0luRG9tW2RvbVN0eWxlLmlkXVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRTdHlsZXNUb0RvbSAoc3R5bGVzIC8qIEFycmF5PFN0eWxlT2JqZWN0PiAqLykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gc3R5bGVzW2ldXG4gICAgdmFyIGRvbVN0eWxlID0gc3R5bGVzSW5Eb21baXRlbS5pZF1cbiAgICBpZiAoZG9tU3R5bGUpIHtcbiAgICAgIGRvbVN0eWxlLnJlZnMrK1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBkb21TdHlsZS5wYXJ0c1tqXShpdGVtLnBhcnRzW2pdKVxuICAgICAgfVxuICAgICAgZm9yICg7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGRvbVN0eWxlLnBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSkpXG4gICAgICB9XG4gICAgICBpZiAoZG9tU3R5bGUucGFydHMubGVuZ3RoID4gaXRlbS5wYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgZG9tU3R5bGUucGFydHMubGVuZ3RoID0gaXRlbS5wYXJ0cy5sZW5ndGhcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHBhcnRzID0gW11cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBwYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0pKVxuICAgICAgfVxuICAgICAgc3R5bGVzSW5Eb21baXRlbS5pZF0gPSB7IGlkOiBpdGVtLmlkLCByZWZzOiAxLCBwYXJ0czogcGFydHMgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQgKCkge1xuICB2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKVxuICBzdHlsZUVsZW1lbnQudHlwZSA9ICd0ZXh0L2NzcydcbiAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpXG4gIHJldHVybiBzdHlsZUVsZW1lbnRcbn1cblxuZnVuY3Rpb24gYWRkU3R5bGUgKG9iaiAvKiBTdHlsZU9iamVjdFBhcnQgKi8pIHtcbiAgdmFyIHVwZGF0ZSwgcmVtb3ZlXG4gIHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzdHlsZVsnICsgc3NySWRLZXkgKyAnfj1cIicgKyBvYmouaWQgKyAnXCJdJylcblxuICBpZiAoc3R5bGVFbGVtZW50KSB7XG4gICAgaWYgKGlzUHJvZHVjdGlvbikge1xuICAgICAgLy8gaGFzIFNTUiBzdHlsZXMgYW5kIGluIHByb2R1Y3Rpb24gbW9kZS5cbiAgICAgIC8vIHNpbXBseSBkbyBub3RoaW5nLlxuICAgICAgcmV0dXJuIG5vb3BcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaGFzIFNTUiBzdHlsZXMgYnV0IGluIGRldiBtb2RlLlxuICAgICAgLy8gZm9yIHNvbWUgcmVhc29uIENocm9tZSBjYW4ndCBoYW5kbGUgc291cmNlIG1hcCBpbiBzZXJ2ZXItcmVuZGVyZWRcbiAgICAgIC8vIHN0eWxlIHRhZ3MgLSBzb3VyY2UgbWFwcyBpbiA8c3R5bGU+IG9ubHkgd29ya3MgaWYgdGhlIHN0eWxlIHRhZyBpc1xuICAgICAgLy8gY3JlYXRlZCBhbmQgaW5zZXJ0ZWQgZHluYW1pY2FsbHkuIFNvIHdlIHJlbW92ZSB0aGUgc2VydmVyIHJlbmRlcmVkXG4gICAgICAvLyBzdHlsZXMgYW5kIGluamVjdCBuZXcgb25lcy5cbiAgICAgIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudClcbiAgICB9XG4gIH1cblxuICBpZiAoaXNPbGRJRSkge1xuICAgIC8vIHVzZSBzaW5nbGV0b24gbW9kZSBmb3IgSUU5LlxuICAgIHZhciBzdHlsZUluZGV4ID0gc2luZ2xldG9uQ291bnRlcisrXG4gICAgc3R5bGVFbGVtZW50ID0gc2luZ2xldG9uRWxlbWVudCB8fCAoc2luZ2xldG9uRWxlbWVudCA9IGNyZWF0ZVN0eWxlRWxlbWVudCgpKVxuICAgIHVwZGF0ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZUVsZW1lbnQsIHN0eWxlSW5kZXgsIGZhbHNlKVxuICAgIHJlbW92ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZUVsZW1lbnQsIHN0eWxlSW5kZXgsIHRydWUpXG4gIH0gZWxzZSB7XG4gICAgLy8gdXNlIG11bHRpLXN0eWxlLXRhZyBtb2RlIGluIGFsbCBvdGhlciBjYXNlc1xuICAgIHN0eWxlRWxlbWVudCA9IGNyZWF0ZVN0eWxlRWxlbWVudCgpXG4gICAgdXBkYXRlID0gYXBwbHlUb1RhZy5iaW5kKG51bGwsIHN0eWxlRWxlbWVudClcbiAgICByZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgdXBkYXRlKG9iailcblxuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG5ld09iaiAvKiBTdHlsZU9iamVjdFBhcnQgKi8pIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJlxuICAgICAgICAgIG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmXG4gICAgICAgICAgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHVwZGF0ZShvYmogPSBuZXdPYmopXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICB9XG59XG5cbnZhciByZXBsYWNlVGV4dCA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXh0U3RvcmUgPSBbXVxuXG4gIHJldHVybiBmdW5jdGlvbiAoaW5kZXgsIHJlcGxhY2VtZW50KSB7XG4gICAgdGV4dFN0b3JlW2luZGV4XSA9IHJlcGxhY2VtZW50XG4gICAgcmV0dXJuIHRleHRTdG9yZS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJylcbiAgfVxufSkoKVxuXG5mdW5jdGlvbiBhcHBseVRvU2luZ2xldG9uVGFnIChzdHlsZUVsZW1lbnQsIGluZGV4LCByZW1vdmUsIG9iaikge1xuICB2YXIgY3NzID0gcmVtb3ZlID8gJycgOiBvYmouY3NzXG5cbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IHJlcGxhY2VUZXh0KGluZGV4LCBjc3MpXG4gIH0gZWxzZSB7XG4gICAgdmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpXG4gICAgdmFyIGNoaWxkTm9kZXMgPSBzdHlsZUVsZW1lbnQuY2hpbGROb2Rlc1xuICAgIGlmIChjaGlsZE5vZGVzW2luZGV4XSkgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKGNoaWxkTm9kZXNbaW5kZXhdKVxuICAgIGlmIChjaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgc3R5bGVFbGVtZW50Lmluc2VydEJlZm9yZShjc3NOb2RlLCBjaGlsZE5vZGVzW2luZGV4XSlcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGNzc05vZGUpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VG9UYWcgKHN0eWxlRWxlbWVudCwgb2JqKSB7XG4gIHZhciBjc3MgPSBvYmouY3NzXG4gIHZhciBtZWRpYSA9IG9iai5tZWRpYVxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcFxuXG4gIGlmIChtZWRpYSkge1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ21lZGlhJywgbWVkaWEpXG4gIH1cbiAgaWYgKG9wdGlvbnMuc3NySWQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKHNzcklkS2V5LCBvYmouaWQpXG4gIH1cblxuICBpZiAoc291cmNlTWFwKSB7XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9kZXZ0b29scy9kb2NzL2phdmFzY3JpcHQtZGVidWdnaW5nXG4gICAgLy8gdGhpcyBtYWtlcyBzb3VyY2UgbWFwcyBpbnNpZGUgc3R5bGUgdGFncyB3b3JrIHByb3Blcmx5IGluIENocm9tZVxuICAgIGNzcyArPSAnXFxuLyojIHNvdXJjZVVSTD0nICsgc291cmNlTWFwLnNvdXJjZXNbMF0gKyAnICovJ1xuICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2NjAzODc1XG4gICAgY3NzICs9ICdcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCcgKyBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpICsgJyAqLydcbiAgfVxuXG4gIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3NcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZClcbiAgICB9XG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJsaXN0VG9TdHlsZXMiLCJwYXJlbnRJZCIsImxpc3QiLCJzdHlsZXMiLCJuZXdTdHlsZXMiLCJpIiwibGVuZ3RoIiwiaXRlbSIsImlkIiwiY3NzIiwibWVkaWEiLCJzb3VyY2VNYXAiLCJwYXJ0IiwicHVzaCIsInBhcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8665\n\n}");
/***/ }
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ id: moduleId,
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/compat get default export */
/******/ (() => {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = (module) => {
/******/ var getter = module && module.__esModule ?
/******/ () => (module['default']) :
/******/ () => (module);
/******/ __webpack_require__.d(getter, { a: getter });
/******/ return getter;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = (exports, definition) => {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/global */
/******/ (() => {
/******/ __webpack_require__.g = (function() {
/******/ if (typeof globalThis === 'object') return globalThis;
/******/ try {
/******/ return this || new Function('return this')();
/******/ } catch (e) {
/******/ if (typeof window === 'object') return window;
/******/ }
/******/ })();
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ (() => {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = (exports) => {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/set anonymous default export name */
/******/ (() => {
/******/ // set .name for anonymous default exports per ES spec
/******/ __webpack_require__.dn = (x) => {
/******/ (Object.getOwnPropertyDescriptor(x, "name") || {}).writable || Object.defineProperty(x, "name", { value: "default", configurable: true });
/******/ };
/******/ })();
/******/
/************************************************************************/
/******/
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module can't be inlined because the eval-source-map devtool is used.
/******/ var __webpack_exports__ = __webpack_require__(8100);
/******/
/******/ })()
;